PluginProbe
Gutenberg / trunk
Gutenberg vtrunk
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
← All changes | build/scripts/block-directory/index.js +8780 -237 23.1.0 → trunk View file →
@@ -1,4 +1,5 @@
1 +(function() {
1 2 var wp;
2 3 (wp ||= {}).blockDirectory = (() => {
3 4 var __create = Object.create;
4 5 var __defProp = Object.defineProperty;
@@ -149,15 +150,184 @@
149 150 module.exports = window.ReactJSXRuntime;
150 151 }
151 152 });
152 153
153 - // package-external:@wordpress/a11y
154 - var require_a11y = __commonJS({
155 - "package-external:@wordpress/a11y"(exports, module) {
156 - module.exports = window.wp.a11y;
154 + // vendor-external:react-dom
155 + var require_react_dom = __commonJS({
156 + "vendor-external:react-dom"(exports, module) {
157 + module.exports = window.ReactDOM;
157 158 }
158 159 });
159 160
161 + // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js
162 + var require_use_sync_external_store_shim_development = __commonJS({
163 + "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(exports) {
164 + "use strict";
165 + (function() {
166 + function is(x, y) {
167 + return x === y && (0 !== x || 1 / x === 1 / y) || x !== x && y !== y;
168 + }
169 + function useSyncExternalStore$2(subscribe, getSnapshot) {
170 + didWarnOld18Alpha || void 0 === React48.startTransition || (didWarnOld18Alpha = true, console.error(
171 + "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."
172 + ));
173 + var value = getSnapshot();
174 + if (!didWarnUncachedGetSnapshot) {
175 + var cachedValue = getSnapshot();
176 + objectIs(value, cachedValue) || (console.error(
177 + "The result of getSnapshot should be cached to avoid an infinite loop"
178 + ), didWarnUncachedGetSnapshot = true);
179 + }
180 + cachedValue = useState13({
181 + inst: { value, getSnapshot }
182 + });
183 + var inst = cachedValue[0].inst, forceUpdate = cachedValue[1];
184 + useLayoutEffect3(
185 + function() {
186 + inst.value = value;
187 + inst.getSnapshot = getSnapshot;
188 + checkIfSnapshotChanged(inst) && forceUpdate({ inst });
189 + },
190 + [subscribe, value, getSnapshot]
191 + );
192 + useEffect13(
193 + function() {
194 + checkIfSnapshotChanged(inst) && forceUpdate({ inst });
195 + return subscribe(function() {
196 + checkIfSnapshotChanged(inst) && forceUpdate({ inst });
197 + });
198 + },
199 + [subscribe]
200 + );
201 + useDebugValue2(value);
202 + return value;
203 + }
204 + function checkIfSnapshotChanged(inst) {
205 + var latestGetSnapshot = inst.getSnapshot;
206 + inst = inst.value;
207 + try {
208 + var nextValue = latestGetSnapshot();
209 + return !objectIs(inst, nextValue);
210 + } catch (error) {
211 + return true;
212 + }
213 + }
214 + function useSyncExternalStore$1(subscribe, getSnapshot) {
215 + return getSnapshot();
216 + }
217 + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
218 + var React48 = require_react(), objectIs = "function" === typeof Object.is ? Object.is : is, useState13 = React48.useState, useEffect13 = 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;
219 + exports.useSyncExternalStore = void 0 !== React48.useSyncExternalStore ? React48.useSyncExternalStore : shim;
220 + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
221 + })();
222 + }
223 + });
224 +
225 + // node_modules/use-sync-external-store/shim/index.js
226 + var require_shim = __commonJS({
227 + "node_modules/use-sync-external-store/shim/index.js"(exports, module) {
228 + "use strict";
229 + if (false) {
230 + module.exports = null;
231 + } else {
232 + module.exports = require_use_sync_external_store_shim_development();
233 + }
234 + }
235 + });
236 +
237 + // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js
238 + var require_with_selector_development = __commonJS({
239 + "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js"(exports) {
240 + "use strict";
241 + (function() {
242 + function is(x, y) {
243 + return x === y && (0 !== x || 1 / x === 1 / y) || x !== x && y !== y;
244 + }
245 + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
246 + var React48 = require_react(), shim = require_shim(), objectIs = "function" === typeof Object.is ? Object.is : is, useSyncExternalStore3 = shim.useSyncExternalStore, useRef18 = React48.useRef, useEffect13 = React48.useEffect, useMemo16 = React48.useMemo, useDebugValue2 = React48.useDebugValue;
247 + exports.useSyncExternalStoreWithSelector = function(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) {
248 + var instRef = useRef18(null);
249 + if (null === instRef.current) {
250 + var inst = { hasValue: false, value: null };
251 + instRef.current = inst;
252 + } else inst = instRef.current;
253 + instRef = useMemo16(
254 + function() {
255 + function memoizedSelector(nextSnapshot) {
256 + if (!hasMemo) {
257 + hasMemo = true;
258 + memoizedSnapshot = nextSnapshot;
259 + nextSnapshot = selector(nextSnapshot);
260 + if (void 0 !== isEqual && inst.hasValue) {
261 + var currentSelection = inst.value;
262 + if (isEqual(currentSelection, nextSnapshot))
263 + return memoizedSelection = currentSelection;
264 + }
265 + return memoizedSelection = nextSnapshot;
266 + }
267 + currentSelection = memoizedSelection;
268 + if (objectIs(memoizedSnapshot, nextSnapshot))
269 + return currentSelection;
270 + var nextSelection = selector(nextSnapshot);
271 + if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))
272 + return memoizedSnapshot = nextSnapshot, currentSelection;
273 + memoizedSnapshot = nextSnapshot;
274 + return memoizedSelection = nextSelection;
275 + }
276 + var hasMemo = false, memoizedSnapshot, memoizedSelection, maybeGetServerSnapshot = void 0 === getServerSnapshot ? null : getServerSnapshot;
277 + return [
278 + function() {
279 + return memoizedSelector(getSnapshot());
280 + },
281 + null === maybeGetServerSnapshot ? void 0 : function() {
282 + return memoizedSelector(maybeGetServerSnapshot());
283 + }
284 + ];
285 + },
286 + [getSnapshot, getServerSnapshot, selector, isEqual]
287 + );
288 + var value = useSyncExternalStore3(subscribe, instRef[0], instRef[1]);
289 + useEffect13(
290 + function() {
291 + inst.hasValue = true;
292 + inst.value = value;
293 + },
294 + [value]
295 + );
296 + useDebugValue2(value);
297 + return value;
298 + };
299 + "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
300 + })();
301 + }
302 + });
303 +
304 + // node_modules/use-sync-external-store/shim/with-selector.js
305 + var require_with_selector = __commonJS({
306 + "node_modules/use-sync-external-store/shim/with-selector.js"(exports, module) {
307 + "use strict";
308 + if (false) {
309 + module.exports = null;
310 + } else {
311 + module.exports = require_with_selector_development();
312 + }
313 + }
314 + });
315 +
316 + // package-external:@wordpress/theme
317 + var require_theme = __commonJS({
318 + "package-external:@wordpress/theme"(exports, module) {
319 + module.exports = window.wp.theme;
320 + }
321 + });
322 +
323 + // package-external:@wordpress/private-apis
324 + var require_private_apis = __commonJS({
325 + "package-external:@wordpress/private-apis"(exports, module) {
326 + module.exports = window.wp.privateApis;
327 + }
328 + });
329 +
160 330 // package-external:@wordpress/primitives
161 331 var require_primitives = __commonJS({
162 332 "package-external:@wordpress/primitives"(exports, module) {
163 333 module.exports = window.wp.primitives;
@@ -163,8 +333,15 @@
163 333 module.exports = window.wp.primitives;
164 334 }
165 335 });
166 336
337 + // package-external:@wordpress/a11y
338 + var require_a11y = __commonJS({
339 + "package-external:@wordpress/a11y"(exports, module) {
340 + module.exports = window.wp.a11y;
341 + }
342 + });
343 +
167 344 // packages/block-directory/build-module/index.mjs
168 345 var index_exports = {};
169 346 __export(index_exports, {
170 347 store: () => store
@@ -371,11 +548,11 @@
371 548 var import_api_fetch = __toESM(require_api_fetch(), 1);
372 549 var loadAsset = (el) => {
373 550 return new Promise((resolve, reject) => {
374 551 const newNode = document.createElement(el.nodeName);
375 - ["id", "rel", "src", "href", "type"].forEach((attr) => {
376 - if (el[attr]) {
377 - newNode[attr] = el[attr];
552 + ["id", "rel", "src", "href", "type"].forEach((attr2) => {
553 + if (el[attr2]) {
554 + newNode[attr2] = el[attr2];
378 555 }
379 556 });
380 557 if (el.innerHTML) {
381 558 newNode.appendChild(document.createTextNode(el.innerHTML));
@@ -633,12 +810,12 @@
633 810 }, input);
634 811 }
635 812
636 813 // node_modules/pascal-case/dist.es2015/index.js
637 - function pascalCaseTransform(input, index) {
814 + function pascalCaseTransform(input, index2) {
638 815 var firstChar = input.charAt(0);
639 816 var lowerChars = input.substr(1).toLowerCase();
640 - if (index > 0 && firstChar >= "0" && firstChar <= "9") {
817 + if (index2 > 0 && firstChar >= "0" && firstChar <= "9") {
641 818 return "_" + firstChar + lowerChars;
642 819 }
643 820 return "" + firstChar.toUpperCase() + lowerChars;
644 821 }
@@ -649,12 +826,12 @@
649 826 return noCase(input, __assign({ delimiter: "", transform: pascalCaseTransform }, options));
650 827 }
651 828
652 829 // node_modules/camel-case/dist.es2015/index.js
653 - function camelCaseTransform(input, index) {
654 - if (index === 0)
830 + function camelCaseTransform(input, index2) {
831 + if (index2 === 0)
655 832 return input.toLowerCase();
656 - return pascalCaseTransform(input, index);
833 + return pascalCaseTransform(input, index2);
657 834 }
658 835 function camelCase(input, options) {
659 836 if (options === void 0) {
660 837 options = {};
@@ -722,12 +899,12 @@
722 899
723 900 // packages/block-directory/build-module/plugins/inserter-menu-downloadable-blocks-panel/index.mjs
724 901 var import_block_editor3 = __toESM(require_block_editor(), 1);
725 902 var import_compose = __toESM(require_compose(), 1);
726 - var import_element6 = __toESM(require_element(), 1);
903 + var import_element20 = __toESM(require_element(), 1);
727 904
728 905 // packages/block-directory/build-module/components/downloadable-blocks-panel/index.mjs
729 - var import_i18n8 = __toESM(require_i18n(), 1);
906 + var import_i18n9 = __toESM(require_i18n(), 1);
730 907 var import_components4 = __toESM(require_components(), 1);
731 908 var import_core_data = __toESM(require_core_data(), 1);
732 909 var import_data8 = __toESM(require_data(), 1);
733 910 var import_blocks5 = __toESM(require_blocks(), 1);
@@ -732,9 +909,9 @@
732 909 var import_data8 = __toESM(require_data(), 1);
733 910 var import_blocks5 = __toESM(require_blocks(), 1);
734 911
735 912 // packages/block-directory/build-module/components/downloadable-blocks-list/index.mjs
736 - var import_i18n5 = __toESM(require_i18n(), 1);
913 + var import_i18n6 = __toESM(require_i18n(), 1);
737 914 var import_components2 = __toESM(require_components(), 1);
738 915 var import_blocks4 = __toESM(require_blocks(), 1);
739 916 var import_data7 = __toESM(require_data(), 1);
740 917
@@ -754,20 +931,49 @@
754 931 }
755 932 var clsx_default = clsx;
756 933
757 934 // packages/block-directory/build-module/components/downloadable-block-list-item/index.mjs
758 - var import_i18n4 = __toESM(require_i18n(), 1);
935 + var import_i18n5 = __toESM(require_i18n(), 1);
759 936 var import_components = __toESM(require_components(), 1);
760 - var import_element4 = __toESM(require_element(), 1);
937 + var import_element18 = __toESM(require_element(), 1);
761 938 var import_html_entities = __toESM(require_html_entities(), 1);
762 939 var import_blocks3 = __toESM(require_blocks(), 1);
763 940 var import_data6 = __toESM(require_data(), 1);
764 941
765 - // node_modules/@base-ui/utils/esm/useRefWithInit.js
942 + // node_modules/@base-ui/utils/createLogOnce.mjs
943 + var loggedMessages;
944 + if (true) {
945 + loggedMessages = /* @__PURE__ */ new Set();
946 + }
947 + function createLogOnce(severity, prefix) {
948 + return function logOnce(...messages) {
949 + if (true) {
950 + const message = messages.join(" ");
951 + const output = prefix ? `${prefix}: ${message}` : message;
952 + const key = `${severity}:${output}`;
953 + if (!loggedMessages.has(key)) {
954 + loggedMessages.add(key);
955 + if (severity === "warn") {
956 + console.warn(output);
957 + } else {
958 + console.error(output);
959 + }
960 + }
961 + }
962 + };
963 + }
964 +
965 + // node_modules/@base-ui/utils/safeReact.mjs
766 966 var React = __toESM(require_react(), 1);
967 + var SafeReact = {
968 + ...React
969 + };
970 +
971 + // node_modules/@base-ui/utils/useRefWithInit.mjs
972 + var React2 = __toESM(require_react(), 1);
767 973 var UNINITIALIZED = {};
768 974 function useRefWithInit(init, initArg) {
769 - const ref = React.useRef(UNINITIALIZED);
975 + const ref = React2.useRef(UNINITIALIZED);
770 976 if (ref.current === UNINITIALIZED) {
771 977 ref.current = init(initArg);
772 978 }
773 979 return ref;
@@ -772,27 +978,60 @@
772 978 }
773 979 return ref;
774 980 }
775 981
776 - // node_modules/@base-ui/utils/esm/warn.js
777 - var set;
778 - if (true) {
779 - set = /* @__PURE__ */ new Set();
982 + // node_modules/@base-ui/utils/useStableCallback.mjs
983 + var useInsertionEffect = SafeReact.useInsertionEffect;
984 + var useSafeInsertionEffect = (
985 + // React 17 doesn't have useInsertionEffect.
986 + useInsertionEffect && // Preact replaces useInsertionEffect with useLayoutEffect and fires too late.
987 + useInsertionEffect !== SafeReact.useLayoutEffect ? useInsertionEffect : (fn) => fn()
988 + );
989 + function useStableCallback(callback) {
990 + const stable = useRefWithInit(createStableCallback).current;
991 + stable.next = callback;
992 + useSafeInsertionEffect(stable.effect);
993 + return stable.trampoline;
780 994 }
781 - function warn(...messages) {
995 + function createStableCallback() {
996 + const stable = {
997 + next: void 0,
998 + callback: assertNotCalled,
999 + trampoline: (...args) => stable.callback?.(...args),
1000 + effect: () => {
1001 + stable.callback = stable.next;
1002 + }
1003 + };
1004 + return stable;
1005 + }
1006 + function assertNotCalled() {
782 1007 if (true) {
783 - const messageKey = messages.join(" ");
784 - if (!set.has(messageKey)) {
785 - set.add(messageKey);
786 - console.warn(`Base UI: ${messageKey}`);
787 - }
1008 + throw (
1009 + /* minify-error-disabled */
1010 + new Error("Base UI: Cannot call an event handler while rendering.")
1011 + );
788 1012 }
789 1013 }
790 1014
791 - // node_modules/@base-ui/react/esm/internals/useRenderElement.js
792 - var React4 = __toESM(require_react(), 1);
1015 + // node_modules/@base-ui/utils/warn.mjs
1016 + var warn = createLogOnce("warn", "Base UI");
793 1017
794 - // node_modules/@base-ui/utils/esm/useMergedRefs.js
1018 + // node_modules/@base-ui/utils/empty.mjs
1019 + function NOOP() {
1020 + }
1021 + var EMPTY_ARRAY2 = Object.freeze([]);
1022 + var EMPTY_OBJECT = Object.freeze({});
1023 +
1024 + // node_modules/@base-ui/utils/useIsoLayoutEffect.mjs
1025 + var React3 = __toESM(require_react(), 1);
1026 + var noop = () => {
1027 + };
1028 + var useIsoLayoutEffect = typeof document !== "undefined" ? React3.useLayoutEffect : noop;
1029 +
1030 + // node_modules/@base-ui/react/internals/useRenderElement.mjs
1031 + var React6 = __toESM(require_react(), 1);
1032 +
1033 + // node_modules/@base-ui/utils/useMergedRefs.mjs
795 1034 function useMergedRefs(a, b, c, d) {
796 1035 const forkRef = useRefWithInit(createForkRef).current;
797 1036 if (didChange(forkRef, a, b, c, d)) {
798 1037 update(forkRef, [a, b, c, d]);
@@ -816,9 +1055,9 @@
816 1055 function didChange(forkRef, a, b, c, d) {
817 1056 return forkRef.refs[0] !== a || forkRef.refs[1] !== b || forkRef.refs[2] !== c || forkRef.refs[3] !== d;
818 1057 }
819 1058 function didChangeN(forkRef, newRefs) {
820 - return forkRef.refs.length !== newRefs.length || forkRef.refs.some((ref, index) => ref !== newRefs[index]);
1059 + return forkRef.refs.length !== newRefs.length || forkRef.refs.some((ref, index2) => ref !== newRefs[index2]);
821 1060 }
822 1061 function update(forkRef, refs) {
823 1062 forkRef.refs = refs;
824 1063 if (refs.every((ref) => ref == null)) {
@@ -863,9 +1102,9 @@
863 1102 const cleanupCallback = cleanupCallbacks[i];
864 1103 if (typeof cleanupCallback === "function") {
865 1104 cleanupCallback();
866 1105 } else {
867 - ref(null);
1106 + void ref(null);
868 1107 }
869 1108 break;
870 1109 }
871 1110 case "object": {
@@ -879,21 +1118,21 @@
879 1118 }
880 1119 };
881 1120 }
882 1121
883 - // node_modules/@base-ui/utils/esm/getReactElementRef.js
884 - var React3 = __toESM(require_react(), 1);
1122 + // node_modules/@base-ui/utils/getReactElementRef.mjs
1123 + var React5 = __toESM(require_react(), 1);
885 1124
886 - // node_modules/@base-ui/utils/esm/reactVersion.js
887 - var React2 = __toESM(require_react(), 1);
888 - var majorVersion = parseInt(React2.version, 10);
1125 + // node_modules/@base-ui/utils/reactVersion.mjs
1126 + var React4 = __toESM(require_react(), 1);
1127 + var majorVersion = parseInt(React4.version, 10);
889 1128 function isReactVersionAtLeast(reactVersionToCheck) {
890 1129 return majorVersion >= reactVersionToCheck;
891 1130 }
892 1131
893 - // node_modules/@base-ui/utils/esm/getReactElementRef.js
1132 + // node_modules/@base-ui/utils/getReactElementRef.mjs
894 1133 function getReactElementRef(element) {
895 - if (!/* @__PURE__ */ React3.isValidElement(element)) {
1134 + if (!/* @__PURE__ */ React5.isValidElement(element)) {
896 1135 return null;
897 1136 }
898 1137 const reactElement = element;
899 1138 const propsWithRef = reactElement.props;
@@ -899,9 +1138,9 @@
899 1138 const propsWithRef = reactElement.props;
900 1139 return (isReactVersionAtLeast(19) ? propsWithRef?.ref : reactElement.ref) ?? null;
901 1140 }
902 1141
903 - // node_modules/@base-ui/utils/esm/mergeObjects.js
1142 + // node_modules/@base-ui/utils/mergeObjects.mjs
904 1143 function mergeObjects(a, b) {
905 1144 if (a && !b) {
906 1145 return a;
907 1146 }
@@ -916,13 +1155,9 @@
916 1155 }
917 1156 return void 0;
918 1157 }
919 1158
920 - // node_modules/@base-ui/utils/esm/empty.js
921 - var EMPTY_ARRAY2 = Object.freeze([]);
922 - var EMPTY_OBJECT = Object.freeze({});
923 -
924 - // node_modules/@base-ui/react/esm/internals/getStateAttributesProps.js
1159 + // node_modules/@base-ui/react/internals/getStateAttributesProps.mjs
925 1160 function getStateAttributesProps(state, customMapping) {
926 1161 const props = {};
927 1162 for (const key in state) {
928 1163 const value = state[key];
@@ -941,19 +1176,19 @@
941 1176 }
942 1177 return props;
943 1178 }
944 1179
945 - // node_modules/@base-ui/react/esm/utils/resolveClassName.js
1180 + // node_modules/@base-ui/react/utils/resolveClassName.mjs
946 1181 function resolveClassName(className, state) {
947 1182 return typeof className === "function" ? className(state) : className;
948 1183 }
949 1184
950 - // node_modules/@base-ui/react/esm/utils/resolveStyle.js
1185 + // node_modules/@base-ui/react/utils/resolveStyle.mjs
951 1186 function resolveStyle(style, state) {
952 1187 return typeof style === "function" ? style(state) : style;
953 1188 }
954 1189
955 - // node_modules/@base-ui/react/esm/merge-props/mergeProps.js
1190 + // node_modules/@base-ui/react/merge-props/mergeProps.mjs
956 1191 var EMPTY_PROPS = {};
957 1192 function mergeProps(a, b, c, d, e) {
958 1193 if (!c && !d && !e && !a) {
959 1194 return createInitialMergedProps(b);
@@ -1106,13 +1341,16 @@
1106 1341 function isSyntheticEvent(event) {
1107 1342 return event != null && typeof event === "object" && "nativeEvent" in event;
1108 1343 }
1109 1344
1110 - // node_modules/@base-ui/react/esm/internals/useRenderElement.js
1345 + // node_modules/@base-ui/react/internals/useRenderElement.mjs
1111 1346 var import_react = __toESM(require_react(), 1);
1112 1347 function useRenderElement(element, componentProps, params = {}) {
1113 - const renderProp = componentProps.render;
1114 - const outProps = useRenderElementProps(componentProps, params);
1348 + let renderProp = componentProps.render;
1349 + if (params.enabled !== false) {
1350 + renderProp = unwrapLazyRenderProp(renderProp);
1351 + }
1352 + const outProps = useRenderElementProps(componentProps, params, renderProp);
1115 1353 if (params.enabled === false) {
1116 1354 return null;
1117 1355 }
1118 1356 const state = params.state ?? EMPTY_OBJECT;
@@ -1117,13 +1355,12 @@
1117 1355 }
1118 1356 const state = params.state ?? EMPTY_OBJECT;
1119 1357 return evaluateRenderProp(element, renderProp, outProps, state);
1120 1358 }
1121 - function useRenderElementProps(componentProps, params = {}) {
1359 + function useRenderElementProps(componentProps, params, renderProp) {
1122 1360 const {
1123 1361 className: classNameProp,
1124 - style: styleProp,
1125 - render: renderProp
1362 + style: styleProp
1126 1363 } = componentProps;
1127 1364 const {
1128 1365 state = EMPTY_OBJECT,
1129 1366 ref,
@@ -1137,9 +1374,9 @@
1137 1374 const resolvedProps = enabled && props ? resolveRenderFunctionProps(props) : void 0;
1138 1375 const outProps = enabled ? mergeObjects(stateProps, resolvedProps) ?? {} : EMPTY_OBJECT;
1139 1376 if (typeof document !== "undefined") {
1140 1377 if (!enabled) {
1141 - useMergedRefs(null, null);
1378 + void useMergedRefs(null, null);
1142 1379 } else if (Array.isArray(ref)) {
1143 1380 outProps.ref = useMergedRefsN([outProps.ref, getReactElementRef(renderProp), ...ref]);
1144 1381 } else {
1145 1382 outProps.ref = useMergedRefs(outProps.ref, getReactElementRef(renderProp), ref);
@@ -1164,8 +1401,15 @@
1164 1401 }
1165 1402 var REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for("react.lazy");
1166 1403 var COMPONENT_IDENTIFIER_PATTERN = /^[A-Z][A-Za-z0-9$]*$/;
1167 1404 var LOWERCASE_CHARACTER_PATTERN = /[a-z]/;
1405 + function unwrapLazyRenderProp(render) {
1406 + if (render?.$$typeof !== REACT_LAZY_TYPE) {
1407 + return render;
1408 + }
1409 + const unwrapped = React6.Children.toArray(render)[0];
1410 + return /* @__PURE__ */ React6.isValidElement(unwrapped) ? unwrapped : render;
1411 + }
1168 1412 function evaluateRenderProp(element, render, props, state) {
1169 1413 if (render) {
1170 1414 if (typeof render === "function") {
1171 1415 if (true) {
@@ -1174,19 +1418,14 @@
1174 1418 return render(props, state);
1175 1419 }
1176 1420 const mergedProps = mergeProps(props, render.props);
1177 1421 mergedProps.ref = props.ref;
1178 - let newElement = render;
1179 - if (newElement?.$$typeof === REACT_LAZY_TYPE) {
1180 - const children = React4.Children.toArray(render);
1181 - newElement = children[0];
1182 - }
1183 1422 if (true) {
1184 - if (!/* @__PURE__ */ React4.isValidElement(newElement)) {
1423 + if (!/* @__PURE__ */ React6.isValidElement(render)) {
1185 1424 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"));
1186 1425 }
1187 1426 }
1188 - return /* @__PURE__ */ React4.cloneElement(newElement, mergedProps);
1427 + return /* @__PURE__ */ React6.cloneElement(render, mergedProps);
1189 1428 }
1190 1429 if (element) {
1191 1430 if (typeof element === "string") {
1192 1431 return renderTag(element, props);
@@ -1221,24 +1460,8194 @@
1221 1460 ...props,
1222 1461 key: props.key
1223 1462 });
1224 1463 }
1225 - return /* @__PURE__ */ React4.createElement(Tag, props);
1464 + return /* @__PURE__ */ React6.createElement(Tag, props);
1226 1465 }
1227 1466
1228 - // node_modules/@base-ui/react/esm/use-render/useRender.js
1467 + // node_modules/@base-ui/utils/useId.mjs
1468 + var React7 = __toESM(require_react(), 1);
1469 + var globalId = 0;
1470 + function useGlobalId(idOverride, prefix = "mui") {
1471 + const [defaultId, setDefaultId] = React7.useState(idOverride);
1472 + const id = idOverride || defaultId;
1473 + React7.useEffect(() => {
1474 + if (defaultId == null) {
1475 + globalId += 1;
1476 + setDefaultId(`${prefix}-${globalId}`);
1477 + }
1478 + }, [defaultId, prefix]);
1479 + return id;
1480 + }
1481 + var maybeReactUseId = SafeReact.useId;
1482 + function useId(idOverride, prefix) {
1483 + if (maybeReactUseId !== void 0) {
1484 + const reactId = maybeReactUseId();
1485 + return idOverride ?? (prefix ? `${prefix}-${reactId}` : reactId);
1486 + }
1487 + return useGlobalId(idOverride, prefix);
1488 + }
1489 +
1490 + // node_modules/@base-ui/react/internals/useBaseUiId.mjs
1491 + function useBaseUiId(idOverride) {
1492 + return useId(idOverride, "base-ui");
1493 + }
1494 +
1495 + // node_modules/@base-ui/react/internals/reason-parts.mjs
1496 + var reason_parts_exports = {};
1497 + __export(reason_parts_exports, {
1498 + cancelOpen: () => cancelOpen,
1499 + chipRemovePress: () => chipRemovePress,
1500 + clearPress: () => clearPress,
1501 + closePress: () => closePress,
1502 + closeWatcher: () => closeWatcher,
1503 + decrementPress: () => decrementPress,
1504 + disabled: () => disabled,
1505 + drag: () => drag,
1506 + escapeKey: () => escapeKey,
1507 + focusOut: () => focusOut,
1508 + imperativeAction: () => imperativeAction,
1509 + incrementPress: () => incrementPress,
1510 + initial: () => initial,
1511 + inputBlur: () => inputBlur,
1512 + inputChange: () => inputChange,
1513 + inputClear: () => inputClear,
1514 + inputPaste: () => inputPaste,
1515 + inputPress: () => inputPress,
1516 + itemPress: () => itemPress,
1517 + keyboard: () => keyboard,
1518 + linkPress: () => linkPress,
1519 + listNavigation: () => listNavigation,
1520 + missing: () => missing,
1521 + none: () => none,
1522 + outsidePress: () => outsidePress,
1523 + pointer: () => pointer,
1524 + scrub: () => scrub,
1525 + siblingOpen: () => siblingOpen,
1526 + swipe: () => swipe,
1527 + trackPress: () => trackPress,
1528 + triggerFocus: () => triggerFocus,
1529 + triggerHover: () => triggerHover,
1530 + triggerPress: () => triggerPress,
1531 + wheel: () => wheel,
1532 + windowResize: () => windowResize
1533 + });
1534 + var none = "none";
1535 + var triggerPress = "trigger-press";
1536 + var triggerHover = "trigger-hover";
1537 + var triggerFocus = "trigger-focus";
1538 + var outsidePress = "outside-press";
1539 + var itemPress = "item-press";
1540 + var closePress = "close-press";
1541 + var linkPress = "link-press";
1542 + var clearPress = "clear-press";
1543 + var chipRemovePress = "chip-remove-press";
1544 + var trackPress = "track-press";
1545 + var incrementPress = "increment-press";
1546 + var decrementPress = "decrement-press";
1547 + var inputChange = "input-change";
1548 + var inputClear = "input-clear";
1549 + var inputBlur = "input-blur";
1550 + var inputPaste = "input-paste";
1551 + var inputPress = "input-press";
1552 + var focusOut = "focus-out";
1553 + var escapeKey = "escape-key";
1554 + var closeWatcher = "close-watcher";
1555 + var listNavigation = "list-navigation";
1556 + var keyboard = "keyboard";
1557 + var pointer = "pointer";
1558 + var drag = "drag";
1559 + var wheel = "wheel";
1560 + var scrub = "scrub";
1561 + var cancelOpen = "cancel-open";
1562 + var siblingOpen = "sibling-open";
1563 + var disabled = "disabled";
1564 + var missing = "missing";
1565 + var initial = "initial";
1566 + var imperativeAction = "imperative-action";
1567 + var swipe = "swipe";
1568 + var windowResize = "window-resize";
1569 +
1570 + // node_modules/@base-ui/react/internals/createBaseUIEventDetails.mjs
1571 + function createChangeEventDetails(reason, event, trigger, customProperties) {
1572 + let canceled = false;
1573 + let allowPropagation = false;
1574 + const custom = customProperties ?? EMPTY_OBJECT;
1575 + const details = {
1576 + reason,
1577 + event: event ?? new Event("base-ui"),
1578 + cancel() {
1579 + canceled = true;
1580 + },
1581 + allowPropagation() {
1582 + allowPropagation = true;
1583 + },
1584 + get isCanceled() {
1585 + return canceled;
1586 + },
1587 + get isPropagationAllowed() {
1588 + return allowPropagation;
1589 + },
1590 + trigger,
1591 + ...custom
1592 + };
1593 + return details;
1594 + }
1595 +
1596 + // node_modules/@base-ui/react/internals/useTransitionStatus.mjs
1597 + var React9 = __toESM(require_react(), 1);
1598 +
1599 + // node_modules/@base-ui/utils/useOnMount.mjs
1600 + var React8 = __toESM(require_react(), 1);
1601 + function useOnMount(fn) {
1602 + React8.useEffect(fn, EMPTY_ARRAY2);
1603 + }
1604 +
1605 + // node_modules/@base-ui/utils/useAnimationFrame.mjs
1606 + var EMPTY = null;
1607 + var LAST_RAF = globalThis.requestAnimationFrame;
1608 + var Scheduler = class {
1609 + /* This implementation uses an array as a backing data-structure for frame callbacks.
1610 + * It allows `O(1)` callback cancelling by inserting a `null` in the array, though it
1611 + * never calls the native `cancelAnimationFrame` if there are no frames left. This can
1612 + * be much more efficient if there is a call pattern that alterns as
1613 + * "request-cancel-request-cancel-…".
1614 + * But in the case of "request-request-…-cancel-cancel-…", it leaves the final animation
1615 + * frame to run anyway. We turn that frame into a `O(1)` no-op via `callbacksCount`. */
1616 + callbacks = [];
1617 + callbacksCount = 0;
1618 + nextId = 1;
1619 + startId = 1;
1620 + isScheduled = false;
1621 + tick = (timestamp) => {
1622 + this.isScheduled = false;
1623 + const currentCallbacks = this.callbacks;
1624 + const currentCallbacksCount = this.callbacksCount;
1625 + this.callbacks = [];
1626 + this.callbacksCount = 0;
1627 + this.startId = this.nextId;
1628 + if (currentCallbacksCount > 0) {
1629 + for (let i = 0; i < currentCallbacks.length; i += 1) {
1630 + currentCallbacks[i]?.(timestamp);
1631 + }
1632 + }
1633 + };
1634 + request(fn) {
1635 + const id = this.nextId;
1636 + this.nextId += 1;
1637 + this.callbacks.push(fn);
1638 + this.callbacksCount += 1;
1639 + const didRAFChange = LAST_RAF !== requestAnimationFrame && (LAST_RAF = requestAnimationFrame, true);
1640 + if (!this.isScheduled || didRAFChange) {
1641 + requestAnimationFrame(this.tick);
1642 + this.isScheduled = true;
1643 + }
1644 + return id;
1645 + }
1646 + cancel(id) {
1647 + const index2 = id - this.startId;
1648 + if (index2 < 0 || index2 >= this.callbacks.length) {
1649 + return;
1650 + }
1651 + if (this.callbacks[index2] === null) {
1652 + return;
1653 + }
1654 + this.callbacks[index2] = null;
1655 + this.callbacksCount -= 1;
1656 + }
1657 + };
1658 + var scheduler = new Scheduler();
1659 + var AnimationFrame = class _AnimationFrame {
1660 + static create() {
1661 + return new _AnimationFrame();
1662 + }
1663 + static request(fn) {
1664 + return scheduler.request(fn);
1665 + }
1666 + static cancel(id) {
1667 + return scheduler.cancel(id);
1668 + }
1669 + currentId = EMPTY;
1670 + /**
1671 + * Executes `fn` after `delay`, clearing any previously scheduled call.
1672 + */
1673 + request(fn) {
1674 + this.cancel();
1675 + this.currentId = scheduler.request(() => {
1676 + this.currentId = EMPTY;
1677 + fn();
1678 + });
1679 + }
1680 + cancel = () => {
1681 + if (this.currentId !== EMPTY) {
1682 + scheduler.cancel(this.currentId);
1683 + this.currentId = EMPTY;
1684 + }
1685 + };
1686 + disposeEffect = () => {
1687 + return this.cancel;
1688 + };
1689 + };
1690 + function useAnimationFrame() {
1691 + const timeout = useRefWithInit(AnimationFrame.create).current;
1692 + useOnMount(timeout.disposeEffect);
1693 + return timeout;
1694 + }
1695 +
1696 + // node_modules/@base-ui/react/internals/useTransitionStatus.mjs
1697 + function useTransitionStatus(open2, enableIdleState = false, deferEndingState = false, animateInitialOpen = false) {
1698 + const [transitionStatus, setTransitionStatus] = React9.useState(open2 && enableIdleState ? "idle" : void 0);
1699 + const [mounted, setMounted] = React9.useState(open2 && !animateInitialOpen);
1700 + if (open2 && !mounted) {
1701 + setMounted(true);
1702 + setTransitionStatus("starting");
1703 + }
1704 + if (!open2 && mounted && transitionStatus !== "ending" && !deferEndingState) {
1705 + setTransitionStatus("ending");
1706 + }
1707 + if (!open2 && !mounted && transitionStatus === "ending") {
1708 + setTransitionStatus(void 0);
1709 + }
1710 + useIsoLayoutEffect(() => {
1711 + if (!open2 && mounted && transitionStatus !== "ending" && deferEndingState) {
1712 + const frame = AnimationFrame.request(() => {
1713 + setTransitionStatus("ending");
1714 + });
1715 + return () => {
1716 + AnimationFrame.cancel(frame);
1717 + };
1718 + }
1719 + return void 0;
1720 + }, [open2, mounted, transitionStatus, deferEndingState]);
1721 + useIsoLayoutEffect(() => {
1722 + if (!open2 || enableIdleState) {
1723 + return void 0;
1724 + }
1725 + const frame = AnimationFrame.request(() => {
1726 + setTransitionStatus(void 0);
1727 + });
1728 + return () => {
1729 + AnimationFrame.cancel(frame);
1730 + };
1731 + }, [enableIdleState, open2]);
1732 + useIsoLayoutEffect(() => {
1733 + if (!open2 || !enableIdleState) {
1734 + return void 0;
1735 + }
1736 + if (open2 && mounted && transitionStatus !== "idle") {
1737 + setTransitionStatus("starting");
1738 + }
1739 + const frame = AnimationFrame.request(() => {
1740 + setTransitionStatus("idle");
1741 + });
1742 + return () => {
1743 + AnimationFrame.cancel(frame);
1744 + };
1745 + }, [enableIdleState, open2, mounted, transitionStatus]);
1746 + return {
1747 + mounted,
1748 + setMounted,
1749 + transitionStatus
1750 + };
1751 + }
1752 +
1753 + // node_modules/@base-ui/react/internals/TransitionStatusDataAttributes.mjs
1754 + var startingStyle = "data-starting-style";
1755 + var endingStyle = "data-ending-style";
1756 +
1757 + // node_modules/@base-ui/react/internals/stateAttributesMapping.mjs
1758 + var STARTING_HOOK = {
1759 + [startingStyle]: ""
1760 + };
1761 + var ENDING_HOOK = {
1762 + [endingStyle]: ""
1763 + };
1764 + var transitionStatusMapping = {
1765 + transitionStatus(value) {
1766 + if (value === "starting") {
1767 + return STARTING_HOOK;
1768 + }
1769 + if (value === "ending") {
1770 + return ENDING_HOOK;
1771 + }
1772 + return null;
1773 + }
1774 + };
1775 +
1776 + // node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs
1777 + function hasWindow() {
1778 + return typeof window !== "undefined";
1779 + }
1780 + function getNodeName(node) {
1781 + if (isNode(node)) {
1782 + return (node.nodeName || "").toLowerCase();
1783 + }
1784 + return "#document";
1785 + }
1786 + function getWindow(node) {
1787 + var _node$ownerDocument;
1788 + return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;
1789 + }
1790 + function getDocumentElement(node) {
1791 + var _ref;
1792 + return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;
1793 + }
1794 + function isNode(value) {
1795 + if (!hasWindow()) {
1796 + return false;
1797 + }
1798 + return value instanceof Node || value instanceof getWindow(value).Node;
1799 + }
1800 + function isElement(value) {
1801 + if (!hasWindow()) {
1802 + return false;
1803 + }
1804 + return value instanceof Element || value instanceof getWindow(value).Element;
1805 + }
1806 + function isHTMLElement(value) {
1807 + if (!hasWindow()) {
1808 + return false;
1809 + }
1810 + return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;
1811 + }
1812 + function isShadowRoot(value) {
1813 + if (!hasWindow() || typeof ShadowRoot === "undefined") {
1814 + return false;
1815 + }
1816 + return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;
1817 + }
1818 + function isOverflowElement(element) {
1819 + const {
1820 + overflow,
1821 + overflowX,
1822 + overflowY,
1823 + display
1824 + } = getComputedStyle2(element);
1825 + return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== "inline" && display !== "contents";
1826 + }
1827 + function isTableElement(element) {
1828 + return /^(table|td|th)$/.test(getNodeName(element));
1829 + }
1830 + function isTopLayer(element) {
1831 + try {
1832 + if (element.matches(":popover-open")) {
1833 + return true;
1834 + }
1835 + } catch (_e) {
1836 + }
1837 + try {
1838 + return element.matches(":modal");
1839 + } catch (_e) {
1840 + return false;
1841 + }
1842 + }
1843 + var willChangeRe = /transform|translate|scale|rotate|perspective|filter/;
1844 + var containRe = /paint|layout|strict|content/;
1845 + var isNotNone = (value) => !!value && value !== "none";
1846 + var isWebKitValue;
1847 + function isContainingBlock(elementOrCss) {
1848 + const css = isElement(elementOrCss) ? getComputedStyle2(elementOrCss) : elementOrCss;
1849 + 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 || "");
1850 + }
1851 + function getContainingBlock(element) {
1852 + let currentNode = getParentNode(element);
1853 + while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {
1854 + if (isContainingBlock(currentNode)) {
1855 + return currentNode;
1856 + } else if (isTopLayer(currentNode)) {
1857 + return null;
1858 + }
1859 + currentNode = getParentNode(currentNode);
1860 + }
1861 + return null;
1862 + }
1863 + function isWebKit() {
1864 + if (isWebKitValue == null) {
1865 + isWebKitValue = typeof CSS !== "undefined" && CSS.supports && CSS.supports("-webkit-backdrop-filter", "none");
1866 + }
1867 + return isWebKitValue;
1868 + }
1869 + function isLastTraversableNode(node) {
1870 + return /^(html|body|#document)$/.test(getNodeName(node));
1871 + }
1872 + function getComputedStyle2(element) {
1873 + return getWindow(element).getComputedStyle(element);
1874 + }
1875 + function getNodeScroll(element) {
1876 + if (isElement(element)) {
1877 + return {
1878 + scrollLeft: element.scrollLeft,
1879 + scrollTop: element.scrollTop
1880 + };
1881 + }
1882 + return {
1883 + scrollLeft: element.scrollX,
1884 + scrollTop: element.scrollY
1885 + };
1886 + }
1887 + function getParentNode(node) {
1888 + if (getNodeName(node) === "html") {
1889 + return node;
1890 + }
1891 + const result = (
1892 + // Step into the shadow DOM of the parent of a slotted node.
1893 + node.assignedSlot || // DOM Element detected.
1894 + node.parentNode || // ShadowRoot detected.
1895 + isShadowRoot(node) && node.host || // Fallback.
1896 + getDocumentElement(node)
1897 + );
1898 + return isShadowRoot(result) ? result.host : result;
1899 + }
1900 + function getNearestOverflowAncestor(node) {
1901 + const parentNode = getParentNode(node);
1902 + if (isLastTraversableNode(parentNode)) {
1903 + return (node.ownerDocument || node).body;
1904 + }
1905 + if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {
1906 + return parentNode;
1907 + }
1908 + return getNearestOverflowAncestor(parentNode);
1909 + }
1910 + function getOverflowAncestors(node, list, traverseIframes) {
1911 + var _node$ownerDocument2;
1912 + if (list === void 0) {
1913 + list = [];
1914 + }
1915 + if (traverseIframes === void 0) {
1916 + traverseIframes = true;
1917 + }
1918 + const scrollableAncestor = getNearestOverflowAncestor(node);
1919 + const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);
1920 + const win = getWindow(scrollableAncestor);
1921 + if (isBody) {
1922 + const frameElement = getFrameElement(win);
1923 + return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);
1924 + } else {
1925 + return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));
1926 + }
1927 + }
1928 + function getFrameElement(win) {
1929 + return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;
1930 + }
1931 +
1932 + // node_modules/@base-ui/utils/owner.mjs
1933 + function ownerDocument(node) {
1934 + return node?.ownerDocument || document;
1935 + }
1936 +
1937 + // node_modules/@base-ui/utils/addEventListener.mjs
1938 + function addEventListener(target, type, listener, options) {
1939 + target.addEventListener(type, listener, options);
1940 + return () => {
1941 + target.removeEventListener(type, listener, options);
1942 + };
1943 + }
1944 +
1945 + // node_modules/@base-ui/utils/useValueAsRef.mjs
1946 + function useValueAsRef(value) {
1947 + const latest = useRefWithInit(createLatestRef, value).current;
1948 + latest.next = value;
1949 + useIsoLayoutEffect(latest.effect);
1950 + return latest;
1951 + }
1952 + function createLatestRef(value) {
1953 + const latest = {
1954 + current: value,
1955 + next: value,
1956 + effect: () => {
1957 + latest.current = latest.next;
1958 + }
1959 + };
1960 + return latest;
1961 + }
1962 +
1963 + // node_modules/@base-ui/react/internals/useOpenChangeComplete.mjs
1964 + var React10 = __toESM(require_react(), 1);
1965 +
1966 + // node_modules/@base-ui/react/internals/useAnimationsFinished.mjs
1967 + var ReactDOM = __toESM(require_react_dom(), 1);
1968 +
1969 + // node_modules/@base-ui/react/utils/resolveRef.mjs
1970 + function resolveRef(maybeRef) {
1971 + if (maybeRef == null) {
1972 + return maybeRef;
1973 + }
1974 + return "current" in maybeRef ? maybeRef.current : maybeRef;
1975 + }
1976 +
1977 + // node_modules/@base-ui/react/internals/useAnimationsFinished.mjs
1978 + var pendingCallbacks = null;
1979 + function flushBeforePaint(fn) {
1980 + if (!pendingCallbacks) {
1981 + const callbacks = [];
1982 + pendingCallbacks = callbacks;
1983 + queueMicrotask(() => {
1984 + pendingCallbacks = null;
1985 + ReactDOM.flushSync(() => {
1986 + for (const callback of callbacks) {
1987 + callback();
1988 + }
1989 + });
1990 + });
1991 + }
1992 + pendingCallbacks.push(fn);
1993 + }
1994 + function useAnimationsFinished(elementOrRef, waitForStartingStyleRemoved = false, batch = false) {
1995 + const frame = useAnimationFrame();
1996 + return useStableCallback((fnToExecute, signal = null) => {
1997 + frame.cancel();
1998 + const element = resolveRef(elementOrRef);
1999 + if (element == null) {
2000 + return;
2001 + }
2002 + const resolvedElement = element;
2003 + const done = () => {
2004 + if (!batch) {
2005 + ReactDOM.flushSync(fnToExecute);
2006 + return;
2007 + }
2008 + flushBeforePaint(() => {
2009 + if (!signal?.aborted) {
2010 + fnToExecute();
2011 + }
2012 + });
2013 + };
2014 + if (typeof resolvedElement.getAnimations !== "function" || globalThis.BASE_UI_ANIMATIONS_DISABLED) {
2015 + fnToExecute();
2016 + return;
2017 + }
2018 + function exec() {
2019 + Promise.all(resolvedElement.getAnimations().map((animation) => animation.finished)).then(() => {
2020 + if (!signal?.aborted) {
2021 + done();
2022 + }
2023 + }, () => {
2024 + if (signal?.aborted) {
2025 + return;
2026 + }
2027 + const currentAnimations = resolvedElement.getAnimations();
2028 + if (currentAnimations.some((animation) => animation.pending || animation.playState !== "finished")) {
2029 + exec();
2030 + return;
2031 + }
2032 + done();
2033 + });
2034 + }
2035 + if (waitForStartingStyleRemoved) {
2036 + const startingStyleAttribute = startingStyle;
2037 + if (!resolvedElement.hasAttribute(startingStyleAttribute)) {
2038 + frame.request(exec);
2039 + return;
2040 + }
2041 + const attributeObserver = new MutationObserver(() => {
2042 + if (!resolvedElement.hasAttribute(startingStyleAttribute)) {
2043 + attributeObserver.disconnect();
2044 + exec();
2045 + }
2046 + });
2047 + attributeObserver.observe(resolvedElement, {
2048 + attributes: true,
2049 + attributeFilter: [startingStyleAttribute]
2050 + });
2051 + signal?.addEventListener("abort", () => attributeObserver.disconnect(), {
2052 + once: true
2053 + });
2054 + return;
2055 + }
2056 + frame.request(exec);
2057 + });
2058 + }
2059 +
2060 + // node_modules/@base-ui/react/internals/useOpenChangeComplete.mjs
2061 + function useOpenChangeComplete(parameters) {
2062 + const {
2063 + enabled = true,
2064 + open: open2,
2065 + ref,
2066 + batch = false,
2067 + onComplete: onCompleteParam
2068 + } = parameters;
2069 + const onComplete = useStableCallback(onCompleteParam);
2070 + const runOnceAnimationsFinish = useAnimationsFinished(ref, open2, batch);
2071 + React10.useEffect(() => {
2072 + if (!enabled) {
2073 + return void 0;
2074 + }
2075 + const abortController = new AbortController();
2076 + runOnceAnimationsFinish(onComplete, abortController.signal);
2077 + return () => {
2078 + abortController.abort();
2079 + };
2080 + }, [enabled, open2, onComplete, runOnceAnimationsFinish]);
2081 + }
2082 +
2083 + // node_modules/@base-ui/utils/platform/parts.mjs
2084 + var parts_exports = {};
2085 + __export(parts_exports, {
2086 + engine: () => engine_exports,
2087 + env: () => env_exports,
2088 + mediaQuery: () => media_query_exports,
2089 + os: () => os_exports,
2090 + screenReader: () => screen_reader_exports
2091 + });
2092 +
2093 + // node_modules/@base-ui/utils/platform/os.mjs
2094 + var os_exports = {};
2095 + __export(os_exports, {
2096 + android: () => android,
2097 + apple: () => apple,
2098 + ios: () => ios,
2099 + linux: () => linux,
2100 + mac: () => mac,
2101 + windows: () => windows
2102 + });
2103 +
2104 + // node_modules/@base-ui/utils/platform/shared.mjs
2105 + function readRawData() {
2106 + if (typeof navigator === "undefined") {
2107 + return {
2108 + userAgent: "",
2109 + platform: "",
2110 + maxTouchPoints: 0
2111 + };
2112 + }
2113 + if (true) {
2114 + const uaData = navigator.userAgentData;
2115 + if (uaData && Array.isArray(uaData.brands)) {
2116 + return {
2117 + userAgent: uaData.brands.map(({
2118 + brand,
2119 + version: version2
2120 + }) => `${brand}/${version2}`).join(" "),
2121 + platform: uaData.platform ?? navigator.platform ?? "",
2122 + maxTouchPoints: navigator.maxTouchPoints ?? 0
2123 + };
2124 + }
2125 + }
2126 + return {
2127 + userAgent: navigator.userAgent,
2128 + platform: navigator.platform ?? "",
2129 + maxTouchPoints: navigator.maxTouchPoints ?? 0
2130 + };
2131 + }
2132 + var {
2133 + userAgent,
2134 + platform,
2135 + maxTouchPoints
2136 + } = readRawData();
2137 + var lowerUserAgent = userAgent.toLowerCase();
2138 + var lowerPlatform = platform.toLowerCase();
2139 +
2140 + // node_modules/@base-ui/utils/platform/os.mjs
2141 + var ios = /^i(os$|p)/.test(lowerPlatform) || lowerPlatform === "macintel" && maxTouchPoints > 1;
2142 + var ANDROID_STRING = "android";
2143 + var android = lowerPlatform === ANDROID_STRING || lowerUserAgent.includes(ANDROID_STRING);
2144 + var mac = !ios && lowerPlatform.startsWith("mac");
2145 + var windows = lowerPlatform.startsWith("win");
2146 + var linux = !android && /^(linux|chrome os)/.test(lowerPlatform);
2147 + var apple = mac || ios;
2148 +
2149 + // node_modules/@base-ui/utils/platform/engine.mjs
2150 + var engine_exports = {};
2151 + __export(engine_exports, {
2152 + blink: () => blink,
2153 + gecko: () => gecko,
2154 + webkit: () => webkit
2155 + });
2156 + var webkit = typeof CSS !== "undefined" && !!CSS.supports?.("-webkit-backdrop-filter:none");
2157 + var gecko = !webkit && lowerUserAgent.includes("firefox");
2158 + var blink = !webkit && lowerUserAgent.includes("chrom");
2159 +
2160 + // node_modules/@base-ui/utils/platform/screen-reader.mjs
2161 + var screen_reader_exports = {};
2162 + __export(screen_reader_exports, {
2163 + voiceOver: () => voiceOver
2164 + });
2165 + var voiceOver = apple;
2166 +
2167 + // node_modules/@base-ui/utils/platform/env.mjs
2168 + var env_exports = {};
2169 + __export(env_exports, {
2170 + jsdom: () => jsdom
2171 + });
2172 + var jsdom = /jsdom|happydom/.test(lowerUserAgent);
2173 +
2174 + // node_modules/@base-ui/utils/platform/media-query.mjs
2175 + var media_query_exports = {};
2176 + __export(media_query_exports, {
2177 + iOS: () => iOS
2178 + });
2179 + var iOS = "@supports (-webkit-touch-callout: none)";
2180 +
2181 + // node_modules/@base-ui/utils/useTimeout.mjs
2182 + var EMPTY2 = 0;
2183 + var Timeout = class _Timeout {
2184 + static create() {
2185 + return new _Timeout();
2186 + }
2187 + currentId = EMPTY2;
2188 + /**
2189 + * Executes `fn` after `delay`, clearing any previously scheduled call.
2190 + */
2191 + start(delay, fn) {
2192 + this.clear();
2193 + this.currentId = setTimeout(() => {
2194 + this.currentId = EMPTY2;
2195 + fn();
2196 + }, delay);
2197 + }
2198 + isStarted() {
2199 + return this.currentId !== EMPTY2;
2200 + }
2201 + clear = () => {
2202 + if (this.currentId !== EMPTY2) {
2203 + clearTimeout(this.currentId);
2204 + this.currentId = EMPTY2;
2205 + }
2206 + };
2207 + disposeEffect = () => {
2208 + return this.clear;
2209 + };
2210 + };
2211 + function useTimeout() {
2212 + const timeout = useRefWithInit(Timeout.create).current;
2213 + useOnMount(timeout.disposeEffect);
2214 + return timeout;
2215 + }
2216 +
2217 + // node_modules/@base-ui/react/floating-ui-react/components/FloatingDelayGroup.mjs
2218 + var React11 = __toESM(require_react(), 1);
2219 +
2220 + // node_modules/@base-ui/react/floating-ui-react/utils/event.mjs
2221 + function isReactEvent(event) {
2222 + return "nativeEvent" in event;
2223 + }
2224 + function isVirtualClick(event) {
2225 + if (event.pointerType === "" && event.isTrusted) {
2226 + return true;
2227 + }
2228 + if (parts_exports.os.android && event.pointerType) {
2229 + return event.type === "click" && event.buttons === 1;
2230 + }
2231 + return event.detail === 0 && !event.pointerType;
2232 + }
2233 + function isMouseLikePointerType(pointerType, strict) {
2234 + const values = ["mouse", "pen"];
2235 + if (!strict) {
2236 + values.push("", void 0);
2237 + }
2238 + return values.includes(pointerType);
2239 + }
2240 + function isClickLikeEvent(event) {
2241 + const type = event.type;
2242 + return type === "click" || type === "mousedown" || type === "keydown" || type === "keyup";
2243 + }
2244 +
2245 + // node_modules/@base-ui/utils/shadowDom.mjs
2246 + function activeElement(doc) {
2247 + let element = doc.activeElement;
2248 + while (element?.shadowRoot?.activeElement != null) {
2249 + element = element.shadowRoot.activeElement;
2250 + }
2251 + return element;
2252 + }
2253 + function contains(parent, child) {
2254 + if (!parent || !child) {
2255 + return false;
2256 + }
2257 + const rootNode = child.getRootNode?.();
2258 + if (parent.contains(child)) {
2259 + return true;
2260 + }
2261 + if (rootNode && isShadowRoot(rootNode)) {
2262 + let next = child;
2263 + while (next) {
2264 + if (parent === next) {
2265 + return true;
2266 + }
2267 + next = next.parentNode || next.host;
2268 + }
2269 + }
2270 + return false;
2271 + }
2272 + function getTarget(event) {
2273 + if ("composedPath" in event) {
2274 + return event.composedPath()[0] ?? event.target;
2275 + }
2276 + return event.target;
2277 + }
2278 +
2279 + // node_modules/@base-ui/react/floating-ui-react/utils/constants.mjs
2280 + var FOCUSABLE_ATTRIBUTE = "data-base-ui-focusable";
2281 + var TYPEABLE_SELECTOR = "input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])";
2282 +
2283 + // node_modules/@base-ui/react/utils/CommonPopupDataAttributes.mjs
2284 + var open = "data-open";
2285 + var closed = "data-closed";
2286 + var anchorHidden = "data-anchor-hidden";
2287 +
2288 + // node_modules/@base-ui/react/utils/CommonTriggerDataAttributes.mjs
2289 + var CommonTriggerDataAttributes_exports = {};
2290 + __export(CommonTriggerDataAttributes_exports, {
2291 + popupOpen: () => popupOpen,
2292 + pressed: () => pressed
2293 + });
2294 + var popupOpen = "data-popup-open";
2295 + var pressed = "data-pressed";
2296 +
2297 + // node_modules/@base-ui/react/utils/popupStateMapping.mjs
2298 + var TRIGGER_HOOK = {
2299 + [popupOpen]: ""
2300 + };
2301 + var PRESSABLE_TRIGGER_HOOK = {
2302 + [popupOpen]: "",
2303 + [pressed]: ""
2304 + };
2305 + var POPUP_OPEN_HOOK = {
2306 + [open]: ""
2307 + };
2308 + var POPUP_CLOSED_HOOK = {
2309 + [closed]: ""
2310 + };
2311 + var ANCHOR_HIDDEN_HOOK = {
2312 + [anchorHidden]: ""
2313 + };
2314 + var triggerOpenStateMapping = {
2315 + open(value) {
2316 + if (value) {
2317 + return TRIGGER_HOOK;
2318 + }
2319 + return null;
2320 + }
2321 + };
2322 + var popupStateMapping = {
2323 + open(value) {
2324 + if (value) {
2325 + return POPUP_OPEN_HOOK;
2326 + }
2327 + return POPUP_CLOSED_HOOK;
2328 + },
2329 + anchorHidden(value) {
2330 + if (value) {
2331 + return ANCHOR_HIDDEN_HOOK;
2332 + }
2333 + return null;
2334 + }
2335 + };
2336 + var popupTransitionStateMapping = {
2337 + ...popupStateMapping,
2338 + ...transitionStatusMapping
2339 + };
2340 +
2341 + // node_modules/@base-ui/react/tooltip/trigger/TooltipTriggerDataAttributes.mjs
2342 + var popupOpen2 = CommonTriggerDataAttributes_exports.popupOpen;
2343 + var triggerDisabled = "data-trigger-disabled";
2344 +
2345 + // node_modules/@base-ui/react/floating-ui-react/utils/element.mjs
2346 + function isTargetInsideEnabledTrigger(target, triggerElements) {
2347 + if (!isElement(target)) {
2348 + return false;
2349 + }
2350 + const targetElement = target;
2351 + if (triggerElements.hasElement(targetElement)) {
2352 + return !targetElement.hasAttribute(triggerDisabled);
2353 + }
2354 + for (const [, trigger] of triggerElements.entries()) {
2355 + if (contains(trigger, targetElement)) {
2356 + return !trigger.hasAttribute(triggerDisabled);
2357 + }
2358 + }
2359 + return false;
2360 + }
2361 + function isEventTargetWithin(event, node) {
2362 + if (node == null) {
2363 + return false;
2364 + }
2365 + if ("composedPath" in event) {
2366 + return event.composedPath().includes(node);
2367 + }
2368 + const eventAgain = event;
2369 + return eventAgain.target != null && node.contains(eventAgain.target);
2370 + }
2371 + function isRootElement(element) {
2372 + return element.matches("html,body");
2373 + }
2374 + function isTypeableElement(element) {
2375 + return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR);
2376 + }
2377 + function isInteractiveElement(element) {
2378 + return element?.closest(`button,a[href],[role="button"],select,[tabindex]:not([tabindex="-1"]),${TYPEABLE_SELECTOR}`) != null;
2379 + }
2380 + function matchesFocusVisible(element) {
2381 + if (!element || parts_exports.env.jsdom) {
2382 + return true;
2383 + }
2384 + try {
2385 + return element.matches(":focus-visible");
2386 + } catch (_e) {
2387 + return true;
2388 + }
2389 + }
2390 +
2391 + // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverShared.mjs
2392 + function resolveValue(value, pointerType) {
2393 + if (pointerType != null && !isMouseLikePointerType(pointerType)) {
2394 + return 0;
2395 + }
2396 + if (typeof value === "function") {
2397 + return value();
2398 + }
2399 + return value;
2400 + }
2401 + function getDelay(value, prop, pointerType) {
2402 + const result = resolveValue(value, pointerType);
2403 + if (typeof result === "number") {
2404 + return result;
2405 + }
2406 + return result?.[prop];
2407 + }
2408 + function getRestMs(value) {
2409 + if (typeof value === "function") {
2410 + return value();
2411 + }
2412 + return value;
2413 + }
2414 + function isClickLikeOpenEvent(openEventType, interactedInside) {
2415 + return interactedInside || openEventType === "click" || openEventType === "mousedown";
2416 + }
2417 + function isHoverOpenEvent(openEventType) {
2418 + return openEventType?.includes("mouse") && openEventType !== "mousedown";
2419 + }
2420 +
2421 + // node_modules/@base-ui/react/floating-ui-react/components/FloatingDelayGroup.mjs
2422 + var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
2423 + var FloatingDelayGroupContext = /* @__PURE__ */ React11.createContext({
2424 + hasProvider: false,
2425 + timeoutMs: 0,
2426 + delayRef: {
2427 + current: 0
2428 + },
2429 + initialDelayRef: {
2430 + current: 0
2431 + },
2432 + timeout: new Timeout(),
2433 + currentIdRef: {
2434 + current: null
2435 + },
2436 + currentContextRef: {
2437 + current: null
2438 + }
2439 + });
2440 + if (true) FloatingDelayGroupContext.displayName = "FloatingDelayGroupContext";
2441 + function resetDelayRef(delayRef, initialDelayRef) {
2442 + delayRef.current = initialDelayRef.current;
2443 + }
2444 + function FloatingDelayGroup(props) {
2445 + const {
2446 + children,
2447 + delay,
2448 + timeoutMs = 0
2449 + } = props;
2450 + const delayRef = React11.useRef(delay);
2451 + const initialDelayRef = React11.useRef(delay);
2452 + const currentIdRef = React11.useRef(null);
2453 + const currentContextRef = React11.useRef(null);
2454 + const timeout = useTimeout();
2455 + useIsoLayoutEffect(() => {
2456 + initialDelayRef.current = delay;
2457 + if (!currentIdRef.current) {
2458 + delayRef.current = delay;
2459 + return;
2460 + }
2461 + delayRef.current = {
2462 + open: getDelay(delayRef.current, "open"),
2463 + close: getDelay(delay, "close")
2464 + };
2465 + }, [delay, currentIdRef, delayRef, initialDelayRef]);
2466 + return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FloatingDelayGroupContext.Provider, {
2467 + value: React11.useMemo(() => ({
2468 + hasProvider: true,
2469 + delayRef,
2470 + initialDelayRef,
2471 + currentIdRef,
2472 + timeoutMs,
2473 + currentContextRef,
2474 + timeout
2475 + }), [timeoutMs, timeout]),
2476 + children
2477 + });
2478 + }
2479 + function useDelayGroup(context, options = {
2480 + open: false
2481 + }) {
2482 + const {
2483 + open: open2
2484 + } = options;
2485 + const store2 = "rootStore" in context ? context.rootStore : context;
2486 + const floatingId = store2.useState("floatingId");
2487 + const groupContext = React11.useContext(FloatingDelayGroupContext);
2488 + const {
2489 + currentIdRef,
2490 + delayRef,
2491 + timeoutMs,
2492 + initialDelayRef,
2493 + currentContextRef,
2494 + hasProvider,
2495 + timeout
2496 + } = groupContext;
2497 + const [isInstantPhase, setIsInstantPhase] = React11.useState(false);
2498 + const openRef = React11.useRef(open2);
2499 + useIsoLayoutEffect(() => {
2500 + openRef.current = open2;
2501 + }, [open2]);
2502 + useIsoLayoutEffect(() => {
2503 + function unset() {
2504 + currentContextRef.current?.setIsInstantPhase(false);
2505 + currentIdRef.current = null;
2506 + currentContextRef.current = null;
2507 + delayRef.current = initialDelayRef.current;
2508 + timeout.clear();
2509 + }
2510 + if (!currentIdRef.current) {
2511 + return void 0;
2512 + }
2513 + if (!open2 && currentIdRef.current === floatingId) {
2514 + setIsInstantPhase(false);
2515 + if (timeoutMs) {
2516 + const closingId = floatingId;
2517 + timeout.start(timeoutMs, () => {
2518 + if (store2.select("open") || currentIdRef.current && currentIdRef.current !== closingId) {
2519 + return;
2520 + }
2521 + unset();
2522 + });
2523 + return () => {
2524 + if (openRef.current || currentIdRef.current !== closingId) {
2525 + timeout.clear();
2526 + }
2527 + };
2528 + }
2529 + unset();
2530 + }
2531 + return void 0;
2532 + }, [open2, floatingId, currentIdRef, delayRef, timeoutMs, initialDelayRef, currentContextRef, timeout, store2]);
2533 + useIsoLayoutEffect(() => {
2534 + if (!open2) {
2535 + return;
2536 + }
2537 + const prevContext = currentContextRef.current;
2538 + const prevId = currentIdRef.current;
2539 + timeout.clear();
2540 + currentContextRef.current = {
2541 + onOpenChange: store2.setOpen,
2542 + setIsInstantPhase
2543 + };
2544 + currentIdRef.current = floatingId;
2545 + delayRef.current = {
2546 + open: 0,
2547 + close: getDelay(initialDelayRef.current, "close")
2548 + };
2549 + if (prevId !== null && prevId !== floatingId) {
2550 + setIsInstantPhase(true);
2551 + prevContext?.setIsInstantPhase(true);
2552 + prevContext?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.none));
2553 + } else {
2554 + setIsInstantPhase(false);
2555 + prevContext?.setIsInstantPhase(false);
2556 + }
2557 + }, [open2, floatingId, store2, currentIdRef, delayRef, initialDelayRef, currentContextRef, timeout]);
2558 + useIsoLayoutEffect(() => {
2559 + return () => {
2560 + if (currentIdRef.current === floatingId) {
2561 + currentContextRef.current = null;
2562 + if (!openRef.current) {
2563 + return;
2564 + }
2565 + currentIdRef.current = null;
2566 + resetDelayRef(delayRef, initialDelayRef);
2567 + timeout.clear();
2568 + }
2569 + };
2570 + }, [currentContextRef, currentIdRef, delayRef, floatingId, initialDelayRef, timeout]);
2571 + return React11.useMemo(() => ({
2572 + activeIdRef: currentIdRef,
2573 + hasProvider,
2574 + delayRef,
2575 + isInstantPhase
2576 + }), [currentIdRef, hasProvider, delayRef, isInstantPhase]);
2577 + }
2578 +
2579 + // node_modules/@base-ui/utils/mergeCleanups.mjs
2580 + function mergeCleanups(...cleanups) {
2581 + return () => {
2582 + for (let i = 0; i < cleanups.length; i += 1) {
2583 + const cleanup = cleanups[i];
2584 + if (cleanup) {
2585 + cleanup();
2586 + }
2587 + }
2588 + };
2589 + }
2590 +
2591 + // node_modules/@base-ui/react/utils/FocusGuard.mjs
2592 + var React12 = __toESM(require_react(), 1);
2593 +
2594 + // node_modules/@base-ui/utils/visuallyHidden.mjs
2595 + var visuallyHiddenBase = {
2596 + clipPath: "inset(50%)",
2597 + overflow: "hidden",
2598 + whiteSpace: "nowrap",
2599 + border: 0,
2600 + padding: 0,
2601 + width: 1,
2602 + height: 1,
2603 + margin: -1
2604 + };
2605 + var visuallyHidden = {
2606 + ...visuallyHiddenBase,
2607 + position: "fixed",
2608 + top: 0,
2609 + left: 0
2610 + };
2611 + var visuallyHiddenInput = {
2612 + ...visuallyHiddenBase,
2613 + position: "absolute"
2614 + };
2615 +
2616 + // node_modules/@base-ui/react/utils/FocusGuard.mjs
2617 + var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1);
2618 + var FocusGuard = /* @__PURE__ */ React12.forwardRef(function FocusGuard2(props, ref) {
2619 + const [role, setRole] = React12.useState();
2620 + useIsoLayoutEffect(() => {
2621 + if (parts_exports.screenReader.voiceOver && parts_exports.engine.webkit) {
2622 + setRole("button");
2623 + }
2624 + }, []);
2625 + const restProps = {
2626 + tabIndex: 0,
2627 + // Role is only for VoiceOver
2628 + role
2629 + };
2630 + return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", {
2631 + ...props,
2632 + ref,
2633 + style: visuallyHidden,
2634 + "aria-hidden": role ? void 0 : true,
2635 + ...restProps,
2636 + "data-base-ui-focus-guard": ""
2637 + });
2638 + });
2639 + if (true) FocusGuard.displayName = "FocusGuard";
2640 +
2641 + // node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs
2642 + var min = Math.min;
2643 + var max = Math.max;
2644 + var round = Math.round;
2645 + var floor = Math.floor;
2646 + var createCoords = (v) => ({
2647 + x: v,
2648 + y: v
2649 + });
2650 + var oppositeSideMap = {
2651 + left: "right",
2652 + right: "left",
2653 + bottom: "top",
2654 + top: "bottom"
2655 + };
2656 + function clamp(start, value, end) {
2657 + return max(start, min(value, end));
2658 + }
2659 + function evaluate(value, param) {
2660 + return typeof value === "function" ? value(param) : value;
2661 + }
2662 + function getSide(placement) {
2663 + return placement.split("-")[0];
2664 + }
2665 + function getAlignment(placement) {
2666 + return placement.split("-")[1];
2667 + }
2668 + function getOppositeAxis(axis) {
2669 + return axis === "x" ? "y" : "x";
2670 + }
2671 + function getAxisLength(axis) {
2672 + return axis === "y" ? "height" : "width";
2673 + }
2674 + function getSideAxis(placement) {
2675 + const firstChar = placement[0];
2676 + return firstChar === "t" || firstChar === "b" ? "y" : "x";
2677 + }
2678 + function getAlignmentAxis(placement) {
2679 + return getOppositeAxis(getSideAxis(placement));
2680 + }
2681 + function getAlignmentSides(placement, rects, rtl) {
2682 + if (rtl === void 0) {
2683 + rtl = false;
2684 + }
2685 + const alignment = getAlignment(placement);
2686 + const alignmentAxis = getAlignmentAxis(placement);
2687 + const length = getAxisLength(alignmentAxis);
2688 + let mainAlignmentSide = alignmentAxis === "x" ? alignment === (rtl ? "end" : "start") ? "right" : "left" : alignment === "start" ? "bottom" : "top";
2689 + if (rects.reference[length] > rects.floating[length]) {
2690 + mainAlignmentSide = getOppositePlacement(mainAlignmentSide);
2691 + }
2692 + return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];
2693 + }
2694 + function getExpandedPlacements(placement) {
2695 + const oppositePlacement = getOppositePlacement(placement);
2696 + return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];
2697 + }
2698 + function getOppositeAlignmentPlacement(placement) {
2699 + return placement.includes("start") ? placement.replace("start", "end") : placement.replace("end", "start");
2700 + }
2701 + var lrPlacement = ["left", "right"];
2702 + var rlPlacement = ["right", "left"];
2703 + var tbPlacement = ["top", "bottom"];
2704 + var btPlacement = ["bottom", "top"];
2705 + function getSideList(side, isStart, rtl) {
2706 + switch (side) {
2707 + case "top":
2708 + case "bottom":
2709 + if (rtl) return isStart ? rlPlacement : lrPlacement;
2710 + return isStart ? lrPlacement : rlPlacement;
2711 + case "left":
2712 + case "right":
2713 + return isStart ? tbPlacement : btPlacement;
2714 + default:
2715 + return [];
2716 + }
2717 + }
2718 + function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {
2719 + const alignment = getAlignment(placement);
2720 + let list = getSideList(getSide(placement), direction === "start", rtl);
2721 + if (alignment) {
2722 + list = list.map((side) => side + "-" + alignment);
2723 + if (flipAlignment) {
2724 + list = list.concat(list.map(getOppositeAlignmentPlacement));
2725 + }
2726 + }
2727 + return list;
2728 + }
2729 + function getOppositePlacement(placement) {
2730 + const side = getSide(placement);
2731 + return oppositeSideMap[side] + placement.slice(side.length);
2732 + }
2733 + function expandPaddingObject(padding) {
2734 + var _padding$top, _padding$right, _padding$bottom, _padding$left;
2735 + return {
2736 + top: (_padding$top = padding.top) != null ? _padding$top : 0,
2737 + right: (_padding$right = padding.right) != null ? _padding$right : 0,
2738 + bottom: (_padding$bottom = padding.bottom) != null ? _padding$bottom : 0,
2739 + left: (_padding$left = padding.left) != null ? _padding$left : 0
2740 + };
2741 + }
2742 + function getPaddingObject(padding) {
2743 + return typeof padding !== "number" ? expandPaddingObject(padding) : {
2744 + top: padding,
2745 + right: padding,
2746 + bottom: padding,
2747 + left: padding
2748 + };
2749 + }
2750 + function rectToClientRect(rect) {
2751 + const {
2752 + x,
2753 + y,
2754 + width,
2755 + height
2756 + } = rect;
2757 + return {
2758 + width,
2759 + height,
2760 + top: y,
2761 + left: x,
2762 + right: x + width,
2763 + bottom: y + height,
2764 + x,
2765 + y
2766 + };
2767 + }
2768 +
2769 + // node_modules/@base-ui/react/floating-ui-react/utils/composite.mjs
2770 + function isHiddenByStyles(styles) {
2771 + return styles.visibility === "hidden" || styles.visibility === "collapse";
2772 + }
2773 + function isElementVisible(element, styles = element ? getComputedStyle2(element) : null) {
2774 + if (!element || !element.isConnected || !styles || isHiddenByStyles(styles)) {
2775 + return false;
2776 + }
2777 + if (typeof element.checkVisibility === "function") {
2778 + return element.checkVisibility();
2779 + }
2780 + return styles.display !== "none" && styles.display !== "contents";
2781 + }
2782 +
2783 + // node_modules/@base-ui/react/floating-ui-react/utils/tabbable.mjs
2784 + var CANDIDATE_SELECTOR = 'a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable="false"]),audio[controls],video[controls]';
2785 + function getParentElement(element) {
2786 + const assignedSlot = element.assignedSlot;
2787 + if (assignedSlot) {
2788 + return assignedSlot;
2789 + }
2790 + if (element.parentElement) {
2791 + return element.parentElement;
2792 + }
2793 + const rootNode = element.getRootNode();
2794 + return isShadowRoot(rootNode) ? rootNode.host : null;
2795 + }
2796 + function getDetailsSummary(details) {
2797 + for (const child of Array.from(details.children)) {
2798 + if (getNodeName(child) === "summary") {
2799 + return child;
2800 + }
2801 + }
2802 + return null;
2803 + }
2804 + function isWithinOpenDetailsSummary(element, details) {
2805 + const summary = getDetailsSummary(details);
2806 + return !!summary && (element === summary || contains(summary, element));
2807 + }
2808 + function isFocusableCandidate(element) {
2809 + const nodeName = element ? getNodeName(element) : "";
2810 + 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");
2811 + }
2812 + function isFocusableElement(element) {
2813 + if (!isFocusableCandidate(element) || !element.isConnected || element.matches(":disabled")) {
2814 + return false;
2815 + }
2816 + for (let current = element; current; current = getParentElement(current)) {
2817 + const isAncestor = current !== element;
2818 + const isSlot = getNodeName(current) === "slot";
2819 + if (current.hasAttribute("inert")) {
2820 + return false;
2821 + }
2822 + if (isAncestor && getNodeName(current) === "details" && !current.open && !isWithinOpenDetailsSummary(element, current) || current.hasAttribute("hidden") || !isSlot && !isVisibleInTabbableTree(current, isAncestor)) {
2823 + return false;
2824 + }
2825 + }
2826 + return true;
2827 + }
2828 + function isVisibleInTabbableTree(element, isAncestor) {
2829 + const styles = getComputedStyle2(element);
2830 + if (!isAncestor) {
2831 + return isElementVisible(element, styles);
2832 + }
2833 + return styles.display !== "none";
2834 + }
2835 + function getTabIndex(element) {
2836 + const tabIndex = element.tabIndex;
2837 + if (tabIndex < 0) {
2838 + const nodeName = getNodeName(element);
2839 + if (nodeName === "details" || nodeName === "audio" || nodeName === "video" || isHTMLElement(element) && element.isContentEditable) {
2840 + return 0;
2841 + }
2842 + }
2843 + return tabIndex;
2844 + }
2845 + function getNamedRadioInput(element) {
2846 + if (getNodeName(element) !== "input") {
2847 + return null;
2848 + }
2849 + const input = element;
2850 + return input.type === "radio" && input.name !== "" ? input : null;
2851 + }
2852 + function isTabbableRadio(element, candidates) {
2853 + const input = getNamedRadioInput(element);
2854 + if (!input) {
2855 + return true;
2856 + }
2857 + const checkedRadio = candidates.find((candidate) => {
2858 + const radio = getNamedRadioInput(candidate);
2859 + return radio?.name === input.name && radio.form === input.form && radio.checked;
2860 + });
2861 + if (checkedRadio) {
2862 + return checkedRadio === input;
2863 + }
2864 + return candidates.find((candidate) => {
2865 + const radio = getNamedRadioInput(candidate);
2866 + return radio?.name === input.name && radio.form === input.form;
2867 + }) === input;
2868 + }
2869 + function getComposedChildren(container) {
2870 + if (isHTMLElement(container) && getNodeName(container) === "slot") {
2871 + const assignedElements = container.assignedElements({
2872 + flatten: true
2873 + });
2874 + if (assignedElements.length > 0) {
2875 + return assignedElements;
2876 + }
2877 + }
2878 + if (isHTMLElement(container) && container.shadowRoot) {
2879 + return Array.from(container.shadowRoot.children);
2880 + }
2881 + return Array.from(container.children);
2882 + }
2883 + function appendCandidates(container, list) {
2884 + getComposedChildren(container).forEach((child) => {
2885 + if (isFocusableCandidate(child)) {
2886 + list.push(child);
2887 + }
2888 + appendCandidates(child, list);
2889 + });
2890 + }
2891 + function appendMatchingElements(container, selector, list) {
2892 + getComposedChildren(container).forEach((child) => {
2893 + if (isHTMLElement(child) && child.matches(selector)) {
2894 + list.push(child);
2895 + }
2896 + appendMatchingElements(child, selector, list);
2897 + });
2898 + }
2899 + function focusable(container) {
2900 + const candidates = [];
2901 + appendCandidates(container, candidates);
2902 + return candidates.filter(isFocusableElement);
2903 + }
2904 + function tabbable(container) {
2905 + const candidates = focusable(container);
2906 + return candidates.filter((element) => getTabIndex(element) >= 0 && isTabbableRadio(element, candidates));
2907 + }
2908 + function getTabbableIn(container, dir) {
2909 + const list = tabbable(container);
2910 + const len = list.length;
2911 + if (len === 0) {
2912 + return void 0;
2913 + }
2914 + const active = activeElement(ownerDocument(container));
2915 + const index2 = list.indexOf(active);
2916 + const nextIndex = index2 === -1 ? dir === 1 ? 0 : len - 1 : index2 + dir;
2917 + return list[nextIndex];
2918 + }
2919 + function getNextTabbable(referenceElement) {
2920 + return getTabbableIn(ownerDocument(referenceElement).body, 1) || referenceElement;
2921 + }
2922 + function getPreviousTabbable(referenceElement) {
2923 + return getTabbableIn(ownerDocument(referenceElement).body, -1) || referenceElement;
2924 + }
2925 + function isOutsideEvent(event, container) {
2926 + const containerElement = container || event.currentTarget;
2927 + const relatedTarget = event.relatedTarget;
2928 + return !relatedTarget || !contains(containerElement, relatedTarget);
2929 + }
2930 + function disableFocusInside(container) {
2931 + const tabbableElements = tabbable(container);
2932 + tabbableElements.forEach((element) => {
2933 + element.dataset.tabindex = element.getAttribute("tabindex") || "";
2934 + element.setAttribute("tabindex", "-1");
2935 + });
2936 + }
2937 + function enableFocusInside(container) {
2938 + const elements = [];
2939 + appendMatchingElements(container, "[data-tabindex]", elements);
2940 + elements.forEach((element) => {
2941 + const tabindex = element.dataset.tabindex;
2942 + delete element.dataset.tabindex;
2943 + if (tabindex) {
2944 + element.setAttribute("tabindex", tabindex);
2945 + } else {
2946 + element.removeAttribute("tabindex");
2947 + }
2948 + });
2949 + }
2950 +
2951 + // node_modules/@base-ui/react/floating-ui-react/utils/nodes.mjs
2952 + function getNodeChildren(nodes, id, onlyOpenChildren = true) {
2953 + const directChildren = nodes.filter((node) => node.parentId === id);
2954 + return directChildren.flatMap((child) => [...!onlyOpenChildren || child.context?.open ? [child] : [], ...getNodeChildren(nodes, child.id, onlyOpenChildren)]);
2955 + }
2956 +
2957 + // node_modules/@base-ui/react/floating-ui-react/utils/createAttribute.mjs
2958 + function createAttribute(name) {
2959 + return `data-base-ui-${name}`;
2960 + }
2961 +
2962 + // node_modules/@base-ui/react/floating-ui-react/components/FloatingPortal.mjs
2963 + var React13 = __toESM(require_react(), 1);
2964 + var ReactDOM2 = __toESM(require_react_dom(), 1);
2965 +
2966 + // node_modules/@base-ui/react/internals/constants.mjs
2967 + var DISABLED_TRANSITIONS_STYLE = {
2968 + style: {
2969 + transition: "none"
2970 + }
2971 + };
2972 + var BASE_UI_SWIPE_IGNORE_ATTRIBUTE = "data-base-ui-swipe-ignore";
2973 + var LEGACY_SWIPE_IGNORE_ATTRIBUTE = "data-swipe-ignore";
2974 + var BASE_UI_SWIPE_IGNORE_SELECTOR = `[${BASE_UI_SWIPE_IGNORE_ATTRIBUTE}]`;
2975 + var LEGACY_SWIPE_IGNORE_SELECTOR = `[${LEGACY_SWIPE_IGNORE_ATTRIBUTE}]`;
2976 + var POPUP_COLLISION_AVOIDANCE = {
2977 + fallbackAxisSide: "end"
2978 + };
2979 + var ownerVisuallyHidden = {
2980 + clipPath: "inset(50%)",
2981 + position: "fixed",
2982 + top: 0,
2983 + left: 0
2984 + };
2985 +
2986 + // node_modules/@base-ui/react/floating-ui-react/components/FloatingPortal.mjs
2987 + var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1);
2988 + var PortalContext = /* @__PURE__ */ React13.createContext(null);
2989 + if (true) PortalContext.displayName = "PortalContext";
2990 + var usePortalContext = () => React13.useContext(PortalContext);
2991 + var attr = createAttribute("portal");
2992 + function useFloatingPortalNode(props = {}) {
2993 + const {
2994 + ref,
2995 + container: containerProp,
2996 + componentProps = EMPTY_OBJECT,
2997 + elementProps
2998 + } = props;
2999 + const uniqueId = useId();
3000 + const portalContext = usePortalContext();
3001 + const parentPortalNode = portalContext?.portalNode;
3002 + const [containerElement, setContainerElement] = React13.useState(null);
3003 + const [portalNode, setPortalNode] = React13.useState(null);
3004 + const setPortalNodeRef = useStableCallback((node) => {
3005 + if (node !== null) {
3006 + setPortalNode(node);
3007 + }
3008 + });
3009 + const containerRef = React13.useRef(null);
3010 + useIsoLayoutEffect(() => {
3011 + if (containerProp === null) {
3012 + if (containerRef.current) {
3013 + containerRef.current = null;
3014 + setPortalNode(null);
3015 + setContainerElement(null);
3016 + }
3017 + return;
3018 + }
3019 + const resolvedContainer = (containerProp && (isNode(containerProp) ? containerProp : containerProp.current)) ?? parentPortalNode ?? document.body;
3020 + if (resolvedContainer == null) {
3021 + if (containerRef.current) {
3022 + containerRef.current = null;
3023 + setPortalNode(null);
3024 + setContainerElement(null);
3025 + }
3026 + return;
3027 + }
3028 + if (containerRef.current !== resolvedContainer) {
3029 + containerRef.current = resolvedContainer;
3030 + setPortalNode(null);
3031 + setContainerElement(resolvedContainer);
3032 + }
3033 + }, [containerProp, parentPortalNode]);
3034 + const portalElement = useRenderElement("div", componentProps, {
3035 + ref: [ref, setPortalNodeRef],
3036 + props: [{
3037 + id: uniqueId,
3038 + [attr]: ""
3039 + }, elementProps]
3040 + });
3041 + const portalSubtree = containerElement && portalElement ? /* @__PURE__ */ ReactDOM2.createPortal(portalElement, containerElement) : null;
3042 + return {
3043 + node: portalNode,
3044 + // `id` and `render` props can override or remove the generated ID. Use the exact
3045 + // rendered value so `aria-owns` never points at an ID absent from the DOM.
3046 + nodeId: /* @__PURE__ */ React13.isValidElement(portalElement) ? portalElement.props.id : void 0,
3047 + subtree: portalSubtree
3048 + };
3049 + }
3050 + var FloatingPortal = /* @__PURE__ */ React13.forwardRef(function FloatingPortal2(componentProps, forwardedRef) {
3051 + const {
3052 + render,
3053 + className,
3054 + style,
3055 + children,
3056 + container,
3057 + portalOwnerRole,
3058 + ...elementProps
3059 + } = componentProps;
3060 + const {
3061 + node: portalNode,
3062 + nodeId: portalNodeId,
3063 + subtree: portalSubtree
3064 + } = useFloatingPortalNode({
3065 + container,
3066 + ref: forwardedRef,
3067 + componentProps,
3068 + elementProps
3069 + });
3070 + const beforeOutsideRef = React13.useRef(null);
3071 + const afterOutsideRef = React13.useRef(null);
3072 + const beforeInsideRef = React13.useRef(null);
3073 + const afterInsideRef = React13.useRef(null);
3074 + const [focusManagerState, setFocusManagerState] = React13.useState(null);
3075 + const focusInsideDisabledRef = React13.useRef(false);
3076 + const modal = focusManagerState?.modal;
3077 + const open2 = focusManagerState?.open;
3078 + const shouldRenderGuards = !!focusManagerState && !focusManagerState.modal && focusManagerState.open && !!portalNode;
3079 + React13.useEffect(() => {
3080 + if (!portalNode || modal) {
3081 + return void 0;
3082 + }
3083 + function onFocus(event) {
3084 + if (portalNode && event.relatedTarget && isOutsideEvent(event)) {
3085 + if (event.type === "focusin") {
3086 + if (focusInsideDisabledRef.current) {
3087 + enableFocusInside(portalNode);
3088 + focusInsideDisabledRef.current = false;
3089 + }
3090 + } else {
3091 + disableFocusInside(portalNode);
3092 + focusInsideDisabledRef.current = true;
3093 + }
3094 + }
3095 + }
3096 + return mergeCleanups(addEventListener(portalNode, "focusin", onFocus, true), addEventListener(portalNode, "focusout", onFocus, true));
3097 + }, [portalNode, modal]);
3098 + useIsoLayoutEffect(() => {
3099 + if (!portalNode || open2 !== true || !focusInsideDisabledRef.current) {
3100 + return;
3101 + }
3102 + enableFocusInside(portalNode);
3103 + focusInsideDisabledRef.current = false;
3104 + }, [open2, portalNode]);
3105 + const portalContextValue = React13.useMemo(() => ({
3106 + beforeOutsideRef,
3107 + afterOutsideRef,
3108 + beforeInsideRef,
3109 + afterInsideRef,
3110 + portalNode,
3111 + setFocusManagerState
3112 + }), [portalNode]);
3113 + return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(React13.Fragment, {
3114 + children: [portalSubtree, /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(PortalContext.Provider, {
3115 + value: portalContextValue,
3116 + children: [shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(FocusGuard, {
3117 + "data-type": "outside",
3118 + ref: beforeOutsideRef,
3119 + onFocus: (event) => {
3120 + if (isOutsideEvent(event, portalNode)) {
3121 + beforeInsideRef.current?.focus();
3122 + } else {
3123 + const domReference = focusManagerState ? focusManagerState.domReference : null;
3124 + const prevTabbable = getPreviousTabbable(domReference);
3125 + prevTabbable?.focus();
3126 + }
3127 + }
3128 + }), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", {
3129 + role: portalOwnerRole,
3130 + "aria-owns": portalNodeId,
3131 + style: ownerVisuallyHidden
3132 + }), portalNode && /* @__PURE__ */ ReactDOM2.createPortal(children, portalNode), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(FocusGuard, {
3133 + "data-type": "outside",
3134 + ref: afterOutsideRef,
3135 + onFocus: (event) => {
3136 + if (isOutsideEvent(event, portalNode)) {
3137 + afterInsideRef.current?.focus();
3138 + } else {
3139 + const domReference = focusManagerState ? focusManagerState.domReference : null;
3140 + const nextTabbable = getNextTabbable(domReference);
3141 + nextTabbable?.focus();
3142 + if (focusManagerState?.closeOnFocusOut) {
3143 + focusManagerState?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.focusOut, event.nativeEvent));
3144 + }
3145 + }
3146 + }
3147 + })]
3148 + })]
3149 + });
3150 + });
3151 + if (true) FloatingPortal.displayName = "FloatingPortal";
3152 +
3153 + // node_modules/@base-ui/react/floating-ui-react/components/FloatingTree.mjs
3154 + var React14 = __toESM(require_react(), 1);
3155 +
3156 + // node_modules/@base-ui/react/floating-ui-react/utils/createEventEmitter.mjs
3157 + function createEventEmitter() {
3158 + const map = /* @__PURE__ */ new Map();
3159 + return {
3160 + emit(event, data) {
3161 + map.get(event)?.forEach((listener) => listener(data));
3162 + },
3163 + on(event, listener) {
3164 + if (!map.has(event)) {
3165 + map.set(event, /* @__PURE__ */ new Set());
3166 + }
3167 + map.get(event).add(listener);
3168 + },
3169 + off(event, listener) {
3170 + map.get(event)?.delete(listener);
3171 + }
3172 + };
3173 + }
3174 +
3175 + // node_modules/@base-ui/react/floating-ui-react/components/FloatingTree.mjs
3176 + var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1);
3177 + var FloatingNodeContext = /* @__PURE__ */ React14.createContext(null);
3178 + if (true) FloatingNodeContext.displayName = "FloatingNodeContext";
3179 + var FloatingTreeContext = /* @__PURE__ */ React14.createContext(null);
3180 + if (true) FloatingTreeContext.displayName = "FloatingTreeContext";
3181 + var useFloatingParentNodeId = () => React14.useContext(FloatingNodeContext)?.id || null;
3182 + var useFloatingTree = (externalTree) => {
3183 + const contextTree = React14.useContext(FloatingTreeContext);
3184 + return externalTree ?? contextTree;
3185 + };
3186 +
3187 + // node_modules/@base-ui/react/floating-ui-react/hooks/useClientPoint.mjs
3188 + var React15 = __toESM(require_react(), 1);
3189 + function createVirtualElement(domElement, data) {
3190 + let offsetX = null;
3191 + let offsetY = null;
3192 + let isAutoUpdateEvent = false;
3193 + return {
3194 + contextElement: domElement || void 0,
3195 + getBoundingClientRect() {
3196 + const domRect = domElement?.getBoundingClientRect() || {
3197 + width: 0,
3198 + height: 0,
3199 + x: 0,
3200 + y: 0
3201 + };
3202 + const isXAxis = data.axis === "x" || data.axis === "both";
3203 + const isYAxis = data.axis === "y" || data.axis === "both";
3204 + const canTrackCursorOnAutoUpdate = ["mouseenter", "mousemove"].includes(data.dataRef.current.openEvent?.type || "") && data.pointerType !== "touch";
3205 + let width = domRect.width;
3206 + let height = domRect.height;
3207 + let x = domRect.x;
3208 + let y = domRect.y;
3209 + if (offsetX == null && data.x && isXAxis) {
3210 + offsetX = domRect.x - data.x;
3211 + }
3212 + if (offsetY == null && data.y && isYAxis) {
3213 + offsetY = domRect.y - data.y;
3214 + }
3215 + x -= offsetX || 0;
3216 + y -= offsetY || 0;
3217 + width = 0;
3218 + height = 0;
3219 + if (!isAutoUpdateEvent || canTrackCursorOnAutoUpdate) {
3220 + width = data.axis === "y" ? domRect.width : 0;
3221 + height = data.axis === "x" ? domRect.height : 0;
3222 + x = isXAxis && data.x != null ? data.x : x;
3223 + y = isYAxis && data.y != null ? data.y : y;
3224 + } else if (isAutoUpdateEvent && !canTrackCursorOnAutoUpdate) {
3225 + height = data.axis === "x" ? domRect.height : height;
3226 + width = data.axis === "y" ? domRect.width : width;
3227 + }
3228 + isAutoUpdateEvent = true;
3229 + return {
3230 + width,
3231 + height,
3232 + x,
3233 + y,
3234 + top: y,
3235 + right: x + width,
3236 + bottom: y + height,
3237 + left: x
3238 + };
3239 + }
3240 + };
3241 + }
3242 + function isMouseBasedEvent(event) {
3243 + return event != null && event.clientX != null;
3244 + }
3245 + function useClientPoint(context, props = {}) {
3246 + const {
3247 + enabled = true,
3248 + axis = "both"
3249 + } = props;
3250 + const store2 = "rootStore" in context ? context.rootStore : context;
3251 + const open2 = store2.useState("open");
3252 + const floating = store2.useState("floatingElement");
3253 + const domReference = store2.useState("domReferenceElement");
3254 + const dataRef = store2.context.dataRef;
3255 + const initialRef = React15.useRef(false);
3256 + const cleanupListenerRef = React15.useRef(null);
3257 + const [pointerType, setPointerType] = React15.useState();
3258 + const [reactive, setReactive] = React15.useState([]);
3259 + const resetReference = useStableCallback((reference2) => {
3260 + store2.set("positionReference", reference2);
3261 + });
3262 + const setReference = useStableCallback((newX, newY, referenceElement) => {
3263 + if (initialRef.current) {
3264 + return;
3265 + }
3266 + if (dataRef.current.openEvent && !isMouseBasedEvent(dataRef.current.openEvent)) {
3267 + return;
3268 + }
3269 + store2.set("positionReference", createVirtualElement(referenceElement ?? domReference, {
3270 + x: newX,
3271 + y: newY,
3272 + axis,
3273 + dataRef,
3274 + pointerType
3275 + }));
3276 + });
3277 + const handleReferenceEnterOrMove = useStableCallback((event) => {
3278 + if (!open2) {
3279 + setReference(event.clientX, event.clientY, event.currentTarget);
3280 + } else if (!cleanupListenerRef.current) {
3281 + setReference(event.clientX, event.clientY, event.currentTarget);
3282 + setReactive([]);
3283 + }
3284 + });
3285 + const openCheck = isMouseLikePointerType(pointerType) ? floating : open2;
3286 + React15.useEffect(() => {
3287 + if (!enabled) {
3288 + resetReference(domReference);
3289 + return void 0;
3290 + }
3291 + if (!openCheck) {
3292 + return void 0;
3293 + }
3294 + function cleanupListener() {
3295 + cleanupListenerRef.current?.();
3296 + cleanupListenerRef.current = null;
3297 + }
3298 + const win = getWindow(floating);
3299 + function handleMouseMove(event) {
3300 + const target = getTarget(event);
3301 + if (!contains(floating, target)) {
3302 + setReference(event.clientX, event.clientY);
3303 + } else {
3304 + cleanupListener();
3305 + }
3306 + }
3307 + if (!dataRef.current.openEvent || isMouseBasedEvent(dataRef.current.openEvent)) {
3308 + cleanupListenerRef.current = addEventListener(win, "mousemove", handleMouseMove);
3309 + } else {
3310 + resetReference(domReference);
3311 + }
3312 + return cleanupListener;
3313 + }, [openCheck, enabled, floating, dataRef, domReference, store2, setReference, resetReference, reactive]);
3314 + React15.useEffect(() => () => {
3315 + store2.set("positionReference", null);
3316 + }, [store2]);
3317 + React15.useEffect(() => {
3318 + if (enabled && !floating) {
3319 + initialRef.current = false;
3320 + }
3321 + }, [enabled, floating]);
3322 + React15.useEffect(() => {
3323 + if (!enabled && open2) {
3324 + initialRef.current = true;
3325 + }
3326 + }, [enabled, open2]);
3327 + const reference = React15.useMemo(() => {
3328 + function setPointerTypeRef(event) {
3329 + setPointerType(event.pointerType);
3330 + }
3331 + return {
3332 + onPointerDown: setPointerTypeRef,
3333 + onPointerEnter: setPointerTypeRef,
3334 + onMouseMove: handleReferenceEnterOrMove,
3335 + onMouseEnter: handleReferenceEnterOrMove
3336 + };
3337 + }, [handleReferenceEnterOrMove]);
3338 + return React15.useMemo(() => enabled ? {
3339 + reference,
3340 + trigger: reference
3341 + } : {}, [enabled, reference]);
3342 + }
3343 +
3344 + // node_modules/@base-ui/react/floating-ui-react/hooks/useDismiss.mjs
3345 + var React16 = __toESM(require_react(), 1);
3346 + function alwaysFalse() {
3347 + return false;
3348 + }
3349 + function normalizeProp(normalizable) {
3350 + return {
3351 + escapeKey: typeof normalizable === "boolean" ? normalizable : normalizable?.escapeKey ?? false,
3352 + outsidePress: typeof normalizable === "boolean" ? normalizable : normalizable?.outsidePress ?? true
3353 + };
3354 + }
3355 + function useDismiss(context, props = {}) {
3356 + const {
3357 + enabled = true,
3358 + escapeKey: escapeKey2 = true,
3359 + outsidePress: outsidePressProp = true,
3360 + outsidePressEvent = "sloppy",
3361 + referencePress = alwaysFalse,
3362 + bubbles,
3363 + externalTree
3364 + } = props;
3365 + const store2 = "rootStore" in context ? context.rootStore : context;
3366 + const open2 = store2.useState("open");
3367 + const floatingElement = store2.useState("floatingElement");
3368 + const {
3369 + dataRef,
3370 + events
3371 + } = store2.context;
3372 + const tree = useFloatingTree(externalTree);
3373 + const outsidePressFn = useStableCallback(typeof outsidePressProp === "function" ? outsidePressProp : () => false);
3374 + const outsidePress2 = typeof outsidePressProp === "function" ? outsidePressFn : outsidePressProp;
3375 + const outsidePressEnabled = outsidePress2 !== false;
3376 + const getOutsidePressEventProp = useStableCallback(() => outsidePressEvent);
3377 + const {
3378 + escapeKey: escapeKeyBubbles,
3379 + outsidePress: outsidePressBubbles
3380 + } = normalizeProp(bubbles);
3381 + const pressStartedInsideRef = React16.useRef(false);
3382 + const pressStartPreventedRef = React16.useRef(false);
3383 + const suppressNextOutsideClickRef = React16.useRef(false);
3384 + const sawPressWhileOpenRef = React16.useRef(false);
3385 + const isComposingRef = React16.useRef(false);
3386 + const currentPointerTypeRef = React16.useRef("");
3387 + const touchStateRef = React16.useRef(null);
3388 + const cancelDismissOnEndTimeout = useTimeout();
3389 + const clearInsideReactTreeTimeout = useTimeout();
3390 + const clearInsideReactTree = useStableCallback(() => {
3391 + clearInsideReactTreeTimeout.clear();
3392 + dataRef.current.insideReactTree = false;
3393 + });
3394 + const hasBlockingChild = useStableCallback((bubbleKey) => {
3395 + const nodeId = dataRef.current.floatingContext?.nodeId;
3396 + const children = tree ? getNodeChildren(tree.nodesRef.current, nodeId) : [];
3397 + return children.some((child) => child.context?.open && !child.context.dataRef.current[bubbleKey]);
3398 + });
3399 + const isEventWithinOwnElements = useStableCallback((event) => {
3400 + return isEventTargetWithin(event, store2.select("floatingElement")) || isEventTargetWithin(event, store2.select("domReferenceElement"));
3401 + });
3402 + const closeOnReferencePress = useStableCallback((event) => {
3403 + if (!referencePress()) {
3404 + return;
3405 + }
3406 + store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerPress, event.nativeEvent));
3407 + });
3408 + const closeOnEscapeKeyDown = useStableCallback((event) => {
3409 + if (!open2 || !enabled || !escapeKey2 || event.key !== "Escape") {
3410 + return;
3411 + }
3412 + if (isComposingRef.current) {
3413 + return;
3414 + }
3415 + if (!escapeKeyBubbles && hasBlockingChild("__escapeKeyBubbles")) {
3416 + return;
3417 + }
3418 + const native = isReactEvent(event) ? event.nativeEvent : event;
3419 + const eventDetails = createChangeEventDetails(reason_parts_exports.escapeKey, native);
3420 + store2.setOpen(false, eventDetails);
3421 + if (!eventDetails.isCanceled) {
3422 + event.preventDefault();
3423 + }
3424 + if (!escapeKeyBubbles && !eventDetails.isPropagationAllowed) {
3425 + event.stopPropagation();
3426 + }
3427 + });
3428 + const markInsideReactTree = useStableCallback(() => {
3429 + dataRef.current.insideReactTree = true;
3430 + clearInsideReactTreeTimeout.start(0, clearInsideReactTree);
3431 + });
3432 + const markPressStartedInsideReactTree = useStableCallback((event) => {
3433 + if (!open2 || !enabled || event.button !== 0) {
3434 + return;
3435 + }
3436 + const target = getTarget(event.nativeEvent);
3437 + if (!contains(store2.select("floatingElement"), target)) {
3438 + return;
3439 + }
3440 + if (!pressStartedInsideRef.current) {
3441 + pressStartedInsideRef.current = true;
3442 + pressStartPreventedRef.current = false;
3443 + }
3444 + });
3445 + const markInsidePressStartPrevented = useStableCallback((event) => {
3446 + if (!open2 || !enabled) {
3447 + return;
3448 + }
3449 + if (!(event.defaultPrevented || event.nativeEvent.defaultPrevented)) {
3450 + return;
3451 + }
3452 + if (pressStartedInsideRef.current) {
3453 + pressStartPreventedRef.current = true;
3454 + }
3455 + });
3456 + React16.useEffect(() => {
3457 + function handleOpenChange(details) {
3458 + if (!details.open) {
3459 + sawPressWhileOpenRef.current = false;
3460 + }
3461 + }
3462 + events.on("openchange", handleOpenChange);
3463 + return () => {
3464 + events.off("openchange", handleOpenChange);
3465 + };
3466 + }, [events]);
3467 + React16.useEffect(() => {
3468 + if (!open2 || !enabled) {
3469 + if (!open2) {
3470 + sawPressWhileOpenRef.current = false;
3471 + }
3472 + return clearInsideReactTree;
3473 + }
3474 + dataRef.current.__escapeKeyBubbles = escapeKeyBubbles;
3475 + dataRef.current.__outsidePressBubbles = outsidePressBubbles;
3476 + const compositionTimeout = new Timeout();
3477 + const preventedPressSuppressionTimeout = new Timeout();
3478 + const doc = ownerDocument(floatingElement);
3479 + function handleCompositionStart() {
3480 + compositionTimeout.clear();
3481 + isComposingRef.current = true;
3482 + }
3483 + function handleCompositionEnd() {
3484 + compositionTimeout.start(
3485 + // 0ms or 1ms don't work in Safari. 5ms appears to consistently work.
3486 + // Only apply to WebKit for the test to remain 0ms.
3487 + parts_exports.engine.webkit ? 5 : 0,
3488 + () => {
3489 + isComposingRef.current = false;
3490 + }
3491 + );
3492 + }
3493 + function suppressImmediateOutsideClickAfterPreventedStart() {
3494 + suppressNextOutsideClickRef.current = true;
3495 + preventedPressSuppressionTimeout.start(0, () => {
3496 + suppressNextOutsideClickRef.current = false;
3497 + });
3498 + }
3499 + function resetPressStartState() {
3500 + pressStartedInsideRef.current = false;
3501 + pressStartPreventedRef.current = false;
3502 + }
3503 + function getOutsidePressEvent() {
3504 + const type = currentPointerTypeRef.current;
3505 + const computedType = type === "pen" || !type ? "mouse" : type;
3506 + const outsidePressEventValue = getOutsidePressEventProp();
3507 + const resolved = typeof outsidePressEventValue === "function" ? outsidePressEventValue() : outsidePressEventValue;
3508 + if (typeof resolved === "string") {
3509 + return resolved;
3510 + }
3511 + return resolved[computedType];
3512 + }
3513 + function shouldIgnoreEvent(event) {
3514 + const computedOutsidePressEvent = getOutsidePressEvent();
3515 + return computedOutsidePressEvent === "intentional" && event.type !== "click" || computedOutsidePressEvent === "sloppy" && event.type === "click";
3516 + }
3517 + function isEventWithinFloatingTree(event) {
3518 + const nodeId = dataRef.current.floatingContext?.nodeId;
3519 + const targetIsInsideChildren = tree && getNodeChildren(tree.nodesRef.current, nodeId).some((node) => isEventTargetWithin(event, node.context?.elements.floating));
3520 + return isEventWithinOwnElements(event) || targetIsInsideChildren;
3521 + }
3522 + function closeOnPressOutside(event) {
3523 + if (shouldIgnoreEvent(event)) {
3524 + if (event.type !== "click" && !isEventWithinOwnElements(event)) {
3525 + preventedPressSuppressionTimeout.clear();
3526 + suppressNextOutsideClickRef.current = false;
3527 + }
3528 + clearInsideReactTree();
3529 + return;
3530 + }
3531 + if (dataRef.current.insideReactTree) {
3532 + clearInsideReactTree();
3533 + return;
3534 + }
3535 + const target = getTarget(event);
3536 + const inertSelector = `[${createAttribute("inert")}]`;
3537 + const targetRoot = isElement(target) ? target.getRootNode() : null;
3538 + const markers = Array.from((isShadowRoot(targetRoot) ? targetRoot : ownerDocument(store2.select("floatingElement"))).querySelectorAll(inertSelector));
3539 + const triggers = store2.context.triggerElements;
3540 + if (target && (triggers.hasElement(target) || triggers.hasMatchingElement((trigger) => contains(trigger, target)))) {
3541 + return;
3542 + }
3543 + let targetRootAncestor = isElement(target) ? target : null;
3544 + while (targetRootAncestor && !isLastTraversableNode(targetRootAncestor)) {
3545 + const nextParent = getParentNode(targetRootAncestor);
3546 + if (isLastTraversableNode(nextParent) || !isElement(nextParent)) {
3547 + break;
3548 + }
3549 + targetRootAncestor = nextParent;
3550 + }
3551 + if (markers.length && isElement(target) && !isRootElement(target) && // Clicked on a direct ancestor (e.g. FloatingOverlay).
3552 + !contains(target, store2.select("floatingElement")) && // If the target root element contains none of the markers, then the
3553 + // element was injected after the floating element rendered.
3554 + markers.every((marker) => !contains(targetRootAncestor, marker))) {
3555 + return;
3556 + }
3557 + if (isHTMLElement(target) && !("touches" in event)) {
3558 + const lastTraversableNode = isLastTraversableNode(target);
3559 + const style = getComputedStyle2(target);
3560 + const scrollRe = /auto|scroll/;
3561 + const isScrollableX = lastTraversableNode || scrollRe.test(style.overflowX);
3562 + const isScrollableY = lastTraversableNode || scrollRe.test(style.overflowY);
3563 + const canScrollX = isScrollableX && target.clientWidth > 0 && target.scrollWidth > target.clientWidth;
3564 + const canScrollY = isScrollableY && target.clientHeight > 0 && target.scrollHeight > target.clientHeight;
3565 + const isRTL3 = style.direction === "rtl";
3566 + const pressedVerticalScrollbar = canScrollY && (isRTL3 ? event.offsetX <= target.offsetWidth - target.clientWidth : event.offsetX > target.clientWidth);
3567 + const pressedHorizontalScrollbar = canScrollX && event.offsetY > target.clientHeight;
3568 + if (pressedVerticalScrollbar || pressedHorizontalScrollbar) {
3569 + return;
3570 + }
3571 + }
3572 + if (isEventWithinFloatingTree(event)) {
3573 + return;
3574 + }
3575 + if (getOutsidePressEvent() === "intentional") {
3576 + if (event.detail !== 0 && !isVirtualClick(event) && !sawPressWhileOpenRef.current) {
3577 + return;
3578 + }
3579 + if (suppressNextOutsideClickRef.current) {
3580 + preventedPressSuppressionTimeout.clear();
3581 + suppressNextOutsideClickRef.current = false;
3582 + return;
3583 + }
3584 + }
3585 + if (typeof outsidePress2 === "function" && !outsidePress2(event)) {
3586 + return;
3587 + }
3588 + if (hasBlockingChild("__outsidePressBubbles")) {
3589 + return;
3590 + }
3591 + store2.setOpen(false, createChangeEventDetails(reason_parts_exports.outsidePress, event));
3592 + clearInsideReactTree();
3593 + }
3594 + function handlePointerDown(event) {
3595 + if (getOutsidePressEvent() !== "sloppy" || event.pointerType === "touch" || !store2.select("open") || !enabled || isEventWithinOwnElements(event)) {
3596 + return;
3597 + }
3598 + closeOnPressOutside(event);
3599 + }
3600 + function handleTouchStart(event) {
3601 + if (getOutsidePressEvent() !== "sloppy" || !store2.select("open") || !enabled || isEventWithinOwnElements(event)) {
3602 + return;
3603 + }
3604 + const touch = event.touches[0];
3605 + if (touch) {
3606 + touchStateRef.current = {
3607 + startTime: Date.now(),
3608 + startX: touch.clientX,
3609 + startY: touch.clientY,
3610 + dismissOnTouchEnd: false,
3611 + dismissOnMouseDown: true
3612 + };
3613 + cancelDismissOnEndTimeout.start(1e3, () => {
3614 + if (touchStateRef.current) {
3615 + touchStateRef.current.dismissOnTouchEnd = false;
3616 + touchStateRef.current.dismissOnMouseDown = false;
3617 + }
3618 + });
3619 + }
3620 + }
3621 + function addTargetEventListenerOnce(event, listener) {
3622 + const target = getTarget(event);
3623 + if (!target) {
3624 + return;
3625 + }
3626 + const unsubscribe2 = addEventListener(target, event.type, () => {
3627 + listener(event);
3628 + unsubscribe2();
3629 + });
3630 + }
3631 + function handleTouchStartCapture(event) {
3632 + currentPointerTypeRef.current = "touch";
3633 + addTargetEventListenerOnce(event, handleTouchStart);
3634 + }
3635 + function closeOnPressOutsideCapture(event) {
3636 + cancelDismissOnEndTimeout.clear();
3637 + if (event.type === "pointerdown") {
3638 + if (event.button === 0) {
3639 + sawPressWhileOpenRef.current = true;
3640 + }
3641 + currentPointerTypeRef.current = event.pointerType;
3642 + }
3643 + if (event.type === "mousedown" && touchStateRef.current && !touchStateRef.current.dismissOnMouseDown) {
3644 + return;
3645 + }
3646 + addTargetEventListenerOnce(event, (targetEvent) => {
3647 + if (targetEvent.type === "pointerdown") {
3648 + handlePointerDown(targetEvent);
3649 + } else {
3650 + closeOnPressOutside(targetEvent);
3651 + }
3652 + });
3653 + }
3654 + function handlePressEndCapture(event) {
3655 + if (event.type === "pointercancel") {
3656 + sawPressWhileOpenRef.current = false;
3657 + }
3658 + if (!pressStartedInsideRef.current) {
3659 + return;
3660 + }
3661 + const pressStartedInsideDefaultPrevented = pressStartPreventedRef.current;
3662 + resetPressStartState();
3663 + if (getOutsidePressEvent() !== "intentional") {
3664 + return;
3665 + }
3666 + if (event.type === "pointercancel") {
3667 + if (pressStartedInsideDefaultPrevented) {
3668 + suppressImmediateOutsideClickAfterPreventedStart();
3669 + }
3670 + return;
3671 + }
3672 + if (isEventWithinFloatingTree(event)) {
3673 + return;
3674 + }
3675 + if (pressStartedInsideDefaultPrevented) {
3676 + suppressImmediateOutsideClickAfterPreventedStart();
3677 + return;
3678 + }
3679 + if (typeof outsidePress2 === "function" && !outsidePress2(event)) {
3680 + return;
3681 + }
3682 + preventedPressSuppressionTimeout.clear();
3683 + suppressNextOutsideClickRef.current = true;
3684 + clearInsideReactTree();
3685 + }
3686 + function handleTouchMove(event) {
3687 + if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) {
3688 + return;
3689 + }
3690 + const touch = event.touches[0];
3691 + if (!touch) {
3692 + return;
3693 + }
3694 + const deltaX = Math.abs(touch.clientX - touchStateRef.current.startX);
3695 + const deltaY = Math.abs(touch.clientY - touchStateRef.current.startY);
3696 + const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
3697 + if (distance > 5) {
3698 + touchStateRef.current.dismissOnTouchEnd = true;
3699 + }
3700 + if (distance > 10) {
3701 + closeOnPressOutside(event);
3702 + cancelDismissOnEndTimeout.clear();
3703 + touchStateRef.current = null;
3704 + }
3705 + }
3706 + function handleTouchMoveCapture(event) {
3707 + addTargetEventListenerOnce(event, handleTouchMove);
3708 + }
3709 + function handleTouchEnd(event) {
3710 + if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) {
3711 + return;
3712 + }
3713 + if (touchStateRef.current.dismissOnTouchEnd) {
3714 + closeOnPressOutside(event);
3715 + }
3716 + cancelDismissOnEndTimeout.clear();
3717 + touchStateRef.current = null;
3718 + }
3719 + function handleTouchEndCapture(event) {
3720 + addTargetEventListenerOnce(event, handleTouchEnd);
3721 + }
3722 + 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, {
3723 + capture: true,
3724 + passive: true
3725 + }), addEventListener(doc, "touchmove", handleTouchMoveCapture, {
3726 + capture: true,
3727 + passive: true
3728 + }), addEventListener(doc, "touchend", handleTouchEndCapture, {
3729 + capture: true,
3730 + passive: true
3731 + })));
3732 + return () => {
3733 + unsubscribe();
3734 + compositionTimeout.clear();
3735 + preventedPressSuppressionTimeout.clear();
3736 + resetPressStartState();
3737 + suppressNextOutsideClickRef.current = false;
3738 + clearInsideReactTree();
3739 + };
3740 + }, [dataRef, floatingElement, escapeKey2, outsidePressEnabled, outsidePress2, open2, enabled, escapeKeyBubbles, outsidePressBubbles, closeOnEscapeKeyDown, clearInsideReactTree, getOutsidePressEventProp, hasBlockingChild, isEventWithinOwnElements, tree, store2, cancelDismissOnEndTimeout]);
3741 + const reference = React16.useMemo(() => ({
3742 + onKeyDown: closeOnEscapeKeyDown,
3743 + onPointerDown: closeOnReferencePress,
3744 + onClick: closeOnReferencePress
3745 + }), [closeOnEscapeKeyDown, closeOnReferencePress]);
3746 + const floating = React16.useMemo(() => ({
3747 + onKeyDown: closeOnEscapeKeyDown,
3748 + // `onMouseDown` may be blocked if `event.preventDefault()` is called in
3749 + // `onPointerDown`, such as with <NumberField.ScrubArea>.
3750 + // See https://github.com/mui/base-ui/pull/3379
3751 + onPointerDown: markInsidePressStartPrevented,
3752 + onMouseDown: markInsidePressStartPrevented,
3753 + onClickCapture: markInsideReactTree,
3754 + onMouseDownCapture(event) {
3755 + markInsideReactTree();
3756 + markPressStartedInsideReactTree(event);
3757 + },
3758 + onPointerDownCapture(event) {
3759 + markInsideReactTree();
3760 + markPressStartedInsideReactTree(event);
3761 + },
3762 + onMouseUpCapture: markInsideReactTree,
3763 + onTouchEndCapture: markInsideReactTree,
3764 + onTouchMoveCapture: markInsideReactTree
3765 + }), [closeOnEscapeKeyDown, markInsideReactTree, markPressStartedInsideReactTree, markInsidePressStartPrevented]);
3766 + return React16.useMemo(() => enabled ? {
3767 + reference,
3768 + floating,
3769 + trigger: reference
3770 + } : {}, [enabled, reference, floating]);
3771 + }
3772 +
3773 + // node_modules/@base-ui/react/floating-ui-react/hooks/useFloating.mjs
3774 + var React24 = __toESM(require_react(), 1);
3775 +
3776 + // node_modules/@floating-ui/core/dist/floating-ui.core.mjs
3777 + function computeCoordsFromPlacement(_ref, placement, rtl) {
3778 + let {
3779 + reference,
3780 + floating
3781 + } = _ref;
3782 + const sideAxis = getSideAxis(placement);
3783 + const alignmentAxis = getAlignmentAxis(placement);
3784 + const alignLength = getAxisLength(alignmentAxis);
3785 + const side = getSide(placement);
3786 + const isVertical = sideAxis === "y";
3787 + const commonX = reference.x + reference.width / 2 - floating.width / 2;
3788 + const commonY = reference.y + reference.height / 2 - floating.height / 2;
3789 + const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;
3790 + let coords;
3791 + switch (side) {
3792 + case "top":
3793 + coords = {
3794 + x: commonX,
3795 + y: reference.y - floating.height
3796 + };
3797 + break;
3798 + case "bottom":
3799 + coords = {
3800 + x: commonX,
3801 + y: reference.y + reference.height
3802 + };
3803 + break;
3804 + case "right":
3805 + coords = {
3806 + x: reference.x + reference.width,
3807 + y: commonY
3808 + };
3809 + break;
3810 + case "left":
3811 + coords = {
3812 + x: reference.x - floating.width,
3813 + y: commonY
3814 + };
3815 + break;
3816 + default:
3817 + coords = {
3818 + x: reference.x,
3819 + y: reference.y
3820 + };
3821 + }
3822 + const alignment = getAlignment(placement);
3823 + if (alignment) {
3824 + coords[alignmentAxis] += commonAlign * (alignment === "end" ? 1 : -1) * (rtl && isVertical ? -1 : 1);
3825 + }
3826 + return coords;
3827 + }
3828 + async function detectOverflow(state, options) {
3829 + var _await$platform$isEle;
3830 + if (options === void 0) {
3831 + options = {};
3832 + }
3833 + const {
3834 + x,
3835 + y,
3836 + platform: platform3,
3837 + rects,
3838 + elements,
3839 + strategy
3840 + } = state;
3841 + const {
3842 + boundary = "clippingAncestors",
3843 + rootBoundary = "viewport",
3844 + elementContext = "floating",
3845 + altBoundary = false,
3846 + padding = 0
3847 + } = evaluate(options, state);
3848 + const paddingObject = getPaddingObject(padding);
3849 + const altContext = elementContext === "floating" ? "reference" : "floating";
3850 + const element = elements[altBoundary ? altContext : elementContext];
3851 + const clippingClientRect = rectToClientRect(await platform3.getClippingRect({
3852 + 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)),
3853 + boundary,
3854 + rootBoundary,
3855 + strategy
3856 + }));
3857 + const rect = elementContext === "floating" ? {
3858 + x,
3859 + y,
3860 + width: rects.floating.width,
3861 + height: rects.floating.height
3862 + } : rects.reference;
3863 + const offsetParent = await (platform3.getOffsetParent == null ? void 0 : platform3.getOffsetParent(elements.floating));
3864 + const offsetScale = await (platform3.isElement == null ? void 0 : platform3.isElement(offsetParent)) && await (platform3.getScale == null ? void 0 : platform3.getScale(offsetParent)) || {
3865 + x: 1,
3866 + y: 1
3867 + };
3868 + const elementClientRect = rectToClientRect(platform3.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform3.convertOffsetParentRelativeRectToViewportRelativeRect({
3869 + elements,
3870 + rect,
3871 + offsetParent,
3872 + strategy
3873 + }) : rect);
3874 + return {
3875 + top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,
3876 + bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,
3877 + left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,
3878 + right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x
3879 + };
3880 + }
3881 + var MAX_RESET_COUNT = 50;
3882 + var computePosition = async (reference, floating, config) => {
3883 + const {
3884 + placement = "bottom",
3885 + strategy = "absolute",
3886 + middleware = [],
3887 + platform: platform3
3888 + } = config;
3889 + const platformWithDetectOverflow = platform3.detectOverflow ? platform3 : {
3890 + ...platform3,
3891 + detectOverflow
3892 + };
3893 + const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(floating));
3894 + let rects = await platform3.getElementRects({
3895 + reference,
3896 + floating,
3897 + strategy
3898 + });
3899 + let {
3900 + x,
3901 + y
3902 + } = computeCoordsFromPlacement(rects, placement, rtl);
3903 + let statefulPlacement = placement;
3904 + let resetCount = 0;
3905 + const middlewareData = {};
3906 + for (let i = 0; i < middleware.length; i++) {
3907 + const currentMiddleware = middleware[i];
3908 + if (!currentMiddleware) {
3909 + continue;
3910 + }
3911 + const {
3912 + name,
3913 + fn
3914 + } = currentMiddleware;
3915 + const {
3916 + x: nextX,
3917 + y: nextY,
3918 + data,
3919 + reset
3920 + } = await fn({
3921 + x,
3922 + y,
3923 + initialPlacement: placement,
3924 + placement: statefulPlacement,
3925 + strategy,
3926 + middlewareData,
3927 + rects,
3928 + platform: platformWithDetectOverflow,
3929 + elements: {
3930 + reference,
3931 + floating
3932 + }
3933 + });
3934 + x = nextX != null ? nextX : x;
3935 + y = nextY != null ? nextY : y;
3936 + middlewareData[name] = {
3937 + ...middlewareData[name],
3938 + ...data
3939 + };
3940 + if (reset && resetCount < MAX_RESET_COUNT) {
3941 + resetCount++;
3942 + if (typeof reset === "object") {
3943 + if (reset.placement) {
3944 + statefulPlacement = reset.placement;
3945 + }
3946 + if (reset.rects) {
3947 + rects = reset.rects === true ? await platform3.getElementRects({
3948 + reference,
3949 + floating,
3950 + strategy
3951 + }) : reset.rects;
3952 + }
3953 + ({
3954 + x,
3955 + y
3956 + } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));
3957 + }
3958 + i = -1;
3959 + }
3960 + }
3961 + return {
3962 + x,
3963 + y,
3964 + placement: statefulPlacement,
3965 + strategy,
3966 + middlewareData
3967 + };
3968 + };
3969 + var flip = function(options) {
3970 + if (options === void 0) {
3971 + options = {};
3972 + }
3973 + return {
3974 + name: "flip",
3975 + options,
3976 + async fn(state) {
3977 + var _middlewareData$arrow, _middlewareData$flip;
3978 + const {
3979 + placement,
3980 + middlewareData,
3981 + rects,
3982 + initialPlacement,
3983 + platform: platform3,
3984 + elements
3985 + } = state;
3986 + const {
3987 + mainAxis: checkMainAxis = true,
3988 + crossAxis: checkCrossAxis = true,
3989 + fallbackPlacements: specifiedFallbackPlacements,
3990 + fallbackStrategy = "bestFit",
3991 + fallbackAxisSideDirection = "none",
3992 + flipAlignment = true,
3993 + ...detectOverflowOptions
3994 + } = evaluate(options, state);
3995 + if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
3996 + return {};
3997 + }
3998 + const side = getSide(placement);
3999 + const initialSideAxis = getSideAxis(initialPlacement);
4000 + const isBasePlacement = getSide(initialPlacement) === initialPlacement;
4001 + const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating));
4002 + const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));
4003 + const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== "none";
4004 + if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {
4005 + fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));
4006 + }
4007 + const placements2 = [initialPlacement, ...fallbackPlacements];
4008 + const overflow = await platform3.detectOverflow(state, detectOverflowOptions);
4009 + const overflows = [];
4010 + let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];
4011 + if (checkMainAxis) {
4012 + overflows.push(overflow[side]);
4013 + }
4014 + if (checkCrossAxis) {
4015 + const sides2 = getAlignmentSides(placement, rects, rtl);
4016 + overflows.push(overflow[sides2[0]], overflow[sides2[1]]);
4017 + }
4018 + overflowsData = [...overflowsData, {
4019 + placement,
4020 + overflows
4021 + }];
4022 + if (!overflows.every((side2) => side2 <= 0)) {
4023 + var _middlewareData$flip2, _overflowsData$filter;
4024 + const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;
4025 + const nextPlacement = placements2[nextIndex];
4026 + if (nextPlacement) {
4027 + const ignoreCrossAxisOverflow = checkCrossAxis === "alignment" ? initialSideAxis !== getSideAxis(nextPlacement) : false;
4028 + if (!ignoreCrossAxisOverflow || // We leave the current main axis only if every placement on that axis
4029 + // overflows the main axis.
4030 + overflowsData.every((d) => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {
4031 + return {
4032 + data: {
4033 + index: nextIndex,
4034 + overflows: overflowsData
4035 + },
4036 + reset: {
4037 + placement: nextPlacement
4038 + }
4039 + };
4040 + }
4041 + }
4042 + 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;
4043 + if (!resetPlacement) {
4044 + switch (fallbackStrategy) {
4045 + case "bestFit": {
4046 + var _overflowsData$filter2;
4047 + const placement2 = (_overflowsData$filter2 = overflowsData.filter((d) => {
4048 + if (hasFallbackAxisSideDirection) {
4049 + const currentSideAxis = getSideAxis(d.placement);
4050 + return currentSideAxis === initialSideAxis || // Create a bias to the `y` side axis due to horizontal
4051 + // reading directions favoring greater width.
4052 + currentSideAxis === "y";
4053 + }
4054 + return true;
4055 + }).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];
4056 + if (placement2) {
4057 + resetPlacement = placement2;
4058 + }
4059 + break;
4060 + }
4061 + case "initialPlacement":
4062 + resetPlacement = initialPlacement;
4063 + break;
4064 + }
4065 + }
4066 + if (placement !== resetPlacement) {
4067 + return {
4068 + reset: {
4069 + placement: resetPlacement
4070 + }
4071 + };
4072 + }
4073 + }
4074 + return {};
4075 + }
4076 + };
4077 + };
4078 + var originSides = /* @__PURE__ */ new Set(["left", "top"]);
4079 + async function convertValueToCoords(state, options) {
4080 + const {
4081 + placement,
4082 + platform: platform3,
4083 + elements
4084 + } = state;
4085 + const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating));
4086 + const side = getSide(placement);
4087 + const alignment = getAlignment(placement);
4088 + const isVertical = getSideAxis(placement) === "y";
4089 + const mainAxisMulti = originSides.has(side) ? -1 : 1;
4090 + const crossAxisMulti = rtl && isVertical ? -1 : 1;
4091 + const rawValue = evaluate(options, state);
4092 + let {
4093 + mainAxis,
4094 + crossAxis,
4095 + alignmentAxis
4096 + } = typeof rawValue === "number" ? {
4097 + mainAxis: rawValue,
4098 + crossAxis: 0,
4099 + alignmentAxis: null
4100 + } : {
4101 + mainAxis: rawValue.mainAxis || 0,
4102 + crossAxis: rawValue.crossAxis || 0,
4103 + alignmentAxis: rawValue.alignmentAxis
4104 + };
4105 + if (alignment && typeof alignmentAxis === "number") {
4106 + crossAxis = alignment === "end" ? alignmentAxis * -1 : alignmentAxis;
4107 + }
4108 + return isVertical ? {
4109 + x: crossAxis * crossAxisMulti,
4110 + y: mainAxis * mainAxisMulti
4111 + } : {
4112 + x: mainAxis * mainAxisMulti,
4113 + y: crossAxis * crossAxisMulti
4114 + };
4115 + }
4116 + var offset = function(options) {
4117 + if (options === void 0) {
4118 + options = 0;
4119 + }
4120 + return {
4121 + name: "offset",
4122 + options,
4123 + async fn(state) {
4124 + var _middlewareData$offse, _middlewareData$arrow;
4125 + const {
4126 + x,
4127 + y,
4128 + placement,
4129 + middlewareData
4130 + } = state;
4131 + const diffCoords = await convertValueToCoords(state, options);
4132 + if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
4133 + return {};
4134 + }
4135 + return {
4136 + x: x + diffCoords.x,
4137 + y: y + diffCoords.y,
4138 + data: {
4139 + ...diffCoords,
4140 + placement
4141 + }
4142 + };
4143 + }
4144 + };
4145 + };
4146 + var shift = function(options) {
4147 + if (options === void 0) {
4148 + options = {};
4149 + }
4150 + return {
4151 + name: "shift",
4152 + options,
4153 + async fn(state) {
4154 + const {
4155 + x,
4156 + y,
4157 + placement,
4158 + platform: platform3
4159 + } = state;
4160 + const {
4161 + mainAxis: checkMainAxis = true,
4162 + crossAxis: checkCrossAxis = false,
4163 + limiter = {
4164 + fn: (_ref) => {
4165 + let {
4166 + x: x2,
4167 + y: y2
4168 + } = _ref;
4169 + return {
4170 + x: x2,
4171 + y: y2
4172 + };
4173 + }
4174 + },
4175 + ...detectOverflowOptions
4176 + } = evaluate(options, state);
4177 + const coords = {
4178 + x,
4179 + y
4180 + };
4181 + const overflow = await platform3.detectOverflow(state, detectOverflowOptions);
4182 + const crossAxis = getSideAxis(placement);
4183 + const mainAxis = getOppositeAxis(crossAxis);
4184 + let mainAxisCoord = coords[mainAxis];
4185 + let crossAxisCoord = coords[crossAxis];
4186 + const clampCoord = (axis, coord) => clamp(coord + overflow[axis === "y" ? "top" : "left"], coord, coord - overflow[axis === "y" ? "bottom" : "right"]);
4187 + if (checkMainAxis) {
4188 + mainAxisCoord = clampCoord(mainAxis, mainAxisCoord);
4189 + }
4190 + if (checkCrossAxis) {
4191 + crossAxisCoord = clampCoord(crossAxis, crossAxisCoord);
4192 + }
4193 + const limitedCoords = limiter.fn({
4194 + ...state,
4195 + [mainAxis]: mainAxisCoord,
4196 + [crossAxis]: crossAxisCoord
4197 + });
4198 + return {
4199 + ...limitedCoords,
4200 + data: {
4201 + x: limitedCoords.x - x,
4202 + y: limitedCoords.y - y,
4203 + enabled: {
4204 + [mainAxis]: checkMainAxis,
4205 + [crossAxis]: checkCrossAxis
4206 + }
4207 + }
4208 + };
4209 + }
4210 + };
4211 + };
4212 + var limitShift = function(options) {
4213 + if (options === void 0) {
4214 + options = {};
4215 + }
4216 + return {
4217 + options,
4218 + fn(state) {
4219 + var _rawOffset$mainAxis, _rawOffset$crossAxis;
4220 + const {
4221 + x,
4222 + y,
4223 + placement,
4224 + rects,
4225 + middlewareData
4226 + } = state;
4227 + const {
4228 + offset: offset4 = 0,
4229 + mainAxis: checkMainAxis = true,
4230 + crossAxis: checkCrossAxis = true
4231 + } = evaluate(options, state);
4232 + const coords = {
4233 + x,
4234 + y
4235 + };
4236 + const crossAxis = getSideAxis(placement);
4237 + const mainAxis = getOppositeAxis(crossAxis);
4238 + let mainAxisCoord = coords[mainAxis];
4239 + let crossAxisCoord = coords[crossAxis];
4240 + const rawOffset = evaluate(offset4, state);
4241 + const computedOffset = typeof rawOffset === "number" ? {
4242 + mainAxis: rawOffset,
4243 + crossAxis: 0
4244 + } : {
4245 + mainAxis: (_rawOffset$mainAxis = rawOffset.mainAxis) != null ? _rawOffset$mainAxis : 0,
4246 + crossAxis: (_rawOffset$crossAxis = rawOffset.crossAxis) != null ? _rawOffset$crossAxis : 0
4247 + };
4248 + if (checkMainAxis) {
4249 + const len = mainAxis === "y" ? "height" : "width";
4250 + const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;
4251 + const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;
4252 + if (mainAxisCoord < limitMin) {
4253 + mainAxisCoord = limitMin;
4254 + } else if (mainAxisCoord > limitMax) {
4255 + mainAxisCoord = limitMax;
4256 + }
4257 + }
4258 + if (checkCrossAxis) {
4259 + var _middlewareData$offse, _middlewareData$offse2;
4260 + const len = mainAxis === "y" ? "width" : "height";
4261 + const isOriginSide = originSides.has(getSide(placement));
4262 + 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);
4263 + 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);
4264 + if (crossAxisCoord < limitMin) {
4265 + crossAxisCoord = limitMin;
4266 + } else if (crossAxisCoord > limitMax) {
4267 + crossAxisCoord = limitMax;
4268 + }
4269 + }
4270 + return {
4271 + [mainAxis]: mainAxisCoord,
4272 + [crossAxis]: crossAxisCoord
4273 + };
4274 + }
4275 + };
4276 + };
4277 + var size = function(options) {
4278 + if (options === void 0) {
4279 + options = {};
4280 + }
4281 + return {
4282 + name: "size",
4283 + options,
4284 + async fn(state) {
4285 + const {
4286 + placement,
4287 + rects,
4288 + platform: platform3,
4289 + elements
4290 + } = state;
4291 + const {
4292 + apply = () => {
4293 + },
4294 + ...detectOverflowOptions
4295 + } = evaluate(options, state);
4296 + const overflow = await platform3.detectOverflow(state, detectOverflowOptions);
4297 + const side = getSide(placement);
4298 + const alignment = getAlignment(placement);
4299 + const isYAxis = getSideAxis(placement) === "y";
4300 + const {
4301 + width,
4302 + height
4303 + } = rects.floating;
4304 + let heightSide;
4305 + let widthSide;
4306 + if (side === "top" || side === "bottom") {
4307 + heightSide = side;
4308 + widthSide = alignment === (await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)) ? "start" : "end") ? "left" : "right";
4309 + } else {
4310 + widthSide = side;
4311 + heightSide = alignment === "end" ? "top" : "bottom";
4312 + }
4313 + const maximumClippingHeight = height - overflow.top - overflow.bottom;
4314 + const maximumClippingWidth = width - overflow.left - overflow.right;
4315 + const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);
4316 + const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);
4317 + const shiftData = state.middlewareData.shift;
4318 + const noShift = !shiftData;
4319 + let availableHeight2 = overflowAvailableHeight;
4320 + let availableWidth2 = overflowAvailableWidth;
4321 + if (shiftData != null && shiftData.enabled.x) {
4322 + availableWidth2 = maximumClippingWidth;
4323 + }
4324 + if (shiftData != null && shiftData.enabled.y) {
4325 + availableHeight2 = maximumClippingHeight;
4326 + }
4327 + if (noShift && !alignment) {
4328 + if (isYAxis) {
4329 + availableWidth2 = width - 2 * max(overflow.left, overflow.right);
4330 + } else {
4331 + availableHeight2 = height - 2 * max(overflow.top, overflow.bottom);
4332 + }
4333 + }
4334 + await apply({
4335 + ...state,
4336 + availableWidth: availableWidth2,
4337 + availableHeight: availableHeight2
4338 + });
4339 + const nextDimensions = await platform3.getDimensions(elements.floating);
4340 + if (width !== nextDimensions.width || height !== nextDimensions.height) {
4341 + return {
4342 + reset: {
4343 + rects: true
4344 + }
4345 + };
4346 + }
4347 + return {};
4348 + }
4349 + };
4350 + };
4351 +
4352 + // node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs
4353 + function getCssDimensions(element) {
4354 + const css = getComputedStyle2(element);
4355 + let width = parseFloat(css.width) || 0;
4356 + let height = parseFloat(css.height) || 0;
4357 + const hasOffset = isHTMLElement(element);
4358 + const offsetWidth = hasOffset ? element.offsetWidth : width;
4359 + const offsetHeight = hasOffset ? element.offsetHeight : height;
4360 + const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;
4361 + if (shouldFallback) {
4362 + width = offsetWidth;
4363 + height = offsetHeight;
4364 + }
4365 + return {
4366 + width,
4367 + height,
4368 + $: shouldFallback
4369 + };
4370 + }
4371 + function unwrapElement(element) {
4372 + return !isElement(element) ? element.contextElement : element;
4373 + }
4374 + function getScale(element) {
4375 + const domElement = unwrapElement(element);
4376 + if (!isHTMLElement(domElement)) {
4377 + return createCoords(1);
4378 + }
4379 + const rect = domElement.getBoundingClientRect();
4380 + const {
4381 + width,
4382 + height,
4383 + $
4384 + } = getCssDimensions(domElement);
4385 + let x = ($ ? round(rect.width) : rect.width) / width;
4386 + let y = ($ ? round(rect.height) : rect.height) / height;
4387 + if (!x || !Number.isFinite(x)) {
4388 + x = 1;
4389 + }
4390 + if (!y || !Number.isFinite(y)) {
4391 + y = 1;
4392 + }
4393 + return {
4394 + x,
4395 + y
4396 + };
4397 + }
4398 + var noOffsets = /* @__PURE__ */ createCoords(0);
4399 + function getVisualOffsets(element) {
4400 + const win = getWindow(element);
4401 + if (!isWebKit() || !win.visualViewport) {
4402 + return noOffsets;
4403 + }
4404 + return {
4405 + x: win.visualViewport.offsetLeft,
4406 + y: win.visualViewport.offsetTop
4407 + };
4408 + }
4409 + function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {
4410 + if (isFixed === void 0) {
4411 + isFixed = false;
4412 + }
4413 + return !!floatingOffsetParent && isFixed && floatingOffsetParent === getWindow(element);
4414 + }
4415 + function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {
4416 + if (includeScale === void 0) {
4417 + includeScale = false;
4418 + }
4419 + if (isFixedStrategy === void 0) {
4420 + isFixedStrategy = false;
4421 + }
4422 + const clientRect = element.getBoundingClientRect();
4423 + const domElement = unwrapElement(element);
4424 + let scale = createCoords(1);
4425 + if (includeScale) {
4426 + if (offsetParent) {
4427 + if (isElement(offsetParent)) {
4428 + scale = getScale(offsetParent);
4429 + }
4430 + } else {
4431 + scale = getScale(element);
4432 + }
4433 + }
4434 + const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);
4435 + let x = (clientRect.left + visualOffsets.x) / scale.x;
4436 + let y = (clientRect.top + visualOffsets.y) / scale.y;
4437 + let width = clientRect.width / scale.x;
4438 + let height = clientRect.height / scale.y;
4439 + if (domElement && offsetParent) {
4440 + const win = getWindow(domElement);
4441 + const offsetWin = isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;
4442 + let currentWin = win;
4443 + let currentIFrame = getFrameElement(currentWin);
4444 + while (currentIFrame && offsetWin !== currentWin) {
4445 + const iframeScale = getScale(currentIFrame);
4446 + const iframeRect = currentIFrame.getBoundingClientRect();
4447 + const css = getComputedStyle2(currentIFrame);
4448 + const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;
4449 + const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;
4450 + x *= iframeScale.x;
4451 + y *= iframeScale.y;
4452 + width *= iframeScale.x;
4453 + height *= iframeScale.y;
4454 + x += left;
4455 + y += top;
4456 + currentWin = getWindow(currentIFrame);
4457 + currentIFrame = getFrameElement(currentWin);
4458 + }
4459 + }
4460 + return rectToClientRect({
4461 + width,
4462 + height,
4463 + x,
4464 + y
4465 + });
4466 + }
4467 + function getWindowScrollBarX(element, rect) {
4468 + const leftScroll = getNodeScroll(element).scrollLeft;
4469 + if (!rect) {
4470 + return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;
4471 + }
4472 + return rect.left + leftScroll;
4473 + }
4474 + function getHTMLOffset(documentElement, scroll) {
4475 + const htmlRect = documentElement.getBoundingClientRect();
4476 + const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);
4477 + const y = htmlRect.top + scroll.scrollTop;
4478 + return {
4479 + x,
4480 + y
4481 + };
4482 + }
4483 + function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
4484 + let {
4485 + elements,
4486 + rect,
4487 + offsetParent,
4488 + strategy
4489 + } = _ref;
4490 + const isFixed = strategy === "fixed";
4491 + const documentElement = getDocumentElement(offsetParent);
4492 + const topLayer = elements ? isTopLayer(elements.floating) : false;
4493 + if (offsetParent === documentElement || topLayer && isFixed) {
4494 + return rect;
4495 + }
4496 + let scroll = {
4497 + scrollLeft: 0,
4498 + scrollTop: 0
4499 + };
4500 + let scale = createCoords(1);
4501 + const offsets = createCoords(0);
4502 + const isOffsetParentAnElement = isHTMLElement(offsetParent);
4503 + if (isOffsetParentAnElement || !isFixed) {
4504 + if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) {
4505 + scroll = getNodeScroll(offsetParent);
4506 + }
4507 + if (isOffsetParentAnElement) {
4508 + const offsetRect = getBoundingClientRect(offsetParent);
4509 + scale = getScale(offsetParent);
4510 + offsets.x = offsetRect.x + offsetParent.clientLeft;
4511 + offsets.y = offsetRect.y + offsetParent.clientTop;
4512 + }
4513 + }
4514 + const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
4515 + return {
4516 + width: rect.width * scale.x,
4517 + height: rect.height * scale.y,
4518 + x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,
4519 + y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y
4520 + };
4521 + }
4522 + function getClientRects(element) {
4523 + return element.getClientRects ? Array.from(element.getClientRects()) : [];
4524 + }
4525 + function getDocumentRect(html) {
4526 + const scroll = getNodeScroll(html);
4527 + const body = html.ownerDocument.body;
4528 + const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);
4529 + const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);
4530 + let x = -scroll.scrollLeft + getWindowScrollBarX(html);
4531 + const y = -scroll.scrollTop;
4532 + if (getComputedStyle2(body).direction === "rtl") {
4533 + x += max(html.clientWidth, body.clientWidth) - width;
4534 + }
4535 + return {
4536 + width,
4537 + height,
4538 + x,
4539 + y
4540 + };
4541 + }
4542 + var SCROLLBAR_MAX = 25;
4543 + function getViewportRect(element, strategy, rootBoundary) {
4544 + if (rootBoundary === void 0) {
4545 + rootBoundary = "viewport";
4546 + }
4547 + const isLayoutViewport = rootBoundary === "layoutViewport";
4548 + const win = getWindow(element);
4549 + const html = getDocumentElement(element);
4550 + const visualViewport = win.visualViewport;
4551 + let width = html.clientWidth;
4552 + let height = html.clientHeight;
4553 + let x = 0;
4554 + let y = 0;
4555 + if (visualViewport) {
4556 + const layoutRelativeClientCoords = !isWebKit() || strategy === "fixed";
4557 + if (isLayoutViewport) {
4558 + if (!layoutRelativeClientCoords) {
4559 + x = -visualViewport.offsetLeft;
4560 + y = -visualViewport.offsetTop;
4561 + }
4562 + } else {
4563 + width = visualViewport.width;
4564 + height = visualViewport.height;
4565 + if (layoutRelativeClientCoords) {
4566 + x = visualViewport.offsetLeft;
4567 + y = visualViewport.offsetTop;
4568 + }
4569 + }
4570 + }
4571 + const windowScrollbarX = getWindowScrollBarX(html);
4572 + if (windowScrollbarX <= 0) {
4573 + const doc = html.ownerDocument;
4574 + const body = doc.body;
4575 + const bodyStyles = getComputedStyle(body);
4576 + const bodyMarginInline = doc.compatMode === "CSS1Compat" ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;
4577 + const reservedWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);
4578 + const gutter = getComputedStyle(html).scrollbarGutter === "stable both-edges" ? reservedWidth / 2 : reservedWidth;
4579 + if (gutter <= SCROLLBAR_MAX) {
4580 + width -= gutter;
4581 + }
4582 + }
4583 + return {
4584 + width,
4585 + height,
4586 + x,
4587 + y
4588 + };
4589 + }
4590 + function getInnerBoundingClientRect(element, strategy) {
4591 + const clientRect = getBoundingClientRect(element, true, strategy === "fixed");
4592 + const top = clientRect.top + element.clientTop;
4593 + const left = clientRect.left + element.clientLeft;
4594 + const scale = getScale(element);
4595 + const width = element.clientWidth * scale.x;
4596 + const height = element.clientHeight * scale.y;
4597 + const x = left * scale.x;
4598 + const y = top * scale.y;
4599 + return {
4600 + width,
4601 + height,
4602 + x,
4603 + y
4604 + };
4605 + }
4606 + function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {
4607 + let rect;
4608 + if (clippingAncestor === "viewport" || clippingAncestor === "layoutViewport") {
4609 + rect = getViewportRect(element, strategy, clippingAncestor);
4610 + } else if (clippingAncestor === "document") {
4611 + rect = getDocumentRect(getDocumentElement(element));
4612 + } else if (isElement(clippingAncestor)) {
4613 + rect = getInnerBoundingClientRect(clippingAncestor, strategy);
4614 + } else {
4615 + const visualOffsets = getVisualOffsets(element);
4616 + rect = {
4617 + x: clippingAncestor.x - visualOffsets.x,
4618 + y: clippingAncestor.y - visualOffsets.y,
4619 + width: clippingAncestor.width,
4620 + height: clippingAncestor.height
4621 + };
4622 + }
4623 + return rectToClientRect(rect);
4624 + }
4625 + function getClippingElementAncestors(element, cache) {
4626 + const cachedResult = cache.get(element);
4627 + if (cachedResult) {
4628 + return cachedResult;
4629 + }
4630 + let result = getOverflowAncestors(element, [], false).filter((el) => isElement(el) && getNodeName(el) !== "body");
4631 + let lastKeptComputedStyle = null;
4632 + const elementIsFixed = getComputedStyle2(element).position === "fixed";
4633 + let currentNode = elementIsFixed ? getParentNode(element) : element;
4634 + while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {
4635 + const computedStyle = getComputedStyle2(currentNode);
4636 + const currentNodeIsContaining = isContainingBlock(currentNode);
4637 + const lastPosition = lastKeptComputedStyle ? lastKeptComputedStyle.position : elementIsFixed ? "fixed" : "";
4638 + const shouldDropCurrentNode = !currentNodeIsContaining && (lastPosition === "fixed" || lastPosition === "absolute" && computedStyle.position === "static");
4639 + if (shouldDropCurrentNode) {
4640 + result = result.filter((ancestor) => ancestor !== currentNode);
4641 + } else {
4642 + lastKeptComputedStyle = computedStyle;
4643 + }
4644 + currentNode = getParentNode(currentNode);
4645 + }
4646 + cache.set(element, result);
4647 + return result;
4648 + }
4649 + function getClippingRect(_ref) {
4650 + let {
4651 + element,
4652 + boundary,
4653 + rootBoundary,
4654 + strategy
4655 + } = _ref;
4656 + const elementClippingAncestors = boundary === "clippingAncestors" ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);
4657 + const clippingAncestors = [...elementClippingAncestors, rootBoundary];
4658 + const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);
4659 + let top = firstRect.top;
4660 + let right = firstRect.right;
4661 + let bottom = firstRect.bottom;
4662 + let left = firstRect.left;
4663 + for (let i = 1; i < clippingAncestors.length; i++) {
4664 + const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);
4665 + top = max(rect.top, top);
4666 + right = min(rect.right, right);
4667 + bottom = min(rect.bottom, bottom);
4668 + left = max(rect.left, left);
4669 + }
4670 + return {
4671 + width: right - left,
4672 + height: bottom - top,
4673 + x: left,
4674 + y: top
4675 + };
4676 + }
4677 + function getDimensions(element) {
4678 + const {
4679 + width,
4680 + height
4681 + } = getCssDimensions(element);
4682 + return {
4683 + width,
4684 + height
4685 + };
4686 + }
4687 + function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
4688 + const isOffsetParentAnElement = isHTMLElement(offsetParent);
4689 + const documentElement = getDocumentElement(offsetParent);
4690 + const isFixed = strategy === "fixed";
4691 + const rect = getBoundingClientRect(element, true, isFixed, offsetParent);
4692 + let scroll = {
4693 + scrollLeft: 0,
4694 + scrollTop: 0
4695 + };
4696 + const offsets = createCoords(0);
4697 + if (isOffsetParentAnElement || !isFixed) {
4698 + if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) {
4699 + scroll = getNodeScroll(offsetParent);
4700 + }
4701 + if (isOffsetParentAnElement) {
4702 + const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);
4703 + offsets.x = offsetRect.x + offsetParent.clientLeft;
4704 + offsets.y = offsetRect.y + offsetParent.clientTop;
4705 + }
4706 + }
4707 + if (!isOffsetParentAnElement && documentElement) {
4708 + offsets.x = getWindowScrollBarX(documentElement);
4709 + }
4710 + const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
4711 + const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;
4712 + const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;
4713 + return {
4714 + x,
4715 + y,
4716 + width: rect.width,
4717 + height: rect.height
4718 + };
4719 + }
4720 + function isStaticPositioned(element) {
4721 + return getComputedStyle2(element).position === "static";
4722 + }
4723 + function getTrueOffsetParent(element, polyfill) {
4724 + if (!isHTMLElement(element) || getComputedStyle2(element).position === "fixed") {
4725 + return null;
4726 + }
4727 + if (polyfill) {
4728 + return polyfill(element);
4729 + }
4730 + let rawOffsetParent = element.offsetParent;
4731 + if (getDocumentElement(element) === rawOffsetParent) {
4732 + rawOffsetParent = rawOffsetParent.ownerDocument.body;
4733 + }
4734 + return rawOffsetParent;
4735 + }
4736 + function getOffsetParent(element, polyfill) {
4737 + const win = getWindow(element);
4738 + if (isTopLayer(element)) {
4739 + return win;
4740 + }
4741 + if (!isHTMLElement(element)) {
4742 + let svgOffsetParent = getParentNode(element);
4743 + while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {
4744 + if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {
4745 + return svgOffsetParent;
4746 + }
4747 + svgOffsetParent = getParentNode(svgOffsetParent);
4748 + }
4749 + return win;
4750 + }
4751 + let offsetParent = getTrueOffsetParent(element, polyfill);
4752 + while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {
4753 + offsetParent = getTrueOffsetParent(offsetParent, polyfill);
4754 + }
4755 + if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {
4756 + return win;
4757 + }
4758 + return offsetParent || getContainingBlock(element) || win;
4759 + }
4760 + var getElementRects = async function(data) {
4761 + const getOffsetParentFn = this.getOffsetParent || getOffsetParent;
4762 + const getDimensionsFn = this.getDimensions;
4763 + const floatingDimensions = await getDimensionsFn(data.floating);
4764 + return {
4765 + reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),
4766 + floating: {
4767 + x: 0,
4768 + y: 0,
4769 + width: floatingDimensions.width,
4770 + height: floatingDimensions.height
4771 + }
4772 + };
4773 + };
4774 + function isRTL(element) {
4775 + return getComputedStyle2(element).direction === "rtl";
4776 + }
4777 + var platform2 = {
4778 + convertOffsetParentRelativeRectToViewportRelativeRect,
4779 + getDocumentElement,
4780 + getClippingRect,
4781 + getOffsetParent,
4782 + getElementRects,
4783 + getClientRects,
4784 + getDimensions,
4785 + getScale,
4786 + isElement,
4787 + isRTL
4788 + };
4789 + function rectsAreEqual(a, b) {
4790 + return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;
4791 + }
4792 + function observeMove(element, onMove, ancestorResize) {
4793 + let io = null;
4794 + let timeoutId;
4795 + const root = getDocumentElement(element);
4796 + function cleanup() {
4797 + var _io;
4798 + clearTimeout(timeoutId);
4799 + (_io = io) == null || _io.disconnect();
4800 + io = null;
4801 + }
4802 + function refresh(skip, threshold) {
4803 + if (skip === void 0) {
4804 + skip = false;
4805 + }
4806 + if (threshold === void 0) {
4807 + threshold = 1;
4808 + }
4809 + cleanup();
4810 + const elementRectForRootMargin = element.getBoundingClientRect();
4811 + const {
4812 + left,
4813 + top,
4814 + width,
4815 + height
4816 + } = elementRectForRootMargin;
4817 + if (!skip) {
4818 + onMove();
4819 + }
4820 + if (!width || !height) {
4821 + return;
4822 + }
4823 + const insetTop = floor(top);
4824 + const insetRight = floor(root.clientWidth - (left + width));
4825 + const insetBottom = floor(root.clientHeight - (top + height));
4826 + const insetLeft = floor(left);
4827 + const rootMargin = -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px";
4828 + const options = {
4829 + rootMargin,
4830 + threshold: max(0, min(1, threshold)) || 1
4831 + };
4832 + let isFirstUpdate = true;
4833 + function handleObserve(entries) {
4834 + const ratio = entries[0].intersectionRatio;
4835 + if (!rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {
4836 + return refresh();
4837 + }
4838 + if (ratio !== threshold) {
4839 + if (!isFirstUpdate) {
4840 + return refresh();
4841 + }
4842 + if (!ratio) {
4843 + timeoutId = setTimeout(() => {
4844 + refresh(false, 1e-7);
4845 + }, 1e3);
4846 + } else {
4847 + refresh(false, ratio);
4848 + }
4849 + }
4850 + isFirstUpdate = false;
4851 + }
4852 + try {
4853 + io = new IntersectionObserver(handleObserve, {
4854 + ...options,
4855 + // Handle <iframe>s
4856 + root: root.ownerDocument
4857 + });
4858 + } catch (_e) {
4859 + io = new IntersectionObserver(handleObserve, options);
4860 + }
4861 + io.observe(element);
4862 + }
4863 + const win = getWindow(element);
4864 + const handleResize = () => refresh(ancestorResize);
4865 + win.addEventListener("resize", handleResize);
4866 + refresh(true);
4867 + return () => {
4868 + win.removeEventListener("resize", handleResize);
4869 + cleanup();
4870 + };
4871 + }
4872 + function autoUpdate(reference, floating, update2, options) {
4873 + if (options === void 0) {
4874 + options = {};
4875 + }
4876 + const {
4877 + ancestorScroll = true,
4878 + ancestorResize = true,
4879 + elementResize = typeof ResizeObserver === "function",
4880 + layoutShift = typeof IntersectionObserver === "function",
4881 + animationFrame = false
4882 + } = options;
4883 + const referenceEl = unwrapElement(reference);
4884 + const ancestors = ancestorScroll || ancestorResize ? [...referenceEl ? getOverflowAncestors(referenceEl) : [], ...floating ? getOverflowAncestors(floating) : []] : [];
4885 + ancestors.forEach((ancestor) => {
4886 + ancestorScroll && ancestor.addEventListener("scroll", update2);
4887 + ancestorResize && ancestor.addEventListener("resize", update2);
4888 + });
4889 + const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update2, ancestorResize) : null;
4890 + let reobserveFrame = -1;
4891 + let resizeObserver = null;
4892 + if (elementResize) {
4893 + resizeObserver = new ResizeObserver((_ref) => {
4894 + let [firstEntry] = _ref;
4895 + if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {
4896 + resizeObserver.unobserve(floating);
4897 + cancelAnimationFrame(reobserveFrame);
4898 + reobserveFrame = requestAnimationFrame(() => {
4899 + var _resizeObserver;
4900 + (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);
4901 + });
4902 + }
4903 + update2();
4904 + });
4905 + if (referenceEl && !animationFrame) {
4906 + resizeObserver.observe(referenceEl);
4907 + }
4908 + if (floating) {
4909 + resizeObserver.observe(floating);
4910 + }
4911 + }
4912 + let frameId;
4913 + let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;
4914 + if (animationFrame) {
4915 + frameLoop();
4916 + }
4917 + function frameLoop() {
4918 + const nextRefRect = getBoundingClientRect(reference);
4919 + if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {
4920 + update2();
4921 + }
4922 + prevRefRect = nextRefRect;
4923 + frameId = requestAnimationFrame(frameLoop);
4924 + }
4925 + update2();
4926 + return () => {
4927 + var _resizeObserver2;
4928 + ancestors.forEach((ancestor) => {
4929 + ancestorScroll && ancestor.removeEventListener("scroll", update2);
4930 + ancestorResize && ancestor.removeEventListener("resize", update2);
4931 + });
4932 + cleanupIo == null || cleanupIo();
4933 + (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();
4934 + resizeObserver = null;
4935 + if (animationFrame) {
4936 + cancelAnimationFrame(frameId);
4937 + }
4938 + };
4939 + }
4940 + var offset2 = offset;
4941 + var shift2 = shift;
4942 + var flip2 = flip;
4943 + var size2 = size;
4944 + var limitShift2 = limitShift;
4945 + var computePosition2 = (reference, floating, options) => {
4946 + const cache = /* @__PURE__ */ new Map();
4947 + const mergedOptions = options != null ? options : {};
4948 + const platformWithCache = {
4949 + ...platform2,
4950 + ...mergedOptions.platform,
4951 + _c: cache
4952 + };
4953 + return computePosition(reference, floating, {
4954 + ...mergedOptions,
4955 + platform: platformWithCache
4956 + });
4957 + };
4958 +
4959 + // node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs
4960 + var React17 = __toESM(require_react(), 1);
4961 + var import_react2 = __toESM(require_react(), 1);
4962 + var ReactDOM3 = __toESM(require_react_dom(), 1);
4963 + var isClient = typeof document !== "undefined";
4964 + var noop2 = function noop3() {
4965 + };
4966 + var index = isClient ? import_react2.useLayoutEffect : noop2;
4967 + function deepEqual(a, b) {
4968 + if (a === b) {
4969 + return true;
4970 + }
4971 + if (typeof a !== typeof b) {
4972 + return false;
4973 + }
4974 + if (typeof a === "function" && a.toString() === b.toString()) {
4975 + return true;
4976 + }
4977 + let length;
4978 + let i;
4979 + let keys;
4980 + if (a && b && typeof a === "object") {
4981 + if (Array.isArray(a)) {
4982 + length = a.length;
4983 + if (length !== b.length) return false;
4984 + for (i = length; i-- !== 0; ) {
4985 + if (!deepEqual(a[i], b[i])) {
4986 + return false;
4987 + }
4988 + }
4989 + return true;
4990 + }
4991 + keys = Object.keys(a);
4992 + length = keys.length;
4993 + if (length !== Object.keys(b).length) {
4994 + return false;
4995 + }
4996 + for (i = length; i-- !== 0; ) {
4997 + if (!{}.hasOwnProperty.call(b, keys[i])) {
4998 + return false;
4999 + }
5000 + }
5001 + for (i = length; i-- !== 0; ) {
5002 + const key = keys[i];
5003 + if (key === "_owner" && a.$$typeof) {
5004 + continue;
5005 + }
5006 + if (!deepEqual(a[key], b[key])) {
5007 + return false;
5008 + }
5009 + }
5010 + return true;
5011 + }
5012 + return a !== a && b !== b;
5013 + }
5014 + function getDPR(element) {
5015 + if (typeof window === "undefined") {
5016 + return 1;
5017 + }
5018 + const win = element.ownerDocument.defaultView || window;
5019 + return win.devicePixelRatio || 1;
5020 + }
5021 + function roundByDPR(element, value) {
5022 + const dpr = getDPR(element);
5023 + return Math.round(value * dpr) / dpr;
5024 + }
5025 + function useLatestRef(value) {
5026 + const ref = React17.useRef(value);
5027 + index(() => {
5028 + ref.current = value;
5029 + });
5030 + return ref;
5031 + }
5032 + function useFloating(options) {
5033 + if (options === void 0) {
5034 + options = {};
5035 + }
5036 + const {
5037 + placement = "bottom",
5038 + strategy = "absolute",
5039 + middleware = [],
5040 + platform: platform3,
5041 + elements: {
5042 + reference: externalReference,
5043 + floating: externalFloating
5044 + } = {},
5045 + transform = true,
5046 + whileElementsMounted,
5047 + open: open2
5048 + } = options;
5049 + const [data, setData] = React17.useState({
5050 + x: 0,
5051 + y: 0,
5052 + strategy,
5053 + placement,
5054 + middlewareData: {},
5055 + isPositioned: false
5056 + });
5057 + const [latestMiddleware, setLatestMiddleware] = React17.useState(middleware);
5058 + if (!deepEqual(latestMiddleware, middleware)) {
5059 + setLatestMiddleware(middleware);
5060 + }
5061 + const [_reference, _setReference] = React17.useState(null);
5062 + const [_floating, _setFloating] = React17.useState(null);
5063 + const setReference = React17.useCallback((node) => {
5064 + if (node !== referenceRef.current) {
5065 + referenceRef.current = node;
5066 + _setReference(node);
5067 + }
5068 + }, []);
5069 + const setFloating = React17.useCallback((node) => {
5070 + if (node !== floatingRef.current) {
5071 + floatingRef.current = node;
5072 + _setFloating(node);
5073 + }
5074 + }, []);
5075 + const referenceEl = externalReference || _reference;
5076 + const floatingEl = externalFloating || _floating;
5077 + const referenceRef = React17.useRef(null);
5078 + const floatingRef = React17.useRef(null);
5079 + const dataRef = React17.useRef(data);
5080 + const hasWhileElementsMounted = whileElementsMounted != null;
5081 + const whileElementsMountedRef = useLatestRef(whileElementsMounted);
5082 + const platformRef = useLatestRef(platform3);
5083 + const openRef = useLatestRef(open2);
5084 + const update2 = React17.useCallback(() => {
5085 + if (!referenceRef.current || !floatingRef.current) {
5086 + return;
5087 + }
5088 + const config = {
5089 + placement,
5090 + strategy,
5091 + middleware: latestMiddleware
5092 + };
5093 + if (platformRef.current) {
5094 + config.platform = platformRef.current;
5095 + }
5096 + computePosition2(referenceRef.current, floatingRef.current, config).then((data2) => {
5097 + const fullData = {
5098 + ...data2,
5099 + // The floating element's position may be recomputed while it's closed
5100 + // but still mounted (such as when transitioning out). To ensure
5101 + // `isPositioned` will be `false` initially on the next open, avoid
5102 + // setting it to `true` when `open === false` (must be specified).
5103 + isPositioned: openRef.current !== false
5104 + };
5105 + if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {
5106 + dataRef.current = fullData;
5107 + ReactDOM3.flushSync(() => {
5108 + setData(fullData);
5109 + });
5110 + }
5111 + });
5112 + }, [latestMiddleware, placement, strategy, platformRef, openRef]);
5113 + index(() => {
5114 + if (open2 === false && dataRef.current.isPositioned) {
5115 + dataRef.current.isPositioned = false;
5116 + setData((data2) => ({
5117 + ...data2,
5118 + isPositioned: false
5119 + }));
5120 + }
5121 + }, [open2]);
5122 + const isMountedRef = React17.useRef(false);
5123 + index(() => {
5124 + isMountedRef.current = true;
5125 + return () => {
5126 + isMountedRef.current = false;
5127 + };
5128 + }, []);
5129 + index(() => {
5130 + if (referenceEl) referenceRef.current = referenceEl;
5131 + if (floatingEl) floatingRef.current = floatingEl;
5132 + if (referenceEl && floatingEl) {
5133 + if (whileElementsMountedRef.current) {
5134 + return whileElementsMountedRef.current(referenceEl, floatingEl, update2);
5135 + }
5136 + update2();
5137 + }
5138 + }, [referenceEl, floatingEl, update2, whileElementsMountedRef, hasWhileElementsMounted]);
5139 + const refs = React17.useMemo(() => ({
5140 + reference: referenceRef,
5141 + floating: floatingRef,
5142 + setReference,
5143 + setFloating
5144 + }), [setReference, setFloating]);
5145 + const elements = React17.useMemo(() => ({
5146 + reference: referenceEl,
5147 + floating: floatingEl
5148 + }), [referenceEl, floatingEl]);
5149 + const floatingStyles = React17.useMemo(() => {
5150 + const initialStyles = {
5151 + position: strategy,
5152 + left: 0,
5153 + top: 0
5154 + };
5155 + if (!elements.floating) {
5156 + return initialStyles;
5157 + }
5158 + const x = roundByDPR(elements.floating, data.x);
5159 + const y = roundByDPR(elements.floating, data.y);
5160 + if (transform) {
5161 + return {
5162 + ...initialStyles,
5163 + transform: "translate(" + x + "px, " + y + "px)",
5164 + ...getDPR(elements.floating) >= 1.5 && {
5165 + willChange: "transform"
5166 + }
5167 + };
5168 + }
5169 + return {
5170 + position: strategy,
5171 + left: x,
5172 + top: y
5173 + };
5174 + }, [strategy, transform, elements.floating, data.x, data.y]);
5175 + return React17.useMemo(() => ({
5176 + ...data,
5177 + update: update2,
5178 + refs,
5179 + elements,
5180 + floatingStyles
5181 + }), [data, update2, refs, elements, floatingStyles]);
5182 + }
5183 + var offset3 = (options, deps) => {
5184 + const result = offset2(options);
5185 + return {
5186 + name: result.name,
5187 + fn: result.fn,
5188 + options: [options, deps]
5189 + };
5190 + };
5191 + var shift3 = (options, deps) => {
5192 + const result = shift2(options);
5193 + return {
5194 + name: result.name,
5195 + fn: result.fn,
5196 + options: [options, deps]
5197 + };
5198 + };
5199 + var limitShift3 = (options, deps) => {
5200 + const result = limitShift2(options);
5201 + return {
5202 + fn: result.fn,
5203 + options: [options, deps]
5204 + };
5205 + };
5206 + var flip3 = (options, deps) => {
5207 + const result = flip2(options);
5208 + return {
5209 + name: result.name,
5210 + fn: result.fn,
5211 + options: [options, deps]
5212 + };
5213 + };
5214 + var size3 = (options, deps) => {
5215 + const result = size2(options);
5216 + return {
5217 + name: result.name,
5218 + fn: result.fn,
5219 + options: [options, deps]
5220 + };
5221 + };
5222 +
5223 + // node_modules/@base-ui/react/utils/popups/popupHandle.mjs
5224 + var BasePopupHandle = class {
5225 + /**
5226 + * Stores of every root currently using this handle, in attach order. A handle is meant to be used
5227 + * by a single mounted root, but roots can transiently overlap (e.g. during an animated route
5228 + * transition), so this stack lets `attachStore`'s cleanup restore the previous root instead of
5229 + * leaving a still-mounted root uncontrollable when a newer overlapping root detaches first.
5230 + */
5231 + attachedStores = [];
5232 + /**
5233 + * Store of the root that currently controls the handle: the most recently attached one still
5234 + * mounted, or `null` when no root is attached. Imperative methods are no-ops while this is `null`.
5235 + */
5236 + attachedStoreValue = null;
5237 + /**
5238 + * Listeners notified when `attachedStore` changes, so detached triggers can follow the store pointer.
5239 + */
5240 + storeListeners = /* @__PURE__ */ new Set();
5241 + /**
5242 + * Creates a handle backed by the store used while no root is attached.
5243 + *
5244 + * @param fallbackStore Inert, closed store handed to detached triggers while no root is attached,
5245 + * so they can render and register without a mounted root. Triggers register into whichever store
5246 + * `store` currently resolves to, so while detached they live in this store's trigger map and
5247 + * migrate themselves to the root's store (and back) as it attaches/detaches.
5248 + * @param componentName Component name used to prefix dev warnings, e.g. `'Menu'` produces
5249 + * `MenuHandle.open()` in warning text.
5250 + * @param throwOnMissingTrigger Whether `open(triggerId)` throws when no trigger with that id is
5251 + * registered. Anchored popups (Menu, Popover, Tooltip, PreviewCard) need a trigger to anchor to,
5252 + * so they throw; Dialog is not anchored and instead opens unassociated with a dev warning.
5253 + */
5254 + constructor(fallbackStore, componentName, throwOnMissingTrigger = true) {
5255 + this.fallbackStore = fallbackStore;
5256 + this.componentName = componentName;
5257 + this.throwOnMissingTrigger = throwOnMissingTrigger;
5258 + }
5259 + get attachedStore() {
5260 + return this.attachedStoreValue;
5261 + }
5262 + /**
5263 + * Store that detached triggers read from: the attached root's store, or an inert fallback store
5264 + * used while no root is attached.
5265 + * @internal
5266 + */
5267 + get store() {
5268 + return this.attachedStoreValue ?? this.fallbackStore;
5269 + }
5270 + /**
5271 + * Stable fallback store used for server rendering and hydration. Root stores cannot be recorded on
5272 + * the handle during render because a handle can be shared by concurrent server-rendered requests.
5273 + * @internal
5274 + */
5275 + get serverStore() {
5276 + return this.fallbackStore;
5277 + }
5278 + /**
5279 + * Subscribes to changes of the attached store pointer so detached triggers re-render and re-bind
5280 + * when a root attaches or detaches. Returns a function that removes the listener.
5281 + * @internal
5282 + */
5283 + subscribeStore(listener) {
5284 + this.storeListeners.add(listener);
5285 + return () => {
5286 + this.storeListeners.delete(listener);
5287 + };
5288 + }
5289 + /**
5290 + * Points the handle at a root's store and notifies subscribers so detached triggers re-render and
5291 + * re-register into it (their registration effect migrates them when the store pointer changes).
5292 + * Returns a cleanup function that detaches the store again.
5293 + * @internal
5294 + */
5295 + attachStore(newStore) {
5296 + this.attachedStores.push(newStore);
5297 + this.setActiveStore(newStore);
5298 + if (true) {
5299 + if (this.attachedStores.length > 1) {
5300 + const dev = this;
5301 + (dev.overlapWarningFrame ??= AnimationFrame.create()).request(() => {
5302 + if (this.attachedStores.length > 1) {
5303 + 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.");
5304 + }
5305 + });
5306 + }
5307 + }
5308 + return () => {
5309 + const index2 = this.attachedStores.lastIndexOf(newStore);
5310 + if (index2 !== -1) {
5311 + this.attachedStores.splice(index2, 1);
5312 + }
5313 + this.setActiveStore(this.attachedStores[this.attachedStores.length - 1] ?? null);
5314 + };
5315 + }
5316 + /**
5317 + * Sets the store that currently controls the handle and notifies subscribers when it changes, so
5318 + * detached triggers re-render and migrate their registration to the new store.
5319 + */
5320 + setActiveStore(store2) {
5321 + if (this.attachedStoreValue !== store2) {
5322 + this.attachedStoreValue = store2;
5323 + this.storeListeners.forEach((listener) => {
5324 + listener();
5325 + });
5326 + }
5327 + }
5328 + /**
5329 + * Opens the attached root's store and associates it with the trigger with the given id, or a
5330 + * no-op (with a dev warning) while no root is attached. Shared by every concrete handle's public
5331 + * `open()` method, which only narrows the parameter type.
5332 + *
5333 + * When a trigger id is given but no matching trigger is registered, anchored popups throw (see
5334 + * `throwOnMissingTrigger`); Dialog opens unassociated with a dev warning instead.
5335 + *
5336 + * This method should only be called in an event handler or an effect (not during rendering).
5337 + *
5338 + * @param triggerId ID of the trigger to associate with the popup, or `null`/`undefined` to open
5339 + * without associating any trigger.
5340 + */
5341 + openByTrigger(triggerId) {
5342 + const attachedStore = this.attachedStore;
5343 + if (attachedStore === null) {
5344 + if (true) {
5345 + 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.`);
5346 + }
5347 + return;
5348 + }
5349 + let triggerElement;
5350 + if (triggerId) {
5351 + for (let i = this.attachedStores.length - 1; i >= 0 && !triggerElement; i -= 1) {
5352 + triggerElement = this.attachedStores[i].context.triggerElements.getById(triggerId);
5353 + }
5354 + triggerElement ??= this.fallbackStore.context.triggerElements.getById(triggerId);
5355 + }
5356 + if (triggerId && !triggerElement) {
5357 + if (this.throwOnMissingTrigger) {
5358 + 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));
5359 + }
5360 + if (true) {
5361 + 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.`);
5362 + }
5363 + }
5364 + attachedStore.setOpen(true, createChangeEventDetails(reason_parts_exports.imperativeAction, void 0, triggerElement));
5365 + }
5366 + /**
5367 + * Closes the popup by setting the attached root's store to closed, or a no-op (with a dev warning)
5368 + * while no root is attached. Shared by every concrete handle's public `close()` method.
5369 + *
5370 + * This method should only be called in an event handler or an effect (not during rendering).
5371 + */
5372 + closePopup() {
5373 + const attachedStore = this.attachedStore;
5374 + if (attachedStore === null) {
5375 + if (true) {
5376 + console.warn(`Base UI: ${this.componentName}Handle.close() was called while no root using this handle is mounted. The call was ignored.`);
5377 + }
5378 + return;
5379 + }
5380 + attachedStore.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction));
5381 + }
5382 + };
5383 +
5384 + // node_modules/@base-ui/react/utils/popups/popupStoreUtils.mjs
5385 + var React22 = __toESM(require_react(), 1);
5386 + var ReactDOM4 = __toESM(require_react_dom(), 1);
5387 +
5388 + // node_modules/@base-ui/react/floating-ui-react/hooks/useSyncedFloatingRootContext.mjs
5389 + var React21 = __toESM(require_react(), 1);
5390 +
5391 + // node_modules/@base-ui/utils/store/useStore.mjs
5392 + var React19 = __toESM(require_react(), 1);
5393 + var import_shim = __toESM(require_shim(), 1);
5394 + var import_with_selector = __toESM(require_with_selector(), 1);
5395 +
5396 + // node_modules/@base-ui/utils/fastHooks.mjs
5397 + var React18 = __toESM(require_react(), 1);
5398 + var hooks = [];
5399 + var currentInstance = void 0;
5400 + function getInstance() {
5401 + return currentInstance;
5402 + }
5403 + function register2(hook) {
5404 + hooks.push(hook);
5405 + }
5406 + function fastComponent(fn) {
5407 + const FastComponent = (props, forwardedRef) => {
5408 + const instance = useRefWithInit(createInstance).current;
5409 + let result;
5410 + try {
5411 + currentInstance = instance;
5412 + for (const hook of hooks) {
5413 + hook.before(instance);
5414 + }
5415 + result = fn(props, forwardedRef);
5416 + for (const hook of hooks) {
5417 + hook.after(instance);
5418 + }
5419 + instance.didInitialize = true;
5420 + } finally {
5421 + currentInstance = void 0;
5422 + }
5423 + return result;
5424 + };
5425 + FastComponent.displayName = fn.displayName || fn.name;
5426 + return FastComponent;
5427 + }
5428 + function fastComponentRef(fn) {
5429 + return /* @__PURE__ */ React18.forwardRef(fastComponent(fn));
5430 + }
5431 + function createInstance() {
5432 + return {
5433 + didInitialize: false
5434 + };
5435 + }
5436 +
5437 + // node_modules/@base-ui/utils/store/useStore.mjs
5438 + var canUseRawUseSyncExternalStore = isReactVersionAtLeast(19);
5439 + var useStoreImplementation = canUseRawUseSyncExternalStore ? useStoreFast : useStoreLegacy;
5440 + function useStore(store2, selector, a1, a2, a3) {
5441 + return useStoreImplementation(store2, selector, a1, a2, a3);
5442 + }
5443 + function useStoreR19(store2, selector, a1, a2, a3) {
5444 + const getSelection = React19.useCallback(() => selector(store2.getSnapshot(), a1, a2, a3), [store2, selector, a1, a2, a3]);
5445 + return (0, import_shim.useSyncExternalStore)(store2.subscribe, getSelection, getSelection);
5446 + }
5447 + register2({
5448 + before(instance) {
5449 + instance.syncIndex = 0;
5450 + if (!instance.didInitialize) {
5451 + instance.syncTick = 1;
5452 + instance.syncHooks = [];
5453 + instance.didChangeStore = true;
5454 + instance.getSnapshot = () => {
5455 + let didChange2 = false;
5456 + for (let i = 0; i < instance.syncHooks.length; i += 1) {
5457 + const hook = instance.syncHooks[i];
5458 + const value = hook.selector(hook.store.state, hook.a1, hook.a2, hook.a3);
5459 + if (!Object.is(hook.value, value)) {
5460 + didChange2 = true;
5461 + hook.value = value;
5462 + }
5463 + }
5464 + if (didChange2) {
5465 + instance.syncTick += 1;
5466 + }
5467 + return instance.syncTick;
5468 + };
5469 + }
5470 + },
5471 + after(instance) {
5472 + if (instance.syncHooks.length > 0) {
5473 + if (instance.didChangeStore) {
5474 + instance.didChangeStore = false;
5475 + instance.subscribe = (onStoreChange) => {
5476 + const stores = /* @__PURE__ */ new Set();
5477 + for (const hook of instance.syncHooks) {
5478 + stores.add(hook.store);
5479 + }
5480 + const unsubscribes = [];
5481 + for (const store2 of stores) {
5482 + unsubscribes.push(store2.subscribe(onStoreChange));
5483 + }
5484 + return () => {
5485 + for (const unsubscribe of unsubscribes) {
5486 + unsubscribe();
5487 + }
5488 + };
5489 + };
5490 + }
5491 + (0, import_shim.useSyncExternalStore)(instance.subscribe, instance.getSnapshot, instance.getSnapshot);
5492 + }
5493 + }
5494 + });
5495 + function useStoreFast(store2, selector, a1, a2, a3) {
5496 + const instance = getInstance();
5497 + if (!instance) {
5498 + return useStoreR19(store2, selector, a1, a2, a3);
5499 + }
5500 + const index2 = instance.syncIndex;
5501 + instance.syncIndex += 1;
5502 + let hook;
5503 + if (!instance.didInitialize) {
5504 + hook = {
5505 + store: store2,
5506 + selector,
5507 + a1,
5508 + a2,
5509 + a3,
5510 + value: selector(store2.getSnapshot(), a1, a2, a3)
5511 + };
5512 + instance.syncHooks.push(hook);
5513 + } else {
5514 + hook = instance.syncHooks[index2];
5515 + if (hook.store !== store2 || hook.selector !== selector || !Object.is(hook.a1, a1) || !Object.is(hook.a2, a2) || !Object.is(hook.a3, a3)) {
5516 + if (hook.store !== store2) {
5517 + instance.didChangeStore = true;
5518 + }
5519 + hook.store = store2;
5520 + hook.selector = selector;
5521 + hook.a1 = a1;
5522 + hook.a2 = a2;
5523 + hook.a3 = a3;
5524 + hook.value = selector(store2.getSnapshot(), a1, a2, a3);
5525 + }
5526 + }
5527 + return hook.value;
5528 + }
5529 + function useStoreLegacy(store2, selector, a1, a2, a3) {
5530 + return (0, import_with_selector.useSyncExternalStoreWithSelector)(store2.subscribe, store2.getSnapshot, store2.getSnapshot, (state) => selector(state, a1, a2, a3));
5531 + }
5532 +
5533 + // node_modules/@base-ui/utils/store/Store.mjs
5534 + var Store = class {
5535 + /**
5536 + * Creates a store with the given initial state, constructing the class it is called on.
5537 + * Calling it on a generic base class (e.g. `ReactStore.create(...)`) constructs that
5538 + * class but degrades the inferred instance type to `Store`; use `new` there instead.
5539 + */
5540 + static create(state) {
5541 + return new this(state);
5542 + }
5543 + /**
5544 + * The current state of the store.
5545 + * This property is updated immediately when the state changes as a result of calling {@link setState}, {@link update}, or {@link set}.
5546 + * 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).
5547 + * The values can be used directly (to avoid subscribing to the store) in effects or event handlers.
5548 + *
5549 + * Do not modify properties in state directly. Instead, use the provided methods to ensure proper state management and listener notification.
5550 + */
5551 + // Internal state to handle recursive `setState()` calls
5552 + constructor(state) {
5553 + this.state = state;
5554 + this.listeners = /* @__PURE__ */ new Set();
5555 + this.updateTick = 0;
5556 + }
5557 + /**
5558 + * Registers a listener that will be called whenever the store's state changes.
5559 + *
5560 + * @param fn The listener function to be called on state changes.
5561 + * @returns A function to unsubscribe the listener.
5562 + */
5563 + subscribe = (fn) => {
5564 + this.listeners.add(fn);
5565 + return () => {
5566 + this.listeners.delete(fn);
5567 + };
5568 + };
5569 + /**
5570 + * Returns the current state of the store.
5571 + */
5572 + getSnapshot = () => {
5573 + return this.state;
5574 + };
5575 + /**
5576 + * Updates the entire store's state and notifies all registered listeners.
5577 + *
5578 + * @param newState The new state to set for the store.
5579 + */
5580 + setState(newState) {
5581 + if (this.state === newState) {
5582 + return;
5583 + }
5584 + this.state = newState;
5585 + this.updateTick += 1;
5586 + const currentTick = this.updateTick;
5587 + for (const listener of this.listeners) {
5588 + if (currentTick !== this.updateTick) {
5589 + return;
5590 + }
5591 + listener(newState);
5592 + }
5593 + }
5594 + /**
5595 + * Merges the provided changes into the current state and notifies listeners if there are changes.
5596 + * Each value must match its state key. Pass an exact known subset rather than a broad
5597 + * `Partial<State>`, which may contain `undefined` for required state fields.
5598 + *
5599 + * @param changes An object containing the changes to apply to the current state.
5600 + */
5601 + update(changes) {
5602 + for (const key in changes) {
5603 + if (!Object.is(this.state[key], changes[key])) {
5604 + this.setState({
5605 + ...this.state,
5606 + ...changes
5607 + });
5608 + return;
5609 + }
5610 + }
5611 + }
5612 + /**
5613 + * Sets a specific key in the store's state to a new value and notifies listeners if the value has changed.
5614 + *
5615 + * @param key The key in the store's state to update.
5616 + * @param value The new value to set for the specified key.
5617 + */
5618 + set(key, value) {
5619 + if (!Object.is(this.state[key], value)) {
5620 + this.setState({
5621 + ...this.state,
5622 + [key]: value
5623 + });
5624 + }
5625 + }
5626 + /**
5627 + * Gives the state a new reference and updates all registered listeners.
5628 + */
5629 + notifyAll() {
5630 + const newState = {
5631 + ...this.state
5632 + };
5633 + this.setState(newState);
5634 + }
5635 + use(selector, a1, a2, a3) {
5636 + return useStore(this, selector, a1, a2, a3);
5637 + }
5638 + };
5639 +
5640 + // node_modules/@base-ui/utils/store/ReactStore.mjs
5641 + var React20 = __toESM(require_react(), 1);
5642 + var ReactStore = class extends Store {
5643 + /**
5644 + * Creates a new ReactStore instance.
5645 + *
5646 + * @param state Initial state of the store.
5647 + * @param context Non-reactive context values.
5648 + * @param selectors Optional selectors for use with `useState`.
5649 + */
5650 + constructor(state, context = {}, selectors3) {
5651 + super(state);
5652 + this.context = context;
5653 + this.selectors = selectors3;
5654 + }
5655 + /**
5656 + * Non-reactive values such as refs, callbacks, etc.
5657 + */
5658 + /**
5659 + * Synchronizes a single external value into the store.
5660 + *
5661 + * Note that the while the value in `state` is updated immediately, the value returned
5662 + * by `useState` is updated before the next render (similarly to React's `useState`).
5663 + */
5664 + useSyncedValue(key, value) {
5665 + React20.useDebugValue(key);
5666 + const store2 = this;
5667 + useIsoLayoutEffect(() => {
5668 + if (store2.state[key] !== value) {
5669 + store2.set(key, value);
5670 + }
5671 + }, [store2, key, value]);
5672 + }
5673 + /**
5674 + * Synchronizes a single external value into the store and
5675 + * cleans it up (sets to `undefined`) on unmount.
5676 + *
5677 + * Note that the while the value in `state` is updated immediately, the value returned
5678 + * by `useState` is updated before the next render (similarly to React's `useState`).
5679 + */
5680 + useSyncedValueWithCleanup(key, value) {
5681 + const store2 = this;
5682 + useIsoLayoutEffect(() => {
5683 + if (store2.state[key] !== value) {
5684 + store2.set(key, value);
5685 + }
5686 + return () => {
5687 + store2.set(key, void 0);
5688 + };
5689 + }, [store2, key, value]);
5690 + }
5691 + /**
5692 + * Synchronizes multiple external values into the store.
5693 + * Each value must match its state key. Pass an exact known subset rather than a broad
5694 + * `Partial<State>`, which may contain `undefined` for required state fields.
5695 + *
5696 + * Note that the while the values in `state` are updated immediately, the values returned
5697 + * by `useState` are updated before the next render (similarly to React's `useState`).
5698 + *
5699 + * @param statePart An exact subset of state fields to synchronize. Unknown keys are not accepted.
5700 + */
5701 + useSyncedValues(statePart) {
5702 + const store2 = this;
5703 + if (true) {
5704 + React20.useDebugValue(statePart, (p) => Object.keys(p));
5705 + const keys = React20.useRef(Object.keys(statePart)).current;
5706 + const nextKeys = Object.keys(statePart);
5707 + if (keys.length !== nextKeys.length || keys.some((key, index2) => key !== nextKeys[index2])) {
5708 + console.error("ReactStore.useSyncedValues expects the same prop keys on every render. Keys should be stable.");
5709 + }
5710 + }
5711 + const dependencies = Object.values(statePart);
5712 + useIsoLayoutEffect(() => {
5713 + store2.update(statePart);
5714 + }, [store2, ...dependencies]);
5715 + }
5716 + /**
5717 + * Registers a controllable prop pair (`controlled`, `defaultValue`) for a specific key. If `controlled`
5718 + * is non-undefined, the store's state at `key` is updated to match `controlled`.
5719 + */
5720 + useControlledProp(key, controlled) {
5721 + React20.useDebugValue(key);
5722 + const store2 = this;
5723 + const isControlled = controlled !== void 0;
5724 + useIsoLayoutEffect(() => {
5725 + if (isControlled && !Object.is(store2.state[key], controlled)) {
5726 + store2.setState({
5727 + ...store2.state,
5728 + [key]: controlled
5729 + });
5730 + }
5731 + }, [store2, key, controlled, isControlled]);
5732 + if (true) {
5733 + const cache = this.controlledValues ??= /* @__PURE__ */ new Map();
5734 + if (!cache.has(key)) {
5735 + cache.set(key, isControlled);
5736 + }
5737 + const previouslyControlled = cache.get(key);
5738 + if (previouslyControlled !== void 0 && previouslyControlled !== isControlled) {
5739 + 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).`);
5740 + }
5741 + }
5742 + }
5743 + /** Gets the current value from the store using a selector with the provided key.
5744 + *
5745 + * @param key Key of the selector to use.
5746 + */
5747 + select(key, a1, a2, a3) {
5748 + const selector = this.selectors[key];
5749 + return selector(this.state, a1, a2, a3);
5750 + }
5751 + /**
5752 + * Returns a value from the store's state using a selector function.
5753 + * Used to subscribe to specific parts of the state.
5754 + * This methods causes a rerender whenever the selected state changes.
5755 + *
5756 + * @param key Key of the selector to use.
5757 + */
5758 + useState(key, a1, a2, a3) {
5759 + React20.useDebugValue(key);
5760 + return useStore(this, this.selectors[key], a1, a2, a3);
5761 + }
5762 + /**
5763 + * Wraps a function with `useStableCallback` to ensure it has a stable reference
5764 + * and assigns it to the context.
5765 + *
5766 + * @param key Key of the event callback. Must be a function in the context.
5767 + * @param fn Function to assign.
5768 + */
5769 + useContextCallback(key, fn) {
5770 + React20.useDebugValue(key);
5771 + const stableFunction = useStableCallback(fn ?? NOOP);
5772 + this.context[key] = stableFunction;
5773 + }
5774 + /**
5775 + * Returns a stable setter function for a specific key in the store's state.
5776 + * It's commonly used to pass as a ref callback to React elements.
5777 + *
5778 + * @param key Key of the state to set.
5779 + */
5780 + useStateSetter(key) {
5781 + const ref = React20.useRef(void 0);
5782 + if (ref.current === void 0) {
5783 + ref.current = (value) => {
5784 + this.set(key, value);
5785 + };
5786 + }
5787 + return ref.current;
5788 + }
5789 + /**
5790 + * Observes changes derived from the store's selectors and calls the listener when the selected value changes.
5791 + *
5792 + * @param key Key of the selector to observe.
5793 + * @param listener Listener function called when the selector result changes.
5794 + */
5795 + observe(selector, listener) {
5796 + let selectFn;
5797 + if (typeof selector === "function") {
5798 + selectFn = selector;
5799 + } else {
5800 + selectFn = this.selectors[selector];
5801 + }
5802 + let prevValue = selectFn(this.state);
5803 + listener(prevValue, prevValue, this);
5804 + return this.subscribe((nextState) => {
5805 + const nextValue = selectFn(nextState);
5806 + if (!Object.is(prevValue, nextValue)) {
5807 + const oldValue = prevValue;
5808 + prevValue = nextValue;
5809 + listener(nextValue, oldValue, this);
5810 + }
5811 + });
5812 + }
5813 + };
5814 +
5815 + // node_modules/@base-ui/react/floating-ui-react/components/FloatingRootStore.mjs
5816 + var selectors = {
5817 + open: (state) => state.open,
5818 + transitionStatus: (state) => state.transitionStatus,
5819 + domReferenceElement: (state) => state.domReferenceElement,
5820 + referenceElement: (state) => state.positionReference ?? state.referenceElement,
5821 + floatingElement: (state) => state.floatingElement,
5822 + floatingId: (state) => state.floatingId
5823 + };
5824 + var FloatingRootStore = class extends ReactStore {
5825 + constructor(options) {
5826 + const {
5827 + syncOnly,
5828 + nested,
5829 + onOpenChange,
5830 + triggerElements,
5831 + ...initialState
5832 + } = options;
5833 + super({
5834 + ...initialState,
5835 + positionReference: initialState.referenceElement,
5836 + domReferenceElement: initialState.referenceElement
5837 + }, {
5838 + onOpenChange,
5839 + dataRef: {
5840 + current: {}
5841 + },
5842 + events: createEventEmitter(),
5843 + nested,
5844 + triggerElements
5845 + }, selectors);
5846 + this.syncOnly = syncOnly;
5847 + }
5848 + /**
5849 + * Syncs the event used by hover logic to distinguish hover-open from click-like interaction.
5850 + */
5851 + syncOpenEvent = (newOpen, event) => {
5852 + if (!newOpen || !this.state.open || // Prevent a pending hover-open from overwriting a click-open event, while allowing
5853 + // click events to upgrade a hover-open.
5854 + event != null && isClickLikeEvent(event)) {
5855 + this.context.dataRef.current.openEvent = newOpen ? event : void 0;
5856 + }
5857 + };
5858 + /**
5859 + * Runs the root-owned side effects for an open state change.
5860 + */
5861 + dispatchOpenChange = (newOpen, eventDetails) => {
5862 + this.syncOpenEvent(newOpen, eventDetails.event);
5863 + const details = {
5864 + open: newOpen,
5865 + reason: eventDetails.reason,
5866 + nativeEvent: eventDetails.event,
5867 + nested: this.context.nested,
5868 + triggerElement: eventDetails.trigger
5869 + };
5870 + this.context.events.emit("openchange", details);
5871 + };
5872 + /**
5873 + * Emits the `openchange` event through the internal event emitter and calls the `onOpenChange` handler with the provided arguments.
5874 + *
5875 + * @param newOpen The new open state.
5876 + * @param eventDetails Details about the event that triggered the open state change.
5877 + */
5878 + setOpen = (newOpen, eventDetails) => {
5879 + if (this.syncOnly) {
5880 + this.context.onOpenChange?.(newOpen, eventDetails);
5881 + return;
5882 + }
5883 + this.dispatchOpenChange(newOpen, eventDetails);
5884 + this.context.onOpenChange?.(newOpen, eventDetails);
5885 + };
5886 + };
5887 +
5888 + // node_modules/@base-ui/react/floating-ui-react/hooks/useSyncedFloatingRootContext.mjs
5889 + function useSyncedFloatingRootContext(options) {
5890 + const {
5891 + popupStore,
5892 + treatPopupAsFloatingElement = false,
5893 + floatingRootContext: floatingRootContextProp,
5894 + floatingId,
5895 + nested,
5896 + onOpenChange
5897 + } = options;
5898 + const open2 = popupStore.useState("open");
5899 + const referenceElement = popupStore.useState("activeTriggerElement");
5900 + const floatingElement = popupStore.useState(treatPopupAsFloatingElement ? "popupElement" : "positionerElement");
5901 + const triggerElements = popupStore.context.triggerElements;
5902 + const handleOpenChange = onOpenChange;
5903 + const internalStoreRef = React21.useRef(null);
5904 + if (floatingRootContextProp === void 0 && internalStoreRef.current === null) {
5905 + internalStoreRef.current = new FloatingRootStore({
5906 + open: open2,
5907 + transitionStatus: void 0,
5908 + referenceElement,
5909 + floatingElement,
5910 + triggerElements,
5911 + onOpenChange: handleOpenChange,
5912 + floatingId,
5913 + syncOnly: true,
5914 + nested
5915 + });
5916 + }
5917 + const store2 = floatingRootContextProp ?? internalStoreRef.current;
5918 + popupStore.useSyncedValue("floatingId", floatingId);
5919 + useIsoLayoutEffect(() => {
5920 + const valuesToSync = {
5921 + open: open2,
5922 + floatingId,
5923 + referenceElement,
5924 + floatingElement
5925 + };
5926 + if (isElement(referenceElement)) {
5927 + valuesToSync.domReferenceElement = referenceElement;
5928 + }
5929 + if (store2.state.positionReference === store2.state.referenceElement) {
5930 + valuesToSync.positionReference = referenceElement;
5931 + }
5932 + store2.update(valuesToSync);
5933 + }, [open2, floatingId, referenceElement, floatingElement, store2]);
5934 + store2.context.onOpenChange = handleOpenChange;
5935 + store2.context.nested = nested;
5936 + return store2;
5937 + }
5938 +
5939 + // node_modules/@base-ui/react/utils/popups/popupStoreUtils.mjs
5940 + var FOCUSABLE_POPUP_PROPS = {
5941 + tabIndex: -1,
5942 + [FOCUSABLE_ATTRIBUTE]: ""
5943 + };
5944 + function usePopupRootStore(createStore, treatPopupAsFloatingElement = false) {
5945 + const floatingId = useId();
5946 + const nested = useFloatingParentNodeId() != null;
5947 + const store2 = useRefWithInit(() => createStore(floatingId, nested)).current;
5948 + useSyncedFloatingRootContext({
5949 + popupStore: store2,
5950 + treatPopupAsFloatingElement,
5951 + floatingRootContext: store2.state.floatingRootContext,
5952 + floatingId,
5953 + nested,
5954 + onOpenChange: store2.setOpen
5955 + });
5956 + return store2;
5957 + }
5958 + function PopupHandleAttachment({
5959 + handle,
5960 + store: store2
5961 + }) {
5962 + useIsoLayoutEffect(() => {
5963 + return handle.attachStore(store2);
5964 + }, [handle, store2]);
5965 + return null;
5966 + }
5967 + function syncTriggerCount(store2) {
5968 + const triggerCount = store2.context.triggerElements.size;
5969 + if (store2.select("open") && store2.state.triggerCount !== triggerCount) {
5970 + store2.set("triggerCount", triggerCount);
5971 + }
5972 + }
5973 + function useTriggerRegistration(id, store2) {
5974 + const registrationRef = React22.useRef(null);
5975 + return useStableCallback((element) => {
5976 + const registration = registrationRef.current;
5977 + if (registration !== null) {
5978 + if (registration.element === element && registration.store === store2 && registration.id === id) {
5979 + return;
5980 + }
5981 + registrationRef.current = null;
5982 + const registeredStore = registration.store;
5983 + if (registeredStore.context.triggerElements.getById(registration.id) === registration.element) {
5984 + registeredStore.context.triggerElements.delete(registration.id);
5985 + syncTriggerCount(registeredStore);
5986 + }
5987 + }
5988 + if (element !== null && id !== void 0) {
5989 + registrationRef.current = {
5990 + store: store2,
5991 + id,
5992 + element
5993 + };
5994 + store2.context.triggerElements.add(id, element);
5995 + syncTriggerCount(store2);
5996 + }
5997 + });
5998 + }
5999 + function createPopupOpenState(state, open2, trigger, preventUnmountOnClose = false) {
6000 + let preventUnmountingOnClose = state.preventUnmountingOnClose;
6001 + if (open2) {
6002 + preventUnmountingOnClose = false;
6003 + } else if (preventUnmountOnClose) {
6004 + preventUnmountingOnClose = true;
6005 + }
6006 + const triggerId = trigger?.id ?? null;
6007 + let activeTriggerId = state.activeTriggerId;
6008 + let activeTriggerElement = state.activeTriggerElement;
6009 + if (triggerId || open2) {
6010 + activeTriggerId = triggerId;
6011 + activeTriggerElement = trigger ?? null;
6012 + }
6013 + return {
6014 + open: open2,
6015 + preventUnmountingOnClose,
6016 + activeTriggerId,
6017 + activeTriggerElement
6018 + };
6019 + }
6020 + function attachPreventUnmountOnClose(eventDetails) {
6021 + let preventUnmountOnClose = false;
6022 + eventDetails.preventUnmountOnClose = () => {
6023 + preventUnmountOnClose = true;
6024 + };
6025 + return () => preventUnmountOnClose;
6026 + }
6027 + function applyPopupOpenChange(store2, nextOpen, eventDetails, options = {}) {
6028 + const reason = eventDetails.reason;
6029 + const isHover = reason === reason_parts_exports.triggerHover;
6030 + const isFocusOpen = nextOpen && reason === reason_parts_exports.triggerFocus;
6031 + const isDismissClose = !nextOpen && (reason === reason_parts_exports.triggerPress || reason === reason_parts_exports.escapeKey);
6032 + const shouldPreventUnmountOnClose = attachPreventUnmountOnClose(eventDetails);
6033 + store2.context.onOpenChange?.(nextOpen, eventDetails);
6034 + if (eventDetails.isCanceled) {
6035 + return;
6036 + }
6037 + options.onBeforeDispatch?.();
6038 + store2.state.floatingRootContext.dispatchOpenChange(nextOpen, eventDetails);
6039 + const changeState = () => {
6040 + const popupOpenState = createPopupOpenState(store2.state, nextOpen, eventDetails.trigger, shouldPreventUnmountOnClose());
6041 + const updatedState = {
6042 + ...options.extraState,
6043 + ...popupOpenState
6044 + };
6045 + if (isFocusOpen) {
6046 + updatedState.instantType = "focus";
6047 + } else if (isDismissClose) {
6048 + updatedState.instantType = "dismiss";
6049 + } else if (isHover) {
6050 + updatedState.instantType = void 0;
6051 + }
6052 + store2.update(updatedState);
6053 + };
6054 + if (isHover) {
6055 + ReactDOM4.flushSync(changeState);
6056 + } else {
6057 + changeState();
6058 + }
6059 + }
6060 + function useTriggerDataForwarding(triggerId, triggerElementRef, store2, stateUpdates) {
6061 + const isMountedByThisTrigger = store2.useState("isMountedByTrigger", triggerId);
6062 + const baseRegisterTrigger = useTriggerRegistration(triggerId, store2);
6063 + const applyTriggerData = useStableCallback((element) => {
6064 + const open2 = store2.select("open");
6065 + const activeTriggerId = store2.select("activeTriggerId");
6066 + if (activeTriggerId === triggerId) {
6067 + const changes = {
6068 + activeTriggerElement: element,
6069 + ...open2 ? stateUpdates : null
6070 + };
6071 + store2.update(changes);
6072 + return;
6073 + }
6074 + if (activeTriggerId == null && open2) {
6075 + const changes = {
6076 + activeTriggerId: triggerId ?? null,
6077 + activeTriggerElement: element,
6078 + ...stateUpdates
6079 + };
6080 + store2.update(changes);
6081 + }
6082 + });
6083 + const registerTrigger = useStableCallback((element) => {
6084 + baseRegisterTrigger(element);
6085 + if (element) {
6086 + applyTriggerData(element);
6087 + }
6088 + });
6089 + useIsoLayoutEffect(() => {
6090 + registerTrigger(triggerElementRef.current);
6091 + return () => registerTrigger(null);
6092 + }, [registerTrigger, triggerElementRef, store2, triggerId]);
6093 + useIsoLayoutEffect(() => {
6094 + if (isMountedByThisTrigger) {
6095 + const changes = {
6096 + activeTriggerElement: triggerElementRef.current,
6097 + ...stateUpdates
6098 + };
6099 + store2.update(changes);
6100 + }
6101 + }, [isMountedByThisTrigger, store2, triggerElementRef, ...Object.values(stateUpdates)]);
6102 + return {
6103 + registerTrigger,
6104 + isMountedByThisTrigger
6105 + };
6106 + }
6107 + function useImplicitActiveTrigger(store2, options = {}) {
6108 + const {
6109 + closeOnActiveTriggerUnmount = false
6110 + } = options;
6111 + const resolvedActiveTriggerIdRef = React22.useRef(null);
6112 + const open2 = store2.useState("open");
6113 + const reactiveTriggerCount = store2.useState("triggerCount");
6114 + const activeTriggerId = store2.useState("activeTriggerId");
6115 + const reactiveActiveTriggerElement = store2.useState("activeTriggerElement");
6116 + useIsoLayoutEffect(() => {
6117 + if (!open2) {
6118 + resolvedActiveTriggerIdRef.current = null;
6119 + if (store2.state.triggerCount !== 0) {
6120 + store2.set("triggerCount", 0);
6121 + }
6122 + return;
6123 + }
6124 + const triggerCount = store2.context.triggerElements.size;
6125 + const stateUpdates = {};
6126 + if (store2.state.triggerCount !== triggerCount) {
6127 + stateUpdates.triggerCount = triggerCount;
6128 + }
6129 + const currentActiveTriggerId = store2.select("activeTriggerId");
6130 + let lostActiveTriggerId = null;
6131 + if (currentActiveTriggerId) {
6132 + const activeTriggerElement = store2.context.triggerElements.getById(currentActiveTriggerId);
6133 + if (!activeTriggerElement) {
6134 + for (const [triggerId, triggerElement] of store2.context.triggerElements.entries()) {
6135 + if (triggerElement === store2.state.activeTriggerElement) {
6136 + stateUpdates.activeTriggerId = triggerId;
6137 + stateUpdates.activeTriggerElement = triggerElement;
6138 + resolvedActiveTriggerIdRef.current = triggerId;
6139 + break;
6140 + }
6141 + }
6142 + if (stateUpdates.activeTriggerId === void 0) {
6143 + if (resolvedActiveTriggerIdRef.current === currentActiveTriggerId) {
6144 + lostActiveTriggerId = currentActiveTriggerId;
6145 + } else {
6146 + resolvedActiveTriggerIdRef.current = null;
6147 + }
6148 + }
6149 + } else {
6150 + resolvedActiveTriggerIdRef.current = currentActiveTriggerId;
6151 + if (activeTriggerElement !== store2.state.activeTriggerElement) {
6152 + stateUpdates.activeTriggerElement = activeTriggerElement;
6153 + }
6154 + }
6155 + } else {
6156 + resolvedActiveTriggerIdRef.current = null;
6157 + }
6158 + if (!lostActiveTriggerId && !currentActiveTriggerId && triggerCount === 1) {
6159 + const iteratorResult = store2.context.triggerElements.entries().next();
6160 + if (!iteratorResult.done) {
6161 + const [implicitTriggerId, implicitTriggerElement] = iteratorResult.value;
6162 + stateUpdates.activeTriggerId = implicitTriggerId;
6163 + stateUpdates.activeTriggerElement = implicitTriggerElement;
6164 + resolvedActiveTriggerIdRef.current = implicitTriggerId;
6165 + }
6166 + }
6167 + if (stateUpdates.triggerCount !== void 0 || stateUpdates.activeTriggerId !== void 0 || stateUpdates.activeTriggerElement !== void 0) {
6168 + store2.update(stateUpdates);
6169 + }
6170 + if (lostActiveTriggerId) {
6171 + if (closeOnActiveTriggerUnmount) {
6172 + queueMicrotask(() => {
6173 + if (store2.select("open") && store2.select("activeTriggerId") === lostActiveTriggerId && !store2.context.triggerElements.getById(lostActiveTriggerId)) {
6174 + const eventDetails = createChangeEventDetails(reason_parts_exports.none);
6175 + store2.setOpen(false, eventDetails);
6176 + if (!eventDetails.isCanceled) {
6177 + store2.update({
6178 + activeTriggerId: null,
6179 + activeTriggerElement: null
6180 + });
6181 + }
6182 + }
6183 + });
6184 + }
6185 + }
6186 + }, [open2, store2, reactiveTriggerCount, activeTriggerId, reactiveActiveTriggerElement, closeOnActiveTriggerUnmount]);
6187 + }
6188 + function useOpenStateTransitions(open2, store2, onUnmount, animateInitialOpen) {
6189 + const {
6190 + mounted,
6191 + setMounted,
6192 + transitionStatus
6193 + } = useTransitionStatus(open2, false, false, animateInitialOpen);
6194 + const preventUnmountingOnClose = store2.useState("preventUnmountingOnClose");
6195 + const syncedPreventUnmountingOnClose = open2 ? false : preventUnmountingOnClose;
6196 + store2.useSyncedValues({
6197 + mounted,
6198 + transitionStatus,
6199 + preventUnmountingOnClose: syncedPreventUnmountingOnClose
6200 + });
6201 + const forceUnmount = useStableCallback(() => {
6202 + setMounted(false);
6203 + store2.update({
6204 + activeTriggerId: null,
6205 + activeTriggerElement: null,
6206 + mounted: false,
6207 + preventUnmountingOnClose: false
6208 + });
6209 + onUnmount?.();
6210 + store2.context.onOpenChangeComplete?.(false);
6211 + });
6212 + useOpenChangeComplete({
6213 + enabled: mounted && !open2 && !syncedPreventUnmountingOnClose,
6214 + open: open2,
6215 + ref: store2.context.popupRef,
6216 + onComplete() {
6217 + if (!open2) {
6218 + forceUnmount();
6219 + }
6220 + }
6221 + });
6222 + return {
6223 + forceUnmount,
6224 + transitionStatus
6225 + };
6226 + }
6227 + function usePopupInteractionProps(store2, statePart) {
6228 + store2.useSyncedValues(statePart);
6229 + useIsoLayoutEffect(() => () => {
6230 + store2.update({
6231 + activeTriggerProps: EMPTY_OBJECT,
6232 + inactiveTriggerProps: EMPTY_OBJECT,
6233 + popupProps: EMPTY_OBJECT
6234 + });
6235 + }, [store2]);
6236 + }
6237 +
6238 + // node_modules/@base-ui/react/utils/popups/popupTriggerMap.mjs
6239 + var devElementIdsByMap;
6240 + function getDevElementIds(map) {
6241 + devElementIdsByMap ??= /* @__PURE__ */ new WeakMap();
6242 + let elementIds = devElementIdsByMap.get(map);
6243 + if (!elementIds) {
6244 + elementIds = /* @__PURE__ */ new WeakMap();
6245 + devElementIdsByMap.set(map, elementIds);
6246 + }
6247 + return elementIds;
6248 + }
6249 + var PopupTriggerMap = class {
6250 + constructor() {
6251 + this.idMap = /* @__PURE__ */ new Map();
6252 + }
6253 + /**
6254 + * Adds a trigger element with the given ID.
6255 + *
6256 + * Note: The provided element is assumed to not be registered under multiple IDs.
6257 + */
6258 + add(id, element) {
6259 + if (true) {
6260 + const elementIds = getDevElementIds(this);
6261 + const existingId = elementIds.get(element);
6262 + if (existingId !== void 0 && existingId !== id) {
6263 + throw new Error("Base UI: A trigger element cannot be registered under multiple IDs in PopupTriggerMap.");
6264 + }
6265 + const previousElement = this.idMap.get(id);
6266 + if (previousElement !== void 0 && previousElement !== element) {
6267 + elementIds.delete(previousElement);
6268 + }
6269 + elementIds.set(element, id);
6270 + }
6271 + this.idMap.set(id, element);
6272 + }
6273 + /**
6274 + * Removes the trigger element with the given ID.
6275 + */
6276 + delete(id) {
6277 + if (true) {
6278 + const element = this.idMap.get(id);
6279 + if (element !== void 0) {
6280 + devElementIdsByMap?.get(this)?.delete(element);
6281 + }
6282 + }
6283 + this.idMap.delete(id);
6284 + }
6285 + /**
6286 + * Whether the given element is registered as a trigger.
6287 + */
6288 + hasElement(element) {
6289 + for (const registered of this.idMap.values()) {
6290 + if (registered === element) {
6291 + return true;
6292 + }
6293 + }
6294 + return false;
6295 + }
6296 + /**
6297 + * Whether there is a registered trigger element matching the given predicate.
6298 + */
6299 + hasMatchingElement(predicate) {
6300 + for (const element of this.idMap.values()) {
6301 + if (predicate(element)) {
6302 + return true;
6303 + }
6304 + }
6305 + return false;
6306 + }
6307 + /**
6308 + * Returns the trigger element associated with the given ID, or undefined if no such element exists.
6309 + */
6310 + getById(id) {
6311 + return this.idMap.get(id);
6312 + }
6313 + /**
6314 + * Returns an iterable of all registered trigger entries, where each entry is a tuple of [id, element].
6315 + */
6316 + entries() {
6317 + return this.idMap.entries();
6318 + }
6319 + /**
6320 + * Returns an iterable of all registered trigger elements.
6321 + */
6322 + elements() {
6323 + return this.idMap.values();
6324 + }
6325 + /**
6326 + * Returns the number of registered trigger elements.
6327 + */
6328 + get size() {
6329 + return this.idMap.size;
6330 + }
6331 + };
6332 +
6333 + // node_modules/@base-ui/react/utils/popups/store.mjs
6334 + function createInitialPopupStoreState(triggerElements, floatingId, nested = false) {
6335 + return {
6336 + open: false,
6337 + openProp: void 0,
6338 + mounted: false,
6339 + transitionStatus: void 0,
6340 + floatingRootContext: new FloatingRootStore({
6341 + open: false,
6342 + transitionStatus: void 0,
6343 + floatingElement: null,
6344 + referenceElement: null,
6345 + triggerElements,
6346 + floatingId,
6347 + syncOnly: true,
6348 + nested,
6349 + onOpenChange: void 0
6350 + }),
6351 + floatingId,
6352 + triggerCount: 0,
6353 + preventUnmountingOnClose: false,
6354 + payload: void 0,
6355 + activeTriggerId: null,
6356 + activeTriggerElement: null,
6357 + triggerIdProp: void 0,
6358 + popupElement: null,
6359 + positionerElement: null,
6360 + activeTriggerProps: EMPTY_OBJECT,
6361 + inactiveTriggerProps: EMPTY_OBJECT,
6362 + popupProps: EMPTY_OBJECT
6363 + };
6364 + }
6365 + var activeTriggerIdSelector = (state) => state.triggerIdProp ?? state.activeTriggerId;
6366 + var openSelector = (state) => state.openProp ?? state.open;
6367 + var popupIdSelector = (state) => {
6368 + const popupId = state.popupElement?.id ?? state.floatingId;
6369 + return popupId || void 0;
6370 + };
6371 + function triggerOwnsOpenPopup(state, triggerId) {
6372 + return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) === triggerId;
6373 + }
6374 + function triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) {
6375 + if (triggerOwnsOpenPopup(state, triggerId)) {
6376 + return true;
6377 + }
6378 + return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) == null && state.triggerCount === 1;
6379 + }
6380 + var popupStoreSelectors = {
6381 + open: openSelector,
6382 + mounted: (state) => state.mounted,
6383 + transitionStatus: (state) => state.transitionStatus,
6384 + floatingRootContext: (state) => state.floatingRootContext,
6385 + triggerCount: (state) => state.triggerCount,
6386 + preventUnmountingOnClose: (state) => state.preventUnmountingOnClose,
6387 + payload: (state) => state.payload,
6388 + activeTriggerId: activeTriggerIdSelector,
6389 + activeTriggerElement: (state) => state.mounted ? state.activeTriggerElement : null,
6390 + popupId: popupIdSelector,
6391 + /**
6392 + * Whether the trigger with the given ID was used to open the popup.
6393 + */
6394 + isTriggerActive: (state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId,
6395 + /**
6396 + * Whether the popup is open and was activated by a trigger with the given ID.
6397 + */
6398 + isOpenedByTrigger: (state, triggerId) => triggerOwnsOpenPopup(state, triggerId),
6399 + /**
6400 + * Whether the popup is mounted and was activated by a trigger with the given ID.
6401 + */
6402 + isMountedByTrigger: (state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId && state.mounted,
6403 + triggerProps: (state, isActive) => isActive ? state.activeTriggerProps : state.inactiveTriggerProps,
6404 + /**
6405 + * Popup id for the trigger that currently owns the open popup.
6406 + */
6407 + triggerPopupId: (state, triggerId) => triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) ? popupIdSelector(state) : void 0,
6408 + popupProps: (state) => state.popupProps,
6409 + popupElement: (state) => state.popupElement,
6410 + positionerElement: (state) => state.positionerElement
6411 + };
6412 +
6413 + // node_modules/@base-ui/react/utils/popups/usePopupHandleStore.mjs
6414 + var React23 = __toESM(require_react(), 1);
6415 + var import_shim2 = __toESM(require_shim(), 1);
6416 + function usePopupHandleStore(handle) {
6417 + const subscribe = React23.useCallback((listener) => {
6418 + if (handle === void 0) {
6419 + return NOOP;
6420 + }
6421 + return handle.subscribeStore(listener);
6422 + }, [handle]);
6423 + const getSnapshot = React23.useCallback(() => {
6424 + return handle === void 0 ? void 0 : handle.store;
6425 + }, [handle]);
6426 + return (0, import_shim2.useSyncExternalStore)(subscribe, getSnapshot, () => handle?.serverStore);
6427 + }
6428 +
6429 + // node_modules/@base-ui/react/floating-ui-react/hooks/useFloating.mjs
6430 + function useBaseUIFloating(options) {
6431 + return useFloatingWithStore(options, options.rootContext);
6432 + }
6433 + function useFloatingWithStore(options, store2) {
6434 + const {
6435 + nodeId,
6436 + externalTree
6437 + } = options;
6438 + const referenceElement = store2.useState("referenceElement");
6439 + const floatingElement = store2.useState("floatingElement");
6440 + const domReferenceElement = store2.useState("domReferenceElement");
6441 + const open2 = store2.useState("open");
6442 + const floatingId = store2.useState("floatingId");
6443 + const [positionReference, setPositionReferenceRaw] = React24.useState(null);
6444 + const [localDomReference, setLocalDomReference] = React24.useState(void 0);
6445 + const [localFloatingElement, setLocalFloatingElement] = React24.useState(void 0);
6446 + const domReferenceRef = React24.useRef(null);
6447 + const tree = useFloatingTree(externalTree);
6448 + const storeElements = React24.useMemo(() => ({
6449 + reference: referenceElement,
6450 + floating: floatingElement,
6451 + domReference: domReferenceElement
6452 + }), [referenceElement, floatingElement, domReferenceElement]);
6453 + const position = useFloating({
6454 + ...options,
6455 + elements: {
6456 + ...storeElements,
6457 + ...positionReference && {
6458 + reference: positionReference
6459 + }
6460 + }
6461 + });
6462 + const localDomReferenceElement = isElement(localDomReference) ? localDomReference : null;
6463 + const syncedFloatingElement = localFloatingElement === void 0 ? store2.state.floatingElement : localFloatingElement;
6464 + store2.useSyncedValue("referenceElement", localDomReference ?? null);
6465 + store2.useSyncedValue("domReferenceElement", localDomReference === void 0 ? domReferenceElement : localDomReferenceElement);
6466 + store2.useSyncedValue("floatingElement", syncedFloatingElement);
6467 + const setPositionReference = React24.useCallback((node) => {
6468 + const computedPositionReference = isElement(node) ? {
6469 + getBoundingClientRect: () => node.getBoundingClientRect(),
6470 + getClientRects: () => node.getClientRects(),
6471 + contextElement: node
6472 + } : node;
6473 + setPositionReferenceRaw(computedPositionReference);
6474 + position.refs.setReference(computedPositionReference);
6475 + }, [position.refs]);
6476 + const setReference = React24.useCallback((node) => {
6477 + if (isElement(node) || node === null) {
6478 + domReferenceRef.current = node;
6479 + setLocalDomReference(node);
6480 + }
6481 + if (isElement(position.refs.reference.current) || position.refs.reference.current === null || // Don't allow setting virtual elements using the old technique back to
6482 + // `null` to support `positionReference` + an unstable `reference`
6483 + // callback ref.
6484 + node !== null && !isElement(node)) {
6485 + position.refs.setReference(node);
6486 + }
6487 + }, [position.refs, setLocalDomReference]);
6488 + const setFloating = React24.useCallback((node) => {
6489 + setLocalFloatingElement(node);
6490 + position.refs.setFloating(node);
6491 + }, [position.refs]);
6492 + const refs = React24.useMemo(() => ({
6493 + ...position.refs,
6494 + setReference,
6495 + setFloating,
6496 + setPositionReference,
6497 + domReference: domReferenceRef
6498 + }), [position.refs, setReference, setFloating, setPositionReference]);
6499 + const elements = React24.useMemo(() => ({
6500 + ...position.elements,
6501 + domReference: domReferenceElement
6502 + }), [position.elements, domReferenceElement]);
6503 + const context = React24.useMemo(() => ({
6504 + ...position,
6505 + dataRef: store2.context.dataRef,
6506 + open: open2,
6507 + onOpenChange: store2.setOpen,
6508 + events: store2.context.events,
6509 + floatingId,
6510 + refs,
6511 + elements,
6512 + nodeId,
6513 + rootStore: store2
6514 + }), [position, refs, elements, nodeId, store2, open2, floatingId]);
6515 + useIsoLayoutEffect(() => {
6516 + if (domReferenceElement) {
6517 + domReferenceRef.current = domReferenceElement;
6518 + }
6519 + }, [domReferenceElement]);
6520 + useIsoLayoutEffect(() => {
6521 + store2.context.dataRef.current.floatingContext = context;
6522 + const node = tree?.nodesRef.current.find((n) => n.id === nodeId);
6523 + if (node) {
6524 + node.context = context;
6525 + }
6526 + });
6527 + return React24.useMemo(() => ({
6528 + ...position,
6529 + context,
6530 + refs,
6531 + elements,
6532 + rootStore: store2
6533 + }), [position, refs, elements, context, store2]);
6534 + }
6535 +
6536 + // node_modules/@base-ui/react/floating-ui-react/hooks/useFocus.mjs
6537 + var React25 = __toESM(require_react(), 1);
6538 + var isMacSafari = parts_exports.os.mac && parts_exports.engine.webkit;
6539 + function useFocus(context, props = {}) {
6540 + const {
6541 + enabled = true,
6542 + delay
6543 + } = props;
6544 + const store2 = "rootStore" in context ? context.rootStore : context;
6545 + const {
6546 + events,
6547 + dataRef
6548 + } = store2.context;
6549 + const blockFocusRef = React25.useRef(false);
6550 + const blockedReferenceRef = React25.useRef(null);
6551 + const keyboardModalityRef = React25.useRef(true);
6552 + const timeout = useTimeout();
6553 + React25.useEffect(() => {
6554 + const domReference = store2.select("domReferenceElement");
6555 + if (!enabled) {
6556 + return void 0;
6557 + }
6558 + const win = getWindow(domReference);
6559 + function onBlur() {
6560 + const currentDomReference = store2.select("domReferenceElement");
6561 + if (!store2.select("open") && isHTMLElement(currentDomReference) && currentDomReference === activeElement(ownerDocument(currentDomReference))) {
6562 + blockFocusRef.current = true;
6563 + blockedReferenceRef.current = currentDomReference;
6564 + }
6565 + }
6566 + function onKeyDown() {
6567 + keyboardModalityRef.current = true;
6568 + }
6569 + function onPointerDown() {
6570 + keyboardModalityRef.current = false;
6571 + }
6572 + return mergeCleanups(addEventListener(win, "blur", onBlur), isMacSafari && addEventListener(win, "keydown", onKeyDown, true), isMacSafari && addEventListener(win, "pointerdown", onPointerDown, true));
6573 + }, [store2, enabled]);
6574 + React25.useEffect(() => {
6575 + if (!enabled) {
6576 + return void 0;
6577 + }
6578 + function onOpenChangeLocal(details) {
6579 + if (details.reason === reason_parts_exports.triggerPress || details.reason === reason_parts_exports.escapeKey) {
6580 + const referenceElement = store2.select("domReferenceElement");
6581 + if (isElement(referenceElement)) {
6582 + blockedReferenceRef.current = referenceElement;
6583 + blockFocusRef.current = true;
6584 + }
6585 + }
6586 + }
6587 + events.on("openchange", onOpenChangeLocal);
6588 + return () => {
6589 + events.off("openchange", onOpenChangeLocal);
6590 + };
6591 + }, [events, enabled, store2]);
6592 + const reference = React25.useMemo(() => {
6593 + function resetBlockedFocus() {
6594 + blockFocusRef.current = false;
6595 + blockedReferenceRef.current = null;
6596 + }
6597 + return {
6598 + onMouseLeave() {
6599 + resetBlockedFocus();
6600 + },
6601 + onFocus(event) {
6602 + const focusTarget = event.currentTarget;
6603 + if (blockFocusRef.current) {
6604 + if (blockedReferenceRef.current === focusTarget) {
6605 + return;
6606 + }
6607 + resetBlockedFocus();
6608 + }
6609 + const target = getTarget(event.nativeEvent);
6610 + if (isElement(target)) {
6611 + if (isMacSafari && !event.relatedTarget) {
6612 + if (!keyboardModalityRef.current && !isTypeableElement(target)) {
6613 + return;
6614 + }
6615 + } else if (!matchesFocusVisible(target)) {
6616 + return;
6617 + }
6618 + }
6619 + const movedFromOtherEnabledTrigger = isTargetInsideEnabledTrigger(event.relatedTarget, store2.context.triggerElements);
6620 + const {
6621 + nativeEvent,
6622 + currentTarget
6623 + } = event;
6624 + const delayValue = typeof delay === "function" ? delay() : delay;
6625 + if (store2.select("open") && movedFromOtherEnabledTrigger || delayValue === 0 || delayValue === void 0) {
6626 + store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget));
6627 + return;
6628 + }
6629 + timeout.start(delayValue, () => {
6630 + if (blockFocusRef.current) {
6631 + return;
6632 + }
6633 + store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget));
6634 + });
6635 + },
6636 + onBlur(event) {
6637 + resetBlockedFocus();
6638 + const relatedTarget = event.relatedTarget;
6639 + const nativeEvent = event.nativeEvent;
6640 + const movedToFocusGuard = isElement(relatedTarget) && relatedTarget.hasAttribute(createAttribute("focus-guard")) && relatedTarget.getAttribute("data-type") === "outside";
6641 + timeout.start(0, () => {
6642 + const domReference = store2.select("domReferenceElement");
6643 + const activeEl = activeElement(ownerDocument(domReference));
6644 + if (!relatedTarget && activeEl === domReference) {
6645 + return;
6646 + }
6647 + if (contains(dataRef.current.floatingContext?.refs.floating.current, activeEl) || contains(domReference, activeEl) || movedToFocusGuard) {
6648 + return;
6649 + }
6650 + const nextFocusedElement = relatedTarget ?? activeEl;
6651 + if (isTargetInsideEnabledTrigger(nextFocusedElement, store2.context.triggerElements)) {
6652 + return;
6653 + }
6654 + store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent));
6655 + });
6656 + }
6657 + };
6658 + }, [dataRef, delay, store2, timeout]);
6659 + return React25.useMemo(() => enabled ? {
6660 + reference,
6661 + trigger: reference
6662 + } : {}, [enabled, reference]);
6663 + }
6664 +
6665 + // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverFloatingInteraction.mjs
6666 + var React26 = __toESM(require_react(), 1);
6667 +
6668 + // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverInteractionSharedState.mjs
6669 + var HoverInteraction = class _HoverInteraction {
6670 + constructor() {
6671 + this.pointerType = void 0;
6672 + this.interactedInside = false;
6673 + this.handler = void 0;
6674 + this.blockMouseMove = true;
6675 + this.performedPointerEventsMutation = false;
6676 + this.pointerEventsScopeElement = null;
6677 + this.pointerEventsReferenceElement = null;
6678 + this.pointerEventsFloatingElement = null;
6679 + this.restTimeoutPending = false;
6680 + this.openChangeTimeout = new Timeout();
6681 + this.restTimeout = new Timeout();
6682 + this.handleCloseOptions = void 0;
6683 + }
6684 + static create() {
6685 + return new _HoverInteraction();
6686 + }
6687 + dispose = () => {
6688 + this.openChangeTimeout.clear();
6689 + this.restTimeout.clear();
6690 + };
6691 + disposeEffect = () => {
6692 + return this.dispose;
6693 + };
6694 + };
6695 + var pointerEventsMutationOwnerByScopeElement = /* @__PURE__ */ new WeakMap();
6696 + function clearSafePolygonPointerEventsMutation(instance) {
6697 + if (!instance.performedPointerEventsMutation) {
6698 + return;
6699 + }
6700 + const scopeElement = instance.pointerEventsScopeElement;
6701 + if (scopeElement && pointerEventsMutationOwnerByScopeElement.get(scopeElement) === instance) {
6702 + instance.pointerEventsScopeElement?.style.removeProperty("pointer-events");
6703 + instance.pointerEventsReferenceElement?.style.removeProperty("pointer-events");
6704 + instance.pointerEventsFloatingElement?.style.removeProperty("pointer-events");
6705 + pointerEventsMutationOwnerByScopeElement.delete(scopeElement);
6706 + }
6707 + instance.performedPointerEventsMutation = false;
6708 + instance.pointerEventsScopeElement = null;
6709 + instance.pointerEventsReferenceElement = null;
6710 + instance.pointerEventsFloatingElement = null;
6711 + }
6712 + function applySafePolygonPointerEventsMutation(instance, options) {
6713 + const {
6714 + scopeElement,
6715 + referenceElement,
6716 + floatingElement
6717 + } = options;
6718 + const existingOwner = pointerEventsMutationOwnerByScopeElement.get(scopeElement);
6719 + if (existingOwner && existingOwner !== instance) {
6720 + clearSafePolygonPointerEventsMutation(existingOwner);
6721 + }
6722 + clearSafePolygonPointerEventsMutation(instance);
6723 + instance.performedPointerEventsMutation = true;
6724 + instance.pointerEventsScopeElement = scopeElement;
6725 + instance.pointerEventsReferenceElement = referenceElement;
6726 + instance.pointerEventsFloatingElement = floatingElement;
6727 + pointerEventsMutationOwnerByScopeElement.set(scopeElement, instance);
6728 + scopeElement.style.pointerEvents = "none";
6729 + referenceElement.style.pointerEvents = "auto";
6730 + floatingElement.style.pointerEvents = "auto";
6731 + }
6732 + function useHoverInteractionSharedState(store2) {
6733 + const data = store2.context.dataRef.current;
6734 + const instance = useRefWithInit(() => data.hoverInteractionState ?? HoverInteraction.create()).current;
6735 + if (!data.hoverInteractionState) {
6736 + data.hoverInteractionState = instance;
6737 + }
6738 + useOnMount(data.hoverInteractionState.disposeEffect);
6739 + return data.hoverInteractionState;
6740 + }
6741 +
6742 + // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverFloatingInteraction.mjs
6743 + function useHoverFloatingInteraction(context, parameters = {}) {
6744 + const {
6745 + enabled = true,
6746 + closeDelay: closeDelayProp = 0,
6747 + nodeId: nodeIdProp
6748 + } = parameters;
6749 + const store2 = "rootStore" in context ? context.rootStore : context;
6750 + const open2 = store2.useState("open");
6751 + const floatingElement = store2.useState("floatingElement");
6752 + const domReferenceElement = store2.useState("domReferenceElement");
6753 + const {
6754 + dataRef
6755 + } = store2.context;
6756 + const tree = useFloatingTree();
6757 + const parentId = useFloatingParentNodeId();
6758 + const instance = useHoverInteractionSharedState(store2);
6759 + const childClosedTimeout = useTimeout();
6760 + const isClickLikeOpenEvent2 = useStableCallback(() => {
6761 + return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside);
6762 + });
6763 + const isHoverOpen = useStableCallback(() => {
6764 + return isHoverOpenEvent(dataRef.current.openEvent?.type);
6765 + });
6766 + const clearPointerEvents = useStableCallback(() => {
6767 + clearSafePolygonPointerEventsMutation(instance);
6768 + });
6769 + useIsoLayoutEffect(() => {
6770 + if (!open2) {
6771 + instance.pointerType = void 0;
6772 + instance.restTimeoutPending = false;
6773 + instance.interactedInside = false;
6774 + clearPointerEvents();
6775 + }
6776 + }, [open2, instance, clearPointerEvents]);
6777 + React26.useEffect(() => {
6778 + return clearPointerEvents;
6779 + }, [clearPointerEvents]);
6780 + useIsoLayoutEffect(() => {
6781 + if (!enabled) {
6782 + return void 0;
6783 + }
6784 + if (open2 && instance.handleCloseOptions?.blockPointerEvents && isHoverOpen() && isElement(domReferenceElement) && floatingElement) {
6785 + const ref = domReferenceElement;
6786 + const floatingEl = floatingElement;
6787 + const doc = ownerDocument(floatingElement);
6788 + const parentFloating = tree?.nodesRef.current.find((node) => node.id === parentId)?.context?.elements.floating;
6789 + if (parentFloating) {
6790 + parentFloating.style.pointerEvents = "";
6791 + }
6792 + const cachedScopeElement = instance.pointerEventsScopeElement !== floatingEl ? instance.pointerEventsScopeElement : null;
6793 + const parentScopeElement = parentFloating !== floatingEl ? parentFloating : null;
6794 + const scopeElement = instance.handleCloseOptions?.getScope?.() ?? cachedScopeElement ?? parentScopeElement ?? ref.closest("[data-rootownerid]") ?? doc.body;
6795 + applySafePolygonPointerEventsMutation(instance, {
6796 + scopeElement,
6797 + referenceElement: ref,
6798 + floatingElement: floatingEl
6799 + });
6800 + return () => {
6801 + clearPointerEvents();
6802 + };
6803 + }
6804 + return void 0;
6805 + }, [enabled, open2, domReferenceElement, floatingElement, instance, isHoverOpen, tree, parentId, clearPointerEvents]);
6806 + React26.useEffect(() => {
6807 + if (!enabled) {
6808 + return void 0;
6809 + }
6810 + function hasParentChildren() {
6811 + return !!(tree && parentId && getNodeChildren(tree.nodesRef.current, parentId).length > 0);
6812 + }
6813 + function closeWithDelay(event) {
6814 + const closeDelay = getDelay(closeDelayProp, "close", instance.pointerType);
6815 + const close = () => {
6816 + store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
6817 + tree?.events.emit("floating.closed", event);
6818 + };
6819 + if (closeDelay) {
6820 + instance.openChangeTimeout.start(closeDelay, close);
6821 + } else {
6822 + instance.openChangeTimeout.clear();
6823 + close();
6824 + }
6825 + }
6826 + function handleInteractInside(event) {
6827 + const target = getTarget(event);
6828 + if (!isInteractiveElement(target)) {
6829 + instance.interactedInside = false;
6830 + return;
6831 + }
6832 + instance.interactedInside = target?.closest("[aria-haspopup]") != null;
6833 + }
6834 + function onFloatingMouseEnter() {
6835 + instance.openChangeTimeout.clear();
6836 + childClosedTimeout.clear();
6837 + tree?.events.off("floating.closed", onNodeClosed);
6838 + clearPointerEvents();
6839 + }
6840 + function onFloatingMouseLeave(event) {
6841 + if (hasParentChildren() && tree) {
6842 + tree.events.on("floating.closed", onNodeClosed);
6843 + return;
6844 + }
6845 + if (isTargetInsideEnabledTrigger(event.relatedTarget, store2.context.triggerElements)) {
6846 + return;
6847 + }
6848 + const currentNodeId = dataRef.current.floatingContext?.nodeId ?? nodeIdProp;
6849 + const relatedTarget = event.relatedTarget;
6850 + const isMovingIntoDescendantFloating = tree && currentNodeId && isElement(relatedTarget) && getNodeChildren(tree.nodesRef.current, currentNodeId, false).some((node) => contains(node.context?.elements.floating, relatedTarget));
6851 + if (isMovingIntoDescendantFloating) {
6852 + return;
6853 + }
6854 + if (instance.handler) {
6855 + instance.handler(event);
6856 + return;
6857 + }
6858 + clearPointerEvents();
6859 + if (isHoverOpen() && !isClickLikeOpenEvent2()) {
6860 + closeWithDelay(event);
6861 + }
6862 + }
6863 + function onNodeClosed(event) {
6864 + if (!tree || !parentId || hasParentChildren()) {
6865 + return;
6866 + }
6867 + childClosedTimeout.start(0, () => {
6868 + tree.events.off("floating.closed", onNodeClosed);
6869 + store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
6870 + tree.events.emit("floating.closed", event);
6871 + });
6872 + }
6873 + const floating = floatingElement;
6874 + return mergeCleanups(floating && addEventListener(floating, "mouseenter", onFloatingMouseEnter), floating && addEventListener(floating, "mouseleave", onFloatingMouseLeave), floating && addEventListener(floating, "pointerdown", handleInteractInside, true), () => {
6875 + tree?.events.off("floating.closed", onNodeClosed);
6876 + });
6877 + }, [enabled, floatingElement, store2, dataRef, closeDelayProp, nodeIdProp, isHoverOpen, isClickLikeOpenEvent2, clearPointerEvents, instance, tree, parentId, childClosedTimeout]);
6878 + }
6879 +
6880 + // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverReferenceInteraction.mjs
6881 + var React27 = __toESM(require_react(), 1);
6882 + var ReactDOM5 = __toESM(require_react_dom(), 1);
6883 + var EMPTY_REF = {
6884 + current: null
6885 + };
6886 + function useHoverReferenceInteraction(context, props = {}) {
6887 + const {
6888 + enabled = true,
6889 + delay = 0,
6890 + handleClose = null,
6891 + mouseOnly = false,
6892 + restMs = 0,
6893 + move = true,
6894 + triggerElementRef = EMPTY_REF,
6895 + externalTree,
6896 + isActiveTrigger = true,
6897 + getHandleCloseContext,
6898 + isClosing,
6899 + shouldOpen: shouldOpenProp,
6900 + guardStaleOpen = false
6901 + } = props;
6902 + const store2 = "rootStore" in context ? context.rootStore : context;
6903 + const {
6904 + dataRef,
6905 + events
6906 + } = store2.context;
6907 + const tree = useFloatingTree(externalTree);
6908 + const instance = useHoverInteractionSharedState(store2);
6909 + const isHoverCloseActiveRef = React27.useRef(false);
6910 + const handleCloseRef = useValueAsRef(handleClose);
6911 + const delayRef = useValueAsRef(delay);
6912 + const restMsRef = useValueAsRef(restMs);
6913 + const enabledRef = useValueAsRef(enabled);
6914 + const shouldOpenRef = useValueAsRef(shouldOpenProp);
6915 + const isClosingRef = useValueAsRef(isClosing);
6916 + const isClickLikeOpenEvent2 = useStableCallback(() => {
6917 + return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside);
6918 + });
6919 + const checkShouldOpen = useStableCallback(() => {
6920 + return shouldOpenRef.current?.() !== false;
6921 + });
6922 + const isOverInactiveTrigger = useStableCallback((currentDomReference, currentTarget, target) => {
6923 + const allTriggers = store2.context.triggerElements;
6924 + if (allTriggers.hasElement(currentTarget)) {
6925 + return !currentDomReference || !contains(currentDomReference, currentTarget);
6926 + }
6927 + if (!isElement(target)) {
6928 + return false;
6929 + }
6930 + const targetElement = target;
6931 + return allTriggers.hasMatchingElement((trigger) => contains(trigger, targetElement)) && (!currentDomReference || !contains(currentDomReference, targetElement));
6932 + });
6933 + const cleanupMouseMoveHandler = useStableCallback(() => {
6934 + if (!instance.handler) {
6935 + return;
6936 + }
6937 + const doc = ownerDocument(store2.select("domReferenceElement"));
6938 + doc.removeEventListener("mousemove", instance.handler);
6939 + instance.handler = void 0;
6940 + });
6941 + const clearPointerEvents = useStableCallback(() => {
6942 + clearSafePolygonPointerEventsMutation(instance);
6943 + });
6944 + if (isActiveTrigger) {
6945 + instance.handleCloseOptions = handleClose?.__options;
6946 + }
6947 + React27.useEffect(() => cleanupMouseMoveHandler, [cleanupMouseMoveHandler]);
6948 + React27.useEffect(() => {
6949 + if (!enabled) {
6950 + return void 0;
6951 + }
6952 + function onOpenChangeLocal(details) {
6953 + if (!details.open) {
6954 + isHoverCloseActiveRef.current = details.reason === reason_parts_exports.triggerHover;
6955 + cleanupMouseMoveHandler();
6956 + instance.openChangeTimeout.clear();
6957 + instance.restTimeout.clear();
6958 + instance.blockMouseMove = true;
6959 + instance.restTimeoutPending = false;
6960 + } else {
6961 + isHoverCloseActiveRef.current = false;
6962 + }
6963 + }
6964 + events.on("openchange", onOpenChangeLocal);
6965 + return () => {
6966 + events.off("openchange", onOpenChangeLocal);
6967 + };
6968 + }, [enabled, events, instance, cleanupMouseMoveHandler]);
6969 + React27.useEffect(() => {
6970 + if (!enabled) {
6971 + return void 0;
6972 + }
6973 + function closeWithDelay(event, runElseBranch = true) {
6974 + const closeDelay = getDelay(delayRef.current, "close", instance.pointerType);
6975 + if (closeDelay) {
6976 + instance.openChangeTimeout.start(closeDelay, () => {
6977 + store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
6978 + tree?.events.emit("floating.closed", event);
6979 + });
6980 + } else if (runElseBranch) {
6981 + instance.openChangeTimeout.clear();
6982 + store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
6983 + tree?.events.emit("floating.closed", event);
6984 + }
6985 + }
6986 + const trigger = triggerElementRef.current ?? (isActiveTrigger ? store2.select("domReferenceElement") : null);
6987 + if (!isElement(trigger)) {
6988 + return void 0;
6989 + }
6990 + function onMouseEnter(event) {
6991 + instance.openChangeTimeout.clear();
6992 + instance.blockMouseMove = false;
6993 + if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) {
6994 + return;
6995 + }
6996 + const restMsValue = getRestMs(restMsRef.current);
6997 + const openDelay = getDelay(delayRef.current, "open", instance.pointerType);
6998 + const eventTarget = getTarget(event);
6999 + const currentTarget = event.currentTarget ?? null;
7000 + const currentDomReference = store2.select("domReferenceElement");
7001 + let triggerNode = currentTarget;
7002 + if (isElement(eventTarget) && !store2.context.triggerElements.hasElement(eventTarget)) {
7003 + for (const triggerElement of store2.context.triggerElements.elements()) {
7004 + if (contains(triggerElement, eventTarget)) {
7005 + triggerNode = triggerElement;
7006 + break;
7007 + }
7008 + }
7009 + }
7010 + if (isElement(currentTarget) && isElement(currentDomReference) && !store2.context.triggerElements.hasElement(currentTarget) && contains(currentTarget, currentDomReference)) {
7011 + triggerNode = currentDomReference;
7012 + }
7013 + const isOverInactive = triggerNode == null ? false : isOverInactiveTrigger(currentDomReference, triggerNode, eventTarget);
7014 + const isOpen = store2.select("open");
7015 + const isInClosingTransition = isClosingRef.current?.() ?? store2.select("transitionStatus") === "ending";
7016 + const isHoverCloseTransition = !isOpen && isInClosingTransition && isHoverCloseActiveRef.current;
7017 + const isReenteringSameTriggerDuringCloseTransition = !isOverInactive && isElement(triggerNode) && isElement(currentDomReference) && contains(currentDomReference, triggerNode) && isHoverCloseTransition;
7018 + const isRestOnlyDelay = restMsValue > 0 && !openDelay;
7019 + const shouldOpenImmediately = isOverInactive && (isOpen || isHoverCloseTransition) || isReenteringSameTriggerDuringCloseTransition;
7020 + const shouldOpen = !isOpen || isOverInactive;
7021 + if (shouldOpenImmediately) {
7022 + if (checkShouldOpen()) {
7023 + store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode));
7024 + }
7025 + return;
7026 + }
7027 + if (isRestOnlyDelay) {
7028 + return;
7029 + }
7030 + if (openDelay) {
7031 + instance.openChangeTimeout.start(openDelay, () => {
7032 + if (shouldOpen && checkShouldOpen()) {
7033 + store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode));
7034 + }
7035 + });
7036 + } else if (shouldOpen) {
7037 + if (checkShouldOpen()) {
7038 + store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode));
7039 + }
7040 + }
7041 + }
7042 + function onMouseLeave(event) {
7043 + if (isClickLikeOpenEvent2()) {
7044 + clearPointerEvents();
7045 + return;
7046 + }
7047 + cleanupMouseMoveHandler();
7048 + const domReferenceElement = store2.select("domReferenceElement");
7049 + const doc = ownerDocument(domReferenceElement);
7050 + instance.restTimeout.clear();
7051 + instance.restTimeoutPending = false;
7052 + const handleCloseContextBase = dataRef.current.floatingContext ?? getHandleCloseContext?.();
7053 + if (isTargetInsideEnabledTrigger(event.relatedTarget, store2.context.triggerElements)) {
7054 + return;
7055 + }
7056 + if (handleCloseRef.current && handleCloseContextBase) {
7057 + if (!store2.select("open")) {
7058 + instance.openChangeTimeout.clear();
7059 + }
7060 + const currentTrigger = triggerElementRef.current;
7061 + instance.handler = handleCloseRef.current({
7062 + ...handleCloseContextBase,
7063 + tree,
7064 + x: event.clientX,
7065 + y: event.clientY,
7066 + onClose() {
7067 + clearPointerEvents();
7068 + cleanupMouseMoveHandler();
7069 + if (enabledRef.current && !isClickLikeOpenEvent2() && currentTrigger === store2.select("domReferenceElement")) {
7070 + closeWithDelay(event, true);
7071 + }
7072 + }
7073 + });
7074 + doc.addEventListener("mousemove", instance.handler);
7075 + instance.handler(event);
7076 + return;
7077 + }
7078 + const shouldClose = instance.pointerType === "touch" ? !contains(store2.select("floatingElement"), event.relatedTarget) : true;
7079 + if (shouldClose) {
7080 + closeWithDelay(event);
7081 + }
7082 + }
7083 + function onMouseOut(event) {
7084 + if (contains(trigger, event.relatedTarget)) {
7085 + return;
7086 + }
7087 + instance.openChangeTimeout.clear();
7088 + instance.restTimeout.clear();
7089 + instance.restTimeoutPending = false;
7090 + }
7091 + const staleOpenGuard = guardStaleOpen ? addEventListener(trigger, "mouseout", onMouseOut) : void 0;
7092 + if (move) {
7093 + return mergeCleanups(addEventListener(trigger, "mousemove", onMouseEnter, {
7094 + once: true
7095 + }), addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave), staleOpenGuard);
7096 + }
7097 + return mergeCleanups(addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave), staleOpenGuard);
7098 + }, [cleanupMouseMoveHandler, clearPointerEvents, dataRef, delayRef, store2, enabled, handleCloseRef, instance, isActiveTrigger, isOverInactiveTrigger, isClickLikeOpenEvent2, mouseOnly, move, restMsRef, triggerElementRef, tree, enabledRef, getHandleCloseContext, isClosingRef, checkShouldOpen, guardStaleOpen]);
7099 + return React27.useMemo(() => {
7100 + if (!enabled) {
7101 + return void 0;
7102 + }
7103 + function setPointerRef(event) {
7104 + instance.pointerType = event.pointerType;
7105 + }
7106 + return {
7107 + onPointerDown: setPointerRef,
7108 + onPointerEnter: setPointerRef,
7109 + onMouseMove(event) {
7110 + const {
7111 + nativeEvent
7112 + } = event;
7113 + const trigger = event.currentTarget;
7114 + const currentDomReference = store2.select("domReferenceElement");
7115 + const currentOpen = store2.select("open");
7116 + const isOverInactive = isOverInactiveTrigger(currentDomReference, trigger, event.target);
7117 + if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) {
7118 + return;
7119 + }
7120 + if (currentOpen && isOverInactive && instance.handleCloseOptions?.blockPointerEvents) {
7121 + const floatingElement = store2.select("floatingElement");
7122 + if (floatingElement) {
7123 + const scopeElement = instance.handleCloseOptions?.getScope?.() ?? trigger.ownerDocument.body;
7124 + applySafePolygonPointerEventsMutation(instance, {
7125 + scopeElement,
7126 + referenceElement: trigger,
7127 + floatingElement
7128 + });
7129 + }
7130 + }
7131 + const restMsValue = getRestMs(restMsRef.current);
7132 + if (currentOpen && !isOverInactive || restMsValue === 0) {
7133 + return;
7134 + }
7135 + if (!isOverInactive && instance.restTimeoutPending && event.movementX ** 2 + event.movementY ** 2 < 2) {
7136 + return;
7137 + }
7138 + instance.restTimeout.clear();
7139 + function handleMouseMove() {
7140 + instance.restTimeoutPending = false;
7141 + if (isClickLikeOpenEvent2()) {
7142 + return;
7143 + }
7144 + const latestOpen = store2.select("open");
7145 + if (!instance.blockMouseMove && (!latestOpen || isOverInactive) && checkShouldOpen()) {
7146 + store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, nativeEvent, trigger));
7147 + }
7148 + }
7149 + if (instance.pointerType === "touch") {
7150 + ReactDOM5.flushSync(() => {
7151 + handleMouseMove();
7152 + });
7153 + } else if (isOverInactive && currentOpen) {
7154 + handleMouseMove();
7155 + } else {
7156 + instance.restTimeoutPending = true;
7157 + instance.restTimeout.start(restMsValue, handleMouseMove);
7158 + }
7159 + }
7160 + };
7161 + }, [enabled, instance, isClickLikeOpenEvent2, isOverInactiveTrigger, mouseOnly, store2, restMsRef, checkShouldOpen]);
7162 + }
7163 +
7164 + // node_modules/@base-ui/react/floating-ui-react/safePolygon.mjs
7165 + var CURSOR_SPEED_THRESHOLD = 0.1;
7166 + var CURSOR_SPEED_THRESHOLD_SQUARED = CURSOR_SPEED_THRESHOLD * CURSOR_SPEED_THRESHOLD;
7167 + var POLYGON_BUFFER = 0.5;
7168 + function hasIntersectingEdge(pointX, pointY, xi, yi, xj, yj) {
7169 + return yi >= pointY !== yj >= pointY && pointX <= (xj - xi) * (pointY - yi) / (yj - yi) + xi;
7170 + }
7171 + function isPointInQuadrilateral(pointX, pointY, x1, y1, x2, y2, x3, y3, x4, y4) {
7172 + let isInsideValue = false;
7173 + if (hasIntersectingEdge(pointX, pointY, x1, y1, x2, y2)) {
7174 + isInsideValue = !isInsideValue;
7175 + }
7176 + if (hasIntersectingEdge(pointX, pointY, x2, y2, x3, y3)) {
7177 + isInsideValue = !isInsideValue;
7178 + }
7179 + if (hasIntersectingEdge(pointX, pointY, x3, y3, x4, y4)) {
7180 + isInsideValue = !isInsideValue;
7181 + }
7182 + if (hasIntersectingEdge(pointX, pointY, x4, y4, x1, y1)) {
7183 + isInsideValue = !isInsideValue;
7184 + }
7185 + return isInsideValue;
7186 + }
7187 + function isInsideRect(pointX, pointY, rect) {
7188 + return pointX >= rect.x && pointX <= rect.x + rect.width && pointY >= rect.y && pointY <= rect.y + rect.height;
7189 + }
7190 + function isInsideAxisAlignedRect(pointX, pointY, x1, y1, x2, y2) {
7191 + const minX = Math.min(x1, x2);
7192 + const maxX = Math.max(x1, x2);
7193 + const minY = Math.min(y1, y2);
7194 + const maxY = Math.max(y1, y2);
7195 + return pointX >= minX && pointX <= maxX && pointY >= minY && pointY <= maxY;
7196 + }
7197 + function safePolygon(options = {}) {
7198 + const {
7199 + blockPointerEvents = false
7200 + } = options;
7201 + const timeout = new Timeout();
7202 + const fn = ({
7203 + x,
7204 + y,
7205 + placement,
7206 + elements,
7207 + onClose,
7208 + nodeId,
7209 + tree
7210 + }) => {
7211 + const side = placement?.split("-")[0];
7212 + let hasLanded = false;
7213 + let lastX = null;
7214 + let lastY = null;
7215 + let lastCursorTime = typeof performance !== "undefined" ? performance.now() : 0;
7216 + function isCursorMovingSlowly(nextX, nextY) {
7217 + const currentTime = performance.now();
7218 + const elapsedTime = currentTime - lastCursorTime;
7219 + if (lastX === null || lastY === null || elapsedTime === 0) {
7220 + lastX = nextX;
7221 + lastY = nextY;
7222 + lastCursorTime = currentTime;
7223 + return false;
7224 + }
7225 + const deltaX = nextX - lastX;
7226 + const deltaY = nextY - lastY;
7227 + const distanceSquared = deltaX * deltaX + deltaY * deltaY;
7228 + const thresholdSquared = elapsedTime * elapsedTime * CURSOR_SPEED_THRESHOLD_SQUARED;
7229 + lastX = nextX;
7230 + lastY = nextY;
7231 + lastCursorTime = currentTime;
7232 + return distanceSquared < thresholdSquared;
7233 + }
7234 + function close() {
7235 + timeout.clear();
7236 + onClose();
7237 + }
7238 + return function onMouseMove(event) {
7239 + timeout.clear();
7240 + const domReference = elements.domReference;
7241 + const floating = elements.floating;
7242 + if (!domReference || !floating || side == null || x == null || y == null) {
7243 + return void 0;
7244 + }
7245 + const {
7246 + clientX,
7247 + clientY
7248 + } = event;
7249 + const target = getTarget(event);
7250 + const isLeave = event.type === "mouseleave";
7251 + const isOverFloatingEl = contains(floating, target);
7252 + const isOverReferenceEl = contains(domReference, target);
7253 + if (isOverFloatingEl) {
7254 + hasLanded = true;
7255 + if (!isLeave) {
7256 + return void 0;
7257 + }
7258 + }
7259 + if (isOverReferenceEl) {
7260 + hasLanded = false;
7261 + if (!isLeave) {
7262 + hasLanded = true;
7263 + return void 0;
7264 + }
7265 + }
7266 + if (isLeave && isElement(event.relatedTarget) && contains(floating, event.relatedTarget)) {
7267 + return void 0;
7268 + }
7269 + function hasOpenChildNode() {
7270 + return Boolean(tree && getNodeChildren(tree.nodesRef.current, nodeId).length > 0);
7271 + }
7272 + function closeIfNoOpenChild() {
7273 + if (!hasOpenChildNode()) {
7274 + close();
7275 + }
7276 + }
7277 + if (hasOpenChildNode()) {
7278 + return void 0;
7279 + }
7280 + const refRect = domReference.getBoundingClientRect();
7281 + const rect = floating.getBoundingClientRect();
7282 + const cursorLeaveFromRight = x > rect.right - rect.width / 2;
7283 + const cursorLeaveFromBottom = y > rect.bottom - rect.height / 2;
7284 + const isFloatingWider = rect.width > refRect.width;
7285 + const isFloatingTaller = rect.height > refRect.height;
7286 + const left = (isFloatingWider ? refRect : rect).left;
7287 + const right = (isFloatingWider ? refRect : rect).right;
7288 + const top = (isFloatingTaller ? refRect : rect).top;
7289 + const bottom = (isFloatingTaller ? refRect : rect).bottom;
7290 + 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) {
7291 + closeIfNoOpenChild();
7292 + return void 0;
7293 + }
7294 + let isInsideTroughRect = false;
7295 + switch (side) {
7296 + case "top":
7297 + isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, refRect.top + 1, right, rect.bottom - 1);
7298 + break;
7299 + case "bottom":
7300 + isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, rect.top + 1, right, refRect.bottom - 1);
7301 + break;
7302 + case "left":
7303 + isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, rect.right - 1, bottom, refRect.left + 1, top);
7304 + break;
7305 + case "right":
7306 + isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, refRect.right - 1, bottom, rect.left + 1, top);
7307 + break;
7308 + default:
7309 + }
7310 + if (isInsideTroughRect) {
7311 + return void 0;
7312 + }
7313 + if (hasLanded && !isInsideRect(clientX, clientY, refRect)) {
7314 + closeIfNoOpenChild();
7315 + return void 0;
7316 + }
7317 + if (!isLeave && isCursorMovingSlowly(clientX, clientY)) {
7318 + closeIfNoOpenChild();
7319 + return void 0;
7320 + }
7321 + let isInsidePolygon = false;
7322 + switch (side) {
7323 + case "top": {
7324 + const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
7325 + const cursorPointOneX = isFloatingWider ? x + cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset;
7326 + const cursorPointTwoX = isFloatingWider ? x - cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset;
7327 + const cursorPointY = y + POLYGON_BUFFER + 1;
7328 + const commonYLeft = cursorLeaveFromRight ? rect.bottom - POLYGON_BUFFER : isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top;
7329 + const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top : rect.bottom - POLYGON_BUFFER;
7330 + isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight);
7331 + break;
7332 + }
7333 + case "bottom": {
7334 + const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
7335 + const cursorPointOneX = isFloatingWider ? x + cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset;
7336 + const cursorPointTwoX = isFloatingWider ? x - cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset;
7337 + const cursorPointY = y - POLYGON_BUFFER;
7338 + const commonYLeft = cursorLeaveFromRight ? rect.top + POLYGON_BUFFER : isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom;
7339 + const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom : rect.top + POLYGON_BUFFER;
7340 + isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight);
7341 + break;
7342 + }
7343 + case "left": {
7344 + const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
7345 + const cursorPointOneY = isFloatingTaller ? y + cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset;
7346 + const cursorPointTwoY = isFloatingTaller ? y - cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset;
7347 + const cursorPointX = x + POLYGON_BUFFER + 1;
7348 + const commonXTop = cursorLeaveFromBottom ? rect.right - POLYGON_BUFFER : isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left;
7349 + const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left : rect.right - POLYGON_BUFFER;
7350 + isInsidePolygon = isPointInQuadrilateral(clientX, clientY, commonXTop, rect.top, commonXBottom, rect.bottom, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY);
7351 + break;
7352 + }
7353 + case "right": {
7354 + const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
7355 + const cursorPointOneY = isFloatingTaller ? y + cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset;
7356 + const cursorPointTwoY = isFloatingTaller ? y - cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset;
7357 + const cursorPointX = x - POLYGON_BUFFER;
7358 + const commonXTop = cursorLeaveFromBottom ? rect.left + POLYGON_BUFFER : isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right;
7359 + const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right : rect.left + POLYGON_BUFFER;
7360 + isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY, commonXTop, rect.top, commonXBottom, rect.bottom);
7361 + break;
7362 + }
7363 + default:
7364 + }
7365 + if (!isInsidePolygon) {
7366 + closeIfNoOpenChild();
7367 + } else if (!hasLanded) {
7368 + timeout.start(40, closeIfNoOpenChild);
7369 + }
7370 + return void 0;
7371 + };
7372 + };
7373 + fn.__options = {
7374 + ...options,
7375 + blockPointerEvents
7376 + };
7377 + return fn;
7378 + }
7379 +
7380 + // node_modules/@base-ui/react/utils/NullStore.mjs
7381 + var NullStore = class extends ReactStore {
7382 + // `update`/`set`/`notifyAll` funnel through `setState` in the base `Store`, so overriding
7383 + // `setState` alone would neutralize them today. They are overridden explicitly so the store stays
7384 + // inert even if a future base-class change stops routing a mutator through `setState`.
7385 + setState(_newState) {
7386 + }
7387 + update(_changes) {
7388 + }
7389 + set(_key, _value) {
7390 + }
7391 + notifyAll() {
7392 + }
7393 + };
7394 +
7395 + // node_modules/@base-ui/utils/inertValue.mjs
7396 + function inertValue(value) {
7397 + if (isReactVersionAtLeast(19)) {
7398 + return value;
7399 + }
7400 + return value ? "true" : void 0;
7401 + }
7402 +
7403 + // node_modules/@base-ui/react/internals/direction-context/DirectionContext.mjs
7404 + var React28 = __toESM(require_react(), 1);
7405 + var DirectionContext = /* @__PURE__ */ React28.createContext(void 0);
7406 + if (true) DirectionContext.displayName = "DirectionContext";
7407 + function useDirection() {
7408 + const context = React28.useContext(DirectionContext);
7409 + return context?.direction ?? "ltr";
7410 + }
7411 +
7412 + // node_modules/@base-ui/react/internals/useAnchorPositioning.mjs
7413 + var React29 = __toESM(require_react(), 1);
7414 +
7415 + // node_modules/@base-ui/react/floating-ui-react/middleware/arrow.mjs
7416 + var baseArrow = (options) => ({
7417 + name: "arrow",
7418 + options,
7419 + async fn(state) {
7420 + const {
7421 + x,
7422 + y,
7423 + placement,
7424 + rects,
7425 + platform: platform3,
7426 + elements,
7427 + middlewareData
7428 + } = state;
7429 + const {
7430 + element,
7431 + padding = 0,
7432 + offsetParent = "real"
7433 + } = evaluate(options, state) || {};
7434 + if (element == null) {
7435 + return {};
7436 + }
7437 + const paddingObject = getPaddingObject(padding);
7438 + const coords = {
7439 + x,
7440 + y
7441 + };
7442 + const axis = getAlignmentAxis(placement);
7443 + const length = getAxisLength(axis);
7444 + const arrowDimensions = await platform3.getDimensions(element);
7445 + const isYAxis = axis === "y";
7446 + const minProp = isYAxis ? "top" : "left";
7447 + const maxProp = isYAxis ? "bottom" : "right";
7448 + const clientProp = isYAxis ? "clientHeight" : "clientWidth";
7449 + const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];
7450 + const startDiff = coords[axis] - rects.reference[axis];
7451 + const arrowOffsetParent = offsetParent === "real" ? await platform3.getOffsetParent?.(element) : elements.floating;
7452 + let clientSize = elements.floating[clientProp] || rects.floating[length];
7453 + if (!clientSize || !await platform3.isElement?.(arrowOffsetParent)) {
7454 + clientSize = elements.floating[clientProp] || rects.floating[length];
7455 + }
7456 + const centerToReference = endDiff / 2 - startDiff / 2;
7457 + const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;
7458 + const minPadding = Math.min(paddingObject[minProp], largestPossiblePadding);
7459 + const maxPadding = Math.min(paddingObject[maxProp], largestPossiblePadding);
7460 + const min2 = minPadding;
7461 + const max2 = clientSize - arrowDimensions[length] - maxPadding;
7462 + const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;
7463 + const offset4 = clamp(min2, center, max2);
7464 + const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset4 && rects.reference[length] / 2 - (center < min2 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;
7465 + const alignmentOffset = shouldAddOffset ? center < min2 ? center - min2 : center - max2 : 0;
7466 + return {
7467 + [axis]: coords[axis] + alignmentOffset,
7468 + data: {
7469 + [axis]: offset4,
7470 + centerOffset: center - offset4 - alignmentOffset,
7471 + ...shouldAddOffset && {
7472 + alignmentOffset
7473 + }
7474 + },
7475 + reset: shouldAddOffset
7476 + };
7477 + }
7478 + });
7479 + var arrow4 = (options, deps) => {
7480 + const {
7481 + name,
7482 + fn
7483 + } = baseArrow(options);
7484 + return {
7485 + name,
7486 + fn,
7487 + options: [options, deps]
7488 + };
7489 + };
7490 +
7491 + // node_modules/@base-ui/react/utils/hideMiddleware.mjs
7492 + var hide4 = {
7493 + name: "hide",
7494 + async fn(state) {
7495 + const {
7496 + width,
7497 + height,
7498 + x,
7499 + y
7500 + } = state.rects.reference;
7501 + const anchorHidden2 = width === 0 && height === 0 && x === 0 && y === 0;
7502 + const overflow = await state.platform.detectOverflow(state, {
7503 + elementContext: "reference"
7504 + });
7505 + const referenceHidden = overflow.top - height >= 0 || overflow.right - width >= 0 || overflow.bottom - height >= 0 || overflow.left - width >= 0;
7506 + return {
7507 + data: {
7508 + referenceHidden: referenceHidden || anchorHidden2
7509 + }
7510 + };
7511 + }
7512 + };
7513 +
7514 + // node_modules/@base-ui/react/utils/adaptiveOriginConstants.mjs
7515 + var DEFAULT_SIDES = {
7516 + sideX: "left",
7517 + sideY: "top"
7518 + };
7519 +
7520 + // node_modules/@base-ui/react/utils/CommonPositionerCssVars.mjs
7521 + var availableWidth = "--available-width";
7522 + var availableHeight = "--available-height";
7523 + var anchorWidth = "--anchor-width";
7524 + var anchorHeight = "--anchor-height";
7525 + var transformOrigin = "--transform-origin";
7526 + var positionerWidth = "--positioner-width";
7527 + var positionerHeight = "--positioner-height";
7528 +
7529 + // node_modules/@base-ui/react/internals/useAnchorPositioning.mjs
7530 + var AVAILABLE_WIDTH_VAR = availableWidth;
7531 + var AVAILABLE_HEIGHT_VAR = availableHeight;
7532 + function getLogicalSide(sideParam, renderedSide, isRtl) {
7533 + const isLogicalSideParam = sideParam === "inline-start" || sideParam === "inline-end";
7534 + const logicalRight = isRtl ? "inline-start" : "inline-end";
7535 + const logicalLeft = isRtl ? "inline-end" : "inline-start";
7536 + return {
7537 + top: "top",
7538 + right: isLogicalSideParam ? logicalRight : "right",
7539 + bottom: "bottom",
7540 + left: isLogicalSideParam ? logicalLeft : "left"
7541 + }[renderedSide];
7542 + }
7543 + function getOffsetData(state, sideParam, isRtl) {
7544 + const {
7545 + rects,
7546 + placement
7547 + } = state;
7548 + const data = {
7549 + side: getLogicalSide(sideParam, getSide(placement), isRtl),
7550 + align: getAlignment(placement) || "center",
7551 + anchor: {
7552 + width: rects.reference.width,
7553 + height: rects.reference.height
7554 + },
7555 + positioner: {
7556 + width: rects.floating.width,
7557 + height: rects.floating.height
7558 + }
7559 + };
7560 + return data;
7561 + }
7562 + function useAnchorPositioning(params) {
7563 + return useAnchorPositioningWithHook(params, useBaseUIFloating);
7564 + }
7565 + function useAnchorPositioningWithHook(params, useFloatingHook) {
7566 + const {
7567 + // Public parameters
7568 + anchor,
7569 + positionMethod = "absolute",
7570 + side: sideParam = "bottom",
7571 + sideOffset = 0,
7572 + align = "center",
7573 + alignOffset = 0,
7574 + collisionBoundary,
7575 + collisionPadding: collisionPaddingParam = 5,
7576 + sticky = false,
7577 + arrowPadding = 5,
7578 + disableAnchorTracking = false,
7579 + inline: inlineMiddleware,
7580 + // Private parameters
7581 + keepMounted = false,
7582 + floatingRootContext,
7583 + mounted,
7584 + collisionAvoidance,
7585 + shift: shift4,
7586 + nodeId,
7587 + adaptiveOrigin: adaptiveOrigin2,
7588 + lazyFlip = false,
7589 + externalTree
7590 + } = params;
7591 + const [mountSide, setMountSide] = React29.useState(null);
7592 + if (!mounted && mountSide !== null) {
7593 + setMountSide(null);
7594 + }
7595 + const collisionAvoidanceSide = collisionAvoidance.side || "flip";
7596 + const collisionAvoidanceAlign = collisionAvoidance.align || "flip";
7597 + const collisionAvoidanceFallbackAxisSide = collisionAvoidance.fallbackAxisSide || "end";
7598 + const shiftCrossAxis = shift4?.crossAxis ?? false;
7599 + const shiftRootBoundary = shift4?.rootBoundary;
7600 + const anchorFn = typeof anchor === "function" ? anchor : void 0;
7601 + const anchorFnCallback = useStableCallback(anchorFn);
7602 + const anchorDep = anchorFn ? anchorFnCallback : anchor;
7603 + const anchorValueRef = useValueAsRef(anchor);
7604 + const mountedRef = useValueAsRef(mounted);
7605 + const direction = useDirection();
7606 + const isRtl = direction === "rtl";
7607 + const side = mountSide || {
7608 + top: "top",
7609 + right: "right",
7610 + bottom: "bottom",
7611 + left: "left",
7612 + "inline-end": isRtl ? "left" : "right",
7613 + "inline-start": isRtl ? "right" : "left"
7614 + }[sideParam];
7615 + const placement = align === "center" ? side : `${side}-${align}`;
7616 + let collisionPadding = collisionPaddingParam;
7617 + if (typeof collisionPadding === "number") {
7618 + collisionPadding = {
7619 + top: collisionPadding,
7620 + right: collisionPadding,
7621 + bottom: collisionPadding,
7622 + left: collisionPadding
7623 + };
7624 + } else if (collisionPadding) {
7625 + collisionPadding = {
7626 + top: collisionPadding.top || 0,
7627 + right: collisionPadding.right || 0,
7628 + bottom: collisionPadding.bottom || 0,
7629 + left: collisionPadding.left || 0
7630 + };
7631 + }
7632 + const bias = 1;
7633 + const biasTop = sideParam === "bottom" ? bias : 0;
7634 + const biasBottom = sideParam === "top" ? bias : 0;
7635 + const biasLeft = sideParam === "right" ? bias : 0;
7636 + const biasRight = sideParam === "left" ? bias : 0;
7637 + const commonCollisionProps = {
7638 + boundary: collisionBoundary === "clipping-ancestors" ? "clippingAncestors" : collisionBoundary,
7639 + padding: collisionPadding
7640 + };
7641 + const arrowRef = React29.useRef(null);
7642 + const sideOffsetRef = useValueAsRef(sideOffset);
7643 + const alignOffsetRef = useValueAsRef(alignOffset);
7644 + const sideOffsetDep = typeof sideOffset !== "function" ? sideOffset : 0;
7645 + const alignOffsetDep = typeof alignOffset !== "function" ? alignOffset : 0;
7646 + const middleware = [];
7647 + if (inlineMiddleware) {
7648 + middleware.push(inlineMiddleware);
7649 + }
7650 + middleware.push(offset3((state) => {
7651 + const data = getOffsetData(state, sideParam, isRtl);
7652 + const sideAxis = typeof sideOffsetRef.current === "function" ? sideOffsetRef.current(data) : sideOffsetRef.current;
7653 + const alignAxis = typeof alignOffsetRef.current === "function" ? alignOffsetRef.current(data) : alignOffsetRef.current;
7654 + return {
7655 + mainAxis: sideAxis,
7656 + crossAxis: alignAxis,
7657 + alignmentAxis: alignAxis
7658 + };
7659 + }, [sideOffsetDep, alignOffsetDep, isRtl, sideParam]));
7660 + const shiftDisabled = collisionAvoidanceAlign === "none" && collisionAvoidanceSide !== "shift";
7661 + const crossAxisShiftEnabled = !shiftDisabled && (sticky || shiftCrossAxis || collisionAvoidanceSide === "shift");
7662 + const flipMiddleware = collisionAvoidanceSide === "none" ? null : flip3({
7663 + ...commonCollisionProps,
7664 + // Ensure the popup flips if it's been limited by its --available-height and it resizes.
7665 + // Since the size() padding is smaller than the flip() padding, flip() will take precedence.
7666 + padding: {
7667 + top: collisionPadding.top + bias + biasTop,
7668 + right: collisionPadding.right + bias + biasRight,
7669 + bottom: collisionPadding.bottom + bias + biasBottom,
7670 + left: collisionPadding.left + bias + biasLeft
7671 + },
7672 + mainAxis: !shiftCrossAxis && collisionAvoidanceSide === "flip",
7673 + crossAxis: collisionAvoidanceAlign === "flip" ? "alignment" : false,
7674 + fallbackAxisSideDirection: collisionAvoidanceFallbackAxisSide
7675 + });
7676 + const shiftMiddleware = shiftDisabled ? null : shift3({
7677 + ...commonCollisionProps,
7678 + // Use the Layout Viewport to avoid shifting around when pinch-zooming.
7679 + rootBoundary: shiftRootBoundary,
7680 + mainAxis: collisionAvoidanceAlign !== "none",
7681 + crossAxis: crossAxisShiftEnabled,
7682 + limiter: sticky || shiftCrossAxis ? void 0 : limitShift3((limitData) => {
7683 + if (!arrowRef.current) {
7684 + return {};
7685 + }
7686 + const {
7687 + width,
7688 + height
7689 + } = arrowRef.current.getBoundingClientRect();
7690 + const sideAxis = getSideAxis(getSide(limitData.placement));
7691 + const arrowSize = sideAxis === "y" ? width : height;
7692 + const offsetAmount = sideAxis === "y" ? collisionPadding.left + collisionPadding.right : collisionPadding.top + collisionPadding.bottom;
7693 + return {
7694 + offset: arrowSize / 2 + offsetAmount / 2
7695 + };
7696 + })
7697 + }, [commonCollisionProps, sticky, shiftCrossAxis, shiftRootBoundary, collisionPadding, collisionAvoidanceAlign]);
7698 + if (collisionAvoidanceSide === "shift" || collisionAvoidanceAlign === "shift" || align === "center") {
7699 + middleware.push(shiftMiddleware, flipMiddleware);
7700 + } else {
7701 + middleware.push(flipMiddleware, shiftMiddleware);
7702 + }
7703 + middleware.push(size3({
7704 + ...commonCollisionProps,
7705 + apply({
7706 + elements: {
7707 + floating
7708 + },
7709 + availableWidth: availableWidth2,
7710 + availableHeight: availableHeight2,
7711 + rects
7712 + }) {
7713 + if (!mountedRef.current) {
7714 + return;
7715 + }
7716 + const floatingStyle = floating.style;
7717 + floatingStyle.setProperty(AVAILABLE_WIDTH_VAR, `${availableWidth2}px`);
7718 + floatingStyle.setProperty(AVAILABLE_HEIGHT_VAR, `${availableHeight2}px`);
7719 + const dpr = getWindow(floating).devicePixelRatio || 1;
7720 + const {
7721 + x: x2,
7722 + y: y2,
7723 + width,
7724 + height
7725 + } = rects.reference;
7726 + const anchorWidth2 = (Math.round((x2 + width) * dpr) - Math.round(x2 * dpr)) / dpr;
7727 + const anchorHeight2 = (Math.round((y2 + height) * dpr) - Math.round(y2 * dpr)) / dpr;
7728 + floatingStyle.setProperty(anchorWidth, `${anchorWidth2}px`);
7729 + floatingStyle.setProperty(anchorHeight, `${anchorHeight2}px`);
7730 + }
7731 + }), arrow4((state) => ({
7732 + // `transform-origin` calculations rely on an element existing. If the arrow hasn't been set,
7733 + // we'll create a fake element.
7734 + element: arrowRef.current || ownerDocument(state.elements.floating).createElement("div"),
7735 + // No padding for the fake arrow: it would displace aligned popups on narrow anchors.
7736 + padding: arrowRef.current ? arrowPadding : 0,
7737 + offsetParent: "floating"
7738 + }), [arrowPadding]), {
7739 + name: "transformOrigin",
7740 + fn(state) {
7741 + const {
7742 + elements: {
7743 + floating
7744 + },
7745 + middlewareData: middlewareData2,
7746 + placement: renderedPlacement2,
7747 + platform: platform3,
7748 + rects,
7749 + y: y2
7750 + } = state;
7751 + const renderedSide2 = getSide(renderedPlacement2);
7752 + const renderedAlign2 = getAlignment(renderedPlacement2);
7753 + const isVertical = getSideAxis(renderedSide2) === "y";
7754 + const arrowEl = arrowRef.current;
7755 + const sideOffsetValue = typeof sideOffset === "function" ? sideOffset(getOffsetData(state, sideParam, isRtl)) : sideOffset;
7756 + let crossOrigin;
7757 + if (!arrowEl && renderedAlign2 && Math.abs(isVertical ? middlewareData2.shift?.x || 0 : middlewareData2.shift?.y || 0) <= 1) {
7758 + crossOrigin = renderedAlign2 === "start" === (isVertical && platform3.isRTL?.(floating) === true) ? "100%" : "0%";
7759 + } else {
7760 + const arrowOffset = isVertical ? middlewareData2.arrow?.x || 0 : middlewareData2.arrow?.y || 0;
7761 + const arrowSize = isVertical ? arrowEl?.clientWidth || 0 : arrowEl?.clientHeight || 0;
7762 + crossOrigin = `${arrowOffset + arrowSize / 2}px`;
7763 + }
7764 + let sideOrigin = renderedSide2 === "top" || renderedSide2 === "left" ? `calc(100% + ${sideOffsetValue}px)` : `${-sideOffsetValue}px`;
7765 + if (crossAxisShiftEnabled && isVertical && Math.abs(middlewareData2.shift?.y || 0) > sideOffsetValue) {
7766 + sideOrigin = `${rects.reference.y + rects.reference.height / 2 - y2}px`;
7767 + }
7768 + floating.style.setProperty(transformOrigin, isVertical ? `${crossOrigin} ${sideOrigin}` : `${sideOrigin} ${crossOrigin}`);
7769 + return {};
7770 + }
7771 + }, hide4, adaptiveOrigin2);
7772 + useIsoLayoutEffect(() => {
7773 + if (!mounted && floatingRootContext) {
7774 + floatingRootContext.update({
7775 + referenceElement: null,
7776 + floatingElement: null,
7777 + domReferenceElement: null,
7778 + positionReference: null
7779 + });
7780 + }
7781 + }, [mounted, floatingRootContext]);
7782 + const autoUpdateOptions = React29.useMemo(() => ({
7783 + ancestorScroll: !disableAnchorTracking,
7784 + elementResize: !disableAnchorTracking && typeof ResizeObserver !== "undefined",
7785 + layoutShift: !disableAnchorTracking && typeof IntersectionObserver !== "undefined"
7786 + }), [disableAnchorTracking]);
7787 + const {
7788 + refs,
7789 + elements,
7790 + x,
7791 + y,
7792 + middlewareData,
7793 + update: update2,
7794 + placement: renderedPlacement,
7795 + context,
7796 + isPositioned,
7797 + floatingStyles: originalFloatingStyles
7798 + } = useFloatingHook({
7799 + rootContext: floatingRootContext,
7800 + open: keepMounted ? mounted : void 0,
7801 + placement,
7802 + middleware,
7803 + strategy: positionMethod,
7804 + whileElementsMounted: keepMounted ? void 0 : (...args) => autoUpdate(...args, autoUpdateOptions),
7805 + nodeId,
7806 + externalTree
7807 + });
7808 + const {
7809 + sideX,
7810 + sideY
7811 + } = middlewareData.adaptiveOrigin || DEFAULT_SIDES;
7812 + const resolvedPosition = isPositioned ? positionMethod : "fixed";
7813 + const floatingStyles = React29.useMemo(() => {
7814 + let base;
7815 + if (!isPositioned) {
7816 + base = {
7817 + position: resolvedPosition,
7818 + top: 0,
7819 + left: 0
7820 + };
7821 + } else if (adaptiveOrigin2) {
7822 + base = {
7823 + position: resolvedPosition,
7824 + [sideX]: x,
7825 + [sideY]: y
7826 + };
7827 + } else {
7828 + base = {
7829 + ...originalFloatingStyles,
7830 + position: resolvedPosition
7831 + };
7832 + }
7833 + base[AVAILABLE_WIDTH_VAR] = "100vw";
7834 + base[AVAILABLE_HEIGHT_VAR] = "100vh";
7835 + if (!isPositioned) {
7836 + base.opacity = 0;
7837 + }
7838 + return base;
7839 + }, [adaptiveOrigin2, resolvedPosition, sideX, x, sideY, y, originalFloatingStyles, isPositioned]);
7840 + const registeredPositionReferenceRef = React29.useRef(null);
7841 + useIsoLayoutEffect(() => {
7842 + if (!mounted) {
7843 + return;
7844 + }
7845 + const anchorValue = anchorValueRef.current;
7846 + const resolvedAnchor = typeof anchorValue === "function" ? anchorValue() : anchorValue;
7847 + const unwrappedElement = (isRef(resolvedAnchor) ? resolvedAnchor.current : resolvedAnchor) || null;
7848 + const finalAnchor = unwrappedElement || null;
7849 + if (finalAnchor !== registeredPositionReferenceRef.current) {
7850 + refs.setPositionReference(finalAnchor);
7851 + registeredPositionReferenceRef.current = finalAnchor;
7852 + }
7853 + }, [mounted, refs, anchorDep, anchorValueRef]);
7854 + React29.useEffect(() => {
7855 + if (!mounted) {
7856 + return;
7857 + }
7858 + const anchorValue = anchorValueRef.current;
7859 + if (typeof anchorValue === "function") {
7860 + return;
7861 + }
7862 + if (isRef(anchorValue) && anchorValue.current !== registeredPositionReferenceRef.current) {
7863 + refs.setPositionReference(anchorValue.current);
7864 + registeredPositionReferenceRef.current = anchorValue.current;
7865 + }
7866 + }, [mounted, refs, anchorDep, anchorValueRef]);
7867 + React29.useEffect(() => {
7868 + if (keepMounted && mounted && elements.reference && elements.floating) {
7869 + return autoUpdate(elements.reference, elements.floating, update2, autoUpdateOptions);
7870 + }
7871 + return void 0;
7872 + }, [keepMounted, mounted, elements, update2, autoUpdateOptions]);
7873 + const renderedSide = getSide(renderedPlacement);
7874 + const logicalRenderedSide = getLogicalSide(sideParam, renderedSide, isRtl);
7875 + const renderedAlign = getAlignment(renderedPlacement) || "center";
7876 + const anchorHidden2 = Boolean(middlewareData.hide?.referenceHidden);
7877 + useIsoLayoutEffect(() => {
7878 + if (lazyFlip && mounted && isPositioned && renderedSide !== side) {
7879 + setMountSide(renderedSide);
7880 + }
7881 + }, [lazyFlip, mounted, isPositioned, renderedSide, side]);
7882 + const arrowStyles = React29.useMemo(() => ({
7883 + position: "absolute",
7884 + top: middlewareData.arrow?.y,
7885 + left: middlewareData.arrow?.x
7886 + }), [middlewareData.arrow]);
7887 + const arrowUncentered = middlewareData.arrow?.centerOffset !== 0;
7888 + return React29.useMemo(() => ({
7889 + positionerStyles: floatingStyles,
7890 + arrowStyles,
7891 + arrowRef,
7892 + arrowUncentered,
7893 + side: logicalRenderedSide,
7894 + align: renderedAlign,
7895 + physicalSide: renderedSide,
7896 + anchorHidden: anchorHidden2,
7897 + refs,
7898 + context,
7899 + isPositioned,
7900 + update: update2
7901 + }), [floatingStyles, arrowStyles, arrowRef, arrowUncentered, logicalRenderedSide, renderedAlign, renderedSide, anchorHidden2, refs, context, isPositioned, update2]);
7902 + }
7903 + function isRef(param) {
7904 + return param != null && "current" in param;
7905 + }
7906 +
7907 + // node_modules/@base-ui/react/internals/getDisabledMountTransitionStyles.mjs
7908 + function getDisabledMountTransitionStyles(transitionStatus) {
7909 + return transitionStatus === "starting" ? DISABLED_TRANSITIONS_STYLE : EMPTY_OBJECT;
7910 + }
7911 +
7912 + // node_modules/@base-ui/react/utils/usePositioner.mjs
7913 + function usePositioner(componentProps, state, {
7914 + styles,
7915 + transitionStatus,
7916 + props,
7917 + refs,
7918 + hidden,
7919 + inert = false
7920 + }) {
7921 + const style = {
7922 + ...styles
7923 + };
7924 + if (inert) {
7925 + style.pointerEvents = "none";
7926 + }
7927 + return useRenderElement("div", componentProps, {
7928 + state,
7929 + ref: refs,
7930 + props: [{
7931 + role: "presentation",
7932 + hidden,
7933 + style
7934 + }, getDisabledMountTransitionStyles(transitionStatus), props],
7935 + stateAttributesMapping: popupStateMapping
7936 + });
7937 + }
7938 +
7939 + // node_modules/@base-ui/react/utils/usePopupViewport.mjs
7940 + var React33 = __toESM(require_react(), 1);
7941 + var ReactDOM6 = __toESM(require_react_dom(), 1);
7942 +
7943 + // node_modules/@base-ui/utils/usePreviousValue.mjs
7944 + var React30 = __toESM(require_react(), 1);
7945 + function usePreviousValue(value) {
7946 + const [state, setState] = React30.useState({
7947 + current: value,
7948 + previous: null
7949 + });
7950 + if (!Object.is(value, state.current)) {
7951 + setState({
7952 + current: value,
7953 + previous: state.current
7954 + });
7955 + }
7956 + return state.previous;
7957 + }
7958 +
7959 + // node_modules/@base-ui/react/utils/usePopupAutoResize.mjs
7960 + var React31 = __toESM(require_react(), 1);
7961 +
7962 + // node_modules/@base-ui/react/utils/getCssDimensions.mjs
7963 + function getCssDimensions2(element) {
7964 + const css = getComputedStyle2(element);
7965 + let width = parseFloat(css.width) || 0;
7966 + let height = parseFloat(css.height) || 0;
7967 + const hasOffset = isHTMLElement(element);
7968 + const offsetWidth = hasOffset ? element.offsetWidth : width;
7969 + const offsetHeight = hasOffset ? element.offsetHeight : height;
7970 + const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;
7971 + if (shouldFallback) {
7972 + width = offsetWidth;
7973 + height = offsetHeight;
7974 + }
7975 + return {
7976 + width,
7977 + height
7978 + };
7979 + }
7980 +
7981 + // node_modules/@base-ui/react/utils/CommonPopupCssVars.mjs
7982 + var popupWidth = "--popup-width";
7983 + var popupHeight = "--popup-height";
7984 +
7985 + // node_modules/@base-ui/react/utils/usePopupAutoResize.mjs
7986 + function usePopupAutoResize(parameters) {
7987 + const {
7988 + popupElement,
7989 + positionerElement,
7990 + content,
7991 + mounted,
7992 + onMeasureLayout: onMeasureLayoutParam,
7993 + onMeasureLayoutComplete: onMeasureLayoutCompleteParam,
7994 + side,
7995 + direction
7996 + } = parameters;
7997 + const runOnceAnimationsFinish = useAnimationsFinished(popupElement, true);
7998 + const animationFrame = useAnimationFrame();
7999 + const committedDimensionsRef = React31.useRef(null);
8000 + const isInitialRenderRef = React31.useRef(true);
8001 + const restoreAnchoringStylesRef = React31.useRef(NOOP);
8002 + const onMeasureLayout = useStableCallback(onMeasureLayoutParam);
8003 + const onMeasureLayoutComplete = useStableCallback(onMeasureLayoutCompleteParam);
8004 + const anchoringStyles = React31.useMemo(() => getPopupAnchoringStyles(side, direction), [side, direction]);
8005 + useIsoLayoutEffect(() => {
8006 + if (!mounted) {
8007 + restoreAnchoringStylesRef.current = NOOP;
8008 + isInitialRenderRef.current = true;
8009 + committedDimensionsRef.current = null;
8010 + return void 0;
8011 + }
8012 + if (!popupElement || !positionerElement) {
8013 + return void 0;
8014 + }
8015 + restoreAnchoringStylesRef.current = applyElementStyles(popupElement, anchoringStyles);
8016 + setPopupCssSize(popupElement, "auto");
8017 + const restorePopupPosition = overrideElementStyle(popupElement, "position", "static");
8018 + const restorePopupTransform = overrideElementStyle(popupElement, "transform", "none");
8019 + const restorePopupScale = overrideElementStyle(popupElement, "scale", "1");
8020 + const restorePositionerAvailableSize = applyElementStyles(positionerElement, {
8021 + [availableWidth]: "max-content",
8022 + [availableHeight]: "max-content"
8023 + });
8024 + function restoreMeasurementOverrides() {
8025 + restorePopupPosition();
8026 + restorePopupTransform();
8027 + restorePositionerAvailableSize();
8028 + }
8029 + function restoreMeasurementOverridesIncludingScale() {
8030 + restoreMeasurementOverrides();
8031 + restorePopupScale();
8032 + }
8033 + onMeasureLayout?.();
8034 + if (isInitialRenderRef.current || committedDimensionsRef.current === null) {
8035 + setPositionerCssSize(positionerElement, "max-content");
8036 + const dimensions = getCssDimensions2(popupElement);
8037 + committedDimensionsRef.current = dimensions;
8038 + setPositionerCssSize(positionerElement, dimensions);
8039 + restoreMeasurementOverridesIncludingScale();
8040 + onMeasureLayoutComplete?.(null, dimensions);
8041 + isInitialRenderRef.current = false;
8042 + return () => {
8043 + restoreAnchoringStylesRef.current();
8044 + restoreAnchoringStylesRef.current = NOOP;
8045 + };
8046 + }
8047 + setPositionerCssSize(positionerElement, "max-content");
8048 + const previousDimensions = committedDimensionsRef.current;
8049 + const newDimensions = getCssDimensions2(popupElement);
8050 + committedDimensionsRef.current = newDimensions;
8051 + setPopupCssSize(popupElement, previousDimensions);
8052 + restoreMeasurementOverridesIncludingScale();
8053 + onMeasureLayoutComplete?.(previousDimensions, newDimensions);
8054 + setPositionerCssSize(positionerElement, newDimensions);
8055 + const abortController = new AbortController();
8056 + animationFrame.request(() => {
8057 + setPopupCssSize(popupElement, newDimensions);
8058 + runOnceAnimationsFinish(() => {
8059 + popupElement.style.setProperty(popupWidth, "auto");
8060 + popupElement.style.setProperty(popupHeight, "auto");
8061 + }, abortController.signal);
8062 + });
8063 + return () => {
8064 + abortController.abort();
8065 + animationFrame.cancel();
8066 + restoreAnchoringStylesRef.current();
8067 + restoreAnchoringStylesRef.current = NOOP;
8068 + };
8069 + }, [content, popupElement, positionerElement, runOnceAnimationsFinish, animationFrame, mounted, onMeasureLayout, onMeasureLayoutComplete, anchoringStyles]);
8070 + }
8071 + function getPopupAnchoringStyles(side, direction) {
8072 + const isPhysicalTop = side === "top";
8073 + const isPhysicalLeft = side === "left" || side === (direction === "rtl" ? "inline-end" : "inline-start");
8074 + if (!isPhysicalTop && !isPhysicalLeft) {
8075 + return EMPTY_OBJECT;
8076 + }
8077 + return {
8078 + position: "absolute",
8079 + [isPhysicalTop ? "bottom" : "top"]: "0",
8080 + [isPhysicalLeft ? "right" : "left"]: "0"
8081 + };
8082 + }
8083 + function overrideElementStyle(element, property, value) {
8084 + const originalValue = element.style.getPropertyValue(property);
8085 + element.style.setProperty(property, value);
8086 + return () => {
8087 + element.style.setProperty(property, originalValue);
8088 + };
8089 + }
8090 + function applyElementStyles(element, styles) {
8091 + const restorers = [];
8092 + for (const [key, value] of Object.entries(styles)) {
8093 + restorers.push(overrideElementStyle(element, key, value));
8094 + }
8095 + return restorers.length ? () => {
8096 + restorers.forEach((restore) => restore());
8097 + } : NOOP;
8098 + }
8099 + function setPopupCssSize(popupElement, size4) {
8100 + const width = size4 === "auto" ? "auto" : `${size4.width}px`;
8101 + const height = size4 === "auto" ? "auto" : `${size4.height}px`;
8102 + popupElement.style.setProperty(popupWidth, width);
8103 + popupElement.style.setProperty(popupHeight, height);
8104 + }
8105 + function setPositionerCssSize(positionerElement, size4) {
8106 + const width = size4 === "max-content" ? "max-content" : `${size4.width}px`;
8107 + const height = size4 === "max-content" ? "max-content" : `${size4.height}px`;
8108 + positionerElement.style.setProperty(positionerWidth, width);
8109 + positionerElement.style.setProperty(positionerHeight, height);
8110 + }
8111 +
8112 + // node_modules/@base-ui/react/direction-provider/DirectionProvider.mjs
8113 + var React32 = __toESM(require_react(), 1);
8114 + var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1);
8115 + var DirectionProvider = function DirectionProvider2(props) {
8116 + const {
8117 + direction = "ltr"
8118 + } = props;
8119 + const contextValue = React32.useMemo(() => ({
8120 + direction
8121 + }), [direction]);
8122 + return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DirectionContext.Provider, {
8123 + value: contextValue,
8124 + children: props.children
8125 + });
8126 + };
8127 + if (true) DirectionProvider.displayName = "DirectionProvider";
8128 +
8129 + // node_modules/@base-ui/react/utils/adaptiveOriginMiddleware.mjs
8130 + var adaptiveOrigin = {
8131 + name: "adaptiveOrigin",
8132 + async fn(state) {
8133 + const {
8134 + x: rawX,
8135 + y: rawY,
8136 + rects: {
8137 + floating: floatRect
8138 + },
8139 + elements: {
8140 + floating
8141 + },
8142 + platform: platform3,
8143 + strategy,
8144 + placement
8145 + } = state;
8146 + const win = getWindow(floating);
8147 + const styles = win.getComputedStyle(floating);
8148 + const hasTransition = styles.transitionDuration !== "0s" && styles.transitionDuration !== "";
8149 + if (!hasTransition) {
8150 + return {
8151 + x: rawX,
8152 + y: rawY,
8153 + data: DEFAULT_SIDES
8154 + };
8155 + }
8156 + const offsetParent = await platform3.getOffsetParent?.(floating);
8157 + let offsetDimensions = {
8158 + width: 0,
8159 + height: 0
8160 + };
8161 + if (strategy === "fixed" && win?.visualViewport) {
8162 + offsetDimensions = {
8163 + width: win.visualViewport.width,
8164 + height: win.visualViewport.height
8165 + };
8166 + } else if (offsetParent === win) {
8167 + const doc = ownerDocument(floating);
8168 + offsetDimensions = {
8169 + width: doc.documentElement.clientWidth,
8170 + height: doc.documentElement.clientHeight
8171 + };
8172 + } else if (await platform3.isElement?.(offsetParent)) {
8173 + offsetDimensions = await platform3.getDimensions(offsetParent);
8174 + }
8175 + const currentSide = getSide(placement);
8176 + let x = rawX;
8177 + let y = rawY;
8178 + if (currentSide === "left") {
8179 + x = offsetDimensions.width - (rawX + floatRect.width);
8180 + }
8181 + if (currentSide === "top") {
8182 + y = offsetDimensions.height - (rawY + floatRect.height);
8183 + }
8184 + const sideX = currentSide === "left" ? "right" : DEFAULT_SIDES.sideX;
8185 + const sideY = currentSide === "top" ? "bottom" : DEFAULT_SIDES.sideY;
8186 + return {
8187 + x,
8188 + y,
8189 + data: {
8190 + sideX,
8191 + sideY
8192 + }
8193 + };
8194 + }
8195 + };
8196 +
8197 + // node_modules/@base-ui/react/utils/CommonViewportDataAttributes.mjs
8198 + var activationDirection = "data-activation-direction";
8199 +
8200 + // node_modules/@base-ui/react/utils/usePopupViewport.mjs
8201 + var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1);
8202 + var popupViewportStateMapping = {
8203 + activationDirection: (value) => value ? {
8204 + [activationDirection]: value
8205 + } : null
8206 + };
8207 + function usePopupViewport(parameters) {
8208 + const {
8209 + store: store2,
8210 + side,
8211 + children
8212 + } = parameters;
8213 + const direction = useDirection();
8214 + const activeTrigger = store2.useState("activeTriggerElement");
8215 + const activeTriggerId = store2.useState("activeTriggerId");
8216 + const open2 = store2.useState("open");
8217 + const payload = store2.useState("payload");
8218 + const mounted = store2.useState("mounted");
8219 + const popupElement = store2.useState("popupElement");
8220 + const positionerElement = store2.useState("positionerElement");
8221 + const previousActiveTrigger = usePreviousValue(open2 ? activeTrigger : null);
8222 + const currentContentKey = usePopupContentKey(activeTriggerId, payload);
8223 + const capturedNodeRef = React33.useRef(null);
8224 + const [previousContentNode, setPreviousContentNode] = React33.useState(null);
8225 + const [newTriggerOffset, setNewTriggerOffset] = React33.useState(null);
8226 + const currentContainerRef = React33.useRef(null);
8227 + const previousContainerRef = React33.useRef(null);
8228 + const onAnimationsFinished = useAnimationsFinished(currentContainerRef, true);
8229 + const cleanupFrame = useAnimationFrame();
8230 + const cleanupControllerRef = React33.useRef(null);
8231 + const [previousContentDimensions, setPreviousContentDimensions] = React33.useState(null);
8232 + const [showStartingStyleAttribute, setShowStartingStyleAttribute] = React33.useState(false);
8233 + useIsoLayoutEffect(() => {
8234 + store2.set("adaptiveOrigin", adaptiveOrigin);
8235 + return () => {
8236 + store2.set("adaptiveOrigin", void 0);
8237 + };
8238 + }, [store2]);
8239 + const handleMeasureLayout = useStableCallback(() => {
8240 + currentContainerRef.current?.style.setProperty("animation", "none");
8241 + currentContainerRef.current?.style.setProperty("transition", "none");
8242 + previousContainerRef.current?.style.setProperty("display", "none");
8243 + });
8244 + const handleMeasureLayoutComplete = useStableCallback((previousDimensions) => {
8245 + currentContainerRef.current?.style.removeProperty("animation");
8246 + currentContainerRef.current?.style.removeProperty("transition");
8247 + previousContainerRef.current?.style.removeProperty("display");
8248 + if (previousDimensions) {
8249 + setPreviousContentDimensions(previousDimensions);
8250 + }
8251 + });
8252 + const armViewportCleanup = useStableCallback(() => {
8253 + cleanupControllerRef.current?.abort();
8254 + const controller = new AbortController();
8255 + cleanupControllerRef.current = controller;
8256 + onAnimationsFinished(() => {
8257 + setPreviousContentNode(null);
8258 + setPreviousContentDimensions(null);
8259 + capturedNodeRef.current = null;
8260 + }, controller.signal);
8261 + });
8262 + const lastHandledTriggerRef = React33.useRef(null);
8263 + useIsoLayoutEffect(() => {
8264 + if (!open2 || !mounted) {
8265 + lastHandledTriggerRef.current = null;
8266 + }
8267 + }, [open2, mounted]);
8268 + useIsoLayoutEffect(() => {
8269 + if (activeTrigger && previousActiveTrigger && activeTrigger !== previousActiveTrigger && lastHandledTriggerRef.current !== activeTrigger && capturedNodeRef.current) {
8270 + setPreviousContentNode(capturedNodeRef.current);
8271 + setShowStartingStyleAttribute(true);
8272 + const offset4 = calculateRelativePosition(previousActiveTrigger, activeTrigger);
8273 + setNewTriggerOffset(offset4);
8274 + lastHandledTriggerRef.current = activeTrigger;
8275 + }
8276 + }, [activeTrigger, previousActiveTrigger]);
8277 + useIsoLayoutEffect(() => {
8278 + if (previousContentNode == null) {
8279 + return;
8280 + }
8281 + cleanupControllerRef.current?.abort();
8282 + setShowStartingStyleAttribute(true);
8283 + cleanupFrame.request(() => {
8284 + ReactDOM6.flushSync(() => {
8285 + setShowStartingStyleAttribute(false);
8286 + });
8287 + armViewportCleanup();
8288 + });
8289 + }, [currentContentKey, previousContentNode, armViewportCleanup, cleanupFrame]);
8290 + useIsoLayoutEffect(() => {
8291 + const source = currentContainerRef.current;
8292 + if (!source) {
8293 + return;
8294 + }
8295 + const wrapper = ownerDocument(source).createElement("div");
8296 + for (const child of Array.from(source.childNodes)) {
8297 + wrapper.appendChild(child.cloneNode(true));
8298 + }
8299 + capturedNodeRef.current = wrapper;
8300 + });
8301 + const isTransitioning = previousContentNode != null;
8302 + let childrenToRender;
8303 + if (!isTransitioning) {
8304 + childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", {
8305 + "data-current": true,
8306 + ref: currentContainerRef,
8307 + children
8308 + }, currentContentKey);
8309 + } else {
8310 + childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(React33.Fragment, {
8311 + children: [/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", {
8312 + "data-previous": true,
8313 + inert: inertValue(true),
8314 + ref: previousContainerRef,
8315 + style: {
8316 + ...previousContentDimensions ? {
8317 + [popupWidth]: `${previousContentDimensions.width}px`,
8318 + [popupHeight]: `${previousContentDimensions.height}px`
8319 + } : null,
8320 + position: "absolute"
8321 + },
8322 + "data-ending-style": showStartingStyleAttribute ? void 0 : ""
8323 + }, "previous"), /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", {
8324 + "data-current": true,
8325 + ref: currentContainerRef,
8326 + "data-starting-style": showStartingStyleAttribute ? "" : void 0,
8327 + children
8328 + }, currentContentKey)]
8329 + });
8330 + }
8331 + useIsoLayoutEffect(() => {
8332 + const container = previousContainerRef.current;
8333 + if (!container || !previousContentNode) {
8334 + return;
8335 + }
8336 + container.replaceChildren(...Array.from(previousContentNode.childNodes));
8337 + }, [previousContentNode]);
8338 + usePopupAutoResize({
8339 + popupElement,
8340 + positionerElement,
8341 + mounted,
8342 + content: payload,
8343 + onMeasureLayout: handleMeasureLayout,
8344 + onMeasureLayoutComplete: handleMeasureLayoutComplete,
8345 + side,
8346 + direction
8347 + });
8348 + const state = {
8349 + activationDirection: getActivationDirection(newTriggerOffset),
8350 + transitioning: isTransitioning
8351 + };
8352 + return {
8353 + children: childrenToRender,
8354 + state
8355 + };
8356 + }
8357 + function getActivationDirection(offset4) {
8358 + if (!offset4) {
8359 + return void 0;
8360 + }
8361 + return `${getValueWithTolerance(offset4.horizontal, 5, "right", "left")} ${getValueWithTolerance(offset4.vertical, 5, "down", "up")}`;
8362 + }
8363 + function getValueWithTolerance(value, tolerance, positiveLabel, negativeLabel) {
8364 + if (value > tolerance) {
8365 + return positiveLabel;
8366 + }
8367 + if (value < -tolerance) {
8368 + return negativeLabel;
8369 + }
8370 + return "";
8371 + }
8372 + function calculateRelativePosition(from, to) {
8373 + const fromRect = from.getBoundingClientRect();
8374 + const toRect = to.getBoundingClientRect();
8375 + const fromCenter = {
8376 + x: fromRect.left + fromRect.width / 2,
8377 + y: fromRect.top + fromRect.height / 2
8378 + };
8379 + const toCenter = {
8380 + x: toRect.left + toRect.width / 2,
8381 + y: toRect.top + toRect.height / 2
8382 + };
8383 + return {
8384 + horizontal: toCenter.x - fromCenter.x,
8385 + vertical: toCenter.y - fromCenter.y
8386 + };
8387 + }
8388 + function usePopupContentKey(activeTriggerId, payload) {
8389 + const [contentKey, setContentKey] = React33.useState(0);
8390 + const previousActiveTriggerIdRef = React33.useRef(activeTriggerId);
8391 + const previousPayloadRef = React33.useRef(payload);
8392 + const pendingPayloadUpdateRef = React33.useRef(false);
8393 + useIsoLayoutEffect(() => {
8394 + const previousActiveTriggerId = previousActiveTriggerIdRef.current;
8395 + const previousPayload = previousPayloadRef.current;
8396 + const triggerIdChanged = activeTriggerId !== previousActiveTriggerId;
8397 + const payloadChanged = payload !== previousPayload;
8398 + if (triggerIdChanged) {
8399 + setContentKey((value) => value + 1);
8400 + pendingPayloadUpdateRef.current = !payloadChanged;
8401 + } else if (pendingPayloadUpdateRef.current && payloadChanged) {
8402 + setContentKey((value) => value + 1);
8403 + pendingPayloadUpdateRef.current = false;
8404 + }
8405 + previousActiveTriggerIdRef.current = activeTriggerId;
8406 + previousPayloadRef.current = payload;
8407 + }, [activeTriggerId, payload]);
8408 + return `${activeTriggerId ?? "current"}-${contentKey}`;
8409 + }
8410 +
8411 + // node_modules/@base-ui/react/utils/FloatingPortalLite.mjs
8412 + var React34 = __toESM(require_react(), 1);
8413 + var ReactDOM7 = __toESM(require_react_dom(), 1);
8414 + var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1);
8415 + var FloatingPortalLite = /* @__PURE__ */ React34.forwardRef(function FloatingPortalLite2(componentProps, forwardedRef) {
8416 + const {
8417 + children,
8418 + container,
8419 + className,
8420 + render,
8421 + style,
8422 + ...elementProps
8423 + } = componentProps;
8424 + const {
8425 + node: portalNode,
8426 + subtree: portalSubtree
8427 + } = useFloatingPortalNode({
8428 + container,
8429 + ref: forwardedRef,
8430 + componentProps,
8431 + elementProps
8432 + });
8433 + if (!portalSubtree && !portalNode) {
8434 + return null;
8435 + }
8436 + return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(React34.Fragment, {
8437 + children: [portalSubtree, portalNode && /* @__PURE__ */ ReactDOM7.createPortal(children, portalNode)]
8438 + });
8439 + });
8440 + if (true) FloatingPortalLite.displayName = "FloatingPortalLite";
8441 +
8442 + // node_modules/@base-ui/react/tooltip/index.parts.mjs
8443 + var index_parts_exports = {};
8444 + __export(index_parts_exports, {
8445 + Arrow: () => TooltipArrow,
8446 + Handle: () => TooltipHandle,
8447 + Popup: () => TooltipPopup,
8448 + Portal: () => TooltipPortal,
8449 + Positioner: () => TooltipPositioner,
8450 + Provider: () => TooltipProvider,
8451 + Root: () => TooltipRoot,
8452 + Trigger: () => TooltipTrigger,
8453 + Viewport: () => TooltipViewport,
8454 + createHandle: () => createTooltipHandle
8455 + });
8456 +
8457 + // node_modules/@base-ui/react/tooltip/root/TooltipRoot.mjs
8458 + var React37 = __toESM(require_react(), 1);
8459 +
8460 + // node_modules/@base-ui/react/tooltip/root/TooltipRootContext.mjs
8461 + var React35 = __toESM(require_react(), 1);
8462 + var TooltipRootContext = /* @__PURE__ */ React35.createContext(void 0);
8463 + if (true) TooltipRootContext.displayName = "TooltipRootContext";
8464 + function useTooltipRootContext(optional) {
8465 + const context = React35.useContext(TooltipRootContext);
8466 + if (context === void 0 && !optional) {
8467 + throw new Error(true ? "Base UI: TooltipRootContext is missing. Tooltip parts must be placed within <Tooltip.Root>." : formatErrorMessage_default(72));
8468 + }
8469 + return context;
8470 + }
8471 +
8472 + // node_modules/@base-ui/react/tooltip/store/TooltipStore.mjs
8473 + var React36 = __toESM(require_react(), 1);
8474 + var selectors2 = {
8475 + ...popupStoreSelectors,
8476 + disabled: (state) => state.disabled,
8477 + instantType: (state) => state.instantType,
8478 + isInstantPhase: (state) => state.isInstantPhase,
8479 + trackCursorAxis: (state) => state.trackCursorAxis,
8480 + disableHoverablePopup: (state) => state.disableHoverablePopup,
8481 + lastOpenChangeReason: (state) => state.openChangeReason,
8482 + closeOnClick: (state) => state.closeOnClick,
8483 + closeDelay: (state) => state.closeDelay,
8484 + adaptiveOrigin: (state) => state.adaptiveOrigin
8485 + };
8486 + var TooltipStore = class extends ReactStore {
8487 + constructor(initialState, floatingId, nested) {
8488 + const triggerElements = new PopupTriggerMap();
8489 + super(createInitialState(initialState, triggerElements, floatingId, nested), createInitialContext(triggerElements), selectors2);
8490 + }
8491 + setOpen = (nextOpen, eventDetails) => {
8492 + applyPopupOpenChange(this, nextOpen, eventDetails, {
8493 + extraState: {
8494 + openChangeReason: eventDetails.reason
8495 + }
8496 + });
8497 + };
8498 + // Used by trigger clicks to clear a delayed hover open without reporting a public open-state change.
8499 + cancelPendingOpen(event) {
8500 + this.state.floatingRootContext.dispatchOpenChange(false, createChangeEventDetails(reason_parts_exports.triggerPress, event));
8501 + }
8502 + };
8503 + function createNullTooltipStore() {
8504 + const triggerElements = new PopupTriggerMap();
8505 + const store2 = new NullStore(Object.freeze(createInitialState(void 0, triggerElements)), Object.freeze(createInitialContext(triggerElements)), selectors2);
8506 + return Object.assign(store2, {
8507 + setOpen: NOOP,
8508 + cancelPendingOpen: NOOP
8509 + });
8510 + }
8511 + function createInitialState(initialState, triggerElements, floatingId, nested = false) {
8512 + const state = {
8513 + ...createInitialPopupStoreState(triggerElements, floatingId, nested),
8514 + disabled: false,
8515 + instantType: void 0,
8516 + isInstantPhase: false,
8517 + trackCursorAxis: "none",
8518 + disableHoverablePopup: false,
8519 + openChangeReason: null,
8520 + closeOnClick: true,
8521 + closeDelay: 0,
8522 + adaptiveOrigin: void 0,
8523 + ...initialState
8524 + };
8525 + return state;
8526 + }
8527 + function createInitialContext(triggerElements) {
8528 + return {
8529 + popupRef: /* @__PURE__ */ React36.createRef(),
8530 + onOpenChange: void 0,
8531 + onOpenChangeComplete: void 0,
8532 + triggerElements
8533 + };
8534 + }
8535 +
8536 + // node_modules/@base-ui/react/tooltip/root/TooltipRoot.mjs
8537 + var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1);
8538 + var TooltipRoot = fastComponent(function TooltipRoot2(props) {
8539 + const {
8540 + disabled: disabled2 = false,
8541 + defaultOpen = false,
8542 + open: openProp,
8543 + disableHoverablePopup = false,
8544 + trackCursorAxis = "none",
8545 + actionsRef,
8546 + onOpenChange,
8547 + onOpenChangeComplete,
8548 + handle,
8549 + triggerId: triggerIdProp,
8550 + defaultTriggerId: defaultTriggerIdProp = null,
8551 + children
8552 + } = props;
8553 + const store2 = usePopupRootStore((floatingId, nested) => new TooltipStore({
8554 + open: defaultOpen,
8555 + openProp,
8556 + activeTriggerId: defaultTriggerIdProp,
8557 + triggerIdProp
8558 + }, floatingId, nested));
8559 + store2.useControlledProp("openProp", openProp);
8560 + store2.useControlledProp("triggerIdProp", triggerIdProp);
8561 + store2.useContextCallback("onOpenChange", onOpenChange);
8562 + store2.useContextCallback("onOpenChangeComplete", onOpenChangeComplete);
8563 + const openState = store2.useState("open");
8564 + const open2 = !disabled2 && openState;
8565 + const activeTriggerId = store2.useState("activeTriggerId");
8566 + const mounted = store2.useState("mounted");
8567 + const payload = store2.useState("payload");
8568 + store2.useSyncedValues({
8569 + trackCursorAxis,
8570 + disableHoverablePopup,
8571 + disabled: disabled2
8572 + });
8573 + useImplicitActiveTrigger(store2, {
8574 + closeOnActiveTriggerUnmount: true
8575 + });
8576 + const {
8577 + forceUnmount,
8578 + transitionStatus
8579 + } = useOpenStateTransitions(open2, store2);
8580 + const isInstantPhase = store2.useState("isInstantPhase");
8581 + const instantType = store2.useState("instantType");
8582 + const lastOpenChangeReason = store2.useState("lastOpenChangeReason");
8583 + const previousInstantTypeRef = React37.useRef(null);
8584 + useIsoLayoutEffect(() => {
8585 + if (openState && disabled2) {
8586 + store2.setOpen(false, createChangeEventDetails(reason_parts_exports.disabled));
8587 + }
8588 + }, [openState, disabled2, store2]);
8589 + useIsoLayoutEffect(() => {
8590 + if (transitionStatus === "ending" && lastOpenChangeReason === reason_parts_exports.none || transitionStatus !== "ending" && isInstantPhase) {
8591 + if (instantType !== "delay") {
8592 + previousInstantTypeRef.current = instantType;
8593 + }
8594 + store2.set("instantType", "delay");
8595 + } else if (previousInstantTypeRef.current !== null) {
8596 + store2.set("instantType", previousInstantTypeRef.current);
8597 + previousInstantTypeRef.current = null;
8598 + }
8599 + }, [transitionStatus, isInstantPhase, lastOpenChangeReason, instantType, store2]);
8600 + useIsoLayoutEffect(() => {
8601 + if (open2) {
8602 + if (activeTriggerId == null) {
8603 + store2.set("payload", void 0);
8604 + }
8605 + }
8606 + }, [store2, activeTriggerId, open2]);
8607 + React37.useImperativeHandle(actionsRef, () => ({
8608 + unmount: forceUnmount,
8609 + close: () => store2.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction))
8610 + }), [forceUnmount, store2]);
8611 + const shouldRenderInteractions = open2 || mounted || !disabled2 && trackCursorAxis !== "none";
8612 + return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(TooltipRootContext.Provider, {
8613 + value: store2,
8614 + children: [handle && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(PopupHandleAttachment, {
8615 + handle,
8616 + store: store2
8617 + }), shouldRenderInteractions && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(TooltipInteractions, {
8618 + store: store2,
8619 + disabled: disabled2,
8620 + trackCursorAxis
8621 + }), typeof children === "function" ? children({
8622 + payload
8623 + }) : children]
8624 + });
8625 + });
8626 + if (true) TooltipRoot.displayName = "TooltipRoot";
8627 + function TooltipInteractions({
8628 + store: store2,
8629 + disabled: disabled2,
8630 + trackCursorAxis
8631 + }) {
8632 + const floatingRootContext = store2.useState("floatingRootContext");
8633 + const dismiss = useDismiss(floatingRootContext, {
8634 + enabled: !disabled2,
8635 + referencePress: () => store2.select("closeOnClick")
8636 + });
8637 + const clientPoint = useClientPoint(floatingRootContext, {
8638 + enabled: !disabled2 && trackCursorAxis !== "none",
8639 + axis: trackCursorAxis === "none" ? void 0 : trackCursorAxis
8640 + });
8641 + const triggerProps = React37.useMemo(() => mergeProps(clientPoint.reference, dismiss.reference), [clientPoint.reference, dismiss.reference]);
8642 + usePopupInteractionProps(store2, {
8643 + activeTriggerProps: triggerProps,
8644 + inactiveTriggerProps: triggerProps,
8645 + popupProps: dismiss.floating ?? EMPTY_OBJECT
8646 + });
8647 + return null;
8648 + }
8649 +
8650 + // node_modules/@base-ui/react/tooltip/trigger/TooltipTrigger.mjs
8651 + var React39 = __toESM(require_react(), 1);
8652 +
8653 + // node_modules/@base-ui/react/tooltip/provider/TooltipProviderContext.mjs
8654 + var React38 = __toESM(require_react(), 1);
8655 + var TooltipProviderContext = /* @__PURE__ */ React38.createContext(void 0);
8656 + if (true) TooltipProviderContext.displayName = "TooltipProviderContext";
8657 + function useTooltipProviderContext() {
8658 + return React38.useContext(TooltipProviderContext);
8659 + }
8660 +
8661 + // node_modules/@base-ui/react/tooltip/utils/constants.mjs
8662 + var OPEN_DELAY = 600;
8663 +
8664 + // node_modules/@base-ui/react/tooltip/trigger/TooltipTrigger.mjs
8665 + var TOOLTIP_TRIGGER_IDENTIFIER = "data-base-ui-tooltip-trigger";
8666 + function getTargetElement(event) {
8667 + if ("composedPath" in event) {
8668 + const path = event.composedPath();
8669 + for (let i = 0; i < path.length; i += 1) {
8670 + const element = path[i];
8671 + if (isElement(element)) {
8672 + return element;
8673 + }
8674 + }
8675 + }
8676 + const target = event.target;
8677 + if (isElement(target)) {
8678 + return target;
8679 + }
8680 + return null;
8681 + }
8682 + function closestEnabledTooltipTrigger(element) {
8683 + let current = element;
8684 + while (current) {
8685 + const trigger = current.closest(`[${TOOLTIP_TRIGGER_IDENTIFIER}]`);
8686 + if (trigger) {
8687 + return trigger;
8688 + }
8689 + const root = current.getRootNode();
8690 + current = "host" in root && isElement(root.host) ? root.host : null;
8691 + }
8692 + return null;
8693 + }
8694 + var TooltipTrigger = fastComponentRef(function TooltipTrigger2(componentProps, forwardedRef) {
8695 + const {
8696 + render,
8697 + className,
8698 + style,
8699 + handle,
8700 + payload,
8701 + disabled: disabledProp,
8702 + delay,
8703 + closeOnClick = true,
8704 + closeDelay,
8705 + id: idProp,
8706 + ...elementProps
8707 + } = componentProps;
8708 + const rootContext = useTooltipRootContext(true);
8709 + const handleStore = usePopupHandleStore(handle);
8710 + const store2 = handleStore ?? rootContext;
8711 + if (!store2) {
8712 + 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));
8713 + }
8714 + const thisTriggerId = useBaseUiId(idProp);
8715 + const isTriggerActive = store2.useState("isTriggerActive", thisTriggerId);
8716 + const isOpenedByThisTrigger = store2.useState("isOpenedByTrigger", thisTriggerId);
8717 + const floatingRootContext = store2.useState("floatingRootContext");
8718 + const triggerElementRef = React39.useRef(null);
8719 + const closeDelayWithDefault = closeDelay ?? 0;
8720 + const {
8721 + registerTrigger,
8722 + isMountedByThisTrigger
8723 + } = useTriggerDataForwarding(thisTriggerId, triggerElementRef, store2, {
8724 + payload,
8725 + closeOnClick,
8726 + closeDelay: closeDelayWithDefault
8727 + });
8728 + const providerDelay = useTooltipProviderContext();
8729 + const {
8730 + activeIdRef,
8731 + delayRef,
8732 + isInstantPhase,
8733 + hasProvider
8734 + } = useDelayGroup(floatingRootContext, {
8735 + open: isOpenedByThisTrigger
8736 + });
8737 + const hoverInteraction = useHoverInteractionSharedState(floatingRootContext);
8738 + store2.useSyncedValue("isInstantPhase", isInstantPhase);
8739 + const rootDisabled = store2.useState("disabled");
8740 + const disabled2 = disabledProp ?? rootDisabled;
8741 + const disabledRef = useValueAsRef(disabled2);
8742 + const trackCursorAxis = store2.useState("trackCursorAxis");
8743 + const disableHoverablePopup = store2.useState("disableHoverablePopup");
8744 + const isNestedTriggerHoveredRef = React39.useRef(false);
8745 + const nestedTriggerOpenTimeout = useTimeout();
8746 + const pointerTypeRef = React39.useRef(void 0);
8747 + function getOpenDelay() {
8748 + if (hasProvider && activeIdRef.current != null) {
8749 + return 0;
8750 + }
8751 + return delay ?? providerDelay ?? OPEN_DELAY;
8752 + }
8753 + function isEnabledNestedTriggerTarget(target) {
8754 + const triggerEl = triggerElementRef.current;
8755 + if (!triggerEl || !target) {
8756 + return false;
8757 + }
8758 + const nearestTrigger = closestEnabledTooltipTrigger(target);
8759 + return nearestTrigger !== null && nearestTrigger !== triggerEl && contains(triggerEl, nearestTrigger);
8760 + }
8761 + function detectNestedTriggerHover(target) {
8762 + const nestedTriggerHovered = isEnabledNestedTriggerTarget(target);
8763 + isNestedTriggerHoveredRef.current = nestedTriggerHovered;
8764 + if (nestedTriggerHovered) {
8765 + hoverInteraction.openChangeTimeout.clear();
8766 + hoverInteraction.restTimeout.clear();
8767 + hoverInteraction.restTimeoutPending = false;
8768 + nestedTriggerOpenTimeout.clear();
8769 + }
8770 + return nestedTriggerHovered;
8771 + }
8772 + const hoverProps = useHoverReferenceInteraction(floatingRootContext, {
8773 + enabled: !disabled2,
8774 + mouseOnly: true,
8775 + move: false,
8776 + handleClose: !disableHoverablePopup && trackCursorAxis !== "both" ? safePolygon() : null,
8777 + restMs: getOpenDelay,
8778 + delay() {
8779 + if (closeDelay == null && hasProvider) {
8780 + return {
8781 + close: getDelay(delayRef.current, "close")
8782 + };
8783 + }
8784 + return {
8785 + close: closeDelayWithDefault
8786 + };
8787 + },
8788 + triggerElementRef,
8789 + isActiveTrigger: isTriggerActive,
8790 + isClosing: () => store2.select("transitionStatus") === "ending",
8791 + shouldOpen() {
8792 + return !isNestedTriggerHoveredRef.current;
8793 + }
8794 + });
8795 + const focusProps = useFocus(floatingRootContext, {
8796 + enabled: !disabled2
8797 + }).reference;
8798 + const handleNestedTriggerHover = (event) => {
8799 + const wasNestedTriggerHovered = isNestedTriggerHoveredRef.current;
8800 + const target = getTargetElement(event);
8801 + const nestedTriggerHovered = detectNestedTriggerHover(target);
8802 + const triggerEl = triggerElementRef.current;
8803 + const targetInsideTrigger = triggerEl && target && contains(triggerEl, target);
8804 + if (nestedTriggerHovered && store2.select("open") && store2.select("lastOpenChangeReason") === reason_parts_exports.triggerHover) {
8805 + store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
8806 + return;
8807 + }
8808 + if (wasNestedTriggerHovered && !nestedTriggerHovered && targetInsideTrigger && !disabledRef.current && !store2.select("open") && triggerEl && // Match the hover hook's non-strict mouse fallback for mouse-only event sequences.
8809 + isMouseLikePointerType(pointerTypeRef.current)) {
8810 + const open2 = () => {
8811 + if (!isNestedTriggerHoveredRef.current && !disabledRef.current && !store2.select("open")) {
8812 + store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerEl));
8813 + }
8814 + };
8815 + const openDelay = getOpenDelay();
8816 + if (openDelay === 0) {
8817 + nestedTriggerOpenTimeout.clear();
8818 + open2();
8819 + } else {
8820 + nestedTriggerOpenTimeout.start(openDelay, open2);
8821 + }
8822 + }
8823 + };
8824 + const rootTriggerProps = store2.useState("triggerProps", isMountedByThisTrigger);
8825 + const shouldApplyRootTriggerProps = isMountedByThisTrigger || trackCursorAxis !== "none";
8826 + const state = {
8827 + open: isOpenedByThisTrigger
8828 + };
8829 + const element = useRenderElement("button", componentProps, {
8830 + state,
8831 + ref: [forwardedRef, registerTrigger, triggerElementRef],
8832 + props: [hoverProps, focusProps, shouldApplyRootTriggerProps ? rootTriggerProps : void 0, {
8833 + onMouseOver(event) {
8834 + handleNestedTriggerHover(event.nativeEvent);
8835 + },
8836 + onFocus(event) {
8837 + if (isEnabledNestedTriggerTarget(getTargetElement(event.nativeEvent))) {
8838 + event.preventBaseUIHandler();
8839 + }
8840 + },
8841 + onMouseLeave() {
8842 + isNestedTriggerHoveredRef.current = false;
8843 + nestedTriggerOpenTimeout.clear();
8844 + pointerTypeRef.current = void 0;
8845 + },
8846 + onPointerEnter(event) {
8847 + pointerTypeRef.current = event.pointerType;
8848 + },
8849 + onPointerDown(event) {
8850 + pointerTypeRef.current = event.pointerType;
8851 + store2.set("closeOnClick", closeOnClick);
8852 + if (closeOnClick && !store2.select("open")) {
8853 + store2.cancelPendingOpen(event.nativeEvent);
8854 + }
8855 + },
8856 + onClick(event) {
8857 + if (closeOnClick && !store2.select("open")) {
8858 + store2.cancelPendingOpen(event.nativeEvent);
8859 + }
8860 + },
8861 + id: thisTriggerId,
8862 + [triggerDisabled]: disabled2 ? "" : void 0,
8863 + [TOOLTIP_TRIGGER_IDENTIFIER]: disabled2 ? void 0 : ""
8864 + }, elementProps],
8865 + stateAttributesMapping: triggerOpenStateMapping
8866 + });
8867 + return element;
8868 + });
8869 + if (true) TooltipTrigger.displayName = "TooltipTrigger";
8870 +
8871 + // node_modules/@base-ui/react/tooltip/portal/TooltipPortal.mjs
8872 + var React41 = __toESM(require_react(), 1);
8873 +
8874 + // node_modules/@base-ui/react/tooltip/portal/TooltipPortalContext.mjs
8875 + var React40 = __toESM(require_react(), 1);
8876 + var TooltipPortalContext = /* @__PURE__ */ React40.createContext(void 0);
8877 + if (true) TooltipPortalContext.displayName = "TooltipPortalContext";
8878 + function useTooltipPortalContext() {
8879 + const value = React40.useContext(TooltipPortalContext);
8880 + if (value === void 0) {
8881 + throw new Error(true ? "Base UI: <Tooltip.Portal> is missing." : formatErrorMessage_default(70));
8882 + }
8883 + return value;
8884 + }
8885 +
8886 + // node_modules/@base-ui/react/tooltip/portal/TooltipPortal.mjs
8887 + var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1);
8888 + var TooltipPortal = /* @__PURE__ */ React41.forwardRef(function TooltipPortal2(props, forwardedRef) {
8889 + const {
8890 + keepMounted = false,
8891 + ...portalProps
8892 + } = props;
8893 + const store2 = useTooltipRootContext();
8894 + const mounted = store2.useState("mounted");
8895 + const shouldRender = mounted || keepMounted;
8896 + if (!shouldRender) {
8897 + return null;
8898 + }
8899 + return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TooltipPortalContext.Provider, {
8900 + value: keepMounted,
8901 + children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(FloatingPortalLite, {
8902 + ref: forwardedRef,
8903 + ...portalProps
8904 + })
8905 + });
8906 + });
8907 + if (true) TooltipPortal.displayName = "TooltipPortal";
8908 +
8909 + // node_modules/@base-ui/react/tooltip/positioner/TooltipPositioner.mjs
8910 + var React43 = __toESM(require_react(), 1);
8911 +
8912 + // node_modules/@base-ui/react/tooltip/positioner/TooltipPositionerContext.mjs
8913 + var React42 = __toESM(require_react(), 1);
8914 + var TooltipPositionerContext = /* @__PURE__ */ React42.createContext(void 0);
8915 + if (true) TooltipPositionerContext.displayName = "TooltipPositionerContext";
8916 + function useTooltipPositionerContext() {
8917 + const context = React42.useContext(TooltipPositionerContext);
8918 + if (context === void 0) {
8919 + throw new Error(true ? "Base UI: TooltipPositionerContext is missing. TooltipPositioner parts must be placed within <Tooltip.Positioner>." : formatErrorMessage_default(71));
8920 + }
8921 + return context;
8922 + }
8923 +
8924 + // node_modules/@base-ui/react/tooltip/positioner/TooltipPositioner.mjs
8925 + var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1);
8926 + var TooltipPositioner = /* @__PURE__ */ React43.forwardRef(function TooltipPositioner2(componentProps, forwardedRef) {
8927 + const {
8928 + render,
8929 + className,
8930 + anchor,
8931 + positionMethod = "absolute",
8932 + side = "top",
8933 + align = "center",
8934 + sideOffset = 0,
8935 + alignOffset = 0,
8936 + collisionBoundary = "clipping-ancestors",
8937 + collisionPadding = 5,
8938 + arrowPadding = 5,
8939 + sticky = false,
8940 + disableAnchorTracking = false,
8941 + collisionAvoidance = POPUP_COLLISION_AVOIDANCE,
8942 + style,
8943 + ...elementProps
8944 + } = componentProps;
8945 + const store2 = useTooltipRootContext();
8946 + const keepMounted = useTooltipPortalContext();
8947 + const open2 = store2.useState("open");
8948 + const mounted = store2.useState("mounted");
8949 + const trackCursorAxis = store2.useState("trackCursorAxis");
8950 + const disableHoverablePopup = store2.useState("disableHoverablePopup");
8951 + const floatingRootContext = store2.useState("floatingRootContext");
8952 + const instantType = store2.useState("instantType");
8953 + const transitionStatus = store2.useState("transitionStatus");
8954 + const adaptiveOrigin2 = store2.useState("adaptiveOrigin");
8955 + const positioning = useAnchorPositioning({
8956 + anchor,
8957 + positionMethod,
8958 + floatingRootContext,
8959 + mounted,
8960 + side,
8961 + sideOffset,
8962 + align,
8963 + alignOffset,
8964 + collisionBoundary,
8965 + collisionPadding,
8966 + sticky,
8967 + arrowPadding,
8968 + disableAnchorTracking,
8969 + keepMounted,
8970 + collisionAvoidance,
8971 + adaptiveOrigin: adaptiveOrigin2
8972 + });
8973 + const state = React43.useMemo(() => ({
8974 + open: open2,
8975 + side: positioning.side,
8976 + align: positioning.align,
8977 + anchorHidden: positioning.anchorHidden,
8978 + instant: trackCursorAxis !== "none" ? "tracking-cursor" : instantType
8979 + }), [open2, positioning.side, positioning.align, positioning.anchorHidden, trackCursorAxis, instantType]);
8980 + const element = usePositioner(componentProps, state, {
8981 + styles: positioning.positionerStyles,
8982 + transitionStatus,
8983 + props: elementProps,
8984 + refs: [forwardedRef, store2.useStateSetter("positionerElement")],
8985 + hidden: !mounted,
8986 + inert: !open2 || trackCursorAxis === "both" || disableHoverablePopup
8987 + });
8988 + return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TooltipPositionerContext.Provider, {
8989 + value: positioning,
8990 + children: element
8991 + });
8992 + });
8993 + if (true) TooltipPositioner.displayName = "TooltipPositioner";
8994 +
8995 + // node_modules/@base-ui/react/tooltip/popup/TooltipPopup.mjs
8996 + var React44 = __toESM(require_react(), 1);
8997 + var TooltipPopup = /* @__PURE__ */ React44.forwardRef(function TooltipPopup2(componentProps, forwardedRef) {
8998 + const {
8999 + render,
9000 + className,
9001 + style,
9002 + ...elementProps
9003 + } = componentProps;
9004 + const store2 = useTooltipRootContext();
9005 + const {
9006 + side,
9007 + align
9008 + } = useTooltipPositionerContext();
9009 + const open2 = store2.useState("open");
9010 + const instantType = store2.useState("instantType");
9011 + const transitionStatus = store2.useState("transitionStatus");
9012 + const popupProps = store2.useState("popupProps");
9013 + const floatingContext = store2.useState("floatingRootContext");
9014 + const disabled2 = store2.useState("disabled");
9015 + const closeDelay = store2.useState("closeDelay");
9016 + useOpenChangeComplete({
9017 + open: open2,
9018 + ref: store2.context.popupRef,
9019 + onComplete() {
9020 + if (open2) {
9021 + store2.context.onOpenChangeComplete?.(true);
9022 + }
9023 + }
9024 + });
9025 + useHoverFloatingInteraction(floatingContext, {
9026 + enabled: !disabled2,
9027 + closeDelay
9028 + });
9029 + const setPopupElement = store2.useStateSetter("popupElement");
9030 + const state = {
9031 + open: open2,
9032 + side,
9033 + align,
9034 + instant: instantType,
9035 + transitionStatus
9036 + };
9037 + const element = useRenderElement("div", componentProps, {
9038 + state,
9039 + ref: [forwardedRef, store2.context.popupRef, setPopupElement],
9040 + props: [FOCUSABLE_POPUP_PROPS, popupProps, getDisabledMountTransitionStyles(transitionStatus), elementProps],
9041 + stateAttributesMapping: popupTransitionStateMapping
9042 + });
9043 + return element;
9044 + });
9045 + if (true) TooltipPopup.displayName = "TooltipPopup";
9046 +
9047 + // node_modules/@base-ui/react/tooltip/arrow/TooltipArrow.mjs
9048 + var React45 = __toESM(require_react(), 1);
9049 + var TooltipArrow = /* @__PURE__ */ React45.forwardRef(function TooltipArrow2(componentProps, forwardedRef) {
9050 + const {
9051 + render,
9052 + className,
9053 + style,
9054 + ...elementProps
9055 + } = componentProps;
9056 + const store2 = useTooltipRootContext();
9057 + const {
9058 + arrowRef,
9059 + side,
9060 + align,
9061 + arrowUncentered,
9062 + arrowStyles
9063 + } = useTooltipPositionerContext();
9064 + const open2 = store2.useState("open");
9065 + const instantType = store2.useState("instantType");
9066 + const state = {
9067 + open: open2,
9068 + side,
9069 + align,
9070 + uncentered: arrowUncentered,
9071 + instant: instantType
9072 + };
9073 + const element = useRenderElement("div", componentProps, {
9074 + state,
9075 + ref: [forwardedRef, arrowRef],
9076 + props: [{
9077 + style: arrowStyles,
9078 + "aria-hidden": true
9079 + }, elementProps],
9080 + stateAttributesMapping: popupStateMapping
9081 + });
9082 + return element;
9083 + });
9084 + if (true) TooltipArrow.displayName = "TooltipArrow";
9085 +
9086 + // node_modules/@base-ui/react/tooltip/provider/TooltipProvider.mjs
9087 + var React46 = __toESM(require_react(), 1);
9088 + var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1);
9089 + var TooltipProvider = function TooltipProvider2(props) {
9090 + const {
9091 + delay,
9092 + closeDelay,
9093 + timeout = 400
9094 + } = props;
9095 + const delayValue = React46.useMemo(() => ({
9096 + open: delay,
9097 + close: closeDelay
9098 + }), [delay, closeDelay]);
9099 + return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(TooltipProviderContext.Provider, {
9100 + value: delay,
9101 + children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(FloatingDelayGroup, {
9102 + delay: delayValue,
9103 + timeoutMs: timeout,
9104 + children: props.children
9105 + })
9106 + });
9107 + };
9108 + if (true) TooltipProvider.displayName = "TooltipProvider";
9109 +
9110 + // node_modules/@base-ui/react/tooltip/viewport/TooltipViewport.mjs
9111 + var React47 = __toESM(require_react(), 1);
9112 + var TooltipViewport = /* @__PURE__ */ React47.forwardRef(function TooltipViewport2(componentProps, forwardedRef) {
9113 + const {
9114 + render,
9115 + className,
9116 + style,
9117 + children,
9118 + ...elementProps
9119 + } = componentProps;
9120 + const store2 = useTooltipRootContext();
9121 + const positioner = useTooltipPositionerContext();
9122 + const instantType = store2.useState("instantType");
9123 + const {
9124 + children: childrenToRender,
9125 + state: viewportState
9126 + } = usePopupViewport({
9127 + store: store2,
9128 + side: positioner.side,
9129 + children
9130 + });
9131 + const state = {
9132 + activationDirection: viewportState.activationDirection,
9133 + transitioning: viewportState.transitioning,
9134 + instant: instantType
9135 + };
9136 + return useRenderElement("div", componentProps, {
9137 + state,
9138 + ref: forwardedRef,
9139 + props: [elementProps, {
9140 + children: childrenToRender
9141 + }],
9142 + stateAttributesMapping: popupViewportStateMapping
9143 + });
9144 + });
9145 + if (true) TooltipViewport.displayName = "TooltipViewport";
9146 +
9147 + // node_modules/@base-ui/react/tooltip/store/TooltipHandle.mjs
9148 + var TooltipHandle = class extends BasePopupHandle {
9149 + constructor() {
9150 + super(createNullTooltipStore(), "Tooltip");
9151 + }
9152 + /**
9153 + * Opens the tooltip and associates it with the trigger with the given id.
9154 + *
9155 + * This method should only be called in an event handler or an effect (not during rendering).
9156 + *
9157 + * @param triggerId ID of the trigger to associate with the tooltip. The trigger must be a matching
9158 + * `Tooltip.Trigger` with this handle passed as a prop.
9159 + */
9160 + open(triggerId) {
9161 + this.openByTrigger(triggerId);
9162 + }
9163 + /**
9164 + * Closes the tooltip.
9165 + *
9166 + * This method should only be called in an event handler or an effect (not during rendering).
9167 + */
9168 + close() {
9169 + this.closePopup();
9170 + }
9171 + /**
9172 + * Whether the tooltip is currently open. Returns `false` while no root is attached to the handle.
9173 + */
9174 + get isOpen() {
9175 + return this.attachedStore?.select("open") ?? false;
9176 + }
9177 + };
9178 + function createTooltipHandle() {
9179 + return new TooltipHandle();
9180 + }
9181 +
9182 + // node_modules/@base-ui/react/use-render/useRender.mjs
1229 9183 function useRender(params) {
1230 9184 return useRenderElement(params.defaultTagName ?? "div", params, params);
1231 9185 }
1232 9186
9187 + // packages/ui/build-module/tooltip/index.mjs
9188 + var tooltip_exports = {};
9189 + __export(tooltip_exports, {
9190 + Popup: () => Popup,
9191 + Portal: () => Portal,
9192 + Positioner: () => Positioner,
9193 + Provider: () => Provider,
9194 + Root: () => Root,
9195 + Trigger: () => Trigger
9196 + });
9197 +
9198 + // packages/ui/build-module/tooltip/popup.mjs
9199 + var import_element14 = __toESM(require_element(), 1);
9200 +
9201 + // packages/ui/build-module/tooltip/portal.mjs
9202 + var import_element11 = __toESM(require_element(), 1);
9203 +
9204 + // packages/ui/build-module/utils/wp-compat-overlay-slot.mjs
9205 + var STYLE_HASH_ATTRIBUTE = "data-wp-hash";
9206 + function getRuntime() {
9207 + const globalScope = globalThis;
9208 + if (globalScope.__wpStyleRuntime) {
9209 + return globalScope.__wpStyleRuntime;
9210 + }
9211 + globalScope.__wpStyleRuntime = {
9212 + documents: /* @__PURE__ */ new Map(),
9213 + styles: /* @__PURE__ */ new Map(),
9214 + injectedStyles: /* @__PURE__ */ new WeakMap()
9215 + };
9216 + if (typeof document !== "undefined") {
9217 + registerDocument(document);
9218 + }
9219 + return globalScope.__wpStyleRuntime;
9220 + }
9221 + function documentContainsStyleHash(targetDocument, hash) {
9222 + if (!targetDocument.head) {
9223 + return false;
9224 + }
9225 + for (const style of targetDocument.head.querySelectorAll(
9226 + `style[${STYLE_HASH_ATTRIBUTE}]`
9227 + )) {
9228 + if (style.getAttribute(STYLE_HASH_ATTRIBUTE) === hash) {
9229 + return true;
9230 + }
9231 + }
9232 + return false;
9233 + }
9234 + function injectStyle(targetDocument, hash, css) {
9235 + if (!targetDocument.head) {
9236 + return;
9237 + }
9238 + const runtime = getRuntime();
9239 + let injectedStyles = runtime.injectedStyles.get(targetDocument);
9240 + if (!injectedStyles) {
9241 + injectedStyles = /* @__PURE__ */ new Set();
9242 + runtime.injectedStyles.set(targetDocument, injectedStyles);
9243 + }
9244 + if (injectedStyles.has(hash)) {
9245 + return;
9246 + }
9247 + if (documentContainsStyleHash(targetDocument, hash)) {
9248 + injectedStyles.add(hash);
9249 + return;
9250 + }
9251 + const style = targetDocument.createElement("style");
9252 + style.setAttribute(STYLE_HASH_ATTRIBUTE, hash);
9253 + style.appendChild(targetDocument.createTextNode(css));
9254 + targetDocument.head.appendChild(style);
9255 + injectedStyles.add(hash);
9256 + }
9257 + function registerDocument(targetDocument) {
9258 + const runtime = getRuntime();
9259 + runtime.documents.set(
9260 + targetDocument,
9261 + (runtime.documents.get(targetDocument) ?? 0) + 1
9262 + );
9263 + for (const [hash, css] of runtime.styles) {
9264 + injectStyle(targetDocument, hash, css);
9265 + }
9266 + return () => {
9267 + const count = runtime.documents.get(targetDocument);
9268 + if (count === void 0) {
9269 + return;
9270 + }
9271 + if (count <= 1) {
9272 + runtime.documents.delete(targetDocument);
9273 + return;
9274 + }
9275 + runtime.documents.set(targetDocument, count - 1);
9276 + };
9277 + }
9278 + function registerStyle(hash, css) {
9279 + const runtime = getRuntime();
9280 + runtime.styles.set(hash, css);
9281 + for (const targetDocument of runtime.documents.keys()) {
9282 + injectStyle(targetDocument, hash, css);
9283 + }
9284 + }
9285 + if (typeof process === "undefined" || true) {
9286 + registerStyle("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}}}");
9287 + }
9288 + var wp_compat_overlay_slot_default = { "slot": "_11fc52b637ff8a7e__slot" };
9289 + var WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE = "data-wp-compat-overlay-slot";
9290 + function resolveOwnerDocument() {
9291 + return typeof document === "undefined" ? null : document;
9292 + }
9293 + function isInWordPressEnvironment() {
9294 + let topWp;
9295 + try {
9296 + topWp = window.top?.wp;
9297 + } catch {
9298 + }
9299 + const wp = topWp ?? window.wp;
9300 + return typeof wp?.components === "object" && wp.components !== null;
9301 + }
9302 + var cachedSlot = null;
9303 + function ensureSlotIsAccessible(element) {
9304 + element.setAttribute("aria-hidden", "false");
9305 + return element;
9306 + }
9307 + function createSlot(ownerDocument2) {
9308 + const element = ownerDocument2.createElement("div");
9309 + element.setAttribute(WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE, "");
9310 + if (wp_compat_overlay_slot_default.slot) {
9311 + element.classList.add(wp_compat_overlay_slot_default.slot);
9312 + }
9313 + ownerDocument2.body.appendChild(element);
9314 + return element;
9315 + }
9316 + function getWpCompatOverlaySlot() {
9317 + if (typeof window === "undefined") {
9318 + return void 0;
9319 + }
9320 + if (!isInWordPressEnvironment() && window.__wpUiCompatOverlaySlotEnabled !== true) {
9321 + return void 0;
9322 + }
9323 + const ownerDocument2 = resolveOwnerDocument();
9324 + if (!ownerDocument2 || !ownerDocument2.body) {
9325 + return void 0;
9326 + }
9327 + if (cachedSlot && cachedSlot.ownerDocument === ownerDocument2 && cachedSlot.isConnected) {
9328 + return ensureSlotIsAccessible(cachedSlot);
9329 + }
9330 + const existing = ownerDocument2.querySelector(
9331 + `[${WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE}]`
9332 + );
9333 + if (existing instanceof HTMLDivElement) {
9334 + cachedSlot = ensureSlotIsAccessible(existing);
9335 + return cachedSlot;
9336 + }
9337 + if (cachedSlot?.isConnected) {
9338 + cachedSlot.remove();
9339 + }
9340 + cachedSlot = ensureSlotIsAccessible(createSlot(ownerDocument2));
9341 + return cachedSlot;
9342 + }
9343 +
9344 + // packages/ui/build-module/tooltip/portal.mjs
9345 + var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1);
9346 + var Portal = (0, import_element11.forwardRef)(
9347 + function TooltipPortal3({ container, ...restProps }, ref) {
9348 + return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
9349 + index_parts_exports.Portal,
9350 + {
9351 + container: container ?? getWpCompatOverlaySlot(),
9352 + ...restProps,
9353 + ref
9354 + }
9355 + );
9356 + }
9357 + );
9358 +
9359 + // packages/ui/build-module/tooltip/positioner.mjs
9360 + var import_element12 = __toESM(require_element(), 1);
9361 + var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1);
9362 + var STYLE_HASH_ATTRIBUTE2 = "data-wp-hash";
9363 + function getRuntime2() {
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 + registerDocument2(document);
9375 + }
9376 + return globalScope.__wpStyleRuntime;
9377 + }
9378 + function documentContainsStyleHash2(targetDocument, hash) {
9379 + if (!targetDocument.head) {
9380 + return false;
9381 + }
9382 + for (const style of targetDocument.head.querySelectorAll(
9383 + `style[${STYLE_HASH_ATTRIBUTE2}]`
9384 + )) {
9385 + if (style.getAttribute(STYLE_HASH_ATTRIBUTE2) === hash) {
9386 + return true;
9387 + }
9388 + }
9389 + return false;
9390 + }
9391 + function injectStyle2(targetDocument, hash, css) {
9392 + if (!targetDocument.head) {
9393 + return;
9394 + }
9395 + const runtime = getRuntime2();
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 (documentContainsStyleHash2(targetDocument, hash)) {
9405 + injectedStyles.add(hash);
9406 + return;
9407 + }
9408 + const style = targetDocument.createElement("style");
9409 + style.setAttribute(STYLE_HASH_ATTRIBUTE2, hash);
9410 + style.appendChild(targetDocument.createTextNode(css));
9411 + targetDocument.head.appendChild(style);
9412 + injectedStyles.add(hash);
9413 + }
9414 + function registerDocument2(targetDocument) {
9415 + const runtime = getRuntime2();
9416 + runtime.documents.set(
9417 + targetDocument,
9418 + (runtime.documents.get(targetDocument) ?? 0) + 1
9419 + );
9420 + for (const [hash, css] of runtime.styles) {
9421 + injectStyle2(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 registerStyle2(hash, css) {
9436 + const runtime = getRuntime2();
9437 + runtime.styles.set(hash, css);
9438 + for (const targetDocument of runtime.documents.keys()) {
9439 + injectStyle2(targetDocument, hash, css);
9440 + }
9441 + }
9442 + if (typeof process === "undefined" || true) {
9443 + registerStyle2("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}");
9444 + }
9445 + var resets_default = { "box-sizing": "_336cd3e4e743482f__box-sizing" };
9446 + if (typeof process === "undefined" || true) {
9447 + registerStyle2("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}}}}');
9448 + }
9449 + var style_default = { "positioner": "_480b748dd3510e64__positioner", "popup": "_50096b232db7709d__popup" };
9450 + var Positioner = (0, import_element12.forwardRef)(
9451 + function TooltipPositioner3({ align = "center", className, side = "top", sideOffset = 4, ...props }, ref) {
9452 + return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
9453 + index_parts_exports.Positioner,
9454 + {
9455 + ref,
9456 + align,
9457 + side,
9458 + sideOffset,
9459 + ...props,
9460 + className: clsx_default(
9461 + resets_default["box-sizing"],
9462 + style_default.positioner,
9463 + className
9464 + )
9465 + }
9466 + );
9467 + }
9468 + );
9469 +
9470 + // packages/ui/build-module/utils/render-slot-with-children.mjs
9471 + var import_element13 = __toESM(require_element(), 1);
9472 + function renderSlotWithChildren(slot, defaultSlot, children) {
9473 + return (0, import_element13.cloneElement)(slot ?? defaultSlot, { children });
9474 + }
9475 +
9476 + // packages/ui/build-module/utils/theme-provider.mjs
9477 + var theme = __toESM(require_theme(), 1);
9478 +
9479 + // packages/ui/build-module/lock-unlock.mjs
9480 + var import_private_apis = __toESM(require_private_apis(), 1);
9481 + var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(
9482 + "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
9483 + "@wordpress/ui"
9484 + );
9485 +
9486 + // packages/ui/build-module/utils/theme-provider.mjs
9487 + function getThemeProvider() {
9488 + const themePackage = theme;
9489 + if (themePackage.ThemeProvider) {
9490 + return themePackage.ThemeProvider;
9491 + }
9492 + if (!themePackage.privateApis) {
9493 + throw new Error(
9494 + "@wordpress/ui: @wordpress/theme must expose `ThemeProvider` or `privateApis.ThemeProvider`."
9495 + );
9496 + }
9497 + return unlock(
9498 + themePackage.privateApis
9499 + ).ThemeProvider;
9500 + }
9501 + var ThemeProvider = getThemeProvider();
9502 +
9503 + // packages/ui/build-module/tooltip/popup.mjs
9504 + var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1);
9505 + var STYLE_HASH_ATTRIBUTE3 = "data-wp-hash";
9506 + function getRuntime3() {
9507 + const globalScope = globalThis;
9508 + if (globalScope.__wpStyleRuntime) {
9509 + return globalScope.__wpStyleRuntime;
9510 + }
9511 + globalScope.__wpStyleRuntime = {
9512 + documents: /* @__PURE__ */ new Map(),
9513 + styles: /* @__PURE__ */ new Map(),
9514 + injectedStyles: /* @__PURE__ */ new WeakMap()
9515 + };
9516 + if (typeof document !== "undefined") {
9517 + registerDocument3(document);
9518 + }
9519 + return globalScope.__wpStyleRuntime;
9520 + }
9521 + function documentContainsStyleHash3(targetDocument, hash) {
9522 + if (!targetDocument.head) {
9523 + return false;
9524 + }
9525 + for (const style of targetDocument.head.querySelectorAll(
9526 + `style[${STYLE_HASH_ATTRIBUTE3}]`
9527 + )) {
9528 + if (style.getAttribute(STYLE_HASH_ATTRIBUTE3) === hash) {
9529 + return true;
9530 + }
9531 + }
9532 + return false;
9533 + }
9534 + function injectStyle3(targetDocument, hash, css) {
9535 + if (!targetDocument.head) {
9536 + return;
9537 + }
9538 + const runtime = getRuntime3();
9539 + let injectedStyles = runtime.injectedStyles.get(targetDocument);
9540 + if (!injectedStyles) {
9541 + injectedStyles = /* @__PURE__ */ new Set();
9542 + runtime.injectedStyles.set(targetDocument, injectedStyles);
9543 + }
9544 + if (injectedStyles.has(hash)) {
9545 + return;
9546 + }
9547 + if (documentContainsStyleHash3(targetDocument, hash)) {
9548 + injectedStyles.add(hash);
9549 + return;
9550 + }
9551 + const style = targetDocument.createElement("style");
9552 + style.setAttribute(STYLE_HASH_ATTRIBUTE3, hash);
9553 + style.appendChild(targetDocument.createTextNode(css));
9554 + targetDocument.head.appendChild(style);
9555 + injectedStyles.add(hash);
9556 + }
9557 + function registerDocument3(targetDocument) {
9558 + const runtime = getRuntime3();
9559 + runtime.documents.set(
9560 + targetDocument,
9561 + (runtime.documents.get(targetDocument) ?? 0) + 1
9562 + );
9563 + for (const [hash, css] of runtime.styles) {
9564 + injectStyle3(targetDocument, hash, css);
9565 + }
9566 + return () => {
9567 + const count = runtime.documents.get(targetDocument);
9568 + if (count === void 0) {
9569 + return;
9570 + }
9571 + if (count <= 1) {
9572 + runtime.documents.delete(targetDocument);
9573 + return;
9574 + }
9575 + runtime.documents.set(targetDocument, count - 1);
9576 + };
9577 + }
9578 + function registerStyle3(hash, css) {
9579 + const runtime = getRuntime3();
9580 + runtime.styles.set(hash, css);
9581 + for (const targetDocument of runtime.documents.keys()) {
9582 + injectStyle3(targetDocument, hash, css);
9583 + }
9584 + }
9585 + if (typeof process === "undefined" || true) {
9586 + 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}}}}');
9587 + }
9588 + var style_default2 = { "positioner": "_480b748dd3510e64__positioner", "popup": "_50096b232db7709d__popup" };
9589 + var POPUP_COLOR = { background: "#1e1e1e" };
9590 + var Popup = (0, import_element14.forwardRef)(function TooltipPopup3({ portal, positioner, children, className, ...props }, ref) {
9591 + const popupContent = /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ThemeProvider, { color: POPUP_COLOR, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
9592 + index_parts_exports.Popup,
9593 + {
9594 + ref,
9595 + className: clsx_default(style_default2.popup, className),
9596 + ...props,
9597 + children
9598 + }
9599 + ) });
9600 + const positionedPopup = renderSlotWithChildren(
9601 + positioner,
9602 + /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Positioner, {}),
9603 + popupContent
9604 + );
9605 + return renderSlotWithChildren(portal, /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Portal, {}), positionedPopup);
9606 + });
9607 +
9608 + // packages/ui/build-module/tooltip/trigger.mjs
9609 + var import_element15 = __toESM(require_element(), 1);
9610 + var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1);
9611 + var Trigger = (0, import_element15.forwardRef)(
9612 + function TooltipTrigger3(props, ref) {
9613 + return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(index_parts_exports.Trigger, { ref, ...props });
9614 + }
9615 + );
9616 +
9617 + // packages/ui/build-module/utils/direction-provider.mjs
9618 + var import_i18n2 = __toESM(require_i18n(), 1);
9619 + var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1);
9620 + function DirectionProvider3({ children }) {
9621 + return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(DirectionProvider, { direction: (0, import_i18n2.isRTL)() ? "rtl" : "ltr", children });
9622 + }
9623 +
9624 + // packages/ui/build-module/tooltip/root.mjs
9625 + var import_jsx_runtime17 = __toESM(require_jsx_runtime(), 1);
9626 + function Root(props) {
9627 + return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(DirectionProvider3, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(index_parts_exports.Root, { ...props }) });
9628 + }
9629 +
9630 + // packages/ui/build-module/tooltip/provider.mjs
9631 + var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1);
9632 + function Provider({ ...props }) {
9633 + return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(index_parts_exports.Provider, { ...props });
9634 + }
9635 +
1233 9636 // packages/icons/build-module/icon/index.mjs
1234 - var import_element2 = __toESM(require_element(), 1);
1235 - var icon_default = (0, import_element2.forwardRef)(
1236 - ({ icon, size = 24, ...props }, ref) => {
1237 - return (0, import_element2.cloneElement)(icon, {
1238 - width: size,
1239 - height: size,
9637 + var import_element16 = __toESM(require_element(), 1);
9638 + var icon_default = (0, import_element16.forwardRef)(
9639 + ({ icon, size: size4 = 24, style, ...props }, ref) => {
9640 + const intrinsicStyle = icon.props.style;
9641 + const mergedStyle = intrinsicStyle || style ? { ...intrinsicStyle, ...style } : void 0;
9642 + return (0, import_element16.cloneElement)(icon, {
9643 + width: size4,
9644 + height: size4,
1240 9645 ...props,
9646 + // Merge styles so the icon's intrinsic style (e.g. `fill: none` on
9647 + // stroke-based icons) is preserved unless the consumer overrides
9648 + // the same property explicitly.
9649 + ...mergedStyle ? { style: mergedStyle } : {},
1241 9650 ref
1242 9651 });
1243 9652 }
1244 9653 );
@@ -1244,37 +9653,117 @@
1244 9653 );
1245 9654
1246 9655 // packages/icons/build-module/library/star-empty.mjs
1247 9656 var import_primitives = __toESM(require_primitives(), 1);
1248 - var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
1249 - var star_empty_default = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M9.706 8.646a.25.25 0 01-.188.137l-4.626.672a.25.25 0 00-.139.427l3.348 3.262a.25.25 0 01.072.222l-.79 4.607a.25.25 0 00.362.264l4.138-2.176a.25.25 0 01.233 0l4.137 2.175a.25.25 0 00.363-.263l-.79-4.607a.25.25 0 01.072-.222l3.347-3.262a.25.25 0 00-.139-.427l-4.626-.672a.25.25 0 01-.188-.137l-2.069-4.192a.25.25 0 00-.448 0L9.706 8.646zM12 7.39l-.948 1.921a1.75 1.75 0 01-1.317.957l-2.12.308 1.534 1.495c.412.402.6.982.503 1.55l-.362 2.11 1.896-.997a1.75 1.75 0 011.629 0l1.895.997-.362-2.11a1.75 1.75 0 01.504-1.55l1.533-1.495-2.12-.308a1.75 1.75 0 01-1.317-.957L12 7.39z" }) });
9657 + var import_jsx_runtime19 = __toESM(require_jsx_runtime(), 1);
9658 + var star_empty_default = /* @__PURE__ */ (0, import_jsx_runtime19.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_runtime19.jsx)(import_primitives.Path, { d: "M12 5.71576L13.6106 8.97924C13.7563 9.27438 14.0379 9.47895 14.3636 9.52628L17.965 10.0496L15.359 12.5899C15.1233 12.8196 15.0157 13.1506 15.0714 13.475L15.6866 17.0619L12.4653 15.3684C12.174 15.2152 11.826 15.2152 11.5347 15.3684L8.31341 17.0619L8.92861 13.475C8.98425 13.1506 8.8767 12.8196 8.64102 12.5899L6.03497 10.0496L9.63644 9.52628C9.96215 9.47895 10.2437 9.27438 10.3894 8.97924L12 5.71576Z", vectorEffect: "non-scaling-stroke" }) });
1250 9659
1251 9660 // packages/icons/build-module/library/star-filled.mjs
1252 9661 var import_primitives2 = __toESM(require_primitives(), 1);
1253 - var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1);
1254 - var star_filled_default = /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.Path, { d: "M11.776 4.454a.25.25 0 01.448 0l2.069 4.192a.25.25 0 00.188.137l4.626.672a.25.25 0 01.139.426l-3.348 3.263a.25.25 0 00-.072.222l.79 4.607a.25.25 0 01-.362.263l-4.138-2.175a.25.25 0 00-.232 0l-4.138 2.175a.25.25 0 01-.363-.263l.79-4.607a.25.25 0 00-.071-.222L4.754 9.881a.25.25 0 01.139-.426l4.626-.672a.25.25 0 00.188-.137l2.069-4.192z" }) });
9662 + var import_jsx_runtime20 = __toESM(require_jsx_runtime(), 1);
9663 + var star_filled_default = /* @__PURE__ */ (0, import_jsx_runtime20.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_runtime20.jsx)(import_primitives2.Path, { d: "M12 5.71576L13.6106 8.97924C13.7563 9.27438 14.0379 9.47895 14.3636 9.52628L17.965 10.0496L15.359 12.5899C15.1233 12.8196 15.0157 13.1506 15.0714 13.475L15.6866 17.0619L12.4653 15.3684C12.174 15.2152 11.826 15.2152 11.5347 15.3684L8.31341 17.0619L8.92861 13.475C8.98425 13.1506 8.8767 12.8196 8.64102 12.5899L6.03497 10.0496L9.63644 9.52628C9.96215 9.47895 10.2437 9.27438 10.3894 8.97924L12 5.71576Z", fill: "currentColor", vectorEffect: "non-scaling-stroke" }) });
1255 9664
1256 9665 // packages/icons/build-module/library/star-half.mjs
1257 9666 var import_primitives3 = __toESM(require_primitives(), 1);
1258 - var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1);
1259 - var star_half_default = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.Path, { d: "M9.518 8.783a.25.25 0 00.188-.137l2.069-4.192a.25.25 0 01.448 0l2.07 4.192a.25.25 0 00.187.137l4.626.672a.25.25 0 01.139.427l-3.347 3.262a.25.25 0 00-.072.222l.79 4.607a.25.25 0 01-.363.264l-4.137-2.176a.25.25 0 00-.233 0l-4.138 2.175a.25.25 0 01-.362-.263l.79-4.607a.25.25 0 00-.072-.222L4.753 9.882a.25.25 0 01.14-.427l4.625-.672zM12 14.533c.28 0 .559.067.814.2l1.895.997-.362-2.11a1.75 1.75 0 01.504-1.55l1.533-1.495-2.12-.308a1.75 1.75 0 01-1.317-.957L12 7.39v7.143z" }) });
9667 + var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1);
9668 + var star_half_default = /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: [
9669 + /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives3.Path, { d: "M12 5.71576L13.6106 8.97924C13.7563 9.27438 14.0379 9.47895 14.3636 9.52628L17.965 10.0496L15.359 12.5899C15.1233 12.8196 15.0157 13.1506 15.0714 13.475L15.6866 17.0619L12.4653 15.3684C12.174 15.2152 11.826 15.2152 11.5347 15.3684L8.31341 17.0619L8.92861 13.475C8.98425 13.1506 8.8767 12.8196 8.64102 12.5899L6.03497 10.0496L9.63644 9.52628C9.96215 9.47895 10.2437 9.27438 10.3894 8.97924L12 5.71576Z", vectorEffect: "non-scaling-stroke" }),
9670 + /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives3.Path, { d: "M11.4653 15.4048C11.7941 15.232 12 14.8912 12 14.5197V5.71576L10.3894 8.97924C10.2437 9.27438 9.96215 9.47895 9.63644 9.52628L6.03497 10.0496L8.64102 12.5899C8.8767 12.8196 8.98425 13.1506 8.92861 13.475L8.31341 17.0619L11.4653 15.4048Z", fill: "currentColor", stroke: "none" })
9671 + ] });
1260 9672
1261 9673 // packages/ui/build-module/visually-hidden/visually-hidden.mjs
1262 - var import_element3 = __toESM(require_element(), 1);
1263 - if (typeof document !== "undefined" && true && !document.head.querySelector("style[data-wp-hash='c46e8cb841']")) {
1264 - const style = document.createElement("style");
1265 - style.setAttribute("data-wp-hash", "c46e8cb841");
1266 - style.appendChild(document.createTextNode("@layer wp-ui-utilities, wp-ui-components, wp-ui-compositions, wp-ui-overrides;@layer wp-ui-components{.f37b9e2e191ebd66__visually-hidden{word-wrap:normal;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal}}"));
1267 - document.head.appendChild(style);
9674 + var import_element17 = __toESM(require_element(), 1);
9675 + var STYLE_HASH_ATTRIBUTE4 = "data-wp-hash";
9676 + function getRuntime4() {
9677 + const globalScope = globalThis;
9678 + if (globalScope.__wpStyleRuntime) {
9679 + return globalScope.__wpStyleRuntime;
9680 + }
9681 + globalScope.__wpStyleRuntime = {
9682 + documents: /* @__PURE__ */ new Map(),
9683 + styles: /* @__PURE__ */ new Map(),
9684 + injectedStyles: /* @__PURE__ */ new WeakMap()
9685 + };
9686 + if (typeof document !== "undefined") {
9687 + registerDocument4(document);
9688 + }
9689 + return globalScope.__wpStyleRuntime;
1268 9690 }
1269 - var style_default = { "visually-hidden": "f37b9e2e191ebd66__visually-hidden" };
1270 - var VisuallyHidden = (0, import_element3.forwardRef)(
9691 + function documentContainsStyleHash4(targetDocument, hash) {
9692 + if (!targetDocument.head) {
9693 + return false;
9694 + }
9695 + for (const style of targetDocument.head.querySelectorAll(
9696 + `style[${STYLE_HASH_ATTRIBUTE4}]`
9697 + )) {
9698 + if (style.getAttribute(STYLE_HASH_ATTRIBUTE4) === hash) {
9699 + return true;
9700 + }
9701 + }
9702 + return false;
9703 + }
9704 + function injectStyle4(targetDocument, hash, css) {
9705 + if (!targetDocument.head) {
9706 + return;
9707 + }
9708 + const runtime = getRuntime4();
9709 + let injectedStyles = runtime.injectedStyles.get(targetDocument);
9710 + if (!injectedStyles) {
9711 + injectedStyles = /* @__PURE__ */ new Set();
9712 + runtime.injectedStyles.set(targetDocument, injectedStyles);
9713 + }
9714 + if (injectedStyles.has(hash)) {
9715 + return;
9716 + }
9717 + if (documentContainsStyleHash4(targetDocument, hash)) {
9718 + injectedStyles.add(hash);
9719 + return;
9720 + }
9721 + const style = targetDocument.createElement("style");
9722 + style.setAttribute(STYLE_HASH_ATTRIBUTE4, hash);
9723 + style.appendChild(targetDocument.createTextNode(css));
9724 + targetDocument.head.appendChild(style);
9725 + injectedStyles.add(hash);
9726 + }
9727 + function registerDocument4(targetDocument) {
9728 + const runtime = getRuntime4();
9729 + runtime.documents.set(
9730 + targetDocument,
9731 + (runtime.documents.get(targetDocument) ?? 0) + 1
9732 + );
9733 + for (const [hash, css] of runtime.styles) {
9734 + injectStyle4(targetDocument, hash, css);
9735 + }
9736 + return () => {
9737 + const count = runtime.documents.get(targetDocument);
9738 + if (count === void 0) {
9739 + return;
9740 + }
9741 + if (count <= 1) {
9742 + runtime.documents.delete(targetDocument);
9743 + return;
9744 + }
9745 + runtime.documents.set(targetDocument, count - 1);
9746 + };
9747 + }
9748 + function registerStyle4(hash, css) {
9749 + const runtime = getRuntime4();
9750 + runtime.styles.set(hash, css);
9751 + for (const targetDocument of runtime.documents.keys()) {
9752 + injectStyle4(targetDocument, hash, css);
9753 + }
9754 + }
9755 + if (typeof process === "undefined" || true) {
9756 + registerStyle4("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}}}");
9757 + }
9758 + var style_default3 = { "visually-hidden": "f37b9e2e191ebd66__visually-hidden" };
9759 + var VisuallyHidden = (0, import_element17.forwardRef)(
1271 9760 function VisuallyHidden2({ render, ...restProps }, ref) {
1272 9761 const element = useRender({
1273 9762 render,
1274 9763 ref,
1275 9764 props: mergeProps(
1276 - { className: style_default["visually-hidden"] },
9765 + { className: style_default3["visually-hidden"] },
1277 9766 restProps,
1278 9767 {
1279 9768 // @ts-expect-error Arbitrary data-* attributes aren't indexable on the typed div props. Kept hardcoded so consumers can't change or remove it.
1280 9769 "data-visually-hidden": ""
@@ -1285,25 +9774,25 @@
1285 9774 }
1286 9775 );
1287 9776
1288 9777 // packages/block-directory/build-module/components/block-ratings/stars.mjs
1289 - var import_i18n2 = __toESM(require_i18n(), 1);
1290 - var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1);
9778 + var import_i18n3 = __toESM(require_i18n(), 1);
9779 + var import_jsx_runtime22 = __toESM(require_jsx_runtime(), 1);
1291 9780 function Stars({ rating }) {
1292 9781 const stars = Math.round(rating / 0.5) * 0.5;
1293 9782 const fullStarCount = Math.floor(rating);
1294 9783 const halfStarCount = Math.ceil(rating - fullStarCount);
1295 9784 const emptyStarCount = 5 - (fullStarCount + halfStarCount);
1296 - return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
9785 + return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
1297 9786 "span",
1298 9787 {
1299 - "aria-label": (0, import_i18n2.sprintf)(
9788 + "aria-label": (0, import_i18n3.sprintf)(
1300 9789 /* translators: %s: number of stars. */
1301 - (0, import_i18n2.__)("%s out of 5 stars"),
9790 + (0, import_i18n3.__)("%s out of 5 stars"),
1302 9791 stars
1303 9792 ),
1304 9793 children: [
1305 - Array.from({ length: fullStarCount }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9794 + Array.from({ length: fullStarCount }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1306 9795 icon_default,
1307 9796 {
1308 9797 className: "block-directory-block-ratings__star-full",
1309 9798 icon: star_filled_default,
@@ -1310,9 +9799,9 @@
1310 9799 size: 16
1311 9800 },
1312 9801 `full_stars_${i}`
1313 9802 )),
1314 - Array.from({ length: halfStarCount }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9803 + Array.from({ length: halfStarCount }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1315 9804 icon_default,
1316 9805 {
1317 9806 className: "block-directory-block-ratings__star-half-full",
1318 9807 icon: star_half_default,
@@ -1319,9 +9808,9 @@
1319 9808 size: 16
1320 9809 },
1321 9810 `half_stars_${i}`
1322 9811 )),
1323 - Array.from({ length: emptyStarCount }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9812 + Array.from({ length: emptyStarCount }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1324 9813 icon_default,
1325 9814 {
1326 9815 className: "block-directory-block-ratings__star-empty",
1327 9816 icon: star_empty_default,
@@ -1335,25 +9824,25 @@
1335 9824 }
1336 9825 var stars_default = Stars;
1337 9826
1338 9827 // packages/block-directory/build-module/components/block-ratings/index.mjs
1339 - var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1);
1340 - var BlockRatings = ({ rating }) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "block-directory-block-ratings", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(stars_default, { rating }) });
9828 + var import_jsx_runtime23 = __toESM(require_jsx_runtime(), 1);
9829 + var BlockRatings = ({ rating }) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "block-directory-block-ratings", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(stars_default, { rating }) });
1341 9830 var block_ratings_default = BlockRatings;
1342 9831
1343 9832 // packages/block-directory/build-module/components/downloadable-block-icon/index.mjs
1344 9833 var import_block_editor2 = __toESM(require_block_editor(), 1);
1345 - var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1);
9834 + var import_jsx_runtime24 = __toESM(require_jsx_runtime(), 1);
1346 9835 function DownloadableBlockIcon({ icon }) {
1347 9836 const className = "block-directory-downloadable-block-icon";
1348 - return icon.match(/\.(jpeg|jpg|gif|png|svg)(?:\?.*)?$/) !== null ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("img", { className, src: icon, alt: "" }) : /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_block_editor2.BlockIcon, { className, icon, showColors: true });
9837 + return icon.match(/\.(jpeg|jpg|gif|png|svg)(?:\?.*)?$/) !== null ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("img", { className, src: icon, alt: "" }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_block_editor2.BlockIcon, { className, icon, showColors: true });
1349 9838 }
1350 9839 var downloadable_block_icon_default = DownloadableBlockIcon;
1351 9840
1352 9841 // packages/block-directory/build-module/components/downloadable-block-notice/index.mjs
1353 - var import_i18n3 = __toESM(require_i18n(), 1);
9842 + var import_i18n4 = __toESM(require_i18n(), 1);
1354 9843 var import_data5 = __toESM(require_data(), 1);
1355 - var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1);
9844 + var import_jsx_runtime25 = __toESM(require_jsx_runtime(), 1);
1356 9845 var DownloadableBlockNotice = ({ block }) => {
1357 9846 const errorNotice = (0, import_data5.useSelect)(
1358 9847 (select) => select(store).getErrorNoticeForBlock(block.id),
1359 9848 [block]
@@ -1360,34 +9849,50 @@
1360 9849 );
1361 9850 if (!errorNotice) {
1362 9851 return null;
1363 9852 }
1364 - return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "block-directory-downloadable-block-notice", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "block-directory-downloadable-block-notice__content", children: [
9853 + return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "block-directory-downloadable-block-notice", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "block-directory-downloadable-block-notice__content", children: [
1365 9854 errorNotice.message,
1366 - errorNotice.isFatal ? " " + (0, import_i18n3.__)("Try reloading the page.") : null
9855 + errorNotice.isFatal ? " " + (0, import_i18n4.__)("Try reloading the page.") : null
1367 9856 ] }) });
1368 9857 };
1369 9858 var downloadable_block_notice_default = DownloadableBlockNotice;
1370 9859
1371 9860 // packages/block-directory/build-module/components/downloadable-block-list-item/index.mjs
1372 - var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1);
9861 + var import_jsx_runtime26 = __toESM(require_jsx_runtime(), 1);
1373 9862 function getDownloadableBlockLabel({ title, rating, ratingCount }, { hasNotice, isInstalled, isInstalling: isInstalling2 }) {
1374 9863 const stars = Math.round(rating / 0.5) * 0.5;
1375 9864 if (!isInstalled && hasNotice) {
1376 - return (0, import_i18n4.sprintf)("Retry installing %s.", (0, import_html_entities.decodeEntities)(title));
9865 + return (0, import_i18n5.sprintf)(
9866 + /* translators: %s: block title */
9867 + (0, import_i18n5.__)("Retry installing %s."),
9868 + (0, import_html_entities.decodeEntities)(title)
9869 + );
1377 9870 }
1378 9871 if (isInstalled) {
1379 - return (0, import_i18n4.sprintf)("Add %s.", (0, import_html_entities.decodeEntities)(title));
9872 + return (0, import_i18n5.sprintf)(
9873 + /* translators: %s: block title */
9874 + (0, import_i18n5.__)("Add %s."),
9875 + (0, import_html_entities.decodeEntities)(title)
9876 + );
1380 9877 }
1381 9878 if (isInstalling2) {
1382 - return (0, import_i18n4.sprintf)("Installing %s.", (0, import_html_entities.decodeEntities)(title));
9879 + return (0, import_i18n5.sprintf)(
9880 + /* translators: %s: block title */
9881 + (0, import_i18n5.__)("Installing %s."),
9882 + (0, import_html_entities.decodeEntities)(title)
9883 + );
1383 9884 }
1384 9885 if (ratingCount < 1) {
1385 - return (0, import_i18n4.sprintf)("Install %s.", (0, import_html_entities.decodeEntities)(title));
9886 + return (0, import_i18n5.sprintf)(
9887 + /* translators: %s: block title */
9888 + (0, import_i18n5.__)("Install %s."),
9889 + (0, import_html_entities.decodeEntities)(title)
9890 + );
1386 9891 }
1387 - return (0, import_i18n4.sprintf)(
9892 + return (0, import_i18n5.sprintf)(
1388 9893 /* translators: 1: block title, 2: average rating, 3: total ratings count. */
1389 - (0, import_i18n4._n)(
9894 + (0, import_i18n5._n)(
1390 9895 "Install %1$s. %2$s stars with %3$s review.",
1391 9896 "Install %1$s. %2$s stars with %3$s reviews.",
1392 9897 ratingCount
1393 9898 ),
@@ -1413,11 +9918,11 @@
1413 9918 [item]
1414 9919 );
1415 9920 let statusText = "";
1416 9921 if (isInstalled) {
1417 - statusText = (0, import_i18n4.__)("Installed!");
9922 + statusText = (0, import_i18n5.__)("Installed!");
1418 9923 } else if (isInstalling2) {
1419 - statusText = (0, import_i18n4.__)("Installing\u2026");
9924 + statusText = (0, import_i18n5.__)("Installing\u2026");
1420 9925 }
1421 9926 const itemLabel = getDownloadableBlockLabel(item, {
1422 9927 hasNotice,
1423 9928 isInstalled,
@@ -1422,69 +9927,83 @@
1422 9927 hasNotice,
1423 9928 isInstalled,
1424 9929 isInstalling: isInstalling2
1425 9930 });
1426 - return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_components.Tooltip, { placement: "top", text: itemLabel, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
1427 - import_components.Composite.Item,
1428 - {
1429 - className: clsx_default(
1430 - "block-directory-downloadable-block-list-item",
1431 - isInstalling2 && "is-installing"
1432 - ),
1433 - accessibleWhenDisabled: true,
1434 - disabled: isInstalling2 || !isInstallable,
1435 - onClick: (event) => {
1436 - event.preventDefault();
1437 - onClick();
1438 - },
1439 - "aria-label": itemLabel,
1440 - type: "button",
1441 - role: "option",
1442 - children: [
1443 - /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "block-directory-downloadable-block-list-item__icon", children: [
1444 - /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(downloadable_block_icon_default, { icon, title }),
1445 - isInstalling2 ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "block-directory-downloadable-block-list-item__spinner", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_components.Spinner, {}) }) : /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(block_ratings_default, { rating })
1446 - ] }),
1447 - /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("span", { className: "block-directory-downloadable-block-list-item__details", children: [
1448 - /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "block-directory-downloadable-block-list-item__title", children: (0, import_element4.createInterpolateElement)(
1449 - (0, import_i18n4.sprintf)(
1450 - /* translators: 1: block title. 2: author name. */
1451 - (0, import_i18n4.__)("%1$s <span>by %2$s</span>"),
1452 - (0, import_html_entities.decodeEntities)(title),
1453 - author
9931 + return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(tooltip_exports.Root, { children: [
9932 + /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
9933 + tooltip_exports.Trigger,
9934 + {
9935 + render: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
9936 + import_components.Composite.Item,
9937 + {
9938 + className: clsx_default(
9939 + "block-directory-downloadable-block-list-item",
9940 + isInstalling2 && "is-installing"
1454 9941 ),
1455 - {
1456 - span: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "block-directory-downloadable-block-list-item__author" })
1457 - }
1458 - ) }),
1459 - hasNotice ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(downloadable_block_notice_default, { block: item }) : /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
1460 - /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "block-directory-downloadable-block-list-item__desc", children: !!statusText ? statusText : (0, import_html_entities.decodeEntities)(description) }),
1461 - isInstallable && !(isInstalled || isInstalling2) && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(VisuallyHidden, { children: (0, import_i18n4.__)("Install block") })
1462 - ] })
1463 - ] })
1464 - ]
1465 - }
1466 - ) });
9942 + accessibleWhenDisabled: true,
9943 + disabled: isInstalling2 || !isInstallable,
9944 + onClick: (event) => {
9945 + event.preventDefault();
9946 + onClick();
9947 + },
9948 + "aria-label": itemLabel,
9949 + type: "button",
9950 + role: "option",
9951 + children: [
9952 + /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "block-directory-downloadable-block-list-item__icon", children: [
9953 + /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
9954 + downloadable_block_icon_default,
9955 + {
9956 + icon,
9957 + title
9958 + }
9959 + ),
9960 + isInstalling2 ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "block-directory-downloadable-block-list-item__spinner", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_components.Spinner, {}) }) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(block_ratings_default, { rating })
9961 + ] }),
9962 + /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("span", { className: "block-directory-downloadable-block-list-item__details", children: [
9963 + /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "block-directory-downloadable-block-list-item__title", children: (0, import_element18.createInterpolateElement)(
9964 + (0, import_i18n5.sprintf)(
9965 + /* translators: 1: block title. 2: author name. */
9966 + (0, import_i18n5.__)("%1$s <span>by %2$s</span>"),
9967 + (0, import_html_entities.decodeEntities)(title),
9968 + author
9969 + ),
9970 + {
9971 + span: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "block-directory-downloadable-block-list-item__author" })
9972 + }
9973 + ) }),
9974 + hasNotice ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(downloadable_block_notice_default, { block: item }) : /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [
9975 + /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "block-directory-downloadable-block-list-item__desc", children: !!statusText ? statusText : (0, import_html_entities.decodeEntities)(description) }),
9976 + isInstallable && !(isInstalled || isInstalling2) && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(VisuallyHidden, { children: (0, import_i18n5.__)("Install block") })
9977 + ] })
9978 + ] })
9979 + ]
9980 + }
9981 + )
9982 + }
9983 + ),
9984 + /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(tooltip_exports.Popup, { children: itemLabel })
9985 + ] });
1467 9986 }
1468 9987 var downloadable_block_list_item_default = DownloadableBlockListItem;
1469 9988
1470 9989 // packages/block-directory/build-module/components/downloadable-blocks-list/index.mjs
1471 - var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1);
1472 - var noop = () => {
9990 + var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1);
9991 + var noop4 = () => {
1473 9992 };
1474 - function DownloadableBlocksList({ items, onHover = noop, onSelect }) {
9993 + function DownloadableBlocksList({ items, onHover = noop4, onSelect }) {
1475 9994 const { installBlockType: installBlockType2 } = (0, import_data7.useDispatch)(store);
1476 9995 if (!items.length) {
1477 9996 return null;
1478 9997 }
1479 - return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
9998 + return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1480 9999 import_components2.Composite,
1481 10000 {
1482 10001 role: "listbox",
1483 10002 className: "block-directory-downloadable-blocks-list",
1484 - "aria-label": (0, import_i18n5.__)("Blocks available for install"),
10003 + "aria-label": (0, import_i18n6.__)("Blocks available for install"),
1485 10004 children: items.map((item) => {
1486 - return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
10005 + return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1487 10006 downloadable_block_list_item_default,
1488 10007 {
1489 10008 onClick: () => {
1490 10009 if ((0, import_blocks4.getBlockType)(item.name)) {
@@ -1509,12 +10028,12 @@
1509 10028 }
1510 10029 var downloadable_blocks_list_default = DownloadableBlocksList;
1511 10030
1512 10031 // packages/block-directory/build-module/components/downloadable-blocks-panel/inserter-panel.mjs
1513 - var import_i18n6 = __toESM(require_i18n(), 1);
1514 - var import_element5 = __toESM(require_element(), 1);
10032 + var import_i18n7 = __toESM(require_i18n(), 1);
10033 + var import_element19 = __toESM(require_element(), 1);
1515 10034 var import_a11y = __toESM(require_a11y(), 1);
1516 - var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1);
10035 + var import_jsx_runtime28 = __toESM(require_jsx_runtime(), 1);
1517 10036 function DownloadableBlocksInserterPanel({
1518 10037 children,
1519 10038 downloadableItems,
1520 10039 hasLocalBlocks
@@ -1519,13 +10038,13 @@
1519 10038 downloadableItems,
1520 10039 hasLocalBlocks
1521 10040 }) {
1522 10041 const count = downloadableItems.length;
1523 - (0, import_element5.useEffect)(() => {
10042 + (0, import_element19.useEffect)(() => {
1524 10043 (0, import_a11y.speak)(
1525 - (0, import_i18n6.sprintf)(
10044 + (0, import_i18n7.sprintf)(
1526 10045 /* translators: %d: number of available blocks. */
1527 - (0, import_i18n6._n)(
10046 + (0, import_i18n7._n)(
1528 10047 "%d additional block is available to install.",
1529 10048 "%d additional blocks are available to install.",
1530 10049 count
1531 10050 ),
@@ -1532,15 +10051,15 @@
1532 10051 count
1533 10052 )
1534 10053 );
1535 10054 }, [count]);
1536 - return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
1537 - !hasLocalBlocks && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "block-directory-downloadable-blocks-panel__no-local", children: (0, import_i18n6.__)("No results available from your installed blocks.") }),
1538 - /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "block-editor-inserter__quick-inserter-separator" }),
1539 - /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "block-directory-downloadable-blocks-panel", children: [
1540 - /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "block-directory-downloadable-blocks-panel__header", children: [
1541 - /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("h2", { className: "block-directory-downloadable-blocks-panel__title", children: (0, import_i18n6.__)("Available to install") }),
1542 - /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "block-directory-downloadable-blocks-panel__description", children: (0, import_i18n6.__)(
10055 + return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_jsx_runtime28.Fragment, { children: [
10056 + !hasLocalBlocks && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: "block-directory-downloadable-blocks-panel__no-local", children: (0, import_i18n7.__)("No results available from your installed blocks.") }),
10057 + /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "block-editor-inserter__quick-inserter-separator" }),
10058 + /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "block-directory-downloadable-blocks-panel", children: [
10059 + /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "block-directory-downloadable-blocks-panel__header", children: [
10060 + /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("h2", { className: "block-directory-downloadable-blocks-panel__title", children: (0, import_i18n7.__)("Available to install") }),
10061 + /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: "block-directory-downloadable-blocks-panel__description", children: (0, import_i18n7.__)(
1543 10062 "Select a block to install and add it to your post."
1544 10063 ) })
1545 10064 ] }),
1546 10065 children
@@ -1549,19 +10068,19 @@
1549 10068 }
1550 10069 var inserter_panel_default = DownloadableBlocksInserterPanel;
1551 10070
1552 10071 // packages/block-directory/build-module/components/downloadable-blocks-panel/no-results.mjs
1553 - var import_i18n7 = __toESM(require_i18n(), 1);
10072 + var import_i18n8 = __toESM(require_i18n(), 1);
1554 10073 var import_components3 = __toESM(require_components(), 1);
1555 - var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1);
10074 + var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1);
1556 10075 function DownloadableBlocksNoResults() {
1557 - return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
1558 - /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "block-editor-inserter__no-results", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { children: (0, import_i18n7.__)("No results found.") }) }),
1559 - /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "block-editor-inserter__tips", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_components3.Tip, { children: [
1560 - (0, import_i18n7.__)("Interested in creating your own block?"),
1561 - /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("br", {}),
1562 - /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_components3.ExternalLink, { href: "https://developer.wordpress.org/block-editor/", children: [
1563 - (0, import_i18n7.__)("Get started here"),
10076 + return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
10077 + /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "block-editor-inserter__no-results", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { children: (0, import_i18n8.__)("No results found.") }) }),
10078 + /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "block-editor-inserter__tips", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_components3.Tip, { children: [
10079 + (0, import_i18n8.__)("Interested in creating your own block?"),
10080 + /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("br", {}),
10081 + /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_components3.ExternalLink, { href: "https://developer.wordpress.org/block-editor/", children: [
10082 + (0, import_i18n8.__)("Get started here"),
1564 10083 "."
1565 10084 ] })
1566 10085 ] }) })
1567 10086 ] });
@@ -1568,9 +10087,9 @@
1568 10087 }
1569 10088 var no_results_default = DownloadableBlocksNoResults;
1570 10089
1571 10090 // packages/block-directory/build-module/components/downloadable-blocks-panel/index.mjs
1572 - var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1);
10091 + var import_jsx_runtime30 = __toESM(require_jsx_runtime(), 1);
1573 10092 var EMPTY_ARRAY3 = [];
1574 10093 var useDownloadableBlocks = (filterValue) => (0, import_data8.useSelect)(
1575 10094 (select) => {
1576 10095 const {
@@ -1618,33 +10137,33 @@
1618 10137 filterValue
1619 10138 }) {
1620 10139 const { hasPermission, downloadableBlocks: downloadableBlocks2, isLoading } = useDownloadableBlocks(filterValue);
1621 10140 if (hasPermission === void 0 || isLoading || isTyping) {
1622 - return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
1623 - hasPermission && !hasLocalBlocks && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
1624 - /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "block-directory-downloadable-blocks-panel__no-local", children: (0, import_i18n8.__)(
10141 + return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [
10142 + hasPermission && !hasLocalBlocks && /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [
10143 + /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { className: "block-directory-downloadable-blocks-panel__no-local", children: (0, import_i18n9.__)(
1625 10144 "No results available from your installed blocks."
1626 10145 ) }),
1627 - /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "block-editor-inserter__quick-inserter-separator" })
10146 + /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "block-editor-inserter__quick-inserter-separator" })
1628 10147 ] }),
1629 - /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "block-directory-downloadable-blocks-panel has-blocks-loading", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_components4.Spinner, {}) })
10148 + /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "block-directory-downloadable-blocks-panel has-blocks-loading", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_components4.Spinner, {}) })
1630 10149 ] });
1631 10150 }
1632 10151 if (false === hasPermission) {
1633 10152 if (!hasLocalBlocks) {
1634 - return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(no_results_default, {});
10153 + return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(no_results_default, {});
1635 10154 }
1636 10155 return null;
1637 10156 }
1638 10157 if (downloadableBlocks2.length === 0) {
1639 - return hasLocalBlocks ? null : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(no_results_default, {});
10158 + return hasLocalBlocks ? null : /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(no_results_default, {});
1640 10159 }
1641 - return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
10160 + return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1642 10161 inserter_panel_default,
1643 10162 {
1644 10163 downloadableItems: downloadableBlocks2,
1645 10164 hasLocalBlocks,
1646 - children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
10165 + children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1647 10166 downloadable_blocks_list_default,
1648 10167 {
1649 10168 items: downloadableBlocks2,
1650 10169 onSelect,
@@ -1655,13 +10174,13 @@
1655 10174 );
1656 10175 }
1657 10176
1658 10177 // packages/block-directory/build-module/plugins/inserter-menu-downloadable-blocks-panel/index.mjs
1659 - var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1);
10178 + var import_jsx_runtime31 = __toESM(require_jsx_runtime(), 1);
1660 10179 function InserterMenuDownloadableBlocksPanel() {
1661 - const [debouncedFilterValue, setFilterValue] = (0, import_element6.useState)("");
10180 + const [debouncedFilterValue, setFilterValue] = (0, import_element20.useState)("");
1662 10181 const debouncedSetFilterValue = (0, import_compose.debounce)(setFilterValue, 400);
1663 - return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_block_editor3.__unstableInserterMenuExtension, { children: ({ onSelect, onHover, filterValue, hasItems }) => {
10182 + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_block_editor3.__unstableInserterMenuExtension, { children: ({ onSelect, onHover, filterValue, hasItems }) => {
1664 10183 if (debouncedFilterValue !== filterValue) {
1665 10184 debouncedSetFilterValue(filterValue);
1666 10185 }
1667 10186 if (!debouncedFilterValue) {
@@ -1666,9 +10185,9 @@
1666 10185 }
1667 10186 if (!debouncedFilterValue) {
1668 10187 return null;
1669 10188 }
1670 - return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
10189 + return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1671 10190 DownloadableBlocksPanel,
1672 10191 {
1673 10192 onSelect,
1674 10193 onHover,
@@ -1681,26 +10200,26 @@
1681 10200 }
1682 10201 var inserter_menu_downloadable_blocks_panel_default = InserterMenuDownloadableBlocksPanel;
1683 10202
1684 10203 // packages/block-directory/build-module/plugins/installed-blocks-pre-publish-panel/index.mjs
1685 - var import_i18n10 = __toESM(require_i18n(), 1);
10204 + var import_i18n11 = __toESM(require_i18n(), 1);
1686 10205 var import_data9 = __toESM(require_data(), 1);
1687 10206 var import_editor2 = __toESM(require_editor(), 1);
1688 10207
1689 10208 // packages/block-directory/build-module/components/compact-list/index.mjs
1690 - var import_i18n9 = __toESM(require_i18n(), 1);
1691 - var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1);
10209 + var import_i18n10 = __toESM(require_i18n(), 1);
10210 + var import_jsx_runtime32 = __toESM(require_jsx_runtime(), 1);
1692 10211 function CompactList({ items }) {
1693 10212 if (!items.length) {
1694 10213 return null;
1695 10214 }
1696 - return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("ul", { className: "block-directory-compact-list", children: items.map(({ icon, id, title, author }) => /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("li", { className: "block-directory-compact-list__item", children: [
1697 - /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(downloadable_block_icon_default, { icon, title }),
1698 - /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "block-directory-compact-list__item-details", children: [
1699 - /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "block-directory-compact-list__item-title", children: title }),
1700 - /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "block-directory-compact-list__item-author", children: (0, import_i18n9.sprintf)(
10215 + return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("ul", { className: "block-directory-compact-list", children: items.map(({ icon, id, title, author }) => /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("li", { className: "block-directory-compact-list__item", children: [
10216 + /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(downloadable_block_icon_default, { icon, title }),
10217 + /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "block-directory-compact-list__item-details", children: [
10218 + /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "block-directory-compact-list__item-title", children: title }),
10219 + /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "block-directory-compact-list__item-author", children: (0, import_i18n10.sprintf)(
1701 10220 /* translators: %s: Name of the block author. */
1702 - (0, import_i18n9.__)("By %s"),
10221 + (0, import_i18n10.__)("By %s"),
1703 10222 author
1704 10223 ) })
1705 10224 ] })
1706 10225 ] }, id)) });
@@ -1706,9 +10225,9 @@
1706 10225 ] }, id)) });
1707 10226 }
1708 10227
1709 10228 // packages/block-directory/build-module/plugins/installed-blocks-pre-publish-panel/index.mjs
1710 - var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1);
10229 + var import_jsx_runtime33 = __toESM(require_jsx_runtime(), 1);
1711 10230 function InstalledBlocksPrePublishPanel() {
1712 10231 const newBlockTypes = (0, import_data9.useSelect)(
1713 10232 (select) => select(store).getNewBlockTypes(),
1714 10233 []
@@ -1715,14 +10234,14 @@
1715 10234 );
1716 10235 if (!newBlockTypes.length) {
1717 10236 return null;
1718 10237 }
1719 - return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
10238 + return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
1720 10239 import_editor2.PluginPrePublishPanel,
1721 10240 {
1722 - title: (0, import_i18n10.sprintf)(
10241 + title: (0, import_i18n11.sprintf)(
1723 10242 // translators: %d: number of blocks (number).
1724 - (0, import_i18n10._n)(
10243 + (0, import_i18n11._n)(
1725 10244 "Added: %d block",
1726 10245 "Added: %d blocks",
1727 10246 newBlockTypes.length
1728 10247 ),
@@ -1729,14 +10248,14 @@
1729 10248 newBlockTypes.length
1730 10249 ),
1731 10250 initialOpen: true,
1732 10251 children: [
1733 - /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "installed-blocks-pre-publish-panel__copy", children: (0, import_i18n10._n)(
10252 + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "installed-blocks-pre-publish-panel__copy", children: (0, import_i18n11._n)(
1734 10253 "The following block has been added to your site.",
1735 10254 "The following blocks have been added to your site.",
1736 10255 newBlockTypes.length
1737 10256 ) }),
1738 - /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(CompactList, { items: newBlockTypes })
10257 + /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(CompactList, { items: newBlockTypes })
1739 10258 ]
1740 10259 }
1741 10260 );
1742 10261 }
@@ -1741,23 +10260,23 @@
1741 10260 );
1742 10261 }
1743 10262
1744 10263 // packages/block-directory/build-module/plugins/get-install-missing/index.mjs
1745 - var import_i18n12 = __toESM(require_i18n(), 1);
10264 + var import_i18n13 = __toESM(require_i18n(), 1);
1746 10265 var import_components6 = __toESM(require_components(), 1);
1747 10266 var import_blocks7 = __toESM(require_blocks(), 1);
1748 - var import_element7 = __toESM(require_element(), 1);
10267 + var import_element21 = __toESM(require_element(), 1);
1749 10268 var import_data11 = __toESM(require_data(), 1);
1750 10269 var import_core_data2 = __toESM(require_core_data(), 1);
1751 10270 var import_block_editor5 = __toESM(require_block_editor(), 1);
1752 10271
1753 10272 // packages/block-directory/build-module/plugins/get-install-missing/install-button.mjs
1754 - var import_i18n11 = __toESM(require_i18n(), 1);
10273 + var import_i18n12 = __toESM(require_i18n(), 1);
1755 10274 var import_components5 = __toESM(require_components(), 1);
1756 10275 var import_blocks6 = __toESM(require_blocks(), 1);
1757 10276 var import_data10 = __toESM(require_data(), 1);
1758 10277 var import_block_editor4 = __toESM(require_block_editor(), 1);
1759 - var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1);
10278 + var import_jsx_runtime34 = __toESM(require_jsx_runtime(), 1);
1760 10279 function InstallButton({ attributes, block, clientId }) {
1761 10280 const isInstallingBlock = (0, import_data10.useSelect)(
1762 10281 (select) => select(store).isInstalling(block.id),
1763 10282 [block.id]
@@ -1763,9 +10282,9 @@
1763 10282 [block.id]
1764 10283 );
1765 10284 const { installBlockType: installBlockType2 } = (0, import_data10.useDispatch)(store);
1766 10285 const { replaceBlock } = (0, import_data10.useDispatch)(import_block_editor4.store);
1767 - return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
10286 + return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1768 10287 import_components5.Button,
1769 10288 {
1770 10289 __next40pxDefaultSize: true,
1771 10290 onClick: () => installBlockType2(block).then((success) => {
@@ -1789,11 +10308,11 @@
1789 10308 accessibleWhenDisabled: true,
1790 10309 disabled: isInstallingBlock,
1791 10310 isBusy: isInstallingBlock,
1792 10311 variant: "primary",
1793 - children: (0, import_i18n11.sprintf)(
10312 + children: (0, import_i18n12.sprintf)(
1794 10313 /* translators: %s: block name */
1795 - (0, import_i18n11.__)("Install %s"),
10314 + (0, import_i18n12.__)("Install %s"),
1796 10315 block.title
1797 10316 )
1798 10317 }
1799 10318 );
@@ -1799,9 +10318,9 @@
1799 10318 );
1800 10319 }
1801 10320
1802 10321 // packages/block-directory/build-module/plugins/get-install-missing/index.mjs
1803 - var import_jsx_runtime17 = __toESM(require_jsx_runtime(), 1);
10322 + var import_jsx_runtime35 = __toESM(require_jsx_runtime(), 1);
1804 10323 var getInstallMissing = (OriginalComponent) => (props) => {
1805 10324 const { originalName } = props.attributes;
1806 10325 const { block, hasPermission } = (0, import_data11.useSelect)(
1807 10326 (select) => {
@@ -1819,11 +10338,11 @@
1819 10338 },
1820 10339 [originalName]
1821 10340 );
1822 10341 if (!hasPermission || !block) {
1823 - return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(OriginalComponent, { ...props });
10342 + return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(OriginalComponent, { ...props });
1824 10343 }
1825 - return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ModifiedWarning, { ...props, originalBlock: block });
10344 + return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(ModifiedWarning, { ...props, originalBlock: block });
1826 10345 };
1827 10346 var ModifiedWarning = ({ originalBlock, ...props }) => {
1828 10347 const { originalName, originalUndelimitedContent, clientId } = props.attributes;
1829 10348 const { replaceBlock } = (0, import_data11.useDispatch)(import_block_editor5.store);
@@ -1829,11 +10348,9 @@
1829 10348 const { replaceBlock } = (0, import_data11.useDispatch)(import_block_editor5.store);
1830 10349 const convertToHTML = () => {
1831 10350 replaceBlock(
1832 10351 props.clientId,
1833 - (0, import_blocks7.createBlock)("core/html", {
1834 - content: originalUndelimitedContent
1835 - })
10352 + (0, import_blocks7.createBlock)("core/html", {}, [], [originalUndelimitedContent])
1836 10353 );
1837 10354 };
1838 10355 const hasContent = !!originalUndelimitedContent;
1839 10356 const hasHTMLBlock = (0, import_data11.useSelect)(
@@ -1845,17 +10362,17 @@
1845 10362 );
1846 10363 },
1847 10364 [clientId]
1848 10365 );
1849 - let messageHTML = (0, import_i18n12.sprintf)(
10366 + let messageHTML = (0, import_i18n13.sprintf)(
1850 10367 /* translators: %s: block name */
1851 - (0, import_i18n12.__)(
10368 + (0, import_i18n13.__)(
1852 10369 "Your site doesn\u2019t include support for the %s block. You can try installing the block or remove it entirely."
1853 10370 ),
1854 10371 originalBlock.title || originalName
1855 10372 );
1856 10373 const actions = [
1857 - /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
10374 + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1858 10375 InstallButton,
1859 10376 {
1860 10377 block: originalBlock,
1861 10378 attributes: props.attributes,
@@ -1864,46 +10381,46 @@
1864 10381 "install"
1865 10382 )
1866 10383 ];
1867 10384 if (hasContent && hasHTMLBlock) {
1868 - messageHTML = (0, import_i18n12.sprintf)(
10385 + messageHTML = (0, import_i18n13.sprintf)(
1869 10386 /* translators: %s: block name */
1870 - (0, import_i18n12.__)(
10387 + (0, import_i18n13.__)(
1871 10388 "Your site doesn\u2019t include support for the %s block. You can try installing the block, convert it to a Custom HTML block, or remove it entirely."
1872 10389 ),
1873 10390 originalBlock.title || originalName
1874 10391 );
1875 10392 actions.push(
1876 - /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
10393 + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1877 10394 import_components6.Button,
1878 10395 {
1879 10396 __next40pxDefaultSize: true,
1880 10397 onClick: convertToHTML,
1881 10398 variant: "tertiary",
1882 - children: (0, import_i18n12.__)("Keep as HTML")
10399 + children: (0, import_i18n13.__)("Keep as HTML")
1883 10400 },
1884 10401 "convert"
1885 10402 )
1886 10403 );
1887 10404 }
1888 - return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { ...(0, import_block_editor5.useBlockProps)(), children: [
1889 - /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_block_editor5.Warning, { actions, children: messageHTML }),
1890 - /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_element7.RawHTML, { children: originalUndelimitedContent })
10405 + return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { ...(0, import_block_editor5.useBlockProps)(), children: [
10406 + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_block_editor5.Warning, { actions, children: messageHTML }),
10407 + /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_element21.RawHTML, { children: originalUndelimitedContent })
1891 10408 ] });
1892 10409 };
1893 10410 var get_install_missing_default = getInstallMissing;
1894 10411
1895 10412 // packages/block-directory/build-module/plugins/index.mjs
1896 - var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1);
10413 + var import_jsx_runtime36 = __toESM(require_jsx_runtime(), 1);
1897 10414 (0, import_plugins.registerPlugin)("block-directory", {
1898 10415 // The icon is explicitly set to undefined to prevent PluginPrePublishPanel
1899 10416 // from rendering the fallback icon pluginIcon.
1900 10417 icon: void 0,
1901 10418 render() {
1902 - return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_jsx_runtime18.Fragment, { children: [
1903 - /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(AutoBlockUninstaller, {}),
1904 - /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(inserter_menu_downloadable_blocks_panel_default, {}),
1905 - /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(InstalledBlocksPrePublishPanel, {})
10419 + return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [
10420 + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(AutoBlockUninstaller, {}),
10421 + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(inserter_menu_downloadable_blocks_panel_default, {}),
10422 + /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(InstalledBlocksPrePublishPanel, {})
1906 10423 ] });
1907 10424 }
1908 10425 });
1909 10426 (0, import_hooks.addFilter)(
@@ -1917,6 +10434,32 @@
1917 10434 return settings;
1918 10435 }
1919 10436 );
1920 10437 return __toCommonJS(index_exports);
10438 +})();
10439 +/*! Bundled license information:
10440 +
10441 +use-sync-external-store/cjs/use-sync-external-store-shim.development.js:
10442 + (**
10443 + * @license React
10444 + * use-sync-external-store-shim.development.js
10445 + *
10446 + * Copyright (c) Meta Platforms, Inc. and affiliates.
10447 + *
10448 + * This source code is licensed under the MIT license found in the
10449 + * LICENSE file in the root directory of this source tree.
10450 + *)
10451 +
10452 +use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js:
10453 + (**
10454 + * @license React
10455 + * use-sync-external-store-shim/with-selector.development.js
10456 + *
10457 + * Copyright (c) Meta Platforms, Inc. and affiliates.
10458 + *
10459 + * This source code is licensed under the MIT license found in the
10460 + * LICENSE file in the root directory of this source tree.
10461 + *)
10462 +*/
10463 +(window.wp ||= {}).blockDirectory = wp.blockDirectory;
1921 10464 })();
1922 10465 //# sourceMappingURL=index.js.map