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