PluginProbe
Gutenberg / 24.1.0
Gutenberg v24.1.0
24.1.0 24.0.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 All 404 releases
gutenberg / build / modules / boot / index.js

index.js in Gutenberg 24.1.0, at build/modules/boot/index.js

13,564 lines 528.3 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/element
32 var require_element = __commonJS({
33 "package-external:@wordpress/element"(exports, module) {
34 module.exports = window.wp.element;
35 }
36 });
37
38 // package-external:@wordpress/data
39 var require_data = __commonJS({
40 "package-external:@wordpress/data"(exports, module) {
41 module.exports = window.wp.data;
42 }
43 });
44
45 // package-external:@wordpress/i18n
46 var require_i18n = __commonJS({
47 "package-external:@wordpress/i18n"(exports, module) {
48 module.exports = window.wp.i18n;
49 }
50 });
51
52 // vendor-external:react
53 var require_react = __commonJS({
54 "vendor-external:react"(exports, module) {
55 module.exports = window.React;
56 }
57 });
58
59 // vendor-external:react/jsx-runtime
60 var require_jsx_runtime = __commonJS({
61 "vendor-external:react/jsx-runtime"(exports, module) {
62 module.exports = window.ReactJSXRuntime;
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 === React48.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 = useState19({
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 useEffect18(
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 (error) {
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 React48 = require_react(), objectIs = "function" === typeof Object.is ? Object.is : is, useState19 = React48.useState, useEffect18 = React48.useEffect, useLayoutEffect3 = React48.useLayoutEffect, useDebugValue2 = React48.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 !== React48.useSyncExternalStore ? React48.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 React48 = require_react(), shim = require_shim(), objectIs = "function" === typeof Object.is ? Object.is : is, useSyncExternalStore3 = shim.useSyncExternalStore, useRef21 = React48.useRef, useEffect18 = React48.useEffect, useMemo22 = React48.useMemo, useDebugValue2 = React48.useDebugValue;
159 exports.useSyncExternalStoreWithSelector = function(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) {
160 var instRef = useRef21(null);
161 if (null === instRef.current) {
162 var inst = { hasValue: false, value: null };
163 instRef.current = inst;
164 } else inst = instRef.current;
165 instRef = useMemo22(
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 = useSyncExternalStore3(subscribe, instRef[0], instRef[1]);
201 useEffect18(
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/compose
229 var require_compose = __commonJS({
230 "package-external:@wordpress/compose"(exports, module) {
231 module.exports = window.wp.compose;
232 }
233 });
234
235 // package-external:@wordpress/theme
236 var require_theme = __commonJS({
237 "package-external:@wordpress/theme"(exports, module) {
238 module.exports = window.wp.theme;
239 }
240 });
241
242 // package-external:@wordpress/private-apis
243 var require_private_apis = __commonJS({
244 "package-external:@wordpress/private-apis"(exports, module) {
245 module.exports = window.wp.privateApis;
246 }
247 });
248
249 // package-external:@wordpress/primitives
250 var require_primitives = __commonJS({
251 "package-external:@wordpress/primitives"(exports, module) {
252 module.exports = window.wp.primitives;
253 }
254 });
255
256 // package-external:@wordpress/components
257 var require_components = __commonJS({
258 "package-external:@wordpress/components"(exports, module) {
259 module.exports = window.wp.components;
260 }
261 });
262
263 // package-external:@wordpress/core-data
264 var require_core_data = __commonJS({
265 "package-external:@wordpress/core-data"(exports, module) {
266 module.exports = window.wp.coreData;
267 }
268 });
269
270 // package-external:@wordpress/notices
271 var require_notices = __commonJS({
272 "package-external:@wordpress/notices"(exports, module) {
273 module.exports = window.wp.notices;
274 }
275 });
276
277 // package-external:@wordpress/editor
278 var require_editor = __commonJS({
279 "package-external:@wordpress/editor"(exports, module) {
280 module.exports = window.wp.editor;
281 }
282 });
283
284 // package-external:@wordpress/keycodes
285 var require_keycodes = __commonJS({
286 "package-external:@wordpress/keycodes"(exports, module) {
287 module.exports = window.wp.keycodes;
288 }
289 });
290
291 // package-external:@wordpress/keyboard-shortcuts
292 var require_keyboard_shortcuts = __commonJS({
293 "package-external:@wordpress/keyboard-shortcuts"(exports, module) {
294 module.exports = window.wp.keyboardShortcuts;
295 }
296 });
297
298 // package-external:@wordpress/dom
299 var require_dom = __commonJS({
300 "package-external:@wordpress/dom"(exports, module) {
301 module.exports = window.wp.dom;
302 }
303 });
304
305 // package-external:@wordpress/url
306 var require_url = __commonJS({
307 "package-external:@wordpress/url"(exports, module) {
308 module.exports = window.wp.url;
309 }
310 });
311
312 // package-external:@wordpress/html-entities
313 var require_html_entities = __commonJS({
314 "package-external:@wordpress/html-entities"(exports, module) {
315 module.exports = window.wp.htmlEntities;
316 }
317 });
318
319 // package-external:@wordpress/plugins
320 var require_plugins = __commonJS({
321 "package-external:@wordpress/plugins"(exports, module) {
322 module.exports = window.wp.plugins;
323 }
324 });
325
326 // packages/boot/build-module/components/app/index.mjs
327 var import_element44 = __toESM(require_element(), 1);
328 var import_data14 = __toESM(require_data(), 1);
329
330 // packages/boot/build-module/components/app/router.mjs
331 var import_i18n19 = __toESM(require_i18n(), 1);
332 var import_element42 = __toESM(require_element(), 1);
333
334 // node_modules/clsx/dist/clsx.mjs
335 function r(e) {
336 var t, f, n = "";
337 if ("string" == typeof e || "number" == typeof e) n += e;
338 else if ("object" == typeof e) if (Array.isArray(e)) {
339 var o = e.length;
340 for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
341 } else for (f in e) e[f] && (n && (n += " "), n += f);
342 return n;
343 }
344 function clsx() {
345 for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
346 return n;
347 }
348 var clsx_default = clsx;
349
350 // node_modules/@base-ui/utils/createLogOnce.mjs
351 var loggedMessages;
352 if (true) {
353 loggedMessages = /* @__PURE__ */ new Set();
354 }
355 function createLogOnce(severity, prefix) {
356 return function logOnce(...messages) {
357 if (true) {
358 const message = messages.join(" ");
359 const output = prefix ? `${prefix}: ${message}` : message;
360 const key = `${severity}:${output}`;
361 if (!loggedMessages.has(key)) {
362 loggedMessages.add(key);
363 if (severity === "warn") {
364 console.warn(output);
365 } else {
366 console.error(output);
367 }
368 }
369 }
370 };
371 }
372
373 // node_modules/@base-ui/utils/safeReact.mjs
374 var React = __toESM(require_react(), 1);
375 var SafeReact = {
376 ...React
377 };
378
379 // node_modules/@base-ui/utils/useRefWithInit.mjs
380 var React2 = __toESM(require_react(), 1);
381 var UNINITIALIZED = {};
382 function useRefWithInit(init2, initArg) {
383 const ref = React2.useRef(UNINITIALIZED);
384 if (ref.current === UNINITIALIZED) {
385 ref.current = init2(initArg);
386 }
387 return ref;
388 }
389
390 // node_modules/@base-ui/utils/useStableCallback.mjs
391 var useInsertionEffect = SafeReact.useInsertionEffect;
392 var useSafeInsertionEffect = (
393 // React 17 doesn't have useInsertionEffect.
394 useInsertionEffect && // Preact replaces useInsertionEffect with useLayoutEffect and fires too late.
395 useInsertionEffect !== SafeReact.useLayoutEffect ? useInsertionEffect : (fn) => fn()
396 );
397 function useStableCallback(callback) {
398 const stable = useRefWithInit(createStableCallback).current;
399 stable.next = callback;
400 useSafeInsertionEffect(stable.effect);
401 return stable.trampoline;
402 }
403 function createStableCallback() {
404 const stable = {
405 next: void 0,
406 callback: assertNotCalled,
407 trampoline: (...args) => stable.callback?.(...args),
408 effect: () => {
409 stable.callback = stable.next;
410 }
411 };
412 return stable;
413 }
414 function assertNotCalled() {
415 if (true) {
416 throw (
417 /* minify-error-disabled */
418 new Error("Base UI: Cannot call an event handler while rendering.")
419 );
420 }
421 }
422
423 // node_modules/@base-ui/utils/warn.mjs
424 var warn = createLogOnce("warn", "Base UI");
425
426 // node_modules/@base-ui/utils/empty.mjs
427 function NOOP() {
428 }
429 var EMPTY_ARRAY = Object.freeze([]);
430 var EMPTY_OBJECT = Object.freeze({});
431
432 // node_modules/@base-ui/utils/useIsoLayoutEffect.mjs
433 var React3 = __toESM(require_react(), 1);
434 var noop = () => {
435 };
436 var useIsoLayoutEffect = typeof document !== "undefined" ? React3.useLayoutEffect : noop;
437
438 // node_modules/@base-ui/react/internals/useRenderElement.mjs
439 var React6 = __toESM(require_react(), 1);
440
441 // node_modules/@base-ui/utils/useMergedRefs.mjs
442 function useMergedRefs(a, b, c, d) {
443 const forkRef = useRefWithInit(createForkRef).current;
444 if (didChange(forkRef, a, b, c, d)) {
445 update(forkRef, [a, b, c, d]);
446 }
447 return forkRef.callback;
448 }
449 function useMergedRefsN(refs) {
450 const forkRef = useRefWithInit(createForkRef).current;
451 if (didChangeN(forkRef, refs)) {
452 update(forkRef, refs);
453 }
454 return forkRef.callback;
455 }
456 function createForkRef() {
457 return {
458 callback: null,
459 cleanup: null,
460 refs: []
461 };
462 }
463 function didChange(forkRef, a, b, c, d) {
464 return forkRef.refs[0] !== a || forkRef.refs[1] !== b || forkRef.refs[2] !== c || forkRef.refs[3] !== d;
465 }
466 function didChangeN(forkRef, newRefs) {
467 return forkRef.refs.length !== newRefs.length || forkRef.refs.some((ref, index2) => ref !== newRefs[index2]);
468 }
469 function update(forkRef, refs) {
470 forkRef.refs = refs;
471 if (refs.every((ref) => ref == null)) {
472 forkRef.callback = null;
473 return;
474 }
475 forkRef.callback = (instance) => {
476 if (forkRef.cleanup) {
477 forkRef.cleanup();
478 forkRef.cleanup = null;
479 }
480 if (instance != null) {
481 const cleanupCallbacks = Array(refs.length).fill(null);
482 for (let i = 0; i < refs.length; i += 1) {
483 const ref = refs[i];
484 if (ref == null) {
485 continue;
486 }
487 switch (typeof ref) {
488 case "function": {
489 const refCleanup = ref(instance);
490 if (typeof refCleanup === "function") {
491 cleanupCallbacks[i] = refCleanup;
492 }
493 break;
494 }
495 case "object": {
496 ref.current = instance;
497 break;
498 }
499 default:
500 }
501 }
502 forkRef.cleanup = () => {
503 for (let i = 0; i < refs.length; i += 1) {
504 const ref = refs[i];
505 if (ref == null) {
506 continue;
507 }
508 switch (typeof ref) {
509 case "function": {
510 const cleanupCallback = cleanupCallbacks[i];
511 if (typeof cleanupCallback === "function") {
512 cleanupCallback();
513 } else {
514 void ref(null);
515 }
516 break;
517 }
518 case "object": {
519 ref.current = null;
520 break;
521 }
522 default:
523 }
524 }
525 };
526 }
527 };
528 }
529
530 // node_modules/@base-ui/utils/getReactElementRef.mjs
531 var React5 = __toESM(require_react(), 1);
532
533 // node_modules/@base-ui/utils/reactVersion.mjs
534 var React4 = __toESM(require_react(), 1);
535 var majorVersion = parseInt(React4.version, 10);
536 function isReactVersionAtLeast(reactVersionToCheck) {
537 return majorVersion >= reactVersionToCheck;
538 }
539
540 // node_modules/@base-ui/utils/getReactElementRef.mjs
541 function getReactElementRef(element) {
542 if (!/* @__PURE__ */ React5.isValidElement(element)) {
543 return null;
544 }
545 const reactElement = element;
546 const propsWithRef = reactElement.props;
547 return (isReactVersionAtLeast(19) ? propsWithRef?.ref : reactElement.ref) ?? null;
548 }
549
550 // node_modules/@base-ui/utils/mergeObjects.mjs
551 function mergeObjects(a, b) {
552 if (a && !b) {
553 return a;
554 }
555 if (!a && b) {
556 return b;
557 }
558 if (a || b) {
559 return {
560 ...a,
561 ...b
562 };
563 }
564 return void 0;
565 }
566
567 // node_modules/@base-ui/react/internals/getStateAttributesProps.mjs
568 function getStateAttributesProps(state, customMapping) {
569 const props = {};
570 for (const key in state) {
571 const value = state[key];
572 if (customMapping?.hasOwnProperty(key)) {
573 const customProps = customMapping[key](value);
574 if (customProps != null) {
575 Object.assign(props, customProps);
576 }
577 continue;
578 }
579 if (value === true) {
580 props[`data-${key.toLowerCase()}`] = "";
581 } else if (value) {
582 props[`data-${key.toLowerCase()}`] = value.toString();
583 }
584 }
585 return props;
586 }
587
588 // node_modules/@base-ui/react/utils/resolveClassName.mjs
589 function resolveClassName(className, state) {
590 return typeof className === "function" ? className(state) : className;
591 }
592
593 // node_modules/@base-ui/react/utils/resolveStyle.mjs
594 function resolveStyle(style, state) {
595 return typeof style === "function" ? style(state) : style;
596 }
597
598 // node_modules/@base-ui/react/merge-props/mergeProps.mjs
599 var EMPTY_PROPS = {};
600 function mergeProps(a, b, c, d, e) {
601 if (!c && !d && !e && !a) {
602 return createInitialMergedProps(b);
603 }
604 let merged = createInitialMergedProps(a);
605 if (b) {
606 merged = mergeInto(merged, b);
607 }
608 if (c) {
609 merged = mergeInto(merged, c);
610 }
611 if (d) {
612 merged = mergeInto(merged, d);
613 }
614 if (e) {
615 merged = mergeInto(merged, e);
616 }
617 return merged;
618 }
619 function mergePropsN(props) {
620 if (props.length === 0) {
621 return EMPTY_PROPS;
622 }
623 if (props.length === 1) {
624 return createInitialMergedProps(props[0]);
625 }
626 let merged = createInitialMergedProps(props[0]);
627 for (let i = 1; i < props.length; i += 1) {
628 merged = mergeInto(merged, props[i]);
629 }
630 return merged;
631 }
632 function createInitialMergedProps(inputProps) {
633 if (isPropsGetter(inputProps)) {
634 return {
635 ...resolvePropsGetter(inputProps, EMPTY_PROPS)
636 };
637 }
638 return copyInitialProps(inputProps);
639 }
640 function mergeInto(merged, inputProps) {
641 if (isPropsGetter(inputProps)) {
642 return resolvePropsGetter(inputProps, merged);
643 }
644 return mutablyMergeInto(merged, inputProps);
645 }
646 function copyInitialProps(inputProps) {
647 const copiedProps = {
648 ...inputProps
649 };
650 for (const propName in copiedProps) {
651 const propValue = copiedProps[propName];
652 if (isEventHandler(propName, propValue)) {
653 copiedProps[propName] = wrapEventHandler(propValue);
654 }
655 }
656 return copiedProps;
657 }
658 function mutablyMergeInto(mergedProps, externalProps) {
659 if (!externalProps) {
660 return mergedProps;
661 }
662 for (const propName in externalProps) {
663 const externalPropValue = externalProps[propName];
664 switch (propName) {
665 case "style": {
666 mergedProps[propName] = mergeObjects(mergedProps.style, externalPropValue);
667 break;
668 }
669 case "className": {
670 mergedProps[propName] = mergeClassNames(mergedProps.className, externalPropValue);
671 break;
672 }
673 default: {
674 if (isEventHandler(propName, externalPropValue)) {
675 mergedProps[propName] = mergeEventHandlers(mergedProps[propName], externalPropValue);
676 } else {
677 mergedProps[propName] = externalPropValue;
678 }
679 }
680 }
681 }
682 return mergedProps;
683 }
684 function isEventHandler(key, value) {
685 const code0 = key.charCodeAt(0);
686 const code1 = key.charCodeAt(1);
687 const code2 = key.charCodeAt(2);
688 return code0 === 111 && code1 === 110 && code2 >= 65 && code2 <= 90 && (typeof value === "function" || typeof value === "undefined");
689 }
690 function isPropsGetter(inputProps) {
691 return typeof inputProps === "function";
692 }
693 function resolvePropsGetter(inputProps, previousProps) {
694 if (isPropsGetter(inputProps)) {
695 return inputProps(previousProps);
696 }
697 return inputProps ?? EMPTY_PROPS;
698 }
699 function mergeEventHandlers(ourHandler, theirHandler) {
700 if (!theirHandler) {
701 return ourHandler;
702 }
703 if (!ourHandler) {
704 return wrapEventHandler(theirHandler);
705 }
706 return (...args) => {
707 const event = args[0];
708 if (isSyntheticEvent(event)) {
709 const baseUIEvent = event;
710 makeEventPreventable(baseUIEvent);
711 const result2 = theirHandler(...args);
712 if (!baseUIEvent.baseUIHandlerPrevented) {
713 ourHandler?.(...args);
714 }
715 return result2;
716 }
717 const result = theirHandler(...args);
718 ourHandler?.(...args);
719 return result;
720 };
721 }
722 function wrapEventHandler(handler) {
723 if (!handler) {
724 return handler;
725 }
726 return (...args) => {
727 const event = args[0];
728 if (isSyntheticEvent(event)) {
729 makeEventPreventable(event);
730 }
731 return handler(...args);
732 };
733 }
734 function makeEventPreventable(event) {
735 event.preventBaseUIHandler = () => {
736 event.baseUIHandlerPrevented = true;
737 };
738 return event;
739 }
740 function mergeClassNames(ourClassName, theirClassName) {
741 if (theirClassName) {
742 if (ourClassName) {
743 return theirClassName + " " + ourClassName;
744 }
745 return theirClassName;
746 }
747 return ourClassName;
748 }
749 function isSyntheticEvent(event) {
750 return event != null && typeof event === "object" && "nativeEvent" in event;
751 }
752
753 // node_modules/@base-ui/react/internals/useRenderElement.mjs
754 var import_react = __toESM(require_react(), 1);
755 function useRenderElement(element, componentProps, params = {}) {
756 let renderProp = componentProps.render;
757 if (params.enabled !== false) {
758 renderProp = unwrapLazyRenderProp(renderProp);
759 }
760 const outProps = useRenderElementProps(componentProps, params, renderProp);
761 if (params.enabled === false) {
762 return null;
763 }
764 const state = params.state ?? EMPTY_OBJECT;
765 return evaluateRenderProp(element, renderProp, outProps, state);
766 }
767 function useRenderElementProps(componentProps, params, renderProp) {
768 const {
769 className: classNameProp,
770 style: styleProp
771 } = componentProps;
772 const {
773 state = EMPTY_OBJECT,
774 ref,
775 props,
776 stateAttributesMapping,
777 enabled = true
778 } = params;
779 const className = enabled ? resolveClassName(classNameProp, state) : void 0;
780 const style = enabled ? resolveStyle(styleProp, state) : void 0;
781 const stateProps = enabled ? getStateAttributesProps(state, stateAttributesMapping) : EMPTY_OBJECT;
782 const resolvedProps = enabled && props ? resolveRenderFunctionProps(props) : void 0;
783 const outProps = enabled ? mergeObjects(stateProps, resolvedProps) ?? {} : EMPTY_OBJECT;
784 if (typeof document !== "undefined") {
785 if (!enabled) {
786 void useMergedRefs(null, null);
787 } else if (Array.isArray(ref)) {
788 outProps.ref = useMergedRefsN([outProps.ref, getReactElementRef(renderProp), ...ref]);
789 } else {
790 outProps.ref = useMergedRefs(outProps.ref, getReactElementRef(renderProp), ref);
791 }
792 }
793 if (!enabled) {
794 return EMPTY_OBJECT;
795 }
796 if (className !== void 0) {
797 outProps.className = mergeClassNames(outProps.className, className);
798 }
799 if (style !== void 0) {
800 outProps.style = mergeObjects(outProps.style, style);
801 }
802 return outProps;
803 }
804 function resolveRenderFunctionProps(props) {
805 if (Array.isArray(props)) {
806 return mergePropsN(props);
807 }
808 return mergeProps(void 0, props);
809 }
810 var REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for("react.lazy");
811 var COMPONENT_IDENTIFIER_PATTERN = /^[A-Z][A-Za-z0-9$]*$/;
812 var LOWERCASE_CHARACTER_PATTERN = /[a-z]/;
813 function unwrapLazyRenderProp(render) {
814 if (render?.$$typeof !== REACT_LAZY_TYPE) {
815 return render;
816 }
817 const unwrapped = React6.Children.toArray(render)[0];
818 return /* @__PURE__ */ React6.isValidElement(unwrapped) ? unwrapped : render;
819 }
820 function evaluateRenderProp(element, render, props, state) {
821 if (render) {
822 if (typeof render === "function") {
823 if (true) {
824 warnIfRenderPropLooksLikeComponent(render);
825 }
826 return render(props, state);
827 }
828 const mergedProps = mergeProps(props, render.props);
829 mergedProps.ref = props.ref;
830 if (true) {
831 if (!/* @__PURE__ */ React6.isValidElement(render)) {
832 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"));
833 }
834 }
835 return /* @__PURE__ */ React6.cloneElement(render, mergedProps);
836 }
837 if (element) {
838 if (typeof element === "string") {
839 return renderTag(element, props);
840 }
841 }
842 throw new Error(true ? "Base UI: Render element or function are not defined." : formatErrorMessage_default(8));
843 }
844 function warnIfRenderPropLooksLikeComponent(renderFn) {
845 const functionName = renderFn.name;
846 if (functionName.length === 0) {
847 return;
848 }
849 if (!COMPONENT_IDENTIFIER_PATTERN.test(functionName)) {
850 return;
851 }
852 if (!LOWERCASE_CHARACTER_PATTERN.test(functionName)) {
853 return;
854 }
855 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");
856 }
857 function renderTag(Tag, props) {
858 if (Tag === "button") {
859 return /* @__PURE__ */ (0, import_react.createElement)("button", {
860 type: "button",
861 ...props,
862 key: props.key
863 });
864 }
865 if (Tag === "img") {
866 return /* @__PURE__ */ (0, import_react.createElement)("img", {
867 alt: "",
868 ...props,
869 key: props.key
870 });
871 }
872 return /* @__PURE__ */ React6.createElement(Tag, props);
873 }
874
875 // node_modules/@base-ui/utils/useId.mjs
876 var React7 = __toESM(require_react(), 1);
877 var globalId = 0;
878 function useGlobalId(idOverride, prefix = "mui") {
879 const [defaultId, setDefaultId] = React7.useState(idOverride);
880 const id = idOverride || defaultId;
881 React7.useEffect(() => {
882 if (defaultId == null) {
883 globalId += 1;
884 setDefaultId(`${prefix}-${globalId}`);
885 }
886 }, [defaultId, prefix]);
887 return id;
888 }
889 var maybeReactUseId = SafeReact.useId;
890 function useId(idOverride, prefix) {
891 if (maybeReactUseId !== void 0) {
892 const reactId = maybeReactUseId();
893 return idOverride ?? (prefix ? `${prefix}-${reactId}` : reactId);
894 }
895 return useGlobalId(idOverride, prefix);
896 }
897
898 // node_modules/@base-ui/react/internals/useBaseUiId.mjs
899 function useBaseUiId(idOverride) {
900 return useId(idOverride, "base-ui");
901 }
902
903 // node_modules/@base-ui/react/internals/reason-parts.mjs
904 var reason_parts_exports = {};
905 __export(reason_parts_exports, {
906 cancelOpen: () => cancelOpen,
907 chipRemovePress: () => chipRemovePress,
908 clearPress: () => clearPress,
909 closePress: () => closePress,
910 closeWatcher: () => closeWatcher,
911 decrementPress: () => decrementPress,
912 disabled: () => disabled,
913 drag: () => drag,
914 escapeKey: () => escapeKey,
915 focusOut: () => focusOut,
916 imperativeAction: () => imperativeAction,
917 incrementPress: () => incrementPress,
918 initial: () => initial,
919 inputBlur: () => inputBlur,
920 inputChange: () => inputChange,
921 inputClear: () => inputClear,
922 inputPaste: () => inputPaste,
923 inputPress: () => inputPress,
924 itemPress: () => itemPress,
925 keyboard: () => keyboard,
926 linkPress: () => linkPress,
927 listNavigation: () => listNavigation,
928 missing: () => missing,
929 none: () => none,
930 outsidePress: () => outsidePress,
931 pointer: () => pointer,
932 scrub: () => scrub,
933 siblingOpen: () => siblingOpen,
934 swipe: () => swipe,
935 trackPress: () => trackPress,
936 triggerFocus: () => triggerFocus,
937 triggerHover: () => triggerHover,
938 triggerPress: () => triggerPress,
939 wheel: () => wheel,
940 windowResize: () => windowResize
941 });
942 var none = "none";
943 var triggerPress = "trigger-press";
944 var triggerHover = "trigger-hover";
945 var triggerFocus = "trigger-focus";
946 var outsidePress = "outside-press";
947 var itemPress = "item-press";
948 var closePress = "close-press";
949 var linkPress = "link-press";
950 var clearPress = "clear-press";
951 var chipRemovePress = "chip-remove-press";
952 var trackPress = "track-press";
953 var incrementPress = "increment-press";
954 var decrementPress = "decrement-press";
955 var inputChange = "input-change";
956 var inputClear = "input-clear";
957 var inputBlur = "input-blur";
958 var inputPaste = "input-paste";
959 var inputPress = "input-press";
960 var focusOut = "focus-out";
961 var escapeKey = "escape-key";
962 var closeWatcher = "close-watcher";
963 var listNavigation = "list-navigation";
964 var keyboard = "keyboard";
965 var pointer = "pointer";
966 var drag = "drag";
967 var wheel = "wheel";
968 var scrub = "scrub";
969 var cancelOpen = "cancel-open";
970 var siblingOpen = "sibling-open";
971 var disabled = "disabled";
972 var missing = "missing";
973 var initial = "initial";
974 var imperativeAction = "imperative-action";
975 var swipe = "swipe";
976 var windowResize = "window-resize";
977
978 // node_modules/@base-ui/react/internals/createBaseUIEventDetails.mjs
979 function createChangeEventDetails(reason, event, trigger, customProperties) {
980 let canceled = false;
981 let allowPropagation = false;
982 const custom = customProperties ?? EMPTY_OBJECT;
983 const details = {
984 reason,
985 event: event ?? new Event("base-ui"),
986 cancel() {
987 canceled = true;
988 },
989 allowPropagation() {
990 allowPropagation = true;
991 },
992 get isCanceled() {
993 return canceled;
994 },
995 get isPropagationAllowed() {
996 return allowPropagation;
997 },
998 trigger,
999 ...custom
1000 };
1001 return details;
1002 }
1003
1004 // node_modules/@base-ui/react/internals/useTransitionStatus.mjs
1005 var React9 = __toESM(require_react(), 1);
1006
1007 // node_modules/@base-ui/utils/useOnMount.mjs
1008 var React8 = __toESM(require_react(), 1);
1009 function useOnMount(fn) {
1010 React8.useEffect(fn, EMPTY_ARRAY);
1011 }
1012
1013 // node_modules/@base-ui/utils/useAnimationFrame.mjs
1014 var EMPTY = null;
1015 var LAST_RAF = globalThis.requestAnimationFrame;
1016 var Scheduler = class {
1017 /* This implementation uses an array as a backing data-structure for frame callbacks.
1018 * It allows `O(1)` callback cancelling by inserting a `null` in the array, though it
1019 * never calls the native `cancelAnimationFrame` if there are no frames left. This can
1020 * be much more efficient if there is a call pattern that alterns as
1021 * "request-cancel-request-cancel-…".
1022 * But in the case of "request-request-…-cancel-cancel-…", it leaves the final animation
1023 * frame to run anyway. We turn that frame into a `O(1)` no-op via `callbacksCount`. */
1024 callbacks = [];
1025 callbacksCount = 0;
1026 nextId = 1;
1027 startId = 1;
1028 isScheduled = false;
1029 tick = (timestamp) => {
1030 this.isScheduled = false;
1031 const currentCallbacks = this.callbacks;
1032 const currentCallbacksCount = this.callbacksCount;
1033 this.callbacks = [];
1034 this.callbacksCount = 0;
1035 this.startId = this.nextId;
1036 if (currentCallbacksCount > 0) {
1037 for (let i = 0; i < currentCallbacks.length; i += 1) {
1038 currentCallbacks[i]?.(timestamp);
1039 }
1040 }
1041 };
1042 request(fn) {
1043 const id = this.nextId;
1044 this.nextId += 1;
1045 this.callbacks.push(fn);
1046 this.callbacksCount += 1;
1047 const didRAFChange = LAST_RAF !== requestAnimationFrame && (LAST_RAF = requestAnimationFrame, true);
1048 if (!this.isScheduled || didRAFChange) {
1049 requestAnimationFrame(this.tick);
1050 this.isScheduled = true;
1051 }
1052 return id;
1053 }
1054 cancel(id) {
1055 const index2 = id - this.startId;
1056 if (index2 < 0 || index2 >= this.callbacks.length) {
1057 return;
1058 }
1059 if (this.callbacks[index2] === null) {
1060 return;
1061 }
1062 this.callbacks[index2] = null;
1063 this.callbacksCount -= 1;
1064 }
1065 };
1066 var scheduler = new Scheduler();
1067 var AnimationFrame = class _AnimationFrame {
1068 static create() {
1069 return new _AnimationFrame();
1070 }
1071 static request(fn) {
1072 return scheduler.request(fn);
1073 }
1074 static cancel(id) {
1075 return scheduler.cancel(id);
1076 }
1077 currentId = EMPTY;
1078 /**
1079 * Executes `fn` after `delay`, clearing any previously scheduled call.
1080 */
1081 request(fn) {
1082 this.cancel();
1083 this.currentId = scheduler.request(() => {
1084 this.currentId = EMPTY;
1085 fn();
1086 });
1087 }
1088 cancel = () => {
1089 if (this.currentId !== EMPTY) {
1090 scheduler.cancel(this.currentId);
1091 this.currentId = EMPTY;
1092 }
1093 };
1094 disposeEffect = () => {
1095 return this.cancel;
1096 };
1097 };
1098 function useAnimationFrame() {
1099 const timeout = useRefWithInit(AnimationFrame.create).current;
1100 useOnMount(timeout.disposeEffect);
1101 return timeout;
1102 }
1103
1104 // node_modules/@base-ui/react/internals/useTransitionStatus.mjs
1105 function useTransitionStatus(open2, enableIdleState = false, deferEndingState = false, animateInitialOpen = false) {
1106 const [transitionStatus, setTransitionStatus] = React9.useState(open2 && enableIdleState ? "idle" : void 0);
1107 const [mounted, setMounted] = React9.useState(open2 && !animateInitialOpen);
1108 if (open2 && !mounted) {
1109 setMounted(true);
1110 setTransitionStatus("starting");
1111 }
1112 if (!open2 && mounted && transitionStatus !== "ending" && !deferEndingState) {
1113 setTransitionStatus("ending");
1114 }
1115 if (!open2 && !mounted && transitionStatus === "ending") {
1116 setTransitionStatus(void 0);
1117 }
1118 useIsoLayoutEffect(() => {
1119 if (!open2 && mounted && transitionStatus !== "ending" && deferEndingState) {
1120 const frame = AnimationFrame.request(() => {
1121 setTransitionStatus("ending");
1122 });
1123 return () => {
1124 AnimationFrame.cancel(frame);
1125 };
1126 }
1127 return void 0;
1128 }, [open2, mounted, transitionStatus, deferEndingState]);
1129 useIsoLayoutEffect(() => {
1130 if (!open2 || enableIdleState) {
1131 return void 0;
1132 }
1133 const frame = AnimationFrame.request(() => {
1134 setTransitionStatus(void 0);
1135 });
1136 return () => {
1137 AnimationFrame.cancel(frame);
1138 };
1139 }, [enableIdleState, open2]);
1140 useIsoLayoutEffect(() => {
1141 if (!open2 || !enableIdleState) {
1142 return void 0;
1143 }
1144 if (open2 && mounted && transitionStatus !== "idle") {
1145 setTransitionStatus("starting");
1146 }
1147 const frame = AnimationFrame.request(() => {
1148 setTransitionStatus("idle");
1149 });
1150 return () => {
1151 AnimationFrame.cancel(frame);
1152 };
1153 }, [enableIdleState, open2, mounted, transitionStatus]);
1154 return {
1155 mounted,
1156 setMounted,
1157 transitionStatus
1158 };
1159 }
1160
1161 // node_modules/@base-ui/react/internals/TransitionStatusDataAttributes.mjs
1162 var startingStyle = "data-starting-style";
1163 var endingStyle = "data-ending-style";
1164
1165 // node_modules/@base-ui/react/internals/stateAttributesMapping.mjs
1166 var STARTING_HOOK = {
1167 [startingStyle]: ""
1168 };
1169 var ENDING_HOOK = {
1170 [endingStyle]: ""
1171 };
1172 var transitionStatusMapping = {
1173 transitionStatus(value) {
1174 if (value === "starting") {
1175 return STARTING_HOOK;
1176 }
1177 if (value === "ending") {
1178 return ENDING_HOOK;
1179 }
1180 return null;
1181 }
1182 };
1183
1184 // node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs
1185 function hasWindow() {
1186 return typeof window !== "undefined";
1187 }
1188 function getNodeName(node) {
1189 if (isNode(node)) {
1190 return (node.nodeName || "").toLowerCase();
1191 }
1192 return "#document";
1193 }
1194 function getWindow(node) {
1195 var _node$ownerDocument;
1196 return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;
1197 }
1198 function getDocumentElement(node) {
1199 var _ref;
1200 return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;
1201 }
1202 function isNode(value) {
1203 if (!hasWindow()) {
1204 return false;
1205 }
1206 return value instanceof Node || value instanceof getWindow(value).Node;
1207 }
1208 function isElement(value) {
1209 if (!hasWindow()) {
1210 return false;
1211 }
1212 return value instanceof Element || value instanceof getWindow(value).Element;
1213 }
1214 function isHTMLElement(value) {
1215 if (!hasWindow()) {
1216 return false;
1217 }
1218 return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;
1219 }
1220 function isShadowRoot(value) {
1221 if (!hasWindow() || typeof ShadowRoot === "undefined") {
1222 return false;
1223 }
1224 return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;
1225 }
1226 function isOverflowElement(element) {
1227 const {
1228 overflow,
1229 overflowX,
1230 overflowY,
1231 display
1232 } = getComputedStyle2(element);
1233 return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== "inline" && display !== "contents";
1234 }
1235 function isTableElement(element) {
1236 return /^(table|td|th)$/.test(getNodeName(element));
1237 }
1238 function isTopLayer(element) {
1239 try {
1240 if (element.matches(":popover-open")) {
1241 return true;
1242 }
1243 } catch (_e) {
1244 }
1245 try {
1246 return element.matches(":modal");
1247 } catch (_e) {
1248 return false;
1249 }
1250 }
1251 var willChangeRe = /transform|translate|scale|rotate|perspective|filter/;
1252 var containRe = /paint|layout|strict|content/;
1253 var isNotNone = (value) => !!value && value !== "none";
1254 var isWebKitValue;
1255 function isContainingBlock(elementOrCss) {
1256 const css = isElement(elementOrCss) ? getComputedStyle2(elementOrCss) : elementOrCss;
1257 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 || "");
1258 }
1259 function getContainingBlock(element) {
1260 let currentNode = getParentNode(element);
1261 while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {
1262 if (isContainingBlock(currentNode)) {
1263 return currentNode;
1264 } else if (isTopLayer(currentNode)) {
1265 return null;
1266 }
1267 currentNode = getParentNode(currentNode);
1268 }
1269 return null;
1270 }
1271 function isWebKit() {
1272 if (isWebKitValue == null) {
1273 isWebKitValue = typeof CSS !== "undefined" && CSS.supports && CSS.supports("-webkit-backdrop-filter", "none");
1274 }
1275 return isWebKitValue;
1276 }
1277 function isLastTraversableNode(node) {
1278 return /^(html|body|#document)$/.test(getNodeName(node));
1279 }
1280 function getComputedStyle2(element) {
1281 return getWindow(element).getComputedStyle(element);
1282 }
1283 function getNodeScroll(element) {
1284 if (isElement(element)) {
1285 return {
1286 scrollLeft: element.scrollLeft,
1287 scrollTop: element.scrollTop
1288 };
1289 }
1290 return {
1291 scrollLeft: element.scrollX,
1292 scrollTop: element.scrollY
1293 };
1294 }
1295 function getParentNode(node) {
1296 if (getNodeName(node) === "html") {
1297 return node;
1298 }
1299 const result = (
1300 // Step into the shadow DOM of the parent of a slotted node.
1301 node.assignedSlot || // DOM Element detected.
1302 node.parentNode || // ShadowRoot detected.
1303 isShadowRoot(node) && node.host || // Fallback.
1304 getDocumentElement(node)
1305 );
1306 return isShadowRoot(result) ? result.host : result;
1307 }
1308 function getNearestOverflowAncestor(node) {
1309 const parentNode = getParentNode(node);
1310 if (isLastTraversableNode(parentNode)) {
1311 return (node.ownerDocument || node).body;
1312 }
1313 if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {
1314 return parentNode;
1315 }
1316 return getNearestOverflowAncestor(parentNode);
1317 }
1318 function getOverflowAncestors(node, list, traverseIframes) {
1319 var _node$ownerDocument2;
1320 if (list === void 0) {
1321 list = [];
1322 }
1323 if (traverseIframes === void 0) {
1324 traverseIframes = true;
1325 }
1326 const scrollableAncestor = getNearestOverflowAncestor(node);
1327 const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);
1328 const win = getWindow(scrollableAncestor);
1329 if (isBody) {
1330 const frameElement = getFrameElement(win);
1331 return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);
1332 } else {
1333 return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));
1334 }
1335 }
1336 function getFrameElement(win) {
1337 return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;
1338 }
1339
1340 // node_modules/@base-ui/utils/owner.mjs
1341 function ownerDocument(node) {
1342 return node?.ownerDocument || document;
1343 }
1344
1345 // node_modules/@base-ui/utils/addEventListener.mjs
1346 function addEventListener(target, type, listener, options) {
1347 target.addEventListener(type, listener, options);
1348 return () => {
1349 target.removeEventListener(type, listener, options);
1350 };
1351 }
1352
1353 // node_modules/@base-ui/utils/useValueAsRef.mjs
1354 function useValueAsRef(value) {
1355 const latest = useRefWithInit(createLatestRef, value).current;
1356 latest.next = value;
1357 useIsoLayoutEffect(latest.effect);
1358 return latest;
1359 }
1360 function createLatestRef(value) {
1361 const latest = {
1362 current: value,
1363 next: value,
1364 effect: () => {
1365 latest.current = latest.next;
1366 }
1367 };
1368 return latest;
1369 }
1370
1371 // node_modules/@base-ui/react/internals/useOpenChangeComplete.mjs
1372 var React10 = __toESM(require_react(), 1);
1373
1374 // node_modules/@base-ui/react/internals/useAnimationsFinished.mjs
1375 var ReactDOM = __toESM(require_react_dom(), 1);
1376
1377 // node_modules/@base-ui/react/utils/resolveRef.mjs
1378 function resolveRef(maybeRef) {
1379 if (maybeRef == null) {
1380 return maybeRef;
1381 }
1382 return "current" in maybeRef ? maybeRef.current : maybeRef;
1383 }
1384
1385 // node_modules/@base-ui/react/internals/useAnimationsFinished.mjs
1386 var pendingCallbacks = null;
1387 function flushBeforePaint(fn) {
1388 if (!pendingCallbacks) {
1389 const callbacks = [];
1390 pendingCallbacks = callbacks;
1391 queueMicrotask(() => {
1392 pendingCallbacks = null;
1393 ReactDOM.flushSync(() => {
1394 for (const callback of callbacks) {
1395 callback();
1396 }
1397 });
1398 });
1399 }
1400 pendingCallbacks.push(fn);
1401 }
1402 function useAnimationsFinished(elementOrRef, waitForStartingStyleRemoved = false, batch = false) {
1403 const frame = useAnimationFrame();
1404 return useStableCallback((fnToExecute, signal = null) => {
1405 frame.cancel();
1406 const element = resolveRef(elementOrRef);
1407 if (element == null) {
1408 return;
1409 }
1410 const resolvedElement = element;
1411 const done = () => {
1412 if (!batch) {
1413 ReactDOM.flushSync(fnToExecute);
1414 return;
1415 }
1416 flushBeforePaint(() => {
1417 if (!signal?.aborted) {
1418 fnToExecute();
1419 }
1420 });
1421 };
1422 if (typeof resolvedElement.getAnimations !== "function" || globalThis.BASE_UI_ANIMATIONS_DISABLED) {
1423 fnToExecute();
1424 return;
1425 }
1426 function exec() {
1427 Promise.all(resolvedElement.getAnimations().map((animation) => animation.finished)).then(() => {
1428 if (!signal?.aborted) {
1429 done();
1430 }
1431 }, () => {
1432 if (signal?.aborted) {
1433 return;
1434 }
1435 const currentAnimations = resolvedElement.getAnimations();
1436 if (currentAnimations.some((animation) => animation.pending || animation.playState !== "finished")) {
1437 exec();
1438 return;
1439 }
1440 done();
1441 });
1442 }
1443 if (waitForStartingStyleRemoved) {
1444 const startingStyleAttribute = startingStyle;
1445 if (!resolvedElement.hasAttribute(startingStyleAttribute)) {
1446 frame.request(exec);
1447 return;
1448 }
1449 const attributeObserver = new MutationObserver(() => {
1450 if (!resolvedElement.hasAttribute(startingStyleAttribute)) {
1451 attributeObserver.disconnect();
1452 exec();
1453 }
1454 });
1455 attributeObserver.observe(resolvedElement, {
1456 attributes: true,
1457 attributeFilter: [startingStyleAttribute]
1458 });
1459 signal?.addEventListener("abort", () => attributeObserver.disconnect(), {
1460 once: true
1461 });
1462 return;
1463 }
1464 frame.request(exec);
1465 });
1466 }
1467
1468 // node_modules/@base-ui/react/internals/useOpenChangeComplete.mjs
1469 function useOpenChangeComplete(parameters) {
1470 const {
1471 enabled = true,
1472 open: open2,
1473 ref,
1474 batch = false,
1475 onComplete: onCompleteParam
1476 } = parameters;
1477 const onComplete = useStableCallback(onCompleteParam);
1478 const runOnceAnimationsFinish = useAnimationsFinished(ref, open2, batch);
1479 React10.useEffect(() => {
1480 if (!enabled) {
1481 return void 0;
1482 }
1483 const abortController = new AbortController();
1484 runOnceAnimationsFinish(onComplete, abortController.signal);
1485 return () => {
1486 abortController.abort();
1487 };
1488 }, [enabled, open2, onComplete, runOnceAnimationsFinish]);
1489 }
1490
1491 // node_modules/@base-ui/utils/platform/parts.mjs
1492 var parts_exports = {};
1493 __export(parts_exports, {
1494 engine: () => engine_exports,
1495 env: () => env_exports,
1496 mediaQuery: () => media_query_exports,
1497 os: () => os_exports,
1498 screenReader: () => screen_reader_exports
1499 });
1500
1501 // node_modules/@base-ui/utils/platform/os.mjs
1502 var os_exports = {};
1503 __export(os_exports, {
1504 android: () => android,
1505 apple: () => apple,
1506 ios: () => ios,
1507 linux: () => linux,
1508 mac: () => mac,
1509 windows: () => windows
1510 });
1511
1512 // node_modules/@base-ui/utils/platform/shared.mjs
1513 function readRawData() {
1514 if (typeof navigator === "undefined") {
1515 return {
1516 userAgent: "",
1517 platform: "",
1518 maxTouchPoints: 0
1519 };
1520 }
1521 if (true) {
1522 const uaData = navigator.userAgentData;
1523 if (uaData && Array.isArray(uaData.brands)) {
1524 return {
1525 userAgent: uaData.brands.map(({
1526 brand,
1527 version: version2
1528 }) => `${brand}/${version2}`).join(" "),
1529 platform: uaData.platform ?? navigator.platform ?? "",
1530 maxTouchPoints: navigator.maxTouchPoints ?? 0
1531 };
1532 }
1533 }
1534 return {
1535 userAgent: navigator.userAgent,
1536 platform: navigator.platform ?? "",
1537 maxTouchPoints: navigator.maxTouchPoints ?? 0
1538 };
1539 }
1540 var {
1541 userAgent,
1542 platform,
1543 maxTouchPoints
1544 } = readRawData();
1545 var lowerUserAgent = userAgent.toLowerCase();
1546 var lowerPlatform = platform.toLowerCase();
1547
1548 // node_modules/@base-ui/utils/platform/os.mjs
1549 var ios = /^i(os$|p)/.test(lowerPlatform) || lowerPlatform === "macintel" && maxTouchPoints > 1;
1550 var ANDROID_STRING = "android";
1551 var android = lowerPlatform === ANDROID_STRING || lowerUserAgent.includes(ANDROID_STRING);
1552 var mac = !ios && lowerPlatform.startsWith("mac");
1553 var windows = lowerPlatform.startsWith("win");
1554 var linux = !android && /^(linux|chrome os)/.test(lowerPlatform);
1555 var apple = mac || ios;
1556
1557 // node_modules/@base-ui/utils/platform/engine.mjs
1558 var engine_exports = {};
1559 __export(engine_exports, {
1560 blink: () => blink,
1561 gecko: () => gecko,
1562 webkit: () => webkit
1563 });
1564 var webkit = typeof CSS !== "undefined" && !!CSS.supports?.("-webkit-backdrop-filter:none");
1565 var gecko = !webkit && lowerUserAgent.includes("firefox");
1566 var blink = !webkit && lowerUserAgent.includes("chrom");
1567
1568 // node_modules/@base-ui/utils/platform/screen-reader.mjs
1569 var screen_reader_exports = {};
1570 __export(screen_reader_exports, {
1571 voiceOver: () => voiceOver
1572 });
1573 var voiceOver = apple;
1574
1575 // node_modules/@base-ui/utils/platform/env.mjs
1576 var env_exports = {};
1577 __export(env_exports, {
1578 jsdom: () => jsdom
1579 });
1580 var jsdom = /jsdom|happydom/.test(lowerUserAgent);
1581
1582 // node_modules/@base-ui/utils/platform/media-query.mjs
1583 var media_query_exports = {};
1584 __export(media_query_exports, {
1585 iOS: () => iOS
1586 });
1587 var iOS = "@supports (-webkit-touch-callout: none)";
1588
1589 // node_modules/@base-ui/utils/useTimeout.mjs
1590 var EMPTY2 = 0;
1591 var Timeout = class _Timeout {
1592 static create() {
1593 return new _Timeout();
1594 }
1595 currentId = EMPTY2;
1596 /**
1597 * Executes `fn` after `delay`, clearing any previously scheduled call.
1598 */
1599 start(delay, fn) {
1600 this.clear();
1601 this.currentId = setTimeout(() => {
1602 this.currentId = EMPTY2;
1603 fn();
1604 }, delay);
1605 }
1606 isStarted() {
1607 return this.currentId !== EMPTY2;
1608 }
1609 clear = () => {
1610 if (this.currentId !== EMPTY2) {
1611 clearTimeout(this.currentId);
1612 this.currentId = EMPTY2;
1613 }
1614 };
1615 disposeEffect = () => {
1616 return this.clear;
1617 };
1618 };
1619 function useTimeout() {
1620 const timeout = useRefWithInit(Timeout.create).current;
1621 useOnMount(timeout.disposeEffect);
1622 return timeout;
1623 }
1624
1625 // node_modules/@base-ui/react/floating-ui-react/components/FloatingDelayGroup.mjs
1626 var React11 = __toESM(require_react(), 1);
1627
1628 // node_modules/@base-ui/react/floating-ui-react/utils/event.mjs
1629 function isReactEvent(event) {
1630 return "nativeEvent" in event;
1631 }
1632 function isVirtualClick(event) {
1633 if (event.pointerType === "" && event.isTrusted) {
1634 return true;
1635 }
1636 if (parts_exports.os.android && event.pointerType) {
1637 return event.type === "click" && event.buttons === 1;
1638 }
1639 return event.detail === 0 && !event.pointerType;
1640 }
1641 function isMouseLikePointerType(pointerType, strict) {
1642 const values = ["mouse", "pen"];
1643 if (!strict) {
1644 values.push("", void 0);
1645 }
1646 return values.includes(pointerType);
1647 }
1648 function isClickLikeEvent(event) {
1649 const type = event.type;
1650 return type === "click" || type === "mousedown" || type === "keydown" || type === "keyup";
1651 }
1652
1653 // node_modules/@base-ui/utils/shadowDom.mjs
1654 function activeElement(doc) {
1655 let element = doc.activeElement;
1656 while (element?.shadowRoot?.activeElement != null) {
1657 element = element.shadowRoot.activeElement;
1658 }
1659 return element;
1660 }
1661 function contains(parent, child) {
1662 if (!parent || !child) {
1663 return false;
1664 }
1665 const rootNode = child.getRootNode?.();
1666 if (parent.contains(child)) {
1667 return true;
1668 }
1669 if (rootNode && isShadowRoot(rootNode)) {
1670 let next = child;
1671 while (next) {
1672 if (parent === next) {
1673 return true;
1674 }
1675 next = next.parentNode || next.host;
1676 }
1677 }
1678 return false;
1679 }
1680 function getTarget(event) {
1681 if ("composedPath" in event) {
1682 return event.composedPath()[0] ?? event.target;
1683 }
1684 return event.target;
1685 }
1686
1687 // node_modules/@base-ui/react/floating-ui-react/utils/constants.mjs
1688 var FOCUSABLE_ATTRIBUTE = "data-base-ui-focusable";
1689 var TYPEABLE_SELECTOR = "input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])";
1690
1691 // node_modules/@base-ui/react/utils/CommonPopupDataAttributes.mjs
1692 var open = "data-open";
1693 var closed = "data-closed";
1694 var anchorHidden = "data-anchor-hidden";
1695
1696 // node_modules/@base-ui/react/utils/CommonTriggerDataAttributes.mjs
1697 var CommonTriggerDataAttributes_exports = {};
1698 __export(CommonTriggerDataAttributes_exports, {
1699 popupOpen: () => popupOpen,
1700 pressed: () => pressed
1701 });
1702 var popupOpen = "data-popup-open";
1703 var pressed = "data-pressed";
1704
1705 // node_modules/@base-ui/react/utils/popupStateMapping.mjs
1706 var TRIGGER_HOOK = {
1707 [popupOpen]: ""
1708 };
1709 var PRESSABLE_TRIGGER_HOOK = {
1710 [popupOpen]: "",
1711 [pressed]: ""
1712 };
1713 var POPUP_OPEN_HOOK = {
1714 [open]: ""
1715 };
1716 var POPUP_CLOSED_HOOK = {
1717 [closed]: ""
1718 };
1719 var ANCHOR_HIDDEN_HOOK = {
1720 [anchorHidden]: ""
1721 };
1722 var triggerOpenStateMapping = {
1723 open(value) {
1724 if (value) {
1725 return TRIGGER_HOOK;
1726 }
1727 return null;
1728 }
1729 };
1730 var popupStateMapping = {
1731 open(value) {
1732 if (value) {
1733 return POPUP_OPEN_HOOK;
1734 }
1735 return POPUP_CLOSED_HOOK;
1736 },
1737 anchorHidden(value) {
1738 if (value) {
1739 return ANCHOR_HIDDEN_HOOK;
1740 }
1741 return null;
1742 }
1743 };
1744 var popupTransitionStateMapping = {
1745 ...popupStateMapping,
1746 ...transitionStatusMapping
1747 };
1748
1749 // node_modules/@base-ui/react/tooltip/trigger/TooltipTriggerDataAttributes.mjs
1750 var popupOpen2 = CommonTriggerDataAttributes_exports.popupOpen;
1751 var triggerDisabled = "data-trigger-disabled";
1752
1753 // node_modules/@base-ui/react/floating-ui-react/utils/element.mjs
1754 function isTargetInsideEnabledTrigger(target, triggerElements) {
1755 if (!isElement(target)) {
1756 return false;
1757 }
1758 const targetElement = target;
1759 if (triggerElements.hasElement(targetElement)) {
1760 return !targetElement.hasAttribute(triggerDisabled);
1761 }
1762 for (const [, trigger] of triggerElements.entries()) {
1763 if (contains(trigger, targetElement)) {
1764 return !trigger.hasAttribute(triggerDisabled);
1765 }
1766 }
1767 return false;
1768 }
1769 function isEventTargetWithin(event, node) {
1770 if (node == null) {
1771 return false;
1772 }
1773 if ("composedPath" in event) {
1774 return event.composedPath().includes(node);
1775 }
1776 const eventAgain = event;
1777 return eventAgain.target != null && node.contains(eventAgain.target);
1778 }
1779 function isRootElement(element) {
1780 return element.matches("html,body");
1781 }
1782 function isTypeableElement(element) {
1783 return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR);
1784 }
1785 function isInteractiveElement(element) {
1786 return element?.closest(`button,a[href],[role="button"],select,[tabindex]:not([tabindex="-1"]),${TYPEABLE_SELECTOR}`) != null;
1787 }
1788 function matchesFocusVisible(element) {
1789 if (!element || parts_exports.env.jsdom) {
1790 return true;
1791 }
1792 try {
1793 return element.matches(":focus-visible");
1794 } catch (_e) {
1795 return true;
1796 }
1797 }
1798
1799 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverShared.mjs
1800 function resolveValue(value, pointerType) {
1801 if (pointerType != null && !isMouseLikePointerType(pointerType)) {
1802 return 0;
1803 }
1804 if (typeof value === "function") {
1805 return value();
1806 }
1807 return value;
1808 }
1809 function getDelay(value, prop, pointerType) {
1810 const result = resolveValue(value, pointerType);
1811 if (typeof result === "number") {
1812 return result;
1813 }
1814 return result?.[prop];
1815 }
1816 function getRestMs(value) {
1817 if (typeof value === "function") {
1818 return value();
1819 }
1820 return value;
1821 }
1822 function isClickLikeOpenEvent(openEventType, interactedInside) {
1823 return interactedInside || openEventType === "click" || openEventType === "mousedown";
1824 }
1825 function isHoverOpenEvent(openEventType) {
1826 return openEventType?.includes("mouse") && openEventType !== "mousedown";
1827 }
1828
1829 // node_modules/@base-ui/react/floating-ui-react/components/FloatingDelayGroup.mjs
1830 var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
1831 var FloatingDelayGroupContext = /* @__PURE__ */ React11.createContext({
1832 hasProvider: false,
1833 timeoutMs: 0,
1834 delayRef: {
1835 current: 0
1836 },
1837 initialDelayRef: {
1838 current: 0
1839 },
1840 timeout: new Timeout(),
1841 currentIdRef: {
1842 current: null
1843 },
1844 currentContextRef: {
1845 current: null
1846 }
1847 });
1848 if (true) FloatingDelayGroupContext.displayName = "FloatingDelayGroupContext";
1849 function resetDelayRef(delayRef, initialDelayRef) {
1850 delayRef.current = initialDelayRef.current;
1851 }
1852 function FloatingDelayGroup(props) {
1853 const {
1854 children,
1855 delay,
1856 timeoutMs = 0
1857 } = props;
1858 const delayRef = React11.useRef(delay);
1859 const initialDelayRef = React11.useRef(delay);
1860 const currentIdRef = React11.useRef(null);
1861 const currentContextRef = React11.useRef(null);
1862 const timeout = useTimeout();
1863 useIsoLayoutEffect(() => {
1864 initialDelayRef.current = delay;
1865 if (!currentIdRef.current) {
1866 delayRef.current = delay;
1867 return;
1868 }
1869 delayRef.current = {
1870 open: getDelay(delayRef.current, "open"),
1871 close: getDelay(delay, "close")
1872 };
1873 }, [delay, currentIdRef, delayRef, initialDelayRef]);
1874 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FloatingDelayGroupContext.Provider, {
1875 value: React11.useMemo(() => ({
1876 hasProvider: true,
1877 delayRef,
1878 initialDelayRef,
1879 currentIdRef,
1880 timeoutMs,
1881 currentContextRef,
1882 timeout
1883 }), [timeoutMs, timeout]),
1884 children
1885 });
1886 }
1887 function useDelayGroup(context, options = {
1888 open: false
1889 }) {
1890 const {
1891 open: open2
1892 } = options;
1893 const store2 = "rootStore" in context ? context.rootStore : context;
1894 const floatingId = store2.useState("floatingId");
1895 const groupContext = React11.useContext(FloatingDelayGroupContext);
1896 const {
1897 currentIdRef,
1898 delayRef,
1899 timeoutMs,
1900 initialDelayRef,
1901 currentContextRef,
1902 hasProvider,
1903 timeout
1904 } = groupContext;
1905 const [isInstantPhase, setIsInstantPhase] = React11.useState(false);
1906 const openRef = React11.useRef(open2);
1907 useIsoLayoutEffect(() => {
1908 openRef.current = open2;
1909 }, [open2]);
1910 useIsoLayoutEffect(() => {
1911 function unset() {
1912 currentContextRef.current?.setIsInstantPhase(false);
1913 currentIdRef.current = null;
1914 currentContextRef.current = null;
1915 delayRef.current = initialDelayRef.current;
1916 timeout.clear();
1917 }
1918 if (!currentIdRef.current) {
1919 return void 0;
1920 }
1921 if (!open2 && currentIdRef.current === floatingId) {
1922 setIsInstantPhase(false);
1923 if (timeoutMs) {
1924 const closingId = floatingId;
1925 timeout.start(timeoutMs, () => {
1926 if (store2.select("open") || currentIdRef.current && currentIdRef.current !== closingId) {
1927 return;
1928 }
1929 unset();
1930 });
1931 return () => {
1932 if (openRef.current || currentIdRef.current !== closingId) {
1933 timeout.clear();
1934 }
1935 };
1936 }
1937 unset();
1938 }
1939 return void 0;
1940 }, [open2, floatingId, currentIdRef, delayRef, timeoutMs, initialDelayRef, currentContextRef, timeout, store2]);
1941 useIsoLayoutEffect(() => {
1942 if (!open2) {
1943 return;
1944 }
1945 const prevContext = currentContextRef.current;
1946 const prevId = currentIdRef.current;
1947 timeout.clear();
1948 currentContextRef.current = {
1949 onOpenChange: store2.setOpen,
1950 setIsInstantPhase
1951 };
1952 currentIdRef.current = floatingId;
1953 delayRef.current = {
1954 open: 0,
1955 close: getDelay(initialDelayRef.current, "close")
1956 };
1957 if (prevId !== null && prevId !== floatingId) {
1958 setIsInstantPhase(true);
1959 prevContext?.setIsInstantPhase(true);
1960 prevContext?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.none));
1961 } else {
1962 setIsInstantPhase(false);
1963 prevContext?.setIsInstantPhase(false);
1964 }
1965 }, [open2, floatingId, store2, currentIdRef, delayRef, initialDelayRef, currentContextRef, timeout]);
1966 useIsoLayoutEffect(() => {
1967 return () => {
1968 if (currentIdRef.current === floatingId) {
1969 currentContextRef.current = null;
1970 if (!openRef.current) {
1971 return;
1972 }
1973 currentIdRef.current = null;
1974 resetDelayRef(delayRef, initialDelayRef);
1975 timeout.clear();
1976 }
1977 };
1978 }, [currentContextRef, currentIdRef, delayRef, floatingId, initialDelayRef, timeout]);
1979 return React11.useMemo(() => ({
1980 activeIdRef: currentIdRef,
1981 hasProvider,
1982 delayRef,
1983 isInstantPhase
1984 }), [currentIdRef, hasProvider, delayRef, isInstantPhase]);
1985 }
1986
1987 // node_modules/@base-ui/utils/mergeCleanups.mjs
1988 function mergeCleanups(...cleanups) {
1989 return () => {
1990 for (let i = 0; i < cleanups.length; i += 1) {
1991 const cleanup = cleanups[i];
1992 if (cleanup) {
1993 cleanup();
1994 }
1995 }
1996 };
1997 }
1998
1999 // node_modules/@base-ui/react/utils/FocusGuard.mjs
2000 var React12 = __toESM(require_react(), 1);
2001
2002 // node_modules/@base-ui/utils/visuallyHidden.mjs
2003 var visuallyHiddenBase = {
2004 clipPath: "inset(50%)",
2005 overflow: "hidden",
2006 whiteSpace: "nowrap",
2007 border: 0,
2008 padding: 0,
2009 width: 1,
2010 height: 1,
2011 margin: -1
2012 };
2013 var visuallyHidden = {
2014 ...visuallyHiddenBase,
2015 position: "fixed",
2016 top: 0,
2017 left: 0
2018 };
2019 var visuallyHiddenInput = {
2020 ...visuallyHiddenBase,
2021 position: "absolute"
2022 };
2023
2024 // node_modules/@base-ui/react/utils/FocusGuard.mjs
2025 var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1);
2026 var FocusGuard = /* @__PURE__ */ React12.forwardRef(function FocusGuard2(props, ref) {
2027 const [role, setRole] = React12.useState();
2028 useIsoLayoutEffect(() => {
2029 if (parts_exports.screenReader.voiceOver && parts_exports.engine.webkit) {
2030 setRole("button");
2031 }
2032 }, []);
2033 const restProps = {
2034 tabIndex: 0,
2035 // Role is only for VoiceOver
2036 role
2037 };
2038 return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", {
2039 ...props,
2040 ref,
2041 style: visuallyHidden,
2042 "aria-hidden": role ? void 0 : true,
2043 ...restProps,
2044 "data-base-ui-focus-guard": ""
2045 });
2046 });
2047 if (true) FocusGuard.displayName = "FocusGuard";
2048
2049 // node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs
2050 var min = Math.min;
2051 var max = Math.max;
2052 var round = Math.round;
2053 var floor = Math.floor;
2054 var createCoords = (v) => ({
2055 x: v,
2056 y: v
2057 });
2058 var oppositeSideMap = {
2059 left: "right",
2060 right: "left",
2061 bottom: "top",
2062 top: "bottom"
2063 };
2064 function clamp(start, value, end) {
2065 return max(start, min(value, end));
2066 }
2067 function evaluate(value, param) {
2068 return typeof value === "function" ? value(param) : value;
2069 }
2070 function getSide(placement) {
2071 return placement.split("-")[0];
2072 }
2073 function getAlignment(placement) {
2074 return placement.split("-")[1];
2075 }
2076 function getOppositeAxis(axis) {
2077 return axis === "x" ? "y" : "x";
2078 }
2079 function getAxisLength(axis) {
2080 return axis === "y" ? "height" : "width";
2081 }
2082 function getSideAxis(placement) {
2083 const firstChar = placement[0];
2084 return firstChar === "t" || firstChar === "b" ? "y" : "x";
2085 }
2086 function getAlignmentAxis(placement) {
2087 return getOppositeAxis(getSideAxis(placement));
2088 }
2089 function getAlignmentSides(placement, rects, rtl) {
2090 if (rtl === void 0) {
2091 rtl = false;
2092 }
2093 const alignment = getAlignment(placement);
2094 const alignmentAxis = getAlignmentAxis(placement);
2095 const length = getAxisLength(alignmentAxis);
2096 let mainAlignmentSide = alignmentAxis === "x" ? alignment === (rtl ? "end" : "start") ? "right" : "left" : alignment === "start" ? "bottom" : "top";
2097 if (rects.reference[length] > rects.floating[length]) {
2098 mainAlignmentSide = getOppositePlacement(mainAlignmentSide);
2099 }
2100 return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];
2101 }
2102 function getExpandedPlacements(placement) {
2103 const oppositePlacement = getOppositePlacement(placement);
2104 return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];
2105 }
2106 function getOppositeAlignmentPlacement(placement) {
2107 return placement.includes("start") ? placement.replace("start", "end") : placement.replace("end", "start");
2108 }
2109 var lrPlacement = ["left", "right"];
2110 var rlPlacement = ["right", "left"];
2111 var tbPlacement = ["top", "bottom"];
2112 var btPlacement = ["bottom", "top"];
2113 function getSideList(side, isStart, rtl) {
2114 switch (side) {
2115 case "top":
2116 case "bottom":
2117 if (rtl) return isStart ? rlPlacement : lrPlacement;
2118 return isStart ? lrPlacement : rlPlacement;
2119 case "left":
2120 case "right":
2121 return isStart ? tbPlacement : btPlacement;
2122 default:
2123 return [];
2124 }
2125 }
2126 function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {
2127 const alignment = getAlignment(placement);
2128 let list = getSideList(getSide(placement), direction === "start", rtl);
2129 if (alignment) {
2130 list = list.map((side) => side + "-" + alignment);
2131 if (flipAlignment) {
2132 list = list.concat(list.map(getOppositeAlignmentPlacement));
2133 }
2134 }
2135 return list;
2136 }
2137 function getOppositePlacement(placement) {
2138 const side = getSide(placement);
2139 return oppositeSideMap[side] + placement.slice(side.length);
2140 }
2141 function expandPaddingObject(padding) {
2142 var _padding$top, _padding$right, _padding$bottom, _padding$left;
2143 return {
2144 top: (_padding$top = padding.top) != null ? _padding$top : 0,
2145 right: (_padding$right = padding.right) != null ? _padding$right : 0,
2146 bottom: (_padding$bottom = padding.bottom) != null ? _padding$bottom : 0,
2147 left: (_padding$left = padding.left) != null ? _padding$left : 0
2148 };
2149 }
2150 function getPaddingObject(padding) {
2151 return typeof padding !== "number" ? expandPaddingObject(padding) : {
2152 top: padding,
2153 right: padding,
2154 bottom: padding,
2155 left: padding
2156 };
2157 }
2158 function rectToClientRect(rect) {
2159 const {
2160 x,
2161 y,
2162 width,
2163 height
2164 } = rect;
2165 return {
2166 width,
2167 height,
2168 top: y,
2169 left: x,
2170 right: x + width,
2171 bottom: y + height,
2172 x,
2173 y
2174 };
2175 }
2176
2177 // node_modules/@base-ui/react/floating-ui-react/utils/composite.mjs
2178 function isHiddenByStyles(styles) {
2179 return styles.visibility === "hidden" || styles.visibility === "collapse";
2180 }
2181 function isElementVisible(element, styles = element ? getComputedStyle2(element) : null) {
2182 if (!element || !element.isConnected || !styles || isHiddenByStyles(styles)) {
2183 return false;
2184 }
2185 if (typeof element.checkVisibility === "function") {
2186 return element.checkVisibility();
2187 }
2188 return styles.display !== "none" && styles.display !== "contents";
2189 }
2190
2191 // node_modules/@base-ui/react/floating-ui-react/utils/tabbable.mjs
2192 var CANDIDATE_SELECTOR = 'a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable="false"]),audio[controls],video[controls]';
2193 function getParentElement(element) {
2194 const assignedSlot = element.assignedSlot;
2195 if (assignedSlot) {
2196 return assignedSlot;
2197 }
2198 if (element.parentElement) {
2199 return element.parentElement;
2200 }
2201 const rootNode = element.getRootNode();
2202 return isShadowRoot(rootNode) ? rootNode.host : null;
2203 }
2204 function getDetailsSummary(details) {
2205 for (const child of Array.from(details.children)) {
2206 if (getNodeName(child) === "summary") {
2207 return child;
2208 }
2209 }
2210 return null;
2211 }
2212 function isWithinOpenDetailsSummary(element, details) {
2213 const summary = getDetailsSummary(details);
2214 return !!summary && (element === summary || contains(summary, element));
2215 }
2216 function isFocusableCandidate(element) {
2217 const nodeName = element ? getNodeName(element) : "";
2218 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");
2219 }
2220 function isFocusableElement(element) {
2221 if (!isFocusableCandidate(element) || !element.isConnected || element.matches(":disabled")) {
2222 return false;
2223 }
2224 for (let current = element; current; current = getParentElement(current)) {
2225 const isAncestor = current !== element;
2226 const isSlot = getNodeName(current) === "slot";
2227 if (current.hasAttribute("inert")) {
2228 return false;
2229 }
2230 if (isAncestor && getNodeName(current) === "details" && !current.open && !isWithinOpenDetailsSummary(element, current) || current.hasAttribute("hidden") || !isSlot && !isVisibleInTabbableTree(current, isAncestor)) {
2231 return false;
2232 }
2233 }
2234 return true;
2235 }
2236 function isVisibleInTabbableTree(element, isAncestor) {
2237 const styles = getComputedStyle2(element);
2238 if (!isAncestor) {
2239 return isElementVisible(element, styles);
2240 }
2241 return styles.display !== "none";
2242 }
2243 function getTabIndex(element) {
2244 const tabIndex = element.tabIndex;
2245 if (tabIndex < 0) {
2246 const nodeName = getNodeName(element);
2247 if (nodeName === "details" || nodeName === "audio" || nodeName === "video" || isHTMLElement(element) && element.isContentEditable) {
2248 return 0;
2249 }
2250 }
2251 return tabIndex;
2252 }
2253 function getNamedRadioInput(element) {
2254 if (getNodeName(element) !== "input") {
2255 return null;
2256 }
2257 const input = element;
2258 return input.type === "radio" && input.name !== "" ? input : null;
2259 }
2260 function isTabbableRadio(element, candidates) {
2261 const input = getNamedRadioInput(element);
2262 if (!input) {
2263 return true;
2264 }
2265 const checkedRadio = candidates.find((candidate) => {
2266 const radio = getNamedRadioInput(candidate);
2267 return radio?.name === input.name && radio.form === input.form && radio.checked;
2268 });
2269 if (checkedRadio) {
2270 return checkedRadio === input;
2271 }
2272 return candidates.find((candidate) => {
2273 const radio = getNamedRadioInput(candidate);
2274 return radio?.name === input.name && radio.form === input.form;
2275 }) === input;
2276 }
2277 function getComposedChildren(container) {
2278 if (isHTMLElement(container) && getNodeName(container) === "slot") {
2279 const assignedElements = container.assignedElements({
2280 flatten: true
2281 });
2282 if (assignedElements.length > 0) {
2283 return assignedElements;
2284 }
2285 }
2286 if (isHTMLElement(container) && container.shadowRoot) {
2287 return Array.from(container.shadowRoot.children);
2288 }
2289 return Array.from(container.children);
2290 }
2291 function appendCandidates(container, list) {
2292 getComposedChildren(container).forEach((child) => {
2293 if (isFocusableCandidate(child)) {
2294 list.push(child);
2295 }
2296 appendCandidates(child, list);
2297 });
2298 }
2299 function appendMatchingElements(container, selector, list) {
2300 getComposedChildren(container).forEach((child) => {
2301 if (isHTMLElement(child) && child.matches(selector)) {
2302 list.push(child);
2303 }
2304 appendMatchingElements(child, selector, list);
2305 });
2306 }
2307 function focusable(container) {
2308 const candidates = [];
2309 appendCandidates(container, candidates);
2310 return candidates.filter(isFocusableElement);
2311 }
2312 function tabbable(container) {
2313 const candidates = focusable(container);
2314 return candidates.filter((element) => getTabIndex(element) >= 0 && isTabbableRadio(element, candidates));
2315 }
2316 function getTabbableIn(container, dir) {
2317 const list = tabbable(container);
2318 const len = list.length;
2319 if (len === 0) {
2320 return void 0;
2321 }
2322 const active = activeElement(ownerDocument(container));
2323 const index2 = list.indexOf(active);
2324 const nextIndex = index2 === -1 ? dir === 1 ? 0 : len - 1 : index2 + dir;
2325 return list[nextIndex];
2326 }
2327 function getNextTabbable(referenceElement) {
2328 return getTabbableIn(ownerDocument(referenceElement).body, 1) || referenceElement;
2329 }
2330 function getPreviousTabbable(referenceElement) {
2331 return getTabbableIn(ownerDocument(referenceElement).body, -1) || referenceElement;
2332 }
2333 function isOutsideEvent(event, container) {
2334 const containerElement = container || event.currentTarget;
2335 const relatedTarget = event.relatedTarget;
2336 return !relatedTarget || !contains(containerElement, relatedTarget);
2337 }
2338 function disableFocusInside(container) {
2339 const tabbableElements = tabbable(container);
2340 tabbableElements.forEach((element) => {
2341 element.dataset.tabindex = element.getAttribute("tabindex") || "";
2342 element.setAttribute("tabindex", "-1");
2343 });
2344 }
2345 function enableFocusInside(container) {
2346 const elements = [];
2347 appendMatchingElements(container, "[data-tabindex]", elements);
2348 elements.forEach((element) => {
2349 const tabindex = element.dataset.tabindex;
2350 delete element.dataset.tabindex;
2351 if (tabindex) {
2352 element.setAttribute("tabindex", tabindex);
2353 } else {
2354 element.removeAttribute("tabindex");
2355 }
2356 });
2357 }
2358
2359 // node_modules/@base-ui/react/floating-ui-react/utils/nodes.mjs
2360 function getNodeChildren(nodes, id, onlyOpenChildren = true) {
2361 const directChildren = nodes.filter((node) => node.parentId === id);
2362 return directChildren.flatMap((child) => [...!onlyOpenChildren || child.context?.open ? [child] : [], ...getNodeChildren(nodes, child.id, onlyOpenChildren)]);
2363 }
2364
2365 // node_modules/@base-ui/react/floating-ui-react/utils/createAttribute.mjs
2366 function createAttribute(name) {
2367 return `data-base-ui-${name}`;
2368 }
2369
2370 // node_modules/@base-ui/react/floating-ui-react/components/FloatingPortal.mjs
2371 var React13 = __toESM(require_react(), 1);
2372 var ReactDOM2 = __toESM(require_react_dom(), 1);
2373
2374 // node_modules/@base-ui/react/internals/constants.mjs
2375 var DISABLED_TRANSITIONS_STYLE = {
2376 style: {
2377 transition: "none"
2378 }
2379 };
2380 var BASE_UI_SWIPE_IGNORE_ATTRIBUTE = "data-base-ui-swipe-ignore";
2381 var LEGACY_SWIPE_IGNORE_ATTRIBUTE = "data-swipe-ignore";
2382 var BASE_UI_SWIPE_IGNORE_SELECTOR = `[${BASE_UI_SWIPE_IGNORE_ATTRIBUTE}]`;
2383 var LEGACY_SWIPE_IGNORE_SELECTOR = `[${LEGACY_SWIPE_IGNORE_ATTRIBUTE}]`;
2384 var POPUP_COLLISION_AVOIDANCE = {
2385 fallbackAxisSide: "end"
2386 };
2387 var ownerVisuallyHidden = {
2388 clipPath: "inset(50%)",
2389 position: "fixed",
2390 top: 0,
2391 left: 0
2392 };
2393
2394 // node_modules/@base-ui/react/floating-ui-react/components/FloatingPortal.mjs
2395 var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1);
2396 var PortalContext = /* @__PURE__ */ React13.createContext(null);
2397 if (true) PortalContext.displayName = "PortalContext";
2398 var usePortalContext = () => React13.useContext(PortalContext);
2399 var attr = createAttribute("portal");
2400 function useFloatingPortalNode(props = {}) {
2401 const {
2402 ref,
2403 container: containerProp,
2404 componentProps = EMPTY_OBJECT,
2405 elementProps
2406 } = props;
2407 const uniqueId = useId();
2408 const portalContext = usePortalContext();
2409 const parentPortalNode = portalContext?.portalNode;
2410 const [containerElement, setContainerElement] = React13.useState(null);
2411 const [portalNode, setPortalNode] = React13.useState(null);
2412 const setPortalNodeRef = useStableCallback((node) => {
2413 if (node !== null) {
2414 setPortalNode(node);
2415 }
2416 });
2417 const containerRef = React13.useRef(null);
2418 useIsoLayoutEffect(() => {
2419 if (containerProp === null) {
2420 if (containerRef.current) {
2421 containerRef.current = null;
2422 setPortalNode(null);
2423 setContainerElement(null);
2424 }
2425 return;
2426 }
2427 const resolvedContainer = (containerProp && (isNode(containerProp) ? containerProp : containerProp.current)) ?? parentPortalNode ?? document.body;
2428 if (resolvedContainer == null) {
2429 if (containerRef.current) {
2430 containerRef.current = null;
2431 setPortalNode(null);
2432 setContainerElement(null);
2433 }
2434 return;
2435 }
2436 if (containerRef.current !== resolvedContainer) {
2437 containerRef.current = resolvedContainer;
2438 setPortalNode(null);
2439 setContainerElement(resolvedContainer);
2440 }
2441 }, [containerProp, parentPortalNode]);
2442 const portalElement = useRenderElement("div", componentProps, {
2443 ref: [ref, setPortalNodeRef],
2444 props: [{
2445 id: uniqueId,
2446 [attr]: ""
2447 }, elementProps]
2448 });
2449 const portalSubtree = containerElement && portalElement ? /* @__PURE__ */ ReactDOM2.createPortal(portalElement, containerElement) : null;
2450 return {
2451 node: portalNode,
2452 // `id` and `render` props can override or remove the generated ID. Use the exact
2453 // rendered value so `aria-owns` never points at an ID absent from the DOM.
2454 nodeId: /* @__PURE__ */ React13.isValidElement(portalElement) ? portalElement.props.id : void 0,
2455 subtree: portalSubtree
2456 };
2457 }
2458 var FloatingPortal = /* @__PURE__ */ React13.forwardRef(function FloatingPortal2(componentProps, forwardedRef) {
2459 const {
2460 render,
2461 className,
2462 style,
2463 children,
2464 container,
2465 portalOwnerRole,
2466 ...elementProps
2467 } = componentProps;
2468 const {
2469 node: portalNode,
2470 nodeId: portalNodeId,
2471 subtree: portalSubtree
2472 } = useFloatingPortalNode({
2473 container,
2474 ref: forwardedRef,
2475 componentProps,
2476 elementProps
2477 });
2478 const beforeOutsideRef = React13.useRef(null);
2479 const afterOutsideRef = React13.useRef(null);
2480 const beforeInsideRef = React13.useRef(null);
2481 const afterInsideRef = React13.useRef(null);
2482 const [focusManagerState, setFocusManagerState] = React13.useState(null);
2483 const focusInsideDisabledRef = React13.useRef(false);
2484 const modal = focusManagerState?.modal;
2485 const open2 = focusManagerState?.open;
2486 const shouldRenderGuards = !!focusManagerState && !focusManagerState.modal && focusManagerState.open && !!portalNode;
2487 React13.useEffect(() => {
2488 if (!portalNode || modal) {
2489 return void 0;
2490 }
2491 function onFocus(event) {
2492 if (portalNode && event.relatedTarget && isOutsideEvent(event)) {
2493 if (event.type === "focusin") {
2494 if (focusInsideDisabledRef.current) {
2495 enableFocusInside(portalNode);
2496 focusInsideDisabledRef.current = false;
2497 }
2498 } else {
2499 disableFocusInside(portalNode);
2500 focusInsideDisabledRef.current = true;
2501 }
2502 }
2503 }
2504 return mergeCleanups(addEventListener(portalNode, "focusin", onFocus, true), addEventListener(portalNode, "focusout", onFocus, true));
2505 }, [portalNode, modal]);
2506 useIsoLayoutEffect(() => {
2507 if (!portalNode || open2 !== true || !focusInsideDisabledRef.current) {
2508 return;
2509 }
2510 enableFocusInside(portalNode);
2511 focusInsideDisabledRef.current = false;
2512 }, [open2, portalNode]);
2513 const portalContextValue = React13.useMemo(() => ({
2514 beforeOutsideRef,
2515 afterOutsideRef,
2516 beforeInsideRef,
2517 afterInsideRef,
2518 portalNode,
2519 setFocusManagerState
2520 }), [portalNode]);
2521 return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(React13.Fragment, {
2522 children: [portalSubtree, /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(PortalContext.Provider, {
2523 value: portalContextValue,
2524 children: [shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(FocusGuard, {
2525 "data-type": "outside",
2526 ref: beforeOutsideRef,
2527 onFocus: (event) => {
2528 if (isOutsideEvent(event, portalNode)) {
2529 beforeInsideRef.current?.focus();
2530 } else {
2531 const domReference = focusManagerState ? focusManagerState.domReference : null;
2532 const prevTabbable = getPreviousTabbable(domReference);
2533 prevTabbable?.focus();
2534 }
2535 }
2536 }), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", {
2537 role: portalOwnerRole,
2538 "aria-owns": portalNodeId,
2539 style: ownerVisuallyHidden
2540 }), portalNode && /* @__PURE__ */ ReactDOM2.createPortal(children, portalNode), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(FocusGuard, {
2541 "data-type": "outside",
2542 ref: afterOutsideRef,
2543 onFocus: (event) => {
2544 if (isOutsideEvent(event, portalNode)) {
2545 afterInsideRef.current?.focus();
2546 } else {
2547 const domReference = focusManagerState ? focusManagerState.domReference : null;
2548 const nextTabbable = getNextTabbable(domReference);
2549 nextTabbable?.focus();
2550 if (focusManagerState?.closeOnFocusOut) {
2551 focusManagerState?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.focusOut, event.nativeEvent));
2552 }
2553 }
2554 }
2555 })]
2556 })]
2557 });
2558 });
2559 if (true) FloatingPortal.displayName = "FloatingPortal";
2560
2561 // node_modules/@base-ui/react/floating-ui-react/components/FloatingTree.mjs
2562 var React14 = __toESM(require_react(), 1);
2563
2564 // node_modules/@base-ui/react/floating-ui-react/utils/createEventEmitter.mjs
2565 function createEventEmitter() {
2566 const map = /* @__PURE__ */ new Map();
2567 return {
2568 emit(event, data) {
2569 map.get(event)?.forEach((listener) => listener(data));
2570 },
2571 on(event, listener) {
2572 if (!map.has(event)) {
2573 map.set(event, /* @__PURE__ */ new Set());
2574 }
2575 map.get(event).add(listener);
2576 },
2577 off(event, listener) {
2578 map.get(event)?.delete(listener);
2579 }
2580 };
2581 }
2582
2583 // node_modules/@base-ui/react/floating-ui-react/components/FloatingTree.mjs
2584 var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1);
2585 var FloatingNodeContext = /* @__PURE__ */ React14.createContext(null);
2586 if (true) FloatingNodeContext.displayName = "FloatingNodeContext";
2587 var FloatingTreeContext = /* @__PURE__ */ React14.createContext(null);
2588 if (true) FloatingTreeContext.displayName = "FloatingTreeContext";
2589 var useFloatingParentNodeId = () => React14.useContext(FloatingNodeContext)?.id || null;
2590 var useFloatingTree = (externalTree) => {
2591 const contextTree = React14.useContext(FloatingTreeContext);
2592 return externalTree ?? contextTree;
2593 };
2594
2595 // node_modules/@base-ui/react/floating-ui-react/hooks/useClientPoint.mjs
2596 var React15 = __toESM(require_react(), 1);
2597 function createVirtualElement(domElement, data) {
2598 let offsetX = null;
2599 let offsetY = null;
2600 let isAutoUpdateEvent = false;
2601 return {
2602 contextElement: domElement || void 0,
2603 getBoundingClientRect() {
2604 const domRect = domElement?.getBoundingClientRect() || {
2605 width: 0,
2606 height: 0,
2607 x: 0,
2608 y: 0
2609 };
2610 const isXAxis = data.axis === "x" || data.axis === "both";
2611 const isYAxis = data.axis === "y" || data.axis === "both";
2612 const canTrackCursorOnAutoUpdate = ["mouseenter", "mousemove"].includes(data.dataRef.current.openEvent?.type || "") && data.pointerType !== "touch";
2613 let width = domRect.width;
2614 let height = domRect.height;
2615 let x = domRect.x;
2616 let y = domRect.y;
2617 if (offsetX == null && data.x && isXAxis) {
2618 offsetX = domRect.x - data.x;
2619 }
2620 if (offsetY == null && data.y && isYAxis) {
2621 offsetY = domRect.y - data.y;
2622 }
2623 x -= offsetX || 0;
2624 y -= offsetY || 0;
2625 width = 0;
2626 height = 0;
2627 if (!isAutoUpdateEvent || canTrackCursorOnAutoUpdate) {
2628 width = data.axis === "y" ? domRect.width : 0;
2629 height = data.axis === "x" ? domRect.height : 0;
2630 x = isXAxis && data.x != null ? data.x : x;
2631 y = isYAxis && data.y != null ? data.y : y;
2632 } else if (isAutoUpdateEvent && !canTrackCursorOnAutoUpdate) {
2633 height = data.axis === "x" ? domRect.height : height;
2634 width = data.axis === "y" ? domRect.width : width;
2635 }
2636 isAutoUpdateEvent = true;
2637 return {
2638 width,
2639 height,
2640 x,
2641 y,
2642 top: y,
2643 right: x + width,
2644 bottom: y + height,
2645 left: x
2646 };
2647 }
2648 };
2649 }
2650 function isMouseBasedEvent(event) {
2651 return event != null && event.clientX != null;
2652 }
2653 function useClientPoint(context, props = {}) {
2654 const {
2655 enabled = true,
2656 axis = "both"
2657 } = props;
2658 const store2 = "rootStore" in context ? context.rootStore : context;
2659 const open2 = store2.useState("open");
2660 const floating = store2.useState("floatingElement");
2661 const domReference = store2.useState("domReferenceElement");
2662 const dataRef = store2.context.dataRef;
2663 const initialRef = React15.useRef(false);
2664 const cleanupListenerRef = React15.useRef(null);
2665 const [pointerType, setPointerType] = React15.useState();
2666 const [reactive, setReactive] = React15.useState([]);
2667 const resetReference = useStableCallback((reference2) => {
2668 store2.set("positionReference", reference2);
2669 });
2670 const setReference = useStableCallback((newX, newY, referenceElement) => {
2671 if (initialRef.current) {
2672 return;
2673 }
2674 if (dataRef.current.openEvent && !isMouseBasedEvent(dataRef.current.openEvent)) {
2675 return;
2676 }
2677 store2.set("positionReference", createVirtualElement(referenceElement ?? domReference, {
2678 x: newX,
2679 y: newY,
2680 axis,
2681 dataRef,
2682 pointerType
2683 }));
2684 });
2685 const handleReferenceEnterOrMove = useStableCallback((event) => {
2686 if (!open2) {
2687 setReference(event.clientX, event.clientY, event.currentTarget);
2688 } else if (!cleanupListenerRef.current) {
2689 setReference(event.clientX, event.clientY, event.currentTarget);
2690 setReactive([]);
2691 }
2692 });
2693 const openCheck = isMouseLikePointerType(pointerType) ? floating : open2;
2694 React15.useEffect(() => {
2695 if (!enabled) {
2696 resetReference(domReference);
2697 return void 0;
2698 }
2699 if (!openCheck) {
2700 return void 0;
2701 }
2702 function cleanupListener() {
2703 cleanupListenerRef.current?.();
2704 cleanupListenerRef.current = null;
2705 }
2706 const win = getWindow(floating);
2707 function handleMouseMove(event) {
2708 const target = getTarget(event);
2709 if (!contains(floating, target)) {
2710 setReference(event.clientX, event.clientY);
2711 } else {
2712 cleanupListener();
2713 }
2714 }
2715 if (!dataRef.current.openEvent || isMouseBasedEvent(dataRef.current.openEvent)) {
2716 cleanupListenerRef.current = addEventListener(win, "mousemove", handleMouseMove);
2717 } else {
2718 resetReference(domReference);
2719 }
2720 return cleanupListener;
2721 }, [openCheck, enabled, floating, dataRef, domReference, store2, setReference, resetReference, reactive]);
2722 React15.useEffect(() => () => {
2723 store2.set("positionReference", null);
2724 }, [store2]);
2725 React15.useEffect(() => {
2726 if (enabled && !floating) {
2727 initialRef.current = false;
2728 }
2729 }, [enabled, floating]);
2730 React15.useEffect(() => {
2731 if (!enabled && open2) {
2732 initialRef.current = true;
2733 }
2734 }, [enabled, open2]);
2735 const reference = React15.useMemo(() => {
2736 function setPointerTypeRef(event) {
2737 setPointerType(event.pointerType);
2738 }
2739 return {
2740 onPointerDown: setPointerTypeRef,
2741 onPointerEnter: setPointerTypeRef,
2742 onMouseMove: handleReferenceEnterOrMove,
2743 onMouseEnter: handleReferenceEnterOrMove
2744 };
2745 }, [handleReferenceEnterOrMove]);
2746 return React15.useMemo(() => enabled ? {
2747 reference,
2748 trigger: reference
2749 } : {}, [enabled, reference]);
2750 }
2751
2752 // node_modules/@base-ui/react/floating-ui-react/hooks/useDismiss.mjs
2753 var React16 = __toESM(require_react(), 1);
2754 function alwaysFalse() {
2755 return false;
2756 }
2757 function normalizeProp(normalizable) {
2758 return {
2759 escapeKey: typeof normalizable === "boolean" ? normalizable : normalizable?.escapeKey ?? false,
2760 outsidePress: typeof normalizable === "boolean" ? normalizable : normalizable?.outsidePress ?? true
2761 };
2762 }
2763 function useDismiss(context, props = {}) {
2764 const {
2765 enabled = true,
2766 escapeKey: escapeKey2 = true,
2767 outsidePress: outsidePressProp = true,
2768 outsidePressEvent = "sloppy",
2769 referencePress = alwaysFalse,
2770 bubbles,
2771 externalTree
2772 } = props;
2773 const store2 = "rootStore" in context ? context.rootStore : context;
2774 const open2 = store2.useState("open");
2775 const floatingElement = store2.useState("floatingElement");
2776 const {
2777 dataRef,
2778 events
2779 } = store2.context;
2780 const tree = useFloatingTree(externalTree);
2781 const outsidePressFn = useStableCallback(typeof outsidePressProp === "function" ? outsidePressProp : () => false);
2782 const outsidePress2 = typeof outsidePressProp === "function" ? outsidePressFn : outsidePressProp;
2783 const outsidePressEnabled = outsidePress2 !== false;
2784 const getOutsidePressEventProp = useStableCallback(() => outsidePressEvent);
2785 const {
2786 escapeKey: escapeKeyBubbles,
2787 outsidePress: outsidePressBubbles
2788 } = normalizeProp(bubbles);
2789 const pressStartedInsideRef = React16.useRef(false);
2790 const pressStartPreventedRef = React16.useRef(false);
2791 const suppressNextOutsideClickRef = React16.useRef(false);
2792 const sawPressWhileOpenRef = React16.useRef(false);
2793 const isComposingRef = React16.useRef(false);
2794 const currentPointerTypeRef = React16.useRef("");
2795 const touchStateRef = React16.useRef(null);
2796 const cancelDismissOnEndTimeout = useTimeout();
2797 const clearInsideReactTreeTimeout = useTimeout();
2798 const clearInsideReactTree = useStableCallback(() => {
2799 clearInsideReactTreeTimeout.clear();
2800 dataRef.current.insideReactTree = false;
2801 });
2802 const hasBlockingChild = useStableCallback((bubbleKey) => {
2803 const nodeId = dataRef.current.floatingContext?.nodeId;
2804 const children = tree ? getNodeChildren(tree.nodesRef.current, nodeId) : [];
2805 return children.some((child) => child.context?.open && !child.context.dataRef.current[bubbleKey]);
2806 });
2807 const isEventWithinOwnElements = useStableCallback((event) => {
2808 return isEventTargetWithin(event, store2.select("floatingElement")) || isEventTargetWithin(event, store2.select("domReferenceElement"));
2809 });
2810 const closeOnReferencePress = useStableCallback((event) => {
2811 if (!referencePress()) {
2812 return;
2813 }
2814 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerPress, event.nativeEvent));
2815 });
2816 const closeOnEscapeKeyDown = useStableCallback((event) => {
2817 if (!open2 || !enabled || !escapeKey2 || event.key !== "Escape") {
2818 return;
2819 }
2820 if (isComposingRef.current) {
2821 return;
2822 }
2823 if (!escapeKeyBubbles && hasBlockingChild("__escapeKeyBubbles")) {
2824 return;
2825 }
2826 const native = isReactEvent(event) ? event.nativeEvent : event;
2827 const eventDetails = createChangeEventDetails(reason_parts_exports.escapeKey, native);
2828 store2.setOpen(false, eventDetails);
2829 if (!eventDetails.isCanceled) {
2830 event.preventDefault();
2831 }
2832 if (!escapeKeyBubbles && !eventDetails.isPropagationAllowed) {
2833 event.stopPropagation();
2834 }
2835 });
2836 const markInsideReactTree = useStableCallback(() => {
2837 dataRef.current.insideReactTree = true;
2838 clearInsideReactTreeTimeout.start(0, clearInsideReactTree);
2839 });
2840 const markPressStartedInsideReactTree = useStableCallback((event) => {
2841 if (!open2 || !enabled || event.button !== 0) {
2842 return;
2843 }
2844 const target = getTarget(event.nativeEvent);
2845 if (!contains(store2.select("floatingElement"), target)) {
2846 return;
2847 }
2848 if (!pressStartedInsideRef.current) {
2849 pressStartedInsideRef.current = true;
2850 pressStartPreventedRef.current = false;
2851 }
2852 });
2853 const markInsidePressStartPrevented = useStableCallback((event) => {
2854 if (!open2 || !enabled) {
2855 return;
2856 }
2857 if (!(event.defaultPrevented || event.nativeEvent.defaultPrevented)) {
2858 return;
2859 }
2860 if (pressStartedInsideRef.current) {
2861 pressStartPreventedRef.current = true;
2862 }
2863 });
2864 React16.useEffect(() => {
2865 function handleOpenChange(details) {
2866 if (!details.open) {
2867 sawPressWhileOpenRef.current = false;
2868 }
2869 }
2870 events.on("openchange", handleOpenChange);
2871 return () => {
2872 events.off("openchange", handleOpenChange);
2873 };
2874 }, [events]);
2875 React16.useEffect(() => {
2876 if (!open2 || !enabled) {
2877 if (!open2) {
2878 sawPressWhileOpenRef.current = false;
2879 }
2880 return clearInsideReactTree;
2881 }
2882 dataRef.current.__escapeKeyBubbles = escapeKeyBubbles;
2883 dataRef.current.__outsidePressBubbles = outsidePressBubbles;
2884 const compositionTimeout = new Timeout();
2885 const preventedPressSuppressionTimeout = new Timeout();
2886 const doc = ownerDocument(floatingElement);
2887 function handleCompositionStart() {
2888 compositionTimeout.clear();
2889 isComposingRef.current = true;
2890 }
2891 function handleCompositionEnd() {
2892 compositionTimeout.start(
2893 // 0ms or 1ms don't work in Safari. 5ms appears to consistently work.
2894 // Only apply to WebKit for the test to remain 0ms.
2895 parts_exports.engine.webkit ? 5 : 0,
2896 () => {
2897 isComposingRef.current = false;
2898 }
2899 );
2900 }
2901 function suppressImmediateOutsideClickAfterPreventedStart() {
2902 suppressNextOutsideClickRef.current = true;
2903 preventedPressSuppressionTimeout.start(0, () => {
2904 suppressNextOutsideClickRef.current = false;
2905 });
2906 }
2907 function resetPressStartState() {
2908 pressStartedInsideRef.current = false;
2909 pressStartPreventedRef.current = false;
2910 }
2911 function getOutsidePressEvent() {
2912 const type = currentPointerTypeRef.current;
2913 const computedType = type === "pen" || !type ? "mouse" : type;
2914 const outsidePressEventValue = getOutsidePressEventProp();
2915 const resolved = typeof outsidePressEventValue === "function" ? outsidePressEventValue() : outsidePressEventValue;
2916 if (typeof resolved === "string") {
2917 return resolved;
2918 }
2919 return resolved[computedType];
2920 }
2921 function shouldIgnoreEvent(event) {
2922 const computedOutsidePressEvent = getOutsidePressEvent();
2923 return computedOutsidePressEvent === "intentional" && event.type !== "click" || computedOutsidePressEvent === "sloppy" && event.type === "click";
2924 }
2925 function isEventWithinFloatingTree(event) {
2926 const nodeId = dataRef.current.floatingContext?.nodeId;
2927 const targetIsInsideChildren = tree && getNodeChildren(tree.nodesRef.current, nodeId).some((node) => isEventTargetWithin(event, node.context?.elements.floating));
2928 return isEventWithinOwnElements(event) || targetIsInsideChildren;
2929 }
2930 function closeOnPressOutside(event) {
2931 if (shouldIgnoreEvent(event)) {
2932 if (event.type !== "click" && !isEventWithinOwnElements(event)) {
2933 preventedPressSuppressionTimeout.clear();
2934 suppressNextOutsideClickRef.current = false;
2935 }
2936 clearInsideReactTree();
2937 return;
2938 }
2939 if (dataRef.current.insideReactTree) {
2940 clearInsideReactTree();
2941 return;
2942 }
2943 const target = getTarget(event);
2944 const inertSelector = `[${createAttribute("inert")}]`;
2945 const targetRoot = isElement(target) ? target.getRootNode() : null;
2946 const markers = Array.from((isShadowRoot(targetRoot) ? targetRoot : ownerDocument(store2.select("floatingElement"))).querySelectorAll(inertSelector));
2947 const triggers = store2.context.triggerElements;
2948 if (target && (triggers.hasElement(target) || triggers.hasMatchingElement((trigger) => contains(trigger, target)))) {
2949 return;
2950 }
2951 let targetRootAncestor = isElement(target) ? target : null;
2952 while (targetRootAncestor && !isLastTraversableNode(targetRootAncestor)) {
2953 const nextParent = getParentNode(targetRootAncestor);
2954 if (isLastTraversableNode(nextParent) || !isElement(nextParent)) {
2955 break;
2956 }
2957 targetRootAncestor = nextParent;
2958 }
2959 if (markers.length && isElement(target) && !isRootElement(target) && // Clicked on a direct ancestor (e.g. FloatingOverlay).
2960 !contains(target, store2.select("floatingElement")) && // If the target root element contains none of the markers, then the
2961 // element was injected after the floating element rendered.
2962 markers.every((marker) => !contains(targetRootAncestor, marker))) {
2963 return;
2964 }
2965 if (isHTMLElement(target) && !("touches" in event)) {
2966 const lastTraversableNode = isLastTraversableNode(target);
2967 const style = getComputedStyle2(target);
2968 const scrollRe = /auto|scroll/;
2969 const isScrollableX = lastTraversableNode || scrollRe.test(style.overflowX);
2970 const isScrollableY = lastTraversableNode || scrollRe.test(style.overflowY);
2971 const canScrollX = isScrollableX && target.clientWidth > 0 && target.scrollWidth > target.clientWidth;
2972 const canScrollY = isScrollableY && target.clientHeight > 0 && target.scrollHeight > target.clientHeight;
2973 const isRTL7 = style.direction === "rtl";
2974 const pressedVerticalScrollbar = canScrollY && (isRTL7 ? event.offsetX <= target.offsetWidth - target.clientWidth : event.offsetX > target.clientWidth);
2975 const pressedHorizontalScrollbar = canScrollX && event.offsetY > target.clientHeight;
2976 if (pressedVerticalScrollbar || pressedHorizontalScrollbar) {
2977 return;
2978 }
2979 }
2980 if (isEventWithinFloatingTree(event)) {
2981 return;
2982 }
2983 if (getOutsidePressEvent() === "intentional") {
2984 if (event.detail !== 0 && !isVirtualClick(event) && !sawPressWhileOpenRef.current) {
2985 return;
2986 }
2987 if (suppressNextOutsideClickRef.current) {
2988 preventedPressSuppressionTimeout.clear();
2989 suppressNextOutsideClickRef.current = false;
2990 return;
2991 }
2992 }
2993 if (typeof outsidePress2 === "function" && !outsidePress2(event)) {
2994 return;
2995 }
2996 if (hasBlockingChild("__outsidePressBubbles")) {
2997 return;
2998 }
2999 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.outsidePress, event));
3000 clearInsideReactTree();
3001 }
3002 function handlePointerDown(event) {
3003 if (getOutsidePressEvent() !== "sloppy" || event.pointerType === "touch" || !store2.select("open") || !enabled || isEventWithinOwnElements(event)) {
3004 return;
3005 }
3006 closeOnPressOutside(event);
3007 }
3008 function handleTouchStart(event) {
3009 if (getOutsidePressEvent() !== "sloppy" || !store2.select("open") || !enabled || isEventWithinOwnElements(event)) {
3010 return;
3011 }
3012 const touch = event.touches[0];
3013 if (touch) {
3014 touchStateRef.current = {
3015 startTime: Date.now(),
3016 startX: touch.clientX,
3017 startY: touch.clientY,
3018 dismissOnTouchEnd: false,
3019 dismissOnMouseDown: true
3020 };
3021 cancelDismissOnEndTimeout.start(1e3, () => {
3022 if (touchStateRef.current) {
3023 touchStateRef.current.dismissOnTouchEnd = false;
3024 touchStateRef.current.dismissOnMouseDown = false;
3025 }
3026 });
3027 }
3028 }
3029 function addTargetEventListenerOnce(event, listener) {
3030 const target = getTarget(event);
3031 if (!target) {
3032 return;
3033 }
3034 const unsubscribe2 = addEventListener(target, event.type, () => {
3035 listener(event);
3036 unsubscribe2();
3037 });
3038 }
3039 function handleTouchStartCapture(event) {
3040 currentPointerTypeRef.current = "touch";
3041 addTargetEventListenerOnce(event, handleTouchStart);
3042 }
3043 function closeOnPressOutsideCapture(event) {
3044 cancelDismissOnEndTimeout.clear();
3045 if (event.type === "pointerdown") {
3046 if (event.button === 0) {
3047 sawPressWhileOpenRef.current = true;
3048 }
3049 currentPointerTypeRef.current = event.pointerType;
3050 }
3051 if (event.type === "mousedown" && touchStateRef.current && !touchStateRef.current.dismissOnMouseDown) {
3052 return;
3053 }
3054 addTargetEventListenerOnce(event, (targetEvent) => {
3055 if (targetEvent.type === "pointerdown") {
3056 handlePointerDown(targetEvent);
3057 } else {
3058 closeOnPressOutside(targetEvent);
3059 }
3060 });
3061 }
3062 function handlePressEndCapture(event) {
3063 if (event.type === "pointercancel") {
3064 sawPressWhileOpenRef.current = false;
3065 }
3066 if (!pressStartedInsideRef.current) {
3067 return;
3068 }
3069 const pressStartedInsideDefaultPrevented = pressStartPreventedRef.current;
3070 resetPressStartState();
3071 if (getOutsidePressEvent() !== "intentional") {
3072 return;
3073 }
3074 if (event.type === "pointercancel") {
3075 if (pressStartedInsideDefaultPrevented) {
3076 suppressImmediateOutsideClickAfterPreventedStart();
3077 }
3078 return;
3079 }
3080 if (isEventWithinFloatingTree(event)) {
3081 return;
3082 }
3083 if (pressStartedInsideDefaultPrevented) {
3084 suppressImmediateOutsideClickAfterPreventedStart();
3085 return;
3086 }
3087 if (typeof outsidePress2 === "function" && !outsidePress2(event)) {
3088 return;
3089 }
3090 preventedPressSuppressionTimeout.clear();
3091 suppressNextOutsideClickRef.current = true;
3092 clearInsideReactTree();
3093 }
3094 function handleTouchMove(event) {
3095 if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) {
3096 return;
3097 }
3098 const touch = event.touches[0];
3099 if (!touch) {
3100 return;
3101 }
3102 const deltaX = Math.abs(touch.clientX - touchStateRef.current.startX);
3103 const deltaY = Math.abs(touch.clientY - touchStateRef.current.startY);
3104 const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
3105 if (distance > 5) {
3106 touchStateRef.current.dismissOnTouchEnd = true;
3107 }
3108 if (distance > 10) {
3109 closeOnPressOutside(event);
3110 cancelDismissOnEndTimeout.clear();
3111 touchStateRef.current = null;
3112 }
3113 }
3114 function handleTouchMoveCapture(event) {
3115 addTargetEventListenerOnce(event, handleTouchMove);
3116 }
3117 function handleTouchEnd(event) {
3118 if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) {
3119 return;
3120 }
3121 if (touchStateRef.current.dismissOnTouchEnd) {
3122 closeOnPressOutside(event);
3123 }
3124 cancelDismissOnEndTimeout.clear();
3125 touchStateRef.current = null;
3126 }
3127 function handleTouchEndCapture(event) {
3128 addTargetEventListenerOnce(event, handleTouchEnd);
3129 }
3130 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, {
3131 capture: true,
3132 passive: true
3133 }), addEventListener(doc, "touchmove", handleTouchMoveCapture, {
3134 capture: true,
3135 passive: true
3136 }), addEventListener(doc, "touchend", handleTouchEndCapture, {
3137 capture: true,
3138 passive: true
3139 })));
3140 return () => {
3141 unsubscribe();
3142 compositionTimeout.clear();
3143 preventedPressSuppressionTimeout.clear();
3144 resetPressStartState();
3145 suppressNextOutsideClickRef.current = false;
3146 clearInsideReactTree();
3147 };
3148 }, [dataRef, floatingElement, escapeKey2, outsidePressEnabled, outsidePress2, open2, enabled, escapeKeyBubbles, outsidePressBubbles, closeOnEscapeKeyDown, clearInsideReactTree, getOutsidePressEventProp, hasBlockingChild, isEventWithinOwnElements, tree, store2, cancelDismissOnEndTimeout]);
3149 const reference = React16.useMemo(() => ({
3150 onKeyDown: closeOnEscapeKeyDown,
3151 onPointerDown: closeOnReferencePress,
3152 onClick: closeOnReferencePress
3153 }), [closeOnEscapeKeyDown, closeOnReferencePress]);
3154 const floating = React16.useMemo(() => ({
3155 onKeyDown: closeOnEscapeKeyDown,
3156 // `onMouseDown` may be blocked if `event.preventDefault()` is called in
3157 // `onPointerDown`, such as with <NumberField.ScrubArea>.
3158 // See https://github.com/mui/base-ui/pull/3379
3159 onPointerDown: markInsidePressStartPrevented,
3160 onMouseDown: markInsidePressStartPrevented,
3161 onClickCapture: markInsideReactTree,
3162 onMouseDownCapture(event) {
3163 markInsideReactTree();
3164 markPressStartedInsideReactTree(event);
3165 },
3166 onPointerDownCapture(event) {
3167 markInsideReactTree();
3168 markPressStartedInsideReactTree(event);
3169 },
3170 onMouseUpCapture: markInsideReactTree,
3171 onTouchEndCapture: markInsideReactTree,
3172 onTouchMoveCapture: markInsideReactTree
3173 }), [closeOnEscapeKeyDown, markInsideReactTree, markPressStartedInsideReactTree, markInsidePressStartPrevented]);
3174 return React16.useMemo(() => enabled ? {
3175 reference,
3176 floating,
3177 trigger: reference
3178 } : {}, [enabled, reference, floating]);
3179 }
3180
3181 // node_modules/@base-ui/react/floating-ui-react/hooks/useFloating.mjs
3182 var React24 = __toESM(require_react(), 1);
3183
3184 // node_modules/@floating-ui/core/dist/floating-ui.core.mjs
3185 function computeCoordsFromPlacement(_ref, placement, rtl) {
3186 let {
3187 reference,
3188 floating
3189 } = _ref;
3190 const sideAxis = getSideAxis(placement);
3191 const alignmentAxis = getAlignmentAxis(placement);
3192 const alignLength = getAxisLength(alignmentAxis);
3193 const side = getSide(placement);
3194 const isVertical = sideAxis === "y";
3195 const commonX = reference.x + reference.width / 2 - floating.width / 2;
3196 const commonY = reference.y + reference.height / 2 - floating.height / 2;
3197 const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;
3198 let coords;
3199 switch (side) {
3200 case "top":
3201 coords = {
3202 x: commonX,
3203 y: reference.y - floating.height
3204 };
3205 break;
3206 case "bottom":
3207 coords = {
3208 x: commonX,
3209 y: reference.y + reference.height
3210 };
3211 break;
3212 case "right":
3213 coords = {
3214 x: reference.x + reference.width,
3215 y: commonY
3216 };
3217 break;
3218 case "left":
3219 coords = {
3220 x: reference.x - floating.width,
3221 y: commonY
3222 };
3223 break;
3224 default:
3225 coords = {
3226 x: reference.x,
3227 y: reference.y
3228 };
3229 }
3230 const alignment = getAlignment(placement);
3231 if (alignment) {
3232 coords[alignmentAxis] += commonAlign * (alignment === "end" ? 1 : -1) * (rtl && isVertical ? -1 : 1);
3233 }
3234 return coords;
3235 }
3236 async function detectOverflow(state, options) {
3237 var _await$platform$isEle;
3238 if (options === void 0) {
3239 options = {};
3240 }
3241 const {
3242 x,
3243 y,
3244 platform: platform3,
3245 rects,
3246 elements,
3247 strategy
3248 } = state;
3249 const {
3250 boundary = "clippingAncestors",
3251 rootBoundary = "viewport",
3252 elementContext = "floating",
3253 altBoundary = false,
3254 padding = 0
3255 } = evaluate(options, state);
3256 const paddingObject = getPaddingObject(padding);
3257 const altContext = elementContext === "floating" ? "reference" : "floating";
3258 const element = elements[altBoundary ? altContext : elementContext];
3259 const clippingClientRect = rectToClientRect(await platform3.getClippingRect({
3260 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)),
3261 boundary,
3262 rootBoundary,
3263 strategy
3264 }));
3265 const rect = elementContext === "floating" ? {
3266 x,
3267 y,
3268 width: rects.floating.width,
3269 height: rects.floating.height
3270 } : rects.reference;
3271 const offsetParent = await (platform3.getOffsetParent == null ? void 0 : platform3.getOffsetParent(elements.floating));
3272 const offsetScale = await (platform3.isElement == null ? void 0 : platform3.isElement(offsetParent)) && await (platform3.getScale == null ? void 0 : platform3.getScale(offsetParent)) || {
3273 x: 1,
3274 y: 1
3275 };
3276 const elementClientRect = rectToClientRect(platform3.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform3.convertOffsetParentRelativeRectToViewportRelativeRect({
3277 elements,
3278 rect,
3279 offsetParent,
3280 strategy
3281 }) : rect);
3282 return {
3283 top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,
3284 bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,
3285 left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,
3286 right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x
3287 };
3288 }
3289 var MAX_RESET_COUNT = 50;
3290 var computePosition = async (reference, floating, config) => {
3291 const {
3292 placement = "bottom",
3293 strategy = "absolute",
3294 middleware = [],
3295 platform: platform3
3296 } = config;
3297 const platformWithDetectOverflow = platform3.detectOverflow ? platform3 : {
3298 ...platform3,
3299 detectOverflow
3300 };
3301 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(floating));
3302 let rects = await platform3.getElementRects({
3303 reference,
3304 floating,
3305 strategy
3306 });
3307 let {
3308 x,
3309 y
3310 } = computeCoordsFromPlacement(rects, placement, rtl);
3311 let statefulPlacement = placement;
3312 let resetCount = 0;
3313 const middlewareData = {};
3314 for (let i = 0; i < middleware.length; i++) {
3315 const currentMiddleware = middleware[i];
3316 if (!currentMiddleware) {
3317 continue;
3318 }
3319 const {
3320 name,
3321 fn
3322 } = currentMiddleware;
3323 const {
3324 x: nextX,
3325 y: nextY,
3326 data,
3327 reset
3328 } = await fn({
3329 x,
3330 y,
3331 initialPlacement: placement,
3332 placement: statefulPlacement,
3333 strategy,
3334 middlewareData,
3335 rects,
3336 platform: platformWithDetectOverflow,
3337 elements: {
3338 reference,
3339 floating
3340 }
3341 });
3342 x = nextX != null ? nextX : x;
3343 y = nextY != null ? nextY : y;
3344 middlewareData[name] = {
3345 ...middlewareData[name],
3346 ...data
3347 };
3348 if (reset && resetCount < MAX_RESET_COUNT) {
3349 resetCount++;
3350 if (typeof reset === "object") {
3351 if (reset.placement) {
3352 statefulPlacement = reset.placement;
3353 }
3354 if (reset.rects) {
3355 rects = reset.rects === true ? await platform3.getElementRects({
3356 reference,
3357 floating,
3358 strategy
3359 }) : reset.rects;
3360 }
3361 ({
3362 x,
3363 y
3364 } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));
3365 }
3366 i = -1;
3367 }
3368 }
3369 return {
3370 x,
3371 y,
3372 placement: statefulPlacement,
3373 strategy,
3374 middlewareData
3375 };
3376 };
3377 var flip = function(options) {
3378 if (options === void 0) {
3379 options = {};
3380 }
3381 return {
3382 name: "flip",
3383 options,
3384 async fn(state) {
3385 var _middlewareData$arrow, _middlewareData$flip;
3386 const {
3387 placement,
3388 middlewareData,
3389 rects,
3390 initialPlacement,
3391 platform: platform3,
3392 elements
3393 } = state;
3394 const {
3395 mainAxis: checkMainAxis = true,
3396 crossAxis: checkCrossAxis = true,
3397 fallbackPlacements: specifiedFallbackPlacements,
3398 fallbackStrategy = "bestFit",
3399 fallbackAxisSideDirection = "none",
3400 flipAlignment = true,
3401 ...detectOverflowOptions
3402 } = evaluate(options, state);
3403 if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
3404 return {};
3405 }
3406 const side = getSide(placement);
3407 const initialSideAxis = getSideAxis(initialPlacement);
3408 const isBasePlacement = getSide(initialPlacement) === initialPlacement;
3409 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating));
3410 const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));
3411 const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== "none";
3412 if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {
3413 fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));
3414 }
3415 const placements2 = [initialPlacement, ...fallbackPlacements];
3416 const overflow = await platform3.detectOverflow(state, detectOverflowOptions);
3417 const overflows = [];
3418 let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];
3419 if (checkMainAxis) {
3420 overflows.push(overflow[side]);
3421 }
3422 if (checkCrossAxis) {
3423 const sides2 = getAlignmentSides(placement, rects, rtl);
3424 overflows.push(overflow[sides2[0]], overflow[sides2[1]]);
3425 }
3426 overflowsData = [...overflowsData, {
3427 placement,
3428 overflows
3429 }];
3430 if (!overflows.every((side2) => side2 <= 0)) {
3431 var _middlewareData$flip2, _overflowsData$filter;
3432 const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;
3433 const nextPlacement = placements2[nextIndex];
3434 if (nextPlacement) {
3435 const ignoreCrossAxisOverflow = checkCrossAxis === "alignment" ? initialSideAxis !== getSideAxis(nextPlacement) : false;
3436 if (!ignoreCrossAxisOverflow || // We leave the current main axis only if every placement on that axis
3437 // overflows the main axis.
3438 overflowsData.every((d) => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {
3439 return {
3440 data: {
3441 index: nextIndex,
3442 overflows: overflowsData
3443 },
3444 reset: {
3445 placement: nextPlacement
3446 }
3447 };
3448 }
3449 }
3450 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;
3451 if (!resetPlacement) {
3452 switch (fallbackStrategy) {
3453 case "bestFit": {
3454 var _overflowsData$filter2;
3455 const placement2 = (_overflowsData$filter2 = overflowsData.filter((d) => {
3456 if (hasFallbackAxisSideDirection) {
3457 const currentSideAxis = getSideAxis(d.placement);
3458 return currentSideAxis === initialSideAxis || // Create a bias to the `y` side axis due to horizontal
3459 // reading directions favoring greater width.
3460 currentSideAxis === "y";
3461 }
3462 return true;
3463 }).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];
3464 if (placement2) {
3465 resetPlacement = placement2;
3466 }
3467 break;
3468 }
3469 case "initialPlacement":
3470 resetPlacement = initialPlacement;
3471 break;
3472 }
3473 }
3474 if (placement !== resetPlacement) {
3475 return {
3476 reset: {
3477 placement: resetPlacement
3478 }
3479 };
3480 }
3481 }
3482 return {};
3483 }
3484 };
3485 };
3486 var originSides = /* @__PURE__ */ new Set(["left", "top"]);
3487 async function convertValueToCoords(state, options) {
3488 const {
3489 placement,
3490 platform: platform3,
3491 elements
3492 } = state;
3493 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating));
3494 const side = getSide(placement);
3495 const alignment = getAlignment(placement);
3496 const isVertical = getSideAxis(placement) === "y";
3497 const mainAxisMulti = originSides.has(side) ? -1 : 1;
3498 const crossAxisMulti = rtl && isVertical ? -1 : 1;
3499 const rawValue = evaluate(options, state);
3500 let {
3501 mainAxis,
3502 crossAxis,
3503 alignmentAxis
3504 } = typeof rawValue === "number" ? {
3505 mainAxis: rawValue,
3506 crossAxis: 0,
3507 alignmentAxis: null
3508 } : {
3509 mainAxis: rawValue.mainAxis || 0,
3510 crossAxis: rawValue.crossAxis || 0,
3511 alignmentAxis: rawValue.alignmentAxis
3512 };
3513 if (alignment && typeof alignmentAxis === "number") {
3514 crossAxis = alignment === "end" ? alignmentAxis * -1 : alignmentAxis;
3515 }
3516 return isVertical ? {
3517 x: crossAxis * crossAxisMulti,
3518 y: mainAxis * mainAxisMulti
3519 } : {
3520 x: mainAxis * mainAxisMulti,
3521 y: crossAxis * crossAxisMulti
3522 };
3523 }
3524 var offset = function(options) {
3525 if (options === void 0) {
3526 options = 0;
3527 }
3528 return {
3529 name: "offset",
3530 options,
3531 async fn(state) {
3532 var _middlewareData$offse, _middlewareData$arrow;
3533 const {
3534 x,
3535 y,
3536 placement,
3537 middlewareData
3538 } = state;
3539 const diffCoords = await convertValueToCoords(state, options);
3540 if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
3541 return {};
3542 }
3543 return {
3544 x: x + diffCoords.x,
3545 y: y + diffCoords.y,
3546 data: {
3547 ...diffCoords,
3548 placement
3549 }
3550 };
3551 }
3552 };
3553 };
3554 var shift = function(options) {
3555 if (options === void 0) {
3556 options = {};
3557 }
3558 return {
3559 name: "shift",
3560 options,
3561 async fn(state) {
3562 const {
3563 x,
3564 y,
3565 placement,
3566 platform: platform3
3567 } = state;
3568 const {
3569 mainAxis: checkMainAxis = true,
3570 crossAxis: checkCrossAxis = false,
3571 limiter = {
3572 fn: (_ref) => {
3573 let {
3574 x: x2,
3575 y: y2
3576 } = _ref;
3577 return {
3578 x: x2,
3579 y: y2
3580 };
3581 }
3582 },
3583 ...detectOverflowOptions
3584 } = evaluate(options, state);
3585 const coords = {
3586 x,
3587 y
3588 };
3589 const overflow = await platform3.detectOverflow(state, detectOverflowOptions);
3590 const crossAxis = getSideAxis(placement);
3591 const mainAxis = getOppositeAxis(crossAxis);
3592 let mainAxisCoord = coords[mainAxis];
3593 let crossAxisCoord = coords[crossAxis];
3594 const clampCoord = (axis, coord) => clamp(coord + overflow[axis === "y" ? "top" : "left"], coord, coord - overflow[axis === "y" ? "bottom" : "right"]);
3595 if (checkMainAxis) {
3596 mainAxisCoord = clampCoord(mainAxis, mainAxisCoord);
3597 }
3598 if (checkCrossAxis) {
3599 crossAxisCoord = clampCoord(crossAxis, crossAxisCoord);
3600 }
3601 const limitedCoords = limiter.fn({
3602 ...state,
3603 [mainAxis]: mainAxisCoord,
3604 [crossAxis]: crossAxisCoord
3605 });
3606 return {
3607 ...limitedCoords,
3608 data: {
3609 x: limitedCoords.x - x,
3610 y: limitedCoords.y - y,
3611 enabled: {
3612 [mainAxis]: checkMainAxis,
3613 [crossAxis]: checkCrossAxis
3614 }
3615 }
3616 };
3617 }
3618 };
3619 };
3620 var limitShift = function(options) {
3621 if (options === void 0) {
3622 options = {};
3623 }
3624 return {
3625 options,
3626 fn(state) {
3627 var _rawOffset$mainAxis, _rawOffset$crossAxis;
3628 const {
3629 x,
3630 y,
3631 placement,
3632 rects,
3633 middlewareData
3634 } = state;
3635 const {
3636 offset: offset4 = 0,
3637 mainAxis: checkMainAxis = true,
3638 crossAxis: checkCrossAxis = true
3639 } = evaluate(options, state);
3640 const coords = {
3641 x,
3642 y
3643 };
3644 const crossAxis = getSideAxis(placement);
3645 const mainAxis = getOppositeAxis(crossAxis);
3646 let mainAxisCoord = coords[mainAxis];
3647 let crossAxisCoord = coords[crossAxis];
3648 const rawOffset = evaluate(offset4, state);
3649 const computedOffset = typeof rawOffset === "number" ? {
3650 mainAxis: rawOffset,
3651 crossAxis: 0
3652 } : {
3653 mainAxis: (_rawOffset$mainAxis = rawOffset.mainAxis) != null ? _rawOffset$mainAxis : 0,
3654 crossAxis: (_rawOffset$crossAxis = rawOffset.crossAxis) != null ? _rawOffset$crossAxis : 0
3655 };
3656 if (checkMainAxis) {
3657 const len = mainAxis === "y" ? "height" : "width";
3658 const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;
3659 const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;
3660 if (mainAxisCoord < limitMin) {
3661 mainAxisCoord = limitMin;
3662 } else if (mainAxisCoord > limitMax) {
3663 mainAxisCoord = limitMax;
3664 }
3665 }
3666 if (checkCrossAxis) {
3667 var _middlewareData$offse, _middlewareData$offse2;
3668 const len = mainAxis === "y" ? "width" : "height";
3669 const isOriginSide = originSides.has(getSide(placement));
3670 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);
3671 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);
3672 if (crossAxisCoord < limitMin) {
3673 crossAxisCoord = limitMin;
3674 } else if (crossAxisCoord > limitMax) {
3675 crossAxisCoord = limitMax;
3676 }
3677 }
3678 return {
3679 [mainAxis]: mainAxisCoord,
3680 [crossAxis]: crossAxisCoord
3681 };
3682 }
3683 };
3684 };
3685 var size = function(options) {
3686 if (options === void 0) {
3687 options = {};
3688 }
3689 return {
3690 name: "size",
3691 options,
3692 async fn(state) {
3693 const {
3694 placement,
3695 rects,
3696 platform: platform3,
3697 elements
3698 } = state;
3699 const {
3700 apply = () => {
3701 },
3702 ...detectOverflowOptions
3703 } = evaluate(options, state);
3704 const overflow = await platform3.detectOverflow(state, detectOverflowOptions);
3705 const side = getSide(placement);
3706 const alignment = getAlignment(placement);
3707 const isYAxis = getSideAxis(placement) === "y";
3708 const {
3709 width,
3710 height
3711 } = rects.floating;
3712 let heightSide;
3713 let widthSide;
3714 if (side === "top" || side === "bottom") {
3715 heightSide = side;
3716 widthSide = alignment === (await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)) ? "start" : "end") ? "left" : "right";
3717 } else {
3718 widthSide = side;
3719 heightSide = alignment === "end" ? "top" : "bottom";
3720 }
3721 const maximumClippingHeight = height - overflow.top - overflow.bottom;
3722 const maximumClippingWidth = width - overflow.left - overflow.right;
3723 const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);
3724 const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);
3725 const shiftData = state.middlewareData.shift;
3726 const noShift = !shiftData;
3727 let availableHeight2 = overflowAvailableHeight;
3728 let availableWidth2 = overflowAvailableWidth;
3729 if (shiftData != null && shiftData.enabled.x) {
3730 availableWidth2 = maximumClippingWidth;
3731 }
3732 if (shiftData != null && shiftData.enabled.y) {
3733 availableHeight2 = maximumClippingHeight;
3734 }
3735 if (noShift && !alignment) {
3736 if (isYAxis) {
3737 availableWidth2 = width - 2 * max(overflow.left, overflow.right);
3738 } else {
3739 availableHeight2 = height - 2 * max(overflow.top, overflow.bottom);
3740 }
3741 }
3742 await apply({
3743 ...state,
3744 availableWidth: availableWidth2,
3745 availableHeight: availableHeight2
3746 });
3747 const nextDimensions = await platform3.getDimensions(elements.floating);
3748 if (width !== nextDimensions.width || height !== nextDimensions.height) {
3749 return {
3750 reset: {
3751 rects: true
3752 }
3753 };
3754 }
3755 return {};
3756 }
3757 };
3758 };
3759
3760 // node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs
3761 function getCssDimensions(element) {
3762 const css = getComputedStyle2(element);
3763 let width = parseFloat(css.width) || 0;
3764 let height = parseFloat(css.height) || 0;
3765 const hasOffset = isHTMLElement(element);
3766 const offsetWidth = hasOffset ? element.offsetWidth : width;
3767 const offsetHeight = hasOffset ? element.offsetHeight : height;
3768 const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;
3769 if (shouldFallback) {
3770 width = offsetWidth;
3771 height = offsetHeight;
3772 }
3773 return {
3774 width,
3775 height,
3776 $: shouldFallback
3777 };
3778 }
3779 function unwrapElement(element) {
3780 return !isElement(element) ? element.contextElement : element;
3781 }
3782 function getScale(element) {
3783 const domElement = unwrapElement(element);
3784 if (!isHTMLElement(domElement)) {
3785 return createCoords(1);
3786 }
3787 const rect = domElement.getBoundingClientRect();
3788 const {
3789 width,
3790 height,
3791 $
3792 } = getCssDimensions(domElement);
3793 let x = ($ ? round(rect.width) : rect.width) / width;
3794 let y = ($ ? round(rect.height) : rect.height) / height;
3795 if (!x || !Number.isFinite(x)) {
3796 x = 1;
3797 }
3798 if (!y || !Number.isFinite(y)) {
3799 y = 1;
3800 }
3801 return {
3802 x,
3803 y
3804 };
3805 }
3806 var noOffsets = /* @__PURE__ */ createCoords(0);
3807 function getVisualOffsets(element) {
3808 const win = getWindow(element);
3809 if (!isWebKit() || !win.visualViewport) {
3810 return noOffsets;
3811 }
3812 return {
3813 x: win.visualViewport.offsetLeft,
3814 y: win.visualViewport.offsetTop
3815 };
3816 }
3817 function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {
3818 if (isFixed === void 0) {
3819 isFixed = false;
3820 }
3821 return !!floatingOffsetParent && isFixed && floatingOffsetParent === getWindow(element);
3822 }
3823 function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {
3824 if (includeScale === void 0) {
3825 includeScale = false;
3826 }
3827 if (isFixedStrategy === void 0) {
3828 isFixedStrategy = false;
3829 }
3830 const clientRect = element.getBoundingClientRect();
3831 const domElement = unwrapElement(element);
3832 let scale = createCoords(1);
3833 if (includeScale) {
3834 if (offsetParent) {
3835 if (isElement(offsetParent)) {
3836 scale = getScale(offsetParent);
3837 }
3838 } else {
3839 scale = getScale(element);
3840 }
3841 }
3842 const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);
3843 let x = (clientRect.left + visualOffsets.x) / scale.x;
3844 let y = (clientRect.top + visualOffsets.y) / scale.y;
3845 let width = clientRect.width / scale.x;
3846 let height = clientRect.height / scale.y;
3847 if (domElement && offsetParent) {
3848 const win = getWindow(domElement);
3849 const offsetWin = isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;
3850 let currentWin = win;
3851 let currentIFrame = getFrameElement(currentWin);
3852 while (currentIFrame && offsetWin !== currentWin) {
3853 const iframeScale = getScale(currentIFrame);
3854 const iframeRect = currentIFrame.getBoundingClientRect();
3855 const css = getComputedStyle2(currentIFrame);
3856 const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;
3857 const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;
3858 x *= iframeScale.x;
3859 y *= iframeScale.y;
3860 width *= iframeScale.x;
3861 height *= iframeScale.y;
3862 x += left;
3863 y += top;
3864 currentWin = getWindow(currentIFrame);
3865 currentIFrame = getFrameElement(currentWin);
3866 }
3867 }
3868 return rectToClientRect({
3869 width,
3870 height,
3871 x,
3872 y
3873 });
3874 }
3875 function getWindowScrollBarX(element, rect) {
3876 const leftScroll = getNodeScroll(element).scrollLeft;
3877 if (!rect) {
3878 return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;
3879 }
3880 return rect.left + leftScroll;
3881 }
3882 function getHTMLOffset(documentElement, scroll) {
3883 const htmlRect = documentElement.getBoundingClientRect();
3884 const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);
3885 const y = htmlRect.top + scroll.scrollTop;
3886 return {
3887 x,
3888 y
3889 };
3890 }
3891 function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
3892 let {
3893 elements,
3894 rect,
3895 offsetParent,
3896 strategy
3897 } = _ref;
3898 const isFixed = strategy === "fixed";
3899 const documentElement = getDocumentElement(offsetParent);
3900 const topLayer = elements ? isTopLayer(elements.floating) : false;
3901 if (offsetParent === documentElement || topLayer && isFixed) {
3902 return rect;
3903 }
3904 let scroll = {
3905 scrollLeft: 0,
3906 scrollTop: 0
3907 };
3908 let scale = createCoords(1);
3909 const offsets = createCoords(0);
3910 const isOffsetParentAnElement = isHTMLElement(offsetParent);
3911 if (isOffsetParentAnElement || !isFixed) {
3912 if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) {
3913 scroll = getNodeScroll(offsetParent);
3914 }
3915 if (isOffsetParentAnElement) {
3916 const offsetRect = getBoundingClientRect(offsetParent);
3917 scale = getScale(offsetParent);
3918 offsets.x = offsetRect.x + offsetParent.clientLeft;
3919 offsets.y = offsetRect.y + offsetParent.clientTop;
3920 }
3921 }
3922 const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
3923 return {
3924 width: rect.width * scale.x,
3925 height: rect.height * scale.y,
3926 x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,
3927 y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y
3928 };
3929 }
3930 function getClientRects(element) {
3931 return element.getClientRects ? Array.from(element.getClientRects()) : [];
3932 }
3933 function getDocumentRect(html) {
3934 const scroll = getNodeScroll(html);
3935 const body = html.ownerDocument.body;
3936 const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);
3937 const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);
3938 let x = -scroll.scrollLeft + getWindowScrollBarX(html);
3939 const y = -scroll.scrollTop;
3940 if (getComputedStyle2(body).direction === "rtl") {
3941 x += max(html.clientWidth, body.clientWidth) - width;
3942 }
3943 return {
3944 width,
3945 height,
3946 x,
3947 y
3948 };
3949 }
3950 var SCROLLBAR_MAX = 25;
3951 function getViewportRect(element, strategy, rootBoundary) {
3952 if (rootBoundary === void 0) {
3953 rootBoundary = "viewport";
3954 }
3955 const isLayoutViewport = rootBoundary === "layoutViewport";
3956 const win = getWindow(element);
3957 const html = getDocumentElement(element);
3958 const visualViewport = win.visualViewport;
3959 let width = html.clientWidth;
3960 let height = html.clientHeight;
3961 let x = 0;
3962 let y = 0;
3963 if (visualViewport) {
3964 const layoutRelativeClientCoords = !isWebKit() || strategy === "fixed";
3965 if (isLayoutViewport) {
3966 if (!layoutRelativeClientCoords) {
3967 x = -visualViewport.offsetLeft;
3968 y = -visualViewport.offsetTop;
3969 }
3970 } else {
3971 width = visualViewport.width;
3972 height = visualViewport.height;
3973 if (layoutRelativeClientCoords) {
3974 x = visualViewport.offsetLeft;
3975 y = visualViewport.offsetTop;
3976 }
3977 }
3978 }
3979 const windowScrollbarX = getWindowScrollBarX(html);
3980 if (windowScrollbarX <= 0) {
3981 const doc = html.ownerDocument;
3982 const body = doc.body;
3983 const bodyStyles = getComputedStyle(body);
3984 const bodyMarginInline = doc.compatMode === "CSS1Compat" ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;
3985 const reservedWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);
3986 const gutter = getComputedStyle(html).scrollbarGutter === "stable both-edges" ? reservedWidth / 2 : reservedWidth;
3987 if (gutter <= SCROLLBAR_MAX) {
3988 width -= gutter;
3989 }
3990 }
3991 return {
3992 width,
3993 height,
3994 x,
3995 y
3996 };
3997 }
3998 function getInnerBoundingClientRect(element, strategy) {
3999 const clientRect = getBoundingClientRect(element, true, strategy === "fixed");
4000 const top = clientRect.top + element.clientTop;
4001 const left = clientRect.left + element.clientLeft;
4002 const scale = getScale(element);
4003 const width = element.clientWidth * scale.x;
4004 const height = element.clientHeight * scale.y;
4005 const x = left * scale.x;
4006 const y = top * scale.y;
4007 return {
4008 width,
4009 height,
4010 x,
4011 y
4012 };
4013 }
4014 function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {
4015 let rect;
4016 if (clippingAncestor === "viewport" || clippingAncestor === "layoutViewport") {
4017 rect = getViewportRect(element, strategy, clippingAncestor);
4018 } else if (clippingAncestor === "document") {
4019 rect = getDocumentRect(getDocumentElement(element));
4020 } else if (isElement(clippingAncestor)) {
4021 rect = getInnerBoundingClientRect(clippingAncestor, strategy);
4022 } else {
4023 const visualOffsets = getVisualOffsets(element);
4024 rect = {
4025 x: clippingAncestor.x - visualOffsets.x,
4026 y: clippingAncestor.y - visualOffsets.y,
4027 width: clippingAncestor.width,
4028 height: clippingAncestor.height
4029 };
4030 }
4031 return rectToClientRect(rect);
4032 }
4033 function getClippingElementAncestors(element, cache) {
4034 const cachedResult = cache.get(element);
4035 if (cachedResult) {
4036 return cachedResult;
4037 }
4038 let result = getOverflowAncestors(element, [], false).filter((el) => isElement(el) && getNodeName(el) !== "body");
4039 let lastKeptComputedStyle = null;
4040 const elementIsFixed = getComputedStyle2(element).position === "fixed";
4041 let currentNode = elementIsFixed ? getParentNode(element) : element;
4042 while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {
4043 const computedStyle = getComputedStyle2(currentNode);
4044 const currentNodeIsContaining = isContainingBlock(currentNode);
4045 const lastPosition = lastKeptComputedStyle ? lastKeptComputedStyle.position : elementIsFixed ? "fixed" : "";
4046 const shouldDropCurrentNode = !currentNodeIsContaining && (lastPosition === "fixed" || lastPosition === "absolute" && computedStyle.position === "static");
4047 if (shouldDropCurrentNode) {
4048 result = result.filter((ancestor) => ancestor !== currentNode);
4049 } else {
4050 lastKeptComputedStyle = computedStyle;
4051 }
4052 currentNode = getParentNode(currentNode);
4053 }
4054 cache.set(element, result);
4055 return result;
4056 }
4057 function getClippingRect(_ref) {
4058 let {
4059 element,
4060 boundary,
4061 rootBoundary,
4062 strategy
4063 } = _ref;
4064 const elementClippingAncestors = boundary === "clippingAncestors" ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);
4065 const clippingAncestors = [...elementClippingAncestors, rootBoundary];
4066 const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);
4067 let top = firstRect.top;
4068 let right = firstRect.right;
4069 let bottom = firstRect.bottom;
4070 let left = firstRect.left;
4071 for (let i = 1; i < clippingAncestors.length; i++) {
4072 const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);
4073 top = max(rect.top, top);
4074 right = min(rect.right, right);
4075 bottom = min(rect.bottom, bottom);
4076 left = max(rect.left, left);
4077 }
4078 return {
4079 width: right - left,
4080 height: bottom - top,
4081 x: left,
4082 y: top
4083 };
4084 }
4085 function getDimensions(element) {
4086 const {
4087 width,
4088 height
4089 } = getCssDimensions(element);
4090 return {
4091 width,
4092 height
4093 };
4094 }
4095 function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
4096 const isOffsetParentAnElement = isHTMLElement(offsetParent);
4097 const documentElement = getDocumentElement(offsetParent);
4098 const isFixed = strategy === "fixed";
4099 const rect = getBoundingClientRect(element, true, isFixed, offsetParent);
4100 let scroll = {
4101 scrollLeft: 0,
4102 scrollTop: 0
4103 };
4104 const offsets = createCoords(0);
4105 if (isOffsetParentAnElement || !isFixed) {
4106 if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) {
4107 scroll = getNodeScroll(offsetParent);
4108 }
4109 if (isOffsetParentAnElement) {
4110 const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);
4111 offsets.x = offsetRect.x + offsetParent.clientLeft;
4112 offsets.y = offsetRect.y + offsetParent.clientTop;
4113 }
4114 }
4115 if (!isOffsetParentAnElement && documentElement) {
4116 offsets.x = getWindowScrollBarX(documentElement);
4117 }
4118 const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
4119 const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;
4120 const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;
4121 return {
4122 x,
4123 y,
4124 width: rect.width,
4125 height: rect.height
4126 };
4127 }
4128 function isStaticPositioned(element) {
4129 return getComputedStyle2(element).position === "static";
4130 }
4131 function getTrueOffsetParent(element, polyfill) {
4132 if (!isHTMLElement(element) || getComputedStyle2(element).position === "fixed") {
4133 return null;
4134 }
4135 if (polyfill) {
4136 return polyfill(element);
4137 }
4138 let rawOffsetParent = element.offsetParent;
4139 if (getDocumentElement(element) === rawOffsetParent) {
4140 rawOffsetParent = rawOffsetParent.ownerDocument.body;
4141 }
4142 return rawOffsetParent;
4143 }
4144 function getOffsetParent(element, polyfill) {
4145 const win = getWindow(element);
4146 if (isTopLayer(element)) {
4147 return win;
4148 }
4149 if (!isHTMLElement(element)) {
4150 let svgOffsetParent = getParentNode(element);
4151 while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {
4152 if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {
4153 return svgOffsetParent;
4154 }
4155 svgOffsetParent = getParentNode(svgOffsetParent);
4156 }
4157 return win;
4158 }
4159 let offsetParent = getTrueOffsetParent(element, polyfill);
4160 while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {
4161 offsetParent = getTrueOffsetParent(offsetParent, polyfill);
4162 }
4163 if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {
4164 return win;
4165 }
4166 return offsetParent || getContainingBlock(element) || win;
4167 }
4168 var getElementRects = async function(data) {
4169 const getOffsetParentFn = this.getOffsetParent || getOffsetParent;
4170 const getDimensionsFn = this.getDimensions;
4171 const floatingDimensions = await getDimensionsFn(data.floating);
4172 return {
4173 reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),
4174 floating: {
4175 x: 0,
4176 y: 0,
4177 width: floatingDimensions.width,
4178 height: floatingDimensions.height
4179 }
4180 };
4181 };
4182 function isRTL(element) {
4183 return getComputedStyle2(element).direction === "rtl";
4184 }
4185 var platform2 = {
4186 convertOffsetParentRelativeRectToViewportRelativeRect,
4187 getDocumentElement,
4188 getClippingRect,
4189 getOffsetParent,
4190 getElementRects,
4191 getClientRects,
4192 getDimensions,
4193 getScale,
4194 isElement,
4195 isRTL
4196 };
4197 function rectsAreEqual(a, b) {
4198 return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;
4199 }
4200 function observeMove(element, onMove, ancestorResize) {
4201 let io = null;
4202 let timeoutId;
4203 const root = getDocumentElement(element);
4204 function cleanup() {
4205 var _io;
4206 clearTimeout(timeoutId);
4207 (_io = io) == null || _io.disconnect();
4208 io = null;
4209 }
4210 function refresh(skip, threshold) {
4211 if (skip === void 0) {
4212 skip = false;
4213 }
4214 if (threshold === void 0) {
4215 threshold = 1;
4216 }
4217 cleanup();
4218 const elementRectForRootMargin = element.getBoundingClientRect();
4219 const {
4220 left,
4221 top,
4222 width,
4223 height
4224 } = elementRectForRootMargin;
4225 if (!skip) {
4226 onMove();
4227 }
4228 if (!width || !height) {
4229 return;
4230 }
4231 const insetTop = floor(top);
4232 const insetRight = floor(root.clientWidth - (left + width));
4233 const insetBottom = floor(root.clientHeight - (top + height));
4234 const insetLeft = floor(left);
4235 const rootMargin = -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px";
4236 const options = {
4237 rootMargin,
4238 threshold: max(0, min(1, threshold)) || 1
4239 };
4240 let isFirstUpdate = true;
4241 function handleObserve(entries) {
4242 const ratio = entries[0].intersectionRatio;
4243 if (!rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {
4244 return refresh();
4245 }
4246 if (ratio !== threshold) {
4247 if (!isFirstUpdate) {
4248 return refresh();
4249 }
4250 if (!ratio) {
4251 timeoutId = setTimeout(() => {
4252 refresh(false, 1e-7);
4253 }, 1e3);
4254 } else {
4255 refresh(false, ratio);
4256 }
4257 }
4258 isFirstUpdate = false;
4259 }
4260 try {
4261 io = new IntersectionObserver(handleObserve, {
4262 ...options,
4263 // Handle <iframe>s
4264 root: root.ownerDocument
4265 });
4266 } catch (_e) {
4267 io = new IntersectionObserver(handleObserve, options);
4268 }
4269 io.observe(element);
4270 }
4271 const win = getWindow(element);
4272 const handleResize = () => refresh(ancestorResize);
4273 win.addEventListener("resize", handleResize);
4274 refresh(true);
4275 return () => {
4276 win.removeEventListener("resize", handleResize);
4277 cleanup();
4278 };
4279 }
4280 function autoUpdate(reference, floating, update2, options) {
4281 if (options === void 0) {
4282 options = {};
4283 }
4284 const {
4285 ancestorScroll = true,
4286 ancestorResize = true,
4287 elementResize = typeof ResizeObserver === "function",
4288 layoutShift = typeof IntersectionObserver === "function",
4289 animationFrame = false
4290 } = options;
4291 const referenceEl = unwrapElement(reference);
4292 const ancestors = ancestorScroll || ancestorResize ? [...referenceEl ? getOverflowAncestors(referenceEl) : [], ...floating ? getOverflowAncestors(floating) : []] : [];
4293 ancestors.forEach((ancestor) => {
4294 ancestorScroll && ancestor.addEventListener("scroll", update2);
4295 ancestorResize && ancestor.addEventListener("resize", update2);
4296 });
4297 const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update2, ancestorResize) : null;
4298 let reobserveFrame = -1;
4299 let resizeObserver = null;
4300 if (elementResize) {
4301 resizeObserver = new ResizeObserver((_ref) => {
4302 let [firstEntry] = _ref;
4303 if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {
4304 resizeObserver.unobserve(floating);
4305 cancelAnimationFrame(reobserveFrame);
4306 reobserveFrame = requestAnimationFrame(() => {
4307 var _resizeObserver;
4308 (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);
4309 });
4310 }
4311 update2();
4312 });
4313 if (referenceEl && !animationFrame) {
4314 resizeObserver.observe(referenceEl);
4315 }
4316 if (floating) {
4317 resizeObserver.observe(floating);
4318 }
4319 }
4320 let frameId;
4321 let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;
4322 if (animationFrame) {
4323 frameLoop();
4324 }
4325 function frameLoop() {
4326 const nextRefRect = getBoundingClientRect(reference);
4327 if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {
4328 update2();
4329 }
4330 prevRefRect = nextRefRect;
4331 frameId = requestAnimationFrame(frameLoop);
4332 }
4333 update2();
4334 return () => {
4335 var _resizeObserver2;
4336 ancestors.forEach((ancestor) => {
4337 ancestorScroll && ancestor.removeEventListener("scroll", update2);
4338 ancestorResize && ancestor.removeEventListener("resize", update2);
4339 });
4340 cleanupIo == null || cleanupIo();
4341 (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();
4342 resizeObserver = null;
4343 if (animationFrame) {
4344 cancelAnimationFrame(frameId);
4345 }
4346 };
4347 }
4348 var offset2 = offset;
4349 var shift2 = shift;
4350 var flip2 = flip;
4351 var size2 = size;
4352 var limitShift2 = limitShift;
4353 var computePosition2 = (reference, floating, options) => {
4354 const cache = /* @__PURE__ */ new Map();
4355 const mergedOptions = options != null ? options : {};
4356 const platformWithCache = {
4357 ...platform2,
4358 ...mergedOptions.platform,
4359 _c: cache
4360 };
4361 return computePosition(reference, floating, {
4362 ...mergedOptions,
4363 platform: platformWithCache
4364 });
4365 };
4366
4367 // node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs
4368 var React17 = __toESM(require_react(), 1);
4369 var import_react2 = __toESM(require_react(), 1);
4370 var ReactDOM3 = __toESM(require_react_dom(), 1);
4371 var isClient = typeof document !== "undefined";
4372 var noop2 = function noop3() {
4373 };
4374 var index = isClient ? import_react2.useLayoutEffect : noop2;
4375 function deepEqual(a, b) {
4376 if (a === b) {
4377 return true;
4378 }
4379 if (typeof a !== typeof b) {
4380 return false;
4381 }
4382 if (typeof a === "function" && a.toString() === b.toString()) {
4383 return true;
4384 }
4385 let length;
4386 let i;
4387 let keys;
4388 if (a && b && typeof a === "object") {
4389 if (Array.isArray(a)) {
4390 length = a.length;
4391 if (length !== b.length) return false;
4392 for (i = length; i-- !== 0; ) {
4393 if (!deepEqual(a[i], b[i])) {
4394 return false;
4395 }
4396 }
4397 return true;
4398 }
4399 keys = Object.keys(a);
4400 length = keys.length;
4401 if (length !== Object.keys(b).length) {
4402 return false;
4403 }
4404 for (i = length; i-- !== 0; ) {
4405 if (!{}.hasOwnProperty.call(b, keys[i])) {
4406 return false;
4407 }
4408 }
4409 for (i = length; i-- !== 0; ) {
4410 const key = keys[i];
4411 if (key === "_owner" && a.$$typeof) {
4412 continue;
4413 }
4414 if (!deepEqual(a[key], b[key])) {
4415 return false;
4416 }
4417 }
4418 return true;
4419 }
4420 return a !== a && b !== b;
4421 }
4422 function getDPR(element) {
4423 if (typeof window === "undefined") {
4424 return 1;
4425 }
4426 const win = element.ownerDocument.defaultView || window;
4427 return win.devicePixelRatio || 1;
4428 }
4429 function roundByDPR(element, value) {
4430 const dpr = getDPR(element);
4431 return Math.round(value * dpr) / dpr;
4432 }
4433 function useLatestRef(value) {
4434 const ref = React17.useRef(value);
4435 index(() => {
4436 ref.current = value;
4437 });
4438 return ref;
4439 }
4440 function useFloating(options) {
4441 if (options === void 0) {
4442 options = {};
4443 }
4444 const {
4445 placement = "bottom",
4446 strategy = "absolute",
4447 middleware = [],
4448 platform: platform3,
4449 elements: {
4450 reference: externalReference,
4451 floating: externalFloating
4452 } = {},
4453 transform = true,
4454 whileElementsMounted,
4455 open: open2
4456 } = options;
4457 const [data, setData] = React17.useState({
4458 x: 0,
4459 y: 0,
4460 strategy,
4461 placement,
4462 middlewareData: {},
4463 isPositioned: false
4464 });
4465 const [latestMiddleware, setLatestMiddleware] = React17.useState(middleware);
4466 if (!deepEqual(latestMiddleware, middleware)) {
4467 setLatestMiddleware(middleware);
4468 }
4469 const [_reference, _setReference] = React17.useState(null);
4470 const [_floating, _setFloating] = React17.useState(null);
4471 const setReference = React17.useCallback((node) => {
4472 if (node !== referenceRef.current) {
4473 referenceRef.current = node;
4474 _setReference(node);
4475 }
4476 }, []);
4477 const setFloating = React17.useCallback((node) => {
4478 if (node !== floatingRef.current) {
4479 floatingRef.current = node;
4480 _setFloating(node);
4481 }
4482 }, []);
4483 const referenceEl = externalReference || _reference;
4484 const floatingEl = externalFloating || _floating;
4485 const referenceRef = React17.useRef(null);
4486 const floatingRef = React17.useRef(null);
4487 const dataRef = React17.useRef(data);
4488 const hasWhileElementsMounted = whileElementsMounted != null;
4489 const whileElementsMountedRef = useLatestRef(whileElementsMounted);
4490 const platformRef = useLatestRef(platform3);
4491 const openRef = useLatestRef(open2);
4492 const update2 = React17.useCallback(() => {
4493 if (!referenceRef.current || !floatingRef.current) {
4494 return;
4495 }
4496 const config = {
4497 placement,
4498 strategy,
4499 middleware: latestMiddleware
4500 };
4501 if (platformRef.current) {
4502 config.platform = platformRef.current;
4503 }
4504 computePosition2(referenceRef.current, floatingRef.current, config).then((data2) => {
4505 const fullData = {
4506 ...data2,
4507 // The floating element's position may be recomputed while it's closed
4508 // but still mounted (such as when transitioning out). To ensure
4509 // `isPositioned` will be `false` initially on the next open, avoid
4510 // setting it to `true` when `open === false` (must be specified).
4511 isPositioned: openRef.current !== false
4512 };
4513 if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {
4514 dataRef.current = fullData;
4515 ReactDOM3.flushSync(() => {
4516 setData(fullData);
4517 });
4518 }
4519 });
4520 }, [latestMiddleware, placement, strategy, platformRef, openRef]);
4521 index(() => {
4522 if (open2 === false && dataRef.current.isPositioned) {
4523 dataRef.current.isPositioned = false;
4524 setData((data2) => ({
4525 ...data2,
4526 isPositioned: false
4527 }));
4528 }
4529 }, [open2]);
4530 const isMountedRef = React17.useRef(false);
4531 index(() => {
4532 isMountedRef.current = true;
4533 return () => {
4534 isMountedRef.current = false;
4535 };
4536 }, []);
4537 index(() => {
4538 if (referenceEl) referenceRef.current = referenceEl;
4539 if (floatingEl) floatingRef.current = floatingEl;
4540 if (referenceEl && floatingEl) {
4541 if (whileElementsMountedRef.current) {
4542 return whileElementsMountedRef.current(referenceEl, floatingEl, update2);
4543 }
4544 update2();
4545 }
4546 }, [referenceEl, floatingEl, update2, whileElementsMountedRef, hasWhileElementsMounted]);
4547 const refs = React17.useMemo(() => ({
4548 reference: referenceRef,
4549 floating: floatingRef,
4550 setReference,
4551 setFloating
4552 }), [setReference, setFloating]);
4553 const elements = React17.useMemo(() => ({
4554 reference: referenceEl,
4555 floating: floatingEl
4556 }), [referenceEl, floatingEl]);
4557 const floatingStyles = React17.useMemo(() => {
4558 const initialStyles = {
4559 position: strategy,
4560 left: 0,
4561 top: 0
4562 };
4563 if (!elements.floating) {
4564 return initialStyles;
4565 }
4566 const x = roundByDPR(elements.floating, data.x);
4567 const y = roundByDPR(elements.floating, data.y);
4568 if (transform) {
4569 return {
4570 ...initialStyles,
4571 transform: "translate(" + x + "px, " + y + "px)",
4572 ...getDPR(elements.floating) >= 1.5 && {
4573 willChange: "transform"
4574 }
4575 };
4576 }
4577 return {
4578 position: strategy,
4579 left: x,
4580 top: y
4581 };
4582 }, [strategy, transform, elements.floating, data.x, data.y]);
4583 return React17.useMemo(() => ({
4584 ...data,
4585 update: update2,
4586 refs,
4587 elements,
4588 floatingStyles
4589 }), [data, update2, refs, elements, floatingStyles]);
4590 }
4591 var offset3 = (options, deps) => {
4592 const result = offset2(options);
4593 return {
4594 name: result.name,
4595 fn: result.fn,
4596 options: [options, deps]
4597 };
4598 };
4599 var shift3 = (options, deps) => {
4600 const result = shift2(options);
4601 return {
4602 name: result.name,
4603 fn: result.fn,
4604 options: [options, deps]
4605 };
4606 };
4607 var limitShift3 = (options, deps) => {
4608 const result = limitShift2(options);
4609 return {
4610 fn: result.fn,
4611 options: [options, deps]
4612 };
4613 };
4614 var flip3 = (options, deps) => {
4615 const result = flip2(options);
4616 return {
4617 name: result.name,
4618 fn: result.fn,
4619 options: [options, deps]
4620 };
4621 };
4622 var size3 = (options, deps) => {
4623 const result = size2(options);
4624 return {
4625 name: result.name,
4626 fn: result.fn,
4627 options: [options, deps]
4628 };
4629 };
4630
4631 // node_modules/@base-ui/react/utils/popups/popupHandle.mjs
4632 var BasePopupHandle = class {
4633 /**
4634 * Stores of every root currently using this handle, in attach order. A handle is meant to be used
4635 * by a single mounted root, but roots can transiently overlap (e.g. during an animated route
4636 * transition), so this stack lets `attachStore`'s cleanup restore the previous root instead of
4637 * leaving a still-mounted root uncontrollable when a newer overlapping root detaches first.
4638 */
4639 attachedStores = [];
4640 /**
4641 * Store of the root that currently controls the handle: the most recently attached one still
4642 * mounted, or `null` when no root is attached. Imperative methods are no-ops while this is `null`.
4643 */
4644 attachedStoreValue = null;
4645 /**
4646 * Listeners notified when `attachedStore` changes, so detached triggers can follow the store pointer.
4647 */
4648 storeListeners = /* @__PURE__ */ new Set();
4649 /**
4650 * Creates a handle backed by the store used while no root is attached.
4651 *
4652 * @param fallbackStore Inert, closed store handed to detached triggers while no root is attached,
4653 * so they can render and register without a mounted root. Triggers register into whichever store
4654 * `store` currently resolves to, so while detached they live in this store's trigger map and
4655 * migrate themselves to the root's store (and back) as it attaches/detaches.
4656 * @param componentName Component name used to prefix dev warnings, e.g. `'Menu'` produces
4657 * `MenuHandle.open()` in warning text.
4658 * @param throwOnMissingTrigger Whether `open(triggerId)` throws when no trigger with that id is
4659 * registered. Anchored popups (Menu, Popover, Tooltip, PreviewCard) need a trigger to anchor to,
4660 * so they throw; Dialog is not anchored and instead opens unassociated with a dev warning.
4661 */
4662 constructor(fallbackStore, componentName, throwOnMissingTrigger = true) {
4663 this.fallbackStore = fallbackStore;
4664 this.componentName = componentName;
4665 this.throwOnMissingTrigger = throwOnMissingTrigger;
4666 }
4667 get attachedStore() {
4668 return this.attachedStoreValue;
4669 }
4670 /**
4671 * Store that detached triggers read from: the attached root's store, or an inert fallback store
4672 * used while no root is attached.
4673 * @internal
4674 */
4675 get store() {
4676 return this.attachedStoreValue ?? this.fallbackStore;
4677 }
4678 /**
4679 * Stable fallback store used for server rendering and hydration. Root stores cannot be recorded on
4680 * the handle during render because a handle can be shared by concurrent server-rendered requests.
4681 * @internal
4682 */
4683 get serverStore() {
4684 return this.fallbackStore;
4685 }
4686 /**
4687 * Subscribes to changes of the attached store pointer so detached triggers re-render and re-bind
4688 * when a root attaches or detaches. Returns a function that removes the listener.
4689 * @internal
4690 */
4691 subscribeStore(listener) {
4692 this.storeListeners.add(listener);
4693 return () => {
4694 this.storeListeners.delete(listener);
4695 };
4696 }
4697 /**
4698 * Points the handle at a root's store and notifies subscribers so detached triggers re-render and
4699 * re-register into it (their registration effect migrates them when the store pointer changes).
4700 * Returns a cleanup function that detaches the store again.
4701 * @internal
4702 */
4703 attachStore(newStore) {
4704 this.attachedStores.push(newStore);
4705 this.setActiveStore(newStore);
4706 if (true) {
4707 if (this.attachedStores.length > 1) {
4708 const dev = this;
4709 (dev.overlapWarningFrame ??= AnimationFrame.create()).request(() => {
4710 if (this.attachedStores.length > 1) {
4711 console.warn("Base UI: A handle is attached to more than one mounted root at the same time. The most recently mounted root takes over and the previous one stops being controlled by the handle. A handle should be used by a single root that stays mounted for the lifetime of the handle.");
4712 }
4713 });
4714 }
4715 }
4716 return () => {
4717 const index2 = this.attachedStores.lastIndexOf(newStore);
4718 if (index2 !== -1) {
4719 this.attachedStores.splice(index2, 1);
4720 }
4721 this.setActiveStore(this.attachedStores[this.attachedStores.length - 1] ?? null);
4722 };
4723 }
4724 /**
4725 * Sets the store that currently controls the handle and notifies subscribers when it changes, so
4726 * detached triggers re-render and migrate their registration to the new store.
4727 */
4728 setActiveStore(store2) {
4729 if (this.attachedStoreValue !== store2) {
4730 this.attachedStoreValue = store2;
4731 this.storeListeners.forEach((listener) => {
4732 listener();
4733 });
4734 }
4735 }
4736 /**
4737 * Opens the attached root's store and associates it with the trigger with the given id, or a
4738 * no-op (with a dev warning) while no root is attached. Shared by every concrete handle's public
4739 * `open()` method, which only narrows the parameter type.
4740 *
4741 * When a trigger id is given but no matching trigger is registered, anchored popups throw (see
4742 * `throwOnMissingTrigger`); Dialog opens unassociated with a dev warning instead.
4743 *
4744 * This method should only be called in an event handler or an effect (not during rendering).
4745 *
4746 * @param triggerId ID of the trigger to associate with the popup, or `null`/`undefined` to open
4747 * without associating any trigger.
4748 */
4749 openByTrigger(triggerId) {
4750 const attachedStore = this.attachedStore;
4751 if (attachedStore === null) {
4752 if (true) {
4753 console.warn(`Base UI: ${this.componentName}Handle.open() was called while no root using this handle is mounted. The call was ignored; mount a root with this handle before opening it imperatively.`);
4754 }
4755 return;
4756 }
4757 let triggerElement;
4758 if (triggerId) {
4759 for (let i = this.attachedStores.length - 1; i >= 0 && !triggerElement; i -= 1) {
4760 triggerElement = this.attachedStores[i].context.triggerElements.getById(triggerId);
4761 }
4762 triggerElement ??= this.fallbackStore.context.triggerElements.getById(triggerId);
4763 }
4764 if (triggerId && !triggerElement) {
4765 if (this.throwOnMissingTrigger) {
4766 throw new Error(true ? `Base UI: ${this.componentName}Handle.open() was called with the trigger id "${triggerId}", but no matching trigger is registered with this handle. An anchored popup cannot open without a trigger to anchor to. Pass the id of a mounted ${this.componentName}.Trigger that has this handle set on its "handle" prop.` : formatErrorMessage_default(99, this.componentName, triggerId, this.componentName));
4767 }
4768 if (true) {
4769 console.warn(`Base UI: ${this.componentName}Handle.open: No trigger found with id "${triggerId}". The popup will open, but the trigger will not be associated with it.`);
4770 }
4771 }
4772 attachedStore.setOpen(true, createChangeEventDetails(reason_parts_exports.imperativeAction, void 0, triggerElement));
4773 }
4774 /**
4775 * Closes the popup by setting the attached root's store to closed, or a no-op (with a dev warning)
4776 * while no root is attached. Shared by every concrete handle's public `close()` method.
4777 *
4778 * This method should only be called in an event handler or an effect (not during rendering).
4779 */
4780 closePopup() {
4781 const attachedStore = this.attachedStore;
4782 if (attachedStore === null) {
4783 if (true) {
4784 console.warn(`Base UI: ${this.componentName}Handle.close() was called while no root using this handle is mounted. The call was ignored.`);
4785 }
4786 return;
4787 }
4788 attachedStore.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction));
4789 }
4790 };
4791
4792 // node_modules/@base-ui/react/utils/popups/popupStoreUtils.mjs
4793 var React22 = __toESM(require_react(), 1);
4794 var ReactDOM4 = __toESM(require_react_dom(), 1);
4795
4796 // node_modules/@base-ui/react/floating-ui-react/hooks/useSyncedFloatingRootContext.mjs
4797 var React21 = __toESM(require_react(), 1);
4798
4799 // node_modules/@base-ui/utils/store/useStore.mjs
4800 var React19 = __toESM(require_react(), 1);
4801 var import_shim = __toESM(require_shim(), 1);
4802 var import_with_selector = __toESM(require_with_selector(), 1);
4803
4804 // node_modules/@base-ui/utils/fastHooks.mjs
4805 var React18 = __toESM(require_react(), 1);
4806 var hooks = [];
4807 var currentInstance = void 0;
4808 function getInstance() {
4809 return currentInstance;
4810 }
4811 function register(hook) {
4812 hooks.push(hook);
4813 }
4814 function fastComponent(fn) {
4815 const FastComponent = (props, forwardedRef) => {
4816 const instance = useRefWithInit(createInstance).current;
4817 let result;
4818 try {
4819 currentInstance = instance;
4820 for (const hook of hooks) {
4821 hook.before(instance);
4822 }
4823 result = fn(props, forwardedRef);
4824 for (const hook of hooks) {
4825 hook.after(instance);
4826 }
4827 instance.didInitialize = true;
4828 } finally {
4829 currentInstance = void 0;
4830 }
4831 return result;
4832 };
4833 FastComponent.displayName = fn.displayName || fn.name;
4834 return FastComponent;
4835 }
4836 function fastComponentRef(fn) {
4837 return /* @__PURE__ */ React18.forwardRef(fastComponent(fn));
4838 }
4839 function createInstance() {
4840 return {
4841 didInitialize: false
4842 };
4843 }
4844
4845 // node_modules/@base-ui/utils/store/useStore.mjs
4846 var canUseRawUseSyncExternalStore = isReactVersionAtLeast(19);
4847 var useStoreImplementation = canUseRawUseSyncExternalStore ? useStoreFast : useStoreLegacy;
4848 function useStore(store2, selector, a1, a2, a3) {
4849 return useStoreImplementation(store2, selector, a1, a2, a3);
4850 }
4851 function useStoreR19(store2, selector, a1, a2, a3) {
4852 const getSelection = React19.useCallback(() => selector(store2.getSnapshot(), a1, a2, a3), [store2, selector, a1, a2, a3]);
4853 return (0, import_shim.useSyncExternalStore)(store2.subscribe, getSelection, getSelection);
4854 }
4855 register({
4856 before(instance) {
4857 instance.syncIndex = 0;
4858 if (!instance.didInitialize) {
4859 instance.syncTick = 1;
4860 instance.syncHooks = [];
4861 instance.didChangeStore = true;
4862 instance.getSnapshot = () => {
4863 let didChange2 = false;
4864 for (let i = 0; i < instance.syncHooks.length; i += 1) {
4865 const hook = instance.syncHooks[i];
4866 const value = hook.selector(hook.store.state, hook.a1, hook.a2, hook.a3);
4867 if (!Object.is(hook.value, value)) {
4868 didChange2 = true;
4869 hook.value = value;
4870 }
4871 }
4872 if (didChange2) {
4873 instance.syncTick += 1;
4874 }
4875 return instance.syncTick;
4876 };
4877 }
4878 },
4879 after(instance) {
4880 if (instance.syncHooks.length > 0) {
4881 if (instance.didChangeStore) {
4882 instance.didChangeStore = false;
4883 instance.subscribe = (onStoreChange) => {
4884 const stores = /* @__PURE__ */ new Set();
4885 for (const hook of instance.syncHooks) {
4886 stores.add(hook.store);
4887 }
4888 const unsubscribes = [];
4889 for (const store2 of stores) {
4890 unsubscribes.push(store2.subscribe(onStoreChange));
4891 }
4892 return () => {
4893 for (const unsubscribe of unsubscribes) {
4894 unsubscribe();
4895 }
4896 };
4897 };
4898 }
4899 (0, import_shim.useSyncExternalStore)(instance.subscribe, instance.getSnapshot, instance.getSnapshot);
4900 }
4901 }
4902 });
4903 function useStoreFast(store2, selector, a1, a2, a3) {
4904 const instance = getInstance();
4905 if (!instance) {
4906 return useStoreR19(store2, selector, a1, a2, a3);
4907 }
4908 const index2 = instance.syncIndex;
4909 instance.syncIndex += 1;
4910 let hook;
4911 if (!instance.didInitialize) {
4912 hook = {
4913 store: store2,
4914 selector,
4915 a1,
4916 a2,
4917 a3,
4918 value: selector(store2.getSnapshot(), a1, a2, a3)
4919 };
4920 instance.syncHooks.push(hook);
4921 } else {
4922 hook = instance.syncHooks[index2];
4923 if (hook.store !== store2 || hook.selector !== selector || !Object.is(hook.a1, a1) || !Object.is(hook.a2, a2) || !Object.is(hook.a3, a3)) {
4924 if (hook.store !== store2) {
4925 instance.didChangeStore = true;
4926 }
4927 hook.store = store2;
4928 hook.selector = selector;
4929 hook.a1 = a1;
4930 hook.a2 = a2;
4931 hook.a3 = a3;
4932 hook.value = selector(store2.getSnapshot(), a1, a2, a3);
4933 }
4934 }
4935 return hook.value;
4936 }
4937 function useStoreLegacy(store2, selector, a1, a2, a3) {
4938 return (0, import_with_selector.useSyncExternalStoreWithSelector)(store2.subscribe, store2.getSnapshot, store2.getSnapshot, (state) => selector(state, a1, a2, a3));
4939 }
4940
4941 // node_modules/@base-ui/utils/store/Store.mjs
4942 var Store = class {
4943 /**
4944 * Creates a store with the given initial state, constructing the class it is called on.
4945 * Calling it on a generic base class (e.g. `ReactStore.create(...)`) constructs that
4946 * class but degrades the inferred instance type to `Store`; use `new` there instead.
4947 */
4948 static create(state) {
4949 return new this(state);
4950 }
4951 /**
4952 * The current state of the store.
4953 * This property is updated immediately when the state changes as a result of calling {@link setState}, {@link update}, or {@link set}.
4954 * 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).
4955 * The values can be used directly (to avoid subscribing to the store) in effects or event handlers.
4956 *
4957 * Do not modify properties in state directly. Instead, use the provided methods to ensure proper state management and listener notification.
4958 */
4959 // Internal state to handle recursive `setState()` calls
4960 constructor(state) {
4961 this.state = state;
4962 this.listeners = /* @__PURE__ */ new Set();
4963 this.updateTick = 0;
4964 }
4965 /**
4966 * Registers a listener that will be called whenever the store's state changes.
4967 *
4968 * @param fn The listener function to be called on state changes.
4969 * @returns A function to unsubscribe the listener.
4970 */
4971 subscribe = (fn) => {
4972 this.listeners.add(fn);
4973 return () => {
4974 this.listeners.delete(fn);
4975 };
4976 };
4977 /**
4978 * Returns the current state of the store.
4979 */
4980 getSnapshot = () => {
4981 return this.state;
4982 };
4983 /**
4984 * Updates the entire store's state and notifies all registered listeners.
4985 *
4986 * @param newState The new state to set for the store.
4987 */
4988 setState(newState) {
4989 if (this.state === newState) {
4990 return;
4991 }
4992 this.state = newState;
4993 this.updateTick += 1;
4994 const currentTick = this.updateTick;
4995 for (const listener of this.listeners) {
4996 if (currentTick !== this.updateTick) {
4997 return;
4998 }
4999 listener(newState);
5000 }
5001 }
5002 /**
5003 * Merges the provided changes into the current state and notifies listeners if there are changes.
5004 * Each value must match its state key. Pass an exact known subset rather than a broad
5005 * `Partial<State>`, which may contain `undefined` for required state fields.
5006 *
5007 * @param changes An object containing the changes to apply to the current state.
5008 */
5009 update(changes) {
5010 for (const key in changes) {
5011 if (!Object.is(this.state[key], changes[key])) {
5012 this.setState({
5013 ...this.state,
5014 ...changes
5015 });
5016 return;
5017 }
5018 }
5019 }
5020 /**
5021 * Sets a specific key in the store's state to a new value and notifies listeners if the value has changed.
5022 *
5023 * @param key The key in the store's state to update.
5024 * @param value The new value to set for the specified key.
5025 */
5026 set(key, value) {
5027 if (!Object.is(this.state[key], value)) {
5028 this.setState({
5029 ...this.state,
5030 [key]: value
5031 });
5032 }
5033 }
5034 /**
5035 * Gives the state a new reference and updates all registered listeners.
5036 */
5037 notifyAll() {
5038 const newState = {
5039 ...this.state
5040 };
5041 this.setState(newState);
5042 }
5043 use(selector, a1, a2, a3) {
5044 return useStore(this, selector, a1, a2, a3);
5045 }
5046 };
5047
5048 // node_modules/@base-ui/utils/store/ReactStore.mjs
5049 var React20 = __toESM(require_react(), 1);
5050 var ReactStore = class extends Store {
5051 /**
5052 * Creates a new ReactStore instance.
5053 *
5054 * @param state Initial state of the store.
5055 * @param context Non-reactive context values.
5056 * @param selectors Optional selectors for use with `useState`.
5057 */
5058 constructor(state, context = {}, selectors3) {
5059 super(state);
5060 this.context = context;
5061 this.selectors = selectors3;
5062 }
5063 /**
5064 * Non-reactive values such as refs, callbacks, etc.
5065 */
5066 /**
5067 * Synchronizes a single external value into the store.
5068 *
5069 * Note that the while the value in `state` is updated immediately, the value returned
5070 * by `useState` is updated before the next render (similarly to React's `useState`).
5071 */
5072 useSyncedValue(key, value) {
5073 React20.useDebugValue(key);
5074 const store2 = this;
5075 useIsoLayoutEffect(() => {
5076 if (store2.state[key] !== value) {
5077 store2.set(key, value);
5078 }
5079 }, [store2, key, value]);
5080 }
5081 /**
5082 * Synchronizes a single external value into the store and
5083 * cleans it up (sets to `undefined`) on unmount.
5084 *
5085 * Note that the while the value in `state` is updated immediately, the value returned
5086 * by `useState` is updated before the next render (similarly to React's `useState`).
5087 */
5088 useSyncedValueWithCleanup(key, value) {
5089 const store2 = this;
5090 useIsoLayoutEffect(() => {
5091 if (store2.state[key] !== value) {
5092 store2.set(key, value);
5093 }
5094 return () => {
5095 store2.set(key, void 0);
5096 };
5097 }, [store2, key, value]);
5098 }
5099 /**
5100 * Synchronizes multiple external values into the store.
5101 * Each value must match its state key. Pass an exact known subset rather than a broad
5102 * `Partial<State>`, which may contain `undefined` for required state fields.
5103 *
5104 * Note that the while the values in `state` are updated immediately, the values returned
5105 * by `useState` are updated before the next render (similarly to React's `useState`).
5106 *
5107 * @param statePart An exact subset of state fields to synchronize. Unknown keys are not accepted.
5108 */
5109 useSyncedValues(statePart) {
5110 const store2 = this;
5111 if (true) {
5112 React20.useDebugValue(statePart, (p) => Object.keys(p));
5113 const keys = React20.useRef(Object.keys(statePart)).current;
5114 const nextKeys = Object.keys(statePart);
5115 if (keys.length !== nextKeys.length || keys.some((key, index2) => key !== nextKeys[index2])) {
5116 console.error("ReactStore.useSyncedValues expects the same prop keys on every render. Keys should be stable.");
5117 }
5118 }
5119 const dependencies = Object.values(statePart);
5120 useIsoLayoutEffect(() => {
5121 store2.update(statePart);
5122 }, [store2, ...dependencies]);
5123 }
5124 /**
5125 * Registers a controllable prop pair (`controlled`, `defaultValue`) for a specific key. If `controlled`
5126 * is non-undefined, the store's state at `key` is updated to match `controlled`.
5127 */
5128 useControlledProp(key, controlled) {
5129 React20.useDebugValue(key);
5130 const store2 = this;
5131 const isControlled = controlled !== void 0;
5132 useIsoLayoutEffect(() => {
5133 if (isControlled && !Object.is(store2.state[key], controlled)) {
5134 store2.setState({
5135 ...store2.state,
5136 [key]: controlled
5137 });
5138 }
5139 }, [store2, key, controlled, isControlled]);
5140 if (true) {
5141 const cache = this.controlledValues ??= /* @__PURE__ */ new Map();
5142 if (!cache.has(key)) {
5143 cache.set(key, isControlled);
5144 }
5145 const previouslyControlled = cache.get(key);
5146 if (previouslyControlled !== void 0 && previouslyControlled !== isControlled) {
5147 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).`);
5148 }
5149 }
5150 }
5151 /** Gets the current value from the store using a selector with the provided key.
5152 *
5153 * @param key Key of the selector to use.
5154 */
5155 select(key, a1, a2, a3) {
5156 const selector = this.selectors[key];
5157 return selector(this.state, a1, a2, a3);
5158 }
5159 /**
5160 * Returns a value from the store's state using a selector function.
5161 * Used to subscribe to specific parts of the state.
5162 * This methods causes a rerender whenever the selected state changes.
5163 *
5164 * @param key Key of the selector to use.
5165 */
5166 useState(key, a1, a2, a3) {
5167 React20.useDebugValue(key);
5168 return useStore(this, this.selectors[key], a1, a2, a3);
5169 }
5170 /**
5171 * Wraps a function with `useStableCallback` to ensure it has a stable reference
5172 * and assigns it to the context.
5173 *
5174 * @param key Key of the event callback. Must be a function in the context.
5175 * @param fn Function to assign.
5176 */
5177 useContextCallback(key, fn) {
5178 React20.useDebugValue(key);
5179 const stableFunction = useStableCallback(fn ?? NOOP);
5180 this.context[key] = stableFunction;
5181 }
5182 /**
5183 * Returns a stable setter function for a specific key in the store's state.
5184 * It's commonly used to pass as a ref callback to React elements.
5185 *
5186 * @param key Key of the state to set.
5187 */
5188 useStateSetter(key) {
5189 const ref = React20.useRef(void 0);
5190 if (ref.current === void 0) {
5191 ref.current = (value) => {
5192 this.set(key, value);
5193 };
5194 }
5195 return ref.current;
5196 }
5197 /**
5198 * Observes changes derived from the store's selectors and calls the listener when the selected value changes.
5199 *
5200 * @param key Key of the selector to observe.
5201 * @param listener Listener function called when the selector result changes.
5202 */
5203 observe(selector, listener) {
5204 let selectFn;
5205 if (typeof selector === "function") {
5206 selectFn = selector;
5207 } else {
5208 selectFn = this.selectors[selector];
5209 }
5210 let prevValue = selectFn(this.state);
5211 listener(prevValue, prevValue, this);
5212 return this.subscribe((nextState) => {
5213 const nextValue = selectFn(nextState);
5214 if (!Object.is(prevValue, nextValue)) {
5215 const oldValue = prevValue;
5216 prevValue = nextValue;
5217 listener(nextValue, oldValue, this);
5218 }
5219 });
5220 }
5221 };
5222
5223 // node_modules/@base-ui/react/floating-ui-react/components/FloatingRootStore.mjs
5224 var selectors = {
5225 open: (state) => state.open,
5226 transitionStatus: (state) => state.transitionStatus,
5227 domReferenceElement: (state) => state.domReferenceElement,
5228 referenceElement: (state) => state.positionReference ?? state.referenceElement,
5229 floatingElement: (state) => state.floatingElement,
5230 floatingId: (state) => state.floatingId
5231 };
5232 var FloatingRootStore = class extends ReactStore {
5233 constructor(options) {
5234 const {
5235 syncOnly,
5236 nested,
5237 onOpenChange,
5238 triggerElements,
5239 ...initialState2
5240 } = options;
5241 super({
5242 ...initialState2,
5243 positionReference: initialState2.referenceElement,
5244 domReferenceElement: initialState2.referenceElement
5245 }, {
5246 onOpenChange,
5247 dataRef: {
5248 current: {}
5249 },
5250 events: createEventEmitter(),
5251 nested,
5252 triggerElements
5253 }, selectors);
5254 this.syncOnly = syncOnly;
5255 }
5256 /**
5257 * Syncs the event used by hover logic to distinguish hover-open from click-like interaction.
5258 */
5259 syncOpenEvent = (newOpen, event) => {
5260 if (!newOpen || !this.state.open || // Prevent a pending hover-open from overwriting a click-open event, while allowing
5261 // click events to upgrade a hover-open.
5262 event != null && isClickLikeEvent(event)) {
5263 this.context.dataRef.current.openEvent = newOpen ? event : void 0;
5264 }
5265 };
5266 /**
5267 * Runs the root-owned side effects for an open state change.
5268 */
5269 dispatchOpenChange = (newOpen, eventDetails) => {
5270 this.syncOpenEvent(newOpen, eventDetails.event);
5271 const details = {
5272 open: newOpen,
5273 reason: eventDetails.reason,
5274 nativeEvent: eventDetails.event,
5275 nested: this.context.nested,
5276 triggerElement: eventDetails.trigger
5277 };
5278 this.context.events.emit("openchange", details);
5279 };
5280 /**
5281 * Emits the `openchange` event through the internal event emitter and calls the `onOpenChange` handler with the provided arguments.
5282 *
5283 * @param newOpen The new open state.
5284 * @param eventDetails Details about the event that triggered the open state change.
5285 */
5286 setOpen = (newOpen, eventDetails) => {
5287 if (this.syncOnly) {
5288 this.context.onOpenChange?.(newOpen, eventDetails);
5289 return;
5290 }
5291 this.dispatchOpenChange(newOpen, eventDetails);
5292 this.context.onOpenChange?.(newOpen, eventDetails);
5293 };
5294 };
5295
5296 // node_modules/@base-ui/react/floating-ui-react/hooks/useSyncedFloatingRootContext.mjs
5297 function useSyncedFloatingRootContext(options) {
5298 const {
5299 popupStore,
5300 treatPopupAsFloatingElement = false,
5301 floatingRootContext: floatingRootContextProp,
5302 floatingId,
5303 nested,
5304 onOpenChange
5305 } = options;
5306 const open2 = popupStore.useState("open");
5307 const referenceElement = popupStore.useState("activeTriggerElement");
5308 const floatingElement = popupStore.useState(treatPopupAsFloatingElement ? "popupElement" : "positionerElement");
5309 const triggerElements = popupStore.context.triggerElements;
5310 const handleOpenChange = onOpenChange;
5311 const internalStoreRef = React21.useRef(null);
5312 if (floatingRootContextProp === void 0 && internalStoreRef.current === null) {
5313 internalStoreRef.current = new FloatingRootStore({
5314 open: open2,
5315 transitionStatus: void 0,
5316 referenceElement,
5317 floatingElement,
5318 triggerElements,
5319 onOpenChange: handleOpenChange,
5320 floatingId,
5321 syncOnly: true,
5322 nested
5323 });
5324 }
5325 const store2 = floatingRootContextProp ?? internalStoreRef.current;
5326 popupStore.useSyncedValue("floatingId", floatingId);
5327 useIsoLayoutEffect(() => {
5328 const valuesToSync = {
5329 open: open2,
5330 floatingId,
5331 referenceElement,
5332 floatingElement
5333 };
5334 if (isElement(referenceElement)) {
5335 valuesToSync.domReferenceElement = referenceElement;
5336 }
5337 if (store2.state.positionReference === store2.state.referenceElement) {
5338 valuesToSync.positionReference = referenceElement;
5339 }
5340 store2.update(valuesToSync);
5341 }, [open2, floatingId, referenceElement, floatingElement, store2]);
5342 store2.context.onOpenChange = handleOpenChange;
5343 store2.context.nested = nested;
5344 return store2;
5345 }
5346
5347 // node_modules/@base-ui/react/utils/popups/popupStoreUtils.mjs
5348 var FOCUSABLE_POPUP_PROPS = {
5349 tabIndex: -1,
5350 [FOCUSABLE_ATTRIBUTE]: ""
5351 };
5352 function usePopupRootStore(createStore, treatPopupAsFloatingElement = false) {
5353 const floatingId = useId();
5354 const nested = useFloatingParentNodeId() != null;
5355 const store2 = useRefWithInit(() => createStore(floatingId, nested)).current;
5356 useSyncedFloatingRootContext({
5357 popupStore: store2,
5358 treatPopupAsFloatingElement,
5359 floatingRootContext: store2.state.floatingRootContext,
5360 floatingId,
5361 nested,
5362 onOpenChange: store2.setOpen
5363 });
5364 return store2;
5365 }
5366 function PopupHandleAttachment({
5367 handle,
5368 store: store2
5369 }) {
5370 useIsoLayoutEffect(() => {
5371 return handle.attachStore(store2);
5372 }, [handle, store2]);
5373 return null;
5374 }
5375 function syncTriggerCount(store2) {
5376 const triggerCount = store2.context.triggerElements.size;
5377 if (store2.select("open") && store2.state.triggerCount !== triggerCount) {
5378 store2.set("triggerCount", triggerCount);
5379 }
5380 }
5381 function useTriggerRegistration(id, store2) {
5382 const registrationRef = React22.useRef(null);
5383 return useStableCallback((element) => {
5384 const registration = registrationRef.current;
5385 if (registration !== null) {
5386 if (registration.element === element && registration.store === store2 && registration.id === id) {
5387 return;
5388 }
5389 registrationRef.current = null;
5390 const registeredStore = registration.store;
5391 if (registeredStore.context.triggerElements.getById(registration.id) === registration.element) {
5392 registeredStore.context.triggerElements.delete(registration.id);
5393 syncTriggerCount(registeredStore);
5394 }
5395 }
5396 if (element !== null && id !== void 0) {
5397 registrationRef.current = {
5398 store: store2,
5399 id,
5400 element
5401 };
5402 store2.context.triggerElements.add(id, element);
5403 syncTriggerCount(store2);
5404 }
5405 });
5406 }
5407 function createPopupOpenState(state, open2, trigger, preventUnmountOnClose = false) {
5408 let preventUnmountingOnClose = state.preventUnmountingOnClose;
5409 if (open2) {
5410 preventUnmountingOnClose = false;
5411 } else if (preventUnmountOnClose) {
5412 preventUnmountingOnClose = true;
5413 }
5414 const triggerId = trigger?.id ?? null;
5415 let activeTriggerId = state.activeTriggerId;
5416 let activeTriggerElement = state.activeTriggerElement;
5417 if (triggerId || open2) {
5418 activeTriggerId = triggerId;
5419 activeTriggerElement = trigger ?? null;
5420 }
5421 return {
5422 open: open2,
5423 preventUnmountingOnClose,
5424 activeTriggerId,
5425 activeTriggerElement
5426 };
5427 }
5428 function attachPreventUnmountOnClose(eventDetails) {
5429 let preventUnmountOnClose = false;
5430 eventDetails.preventUnmountOnClose = () => {
5431 preventUnmountOnClose = true;
5432 };
5433 return () => preventUnmountOnClose;
5434 }
5435 function applyPopupOpenChange(store2, nextOpen, eventDetails, options = {}) {
5436 const reason = eventDetails.reason;
5437 const isHover = reason === reason_parts_exports.triggerHover;
5438 const isFocusOpen = nextOpen && reason === reason_parts_exports.triggerFocus;
5439 const isDismissClose = !nextOpen && (reason === reason_parts_exports.triggerPress || reason === reason_parts_exports.escapeKey);
5440 const shouldPreventUnmountOnClose = attachPreventUnmountOnClose(eventDetails);
5441 store2.context.onOpenChange?.(nextOpen, eventDetails);
5442 if (eventDetails.isCanceled) {
5443 return;
5444 }
5445 options.onBeforeDispatch?.();
5446 store2.state.floatingRootContext.dispatchOpenChange(nextOpen, eventDetails);
5447 const changeState = () => {
5448 const popupOpenState = createPopupOpenState(store2.state, nextOpen, eventDetails.trigger, shouldPreventUnmountOnClose());
5449 const updatedState = {
5450 ...options.extraState,
5451 ...popupOpenState
5452 };
5453 if (isFocusOpen) {
5454 updatedState.instantType = "focus";
5455 } else if (isDismissClose) {
5456 updatedState.instantType = "dismiss";
5457 } else if (isHover) {
5458 updatedState.instantType = void 0;
5459 }
5460 store2.update(updatedState);
5461 };
5462 if (isHover) {
5463 ReactDOM4.flushSync(changeState);
5464 } else {
5465 changeState();
5466 }
5467 }
5468 function useTriggerDataForwarding(triggerId, triggerElementRef, store2, stateUpdates) {
5469 const isMountedByThisTrigger = store2.useState("isMountedByTrigger", triggerId);
5470 const baseRegisterTrigger = useTriggerRegistration(triggerId, store2);
5471 const applyTriggerData = useStableCallback((element) => {
5472 const open2 = store2.select("open");
5473 const activeTriggerId = store2.select("activeTriggerId");
5474 if (activeTriggerId === triggerId) {
5475 const changes = {
5476 activeTriggerElement: element,
5477 ...open2 ? stateUpdates : null
5478 };
5479 store2.update(changes);
5480 return;
5481 }
5482 if (activeTriggerId == null && open2) {
5483 const changes = {
5484 activeTriggerId: triggerId ?? null,
5485 activeTriggerElement: element,
5486 ...stateUpdates
5487 };
5488 store2.update(changes);
5489 }
5490 });
5491 const registerTrigger = useStableCallback((element) => {
5492 baseRegisterTrigger(element);
5493 if (element) {
5494 applyTriggerData(element);
5495 }
5496 });
5497 useIsoLayoutEffect(() => {
5498 registerTrigger(triggerElementRef.current);
5499 return () => registerTrigger(null);
5500 }, [registerTrigger, triggerElementRef, store2, triggerId]);
5501 useIsoLayoutEffect(() => {
5502 if (isMountedByThisTrigger) {
5503 const changes = {
5504 activeTriggerElement: triggerElementRef.current,
5505 ...stateUpdates
5506 };
5507 store2.update(changes);
5508 }
5509 }, [isMountedByThisTrigger, store2, triggerElementRef, ...Object.values(stateUpdates)]);
5510 return {
5511 registerTrigger,
5512 isMountedByThisTrigger
5513 };
5514 }
5515 function useImplicitActiveTrigger(store2, options = {}) {
5516 const {
5517 closeOnActiveTriggerUnmount = false
5518 } = options;
5519 const resolvedActiveTriggerIdRef = React22.useRef(null);
5520 const open2 = store2.useState("open");
5521 const reactiveTriggerCount = store2.useState("triggerCount");
5522 const activeTriggerId = store2.useState("activeTriggerId");
5523 const reactiveActiveTriggerElement = store2.useState("activeTriggerElement");
5524 useIsoLayoutEffect(() => {
5525 if (!open2) {
5526 resolvedActiveTriggerIdRef.current = null;
5527 if (store2.state.triggerCount !== 0) {
5528 store2.set("triggerCount", 0);
5529 }
5530 return;
5531 }
5532 const triggerCount = store2.context.triggerElements.size;
5533 const stateUpdates = {};
5534 if (store2.state.triggerCount !== triggerCount) {
5535 stateUpdates.triggerCount = triggerCount;
5536 }
5537 const currentActiveTriggerId = store2.select("activeTriggerId");
5538 let lostActiveTriggerId = null;
5539 if (currentActiveTriggerId) {
5540 const activeTriggerElement = store2.context.triggerElements.getById(currentActiveTriggerId);
5541 if (!activeTriggerElement) {
5542 for (const [triggerId, triggerElement] of store2.context.triggerElements.entries()) {
5543 if (triggerElement === store2.state.activeTriggerElement) {
5544 stateUpdates.activeTriggerId = triggerId;
5545 stateUpdates.activeTriggerElement = triggerElement;
5546 resolvedActiveTriggerIdRef.current = triggerId;
5547 break;
5548 }
5549 }
5550 if (stateUpdates.activeTriggerId === void 0) {
5551 if (resolvedActiveTriggerIdRef.current === currentActiveTriggerId) {
5552 lostActiveTriggerId = currentActiveTriggerId;
5553 } else {
5554 resolvedActiveTriggerIdRef.current = null;
5555 }
5556 }
5557 } else {
5558 resolvedActiveTriggerIdRef.current = currentActiveTriggerId;
5559 if (activeTriggerElement !== store2.state.activeTriggerElement) {
5560 stateUpdates.activeTriggerElement = activeTriggerElement;
5561 }
5562 }
5563 } else {
5564 resolvedActiveTriggerIdRef.current = null;
5565 }
5566 if (!lostActiveTriggerId && !currentActiveTriggerId && triggerCount === 1) {
5567 const iteratorResult = store2.context.triggerElements.entries().next();
5568 if (!iteratorResult.done) {
5569 const [implicitTriggerId, implicitTriggerElement] = iteratorResult.value;
5570 stateUpdates.activeTriggerId = implicitTriggerId;
5571 stateUpdates.activeTriggerElement = implicitTriggerElement;
5572 resolvedActiveTriggerIdRef.current = implicitTriggerId;
5573 }
5574 }
5575 if (stateUpdates.triggerCount !== void 0 || stateUpdates.activeTriggerId !== void 0 || stateUpdates.activeTriggerElement !== void 0) {
5576 store2.update(stateUpdates);
5577 }
5578 if (lostActiveTriggerId) {
5579 if (closeOnActiveTriggerUnmount) {
5580 queueMicrotask(() => {
5581 if (store2.select("open") && store2.select("activeTriggerId") === lostActiveTriggerId && !store2.context.triggerElements.getById(lostActiveTriggerId)) {
5582 const eventDetails = createChangeEventDetails(reason_parts_exports.none);
5583 store2.setOpen(false, eventDetails);
5584 if (!eventDetails.isCanceled) {
5585 store2.update({
5586 activeTriggerId: null,
5587 activeTriggerElement: null
5588 });
5589 }
5590 }
5591 });
5592 }
5593 }
5594 }, [open2, store2, reactiveTriggerCount, activeTriggerId, reactiveActiveTriggerElement, closeOnActiveTriggerUnmount]);
5595 }
5596 function useOpenStateTransitions(open2, store2, onUnmount, animateInitialOpen) {
5597 const {
5598 mounted,
5599 setMounted,
5600 transitionStatus
5601 } = useTransitionStatus(open2, false, false, animateInitialOpen);
5602 const preventUnmountingOnClose = store2.useState("preventUnmountingOnClose");
5603 const syncedPreventUnmountingOnClose = open2 ? false : preventUnmountingOnClose;
5604 store2.useSyncedValues({
5605 mounted,
5606 transitionStatus,
5607 preventUnmountingOnClose: syncedPreventUnmountingOnClose
5608 });
5609 const forceUnmount = useStableCallback(() => {
5610 setMounted(false);
5611 store2.update({
5612 activeTriggerId: null,
5613 activeTriggerElement: null,
5614 mounted: false,
5615 preventUnmountingOnClose: false
5616 });
5617 onUnmount?.();
5618 store2.context.onOpenChangeComplete?.(false);
5619 });
5620 useOpenChangeComplete({
5621 enabled: mounted && !open2 && !syncedPreventUnmountingOnClose,
5622 open: open2,
5623 ref: store2.context.popupRef,
5624 onComplete() {
5625 if (!open2) {
5626 forceUnmount();
5627 }
5628 }
5629 });
5630 return {
5631 forceUnmount,
5632 transitionStatus
5633 };
5634 }
5635 function usePopupInteractionProps(store2, statePart) {
5636 store2.useSyncedValues(statePart);
5637 useIsoLayoutEffect(() => () => {
5638 store2.update({
5639 activeTriggerProps: EMPTY_OBJECT,
5640 inactiveTriggerProps: EMPTY_OBJECT,
5641 popupProps: EMPTY_OBJECT
5642 });
5643 }, [store2]);
5644 }
5645
5646 // node_modules/@base-ui/react/utils/popups/popupTriggerMap.mjs
5647 var devElementIdsByMap;
5648 function getDevElementIds(map) {
5649 devElementIdsByMap ??= /* @__PURE__ */ new WeakMap();
5650 let elementIds = devElementIdsByMap.get(map);
5651 if (!elementIds) {
5652 elementIds = /* @__PURE__ */ new WeakMap();
5653 devElementIdsByMap.set(map, elementIds);
5654 }
5655 return elementIds;
5656 }
5657 var PopupTriggerMap = class {
5658 constructor() {
5659 this.idMap = /* @__PURE__ */ new Map();
5660 }
5661 /**
5662 * Adds a trigger element with the given ID.
5663 *
5664 * Note: The provided element is assumed to not be registered under multiple IDs.
5665 */
5666 add(id, element) {
5667 if (true) {
5668 const elementIds = getDevElementIds(this);
5669 const existingId = elementIds.get(element);
5670 if (existingId !== void 0 && existingId !== id) {
5671 throw new Error("Base UI: A trigger element cannot be registered under multiple IDs in PopupTriggerMap.");
5672 }
5673 const previousElement = this.idMap.get(id);
5674 if (previousElement !== void 0 && previousElement !== element) {
5675 elementIds.delete(previousElement);
5676 }
5677 elementIds.set(element, id);
5678 }
5679 this.idMap.set(id, element);
5680 }
5681 /**
5682 * Removes the trigger element with the given ID.
5683 */
5684 delete(id) {
5685 if (true) {
5686 const element = this.idMap.get(id);
5687 if (element !== void 0) {
5688 devElementIdsByMap?.get(this)?.delete(element);
5689 }
5690 }
5691 this.idMap.delete(id);
5692 }
5693 /**
5694 * Whether the given element is registered as a trigger.
5695 */
5696 hasElement(element) {
5697 for (const registered of this.idMap.values()) {
5698 if (registered === element) {
5699 return true;
5700 }
5701 }
5702 return false;
5703 }
5704 /**
5705 * Whether there is a registered trigger element matching the given predicate.
5706 */
5707 hasMatchingElement(predicate) {
5708 for (const element of this.idMap.values()) {
5709 if (predicate(element)) {
5710 return true;
5711 }
5712 }
5713 return false;
5714 }
5715 /**
5716 * Returns the trigger element associated with the given ID, or undefined if no such element exists.
5717 */
5718 getById(id) {
5719 return this.idMap.get(id);
5720 }
5721 /**
5722 * Returns an iterable of all registered trigger entries, where each entry is a tuple of [id, element].
5723 */
5724 entries() {
5725 return this.idMap.entries();
5726 }
5727 /**
5728 * Returns an iterable of all registered trigger elements.
5729 */
5730 elements() {
5731 return this.idMap.values();
5732 }
5733 /**
5734 * Returns the number of registered trigger elements.
5735 */
5736 get size() {
5737 return this.idMap.size;
5738 }
5739 };
5740
5741 // node_modules/@base-ui/react/utils/popups/store.mjs
5742 function createInitialPopupStoreState(triggerElements, floatingId, nested = false) {
5743 return {
5744 open: false,
5745 openProp: void 0,
5746 mounted: false,
5747 transitionStatus: void 0,
5748 floatingRootContext: new FloatingRootStore({
5749 open: false,
5750 transitionStatus: void 0,
5751 floatingElement: null,
5752 referenceElement: null,
5753 triggerElements,
5754 floatingId,
5755 syncOnly: true,
5756 nested,
5757 onOpenChange: void 0
5758 }),
5759 floatingId,
5760 triggerCount: 0,
5761 preventUnmountingOnClose: false,
5762 payload: void 0,
5763 activeTriggerId: null,
5764 activeTriggerElement: null,
5765 triggerIdProp: void 0,
5766 popupElement: null,
5767 positionerElement: null,
5768 activeTriggerProps: EMPTY_OBJECT,
5769 inactiveTriggerProps: EMPTY_OBJECT,
5770 popupProps: EMPTY_OBJECT
5771 };
5772 }
5773 var activeTriggerIdSelector = (state) => state.triggerIdProp ?? state.activeTriggerId;
5774 var openSelector = (state) => state.openProp ?? state.open;
5775 var popupIdSelector = (state) => {
5776 const popupId = state.popupElement?.id ?? state.floatingId;
5777 return popupId || void 0;
5778 };
5779 function triggerOwnsOpenPopup(state, triggerId) {
5780 return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) === triggerId;
5781 }
5782 function triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) {
5783 if (triggerOwnsOpenPopup(state, triggerId)) {
5784 return true;
5785 }
5786 return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) == null && state.triggerCount === 1;
5787 }
5788 var popupStoreSelectors = {
5789 open: openSelector,
5790 mounted: (state) => state.mounted,
5791 transitionStatus: (state) => state.transitionStatus,
5792 floatingRootContext: (state) => state.floatingRootContext,
5793 triggerCount: (state) => state.triggerCount,
5794 preventUnmountingOnClose: (state) => state.preventUnmountingOnClose,
5795 payload: (state) => state.payload,
5796 activeTriggerId: activeTriggerIdSelector,
5797 activeTriggerElement: (state) => state.mounted ? state.activeTriggerElement : null,
5798 popupId: popupIdSelector,
5799 /**
5800 * Whether the trigger with the given ID was used to open the popup.
5801 */
5802 isTriggerActive: (state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId,
5803 /**
5804 * Whether the popup is open and was activated by a trigger with the given ID.
5805 */
5806 isOpenedByTrigger: (state, triggerId) => triggerOwnsOpenPopup(state, triggerId),
5807 /**
5808 * Whether the popup is mounted and was activated by a trigger with the given ID.
5809 */
5810 isMountedByTrigger: (state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId && state.mounted,
5811 triggerProps: (state, isActive) => isActive ? state.activeTriggerProps : state.inactiveTriggerProps,
5812 /**
5813 * Popup id for the trigger that currently owns the open popup.
5814 */
5815 triggerPopupId: (state, triggerId) => triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) ? popupIdSelector(state) : void 0,
5816 popupProps: (state) => state.popupProps,
5817 popupElement: (state) => state.popupElement,
5818 positionerElement: (state) => state.positionerElement
5819 };
5820
5821 // node_modules/@base-ui/react/utils/popups/usePopupHandleStore.mjs
5822 var React23 = __toESM(require_react(), 1);
5823 var import_shim2 = __toESM(require_shim(), 1);
5824 function usePopupHandleStore(handle) {
5825 const subscribe = React23.useCallback((listener) => {
5826 if (handle === void 0) {
5827 return NOOP;
5828 }
5829 return handle.subscribeStore(listener);
5830 }, [handle]);
5831 const getSnapshot = React23.useCallback(() => {
5832 return handle === void 0 ? void 0 : handle.store;
5833 }, [handle]);
5834 return (0, import_shim2.useSyncExternalStore)(subscribe, getSnapshot, () => handle?.serverStore);
5835 }
5836
5837 // node_modules/@base-ui/react/floating-ui-react/hooks/useFloating.mjs
5838 function useBaseUIFloating(options) {
5839 return useFloatingWithStore(options, options.rootContext);
5840 }
5841 function useFloatingWithStore(options, store2) {
5842 const {
5843 nodeId,
5844 externalTree
5845 } = options;
5846 const referenceElement = store2.useState("referenceElement");
5847 const floatingElement = store2.useState("floatingElement");
5848 const domReferenceElement = store2.useState("domReferenceElement");
5849 const open2 = store2.useState("open");
5850 const floatingId = store2.useState("floatingId");
5851 const [positionReference, setPositionReferenceRaw] = React24.useState(null);
5852 const [localDomReference, setLocalDomReference] = React24.useState(void 0);
5853 const [localFloatingElement, setLocalFloatingElement] = React24.useState(void 0);
5854 const domReferenceRef = React24.useRef(null);
5855 const tree = useFloatingTree(externalTree);
5856 const storeElements = React24.useMemo(() => ({
5857 reference: referenceElement,
5858 floating: floatingElement,
5859 domReference: domReferenceElement
5860 }), [referenceElement, floatingElement, domReferenceElement]);
5861 const position = useFloating({
5862 ...options,
5863 elements: {
5864 ...storeElements,
5865 ...positionReference && {
5866 reference: positionReference
5867 }
5868 }
5869 });
5870 const localDomReferenceElement = isElement(localDomReference) ? localDomReference : null;
5871 const syncedFloatingElement = localFloatingElement === void 0 ? store2.state.floatingElement : localFloatingElement;
5872 store2.useSyncedValue("referenceElement", localDomReference ?? null);
5873 store2.useSyncedValue("domReferenceElement", localDomReference === void 0 ? domReferenceElement : localDomReferenceElement);
5874 store2.useSyncedValue("floatingElement", syncedFloatingElement);
5875 const setPositionReference = React24.useCallback((node) => {
5876 const computedPositionReference = isElement(node) ? {
5877 getBoundingClientRect: () => node.getBoundingClientRect(),
5878 getClientRects: () => node.getClientRects(),
5879 contextElement: node
5880 } : node;
5881 setPositionReferenceRaw(computedPositionReference);
5882 position.refs.setReference(computedPositionReference);
5883 }, [position.refs]);
5884 const setReference = React24.useCallback((node) => {
5885 if (isElement(node) || node === null) {
5886 domReferenceRef.current = node;
5887 setLocalDomReference(node);
5888 }
5889 if (isElement(position.refs.reference.current) || position.refs.reference.current === null || // Don't allow setting virtual elements using the old technique back to
5890 // `null` to support `positionReference` + an unstable `reference`
5891 // callback ref.
5892 node !== null && !isElement(node)) {
5893 position.refs.setReference(node);
5894 }
5895 }, [position.refs, setLocalDomReference]);
5896 const setFloating = React24.useCallback((node) => {
5897 setLocalFloatingElement(node);
5898 position.refs.setFloating(node);
5899 }, [position.refs]);
5900 const refs = React24.useMemo(() => ({
5901 ...position.refs,
5902 setReference,
5903 setFloating,
5904 setPositionReference,
5905 domReference: domReferenceRef
5906 }), [position.refs, setReference, setFloating, setPositionReference]);
5907 const elements = React24.useMemo(() => ({
5908 ...position.elements,
5909 domReference: domReferenceElement
5910 }), [position.elements, domReferenceElement]);
5911 const context = React24.useMemo(() => ({
5912 ...position,
5913 dataRef: store2.context.dataRef,
5914 open: open2,
5915 onOpenChange: store2.setOpen,
5916 events: store2.context.events,
5917 floatingId,
5918 refs,
5919 elements,
5920 nodeId,
5921 rootStore: store2
5922 }), [position, refs, elements, nodeId, store2, open2, floatingId]);
5923 useIsoLayoutEffect(() => {
5924 if (domReferenceElement) {
5925 domReferenceRef.current = domReferenceElement;
5926 }
5927 }, [domReferenceElement]);
5928 useIsoLayoutEffect(() => {
5929 store2.context.dataRef.current.floatingContext = context;
5930 const node = tree?.nodesRef.current.find((n) => n.id === nodeId);
5931 if (node) {
5932 node.context = context;
5933 }
5934 });
5935 return React24.useMemo(() => ({
5936 ...position,
5937 context,
5938 refs,
5939 elements,
5940 rootStore: store2
5941 }), [position, refs, elements, context, store2]);
5942 }
5943
5944 // node_modules/@base-ui/react/floating-ui-react/hooks/useFocus.mjs
5945 var React25 = __toESM(require_react(), 1);
5946 var isMacSafari = parts_exports.os.mac && parts_exports.engine.webkit;
5947 function useFocus(context, props = {}) {
5948 const {
5949 enabled = true,
5950 delay
5951 } = props;
5952 const store2 = "rootStore" in context ? context.rootStore : context;
5953 const {
5954 events,
5955 dataRef
5956 } = store2.context;
5957 const blockFocusRef = React25.useRef(false);
5958 const blockedReferenceRef = React25.useRef(null);
5959 const keyboardModalityRef = React25.useRef(true);
5960 const timeout = useTimeout();
5961 React25.useEffect(() => {
5962 const domReference = store2.select("domReferenceElement");
5963 if (!enabled) {
5964 return void 0;
5965 }
5966 const win = getWindow(domReference);
5967 function onBlur() {
5968 const currentDomReference = store2.select("domReferenceElement");
5969 if (!store2.select("open") && isHTMLElement(currentDomReference) && currentDomReference === activeElement(ownerDocument(currentDomReference))) {
5970 blockFocusRef.current = true;
5971 blockedReferenceRef.current = currentDomReference;
5972 }
5973 }
5974 function onKeyDown() {
5975 keyboardModalityRef.current = true;
5976 }
5977 function onPointerDown() {
5978 keyboardModalityRef.current = false;
5979 }
5980 return mergeCleanups(addEventListener(win, "blur", onBlur), isMacSafari && addEventListener(win, "keydown", onKeyDown, true), isMacSafari && addEventListener(win, "pointerdown", onPointerDown, true));
5981 }, [store2, enabled]);
5982 React25.useEffect(() => {
5983 if (!enabled) {
5984 return void 0;
5985 }
5986 function onOpenChangeLocal(details) {
5987 if (details.reason === reason_parts_exports.triggerPress || details.reason === reason_parts_exports.escapeKey) {
5988 const referenceElement = store2.select("domReferenceElement");
5989 if (isElement(referenceElement)) {
5990 blockedReferenceRef.current = referenceElement;
5991 blockFocusRef.current = true;
5992 }
5993 }
5994 }
5995 events.on("openchange", onOpenChangeLocal);
5996 return () => {
5997 events.off("openchange", onOpenChangeLocal);
5998 };
5999 }, [events, enabled, store2]);
6000 const reference = React25.useMemo(() => {
6001 function resetBlockedFocus() {
6002 blockFocusRef.current = false;
6003 blockedReferenceRef.current = null;
6004 }
6005 return {
6006 onMouseLeave() {
6007 resetBlockedFocus();
6008 },
6009 onFocus(event) {
6010 const focusTarget = event.currentTarget;
6011 if (blockFocusRef.current) {
6012 if (blockedReferenceRef.current === focusTarget) {
6013 return;
6014 }
6015 resetBlockedFocus();
6016 }
6017 const target = getTarget(event.nativeEvent);
6018 if (isElement(target)) {
6019 if (isMacSafari && !event.relatedTarget) {
6020 if (!keyboardModalityRef.current && !isTypeableElement(target)) {
6021 return;
6022 }
6023 } else if (!matchesFocusVisible(target)) {
6024 return;
6025 }
6026 }
6027 const movedFromOtherEnabledTrigger = isTargetInsideEnabledTrigger(event.relatedTarget, store2.context.triggerElements);
6028 const {
6029 nativeEvent,
6030 currentTarget
6031 } = event;
6032 const delayValue = typeof delay === "function" ? delay() : delay;
6033 if (store2.select("open") && movedFromOtherEnabledTrigger || delayValue === 0 || delayValue === void 0) {
6034 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget));
6035 return;
6036 }
6037 timeout.start(delayValue, () => {
6038 if (blockFocusRef.current) {
6039 return;
6040 }
6041 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget));
6042 });
6043 },
6044 onBlur(event) {
6045 resetBlockedFocus();
6046 const relatedTarget = event.relatedTarget;
6047 const nativeEvent = event.nativeEvent;
6048 const movedToFocusGuard = isElement(relatedTarget) && relatedTarget.hasAttribute(createAttribute("focus-guard")) && relatedTarget.getAttribute("data-type") === "outside";
6049 timeout.start(0, () => {
6050 const domReference = store2.select("domReferenceElement");
6051 const activeEl = activeElement(ownerDocument(domReference));
6052 if (!relatedTarget && activeEl === domReference) {
6053 return;
6054 }
6055 if (contains(dataRef.current.floatingContext?.refs.floating.current, activeEl) || contains(domReference, activeEl) || movedToFocusGuard) {
6056 return;
6057 }
6058 const nextFocusedElement = relatedTarget ?? activeEl;
6059 if (isTargetInsideEnabledTrigger(nextFocusedElement, store2.context.triggerElements)) {
6060 return;
6061 }
6062 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent));
6063 });
6064 }
6065 };
6066 }, [dataRef, delay, store2, timeout]);
6067 return React25.useMemo(() => enabled ? {
6068 reference,
6069 trigger: reference
6070 } : {}, [enabled, reference]);
6071 }
6072
6073 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverFloatingInteraction.mjs
6074 var React26 = __toESM(require_react(), 1);
6075
6076 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverInteractionSharedState.mjs
6077 var HoverInteraction = class _HoverInteraction {
6078 constructor() {
6079 this.pointerType = void 0;
6080 this.interactedInside = false;
6081 this.handler = void 0;
6082 this.blockMouseMove = true;
6083 this.performedPointerEventsMutation = false;
6084 this.pointerEventsScopeElement = null;
6085 this.pointerEventsReferenceElement = null;
6086 this.pointerEventsFloatingElement = null;
6087 this.restTimeoutPending = false;
6088 this.openChangeTimeout = new Timeout();
6089 this.restTimeout = new Timeout();
6090 this.handleCloseOptions = void 0;
6091 }
6092 static create() {
6093 return new _HoverInteraction();
6094 }
6095 dispose = () => {
6096 this.openChangeTimeout.clear();
6097 this.restTimeout.clear();
6098 };
6099 disposeEffect = () => {
6100 return this.dispose;
6101 };
6102 };
6103 var pointerEventsMutationOwnerByScopeElement = /* @__PURE__ */ new WeakMap();
6104 function clearSafePolygonPointerEventsMutation(instance) {
6105 if (!instance.performedPointerEventsMutation) {
6106 return;
6107 }
6108 const scopeElement = instance.pointerEventsScopeElement;
6109 if (scopeElement && pointerEventsMutationOwnerByScopeElement.get(scopeElement) === instance) {
6110 instance.pointerEventsScopeElement?.style.removeProperty("pointer-events");
6111 instance.pointerEventsReferenceElement?.style.removeProperty("pointer-events");
6112 instance.pointerEventsFloatingElement?.style.removeProperty("pointer-events");
6113 pointerEventsMutationOwnerByScopeElement.delete(scopeElement);
6114 }
6115 instance.performedPointerEventsMutation = false;
6116 instance.pointerEventsScopeElement = null;
6117 instance.pointerEventsReferenceElement = null;
6118 instance.pointerEventsFloatingElement = null;
6119 }
6120 function applySafePolygonPointerEventsMutation(instance, options) {
6121 const {
6122 scopeElement,
6123 referenceElement,
6124 floatingElement
6125 } = options;
6126 const existingOwner = pointerEventsMutationOwnerByScopeElement.get(scopeElement);
6127 if (existingOwner && existingOwner !== instance) {
6128 clearSafePolygonPointerEventsMutation(existingOwner);
6129 }
6130 clearSafePolygonPointerEventsMutation(instance);
6131 instance.performedPointerEventsMutation = true;
6132 instance.pointerEventsScopeElement = scopeElement;
6133 instance.pointerEventsReferenceElement = referenceElement;
6134 instance.pointerEventsFloatingElement = floatingElement;
6135 pointerEventsMutationOwnerByScopeElement.set(scopeElement, instance);
6136 scopeElement.style.pointerEvents = "none";
6137 referenceElement.style.pointerEvents = "auto";
6138 floatingElement.style.pointerEvents = "auto";
6139 }
6140 function useHoverInteractionSharedState(store2) {
6141 const data = store2.context.dataRef.current;
6142 const instance = useRefWithInit(() => data.hoverInteractionState ?? HoverInteraction.create()).current;
6143 if (!data.hoverInteractionState) {
6144 data.hoverInteractionState = instance;
6145 }
6146 useOnMount(data.hoverInteractionState.disposeEffect);
6147 return data.hoverInteractionState;
6148 }
6149
6150 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverFloatingInteraction.mjs
6151 function useHoverFloatingInteraction(context, parameters = {}) {
6152 const {
6153 enabled = true,
6154 closeDelay: closeDelayProp = 0,
6155 nodeId: nodeIdProp
6156 } = parameters;
6157 const store2 = "rootStore" in context ? context.rootStore : context;
6158 const open2 = store2.useState("open");
6159 const floatingElement = store2.useState("floatingElement");
6160 const domReferenceElement = store2.useState("domReferenceElement");
6161 const {
6162 dataRef
6163 } = store2.context;
6164 const tree = useFloatingTree();
6165 const parentId = useFloatingParentNodeId();
6166 const instance = useHoverInteractionSharedState(store2);
6167 const childClosedTimeout = useTimeout();
6168 const isClickLikeOpenEvent2 = useStableCallback(() => {
6169 return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside);
6170 });
6171 const isHoverOpen = useStableCallback(() => {
6172 return isHoverOpenEvent(dataRef.current.openEvent?.type);
6173 });
6174 const clearPointerEvents = useStableCallback(() => {
6175 clearSafePolygonPointerEventsMutation(instance);
6176 });
6177 useIsoLayoutEffect(() => {
6178 if (!open2) {
6179 instance.pointerType = void 0;
6180 instance.restTimeoutPending = false;
6181 instance.interactedInside = false;
6182 clearPointerEvents();
6183 }
6184 }, [open2, instance, clearPointerEvents]);
6185 React26.useEffect(() => {
6186 return clearPointerEvents;
6187 }, [clearPointerEvents]);
6188 useIsoLayoutEffect(() => {
6189 if (!enabled) {
6190 return void 0;
6191 }
6192 if (open2 && instance.handleCloseOptions?.blockPointerEvents && isHoverOpen() && isElement(domReferenceElement) && floatingElement) {
6193 const ref = domReferenceElement;
6194 const floatingEl = floatingElement;
6195 const doc = ownerDocument(floatingElement);
6196 const parentFloating = tree?.nodesRef.current.find((node) => node.id === parentId)?.context?.elements.floating;
6197 if (parentFloating) {
6198 parentFloating.style.pointerEvents = "";
6199 }
6200 const cachedScopeElement = instance.pointerEventsScopeElement !== floatingEl ? instance.pointerEventsScopeElement : null;
6201 const parentScopeElement = parentFloating !== floatingEl ? parentFloating : null;
6202 const scopeElement = instance.handleCloseOptions?.getScope?.() ?? cachedScopeElement ?? parentScopeElement ?? ref.closest("[data-rootownerid]") ?? doc.body;
6203 applySafePolygonPointerEventsMutation(instance, {
6204 scopeElement,
6205 referenceElement: ref,
6206 floatingElement: floatingEl
6207 });
6208 return () => {
6209 clearPointerEvents();
6210 };
6211 }
6212 return void 0;
6213 }, [enabled, open2, domReferenceElement, floatingElement, instance, isHoverOpen, tree, parentId, clearPointerEvents]);
6214 React26.useEffect(() => {
6215 if (!enabled) {
6216 return void 0;
6217 }
6218 function hasParentChildren() {
6219 return !!(tree && parentId && getNodeChildren(tree.nodesRef.current, parentId).length > 0);
6220 }
6221 function closeWithDelay(event) {
6222 const closeDelay = getDelay(closeDelayProp, "close", instance.pointerType);
6223 const close = () => {
6224 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
6225 tree?.events.emit("floating.closed", event);
6226 };
6227 if (closeDelay) {
6228 instance.openChangeTimeout.start(closeDelay, close);
6229 } else {
6230 instance.openChangeTimeout.clear();
6231 close();
6232 }
6233 }
6234 function handleInteractInside(event) {
6235 const target = getTarget(event);
6236 if (!isInteractiveElement(target)) {
6237 instance.interactedInside = false;
6238 return;
6239 }
6240 instance.interactedInside = target?.closest("[aria-haspopup]") != null;
6241 }
6242 function onFloatingMouseEnter() {
6243 instance.openChangeTimeout.clear();
6244 childClosedTimeout.clear();
6245 tree?.events.off("floating.closed", onNodeClosed);
6246 clearPointerEvents();
6247 }
6248 function onFloatingMouseLeave(event) {
6249 if (hasParentChildren() && tree) {
6250 tree.events.on("floating.closed", onNodeClosed);
6251 return;
6252 }
6253 if (isTargetInsideEnabledTrigger(event.relatedTarget, store2.context.triggerElements)) {
6254 return;
6255 }
6256 const currentNodeId = dataRef.current.floatingContext?.nodeId ?? nodeIdProp;
6257 const relatedTarget = event.relatedTarget;
6258 const isMovingIntoDescendantFloating = tree && currentNodeId && isElement(relatedTarget) && getNodeChildren(tree.nodesRef.current, currentNodeId, false).some((node) => contains(node.context?.elements.floating, relatedTarget));
6259 if (isMovingIntoDescendantFloating) {
6260 return;
6261 }
6262 if (instance.handler) {
6263 instance.handler(event);
6264 return;
6265 }
6266 clearPointerEvents();
6267 if (isHoverOpen() && !isClickLikeOpenEvent2()) {
6268 closeWithDelay(event);
6269 }
6270 }
6271 function onNodeClosed(event) {
6272 if (!tree || !parentId || hasParentChildren()) {
6273 return;
6274 }
6275 childClosedTimeout.start(0, () => {
6276 tree.events.off("floating.closed", onNodeClosed);
6277 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
6278 tree.events.emit("floating.closed", event);
6279 });
6280 }
6281 const floating = floatingElement;
6282 return mergeCleanups(floating && addEventListener(floating, "mouseenter", onFloatingMouseEnter), floating && addEventListener(floating, "mouseleave", onFloatingMouseLeave), floating && addEventListener(floating, "pointerdown", handleInteractInside, true), () => {
6283 tree?.events.off("floating.closed", onNodeClosed);
6284 });
6285 }, [enabled, floatingElement, store2, dataRef, closeDelayProp, nodeIdProp, isHoverOpen, isClickLikeOpenEvent2, clearPointerEvents, instance, tree, parentId, childClosedTimeout]);
6286 }
6287
6288 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverReferenceInteraction.mjs
6289 var React27 = __toESM(require_react(), 1);
6290 var ReactDOM5 = __toESM(require_react_dom(), 1);
6291 var EMPTY_REF = {
6292 current: null
6293 };
6294 function useHoverReferenceInteraction(context, props = {}) {
6295 const {
6296 enabled = true,
6297 delay = 0,
6298 handleClose = null,
6299 mouseOnly = false,
6300 restMs = 0,
6301 move = true,
6302 triggerElementRef = EMPTY_REF,
6303 externalTree,
6304 isActiveTrigger = true,
6305 getHandleCloseContext,
6306 isClosing,
6307 shouldOpen: shouldOpenProp,
6308 guardStaleOpen = false
6309 } = props;
6310 const store2 = "rootStore" in context ? context.rootStore : context;
6311 const {
6312 dataRef,
6313 events
6314 } = store2.context;
6315 const tree = useFloatingTree(externalTree);
6316 const instance = useHoverInteractionSharedState(store2);
6317 const isHoverCloseActiveRef = React27.useRef(false);
6318 const handleCloseRef = useValueAsRef(handleClose);
6319 const delayRef = useValueAsRef(delay);
6320 const restMsRef = useValueAsRef(restMs);
6321 const enabledRef = useValueAsRef(enabled);
6322 const shouldOpenRef = useValueAsRef(shouldOpenProp);
6323 const isClosingRef = useValueAsRef(isClosing);
6324 const isClickLikeOpenEvent2 = useStableCallback(() => {
6325 return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside);
6326 });
6327 const checkShouldOpen = useStableCallback(() => {
6328 return shouldOpenRef.current?.() !== false;
6329 });
6330 const isOverInactiveTrigger = useStableCallback((currentDomReference, currentTarget, target) => {
6331 const allTriggers = store2.context.triggerElements;
6332 if (allTriggers.hasElement(currentTarget)) {
6333 return !currentDomReference || !contains(currentDomReference, currentTarget);
6334 }
6335 if (!isElement(target)) {
6336 return false;
6337 }
6338 const targetElement = target;
6339 return allTriggers.hasMatchingElement((trigger) => contains(trigger, targetElement)) && (!currentDomReference || !contains(currentDomReference, targetElement));
6340 });
6341 const cleanupMouseMoveHandler = useStableCallback(() => {
6342 if (!instance.handler) {
6343 return;
6344 }
6345 const doc = ownerDocument(store2.select("domReferenceElement"));
6346 doc.removeEventListener("mousemove", instance.handler);
6347 instance.handler = void 0;
6348 });
6349 const clearPointerEvents = useStableCallback(() => {
6350 clearSafePolygonPointerEventsMutation(instance);
6351 });
6352 if (isActiveTrigger) {
6353 instance.handleCloseOptions = handleClose?.__options;
6354 }
6355 React27.useEffect(() => cleanupMouseMoveHandler, [cleanupMouseMoveHandler]);
6356 React27.useEffect(() => {
6357 if (!enabled) {
6358 return void 0;
6359 }
6360 function onOpenChangeLocal(details) {
6361 if (!details.open) {
6362 isHoverCloseActiveRef.current = details.reason === reason_parts_exports.triggerHover;
6363 cleanupMouseMoveHandler();
6364 instance.openChangeTimeout.clear();
6365 instance.restTimeout.clear();
6366 instance.blockMouseMove = true;
6367 instance.restTimeoutPending = false;
6368 } else {
6369 isHoverCloseActiveRef.current = false;
6370 }
6371 }
6372 events.on("openchange", onOpenChangeLocal);
6373 return () => {
6374 events.off("openchange", onOpenChangeLocal);
6375 };
6376 }, [enabled, events, instance, cleanupMouseMoveHandler]);
6377 React27.useEffect(() => {
6378 if (!enabled) {
6379 return void 0;
6380 }
6381 function closeWithDelay(event, runElseBranch = true) {
6382 const closeDelay = getDelay(delayRef.current, "close", instance.pointerType);
6383 if (closeDelay) {
6384 instance.openChangeTimeout.start(closeDelay, () => {
6385 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
6386 tree?.events.emit("floating.closed", event);
6387 });
6388 } else if (runElseBranch) {
6389 instance.openChangeTimeout.clear();
6390 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
6391 tree?.events.emit("floating.closed", event);
6392 }
6393 }
6394 const trigger = triggerElementRef.current ?? (isActiveTrigger ? store2.select("domReferenceElement") : null);
6395 if (!isElement(trigger)) {
6396 return void 0;
6397 }
6398 function onMouseEnter(event) {
6399 instance.openChangeTimeout.clear();
6400 instance.blockMouseMove = false;
6401 if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) {
6402 return;
6403 }
6404 const restMsValue = getRestMs(restMsRef.current);
6405 const openDelay = getDelay(delayRef.current, "open", instance.pointerType);
6406 const eventTarget = getTarget(event);
6407 const currentTarget = event.currentTarget ?? null;
6408 const currentDomReference = store2.select("domReferenceElement");
6409 let triggerNode = currentTarget;
6410 if (isElement(eventTarget) && !store2.context.triggerElements.hasElement(eventTarget)) {
6411 for (const triggerElement of store2.context.triggerElements.elements()) {
6412 if (contains(triggerElement, eventTarget)) {
6413 triggerNode = triggerElement;
6414 break;
6415 }
6416 }
6417 }
6418 if (isElement(currentTarget) && isElement(currentDomReference) && !store2.context.triggerElements.hasElement(currentTarget) && contains(currentTarget, currentDomReference)) {
6419 triggerNode = currentDomReference;
6420 }
6421 const isOverInactive = triggerNode == null ? false : isOverInactiveTrigger(currentDomReference, triggerNode, eventTarget);
6422 const isOpen = store2.select("open");
6423 const isInClosingTransition = isClosingRef.current?.() ?? store2.select("transitionStatus") === "ending";
6424 const isHoverCloseTransition = !isOpen && isInClosingTransition && isHoverCloseActiveRef.current;
6425 const isReenteringSameTriggerDuringCloseTransition = !isOverInactive && isElement(triggerNode) && isElement(currentDomReference) && contains(currentDomReference, triggerNode) && isHoverCloseTransition;
6426 const isRestOnlyDelay = restMsValue > 0 && !openDelay;
6427 const shouldOpenImmediately = isOverInactive && (isOpen || isHoverCloseTransition) || isReenteringSameTriggerDuringCloseTransition;
6428 const shouldOpen = !isOpen || isOverInactive;
6429 if (shouldOpenImmediately) {
6430 if (checkShouldOpen()) {
6431 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode));
6432 }
6433 return;
6434 }
6435 if (isRestOnlyDelay) {
6436 return;
6437 }
6438 if (openDelay) {
6439 instance.openChangeTimeout.start(openDelay, () => {
6440 if (shouldOpen && checkShouldOpen()) {
6441 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode));
6442 }
6443 });
6444 } else if (shouldOpen) {
6445 if (checkShouldOpen()) {
6446 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode));
6447 }
6448 }
6449 }
6450 function onMouseLeave(event) {
6451 if (isClickLikeOpenEvent2()) {
6452 clearPointerEvents();
6453 return;
6454 }
6455 cleanupMouseMoveHandler();
6456 const domReferenceElement = store2.select("domReferenceElement");
6457 const doc = ownerDocument(domReferenceElement);
6458 instance.restTimeout.clear();
6459 instance.restTimeoutPending = false;
6460 const handleCloseContextBase = dataRef.current.floatingContext ?? getHandleCloseContext?.();
6461 if (isTargetInsideEnabledTrigger(event.relatedTarget, store2.context.triggerElements)) {
6462 return;
6463 }
6464 if (handleCloseRef.current && handleCloseContextBase) {
6465 if (!store2.select("open")) {
6466 instance.openChangeTimeout.clear();
6467 }
6468 const currentTrigger = triggerElementRef.current;
6469 instance.handler = handleCloseRef.current({
6470 ...handleCloseContextBase,
6471 tree,
6472 x: event.clientX,
6473 y: event.clientY,
6474 onClose() {
6475 clearPointerEvents();
6476 cleanupMouseMoveHandler();
6477 if (enabledRef.current && !isClickLikeOpenEvent2() && currentTrigger === store2.select("domReferenceElement")) {
6478 closeWithDelay(event, true);
6479 }
6480 }
6481 });
6482 doc.addEventListener("mousemove", instance.handler);
6483 instance.handler(event);
6484 return;
6485 }
6486 const shouldClose = instance.pointerType === "touch" ? !contains(store2.select("floatingElement"), event.relatedTarget) : true;
6487 if (shouldClose) {
6488 closeWithDelay(event);
6489 }
6490 }
6491 function onMouseOut(event) {
6492 if (contains(trigger, event.relatedTarget)) {
6493 return;
6494 }
6495 instance.openChangeTimeout.clear();
6496 instance.restTimeout.clear();
6497 instance.restTimeoutPending = false;
6498 }
6499 const staleOpenGuard = guardStaleOpen ? addEventListener(trigger, "mouseout", onMouseOut) : void 0;
6500 if (move) {
6501 return mergeCleanups(addEventListener(trigger, "mousemove", onMouseEnter, {
6502 once: true
6503 }), addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave), staleOpenGuard);
6504 }
6505 return mergeCleanups(addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave), staleOpenGuard);
6506 }, [cleanupMouseMoveHandler, clearPointerEvents, dataRef, delayRef, store2, enabled, handleCloseRef, instance, isActiveTrigger, isOverInactiveTrigger, isClickLikeOpenEvent2, mouseOnly, move, restMsRef, triggerElementRef, tree, enabledRef, getHandleCloseContext, isClosingRef, checkShouldOpen, guardStaleOpen]);
6507 return React27.useMemo(() => {
6508 if (!enabled) {
6509 return void 0;
6510 }
6511 function setPointerRef(event) {
6512 instance.pointerType = event.pointerType;
6513 }
6514 return {
6515 onPointerDown: setPointerRef,
6516 onPointerEnter: setPointerRef,
6517 onMouseMove(event) {
6518 const {
6519 nativeEvent
6520 } = event;
6521 const trigger = event.currentTarget;
6522 const currentDomReference = store2.select("domReferenceElement");
6523 const currentOpen = store2.select("open");
6524 const isOverInactive = isOverInactiveTrigger(currentDomReference, trigger, event.target);
6525 if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) {
6526 return;
6527 }
6528 if (currentOpen && isOverInactive && instance.handleCloseOptions?.blockPointerEvents) {
6529 const floatingElement = store2.select("floatingElement");
6530 if (floatingElement) {
6531 const scopeElement = instance.handleCloseOptions?.getScope?.() ?? trigger.ownerDocument.body;
6532 applySafePolygonPointerEventsMutation(instance, {
6533 scopeElement,
6534 referenceElement: trigger,
6535 floatingElement
6536 });
6537 }
6538 }
6539 const restMsValue = getRestMs(restMsRef.current);
6540 if (currentOpen && !isOverInactive || restMsValue === 0) {
6541 return;
6542 }
6543 if (!isOverInactive && instance.restTimeoutPending && event.movementX ** 2 + event.movementY ** 2 < 2) {
6544 return;
6545 }
6546 instance.restTimeout.clear();
6547 function handleMouseMove() {
6548 instance.restTimeoutPending = false;
6549 if (isClickLikeOpenEvent2()) {
6550 return;
6551 }
6552 const latestOpen = store2.select("open");
6553 if (!instance.blockMouseMove && (!latestOpen || isOverInactive) && checkShouldOpen()) {
6554 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, nativeEvent, trigger));
6555 }
6556 }
6557 if (instance.pointerType === "touch") {
6558 ReactDOM5.flushSync(() => {
6559 handleMouseMove();
6560 });
6561 } else if (isOverInactive && currentOpen) {
6562 handleMouseMove();
6563 } else {
6564 instance.restTimeoutPending = true;
6565 instance.restTimeout.start(restMsValue, handleMouseMove);
6566 }
6567 }
6568 };
6569 }, [enabled, instance, isClickLikeOpenEvent2, isOverInactiveTrigger, mouseOnly, store2, restMsRef, checkShouldOpen]);
6570 }
6571
6572 // node_modules/@base-ui/react/floating-ui-react/safePolygon.mjs
6573 var CURSOR_SPEED_THRESHOLD = 0.1;
6574 var CURSOR_SPEED_THRESHOLD_SQUARED = CURSOR_SPEED_THRESHOLD * CURSOR_SPEED_THRESHOLD;
6575 var POLYGON_BUFFER = 0.5;
6576 function hasIntersectingEdge(pointX, pointY, xi, yi, xj, yj) {
6577 return yi >= pointY !== yj >= pointY && pointX <= (xj - xi) * (pointY - yi) / (yj - yi) + xi;
6578 }
6579 function isPointInQuadrilateral(pointX, pointY, x1, y1, x2, y2, x3, y3, x4, y4) {
6580 let isInsideValue = false;
6581 if (hasIntersectingEdge(pointX, pointY, x1, y1, x2, y2)) {
6582 isInsideValue = !isInsideValue;
6583 }
6584 if (hasIntersectingEdge(pointX, pointY, x2, y2, x3, y3)) {
6585 isInsideValue = !isInsideValue;
6586 }
6587 if (hasIntersectingEdge(pointX, pointY, x3, y3, x4, y4)) {
6588 isInsideValue = !isInsideValue;
6589 }
6590 if (hasIntersectingEdge(pointX, pointY, x4, y4, x1, y1)) {
6591 isInsideValue = !isInsideValue;
6592 }
6593 return isInsideValue;
6594 }
6595 function isInsideRect(pointX, pointY, rect) {
6596 return pointX >= rect.x && pointX <= rect.x + rect.width && pointY >= rect.y && pointY <= rect.y + rect.height;
6597 }
6598 function isInsideAxisAlignedRect(pointX, pointY, x1, y1, x2, y2) {
6599 const minX = Math.min(x1, x2);
6600 const maxX = Math.max(x1, x2);
6601 const minY = Math.min(y1, y2);
6602 const maxY = Math.max(y1, y2);
6603 return pointX >= minX && pointX <= maxX && pointY >= minY && pointY <= maxY;
6604 }
6605 function safePolygon(options = {}) {
6606 const {
6607 blockPointerEvents = false
6608 } = options;
6609 const timeout = new Timeout();
6610 const fn = ({
6611 x,
6612 y,
6613 placement,
6614 elements,
6615 onClose,
6616 nodeId,
6617 tree
6618 }) => {
6619 const side = placement?.split("-")[0];
6620 let hasLanded = false;
6621 let lastX = null;
6622 let lastY = null;
6623 let lastCursorTime = typeof performance !== "undefined" ? performance.now() : 0;
6624 function isCursorMovingSlowly(nextX, nextY) {
6625 const currentTime = performance.now();
6626 const elapsedTime = currentTime - lastCursorTime;
6627 if (lastX === null || lastY === null || elapsedTime === 0) {
6628 lastX = nextX;
6629 lastY = nextY;
6630 lastCursorTime = currentTime;
6631 return false;
6632 }
6633 const deltaX = nextX - lastX;
6634 const deltaY = nextY - lastY;
6635 const distanceSquared = deltaX * deltaX + deltaY * deltaY;
6636 const thresholdSquared = elapsedTime * elapsedTime * CURSOR_SPEED_THRESHOLD_SQUARED;
6637 lastX = nextX;
6638 lastY = nextY;
6639 lastCursorTime = currentTime;
6640 return distanceSquared < thresholdSquared;
6641 }
6642 function close() {
6643 timeout.clear();
6644 onClose();
6645 }
6646 return function onMouseMove(event) {
6647 timeout.clear();
6648 const domReference = elements.domReference;
6649 const floating = elements.floating;
6650 if (!domReference || !floating || side == null || x == null || y == null) {
6651 return void 0;
6652 }
6653 const {
6654 clientX,
6655 clientY
6656 } = event;
6657 const target = getTarget(event);
6658 const isLeave = event.type === "mouseleave";
6659 const isOverFloatingEl = contains(floating, target);
6660 const isOverReferenceEl = contains(domReference, target);
6661 if (isOverFloatingEl) {
6662 hasLanded = true;
6663 if (!isLeave) {
6664 return void 0;
6665 }
6666 }
6667 if (isOverReferenceEl) {
6668 hasLanded = false;
6669 if (!isLeave) {
6670 hasLanded = true;
6671 return void 0;
6672 }
6673 }
6674 if (isLeave && isElement(event.relatedTarget) && contains(floating, event.relatedTarget)) {
6675 return void 0;
6676 }
6677 function hasOpenChildNode() {
6678 return Boolean(tree && getNodeChildren(tree.nodesRef.current, nodeId).length > 0);
6679 }
6680 function closeIfNoOpenChild() {
6681 if (!hasOpenChildNode()) {
6682 close();
6683 }
6684 }
6685 if (hasOpenChildNode()) {
6686 return void 0;
6687 }
6688 const refRect = domReference.getBoundingClientRect();
6689 const rect = floating.getBoundingClientRect();
6690 const cursorLeaveFromRight = x > rect.right - rect.width / 2;
6691 const cursorLeaveFromBottom = y > rect.bottom - rect.height / 2;
6692 const isFloatingWider = rect.width > refRect.width;
6693 const isFloatingTaller = rect.height > refRect.height;
6694 const left = (isFloatingWider ? refRect : rect).left;
6695 const right = (isFloatingWider ? refRect : rect).right;
6696 const top = (isFloatingTaller ? refRect : rect).top;
6697 const bottom = (isFloatingTaller ? refRect : rect).bottom;
6698 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) {
6699 closeIfNoOpenChild();
6700 return void 0;
6701 }
6702 let isInsideTroughRect = false;
6703 switch (side) {
6704 case "top":
6705 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, refRect.top + 1, right, rect.bottom - 1);
6706 break;
6707 case "bottom":
6708 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, rect.top + 1, right, refRect.bottom - 1);
6709 break;
6710 case "left":
6711 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, rect.right - 1, bottom, refRect.left + 1, top);
6712 break;
6713 case "right":
6714 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, refRect.right - 1, bottom, rect.left + 1, top);
6715 break;
6716 default:
6717 }
6718 if (isInsideTroughRect) {
6719 return void 0;
6720 }
6721 if (hasLanded && !isInsideRect(clientX, clientY, refRect)) {
6722 closeIfNoOpenChild();
6723 return void 0;
6724 }
6725 if (!isLeave && isCursorMovingSlowly(clientX, clientY)) {
6726 closeIfNoOpenChild();
6727 return void 0;
6728 }
6729 let isInsidePolygon = false;
6730 switch (side) {
6731 case "top": {
6732 const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
6733 const cursorPointOneX = isFloatingWider ? x + cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset;
6734 const cursorPointTwoX = isFloatingWider ? x - cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset;
6735 const cursorPointY = y + POLYGON_BUFFER + 1;
6736 const commonYLeft = cursorLeaveFromRight ? rect.bottom - POLYGON_BUFFER : isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top;
6737 const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top : rect.bottom - POLYGON_BUFFER;
6738 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight);
6739 break;
6740 }
6741 case "bottom": {
6742 const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
6743 const cursorPointOneX = isFloatingWider ? x + cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset;
6744 const cursorPointTwoX = isFloatingWider ? x - cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset;
6745 const cursorPointY = y - POLYGON_BUFFER;
6746 const commonYLeft = cursorLeaveFromRight ? rect.top + POLYGON_BUFFER : isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom;
6747 const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom : rect.top + POLYGON_BUFFER;
6748 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight);
6749 break;
6750 }
6751 case "left": {
6752 const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
6753 const cursorPointOneY = isFloatingTaller ? y + cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset;
6754 const cursorPointTwoY = isFloatingTaller ? y - cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset;
6755 const cursorPointX = x + POLYGON_BUFFER + 1;
6756 const commonXTop = cursorLeaveFromBottom ? rect.right - POLYGON_BUFFER : isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left;
6757 const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left : rect.right - POLYGON_BUFFER;
6758 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, commonXTop, rect.top, commonXBottom, rect.bottom, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY);
6759 break;
6760 }
6761 case "right": {
6762 const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
6763 const cursorPointOneY = isFloatingTaller ? y + cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset;
6764 const cursorPointTwoY = isFloatingTaller ? y - cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset;
6765 const cursorPointX = x - POLYGON_BUFFER;
6766 const commonXTop = cursorLeaveFromBottom ? rect.left + POLYGON_BUFFER : isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right;
6767 const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right : rect.left + POLYGON_BUFFER;
6768 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY, commonXTop, rect.top, commonXBottom, rect.bottom);
6769 break;
6770 }
6771 default:
6772 }
6773 if (!isInsidePolygon) {
6774 closeIfNoOpenChild();
6775 } else if (!hasLanded) {
6776 timeout.start(40, closeIfNoOpenChild);
6777 }
6778 return void 0;
6779 };
6780 };
6781 fn.__options = {
6782 ...options,
6783 blockPointerEvents
6784 };
6785 return fn;
6786 }
6787
6788 // node_modules/@base-ui/react/utils/NullStore.mjs
6789 var NullStore = class extends ReactStore {
6790 // `update`/`set`/`notifyAll` funnel through `setState` in the base `Store`, so overriding
6791 // `setState` alone would neutralize them today. They are overridden explicitly so the store stays
6792 // inert even if a future base-class change stops routing a mutator through `setState`.
6793 setState(_newState) {
6794 }
6795 update(_changes) {
6796 }
6797 set(_key, _value) {
6798 }
6799 notifyAll() {
6800 }
6801 };
6802
6803 // node_modules/@base-ui/utils/inertValue.mjs
6804 function inertValue(value) {
6805 if (isReactVersionAtLeast(19)) {
6806 return value;
6807 }
6808 return value ? "true" : void 0;
6809 }
6810
6811 // node_modules/@base-ui/react/internals/direction-context/DirectionContext.mjs
6812 var React28 = __toESM(require_react(), 1);
6813 var DirectionContext = /* @__PURE__ */ React28.createContext(void 0);
6814 if (true) DirectionContext.displayName = "DirectionContext";
6815 function useDirection() {
6816 const context = React28.useContext(DirectionContext);
6817 return context?.direction ?? "ltr";
6818 }
6819
6820 // node_modules/@base-ui/react/internals/useAnchorPositioning.mjs
6821 var React29 = __toESM(require_react(), 1);
6822
6823 // node_modules/@base-ui/react/floating-ui-react/middleware/arrow.mjs
6824 var baseArrow = (options) => ({
6825 name: "arrow",
6826 options,
6827 async fn(state) {
6828 const {
6829 x,
6830 y,
6831 placement,
6832 rects,
6833 platform: platform3,
6834 elements,
6835 middlewareData
6836 } = state;
6837 const {
6838 element,
6839 padding = 0,
6840 offsetParent = "real"
6841 } = evaluate(options, state) || {};
6842 if (element == null) {
6843 return {};
6844 }
6845 const paddingObject = getPaddingObject(padding);
6846 const coords = {
6847 x,
6848 y
6849 };
6850 const axis = getAlignmentAxis(placement);
6851 const length = getAxisLength(axis);
6852 const arrowDimensions = await platform3.getDimensions(element);
6853 const isYAxis = axis === "y";
6854 const minProp = isYAxis ? "top" : "left";
6855 const maxProp = isYAxis ? "bottom" : "right";
6856 const clientProp = isYAxis ? "clientHeight" : "clientWidth";
6857 const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];
6858 const startDiff = coords[axis] - rects.reference[axis];
6859 const arrowOffsetParent = offsetParent === "real" ? await platform3.getOffsetParent?.(element) : elements.floating;
6860 let clientSize = elements.floating[clientProp] || rects.floating[length];
6861 if (!clientSize || !await platform3.isElement?.(arrowOffsetParent)) {
6862 clientSize = elements.floating[clientProp] || rects.floating[length];
6863 }
6864 const centerToReference = endDiff / 2 - startDiff / 2;
6865 const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;
6866 const minPadding = Math.min(paddingObject[minProp], largestPossiblePadding);
6867 const maxPadding = Math.min(paddingObject[maxProp], largestPossiblePadding);
6868 const min2 = minPadding;
6869 const max2 = clientSize - arrowDimensions[length] - maxPadding;
6870 const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;
6871 const offset4 = clamp(min2, center, max2);
6872 const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset4 && rects.reference[length] / 2 - (center < min2 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;
6873 const alignmentOffset = shouldAddOffset ? center < min2 ? center - min2 : center - max2 : 0;
6874 return {
6875 [axis]: coords[axis] + alignmentOffset,
6876 data: {
6877 [axis]: offset4,
6878 centerOffset: center - offset4 - alignmentOffset,
6879 ...shouldAddOffset && {
6880 alignmentOffset
6881 }
6882 },
6883 reset: shouldAddOffset
6884 };
6885 }
6886 });
6887 var arrow4 = (options, deps) => {
6888 const {
6889 name,
6890 fn
6891 } = baseArrow(options);
6892 return {
6893 name,
6894 fn,
6895 options: [options, deps]
6896 };
6897 };
6898
6899 // node_modules/@base-ui/react/utils/hideMiddleware.mjs
6900 var hide4 = {
6901 name: "hide",
6902 async fn(state) {
6903 const {
6904 width,
6905 height,
6906 x,
6907 y
6908 } = state.rects.reference;
6909 const anchorHidden2 = width === 0 && height === 0 && x === 0 && y === 0;
6910 const overflow = await state.platform.detectOverflow(state, {
6911 elementContext: "reference"
6912 });
6913 const referenceHidden = overflow.top - height >= 0 || overflow.right - width >= 0 || overflow.bottom - height >= 0 || overflow.left - width >= 0;
6914 return {
6915 data: {
6916 referenceHidden: referenceHidden || anchorHidden2
6917 }
6918 };
6919 }
6920 };
6921
6922 // node_modules/@base-ui/react/utils/adaptiveOriginConstants.mjs
6923 var DEFAULT_SIDES = {
6924 sideX: "left",
6925 sideY: "top"
6926 };
6927
6928 // node_modules/@base-ui/react/utils/CommonPositionerCssVars.mjs
6929 var availableWidth = "--available-width";
6930 var availableHeight = "--available-height";
6931 var anchorWidth = "--anchor-width";
6932 var anchorHeight = "--anchor-height";
6933 var transformOrigin = "--transform-origin";
6934 var positionerWidth = "--positioner-width";
6935 var positionerHeight = "--positioner-height";
6936
6937 // node_modules/@base-ui/react/internals/useAnchorPositioning.mjs
6938 var AVAILABLE_WIDTH_VAR = availableWidth;
6939 var AVAILABLE_HEIGHT_VAR = availableHeight;
6940 function getLogicalSide(sideParam, renderedSide, isRtl) {
6941 const isLogicalSideParam = sideParam === "inline-start" || sideParam === "inline-end";
6942 const logicalRight = isRtl ? "inline-start" : "inline-end";
6943 const logicalLeft = isRtl ? "inline-end" : "inline-start";
6944 return {
6945 top: "top",
6946 right: isLogicalSideParam ? logicalRight : "right",
6947 bottom: "bottom",
6948 left: isLogicalSideParam ? logicalLeft : "left"
6949 }[renderedSide];
6950 }
6951 function getOffsetData(state, sideParam, isRtl) {
6952 const {
6953 rects,
6954 placement
6955 } = state;
6956 const data = {
6957 side: getLogicalSide(sideParam, getSide(placement), isRtl),
6958 align: getAlignment(placement) || "center",
6959 anchor: {
6960 width: rects.reference.width,
6961 height: rects.reference.height
6962 },
6963 positioner: {
6964 width: rects.floating.width,
6965 height: rects.floating.height
6966 }
6967 };
6968 return data;
6969 }
6970 function useAnchorPositioning(params) {
6971 return useAnchorPositioningWithHook(params, useBaseUIFloating);
6972 }
6973 function useAnchorPositioningWithHook(params, useFloatingHook) {
6974 const {
6975 // Public parameters
6976 anchor,
6977 positionMethod = "absolute",
6978 side: sideParam = "bottom",
6979 sideOffset = 0,
6980 align = "center",
6981 alignOffset = 0,
6982 collisionBoundary,
6983 collisionPadding: collisionPaddingParam = 5,
6984 sticky = false,
6985 arrowPadding = 5,
6986 disableAnchorTracking = false,
6987 inline: inlineMiddleware,
6988 // Private parameters
6989 keepMounted = false,
6990 floatingRootContext,
6991 mounted,
6992 collisionAvoidance,
6993 shift: shift4,
6994 nodeId,
6995 adaptiveOrigin: adaptiveOrigin2,
6996 lazyFlip = false,
6997 externalTree
6998 } = params;
6999 const [mountSide, setMountSide] = React29.useState(null);
7000 if (!mounted && mountSide !== null) {
7001 setMountSide(null);
7002 }
7003 const collisionAvoidanceSide = collisionAvoidance.side || "flip";
7004 const collisionAvoidanceAlign = collisionAvoidance.align || "flip";
7005 const collisionAvoidanceFallbackAxisSide = collisionAvoidance.fallbackAxisSide || "end";
7006 const shiftCrossAxis = shift4?.crossAxis ?? false;
7007 const shiftRootBoundary = shift4?.rootBoundary;
7008 const anchorFn = typeof anchor === "function" ? anchor : void 0;
7009 const anchorFnCallback = useStableCallback(anchorFn);
7010 const anchorDep = anchorFn ? anchorFnCallback : anchor;
7011 const anchorValueRef = useValueAsRef(anchor);
7012 const mountedRef = useValueAsRef(mounted);
7013 const direction = useDirection();
7014 const isRtl = direction === "rtl";
7015 const side = mountSide || {
7016 top: "top",
7017 right: "right",
7018 bottom: "bottom",
7019 left: "left",
7020 "inline-end": isRtl ? "left" : "right",
7021 "inline-start": isRtl ? "right" : "left"
7022 }[sideParam];
7023 const placement = align === "center" ? side : `${side}-${align}`;
7024 let collisionPadding = collisionPaddingParam;
7025 if (typeof collisionPadding === "number") {
7026 collisionPadding = {
7027 top: collisionPadding,
7028 right: collisionPadding,
7029 bottom: collisionPadding,
7030 left: collisionPadding
7031 };
7032 } else if (collisionPadding) {
7033 collisionPadding = {
7034 top: collisionPadding.top || 0,
7035 right: collisionPadding.right || 0,
7036 bottom: collisionPadding.bottom || 0,
7037 left: collisionPadding.left || 0
7038 };
7039 }
7040 const bias = 1;
7041 const biasTop = sideParam === "bottom" ? bias : 0;
7042 const biasBottom = sideParam === "top" ? bias : 0;
7043 const biasLeft = sideParam === "right" ? bias : 0;
7044 const biasRight = sideParam === "left" ? bias : 0;
7045 const commonCollisionProps = {
7046 boundary: collisionBoundary === "clipping-ancestors" ? "clippingAncestors" : collisionBoundary,
7047 padding: collisionPadding
7048 };
7049 const arrowRef = React29.useRef(null);
7050 const sideOffsetRef = useValueAsRef(sideOffset);
7051 const alignOffsetRef = useValueAsRef(alignOffset);
7052 const sideOffsetDep = typeof sideOffset !== "function" ? sideOffset : 0;
7053 const alignOffsetDep = typeof alignOffset !== "function" ? alignOffset : 0;
7054 const middleware = [];
7055 if (inlineMiddleware) {
7056 middleware.push(inlineMiddleware);
7057 }
7058 middleware.push(offset3((state) => {
7059 const data = getOffsetData(state, sideParam, isRtl);
7060 const sideAxis = typeof sideOffsetRef.current === "function" ? sideOffsetRef.current(data) : sideOffsetRef.current;
7061 const alignAxis = typeof alignOffsetRef.current === "function" ? alignOffsetRef.current(data) : alignOffsetRef.current;
7062 return {
7063 mainAxis: sideAxis,
7064 crossAxis: alignAxis,
7065 alignmentAxis: alignAxis
7066 };
7067 }, [sideOffsetDep, alignOffsetDep, isRtl, sideParam]));
7068 const shiftDisabled = collisionAvoidanceAlign === "none" && collisionAvoidanceSide !== "shift";
7069 const crossAxisShiftEnabled = !shiftDisabled && (sticky || shiftCrossAxis || collisionAvoidanceSide === "shift");
7070 const flipMiddleware = collisionAvoidanceSide === "none" ? null : flip3({
7071 ...commonCollisionProps,
7072 // Ensure the popup flips if it's been limited by its --available-height and it resizes.
7073 // Since the size() padding is smaller than the flip() padding, flip() will take precedence.
7074 padding: {
7075 top: collisionPadding.top + bias + biasTop,
7076 right: collisionPadding.right + bias + biasRight,
7077 bottom: collisionPadding.bottom + bias + biasBottom,
7078 left: collisionPadding.left + bias + biasLeft
7079 },
7080 mainAxis: !shiftCrossAxis && collisionAvoidanceSide === "flip",
7081 crossAxis: collisionAvoidanceAlign === "flip" ? "alignment" : false,
7082 fallbackAxisSideDirection: collisionAvoidanceFallbackAxisSide
7083 });
7084 const shiftMiddleware = shiftDisabled ? null : shift3({
7085 ...commonCollisionProps,
7086 // Use the Layout Viewport to avoid shifting around when pinch-zooming.
7087 rootBoundary: shiftRootBoundary,
7088 mainAxis: collisionAvoidanceAlign !== "none",
7089 crossAxis: crossAxisShiftEnabled,
7090 limiter: sticky || shiftCrossAxis ? void 0 : limitShift3((limitData) => {
7091 if (!arrowRef.current) {
7092 return {};
7093 }
7094 const {
7095 width,
7096 height
7097 } = arrowRef.current.getBoundingClientRect();
7098 const sideAxis = getSideAxis(getSide(limitData.placement));
7099 const arrowSize = sideAxis === "y" ? width : height;
7100 const offsetAmount = sideAxis === "y" ? collisionPadding.left + collisionPadding.right : collisionPadding.top + collisionPadding.bottom;
7101 return {
7102 offset: arrowSize / 2 + offsetAmount / 2
7103 };
7104 })
7105 }, [commonCollisionProps, sticky, shiftCrossAxis, shiftRootBoundary, collisionPadding, collisionAvoidanceAlign]);
7106 if (collisionAvoidanceSide === "shift" || collisionAvoidanceAlign === "shift" || align === "center") {
7107 middleware.push(shiftMiddleware, flipMiddleware);
7108 } else {
7109 middleware.push(flipMiddleware, shiftMiddleware);
7110 }
7111 middleware.push(size3({
7112 ...commonCollisionProps,
7113 apply({
7114 elements: {
7115 floating
7116 },
7117 availableWidth: availableWidth2,
7118 availableHeight: availableHeight2,
7119 rects
7120 }) {
7121 if (!mountedRef.current) {
7122 return;
7123 }
7124 const floatingStyle = floating.style;
7125 floatingStyle.setProperty(AVAILABLE_WIDTH_VAR, `${availableWidth2}px`);
7126 floatingStyle.setProperty(AVAILABLE_HEIGHT_VAR, `${availableHeight2}px`);
7127 const dpr = getWindow(floating).devicePixelRatio || 1;
7128 const {
7129 x: x2,
7130 y: y2,
7131 width,
7132 height
7133 } = rects.reference;
7134 const anchorWidth2 = (Math.round((x2 + width) * dpr) - Math.round(x2 * dpr)) / dpr;
7135 const anchorHeight2 = (Math.round((y2 + height) * dpr) - Math.round(y2 * dpr)) / dpr;
7136 floatingStyle.setProperty(anchorWidth, `${anchorWidth2}px`);
7137 floatingStyle.setProperty(anchorHeight, `${anchorHeight2}px`);
7138 }
7139 }), arrow4((state) => ({
7140 // `transform-origin` calculations rely on an element existing. If the arrow hasn't been set,
7141 // we'll create a fake element.
7142 element: arrowRef.current || ownerDocument(state.elements.floating).createElement("div"),
7143 // No padding for the fake arrow: it would displace aligned popups on narrow anchors.
7144 padding: arrowRef.current ? arrowPadding : 0,
7145 offsetParent: "floating"
7146 }), [arrowPadding]), {
7147 name: "transformOrigin",
7148 fn(state) {
7149 const {
7150 elements: {
7151 floating
7152 },
7153 middlewareData: middlewareData2,
7154 placement: renderedPlacement2,
7155 platform: platform3,
7156 rects,
7157 y: y2
7158 } = state;
7159 const renderedSide2 = getSide(renderedPlacement2);
7160 const renderedAlign2 = getAlignment(renderedPlacement2);
7161 const isVertical = getSideAxis(renderedSide2) === "y";
7162 const arrowEl = arrowRef.current;
7163 const sideOffsetValue = typeof sideOffset === "function" ? sideOffset(getOffsetData(state, sideParam, isRtl)) : sideOffset;
7164 let crossOrigin;
7165 if (!arrowEl && renderedAlign2 && Math.abs(isVertical ? middlewareData2.shift?.x || 0 : middlewareData2.shift?.y || 0) <= 1) {
7166 crossOrigin = renderedAlign2 === "start" === (isVertical && platform3.isRTL?.(floating) === true) ? "100%" : "0%";
7167 } else {
7168 const arrowOffset = isVertical ? middlewareData2.arrow?.x || 0 : middlewareData2.arrow?.y || 0;
7169 const arrowSize = isVertical ? arrowEl?.clientWidth || 0 : arrowEl?.clientHeight || 0;
7170 crossOrigin = `${arrowOffset + arrowSize / 2}px`;
7171 }
7172 let sideOrigin = renderedSide2 === "top" || renderedSide2 === "left" ? `calc(100% + ${sideOffsetValue}px)` : `${-sideOffsetValue}px`;
7173 if (crossAxisShiftEnabled && isVertical && Math.abs(middlewareData2.shift?.y || 0) > sideOffsetValue) {
7174 sideOrigin = `${rects.reference.y + rects.reference.height / 2 - y2}px`;
7175 }
7176 floating.style.setProperty(transformOrigin, isVertical ? `${crossOrigin} ${sideOrigin}` : `${sideOrigin} ${crossOrigin}`);
7177 return {};
7178 }
7179 }, hide4, adaptiveOrigin2);
7180 useIsoLayoutEffect(() => {
7181 if (!mounted && floatingRootContext) {
7182 floatingRootContext.update({
7183 referenceElement: null,
7184 floatingElement: null,
7185 domReferenceElement: null,
7186 positionReference: null
7187 });
7188 }
7189 }, [mounted, floatingRootContext]);
7190 const autoUpdateOptions = React29.useMemo(() => ({
7191 ancestorScroll: !disableAnchorTracking,
7192 elementResize: !disableAnchorTracking && typeof ResizeObserver !== "undefined",
7193 layoutShift: !disableAnchorTracking && typeof IntersectionObserver !== "undefined"
7194 }), [disableAnchorTracking]);
7195 const {
7196 refs,
7197 elements,
7198 x,
7199 y,
7200 middlewareData,
7201 update: update2,
7202 placement: renderedPlacement,
7203 context,
7204 isPositioned,
7205 floatingStyles: originalFloatingStyles
7206 } = useFloatingHook({
7207 rootContext: floatingRootContext,
7208 open: keepMounted ? mounted : void 0,
7209 placement,
7210 middleware,
7211 strategy: positionMethod,
7212 whileElementsMounted: keepMounted ? void 0 : (...args) => autoUpdate(...args, autoUpdateOptions),
7213 nodeId,
7214 externalTree
7215 });
7216 const {
7217 sideX,
7218 sideY
7219 } = middlewareData.adaptiveOrigin || DEFAULT_SIDES;
7220 const resolvedPosition = isPositioned ? positionMethod : "fixed";
7221 const floatingStyles = React29.useMemo(() => {
7222 let base;
7223 if (!isPositioned) {
7224 base = {
7225 position: resolvedPosition,
7226 top: 0,
7227 left: 0
7228 };
7229 } else if (adaptiveOrigin2) {
7230 base = {
7231 position: resolvedPosition,
7232 [sideX]: x,
7233 [sideY]: y
7234 };
7235 } else {
7236 base = {
7237 ...originalFloatingStyles,
7238 position: resolvedPosition
7239 };
7240 }
7241 base[AVAILABLE_WIDTH_VAR] = "100vw";
7242 base[AVAILABLE_HEIGHT_VAR] = "100vh";
7243 if (!isPositioned) {
7244 base.opacity = 0;
7245 }
7246 return base;
7247 }, [adaptiveOrigin2, resolvedPosition, sideX, x, sideY, y, originalFloatingStyles, isPositioned]);
7248 const registeredPositionReferenceRef = React29.useRef(null);
7249 useIsoLayoutEffect(() => {
7250 if (!mounted) {
7251 return;
7252 }
7253 const anchorValue = anchorValueRef.current;
7254 const resolvedAnchor = typeof anchorValue === "function" ? anchorValue() : anchorValue;
7255 const unwrappedElement = (isRef(resolvedAnchor) ? resolvedAnchor.current : resolvedAnchor) || null;
7256 const finalAnchor = unwrappedElement || null;
7257 if (finalAnchor !== registeredPositionReferenceRef.current) {
7258 refs.setPositionReference(finalAnchor);
7259 registeredPositionReferenceRef.current = finalAnchor;
7260 }
7261 }, [mounted, refs, anchorDep, anchorValueRef]);
7262 React29.useEffect(() => {
7263 if (!mounted) {
7264 return;
7265 }
7266 const anchorValue = anchorValueRef.current;
7267 if (typeof anchorValue === "function") {
7268 return;
7269 }
7270 if (isRef(anchorValue) && anchorValue.current !== registeredPositionReferenceRef.current) {
7271 refs.setPositionReference(anchorValue.current);
7272 registeredPositionReferenceRef.current = anchorValue.current;
7273 }
7274 }, [mounted, refs, anchorDep, anchorValueRef]);
7275 React29.useEffect(() => {
7276 if (keepMounted && mounted && elements.reference && elements.floating) {
7277 return autoUpdate(elements.reference, elements.floating, update2, autoUpdateOptions);
7278 }
7279 return void 0;
7280 }, [keepMounted, mounted, elements, update2, autoUpdateOptions]);
7281 const renderedSide = getSide(renderedPlacement);
7282 const logicalRenderedSide = getLogicalSide(sideParam, renderedSide, isRtl);
7283 const renderedAlign = getAlignment(renderedPlacement) || "center";
7284 const anchorHidden2 = Boolean(middlewareData.hide?.referenceHidden);
7285 useIsoLayoutEffect(() => {
7286 if (lazyFlip && mounted && isPositioned && renderedSide !== side) {
7287 setMountSide(renderedSide);
7288 }
7289 }, [lazyFlip, mounted, isPositioned, renderedSide, side]);
7290 const arrowStyles = React29.useMemo(() => ({
7291 position: "absolute",
7292 top: middlewareData.arrow?.y,
7293 left: middlewareData.arrow?.x
7294 }), [middlewareData.arrow]);
7295 const arrowUncentered = middlewareData.arrow?.centerOffset !== 0;
7296 return React29.useMemo(() => ({
7297 positionerStyles: floatingStyles,
7298 arrowStyles,
7299 arrowRef,
7300 arrowUncentered,
7301 side: logicalRenderedSide,
7302 align: renderedAlign,
7303 physicalSide: renderedSide,
7304 anchorHidden: anchorHidden2,
7305 refs,
7306 context,
7307 isPositioned,
7308 update: update2
7309 }), [floatingStyles, arrowStyles, arrowRef, arrowUncentered, logicalRenderedSide, renderedAlign, renderedSide, anchorHidden2, refs, context, isPositioned, update2]);
7310 }
7311 function isRef(param) {
7312 return param != null && "current" in param;
7313 }
7314
7315 // node_modules/@base-ui/react/internals/getDisabledMountTransitionStyles.mjs
7316 function getDisabledMountTransitionStyles(transitionStatus) {
7317 return transitionStatus === "starting" ? DISABLED_TRANSITIONS_STYLE : EMPTY_OBJECT;
7318 }
7319
7320 // node_modules/@base-ui/react/utils/usePositioner.mjs
7321 function usePositioner(componentProps, state, {
7322 styles,
7323 transitionStatus,
7324 props,
7325 refs,
7326 hidden,
7327 inert = false
7328 }) {
7329 const style = {
7330 ...styles
7331 };
7332 if (inert) {
7333 style.pointerEvents = "none";
7334 }
7335 return useRenderElement("div", componentProps, {
7336 state,
7337 ref: refs,
7338 props: [{
7339 role: "presentation",
7340 hidden,
7341 style
7342 }, getDisabledMountTransitionStyles(transitionStatus), props],
7343 stateAttributesMapping: popupStateMapping
7344 });
7345 }
7346
7347 // node_modules/@base-ui/react/utils/usePopupViewport.mjs
7348 var React33 = __toESM(require_react(), 1);
7349 var ReactDOM6 = __toESM(require_react_dom(), 1);
7350
7351 // node_modules/@base-ui/utils/usePreviousValue.mjs
7352 var React30 = __toESM(require_react(), 1);
7353 function usePreviousValue(value) {
7354 const [state, setState] = React30.useState({
7355 current: value,
7356 previous: null
7357 });
7358 if (!Object.is(value, state.current)) {
7359 setState({
7360 current: value,
7361 previous: state.current
7362 });
7363 }
7364 return state.previous;
7365 }
7366
7367 // node_modules/@base-ui/react/utils/usePopupAutoResize.mjs
7368 var React31 = __toESM(require_react(), 1);
7369
7370 // node_modules/@base-ui/react/utils/getCssDimensions.mjs
7371 function getCssDimensions2(element) {
7372 const css = getComputedStyle2(element);
7373 let width = parseFloat(css.width) || 0;
7374 let height = parseFloat(css.height) || 0;
7375 const hasOffset = isHTMLElement(element);
7376 const offsetWidth = hasOffset ? element.offsetWidth : width;
7377 const offsetHeight = hasOffset ? element.offsetHeight : height;
7378 const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;
7379 if (shouldFallback) {
7380 width = offsetWidth;
7381 height = offsetHeight;
7382 }
7383 return {
7384 width,
7385 height
7386 };
7387 }
7388
7389 // node_modules/@base-ui/react/utils/CommonPopupCssVars.mjs
7390 var popupWidth = "--popup-width";
7391 var popupHeight = "--popup-height";
7392
7393 // node_modules/@base-ui/react/utils/usePopupAutoResize.mjs
7394 function usePopupAutoResize(parameters) {
7395 const {
7396 popupElement,
7397 positionerElement,
7398 content,
7399 mounted,
7400 onMeasureLayout: onMeasureLayoutParam,
7401 onMeasureLayoutComplete: onMeasureLayoutCompleteParam,
7402 side,
7403 direction
7404 } = parameters;
7405 const runOnceAnimationsFinish = useAnimationsFinished(popupElement, true);
7406 const animationFrame = useAnimationFrame();
7407 const committedDimensionsRef = React31.useRef(null);
7408 const isInitialRenderRef = React31.useRef(true);
7409 const restoreAnchoringStylesRef = React31.useRef(NOOP);
7410 const onMeasureLayout = useStableCallback(onMeasureLayoutParam);
7411 const onMeasureLayoutComplete = useStableCallback(onMeasureLayoutCompleteParam);
7412 const anchoringStyles = React31.useMemo(() => getPopupAnchoringStyles(side, direction), [side, direction]);
7413 useIsoLayoutEffect(() => {
7414 if (!mounted) {
7415 restoreAnchoringStylesRef.current = NOOP;
7416 isInitialRenderRef.current = true;
7417 committedDimensionsRef.current = null;
7418 return void 0;
7419 }
7420 if (!popupElement || !positionerElement) {
7421 return void 0;
7422 }
7423 restoreAnchoringStylesRef.current = applyElementStyles(popupElement, anchoringStyles);
7424 setPopupCssSize(popupElement, "auto");
7425 const restorePopupPosition = overrideElementStyle(popupElement, "position", "static");
7426 const restorePopupTransform = overrideElementStyle(popupElement, "transform", "none");
7427 const restorePopupScale = overrideElementStyle(popupElement, "scale", "1");
7428 const restorePositionerAvailableSize = applyElementStyles(positionerElement, {
7429 [availableWidth]: "max-content",
7430 [availableHeight]: "max-content"
7431 });
7432 function restoreMeasurementOverrides() {
7433 restorePopupPosition();
7434 restorePopupTransform();
7435 restorePositionerAvailableSize();
7436 }
7437 function restoreMeasurementOverridesIncludingScale() {
7438 restoreMeasurementOverrides();
7439 restorePopupScale();
7440 }
7441 onMeasureLayout?.();
7442 if (isInitialRenderRef.current || committedDimensionsRef.current === null) {
7443 setPositionerCssSize(positionerElement, "max-content");
7444 const dimensions = getCssDimensions2(popupElement);
7445 committedDimensionsRef.current = dimensions;
7446 setPositionerCssSize(positionerElement, dimensions);
7447 restoreMeasurementOverridesIncludingScale();
7448 onMeasureLayoutComplete?.(null, dimensions);
7449 isInitialRenderRef.current = false;
7450 return () => {
7451 restoreAnchoringStylesRef.current();
7452 restoreAnchoringStylesRef.current = NOOP;
7453 };
7454 }
7455 setPositionerCssSize(positionerElement, "max-content");
7456 const previousDimensions = committedDimensionsRef.current;
7457 const newDimensions = getCssDimensions2(popupElement);
7458 committedDimensionsRef.current = newDimensions;
7459 setPopupCssSize(popupElement, previousDimensions);
7460 restoreMeasurementOverridesIncludingScale();
7461 onMeasureLayoutComplete?.(previousDimensions, newDimensions);
7462 setPositionerCssSize(positionerElement, newDimensions);
7463 const abortController = new AbortController();
7464 animationFrame.request(() => {
7465 setPopupCssSize(popupElement, newDimensions);
7466 runOnceAnimationsFinish(() => {
7467 popupElement.style.setProperty(popupWidth, "auto");
7468 popupElement.style.setProperty(popupHeight, "auto");
7469 }, abortController.signal);
7470 });
7471 return () => {
7472 abortController.abort();
7473 animationFrame.cancel();
7474 restoreAnchoringStylesRef.current();
7475 restoreAnchoringStylesRef.current = NOOP;
7476 };
7477 }, [content, popupElement, positionerElement, runOnceAnimationsFinish, animationFrame, mounted, onMeasureLayout, onMeasureLayoutComplete, anchoringStyles]);
7478 }
7479 function getPopupAnchoringStyles(side, direction) {
7480 const isPhysicalTop = side === "top";
7481 const isPhysicalLeft = side === "left" || side === (direction === "rtl" ? "inline-end" : "inline-start");
7482 if (!isPhysicalTop && !isPhysicalLeft) {
7483 return EMPTY_OBJECT;
7484 }
7485 return {
7486 position: "absolute",
7487 [isPhysicalTop ? "bottom" : "top"]: "0",
7488 [isPhysicalLeft ? "right" : "left"]: "0"
7489 };
7490 }
7491 function overrideElementStyle(element, property, value) {
7492 const originalValue = element.style.getPropertyValue(property);
7493 element.style.setProperty(property, value);
7494 return () => {
7495 element.style.setProperty(property, originalValue);
7496 };
7497 }
7498 function applyElementStyles(element, styles) {
7499 const restorers = [];
7500 for (const [key, value] of Object.entries(styles)) {
7501 restorers.push(overrideElementStyle(element, key, value));
7502 }
7503 return restorers.length ? () => {
7504 restorers.forEach((restore) => restore());
7505 } : NOOP;
7506 }
7507 function setPopupCssSize(popupElement, size4) {
7508 const width = size4 === "auto" ? "auto" : `${size4.width}px`;
7509 const height = size4 === "auto" ? "auto" : `${size4.height}px`;
7510 popupElement.style.setProperty(popupWidth, width);
7511 popupElement.style.setProperty(popupHeight, height);
7512 }
7513 function setPositionerCssSize(positionerElement, size4) {
7514 const width = size4 === "max-content" ? "max-content" : `${size4.width}px`;
7515 const height = size4 === "max-content" ? "max-content" : `${size4.height}px`;
7516 positionerElement.style.setProperty(positionerWidth, width);
7517 positionerElement.style.setProperty(positionerHeight, height);
7518 }
7519
7520 // node_modules/@base-ui/react/direction-provider/DirectionProvider.mjs
7521 var React32 = __toESM(require_react(), 1);
7522 var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1);
7523 var DirectionProvider = function DirectionProvider2(props) {
7524 const {
7525 direction = "ltr"
7526 } = props;
7527 const contextValue = React32.useMemo(() => ({
7528 direction
7529 }), [direction]);
7530 return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DirectionContext.Provider, {
7531 value: contextValue,
7532 children: props.children
7533 });
7534 };
7535 if (true) DirectionProvider.displayName = "DirectionProvider";
7536
7537 // node_modules/@base-ui/react/utils/adaptiveOriginMiddleware.mjs
7538 var adaptiveOrigin = {
7539 name: "adaptiveOrigin",
7540 async fn(state) {
7541 const {
7542 x: rawX,
7543 y: rawY,
7544 rects: {
7545 floating: floatRect
7546 },
7547 elements: {
7548 floating
7549 },
7550 platform: platform3,
7551 strategy,
7552 placement
7553 } = state;
7554 const win = getWindow(floating);
7555 const styles = win.getComputedStyle(floating);
7556 const hasTransition = styles.transitionDuration !== "0s" && styles.transitionDuration !== "";
7557 if (!hasTransition) {
7558 return {
7559 x: rawX,
7560 y: rawY,
7561 data: DEFAULT_SIDES
7562 };
7563 }
7564 const offsetParent = await platform3.getOffsetParent?.(floating);
7565 let offsetDimensions = {
7566 width: 0,
7567 height: 0
7568 };
7569 if (strategy === "fixed" && win?.visualViewport) {
7570 offsetDimensions = {
7571 width: win.visualViewport.width,
7572 height: win.visualViewport.height
7573 };
7574 } else if (offsetParent === win) {
7575 const doc = ownerDocument(floating);
7576 offsetDimensions = {
7577 width: doc.documentElement.clientWidth,
7578 height: doc.documentElement.clientHeight
7579 };
7580 } else if (await platform3.isElement?.(offsetParent)) {
7581 offsetDimensions = await platform3.getDimensions(offsetParent);
7582 }
7583 const currentSide = getSide(placement);
7584 let x = rawX;
7585 let y = rawY;
7586 if (currentSide === "left") {
7587 x = offsetDimensions.width - (rawX + floatRect.width);
7588 }
7589 if (currentSide === "top") {
7590 y = offsetDimensions.height - (rawY + floatRect.height);
7591 }
7592 const sideX = currentSide === "left" ? "right" : DEFAULT_SIDES.sideX;
7593 const sideY = currentSide === "top" ? "bottom" : DEFAULT_SIDES.sideY;
7594 return {
7595 x,
7596 y,
7597 data: {
7598 sideX,
7599 sideY
7600 }
7601 };
7602 }
7603 };
7604
7605 // node_modules/@base-ui/react/utils/CommonViewportDataAttributes.mjs
7606 var activationDirection = "data-activation-direction";
7607
7608 // node_modules/@base-ui/react/utils/usePopupViewport.mjs
7609 var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1);
7610 var popupViewportStateMapping = {
7611 activationDirection: (value) => value ? {
7612 [activationDirection]: value
7613 } : null
7614 };
7615 function usePopupViewport(parameters) {
7616 const {
7617 store: store2,
7618 side,
7619 children
7620 } = parameters;
7621 const direction = useDirection();
7622 const activeTrigger = store2.useState("activeTriggerElement");
7623 const activeTriggerId = store2.useState("activeTriggerId");
7624 const open2 = store2.useState("open");
7625 const payload = store2.useState("payload");
7626 const mounted = store2.useState("mounted");
7627 const popupElement = store2.useState("popupElement");
7628 const positionerElement = store2.useState("positionerElement");
7629 const previousActiveTrigger = usePreviousValue(open2 ? activeTrigger : null);
7630 const currentContentKey = usePopupContentKey(activeTriggerId, payload);
7631 const capturedNodeRef = React33.useRef(null);
7632 const [previousContentNode, setPreviousContentNode] = React33.useState(null);
7633 const [newTriggerOffset, setNewTriggerOffset] = React33.useState(null);
7634 const currentContainerRef = React33.useRef(null);
7635 const previousContainerRef = React33.useRef(null);
7636 const onAnimationsFinished = useAnimationsFinished(currentContainerRef, true);
7637 const cleanupFrame = useAnimationFrame();
7638 const cleanupControllerRef = React33.useRef(null);
7639 const [previousContentDimensions, setPreviousContentDimensions] = React33.useState(null);
7640 const [showStartingStyleAttribute, setShowStartingStyleAttribute] = React33.useState(false);
7641 useIsoLayoutEffect(() => {
7642 store2.set("adaptiveOrigin", adaptiveOrigin);
7643 return () => {
7644 store2.set("adaptiveOrigin", void 0);
7645 };
7646 }, [store2]);
7647 const handleMeasureLayout = useStableCallback(() => {
7648 currentContainerRef.current?.style.setProperty("animation", "none");
7649 currentContainerRef.current?.style.setProperty("transition", "none");
7650 previousContainerRef.current?.style.setProperty("display", "none");
7651 });
7652 const handleMeasureLayoutComplete = useStableCallback((previousDimensions) => {
7653 currentContainerRef.current?.style.removeProperty("animation");
7654 currentContainerRef.current?.style.removeProperty("transition");
7655 previousContainerRef.current?.style.removeProperty("display");
7656 if (previousDimensions) {
7657 setPreviousContentDimensions(previousDimensions);
7658 }
7659 });
7660 const armViewportCleanup = useStableCallback(() => {
7661 cleanupControllerRef.current?.abort();
7662 const controller = new AbortController();
7663 cleanupControllerRef.current = controller;
7664 onAnimationsFinished(() => {
7665 setPreviousContentNode(null);
7666 setPreviousContentDimensions(null);
7667 capturedNodeRef.current = null;
7668 }, controller.signal);
7669 });
7670 const lastHandledTriggerRef = React33.useRef(null);
7671 useIsoLayoutEffect(() => {
7672 if (!open2 || !mounted) {
7673 lastHandledTriggerRef.current = null;
7674 }
7675 }, [open2, mounted]);
7676 useIsoLayoutEffect(() => {
7677 if (activeTrigger && previousActiveTrigger && activeTrigger !== previousActiveTrigger && lastHandledTriggerRef.current !== activeTrigger && capturedNodeRef.current) {
7678 setPreviousContentNode(capturedNodeRef.current);
7679 setShowStartingStyleAttribute(true);
7680 const offset4 = calculateRelativePosition(previousActiveTrigger, activeTrigger);
7681 setNewTriggerOffset(offset4);
7682 lastHandledTriggerRef.current = activeTrigger;
7683 }
7684 }, [activeTrigger, previousActiveTrigger]);
7685 useIsoLayoutEffect(() => {
7686 if (previousContentNode == null) {
7687 return;
7688 }
7689 cleanupControllerRef.current?.abort();
7690 setShowStartingStyleAttribute(true);
7691 cleanupFrame.request(() => {
7692 ReactDOM6.flushSync(() => {
7693 setShowStartingStyleAttribute(false);
7694 });
7695 armViewportCleanup();
7696 });
7697 }, [currentContentKey, previousContentNode, armViewportCleanup, cleanupFrame]);
7698 useIsoLayoutEffect(() => {
7699 const source = currentContainerRef.current;
7700 if (!source) {
7701 return;
7702 }
7703 const wrapper = ownerDocument(source).createElement("div");
7704 for (const child of Array.from(source.childNodes)) {
7705 wrapper.appendChild(child.cloneNode(true));
7706 }
7707 capturedNodeRef.current = wrapper;
7708 });
7709 const isTransitioning = previousContentNode != null;
7710 let childrenToRender;
7711 if (!isTransitioning) {
7712 childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", {
7713 "data-current": true,
7714 ref: currentContainerRef,
7715 children
7716 }, currentContentKey);
7717 } else {
7718 childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(React33.Fragment, {
7719 children: [/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", {
7720 "data-previous": true,
7721 inert: inertValue(true),
7722 ref: previousContainerRef,
7723 style: {
7724 ...previousContentDimensions ? {
7725 [popupWidth]: `${previousContentDimensions.width}px`,
7726 [popupHeight]: `${previousContentDimensions.height}px`
7727 } : null,
7728 position: "absolute"
7729 },
7730 "data-ending-style": showStartingStyleAttribute ? void 0 : ""
7731 }, "previous"), /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", {
7732 "data-current": true,
7733 ref: currentContainerRef,
7734 "data-starting-style": showStartingStyleAttribute ? "" : void 0,
7735 children
7736 }, currentContentKey)]
7737 });
7738 }
7739 useIsoLayoutEffect(() => {
7740 const container = previousContainerRef.current;
7741 if (!container || !previousContentNode) {
7742 return;
7743 }
7744 container.replaceChildren(...Array.from(previousContentNode.childNodes));
7745 }, [previousContentNode]);
7746 usePopupAutoResize({
7747 popupElement,
7748 positionerElement,
7749 mounted,
7750 content: payload,
7751 onMeasureLayout: handleMeasureLayout,
7752 onMeasureLayoutComplete: handleMeasureLayoutComplete,
7753 side,
7754 direction
7755 });
7756 const state = {
7757 activationDirection: getActivationDirection(newTriggerOffset),
7758 transitioning: isTransitioning
7759 };
7760 return {
7761 children: childrenToRender,
7762 state
7763 };
7764 }
7765 function getActivationDirection(offset4) {
7766 if (!offset4) {
7767 return void 0;
7768 }
7769 return `${getValueWithTolerance(offset4.horizontal, 5, "right", "left")} ${getValueWithTolerance(offset4.vertical, 5, "down", "up")}`;
7770 }
7771 function getValueWithTolerance(value, tolerance, positiveLabel, negativeLabel) {
7772 if (value > tolerance) {
7773 return positiveLabel;
7774 }
7775 if (value < -tolerance) {
7776 return negativeLabel;
7777 }
7778 return "";
7779 }
7780 function calculateRelativePosition(from, to) {
7781 const fromRect = from.getBoundingClientRect();
7782 const toRect = to.getBoundingClientRect();
7783 const fromCenter = {
7784 x: fromRect.left + fromRect.width / 2,
7785 y: fromRect.top + fromRect.height / 2
7786 };
7787 const toCenter = {
7788 x: toRect.left + toRect.width / 2,
7789 y: toRect.top + toRect.height / 2
7790 };
7791 return {
7792 horizontal: toCenter.x - fromCenter.x,
7793 vertical: toCenter.y - fromCenter.y
7794 };
7795 }
7796 function usePopupContentKey(activeTriggerId, payload) {
7797 const [contentKey, setContentKey] = React33.useState(0);
7798 const previousActiveTriggerIdRef = React33.useRef(activeTriggerId);
7799 const previousPayloadRef = React33.useRef(payload);
7800 const pendingPayloadUpdateRef = React33.useRef(false);
7801 useIsoLayoutEffect(() => {
7802 const previousActiveTriggerId = previousActiveTriggerIdRef.current;
7803 const previousPayload = previousPayloadRef.current;
7804 const triggerIdChanged = activeTriggerId !== previousActiveTriggerId;
7805 const payloadChanged = payload !== previousPayload;
7806 if (triggerIdChanged) {
7807 setContentKey((value) => value + 1);
7808 pendingPayloadUpdateRef.current = !payloadChanged;
7809 } else if (pendingPayloadUpdateRef.current && payloadChanged) {
7810 setContentKey((value) => value + 1);
7811 pendingPayloadUpdateRef.current = false;
7812 }
7813 previousActiveTriggerIdRef.current = activeTriggerId;
7814 previousPayloadRef.current = payload;
7815 }, [activeTriggerId, payload]);
7816 return `${activeTriggerId ?? "current"}-${contentKey}`;
7817 }
7818
7819 // node_modules/@base-ui/react/utils/FloatingPortalLite.mjs
7820 var React34 = __toESM(require_react(), 1);
7821 var ReactDOM7 = __toESM(require_react_dom(), 1);
7822 var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1);
7823 var FloatingPortalLite = /* @__PURE__ */ React34.forwardRef(function FloatingPortalLite2(componentProps, forwardedRef) {
7824 const {
7825 children,
7826 container,
7827 className,
7828 render,
7829 style,
7830 ...elementProps
7831 } = componentProps;
7832 const {
7833 node: portalNode,
7834 subtree: portalSubtree
7835 } = useFloatingPortalNode({
7836 container,
7837 ref: forwardedRef,
7838 componentProps,
7839 elementProps
7840 });
7841 if (!portalSubtree && !portalNode) {
7842 return null;
7843 }
7844 return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(React34.Fragment, {
7845 children: [portalSubtree, portalNode && /* @__PURE__ */ ReactDOM7.createPortal(children, portalNode)]
7846 });
7847 });
7848 if (true) FloatingPortalLite.displayName = "FloatingPortalLite";
7849
7850 // node_modules/@base-ui/react/tooltip/index.parts.mjs
7851 var index_parts_exports = {};
7852 __export(index_parts_exports, {
7853 Arrow: () => TooltipArrow,
7854 Handle: () => TooltipHandle,
7855 Popup: () => TooltipPopup,
7856 Portal: () => TooltipPortal,
7857 Positioner: () => TooltipPositioner,
7858 Provider: () => TooltipProvider,
7859 Root: () => TooltipRoot,
7860 Trigger: () => TooltipTrigger,
7861 Viewport: () => TooltipViewport,
7862 createHandle: () => createTooltipHandle
7863 });
7864
7865 // node_modules/@base-ui/react/tooltip/root/TooltipRoot.mjs
7866 var React37 = __toESM(require_react(), 1);
7867
7868 // node_modules/@base-ui/react/tooltip/root/TooltipRootContext.mjs
7869 var React35 = __toESM(require_react(), 1);
7870 var TooltipRootContext = /* @__PURE__ */ React35.createContext(void 0);
7871 if (true) TooltipRootContext.displayName = "TooltipRootContext";
7872 function useTooltipRootContext(optional) {
7873 const context = React35.useContext(TooltipRootContext);
7874 if (context === void 0 && !optional) {
7875 throw new Error(true ? "Base UI: TooltipRootContext is missing. Tooltip parts must be placed within <Tooltip.Root>." : formatErrorMessage_default(72));
7876 }
7877 return context;
7878 }
7879
7880 // node_modules/@base-ui/react/tooltip/store/TooltipStore.mjs
7881 var React36 = __toESM(require_react(), 1);
7882 var selectors2 = {
7883 ...popupStoreSelectors,
7884 disabled: (state) => state.disabled,
7885 instantType: (state) => state.instantType,
7886 isInstantPhase: (state) => state.isInstantPhase,
7887 trackCursorAxis: (state) => state.trackCursorAxis,
7888 disableHoverablePopup: (state) => state.disableHoverablePopup,
7889 lastOpenChangeReason: (state) => state.openChangeReason,
7890 closeOnClick: (state) => state.closeOnClick,
7891 closeDelay: (state) => state.closeDelay,
7892 adaptiveOrigin: (state) => state.adaptiveOrigin
7893 };
7894 var TooltipStore = class extends ReactStore {
7895 constructor(initialState2, floatingId, nested) {
7896 const triggerElements = new PopupTriggerMap();
7897 super(createInitialState(initialState2, triggerElements, floatingId, nested), createInitialContext(triggerElements), selectors2);
7898 }
7899 setOpen = (nextOpen, eventDetails) => {
7900 applyPopupOpenChange(this, nextOpen, eventDetails, {
7901 extraState: {
7902 openChangeReason: eventDetails.reason
7903 }
7904 });
7905 };
7906 // Used by trigger clicks to clear a delayed hover open without reporting a public open-state change.
7907 cancelPendingOpen(event) {
7908 this.state.floatingRootContext.dispatchOpenChange(false, createChangeEventDetails(reason_parts_exports.triggerPress, event));
7909 }
7910 };
7911 function createNullTooltipStore() {
7912 const triggerElements = new PopupTriggerMap();
7913 const store2 = new NullStore(Object.freeze(createInitialState(void 0, triggerElements)), Object.freeze(createInitialContext(triggerElements)), selectors2);
7914 return Object.assign(store2, {
7915 setOpen: NOOP,
7916 cancelPendingOpen: NOOP
7917 });
7918 }
7919 function createInitialState(initialState2, triggerElements, floatingId, nested = false) {
7920 const state = {
7921 ...createInitialPopupStoreState(triggerElements, floatingId, nested),
7922 disabled: false,
7923 instantType: void 0,
7924 isInstantPhase: false,
7925 trackCursorAxis: "none",
7926 disableHoverablePopup: false,
7927 openChangeReason: null,
7928 closeOnClick: true,
7929 closeDelay: 0,
7930 adaptiveOrigin: void 0,
7931 ...initialState2
7932 };
7933 return state;
7934 }
7935 function createInitialContext(triggerElements) {
7936 return {
7937 popupRef: /* @__PURE__ */ React36.createRef(),
7938 onOpenChange: void 0,
7939 onOpenChangeComplete: void 0,
7940 triggerElements
7941 };
7942 }
7943
7944 // node_modules/@base-ui/react/tooltip/root/TooltipRoot.mjs
7945 var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1);
7946 var TooltipRoot = fastComponent(function TooltipRoot2(props) {
7947 const {
7948 disabled: disabled2 = false,
7949 defaultOpen = false,
7950 open: openProp,
7951 disableHoverablePopup = false,
7952 trackCursorAxis = "none",
7953 actionsRef,
7954 onOpenChange,
7955 onOpenChangeComplete,
7956 handle,
7957 triggerId: triggerIdProp,
7958 defaultTriggerId: defaultTriggerIdProp = null,
7959 children
7960 } = props;
7961 const store2 = usePopupRootStore((floatingId, nested) => new TooltipStore({
7962 open: defaultOpen,
7963 openProp,
7964 activeTriggerId: defaultTriggerIdProp,
7965 triggerIdProp
7966 }, floatingId, nested));
7967 store2.useControlledProp("openProp", openProp);
7968 store2.useControlledProp("triggerIdProp", triggerIdProp);
7969 store2.useContextCallback("onOpenChange", onOpenChange);
7970 store2.useContextCallback("onOpenChangeComplete", onOpenChangeComplete);
7971 const openState = store2.useState("open");
7972 const open2 = !disabled2 && openState;
7973 const activeTriggerId = store2.useState("activeTriggerId");
7974 const mounted = store2.useState("mounted");
7975 const payload = store2.useState("payload");
7976 store2.useSyncedValues({
7977 trackCursorAxis,
7978 disableHoverablePopup,
7979 disabled: disabled2
7980 });
7981 useImplicitActiveTrigger(store2, {
7982 closeOnActiveTriggerUnmount: true
7983 });
7984 const {
7985 forceUnmount,
7986 transitionStatus
7987 } = useOpenStateTransitions(open2, store2);
7988 const isInstantPhase = store2.useState("isInstantPhase");
7989 const instantType = store2.useState("instantType");
7990 const lastOpenChangeReason = store2.useState("lastOpenChangeReason");
7991 const previousInstantTypeRef = React37.useRef(null);
7992 useIsoLayoutEffect(() => {
7993 if (openState && disabled2) {
7994 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.disabled));
7995 }
7996 }, [openState, disabled2, store2]);
7997 useIsoLayoutEffect(() => {
7998 if (transitionStatus === "ending" && lastOpenChangeReason === reason_parts_exports.none || transitionStatus !== "ending" && isInstantPhase) {
7999 if (instantType !== "delay") {
8000 previousInstantTypeRef.current = instantType;
8001 }
8002 store2.set("instantType", "delay");
8003 } else if (previousInstantTypeRef.current !== null) {
8004 store2.set("instantType", previousInstantTypeRef.current);
8005 previousInstantTypeRef.current = null;
8006 }
8007 }, [transitionStatus, isInstantPhase, lastOpenChangeReason, instantType, store2]);
8008 useIsoLayoutEffect(() => {
8009 if (open2) {
8010 if (activeTriggerId == null) {
8011 store2.set("payload", void 0);
8012 }
8013 }
8014 }, [store2, activeTriggerId, open2]);
8015 React37.useImperativeHandle(actionsRef, () => ({
8016 unmount: forceUnmount,
8017 close: () => store2.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction))
8018 }), [forceUnmount, store2]);
8019 const shouldRenderInteractions = open2 || mounted || !disabled2 && trackCursorAxis !== "none";
8020 return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(TooltipRootContext.Provider, {
8021 value: store2,
8022 children: [handle && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(PopupHandleAttachment, {
8023 handle,
8024 store: store2
8025 }), shouldRenderInteractions && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(TooltipInteractions, {
8026 store: store2,
8027 disabled: disabled2,
8028 trackCursorAxis
8029 }), typeof children === "function" ? children({
8030 payload
8031 }) : children]
8032 });
8033 });
8034 if (true) TooltipRoot.displayName = "TooltipRoot";
8035 function TooltipInteractions({
8036 store: store2,
8037 disabled: disabled2,
8038 trackCursorAxis
8039 }) {
8040 const floatingRootContext = store2.useState("floatingRootContext");
8041 const dismiss = useDismiss(floatingRootContext, {
8042 enabled: !disabled2,
8043 referencePress: () => store2.select("closeOnClick")
8044 });
8045 const clientPoint = useClientPoint(floatingRootContext, {
8046 enabled: !disabled2 && trackCursorAxis !== "none",
8047 axis: trackCursorAxis === "none" ? void 0 : trackCursorAxis
8048 });
8049 const triggerProps = React37.useMemo(() => mergeProps(clientPoint.reference, dismiss.reference), [clientPoint.reference, dismiss.reference]);
8050 usePopupInteractionProps(store2, {
8051 activeTriggerProps: triggerProps,
8052 inactiveTriggerProps: triggerProps,
8053 popupProps: dismiss.floating ?? EMPTY_OBJECT
8054 });
8055 return null;
8056 }
8057
8058 // node_modules/@base-ui/react/tooltip/trigger/TooltipTrigger.mjs
8059 var React39 = __toESM(require_react(), 1);
8060
8061 // node_modules/@base-ui/react/tooltip/provider/TooltipProviderContext.mjs
8062 var React38 = __toESM(require_react(), 1);
8063 var TooltipProviderContext = /* @__PURE__ */ React38.createContext(void 0);
8064 if (true) TooltipProviderContext.displayName = "TooltipProviderContext";
8065 function useTooltipProviderContext() {
8066 return React38.useContext(TooltipProviderContext);
8067 }
8068
8069 // node_modules/@base-ui/react/tooltip/utils/constants.mjs
8070 var OPEN_DELAY = 600;
8071
8072 // node_modules/@base-ui/react/tooltip/trigger/TooltipTrigger.mjs
8073 var TOOLTIP_TRIGGER_IDENTIFIER = "data-base-ui-tooltip-trigger";
8074 function getTargetElement(event) {
8075 if ("composedPath" in event) {
8076 const path = event.composedPath();
8077 for (let i = 0; i < path.length; i += 1) {
8078 const element = path[i];
8079 if (isElement(element)) {
8080 return element;
8081 }
8082 }
8083 }
8084 const target = event.target;
8085 if (isElement(target)) {
8086 return target;
8087 }
8088 return null;
8089 }
8090 function closestEnabledTooltipTrigger(element) {
8091 let current = element;
8092 while (current) {
8093 const trigger = current.closest(`[${TOOLTIP_TRIGGER_IDENTIFIER}]`);
8094 if (trigger) {
8095 return trigger;
8096 }
8097 const root = current.getRootNode();
8098 current = "host" in root && isElement(root.host) ? root.host : null;
8099 }
8100 return null;
8101 }
8102 var TooltipTrigger = fastComponentRef(function TooltipTrigger2(componentProps, forwardedRef) {
8103 const {
8104 render,
8105 className,
8106 style,
8107 handle,
8108 payload,
8109 disabled: disabledProp,
8110 delay,
8111 closeOnClick = true,
8112 closeDelay,
8113 id: idProp,
8114 ...elementProps
8115 } = componentProps;
8116 const rootContext = useTooltipRootContext(true);
8117 const handleStore = usePopupHandleStore(handle);
8118 const store2 = handleStore ?? rootContext;
8119 if (!store2) {
8120 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));
8121 }
8122 const thisTriggerId = useBaseUiId(idProp);
8123 const isTriggerActive = store2.useState("isTriggerActive", thisTriggerId);
8124 const isOpenedByThisTrigger = store2.useState("isOpenedByTrigger", thisTriggerId);
8125 const floatingRootContext = store2.useState("floatingRootContext");
8126 const triggerElementRef = React39.useRef(null);
8127 const closeDelayWithDefault = closeDelay ?? 0;
8128 const {
8129 registerTrigger,
8130 isMountedByThisTrigger
8131 } = useTriggerDataForwarding(thisTriggerId, triggerElementRef, store2, {
8132 payload,
8133 closeOnClick,
8134 closeDelay: closeDelayWithDefault
8135 });
8136 const providerDelay = useTooltipProviderContext();
8137 const {
8138 activeIdRef,
8139 delayRef,
8140 isInstantPhase,
8141 hasProvider
8142 } = useDelayGroup(floatingRootContext, {
8143 open: isOpenedByThisTrigger
8144 });
8145 const hoverInteraction = useHoverInteractionSharedState(floatingRootContext);
8146 store2.useSyncedValue("isInstantPhase", isInstantPhase);
8147 const rootDisabled = store2.useState("disabled");
8148 const disabled2 = disabledProp ?? rootDisabled;
8149 const disabledRef = useValueAsRef(disabled2);
8150 const trackCursorAxis = store2.useState("trackCursorAxis");
8151 const disableHoverablePopup = store2.useState("disableHoverablePopup");
8152 const isNestedTriggerHoveredRef = React39.useRef(false);
8153 const nestedTriggerOpenTimeout = useTimeout();
8154 const pointerTypeRef = React39.useRef(void 0);
8155 function getOpenDelay() {
8156 if (hasProvider && activeIdRef.current != null) {
8157 return 0;
8158 }
8159 return delay ?? providerDelay ?? OPEN_DELAY;
8160 }
8161 function isEnabledNestedTriggerTarget(target) {
8162 const triggerEl = triggerElementRef.current;
8163 if (!triggerEl || !target) {
8164 return false;
8165 }
8166 const nearestTrigger = closestEnabledTooltipTrigger(target);
8167 return nearestTrigger !== null && nearestTrigger !== triggerEl && contains(triggerEl, nearestTrigger);
8168 }
8169 function detectNestedTriggerHover(target) {
8170 const nestedTriggerHovered = isEnabledNestedTriggerTarget(target);
8171 isNestedTriggerHoveredRef.current = nestedTriggerHovered;
8172 if (nestedTriggerHovered) {
8173 hoverInteraction.openChangeTimeout.clear();
8174 hoverInteraction.restTimeout.clear();
8175 hoverInteraction.restTimeoutPending = false;
8176 nestedTriggerOpenTimeout.clear();
8177 }
8178 return nestedTriggerHovered;
8179 }
8180 const hoverProps = useHoverReferenceInteraction(floatingRootContext, {
8181 enabled: !disabled2,
8182 mouseOnly: true,
8183 move: false,
8184 handleClose: !disableHoverablePopup && trackCursorAxis !== "both" ? safePolygon() : null,
8185 restMs: getOpenDelay,
8186 delay() {
8187 if (closeDelay == null && hasProvider) {
8188 return {
8189 close: getDelay(delayRef.current, "close")
8190 };
8191 }
8192 return {
8193 close: closeDelayWithDefault
8194 };
8195 },
8196 triggerElementRef,
8197 isActiveTrigger: isTriggerActive,
8198 isClosing: () => store2.select("transitionStatus") === "ending",
8199 shouldOpen() {
8200 return !isNestedTriggerHoveredRef.current;
8201 }
8202 });
8203 const focusProps = useFocus(floatingRootContext, {
8204 enabled: !disabled2
8205 }).reference;
8206 const handleNestedTriggerHover = (event) => {
8207 const wasNestedTriggerHovered = isNestedTriggerHoveredRef.current;
8208 const target = getTargetElement(event);
8209 const nestedTriggerHovered = detectNestedTriggerHover(target);
8210 const triggerEl = triggerElementRef.current;
8211 const targetInsideTrigger = triggerEl && target && contains(triggerEl, target);
8212 if (nestedTriggerHovered && store2.select("open") && store2.select("lastOpenChangeReason") === reason_parts_exports.triggerHover) {
8213 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
8214 return;
8215 }
8216 if (wasNestedTriggerHovered && !nestedTriggerHovered && targetInsideTrigger && !disabledRef.current && !store2.select("open") && triggerEl && // Match the hover hook's non-strict mouse fallback for mouse-only event sequences.
8217 isMouseLikePointerType(pointerTypeRef.current)) {
8218 const open2 = () => {
8219 if (!isNestedTriggerHoveredRef.current && !disabledRef.current && !store2.select("open")) {
8220 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerEl));
8221 }
8222 };
8223 const openDelay = getOpenDelay();
8224 if (openDelay === 0) {
8225 nestedTriggerOpenTimeout.clear();
8226 open2();
8227 } else {
8228 nestedTriggerOpenTimeout.start(openDelay, open2);
8229 }
8230 }
8231 };
8232 const rootTriggerProps = store2.useState("triggerProps", isMountedByThisTrigger);
8233 const shouldApplyRootTriggerProps = isMountedByThisTrigger || trackCursorAxis !== "none";
8234 const state = {
8235 open: isOpenedByThisTrigger
8236 };
8237 const element = useRenderElement("button", componentProps, {
8238 state,
8239 ref: [forwardedRef, registerTrigger, triggerElementRef],
8240 props: [hoverProps, focusProps, shouldApplyRootTriggerProps ? rootTriggerProps : void 0, {
8241 onMouseOver(event) {
8242 handleNestedTriggerHover(event.nativeEvent);
8243 },
8244 onFocus(event) {
8245 if (isEnabledNestedTriggerTarget(getTargetElement(event.nativeEvent))) {
8246 event.preventBaseUIHandler();
8247 }
8248 },
8249 onMouseLeave() {
8250 isNestedTriggerHoveredRef.current = false;
8251 nestedTriggerOpenTimeout.clear();
8252 pointerTypeRef.current = void 0;
8253 },
8254 onPointerEnter(event) {
8255 pointerTypeRef.current = event.pointerType;
8256 },
8257 onPointerDown(event) {
8258 pointerTypeRef.current = event.pointerType;
8259 store2.set("closeOnClick", closeOnClick);
8260 if (closeOnClick && !store2.select("open")) {
8261 store2.cancelPendingOpen(event.nativeEvent);
8262 }
8263 },
8264 onClick(event) {
8265 if (closeOnClick && !store2.select("open")) {
8266 store2.cancelPendingOpen(event.nativeEvent);
8267 }
8268 },
8269 id: thisTriggerId,
8270 [triggerDisabled]: disabled2 ? "" : void 0,
8271 [TOOLTIP_TRIGGER_IDENTIFIER]: disabled2 ? void 0 : ""
8272 }, elementProps],
8273 stateAttributesMapping: triggerOpenStateMapping
8274 });
8275 return element;
8276 });
8277 if (true) TooltipTrigger.displayName = "TooltipTrigger";
8278
8279 // node_modules/@base-ui/react/tooltip/portal/TooltipPortal.mjs
8280 var React41 = __toESM(require_react(), 1);
8281
8282 // node_modules/@base-ui/react/tooltip/portal/TooltipPortalContext.mjs
8283 var React40 = __toESM(require_react(), 1);
8284 var TooltipPortalContext = /* @__PURE__ */ React40.createContext(void 0);
8285 if (true) TooltipPortalContext.displayName = "TooltipPortalContext";
8286 function useTooltipPortalContext() {
8287 const value = React40.useContext(TooltipPortalContext);
8288 if (value === void 0) {
8289 throw new Error(true ? "Base UI: <Tooltip.Portal> is missing." : formatErrorMessage_default(70));
8290 }
8291 return value;
8292 }
8293
8294 // node_modules/@base-ui/react/tooltip/portal/TooltipPortal.mjs
8295 var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1);
8296 var TooltipPortal = /* @__PURE__ */ React41.forwardRef(function TooltipPortal2(props, forwardedRef) {
8297 const {
8298 keepMounted = false,
8299 ...portalProps
8300 } = props;
8301 const store2 = useTooltipRootContext();
8302 const mounted = store2.useState("mounted");
8303 const shouldRender = mounted || keepMounted;
8304 if (!shouldRender) {
8305 return null;
8306 }
8307 return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TooltipPortalContext.Provider, {
8308 value: keepMounted,
8309 children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(FloatingPortalLite, {
8310 ref: forwardedRef,
8311 ...portalProps
8312 })
8313 });
8314 });
8315 if (true) TooltipPortal.displayName = "TooltipPortal";
8316
8317 // node_modules/@base-ui/react/tooltip/positioner/TooltipPositioner.mjs
8318 var React43 = __toESM(require_react(), 1);
8319
8320 // node_modules/@base-ui/react/tooltip/positioner/TooltipPositionerContext.mjs
8321 var React42 = __toESM(require_react(), 1);
8322 var TooltipPositionerContext = /* @__PURE__ */ React42.createContext(void 0);
8323 if (true) TooltipPositionerContext.displayName = "TooltipPositionerContext";
8324 function useTooltipPositionerContext() {
8325 const context = React42.useContext(TooltipPositionerContext);
8326 if (context === void 0) {
8327 throw new Error(true ? "Base UI: TooltipPositionerContext is missing. TooltipPositioner parts must be placed within <Tooltip.Positioner>." : formatErrorMessage_default(71));
8328 }
8329 return context;
8330 }
8331
8332 // node_modules/@base-ui/react/tooltip/positioner/TooltipPositioner.mjs
8333 var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1);
8334 var TooltipPositioner = /* @__PURE__ */ React43.forwardRef(function TooltipPositioner2(componentProps, forwardedRef) {
8335 const {
8336 render,
8337 className,
8338 anchor,
8339 positionMethod = "absolute",
8340 side = "top",
8341 align = "center",
8342 sideOffset = 0,
8343 alignOffset = 0,
8344 collisionBoundary = "clipping-ancestors",
8345 collisionPadding = 5,
8346 arrowPadding = 5,
8347 sticky = false,
8348 disableAnchorTracking = false,
8349 collisionAvoidance = POPUP_COLLISION_AVOIDANCE,
8350 style,
8351 ...elementProps
8352 } = componentProps;
8353 const store2 = useTooltipRootContext();
8354 const keepMounted = useTooltipPortalContext();
8355 const open2 = store2.useState("open");
8356 const mounted = store2.useState("mounted");
8357 const trackCursorAxis = store2.useState("trackCursorAxis");
8358 const disableHoverablePopup = store2.useState("disableHoverablePopup");
8359 const floatingRootContext = store2.useState("floatingRootContext");
8360 const instantType = store2.useState("instantType");
8361 const transitionStatus = store2.useState("transitionStatus");
8362 const adaptiveOrigin2 = store2.useState("adaptiveOrigin");
8363 const positioning = useAnchorPositioning({
8364 anchor,
8365 positionMethod,
8366 floatingRootContext,
8367 mounted,
8368 side,
8369 sideOffset,
8370 align,
8371 alignOffset,
8372 collisionBoundary,
8373 collisionPadding,
8374 sticky,
8375 arrowPadding,
8376 disableAnchorTracking,
8377 keepMounted,
8378 collisionAvoidance,
8379 adaptiveOrigin: adaptiveOrigin2
8380 });
8381 const state = React43.useMemo(() => ({
8382 open: open2,
8383 side: positioning.side,
8384 align: positioning.align,
8385 anchorHidden: positioning.anchorHidden,
8386 instant: trackCursorAxis !== "none" ? "tracking-cursor" : instantType
8387 }), [open2, positioning.side, positioning.align, positioning.anchorHidden, trackCursorAxis, instantType]);
8388 const element = usePositioner(componentProps, state, {
8389 styles: positioning.positionerStyles,
8390 transitionStatus,
8391 props: elementProps,
8392 refs: [forwardedRef, store2.useStateSetter("positionerElement")],
8393 hidden: !mounted,
8394 inert: !open2 || trackCursorAxis === "both" || disableHoverablePopup
8395 });
8396 return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TooltipPositionerContext.Provider, {
8397 value: positioning,
8398 children: element
8399 });
8400 });
8401 if (true) TooltipPositioner.displayName = "TooltipPositioner";
8402
8403 // node_modules/@base-ui/react/tooltip/popup/TooltipPopup.mjs
8404 var React44 = __toESM(require_react(), 1);
8405 var TooltipPopup = /* @__PURE__ */ React44.forwardRef(function TooltipPopup2(componentProps, forwardedRef) {
8406 const {
8407 render,
8408 className,
8409 style,
8410 ...elementProps
8411 } = componentProps;
8412 const store2 = useTooltipRootContext();
8413 const {
8414 side,
8415 align
8416 } = useTooltipPositionerContext();
8417 const open2 = store2.useState("open");
8418 const instantType = store2.useState("instantType");
8419 const transitionStatus = store2.useState("transitionStatus");
8420 const popupProps = store2.useState("popupProps");
8421 const floatingContext = store2.useState("floatingRootContext");
8422 const disabled2 = store2.useState("disabled");
8423 const closeDelay = store2.useState("closeDelay");
8424 useOpenChangeComplete({
8425 open: open2,
8426 ref: store2.context.popupRef,
8427 onComplete() {
8428 if (open2) {
8429 store2.context.onOpenChangeComplete?.(true);
8430 }
8431 }
8432 });
8433 useHoverFloatingInteraction(floatingContext, {
8434 enabled: !disabled2,
8435 closeDelay
8436 });
8437 const setPopupElement = store2.useStateSetter("popupElement");
8438 const state = {
8439 open: open2,
8440 side,
8441 align,
8442 instant: instantType,
8443 transitionStatus
8444 };
8445 const element = useRenderElement("div", componentProps, {
8446 state,
8447 ref: [forwardedRef, store2.context.popupRef, setPopupElement],
8448 props: [FOCUSABLE_POPUP_PROPS, popupProps, getDisabledMountTransitionStyles(transitionStatus), elementProps],
8449 stateAttributesMapping: popupTransitionStateMapping
8450 });
8451 return element;
8452 });
8453 if (true) TooltipPopup.displayName = "TooltipPopup";
8454
8455 // node_modules/@base-ui/react/tooltip/arrow/TooltipArrow.mjs
8456 var React45 = __toESM(require_react(), 1);
8457 var TooltipArrow = /* @__PURE__ */ React45.forwardRef(function TooltipArrow2(componentProps, forwardedRef) {
8458 const {
8459 render,
8460 className,
8461 style,
8462 ...elementProps
8463 } = componentProps;
8464 const store2 = useTooltipRootContext();
8465 const {
8466 arrowRef,
8467 side,
8468 align,
8469 arrowUncentered,
8470 arrowStyles
8471 } = useTooltipPositionerContext();
8472 const open2 = store2.useState("open");
8473 const instantType = store2.useState("instantType");
8474 const state = {
8475 open: open2,
8476 side,
8477 align,
8478 uncentered: arrowUncentered,
8479 instant: instantType
8480 };
8481 const element = useRenderElement("div", componentProps, {
8482 state,
8483 ref: [forwardedRef, arrowRef],
8484 props: [{
8485 style: arrowStyles,
8486 "aria-hidden": true
8487 }, elementProps],
8488 stateAttributesMapping: popupStateMapping
8489 });
8490 return element;
8491 });
8492 if (true) TooltipArrow.displayName = "TooltipArrow";
8493
8494 // node_modules/@base-ui/react/tooltip/provider/TooltipProvider.mjs
8495 var React46 = __toESM(require_react(), 1);
8496 var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1);
8497 var TooltipProvider = function TooltipProvider2(props) {
8498 const {
8499 delay,
8500 closeDelay,
8501 timeout = 400
8502 } = props;
8503 const delayValue = React46.useMemo(() => ({
8504 open: delay,
8505 close: closeDelay
8506 }), [delay, closeDelay]);
8507 return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(TooltipProviderContext.Provider, {
8508 value: delay,
8509 children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(FloatingDelayGroup, {
8510 delay: delayValue,
8511 timeoutMs: timeout,
8512 children: props.children
8513 })
8514 });
8515 };
8516 if (true) TooltipProvider.displayName = "TooltipProvider";
8517
8518 // node_modules/@base-ui/react/tooltip/viewport/TooltipViewport.mjs
8519 var React47 = __toESM(require_react(), 1);
8520 var TooltipViewport = /* @__PURE__ */ React47.forwardRef(function TooltipViewport2(componentProps, forwardedRef) {
8521 const {
8522 render,
8523 className,
8524 style,
8525 children,
8526 ...elementProps
8527 } = componentProps;
8528 const store2 = useTooltipRootContext();
8529 const positioner = useTooltipPositionerContext();
8530 const instantType = store2.useState("instantType");
8531 const {
8532 children: childrenToRender,
8533 state: viewportState
8534 } = usePopupViewport({
8535 store: store2,
8536 side: positioner.side,
8537 children
8538 });
8539 const state = {
8540 activationDirection: viewportState.activationDirection,
8541 transitioning: viewportState.transitioning,
8542 instant: instantType
8543 };
8544 return useRenderElement("div", componentProps, {
8545 state,
8546 ref: forwardedRef,
8547 props: [elementProps, {
8548 children: childrenToRender
8549 }],
8550 stateAttributesMapping: popupViewportStateMapping
8551 });
8552 });
8553 if (true) TooltipViewport.displayName = "TooltipViewport";
8554
8555 // node_modules/@base-ui/react/tooltip/store/TooltipHandle.mjs
8556 var TooltipHandle = class extends BasePopupHandle {
8557 constructor() {
8558 super(createNullTooltipStore(), "Tooltip");
8559 }
8560 /**
8561 * Opens the tooltip and associates it with the trigger with the given id.
8562 *
8563 * This method should only be called in an event handler or an effect (not during rendering).
8564 *
8565 * @param triggerId ID of the trigger to associate with the tooltip. The trigger must be a matching
8566 * `Tooltip.Trigger` with this handle passed as a prop.
8567 */
8568 open(triggerId) {
8569 this.openByTrigger(triggerId);
8570 }
8571 /**
8572 * Closes the tooltip.
8573 *
8574 * This method should only be called in an event handler or an effect (not during rendering).
8575 */
8576 close() {
8577 this.closePopup();
8578 }
8579 /**
8580 * Whether the tooltip is currently open. Returns `false` while no root is attached to the handle.
8581 */
8582 get isOpen() {
8583 return this.attachedStore?.select("open") ?? false;
8584 }
8585 };
8586 function createTooltipHandle() {
8587 return new TooltipHandle();
8588 }
8589
8590 // node_modules/@base-ui/react/use-render/useRender.mjs
8591 function useRender(params) {
8592 return useRenderElement(params.defaultTagName ?? "div", params, params);
8593 }
8594
8595 // packages/ui/build-module/text/text.mjs
8596 var import_element10 = __toESM(require_element(), 1);
8597 var STYLE_HASH_ATTRIBUTE = "data-wp-hash";
8598 function getRuntime() {
8599 const globalScope = globalThis;
8600 if (globalScope.__wpStyleRuntime) {
8601 return globalScope.__wpStyleRuntime;
8602 }
8603 globalScope.__wpStyleRuntime = {
8604 documents: /* @__PURE__ */ new Map(),
8605 styles: /* @__PURE__ */ new Map(),
8606 injectedStyles: /* @__PURE__ */ new WeakMap()
8607 };
8608 if (typeof document !== "undefined") {
8609 registerDocument(document);
8610 }
8611 return globalScope.__wpStyleRuntime;
8612 }
8613 function documentContainsStyleHash(targetDocument, hash) {
8614 if (!targetDocument.head) {
8615 return false;
8616 }
8617 for (const style of targetDocument.head.querySelectorAll(
8618 `style[${STYLE_HASH_ATTRIBUTE}]`
8619 )) {
8620 if (style.getAttribute(STYLE_HASH_ATTRIBUTE) === hash) {
8621 return true;
8622 }
8623 }
8624 return false;
8625 }
8626 function injectStyle(targetDocument, hash, css) {
8627 if (!targetDocument.head) {
8628 return;
8629 }
8630 const runtime = getRuntime();
8631 let injectedStyles = runtime.injectedStyles.get(targetDocument);
8632 if (!injectedStyles) {
8633 injectedStyles = /* @__PURE__ */ new Set();
8634 runtime.injectedStyles.set(targetDocument, injectedStyles);
8635 }
8636 if (injectedStyles.has(hash)) {
8637 return;
8638 }
8639 if (documentContainsStyleHash(targetDocument, hash)) {
8640 injectedStyles.add(hash);
8641 return;
8642 }
8643 const style = targetDocument.createElement("style");
8644 style.setAttribute(STYLE_HASH_ATTRIBUTE, hash);
8645 style.appendChild(targetDocument.createTextNode(css));
8646 targetDocument.head.appendChild(style);
8647 injectedStyles.add(hash);
8648 }
8649 function registerDocument(targetDocument) {
8650 const runtime = getRuntime();
8651 runtime.documents.set(
8652 targetDocument,
8653 (runtime.documents.get(targetDocument) ?? 0) + 1
8654 );
8655 for (const [hash, css] of runtime.styles) {
8656 injectStyle(targetDocument, hash, css);
8657 }
8658 return () => {
8659 const count = runtime.documents.get(targetDocument);
8660 if (count === void 0) {
8661 return;
8662 }
8663 if (count <= 1) {
8664 runtime.documents.delete(targetDocument);
8665 return;
8666 }
8667 runtime.documents.set(targetDocument, count - 1);
8668 };
8669 }
8670 function registerStyle(hash, css) {
8671 const runtime = getRuntime();
8672 runtime.styles.set(hash, css);
8673 for (const targetDocument of runtime.documents.keys()) {
8674 injectStyle(targetDocument, hash, css);
8675 }
8676 }
8677 if (typeof process === "undefined" || true) {
8678 registerStyle("3167e7d116", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._83ed8a8da5dd50ea__text{text-wrap:pretty;margin:0}._14437cfb77831647__heading-2xl{--_gcd-heading-font-size:var(--wpds-typography-font-size-2xl,32px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-emphasis,600);--_gcd-p-font-size:var(--wpds-typography-font-size-2xl,32px);--_gcd-p-line-height:var(--wpds-typography-line-height-2xl,40px);font-size:var(--wpds-typography-font-size-2xl,32px);line-height:var(--wpds-typography-line-height-2xl,40px)}._14437cfb77831647__heading-2xl,._3c78b7fa9b4072dd__heading-xl{font-family:var(--wpds-typography-font-family-heading,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-typography-font-weight-emphasis,600)}._3c78b7fa9b4072dd__heading-xl{--_gcd-heading-font-size:var(--wpds-typography-font-size-xl,20px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-emphasis,600);--_gcd-p-font-size:var(--wpds-typography-font-size-xl,20px);--_gcd-p-line-height:var(--wpds-typography-line-height-md,24px);font-size:var(--wpds-typography-font-size-xl,20px);line-height:var(--wpds-typography-line-height-md,24px)}.aa58f227716bcde2__heading-lg{--_gcd-heading-font-size:var(--wpds-typography-font-size-lg,15px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-emphasis,600);--_gcd-p-font-size:var(--wpds-typography-font-size-lg,15px);--_gcd-p-line-height:var(--wpds-typography-line-height-sm,20px);font-size:var(--wpds-typography-font-size-lg,15px)}.aa58f227716bcde2__heading-lg,.fc4da56d8dfe52c4__heading-md{font-family:var(--wpds-typography-font-family-heading,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-typography-font-weight-emphasis,600);line-height:var(--wpds-typography-line-height-sm,20px)}.fc4da56d8dfe52c4__heading-md{--_gcd-heading-font-size:var(--wpds-typography-font-size-md,13px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-emphasis,600);--_gcd-p-font-size:var(--wpds-typography-font-size-md,13px);--_gcd-p-line-height:var(--wpds-typography-line-height-sm,20px);font-size:var(--wpds-typography-font-size-md,13px)}.a9b78c7c82e8dff7__heading-sm{--_gcd-heading-font-size:var(--wpds-typography-font-size-xs,11px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-emphasis,600);--_gcd-p-font-size:var(--wpds-typography-font-size-xs,11px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);font-family:var(--wpds-typography-font-family-heading,-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-emphasis,600);line-height:var(--wpds-typography-line-height-xs,16px);text-transform:uppercase}._305ff559e52180d5__body-xl{--_gcd-heading-font-size:var(--wpds-typography-font-size-xl,20px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-default,400);--_gcd-p-font-size:var(--wpds-typography-font-size-xl,20px);--_gcd-p-line-height:var(--wpds-typography-line-height-xl,32px);font-size:var(--wpds-typography-font-size-xl,20px);line-height:var(--wpds-typography-line-height-xl,32px)}._305ff559e52180d5__body-xl,.ca1aa3fc2029e958__body-lg{font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-typography-font-weight-default,400)}.ca1aa3fc2029e958__body-lg{--_gcd-heading-font-size:var(--wpds-typography-font-size-lg,15px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-default,400);--_gcd-p-font-size:var(--wpds-typography-font-size-lg,15px);--_gcd-p-line-height:var(--wpds-typography-line-height-md,24px);font-size:var(--wpds-typography-font-size-lg,15px);line-height:var(--wpds-typography-line-height-md,24px)}._131101940be12424__body-md{--_gcd-heading-font-size:var(--wpds-typography-font-size-md,13px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-default,400);--_gcd-p-font-size:var(--wpds-typography-font-size-md,13px);--_gcd-p-line-height:var(--wpds-typography-line-height-sm,20px);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--wpds-typography-line-height-sm,20px)}._0e8d87a42c1f75fa__body-sm,._131101940be12424__body-md{font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-typography-font-weight-default,400)}._0e8d87a42c1f75fa__body-sm{--_gcd-heading-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-default,400);--_gcd-p-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);font-size:var(--wpds-typography-font-size-sm,12px);line-height:var(--wpds-typography-line-height-xs,16px)}}}');
8679 }
8680 var style_default = { "text": "_83ed8a8da5dd50ea__text", "heading-2xl": "_14437cfb77831647__heading-2xl", "heading-xl": "_3c78b7fa9b4072dd__heading-xl", "heading-lg": "aa58f227716bcde2__heading-lg", "heading-md": "fc4da56d8dfe52c4__heading-md", "heading-sm": "a9b78c7c82e8dff7__heading-sm", "body-xl": "_305ff559e52180d5__body-xl", "body-lg": "ca1aa3fc2029e958__body-lg", "body-md": "_131101940be12424__body-md", "body-sm": "_0e8d87a42c1f75fa__body-sm" };
8681 if (typeof process === "undefined" || true) {
8682 registerStyle("e8e31009f5", "._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);&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-weak,#707070))}&: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-foreground-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-foreground-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-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-emphasis,600));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)}.c59a0ebebd71fa4a__ol{list-style:var(--_gcd-ol-list-style,none);margin:var(--_gcd-ol-margin,0);padding-block:var(--_gcd-ol-padding-block,0);padding-inline:var(--_gcd-ol-padding-inline,0)}._46b5cb0c8e24e8c9__li{margin:var(--_gcd-li-margin,0)}");
8683 }
8684 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", "ol": "c59a0ebebd71fa4a__ol", "li": "_46b5cb0c8e24e8c9__li" };
8685 var Text = (0, import_element10.forwardRef)(function Text2({ variant = "body-md", render, className, ...props }, ref) {
8686 const element = useRender({
8687 render,
8688 defaultTagName: "span",
8689 ref,
8690 props: mergeProps(props, {
8691 className: clsx_default(
8692 style_default.text,
8693 global_css_defense_default.heading,
8694 global_css_defense_default.p,
8695 style_default[variant],
8696 className
8697 )
8698 })
8699 });
8700 return element;
8701 });
8702
8703 // packages/ui/build-module/tooltip/index.mjs
8704 var tooltip_exports = {};
8705 __export(tooltip_exports, {
8706 Popup: () => Popup,
8707 Portal: () => Portal,
8708 Positioner: () => Positioner,
8709 Provider: () => Provider,
8710 Root: () => Root,
8711 Trigger: () => Trigger
8712 });
8713
8714 // packages/ui/build-module/tooltip/popup.mjs
8715 var import_element14 = __toESM(require_element(), 1);
8716
8717 // packages/ui/build-module/tooltip/portal.mjs
8718 var import_element11 = __toESM(require_element(), 1);
8719
8720 // packages/ui/build-module/utils/wp-compat-overlay-slot.mjs
8721 var STYLE_HASH_ATTRIBUTE2 = "data-wp-hash";
8722 function getRuntime2() {
8723 const globalScope = globalThis;
8724 if (globalScope.__wpStyleRuntime) {
8725 return globalScope.__wpStyleRuntime;
8726 }
8727 globalScope.__wpStyleRuntime = {
8728 documents: /* @__PURE__ */ new Map(),
8729 styles: /* @__PURE__ */ new Map(),
8730 injectedStyles: /* @__PURE__ */ new WeakMap()
8731 };
8732 if (typeof document !== "undefined") {
8733 registerDocument2(document);
8734 }
8735 return globalScope.__wpStyleRuntime;
8736 }
8737 function documentContainsStyleHash2(targetDocument, hash) {
8738 if (!targetDocument.head) {
8739 return false;
8740 }
8741 for (const style of targetDocument.head.querySelectorAll(
8742 `style[${STYLE_HASH_ATTRIBUTE2}]`
8743 )) {
8744 if (style.getAttribute(STYLE_HASH_ATTRIBUTE2) === hash) {
8745 return true;
8746 }
8747 }
8748 return false;
8749 }
8750 function injectStyle2(targetDocument, hash, css) {
8751 if (!targetDocument.head) {
8752 return;
8753 }
8754 const runtime = getRuntime2();
8755 let injectedStyles = runtime.injectedStyles.get(targetDocument);
8756 if (!injectedStyles) {
8757 injectedStyles = /* @__PURE__ */ new Set();
8758 runtime.injectedStyles.set(targetDocument, injectedStyles);
8759 }
8760 if (injectedStyles.has(hash)) {
8761 return;
8762 }
8763 if (documentContainsStyleHash2(targetDocument, hash)) {
8764 injectedStyles.add(hash);
8765 return;
8766 }
8767 const style = targetDocument.createElement("style");
8768 style.setAttribute(STYLE_HASH_ATTRIBUTE2, hash);
8769 style.appendChild(targetDocument.createTextNode(css));
8770 targetDocument.head.appendChild(style);
8771 injectedStyles.add(hash);
8772 }
8773 function registerDocument2(targetDocument) {
8774 const runtime = getRuntime2();
8775 runtime.documents.set(
8776 targetDocument,
8777 (runtime.documents.get(targetDocument) ?? 0) + 1
8778 );
8779 for (const [hash, css] of runtime.styles) {
8780 injectStyle2(targetDocument, hash, css);
8781 }
8782 return () => {
8783 const count = runtime.documents.get(targetDocument);
8784 if (count === void 0) {
8785 return;
8786 }
8787 if (count <= 1) {
8788 runtime.documents.delete(targetDocument);
8789 return;
8790 }
8791 runtime.documents.set(targetDocument, count - 1);
8792 };
8793 }
8794 function registerStyle2(hash, css) {
8795 const runtime = getRuntime2();
8796 runtime.styles.set(hash, css);
8797 for (const targetDocument of runtime.documents.keys()) {
8798 injectStyle2(targetDocument, hash, css);
8799 }
8800 }
8801 if (typeof process === "undefined" || true) {
8802 registerStyle2("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}}}");
8803 }
8804 var wp_compat_overlay_slot_default = { "slot": "_11fc52b637ff8a7e__slot" };
8805 var WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE = "data-wp-compat-overlay-slot";
8806 function resolveOwnerDocument() {
8807 return typeof document === "undefined" ? null : document;
8808 }
8809 function isInWordPressEnvironment() {
8810 let topWp;
8811 try {
8812 topWp = window.top?.wp;
8813 } catch {
8814 }
8815 const wp = topWp ?? window.wp;
8816 return typeof wp?.components === "object" && wp.components !== null;
8817 }
8818 var cachedSlot = null;
8819 function ensureSlotIsAccessible(element) {
8820 element.setAttribute("aria-hidden", "false");
8821 return element;
8822 }
8823 function createSlot(ownerDocument2) {
8824 const element = ownerDocument2.createElement("div");
8825 element.setAttribute(WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE, "");
8826 if (wp_compat_overlay_slot_default.slot) {
8827 element.classList.add(wp_compat_overlay_slot_default.slot);
8828 }
8829 ownerDocument2.body.appendChild(element);
8830 return element;
8831 }
8832 function getWpCompatOverlaySlot() {
8833 if (typeof window === "undefined") {
8834 return void 0;
8835 }
8836 if (!isInWordPressEnvironment() && window.__wpUiCompatOverlaySlotEnabled !== true) {
8837 return void 0;
8838 }
8839 const ownerDocument2 = resolveOwnerDocument();
8840 if (!ownerDocument2 || !ownerDocument2.body) {
8841 return void 0;
8842 }
8843 if (cachedSlot && cachedSlot.ownerDocument === ownerDocument2 && cachedSlot.isConnected) {
8844 return ensureSlotIsAccessible(cachedSlot);
8845 }
8846 const existing = ownerDocument2.querySelector(
8847 `[${WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE}]`
8848 );
8849 if (existing instanceof HTMLDivElement) {
8850 cachedSlot = ensureSlotIsAccessible(existing);
8851 return cachedSlot;
8852 }
8853 if (cachedSlot?.isConnected) {
8854 cachedSlot.remove();
8855 }
8856 cachedSlot = ensureSlotIsAccessible(createSlot(ownerDocument2));
8857 return cachedSlot;
8858 }
8859
8860 // packages/ui/build-module/tooltip/portal.mjs
8861 var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1);
8862 var Portal = (0, import_element11.forwardRef)(
8863 function TooltipPortal3({ container, ...restProps }, ref) {
8864 return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
8865 index_parts_exports.Portal,
8866 {
8867 container: container ?? getWpCompatOverlaySlot(),
8868 ...restProps,
8869 ref
8870 }
8871 );
8872 }
8873 );
8874
8875 // packages/ui/build-module/tooltip/positioner.mjs
8876 var import_element12 = __toESM(require_element(), 1);
8877 var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1);
8878 var STYLE_HASH_ATTRIBUTE3 = "data-wp-hash";
8879 function getRuntime3() {
8880 const globalScope = globalThis;
8881 if (globalScope.__wpStyleRuntime) {
8882 return globalScope.__wpStyleRuntime;
8883 }
8884 globalScope.__wpStyleRuntime = {
8885 documents: /* @__PURE__ */ new Map(),
8886 styles: /* @__PURE__ */ new Map(),
8887 injectedStyles: /* @__PURE__ */ new WeakMap()
8888 };
8889 if (typeof document !== "undefined") {
8890 registerDocument3(document);
8891 }
8892 return globalScope.__wpStyleRuntime;
8893 }
8894 function documentContainsStyleHash3(targetDocument, hash) {
8895 if (!targetDocument.head) {
8896 return false;
8897 }
8898 for (const style of targetDocument.head.querySelectorAll(
8899 `style[${STYLE_HASH_ATTRIBUTE3}]`
8900 )) {
8901 if (style.getAttribute(STYLE_HASH_ATTRIBUTE3) === hash) {
8902 return true;
8903 }
8904 }
8905 return false;
8906 }
8907 function injectStyle3(targetDocument, hash, css) {
8908 if (!targetDocument.head) {
8909 return;
8910 }
8911 const runtime = getRuntime3();
8912 let injectedStyles = runtime.injectedStyles.get(targetDocument);
8913 if (!injectedStyles) {
8914 injectedStyles = /* @__PURE__ */ new Set();
8915 runtime.injectedStyles.set(targetDocument, injectedStyles);
8916 }
8917 if (injectedStyles.has(hash)) {
8918 return;
8919 }
8920 if (documentContainsStyleHash3(targetDocument, hash)) {
8921 injectedStyles.add(hash);
8922 return;
8923 }
8924 const style = targetDocument.createElement("style");
8925 style.setAttribute(STYLE_HASH_ATTRIBUTE3, hash);
8926 style.appendChild(targetDocument.createTextNode(css));
8927 targetDocument.head.appendChild(style);
8928 injectedStyles.add(hash);
8929 }
8930 function registerDocument3(targetDocument) {
8931 const runtime = getRuntime3();
8932 runtime.documents.set(
8933 targetDocument,
8934 (runtime.documents.get(targetDocument) ?? 0) + 1
8935 );
8936 for (const [hash, css] of runtime.styles) {
8937 injectStyle3(targetDocument, hash, css);
8938 }
8939 return () => {
8940 const count = runtime.documents.get(targetDocument);
8941 if (count === void 0) {
8942 return;
8943 }
8944 if (count <= 1) {
8945 runtime.documents.delete(targetDocument);
8946 return;
8947 }
8948 runtime.documents.set(targetDocument, count - 1);
8949 };
8950 }
8951 function registerStyle3(hash, css) {
8952 const runtime = getRuntime3();
8953 runtime.styles.set(hash, css);
8954 for (const targetDocument of runtime.documents.keys()) {
8955 injectStyle3(targetDocument, hash, css);
8956 }
8957 }
8958 if (typeof process === "undefined" || true) {
8959 registerStyle3("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}");
8960 }
8961 var resets_default = { "box-sizing": "_336cd3e4e743482f__box-sizing" };
8962 if (typeof process === "undefined" || true) {
8963 registerStyle3("19fcc06039", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._480b748dd3510e64__positioner{z-index:var(--wp-ui-tooltip-z-index,initial)}._50096b232db7709d__popup{--_wp-ui-elevation-sm:0 1px 2px rgba(0,0,0,.05),0 2px 3px rgba(0,0,0,.04),0 6px 6px rgba(0,0,0,.03),0 8px 8px rgba(0,0,0,.02);background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-elevation-sm);color:var(--wpds-color-foreground-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}}}}');
8964 }
8965 var style_default2 = { "positioner": "_480b748dd3510e64__positioner", "popup": "_50096b232db7709d__popup" };
8966 var Positioner = (0, import_element12.forwardRef)(
8967 function TooltipPositioner3({ align = "center", className, side = "top", sideOffset = 4, ...props }, ref) {
8968 return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
8969 index_parts_exports.Positioner,
8970 {
8971 ref,
8972 align,
8973 side,
8974 sideOffset,
8975 ...props,
8976 className: clsx_default(
8977 resets_default["box-sizing"],
8978 style_default2.positioner,
8979 className
8980 )
8981 }
8982 );
8983 }
8984 );
8985
8986 // packages/ui/build-module/utils/render-slot-with-children.mjs
8987 var import_element13 = __toESM(require_element(), 1);
8988 function renderSlotWithChildren(slot, defaultSlot, children) {
8989 return (0, import_element13.cloneElement)(slot ?? defaultSlot, { children });
8990 }
8991
8992 // packages/ui/build-module/utils/theme-provider.mjs
8993 var theme = __toESM(require_theme(), 1);
8994
8995 // packages/ui/build-module/lock-unlock.mjs
8996 var import_private_apis = __toESM(require_private_apis(), 1);
8997 var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(
8998 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
8999 "@wordpress/ui"
9000 );
9001
9002 // packages/ui/build-module/utils/theme-provider.mjs
9003 function getThemeProvider() {
9004 const themePackage = theme;
9005 if (themePackage.ThemeProvider) {
9006 return themePackage.ThemeProvider;
9007 }
9008 if (!themePackage.privateApis) {
9009 throw new Error(
9010 "@wordpress/ui: @wordpress/theme must expose `ThemeProvider` or `privateApis.ThemeProvider`."
9011 );
9012 }
9013 return unlock(
9014 themePackage.privateApis
9015 ).ThemeProvider;
9016 }
9017 var ThemeProvider = getThemeProvider();
9018
9019 // packages/ui/build-module/tooltip/popup.mjs
9020 var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1);
9021 var STYLE_HASH_ATTRIBUTE4 = "data-wp-hash";
9022 function getRuntime4() {
9023 const globalScope = globalThis;
9024 if (globalScope.__wpStyleRuntime) {
9025 return globalScope.__wpStyleRuntime;
9026 }
9027 globalScope.__wpStyleRuntime = {
9028 documents: /* @__PURE__ */ new Map(),
9029 styles: /* @__PURE__ */ new Map(),
9030 injectedStyles: /* @__PURE__ */ new WeakMap()
9031 };
9032 if (typeof document !== "undefined") {
9033 registerDocument4(document);
9034 }
9035 return globalScope.__wpStyleRuntime;
9036 }
9037 function documentContainsStyleHash4(targetDocument, hash) {
9038 if (!targetDocument.head) {
9039 return false;
9040 }
9041 for (const style of targetDocument.head.querySelectorAll(
9042 `style[${STYLE_HASH_ATTRIBUTE4}]`
9043 )) {
9044 if (style.getAttribute(STYLE_HASH_ATTRIBUTE4) === hash) {
9045 return true;
9046 }
9047 }
9048 return false;
9049 }
9050 function injectStyle4(targetDocument, hash, css) {
9051 if (!targetDocument.head) {
9052 return;
9053 }
9054 const runtime = getRuntime4();
9055 let injectedStyles = runtime.injectedStyles.get(targetDocument);
9056 if (!injectedStyles) {
9057 injectedStyles = /* @__PURE__ */ new Set();
9058 runtime.injectedStyles.set(targetDocument, injectedStyles);
9059 }
9060 if (injectedStyles.has(hash)) {
9061 return;
9062 }
9063 if (documentContainsStyleHash4(targetDocument, hash)) {
9064 injectedStyles.add(hash);
9065 return;
9066 }
9067 const style = targetDocument.createElement("style");
9068 style.setAttribute(STYLE_HASH_ATTRIBUTE4, hash);
9069 style.appendChild(targetDocument.createTextNode(css));
9070 targetDocument.head.appendChild(style);
9071 injectedStyles.add(hash);
9072 }
9073 function registerDocument4(targetDocument) {
9074 const runtime = getRuntime4();
9075 runtime.documents.set(
9076 targetDocument,
9077 (runtime.documents.get(targetDocument) ?? 0) + 1
9078 );
9079 for (const [hash, css] of runtime.styles) {
9080 injectStyle4(targetDocument, hash, css);
9081 }
9082 return () => {
9083 const count = runtime.documents.get(targetDocument);
9084 if (count === void 0) {
9085 return;
9086 }
9087 if (count <= 1) {
9088 runtime.documents.delete(targetDocument);
9089 return;
9090 }
9091 runtime.documents.set(targetDocument, count - 1);
9092 };
9093 }
9094 function registerStyle4(hash, css) {
9095 const runtime = getRuntime4();
9096 runtime.styles.set(hash, css);
9097 for (const targetDocument of runtime.documents.keys()) {
9098 injectStyle4(targetDocument, hash, css);
9099 }
9100 }
9101 if (typeof process === "undefined" || true) {
9102 registerStyle4("19fcc06039", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._480b748dd3510e64__positioner{z-index:var(--wp-ui-tooltip-z-index,initial)}._50096b232db7709d__popup{--_wp-ui-elevation-sm:0 1px 2px rgba(0,0,0,.05),0 2px 3px rgba(0,0,0,.04),0 6px 6px rgba(0,0,0,.03),0 8px 8px rgba(0,0,0,.02);background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-elevation-sm);color:var(--wpds-color-foreground-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}}}}');
9103 }
9104 var style_default3 = { "positioner": "_480b748dd3510e64__positioner", "popup": "_50096b232db7709d__popup" };
9105 var POPUP_COLOR = { background: "#1e1e1e" };
9106 var Popup = (0, import_element14.forwardRef)(function TooltipPopup3({ portal, positioner, children, className, ...props }, ref) {
9107 const popupContent = /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ThemeProvider, { color: POPUP_COLOR, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
9108 index_parts_exports.Popup,
9109 {
9110 ref,
9111 className: clsx_default(style_default3.popup, className),
9112 ...props,
9113 children
9114 }
9115 ) });
9116 const positionedPopup = renderSlotWithChildren(
9117 positioner,
9118 /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Positioner, {}),
9119 popupContent
9120 );
9121 return renderSlotWithChildren(portal, /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Portal, {}), positionedPopup);
9122 });
9123
9124 // packages/ui/build-module/tooltip/trigger.mjs
9125 var import_element15 = __toESM(require_element(), 1);
9126 var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1);
9127 var Trigger = (0, import_element15.forwardRef)(
9128 function TooltipTrigger3(props, ref) {
9129 return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(index_parts_exports.Trigger, { ref, ...props });
9130 }
9131 );
9132
9133 // packages/ui/build-module/utils/direction-provider.mjs
9134 var import_i18n = __toESM(require_i18n(), 1);
9135 var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1);
9136 function DirectionProvider3({ children }) {
9137 return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(DirectionProvider, { direction: (0, import_i18n.isRTL)() ? "rtl" : "ltr", children });
9138 }
9139
9140 // packages/ui/build-module/tooltip/root.mjs
9141 var import_jsx_runtime17 = __toESM(require_jsx_runtime(), 1);
9142 function Root(props) {
9143 return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(DirectionProvider3, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(index_parts_exports.Root, { ...props }) });
9144 }
9145
9146 // packages/ui/build-module/tooltip/provider.mjs
9147 var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1);
9148 function Provider({ ...props }) {
9149 return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(index_parts_exports.Provider, { ...props });
9150 }
9151
9152 // packages/ui/build-module/link/link.mjs
9153 var import_element16 = __toESM(require_element(), 1);
9154 var import_i18n2 = __toESM(require_i18n(), 1);
9155 var import_jsx_runtime19 = __toESM(require_jsx_runtime(), 1);
9156 var STYLE_HASH_ATTRIBUTE5 = "data-wp-hash";
9157 function getRuntime5() {
9158 const globalScope = globalThis;
9159 if (globalScope.__wpStyleRuntime) {
9160 return globalScope.__wpStyleRuntime;
9161 }
9162 globalScope.__wpStyleRuntime = {
9163 documents: /* @__PURE__ */ new Map(),
9164 styles: /* @__PURE__ */ new Map(),
9165 injectedStyles: /* @__PURE__ */ new WeakMap()
9166 };
9167 if (typeof document !== "undefined") {
9168 registerDocument5(document);
9169 }
9170 return globalScope.__wpStyleRuntime;
9171 }
9172 function documentContainsStyleHash5(targetDocument, hash) {
9173 if (!targetDocument.head) {
9174 return false;
9175 }
9176 for (const style of targetDocument.head.querySelectorAll(
9177 `style[${STYLE_HASH_ATTRIBUTE5}]`
9178 )) {
9179 if (style.getAttribute(STYLE_HASH_ATTRIBUTE5) === hash) {
9180 return true;
9181 }
9182 }
9183 return false;
9184 }
9185 function injectStyle5(targetDocument, hash, css) {
9186 if (!targetDocument.head) {
9187 return;
9188 }
9189 const runtime = getRuntime5();
9190 let injectedStyles = runtime.injectedStyles.get(targetDocument);
9191 if (!injectedStyles) {
9192 injectedStyles = /* @__PURE__ */ new Set();
9193 runtime.injectedStyles.set(targetDocument, injectedStyles);
9194 }
9195 if (injectedStyles.has(hash)) {
9196 return;
9197 }
9198 if (documentContainsStyleHash5(targetDocument, hash)) {
9199 injectedStyles.add(hash);
9200 return;
9201 }
9202 const style = targetDocument.createElement("style");
9203 style.setAttribute(STYLE_HASH_ATTRIBUTE5, hash);
9204 style.appendChild(targetDocument.createTextNode(css));
9205 targetDocument.head.appendChild(style);
9206 injectedStyles.add(hash);
9207 }
9208 function registerDocument5(targetDocument) {
9209 const runtime = getRuntime5();
9210 runtime.documents.set(
9211 targetDocument,
9212 (runtime.documents.get(targetDocument) ?? 0) + 1
9213 );
9214 for (const [hash, css] of runtime.styles) {
9215 injectStyle5(targetDocument, hash, css);
9216 }
9217 return () => {
9218 const count = runtime.documents.get(targetDocument);
9219 if (count === void 0) {
9220 return;
9221 }
9222 if (count <= 1) {
9223 runtime.documents.delete(targetDocument);
9224 return;
9225 }
9226 runtime.documents.set(targetDocument, count - 1);
9227 };
9228 }
9229 function registerStyle5(hash, css) {
9230 const runtime = getRuntime5();
9231 runtime.styles.set(hash, css);
9232 for (const targetDocument of runtime.documents.keys()) {
9233 injectStyle5(targetDocument, hash, css);
9234 }
9235 }
9236 if (typeof process === "undefined" || true) {
9237 registerStyle5("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}");
9238 }
9239 var resets_default2 = { "box-sizing": "_336cd3e4e743482f__box-sizing" };
9240 if (typeof process === "undefined" || true) {
9241 registerStyle5("08122b3d53", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{.af79fb116edb0dd7__outset-ring--focus:focus,.dfcfdc28396e5d98__outset-ring--focus-visible:focus-visible,.e5cd9ee879f6403a__outset-ring--focus-within:focus-within,:focus-visible ._81935a08e952f267__outset-ring--focus-parent-visible{--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}._3c9f5ee9fc9c136d__outset-ring--focus-within-except-active:focus-within,.abc777e9713fa711__outset-ring--focus-except-active:focus{outline:none}._3c9f5ee9fc9c136d__outset-ring--focus-within-except-active:focus-within:not(:has(:active)),.abc777e9713fa711__outset-ring--focus-except-active:focus:not(:active){--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}}}");
9242 }
9243 var focus_module_default = { "outset-ring--focus": "af79fb116edb0dd7__outset-ring--focus", "outset-ring--focus-visible": "dfcfdc28396e5d98__outset-ring--focus-visible", "outset-ring--focus-within": "e5cd9ee879f6403a__outset-ring--focus-within", "outset-ring--focus-parent-visible": "_81935a08e952f267__outset-ring--focus-parent-visible", "outset-ring--focus-except-active": "abc777e9713fa711__outset-ring--focus-except-active", "outset-ring--focus-within-except-active": "_3c9f5ee9fc9c136d__outset-ring--focus-within-except-active" };
9244 if (typeof process === "undefined" || true) {
9245 registerStyle5("e8e6a9be37", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.d4250949359b05ce__link{text-decoration-thickness:from-font;text-underline-offset:.2em}.c6055659b8e2cd2c__is-brand,.c6055659b8e2cd2c__is-brand:visited{--_gcd-a-color:var(--wpds-color-foreground-interactive-brand,var(--wp-admin-theme-color,#3858e9));color:var(--wpds-color-foreground-interactive-brand,var(--wp-admin-theme-color,#3858e9))}.c6055659b8e2cd2c__is-brand:active,.c6055659b8e2cd2c__is-brand:hover{--_gcd-a-color:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000));color:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000))}._92e0dfcaeee15b88__is-neutral,._92e0dfcaeee15b88__is-neutral:visited{--_gcd-a-color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);text-decoration-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d)}._92e0dfcaeee15b88__is-neutral:active,._92e0dfcaeee15b88__is-neutral:hover{--_gcd-a-color:var(--wpds-color-foreground-interactive-neutral-active,#1e1e1e);color:var(--wpds-color-foreground-interactive-neutral-active,#1e1e1e)}.cf122a9bf1035d42__is-unstyled{--_gcd-a-color:inherit;color:inherit;text-decoration:none}._0cb411afac4c86c7__link-icon{display:inline-block;font-weight:var(--wpds-typography-font-weight-default,400);line-height:1;margin-inline-start:var(--wpds-dimension-padding-xs,4px);text-decoration:none}._0cb411afac4c86c7__link-icon:after{content:"\\2197"}._0cb411afac4c86c7__link-icon:dir(rtl):after{content:"\\2196"}}}');
9246 }
9247 var style_default4 = { "link": "d4250949359b05ce__link", "is-brand": "c6055659b8e2cd2c__is-brand", "is-neutral": "_92e0dfcaeee15b88__is-neutral", "is-unstyled": "cf122a9bf1035d42__is-unstyled", "link-icon": "_0cb411afac4c86c7__link-icon" };
9248 if (typeof process === "undefined" || true) {
9249 registerStyle5("e8e31009f5", "._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);&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-weak,#707070))}&: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-foreground-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-foreground-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-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-emphasis,600));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)}.c59a0ebebd71fa4a__ol{list-style:var(--_gcd-ol-list-style,none);margin:var(--_gcd-ol-margin,0);padding-block:var(--_gcd-ol-padding-block,0);padding-inline:var(--_gcd-ol-padding-inline,0)}._46b5cb0c8e24e8c9__li{margin:var(--_gcd-li-margin,0)}");
9250 }
9251 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", "ol": "c59a0ebebd71fa4a__ol", "li": "_46b5cb0c8e24e8c9__li" };
9252 var Link = (0, import_element16.forwardRef)(function Link2({
9253 children,
9254 variant = "default",
9255 tone = "brand",
9256 openInNewTab = false,
9257 target,
9258 render,
9259 className,
9260 ...props
9261 }, ref) {
9262 const shouldShowNewTabIndicator = openInNewTab || /^_blank$/i.test(target ?? "");
9263 const element = useRender({
9264 render,
9265 defaultTagName: "a",
9266 ref,
9267 props: mergeProps(props, {
9268 className: clsx_default(
9269 global_css_defense_default2.a,
9270 resets_default2["box-sizing"],
9271 focus_module_default["outset-ring--focus-except-active"],
9272 variant !== "unstyled" && style_default4.link,
9273 variant !== "unstyled" && style_default4[`is-${tone}`],
9274 variant === "unstyled" && style_default4["is-unstyled"],
9275 className
9276 ),
9277 target: target ?? (openInNewTab ? "_blank" : void 0),
9278 children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_jsx_runtime19.Fragment, { children: [
9279 children,
9280 shouldShowNewTabIndicator && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
9281 "span",
9282 {
9283 className: style_default4["link-icon"],
9284 role: "img",
9285 "aria-label": (
9286 /* translators: accessibility text appended to link text */
9287 (0, import_i18n2.__)("(opens in a new tab)")
9288 )
9289 }
9290 )
9291 ] })
9292 })
9293 });
9294 return element;
9295 });
9296
9297 // packages/icons/build-module/library/caution.mjs
9298 var import_primitives = __toESM(require_primitives(), 1);
9299 var import_jsx_runtime20 = __toESM(require_jsx_runtime(), 1);
9300 var caution_default = /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives.Path, { d: "M12 8L12 13M12 14.5L12 16M4.75 12C4.75 7.99593 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12Z", strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" }) });
9301
9302 // packages/icons/build-module/library/check.mjs
9303 var import_primitives2 = __toESM(require_primitives(), 1);
9304 var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1);
9305 var check_default = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives2.Path, { d: "M7 12L10 15L17 8", vectorEffect: "non-scaling-stroke" }) });
9306
9307 // packages/icons/build-module/library/chevron-down-small.mjs
9308 var import_primitives3 = __toESM(require_primitives(), 1);
9309 var import_jsx_runtime22 = __toESM(require_jsx_runtime(), 1);
9310 var chevron_down_small_default = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives3.Path, { d: "M8.5 10.5L12 13.5L15.5 10.5", vectorEffect: "non-scaling-stroke" }) });
9311
9312 // packages/icons/build-module/library/chevron-left-small.mjs
9313 var import_primitives4 = __toESM(require_primitives(), 1);
9314 var import_jsx_runtime23 = __toESM(require_jsx_runtime(), 1);
9315 var chevron_left_small_default = /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives4.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives4.Path, { d: "M13.5 8.5L10.5 12L13.5 15.5", vectorEffect: "non-scaling-stroke" }) });
9316
9317 // packages/icons/build-module/library/chevron-left.mjs
9318 var import_primitives5 = __toESM(require_primitives(), 1);
9319 var import_jsx_runtime24 = __toESM(require_jsx_runtime(), 1);
9320 var chevron_left_default = /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_primitives5.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_primitives5.Path, { d: "M14 6.5L9 12L14 17.5", vectorEffect: "non-scaling-stroke" }) });
9321
9322 // packages/icons/build-module/library/chevron-right-small.mjs
9323 var import_primitives6 = __toESM(require_primitives(), 1);
9324 var import_jsx_runtime25 = __toESM(require_jsx_runtime(), 1);
9325 var chevron_right_small_default = /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_primitives6.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_primitives6.Path, { d: "M10.5 8.5L13.5 12L10.5 15.5", vectorEffect: "non-scaling-stroke" }) });
9326
9327 // packages/icons/build-module/library/chevron-right.mjs
9328 var import_primitives7 = __toESM(require_primitives(), 1);
9329 var import_jsx_runtime26 = __toESM(require_jsx_runtime(), 1);
9330 var chevron_right_default = /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_primitives7.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_primitives7.Path, { d: "M10 6.5L15 12L10 17.5", vectorEffect: "non-scaling-stroke" }) });
9331
9332 // packages/icons/build-module/library/menu.mjs
9333 var import_primitives8 = __toESM(require_primitives(), 1);
9334 var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1);
9335 var menu_default = /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_primitives8.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_primitives8.Path, { d: "M5 12H19M5 18.25H19M5 5.75H19", vectorEffect: "non-scaling-stroke" }) });
9336
9337 // packages/ui/build-module/icon/icon.mjs
9338 var import_element17 = __toESM(require_element(), 1);
9339 var import_primitives9 = __toESM(require_primitives(), 1);
9340 var import_jsx_runtime28 = __toESM(require_jsx_runtime(), 1);
9341 var Icon = (0, import_element17.forwardRef)(function Icon2({ icon, size: size4 = 24, style, ...restProps }, ref) {
9342 const mergedStyle = icon.props.style || style ? { ...icon.props.style, ...style } : void 0;
9343 return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
9344 import_primitives9.SVG,
9345 {
9346 ref,
9347 ...icon.props,
9348 ...restProps,
9349 ...mergedStyle ? { style: mergedStyle } : {},
9350 width: size4,
9351 height: size4
9352 }
9353 );
9354 });
9355
9356 // packages/ui/build-module/utils/keyboard-shortcut.mjs
9357 var import_element19 = __toESM(require_element(), 1);
9358 var import_i18n3 = __toESM(require_i18n(), 1);
9359
9360 // packages/ui/build-module/visually-hidden/visually-hidden.mjs
9361 var import_element18 = __toESM(require_element(), 1);
9362 var STYLE_HASH_ATTRIBUTE6 = "data-wp-hash";
9363 function getRuntime6() {
9364 const globalScope = globalThis;
9365 if (globalScope.__wpStyleRuntime) {
9366 return globalScope.__wpStyleRuntime;
9367 }
9368 globalScope.__wpStyleRuntime = {
9369 documents: /* @__PURE__ */ new Map(),
9370 styles: /* @__PURE__ */ new Map(),
9371 injectedStyles: /* @__PURE__ */ new WeakMap()
9372 };
9373 if (typeof document !== "undefined") {
9374 registerDocument6(document);
9375 }
9376 return globalScope.__wpStyleRuntime;
9377 }
9378 function documentContainsStyleHash6(targetDocument, hash) {
9379 if (!targetDocument.head) {
9380 return false;
9381 }
9382 for (const style of targetDocument.head.querySelectorAll(
9383 `style[${STYLE_HASH_ATTRIBUTE6}]`
9384 )) {
9385 if (style.getAttribute(STYLE_HASH_ATTRIBUTE6) === hash) {
9386 return true;
9387 }
9388 }
9389 return false;
9390 }
9391 function injectStyle6(targetDocument, hash, css) {
9392 if (!targetDocument.head) {
9393 return;
9394 }
9395 const runtime = getRuntime6();
9396 let injectedStyles = runtime.injectedStyles.get(targetDocument);
9397 if (!injectedStyles) {
9398 injectedStyles = /* @__PURE__ */ new Set();
9399 runtime.injectedStyles.set(targetDocument, injectedStyles);
9400 }
9401 if (injectedStyles.has(hash)) {
9402 return;
9403 }
9404 if (documentContainsStyleHash6(targetDocument, hash)) {
9405 injectedStyles.add(hash);
9406 return;
9407 }
9408 const style = targetDocument.createElement("style");
9409 style.setAttribute(STYLE_HASH_ATTRIBUTE6, hash);
9410 style.appendChild(targetDocument.createTextNode(css));
9411 targetDocument.head.appendChild(style);
9412 injectedStyles.add(hash);
9413 }
9414 function registerDocument6(targetDocument) {
9415 const runtime = getRuntime6();
9416 runtime.documents.set(
9417 targetDocument,
9418 (runtime.documents.get(targetDocument) ?? 0) + 1
9419 );
9420 for (const [hash, css] of runtime.styles) {
9421 injectStyle6(targetDocument, hash, css);
9422 }
9423 return () => {
9424 const count = runtime.documents.get(targetDocument);
9425 if (count === void 0) {
9426 return;
9427 }
9428 if (count <= 1) {
9429 runtime.documents.delete(targetDocument);
9430 return;
9431 }
9432 runtime.documents.set(targetDocument, count - 1);
9433 };
9434 }
9435 function registerStyle6(hash, css) {
9436 const runtime = getRuntime6();
9437 runtime.styles.set(hash, css);
9438 for (const targetDocument of runtime.documents.keys()) {
9439 injectStyle6(targetDocument, hash, css);
9440 }
9441 }
9442 if (typeof process === "undefined" || true) {
9443 registerStyle6("f4df7461e9", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.f37b9e2e191ebd66__visually-hidden{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;overflow-wrap:normal;padding:0;position:absolute;width:1px;word-break:normal}}}");
9444 }
9445 var style_default5 = { "visually-hidden": "f37b9e2e191ebd66__visually-hidden" };
9446 var VisuallyHidden = (0, import_element18.forwardRef)(
9447 function VisuallyHidden2({ render, ...restProps }, ref) {
9448 const element = useRender({
9449 render,
9450 ref,
9451 props: mergeProps(
9452 { className: style_default5["visually-hidden"] },
9453 restProps,
9454 {
9455 // @ts-expect-error Arbitrary data-* attributes aren't indexable on the typed div props. Kept hardcoded so consumers can't change or remove it.
9456 "data-visually-hidden": ""
9457 }
9458 )
9459 });
9460 return element;
9461 }
9462 );
9463
9464 // packages/ui/build-module/utils/keyboard-shortcut.mjs
9465 var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1);
9466 function useKeyboardShortcutProps({
9467 "aria-describedby": ariaDescribedBy,
9468 "aria-keyshortcuts": ariaKeyShortcuts,
9469 shortcut
9470 }) {
9471 const generatedDescriptionId = (0, import_element19.useId)();
9472 const descriptionId = shortcut ? generatedDescriptionId : void 0;
9473 const describedBy = [ariaDescribedBy, descriptionId].filter(Boolean).join(" ");
9474 return {
9475 descriptionId,
9476 targetProps: {
9477 "aria-describedby": describedBy || void 0,
9478 "aria-keyshortcuts": shortcut?.ariaKeyShortcut ?? ariaKeyShortcuts
9479 }
9480 };
9481 }
9482 var KeyboardShortcutDescription = (0, import_element19.forwardRef)(function KeyboardShortcutDescription2({ descriptionId, shortcut }, ref) {
9483 return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
9484 VisuallyHidden,
9485 {
9486 id: descriptionId,
9487 "aria-hidden": "true",
9488 render: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { ref }),
9489 children: (0, import_i18n3.sprintf)(
9490 /* translators: %s: keyboard shortcut. */
9491 (0, import_i18n3.__)("Keyboard shortcut: %s"),
9492 shortcut.label ?? shortcut.ariaKeyShortcut
9493 )
9494 }
9495 );
9496 });
9497 var KeyboardShortcutDisplay = (0, import_element19.forwardRef)(function KeyboardShortcutDisplay2({ className, shortcut }, ref) {
9498 return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { ref, "aria-hidden": "true", className, dir: "ltr", children: shortcut.displayShortcut });
9499 });
9500
9501 // packages/ui/build-module/stack/stack.mjs
9502 var import_element20 = __toESM(require_element(), 1);
9503 var STYLE_HASH_ATTRIBUTE7 = "data-wp-hash";
9504 function getRuntime7() {
9505 const globalScope = globalThis;
9506 if (globalScope.__wpStyleRuntime) {
9507 return globalScope.__wpStyleRuntime;
9508 }
9509 globalScope.__wpStyleRuntime = {
9510 documents: /* @__PURE__ */ new Map(),
9511 styles: /* @__PURE__ */ new Map(),
9512 injectedStyles: /* @__PURE__ */ new WeakMap()
9513 };
9514 if (typeof document !== "undefined") {
9515 registerDocument7(document);
9516 }
9517 return globalScope.__wpStyleRuntime;
9518 }
9519 function documentContainsStyleHash7(targetDocument, hash) {
9520 if (!targetDocument.head) {
9521 return false;
9522 }
9523 for (const style of targetDocument.head.querySelectorAll(
9524 `style[${STYLE_HASH_ATTRIBUTE7}]`
9525 )) {
9526 if (style.getAttribute(STYLE_HASH_ATTRIBUTE7) === hash) {
9527 return true;
9528 }
9529 }
9530 return false;
9531 }
9532 function injectStyle7(targetDocument, hash, css) {
9533 if (!targetDocument.head) {
9534 return;
9535 }
9536 const runtime = getRuntime7();
9537 let injectedStyles = runtime.injectedStyles.get(targetDocument);
9538 if (!injectedStyles) {
9539 injectedStyles = /* @__PURE__ */ new Set();
9540 runtime.injectedStyles.set(targetDocument, injectedStyles);
9541 }
9542 if (injectedStyles.has(hash)) {
9543 return;
9544 }
9545 if (documentContainsStyleHash7(targetDocument, hash)) {
9546 injectedStyles.add(hash);
9547 return;
9548 }
9549 const style = targetDocument.createElement("style");
9550 style.setAttribute(STYLE_HASH_ATTRIBUTE7, hash);
9551 style.appendChild(targetDocument.createTextNode(css));
9552 targetDocument.head.appendChild(style);
9553 injectedStyles.add(hash);
9554 }
9555 function registerDocument7(targetDocument) {
9556 const runtime = getRuntime7();
9557 runtime.documents.set(
9558 targetDocument,
9559 (runtime.documents.get(targetDocument) ?? 0) + 1
9560 );
9561 for (const [hash, css] of runtime.styles) {
9562 injectStyle7(targetDocument, hash, css);
9563 }
9564 return () => {
9565 const count = runtime.documents.get(targetDocument);
9566 if (count === void 0) {
9567 return;
9568 }
9569 if (count <= 1) {
9570 runtime.documents.delete(targetDocument);
9571 return;
9572 }
9573 runtime.documents.set(targetDocument, count - 1);
9574 };
9575 }
9576 function registerStyle7(hash, css) {
9577 const runtime = getRuntime7();
9578 runtime.styles.set(hash, css);
9579 for (const targetDocument of runtime.documents.keys()) {
9580 injectStyle7(targetDocument, hash, css);
9581 }
9582 }
9583 if (typeof process === "undefined" || true) {
9584 registerStyle7("32aba35fe1", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._19ce0419607e1896__stack{display:flex}}}");
9585 }
9586 var style_default6 = { "stack": "_19ce0419607e1896__stack" };
9587 var gapTokens = {
9588 xs: "var(--wpds-dimension-gap-xs, 4px)",
9589 sm: "var(--wpds-dimension-gap-sm, 8px)",
9590 md: "var(--wpds-dimension-gap-md, 12px)",
9591 lg: "var(--wpds-dimension-gap-lg, 16px)",
9592 xl: "var(--wpds-dimension-gap-xl, 24px)",
9593 "2xl": "var(--wpds-dimension-gap-2xl, 32px)",
9594 "3xl": "var(--wpds-dimension-gap-3xl, 40px)"
9595 };
9596 var Stack = (0, import_element20.forwardRef)(function Stack2({ direction, gap, align, justify, wrap, render, ...props }, ref) {
9597 const style = {
9598 gap: gap && gapTokens[gap],
9599 alignItems: align,
9600 justifyContent: justify,
9601 flexDirection: direction,
9602 flexWrap: wrap
9603 };
9604 const element = useRender({
9605 render,
9606 ref,
9607 props: mergeProps(props, { style, className: style_default6.stack })
9608 });
9609 return element;
9610 });
9611
9612 // packages/ui/build-module/empty-state/index.mjs
9613 var empty_state_exports = {};
9614 __export(empty_state_exports, {
9615 Actions: () => Actions,
9616 Description: () => Description,
9617 Icon: () => Icon3,
9618 Root: () => Root2,
9619 Title: () => Title,
9620 Visual: () => Visual
9621 });
9622
9623 // packages/ui/build-module/empty-state/root.mjs
9624 var import_element21 = __toESM(require_element(), 1);
9625 var STYLE_HASH_ATTRIBUTE8 = "data-wp-hash";
9626 function getRuntime8() {
9627 const globalScope = globalThis;
9628 if (globalScope.__wpStyleRuntime) {
9629 return globalScope.__wpStyleRuntime;
9630 }
9631 globalScope.__wpStyleRuntime = {
9632 documents: /* @__PURE__ */ new Map(),
9633 styles: /* @__PURE__ */ new Map(),
9634 injectedStyles: /* @__PURE__ */ new WeakMap()
9635 };
9636 if (typeof document !== "undefined") {
9637 registerDocument8(document);
9638 }
9639 return globalScope.__wpStyleRuntime;
9640 }
9641 function documentContainsStyleHash8(targetDocument, hash) {
9642 if (!targetDocument.head) {
9643 return false;
9644 }
9645 for (const style of targetDocument.head.querySelectorAll(
9646 `style[${STYLE_HASH_ATTRIBUTE8}]`
9647 )) {
9648 if (style.getAttribute(STYLE_HASH_ATTRIBUTE8) === hash) {
9649 return true;
9650 }
9651 }
9652 return false;
9653 }
9654 function injectStyle8(targetDocument, hash, css) {
9655 if (!targetDocument.head) {
9656 return;
9657 }
9658 const runtime = getRuntime8();
9659 let injectedStyles = runtime.injectedStyles.get(targetDocument);
9660 if (!injectedStyles) {
9661 injectedStyles = /* @__PURE__ */ new Set();
9662 runtime.injectedStyles.set(targetDocument, injectedStyles);
9663 }
9664 if (injectedStyles.has(hash)) {
9665 return;
9666 }
9667 if (documentContainsStyleHash8(targetDocument, hash)) {
9668 injectedStyles.add(hash);
9669 return;
9670 }
9671 const style = targetDocument.createElement("style");
9672 style.setAttribute(STYLE_HASH_ATTRIBUTE8, hash);
9673 style.appendChild(targetDocument.createTextNode(css));
9674 targetDocument.head.appendChild(style);
9675 injectedStyles.add(hash);
9676 }
9677 function registerDocument8(targetDocument) {
9678 const runtime = getRuntime8();
9679 runtime.documents.set(
9680 targetDocument,
9681 (runtime.documents.get(targetDocument) ?? 0) + 1
9682 );
9683 for (const [hash, css] of runtime.styles) {
9684 injectStyle8(targetDocument, hash, css);
9685 }
9686 return () => {
9687 const count = runtime.documents.get(targetDocument);
9688 if (count === void 0) {
9689 return;
9690 }
9691 if (count <= 1) {
9692 runtime.documents.delete(targetDocument);
9693 return;
9694 }
9695 runtime.documents.set(targetDocument, count - 1);
9696 };
9697 }
9698 function registerStyle8(hash, css) {
9699 const runtime = getRuntime8();
9700 runtime.styles.set(hash, css);
9701 for (const targetDocument of runtime.documents.keys()) {
9702 injectStyle8(targetDocument, hash, css);
9703 }
9704 }
9705 if (typeof process === "undefined" || true) {
9706 registerStyle8("d29c51197e", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.a23e08e65c8e62e5__root{text-wrap:balance;align-items:center;color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-direction:column;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);gap:var(--wpds-dimension-gap-xs,4px);max-width:var(--wpds-dimension-surface-width-sm,320px);text-align:center}._01303b3680eaa216__visual{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;justify-content:center;line-height:1;margin-block-end:var(--wpds-dimension-gap-xs,4px)}._58c8e351db225608__icon{background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);border:1px solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);border-radius:50%;padding:var(--wpds-dimension-padding-xs,4px)}.b8b96f70820333a1__title{margin:0}._70f1dd22bad55b18__description{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin:0}._89ac025fd8e2bc52__actions{align-items:center;display:flex;flex-direction:column;gap:var(--wpds-dimension-gap-xs,4px);margin-block-start:var(--wpds-dimension-gap-md,12px);@media (min-width:480px){flex-direction:row;justify-content:center}}}@layer compositions{._70f1dd22bad55b18__description,.b8b96f70820333a1__title{text-wrap:balance}}}');
9707 }
9708 var style_default7 = { "root": "a23e08e65c8e62e5__root", "visual": "_01303b3680eaa216__visual", "icon": "_58c8e351db225608__icon", "title": "b8b96f70820333a1__title", "description": "_70f1dd22bad55b18__description", "actions": "_89ac025fd8e2bc52__actions" };
9709 var Root2 = (0, import_element21.forwardRef)(
9710 function EmptyStateRoot({ render, ...props }, ref) {
9711 const className = clsx_default(style_default7.root);
9712 const element = useRender({
9713 defaultTagName: "div",
9714 render,
9715 ref,
9716 props: mergeProps({ className }, props)
9717 });
9718 return element;
9719 }
9720 );
9721
9722 // packages/ui/build-module/empty-state/visual.mjs
9723 var import_element22 = __toESM(require_element(), 1);
9724 var STYLE_HASH_ATTRIBUTE9 = "data-wp-hash";
9725 function getRuntime9() {
9726 const globalScope = globalThis;
9727 if (globalScope.__wpStyleRuntime) {
9728 return globalScope.__wpStyleRuntime;
9729 }
9730 globalScope.__wpStyleRuntime = {
9731 documents: /* @__PURE__ */ new Map(),
9732 styles: /* @__PURE__ */ new Map(),
9733 injectedStyles: /* @__PURE__ */ new WeakMap()
9734 };
9735 if (typeof document !== "undefined") {
9736 registerDocument9(document);
9737 }
9738 return globalScope.__wpStyleRuntime;
9739 }
9740 function documentContainsStyleHash9(targetDocument, hash) {
9741 if (!targetDocument.head) {
9742 return false;
9743 }
9744 for (const style of targetDocument.head.querySelectorAll(
9745 `style[${STYLE_HASH_ATTRIBUTE9}]`
9746 )) {
9747 if (style.getAttribute(STYLE_HASH_ATTRIBUTE9) === hash) {
9748 return true;
9749 }
9750 }
9751 return false;
9752 }
9753 function injectStyle9(targetDocument, hash, css) {
9754 if (!targetDocument.head) {
9755 return;
9756 }
9757 const runtime = getRuntime9();
9758 let injectedStyles = runtime.injectedStyles.get(targetDocument);
9759 if (!injectedStyles) {
9760 injectedStyles = /* @__PURE__ */ new Set();
9761 runtime.injectedStyles.set(targetDocument, injectedStyles);
9762 }
9763 if (injectedStyles.has(hash)) {
9764 return;
9765 }
9766 if (documentContainsStyleHash9(targetDocument, hash)) {
9767 injectedStyles.add(hash);
9768 return;
9769 }
9770 const style = targetDocument.createElement("style");
9771 style.setAttribute(STYLE_HASH_ATTRIBUTE9, hash);
9772 style.appendChild(targetDocument.createTextNode(css));
9773 targetDocument.head.appendChild(style);
9774 injectedStyles.add(hash);
9775 }
9776 function registerDocument9(targetDocument) {
9777 const runtime = getRuntime9();
9778 runtime.documents.set(
9779 targetDocument,
9780 (runtime.documents.get(targetDocument) ?? 0) + 1
9781 );
9782 for (const [hash, css] of runtime.styles) {
9783 injectStyle9(targetDocument, hash, css);
9784 }
9785 return () => {
9786 const count = runtime.documents.get(targetDocument);
9787 if (count === void 0) {
9788 return;
9789 }
9790 if (count <= 1) {
9791 runtime.documents.delete(targetDocument);
9792 return;
9793 }
9794 runtime.documents.set(targetDocument, count - 1);
9795 };
9796 }
9797 function registerStyle9(hash, css) {
9798 const runtime = getRuntime9();
9799 runtime.styles.set(hash, css);
9800 for (const targetDocument of runtime.documents.keys()) {
9801 injectStyle9(targetDocument, hash, css);
9802 }
9803 }
9804 if (typeof process === "undefined" || true) {
9805 registerStyle9("d29c51197e", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.a23e08e65c8e62e5__root{text-wrap:balance;align-items:center;color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-direction:column;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);gap:var(--wpds-dimension-gap-xs,4px);max-width:var(--wpds-dimension-surface-width-sm,320px);text-align:center}._01303b3680eaa216__visual{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;justify-content:center;line-height:1;margin-block-end:var(--wpds-dimension-gap-xs,4px)}._58c8e351db225608__icon{background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);border:1px solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);border-radius:50%;padding:var(--wpds-dimension-padding-xs,4px)}.b8b96f70820333a1__title{margin:0}._70f1dd22bad55b18__description{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin:0}._89ac025fd8e2bc52__actions{align-items:center;display:flex;flex-direction:column;gap:var(--wpds-dimension-gap-xs,4px);margin-block-start:var(--wpds-dimension-gap-md,12px);@media (min-width:480px){flex-direction:row;justify-content:center}}}@layer compositions{._70f1dd22bad55b18__description,.b8b96f70820333a1__title{text-wrap:balance}}}');
9806 }
9807 var style_default8 = { "root": "a23e08e65c8e62e5__root", "visual": "_01303b3680eaa216__visual", "icon": "_58c8e351db225608__icon", "title": "b8b96f70820333a1__title", "description": "_70f1dd22bad55b18__description", "actions": "_89ac025fd8e2bc52__actions" };
9808 var Visual = (0, import_element22.forwardRef)(
9809 function EmptyStateVisual({ render, ...props }, ref) {
9810 const className = clsx_default(style_default8.visual);
9811 const element = useRender({
9812 defaultTagName: "div",
9813 render,
9814 ref,
9815 props: mergeProps({ className }, props)
9816 });
9817 return element;
9818 }
9819 );
9820
9821 // packages/ui/build-module/empty-state/icon.mjs
9822 var import_element23 = __toESM(require_element(), 1);
9823 var import_jsx_runtime30 = __toESM(require_jsx_runtime(), 1);
9824 var STYLE_HASH_ATTRIBUTE10 = "data-wp-hash";
9825 function getRuntime10() {
9826 const globalScope = globalThis;
9827 if (globalScope.__wpStyleRuntime) {
9828 return globalScope.__wpStyleRuntime;
9829 }
9830 globalScope.__wpStyleRuntime = {
9831 documents: /* @__PURE__ */ new Map(),
9832 styles: /* @__PURE__ */ new Map(),
9833 injectedStyles: /* @__PURE__ */ new WeakMap()
9834 };
9835 if (typeof document !== "undefined") {
9836 registerDocument10(document);
9837 }
9838 return globalScope.__wpStyleRuntime;
9839 }
9840 function documentContainsStyleHash10(targetDocument, hash) {
9841 if (!targetDocument.head) {
9842 return false;
9843 }
9844 for (const style of targetDocument.head.querySelectorAll(
9845 `style[${STYLE_HASH_ATTRIBUTE10}]`
9846 )) {
9847 if (style.getAttribute(STYLE_HASH_ATTRIBUTE10) === hash) {
9848 return true;
9849 }
9850 }
9851 return false;
9852 }
9853 function injectStyle10(targetDocument, hash, css) {
9854 if (!targetDocument.head) {
9855 return;
9856 }
9857 const runtime = getRuntime10();
9858 let injectedStyles = runtime.injectedStyles.get(targetDocument);
9859 if (!injectedStyles) {
9860 injectedStyles = /* @__PURE__ */ new Set();
9861 runtime.injectedStyles.set(targetDocument, injectedStyles);
9862 }
9863 if (injectedStyles.has(hash)) {
9864 return;
9865 }
9866 if (documentContainsStyleHash10(targetDocument, hash)) {
9867 injectedStyles.add(hash);
9868 return;
9869 }
9870 const style = targetDocument.createElement("style");
9871 style.setAttribute(STYLE_HASH_ATTRIBUTE10, hash);
9872 style.appendChild(targetDocument.createTextNode(css));
9873 targetDocument.head.appendChild(style);
9874 injectedStyles.add(hash);
9875 }
9876 function registerDocument10(targetDocument) {
9877 const runtime = getRuntime10();
9878 runtime.documents.set(
9879 targetDocument,
9880 (runtime.documents.get(targetDocument) ?? 0) + 1
9881 );
9882 for (const [hash, css] of runtime.styles) {
9883 injectStyle10(targetDocument, hash, css);
9884 }
9885 return () => {
9886 const count = runtime.documents.get(targetDocument);
9887 if (count === void 0) {
9888 return;
9889 }
9890 if (count <= 1) {
9891 runtime.documents.delete(targetDocument);
9892 return;
9893 }
9894 runtime.documents.set(targetDocument, count - 1);
9895 };
9896 }
9897 function registerStyle10(hash, css) {
9898 const runtime = getRuntime10();
9899 runtime.styles.set(hash, css);
9900 for (const targetDocument of runtime.documents.keys()) {
9901 injectStyle10(targetDocument, hash, css);
9902 }
9903 }
9904 if (typeof process === "undefined" || true) {
9905 registerStyle10("d29c51197e", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.a23e08e65c8e62e5__root{text-wrap:balance;align-items:center;color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-direction:column;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);gap:var(--wpds-dimension-gap-xs,4px);max-width:var(--wpds-dimension-surface-width-sm,320px);text-align:center}._01303b3680eaa216__visual{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;justify-content:center;line-height:1;margin-block-end:var(--wpds-dimension-gap-xs,4px)}._58c8e351db225608__icon{background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);border:1px solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);border-radius:50%;padding:var(--wpds-dimension-padding-xs,4px)}.b8b96f70820333a1__title{margin:0}._70f1dd22bad55b18__description{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin:0}._89ac025fd8e2bc52__actions{align-items:center;display:flex;flex-direction:column;gap:var(--wpds-dimension-gap-xs,4px);margin-block-start:var(--wpds-dimension-gap-md,12px);@media (min-width:480px){flex-direction:row;justify-content:center}}}@layer compositions{._70f1dd22bad55b18__description,.b8b96f70820333a1__title{text-wrap:balance}}}');
9906 }
9907 var style_default9 = { "root": "a23e08e65c8e62e5__root", "visual": "_01303b3680eaa216__visual", "icon": "_58c8e351db225608__icon", "title": "b8b96f70820333a1__title", "description": "_70f1dd22bad55b18__description", "actions": "_89ac025fd8e2bc52__actions" };
9908 var Icon3 = (0, import_element23.forwardRef)(
9909 function EmptyStateIcon({ icon, className, ...restProps }, ref) {
9910 return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
9911 Visual,
9912 {
9913 ref,
9914 className: clsx_default(style_default9.icon, className),
9915 ...restProps,
9916 children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Icon, { icon })
9917 }
9918 );
9919 }
9920 );
9921
9922 // packages/ui/build-module/empty-state/title.mjs
9923 var import_element24 = __toESM(require_element(), 1);
9924 var import_jsx_runtime31 = __toESM(require_jsx_runtime(), 1);
9925 var STYLE_HASH_ATTRIBUTE11 = "data-wp-hash";
9926 function getRuntime11() {
9927 const globalScope = globalThis;
9928 if (globalScope.__wpStyleRuntime) {
9929 return globalScope.__wpStyleRuntime;
9930 }
9931 globalScope.__wpStyleRuntime = {
9932 documents: /* @__PURE__ */ new Map(),
9933 styles: /* @__PURE__ */ new Map(),
9934 injectedStyles: /* @__PURE__ */ new WeakMap()
9935 };
9936 if (typeof document !== "undefined") {
9937 registerDocument11(document);
9938 }
9939 return globalScope.__wpStyleRuntime;
9940 }
9941 function documentContainsStyleHash11(targetDocument, hash) {
9942 if (!targetDocument.head) {
9943 return false;
9944 }
9945 for (const style of targetDocument.head.querySelectorAll(
9946 `style[${STYLE_HASH_ATTRIBUTE11}]`
9947 )) {
9948 if (style.getAttribute(STYLE_HASH_ATTRIBUTE11) === hash) {
9949 return true;
9950 }
9951 }
9952 return false;
9953 }
9954 function injectStyle11(targetDocument, hash, css) {
9955 if (!targetDocument.head) {
9956 return;
9957 }
9958 const runtime = getRuntime11();
9959 let injectedStyles = runtime.injectedStyles.get(targetDocument);
9960 if (!injectedStyles) {
9961 injectedStyles = /* @__PURE__ */ new Set();
9962 runtime.injectedStyles.set(targetDocument, injectedStyles);
9963 }
9964 if (injectedStyles.has(hash)) {
9965 return;
9966 }
9967 if (documentContainsStyleHash11(targetDocument, hash)) {
9968 injectedStyles.add(hash);
9969 return;
9970 }
9971 const style = targetDocument.createElement("style");
9972 style.setAttribute(STYLE_HASH_ATTRIBUTE11, hash);
9973 style.appendChild(targetDocument.createTextNode(css));
9974 targetDocument.head.appendChild(style);
9975 injectedStyles.add(hash);
9976 }
9977 function registerDocument11(targetDocument) {
9978 const runtime = getRuntime11();
9979 runtime.documents.set(
9980 targetDocument,
9981 (runtime.documents.get(targetDocument) ?? 0) + 1
9982 );
9983 for (const [hash, css] of runtime.styles) {
9984 injectStyle11(targetDocument, hash, css);
9985 }
9986 return () => {
9987 const count = runtime.documents.get(targetDocument);
9988 if (count === void 0) {
9989 return;
9990 }
9991 if (count <= 1) {
9992 runtime.documents.delete(targetDocument);
9993 return;
9994 }
9995 runtime.documents.set(targetDocument, count - 1);
9996 };
9997 }
9998 function registerStyle11(hash, css) {
9999 const runtime = getRuntime11();
10000 runtime.styles.set(hash, css);
10001 for (const targetDocument of runtime.documents.keys()) {
10002 injectStyle11(targetDocument, hash, css);
10003 }
10004 }
10005 if (typeof process === "undefined" || true) {
10006 registerStyle11("d29c51197e", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.a23e08e65c8e62e5__root{text-wrap:balance;align-items:center;color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-direction:column;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);gap:var(--wpds-dimension-gap-xs,4px);max-width:var(--wpds-dimension-surface-width-sm,320px);text-align:center}._01303b3680eaa216__visual{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;justify-content:center;line-height:1;margin-block-end:var(--wpds-dimension-gap-xs,4px)}._58c8e351db225608__icon{background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);border:1px solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);border-radius:50%;padding:var(--wpds-dimension-padding-xs,4px)}.b8b96f70820333a1__title{margin:0}._70f1dd22bad55b18__description{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin:0}._89ac025fd8e2bc52__actions{align-items:center;display:flex;flex-direction:column;gap:var(--wpds-dimension-gap-xs,4px);margin-block-start:var(--wpds-dimension-gap-md,12px);@media (min-width:480px){flex-direction:row;justify-content:center}}}@layer compositions{._70f1dd22bad55b18__description,.b8b96f70820333a1__title{text-wrap:balance}}}');
10007 }
10008 var style_default10 = { "root": "a23e08e65c8e62e5__root", "visual": "_01303b3680eaa216__visual", "icon": "_58c8e351db225608__icon", "title": "b8b96f70820333a1__title", "description": "_70f1dd22bad55b18__description", "actions": "_89ac025fd8e2bc52__actions" };
10009 var DEFAULT_TAG = /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("h2", {});
10010 var Title = (0, import_element24.forwardRef)(
10011 function EmptyStateTitle({ render = DEFAULT_TAG, className, children, ...props }, ref) {
10012 return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
10013 Text,
10014 {
10015 ref,
10016 variant: "heading-lg",
10017 render,
10018 className: clsx_default(style_default10.title, className),
10019 ...props,
10020 children
10021 }
10022 );
10023 }
10024 );
10025
10026 // packages/ui/build-module/empty-state/description.mjs
10027 var import_element25 = __toESM(require_element(), 1);
10028 var import_jsx_runtime32 = __toESM(require_jsx_runtime(), 1);
10029 var STYLE_HASH_ATTRIBUTE12 = "data-wp-hash";
10030 function getRuntime12() {
10031 const globalScope = globalThis;
10032 if (globalScope.__wpStyleRuntime) {
10033 return globalScope.__wpStyleRuntime;
10034 }
10035 globalScope.__wpStyleRuntime = {
10036 documents: /* @__PURE__ */ new Map(),
10037 styles: /* @__PURE__ */ new Map(),
10038 injectedStyles: /* @__PURE__ */ new WeakMap()
10039 };
10040 if (typeof document !== "undefined") {
10041 registerDocument12(document);
10042 }
10043 return globalScope.__wpStyleRuntime;
10044 }
10045 function documentContainsStyleHash12(targetDocument, hash) {
10046 if (!targetDocument.head) {
10047 return false;
10048 }
10049 for (const style of targetDocument.head.querySelectorAll(
10050 `style[${STYLE_HASH_ATTRIBUTE12}]`
10051 )) {
10052 if (style.getAttribute(STYLE_HASH_ATTRIBUTE12) === hash) {
10053 return true;
10054 }
10055 }
10056 return false;
10057 }
10058 function injectStyle12(targetDocument, hash, css) {
10059 if (!targetDocument.head) {
10060 return;
10061 }
10062 const runtime = getRuntime12();
10063 let injectedStyles = runtime.injectedStyles.get(targetDocument);
10064 if (!injectedStyles) {
10065 injectedStyles = /* @__PURE__ */ new Set();
10066 runtime.injectedStyles.set(targetDocument, injectedStyles);
10067 }
10068 if (injectedStyles.has(hash)) {
10069 return;
10070 }
10071 if (documentContainsStyleHash12(targetDocument, hash)) {
10072 injectedStyles.add(hash);
10073 return;
10074 }
10075 const style = targetDocument.createElement("style");
10076 style.setAttribute(STYLE_HASH_ATTRIBUTE12, hash);
10077 style.appendChild(targetDocument.createTextNode(css));
10078 targetDocument.head.appendChild(style);
10079 injectedStyles.add(hash);
10080 }
10081 function registerDocument12(targetDocument) {
10082 const runtime = getRuntime12();
10083 runtime.documents.set(
10084 targetDocument,
10085 (runtime.documents.get(targetDocument) ?? 0) + 1
10086 );
10087 for (const [hash, css] of runtime.styles) {
10088 injectStyle12(targetDocument, hash, css);
10089 }
10090 return () => {
10091 const count = runtime.documents.get(targetDocument);
10092 if (count === void 0) {
10093 return;
10094 }
10095 if (count <= 1) {
10096 runtime.documents.delete(targetDocument);
10097 return;
10098 }
10099 runtime.documents.set(targetDocument, count - 1);
10100 };
10101 }
10102 function registerStyle12(hash, css) {
10103 const runtime = getRuntime12();
10104 runtime.styles.set(hash, css);
10105 for (const targetDocument of runtime.documents.keys()) {
10106 injectStyle12(targetDocument, hash, css);
10107 }
10108 }
10109 if (typeof process === "undefined" || true) {
10110 registerStyle12("d29c51197e", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.a23e08e65c8e62e5__root{text-wrap:balance;align-items:center;color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-direction:column;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);gap:var(--wpds-dimension-gap-xs,4px);max-width:var(--wpds-dimension-surface-width-sm,320px);text-align:center}._01303b3680eaa216__visual{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;justify-content:center;line-height:1;margin-block-end:var(--wpds-dimension-gap-xs,4px)}._58c8e351db225608__icon{background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);border:1px solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);border-radius:50%;padding:var(--wpds-dimension-padding-xs,4px)}.b8b96f70820333a1__title{margin:0}._70f1dd22bad55b18__description{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin:0}._89ac025fd8e2bc52__actions{align-items:center;display:flex;flex-direction:column;gap:var(--wpds-dimension-gap-xs,4px);margin-block-start:var(--wpds-dimension-gap-md,12px);@media (min-width:480px){flex-direction:row;justify-content:center}}}@layer compositions{._70f1dd22bad55b18__description,.b8b96f70820333a1__title{text-wrap:balance}}}');
10111 }
10112 var style_default11 = { "root": "a23e08e65c8e62e5__root", "visual": "_01303b3680eaa216__visual", "icon": "_58c8e351db225608__icon", "title": "b8b96f70820333a1__title", "description": "_70f1dd22bad55b18__description", "actions": "_89ac025fd8e2bc52__actions" };
10113 var DEFAULT_TAG2 = /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", {});
10114 var Description = (0, import_element25.forwardRef)(function EmptyStateDescription({ render = DEFAULT_TAG2, className, children, ...props }, ref) {
10115 return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
10116 Text,
10117 {
10118 ref,
10119 variant: "body-md",
10120 render,
10121 className: clsx_default(style_default11.description, className),
10122 ...props,
10123 children
10124 }
10125 );
10126 });
10127
10128 // packages/ui/build-module/empty-state/actions.mjs
10129 var import_element26 = __toESM(require_element(), 1);
10130 var STYLE_HASH_ATTRIBUTE13 = "data-wp-hash";
10131 function getRuntime13() {
10132 const globalScope = globalThis;
10133 if (globalScope.__wpStyleRuntime) {
10134 return globalScope.__wpStyleRuntime;
10135 }
10136 globalScope.__wpStyleRuntime = {
10137 documents: /* @__PURE__ */ new Map(),
10138 styles: /* @__PURE__ */ new Map(),
10139 injectedStyles: /* @__PURE__ */ new WeakMap()
10140 };
10141 if (typeof document !== "undefined") {
10142 registerDocument13(document);
10143 }
10144 return globalScope.__wpStyleRuntime;
10145 }
10146 function documentContainsStyleHash13(targetDocument, hash) {
10147 if (!targetDocument.head) {
10148 return false;
10149 }
10150 for (const style of targetDocument.head.querySelectorAll(
10151 `style[${STYLE_HASH_ATTRIBUTE13}]`
10152 )) {
10153 if (style.getAttribute(STYLE_HASH_ATTRIBUTE13) === hash) {
10154 return true;
10155 }
10156 }
10157 return false;
10158 }
10159 function injectStyle13(targetDocument, hash, css) {
10160 if (!targetDocument.head) {
10161 return;
10162 }
10163 const runtime = getRuntime13();
10164 let injectedStyles = runtime.injectedStyles.get(targetDocument);
10165 if (!injectedStyles) {
10166 injectedStyles = /* @__PURE__ */ new Set();
10167 runtime.injectedStyles.set(targetDocument, injectedStyles);
10168 }
10169 if (injectedStyles.has(hash)) {
10170 return;
10171 }
10172 if (documentContainsStyleHash13(targetDocument, hash)) {
10173 injectedStyles.add(hash);
10174 return;
10175 }
10176 const style = targetDocument.createElement("style");
10177 style.setAttribute(STYLE_HASH_ATTRIBUTE13, hash);
10178 style.appendChild(targetDocument.createTextNode(css));
10179 targetDocument.head.appendChild(style);
10180 injectedStyles.add(hash);
10181 }
10182 function registerDocument13(targetDocument) {
10183 const runtime = getRuntime13();
10184 runtime.documents.set(
10185 targetDocument,
10186 (runtime.documents.get(targetDocument) ?? 0) + 1
10187 );
10188 for (const [hash, css] of runtime.styles) {
10189 injectStyle13(targetDocument, hash, css);
10190 }
10191 return () => {
10192 const count = runtime.documents.get(targetDocument);
10193 if (count === void 0) {
10194 return;
10195 }
10196 if (count <= 1) {
10197 runtime.documents.delete(targetDocument);
10198 return;
10199 }
10200 runtime.documents.set(targetDocument, count - 1);
10201 };
10202 }
10203 function registerStyle13(hash, css) {
10204 const runtime = getRuntime13();
10205 runtime.styles.set(hash, css);
10206 for (const targetDocument of runtime.documents.keys()) {
10207 injectStyle13(targetDocument, hash, css);
10208 }
10209 }
10210 if (typeof process === "undefined" || true) {
10211 registerStyle13("d29c51197e", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.a23e08e65c8e62e5__root{text-wrap:balance;align-items:center;color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-direction:column;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);gap:var(--wpds-dimension-gap-xs,4px);max-width:var(--wpds-dimension-surface-width-sm,320px);text-align:center}._01303b3680eaa216__visual{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;justify-content:center;line-height:1;margin-block-end:var(--wpds-dimension-gap-xs,4px)}._58c8e351db225608__icon{background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);border:1px solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);border-radius:50%;padding:var(--wpds-dimension-padding-xs,4px)}.b8b96f70820333a1__title{margin:0}._70f1dd22bad55b18__description{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin:0}._89ac025fd8e2bc52__actions{align-items:center;display:flex;flex-direction:column;gap:var(--wpds-dimension-gap-xs,4px);margin-block-start:var(--wpds-dimension-gap-md,12px);@media (min-width:480px){flex-direction:row;justify-content:center}}}@layer compositions{._70f1dd22bad55b18__description,.b8b96f70820333a1__title{text-wrap:balance}}}');
10212 }
10213 var style_default12 = { "root": "a23e08e65c8e62e5__root", "visual": "_01303b3680eaa216__visual", "icon": "_58c8e351db225608__icon", "title": "b8b96f70820333a1__title", "description": "_70f1dd22bad55b18__description", "actions": "_89ac025fd8e2bc52__actions" };
10214 var Actions = (0, import_element26.forwardRef)(
10215 function EmptyStateActions({ render, ...props }, ref) {
10216 const className = clsx_default(style_default12.actions);
10217 const element = useRender({
10218 defaultTagName: "div",
10219 render,
10220 ref,
10221 props: mergeProps({ className }, props)
10222 });
10223 return element;
10224 }
10225 );
10226
10227 // packages/admin-ui/build-module/navigable-region/index.mjs
10228 var import_element27 = __toESM(require_element(), 1);
10229 var import_jsx_runtime33 = __toESM(require_jsx_runtime(), 1);
10230 var NavigableRegion = (0, import_element27.forwardRef)(
10231 ({ children, className, ariaLabel, as: Tag = "div", ...props }, ref) => {
10232 return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
10233 Tag,
10234 {
10235 ref,
10236 className: clsx_default("admin-ui-navigable-region", className),
10237 "aria-label": ariaLabel,
10238 role: "region",
10239 tabIndex: "-1",
10240 ...props,
10241 children
10242 }
10243 );
10244 }
10245 );
10246 NavigableRegion.displayName = "NavigableRegion";
10247 var navigable_region_default = NavigableRegion;
10248
10249 // packages/admin-ui/build-module/navigation/index.mjs
10250 var import_i18n4 = __toESM(require_i18n(), 1);
10251 var import_jsx_runtime34 = __toESM(require_jsx_runtime(), 1);
10252 var STYLE_HASH_ATTRIBUTE14 = "data-wp-hash";
10253 function getRuntime14() {
10254 const globalScope = globalThis;
10255 if (globalScope.__wpStyleRuntime) {
10256 return globalScope.__wpStyleRuntime;
10257 }
10258 globalScope.__wpStyleRuntime = {
10259 documents: /* @__PURE__ */ new Map(),
10260 styles: /* @__PURE__ */ new Map(),
10261 injectedStyles: /* @__PURE__ */ new WeakMap()
10262 };
10263 if (typeof document !== "undefined") {
10264 registerDocument14(document);
10265 }
10266 return globalScope.__wpStyleRuntime;
10267 }
10268 function documentContainsStyleHash14(targetDocument, hash) {
10269 if (!targetDocument.head) {
10270 return false;
10271 }
10272 for (const style of targetDocument.head.querySelectorAll(
10273 `style[${STYLE_HASH_ATTRIBUTE14}]`
10274 )) {
10275 if (style.getAttribute(STYLE_HASH_ATTRIBUTE14) === hash) {
10276 return true;
10277 }
10278 }
10279 return false;
10280 }
10281 function injectStyle14(targetDocument, hash, css) {
10282 if (!targetDocument.head) {
10283 return;
10284 }
10285 const runtime = getRuntime14();
10286 let injectedStyles = runtime.injectedStyles.get(targetDocument);
10287 if (!injectedStyles) {
10288 injectedStyles = /* @__PURE__ */ new Set();
10289 runtime.injectedStyles.set(targetDocument, injectedStyles);
10290 }
10291 if (injectedStyles.has(hash)) {
10292 return;
10293 }
10294 if (documentContainsStyleHash14(targetDocument, hash)) {
10295 injectedStyles.add(hash);
10296 return;
10297 }
10298 const style = targetDocument.createElement("style");
10299 style.setAttribute(STYLE_HASH_ATTRIBUTE14, hash);
10300 style.appendChild(targetDocument.createTextNode(css));
10301 targetDocument.head.appendChild(style);
10302 injectedStyles.add(hash);
10303 }
10304 function registerDocument14(targetDocument) {
10305 const runtime = getRuntime14();
10306 runtime.documents.set(
10307 targetDocument,
10308 (runtime.documents.get(targetDocument) ?? 0) + 1
10309 );
10310 for (const [hash, css] of runtime.styles) {
10311 injectStyle14(targetDocument, hash, css);
10312 }
10313 return () => {
10314 const count = runtime.documents.get(targetDocument);
10315 if (count === void 0) {
10316 return;
10317 }
10318 if (count <= 1) {
10319 runtime.documents.delete(targetDocument);
10320 return;
10321 }
10322 runtime.documents.set(targetDocument, count - 1);
10323 };
10324 }
10325 function registerStyle14(hash, css) {
10326 const runtime = getRuntime14();
10327 runtime.styles.set(hash, css);
10328 for (const targetDocument of runtime.documents.keys()) {
10329 injectStyle14(targetDocument, hash, css);
10330 }
10331 }
10332 if (typeof process === "undefined" || true) {
10333 registerStyle14("72ef022400", ".bfb5a2dd8cceebd3__list{--focus-ring-size:calc(var(--wpds-border-width-focus, var(--wp-admin-border-width-focus, 2px))*2);list-style:none;margin:calc(var(--focus-ring-size)*-1);overflow-x:auto;padding:var(--focus-ring-size);scroll-padding:var(--focus-ring-size)}.a4759b4cb2c8bd92__li{flex-shrink:0}._07da506d3f2d9afe__item{align-items:center;color:var(--wpds-color-foreground-interactive-neutral-weak,#707070);display:flex;font-weight:var(--wpds-typography-font-weight-default,400);min-block-size:44px;min-inline-size:44px;text-decoration:none}._07da506d3f2d9afe__item:hover,._07da506d3f2d9afe__item[aria-current=page]{color:var(--wpds-color-foreground-interactive-neutral-weak-active,#1e1e1e)}._07da506d3f2d9afe__item[aria-current=page]{font-weight:var(--wpds-typography-font-weight-emphasis,600)}");
10334 }
10335 var style_default13 = { "list": "bfb5a2dd8cceebd3__list", "li": "a4759b4cb2c8bd92__li", "item": "_07da506d3f2d9afe__item" };
10336 var Navigation = ({
10337 items,
10338 currentHref,
10339 ariaLabel = (0, import_i18n4.__)("Sections"),
10340 linkComponent,
10341 className
10342 }) => {
10343 if (!items.length) {
10344 return null;
10345 }
10346 const LinkComponent = linkComponent ?? "a";
10347 if (true) {
10348 const invalidItem = items.find(
10349 (item) => typeof item.href !== "string"
10350 );
10351 if (invalidItem) {
10352 throw new Error(
10353 `Navigation: item "${invalidItem.label}" is missing an \`href\` prop.`
10354 );
10355 }
10356 const duplicate = items.find(
10357 (item, index2) => items.findIndex((other) => other.href === item.href) !== index2
10358 );
10359 if (duplicate) {
10360 throw new Error(
10361 `Navigation: duplicate \`href\` "${duplicate.href}". Each item must have a unique \`href\` so a single item receives \`aria-current="page"\`.`
10362 );
10363 }
10364 }
10365 return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("nav", { "aria-label": ariaLabel, className, children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
10366 Stack,
10367 {
10368 render: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("ul", { role: "list" }),
10369 direction: "row",
10370 align: "center",
10371 gap: "md",
10372 className: style_default13.list,
10373 children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("li", { className: style_default13.li, children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
10374 Text,
10375 {
10376 variant: "body-md",
10377 className: style_default13.item,
10378 render: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
10379 Link,
10380 {
10381 variant: "unstyled",
10382 "aria-current": item.href === currentHref ? "page" : void 0,
10383 render: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(LinkComponent, { href: item.href })
10384 }
10385 ),
10386 children: item.label
10387 }
10388 ) }, item.href))
10389 }
10390 ) });
10391 };
10392 var navigation_default = Navigation;
10393
10394 // packages/admin-ui/build-module/page/sidebar-toggle-slot.mjs
10395 var import_components = __toESM(require_components(), 1);
10396 var { Fill: SidebarToggleFill, Slot: SidebarToggleSlot } = (0, import_components.createSlotFill)("SidebarToggle");
10397
10398 // packages/admin-ui/build-module/page/header.mjs
10399 var import_jsx_runtime35 = __toESM(require_jsx_runtime(), 1);
10400 var STYLE_HASH_ATTRIBUTE15 = "data-wp-hash";
10401 function getRuntime15() {
10402 const globalScope = globalThis;
10403 if (globalScope.__wpStyleRuntime) {
10404 return globalScope.__wpStyleRuntime;
10405 }
10406 globalScope.__wpStyleRuntime = {
10407 documents: /* @__PURE__ */ new Map(),
10408 styles: /* @__PURE__ */ new Map(),
10409 injectedStyles: /* @__PURE__ */ new WeakMap()
10410 };
10411 if (typeof document !== "undefined") {
10412 registerDocument15(document);
10413 }
10414 return globalScope.__wpStyleRuntime;
10415 }
10416 function documentContainsStyleHash15(targetDocument, hash) {
10417 if (!targetDocument.head) {
10418 return false;
10419 }
10420 for (const style of targetDocument.head.querySelectorAll(
10421 `style[${STYLE_HASH_ATTRIBUTE15}]`
10422 )) {
10423 if (style.getAttribute(STYLE_HASH_ATTRIBUTE15) === hash) {
10424 return true;
10425 }
10426 }
10427 return false;
10428 }
10429 function injectStyle15(targetDocument, hash, css) {
10430 if (!targetDocument.head) {
10431 return;
10432 }
10433 const runtime = getRuntime15();
10434 let injectedStyles = runtime.injectedStyles.get(targetDocument);
10435 if (!injectedStyles) {
10436 injectedStyles = /* @__PURE__ */ new Set();
10437 runtime.injectedStyles.set(targetDocument, injectedStyles);
10438 }
10439 if (injectedStyles.has(hash)) {
10440 return;
10441 }
10442 if (documentContainsStyleHash15(targetDocument, hash)) {
10443 injectedStyles.add(hash);
10444 return;
10445 }
10446 const style = targetDocument.createElement("style");
10447 style.setAttribute(STYLE_HASH_ATTRIBUTE15, hash);
10448 style.appendChild(targetDocument.createTextNode(css));
10449 targetDocument.head.appendChild(style);
10450 injectedStyles.add(hash);
10451 }
10452 function registerDocument15(targetDocument) {
10453 const runtime = getRuntime15();
10454 runtime.documents.set(
10455 targetDocument,
10456 (runtime.documents.get(targetDocument) ?? 0) + 1
10457 );
10458 for (const [hash, css] of runtime.styles) {
10459 injectStyle15(targetDocument, hash, css);
10460 }
10461 return () => {
10462 const count = runtime.documents.get(targetDocument);
10463 if (count === void 0) {
10464 return;
10465 }
10466 if (count <= 1) {
10467 runtime.documents.delete(targetDocument);
10468 return;
10469 }
10470 runtime.documents.set(targetDocument, count - 1);
10471 };
10472 }
10473 function registerStyle15(hash, css) {
10474 const runtime = getRuntime15();
10475 runtime.styles.set(hash, css);
10476 for (const targetDocument of runtime.documents.keys()) {
10477 injectStyle15(targetDocument, hash, css);
10478 }
10479 }
10480 if (typeof process === "undefined" || true) {
10481 registerStyle15("1f3750277d", "._956b6df0898efed0__page{text-wrap:pretty;background-color:var(--wpds-color-background-surface-neutral,#fcfcfc);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-flow:column;height:100%;position:relative;z-index:1}._0625b55e82a0d93d__header{background:var(--wpds-color-background-surface-neutral-strong,#fff);border-block-end:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);inset-block-start:0;padding:var(--wpds-dimension-padding-lg,16px) var(--wpds-dimension-padding-2xl,24px);position:sticky;z-index:1}.a43c44d5ae28b2e8__header-content{min-height:var(--wpds-dimension-size-md,32px)}.b7cb5b9daf3a3b25__header-actions{flex-shrink:0}._8bcd33103b451f30__header-lockup{min-width:0}._8113be94e7caf73c__header-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._9a776c7f70996f61__header-visual{display:grid;flex-shrink:0;grid-template-columns:1fr;grid-template-rows:1fr;height:var(--wpds-dimension-size-sm,24px);width:var(--wpds-dimension-size-sm,24px);>*{grid-column:1/-1;grid-row:1/-1;max-height:100%;max-width:100%}}.d5e0920cd15d35bc__sidebar-toggle-slot:empty{display:none}._60fea2f6bf5319cd__header-subtitle{color:var(--wpds-color-foreground-content-neutral-weak,#707070);padding-block-end:var(--wpds-dimension-padding-xs,4px)}._0625b55e82a0d93d__header._4b0f17e503d11619__has-navigation,._0625b55e82a0d93d__header._4b0f17e503d11619__has-navigation ._60fea2f6bf5319cd__header-subtitle{padding-block-end:0}._673c99dcbfb58211__header-navigation{margin-block-start:var(--wpds-dimension-gap-md,12px)}.be5e57d029ec4036__content{display:flex;flex-direction:column;flex-grow:1;overflow:auto;&._128806d0b26e3a50__has-padding{padding:var(--wpds-dimension-padding-lg,16px) var(--wpds-dimension-padding-2xl,24px)}}");
10482 }
10483 var style_default14 = { "page": "_956b6df0898efed0__page", "header": "_0625b55e82a0d93d__header", "header-content": "a43c44d5ae28b2e8__header-content", "header-actions": "b7cb5b9daf3a3b25__header-actions", "header-lockup": "_8bcd33103b451f30__header-lockup", "header-title": "_8113be94e7caf73c__header-title", "header-visual": "_9a776c7f70996f61__header-visual", "sidebar-toggle-slot": "d5e0920cd15d35bc__sidebar-toggle-slot", "header-subtitle": "_60fea2f6bf5319cd__header-subtitle", "has-navigation": "_4b0f17e503d11619__has-navigation", "header-navigation": "_673c99dcbfb58211__header-navigation", "content": "be5e57d029ec4036__content", "has-padding": "_128806d0b26e3a50__has-padding" };
10484 function Header({
10485 headingLevel = 1,
10486 breadcrumbs,
10487 badges,
10488 visual,
10489 title,
10490 subTitle,
10491 actions,
10492 navigation,
10493 components,
10494 showSidebarToggle = true
10495 }) {
10496 const HeadingTag = `h${headingLevel}`;
10497 const hasNavigation = !!navigation?.items?.length;
10498 return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
10499 Stack,
10500 {
10501 direction: "column",
10502 className: clsx_default(
10503 style_default14.header,
10504 hasNavigation && style_default14["has-navigation"]
10505 ),
10506 children: [
10507 /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
10508 Stack,
10509 {
10510 className: style_default14["header-content"],
10511 direction: "row",
10512 gap: "sm",
10513 justify: "space-between",
10514 children: [
10515 /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
10516 Stack,
10517 {
10518 direction: "row",
10519 gap: "sm",
10520 align: "center",
10521 justify: "start",
10522 className: style_default14["header-lockup"],
10523 children: [
10524 showSidebarToggle && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
10525 SidebarToggleSlot,
10526 {
10527 bubblesVirtually: true,
10528 className: style_default14["sidebar-toggle-slot"]
10529 }
10530 ),
10531 visual && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
10532 "div",
10533 {
10534 className: style_default14["header-visual"],
10535 "aria-hidden": "true",
10536 children: visual
10537 }
10538 ),
10539 title && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
10540 Text,
10541 {
10542 className: style_default14["header-title"],
10543 render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(HeadingTag, {}),
10544 variant: "heading-lg",
10545 children: title
10546 }
10547 ),
10548 breadcrumbs,
10549 badges
10550 ]
10551 }
10552 ),
10553 actions && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
10554 Stack,
10555 {
10556 align: "center",
10557 className: style_default14["header-actions"],
10558 direction: "row",
10559 gap: "sm",
10560 children: actions
10561 }
10562 )
10563 ]
10564 }
10565 ),
10566 subTitle && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
10567 Text,
10568 {
10569 render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", {}),
10570 variant: "body-md",
10571 className: style_default14["header-subtitle"],
10572 children: subTitle
10573 }
10574 ),
10575 hasNavigation && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
10576 navigation_default,
10577 {
10578 ...navigation,
10579 linkComponent: components?.link,
10580 className: style_default14["header-navigation"]
10581 }
10582 )
10583 ]
10584 }
10585 );
10586 }
10587
10588 // packages/admin-ui/build-module/page/index.mjs
10589 var import_jsx_runtime36 = __toESM(require_jsx_runtime(), 1);
10590 var STYLE_HASH_ATTRIBUTE16 = "data-wp-hash";
10591 function getRuntime16() {
10592 const globalScope = globalThis;
10593 if (globalScope.__wpStyleRuntime) {
10594 return globalScope.__wpStyleRuntime;
10595 }
10596 globalScope.__wpStyleRuntime = {
10597 documents: /* @__PURE__ */ new Map(),
10598 styles: /* @__PURE__ */ new Map(),
10599 injectedStyles: /* @__PURE__ */ new WeakMap()
10600 };
10601 if (typeof document !== "undefined") {
10602 registerDocument16(document);
10603 }
10604 return globalScope.__wpStyleRuntime;
10605 }
10606 function documentContainsStyleHash16(targetDocument, hash) {
10607 if (!targetDocument.head) {
10608 return false;
10609 }
10610 for (const style of targetDocument.head.querySelectorAll(
10611 `style[${STYLE_HASH_ATTRIBUTE16}]`
10612 )) {
10613 if (style.getAttribute(STYLE_HASH_ATTRIBUTE16) === hash) {
10614 return true;
10615 }
10616 }
10617 return false;
10618 }
10619 function injectStyle16(targetDocument, hash, css) {
10620 if (!targetDocument.head) {
10621 return;
10622 }
10623 const runtime = getRuntime16();
10624 let injectedStyles = runtime.injectedStyles.get(targetDocument);
10625 if (!injectedStyles) {
10626 injectedStyles = /* @__PURE__ */ new Set();
10627 runtime.injectedStyles.set(targetDocument, injectedStyles);
10628 }
10629 if (injectedStyles.has(hash)) {
10630 return;
10631 }
10632 if (documentContainsStyleHash16(targetDocument, hash)) {
10633 injectedStyles.add(hash);
10634 return;
10635 }
10636 const style = targetDocument.createElement("style");
10637 style.setAttribute(STYLE_HASH_ATTRIBUTE16, hash);
10638 style.appendChild(targetDocument.createTextNode(css));
10639 targetDocument.head.appendChild(style);
10640 injectedStyles.add(hash);
10641 }
10642 function registerDocument16(targetDocument) {
10643 const runtime = getRuntime16();
10644 runtime.documents.set(
10645 targetDocument,
10646 (runtime.documents.get(targetDocument) ?? 0) + 1
10647 );
10648 for (const [hash, css] of runtime.styles) {
10649 injectStyle16(targetDocument, hash, css);
10650 }
10651 return () => {
10652 const count = runtime.documents.get(targetDocument);
10653 if (count === void 0) {
10654 return;
10655 }
10656 if (count <= 1) {
10657 runtime.documents.delete(targetDocument);
10658 return;
10659 }
10660 runtime.documents.set(targetDocument, count - 1);
10661 };
10662 }
10663 function registerStyle16(hash, css) {
10664 const runtime = getRuntime16();
10665 runtime.styles.set(hash, css);
10666 for (const targetDocument of runtime.documents.keys()) {
10667 injectStyle16(targetDocument, hash, css);
10668 }
10669 }
10670 if (typeof process === "undefined" || true) {
10671 registerStyle16("1f3750277d", "._956b6df0898efed0__page{text-wrap:pretty;background-color:var(--wpds-color-background-surface-neutral,#fcfcfc);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-flow:column;height:100%;position:relative;z-index:1}._0625b55e82a0d93d__header{background:var(--wpds-color-background-surface-neutral-strong,#fff);border-block-end:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);inset-block-start:0;padding:var(--wpds-dimension-padding-lg,16px) var(--wpds-dimension-padding-2xl,24px);position:sticky;z-index:1}.a43c44d5ae28b2e8__header-content{min-height:var(--wpds-dimension-size-md,32px)}.b7cb5b9daf3a3b25__header-actions{flex-shrink:0}._8bcd33103b451f30__header-lockup{min-width:0}._8113be94e7caf73c__header-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._9a776c7f70996f61__header-visual{display:grid;flex-shrink:0;grid-template-columns:1fr;grid-template-rows:1fr;height:var(--wpds-dimension-size-sm,24px);width:var(--wpds-dimension-size-sm,24px);>*{grid-column:1/-1;grid-row:1/-1;max-height:100%;max-width:100%}}.d5e0920cd15d35bc__sidebar-toggle-slot:empty{display:none}._60fea2f6bf5319cd__header-subtitle{color:var(--wpds-color-foreground-content-neutral-weak,#707070);padding-block-end:var(--wpds-dimension-padding-xs,4px)}._0625b55e82a0d93d__header._4b0f17e503d11619__has-navigation,._0625b55e82a0d93d__header._4b0f17e503d11619__has-navigation ._60fea2f6bf5319cd__header-subtitle{padding-block-end:0}._673c99dcbfb58211__header-navigation{margin-block-start:var(--wpds-dimension-gap-md,12px)}.be5e57d029ec4036__content{display:flex;flex-direction:column;flex-grow:1;overflow:auto;&._128806d0b26e3a50__has-padding{padding:var(--wpds-dimension-padding-lg,16px) var(--wpds-dimension-padding-2xl,24px)}}");
10672 }
10673 var style_default15 = { "page": "_956b6df0898efed0__page", "header": "_0625b55e82a0d93d__header", "header-content": "a43c44d5ae28b2e8__header-content", "header-actions": "b7cb5b9daf3a3b25__header-actions", "header-lockup": "_8bcd33103b451f30__header-lockup", "header-title": "_8113be94e7caf73c__header-title", "header-visual": "_9a776c7f70996f61__header-visual", "sidebar-toggle-slot": "d5e0920cd15d35bc__sidebar-toggle-slot", "header-subtitle": "_60fea2f6bf5319cd__header-subtitle", "has-navigation": "_4b0f17e503d11619__has-navigation", "header-navigation": "_673c99dcbfb58211__header-navigation", "content": "be5e57d029ec4036__content", "has-padding": "_128806d0b26e3a50__has-padding" };
10674 function Page({
10675 headingLevel,
10676 breadcrumbs,
10677 badges,
10678 visual,
10679 title,
10680 subTitle,
10681 children,
10682 className,
10683 actions,
10684 navigation,
10685 components,
10686 ariaLabel,
10687 hasPadding = false,
10688 showSidebarToggle = true
10689 }) {
10690 const classes = clsx_default(style_default15.page, className);
10691 const effectiveAriaLabel = ariaLabel ?? (typeof title === "string" ? title : "");
10692 return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(navigable_region_default, { className: classes, ariaLabel: effectiveAriaLabel, children: [
10693 (title || breadcrumbs || badges || actions || visual || !!navigation?.items?.length) && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
10694 Header,
10695 {
10696 headingLevel,
10697 breadcrumbs,
10698 badges,
10699 visual,
10700 title,
10701 subTitle,
10702 actions,
10703 navigation,
10704 components,
10705 showSidebarToggle
10706 }
10707 ),
10708 hasPadding ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
10709 "div",
10710 {
10711 className: clsx_default(
10712 style_default15.content,
10713 style_default15["has-padding"]
10714 ),
10715 children
10716 }
10717 ) : children
10718 ] });
10719 }
10720 Page.SidebarToggleFill = SidebarToggleFill;
10721 var page_default = Page;
10722
10723 // packages/admin-ui/build-module/admin-theme-colors/index.mjs
10724 var DEFAULT_THEME_COLORS = {
10725 primary: "#3858e9",
10726 background: "#222524"
10727 };
10728 var ADMIN_THEME_COLORS = /* @__PURE__ */ new Map([
10729 ["modern", DEFAULT_THEME_COLORS],
10730 ["fresh", { primary: "#007cba", background: "#25292b" }],
10731 ["midnight", { primary: "#cf4339", background: "#3d4042" }],
10732 ["coffee", { primary: "#916745", background: "#5b534d" }],
10733 ["ocean", { primary: "#567958", background: "#5f787f" }],
10734 ["blue", { primary: "#437aa8", background: "#3876a8" }],
10735 ["ectoplasm", { primary: "#646c3e", background: "#4f386e" }],
10736 ["sunrise", { primary: "#ad631e", background: "#cc4541" }],
10737 ["light", { primary: "#007cba", background: "#eaeeed" }]
10738 ]);
10739 function getAdminThemeColors() {
10740 const scheme = document.body.className.match(/admin-color-([\w-]+)/)?.[1] ?? "modern";
10741 return ADMIN_THEME_COLORS.get(scheme) ?? DEFAULT_THEME_COLORS;
10742 }
10743
10744 // packages/boot/build-module/components/app/router.mjs
10745 var import_data13 = __toESM(require_data(), 1);
10746 var import_core_data7 = __toESM(require_core_data(), 1);
10747 import {
10748 privateApis as routePrivateApis6
10749 } from "@wordpress/route";
10750
10751 // packages/boot/build-module/components/root/index.mjs
10752 var import_notices3 = __toESM(require_notices(), 1);
10753 var import_compose5 = __toESM(require_compose(), 1);
10754 var import_components14 = __toESM(require_components(), 1);
10755 import { privateApis as routePrivateApis5 } from "@wordpress/route";
10756 var import_element41 = __toESM(require_element(), 1);
10757 var import_i18n18 = __toESM(require_i18n(), 1);
10758 var import_editor5 = __toESM(require_editor(), 1);
10759 var import_theme = __toESM(require_theme(), 1);
10760
10761 // packages/boot/build-module/components/sidebar/index.mjs
10762 var import_components9 = __toESM(require_components(), 1);
10763 var import_data7 = __toESM(require_data(), 1);
10764 var import_i18n9 = __toESM(require_i18n(), 1);
10765
10766 // packages/boot/build-module/components/navigation/index.mjs
10767 var import_element31 = __toESM(require_element(), 1);
10768 var import_data4 = __toESM(require_data(), 1);
10769
10770 // packages/boot/build-module/store/index.mjs
10771 var import_data = __toESM(require_data(), 1);
10772
10773 // packages/boot/build-module/store/reducer.mjs
10774 var initialState = {
10775 menuItems: {},
10776 routes: [],
10777 dashboardLink: void 0,
10778 entityLinks: {}
10779 };
10780 function reducer(state = initialState, action) {
10781 switch (action.type) {
10782 case "REGISTER_MENU_ITEM":
10783 return {
10784 ...state,
10785 menuItems: {
10786 ...state.menuItems,
10787 [action.id]: action.menuItem
10788 }
10789 };
10790 case "UPDATE_MENU_ITEM":
10791 if (!state.menuItems[action.id]) {
10792 return state;
10793 }
10794 return {
10795 ...state,
10796 menuItems: {
10797 ...state.menuItems,
10798 [action.id]: {
10799 ...state.menuItems[action.id],
10800 ...action.updates
10801 }
10802 }
10803 };
10804 case "REGISTER_ROUTE":
10805 return {
10806 ...state,
10807 routes: [...state.routes, action.route]
10808 };
10809 case "REGISTER_ENTITY_LINKS":
10810 return {
10811 ...state,
10812 entityLinks: {
10813 ...state.entityLinks,
10814 [action.postType]: {
10815 ...state.entityLinks[action.postType],
10816 ...action.links
10817 }
10818 }
10819 };
10820 case "SET_DASHBOARD_LINK":
10821 return {
10822 ...state,
10823 dashboardLink: action.dashboardLink
10824 };
10825 }
10826 return state;
10827 }
10828
10829 // packages/boot/build-module/store/actions.mjs
10830 var actions_exports = {};
10831 __export(actions_exports, {
10832 registerEntityLinks: () => registerEntityLinks,
10833 registerMenuItem: () => registerMenuItem,
10834 registerRoute: () => registerRoute,
10835 setDashboardLink: () => setDashboardLink,
10836 updateMenuItem: () => updateMenuItem
10837 });
10838 function registerMenuItem(id, menuItem) {
10839 return {
10840 type: "REGISTER_MENU_ITEM",
10841 id,
10842 menuItem
10843 };
10844 }
10845 function updateMenuItem(id, updates) {
10846 return {
10847 type: "UPDATE_MENU_ITEM",
10848 id,
10849 updates
10850 };
10851 }
10852 function registerRoute(route) {
10853 return {
10854 type: "REGISTER_ROUTE",
10855 route
10856 };
10857 }
10858 function registerEntityLinks(postType, links) {
10859 return {
10860 type: "REGISTER_ENTITY_LINKS",
10861 postType,
10862 links
10863 };
10864 }
10865 function setDashboardLink(dashboardLink) {
10866 return {
10867 type: "SET_DASHBOARD_LINK",
10868 dashboardLink
10869 };
10870 }
10871
10872 // packages/boot/build-module/store/selectors.mjs
10873 var selectors_exports = {};
10874 __export(selectors_exports, {
10875 getDashboardLink: () => getDashboardLink,
10876 getEntityLink: () => getEntityLink,
10877 getMenuItems: () => getMenuItems,
10878 getRoutes: () => getRoutes
10879 });
10880 function getMenuItems(state) {
10881 return Object.values(state.menuItems);
10882 }
10883 function getRoutes(state) {
10884 return state.routes;
10885 }
10886 function getDashboardLink(state) {
10887 return state.dashboardLink;
10888 }
10889 function getEntityLink(state, postType, postId) {
10890 const links = state.entityLinks[postType] ?? state.entityLinks.default;
10891 const path = postId === void 0 ? links?.list : links?.edit;
10892 if (!path) {
10893 return void 0;
10894 }
10895 return path.replace("{type}", encodeURIComponent(postType)).replace("{id}", encodeURIComponent(postId ?? ""));
10896 }
10897
10898 // packages/boot/build-module/store/index.mjs
10899 var STORE_NAME = "wordpress/boot";
10900 var store = (0, import_data.createReduxStore)(STORE_NAME, {
10901 reducer,
10902 actions: actions_exports,
10903 selectors: selectors_exports
10904 });
10905 (0, import_data.register)(store);
10906
10907 // packages/boot/build-module/components/navigation/navigation-item/index.mjs
10908 var import_components4 = __toESM(require_components(), 1);
10909
10910 // packages/boot/build-module/components/navigation/router-link-item.mjs
10911 var import_element28 = __toESM(require_element(), 1);
10912 var import_components2 = __toESM(require_components(), 1);
10913 import { privateApis as routePrivateApis } from "@wordpress/route";
10914
10915 // packages/boot/build-module/lock-unlock.mjs
10916 var import_private_apis2 = __toESM(require_private_apis(), 1);
10917 var { lock: lock2, unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(
10918 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
10919 "@wordpress/boot"
10920 );
10921
10922 // packages/boot/build-module/components/navigation/router-link-item.mjs
10923 var import_jsx_runtime37 = __toESM(require_jsx_runtime(), 1);
10924 var { createLink } = unlock2(routePrivateApis);
10925 function AnchorOnlyItem(props, forwardedRef) {
10926 return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_components2.__experimentalItem, { as: "a", ref: forwardedRef, ...props });
10927 }
10928 var RouterLinkItem = createLink((0, import_element28.forwardRef)(AnchorOnlyItem));
10929 var router_link_item_default = RouterLinkItem;
10930
10931 // packages/boot/build-module/components/navigation/items.mjs
10932 var import_element29 = __toESM(require_element(), 1);
10933 var import_components3 = __toESM(require_components(), 1);
10934 var import_primitives10 = __toESM(require_primitives(), 1);
10935 var import_jsx_runtime38 = __toESM(require_jsx_runtime(), 1);
10936 function isSvg(element) {
10937 return (0, import_element29.isValidElement)(element) && (element.type === import_primitives10.SVG || element.type === "svg");
10938 }
10939 function wrapIcon(icon, shouldShowPlaceholder = true) {
10940 if (isSvg(icon)) {
10941 return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_components3.Icon, { icon });
10942 }
10943 if (typeof icon === "string" && icon.startsWith("dashicons-")) {
10944 const iconKey = icon.replace(
10945 /^dashicons-/,
10946 ""
10947 );
10948 return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
10949 import_components3.Dashicon,
10950 {
10951 style: { padding: "2px" },
10952 icon: iconKey,
10953 "aria-hidden": "true"
10954 }
10955 );
10956 }
10957 if (typeof icon === "string" && icon.startsWith("data:")) {
10958 return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
10959 "img",
10960 {
10961 src: icon,
10962 alt: "",
10963 "aria-hidden": "true",
10964 style: {
10965 width: "20px",
10966 height: "20px",
10967 display: "block",
10968 padding: "2px"
10969 }
10970 }
10971 );
10972 }
10973 if (icon) {
10974 return icon;
10975 }
10976 if (shouldShowPlaceholder) {
10977 return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
10978 "div",
10979 {
10980 style: { width: "24px", height: "24px" },
10981 "aria-hidden": "true"
10982 }
10983 );
10984 }
10985 return null;
10986 }
10987
10988 // packages/boot/build-module/components/navigation/navigation-item/index.mjs
10989 var import_jsx_runtime39 = __toESM(require_jsx_runtime(), 1);
10990 var STYLE_HASH_ATTRIBUTE17 = "data-wp-hash";
10991 function getRuntime17() {
10992 const globalScope = globalThis;
10993 if (globalScope.__wpStyleRuntime) {
10994 return globalScope.__wpStyleRuntime;
10995 }
10996 globalScope.__wpStyleRuntime = {
10997 documents: /* @__PURE__ */ new Map(),
10998 styles: /* @__PURE__ */ new Map(),
10999 injectedStyles: /* @__PURE__ */ new WeakMap()
11000 };
11001 if (typeof document !== "undefined") {
11002 registerDocument17(document);
11003 }
11004 return globalScope.__wpStyleRuntime;
11005 }
11006 function documentContainsStyleHash17(targetDocument, hash) {
11007 if (!targetDocument.head) {
11008 return false;
11009 }
11010 for (const style of targetDocument.head.querySelectorAll(
11011 `style[${STYLE_HASH_ATTRIBUTE17}]`
11012 )) {
11013 if (style.getAttribute(STYLE_HASH_ATTRIBUTE17) === hash) {
11014 return true;
11015 }
11016 }
11017 return false;
11018 }
11019 function injectStyle17(targetDocument, hash, css) {
11020 if (!targetDocument.head) {
11021 return;
11022 }
11023 const runtime = getRuntime17();
11024 let injectedStyles = runtime.injectedStyles.get(targetDocument);
11025 if (!injectedStyles) {
11026 injectedStyles = /* @__PURE__ */ new Set();
11027 runtime.injectedStyles.set(targetDocument, injectedStyles);
11028 }
11029 if (injectedStyles.has(hash)) {
11030 return;
11031 }
11032 if (documentContainsStyleHash17(targetDocument, hash)) {
11033 injectedStyles.add(hash);
11034 return;
11035 }
11036 const style = targetDocument.createElement("style");
11037 style.setAttribute(STYLE_HASH_ATTRIBUTE17, hash);
11038 style.appendChild(targetDocument.createTextNode(css));
11039 targetDocument.head.appendChild(style);
11040 injectedStyles.add(hash);
11041 }
11042 function registerDocument17(targetDocument) {
11043 const runtime = getRuntime17();
11044 runtime.documents.set(
11045 targetDocument,
11046 (runtime.documents.get(targetDocument) ?? 0) + 1
11047 );
11048 for (const [hash, css] of runtime.styles) {
11049 injectStyle17(targetDocument, hash, css);
11050 }
11051 return () => {
11052 const count = runtime.documents.get(targetDocument);
11053 if (count === void 0) {
11054 return;
11055 }
11056 if (count <= 1) {
11057 runtime.documents.delete(targetDocument);
11058 return;
11059 }
11060 runtime.documents.set(targetDocument, count - 1);
11061 };
11062 }
11063 function registerStyle17(hash, css) {
11064 const runtime = getRuntime17();
11065 runtime.styles.set(hash, css);
11066 for (const targetDocument of runtime.documents.keys()) {
11067 injectStyle17(targetDocument, hash, css);
11068 }
11069 }
11070 if (typeof process === "undefined" || true) {
11071 registerStyle17("74796ab776", ".d5331ded354c389a__item.d5331ded354c389a__item{align-items:center;border:none;border-radius:var(--wpds-border-radius-sm,2px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);display:flex;font-family:-apple-system,system-ui,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:var(--wpds-typography-font-weight-default,400);line-height:20px;margin-block-end:4px;margin-inline:12px;min-height:32px;padding-block:0;padding-inline:4px;width:calc(100% - 24px)}.d5331ded354c389a__item.d5331ded354c389a__item:focus,.d5331ded354c389a__item.d5331ded354c389a__item:hover,.d5331ded354c389a__item.d5331ded354c389a__item[aria-current=true]{color:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000))}.d5331ded354c389a__item.d5331ded354c389a__item svg:last-child{padding:4px}.d5331ded354c389a__item.d5331ded354c389a__item[aria-current=page],.d5331ded354c389a__item.d5331ded354c389a__item[data-status=active]{color:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000));font-weight:var(--wpds-typography-font-weight-emphasis,600)}.d5331ded354c389a__item.d5331ded354c389a__item:focus-visible{transform:translateZ(0)}.d5331ded354c389a__item._44ce5374f19a05f7__is-compact{min-height:24px}");
11072 }
11073 var style_module_default = { "item": "d5331ded354c389a__item", "is-compact": "_44ce5374f19a05f7__is-compact" };
11074 function NavigationItem({
11075 className,
11076 icon,
11077 shouldShowPlaceholder = true,
11078 children,
11079 to
11080 }) {
11081 const isExternal = !String(
11082 new URL(to, window.location.origin)
11083 ).startsWith(window.location.origin);
11084 const content = /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_components4.__experimentalHStack, { justify: "flex-start", spacing: 2, style: { flexGrow: "1" }, children: [
11085 wrapIcon(icon, shouldShowPlaceholder),
11086 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_components4.FlexBlock, { children })
11087 ] });
11088 if (isExternal) {
11089 return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
11090 import_components4.__experimentalItem,
11091 {
11092 as: "a",
11093 href: to,
11094 className: clsx_default(style_module_default.item, className),
11095 children: content
11096 }
11097 );
11098 }
11099 return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(router_link_item_default, { to, className: clsx_default(style_module_default.item, className), children: content });
11100 }
11101
11102 // packages/boot/build-module/components/navigation/drilldown-item/index.mjs
11103 var import_components5 = __toESM(require_components(), 1);
11104 var import_i18n5 = __toESM(require_i18n(), 1);
11105 var import_jsx_runtime40 = __toESM(require_jsx_runtime(), 1);
11106 var STYLE_HASH_ATTRIBUTE18 = "data-wp-hash";
11107 function getRuntime18() {
11108 const globalScope = globalThis;
11109 if (globalScope.__wpStyleRuntime) {
11110 return globalScope.__wpStyleRuntime;
11111 }
11112 globalScope.__wpStyleRuntime = {
11113 documents: /* @__PURE__ */ new Map(),
11114 styles: /* @__PURE__ */ new Map(),
11115 injectedStyles: /* @__PURE__ */ new WeakMap()
11116 };
11117 if (typeof document !== "undefined") {
11118 registerDocument18(document);
11119 }
11120 return globalScope.__wpStyleRuntime;
11121 }
11122 function documentContainsStyleHash18(targetDocument, hash) {
11123 if (!targetDocument.head) {
11124 return false;
11125 }
11126 for (const style of targetDocument.head.querySelectorAll(
11127 `style[${STYLE_HASH_ATTRIBUTE18}]`
11128 )) {
11129 if (style.getAttribute(STYLE_HASH_ATTRIBUTE18) === hash) {
11130 return true;
11131 }
11132 }
11133 return false;
11134 }
11135 function injectStyle18(targetDocument, hash, css) {
11136 if (!targetDocument.head) {
11137 return;
11138 }
11139 const runtime = getRuntime18();
11140 let injectedStyles = runtime.injectedStyles.get(targetDocument);
11141 if (!injectedStyles) {
11142 injectedStyles = /* @__PURE__ */ new Set();
11143 runtime.injectedStyles.set(targetDocument, injectedStyles);
11144 }
11145 if (injectedStyles.has(hash)) {
11146 return;
11147 }
11148 if (documentContainsStyleHash18(targetDocument, hash)) {
11149 injectedStyles.add(hash);
11150 return;
11151 }
11152 const style = targetDocument.createElement("style");
11153 style.setAttribute(STYLE_HASH_ATTRIBUTE18, hash);
11154 style.appendChild(targetDocument.createTextNode(css));
11155 targetDocument.head.appendChild(style);
11156 injectedStyles.add(hash);
11157 }
11158 function registerDocument18(targetDocument) {
11159 const runtime = getRuntime18();
11160 runtime.documents.set(
11161 targetDocument,
11162 (runtime.documents.get(targetDocument) ?? 0) + 1
11163 );
11164 for (const [hash, css] of runtime.styles) {
11165 injectStyle18(targetDocument, hash, css);
11166 }
11167 return () => {
11168 const count = runtime.documents.get(targetDocument);
11169 if (count === void 0) {
11170 return;
11171 }
11172 if (count <= 1) {
11173 runtime.documents.delete(targetDocument);
11174 return;
11175 }
11176 runtime.documents.set(targetDocument, count - 1);
11177 };
11178 }
11179 function registerStyle18(hash, css) {
11180 const runtime = getRuntime18();
11181 runtime.styles.set(hash, css);
11182 for (const targetDocument of runtime.documents.keys()) {
11183 injectStyle18(targetDocument, hash, css);
11184 }
11185 }
11186 if (typeof process === "undefined" || true) {
11187 registerStyle18("74796ab776", ".d5331ded354c389a__item.d5331ded354c389a__item{align-items:center;border:none;border-radius:var(--wpds-border-radius-sm,2px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);display:flex;font-family:-apple-system,system-ui,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:var(--wpds-typography-font-weight-default,400);line-height:20px;margin-block-end:4px;margin-inline:12px;min-height:32px;padding-block:0;padding-inline:4px;width:calc(100% - 24px)}.d5331ded354c389a__item.d5331ded354c389a__item:focus,.d5331ded354c389a__item.d5331ded354c389a__item:hover,.d5331ded354c389a__item.d5331ded354c389a__item[aria-current=true]{color:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000))}.d5331ded354c389a__item.d5331ded354c389a__item svg:last-child{padding:4px}.d5331ded354c389a__item.d5331ded354c389a__item[aria-current=page],.d5331ded354c389a__item.d5331ded354c389a__item[data-status=active]{color:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000));font-weight:var(--wpds-typography-font-weight-emphasis,600)}.d5331ded354c389a__item.d5331ded354c389a__item:focus-visible{transform:translateZ(0)}.d5331ded354c389a__item._44ce5374f19a05f7__is-compact{min-height:24px}");
11188 }
11189 var style_module_default2 = { "item": "d5331ded354c389a__item", "is-compact": "_44ce5374f19a05f7__is-compact" };
11190 function DrilldownItem({
11191 className,
11192 id,
11193 icon,
11194 shouldShowPlaceholder = true,
11195 children,
11196 onNavigate
11197 }) {
11198 const handleClick = (e) => {
11199 e.preventDefault();
11200 onNavigate({ id, direction: "forward" });
11201 };
11202 return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
11203 import_components5.__experimentalItem,
11204 {
11205 className: clsx_default(style_module_default2.item, className),
11206 onClick: handleClick,
11207 children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
11208 import_components5.__experimentalHStack,
11209 {
11210 justify: "flex-start",
11211 spacing: 2,
11212 style: { flexGrow: "1" },
11213 children: [
11214 wrapIcon(icon, shouldShowPlaceholder),
11215 /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_components5.FlexBlock, { children }),
11216 /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
11217 import_components5.Icon,
11218 {
11219 icon: (0, import_i18n5.isRTL)() ? chevron_left_small_default : chevron_right_small_default
11220 }
11221 )
11222 ]
11223 }
11224 )
11225 }
11226 );
11227 }
11228
11229 // packages/boot/build-module/components/navigation/dropdown-item/index.mjs
11230 var import_components6 = __toESM(require_components(), 1);
11231 var import_compose = __toESM(require_compose(), 1);
11232 var import_data2 = __toESM(require_data(), 1);
11233 var import_jsx_runtime41 = __toESM(require_jsx_runtime(), 1);
11234 var STYLE_HASH_ATTRIBUTE19 = "data-wp-hash";
11235 function getRuntime19() {
11236 const globalScope = globalThis;
11237 if (globalScope.__wpStyleRuntime) {
11238 return globalScope.__wpStyleRuntime;
11239 }
11240 globalScope.__wpStyleRuntime = {
11241 documents: /* @__PURE__ */ new Map(),
11242 styles: /* @__PURE__ */ new Map(),
11243 injectedStyles: /* @__PURE__ */ new WeakMap()
11244 };
11245 if (typeof document !== "undefined") {
11246 registerDocument19(document);
11247 }
11248 return globalScope.__wpStyleRuntime;
11249 }
11250 function documentContainsStyleHash19(targetDocument, hash) {
11251 if (!targetDocument.head) {
11252 return false;
11253 }
11254 for (const style of targetDocument.head.querySelectorAll(
11255 `style[${STYLE_HASH_ATTRIBUTE19}]`
11256 )) {
11257 if (style.getAttribute(STYLE_HASH_ATTRIBUTE19) === hash) {
11258 return true;
11259 }
11260 }
11261 return false;
11262 }
11263 function injectStyle19(targetDocument, hash, css) {
11264 if (!targetDocument.head) {
11265 return;
11266 }
11267 const runtime = getRuntime19();
11268 let injectedStyles = runtime.injectedStyles.get(targetDocument);
11269 if (!injectedStyles) {
11270 injectedStyles = /* @__PURE__ */ new Set();
11271 runtime.injectedStyles.set(targetDocument, injectedStyles);
11272 }
11273 if (injectedStyles.has(hash)) {
11274 return;
11275 }
11276 if (documentContainsStyleHash19(targetDocument, hash)) {
11277 injectedStyles.add(hash);
11278 return;
11279 }
11280 const style = targetDocument.createElement("style");
11281 style.setAttribute(STYLE_HASH_ATTRIBUTE19, hash);
11282 style.appendChild(targetDocument.createTextNode(css));
11283 targetDocument.head.appendChild(style);
11284 injectedStyles.add(hash);
11285 }
11286 function registerDocument19(targetDocument) {
11287 const runtime = getRuntime19();
11288 runtime.documents.set(
11289 targetDocument,
11290 (runtime.documents.get(targetDocument) ?? 0) + 1
11291 );
11292 for (const [hash, css] of runtime.styles) {
11293 injectStyle19(targetDocument, hash, css);
11294 }
11295 return () => {
11296 const count = runtime.documents.get(targetDocument);
11297 if (count === void 0) {
11298 return;
11299 }
11300 if (count <= 1) {
11301 runtime.documents.delete(targetDocument);
11302 return;
11303 }
11304 runtime.documents.set(targetDocument, count - 1);
11305 };
11306 }
11307 function registerStyle19(hash, css) {
11308 const runtime = getRuntime19();
11309 runtime.styles.set(hash, css);
11310 for (const targetDocument of runtime.documents.keys()) {
11311 injectStyle19(targetDocument, hash, css);
11312 }
11313 }
11314 if (typeof process === "undefined" || true) {
11315 registerStyle19("74796ab776", ".d5331ded354c389a__item.d5331ded354c389a__item{align-items:center;border:none;border-radius:var(--wpds-border-radius-sm,2px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);display:flex;font-family:-apple-system,system-ui,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:var(--wpds-typography-font-weight-default,400);line-height:20px;margin-block-end:4px;margin-inline:12px;min-height:32px;padding-block:0;padding-inline:4px;width:calc(100% - 24px)}.d5331ded354c389a__item.d5331ded354c389a__item:focus,.d5331ded354c389a__item.d5331ded354c389a__item:hover,.d5331ded354c389a__item.d5331ded354c389a__item[aria-current=true]{color:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000))}.d5331ded354c389a__item.d5331ded354c389a__item svg:last-child{padding:4px}.d5331ded354c389a__item.d5331ded354c389a__item[aria-current=page],.d5331ded354c389a__item.d5331ded354c389a__item[data-status=active]{color:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000));font-weight:var(--wpds-typography-font-weight-emphasis,600)}.d5331ded354c389a__item.d5331ded354c389a__item:focus-visible{transform:translateZ(0)}.d5331ded354c389a__item._44ce5374f19a05f7__is-compact{min-height:24px}");
11316 }
11317 var style_module_default3 = { "item": "d5331ded354c389a__item", "is-compact": "_44ce5374f19a05f7__is-compact" };
11318 if (typeof process === "undefined" || true) {
11319 registerStyle19("1a6b086e6c", "._093b894bfb82e8de__dropdown{display:block}._5954dba25ac6e16f__dropdown-children{display:flex;flex-direction:column;margin-block-end:2px;margin-block-start:-2px;margin-inline-start:30px;overflow:hidden;padding:2px}._9a14116ec9dae0e2__chevron.a9ebdaa3f36d6986__is-up{transform:rotate(180deg)}");
11320 }
11321 var style_module_default22 = { "dropdown": "_093b894bfb82e8de__dropdown", "dropdown-children": "_5954dba25ac6e16f__dropdown-children", "chevron": "_9a14116ec9dae0e2__chevron", "is-up": "a9ebdaa3f36d6986__is-up" };
11322 var ANIMATION_DURATION = 0.2;
11323 function DropdownItem({
11324 className,
11325 id,
11326 icon,
11327 children,
11328 isExpanded,
11329 onToggle
11330 }) {
11331 const menuItems = (0, import_data2.useSelect)(
11332 (select) => (
11333 // @ts-expect-error Store types are not available when selecting by store name.
11334 select(STORE_NAME).getMenuItems()
11335 ),
11336 []
11337 );
11338 const items = menuItems.filter((item) => item.parent === id);
11339 const disableMotion = (0, import_compose.useReducedMotion)();
11340 return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: style_module_default22.dropdown, children: [
11341 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
11342 import_components6.__experimentalItem,
11343 {
11344 className: clsx_default(style_module_default3.item, className),
11345 onClick: (e) => {
11346 e.preventDefault();
11347 e.stopPropagation();
11348 onToggle();
11349 },
11350 onMouseDown: (e) => e.preventDefault(),
11351 children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
11352 import_components6.__experimentalHStack,
11353 {
11354 justify: "flex-start",
11355 spacing: 2,
11356 style: { flexGrow: "1" },
11357 children: [
11358 wrapIcon(icon, false),
11359 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_components6.FlexBlock, { children }),
11360 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
11361 import_components6.Icon,
11362 {
11363 icon: chevron_down_small_default,
11364 className: clsx_default(style_module_default22.chevron, {
11365 [style_module_default22["is-up"]]: isExpanded
11366 })
11367 }
11368 )
11369 ]
11370 }
11371 )
11372 }
11373 ),
11374 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_components6.__unstableAnimatePresence, { initial: false, children: isExpanded && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
11375 import_components6.__unstableMotion.div,
11376 {
11377 initial: { height: 0 },
11378 animate: { height: "auto" },
11379 exit: { height: 0 },
11380 transition: {
11381 type: "tween",
11382 duration: disableMotion ? 0 : ANIMATION_DURATION,
11383 ease: "easeOut"
11384 },
11385 className: style_module_default22["dropdown-children"],
11386 children: items.map((item, index2) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
11387 NavigationItem,
11388 {
11389 className: style_module_default3["is-compact"],
11390 to: item.to,
11391 shouldShowPlaceholder: false,
11392 children: item.label
11393 },
11394 index2
11395 ))
11396 }
11397 ) })
11398 ] });
11399 }
11400
11401 // packages/boot/build-module/components/navigation/navigation-screen/index.mjs
11402 var import_components7 = __toESM(require_components(), 1);
11403 var import_i18n6 = __toESM(require_i18n(), 1);
11404 var import_compose2 = __toESM(require_compose(), 1);
11405 var import_jsx_runtime42 = __toESM(require_jsx_runtime(), 1);
11406 var STYLE_HASH_ATTRIBUTE20 = "data-wp-hash";
11407 function getRuntime20() {
11408 const globalScope = globalThis;
11409 if (globalScope.__wpStyleRuntime) {
11410 return globalScope.__wpStyleRuntime;
11411 }
11412 globalScope.__wpStyleRuntime = {
11413 documents: /* @__PURE__ */ new Map(),
11414 styles: /* @__PURE__ */ new Map(),
11415 injectedStyles: /* @__PURE__ */ new WeakMap()
11416 };
11417 if (typeof document !== "undefined") {
11418 registerDocument20(document);
11419 }
11420 return globalScope.__wpStyleRuntime;
11421 }
11422 function documentContainsStyleHash20(targetDocument, hash) {
11423 if (!targetDocument.head) {
11424 return false;
11425 }
11426 for (const style of targetDocument.head.querySelectorAll(
11427 `style[${STYLE_HASH_ATTRIBUTE20}]`
11428 )) {
11429 if (style.getAttribute(STYLE_HASH_ATTRIBUTE20) === hash) {
11430 return true;
11431 }
11432 }
11433 return false;
11434 }
11435 function injectStyle20(targetDocument, hash, css) {
11436 if (!targetDocument.head) {
11437 return;
11438 }
11439 const runtime = getRuntime20();
11440 let injectedStyles = runtime.injectedStyles.get(targetDocument);
11441 if (!injectedStyles) {
11442 injectedStyles = /* @__PURE__ */ new Set();
11443 runtime.injectedStyles.set(targetDocument, injectedStyles);
11444 }
11445 if (injectedStyles.has(hash)) {
11446 return;
11447 }
11448 if (documentContainsStyleHash20(targetDocument, hash)) {
11449 injectedStyles.add(hash);
11450 return;
11451 }
11452 const style = targetDocument.createElement("style");
11453 style.setAttribute(STYLE_HASH_ATTRIBUTE20, hash);
11454 style.appendChild(targetDocument.createTextNode(css));
11455 targetDocument.head.appendChild(style);
11456 injectedStyles.add(hash);
11457 }
11458 function registerDocument20(targetDocument) {
11459 const runtime = getRuntime20();
11460 runtime.documents.set(
11461 targetDocument,
11462 (runtime.documents.get(targetDocument) ?? 0) + 1
11463 );
11464 for (const [hash, css] of runtime.styles) {
11465 injectStyle20(targetDocument, hash, css);
11466 }
11467 return () => {
11468 const count = runtime.documents.get(targetDocument);
11469 if (count === void 0) {
11470 return;
11471 }
11472 if (count <= 1) {
11473 runtime.documents.delete(targetDocument);
11474 return;
11475 }
11476 runtime.documents.set(targetDocument, count - 1);
11477 };
11478 }
11479 function registerStyle20(hash, css) {
11480 const runtime = getRuntime20();
11481 runtime.styles.set(hash, css);
11482 for (const targetDocument of runtime.documents.keys()) {
11483 injectStyle20(targetDocument, hash, css);
11484 }
11485 }
11486 if (typeof process === "undefined" || true) {
11487 registerStyle20("9bfc8fef50", ".c93eb5f7b870f29c__screen{padding-block-end:4px}.c93eb5f7b870f29c__screen .components-text{color:var(--wpds-color-foreground-content-neutral,#1e1e1e)}.bee113ef4a391bcd__title-icon{padding-block-end:8px;padding-block-start:12px;padding-inline-end:16px;padding-inline-start:16px;position:sticky;top:0}._2f6050d2407c9dee__title{flex-grow:1;overflow-wrap:break-word}._2f6050d2407c9dee__title._2f6050d2407c9dee__title,._2f6050d2407c9dee__title._2f6050d2407c9dee__title ._2f6050d2407c9dee__title{color:var(--wpds-color-foreground-content-neutral,#1e1e1e);line-height:32px}.e78f7a9cf7e91164__actions{display:flex;flex-shrink:0}");
11488 }
11489 var style_module_default4 = { "screen": "c93eb5f7b870f29c__screen", "title-icon": "bee113ef4a391bcd__title-icon", "title": "_2f6050d2407c9dee__title", "actions": "e78f7a9cf7e91164__actions" };
11490 var ANIMATION_DURATION2 = 0.3;
11491 var slideVariants = {
11492 initial: (direction) => ({
11493 x: direction === "forward" ? 100 : -100,
11494 opacity: 0
11495 }),
11496 animate: {
11497 x: 0,
11498 opacity: 1
11499 },
11500 exit: (direction) => ({
11501 x: direction === "forward" ? 100 : -100,
11502 opacity: 0
11503 })
11504 };
11505 function NavigationScreen({
11506 isRoot,
11507 title,
11508 actions,
11509 content,
11510 description,
11511 animationDirection,
11512 backMenuItem,
11513 backButtonRef,
11514 navigationKey,
11515 onNavigate
11516 }) {
11517 const icon = (0, import_i18n6.isRTL)() ? chevron_right_default : chevron_left_default;
11518 const disableMotion = (0, import_compose2.useReducedMotion)();
11519 const handleBackClick = (e) => {
11520 e.preventDefault();
11521 onNavigate({ id: backMenuItem, direction: "backward" });
11522 };
11523 return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
11524 "div",
11525 {
11526 className: style_module_default4.screen,
11527 style: {
11528 overflow: "hidden",
11529 position: "relative",
11530 display: "grid",
11531 gridTemplateColumns: "1fr",
11532 gridTemplateRows: "1fr"
11533 },
11534 children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_components7.__unstableAnimatePresence, { initial: false, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
11535 import_components7.__unstableMotion.div,
11536 {
11537 custom: animationDirection,
11538 variants: slideVariants,
11539 initial: "initial",
11540 animate: "animate",
11541 exit: "exit",
11542 transition: {
11543 type: "tween",
11544 duration: disableMotion ? 0 : ANIMATION_DURATION2,
11545 ease: [0.33, 0, 0, 1]
11546 },
11547 style: {
11548 width: "100%",
11549 gridColumn: "1",
11550 gridRow: "1"
11551 },
11552 children: [
11553 /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_components7.__experimentalHStack, { spacing: 2, className: style_module_default4["title-icon"], children: [
11554 !isRoot && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
11555 import_components7.Button,
11556 {
11557 ref: backButtonRef,
11558 icon,
11559 onClick: handleBackClick,
11560 label: (0, import_i18n6.__)("Back"),
11561 size: "small",
11562 variant: "tertiary"
11563 }
11564 ),
11565 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
11566 import_components7.__experimentalHeading,
11567 {
11568 className: style_module_default4.title,
11569 level: 1,
11570 size: "15px",
11571 children: title
11572 }
11573 ),
11574 actions && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: style_module_default4.actions, children: actions })
11575 ] }),
11576 description && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { children: description }),
11577 content
11578 ]
11579 },
11580 navigationKey
11581 ) })
11582 }
11583 );
11584 }
11585
11586 // packages/boot/build-module/components/navigation/use-sidebar-parent.mjs
11587 var import_element30 = __toESM(require_element(), 1);
11588 var import_data3 = __toESM(require_data(), 1);
11589 import { privateApis as routePrivateApis2 } from "@wordpress/route";
11590
11591 // packages/boot/build-module/components/navigation/path-matching.mjs
11592 var isValidParentPath = (currentPath, menuPath) => {
11593 if (!menuPath || menuPath === currentPath) {
11594 return false;
11595 }
11596 const normalizePath = (path) => {
11597 const normalized = path.startsWith("/") ? path : "/" + path;
11598 return normalized.endsWith("/") && normalized.length > 1 ? normalized.slice(0, -1) : normalized;
11599 };
11600 const normalizedCurrent = normalizePath(currentPath);
11601 const normalizedMenu = normalizePath(menuPath);
11602 return normalizedCurrent.startsWith(normalizedMenu) && (normalizedCurrent[normalizedMenu.length] === "/" || normalizedMenu === "/");
11603 };
11604 var findClosestMenuItem = (currentPath, menuItems) => {
11605 const exactMatch = menuItems.find((item) => item.to === currentPath);
11606 if (exactMatch) {
11607 return exactMatch;
11608 }
11609 let bestMatch = null;
11610 let bestPathLength = 0;
11611 for (const item of menuItems) {
11612 if (!item.to) {
11613 continue;
11614 }
11615 if (isValidParentPath(currentPath, item.to)) {
11616 if (item.to.length > bestPathLength) {
11617 bestMatch = item;
11618 bestPathLength = item.to.length;
11619 }
11620 }
11621 }
11622 return bestMatch;
11623 };
11624 var findDrilldownParent = (id, menuItems) => {
11625 if (!id) {
11626 return void 0;
11627 }
11628 const currentItem = menuItems.find((item) => item.id === id);
11629 if (!currentItem) {
11630 return void 0;
11631 }
11632 if (currentItem.parent) {
11633 const parentItem = menuItems.find(
11634 (item) => item.id === currentItem.parent
11635 );
11636 if (parentItem?.parent_type === "drilldown") {
11637 return parentItem.id;
11638 }
11639 if (parentItem) {
11640 return findDrilldownParent(parentItem.id, menuItems);
11641 }
11642 }
11643 return void 0;
11644 };
11645 var findDropdownParent = (id, menuItems) => {
11646 if (!id) {
11647 return void 0;
11648 }
11649 const currentItem = menuItems.find((item) => item.id === id);
11650 if (!currentItem) {
11651 return void 0;
11652 }
11653 if (currentItem.parent) {
11654 const parentItem = menuItems.find(
11655 (item) => item.id === currentItem.parent
11656 );
11657 if (parentItem?.parent_type === "dropdown") {
11658 return parentItem.id;
11659 }
11660 }
11661 return void 0;
11662 };
11663
11664 // packages/boot/build-module/components/navigation/use-sidebar-parent.mjs
11665 var { useRouter, useMatches } = unlock2(routePrivateApis2);
11666 function useSidebarParent() {
11667 const matches = useMatches();
11668 const router = useRouter();
11669 const menuItems = (0, import_data3.useSelect)(
11670 (select) => (
11671 // @ts-expect-error Store types are not available when selecting by store name.
11672 select(STORE_NAME).getMenuItems()
11673 ),
11674 []
11675 );
11676 const currentPath = matches[matches.length - 1].pathname.slice(
11677 router.options.basepath?.length ?? 0
11678 );
11679 const currentMenuItem = findClosestMenuItem(currentPath, menuItems);
11680 const [parentId, setParentId] = (0, import_element30.useState)(
11681 findDrilldownParent(currentMenuItem?.id, menuItems)
11682 );
11683 const [parentDropdownId, setParentDropdownId] = (0, import_element30.useState)(findDropdownParent(currentMenuItem?.id, menuItems));
11684 (0, import_element30.useEffect)(() => {
11685 const matchedMenuItem = findClosestMenuItem(currentPath, menuItems);
11686 const updatedParentId = findDrilldownParent(
11687 matchedMenuItem?.id,
11688 menuItems
11689 );
11690 const updatedDropdownParent = findDropdownParent(
11691 matchedMenuItem?.id,
11692 menuItems
11693 );
11694 setParentId(updatedParentId);
11695 setParentDropdownId(updatedDropdownParent);
11696 }, [currentPath, menuItems]);
11697 return [
11698 parentId,
11699 setParentId,
11700 parentDropdownId,
11701 setParentDropdownId
11702 ];
11703 }
11704
11705 // packages/boot/build-module/components/navigation/index.mjs
11706 var import_jsx_runtime43 = __toESM(require_jsx_runtime(), 1);
11707 function Navigation2() {
11708 const backButtonRef = (0, import_element31.useRef)(null);
11709 const [animationDirection, setAnimationDirection] = (0, import_element31.useState)(null);
11710 const [parentId, setParentId, parentDropdownId, setParentDropdownId] = useSidebarParent();
11711 const menuItems = (0, import_data4.useSelect)(
11712 (select) => (
11713 // @ts-expect-error Store types are not available when selecting by store name.
11714 select(STORE_NAME).getMenuItems()
11715 ),
11716 []
11717 );
11718 const parent = (0, import_element31.useMemo)(
11719 () => menuItems.find((item) => item.id === parentId),
11720 [menuItems, parentId]
11721 );
11722 const navigationKey = parent ? `drilldown-${parent.id}` : "root";
11723 const handleNavigate = ({
11724 id,
11725 direction
11726 }) => {
11727 setAnimationDirection(direction);
11728 setParentId(id);
11729 };
11730 const handleDropdownToggle = (dropdownId) => {
11731 setParentDropdownId(
11732 parentDropdownId === dropdownId ? void 0 : dropdownId
11733 );
11734 };
11735 const items = (0, import_element31.useMemo)(
11736 () => menuItems.filter((item) => item.parent === parentId),
11737 [menuItems, parentId]
11738 );
11739 const hasRealIcons = items.some((item) => !!item.icon);
11740 return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
11741 NavigationScreen,
11742 {
11743 isRoot: !parent,
11744 title: parent ? parent.label : "",
11745 backMenuItem: parent?.parent,
11746 backButtonRef,
11747 animationDirection: animationDirection || void 0,
11748 navigationKey,
11749 onNavigate: handleNavigate,
11750 content: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { role: "list", children: items.map((item) => {
11751 if (item.parent_type === "dropdown") {
11752 return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
11753 DropdownItem,
11754 {
11755 id: item.id,
11756 icon: item.icon,
11757 shouldShowPlaceholder: hasRealIcons,
11758 isExpanded: parentDropdownId === item.id,
11759 onToggle: () => handleDropdownToggle(item.id),
11760 children: item.label
11761 },
11762 item.id
11763 );
11764 }
11765 if (item.parent_type === "drilldown") {
11766 return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
11767 DrilldownItem,
11768 {
11769 id: item.id,
11770 icon: item.icon,
11771 shouldShowPlaceholder: hasRealIcons,
11772 onNavigate: handleNavigate,
11773 children: item.label
11774 },
11775 item.id
11776 );
11777 }
11778 return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
11779 NavigationItem,
11780 {
11781 to: item.to,
11782 icon: item.icon,
11783 shouldShowPlaceholder: hasRealIcons,
11784 children: item.label
11785 },
11786 item.id
11787 );
11788 }) })
11789 }
11790 );
11791 }
11792 var navigation_default2 = Navigation2;
11793
11794 // packages/boot/build-module/components/save-button/index.mjs
11795 var import_element33 = __toESM(require_element(), 1);
11796 var import_data6 = __toESM(require_data(), 1);
11797 var import_i18n8 = __toESM(require_i18n(), 1);
11798 var import_core_data2 = __toESM(require_core_data(), 1);
11799 var import_keycodes = __toESM(require_keycodes(), 1);
11800 var import_editor2 = __toESM(require_editor(), 1);
11801 var import_components8 = __toESM(require_components(), 1);
11802
11803 // packages/boot/build-module/components/save-panel/use-save-shortcut.mjs
11804 var import_element32 = __toESM(require_element(), 1);
11805 var import_keyboard_shortcuts = __toESM(require_keyboard_shortcuts(), 1);
11806 var import_i18n7 = __toESM(require_i18n(), 1);
11807 var import_data5 = __toESM(require_data(), 1);
11808 var import_core_data = __toESM(require_core_data(), 1);
11809 var import_editor = __toESM(require_editor(), 1);
11810 var shortcutName = "core/boot/save";
11811 function useSaveShortcut({
11812 openSavePanel
11813 }) {
11814 const { __experimentalGetDirtyEntityRecords, isSavingEntityRecord } = (0, import_data5.useSelect)(import_core_data.store);
11815 const { hasNonPostEntityChanges, isPostSavingLocked } = (0, import_data5.useSelect)(import_editor.store);
11816 const { savePost } = (0, import_data5.useDispatch)(import_editor.store);
11817 const { registerShortcut, unregisterShortcut } = (0, import_data5.useDispatch)(
11818 import_keyboard_shortcuts.store
11819 );
11820 (0, import_element32.useEffect)(() => {
11821 registerShortcut({
11822 name: shortcutName,
11823 category: "global",
11824 description: (0, import_i18n7.__)("Save your changes."),
11825 keyCombination: {
11826 modifier: "primary",
11827 character: "s"
11828 }
11829 });
11830 return () => {
11831 unregisterShortcut(shortcutName);
11832 };
11833 }, [registerShortcut, unregisterShortcut]);
11834 (0, import_keyboard_shortcuts.useShortcut)(shortcutName, (event) => {
11835 event.preventDefault();
11836 const dirtyEntityRecords = __experimentalGetDirtyEntityRecords();
11837 const hasDirtyEntities = !!dirtyEntityRecords.length;
11838 const isSaving = dirtyEntityRecords.some(
11839 (record) => isSavingEntityRecord(record.kind, record.name, record.key)
11840 );
11841 if (!hasDirtyEntities || isSaving) {
11842 return;
11843 }
11844 if (hasNonPostEntityChanges()) {
11845 openSavePanel();
11846 } else if (!isPostSavingLocked()) {
11847 savePost();
11848 }
11849 });
11850 }
11851
11852 // packages/boot/build-module/components/save-button/index.mjs
11853 var import_jsx_runtime44 = __toESM(require_jsx_runtime(), 1);
11854 var STYLE_HASH_ATTRIBUTE21 = "data-wp-hash";
11855 function getRuntime21() {
11856 const globalScope = globalThis;
11857 if (globalScope.__wpStyleRuntime) {
11858 return globalScope.__wpStyleRuntime;
11859 }
11860 globalScope.__wpStyleRuntime = {
11861 documents: /* @__PURE__ */ new Map(),
11862 styles: /* @__PURE__ */ new Map(),
11863 injectedStyles: /* @__PURE__ */ new WeakMap()
11864 };
11865 if (typeof document !== "undefined") {
11866 registerDocument21(document);
11867 }
11868 return globalScope.__wpStyleRuntime;
11869 }
11870 function documentContainsStyleHash21(targetDocument, hash) {
11871 if (!targetDocument.head) {
11872 return false;
11873 }
11874 for (const style of targetDocument.head.querySelectorAll(
11875 `style[${STYLE_HASH_ATTRIBUTE21}]`
11876 )) {
11877 if (style.getAttribute(STYLE_HASH_ATTRIBUTE21) === hash) {
11878 return true;
11879 }
11880 }
11881 return false;
11882 }
11883 function injectStyle21(targetDocument, hash, css) {
11884 if (!targetDocument.head) {
11885 return;
11886 }
11887 const runtime = getRuntime21();
11888 let injectedStyles = runtime.injectedStyles.get(targetDocument);
11889 if (!injectedStyles) {
11890 injectedStyles = /* @__PURE__ */ new Set();
11891 runtime.injectedStyles.set(targetDocument, injectedStyles);
11892 }
11893 if (injectedStyles.has(hash)) {
11894 return;
11895 }
11896 if (documentContainsStyleHash21(targetDocument, hash)) {
11897 injectedStyles.add(hash);
11898 return;
11899 }
11900 const style = targetDocument.createElement("style");
11901 style.setAttribute(STYLE_HASH_ATTRIBUTE21, hash);
11902 style.appendChild(targetDocument.createTextNode(css));
11903 targetDocument.head.appendChild(style);
11904 injectedStyles.add(hash);
11905 }
11906 function registerDocument21(targetDocument) {
11907 const runtime = getRuntime21();
11908 runtime.documents.set(
11909 targetDocument,
11910 (runtime.documents.get(targetDocument) ?? 0) + 1
11911 );
11912 for (const [hash, css] of runtime.styles) {
11913 injectStyle21(targetDocument, hash, css);
11914 }
11915 return () => {
11916 const count = runtime.documents.get(targetDocument);
11917 if (count === void 0) {
11918 return;
11919 }
11920 if (count <= 1) {
11921 runtime.documents.delete(targetDocument);
11922 return;
11923 }
11924 runtime.documents.set(targetDocument, count - 1);
11925 };
11926 }
11927 function registerStyle21(hash, css) {
11928 const runtime = getRuntime21();
11929 runtime.styles.set(hash, css);
11930 for (const targetDocument of runtime.documents.keys()) {
11931 injectStyle21(targetDocument, hash, css);
11932 }
11933 }
11934 if (typeof process === "undefined" || true) {
11935 registerStyle21("1c6bdcf0b8", "._9c7a13851fe5f446__save-button{width:100%}._266ea24d4569bd10__shortcut:not(:first-child){margin-inline-start:8px}");
11936 }
11937 var style_module_default5 = { "save-button": "_9c7a13851fe5f446__save-button", "shortcut": "_266ea24d4569bd10__shortcut" };
11938 function SaveButton() {
11939 const [isSaveViewOpen, setIsSaveViewOpened] = (0, import_element33.useState)(false);
11940 const { isSaving, dirtyEntityRecordsCount } = (0, import_data6.useSelect)((select) => {
11941 const { isSavingEntityRecord, __experimentalGetDirtyEntityRecords } = select(import_core_data2.store);
11942 const dirtyEntityRecords = __experimentalGetDirtyEntityRecords();
11943 return {
11944 isSaving: dirtyEntityRecords.some(
11945 (record) => isSavingEntityRecord(record.kind, record.name, record.key)
11946 ),
11947 dirtyEntityRecordsCount: dirtyEntityRecords.length
11948 };
11949 }, []);
11950 const [showSavedState, setShowSavedState] = (0, import_element33.useState)(false);
11951 (0, import_element33.useEffect)(() => {
11952 if (isSaving) {
11953 setShowSavedState(true);
11954 }
11955 }, [isSaving]);
11956 const hasChanges = dirtyEntityRecordsCount > 0;
11957 (0, import_element33.useEffect)(() => {
11958 if (!isSaving && hasChanges) {
11959 setShowSavedState(false);
11960 }
11961 }, [isSaving, hasChanges]);
11962 function hideSavedState() {
11963 if (showSavedState) {
11964 setShowSavedState(false);
11965 }
11966 }
11967 const shouldShowButton = hasChanges || showSavedState;
11968 useSaveShortcut({ openSavePanel: () => setIsSaveViewOpened(true) });
11969 const shortcut = {
11970 displayShortcut: import_keycodes.displayShortcut.primary("s"),
11971 ariaKeyShortcut: import_keycodes.ariaKeyShortcut.primary("s"),
11972 label: import_keycodes.shortcutAriaLabel.primary("s")
11973 };
11974 const { descriptionId, targetProps } = useKeyboardShortcutProps({
11975 shortcut
11976 });
11977 if (!shouldShowButton) {
11978 return null;
11979 }
11980 const isInSavedState = showSavedState && !hasChanges;
11981 const disabled2 = isSaving || isInSavedState;
11982 const getLabel = () => {
11983 if (isInSavedState) {
11984 return (0, import_i18n8.__)("Saved");
11985 }
11986 return (0, import_i18n8.sprintf)(
11987 // translators: %d: number of unsaved changes (number).
11988 (0, import_i18n8._n)(
11989 "Review %d change…",
11990 "Review %d changes…",
11991 dirtyEntityRecordsCount
11992 ),
11993 dirtyEntityRecordsCount
11994 );
11995 };
11996 const label = getLabel();
11997 return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_jsx_runtime44.Fragment, { children: [
11998 /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(tooltip_exports.Root, { children: [
11999 /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
12000 tooltip_exports.Trigger,
12001 {
12002 ...targetProps,
12003 render: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
12004 import_components8.Button,
12005 {
12006 variant: "primary",
12007 size: "compact",
12008 onClick: () => setIsSaveViewOpened(true),
12009 onBlur: hideSavedState,
12010 disabled: disabled2,
12011 accessibleWhenDisabled: true,
12012 isBusy: isSaving,
12013 className: style_module_default5["save-button"],
12014 icon: isInSavedState ? check_default : void 0
12015 }
12016 ),
12017 children: [
12018 label,
12019 descriptionId && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
12020 KeyboardShortcutDescription,
12021 {
12022 descriptionId,
12023 shortcut
12024 }
12025 )
12026 ]
12027 }
12028 ),
12029 /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(tooltip_exports.Popup, { children: [
12030 hasChanges && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { children: label }),
12031 /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
12032 KeyboardShortcutDisplay,
12033 {
12034 className: style_module_default5.shortcut,
12035 shortcut
12036 }
12037 )
12038 ] })
12039 ] }),
12040 isSaveViewOpen && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
12041 import_components8.Modal,
12042 {
12043 title: (0, import_i18n8.__)("Review changes"),
12044 onRequestClose: () => setIsSaveViewOpened(false),
12045 size: "small",
12046 children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
12047 import_editor2.EntitiesSavedStates,
12048 {
12049 close: () => setIsSaveViewOpened(false),
12050 variant: "inline"
12051 }
12052 )
12053 }
12054 )
12055 ] });
12056 }
12057
12058 // packages/boot/build-module/components/sidebar/index.mjs
12059 var import_jsx_runtime45 = __toESM(require_jsx_runtime(), 1);
12060 var STYLE_HASH_ATTRIBUTE22 = "data-wp-hash";
12061 function getRuntime22() {
12062 const globalScope = globalThis;
12063 if (globalScope.__wpStyleRuntime) {
12064 return globalScope.__wpStyleRuntime;
12065 }
12066 globalScope.__wpStyleRuntime = {
12067 documents: /* @__PURE__ */ new Map(),
12068 styles: /* @__PURE__ */ new Map(),
12069 injectedStyles: /* @__PURE__ */ new WeakMap()
12070 };
12071 if (typeof document !== "undefined") {
12072 registerDocument22(document);
12073 }
12074 return globalScope.__wpStyleRuntime;
12075 }
12076 function documentContainsStyleHash22(targetDocument, hash) {
12077 if (!targetDocument.head) {
12078 return false;
12079 }
12080 for (const style of targetDocument.head.querySelectorAll(
12081 `style[${STYLE_HASH_ATTRIBUTE22}]`
12082 )) {
12083 if (style.getAttribute(STYLE_HASH_ATTRIBUTE22) === hash) {
12084 return true;
12085 }
12086 }
12087 return false;
12088 }
12089 function injectStyle22(targetDocument, hash, css) {
12090 if (!targetDocument.head) {
12091 return;
12092 }
12093 const runtime = getRuntime22();
12094 let injectedStyles = runtime.injectedStyles.get(targetDocument);
12095 if (!injectedStyles) {
12096 injectedStyles = /* @__PURE__ */ new Set();
12097 runtime.injectedStyles.set(targetDocument, injectedStyles);
12098 }
12099 if (injectedStyles.has(hash)) {
12100 return;
12101 }
12102 if (documentContainsStyleHash22(targetDocument, hash)) {
12103 injectedStyles.add(hash);
12104 return;
12105 }
12106 const style = targetDocument.createElement("style");
12107 style.setAttribute(STYLE_HASH_ATTRIBUTE22, hash);
12108 style.appendChild(targetDocument.createTextNode(css));
12109 targetDocument.head.appendChild(style);
12110 injectedStyles.add(hash);
12111 }
12112 function registerDocument22(targetDocument) {
12113 const runtime = getRuntime22();
12114 runtime.documents.set(
12115 targetDocument,
12116 (runtime.documents.get(targetDocument) ?? 0) + 1
12117 );
12118 for (const [hash, css] of runtime.styles) {
12119 injectStyle22(targetDocument, hash, css);
12120 }
12121 return () => {
12122 const count = runtime.documents.get(targetDocument);
12123 if (count === void 0) {
12124 return;
12125 }
12126 if (count <= 1) {
12127 runtime.documents.delete(targetDocument);
12128 return;
12129 }
12130 runtime.documents.set(targetDocument, count - 1);
12131 };
12132 }
12133 function registerStyle22(hash, css) {
12134 const runtime = getRuntime22();
12135 runtime.styles.set(hash, css);
12136 for (const targetDocument of runtime.documents.keys()) {
12137 injectStyle22(targetDocument, hash, css);
12138 }
12139 }
12140 if (typeof process === "undefined" || true) {
12141 registerStyle22("2f8ba86269", "._52f77809bed01e5e__scrollable{display:flex;flex-direction:column;height:100%;overflow:auto;position:relative}._6d2e23af506664fb__content{contain:content;flex-grow:1;position:relative}.c95a8ac9c6876d6e__footer{padding-block-end:8px;padding-block-start:16px;padding-inline-end:8px;padding-inline-start:16px}._28ec24681975e557__back-button{margin-block-end:8px;margin-block-start:16px;margin-inline-end:12px;margin-inline-start:12px}");
12142 }
12143 var style_module_default6 = { "scrollable": "_52f77809bed01e5e__scrollable", "content": "_6d2e23af506664fb__content", "footer": "c95a8ac9c6876d6e__footer", "back-button": "_28ec24681975e557__back-button" };
12144 function DashboardBackButton() {
12145 const dashboardLink = (0, import_data7.useSelect)(
12146 (select) => select(store).getDashboardLink(),
12147 []
12148 );
12149 return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
12150 import_components9.Button,
12151 {
12152 __next40pxDefaultSize: true,
12153 className: style_module_default6["back-button"],
12154 href: dashboardLink || "/",
12155 icon: (0, import_i18n9.isRTL)() ? chevron_right_default : chevron_left_default,
12156 label: (0, import_i18n9.__)("Go to the Dashboard"),
12157 children: (0, import_i18n9.__)("Dashboard")
12158 }
12159 );
12160 }
12161 function Sidebar() {
12162 return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: style_module_default6.scrollable, children: [
12163 /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(DashboardBackButton, {}),
12164 /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: style_module_default6.content, children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(navigation_default2, {}) }),
12165 /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: style_module_default6.footer, children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(SaveButton, {}) })
12166 ] });
12167 }
12168
12169 // packages/boot/build-module/components/save-panel/index.mjs
12170 var import_element34 = __toESM(require_element(), 1);
12171 var import_components10 = __toESM(require_components(), 1);
12172 var import_editor3 = __toESM(require_editor(), 1);
12173 var import_i18n10 = __toESM(require_i18n(), 1);
12174 var import_jsx_runtime46 = __toESM(require_jsx_runtime(), 1);
12175 var STYLE_HASH_ATTRIBUTE23 = "data-wp-hash";
12176 function getRuntime23() {
12177 const globalScope = globalThis;
12178 if (globalScope.__wpStyleRuntime) {
12179 return globalScope.__wpStyleRuntime;
12180 }
12181 globalScope.__wpStyleRuntime = {
12182 documents: /* @__PURE__ */ new Map(),
12183 styles: /* @__PURE__ */ new Map(),
12184 injectedStyles: /* @__PURE__ */ new WeakMap()
12185 };
12186 if (typeof document !== "undefined") {
12187 registerDocument23(document);
12188 }
12189 return globalScope.__wpStyleRuntime;
12190 }
12191 function documentContainsStyleHash23(targetDocument, hash) {
12192 if (!targetDocument.head) {
12193 return false;
12194 }
12195 for (const style of targetDocument.head.querySelectorAll(
12196 `style[${STYLE_HASH_ATTRIBUTE23}]`
12197 )) {
12198 if (style.getAttribute(STYLE_HASH_ATTRIBUTE23) === hash) {
12199 return true;
12200 }
12201 }
12202 return false;
12203 }
12204 function injectStyle23(targetDocument, hash, css) {
12205 if (!targetDocument.head) {
12206 return;
12207 }
12208 const runtime = getRuntime23();
12209 let injectedStyles = runtime.injectedStyles.get(targetDocument);
12210 if (!injectedStyles) {
12211 injectedStyles = /* @__PURE__ */ new Set();
12212 runtime.injectedStyles.set(targetDocument, injectedStyles);
12213 }
12214 if (injectedStyles.has(hash)) {
12215 return;
12216 }
12217 if (documentContainsStyleHash23(targetDocument, hash)) {
12218 injectedStyles.add(hash);
12219 return;
12220 }
12221 const style = targetDocument.createElement("style");
12222 style.setAttribute(STYLE_HASH_ATTRIBUTE23, hash);
12223 style.appendChild(targetDocument.createTextNode(css));
12224 targetDocument.head.appendChild(style);
12225 injectedStyles.add(hash);
12226 }
12227 function registerDocument23(targetDocument) {
12228 const runtime = getRuntime23();
12229 runtime.documents.set(
12230 targetDocument,
12231 (runtime.documents.get(targetDocument) ?? 0) + 1
12232 );
12233 for (const [hash, css] of runtime.styles) {
12234 injectStyle23(targetDocument, hash, css);
12235 }
12236 return () => {
12237 const count = runtime.documents.get(targetDocument);
12238 if (count === void 0) {
12239 return;
12240 }
12241 if (count <= 1) {
12242 runtime.documents.delete(targetDocument);
12243 return;
12244 }
12245 runtime.documents.set(targetDocument, count - 1);
12246 };
12247 }
12248 function registerStyle23(hash, css) {
12249 const runtime = getRuntime23();
12250 runtime.styles.set(hash, css);
12251 for (const targetDocument of runtime.documents.keys()) {
12252 injectStyle23(targetDocument, hash, css);
12253 }
12254 }
12255 if (typeof process === "undefined" || true) {
12256 registerStyle23("df1a59bc40", "@media (min-width:600px){._77efcb9ca06f5774__modal{width:600px}}");
12257 }
12258 var style_module_default7 = { "modal": "_77efcb9ca06f5774__modal" };
12259 function SavePanel() {
12260 const [isOpen, setIsOpen] = (0, import_element34.useState)(false);
12261 useSaveShortcut({
12262 openSavePanel: () => setIsOpen(true)
12263 });
12264 if (!isOpen) {
12265 return false;
12266 }
12267 return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
12268 import_components10.Modal,
12269 {
12270 className: style_module_default7.modal,
12271 onRequestClose: () => setIsOpen(false),
12272 title: (0, import_i18n10.__)("Review changes"),
12273 size: "small",
12274 children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
12275 import_editor3.EntitiesSavedStates,
12276 {
12277 close: () => setIsOpen(false),
12278 variant: "inline"
12279 }
12280 )
12281 }
12282 );
12283 }
12284
12285 // packages/boot/build-module/components/canvas-renderer/index.mjs
12286 var import_element37 = __toESM(require_element(), 1);
12287
12288 // packages/boot/build-module/components/canvas/index.mjs
12289 var import_element36 = __toESM(require_element(), 1);
12290 var import_components12 = __toESM(require_components(), 1);
12291 var import_i18n14 = __toESM(require_i18n(), 1);
12292 var import_data10 = __toESM(require_data(), 1);
12293 var import_core_data5 = __toESM(require_core_data(), 1);
12294 import { useNavigate as useNavigate2, useSearch as useSearch2 } from "@wordpress/route";
12295
12296 // packages/boot/build-module/components/canvas/back-button.mjs
12297 var import_components11 = __toESM(require_components(), 1);
12298 var import_i18n11 = __toESM(require_i18n(), 1);
12299 var import_jsx_runtime47 = __toESM(require_jsx_runtime(), 1);
12300 function BootBackButton({ length }) {
12301 const handleBack = () => {
12302 window.history.back();
12303 };
12304 if (length > 1) {
12305 return null;
12306 }
12307 return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
12308 import_components11.Button,
12309 {
12310 size: "compact",
12311 onClick: handleBack,
12312 label: (0, import_i18n11.__)("Back"),
12313 icon: (0, import_i18n11.isRTL)() ? chevron_right_default : chevron_left_default
12314 }
12315 );
12316 }
12317
12318 // packages/boot/build-module/components/canvas/site-preview.mjs
12319 var import_i18n12 = __toESM(require_i18n(), 1);
12320 var import_data8 = __toESM(require_data(), 1);
12321 var import_core_data3 = __toESM(require_core_data(), 1);
12322 var import_dom20 = __toESM(require_dom(), 1);
12323 var import_url = __toESM(require_url(), 1);
12324 var import_jsx_runtime48 = __toESM(require_jsx_runtime(), 1);
12325 function SitePreview() {
12326 const siteUrl = (0, import_data8.useSelect)((select) => {
12327 const siteData = select(import_core_data3.store).getEntityRecord(
12328 "root",
12329 "__unstableBase"
12330 );
12331 return siteData?.home;
12332 }, []);
12333 if (typeof siteUrl !== "string" || !siteUrl) {
12334 return null;
12335 }
12336 return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
12337 "iframe",
12338 {
12339 src: (0, import_url.addQueryArgs)(siteUrl, {
12340 // Parameter for hiding the admin bar.
12341 wp_site_preview: 1
12342 }),
12343 title: (0, import_i18n12.__)("Site Preview"),
12344 style: {
12345 display: "block",
12346 width: "100%",
12347 height: "100%",
12348 backgroundColor: "#fff"
12349 },
12350 onLoad: (event) => {
12351 const iframeDocument = event.target.contentDocument;
12352 if (!iframeDocument) {
12353 return;
12354 }
12355 import_dom20.focus.focusable.find(iframeDocument.documentElement).forEach((element) => {
12356 element.style.pointerEvents = "none";
12357 element.tabIndex = -1;
12358 element.setAttribute("aria-hidden", "true");
12359 });
12360 }
12361 }
12362 );
12363 }
12364
12365 // packages/boot/build-module/components/canvas/use-navigate-to-entity-record.mjs
12366 var import_element35 = __toESM(require_element(), 1);
12367 var import_data9 = __toESM(require_data(), 1);
12368 var import_core_data4 = __toESM(require_core_data(), 1);
12369 var import_editor4 = __toESM(require_editor(), 1);
12370 var import_notices = __toESM(require_notices(), 1);
12371 var import_html_entities = __toESM(require_html_entities(), 1);
12372 var import_i18n13 = __toESM(require_i18n(), 1);
12373 import {
12374 useNavigate,
12375 useSearch,
12376 privateApis as routePrivateApis3
12377 } from "@wordpress/route";
12378
12379 // packages/boot/build-module/components/canvas/viewport.mjs
12380 var DEFAULT_DEVICE_TYPE = "Desktop";
12381 var VALID_VIEWPORTS = ["desktop", "tablet", "mobile"];
12382 function isValidViewport(viewport) {
12383 return !!viewport && VALID_VIEWPORTS.includes(viewport.toLowerCase());
12384 }
12385 function getDeviceType(viewport) {
12386 if (!isValidViewport(viewport)) {
12387 return DEFAULT_DEVICE_TYPE;
12388 }
12389 const value = viewport.toLowerCase();
12390 return value.charAt(0).toUpperCase() + value.slice(1);
12391 }
12392
12393 // packages/boot/build-module/components/canvas/use-navigate-to-entity-record.mjs
12394 var { useCanGoBack, useRouter: useRouter2 } = unlock2(routePrivateApis3);
12395 function useNavigateToEntityRecord() {
12396 const navigate = useNavigate();
12397 const search = useSearch({ strict: false });
12398 const registry = (0, import_data9.useRegistry)();
12399 const getEntityLink2 = (0, import_data9.useSelect)(
12400 (select) => select(store).getEntityLink,
12401 []
12402 );
12403 const router = useRouter2();
12404 const canGoBack = useCanGoBack();
12405 const onNavigateToEntityRecord = (0, import_element35.useCallback)(
12406 (params) => {
12407 const currentPostType = registry.select(import_editor4.store).getCurrentPostType();
12408 const currentPostId = registry.select(import_editor4.store).getCurrentPostId();
12409 const edits = registry.select(import_core_data4.store).getEntityRecordEdits(
12410 "postType",
12411 currentPostType,
12412 currentPostId
12413 );
12414 const selectedBlock = edits?.selection?.selectionStart?.clientId;
12415 if (selectedBlock) {
12416 navigate({
12417 search: (previous) => ({
12418 ...previous,
12419 selectedBlock
12420 }),
12421 replace: true
12422 });
12423 }
12424 const requestedViewport = params.viewport?.toLowerCase();
12425 const hasRequestedViewport = isValidViewport(requestedViewport);
12426 const to = getEntityLink2(params.postType, params.postId);
12427 if (to) {
12428 navigate({
12429 to,
12430 search: () => ({
12431 focusMode: true,
12432 ...hasRequestedViewport ? { viewport: requestedViewport } : {}
12433 })
12434 });
12435 }
12436 },
12437 [navigate, registry, getEntityLink2]
12438 );
12439 const isFocusMode = !!search.focusMode;
12440 const onNavigateToPreviousEntityRecord = (0, import_element35.useMemo)(
12441 () => isFocusMode && canGoBack ? () => router.history.back() : void 0,
12442 [isFocusMode, canGoBack, router]
12443 );
12444 return { onNavigateToEntityRecord, onNavigateToPreviousEntityRecord };
12445 }
12446 function useActionPerformed(postType) {
12447 const navigate = useNavigate();
12448 const { createSuccessNotice } = (0, import_data9.useDispatch)(import_notices.store);
12449 const getEntityLink2 = (0, import_data9.useSelect)(
12450 (select) => select(store).getEntityLink,
12451 []
12452 );
12453 return (0, import_element35.useCallback)(
12454 (actionId, items) => {
12455 switch (actionId) {
12456 case "move-to-trash":
12457 case "delete-post": {
12458 const to = postType && getEntityLink2(postType);
12459 if (to) {
12460 navigate({ to, search: () => ({}) });
12461 }
12462 break;
12463 }
12464 case "duplicate-post": {
12465 const newItem = items[0];
12466 const to = getEntityLink2(newItem.type, newItem.id);
12467 if (!to) {
12468 break;
12469 }
12470 const title = typeof newItem.title === "string" ? newItem.title : newItem.title?.rendered;
12471 createSuccessNotice(
12472 (0, import_i18n13.sprintf)(
12473 // translators: %s: Title of the created post, e.g: "Hello world".
12474 (0, import_i18n13.__)('"%s" successfully created.'),
12475 (0, import_html_entities.decodeEntities)(title ?? "") || (0, import_i18n13.__)("(no title)")
12476 ),
12477 {
12478 type: "snackbar",
12479 id: "duplicate-post-action",
12480 actions: [
12481 {
12482 label: (0, import_i18n13.__)("Edit"),
12483 onClick: () => navigate({ to })
12484 }
12485 ]
12486 }
12487 );
12488 break;
12489 }
12490 }
12491 },
12492 [navigate, createSuccessNotice, getEntityLink2, postType]
12493 );
12494 }
12495
12496 // packages/boot/build-module/components/canvas/index.mjs
12497 var import_jsx_runtime49 = __toESM(require_jsx_runtime(), 1);
12498 function Canvas({ canvas }) {
12499 const [Editor, setEditor] = (0, import_element36.useState)(null);
12500 const navigate = useNavigate2();
12501 const { onNavigateToEntityRecord, onNavigateToPreviousEntityRecord } = useNavigateToEntityRecord();
12502 const onActionPerformed = useActionPerformed(canvas.postType);
12503 const viewport = useSearch2({
12504 strict: false,
12505 select: (search) => search.viewport
12506 });
12507 const hasEntity = !!(canvas.postType && canvas.postId);
12508 const isBlockTheme = (0, import_data10.useSelect)(
12509 (select) => select(import_core_data5.store).getCurrentTheme()?.is_block_theme,
12510 []
12511 );
12512 const { editLink, isTrashed } = (0, import_data10.useSelect)(
12513 (select) => {
12514 if (!canvas.postType || !canvas.postId) {
12515 return { editLink: void 0, isTrashed: false };
12516 }
12517 const record = select(import_core_data5.store).getEntityRecord(
12518 "postType",
12519 canvas.postType,
12520 canvas.postId
12521 );
12522 return {
12523 editLink: select(store).getEntityLink(
12524 canvas.postType,
12525 canvas.postId
12526 ),
12527 isTrashed: record?.status === "trash"
12528 };
12529 },
12530 [canvas.postType, canvas.postId]
12531 );
12532 const settings = (0, import_element36.useMemo)(
12533 () => ({
12534 isPreviewMode: canvas.isPreview,
12535 styles: canvas.isPreview ? [{ css: "body{min-height:100vh;}" }] : [],
12536 onNavigateToEntityRecord,
12537 onNavigateToPreviousEntityRecord
12538 }),
12539 [
12540 canvas.isPreview,
12541 onNavigateToEntityRecord,
12542 onNavigateToPreviousEntityRecord
12543 ]
12544 );
12545 (0, import_element36.useEffect)(() => {
12546 import("@wordpress/lazy-editor").then((module) => {
12547 setEditor(() => module.Editor);
12548 }).catch((error) => {
12549 console.error("Failed to load lazy editor:", error);
12550 });
12551 }, []);
12552 if (!hasEntity && isBlockTheme === false) {
12553 return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(SitePreview, {});
12554 }
12555 if (!Editor || !hasEntity && isBlockTheme === void 0) {
12556 return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
12557 "div",
12558 {
12559 style: {
12560 display: "flex",
12561 justifyContent: "center",
12562 alignItems: "center",
12563 height: "100%",
12564 padding: "2rem"
12565 },
12566 children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_components12.Spinner, {})
12567 }
12568 );
12569 }
12570 const backButton = !canvas.isPreview ? ({ length }) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(BootBackButton, { length }) : void 0;
12571 return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { style: { height: "100%", position: "relative" }, children: [
12572 /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
12573 "div",
12574 {
12575 style: { height: "100%" },
12576 inert: canvas.isPreview ? "true" : void 0,
12577 children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
12578 Editor,
12579 {
12580 postType: canvas.postType,
12581 postId: canvas.postId,
12582 renderingMode: canvas.renderingMode,
12583 settings,
12584 backButton,
12585 onActionPerformed,
12586 initialViewport: getDeviceType(viewport)
12587 }
12588 )
12589 }
12590 ),
12591 canvas.isPreview && editLink && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
12592 "div",
12593 {
12594 onClick: isTrashed ? void 0 : () => navigate({ to: editLink }),
12595 onKeyDown: (e) => {
12596 if (isTrashed) {
12597 return;
12598 }
12599 if (e.key === "Enter" || e.key === " ") {
12600 e.preventDefault();
12601 navigate({ to: editLink });
12602 }
12603 },
12604 style: {
12605 position: "absolute",
12606 inset: 0,
12607 cursor: isTrashed ? "default" : "pointer",
12608 zIndex: 1
12609 },
12610 role: "button",
12611 tabIndex: 0,
12612 "aria-disabled": isTrashed,
12613 "aria-label": (0, import_i18n14.__)("Edit")
12614 }
12615 )
12616 ] });
12617 }
12618
12619 // packages/boot/build-module/components/canvas-renderer/index.mjs
12620 var import_jsx_runtime50 = __toESM(require_jsx_runtime(), 1);
12621 function CanvasRenderer({
12622 canvas,
12623 routeContentModule
12624 }) {
12625 const [CustomCanvas, setCustomCanvas] = (0, import_element37.useState)(null);
12626 (0, import_element37.useEffect)(() => {
12627 if (canvas === null && routeContentModule) {
12628 import(routeContentModule).then((module) => {
12629 setCustomCanvas(() => module.canvas);
12630 }).catch((error) => {
12631 console.error("Failed to load custom canvas:", error);
12632 });
12633 } else {
12634 setCustomCanvas(null);
12635 }
12636 }, [canvas, routeContentModule]);
12637 if (canvas === void 0) {
12638 return null;
12639 }
12640 if (canvas === null) {
12641 if (!CustomCanvas) {
12642 return null;
12643 }
12644 return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(CustomCanvas, {});
12645 }
12646 return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Canvas, { canvas });
12647 }
12648
12649 // packages/boot/build-module/components/error-boundary/index.mjs
12650 var import_element38 = __toESM(require_element(), 1);
12651 var import_i18n15 = __toESM(require_i18n(), 1);
12652 var import_components13 = __toESM(require_components(), 1);
12653 var import_compose3 = __toESM(require_compose(), 1);
12654 var import_jsx_runtime51 = __toESM(require_jsx_runtime(), 1);
12655 var STYLE_HASH_ATTRIBUTE24 = "data-wp-hash";
12656 function getRuntime24() {
12657 const globalScope = globalThis;
12658 if (globalScope.__wpStyleRuntime) {
12659 return globalScope.__wpStyleRuntime;
12660 }
12661 globalScope.__wpStyleRuntime = {
12662 documents: /* @__PURE__ */ new Map(),
12663 styles: /* @__PURE__ */ new Map(),
12664 injectedStyles: /* @__PURE__ */ new WeakMap()
12665 };
12666 if (typeof document !== "undefined") {
12667 registerDocument24(document);
12668 }
12669 return globalScope.__wpStyleRuntime;
12670 }
12671 function documentContainsStyleHash24(targetDocument, hash) {
12672 if (!targetDocument.head) {
12673 return false;
12674 }
12675 for (const style of targetDocument.head.querySelectorAll(
12676 `style[${STYLE_HASH_ATTRIBUTE24}]`
12677 )) {
12678 if (style.getAttribute(STYLE_HASH_ATTRIBUTE24) === hash) {
12679 return true;
12680 }
12681 }
12682 return false;
12683 }
12684 function injectStyle24(targetDocument, hash, css) {
12685 if (!targetDocument.head) {
12686 return;
12687 }
12688 const runtime = getRuntime24();
12689 let injectedStyles = runtime.injectedStyles.get(targetDocument);
12690 if (!injectedStyles) {
12691 injectedStyles = /* @__PURE__ */ new Set();
12692 runtime.injectedStyles.set(targetDocument, injectedStyles);
12693 }
12694 if (injectedStyles.has(hash)) {
12695 return;
12696 }
12697 if (documentContainsStyleHash24(targetDocument, hash)) {
12698 injectedStyles.add(hash);
12699 return;
12700 }
12701 const style = targetDocument.createElement("style");
12702 style.setAttribute(STYLE_HASH_ATTRIBUTE24, hash);
12703 style.appendChild(targetDocument.createTextNode(css));
12704 targetDocument.head.appendChild(style);
12705 injectedStyles.add(hash);
12706 }
12707 function registerDocument24(targetDocument) {
12708 const runtime = getRuntime24();
12709 runtime.documents.set(
12710 targetDocument,
12711 (runtime.documents.get(targetDocument) ?? 0) + 1
12712 );
12713 for (const [hash, css] of runtime.styles) {
12714 injectStyle24(targetDocument, hash, css);
12715 }
12716 return () => {
12717 const count = runtime.documents.get(targetDocument);
12718 if (count === void 0) {
12719 return;
12720 }
12721 if (count <= 1) {
12722 runtime.documents.delete(targetDocument);
12723 return;
12724 }
12725 runtime.documents.set(targetDocument, count - 1);
12726 };
12727 }
12728 function registerStyle24(hash, css) {
12729 const runtime = getRuntime24();
12730 runtime.styles.set(hash, css);
12731 for (const targetDocument of runtime.documents.keys()) {
12732 injectStyle24(targetDocument, hash, css);
12733 }
12734 }
12735 if (typeof process === "undefined" || true) {
12736 registerStyle24("4780fe0b1b", "._4d71ad18128c9cb8__error-boundary{align-items:center;box-sizing:border-box;display:flex;justify-content:center;min-height:100%;padding:16px}");
12737 }
12738 var style_module_default8 = { "error-boundary": "_4d71ad18128c9cb8__error-boundary" };
12739 function CopyErrorButton({ error }) {
12740 const ref = (0, import_compose3.useCopyToClipboard)(() => error.stack ?? String(error));
12741 return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_components13.Button, { __next40pxDefaultSize: true, variant: "secondary", ref, children: (0, import_i18n15.__)("Copy error") });
12742 }
12743 var ErrorBoundary = class extends import_element38.Component {
12744 constructor(props) {
12745 super(props);
12746 this.state = { error: null };
12747 }
12748 static getDerivedStateFromError(error) {
12749 return { error };
12750 }
12751 render() {
12752 const { error } = this.state;
12753 if (!error) {
12754 return this.props.children;
12755 }
12756 return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: style_module_default8["error-boundary"], children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(empty_state_exports.Root, { children: [
12757 /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(empty_state_exports.Icon, { icon: caution_default }),
12758 /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(empty_state_exports.Title, { children: (0, import_i18n15.__)("Something went wrong") }),
12759 /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(empty_state_exports.Description, { children: (0, import_i18n15.__)(
12760 "This part of the screen could not be displayed. Reloading the page may help."
12761 ) }),
12762 /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(empty_state_exports.Actions, { children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(CopyErrorButton, { error }) })
12763 ] }) });
12764 }
12765 };
12766
12767 // packages/boot/build-module/components/plugin-area/index.mjs
12768 var import_data11 = __toESM(require_data(), 1);
12769 var import_i18n16 = __toESM(require_i18n(), 1);
12770 var import_notices2 = __toESM(require_notices(), 1);
12771 var import_plugins = __toESM(require_plugins(), 1);
12772 var import_jsx_runtime52 = __toESM(require_jsx_runtime(), 1);
12773 function PluginArea() {
12774 const { createErrorNotice } = (0, import_data11.useDispatch)(import_notices2.store);
12775 return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
12776 import_plugins.PluginArea,
12777 {
12778 onError: (name) => {
12779 createErrorNotice(
12780 (0, import_i18n16.sprintf)(
12781 /* translators: %s: plugin name */
12782 (0, import_i18n16.__)(
12783 'The "%s" plugin has encountered an error and cannot be rendered.'
12784 ),
12785 name
12786 )
12787 );
12788 }
12789 }
12790 );
12791 }
12792
12793 // packages/boot/build-module/components/app/use-route-title.mjs
12794 var import_element39 = __toESM(require_element(), 1);
12795 var import_data12 = __toESM(require_data(), 1);
12796 var import_core_data6 = __toESM(require_core_data(), 1);
12797 var import_i18n17 = __toESM(require_i18n(), 1);
12798 var import_html_entities2 = __toESM(require_html_entities(), 1);
12799 import { speak } from "@wordpress/a11y";
12800 import { privateApis as routePrivateApis4 } from "@wordpress/route";
12801 var { useLocation, useMatches: useMatches2 } = unlock2(routePrivateApis4);
12802 function useRouteTitle() {
12803 const location = useLocation();
12804 const matches = useMatches2();
12805 const currentMatch = matches[matches.length - 1];
12806 const routeTitle = currentMatch?.loaderData?.title;
12807 const siteTitle = (0, import_data12.useSelect)(
12808 (select) => select(import_core_data6.store).getEntityRecord(
12809 "root",
12810 "__unstableBase"
12811 )?.name,
12812 []
12813 );
12814 const isInitialLocationRef = (0, import_element39.useRef)(true);
12815 (0, import_element39.useEffect)(() => {
12816 isInitialLocationRef.current = false;
12817 }, [location]);
12818 (0, import_element39.useEffect)(() => {
12819 if (isInitialLocationRef.current) {
12820 return;
12821 }
12822 if (routeTitle && typeof routeTitle === "string" && siteTitle && typeof siteTitle === "string") {
12823 const decodedRouteTitle = (0, import_html_entities2.decodeEntities)(routeTitle);
12824 const decodedSiteTitle = (0, import_html_entities2.decodeEntities)(siteTitle);
12825 const formattedTitle = (0, import_i18n17.sprintf)(
12826 /* translators: Admin document title. 1: Admin screen name, 2: Site name. */
12827 (0, import_i18n17.__)("%1$s ‹ %2$s — WordPress"),
12828 decodedRouteTitle,
12829 decodedSiteTitle
12830 );
12831 document.title = formattedTitle;
12832 if (decodedRouteTitle) {
12833 speak(decodedRouteTitle, "assertive");
12834 }
12835 }
12836 }, [routeTitle, siteTitle, location]);
12837 }
12838
12839 // packages/boot/build-module/components/root/use-sync-body-background.mjs
12840 var import_element40 = __toESM(require_element(), 1);
12841 var import_compose4 = __toESM(require_compose(), 1);
12842 function useSyncBodyBackground() {
12843 const layoutRef = (0, import_element40.useRef)(null);
12844 (0, import_compose4.useIsomorphicLayoutEffect)(() => {
12845 if (!layoutRef.current) {
12846 return;
12847 }
12848 const body = layoutRef.current.ownerDocument.body;
12849 const bg = getComputedStyle(layoutRef.current).backgroundColor;
12850 if (!bg) {
12851 return;
12852 }
12853 const previousBackground = body.style.background;
12854 body.style.background = bg;
12855 return () => {
12856 body.style.background = previousBackground;
12857 };
12858 }, []);
12859 return layoutRef;
12860 }
12861
12862 // packages/boot/build-module/components/root/index.mjs
12863 var import_jsx_runtime53 = __toESM(require_jsx_runtime(), 1);
12864 var STYLE_HASH_ATTRIBUTE25 = "data-wp-hash";
12865 function getRuntime25() {
12866 const globalScope = globalThis;
12867 if (globalScope.__wpStyleRuntime) {
12868 return globalScope.__wpStyleRuntime;
12869 }
12870 globalScope.__wpStyleRuntime = {
12871 documents: /* @__PURE__ */ new Map(),
12872 styles: /* @__PURE__ */ new Map(),
12873 injectedStyles: /* @__PURE__ */ new WeakMap()
12874 };
12875 if (typeof document !== "undefined") {
12876 registerDocument25(document);
12877 }
12878 return globalScope.__wpStyleRuntime;
12879 }
12880 function documentContainsStyleHash25(targetDocument, hash) {
12881 if (!targetDocument.head) {
12882 return false;
12883 }
12884 for (const style of targetDocument.head.querySelectorAll(
12885 `style[${STYLE_HASH_ATTRIBUTE25}]`
12886 )) {
12887 if (style.getAttribute(STYLE_HASH_ATTRIBUTE25) === hash) {
12888 return true;
12889 }
12890 }
12891 return false;
12892 }
12893 function injectStyle25(targetDocument, hash, css) {
12894 if (!targetDocument.head) {
12895 return;
12896 }
12897 const runtime = getRuntime25();
12898 let injectedStyles = runtime.injectedStyles.get(targetDocument);
12899 if (!injectedStyles) {
12900 injectedStyles = /* @__PURE__ */ new Set();
12901 runtime.injectedStyles.set(targetDocument, injectedStyles);
12902 }
12903 if (injectedStyles.has(hash)) {
12904 return;
12905 }
12906 if (documentContainsStyleHash25(targetDocument, hash)) {
12907 injectedStyles.add(hash);
12908 return;
12909 }
12910 const style = targetDocument.createElement("style");
12911 style.setAttribute(STYLE_HASH_ATTRIBUTE25, hash);
12912 style.appendChild(targetDocument.createTextNode(css));
12913 targetDocument.head.appendChild(style);
12914 injectedStyles.add(hash);
12915 }
12916 function registerDocument25(targetDocument) {
12917 const runtime = getRuntime25();
12918 runtime.documents.set(
12919 targetDocument,
12920 (runtime.documents.get(targetDocument) ?? 0) + 1
12921 );
12922 for (const [hash, css] of runtime.styles) {
12923 injectStyle25(targetDocument, hash, css);
12924 }
12925 return () => {
12926 const count = runtime.documents.get(targetDocument);
12927 if (count === void 0) {
12928 return;
12929 }
12930 if (count <= 1) {
12931 runtime.documents.delete(targetDocument);
12932 return;
12933 }
12934 runtime.documents.set(targetDocument, count - 1);
12935 };
12936 }
12937 function registerStyle25(hash, css) {
12938 const runtime = getRuntime25();
12939 runtime.styles.set(hash, css);
12940 for (const targetDocument of runtime.documents.keys()) {
12941 injectStyle25(targetDocument, hash, css);
12942 }
12943 }
12944 if (typeof process === "undefined" || true) {
12945 registerStyle25("b215aa5eaa", ".c8317e9ebb034cfa__layout{background:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-direction:row;height:100%;isolation:isolate;width:100%}@media (min-width:600px){.c8317e9ebb034cfa__layout{bottom:0;inset-inline-end:0;inset-inline-start:0;min-height:calc(100vh - 46px);position:absolute;top:0}}@media (min-width:782px){.c8317e9ebb034cfa__layout{min-height:calc(100vh - 32px)}body:has(.c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas) .c8317e9ebb034cfa__layout{min-height:100vh}}:where(.c8317e9ebb034cfa__layout) img{height:auto;max-width:100%}.c8317e9ebb034cfa__layout .b8f8c6cf9ae266bf__notices-snackbar{bottom:var(--wpds-dimension-size-md,32px);box-sizing:border-box;display:flex;flex-direction:column;left:0;padding-inline:16px;pointer-events:none;position:fixed;right:0}.c8317e9ebb034cfa__layout .b8f8c6cf9ae266bf__notices-snackbar ._94ac6b8f274ce2f6__components-snackbar,.c8317e9ebb034cfa__layout .b8f8c6cf9ae266bf__notices-snackbar .components-snackbar{margin-inline:auto}.bfc3fedf39b1cf71__sidebar-backdrop{background-color:rgba(0,0,0,.5);bottom:0;cursor:var(--wpds-cursor-control,pointer);inset-inline-end:0;inset-inline-start:0;position:fixed;top:0;z-index:100002}.bb4f70cd030be0a3__sidebar{flex-shrink:0;height:100%;overflow:hidden;position:relative;width:240px}.bb4f70cd030be0a3__sidebar._27e6d590dc5963c9__is-mobile{background:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);bottom:0;box-shadow:2px 0 8px rgba(0,0,0,.2);inset-inline-start:0;max-width:85vw;position:fixed;top:0;width:300px;z-index:100003}._0eb5d3a3e94d6273__mobile-sidebar-drawer{inset-inline-end:0;inset-inline-start:0;position:fixed;top:0}._26789cb167e9f578__layout-single-page ._0eb5d3a3e94d6273__mobile-sidebar-drawer{top:46px}._0eb5d3a3e94d6273__mobile-sidebar-drawer{align-items:center;background:var(--wpds-color-background-surface-neutral,#fcfcfc);border-bottom:1px solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);display:flex;justify-content:flex-start;padding:16px;z-index:3}.fb03501e629fd04e__canvas.fa94dab2ab1e36f3__has-mobile-drawer{padding-top:65px;position:relative}.a03baddce3ef2026__surfaces{display:flex;flex-grow:1;gap:8px;margin:0}@media (min-width:782px){.a03baddce3ef2026__surfaces{margin:8px}._26789cb167e9f578__layout-single-page .a03baddce3ef2026__surfaces{margin-top:0;margin-inline-start:0}}._7ffe3a3db6f69647__inspector,.d12c9efe707e6cb3__stage{background:var(--wpds-color-background-surface-neutral,#fcfcfc);border-radius:0;bottom:0;color:var(--wpds-color-foreground-content-neutral,#1e1e1e);flex:1;height:100vh;inset-inline-end:0;inset-inline-start:0;margin:0;overflow-y:auto;position:relative;position:fixed;top:0;width:100vw}._26789cb167e9f578__layout-single-page ._7ffe3a3db6f69647__inspector,._26789cb167e9f578__layout-single-page .d12c9efe707e6cb3__stage{height:calc(100vh - 46px);top:46px}@media (min-width:782px){._7ffe3a3db6f69647__inspector,.d12c9efe707e6cb3__stage{border-radius:var(--wpds-border-radius-xl,12px);height:auto;margin:0;position:static;width:auto}._26789cb167e9f578__layout-single-page ._7ffe3a3db6f69647__inspector,._26789cb167e9f578__layout-single-page .d12c9efe707e6cb3__stage{height:auto}}.d12c9efe707e6cb3__stage{z-index:2}@media (min-width:782px){.d12c9efe707e6cb3__stage{z-index:auto}}._7ffe3a3db6f69647__inspector{z-index:3}@media (min-width:782px){._7ffe3a3db6f69647__inspector{z-index:auto}}.fb03501e629fd04e__canvas{background:var(--wpds-color-background-surface-neutral,#fcfcfc);border:1px solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);border-radius:0;bottom:0;box-shadow:0 1px 3px rgba(0,0,0,.1);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);flex:1;height:100vh;inset-inline-end:0;inset-inline-start:0;margin:0;overflow-y:auto;position:relative;position:fixed;top:0;width:100vw;z-index:1}._26789cb167e9f578__layout-single-page .fb03501e629fd04e__canvas{height:calc(100vh - 46px);top:46px}@media (min-width:782px){.fb03501e629fd04e__canvas{border-radius:var(--wpds-border-radius-xl,12px);height:auto;position:static;width:auto;z-index:auto}._26789cb167e9f578__layout-single-page .fb03501e629fd04e__canvas{height:auto}._7ffe3a3db6f69647__inspector,.c8317e9ebb034cfa__layout.f7fe42ef8c67e96f__has-canvas .d12c9efe707e6cb3__stage{max-width:400px}}.fb03501e629fd04e__canvas .interface-interface-skeleton{height:100%;inset-inline-start:0!important;position:relative;top:0!important}.c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas .a03baddce3ef2026__surfaces{gap:0;margin:0}.c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas ._7ffe3a3db6f69647__inspector,.c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas .d12c9efe707e6cb3__stage{display:none}.c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas .fb03501e629fd04e__canvas{border:none;border-radius:0;bottom:0;box-shadow:none;inset-inline-end:0;inset-inline-start:0;margin:0;max-width:none;overflow:hidden;position:fixed;top:var(--wp-admin--admin-bar--height,0)}._26789cb167e9f578__layout-single-page .c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas .fb03501e629fd04e__canvas{top:46px}@media (min-width:782px){._26789cb167e9f578__layout-single-page .c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas .fb03501e629fd04e__canvas{top:32px}}@media (max-width:782px){._7ffe3a3db6f69647__inspector,.d12c9efe707e6cb3__stage,.fb03501e629fd04e__canvas:not(.fa94dab2ab1e36f3__has-mobile-drawer){height:calc(100vh - var(--wp-admin--admin-bar--height, 0px));top:var(--wp-admin--admin-bar--height,0)}._0eb5d3a3e94d6273__mobile-sidebar-drawer{top:var(--wp-admin--admin-bar--height,0)}}@media not (prefers-reduced-motion:reduce){.fb03501e629fd04e__canvas .interface-interface-skeleton__header{view-transition-name:boot--canvas-header}.fb03501e629fd04e__canvas .interface-interface-skeleton__sidebar{view-transition-name:boot--canvas-sidebar}.d12c9efe707e6cb3__stage{view-transition-name:boot--stage}._7ffe3a3db6f69647__inspector{view-transition-name:boot--inspector}.fb03501e629fd04e__canvas{view-transition-name:boot--canvas}@supports (-webkit-hyphens:none) and (not (-moz-appearance:none)){.d12c9efe707e6cb3__stage{view-transition-name:boot-safari--stage}._7ffe3a3db6f69647__inspector{view-transition-name:boot-safari--inspector}.fb03501e629fd04e__canvas{view-transition-name:boot-safari--canvas}}}@media (max-width:782px){:root:has(.c8317e9ebb034cfa__layout) *{view-transition-name:none!important}}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(root),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(root){animation-duration:.25s}@media not (prefers-reduced-motion:reduce){:root:has(.c8317e9ebb034cfa__layout) .components-popover:first-of-type{view-transition-name:boot--components-popover}}:root:has(.c8317e9ebb034cfa__layout)::view-transition-group(boot--canvas),:root:has(.c8317e9ebb034cfa__layout)::view-transition-group(boot--canvas-header),:root:has(.c8317e9ebb034cfa__layout)::view-transition-group(boot--canvas-sidebar),:root:has(.c8317e9ebb034cfa__layout)::view-transition-group(boot-safari--canvas){z-index:1}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot-safari--canvas),:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot-safari--inspector),:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot-safari--stage),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot-safari--canvas),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot-safari--inspector),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot-safari--stage){width:auto}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--canvas),:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--inspector),:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--stage),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--canvas),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--inspector),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--stage){background:#fff;border-radius:var(--wpds-border-radius-xl,12px);height:100%;object-fit:none;object-position:left top;overflow:hidden;width:100%}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--canvas),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--canvas){object-position:center top}:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--inspector):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--stage):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot-safari--inspector):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot-safari--stage):only-child{animation-name:ef68027ea03aa34b__zoomOut;will-change:transform,opacity}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--inspector):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--stage):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot-safari--inspector):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot-safari--stage):only-child{animation-name:_0752ac81dff4c432__zoomIn;will-change:transform,opacity}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--canvas):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot-safari--canvas):only-child{animation-name:_3a2e4dc465681136__slideFromRight;will-change:transform}:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--canvas):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot-safari--canvas):only-child{animation-name:_86a367ac26a1b61e__slideToRight;will-change:transform}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--canvas-header):only-child{animation-name:_462399c0e9d64199__slideHeaderFromTop;will-change:transform}:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--canvas-header):only-child{animation-name:_8b272f30d43c9f38__slideHeaderToTop;will-change:transform}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--canvas-sidebar):only-child{animation-name:_69ed6a71d53a2e0c__slideSidebarFromRight;will-change:transform}:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--canvas-sidebar):only-child{animation-name:bf0697a36b00caad__slideSidebarToRight;will-change:transform}@keyframes ef68027ea03aa34b__zoomOut{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.9)}}@keyframes _0752ac81dff4c432__zoomIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes _3a2e4dc465681136__slideFromRight{0%{transform:translateX(100vw)}to{transform:translateX(0)}}@keyframes _86a367ac26a1b61e__slideToRight{0%{transform:translateX(0)}to{transform:translateX(100vw)}}@keyframes _462399c0e9d64199__slideHeaderFromTop{0%{transform:translateY(-100%)}}@keyframes _8b272f30d43c9f38__slideHeaderToTop{to{transform:translateY(-100%)}}@keyframes _69ed6a71d53a2e0c__slideSidebarFromRight{0%{transform:translateX(100%)}}@keyframes bf0697a36b00caad__slideSidebarToRight{to{transform:translateX(100%)}}");
12946 }
12947 var style_module_default9 = { "layout": "c8317e9ebb034cfa__layout", "has-full-canvas": "e97bb2807a9c4687__has-full-canvas", "notices-snackbar": "b8f8c6cf9ae266bf__notices-snackbar", "components-snackbar": "_94ac6b8f274ce2f6__components-snackbar", "sidebar-backdrop": "bfc3fedf39b1cf71__sidebar-backdrop", "sidebar": "bb4f70cd030be0a3__sidebar", "is-mobile": "_27e6d590dc5963c9__is-mobile", "mobile-sidebar-drawer": "_0eb5d3a3e94d6273__mobile-sidebar-drawer", "layout-single-page": "_26789cb167e9f578__layout-single-page", "canvas": "fb03501e629fd04e__canvas", "has-mobile-drawer": "fa94dab2ab1e36f3__has-mobile-drawer", "surfaces": "a03baddce3ef2026__surfaces", "stage": "d12c9efe707e6cb3__stage", "inspector": "_7ffe3a3db6f69647__inspector", "has-canvas": "f7fe42ef8c67e96f__has-canvas", "zoomOut": "ef68027ea03aa34b__zoomOut", "zoomIn": "_0752ac81dff4c432__zoomIn", "slideFromRight": "_3a2e4dc465681136__slideFromRight", "slideToRight": "_86a367ac26a1b61e__slideToRight", "slideHeaderFromTop": "_462399c0e9d64199__slideHeaderFromTop", "slideHeaderToTop": "_8b272f30d43c9f38__slideHeaderToTop", "slideSidebarFromRight": "_69ed6a71d53a2e0c__slideSidebarFromRight", "slideSidebarToRight": "bf0697a36b00caad__slideSidebarToRight" };
12948 var { useLocation: useLocation2, useMatches: useMatches3, Outlet } = unlock2(routePrivateApis5);
12949 function Root3() {
12950 const matches = useMatches3();
12951 const location = useLocation2();
12952 const currentMatch = matches[matches.length - 1];
12953 const canvas = currentMatch?.loaderData?.canvas;
12954 const routeContentModule = currentMatch?.loaderData?.routeContentModule;
12955 const isFullScreen = canvas && !canvas.isPreview;
12956 useRouteTitle();
12957 const isMobileViewport = (0, import_compose5.useViewportMatch)("medium", "<");
12958 const [isMobileSidebarOpen, setIsMobileSidebarOpen] = (0, import_element41.useState)(false);
12959 const disableMotion = (0, import_compose5.useReducedMotion)();
12960 (0, import_element41.useEffect)(() => {
12961 setIsMobileSidebarOpen(false);
12962 }, [location.pathname, isMobileViewport]);
12963 const themeColors = (0, import_element41.useMemo)(getAdminThemeColors, []);
12964 const layoutRef = useSyncBodyBackground();
12965 return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_components14.SlotFillProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(tooltip_exports.Provider, { children: [
12966 /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(PluginArea, {}),
12967 /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
12968 import_theme.ThemeProvider,
12969 {
12970 isRoot: true,
12971 color: { ...themeColors, background: "#f8f8f8" },
12972 children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_theme.ThemeProvider, { color: themeColors, children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
12973 "div",
12974 {
12975 ref: layoutRef,
12976 className: clsx_default(style_module_default9.layout, {
12977 [style_module_default9["has-canvas"]]: !!canvas || canvas === null,
12978 [style_module_default9["has-full-canvas"]]: isFullScreen
12979 }),
12980 children: [
12981 /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_editor5.UnsavedChangesWarning, {}),
12982 /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(SavePanel, {}),
12983 /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
12984 import_notices3.SnackbarNotices,
12985 {
12986 className: style_module_default9["notices-snackbar"]
12987 }
12988 ),
12989 isMobileViewport && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(page_default.SidebarToggleFill, { children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
12990 import_components14.Button,
12991 {
12992 icon: menu_default,
12993 onClick: () => setIsMobileSidebarOpen(true),
12994 label: (0, import_i18n18.__)("Open navigation panel"),
12995 size: "compact"
12996 }
12997 ) }),
12998 /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_components14.__unstableAnimatePresence, { children: isMobileViewport && isMobileSidebarOpen && !isFullScreen && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
12999 import_components14.__unstableMotion.div,
13000 {
13001 initial: { opacity: 0 },
13002 animate: { opacity: 1 },
13003 exit: { opacity: 0 },
13004 transition: {
13005 type: "tween",
13006 duration: disableMotion ? 0 : 0.2,
13007 ease: "easeOut"
13008 },
13009 className: style_module_default9["sidebar-backdrop"],
13010 onClick: () => setIsMobileSidebarOpen(false),
13011 onKeyDown: (event) => {
13012 if (event.key === "Escape") {
13013 setIsMobileSidebarOpen(
13014 false
13015 );
13016 }
13017 },
13018 role: "button",
13019 tabIndex: -1,
13020 "aria-label": (0, import_i18n18.__)(
13021 "Close navigation panel"
13022 )
13023 }
13024 ) }),
13025 /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_components14.__unstableAnimatePresence, { children: isMobileViewport && isMobileSidebarOpen && !isFullScreen && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13026 import_components14.__unstableMotion.div,
13027 {
13028 initial: { x: "-100%" },
13029 animate: { x: 0 },
13030 exit: { x: "-100%" },
13031 transition: {
13032 type: "tween",
13033 duration: disableMotion ? 0 : 0.2,
13034 ease: "easeOut"
13035 },
13036 className: clsx_default(
13037 style_module_default9.sidebar,
13038 style_module_default9["is-mobile"]
13039 ),
13040 children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Sidebar, {})
13041 }
13042 ) }),
13043 !isMobileViewport && !isFullScreen && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: style_module_default9.sidebar, children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Sidebar, {}) }),
13044 /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: style_module_default9.surfaces, children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
13045 import_theme.ThemeProvider,
13046 {
13047 color: {
13048 ...themeColors,
13049 // Reset to the default background color.
13050 background: "#fcfcfc"
13051 },
13052 children: [
13053 /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Outlet, {}),
13054 (canvas || canvas === null) && /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
13055 "div",
13056 {
13057 className: clsx_default(style_module_default9.canvas, {
13058 [style_module_default9["has-mobile-drawer"]]: canvas?.isPreview && isMobileViewport
13059 }),
13060 children: [
13061 canvas?.isPreview && isMobileViewport && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13062 "div",
13063 {
13064 className: style_module_default9["mobile-sidebar-drawer"],
13065 children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13066 import_components14.Button,
13067 {
13068 icon: menu_default,
13069 onClick: () => setIsMobileSidebarOpen(
13070 true
13071 ),
13072 label: (0, import_i18n18.__)(
13073 "Open navigation panel"
13074 ),
13075 size: "compact"
13076 }
13077 )
13078 }
13079 ),
13080 /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(ErrorBoundary, { children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
13081 CanvasRenderer,
13082 {
13083 canvas,
13084 routeContentModule
13085 }
13086 ) })
13087 ]
13088 }
13089 )
13090 ]
13091 }
13092 ) })
13093 ]
13094 }
13095 ) })
13096 }
13097 )
13098 ] }) });
13099 }
13100
13101 // packages/boot/build-module/components/app/router.mjs
13102 var import_jsx_runtime54 = __toESM(require_jsx_runtime(), 1);
13103 var STYLE_HASH_ATTRIBUTE26 = "data-wp-hash";
13104 function getRuntime26() {
13105 const globalScope = globalThis;
13106 if (globalScope.__wpStyleRuntime) {
13107 return globalScope.__wpStyleRuntime;
13108 }
13109 globalScope.__wpStyleRuntime = {
13110 documents: /* @__PURE__ */ new Map(),
13111 styles: /* @__PURE__ */ new Map(),
13112 injectedStyles: /* @__PURE__ */ new WeakMap()
13113 };
13114 if (typeof document !== "undefined") {
13115 registerDocument26(document);
13116 }
13117 return globalScope.__wpStyleRuntime;
13118 }
13119 function documentContainsStyleHash26(targetDocument, hash) {
13120 if (!targetDocument.head) {
13121 return false;
13122 }
13123 for (const style of targetDocument.head.querySelectorAll(
13124 `style[${STYLE_HASH_ATTRIBUTE26}]`
13125 )) {
13126 if (style.getAttribute(STYLE_HASH_ATTRIBUTE26) === hash) {
13127 return true;
13128 }
13129 }
13130 return false;
13131 }
13132 function injectStyle26(targetDocument, hash, css) {
13133 if (!targetDocument.head) {
13134 return;
13135 }
13136 const runtime = getRuntime26();
13137 let injectedStyles = runtime.injectedStyles.get(targetDocument);
13138 if (!injectedStyles) {
13139 injectedStyles = /* @__PURE__ */ new Set();
13140 runtime.injectedStyles.set(targetDocument, injectedStyles);
13141 }
13142 if (injectedStyles.has(hash)) {
13143 return;
13144 }
13145 if (documentContainsStyleHash26(targetDocument, hash)) {
13146 injectedStyles.add(hash);
13147 return;
13148 }
13149 const style = targetDocument.createElement("style");
13150 style.setAttribute(STYLE_HASH_ATTRIBUTE26, hash);
13151 style.appendChild(targetDocument.createTextNode(css));
13152 targetDocument.head.appendChild(style);
13153 injectedStyles.add(hash);
13154 }
13155 function registerDocument26(targetDocument) {
13156 const runtime = getRuntime26();
13157 runtime.documents.set(
13158 targetDocument,
13159 (runtime.documents.get(targetDocument) ?? 0) + 1
13160 );
13161 for (const [hash, css] of runtime.styles) {
13162 injectStyle26(targetDocument, hash, css);
13163 }
13164 return () => {
13165 const count = runtime.documents.get(targetDocument);
13166 if (count === void 0) {
13167 return;
13168 }
13169 if (count <= 1) {
13170 runtime.documents.delete(targetDocument);
13171 return;
13172 }
13173 runtime.documents.set(targetDocument, count - 1);
13174 };
13175 }
13176 function registerStyle26(hash, css) {
13177 const runtime = getRuntime26();
13178 runtime.styles.set(hash, css);
13179 for (const targetDocument of runtime.documents.keys()) {
13180 injectStyle26(targetDocument, hash, css);
13181 }
13182 }
13183 if (typeof process === "undefined" || true) {
13184 registerStyle26("b215aa5eaa", ".c8317e9ebb034cfa__layout{background:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-direction:row;height:100%;isolation:isolate;width:100%}@media (min-width:600px){.c8317e9ebb034cfa__layout{bottom:0;inset-inline-end:0;inset-inline-start:0;min-height:calc(100vh - 46px);position:absolute;top:0}}@media (min-width:782px){.c8317e9ebb034cfa__layout{min-height:calc(100vh - 32px)}body:has(.c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas) .c8317e9ebb034cfa__layout{min-height:100vh}}:where(.c8317e9ebb034cfa__layout) img{height:auto;max-width:100%}.c8317e9ebb034cfa__layout .b8f8c6cf9ae266bf__notices-snackbar{bottom:var(--wpds-dimension-size-md,32px);box-sizing:border-box;display:flex;flex-direction:column;left:0;padding-inline:16px;pointer-events:none;position:fixed;right:0}.c8317e9ebb034cfa__layout .b8f8c6cf9ae266bf__notices-snackbar ._94ac6b8f274ce2f6__components-snackbar,.c8317e9ebb034cfa__layout .b8f8c6cf9ae266bf__notices-snackbar .components-snackbar{margin-inline:auto}.bfc3fedf39b1cf71__sidebar-backdrop{background-color:rgba(0,0,0,.5);bottom:0;cursor:var(--wpds-cursor-control,pointer);inset-inline-end:0;inset-inline-start:0;position:fixed;top:0;z-index:100002}.bb4f70cd030be0a3__sidebar{flex-shrink:0;height:100%;overflow:hidden;position:relative;width:240px}.bb4f70cd030be0a3__sidebar._27e6d590dc5963c9__is-mobile{background:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);bottom:0;box-shadow:2px 0 8px rgba(0,0,0,.2);inset-inline-start:0;max-width:85vw;position:fixed;top:0;width:300px;z-index:100003}._0eb5d3a3e94d6273__mobile-sidebar-drawer{inset-inline-end:0;inset-inline-start:0;position:fixed;top:0}._26789cb167e9f578__layout-single-page ._0eb5d3a3e94d6273__mobile-sidebar-drawer{top:46px}._0eb5d3a3e94d6273__mobile-sidebar-drawer{align-items:center;background:var(--wpds-color-background-surface-neutral,#fcfcfc);border-bottom:1px solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);display:flex;justify-content:flex-start;padding:16px;z-index:3}.fb03501e629fd04e__canvas.fa94dab2ab1e36f3__has-mobile-drawer{padding-top:65px;position:relative}.a03baddce3ef2026__surfaces{display:flex;flex-grow:1;gap:8px;margin:0}@media (min-width:782px){.a03baddce3ef2026__surfaces{margin:8px}._26789cb167e9f578__layout-single-page .a03baddce3ef2026__surfaces{margin-top:0;margin-inline-start:0}}._7ffe3a3db6f69647__inspector,.d12c9efe707e6cb3__stage{background:var(--wpds-color-background-surface-neutral,#fcfcfc);border-radius:0;bottom:0;color:var(--wpds-color-foreground-content-neutral,#1e1e1e);flex:1;height:100vh;inset-inline-end:0;inset-inline-start:0;margin:0;overflow-y:auto;position:relative;position:fixed;top:0;width:100vw}._26789cb167e9f578__layout-single-page ._7ffe3a3db6f69647__inspector,._26789cb167e9f578__layout-single-page .d12c9efe707e6cb3__stage{height:calc(100vh - 46px);top:46px}@media (min-width:782px){._7ffe3a3db6f69647__inspector,.d12c9efe707e6cb3__stage{border-radius:var(--wpds-border-radius-xl,12px);height:auto;margin:0;position:static;width:auto}._26789cb167e9f578__layout-single-page ._7ffe3a3db6f69647__inspector,._26789cb167e9f578__layout-single-page .d12c9efe707e6cb3__stage{height:auto}}.d12c9efe707e6cb3__stage{z-index:2}@media (min-width:782px){.d12c9efe707e6cb3__stage{z-index:auto}}._7ffe3a3db6f69647__inspector{z-index:3}@media (min-width:782px){._7ffe3a3db6f69647__inspector{z-index:auto}}.fb03501e629fd04e__canvas{background:var(--wpds-color-background-surface-neutral,#fcfcfc);border:1px solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);border-radius:0;bottom:0;box-shadow:0 1px 3px rgba(0,0,0,.1);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);flex:1;height:100vh;inset-inline-end:0;inset-inline-start:0;margin:0;overflow-y:auto;position:relative;position:fixed;top:0;width:100vw;z-index:1}._26789cb167e9f578__layout-single-page .fb03501e629fd04e__canvas{height:calc(100vh - 46px);top:46px}@media (min-width:782px){.fb03501e629fd04e__canvas{border-radius:var(--wpds-border-radius-xl,12px);height:auto;position:static;width:auto;z-index:auto}._26789cb167e9f578__layout-single-page .fb03501e629fd04e__canvas{height:auto}._7ffe3a3db6f69647__inspector,.c8317e9ebb034cfa__layout.f7fe42ef8c67e96f__has-canvas .d12c9efe707e6cb3__stage{max-width:400px}}.fb03501e629fd04e__canvas .interface-interface-skeleton{height:100%;inset-inline-start:0!important;position:relative;top:0!important}.c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas .a03baddce3ef2026__surfaces{gap:0;margin:0}.c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas ._7ffe3a3db6f69647__inspector,.c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas .d12c9efe707e6cb3__stage{display:none}.c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas .fb03501e629fd04e__canvas{border:none;border-radius:0;bottom:0;box-shadow:none;inset-inline-end:0;inset-inline-start:0;margin:0;max-width:none;overflow:hidden;position:fixed;top:var(--wp-admin--admin-bar--height,0)}._26789cb167e9f578__layout-single-page .c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas .fb03501e629fd04e__canvas{top:46px}@media (min-width:782px){._26789cb167e9f578__layout-single-page .c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas .fb03501e629fd04e__canvas{top:32px}}@media (max-width:782px){._7ffe3a3db6f69647__inspector,.d12c9efe707e6cb3__stage,.fb03501e629fd04e__canvas:not(.fa94dab2ab1e36f3__has-mobile-drawer){height:calc(100vh - var(--wp-admin--admin-bar--height, 0px));top:var(--wp-admin--admin-bar--height,0)}._0eb5d3a3e94d6273__mobile-sidebar-drawer{top:var(--wp-admin--admin-bar--height,0)}}@media not (prefers-reduced-motion:reduce){.fb03501e629fd04e__canvas .interface-interface-skeleton__header{view-transition-name:boot--canvas-header}.fb03501e629fd04e__canvas .interface-interface-skeleton__sidebar{view-transition-name:boot--canvas-sidebar}.d12c9efe707e6cb3__stage{view-transition-name:boot--stage}._7ffe3a3db6f69647__inspector{view-transition-name:boot--inspector}.fb03501e629fd04e__canvas{view-transition-name:boot--canvas}@supports (-webkit-hyphens:none) and (not (-moz-appearance:none)){.d12c9efe707e6cb3__stage{view-transition-name:boot-safari--stage}._7ffe3a3db6f69647__inspector{view-transition-name:boot-safari--inspector}.fb03501e629fd04e__canvas{view-transition-name:boot-safari--canvas}}}@media (max-width:782px){:root:has(.c8317e9ebb034cfa__layout) *{view-transition-name:none!important}}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(root),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(root){animation-duration:.25s}@media not (prefers-reduced-motion:reduce){:root:has(.c8317e9ebb034cfa__layout) .components-popover:first-of-type{view-transition-name:boot--components-popover}}:root:has(.c8317e9ebb034cfa__layout)::view-transition-group(boot--canvas),:root:has(.c8317e9ebb034cfa__layout)::view-transition-group(boot--canvas-header),:root:has(.c8317e9ebb034cfa__layout)::view-transition-group(boot--canvas-sidebar),:root:has(.c8317e9ebb034cfa__layout)::view-transition-group(boot-safari--canvas){z-index:1}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot-safari--canvas),:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot-safari--inspector),:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot-safari--stage),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot-safari--canvas),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot-safari--inspector),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot-safari--stage){width:auto}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--canvas),:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--inspector),:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--stage),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--canvas),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--inspector),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--stage){background:#fff;border-radius:var(--wpds-border-radius-xl,12px);height:100%;object-fit:none;object-position:left top;overflow:hidden;width:100%}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--canvas),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--canvas){object-position:center top}:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--inspector):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--stage):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot-safari--inspector):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot-safari--stage):only-child{animation-name:ef68027ea03aa34b__zoomOut;will-change:transform,opacity}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--inspector):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--stage):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot-safari--inspector):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot-safari--stage):only-child{animation-name:_0752ac81dff4c432__zoomIn;will-change:transform,opacity}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--canvas):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot-safari--canvas):only-child{animation-name:_3a2e4dc465681136__slideFromRight;will-change:transform}:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--canvas):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot-safari--canvas):only-child{animation-name:_86a367ac26a1b61e__slideToRight;will-change:transform}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--canvas-header):only-child{animation-name:_462399c0e9d64199__slideHeaderFromTop;will-change:transform}:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--canvas-header):only-child{animation-name:_8b272f30d43c9f38__slideHeaderToTop;will-change:transform}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--canvas-sidebar):only-child{animation-name:_69ed6a71d53a2e0c__slideSidebarFromRight;will-change:transform}:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--canvas-sidebar):only-child{animation-name:bf0697a36b00caad__slideSidebarToRight;will-change:transform}@keyframes ef68027ea03aa34b__zoomOut{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.9)}}@keyframes _0752ac81dff4c432__zoomIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes _3a2e4dc465681136__slideFromRight{0%{transform:translateX(100vw)}to{transform:translateX(0)}}@keyframes _86a367ac26a1b61e__slideToRight{0%{transform:translateX(0)}to{transform:translateX(100vw)}}@keyframes _462399c0e9d64199__slideHeaderFromTop{0%{transform:translateY(-100%)}}@keyframes _8b272f30d43c9f38__slideHeaderToTop{to{transform:translateY(-100%)}}@keyframes _69ed6a71d53a2e0c__slideSidebarFromRight{0%{transform:translateX(100%)}}@keyframes bf0697a36b00caad__slideSidebarToRight{to{transform:translateX(100%)}}");
13185 }
13186 var style_module_default10 = { "layout": "c8317e9ebb034cfa__layout", "has-full-canvas": "e97bb2807a9c4687__has-full-canvas", "notices-snackbar": "b8f8c6cf9ae266bf__notices-snackbar", "components-snackbar": "_94ac6b8f274ce2f6__components-snackbar", "sidebar-backdrop": "bfc3fedf39b1cf71__sidebar-backdrop", "sidebar": "bb4f70cd030be0a3__sidebar", "is-mobile": "_27e6d590dc5963c9__is-mobile", "mobile-sidebar-drawer": "_0eb5d3a3e94d6273__mobile-sidebar-drawer", "layout-single-page": "_26789cb167e9f578__layout-single-page", "canvas": "fb03501e629fd04e__canvas", "has-mobile-drawer": "fa94dab2ab1e36f3__has-mobile-drawer", "surfaces": "a03baddce3ef2026__surfaces", "stage": "d12c9efe707e6cb3__stage", "inspector": "_7ffe3a3db6f69647__inspector", "has-canvas": "f7fe42ef8c67e96f__has-canvas", "zoomOut": "ef68027ea03aa34b__zoomOut", "zoomIn": "_0752ac81dff4c432__zoomIn", "slideFromRight": "_3a2e4dc465681136__slideFromRight", "slideToRight": "_86a367ac26a1b61e__slideToRight", "slideHeaderFromTop": "_462399c0e9d64199__slideHeaderFromTop", "slideHeaderToTop": "_8b272f30d43c9f38__slideHeaderToTop", "slideSidebarFromRight": "_69ed6a71d53a2e0c__slideSidebarFromRight", "slideSidebarToRight": "bf0697a36b00caad__slideSidebarToRight" };
13187 var {
13188 createLazyRoute,
13189 createRouter,
13190 createRootRoute,
13191 createRoute,
13192 RouterProvider,
13193 createBrowserHistory,
13194 parseHref,
13195 useLoaderData
13196 } = unlock2(routePrivateApis6);
13197 function NotFoundComponent() {
13198 return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: style_module_default10.stage, children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(page_default, { title: (0, import_i18n19.__)("Route not found"), hasPadding: true, children: (0, import_i18n19.__)("The page you're looking for does not exist") }) });
13199 }
13200 function createRouteFromDefinition(route, parentRoute) {
13201 let tanstackRoute = createRoute({
13202 getParentRoute: () => parentRoute,
13203 path: route.path,
13204 beforeLoad: async (opts) => {
13205 if (route.route_module) {
13206 const module = await import(route.route_module);
13207 const routeConfig = module.route || {};
13208 if (routeConfig.beforeLoad) {
13209 return routeConfig.beforeLoad({
13210 params: opts.params || {},
13211 search: opts.search || {}
13212 });
13213 }
13214 }
13215 },
13216 loader: async (opts) => {
13217 let routeConfig = {};
13218 if (route.route_module) {
13219 const module = await import(route.route_module);
13220 routeConfig = module.route || {};
13221 }
13222 const context = {
13223 params: opts.params || {},
13224 search: opts.deps || {}
13225 };
13226 const [, loaderData, canvasData, titleData] = await Promise.all([
13227 (0, import_data13.resolveSelect)(import_core_data7.store).getEntityRecord(
13228 "root",
13229 "__unstableBase"
13230 ),
13231 routeConfig.loader ? routeConfig.loader(context) : Promise.resolve(void 0),
13232 routeConfig.canvas ? routeConfig.canvas(context) : Promise.resolve(void 0),
13233 routeConfig.title ? routeConfig.title(context) : Promise.resolve(void 0)
13234 ]);
13235 let inspector = true;
13236 if (routeConfig.inspector) {
13237 inspector = await routeConfig.inspector(context);
13238 }
13239 let stage = true;
13240 if (routeConfig.stage) {
13241 stage = await routeConfig.stage(context);
13242 }
13243 return {
13244 ...loaderData,
13245 canvas: canvasData,
13246 inspector,
13247 stage,
13248 title: titleData,
13249 routeContentModule: route.content_module
13250 };
13251 },
13252 loaderDeps: (opts) => opts.search
13253 });
13254 tanstackRoute = tanstackRoute.lazy(async () => {
13255 const module = route.content_module ? await import(route.content_module) : {};
13256 const Stage = module.stage;
13257 const Inspector = module.inspector;
13258 return createLazyRoute(route.path)({
13259 component: function RouteComponent() {
13260 const { inspector: showInspector, stage: showStage } = useLoaderData({ from: route.path }) ?? {};
13261 return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
13262 Stage && showStage && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: style_module_default10.stage, children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(ErrorBoundary, { children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Stage, {}) }) }),
13263 Inspector && showInspector && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: style_module_default10.inspector, children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(ErrorBoundary, { children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Inspector, {}) }) })
13264 ] });
13265 }
13266 });
13267 });
13268 return tanstackRoute;
13269 }
13270 function createRouteTree(routes, rootComponent = Root3) {
13271 const rootRoute = createRootRoute({
13272 component: rootComponent,
13273 context: () => ({})
13274 });
13275 const dynamicRoutes = routes.map(
13276 (route) => createRouteFromDefinition(route, rootRoute)
13277 );
13278 return rootRoute.addChildren(dynamicRoutes);
13279 }
13280 function createPathHistory() {
13281 return createBrowserHistory({
13282 parseLocation: () => {
13283 const url = new URL(window.location.href);
13284 const path = url.searchParams.get("p") || "/";
13285 const pathHref = `${path}${url.hash}`;
13286 return parseHref(pathHref, window.history.state);
13287 },
13288 createHref: (href) => {
13289 const searchParams = new URLSearchParams(window.location.search);
13290 searchParams.set("p", href);
13291 return `${window.location.pathname}?${searchParams}`;
13292 }
13293 });
13294 }
13295 function Router({
13296 routes,
13297 rootComponent = Root3
13298 }) {
13299 const router = (0, import_element42.useMemo)(() => {
13300 const history = createPathHistory();
13301 const routeTree = createRouteTree(routes, rootComponent);
13302 return createRouter({
13303 history,
13304 routeTree,
13305 defaultPreload: "intent",
13306 defaultNotFoundComponent: NotFoundComponent,
13307 defaultViewTransition: {
13308 types: ({
13309 fromLocation
13310 }) => {
13311 if (!fromLocation) {
13312 return false;
13313 }
13314 return ["navigate"];
13315 }
13316 }
13317 });
13318 }, [routes, rootComponent]);
13319 return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(RouterProvider, { router });
13320 }
13321
13322 // packages/boot/build-module/components/root/single-page.mjs
13323 var import_notices4 = __toESM(require_notices(), 1);
13324 var import_components15 = __toESM(require_components(), 1);
13325 var import_element43 = __toESM(require_element(), 1);
13326 import { privateApis as routePrivateApis7 } from "@wordpress/route";
13327 var import_theme2 = __toESM(require_theme(), 1);
13328 var import_editor6 = __toESM(require_editor(), 1);
13329 var import_jsx_runtime55 = __toESM(require_jsx_runtime(), 1);
13330 var STYLE_HASH_ATTRIBUTE27 = "data-wp-hash";
13331 function getRuntime27() {
13332 const globalScope = globalThis;
13333 if (globalScope.__wpStyleRuntime) {
13334 return globalScope.__wpStyleRuntime;
13335 }
13336 globalScope.__wpStyleRuntime = {
13337 documents: /* @__PURE__ */ new Map(),
13338 styles: /* @__PURE__ */ new Map(),
13339 injectedStyles: /* @__PURE__ */ new WeakMap()
13340 };
13341 if (typeof document !== "undefined") {
13342 registerDocument27(document);
13343 }
13344 return globalScope.__wpStyleRuntime;
13345 }
13346 function documentContainsStyleHash27(targetDocument, hash) {
13347 if (!targetDocument.head) {
13348 return false;
13349 }
13350 for (const style of targetDocument.head.querySelectorAll(
13351 `style[${STYLE_HASH_ATTRIBUTE27}]`
13352 )) {
13353 if (style.getAttribute(STYLE_HASH_ATTRIBUTE27) === hash) {
13354 return true;
13355 }
13356 }
13357 return false;
13358 }
13359 function injectStyle27(targetDocument, hash, css) {
13360 if (!targetDocument.head) {
13361 return;
13362 }
13363 const runtime = getRuntime27();
13364 let injectedStyles = runtime.injectedStyles.get(targetDocument);
13365 if (!injectedStyles) {
13366 injectedStyles = /* @__PURE__ */ new Set();
13367 runtime.injectedStyles.set(targetDocument, injectedStyles);
13368 }
13369 if (injectedStyles.has(hash)) {
13370 return;
13371 }
13372 if (documentContainsStyleHash27(targetDocument, hash)) {
13373 injectedStyles.add(hash);
13374 return;
13375 }
13376 const style = targetDocument.createElement("style");
13377 style.setAttribute(STYLE_HASH_ATTRIBUTE27, hash);
13378 style.appendChild(targetDocument.createTextNode(css));
13379 targetDocument.head.appendChild(style);
13380 injectedStyles.add(hash);
13381 }
13382 function registerDocument27(targetDocument) {
13383 const runtime = getRuntime27();
13384 runtime.documents.set(
13385 targetDocument,
13386 (runtime.documents.get(targetDocument) ?? 0) + 1
13387 );
13388 for (const [hash, css] of runtime.styles) {
13389 injectStyle27(targetDocument, hash, css);
13390 }
13391 return () => {
13392 const count = runtime.documents.get(targetDocument);
13393 if (count === void 0) {
13394 return;
13395 }
13396 if (count <= 1) {
13397 runtime.documents.delete(targetDocument);
13398 return;
13399 }
13400 runtime.documents.set(targetDocument, count - 1);
13401 };
13402 }
13403 function registerStyle27(hash, css) {
13404 const runtime = getRuntime27();
13405 runtime.styles.set(hash, css);
13406 for (const targetDocument of runtime.documents.keys()) {
13407 injectStyle27(targetDocument, hash, css);
13408 }
13409 }
13410 if (typeof process === "undefined" || true) {
13411 registerStyle27("b215aa5eaa", ".c8317e9ebb034cfa__layout{background:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:flex;flex-direction:row;height:100%;isolation:isolate;width:100%}@media (min-width:600px){.c8317e9ebb034cfa__layout{bottom:0;inset-inline-end:0;inset-inline-start:0;min-height:calc(100vh - 46px);position:absolute;top:0}}@media (min-width:782px){.c8317e9ebb034cfa__layout{min-height:calc(100vh - 32px)}body:has(.c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas) .c8317e9ebb034cfa__layout{min-height:100vh}}:where(.c8317e9ebb034cfa__layout) img{height:auto;max-width:100%}.c8317e9ebb034cfa__layout .b8f8c6cf9ae266bf__notices-snackbar{bottom:var(--wpds-dimension-size-md,32px);box-sizing:border-box;display:flex;flex-direction:column;left:0;padding-inline:16px;pointer-events:none;position:fixed;right:0}.c8317e9ebb034cfa__layout .b8f8c6cf9ae266bf__notices-snackbar ._94ac6b8f274ce2f6__components-snackbar,.c8317e9ebb034cfa__layout .b8f8c6cf9ae266bf__notices-snackbar .components-snackbar{margin-inline:auto}.bfc3fedf39b1cf71__sidebar-backdrop{background-color:rgba(0,0,0,.5);bottom:0;cursor:var(--wpds-cursor-control,pointer);inset-inline-end:0;inset-inline-start:0;position:fixed;top:0;z-index:100002}.bb4f70cd030be0a3__sidebar{flex-shrink:0;height:100%;overflow:hidden;position:relative;width:240px}.bb4f70cd030be0a3__sidebar._27e6d590dc5963c9__is-mobile{background:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);bottom:0;box-shadow:2px 0 8px rgba(0,0,0,.2);inset-inline-start:0;max-width:85vw;position:fixed;top:0;width:300px;z-index:100003}._0eb5d3a3e94d6273__mobile-sidebar-drawer{inset-inline-end:0;inset-inline-start:0;position:fixed;top:0}._26789cb167e9f578__layout-single-page ._0eb5d3a3e94d6273__mobile-sidebar-drawer{top:46px}._0eb5d3a3e94d6273__mobile-sidebar-drawer{align-items:center;background:var(--wpds-color-background-surface-neutral,#fcfcfc);border-bottom:1px solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);display:flex;justify-content:flex-start;padding:16px;z-index:3}.fb03501e629fd04e__canvas.fa94dab2ab1e36f3__has-mobile-drawer{padding-top:65px;position:relative}.a03baddce3ef2026__surfaces{display:flex;flex-grow:1;gap:8px;margin:0}@media (min-width:782px){.a03baddce3ef2026__surfaces{margin:8px}._26789cb167e9f578__layout-single-page .a03baddce3ef2026__surfaces{margin-top:0;margin-inline-start:0}}._7ffe3a3db6f69647__inspector,.d12c9efe707e6cb3__stage{background:var(--wpds-color-background-surface-neutral,#fcfcfc);border-radius:0;bottom:0;color:var(--wpds-color-foreground-content-neutral,#1e1e1e);flex:1;height:100vh;inset-inline-end:0;inset-inline-start:0;margin:0;overflow-y:auto;position:relative;position:fixed;top:0;width:100vw}._26789cb167e9f578__layout-single-page ._7ffe3a3db6f69647__inspector,._26789cb167e9f578__layout-single-page .d12c9efe707e6cb3__stage{height:calc(100vh - 46px);top:46px}@media (min-width:782px){._7ffe3a3db6f69647__inspector,.d12c9efe707e6cb3__stage{border-radius:var(--wpds-border-radius-xl,12px);height:auto;margin:0;position:static;width:auto}._26789cb167e9f578__layout-single-page ._7ffe3a3db6f69647__inspector,._26789cb167e9f578__layout-single-page .d12c9efe707e6cb3__stage{height:auto}}.d12c9efe707e6cb3__stage{z-index:2}@media (min-width:782px){.d12c9efe707e6cb3__stage{z-index:auto}}._7ffe3a3db6f69647__inspector{z-index:3}@media (min-width:782px){._7ffe3a3db6f69647__inspector{z-index:auto}}.fb03501e629fd04e__canvas{background:var(--wpds-color-background-surface-neutral,#fcfcfc);border:1px solid var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);border-radius:0;bottom:0;box-shadow:0 1px 3px rgba(0,0,0,.1);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);flex:1;height:100vh;inset-inline-end:0;inset-inline-start:0;margin:0;overflow-y:auto;position:relative;position:fixed;top:0;width:100vw;z-index:1}._26789cb167e9f578__layout-single-page .fb03501e629fd04e__canvas{height:calc(100vh - 46px);top:46px}@media (min-width:782px){.fb03501e629fd04e__canvas{border-radius:var(--wpds-border-radius-xl,12px);height:auto;position:static;width:auto;z-index:auto}._26789cb167e9f578__layout-single-page .fb03501e629fd04e__canvas{height:auto}._7ffe3a3db6f69647__inspector,.c8317e9ebb034cfa__layout.f7fe42ef8c67e96f__has-canvas .d12c9efe707e6cb3__stage{max-width:400px}}.fb03501e629fd04e__canvas .interface-interface-skeleton{height:100%;inset-inline-start:0!important;position:relative;top:0!important}.c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas .a03baddce3ef2026__surfaces{gap:0;margin:0}.c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas ._7ffe3a3db6f69647__inspector,.c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas .d12c9efe707e6cb3__stage{display:none}.c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas .fb03501e629fd04e__canvas{border:none;border-radius:0;bottom:0;box-shadow:none;inset-inline-end:0;inset-inline-start:0;margin:0;max-width:none;overflow:hidden;position:fixed;top:var(--wp-admin--admin-bar--height,0)}._26789cb167e9f578__layout-single-page .c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas .fb03501e629fd04e__canvas{top:46px}@media (min-width:782px){._26789cb167e9f578__layout-single-page .c8317e9ebb034cfa__layout.e97bb2807a9c4687__has-full-canvas .fb03501e629fd04e__canvas{top:32px}}@media (max-width:782px){._7ffe3a3db6f69647__inspector,.d12c9efe707e6cb3__stage,.fb03501e629fd04e__canvas:not(.fa94dab2ab1e36f3__has-mobile-drawer){height:calc(100vh - var(--wp-admin--admin-bar--height, 0px));top:var(--wp-admin--admin-bar--height,0)}._0eb5d3a3e94d6273__mobile-sidebar-drawer{top:var(--wp-admin--admin-bar--height,0)}}@media not (prefers-reduced-motion:reduce){.fb03501e629fd04e__canvas .interface-interface-skeleton__header{view-transition-name:boot--canvas-header}.fb03501e629fd04e__canvas .interface-interface-skeleton__sidebar{view-transition-name:boot--canvas-sidebar}.d12c9efe707e6cb3__stage{view-transition-name:boot--stage}._7ffe3a3db6f69647__inspector{view-transition-name:boot--inspector}.fb03501e629fd04e__canvas{view-transition-name:boot--canvas}@supports (-webkit-hyphens:none) and (not (-moz-appearance:none)){.d12c9efe707e6cb3__stage{view-transition-name:boot-safari--stage}._7ffe3a3db6f69647__inspector{view-transition-name:boot-safari--inspector}.fb03501e629fd04e__canvas{view-transition-name:boot-safari--canvas}}}@media (max-width:782px){:root:has(.c8317e9ebb034cfa__layout) *{view-transition-name:none!important}}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(root),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(root){animation-duration:.25s}@media not (prefers-reduced-motion:reduce){:root:has(.c8317e9ebb034cfa__layout) .components-popover:first-of-type{view-transition-name:boot--components-popover}}:root:has(.c8317e9ebb034cfa__layout)::view-transition-group(boot--canvas),:root:has(.c8317e9ebb034cfa__layout)::view-transition-group(boot--canvas-header),:root:has(.c8317e9ebb034cfa__layout)::view-transition-group(boot--canvas-sidebar),:root:has(.c8317e9ebb034cfa__layout)::view-transition-group(boot-safari--canvas){z-index:1}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot-safari--canvas),:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot-safari--inspector),:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot-safari--stage),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot-safari--canvas),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot-safari--inspector),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot-safari--stage){width:auto}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--canvas),:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--inspector),:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--stage),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--canvas),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--inspector),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--stage){background:#fff;border-radius:var(--wpds-border-radius-xl,12px);height:100%;object-fit:none;object-position:left top;overflow:hidden;width:100%}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--canvas),:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--canvas){object-position:center top}:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--inspector):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--stage):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot-safari--inspector):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot-safari--stage):only-child{animation-name:ef68027ea03aa34b__zoomOut;will-change:transform,opacity}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--inspector):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--stage):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot-safari--inspector):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot-safari--stage):only-child{animation-name:_0752ac81dff4c432__zoomIn;will-change:transform,opacity}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--canvas):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot-safari--canvas):only-child{animation-name:_3a2e4dc465681136__slideFromRight;will-change:transform}:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--canvas):only-child,:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot-safari--canvas):only-child{animation-name:_86a367ac26a1b61e__slideToRight;will-change:transform}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--canvas-header):only-child{animation-name:_462399c0e9d64199__slideHeaderFromTop;will-change:transform}:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--canvas-header):only-child{animation-name:_8b272f30d43c9f38__slideHeaderToTop;will-change:transform}:root:has(.c8317e9ebb034cfa__layout)::view-transition-new(boot--canvas-sidebar):only-child{animation-name:_69ed6a71d53a2e0c__slideSidebarFromRight;will-change:transform}:root:has(.c8317e9ebb034cfa__layout)::view-transition-old(boot--canvas-sidebar):only-child{animation-name:bf0697a36b00caad__slideSidebarToRight;will-change:transform}@keyframes ef68027ea03aa34b__zoomOut{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.9)}}@keyframes _0752ac81dff4c432__zoomIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes _3a2e4dc465681136__slideFromRight{0%{transform:translateX(100vw)}to{transform:translateX(0)}}@keyframes _86a367ac26a1b61e__slideToRight{0%{transform:translateX(0)}to{transform:translateX(100vw)}}@keyframes _462399c0e9d64199__slideHeaderFromTop{0%{transform:translateY(-100%)}}@keyframes _8b272f30d43c9f38__slideHeaderToTop{to{transform:translateY(-100%)}}@keyframes _69ed6a71d53a2e0c__slideSidebarFromRight{0%{transform:translateX(100%)}}@keyframes bf0697a36b00caad__slideSidebarToRight{to{transform:translateX(100%)}}");
13412 }
13413 var style_module_default11 = { "layout": "c8317e9ebb034cfa__layout", "has-full-canvas": "e97bb2807a9c4687__has-full-canvas", "notices-snackbar": "b8f8c6cf9ae266bf__notices-snackbar", "components-snackbar": "_94ac6b8f274ce2f6__components-snackbar", "sidebar-backdrop": "bfc3fedf39b1cf71__sidebar-backdrop", "sidebar": "bb4f70cd030be0a3__sidebar", "is-mobile": "_27e6d590dc5963c9__is-mobile", "mobile-sidebar-drawer": "_0eb5d3a3e94d6273__mobile-sidebar-drawer", "layout-single-page": "_26789cb167e9f578__layout-single-page", "canvas": "fb03501e629fd04e__canvas", "has-mobile-drawer": "fa94dab2ab1e36f3__has-mobile-drawer", "surfaces": "a03baddce3ef2026__surfaces", "stage": "d12c9efe707e6cb3__stage", "inspector": "_7ffe3a3db6f69647__inspector", "has-canvas": "f7fe42ef8c67e96f__has-canvas", "zoomOut": "ef68027ea03aa34b__zoomOut", "zoomIn": "_0752ac81dff4c432__zoomIn", "slideFromRight": "_3a2e4dc465681136__slideFromRight", "slideToRight": "_86a367ac26a1b61e__slideToRight", "slideHeaderFromTop": "_462399c0e9d64199__slideHeaderFromTop", "slideHeaderToTop": "_8b272f30d43c9f38__slideHeaderToTop", "slideSidebarFromRight": "_69ed6a71d53a2e0c__slideSidebarFromRight", "slideSidebarToRight": "bf0697a36b00caad__slideSidebarToRight" };
13414 var { useMatches: useMatches4, Outlet: Outlet2 } = unlock2(routePrivateApis7);
13415 function RootSinglePage() {
13416 const matches = useMatches4();
13417 const currentMatch = matches[matches.length - 1];
13418 const canvas = currentMatch?.loaderData?.canvas;
13419 const routeContentModule = currentMatch?.loaderData?.routeContentModule;
13420 const isFullScreen = canvas && !canvas.isPreview;
13421 useRouteTitle();
13422 const themeColors = (0, import_element43.useMemo)(getAdminThemeColors, []);
13423 const layoutRef = useSyncBodyBackground();
13424 return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_components15.SlotFillProvider, { children: [
13425 /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(PluginArea, {}),
13426 /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13427 import_theme2.ThemeProvider,
13428 {
13429 isRoot: true,
13430 color: { ...themeColors, background: "#f8f8f8" },
13431 children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_theme2.ThemeProvider, { color: themeColors, children: /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
13432 "div",
13433 {
13434 ref: layoutRef,
13435 className: clsx_default(
13436 style_module_default11.layout,
13437 style_module_default11["layout-single-page"],
13438 {
13439 [style_module_default11["has-canvas"]]: !!canvas || canvas === null,
13440 [style_module_default11["has-full-canvas"]]: isFullScreen
13441 }
13442 ),
13443 children: [
13444 /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_editor6.UnsavedChangesWarning, {}),
13445 /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(SavePanel, {}),
13446 /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13447 import_notices4.SnackbarNotices,
13448 {
13449 className: style_module_default11["notices-snackbar"]
13450 }
13451 ),
13452 /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: style_module_default11.surfaces, children: /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
13453 import_theme2.ThemeProvider,
13454 {
13455 color: {
13456 ...themeColors,
13457 // Reset to the default background color.
13458 background: "#fcfcfc"
13459 },
13460 children: [
13461 /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Outlet2, {}),
13462 (canvas || canvas === null) && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: style_module_default11.canvas, children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
13463 CanvasRenderer,
13464 {
13465 canvas,
13466 routeContentModule
13467 }
13468 ) })
13469 ]
13470 }
13471 ) })
13472 ]
13473 }
13474 ) })
13475 }
13476 )
13477 ] });
13478 }
13479
13480 // packages/boot/build-module/components/app/index.mjs
13481 var import_jsx_runtime56 = __toESM(require_jsx_runtime(), 1);
13482 function App({ rootComponent }) {
13483 const routes = (0, import_data14.useSelect)((select) => select(store).getRoutes(), []);
13484 return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Router, { routes, rootComponent });
13485 }
13486 async function runInitModules(initModules) {
13487 for (const moduleId of initModules ?? []) {
13488 const module = await import(moduleId);
13489 await module.init();
13490 }
13491 }
13492 async function init({
13493 mountId,
13494 menuItems,
13495 routes,
13496 initModules,
13497 dashboardLink
13498 }) {
13499 (menuItems ?? []).forEach((menuItem) => {
13500 (0, import_data14.dispatch)(store).registerMenuItem(menuItem.id, menuItem);
13501 });
13502 (routes ?? []).forEach((route) => {
13503 (0, import_data14.dispatch)(store).registerRoute(route);
13504 });
13505 if (dashboardLink) {
13506 (0, import_data14.dispatch)(store).setDashboardLink(dashboardLink);
13507 }
13508 await runInitModules(initModules);
13509 const rootElement = document.getElementById(mountId);
13510 if (rootElement) {
13511 const root = (0, import_element44.createRoot)(rootElement);
13512 root.render(
13513 /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_element44.StrictMode, { children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(App, {}) })
13514 );
13515 }
13516 }
13517 async function initSinglePage({
13518 mountId,
13519 routes,
13520 initModules
13521 }) {
13522 (routes ?? []).forEach((route) => {
13523 (0, import_data14.dispatch)(store).registerRoute(route);
13524 });
13525 await runInitModules(initModules);
13526 const rootElement = document.getElementById(mountId);
13527 if (rootElement) {
13528 const root = (0, import_element44.createRoot)(rootElement);
13529 root.render(
13530 /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_element44.StrictMode, { children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(App, { rootComponent: RootSinglePage }) })
13531 );
13532 }
13533 }
13534 export {
13535 init,
13536 initSinglePage,
13537 store
13538 };
13539 /*! Bundled license information:
13540
13541 use-sync-external-store/cjs/use-sync-external-store-shim.development.js:
13542 (**
13543 * @license React
13544 * use-sync-external-store-shim.development.js
13545 *
13546 * Copyright (c) Meta Platforms, Inc. and affiliates.
13547 *
13548 * This source code is licensed under the MIT license found in the
13549 * LICENSE file in the root directory of this source tree.
13550 *)
13551
13552 use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js:
13553 (**
13554 * @license React
13555 * use-sync-external-store-shim/with-selector.development.js
13556 *
13557 * Copyright (c) Meta Platforms, Inc. and affiliates.
13558 *
13559 * This source code is licensed under the MIT license found in the
13560 * LICENSE file in the root directory of this source tree.
13561 *)
13562 */
13563 //# sourceMappingURL=index.js.map
13564