| [ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
1 var wp; 2 (wp ||= {}).editPost = (() => { 3 var __create = Object.create; 4 var __defProp = Object.defineProperty; 5 var __getOwnPropDesc = Object.getOwnPropertyDescriptor; 6 var __getOwnPropNames = Object.getOwnPropertyNames; 7 var __getProtoOf = Object.getPrototypeOf; 8 var __hasOwnProp = Object.prototype.hasOwnProperty; 9 var __commonJS = (cb, mod) => function __require() { 10 return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; 11 }; 12 var __export = (target, all) => { 13 for (var name in all) 14 __defProp(target, name, { get: all[name], enumerable: true }); 15 }; 16 var __copyProps = (to, from, except, desc) => { 17 if (from && typeof from === "object" || typeof from === "function") { 18 for (let key of __getOwnPropNames(from)) 19 if (!__hasOwnProp.call(to, key) && key !== except) 20 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 21 } 22 return to; 23 }; 24 var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( 25 // If the importer is in node compatibility mode or this is not an ESM 26 // file that has been converted to a CommonJS file using a Babel- 27 // compatible transform (i.e. "__esModule" has not been set), then set 28 // "default" to the CommonJS "module.exports" for node compatibility. 29 isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, 30 mod 31 )); 32 var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); 33 34 // package-external:@wordpress/blocks 35 var require_blocks = __commonJS({ 36 "package-external:@wordpress/blocks"(exports, module) { 37 module.exports = window.wp.blocks; 38 } 39 }); 40 41 // package-external:@wordpress/block-library 42 var require_block_library = __commonJS({ 43 "package-external:@wordpress/block-library"(exports, module) { 44 module.exports = window.wp.blockLibrary; 45 } 46 }); 47 48 // package-external:@wordpress/deprecated 49 var require_deprecated = __commonJS({ 50 "package-external:@wordpress/deprecated"(exports, module) { 51 module.exports = window.wp.deprecated; 52 } 53 }); 54 55 // package-external:@wordpress/element 56 var require_element = __commonJS({ 57 "package-external:@wordpress/element"(exports, module) { 58 module.exports = window.wp.element; 59 } 60 }); 61 62 // package-external:@wordpress/data 63 var require_data = __commonJS({ 64 "package-external:@wordpress/data"(exports, module) { 65 module.exports = window.wp.data; 66 } 67 }); 68 69 // package-external:@wordpress/preferences 70 var require_preferences = __commonJS({ 71 "package-external:@wordpress/preferences"(exports, module) { 72 module.exports = window.wp.preferences; 73 } 74 }); 75 76 // package-external:@wordpress/widgets 77 var require_widgets = __commonJS({ 78 "package-external:@wordpress/widgets"(exports, module) { 79 module.exports = window.wp.widgets; 80 } 81 }); 82 83 // package-external:@wordpress/editor 84 var require_editor = __commonJS({ 85 "package-external:@wordpress/editor"(exports, module) { 86 module.exports = window.wp.editor; 87 } 88 }); 89 90 // package-external:@wordpress/core-data 91 var require_core_data = __commonJS({ 92 "package-external:@wordpress/core-data"(exports, module) { 93 module.exports = window.wp.coreData; 94 } 95 }); 96 97 // package-external:@wordpress/api-fetch 98 var require_api_fetch = __commonJS({ 99 "package-external:@wordpress/api-fetch"(exports, module) { 100 module.exports = window.wp.apiFetch; 101 } 102 }); 103 104 // package-external:@wordpress/i18n 105 var require_i18n = __commonJS({ 106 "package-external:@wordpress/i18n"(exports, module) { 107 module.exports = window.wp.i18n; 108 } 109 }); 110 111 // vendor-external:react 112 var require_react = __commonJS({ 113 "vendor-external:react"(exports, module) { 114 module.exports = window.React; 115 } 116 }); 117 118 // vendor-external:react/jsx-runtime 119 var require_jsx_runtime = __commonJS({ 120 "vendor-external:react/jsx-runtime"(exports, module) { 121 module.exports = window.ReactJSXRuntime; 122 } 123 }); 124 125 // vendor-external:react-dom 126 var require_react_dom = __commonJS({ 127 "vendor-external:react-dom"(exports, module) { 128 module.exports = window.ReactDOM; 129 } 130 }); 131 132 // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js 133 var require_use_sync_external_store_shim_development = __commonJS({ 134 "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(exports) { 135 "use strict"; 136 (function() { 137 function is(x, y) { 138 return x === y && (0 !== x || 1 / x === 1 / y) || x !== x && y !== y; 139 } 140 function useSyncExternalStore$2(subscribe, getSnapshot) { 141 didWarnOld18Alpha || void 0 === React47.startTransition || (didWarnOld18Alpha = true, console.error( 142 "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." 143 )); 144 var value = getSnapshot(); 145 if (!didWarnUncachedGetSnapshot) { 146 var cachedValue = getSnapshot(); 147 objectIs(value, cachedValue) || (console.error( 148 "The result of getSnapshot should be cached to avoid an infinite loop" 149 ), didWarnUncachedGetSnapshot = true); 150 } 151 cachedValue = useState16({ 152 inst: { value, getSnapshot } 153 }); 154 var inst = cachedValue[0].inst, forceUpdate = cachedValue[1]; 155 useLayoutEffect3( 156 function() { 157 inst.value = value; 158 inst.getSnapshot = getSnapshot; 159 checkIfSnapshotChanged(inst) && forceUpdate({ inst }); 160 }, 161 [subscribe, value, getSnapshot] 162 ); 163 useEffect17( 164 function() { 165 checkIfSnapshotChanged(inst) && forceUpdate({ inst }); 166 return subscribe(function() { 167 checkIfSnapshotChanged(inst) && forceUpdate({ inst }); 168 }); 169 }, 170 [subscribe] 171 ); 172 useDebugValue2(value); 173 return value; 174 } 175 function checkIfSnapshotChanged(inst) { 176 var latestGetSnapshot = inst.getSnapshot; 177 inst = inst.value; 178 try { 179 var nextValue = latestGetSnapshot(); 180 return !objectIs(inst, nextValue); 181 } catch (error) { 182 return true; 183 } 184 } 185 function useSyncExternalStore$1(subscribe, getSnapshot) { 186 return getSnapshot(); 187 } 188 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); 189 var React47 = require_react(), objectIs = "function" === typeof Object.is ? Object.is : is, useState16 = React47.useState, useEffect17 = React47.useEffect, useLayoutEffect3 = React47.useLayoutEffect, useDebugValue2 = React47.useDebugValue, didWarnOld18Alpha = false, didWarnUncachedGetSnapshot = false, shim = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2; 190 exports.useSyncExternalStore = void 0 !== React47.useSyncExternalStore ? React47.useSyncExternalStore : shim; 191 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); 192 })(); 193 } 194 }); 195 196 // node_modules/use-sync-external-store/shim/index.js 197 var require_shim = __commonJS({ 198 "node_modules/use-sync-external-store/shim/index.js"(exports, module) { 199 "use strict"; 200 if (false) { 201 module.exports = null; 202 } else { 203 module.exports = require_use_sync_external_store_shim_development(); 204 } 205 } 206 }); 207 208 // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js 209 var require_with_selector_development = __commonJS({ 210 "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js"(exports) { 211 "use strict"; 212 (function() { 213 function is(x, y) { 214 return x === y && (0 !== x || 1 / x === 1 / y) || x !== x && y !== y; 215 } 216 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); 217 var React47 = require_react(), shim = require_shim(), objectIs = "function" === typeof Object.is ? Object.is : is, useSyncExternalStore2 = shim.useSyncExternalStore, useRef22 = React47.useRef, useEffect17 = React47.useEffect, useMemo16 = React47.useMemo, useDebugValue2 = React47.useDebugValue; 218 exports.useSyncExternalStoreWithSelector = function(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) { 219 var instRef = useRef22(null); 220 if (null === instRef.current) { 221 var inst = { hasValue: false, value: null }; 222 instRef.current = inst; 223 } else inst = instRef.current; 224 instRef = useMemo16( 225 function() { 226 function memoizedSelector(nextSnapshot) { 227 if (!hasMemo) { 228 hasMemo = true; 229 memoizedSnapshot = nextSnapshot; 230 nextSnapshot = selector(nextSnapshot); 231 if (void 0 !== isEqual && inst.hasValue) { 232 var currentSelection = inst.value; 233 if (isEqual(currentSelection, nextSnapshot)) 234 return memoizedSelection = currentSelection; 235 } 236 return memoizedSelection = nextSnapshot; 237 } 238 currentSelection = memoizedSelection; 239 if (objectIs(memoizedSnapshot, nextSnapshot)) 240 return currentSelection; 241 var nextSelection = selector(nextSnapshot); 242 if (void 0 !== isEqual && isEqual(currentSelection, nextSelection)) 243 return memoizedSnapshot = nextSnapshot, currentSelection; 244 memoizedSnapshot = nextSnapshot; 245 return memoizedSelection = nextSelection; 246 } 247 var hasMemo = false, memoizedSnapshot, memoizedSelection, maybeGetServerSnapshot = void 0 === getServerSnapshot ? null : getServerSnapshot; 248 return [ 249 function() { 250 return memoizedSelector(getSnapshot()); 251 }, 252 null === maybeGetServerSnapshot ? void 0 : function() { 253 return memoizedSelector(maybeGetServerSnapshot()); 254 } 255 ]; 256 }, 257 [getSnapshot, getServerSnapshot, selector, isEqual] 258 ); 259 var value = useSyncExternalStore2(subscribe, instRef[0], instRef[1]); 260 useEffect17( 261 function() { 262 inst.hasValue = true; 263 inst.value = value; 264 }, 265 [value] 266 ); 267 useDebugValue2(value); 268 return value; 269 }; 270 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); 271 })(); 272 } 273 }); 274 275 // node_modules/use-sync-external-store/shim/with-selector.js 276 var require_with_selector = __commonJS({ 277 "node_modules/use-sync-external-store/shim/with-selector.js"(exports, module) { 278 "use strict"; 279 if (false) { 280 module.exports = null; 281 } else { 282 module.exports = require_with_selector_development(); 283 } 284 } 285 }); 286 287 // package-external:@wordpress/primitives 288 var require_primitives = __commonJS({ 289 "package-external:@wordpress/primitives"(exports, module) { 290 module.exports = window.wp.primitives; 291 } 292 }); 293 294 // package-external:@wordpress/compose 295 var require_compose = __commonJS({ 296 "package-external:@wordpress/compose"(exports, module) { 297 module.exports = window.wp.compose; 298 } 299 }); 300 301 // package-external:@wordpress/theme 302 var require_theme = __commonJS({ 303 "package-external:@wordpress/theme"(exports, module) { 304 module.exports = window.wp.theme; 305 } 306 }); 307 308 // package-external:@wordpress/private-apis 309 var require_private_apis = __commonJS({ 310 "package-external:@wordpress/private-apis"(exports, module) { 311 module.exports = window.wp.privateApis; 312 } 313 }); 314 315 // package-external:@wordpress/components 316 var require_components = __commonJS({ 317 "package-external:@wordpress/components"(exports, module) { 318 module.exports = window.wp.components; 319 } 320 }); 321 322 // package-external:@wordpress/block-editor 323 var require_block_editor = __commonJS({ 324 "package-external:@wordpress/block-editor"(exports, module) { 325 module.exports = window.wp.blockEditor; 326 } 327 }); 328 329 // package-external:@wordpress/style-engine 330 var require_style_engine = __commonJS({ 331 "package-external:@wordpress/style-engine"(exports, module) { 332 module.exports = window.wp.styleEngine; 333 } 334 }); 335 336 // package-external:@wordpress/plugins 337 var require_plugins = __commonJS({ 338 "package-external:@wordpress/plugins"(exports, module) { 339 module.exports = window.wp.plugins; 340 } 341 }); 342 343 // package-external:@wordpress/notices 344 var require_notices = __commonJS({ 345 "package-external:@wordpress/notices"(exports, module) { 346 module.exports = window.wp.notices; 347 } 348 }); 349 350 // package-external:@wordpress/commands 351 var require_commands = __commonJS({ 352 "package-external:@wordpress/commands"(exports, module) { 353 module.exports = window.wp.commands; 354 } 355 }); 356 357 // package-external:@wordpress/url 358 var require_url = __commonJS({ 359 "package-external:@wordpress/url"(exports, module) { 360 module.exports = window.wp.url; 361 } 362 }); 363 364 // package-external:@wordpress/html-entities 365 var require_html_entities = __commonJS({ 366 "package-external:@wordpress/html-entities"(exports, module) { 367 module.exports = window.wp.htmlEntities; 368 } 369 }); 370 371 // package-external:@wordpress/keyboard-shortcuts 372 var require_keyboard_shortcuts = __commonJS({ 373 "package-external:@wordpress/keyboard-shortcuts"(exports, module) { 374 module.exports = window.wp.keyboardShortcuts; 375 } 376 }); 377 378 // package-external:@wordpress/hooks 379 var require_hooks = __commonJS({ 380 "package-external:@wordpress/hooks"(exports, module) { 381 module.exports = window.wp.hooks; 382 } 383 }); 384 385 // package-external:@wordpress/keycodes 386 var require_keycodes = __commonJS({ 387 "package-external:@wordpress/keycodes"(exports, module) { 388 module.exports = window.wp.keycodes; 389 } 390 }); 391 392 // packages/edit-post/build-module/index.mjs 393 var index_exports = {}; 394 __export(index_exports, { 395 PluginBlockSettingsMenuItem: () => PluginBlockSettingsMenuItem, 396 PluginDocumentSettingPanel: () => PluginDocumentSettingPanel, 397 PluginMoreMenuItem: () => PluginMoreMenuItem, 398 PluginPostPublishPanel: () => PluginPostPublishPanel, 399 PluginPostStatusInfo: () => PluginPostStatusInfo, 400 PluginPrePublishPanel: () => PluginPrePublishPanel, 401 PluginSidebar: () => PluginSidebar, 402 PluginSidebarMoreMenuItem: () => PluginSidebarMoreMenuItem, 403 __experimentalFullscreenModeClose: () => fullscreen_mode_close_default, 404 __experimentalMainDashboardButton: () => __experimentalMainDashboardButton, 405 __experimentalPluginPostExcerpt: () => __experimentalPluginPostExcerpt, 406 initializeEditor: () => initializeEditor, 407 reinitializeEditor: () => reinitializeEditor, 408 store: () => store 409 }); 410 var import_blocks2 = __toESM(require_blocks(), 1); 411 var import_block_library2 = __toESM(require_block_library(), 1); 412 var import_deprecated4 = __toESM(require_deprecated(), 1); 413 var import_element29 = __toESM(require_element(), 1); 414 var import_data25 = __toESM(require_data(), 1); 415 var import_preferences11 = __toESM(require_preferences(), 1); 416 var import_widgets = __toESM(require_widgets(), 1); 417 var import_editor19 = __toESM(require_editor(), 1); 418 var import_core_data9 = __toESM(require_core_data(), 1); 419 var import_api_fetch2 = __toESM(require_api_fetch(), 1); 420 421 // node_modules/clsx/dist/clsx.mjs 422 function r(e) { 423 var t, f, n = ""; 424 if ("string" == typeof e || "number" == typeof e) n += e; 425 else if ("object" == typeof e) if (Array.isArray(e)) { 426 var o = e.length; 427 for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f); 428 } else for (f in e) e[f] && (n && (n += " "), n += f); 429 return n; 430 } 431 function clsx() { 432 for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t); 433 return n; 434 } 435 var clsx_default = clsx; 436 437 // node_modules/@base-ui/utils/safeReact.mjs 438 var React = __toESM(require_react(), 1); 439 var SafeReact = { 440 ...React 441 }; 442 443 // node_modules/@base-ui/utils/useRefWithInit.mjs 444 var React2 = __toESM(require_react(), 1); 445 var UNINITIALIZED = {}; 446 function useRefWithInit(init, initArg) { 447 const ref = React2.useRef(UNINITIALIZED); 448 if (ref.current === UNINITIALIZED) { 449 ref.current = init(initArg); 450 } 451 return ref; 452 } 453 454 // node_modules/@base-ui/utils/useStableCallback.mjs 455 var useInsertionEffect = SafeReact.useInsertionEffect; 456 var useSafeInsertionEffect = ( 457 // React 17 doesn't have useInsertionEffect. 458 useInsertionEffect && // Preact replaces useInsertionEffect with useLayoutEffect and fires too late. 459 useInsertionEffect !== SafeReact.useLayoutEffect ? useInsertionEffect : (fn) => fn() 460 ); 461 function useStableCallback(callback) { 462 const stable = useRefWithInit(createStableCallback).current; 463 stable.next = callback; 464 useSafeInsertionEffect(stable.effect); 465 return stable.trampoline; 466 } 467 function createStableCallback() { 468 const stable = { 469 next: void 0, 470 callback: assertNotCalled, 471 trampoline: (...args) => stable.callback?.(...args), 472 effect: () => { 473 stable.callback = stable.next; 474 } 475 }; 476 return stable; 477 } 478 function assertNotCalled() { 479 if (true) { 480 throw ( 481 /* minify-error-disabled */ 482 new Error("Base UI: Cannot call an event handler while rendering.") 483 ); 484 } 485 } 486 487 // node_modules/@base-ui/utils/useIsoLayoutEffect.mjs 488 var React3 = __toESM(require_react(), 1); 489 var noop = () => { 490 }; 491 var useIsoLayoutEffect = typeof document !== "undefined" ? React3.useLayoutEffect : noop; 492 493 // node_modules/@base-ui/utils/warn.mjs 494 var set; 495 if (true) { 496 set = /* @__PURE__ */ new Set(); 497 } 498 function warn(...messages) { 499 if (true) { 500 const messageKey = messages.join(" "); 501 if (!set.has(messageKey)) { 502 set.add(messageKey); 503 console.warn(`Base UI: $messageKey}`); 504 } 505 } 506 } 507 508 // node_modules/@base-ui/react/internals/direction-context/DirectionContext.mjs 509 var React4 = __toESM(require_react(), 1); 510 var DirectionContext = /* @__PURE__ */ React4.createContext(void 0); 511 if (true) DirectionContext.displayName = "DirectionContext"; 512 function useDirection() { 513 const context = React4.useContext(DirectionContext); 514 return context?.direction ?? "ltr"; 515 } 516 517 // node_modules/@base-ui/react/internals/useRenderElement.mjs 518 var React7 = __toESM(require_react(), 1); 519 520 // node_modules/@base-ui/utils/useMergedRefs.mjs 521 function useMergedRefs(a, b, c, d) { 522 const forkRef = useRefWithInit(createForkRef).current; 523 if (didChange(forkRef, a, b, c, d)) { 524 update(forkRef, [a, b, c, d]); 525 } 526 return forkRef.callback; 527 } 528 function useMergedRefsN(refs) { 529 const forkRef = useRefWithInit(createForkRef).current; 530 if (didChangeN(forkRef, refs)) { 531 update(forkRef, refs); 532 } 533 return forkRef.callback; 534 } 535 function createForkRef() { 536 return { 537 callback: null, 538 cleanup: null, 539 refs: [] 540 }; 541 } 542 function didChange(forkRef, a, b, c, d) { 543 return forkRef.refs[0] !== a || forkRef.refs[1] !== b || forkRef.refs[2] !== c || forkRef.refs[3] !== d; 544 } 545 function didChangeN(forkRef, newRefs) { 546 return forkRef.refs.length !== newRefs.length || forkRef.refs.some((ref, index2) => ref !== newRefs[index2]); 547 } 548 function update(forkRef, refs) { 549 forkRef.refs = refs; 550 if (refs.every((ref) => ref == null)) { 551 forkRef.callback = null; 552 return; 553 } 554 forkRef.callback = (instance) => { 555 if (forkRef.cleanup) { 556 forkRef.cleanup(); 557 forkRef.cleanup = null; 558 } 559 if (instance != null) { 560 const cleanupCallbacks = Array(refs.length).fill(null); 561 for (let i = 0; i < refs.length; i += 1) { 562 const ref = refs[i]; 563 if (ref == null) { 564 continue; 565 } 566 switch (typeof ref) { 567 case "function": { 568 const refCleanup = ref(instance); 569 if (typeof refCleanup === "function") { 570 cleanupCallbacks[i] = refCleanup; 571 } 572 break; 573 } 574 case "object": { 575 ref.current = instance; 576 break; 577 } 578 default: 579 } 580 } 581 forkRef.cleanup = () => { 582 for (let i = 0; i < refs.length; i += 1) { 583 const ref = refs[i]; 584 if (ref == null) { 585 continue; 586 } 587 switch (typeof ref) { 588 case "function": { 589 const cleanupCallback = cleanupCallbacks[i]; 590 if (typeof cleanupCallback === "function") { 591 cleanupCallback(); 592 } else { 593 ref(null); 594 } 595 break; 596 } 597 case "object": { 598 ref.current = null; 599 break; 600 } 601 default: 602 } 603 } 604 }; 605 } 606 }; 607 } 608 609 // node_modules/@base-ui/utils/getReactElementRef.mjs 610 var React6 = __toESM(require_react(), 1); 611 612 // node_modules/@base-ui/utils/reactVersion.mjs 613 var React5 = __toESM(require_react(), 1); 614 var majorVersion = parseInt(React5.version, 10); 615 function isReactVersionAtLeast(reactVersionToCheck) { 616 return majorVersion >= reactVersionToCheck; 617 } 618 619 // node_modules/@base-ui/utils/getReactElementRef.mjs 620 function getReactElementRef(element) { 621 if (!/* @__PURE__ */ React6.isValidElement(element)) { 622 return null; 623 } 624 const reactElement = element; 625 const propsWithRef = reactElement.props; 626 return (isReactVersionAtLeast(19) ? propsWithRef?.ref : reactElement.ref) ?? null; 627 } 628 629 // node_modules/@base-ui/utils/mergeObjects.mjs 630 function mergeObjects(a, b) { 631 if (a && !b) { 632 return a; 633 } 634 if (!a && b) { 635 return b; 636 } 637 if (a || b) { 638 return { 639 ...a, 640 ...b 641 }; 642 } 643 return void 0; 644 } 645 646 // node_modules/@base-ui/utils/empty.mjs 647 function NOOP() { 648 } 649 var EMPTY_ARRAY = Object.freeze([]); 650 var EMPTY_OBJECT = Object.freeze({}); 651 652 // node_modules/@base-ui/react/internals/getStateAttributesProps.mjs 653 function getStateAttributesProps(state, customMapping) { 654 const props = {}; 655 for (const key in state) { 656 const value = state[key]; 657 if (customMapping?.hasOwnProperty(key)) { 658 const customProps = customMapping[key](value); 659 if (customProps != null) { 660 Object.assign(props, customProps); 661 } 662 continue; 663 } 664 if (value === true) { 665 props[`data-$key.toLowerCase()}`] = ""; 666 } else if (value) { 667 props[`data-$key.toLowerCase()}`] = value.toString(); 668 } 669 } 670 return props; 671 } 672 673 // node_modules/@base-ui/react/utils/resolveClassName.mjs 674 function resolveClassName(className, state) { 675 return typeof className === "function" ? className(state) : className; 676 } 677 678 // node_modules/@base-ui/react/utils/resolveStyle.mjs 679 function resolveStyle(style, state) { 680 return typeof style === "function" ? style(state) : style; 681 } 682 683 // node_modules/@base-ui/react/merge-props/mergeProps.mjs 684 var EMPTY_PROPS = {}; 685 function mergeProps(a, b, c, d, e) { 686 if (!c && !d && !e && !a) { 687 return createInitialMergedProps(b); 688 } 689 let merged = createInitialMergedProps(a); 690 if (b) { 691 merged = mergeInto(merged, b); 692 } 693 if (c) { 694 merged = mergeInto(merged, c); 695 } 696 if (d) { 697 merged = mergeInto(merged, d); 698 } 699 if (e) { 700 merged = mergeInto(merged, e); 701 } 702 return merged; 703 } 704 function mergePropsN(props) { 705 if (props.length === 0) { 706 return EMPTY_PROPS; 707 } 708 if (props.length === 1) { 709 return createInitialMergedProps(props[0]); 710 } 711 let merged = createInitialMergedProps(props[0]); 712 for (let i = 1; i < props.length; i += 1) { 713 merged = mergeInto(merged, props[i]); 714 } 715 return merged; 716 } 717 function createInitialMergedProps(inputProps) { 718 if (isPropsGetter(inputProps)) { 719 return { 720 ...resolvePropsGetter(inputProps, EMPTY_PROPS) 721 }; 722 } 723 return copyInitialProps(inputProps); 724 } 725 function mergeInto(merged, inputProps) { 726 if (isPropsGetter(inputProps)) { 727 return resolvePropsGetter(inputProps, merged); 728 } 729 return mutablyMergeInto(merged, inputProps); 730 } 731 function copyInitialProps(inputProps) { 732 const copiedProps = { 733 ...inputProps 734 }; 735 for (const propName in copiedProps) { 736 const propValue = copiedProps[propName]; 737 if (isEventHandler(propName, propValue)) { 738 copiedProps[propName] = wrapEventHandler(propValue); 739 } 740 } 741 return copiedProps; 742 } 743 function mutablyMergeInto(mergedProps, externalProps) { 744 if (!externalProps) { 745 return mergedProps; 746 } 747 for (const propName in externalProps) { 748 const externalPropValue = externalProps[propName]; 749 switch (propName) { 750 case "style": { 751 mergedProps[propName] = mergeObjects(mergedProps.style, externalPropValue); 752 break; 753 } 754 case "className": { 755 mergedProps[propName] = mergeClassNames(mergedProps.className, externalPropValue); 756 break; 757 } 758 default: { 759 if (isEventHandler(propName, externalPropValue)) { 760 mergedProps[propName] = mergeEventHandlers(mergedProps[propName], externalPropValue); 761 } else { 762 mergedProps[propName] = externalPropValue; 763 } 764 } 765 } 766 } 767 return mergedProps; 768 } 769 function isEventHandler(key, value) { 770 const code0 = key.charCodeAt(0); 771 const code1 = key.charCodeAt(1); 772 const code2 = key.charCodeAt(2); 773 return code0 === 111 && code1 === 110 && code2 >= 65 && code2 <= 90 && (typeof value === "function" || typeof value === "undefined"); 774 } 775 function isPropsGetter(inputProps) { 776 return typeof inputProps === "function"; 777 } 778 function resolvePropsGetter(inputProps, previousProps) { 779 if (isPropsGetter(inputProps)) { 780 return inputProps(previousProps); 781 } 782 return inputProps ?? EMPTY_PROPS; 783 } 784 function mergeEventHandlers(ourHandler, theirHandler) { 785 if (!theirHandler) { 786 return ourHandler; 787 } 788 if (!ourHandler) { 789 return wrapEventHandler(theirHandler); 790 } 791 return (...args) => { 792 const event = args[0]; 793 if (isSyntheticEvent(event)) { 794 const baseUIEvent = event; 795 makeEventPreventable(baseUIEvent); 796 const result2 = theirHandler(...args); 797 if (!baseUIEvent.baseUIHandlerPrevented) { 798 ourHandler?.(...args); 799 } 800 return result2; 801 } 802 const result = theirHandler(...args); 803 ourHandler?.(...args); 804 return result; 805 }; 806 } 807 function wrapEventHandler(handler) { 808 if (!handler) { 809 return handler; 810 } 811 return (...args) => { 812 const event = args[0]; 813 if (isSyntheticEvent(event)) { 814 makeEventPreventable(event); 815 } 816 return handler(...args); 817 }; 818 } 819 function makeEventPreventable(event) { 820 event.preventBaseUIHandler = () => { 821 event.baseUIHandlerPrevented = true; 822 }; 823 return event; 824 } 825 function mergeClassNames(ourClassName, theirClassName) { 826 if (theirClassName) { 827 if (ourClassName) { 828 return theirClassName + " " + ourClassName; 829 } 830 return theirClassName; 831 } 832 return ourClassName; 833 } 834 function isSyntheticEvent(event) { 835 return event != null && typeof event === "object" && "nativeEvent" in event; 836 } 837 838 // node_modules/@base-ui/react/internals/useRenderElement.mjs 839 var import_react = __toESM(require_react(), 1); 840 function useRenderElement(element, componentProps, params = {}) { 841 const renderProp = componentProps.render; 842 const outProps = useRenderElementProps(componentProps, params); 843 if (params.enabled === false) { 844 return null; 845 } 846 const state = params.state ?? EMPTY_OBJECT; 847 return evaluateRenderProp(element, renderProp, outProps, state); 848 } 849 function useRenderElementProps(componentProps, params = {}) { 850 const { 851 className: classNameProp, 852 style: styleProp, 853 render: renderProp 854 } = componentProps; 855 const { 856 state = EMPTY_OBJECT, 857 ref, 858 props, 859 stateAttributesMapping: stateAttributesMapping3, 860 enabled = true 861 } = params; 862 const className = enabled ? resolveClassName(classNameProp, state) : void 0; 863 const style = enabled ? resolveStyle(styleProp, state) : void 0; 864 const stateProps = enabled ? getStateAttributesProps(state, stateAttributesMapping3) : EMPTY_OBJECT; 865 const resolvedProps = enabled && props ? resolveRenderFunctionProps(props) : void 0; 866 const outProps = enabled ? mergeObjects(stateProps, resolvedProps) ?? {} : EMPTY_OBJECT; 867 if (typeof document !== "undefined") { 868 if (!enabled) { 869 useMergedRefs(null, null); 870 } else if (Array.isArray(ref)) { 871 outProps.ref = useMergedRefsN([outProps.ref, getReactElementRef(renderProp), ...ref]); 872 } else { 873 outProps.ref = useMergedRefs(outProps.ref, getReactElementRef(renderProp), ref); 874 } 875 } 876 if (!enabled) { 877 return EMPTY_OBJECT; 878 } 879 if (className !== void 0) { 880 outProps.className = mergeClassNames(outProps.className, className); 881 } 882 if (style !== void 0) { 883 outProps.style = mergeObjects(outProps.style, style); 884 } 885 return outProps; 886 } 887 function resolveRenderFunctionProps(props) { 888 if (Array.isArray(props)) { 889 return mergePropsN(props); 890 } 891 return mergeProps(void 0, props); 892 } 893 var REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for("react.lazy"); 894 var COMPONENT_IDENTIFIER_PATTERN = /^[A-Z][A-Za-z0-9$]*$/; 895 var LOWERCASE_CHARACTER_PATTERN = /[a-z]/; 896 function evaluateRenderProp(element, render, props, state) { 897 if (render) { 898 if (typeof render === "function") { 899 if (true) { 900 warnIfRenderPropLooksLikeComponent(render); 901 } 902 return render(props, state); 903 } 904 const mergedProps = mergeProps(props, render.props); 905 mergedProps.ref = props.ref; 906 let newElement = render; 907 if (newElement?.$$typeof === REACT_LAZY_TYPE) { 908 const children = React7.Children.toArray(render); 909 newElement = children[0]; 910 } 911 if (true) { 912 if (!/* @__PURE__ */ React7.isValidElement(newElement)) { 913 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")); 914 } 915 } 916 return /* @__PURE__ */ React7.cloneElement(newElement, mergedProps); 917 } 918 if (element) { 919 if (typeof element === "string") { 920 return renderTag(element, props); 921 } 922 } 923 throw new Error(true ? "Base UI: Render element or function are not defined." : formatErrorMessage_default(8)); 924 } 925 function warnIfRenderPropLooksLikeComponent(renderFn) { 926 const functionName = renderFn.name; 927 if (functionName.length === 0) { 928 return; 929 } 930 if (!COMPONENT_IDENTIFIER_PATTERN.test(functionName)) { 931 return; 932 } 933 if (!LOWERCASE_CHARACTER_PATTERN.test(functionName)) { 934 return; 935 } 936 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"); 937 } 938 function renderTag(Tag, props) { 939 if (Tag === "button") { 940 return /* @__PURE__ */ (0, import_react.createElement)("button", { 941 type: "button", 942 ...props, 943 key: props.key 944 }); 945 } 946 if (Tag === "img") { 947 return /* @__PURE__ */ (0, import_react.createElement)("img", { 948 alt: "", 949 ...props, 950 key: props.key 951 }); 952 } 953 return /* @__PURE__ */ React7.createElement(Tag, props); 954 } 955 956 // node_modules/@base-ui/utils/useId.mjs 957 var React8 = __toESM(require_react(), 1); 958 var globalId = 0; 959 function useGlobalId(idOverride, prefix = "mui") { 960 const [defaultId, setDefaultId] = React8.useState(idOverride); 961 const id = idOverride || defaultId; 962 React8.useEffect(() => { 963 if (defaultId == null) { 964 globalId += 1; 965 setDefaultId(`$prefix}-$globalId}`); 966 } 967 }, [defaultId, prefix]); 968 return id; 969 } 970 var maybeReactUseId = SafeReact.useId; 971 function useId(idOverride, prefix) { 972 if (maybeReactUseId !== void 0) { 973 const reactId = maybeReactUseId(); 974 return idOverride ?? (prefix ? `$prefix}-$reactId}` : reactId); 975 } 976 return useGlobalId(idOverride, prefix); 977 } 978 979 // node_modules/@base-ui/react/internals/useBaseUiId.mjs 980 function useBaseUiId(idOverride) { 981 return useId(idOverride, "base-ui"); 982 } 983 984 // node_modules/@base-ui/react/internals/reason-parts.mjs 985 var reason_parts_exports = {}; 986 __export(reason_parts_exports, { 987 cancelOpen: () => cancelOpen, 988 chipRemovePress: () => chipRemovePress, 989 clearPress: () => clearPress, 990 closePress: () => closePress, 991 closeWatcher: () => closeWatcher, 992 decrementPress: () => decrementPress, 993 disabled: () => disabled, 994 drag: () => drag, 995 escapeKey: () => escapeKey, 996 focusOut: () => focusOut, 997 imperativeAction: () => imperativeAction, 998 incrementPress: () => incrementPress, 999 initial: () => initial, 1000 inputBlur: () => inputBlur, 1001 inputChange: () => inputChange, 1002 inputClear: () => inputClear, 1003 inputPaste: () => inputPaste, 1004 inputPress: () => inputPress, 1005 itemPress: () => itemPress, 1006 keyboard: () => keyboard, 1007 linkPress: () => linkPress, 1008 listNavigation: () => listNavigation, 1009 missing: () => missing, 1010 none: () => none, 1011 outsidePress: () => outsidePress, 1012 pointer: () => pointer, 1013 scrub: () => scrub, 1014 siblingOpen: () => siblingOpen, 1015 swipe: () => swipe, 1016 trackPress: () => trackPress, 1017 triggerFocus: () => triggerFocus, 1018 triggerHover: () => triggerHover, 1019 triggerPress: () => triggerPress, 1020 wheel: () => wheel, 1021 windowResize: () => windowResize 1022 }); 1023 var none = "none"; 1024 var triggerPress = "trigger-press"; 1025 var triggerHover = "trigger-hover"; 1026 var triggerFocus = "trigger-focus"; 1027 var outsidePress = "outside-press"; 1028 var itemPress = "item-press"; 1029 var closePress = "close-press"; 1030 var linkPress = "link-press"; 1031 var clearPress = "clear-press"; 1032 var chipRemovePress = "chip-remove-press"; 1033 var trackPress = "track-press"; 1034 var incrementPress = "increment-press"; 1035 var decrementPress = "decrement-press"; 1036 var inputChange = "input-change"; 1037 var inputClear = "input-clear"; 1038 var inputBlur = "input-blur"; 1039 var inputPaste = "input-paste"; 1040 var inputPress = "input-press"; 1041 var focusOut = "focus-out"; 1042 var escapeKey = "escape-key"; 1043 var closeWatcher = "close-watcher"; 1044 var listNavigation = "list-navigation"; 1045 var keyboard = "keyboard"; 1046 var pointer = "pointer"; 1047 var drag = "drag"; 1048 var wheel = "wheel"; 1049 var scrub = "scrub"; 1050 var cancelOpen = "cancel-open"; 1051 var siblingOpen = "sibling-open"; 1052 var disabled = "disabled"; 1053 var missing = "missing"; 1054 var initial = "initial"; 1055 var imperativeAction = "imperative-action"; 1056 var swipe = "swipe"; 1057 var windowResize = "window-resize"; 1058 1059 // node_modules/@base-ui/react/internals/createBaseUIEventDetails.mjs 1060 function createChangeEventDetails(reason, event, trigger, customProperties) { 1061 let canceled = false; 1062 let allowPropagation = false; 1063 const custom = customProperties ?? EMPTY_OBJECT; 1064 const details = { 1065 reason, 1066 event: event ?? new Event("base-ui"), 1067 cancel() { 1068 canceled = true; 1069 }, 1070 allowPropagation() { 1071 allowPropagation = true; 1072 }, 1073 get isCanceled() { 1074 return canceled; 1075 }, 1076 get isPropagationAllowed() { 1077 return allowPropagation; 1078 }, 1079 trigger, 1080 ...custom 1081 }; 1082 return details; 1083 } 1084 1085 // node_modules/@base-ui/react/internals/useTransitionStatus.mjs 1086 var React10 = __toESM(require_react(), 1); 1087 1088 // node_modules/@base-ui/utils/useOnMount.mjs 1089 var React9 = __toESM(require_react(), 1); 1090 var EMPTY = []; 1091 function useOnMount(fn) { 1092 React9.useEffect(fn, EMPTY); 1093 } 1094 1095 // node_modules/@base-ui/utils/useAnimationFrame.mjs 1096 var EMPTY2 = null; 1097 var LAST_RAF = globalThis.requestAnimationFrame; 1098 var Scheduler = class { 1099 /* This implementation uses an array as a backing data-structure for frame callbacks. 1100 * It allows `O(1)` callback cancelling by inserting a `null` in the array, though it 1101 * never calls the native `cancelAnimationFrame` if there are no frames left. This can 1102 * be much more efficient if there is a call pattern that alterns as 1103 * "request-cancel-request-cancel-…". 1104 * But in the case of "request-request-…-cancel-cancel-…", it leaves the final animation 1105 * frame to run anyway. We turn that frame into a `O(1)` no-op via `callbacksCount`. */ 1106 callbacks = []; 1107 callbacksCount = 0; 1108 nextId = 1; 1109 startId = 1; 1110 isScheduled = false; 1111 tick = (timestamp) => { 1112 this.isScheduled = false; 1113 const currentCallbacks = this.callbacks; 1114 const currentCallbacksCount = this.callbacksCount; 1115 this.callbacks = []; 1116 this.callbacksCount = 0; 1117 this.startId = this.nextId; 1118 if (currentCallbacksCount > 0) { 1119 for (let i = 0; i < currentCallbacks.length; i += 1) { 1120 currentCallbacks[i]?.(timestamp); 1121 } 1122 } 1123 }; 1124 request(fn) { 1125 const id = this.nextId; 1126 this.nextId += 1; 1127 this.callbacks.push(fn); 1128 this.callbacksCount += 1; 1129 const didRAFChange = LAST_RAF !== requestAnimationFrame && (LAST_RAF = requestAnimationFrame, true); 1130 if (!this.isScheduled || didRAFChange) { 1131 requestAnimationFrame(this.tick); 1132 this.isScheduled = true; 1133 } 1134 return id; 1135 } 1136 cancel(id) { 1137 const index2 = id - this.startId; 1138 if (index2 < 0 || index2 >= this.callbacks.length) { 1139 return; 1140 } 1141 this.callbacks[index2] = null; 1142 this.callbacksCount -= 1; 1143 } 1144 }; 1145 var scheduler = new Scheduler(); 1146 var AnimationFrame = class _AnimationFrame { 1147 static create() { 1148 return new _AnimationFrame(); 1149 } 1150 static request(fn) { 1151 return scheduler.request(fn); 1152 } 1153 static cancel(id) { 1154 return scheduler.cancel(id); 1155 } 1156 currentId = EMPTY2; 1157 /** 1158 * Executes `fn` after `delay`, clearing any previously scheduled call. 1159 */ 1160 request(fn) { 1161 this.cancel(); 1162 this.currentId = scheduler.request(() => { 1163 this.currentId = EMPTY2; 1164 fn(); 1165 }); 1166 } 1167 cancel = () => { 1168 if (this.currentId !== EMPTY2) { 1169 scheduler.cancel(this.currentId); 1170 this.currentId = EMPTY2; 1171 } 1172 }; 1173 disposeEffect = () => { 1174 return this.cancel; 1175 }; 1176 }; 1177 function useAnimationFrame() { 1178 const timeout = useRefWithInit(AnimationFrame.create).current; 1179 useOnMount(timeout.disposeEffect); 1180 return timeout; 1181 } 1182 1183 // node_modules/@base-ui/react/internals/useTransitionStatus.mjs 1184 function useTransitionStatus(open, enableIdleState = false, deferEndingState = false) { 1185 const [transitionStatus, setTransitionStatus] = React10.useState(open && enableIdleState ? "idle" : void 0); 1186 const [mounted, setMounted] = React10.useState(open); 1187 if (open && !mounted) { 1188 setMounted(true); 1189 setTransitionStatus("starting"); 1190 } 1191 if (!open && mounted && transitionStatus !== "ending" && !deferEndingState) { 1192 setTransitionStatus("ending"); 1193 } 1194 if (!open && !mounted && transitionStatus === "ending") { 1195 setTransitionStatus(void 0); 1196 } 1197 useIsoLayoutEffect(() => { 1198 if (!open && mounted && transitionStatus !== "ending" && deferEndingState) { 1199 const frame = AnimationFrame.request(() => { 1200 setTransitionStatus("ending"); 1201 }); 1202 return () => { 1203 AnimationFrame.cancel(frame); 1204 }; 1205 } 1206 return void 0; 1207 }, [open, mounted, transitionStatus, deferEndingState]); 1208 useIsoLayoutEffect(() => { 1209 if (!open || enableIdleState) { 1210 return void 0; 1211 } 1212 const frame = AnimationFrame.request(() => { 1213 setTransitionStatus(void 0); 1214 }); 1215 return () => { 1216 AnimationFrame.cancel(frame); 1217 }; 1218 }, [enableIdleState, open]); 1219 useIsoLayoutEffect(() => { 1220 if (!open || !enableIdleState) { 1221 return void 0; 1222 } 1223 if (open && mounted && transitionStatus !== "idle") { 1224 setTransitionStatus("starting"); 1225 } 1226 const frame = AnimationFrame.request(() => { 1227 setTransitionStatus("idle"); 1228 }); 1229 return () => { 1230 AnimationFrame.cancel(frame); 1231 }; 1232 }, [enableIdleState, open, mounted, transitionStatus]); 1233 return { 1234 mounted, 1235 setMounted, 1236 transitionStatus 1237 }; 1238 } 1239 1240 // node_modules/@base-ui/react/internals/stateAttributesMapping.mjs 1241 var TransitionStatusDataAttributes = /* @__PURE__ */ (function(TransitionStatusDataAttributes2) { 1242 TransitionStatusDataAttributes2["startingStyle"] = "data-starting-style"; 1243 TransitionStatusDataAttributes2["endingStyle"] = "data-ending-style"; 1244 return TransitionStatusDataAttributes2; 1245 })({}); 1246 var STARTING_HOOK = { 1247 [TransitionStatusDataAttributes.startingStyle]: "" 1248 }; 1249 var ENDING_HOOK = { 1250 [TransitionStatusDataAttributes.endingStyle]: "" 1251 }; 1252 var transitionStatusMapping = { 1253 transitionStatus(value) { 1254 if (value === "starting") { 1255 return STARTING_HOOK; 1256 } 1257 if (value === "ending") { 1258 return ENDING_HOOK; 1259 } 1260 return null; 1261 } 1262 }; 1263 1264 // node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs 1265 function hasWindow() { 1266 return typeof window !== "undefined"; 1267 } 1268 function getNodeName(node) { 1269 if (isNode(node)) { 1270 return (node.nodeName || "").toLowerCase(); 1271 } 1272 return "#document"; 1273 } 1274 function getWindow(node) { 1275 var _node$ownerDocument; 1276 return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window; 1277 } 1278 function getDocumentElement(node) { 1279 var _ref; 1280 return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement; 1281 } 1282 function isNode(value) { 1283 if (!hasWindow()) { 1284 return false; 1285 } 1286 return value instanceof Node || value instanceof getWindow(value).Node; 1287 } 1288 function isElement(value) { 1289 if (!hasWindow()) { 1290 return false; 1291 } 1292 return value instanceof Element || value instanceof getWindow(value).Element; 1293 } 1294 function isHTMLElement(value) { 1295 if (!hasWindow()) { 1296 return false; 1297 } 1298 return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement; 1299 } 1300 function isShadowRoot(value) { 1301 if (!hasWindow() || typeof ShadowRoot === "undefined") { 1302 return false; 1303 } 1304 return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot; 1305 } 1306 function isOverflowElement(element) { 1307 const { 1308 overflow, 1309 overflowX, 1310 overflowY, 1311 display 1312 } = getComputedStyle2(element); 1313 return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== "inline" && display !== "contents"; 1314 } 1315 function isTableElement(element) { 1316 return /^(table|td|th)$/.test(getNodeName(element)); 1317 } 1318 function isTopLayer(element) { 1319 try { 1320 if (element.matches(":popover-open")) { 1321 return true; 1322 } 1323 } catch (_e) { 1324 } 1325 try { 1326 return element.matches(":modal"); 1327 } catch (_e) { 1328 return false; 1329 } 1330 } 1331 var willChangeRe = /transform|translate|scale|rotate|perspective|filter/; 1332 var containRe = /paint|layout|strict|content/; 1333 var isNotNone = (value) => !!value && value !== "none"; 1334 var isWebKitValue; 1335 function isContainingBlock(elementOrCss) { 1336 const css = isElement(elementOrCss) ? getComputedStyle2(elementOrCss) : elementOrCss; 1337 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 || ""); 1338 } 1339 function getContainingBlock(element) { 1340 let currentNode = getParentNode(element); 1341 while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) { 1342 if (isContainingBlock(currentNode)) { 1343 return currentNode; 1344 } else if (isTopLayer(currentNode)) { 1345 return null; 1346 } 1347 currentNode = getParentNode(currentNode); 1348 } 1349 return null; 1350 } 1351 function isWebKit() { 1352 if (isWebKitValue == null) { 1353 isWebKitValue = typeof CSS !== "undefined" && CSS.supports && CSS.supports("-webkit-backdrop-filter", "none"); 1354 } 1355 return isWebKitValue; 1356 } 1357 function isLastTraversableNode(node) { 1358 return /^(html|body|#document)$/.test(getNodeName(node)); 1359 } 1360 function getComputedStyle2(element) { 1361 return getWindow(element).getComputedStyle(element); 1362 } 1363 function getNodeScroll(element) { 1364 if (isElement(element)) { 1365 return { 1366 scrollLeft: element.scrollLeft, 1367 scrollTop: element.scrollTop 1368 }; 1369 } 1370 return { 1371 scrollLeft: element.scrollX, 1372 scrollTop: element.scrollY 1373 }; 1374 } 1375 function getParentNode(node) { 1376 if (getNodeName(node) === "html") { 1377 return node; 1378 } 1379 const result = ( 1380 // Step into the shadow DOM of the parent of a slotted node. 1381 node.assignedSlot || // DOM Element detected. 1382 node.parentNode || // ShadowRoot detected. 1383 isShadowRoot(node) && node.host || // Fallback. 1384 getDocumentElement(node) 1385 ); 1386 return isShadowRoot(result) ? result.host : result; 1387 } 1388 function getNearestOverflowAncestor(node) { 1389 const parentNode = getParentNode(node); 1390 if (isLastTraversableNode(parentNode)) { 1391 return node.ownerDocument ? node.ownerDocument.body : node.body; 1392 } 1393 if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) { 1394 return parentNode; 1395 } 1396 return getNearestOverflowAncestor(parentNode); 1397 } 1398 function getOverflowAncestors(node, list, traverseIframes) { 1399 var _node$ownerDocument2; 1400 if (list === void 0) { 1401 list = []; 1402 } 1403 if (traverseIframes === void 0) { 1404 traverseIframes = true; 1405 } 1406 const scrollableAncestor = getNearestOverflowAncestor(node); 1407 const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body); 1408 const win = getWindow(scrollableAncestor); 1409 if (isBody) { 1410 const frameElement = getFrameElement(win); 1411 return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []); 1412 } else { 1413 return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes)); 1414 } 1415 } 1416 function getFrameElement(win) { 1417 return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null; 1418 } 1419 1420 // node_modules/@base-ui/utils/addEventListener.mjs 1421 function addEventListener(target, type, listener, options) { 1422 target.addEventListener(type, listener, options); 1423 return () => { 1424 target.removeEventListener(type, listener, options); 1425 }; 1426 } 1427 1428 // node_modules/@base-ui/utils/useValueAsRef.mjs 1429 function useValueAsRef(value) { 1430 const latest = useRefWithInit(createLatestRef, value).current; 1431 latest.next = value; 1432 useIsoLayoutEffect(latest.effect); 1433 return latest; 1434 } 1435 function createLatestRef(value) { 1436 const latest = { 1437 current: value, 1438 next: value, 1439 effect: () => { 1440 latest.current = latest.next; 1441 } 1442 }; 1443 return latest; 1444 } 1445 1446 // node_modules/@base-ui/utils/owner.mjs 1447 function ownerDocument(node) { 1448 return node?.ownerDocument || document; 1449 } 1450 1451 // node_modules/@base-ui/react/internals/useOpenChangeComplete.mjs 1452 var React11 = __toESM(require_react(), 1); 1453 1454 // node_modules/@base-ui/react/internals/useAnimationsFinished.mjs 1455 var ReactDOM = __toESM(require_react_dom(), 1); 1456 1457 // node_modules/@base-ui/react/utils/resolveRef.mjs 1458 function resolveRef(maybeRef) { 1459 if (maybeRef == null) { 1460 return maybeRef; 1461 } 1462 return "current" in maybeRef ? maybeRef.current : maybeRef; 1463 } 1464 1465 // node_modules/@base-ui/react/internals/useAnimationsFinished.mjs 1466 function useAnimationsFinished(elementOrRef, waitForStartingStyleRemoved = false, treatAbortedAsFinished = true) { 1467 const frame = useAnimationFrame(); 1468 return useStableCallback((fnToExecute, signal = null) => { 1469 frame.cancel(); 1470 const element = resolveRef(elementOrRef); 1471 if (element == null) { 1472 return; 1473 } 1474 const resolvedElement = element; 1475 const done = () => { 1476 ReactDOM.flushSync(fnToExecute); 1477 }; 1478 if (typeof resolvedElement.getAnimations !== "function" || globalThis.BASE_UI_ANIMATIONS_DISABLED) { 1479 fnToExecute(); 1480 return; 1481 } 1482 function exec() { 1483 Promise.all(resolvedElement.getAnimations().map((animation) => animation.finished)).then(() => { 1484 if (!signal?.aborted) { 1485 done(); 1486 } 1487 }).catch(() => { 1488 if (treatAbortedAsFinished) { 1489 if (!signal?.aborted) { 1490 done(); 1491 } 1492 return; 1493 } 1494 const currentAnimations = resolvedElement.getAnimations(); 1495 if (!signal?.aborted && currentAnimations.length > 0 && currentAnimations.some((animation) => animation.pending || animation.playState !== "finished")) { 1496 exec(); 1497 } 1498 }); 1499 } 1500 if (waitForStartingStyleRemoved) { 1501 const startingStyleAttribute = TransitionStatusDataAttributes.startingStyle; 1502 if (!resolvedElement.hasAttribute(startingStyleAttribute)) { 1503 frame.request(exec); 1504 return; 1505 } 1506 const attributeObserver = new MutationObserver(() => { 1507 if (!resolvedElement.hasAttribute(startingStyleAttribute)) { 1508 attributeObserver.disconnect(); 1509 exec(); 1510 } 1511 }); 1512 attributeObserver.observe(resolvedElement, { 1513 attributes: true, 1514 attributeFilter: [startingStyleAttribute] 1515 }); 1516 signal?.addEventListener("abort", () => attributeObserver.disconnect(), { 1517 once: true 1518 }); 1519 return; 1520 } 1521 frame.request(exec); 1522 }); 1523 } 1524 1525 // node_modules/@base-ui/react/internals/useOpenChangeComplete.mjs 1526 function useOpenChangeComplete(parameters) { 1527 const { 1528 enabled = true, 1529 open, 1530 ref, 1531 onComplete: onCompleteParam 1532 } = parameters; 1533 const onComplete = useStableCallback(onCompleteParam); 1534 const runOnceAnimationsFinish = useAnimationsFinished(ref, open, false); 1535 React11.useEffect(() => { 1536 if (!enabled) { 1537 return void 0; 1538 } 1539 const abortController = new AbortController(); 1540 runOnceAnimationsFinish(onComplete, abortController.signal); 1541 return () => { 1542 abortController.abort(); 1543 }; 1544 }, [enabled, open, onComplete, runOnceAnimationsFinish]); 1545 } 1546 1547 // node_modules/@base-ui/utils/useOnFirstRender.mjs 1548 var React12 = __toESM(require_react(), 1); 1549 function useOnFirstRender(fn) { 1550 const ref = React12.useRef(true); 1551 if (ref.current) { 1552 ref.current = false; 1553 fn(); 1554 } 1555 } 1556 1557 // node_modules/@base-ui/utils/platform/parts.mjs 1558 var parts_exports = {}; 1559 __export(parts_exports, { 1560 engine: () => engine_exports, 1561 env: () => env_exports, 1562 os: () => os_exports, 1563 screenReader: () => screen_reader_exports 1564 }); 1565 1566 // node_modules/@base-ui/utils/platform/os.mjs 1567 var os_exports = {}; 1568 __export(os_exports, { 1569 android: () => android, 1570 apple: () => apple, 1571 ios: () => ios, 1572 linux: () => linux, 1573 mac: () => mac, 1574 windows: () => windows 1575 }); 1576 1577 // node_modules/@base-ui/utils/platform/shared.mjs 1578 function readRawData() { 1579 if (typeof navigator === "undefined") { 1580 return { 1581 userAgent: "", 1582 platform: "", 1583 maxTouchPoints: 0 1584 }; 1585 } 1586 if (true) { 1587 const uaData = navigator.userAgentData; 1588 if (uaData && Array.isArray(uaData.brands)) { 1589 return { 1590 userAgent: uaData.brands.map(({ 1591 brand, 1592 version: version2 1593 }) => `$brand}/$version2}`).join(" "), 1594 platform: uaData.platform ?? navigator.platform ?? "", 1595 maxTouchPoints: navigator.maxTouchPoints ?? 0 1596 }; 1597 } 1598 } 1599 return { 1600 userAgent: navigator.userAgent, 1601 platform: navigator.platform ?? "", 1602 maxTouchPoints: navigator.maxTouchPoints ?? 0 1603 }; 1604 } 1605 var { 1606 userAgent, 1607 platform, 1608 maxTouchPoints 1609 } = readRawData(); 1610 var lowerUserAgent = userAgent.toLowerCase(); 1611 var lowerPlatform = platform.toLowerCase(); 1612 1613 // node_modules/@base-ui/utils/platform/os.mjs 1614 var ios = /^i(os$|p)/.test(lowerPlatform) || lowerPlatform === "macintel" && maxTouchPoints > 1; 1615 var ANDROID_STRING = "android"; 1616 var android = lowerPlatform === ANDROID_STRING || lowerUserAgent.includes(ANDROID_STRING); 1617 var mac = !ios && lowerPlatform.startsWith("mac"); 1618 var windows = lowerPlatform.startsWith("win"); 1619 var linux = !android && /^(linux|chrome os)/.test(lowerPlatform); 1620 var apple = mac || ios; 1621 1622 // node_modules/@base-ui/utils/platform/engine.mjs 1623 var engine_exports = {}; 1624 __export(engine_exports, { 1625 blink: () => blink, 1626 gecko: () => gecko, 1627 webkit: () => webkit 1628 }); 1629 var webkit = typeof CSS !== "undefined" && !!CSS.supports?.("-webkit-backdrop-filter:none"); 1630 var gecko = !webkit && lowerUserAgent.includes("firefox"); 1631 var blink = !webkit && lowerUserAgent.includes("chrom"); 1632 1633 // node_modules/@base-ui/utils/platform/screen-reader.mjs 1634 var screen_reader_exports = {}; 1635 __export(screen_reader_exports, { 1636 voiceOver: () => voiceOver 1637 }); 1638 var voiceOver = apple; 1639 1640 // node_modules/@base-ui/utils/platform/env.mjs 1641 var env_exports = {}; 1642 __export(env_exports, { 1643 jsdom: () => jsdom 1644 }); 1645 var jsdom = /jsdom|happydom/.test(lowerUserAgent); 1646 1647 // node_modules/@base-ui/utils/useTimeout.mjs 1648 var EMPTY3 = 0; 1649 var Timeout = class _Timeout { 1650 static create() { 1651 return new _Timeout(); 1652 } 1653 currentId = EMPTY3; 1654 /** 1655 * Executes `fn` after `delay`, clearing any previously scheduled call. 1656 */ 1657 start(delay, fn) { 1658 this.clear(); 1659 this.currentId = setTimeout(() => { 1660 this.currentId = EMPTY3; 1661 fn(); 1662 }, delay); 1663 } 1664 isStarted() { 1665 return this.currentId !== EMPTY3; 1666 } 1667 clear = () => { 1668 if (this.currentId !== EMPTY3) { 1669 clearTimeout(this.currentId); 1670 this.currentId = EMPTY3; 1671 } 1672 }; 1673 disposeEffect = () => { 1674 return this.clear; 1675 }; 1676 }; 1677 function useTimeout() { 1678 const timeout = useRefWithInit(Timeout.create).current; 1679 useOnMount(timeout.disposeEffect); 1680 return timeout; 1681 } 1682 1683 // node_modules/@base-ui/react/floating-ui-react/components/FloatingDelayGroup.mjs 1684 var React13 = __toESM(require_react(), 1); 1685 1686 // node_modules/@base-ui/react/floating-ui-react/utils/event.mjs 1687 function isReactEvent(event) { 1688 return "nativeEvent" in event; 1689 } 1690 function isMouseLikePointerType(pointerType, strict) { 1691 const values = ["mouse", "pen"]; 1692 if (!strict) { 1693 values.push("", void 0); 1694 } 1695 return values.includes(pointerType); 1696 } 1697 function isClickLikeEvent(event) { 1698 const type = event.type; 1699 return type === "click" || type === "mousedown" || type === "keydown" || type === "keyup"; 1700 } 1701 1702 // node_modules/@base-ui/react/floating-ui-react/utils/constants.mjs 1703 var FOCUSABLE_ATTRIBUTE = "data-base-ui-focusable"; 1704 var TYPEABLE_SELECTOR = "input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])"; 1705 1706 // node_modules/@base-ui/react/internals/shadowDom.mjs 1707 function activeElement(doc) { 1708 let element = doc.activeElement; 1709 while (element?.shadowRoot?.activeElement != null) { 1710 element = element.shadowRoot.activeElement; 1711 } 1712 return element; 1713 } 1714 function contains(parent, child) { 1715 if (!parent || !child) { 1716 return false; 1717 } 1718 const rootNode = child.getRootNode?.(); 1719 if (parent.contains(child)) { 1720 return true; 1721 } 1722 if (rootNode && isShadowRoot(rootNode)) { 1723 let next = child; 1724 while (next) { 1725 if (parent === next) { 1726 return true; 1727 } 1728 next = next.parentNode || next.host; 1729 } 1730 } 1731 return false; 1732 } 1733 function getTarget(event) { 1734 if ("composedPath" in event) { 1735 return event.composedPath()[0]; 1736 } 1737 return event.target; 1738 } 1739 1740 // node_modules/@base-ui/react/floating-ui-react/utils/element.mjs 1741 function isTargetInsideEnabledTrigger(target, triggerElements) { 1742 if (!isElement(target)) { 1743 return false; 1744 } 1745 const targetElement = target; 1746 if (triggerElements.hasElement(targetElement)) { 1747 return !targetElement.hasAttribute("data-trigger-disabled"); 1748 } 1749 for (const [, trigger] of triggerElements.entries()) { 1750 if (contains(trigger, targetElement)) { 1751 return !trigger.hasAttribute("data-trigger-disabled"); 1752 } 1753 } 1754 return false; 1755 } 1756 function isEventTargetWithin(event, node) { 1757 if (node == null) { 1758 return false; 1759 } 1760 if ("composedPath" in event) { 1761 return event.composedPath().includes(node); 1762 } 1763 const eventAgain = event; 1764 return eventAgain.target != null && node.contains(eventAgain.target); 1765 } 1766 function isRootElement(element) { 1767 return element.matches("html,body"); 1768 } 1769 function isTypeableElement(element) { 1770 return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR); 1771 } 1772 function isInteractiveElement(element) { 1773 return element?.closest(`button,a[href],[role="button"],select,[tabindex]:not([tabindex="-1"]),$TYPEABLE_SELECTOR}`) != null; 1774 } 1775 function matchesFocusVisible(element) { 1776 if (!element || parts_exports.env.jsdom) { 1777 return true; 1778 } 1779 try { 1780 return element.matches(":focus-visible"); 1781 } catch (_e) { 1782 return true; 1783 } 1784 } 1785 1786 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverShared.mjs 1787 function resolveValue(value, pointerType) { 1788 if (pointerType != null && !isMouseLikePointerType(pointerType)) { 1789 return 0; 1790 } 1791 if (typeof value === "function") { 1792 return value(); 1793 } 1794 return value; 1795 } 1796 function getDelay(value, prop, pointerType) { 1797 const result = resolveValue(value, pointerType); 1798 if (typeof result === "number") { 1799 return result; 1800 } 1801 return result?.[prop]; 1802 } 1803 function getRestMs(value) { 1804 if (typeof value === "function") { 1805 return value(); 1806 } 1807 return value; 1808 } 1809 function isClickLikeOpenEvent(openEventType, interactedInside) { 1810 return interactedInside || openEventType === "click" || openEventType === "mousedown"; 1811 } 1812 function isHoverOpenEvent(openEventType) { 1813 return openEventType?.includes("mouse") && openEventType !== "mousedown"; 1814 } 1815 1816 // node_modules/@base-ui/react/floating-ui-react/components/FloatingDelayGroup.mjs 1817 var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); 1818 var FloatingDelayGroupContext = /* @__PURE__ */ React13.createContext({ 1819 hasProvider: false, 1820 timeoutMs: 0, 1821 delayRef: { 1822 current: 0 1823 }, 1824 initialDelayRef: { 1825 current: 0 1826 }, 1827 timeout: new Timeout(), 1828 currentIdRef: { 1829 current: null 1830 }, 1831 currentContextRef: { 1832 current: null 1833 } 1834 }); 1835 if (true) FloatingDelayGroupContext.displayName = "FloatingDelayGroupContext"; 1836 function resetDelayRef(delayRef, initialDelayRef) { 1837 delayRef.current = initialDelayRef.current; 1838 } 1839 function FloatingDelayGroup(props) { 1840 const { 1841 children, 1842 delay, 1843 timeoutMs = 0 1844 } = props; 1845 const delayRef = React13.useRef(delay); 1846 const initialDelayRef = React13.useRef(delay); 1847 const currentIdRef = React13.useRef(null); 1848 const currentContextRef = React13.useRef(null); 1849 const timeout = useTimeout(); 1850 useIsoLayoutEffect(() => { 1851 initialDelayRef.current = delay; 1852 if (!currentIdRef.current) { 1853 delayRef.current = delay; 1854 return; 1855 } 1856 delayRef.current = { 1857 open: getDelay(delayRef.current, "open"), 1858 close: getDelay(delay, "close") 1859 }; 1860 }, [delay, currentIdRef, delayRef, initialDelayRef]); 1861 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FloatingDelayGroupContext.Provider, { 1862 value: React13.useMemo(() => ({ 1863 hasProvider: true, 1864 delayRef, 1865 initialDelayRef, 1866 currentIdRef, 1867 timeoutMs, 1868 currentContextRef, 1869 timeout 1870 }), [timeoutMs, timeout]), 1871 children 1872 }); 1873 } 1874 function useDelayGroup(context, options = { 1875 open: false 1876 }) { 1877 const { 1878 open 1879 } = options; 1880 const store2 = "rootStore" in context ? context.rootStore : context; 1881 const floatingId = store2.useState("floatingId"); 1882 const groupContext = React13.useContext(FloatingDelayGroupContext); 1883 const { 1884 currentIdRef, 1885 delayRef, 1886 timeoutMs, 1887 initialDelayRef, 1888 currentContextRef, 1889 hasProvider, 1890 timeout 1891 } = groupContext; 1892 const [isInstantPhase, setIsInstantPhase] = React13.useState(false); 1893 const openRef = React13.useRef(open); 1894 const isUnmountedRef = React13.useRef(false); 1895 useIsoLayoutEffect(() => { 1896 openRef.current = open; 1897 }, [open]); 1898 useIsoLayoutEffect(() => { 1899 return () => { 1900 isUnmountedRef.current = true; 1901 }; 1902 }, []); 1903 useIsoLayoutEffect(() => { 1904 function unset() { 1905 if (!isUnmountedRef.current) { 1906 setIsInstantPhase(false); 1907 } 1908 currentContextRef.current?.setIsInstantPhase(false); 1909 currentIdRef.current = null; 1910 currentContextRef.current = null; 1911 delayRef.current = initialDelayRef.current; 1912 timeout.clear(); 1913 } 1914 if (!currentIdRef.current) { 1915 return void 0; 1916 } 1917 if (!open && currentIdRef.current === floatingId) { 1918 setIsInstantPhase(false); 1919 if (timeoutMs) { 1920 const closingId = floatingId; 1921 timeout.start(timeoutMs, () => { 1922 if (store2.select("open") || currentIdRef.current && currentIdRef.current !== closingId) { 1923 return; 1924 } 1925 unset(); 1926 }); 1927 return () => { 1928 if (openRef.current || currentIdRef.current !== closingId) { 1929 timeout.clear(); 1930 } 1931 }; 1932 } 1933 unset(); 1934 } 1935 return void 0; 1936 }, [open, floatingId, currentIdRef, delayRef, timeoutMs, initialDelayRef, currentContextRef, timeout, store2]); 1937 useIsoLayoutEffect(() => { 1938 if (!open) { 1939 return; 1940 } 1941 const prevContext = currentContextRef.current; 1942 const prevId = currentIdRef.current; 1943 timeout.clear(); 1944 currentContextRef.current = { 1945 onOpenChange: store2.setOpen, 1946 setIsInstantPhase 1947 }; 1948 currentIdRef.current = floatingId; 1949 delayRef.current = { 1950 open: 0, 1951 close: getDelay(initialDelayRef.current, "close") 1952 }; 1953 if (prevId !== null && prevId !== floatingId) { 1954 setIsInstantPhase(true); 1955 prevContext?.setIsInstantPhase(true); 1956 prevContext?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.none)); 1957 } else { 1958 setIsInstantPhase(false); 1959 prevContext?.setIsInstantPhase(false); 1960 } 1961 }, [open, floatingId, store2, currentIdRef, delayRef, initialDelayRef, currentContextRef, timeout]); 1962 useIsoLayoutEffect(() => { 1963 return () => { 1964 if (currentIdRef.current === floatingId) { 1965 currentContextRef.current = null; 1966 if (!openRef.current) { 1967 return; 1968 } 1969 currentIdRef.current = null; 1970 resetDelayRef(delayRef, initialDelayRef); 1971 timeout.clear(); 1972 } 1973 }; 1974 }, [currentContextRef, currentIdRef, delayRef, floatingId, initialDelayRef, timeout]); 1975 return React13.useMemo(() => ({ 1976 hasProvider, 1977 delayRef, 1978 isInstantPhase 1979 }), [hasProvider, delayRef, isInstantPhase]); 1980 } 1981 1982 // node_modules/@base-ui/utils/mergeCleanups.mjs 1983 function mergeCleanups(...cleanups) { 1984 return () => { 1985 for (let i = 0; i < cleanups.length; i += 1) { 1986 const cleanup = cleanups[i]; 1987 if (cleanup) { 1988 cleanup(); 1989 } 1990 } 1991 }; 1992 } 1993 1994 // node_modules/@base-ui/react/utils/FocusGuard.mjs 1995 var React14 = __toESM(require_react(), 1); 1996 1997 // node_modules/@base-ui/utils/visuallyHidden.mjs 1998 var visuallyHiddenBase = { 1999 clipPath: "inset(50%)", 2000 overflow: "hidden", 2001 whiteSpace: "nowrap", 2002 border: 0, 2003 padding: 0, 2004 width: 1, 2005 height: 1, 2006 margin: -1 2007 }; 2008 var visuallyHidden = { 2009 ...visuallyHiddenBase, 2010 position: "fixed", 2011 top: 0, 2012 left: 0 2013 }; 2014 var visuallyHiddenInput = { 2015 ...visuallyHiddenBase, 2016 position: "absolute" 2017 }; 2018 2019 // node_modules/@base-ui/react/utils/FocusGuard.mjs 2020 var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); 2021 var FocusGuard = /* @__PURE__ */ React14.forwardRef(function FocusGuard2(props, ref) { 2022 const [role, setRole] = React14.useState(); 2023 useIsoLayoutEffect(() => { 2024 if (parts_exports.screenReader.voiceOver && parts_exports.engine.webkit) { 2025 setRole("button"); 2026 } 2027 }, []); 2028 const restProps = { 2029 tabIndex: 0, 2030 // Role is only for VoiceOver 2031 role 2032 }; 2033 return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { 2034 ...props, 2035 ref, 2036 style: visuallyHidden, 2037 "aria-hidden": role ? void 0 : true, 2038 ...restProps, 2039 "data-base-ui-focus-guard": "" 2040 }); 2041 }); 2042 if (true) FocusGuard.displayName = "FocusGuard"; 2043 2044 // node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs 2045 var sides = ["top", "right", "bottom", "left"]; 2046 var min = Math.min; 2047 var max = Math.max; 2048 var round = Math.round; 2049 var floor = Math.floor; 2050 var createCoords = (v) => ({ 2051 x: v, 2052 y: v 2053 }); 2054 var oppositeSideMap = { 2055 left: "right", 2056 right: "left", 2057 bottom: "top", 2058 top: "bottom" 2059 }; 2060 function clamp(start, value, end) { 2061 return max(start, min(value, end)); 2062 } 2063 function evaluate(value, param) { 2064 return typeof value === "function" ? value(param) : value; 2065 } 2066 function getSide(placement) { 2067 return placement.split("-")[0]; 2068 } 2069 function getAlignment(placement) { 2070 return placement.split("-")[1]; 2071 } 2072 function getOppositeAxis(axis) { 2073 return axis === "x" ? "y" : "x"; 2074 } 2075 function getAxisLength(axis) { 2076 return axis === "y" ? "height" : "width"; 2077 } 2078 function getSideAxis(placement) { 2079 const firstChar = placement[0]; 2080 return firstChar === "t" || firstChar === "b" ? "y" : "x"; 2081 } 2082 function getAlignmentAxis(placement) { 2083 return getOppositeAxis(getSideAxis(placement)); 2084 } 2085 function getAlignmentSides(placement, rects, rtl) { 2086 if (rtl === void 0) { 2087 rtl = false; 2088 } 2089 const alignment = getAlignment(placement); 2090 const alignmentAxis = getAlignmentAxis(placement); 2091 const length = getAxisLength(alignmentAxis); 2092 let mainAlignmentSide = alignmentAxis === "x" ? alignment === (rtl ? "end" : "start") ? "right" : "left" : alignment === "start" ? "bottom" : "top"; 2093 if (rects.reference[length] > rects.floating[length]) { 2094 mainAlignmentSide = getOppositePlacement(mainAlignmentSide); 2095 } 2096 return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)]; 2097 } 2098 function getExpandedPlacements(placement) { 2099 const oppositePlacement = getOppositePlacement(placement); 2100 return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)]; 2101 } 2102 function getOppositeAlignmentPlacement(placement) { 2103 return placement.includes("start") ? placement.replace("start", "end") : placement.replace("end", "start"); 2104 } 2105 var lrPlacement = ["left", "right"]; 2106 var rlPlacement = ["right", "left"]; 2107 var tbPlacement = ["top", "bottom"]; 2108 var btPlacement = ["bottom", "top"]; 2109 function getSideList(side, isStart, rtl) { 2110 switch (side) { 2111 case "top": 2112 case "bottom": 2113 if (rtl) return isStart ? rlPlacement : lrPlacement; 2114 return isStart ? lrPlacement : rlPlacement; 2115 case "left": 2116 case "right": 2117 return isStart ? tbPlacement : btPlacement; 2118 default: 2119 return []; 2120 } 2121 } 2122 function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) { 2123 const alignment = getAlignment(placement); 2124 let list = getSideList(getSide(placement), direction === "start", rtl); 2125 if (alignment) { 2126 list = list.map((side) => side + "-" + alignment); 2127 if (flipAlignment) { 2128 list = list.concat(list.map(getOppositeAlignmentPlacement)); 2129 } 2130 } 2131 return list; 2132 } 2133 function getOppositePlacement(placement) { 2134 const side = getSide(placement); 2135 return oppositeSideMap[side] + placement.slice(side.length); 2136 } 2137 function expandPaddingObject(padding) { 2138 return { 2139 top: 0, 2140 right: 0, 2141 bottom: 0, 2142 left: 0, 2143 ...padding 2144 }; 2145 } 2146 function getPaddingObject(padding) { 2147 return typeof padding !== "number" ? expandPaddingObject(padding) : { 2148 top: padding, 2149 right: padding, 2150 bottom: padding, 2151 left: padding 2152 }; 2153 } 2154 function rectToClientRect(rect) { 2155 const { 2156 x, 2157 y, 2158 width, 2159 height 2160 } = rect; 2161 return { 2162 width, 2163 height, 2164 top: y, 2165 left: x, 2166 right: x + width, 2167 bottom: y + height, 2168 x, 2169 y 2170 }; 2171 } 2172 2173 // node_modules/@base-ui/react/floating-ui-react/utils/composite.mjs 2174 function isHiddenByStyles(styles) { 2175 return styles.visibility === "hidden" || styles.visibility === "collapse"; 2176 } 2177 function isElementVisible(element, styles = element ? getComputedStyle2(element) : null) { 2178 if (!element || !element.isConnected || !styles || isHiddenByStyles(styles)) { 2179 return false; 2180 } 2181 if (typeof element.checkVisibility === "function") { 2182 return element.checkVisibility(); 2183 } 2184 return styles.display !== "none" && styles.display !== "contents"; 2185 } 2186 2187 // node_modules/@base-ui/react/floating-ui-react/utils/tabbable.mjs 2188 var CANDIDATE_SELECTOR = 'a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable="false"]),audio[controls],video[controls]'; 2189 function getParentElement(element) { 2190 const assignedSlot = element.assignedSlot; 2191 if (assignedSlot) { 2192 return assignedSlot; 2193 } 2194 if (element.parentElement) { 2195 return element.parentElement; 2196 } 2197 const rootNode = element.getRootNode(); 2198 return isShadowRoot(rootNode) ? rootNode.host : null; 2199 } 2200 function getDetailsSummary(details) { 2201 for (const child of Array.from(details.children)) { 2202 if (getNodeName(child) === "summary") { 2203 return child; 2204 } 2205 } 2206 return null; 2207 } 2208 function isWithinOpenDetailsSummary(element, details) { 2209 const summary = getDetailsSummary(details); 2210 return !!summary && (element === summary || contains(summary, element)); 2211 } 2212 function isFocusableCandidate(element) { 2213 const nodeName = element ? getNodeName(element) : ""; 2214 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"); 2215 } 2216 function isFocusableElement(element) { 2217 if (!isFocusableCandidate(element) || !element.isConnected || element.matches(":disabled")) { 2218 return false; 2219 } 2220 for (let current = element; current; current = getParentElement(current)) { 2221 const isAncestor = current !== element; 2222 const isSlot = getNodeName(current) === "slot"; 2223 if (current.hasAttribute("inert")) { 2224 return false; 2225 } 2226 if (isAncestor && getNodeName(current) === "details" && !current.open && !isWithinOpenDetailsSummary(element, current) || current.hasAttribute("hidden") || !isSlot && !isVisibleInTabbableTree(current, isAncestor)) { 2227 return false; 2228 } 2229 } 2230 return true; 2231 } 2232 function isVisibleInTabbableTree(element, isAncestor) { 2233 const styles = getComputedStyle2(element); 2234 if (!isAncestor) { 2235 return isElementVisible(element, styles); 2236 } 2237 return styles.display !== "none"; 2238 } 2239 function getTabIndex(element) { 2240 const tabIndex = element.tabIndex; 2241 if (tabIndex < 0) { 2242 const nodeName = getNodeName(element); 2243 if (nodeName === "details" || nodeName === "audio" || nodeName === "video" || isHTMLElement(element) && element.isContentEditable) { 2244 return 0; 2245 } 2246 } 2247 return tabIndex; 2248 } 2249 function getNamedRadioInput(element) { 2250 if (getNodeName(element) !== "input") { 2251 return null; 2252 } 2253 const input = element; 2254 return input.type === "radio" && input.name !== "" ? input : null; 2255 } 2256 function isTabbableRadio(element, candidates) { 2257 const input = getNamedRadioInput(element); 2258 if (!input) { 2259 return true; 2260 } 2261 const checkedRadio = candidates.find((candidate) => { 2262 const radio = getNamedRadioInput(candidate); 2263 return radio?.name === input.name && radio.form === input.form && radio.checked; 2264 }); 2265 if (checkedRadio) { 2266 return checkedRadio === input; 2267 } 2268 return candidates.find((candidate) => { 2269 const radio = getNamedRadioInput(candidate); 2270 return radio?.name === input.name && radio.form === input.form; 2271 }) === input; 2272 } 2273 function getComposedChildren(container) { 2274 if (isHTMLElement(container) && getNodeName(container) === "slot") { 2275 const assignedElements = container.assignedElements({ 2276 flatten: true 2277 }); 2278 if (assignedElements.length > 0) { 2279 return assignedElements; 2280 } 2281 } 2282 if (isHTMLElement(container) && container.shadowRoot) { 2283 return Array.from(container.shadowRoot.children); 2284 } 2285 return Array.from(container.children); 2286 } 2287 function appendCandidates(container, list) { 2288 getComposedChildren(container).forEach((child) => { 2289 if (isFocusableCandidate(child)) { 2290 list.push(child); 2291 } 2292 appendCandidates(child, list); 2293 }); 2294 } 2295 function appendMatchingElements(container, selector, list) { 2296 getComposedChildren(container).forEach((child) => { 2297 if (isHTMLElement(child) && child.matches(selector)) { 2298 list.push(child); 2299 } 2300 appendMatchingElements(child, selector, list); 2301 }); 2302 } 2303 function focusable(container) { 2304 const candidates = []; 2305 appendCandidates(container, candidates); 2306 return candidates.filter(isFocusableElement); 2307 } 2308 function tabbable(container) { 2309 const candidates = focusable(container); 2310 return candidates.filter((element) => getTabIndex(element) >= 0 && isTabbableRadio(element, candidates)); 2311 } 2312 function getTabbableIn(container, dir) { 2313 const list = tabbable(container); 2314 const len = list.length; 2315 if (len === 0) { 2316 return void 0; 2317 } 2318 const active = activeElement(ownerDocument(container)); 2319 const index2 = list.indexOf(active); 2320 const nextIndex = index2 === -1 ? dir === 1 ? 0 : len - 1 : index2 + dir; 2321 return list[nextIndex]; 2322 } 2323 function getNextTabbable(referenceElement) { 2324 return getTabbableIn(ownerDocument(referenceElement).body, 1) || referenceElement; 2325 } 2326 function getPreviousTabbable(referenceElement) { 2327 return getTabbableIn(ownerDocument(referenceElement).body, -1) || referenceElement; 2328 } 2329 function isOutsideEvent(event, container) { 2330 const containerElement = container || event.currentTarget; 2331 const relatedTarget = event.relatedTarget; 2332 return !relatedTarget || !contains(containerElement, relatedTarget); 2333 } 2334 function disableFocusInside(container) { 2335 const tabbableElements = tabbable(container); 2336 tabbableElements.forEach((element) => { 2337 element.dataset.tabindex = element.getAttribute("tabindex") || ""; 2338 element.setAttribute("tabindex", "-1"); 2339 }); 2340 } 2341 function enableFocusInside(container) { 2342 const elements = []; 2343 appendMatchingElements(container, "[data-tabindex]", elements); 2344 elements.forEach((element) => { 2345 const tabindex = element.dataset.tabindex; 2346 delete element.dataset.tabindex; 2347 if (tabindex) { 2348 element.setAttribute("tabindex", tabindex); 2349 } else { 2350 element.removeAttribute("tabindex"); 2351 } 2352 }); 2353 } 2354 2355 // node_modules/@base-ui/react/floating-ui-react/utils/nodes.mjs 2356 function getNodeChildren(nodes, id, onlyOpenChildren = true) { 2357 const directChildren = nodes.filter((node) => node.parentId === id); 2358 return directChildren.flatMap((child) => [...!onlyOpenChildren || child.context?.open ? [child] : [], ...getNodeChildren(nodes, child.id, onlyOpenChildren)]); 2359 } 2360 2361 // node_modules/@base-ui/react/floating-ui-react/utils/createAttribute.mjs 2362 function createAttribute(name) { 2363 return `data-base-ui-$name}`; 2364 } 2365 2366 // node_modules/@base-ui/react/floating-ui-react/components/FloatingPortal.mjs 2367 var React15 = __toESM(require_react(), 1); 2368 var ReactDOM2 = __toESM(require_react_dom(), 1); 2369 2370 // node_modules/@base-ui/react/internals/constants.mjs 2371 var DISABLED_TRANSITIONS_STYLE = { 2372 style: { 2373 transition: "none" 2374 } 2375 }; 2376 var BASE_UI_SWIPE_IGNORE_ATTRIBUTE = "data-base-ui-swipe-ignore"; 2377 var LEGACY_SWIPE_IGNORE_ATTRIBUTE = "data-swipe-ignore"; 2378 var BASE_UI_SWIPE_IGNORE_SELECTOR = `[$BASE_UI_SWIPE_IGNORE_ATTRIBUTE}]`; 2379 var LEGACY_SWIPE_IGNORE_SELECTOR = `[$LEGACY_SWIPE_IGNORE_ATTRIBUTE}]`; 2380 var POPUP_COLLISION_AVOIDANCE = { 2381 fallbackAxisSide: "end" 2382 }; 2383 var ownerVisuallyHidden = { 2384 clipPath: "inset(50%)", 2385 position: "fixed", 2386 top: 0, 2387 left: 0 2388 }; 2389 2390 // node_modules/@base-ui/react/floating-ui-react/components/FloatingPortal.mjs 2391 var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); 2392 var PortalContext = /* @__PURE__ */ React15.createContext(null); 2393 if (true) PortalContext.displayName = "PortalContext"; 2394 var usePortalContext = () => React15.useContext(PortalContext); 2395 var attr = createAttribute("portal"); 2396 function useFloatingPortalNode(props = {}) { 2397 const { 2398 ref, 2399 container: containerProp, 2400 componentProps = EMPTY_OBJECT, 2401 elementProps 2402 } = props; 2403 const uniqueId = useId(); 2404 const portalContext = usePortalContext(); 2405 const parentPortalNode = portalContext?.portalNode; 2406 const [containerElement, setContainerElement] = React15.useState(null); 2407 const [portalNode, setPortalNode] = React15.useState(null); 2408 const setPortalNodeRef = useStableCallback((node) => { 2409 if (node !== null) { 2410 setPortalNode(node); 2411 } 2412 }); 2413 const containerRef = React15.useRef(null); 2414 useIsoLayoutEffect(() => { 2415 if (containerProp === null) { 2416 if (containerRef.current) { 2417 containerRef.current = null; 2418 setPortalNode(null); 2419 setContainerElement(null); 2420 } 2421 return; 2422 } 2423 if (uniqueId == null) { 2424 return; 2425 } 2426 const resolvedContainer = (containerProp && (isNode(containerProp) ? containerProp : containerProp.current)) ?? parentPortalNode ?? document.body; 2427 if (resolvedContainer == null) { 2428 if (containerRef.current) { 2429 containerRef.current = null; 2430 setPortalNode(null); 2431 setContainerElement(null); 2432 } 2433 return; 2434 } 2435 if (containerRef.current !== resolvedContainer) { 2436 containerRef.current = resolvedContainer; 2437 setPortalNode(null); 2438 setContainerElement(resolvedContainer); 2439 } 2440 }, [containerProp, parentPortalNode, uniqueId]); 2441 const portalElement = useRenderElement("div", componentProps, { 2442 ref: [ref, setPortalNodeRef], 2443 props: [{ 2444 id: uniqueId, 2445 [attr]: "" 2446 }, elementProps] 2447 }); 2448 const portalSubtree = containerElement && portalElement ? /* @__PURE__ */ ReactDOM2.createPortal(portalElement, containerElement) : null; 2449 return { 2450 portalNode, 2451 portalSubtree 2452 }; 2453 } 2454 var FloatingPortal = /* @__PURE__ */ React15.forwardRef(function FloatingPortal2(componentProps, forwardedRef) { 2455 const { 2456 render, 2457 className, 2458 style, 2459 children, 2460 container, 2461 renderGuards, 2462 ...elementProps 2463 } = componentProps; 2464 const { 2465 portalNode, 2466 portalSubtree 2467 } = useFloatingPortalNode({ 2468 container, 2469 ref: forwardedRef, 2470 componentProps, 2471 elementProps 2472 }); 2473 const beforeOutsideRef = React15.useRef(null); 2474 const afterOutsideRef = React15.useRef(null); 2475 const beforeInsideRef = React15.useRef(null); 2476 const afterInsideRef = React15.useRef(null); 2477 const [focusManagerState, setFocusManagerState] = React15.useState(null); 2478 const focusInsideDisabledRef = React15.useRef(false); 2479 const modal = focusManagerState?.modal; 2480 const open = focusManagerState?.open; 2481 const shouldRenderGuards = typeof renderGuards === "boolean" ? renderGuards : !!focusManagerState && !focusManagerState.modal && focusManagerState.open && !!portalNode; 2482 React15.useEffect(() => { 2483 if (!portalNode || modal) { 2484 return void 0; 2485 } 2486 function onFocus(event) { 2487 if (portalNode && event.relatedTarget && isOutsideEvent(event)) { 2488 if (event.type === "focusin") { 2489 if (focusInsideDisabledRef.current) { 2490 enableFocusInside(portalNode); 2491 focusInsideDisabledRef.current = false; 2492 } 2493 } else { 2494 disableFocusInside(portalNode); 2495 focusInsideDisabledRef.current = true; 2496 } 2497 } 2498 } 2499 return mergeCleanups(addEventListener(portalNode, "focusin", onFocus, true), addEventListener(portalNode, "focusout", onFocus, true)); 2500 }, [portalNode, modal]); 2501 useIsoLayoutEffect(() => { 2502 if (!portalNode || open !== true || !focusInsideDisabledRef.current) { 2503 return; 2504 } 2505 enableFocusInside(portalNode); 2506 focusInsideDisabledRef.current = false; 2507 }, [open, portalNode]); 2508 const portalContextValue = React15.useMemo(() => ({ 2509 beforeOutsideRef, 2510 afterOutsideRef, 2511 beforeInsideRef, 2512 afterInsideRef, 2513 portalNode, 2514 setFocusManagerState 2515 }), [portalNode]); 2516 return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(React15.Fragment, { 2517 children: [portalSubtree, /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(PortalContext.Provider, { 2518 value: portalContextValue, 2519 children: [shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(FocusGuard, { 2520 "data-type": "outside", 2521 ref: beforeOutsideRef, 2522 onFocus: (event) => { 2523 if (isOutsideEvent(event, portalNode)) { 2524 beforeInsideRef.current?.focus(); 2525 } else { 2526 const domReference = focusManagerState ? focusManagerState.domReference : null; 2527 const prevTabbable = getPreviousTabbable(domReference); 2528 prevTabbable?.focus(); 2529 } 2530 } 2531 }), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { 2532 "aria-owns": portalNode.id, 2533 style: ownerVisuallyHidden 2534 }), portalNode && /* @__PURE__ */ ReactDOM2.createPortal(children, portalNode), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(FocusGuard, { 2535 "data-type": "outside", 2536 ref: afterOutsideRef, 2537 onFocus: (event) => { 2538 if (isOutsideEvent(event, portalNode)) { 2539 afterInsideRef.current?.focus(); 2540 } else { 2541 const domReference = focusManagerState ? focusManagerState.domReference : null; 2542 const nextTabbable = getNextTabbable(domReference); 2543 nextTabbable?.focus(); 2544 if (focusManagerState?.closeOnFocusOut) { 2545 focusManagerState?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.focusOut, event.nativeEvent)); 2546 } 2547 } 2548 } 2549 })] 2550 })] 2551 }); 2552 }); 2553 if (true) FloatingPortal.displayName = "FloatingPortal"; 2554 2555 // node_modules/@base-ui/react/floating-ui-react/components/FloatingTree.mjs 2556 var React16 = __toESM(require_react(), 1); 2557 2558 // node_modules/@base-ui/react/floating-ui-react/utils/createEventEmitter.mjs 2559 function createEventEmitter() { 2560 const map = /* @__PURE__ */ new Map(); 2561 return { 2562 emit(event, data) { 2563 map.get(event)?.forEach((listener) => listener(data)); 2564 }, 2565 on(event, listener) { 2566 if (!map.has(event)) { 2567 map.set(event, /* @__PURE__ */ new Set()); 2568 } 2569 map.get(event).add(listener); 2570 }, 2571 off(event, listener) { 2572 map.get(event)?.delete(listener); 2573 } 2574 }; 2575 } 2576 2577 // node_modules/@base-ui/react/floating-ui-react/components/FloatingTree.mjs 2578 var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); 2579 var FloatingNodeContext = /* @__PURE__ */ React16.createContext(null); 2580 if (true) FloatingNodeContext.displayName = "FloatingNodeContext"; 2581 var FloatingTreeContext = /* @__PURE__ */ React16.createContext(null); 2582 if (true) FloatingTreeContext.displayName = "FloatingTreeContext"; 2583 var useFloatingParentNodeId = () => React16.useContext(FloatingNodeContext)?.id || null; 2584 var useFloatingTree = (externalTree) => { 2585 const contextTree = React16.useContext(FloatingTreeContext); 2586 return externalTree ?? contextTree; 2587 }; 2588 2589 // node_modules/@base-ui/react/floating-ui-react/hooks/useClientPoint.mjs 2590 var React17 = __toESM(require_react(), 1); 2591 function createVirtualElement(domElement, data) { 2592 let offsetX = null; 2593 let offsetY = null; 2594 let isAutoUpdateEvent = false; 2595 return { 2596 contextElement: domElement || void 0, 2597 getBoundingClientRect() { 2598 const domRect = domElement?.getBoundingClientRect() || { 2599 width: 0, 2600 height: 0, 2601 x: 0, 2602 y: 0 2603 }; 2604 const isXAxis = data.axis === "x" || data.axis === "both"; 2605 const isYAxis = data.axis === "y" || data.axis === "both"; 2606 const canTrackCursorOnAutoUpdate = ["mouseenter", "mousemove"].includes(data.dataRef.current.openEvent?.type || "") && data.pointerType !== "touch"; 2607 let width = domRect.width; 2608 let height = domRect.height; 2609 let x = domRect.x; 2610 let y = domRect.y; 2611 if (offsetX == null && data.x && isXAxis) { 2612 offsetX = domRect.x - data.x; 2613 } 2614 if (offsetY == null && data.y && isYAxis) { 2615 offsetY = domRect.y - data.y; 2616 } 2617 x -= offsetX || 0; 2618 y -= offsetY || 0; 2619 width = 0; 2620 height = 0; 2621 if (!isAutoUpdateEvent || canTrackCursorOnAutoUpdate) { 2622 width = data.axis === "y" ? domRect.width : 0; 2623 height = data.axis === "x" ? domRect.height : 0; 2624 x = isXAxis && data.x != null ? data.x : x; 2625 y = isYAxis && data.y != null ? data.y : y; 2626 } else if (isAutoUpdateEvent && !canTrackCursorOnAutoUpdate) { 2627 height = data.axis === "x" ? domRect.height : height; 2628 width = data.axis === "y" ? domRect.width : width; 2629 } 2630 isAutoUpdateEvent = true; 2631 return { 2632 width, 2633 height, 2634 x, 2635 y, 2636 top: y, 2637 right: x + width, 2638 bottom: y + height, 2639 left: x 2640 }; 2641 } 2642 }; 2643 } 2644 function isMouseBasedEvent(event) { 2645 return event != null && event.clientX != null; 2646 } 2647 function useClientPoint(context, props = {}) { 2648 const { 2649 enabled = true, 2650 axis = "both" 2651 } = props; 2652 const store2 = "rootStore" in context ? context.rootStore : context; 2653 const open = store2.useState("open"); 2654 const floating = store2.useState("floatingElement"); 2655 const domReference = store2.useState("domReferenceElement"); 2656 const dataRef = store2.context.dataRef; 2657 const initialRef = React17.useRef(false); 2658 const cleanupListenerRef = React17.useRef(null); 2659 const [pointerType, setPointerType] = React17.useState(); 2660 const [reactive, setReactive] = React17.useState([]); 2661 const resetReference = useStableCallback((reference2) => { 2662 store2.set("positionReference", reference2); 2663 }); 2664 const setReference = useStableCallback((newX, newY, referenceElement) => { 2665 if (initialRef.current) { 2666 return; 2667 } 2668 if (dataRef.current.openEvent && !isMouseBasedEvent(dataRef.current.openEvent)) { 2669 return; 2670 } 2671 store2.set("positionReference", createVirtualElement(referenceElement ?? domReference, { 2672 x: newX, 2673 y: newY, 2674 axis, 2675 dataRef, 2676 pointerType 2677 })); 2678 }); 2679 const handleReferenceEnterOrMove = useStableCallback((event) => { 2680 if (!open) { 2681 setReference(event.clientX, event.clientY, event.currentTarget); 2682 } else if (!cleanupListenerRef.current) { 2683 setReference(event.clientX, event.clientY, event.currentTarget); 2684 setReactive([]); 2685 } 2686 }); 2687 const openCheck = isMouseLikePointerType(pointerType) ? floating : open; 2688 React17.useEffect(() => { 2689 if (!enabled) { 2690 resetReference(domReference); 2691 return void 0; 2692 } 2693 if (!openCheck) { 2694 return void 0; 2695 } 2696 function cleanupListener() { 2697 cleanupListenerRef.current?.(); 2698 cleanupListenerRef.current = null; 2699 } 2700 const win = getWindow(floating); 2701 function handleMouseMove(event) { 2702 const target = getTarget(event); 2703 if (!contains(floating, target)) { 2704 setReference(event.clientX, event.clientY); 2705 } else { 2706 cleanupListener(); 2707 } 2708 } 2709 if (!dataRef.current.openEvent || isMouseBasedEvent(dataRef.current.openEvent)) { 2710 cleanupListenerRef.current = addEventListener(win, "mousemove", handleMouseMove); 2711 } else { 2712 resetReference(domReference); 2713 } 2714 return cleanupListener; 2715 }, [openCheck, enabled, floating, dataRef, domReference, store2, setReference, resetReference, reactive]); 2716 React17.useEffect(() => () => { 2717 store2.set("positionReference", null); 2718 }, [store2]); 2719 React17.useEffect(() => { 2720 if (enabled && !floating) { 2721 initialRef.current = false; 2722 } 2723 }, [enabled, floating]); 2724 React17.useEffect(() => { 2725 if (!enabled && open) { 2726 initialRef.current = true; 2727 } 2728 }, [enabled, open]); 2729 const reference = React17.useMemo(() => { 2730 function setPointerTypeRef(event) { 2731 setPointerType(event.pointerType); 2732 } 2733 return { 2734 onPointerDown: setPointerTypeRef, 2735 onPointerEnter: setPointerTypeRef, 2736 onMouseMove: handleReferenceEnterOrMove, 2737 onMouseEnter: handleReferenceEnterOrMove 2738 }; 2739 }, [handleReferenceEnterOrMove]); 2740 return React17.useMemo(() => enabled ? { 2741 reference, 2742 trigger: reference 2743 } : {}, [enabled, reference]); 2744 } 2745 2746 // node_modules/@base-ui/react/floating-ui-react/hooks/useDismiss.mjs 2747 var React18 = __toESM(require_react(), 1); 2748 function alwaysFalse() { 2749 return false; 2750 } 2751 function normalizeProp(normalizable) { 2752 return { 2753 escapeKey: typeof normalizable === "boolean" ? normalizable : normalizable?.escapeKey ?? false, 2754 outsidePress: typeof normalizable === "boolean" ? normalizable : normalizable?.outsidePress ?? true 2755 }; 2756 } 2757 function useDismiss(context, props = {}) { 2758 const { 2759 enabled = true, 2760 escapeKey: escapeKey2 = true, 2761 outsidePress: outsidePressProp = true, 2762 outsidePressEvent = "sloppy", 2763 referencePress = alwaysFalse, 2764 bubbles, 2765 externalTree 2766 } = props; 2767 const store2 = "rootStore" in context ? context.rootStore : context; 2768 const open = store2.useState("open"); 2769 const floatingElement = store2.useState("floatingElement"); 2770 const { 2771 dataRef 2772 } = store2.context; 2773 const tree = useFloatingTree(externalTree); 2774 const outsidePressFn = useStableCallback(typeof outsidePressProp === "function" ? outsidePressProp : () => false); 2775 const outsidePress2 = typeof outsidePressProp === "function" ? outsidePressFn : outsidePressProp; 2776 const outsidePressEnabled = outsidePress2 !== false; 2777 const getOutsidePressEventProp = useStableCallback(() => outsidePressEvent); 2778 const { 2779 escapeKey: escapeKeyBubbles, 2780 outsidePress: outsidePressBubbles 2781 } = normalizeProp(bubbles); 2782 const pressStartedInsideRef = React18.useRef(false); 2783 const pressStartPreventedRef = React18.useRef(false); 2784 const suppressNextOutsideClickRef = React18.useRef(false); 2785 const isComposingRef = React18.useRef(false); 2786 const currentPointerTypeRef = React18.useRef(""); 2787 const touchStateRef = React18.useRef(null); 2788 const cancelDismissOnEndTimeout = useTimeout(); 2789 const clearInsideReactTreeTimeout = useTimeout(); 2790 const clearInsideReactTree = useStableCallback(() => { 2791 clearInsideReactTreeTimeout.clear(); 2792 dataRef.current.insideReactTree = false; 2793 }); 2794 const hasBlockingChild = useStableCallback((bubbleKey) => { 2795 const nodeId = dataRef.current.floatingContext?.nodeId; 2796 const children = tree ? getNodeChildren(tree.nodesRef.current, nodeId) : []; 2797 return children.some((child) => child.context?.open && !child.context.dataRef.current[bubbleKey]); 2798 }); 2799 const isEventWithinOwnElements = useStableCallback((event) => { 2800 return isEventTargetWithin(event, store2.select("floatingElement")) || isEventTargetWithin(event, store2.select("domReferenceElement")); 2801 }); 2802 const closeOnReferencePress = useStableCallback((event) => { 2803 if (!referencePress()) { 2804 return; 2805 } 2806 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerPress, event.nativeEvent)); 2807 }); 2808 const closeOnEscapeKeyDown = useStableCallback((event) => { 2809 if (!open || !enabled || !escapeKey2 || event.key !== "Escape") { 2810 return; 2811 } 2812 if (isComposingRef.current) { 2813 return; 2814 } 2815 if (!escapeKeyBubbles && hasBlockingChild("__escapeKeyBubbles")) { 2816 return; 2817 } 2818 const native = isReactEvent(event) ? event.nativeEvent : event; 2819 const eventDetails = createChangeEventDetails(reason_parts_exports.escapeKey, native); 2820 store2.setOpen(false, eventDetails); 2821 if (!eventDetails.isCanceled) { 2822 event.preventDefault(); 2823 } 2824 if (!escapeKeyBubbles && !eventDetails.isPropagationAllowed) { 2825 event.stopPropagation(); 2826 } 2827 }); 2828 const markInsideReactTree = useStableCallback(() => { 2829 dataRef.current.insideReactTree = true; 2830 clearInsideReactTreeTimeout.start(0, clearInsideReactTree); 2831 }); 2832 const markPressStartedInsideReactTree = useStableCallback((event) => { 2833 if (!open || !enabled || event.button !== 0) { 2834 return; 2835 } 2836 const target = getTarget(event.nativeEvent); 2837 if (!contains(store2.select("floatingElement"), target)) { 2838 return; 2839 } 2840 if (!pressStartedInsideRef.current) { 2841 pressStartedInsideRef.current = true; 2842 pressStartPreventedRef.current = false; 2843 } 2844 }); 2845 const markInsidePressStartPrevented = useStableCallback((event) => { 2846 if (!open || !enabled) { 2847 return; 2848 } 2849 if (!(event.defaultPrevented || event.nativeEvent.defaultPrevented)) { 2850 return; 2851 } 2852 if (pressStartedInsideRef.current) { 2853 pressStartPreventedRef.current = true; 2854 } 2855 }); 2856 React18.useEffect(() => { 2857 if (!open || !enabled) { 2858 return void 0; 2859 } 2860 dataRef.current.__escapeKeyBubbles = escapeKeyBubbles; 2861 dataRef.current.__outsidePressBubbles = outsidePressBubbles; 2862 const compositionTimeout = new Timeout(); 2863 const preventedPressSuppressionTimeout = new Timeout(); 2864 function handleCompositionStart() { 2865 compositionTimeout.clear(); 2866 isComposingRef.current = true; 2867 } 2868 function handleCompositionEnd() { 2869 compositionTimeout.start( 2870 // 0ms or 1ms don't work in Safari. 5ms appears to consistently work. 2871 // Only apply to WebKit for the test to remain 0ms. 2872 parts_exports.engine.webkit ? 5 : 0, 2873 () => { 2874 isComposingRef.current = false; 2875 } 2876 ); 2877 } 2878 function suppressImmediateOutsideClickAfterPreventedStart() { 2879 suppressNextOutsideClickRef.current = true; 2880 preventedPressSuppressionTimeout.start(0, () => { 2881 suppressNextOutsideClickRef.current = false; 2882 }); 2883 } 2884 function resetPressStartState() { 2885 pressStartedInsideRef.current = false; 2886 pressStartPreventedRef.current = false; 2887 } 2888 function getOutsidePressEvent() { 2889 const type = currentPointerTypeRef.current; 2890 const computedType = type === "pen" || !type ? "mouse" : type; 2891 const outsidePressEventValue = getOutsidePressEventProp(); 2892 const resolved = typeof outsidePressEventValue === "function" ? outsidePressEventValue() : outsidePressEventValue; 2893 if (typeof resolved === "string") { 2894 return resolved; 2895 } 2896 return resolved[computedType]; 2897 } 2898 function shouldIgnoreEvent(event) { 2899 const computedOutsidePressEvent = getOutsidePressEvent(); 2900 return computedOutsidePressEvent === "intentional" && event.type !== "click" || computedOutsidePressEvent === "sloppy" && event.type === "click"; 2901 } 2902 function isEventWithinFloatingTree(event) { 2903 const nodeId = dataRef.current.floatingContext?.nodeId; 2904 const targetIsInsideChildren = tree && getNodeChildren(tree.nodesRef.current, nodeId).some((node) => isEventTargetWithin(event, node.context?.elements.floating)); 2905 return isEventWithinOwnElements(event) || targetIsInsideChildren; 2906 } 2907 function closeOnPressOutside(event) { 2908 if (shouldIgnoreEvent(event)) { 2909 if (event.type !== "click" && !isEventWithinOwnElements(event)) { 2910 preventedPressSuppressionTimeout.clear(); 2911 suppressNextOutsideClickRef.current = false; 2912 } 2913 clearInsideReactTree(); 2914 return; 2915 } 2916 if (dataRef.current.insideReactTree) { 2917 clearInsideReactTree(); 2918 return; 2919 } 2920 const target = getTarget(event); 2921 const inertSelector = `[$createAttribute("inert")}]`; 2922 const targetRoot = isElement(target) ? target.getRootNode() : null; 2923 const markers = Array.from((isShadowRoot(targetRoot) ? targetRoot : ownerDocument(store2.select("floatingElement"))).querySelectorAll(inertSelector)); 2924 const triggers = store2.context.triggerElements; 2925 if (target && (triggers.hasElement(target) || triggers.hasMatchingElement((trigger) => contains(trigger, target)))) { 2926 return; 2927 } 2928 let targetRootAncestor = isElement(target) ? target : null; 2929 while (targetRootAncestor && !isLastTraversableNode(targetRootAncestor)) { 2930 const nextParent = getParentNode(targetRootAncestor); 2931 if (isLastTraversableNode(nextParent) || !isElement(nextParent)) { 2932 break; 2933 } 2934 targetRootAncestor = nextParent; 2935 } 2936 if (markers.length && isElement(target) && !isRootElement(target) && // Clicked on a direct ancestor (e.g. FloatingOverlay). 2937 !contains(target, store2.select("floatingElement")) && // If the target root element contains none of the markers, then the 2938 // element was injected after the floating element rendered. 2939 markers.every((marker) => !contains(targetRootAncestor, marker))) { 2940 return; 2941 } 2942 if (isHTMLElement(target) && !("touches" in event)) { 2943 const lastTraversableNode = isLastTraversableNode(target); 2944 const style = getComputedStyle2(target); 2945 const scrollRe = /auto|scroll/; 2946 const isScrollableX = lastTraversableNode || scrollRe.test(style.overflowX); 2947 const isScrollableY = lastTraversableNode || scrollRe.test(style.overflowY); 2948 const canScrollX = isScrollableX && target.clientWidth > 0 && target.scrollWidth > target.clientWidth; 2949 const canScrollY = isScrollableY && target.clientHeight > 0 && target.scrollHeight > target.clientHeight; 2950 const isRTL3 = style.direction === "rtl"; 2951 const pressedVerticalScrollbar = canScrollY && (isRTL3 ? event.offsetX <= target.offsetWidth - target.clientWidth : event.offsetX > target.clientWidth); 2952 const pressedHorizontalScrollbar = canScrollX && event.offsetY > target.clientHeight; 2953 if (pressedVerticalScrollbar || pressedHorizontalScrollbar) { 2954 return; 2955 } 2956 } 2957 if (isEventWithinFloatingTree(event)) { 2958 return; 2959 } 2960 if (getOutsidePressEvent() === "intentional" && suppressNextOutsideClickRef.current) { 2961 preventedPressSuppressionTimeout.clear(); 2962 suppressNextOutsideClickRef.current = false; 2963 return; 2964 } 2965 if (typeof outsidePress2 === "function" && !outsidePress2(event)) { 2966 return; 2967 } 2968 if (hasBlockingChild("__outsidePressBubbles")) { 2969 return; 2970 } 2971 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.outsidePress, event)); 2972 clearInsideReactTree(); 2973 } 2974 function handlePointerDown(event) { 2975 if (getOutsidePressEvent() !== "sloppy" || event.pointerType === "touch" || !store2.select("open") || !enabled || isEventWithinOwnElements(event)) { 2976 return; 2977 } 2978 closeOnPressOutside(event); 2979 } 2980 function handleTouchStart(event) { 2981 if (getOutsidePressEvent() !== "sloppy" || !store2.select("open") || !enabled || isEventWithinOwnElements(event)) { 2982 return; 2983 } 2984 const touch = event.touches[0]; 2985 if (touch) { 2986 touchStateRef.current = { 2987 startTime: Date.now(), 2988 startX: touch.clientX, 2989 startY: touch.clientY, 2990 dismissOnTouchEnd: false, 2991 dismissOnMouseDown: true 2992 }; 2993 cancelDismissOnEndTimeout.start(1e3, () => { 2994 if (touchStateRef.current) { 2995 touchStateRef.current.dismissOnTouchEnd = false; 2996 touchStateRef.current.dismissOnMouseDown = false; 2997 } 2998 }); 2999 } 3000 } 3001 function addTargetEventListenerOnce(event, listener) { 3002 const target = getTarget(event); 3003 if (!target) { 3004 return; 3005 } 3006 const unsubscribe2 = addEventListener(target, event.type, () => { 3007 listener(event); 3008 unsubscribe2(); 3009 }); 3010 } 3011 function handleTouchStartCapture(event) { 3012 currentPointerTypeRef.current = "touch"; 3013 addTargetEventListenerOnce(event, handleTouchStart); 3014 } 3015 function closeOnPressOutsideCapture(event) { 3016 cancelDismissOnEndTimeout.clear(); 3017 if (event.type === "pointerdown") { 3018 currentPointerTypeRef.current = event.pointerType; 3019 } 3020 if (event.type === "mousedown" && touchStateRef.current && !touchStateRef.current.dismissOnMouseDown) { 3021 return; 3022 } 3023 addTargetEventListenerOnce(event, (targetEvent) => { 3024 if (targetEvent.type === "pointerdown") { 3025 handlePointerDown(targetEvent); 3026 } else { 3027 closeOnPressOutside(targetEvent); 3028 } 3029 }); 3030 } 3031 function handlePressEndCapture(event) { 3032 if (!pressStartedInsideRef.current) { 3033 return; 3034 } 3035 const pressStartedInsideDefaultPrevented = pressStartPreventedRef.current; 3036 resetPressStartState(); 3037 if (getOutsidePressEvent() !== "intentional") { 3038 return; 3039 } 3040 if (event.type === "pointercancel") { 3041 if (pressStartedInsideDefaultPrevented) { 3042 suppressImmediateOutsideClickAfterPreventedStart(); 3043 } 3044 return; 3045 } 3046 if (isEventWithinFloatingTree(event)) { 3047 return; 3048 } 3049 if (pressStartedInsideDefaultPrevented) { 3050 suppressImmediateOutsideClickAfterPreventedStart(); 3051 return; 3052 } 3053 if (typeof outsidePress2 === "function" && !outsidePress2(event)) { 3054 return; 3055 } 3056 preventedPressSuppressionTimeout.clear(); 3057 suppressNextOutsideClickRef.current = true; 3058 clearInsideReactTree(); 3059 } 3060 function handleTouchMove(event) { 3061 if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) { 3062 return; 3063 } 3064 const touch = event.touches[0]; 3065 if (!touch) { 3066 return; 3067 } 3068 const deltaX = Math.abs(touch.clientX - touchStateRef.current.startX); 3069 const deltaY = Math.abs(touch.clientY - touchStateRef.current.startY); 3070 const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY); 3071 if (distance > 5) { 3072 touchStateRef.current.dismissOnTouchEnd = true; 3073 } 3074 if (distance > 10) { 3075 closeOnPressOutside(event); 3076 cancelDismissOnEndTimeout.clear(); 3077 touchStateRef.current = null; 3078 } 3079 } 3080 function handleTouchMoveCapture(event) { 3081 addTargetEventListenerOnce(event, handleTouchMove); 3082 } 3083 function handleTouchEnd(event) { 3084 if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) { 3085 return; 3086 } 3087 if (touchStateRef.current.dismissOnTouchEnd) { 3088 closeOnPressOutside(event); 3089 } 3090 cancelDismissOnEndTimeout.clear(); 3091 touchStateRef.current = null; 3092 } 3093 function handleTouchEndCapture(event) { 3094 addTargetEventListenerOnce(event, handleTouchEnd); 3095 } 3096 const doc = ownerDocument(floatingElement); 3097 const unsubscribe = mergeCleanups(escapeKey2 && mergeCleanups(addEventListener(doc, "keydown", closeOnEscapeKeyDown), addEventListener(doc, "compositionstart", handleCompositionStart), addEventListener(doc, "compositionend", handleCompositionEnd)), outsidePressEnabled && mergeCleanups(addEventListener(doc, "click", closeOnPressOutsideCapture, true), addEventListener(doc, "pointerdown", closeOnPressOutsideCapture, true), addEventListener(doc, "pointerup", handlePressEndCapture, true), addEventListener(doc, "pointercancel", handlePressEndCapture, true), addEventListener(doc, "mousedown", closeOnPressOutsideCapture, true), addEventListener(doc, "mouseup", handlePressEndCapture, true), addEventListener(doc, "touchstart", handleTouchStartCapture, true), addEventListener(doc, "touchmove", handleTouchMoveCapture, true), addEventListener(doc, "touchend", handleTouchEndCapture, true))); 3098 return () => { 3099 unsubscribe(); 3100 compositionTimeout.clear(); 3101 preventedPressSuppressionTimeout.clear(); 3102 resetPressStartState(); 3103 suppressNextOutsideClickRef.current = false; 3104 }; 3105 }, [dataRef, floatingElement, escapeKey2, outsidePressEnabled, outsidePress2, open, enabled, escapeKeyBubbles, outsidePressBubbles, closeOnEscapeKeyDown, clearInsideReactTree, getOutsidePressEventProp, hasBlockingChild, isEventWithinOwnElements, tree, store2, cancelDismissOnEndTimeout]); 3106 React18.useEffect(clearInsideReactTree, [outsidePress2, clearInsideReactTree]); 3107 const reference = React18.useMemo(() => ({ 3108 onKeyDown: closeOnEscapeKeyDown, 3109 onPointerDown: closeOnReferencePress, 3110 onClick: closeOnReferencePress 3111 }), [closeOnEscapeKeyDown, closeOnReferencePress]); 3112 const floating = React18.useMemo(() => ({ 3113 onKeyDown: closeOnEscapeKeyDown, 3114 // `onMouseDown` may be blocked if `event.preventDefault()` is called in 3115 // `onPointerDown`, such as with <NumberField.ScrubArea>. 3116 // See https://github.com/mui/base-ui/pull/3379 3117 onPointerDown: markInsidePressStartPrevented, 3118 onMouseDown: markInsidePressStartPrevented, 3119 onClickCapture: markInsideReactTree, 3120 onMouseDownCapture(event) { 3121 markInsideReactTree(); 3122 markPressStartedInsideReactTree(event); 3123 }, 3124 onPointerDownCapture(event) { 3125 markInsideReactTree(); 3126 markPressStartedInsideReactTree(event); 3127 }, 3128 onMouseUpCapture: markInsideReactTree, 3129 onTouchEndCapture: markInsideReactTree, 3130 onTouchMoveCapture: markInsideReactTree 3131 }), [closeOnEscapeKeyDown, markInsideReactTree, markPressStartedInsideReactTree, markInsidePressStartPrevented]); 3132 return React18.useMemo(() => enabled ? { 3133 reference, 3134 floating, 3135 trigger: reference 3136 } : {}, [enabled, reference, floating]); 3137 } 3138 3139 // node_modules/@base-ui/react/floating-ui-react/hooks/useFloating.mjs 3140 var React25 = __toESM(require_react(), 1); 3141 3142 // node_modules/@floating-ui/core/dist/floating-ui.core.mjs 3143 function computeCoordsFromPlacement(_ref, placement, rtl) { 3144 let { 3145 reference, 3146 floating 3147 } = _ref; 3148 const sideAxis = getSideAxis(placement); 3149 const alignmentAxis = getAlignmentAxis(placement); 3150 const alignLength = getAxisLength(alignmentAxis); 3151 const side = getSide(placement); 3152 const isVertical = sideAxis === "y"; 3153 const commonX = reference.x + reference.width / 2 - floating.width / 2; 3154 const commonY = reference.y + reference.height / 2 - floating.height / 2; 3155 const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2; 3156 let coords; 3157 switch (side) { 3158 case "top": 3159 coords = { 3160 x: commonX, 3161 y: reference.y - floating.height 3162 }; 3163 break; 3164 case "bottom": 3165 coords = { 3166 x: commonX, 3167 y: reference.y + reference.height 3168 }; 3169 break; 3170 case "right": 3171 coords = { 3172 x: reference.x + reference.width, 3173 y: commonY 3174 }; 3175 break; 3176 case "left": 3177 coords = { 3178 x: reference.x - floating.width, 3179 y: commonY 3180 }; 3181 break; 3182 default: 3183 coords = { 3184 x: reference.x, 3185 y: reference.y 3186 }; 3187 } 3188 switch (getAlignment(placement)) { 3189 case "start": 3190 coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1); 3191 break; 3192 case "end": 3193 coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1); 3194 break; 3195 } 3196 return coords; 3197 } 3198 async function detectOverflow(state, options) { 3199 var _await$platform$isEle; 3200 if (options === void 0) { 3201 options = {}; 3202 } 3203 const { 3204 x, 3205 y, 3206 platform: platform3, 3207 rects, 3208 elements, 3209 strategy 3210 } = state; 3211 const { 3212 boundary = "clippingAncestors", 3213 rootBoundary = "viewport", 3214 elementContext = "floating", 3215 altBoundary = false, 3216 padding = 0 3217 } = evaluate(options, state); 3218 const paddingObject = getPaddingObject(padding); 3219 const altContext = elementContext === "floating" ? "reference" : "floating"; 3220 const element = elements[altBoundary ? altContext : elementContext]; 3221 const clippingClientRect = rectToClientRect(await platform3.getClippingRect({ 3222 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)), 3223 boundary, 3224 rootBoundary, 3225 strategy 3226 })); 3227 const rect = elementContext === "floating" ? { 3228 x, 3229 y, 3230 width: rects.floating.width, 3231 height: rects.floating.height 3232 } : rects.reference; 3233 const offsetParent = await (platform3.getOffsetParent == null ? void 0 : platform3.getOffsetParent(elements.floating)); 3234 const offsetScale = await (platform3.isElement == null ? void 0 : platform3.isElement(offsetParent)) ? await (platform3.getScale == null ? void 0 : platform3.getScale(offsetParent)) || { 3235 x: 1, 3236 y: 1 3237 } : { 3238 x: 1, 3239 y: 1 3240 }; 3241 const elementClientRect = rectToClientRect(platform3.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform3.convertOffsetParentRelativeRectToViewportRelativeRect({ 3242 elements, 3243 rect, 3244 offsetParent, 3245 strategy 3246 }) : rect); 3247 return { 3248 top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y, 3249 bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y, 3250 left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x, 3251 right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x 3252 }; 3253 } 3254 var MAX_RESET_COUNT = 50; 3255 var computePosition = async (reference, floating, config) => { 3256 const { 3257 placement = "bottom", 3258 strategy = "absolute", 3259 middleware = [], 3260 platform: platform3 3261 } = config; 3262 const platformWithDetectOverflow = platform3.detectOverflow ? platform3 : { 3263 ...platform3, 3264 detectOverflow 3265 }; 3266 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(floating)); 3267 let rects = await platform3.getElementRects({ 3268 reference, 3269 floating, 3270 strategy 3271 }); 3272 let { 3273 x, 3274 y 3275 } = computeCoordsFromPlacement(rects, placement, rtl); 3276 let statefulPlacement = placement; 3277 let resetCount = 0; 3278 const middlewareData = {}; 3279 for (let i = 0; i < middleware.length; i++) { 3280 const currentMiddleware = middleware[i]; 3281 if (!currentMiddleware) { 3282 continue; 3283 } 3284 const { 3285 name, 3286 fn 3287 } = currentMiddleware; 3288 const { 3289 x: nextX, 3290 y: nextY, 3291 data, 3292 reset 3293 } = await fn({ 3294 x, 3295 y, 3296 initialPlacement: placement, 3297 placement: statefulPlacement, 3298 strategy, 3299 middlewareData, 3300 rects, 3301 platform: platformWithDetectOverflow, 3302 elements: { 3303 reference, 3304 floating 3305 } 3306 }); 3307 x = nextX != null ? nextX : x; 3308 y = nextY != null ? nextY : y; 3309 middlewareData[name] = { 3310 ...middlewareData[name], 3311 ...data 3312 }; 3313 if (reset && resetCount < MAX_RESET_COUNT) { 3314 resetCount++; 3315 if (typeof reset === "object") { 3316 if (reset.placement) { 3317 statefulPlacement = reset.placement; 3318 } 3319 if (reset.rects) { 3320 rects = reset.rects === true ? await platform3.getElementRects({ 3321 reference, 3322 floating, 3323 strategy 3324 }) : reset.rects; 3325 } 3326 ({ 3327 x, 3328 y 3329 } = computeCoordsFromPlacement(rects, statefulPlacement, rtl)); 3330 } 3331 i = -1; 3332 } 3333 } 3334 return { 3335 x, 3336 y, 3337 placement: statefulPlacement, 3338 strategy, 3339 middlewareData 3340 }; 3341 }; 3342 var flip = function(options) { 3343 if (options === void 0) { 3344 options = {}; 3345 } 3346 return { 3347 name: "flip", 3348 options, 3349 async fn(state) { 3350 var _middlewareData$arrow, _middlewareData$flip; 3351 const { 3352 placement, 3353 middlewareData, 3354 rects, 3355 initialPlacement, 3356 platform: platform3, 3357 elements 3358 } = state; 3359 const { 3360 mainAxis: checkMainAxis = true, 3361 crossAxis: checkCrossAxis = true, 3362 fallbackPlacements: specifiedFallbackPlacements, 3363 fallbackStrategy = "bestFit", 3364 fallbackAxisSideDirection = "none", 3365 flipAlignment = true, 3366 ...detectOverflowOptions 3367 } = evaluate(options, state); 3368 if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) { 3369 return {}; 3370 } 3371 const side = getSide(placement); 3372 const initialSideAxis = getSideAxis(initialPlacement); 3373 const isBasePlacement = getSide(initialPlacement) === initialPlacement; 3374 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)); 3375 const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement)); 3376 const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== "none"; 3377 if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) { 3378 fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl)); 3379 } 3380 const placements2 = [initialPlacement, ...fallbackPlacements]; 3381 const overflow = await platform3.detectOverflow(state, detectOverflowOptions); 3382 const overflows = []; 3383 let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || []; 3384 if (checkMainAxis) { 3385 overflows.push(overflow[side]); 3386 } 3387 if (checkCrossAxis) { 3388 const sides2 = getAlignmentSides(placement, rects, rtl); 3389 overflows.push(overflow[sides2[0]], overflow[sides2[1]]); 3390 } 3391 overflowsData = [...overflowsData, { 3392 placement, 3393 overflows 3394 }]; 3395 if (!overflows.every((side2) => side2 <= 0)) { 3396 var _middlewareData$flip2, _overflowsData$filter; 3397 const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1; 3398 const nextPlacement = placements2[nextIndex]; 3399 if (nextPlacement) { 3400 const ignoreCrossAxisOverflow = checkCrossAxis === "alignment" ? initialSideAxis !== getSideAxis(nextPlacement) : false; 3401 if (!ignoreCrossAxisOverflow || // We leave the current main axis only if every placement on that axis 3402 // overflows the main axis. 3403 overflowsData.every((d) => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) { 3404 return { 3405 data: { 3406 index: nextIndex, 3407 overflows: overflowsData 3408 }, 3409 reset: { 3410 placement: nextPlacement 3411 } 3412 }; 3413 } 3414 } 3415 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; 3416 if (!resetPlacement) { 3417 switch (fallbackStrategy) { 3418 case "bestFit": { 3419 var _overflowsData$filter2; 3420 const placement2 = (_overflowsData$filter2 = overflowsData.filter((d) => { 3421 if (hasFallbackAxisSideDirection) { 3422 const currentSideAxis = getSideAxis(d.placement); 3423 return currentSideAxis === initialSideAxis || // Create a bias to the `y` side axis due to horizontal 3424 // reading directions favoring greater width. 3425 currentSideAxis === "y"; 3426 } 3427 return true; 3428 }).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]; 3429 if (placement2) { 3430 resetPlacement = placement2; 3431 } 3432 break; 3433 } 3434 case "initialPlacement": 3435 resetPlacement = initialPlacement; 3436 break; 3437 } 3438 } 3439 if (placement !== resetPlacement) { 3440 return { 3441 reset: { 3442 placement: resetPlacement 3443 } 3444 }; 3445 } 3446 } 3447 return {}; 3448 } 3449 }; 3450 }; 3451 function getSideOffsets(overflow, rect) { 3452 return { 3453 top: overflow.top - rect.height, 3454 right: overflow.right - rect.width, 3455 bottom: overflow.bottom - rect.height, 3456 left: overflow.left - rect.width 3457 }; 3458 } 3459 function isAnySideFullyClipped(overflow) { 3460 return sides.some((side) => overflow[side] >= 0); 3461 } 3462 var hide = function(options) { 3463 if (options === void 0) { 3464 options = {}; 3465 } 3466 return { 3467 name: "hide", 3468 options, 3469 async fn(state) { 3470 const { 3471 rects, 3472 platform: platform3 3473 } = state; 3474 const { 3475 strategy = "referenceHidden", 3476 ...detectOverflowOptions 3477 } = evaluate(options, state); 3478 switch (strategy) { 3479 case "referenceHidden": { 3480 const overflow = await platform3.detectOverflow(state, { 3481 ...detectOverflowOptions, 3482 elementContext: "reference" 3483 }); 3484 const offsets = getSideOffsets(overflow, rects.reference); 3485 return { 3486 data: { 3487 referenceHiddenOffsets: offsets, 3488 referenceHidden: isAnySideFullyClipped(offsets) 3489 } 3490 }; 3491 } 3492 case "escaped": { 3493 const overflow = await platform3.detectOverflow(state, { 3494 ...detectOverflowOptions, 3495 altBoundary: true 3496 }); 3497 const offsets = getSideOffsets(overflow, rects.floating); 3498 return { 3499 data: { 3500 escapedOffsets: offsets, 3501 escaped: isAnySideFullyClipped(offsets) 3502 } 3503 }; 3504 } 3505 default: { 3506 return {}; 3507 } 3508 } 3509 } 3510 }; 3511 }; 3512 var originSides = /* @__PURE__ */ new Set(["left", "top"]); 3513 async function convertValueToCoords(state, options) { 3514 const { 3515 placement, 3516 platform: platform3, 3517 elements 3518 } = state; 3519 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)); 3520 const side = getSide(placement); 3521 const alignment = getAlignment(placement); 3522 const isVertical = getSideAxis(placement) === "y"; 3523 const mainAxisMulti = originSides.has(side) ? -1 : 1; 3524 const crossAxisMulti = rtl && isVertical ? -1 : 1; 3525 const rawValue = evaluate(options, state); 3526 let { 3527 mainAxis, 3528 crossAxis, 3529 alignmentAxis 3530 } = typeof rawValue === "number" ? { 3531 mainAxis: rawValue, 3532 crossAxis: 0, 3533 alignmentAxis: null 3534 } : { 3535 mainAxis: rawValue.mainAxis || 0, 3536 crossAxis: rawValue.crossAxis || 0, 3537 alignmentAxis: rawValue.alignmentAxis 3538 }; 3539 if (alignment && typeof alignmentAxis === "number") { 3540 crossAxis = alignment === "end" ? alignmentAxis * -1 : alignmentAxis; 3541 } 3542 return isVertical ? { 3543 x: crossAxis * crossAxisMulti, 3544 y: mainAxis * mainAxisMulti 3545 } : { 3546 x: mainAxis * mainAxisMulti, 3547 y: crossAxis * crossAxisMulti 3548 }; 3549 } 3550 var offset = function(options) { 3551 if (options === void 0) { 3552 options = 0; 3553 } 3554 return { 3555 name: "offset", 3556 options, 3557 async fn(state) { 3558 var _middlewareData$offse, _middlewareData$arrow; 3559 const { 3560 x, 3561 y, 3562 placement, 3563 middlewareData 3564 } = state; 3565 const diffCoords = await convertValueToCoords(state, options); 3566 if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) { 3567 return {}; 3568 } 3569 return { 3570 x: x + diffCoords.x, 3571 y: y + diffCoords.y, 3572 data: { 3573 ...diffCoords, 3574 placement 3575 } 3576 }; 3577 } 3578 }; 3579 }; 3580 var shift = function(options) { 3581 if (options === void 0) { 3582 options = {}; 3583 } 3584 return { 3585 name: "shift", 3586 options, 3587 async fn(state) { 3588 const { 3589 x, 3590 y, 3591 placement, 3592 platform: platform3 3593 } = state; 3594 const { 3595 mainAxis: checkMainAxis = true, 3596 crossAxis: checkCrossAxis = false, 3597 limiter = { 3598 fn: (_ref) => { 3599 let { 3600 x: x2, 3601 y: y2 3602 } = _ref; 3603 return { 3604 x: x2, 3605 y: y2 3606 }; 3607 } 3608 }, 3609 ...detectOverflowOptions 3610 } = evaluate(options, state); 3611 const coords = { 3612 x, 3613 y 3614 }; 3615 const overflow = await platform3.detectOverflow(state, detectOverflowOptions); 3616 const crossAxis = getSideAxis(getSide(placement)); 3617 const mainAxis = getOppositeAxis(crossAxis); 3618 let mainAxisCoord = coords[mainAxis]; 3619 let crossAxisCoord = coords[crossAxis]; 3620 if (checkMainAxis) { 3621 const minSide = mainAxis === "y" ? "top" : "left"; 3622 const maxSide = mainAxis === "y" ? "bottom" : "right"; 3623 const min2 = mainAxisCoord + overflow[minSide]; 3624 const max2 = mainAxisCoord - overflow[maxSide]; 3625 mainAxisCoord = clamp(min2, mainAxisCoord, max2); 3626 } 3627 if (checkCrossAxis) { 3628 const minSide = crossAxis === "y" ? "top" : "left"; 3629 const maxSide = crossAxis === "y" ? "bottom" : "right"; 3630 const min2 = crossAxisCoord + overflow[minSide]; 3631 const max2 = crossAxisCoord - overflow[maxSide]; 3632 crossAxisCoord = clamp(min2, crossAxisCoord, max2); 3633 } 3634 const limitedCoords = limiter.fn({ 3635 ...state, 3636 [mainAxis]: mainAxisCoord, 3637 [crossAxis]: crossAxisCoord 3638 }); 3639 return { 3640 ...limitedCoords, 3641 data: { 3642 x: limitedCoords.x - x, 3643 y: limitedCoords.y - y, 3644 enabled: { 3645 [mainAxis]: checkMainAxis, 3646 [crossAxis]: checkCrossAxis 3647 } 3648 } 3649 }; 3650 } 3651 }; 3652 }; 3653 var limitShift = function(options) { 3654 if (options === void 0) { 3655 options = {}; 3656 } 3657 return { 3658 options, 3659 fn(state) { 3660 const { 3661 x, 3662 y, 3663 placement, 3664 rects, 3665 middlewareData 3666 } = state; 3667 const { 3668 offset: offset4 = 0, 3669 mainAxis: checkMainAxis = true, 3670 crossAxis: checkCrossAxis = true 3671 } = evaluate(options, state); 3672 const coords = { 3673 x, 3674 y 3675 }; 3676 const crossAxis = getSideAxis(placement); 3677 const mainAxis = getOppositeAxis(crossAxis); 3678 let mainAxisCoord = coords[mainAxis]; 3679 let crossAxisCoord = coords[crossAxis]; 3680 const rawOffset = evaluate(offset4, state); 3681 const computedOffset = typeof rawOffset === "number" ? { 3682 mainAxis: rawOffset, 3683 crossAxis: 0 3684 } : { 3685 mainAxis: 0, 3686 crossAxis: 0, 3687 ...rawOffset 3688 }; 3689 if (checkMainAxis) { 3690 const len = mainAxis === "y" ? "height" : "width"; 3691 const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis; 3692 const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis; 3693 if (mainAxisCoord < limitMin) { 3694 mainAxisCoord = limitMin; 3695 } else if (mainAxisCoord > limitMax) { 3696 mainAxisCoord = limitMax; 3697 } 3698 } 3699 if (checkCrossAxis) { 3700 var _middlewareData$offse, _middlewareData$offse2; 3701 const len = mainAxis === "y" ? "width" : "height"; 3702 const isOriginSide = originSides.has(getSide(placement)); 3703 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); 3704 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); 3705 if (crossAxisCoord < limitMin) { 3706 crossAxisCoord = limitMin; 3707 } else if (crossAxisCoord > limitMax) { 3708 crossAxisCoord = limitMax; 3709 } 3710 } 3711 return { 3712 [mainAxis]: mainAxisCoord, 3713 [crossAxis]: crossAxisCoord 3714 }; 3715 } 3716 }; 3717 }; 3718 var size = function(options) { 3719 if (options === void 0) { 3720 options = {}; 3721 } 3722 return { 3723 name: "size", 3724 options, 3725 async fn(state) { 3726 var _state$middlewareData, _state$middlewareData2; 3727 const { 3728 placement, 3729 rects, 3730 platform: platform3, 3731 elements 3732 } = state; 3733 const { 3734 apply = () => { 3735 }, 3736 ...detectOverflowOptions 3737 } = evaluate(options, state); 3738 const overflow = await platform3.detectOverflow(state, detectOverflowOptions); 3739 const side = getSide(placement); 3740 const alignment = getAlignment(placement); 3741 const isYAxis = getSideAxis(placement) === "y"; 3742 const { 3743 width, 3744 height 3745 } = rects.floating; 3746 let heightSide; 3747 let widthSide; 3748 if (side === "top" || side === "bottom") { 3749 heightSide = side; 3750 widthSide = alignment === (await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)) ? "start" : "end") ? "left" : "right"; 3751 } else { 3752 widthSide = side; 3753 heightSide = alignment === "end" ? "top" : "bottom"; 3754 } 3755 const maximumClippingHeight = height - overflow.top - overflow.bottom; 3756 const maximumClippingWidth = width - overflow.left - overflow.right; 3757 const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight); 3758 const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth); 3759 const noShift = !state.middlewareData.shift; 3760 let availableHeight = overflowAvailableHeight; 3761 let availableWidth = overflowAvailableWidth; 3762 if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) { 3763 availableWidth = maximumClippingWidth; 3764 } 3765 if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) { 3766 availableHeight = maximumClippingHeight; 3767 } 3768 if (noShift && !alignment) { 3769 const xMin = max(overflow.left, 0); 3770 const xMax = max(overflow.right, 0); 3771 const yMin = max(overflow.top, 0); 3772 const yMax = max(overflow.bottom, 0); 3773 if (isYAxis) { 3774 availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right)); 3775 } else { 3776 availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom)); 3777 } 3778 } 3779 await apply({ 3780 ...state, 3781 availableWidth, 3782 availableHeight 3783 }); 3784 const nextDimensions = await platform3.getDimensions(elements.floating); 3785 if (width !== nextDimensions.width || height !== nextDimensions.height) { 3786 return { 3787 reset: { 3788 rects: true 3789 } 3790 }; 3791 } 3792 return {}; 3793 } 3794 }; 3795 }; 3796 3797 // node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs 3798 function getCssDimensions(element) { 3799 const css = getComputedStyle2(element); 3800 let width = parseFloat(css.width) || 0; 3801 let height = parseFloat(css.height) || 0; 3802 const hasOffset = isHTMLElement(element); 3803 const offsetWidth = hasOffset ? element.offsetWidth : width; 3804 const offsetHeight = hasOffset ? element.offsetHeight : height; 3805 const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight; 3806 if (shouldFallback) { 3807 width = offsetWidth; 3808 height = offsetHeight; 3809 } 3810 return { 3811 width, 3812 height, 3813 $: shouldFallback 3814 }; 3815 } 3816 function unwrapElement(element) { 3817 return !isElement(element) ? element.contextElement : element; 3818 } 3819 function getScale(element) { 3820 const domElement = unwrapElement(element); 3821 if (!isHTMLElement(domElement)) { 3822 return createCoords(1); 3823 } 3824 const rect = domElement.getBoundingClientRect(); 3825 const { 3826 width, 3827 height, 3828 $ 3829 } = getCssDimensions(domElement); 3830 let x = ($ ? round(rect.width) : rect.width) / width; 3831 let y = ($ ? round(rect.height) : rect.height) / height; 3832 if (!x || !Number.isFinite(x)) { 3833 x = 1; 3834 } 3835 if (!y || !Number.isFinite(y)) { 3836 y = 1; 3837 } 3838 return { 3839 x, 3840 y 3841 }; 3842 } 3843 var noOffsets = /* @__PURE__ */ createCoords(0); 3844 function getVisualOffsets(element) { 3845 const win = getWindow(element); 3846 if (!isWebKit() || !win.visualViewport) { 3847 return noOffsets; 3848 } 3849 return { 3850 x: win.visualViewport.offsetLeft, 3851 y: win.visualViewport.offsetTop 3852 }; 3853 } 3854 function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) { 3855 if (isFixed === void 0) { 3856 isFixed = false; 3857 } 3858 if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) { 3859 return false; 3860 } 3861 return isFixed; 3862 } 3863 function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) { 3864 if (includeScale === void 0) { 3865 includeScale = false; 3866 } 3867 if (isFixedStrategy === void 0) { 3868 isFixedStrategy = false; 3869 } 3870 const clientRect = element.getBoundingClientRect(); 3871 const domElement = unwrapElement(element); 3872 let scale = createCoords(1); 3873 if (includeScale) { 3874 if (offsetParent) { 3875 if (isElement(offsetParent)) { 3876 scale = getScale(offsetParent); 3877 } 3878 } else { 3879 scale = getScale(element); 3880 } 3881 } 3882 const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0); 3883 let x = (clientRect.left + visualOffsets.x) / scale.x; 3884 let y = (clientRect.top + visualOffsets.y) / scale.y; 3885 let width = clientRect.width / scale.x; 3886 let height = clientRect.height / scale.y; 3887 if (domElement) { 3888 const win = getWindow(domElement); 3889 const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent; 3890 let currentWin = win; 3891 let currentIFrame = getFrameElement(currentWin); 3892 while (currentIFrame && offsetParent && offsetWin !== currentWin) { 3893 const iframeScale = getScale(currentIFrame); 3894 const iframeRect = currentIFrame.getBoundingClientRect(); 3895 const css = getComputedStyle2(currentIFrame); 3896 const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x; 3897 const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y; 3898 x *= iframeScale.x; 3899 y *= iframeScale.y; 3900 width *= iframeScale.x; 3901 height *= iframeScale.y; 3902 x += left; 3903 y += top; 3904 currentWin = getWindow(currentIFrame); 3905 currentIFrame = getFrameElement(currentWin); 3906 } 3907 } 3908 return rectToClientRect({ 3909 width, 3910 height, 3911 x, 3912 y 3913 }); 3914 } 3915 function getWindowScrollBarX(element, rect) { 3916 const leftScroll = getNodeScroll(element).scrollLeft; 3917 if (!rect) { 3918 return getBoundingClientRect(getDocumentElement(element)).left + leftScroll; 3919 } 3920 return rect.left + leftScroll; 3921 } 3922 function getHTMLOffset(documentElement, scroll) { 3923 const htmlRect = documentElement.getBoundingClientRect(); 3924 const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect); 3925 const y = htmlRect.top + scroll.scrollTop; 3926 return { 3927 x, 3928 y 3929 }; 3930 } 3931 function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) { 3932 let { 3933 elements, 3934 rect, 3935 offsetParent, 3936 strategy 3937 } = _ref; 3938 const isFixed = strategy === "fixed"; 3939 const documentElement = getDocumentElement(offsetParent); 3940 const topLayer = elements ? isTopLayer(elements.floating) : false; 3941 if (offsetParent === documentElement || topLayer && isFixed) { 3942 return rect; 3943 } 3944 let scroll = { 3945 scrollLeft: 0, 3946 scrollTop: 0 3947 }; 3948 let scale = createCoords(1); 3949 const offsets = createCoords(0); 3950 const isOffsetParentAnElement = isHTMLElement(offsetParent); 3951 if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { 3952 if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) { 3953 scroll = getNodeScroll(offsetParent); 3954 } 3955 if (isOffsetParentAnElement) { 3956 const offsetRect = getBoundingClientRect(offsetParent); 3957 scale = getScale(offsetParent); 3958 offsets.x = offsetRect.x + offsetParent.clientLeft; 3959 offsets.y = offsetRect.y + offsetParent.clientTop; 3960 } 3961 } 3962 const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0); 3963 return { 3964 width: rect.width * scale.x, 3965 height: rect.height * scale.y, 3966 x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x, 3967 y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y 3968 }; 3969 } 3970 function getClientRects(element) { 3971 return Array.from(element.getClientRects()); 3972 } 3973 function getDocumentRect(element) { 3974 const html = getDocumentElement(element); 3975 const scroll = getNodeScroll(element); 3976 const body = element.ownerDocument.body; 3977 const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth); 3978 const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight); 3979 let x = -scroll.scrollLeft + getWindowScrollBarX(element); 3980 const y = -scroll.scrollTop; 3981 if (getComputedStyle2(body).direction === "rtl") { 3982 x += max(html.clientWidth, body.clientWidth) - width; 3983 } 3984 return { 3985 width, 3986 height, 3987 x, 3988 y 3989 }; 3990 } 3991 var SCROLLBAR_MAX = 25; 3992 function getViewportRect(element, strategy) { 3993 const win = getWindow(element); 3994 const html = getDocumentElement(element); 3995 const visualViewport = win.visualViewport; 3996 let width = html.clientWidth; 3997 let height = html.clientHeight; 3998 let x = 0; 3999 let y = 0; 4000 if (visualViewport) { 4001 width = visualViewport.width; 4002 height = visualViewport.height; 4003 const visualViewportBased = isWebKit(); 4004 if (!visualViewportBased || visualViewportBased && strategy === "fixed") { 4005 x = visualViewport.offsetLeft; 4006 y = visualViewport.offsetTop; 4007 } 4008 } 4009 const windowScrollbarX = getWindowScrollBarX(html); 4010 if (windowScrollbarX <= 0) { 4011 const doc = html.ownerDocument; 4012 const body = doc.body; 4013 const bodyStyles = getComputedStyle(body); 4014 const bodyMarginInline = doc.compatMode === "CSS1Compat" ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0; 4015 const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline); 4016 if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) { 4017 width -= clippingStableScrollbarWidth; 4018 } 4019 } else if (windowScrollbarX <= SCROLLBAR_MAX) { 4020 width += windowScrollbarX; 4021 } 4022 return { 4023 width, 4024 height, 4025 x, 4026 y 4027 }; 4028 } 4029 function getInnerBoundingClientRect(element, strategy) { 4030 const clientRect = getBoundingClientRect(element, true, strategy === "fixed"); 4031 const top = clientRect.top + element.clientTop; 4032 const left = clientRect.left + element.clientLeft; 4033 const scale = isHTMLElement(element) ? getScale(element) : createCoords(1); 4034 const width = element.clientWidth * scale.x; 4035 const height = element.clientHeight * scale.y; 4036 const x = left * scale.x; 4037 const y = top * scale.y; 4038 return { 4039 width, 4040 height, 4041 x, 4042 y 4043 }; 4044 } 4045 function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) { 4046 let rect; 4047 if (clippingAncestor === "viewport") { 4048 rect = getViewportRect(element, strategy); 4049 } else if (clippingAncestor === "document") { 4050 rect = getDocumentRect(getDocumentElement(element)); 4051 } else if (isElement(clippingAncestor)) { 4052 rect = getInnerBoundingClientRect(clippingAncestor, strategy); 4053 } else { 4054 const visualOffsets = getVisualOffsets(element); 4055 rect = { 4056 x: clippingAncestor.x - visualOffsets.x, 4057 y: clippingAncestor.y - visualOffsets.y, 4058 width: clippingAncestor.width, 4059 height: clippingAncestor.height 4060 }; 4061 } 4062 return rectToClientRect(rect); 4063 } 4064 function hasFixedPositionAncestor(element, stopNode) { 4065 const parentNode = getParentNode(element); 4066 if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) { 4067 return false; 4068 } 4069 return getComputedStyle2(parentNode).position === "fixed" || hasFixedPositionAncestor(parentNode, stopNode); 4070 } 4071 function getClippingElementAncestors(element, cache) { 4072 const cachedResult = cache.get(element); 4073 if (cachedResult) { 4074 return cachedResult; 4075 } 4076 let result = getOverflowAncestors(element, [], false).filter((el) => isElement(el) && getNodeName(el) !== "body"); 4077 let currentContainingBlockComputedStyle = null; 4078 const elementIsFixed = getComputedStyle2(element).position === "fixed"; 4079 let currentNode = elementIsFixed ? getParentNode(element) : element; 4080 while (isElement(currentNode) && !isLastTraversableNode(currentNode)) { 4081 const computedStyle = getComputedStyle2(currentNode); 4082 const currentNodeIsContaining = isContainingBlock(currentNode); 4083 if (!currentNodeIsContaining && computedStyle.position === "fixed") { 4084 currentContainingBlockComputedStyle = null; 4085 } 4086 const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === "static" && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === "absolute" || currentContainingBlockComputedStyle.position === "fixed") || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode); 4087 if (shouldDropCurrentNode) { 4088 result = result.filter((ancestor) => ancestor !== currentNode); 4089 } else { 4090 currentContainingBlockComputedStyle = computedStyle; 4091 } 4092 currentNode = getParentNode(currentNode); 4093 } 4094 cache.set(element, result); 4095 return result; 4096 } 4097 function getClippingRect(_ref) { 4098 let { 4099 element, 4100 boundary, 4101 rootBoundary, 4102 strategy 4103 } = _ref; 4104 const elementClippingAncestors = boundary === "clippingAncestors" ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary); 4105 const clippingAncestors = [...elementClippingAncestors, rootBoundary]; 4106 const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy); 4107 let top = firstRect.top; 4108 let right = firstRect.right; 4109 let bottom = firstRect.bottom; 4110 let left = firstRect.left; 4111 for (let i = 1; i < clippingAncestors.length; i++) { 4112 const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy); 4113 top = max(rect.top, top); 4114 right = min(rect.right, right); 4115 bottom = min(rect.bottom, bottom); 4116 left = max(rect.left, left); 4117 } 4118 return { 4119 width: right - left, 4120 height: bottom - top, 4121 x: left, 4122 y: top 4123 }; 4124 } 4125 function getDimensions(element) { 4126 const { 4127 width, 4128 height 4129 } = getCssDimensions(element); 4130 return { 4131 width, 4132 height 4133 }; 4134 } 4135 function getRectRelativeToOffsetParent(element, offsetParent, strategy) { 4136 const isOffsetParentAnElement = isHTMLElement(offsetParent); 4137 const documentElement = getDocumentElement(offsetParent); 4138 const isFixed = strategy === "fixed"; 4139 const rect = getBoundingClientRect(element, true, isFixed, offsetParent); 4140 let scroll = { 4141 scrollLeft: 0, 4142 scrollTop: 0 4143 }; 4144 const offsets = createCoords(0); 4145 function setLeftRTLScrollbarOffset() { 4146 offsets.x = getWindowScrollBarX(documentElement); 4147 } 4148 if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { 4149 if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) { 4150 scroll = getNodeScroll(offsetParent); 4151 } 4152 if (isOffsetParentAnElement) { 4153 const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent); 4154 offsets.x = offsetRect.x + offsetParent.clientLeft; 4155 offsets.y = offsetRect.y + offsetParent.clientTop; 4156 } else if (documentElement) { 4157 setLeftRTLScrollbarOffset(); 4158 } 4159 } 4160 if (isFixed && !isOffsetParentAnElement && documentElement) { 4161 setLeftRTLScrollbarOffset(); 4162 } 4163 const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0); 4164 const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x; 4165 const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y; 4166 return { 4167 x, 4168 y, 4169 width: rect.width, 4170 height: rect.height 4171 }; 4172 } 4173 function isStaticPositioned(element) { 4174 return getComputedStyle2(element).position === "static"; 4175 } 4176 function getTrueOffsetParent(element, polyfill) { 4177 if (!isHTMLElement(element) || getComputedStyle2(element).position === "fixed") { 4178 return null; 4179 } 4180 if (polyfill) { 4181 return polyfill(element); 4182 } 4183 let rawOffsetParent = element.offsetParent; 4184 if (getDocumentElement(element) === rawOffsetParent) { 4185 rawOffsetParent = rawOffsetParent.ownerDocument.body; 4186 } 4187 return rawOffsetParent; 4188 } 4189 function getOffsetParent(element, polyfill) { 4190 const win = getWindow(element); 4191 if (isTopLayer(element)) { 4192 return win; 4193 } 4194 if (!isHTMLElement(element)) { 4195 let svgOffsetParent = getParentNode(element); 4196 while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) { 4197 if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) { 4198 return svgOffsetParent; 4199 } 4200 svgOffsetParent = getParentNode(svgOffsetParent); 4201 } 4202 return win; 4203 } 4204 let offsetParent = getTrueOffsetParent(element, polyfill); 4205 while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) { 4206 offsetParent = getTrueOffsetParent(offsetParent, polyfill); 4207 } 4208 if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) { 4209 return win; 4210 } 4211 return offsetParent || getContainingBlock(element) || win; 4212 } 4213 var getElementRects = async function(data) { 4214 const getOffsetParentFn = this.getOffsetParent || getOffsetParent; 4215 const getDimensionsFn = this.getDimensions; 4216 const floatingDimensions = await getDimensionsFn(data.floating); 4217 return { 4218 reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy), 4219 floating: { 4220 x: 0, 4221 y: 0, 4222 width: floatingDimensions.width, 4223 height: floatingDimensions.height 4224 } 4225 }; 4226 }; 4227 function isRTL(element) { 4228 return getComputedStyle2(element).direction === "rtl"; 4229 } 4230 var platform2 = { 4231 convertOffsetParentRelativeRectToViewportRelativeRect, 4232 getDocumentElement, 4233 getClippingRect, 4234 getOffsetParent, 4235 getElementRects, 4236 getClientRects, 4237 getDimensions, 4238 getScale, 4239 isElement, 4240 isRTL 4241 }; 4242 function rectsAreEqual(a, b) { 4243 return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height; 4244 } 4245 function observeMove(element, onMove) { 4246 let io = null; 4247 let timeoutId; 4248 const root = getDocumentElement(element); 4249 function cleanup() { 4250 var _io; 4251 clearTimeout(timeoutId); 4252 (_io = io) == null || _io.disconnect(); 4253 io = null; 4254 } 4255 function refresh(skip, threshold) { 4256 if (skip === void 0) { 4257 skip = false; 4258 } 4259 if (threshold === void 0) { 4260 threshold = 1; 4261 } 4262 cleanup(); 4263 const elementRectForRootMargin = element.getBoundingClientRect(); 4264 const { 4265 left, 4266 top, 4267 width, 4268 height 4269 } = elementRectForRootMargin; 4270 if (!skip) { 4271 onMove(); 4272 } 4273 if (!width || !height) { 4274 return; 4275 } 4276 const insetTop = floor(top); 4277 const insetRight = floor(root.clientWidth - (left + width)); 4278 const insetBottom = floor(root.clientHeight - (top + height)); 4279 const insetLeft = floor(left); 4280 const rootMargin = -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px"; 4281 const options = { 4282 rootMargin, 4283 threshold: max(0, min(1, threshold)) || 1 4284 }; 4285 let isFirstUpdate = true; 4286 function handleObserve(entries) { 4287 const ratio = entries[0].intersectionRatio; 4288 if (ratio !== threshold) { 4289 if (!isFirstUpdate) { 4290 return refresh(); 4291 } 4292 if (!ratio) { 4293 timeoutId = setTimeout(() => { 4294 refresh(false, 1e-7); 4295 }, 1e3); 4296 } else { 4297 refresh(false, ratio); 4298 } 4299 } 4300 if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) { 4301 refresh(); 4302 } 4303 isFirstUpdate = false; 4304 } 4305 try { 4306 io = new IntersectionObserver(handleObserve, { 4307 ...options, 4308 // Handle <iframe>s 4309 root: root.ownerDocument 4310 }); 4311 } catch (_e) { 4312 io = new IntersectionObserver(handleObserve, options); 4313 } 4314 io.observe(element); 4315 } 4316 refresh(true); 4317 return cleanup; 4318 } 4319 function autoUpdate(reference, floating, update2, options) { 4320 if (options === void 0) { 4321 options = {}; 4322 } 4323 const { 4324 ancestorScroll = true, 4325 ancestorResize = true, 4326 elementResize = typeof ResizeObserver === "function", 4327 layoutShift = typeof IntersectionObserver === "function", 4328 animationFrame = false 4329 } = options; 4330 const referenceEl = unwrapElement(reference); 4331 const ancestors = ancestorScroll || ancestorResize ? [...referenceEl ? getOverflowAncestors(referenceEl) : [], ...floating ? getOverflowAncestors(floating) : []] : []; 4332 ancestors.forEach((ancestor) => { 4333 ancestorScroll && ancestor.addEventListener("scroll", update2, { 4334 passive: true 4335 }); 4336 ancestorResize && ancestor.addEventListener("resize", update2); 4337 }); 4338 const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update2) : null; 4339 let reobserveFrame = -1; 4340 let resizeObserver = null; 4341 if (elementResize) { 4342 resizeObserver = new ResizeObserver((_ref) => { 4343 let [firstEntry] = _ref; 4344 if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) { 4345 resizeObserver.unobserve(floating); 4346 cancelAnimationFrame(reobserveFrame); 4347 reobserveFrame = requestAnimationFrame(() => { 4348 var _resizeObserver; 4349 (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating); 4350 }); 4351 } 4352 update2(); 4353 }); 4354 if (referenceEl && !animationFrame) { 4355 resizeObserver.observe(referenceEl); 4356 } 4357 if (floating) { 4358 resizeObserver.observe(floating); 4359 } 4360 } 4361 let frameId; 4362 let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null; 4363 if (animationFrame) { 4364 frameLoop(); 4365 } 4366 function frameLoop() { 4367 const nextRefRect = getBoundingClientRect(reference); 4368 if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) { 4369 update2(); 4370 } 4371 prevRefRect = nextRefRect; 4372 frameId = requestAnimationFrame(frameLoop); 4373 } 4374 update2(); 4375 return () => { 4376 var _resizeObserver2; 4377 ancestors.forEach((ancestor) => { 4378 ancestorScroll && ancestor.removeEventListener("scroll", update2); 4379 ancestorResize && ancestor.removeEventListener("resize", update2); 4380 }); 4381 cleanupIo == null || cleanupIo(); 4382 (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect(); 4383 resizeObserver = null; 4384 if (animationFrame) { 4385 cancelAnimationFrame(frameId); 4386 } 4387 }; 4388 } 4389 var offset2 = offset; 4390 var shift2 = shift; 4391 var flip2 = flip; 4392 var size2 = size; 4393 var hide2 = hide; 4394 var limitShift2 = limitShift; 4395 var computePosition2 = (reference, floating, options) => { 4396 const cache = /* @__PURE__ */ new Map(); 4397 const mergedOptions = { 4398 platform: platform2, 4399 ...options 4400 }; 4401 const platformWithCache = { 4402 ...mergedOptions.platform, 4403 _c: cache 4404 }; 4405 return computePosition(reference, floating, { 4406 ...mergedOptions, 4407 platform: platformWithCache 4408 }); 4409 }; 4410 4411 // node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs 4412 var React19 = __toESM(require_react(), 1); 4413 var import_react2 = __toESM(require_react(), 1); 4414 var ReactDOM3 = __toESM(require_react_dom(), 1); 4415 var isClient = typeof document !== "undefined"; 4416 var noop2 = function noop3() { 4417 }; 4418 var index = isClient ? import_react2.useLayoutEffect : noop2; 4419 function deepEqual(a, b) { 4420 if (a === b) { 4421 return true; 4422 } 4423 if (typeof a !== typeof b) { 4424 return false; 4425 } 4426 if (typeof a === "function" && a.toString() === b.toString()) { 4427 return true; 4428 } 4429 let length; 4430 let i; 4431 let keys; 4432 if (a && b && typeof a === "object") { 4433 if (Array.isArray(a)) { 4434 length = a.length; 4435 if (length !== b.length) return false; 4436 for (i = length; i-- !== 0; ) { 4437 if (!deepEqual(a[i], b[i])) { 4438 return false; 4439 } 4440 } 4441 return true; 4442 } 4443 keys = Object.keys(a); 4444 length = keys.length; 4445 if (length !== Object.keys(b).length) { 4446 return false; 4447 } 4448 for (i = length; i-- !== 0; ) { 4449 if (!{}.hasOwnProperty.call(b, keys[i])) { 4450 return false; 4451 } 4452 } 4453 for (i = length; i-- !== 0; ) { 4454 const key = keys[i]; 4455 if (key === "_owner" && a.$$typeof) { 4456 continue; 4457 } 4458 if (!deepEqual(a[key], b[key])) { 4459 return false; 4460 } 4461 } 4462 return true; 4463 } 4464 return a !== a && b !== b; 4465 } 4466 function getDPR(element) { 4467 if (typeof window === "undefined") { 4468 return 1; 4469 } 4470 const win = element.ownerDocument.defaultView || window; 4471 return win.devicePixelRatio || 1; 4472 } 4473 function roundByDPR(element, value) { 4474 const dpr = getDPR(element); 4475 return Math.round(value * dpr) / dpr; 4476 } 4477 function useLatestRef(value) { 4478 const ref = React19.useRef(value); 4479 index(() => { 4480 ref.current = value; 4481 }); 4482 return ref; 4483 } 4484 function useFloating(options) { 4485 if (options === void 0) { 4486 options = {}; 4487 } 4488 const { 4489 placement = "bottom", 4490 strategy = "absolute", 4491 middleware = [], 4492 platform: platform3, 4493 elements: { 4494 reference: externalReference, 4495 floating: externalFloating 4496 } = {}, 4497 transform = true, 4498 whileElementsMounted, 4499 open 4500 } = options; 4501 const [data, setData] = React19.useState({ 4502 x: 0, 4503 y: 0, 4504 strategy, 4505 placement, 4506 middlewareData: {}, 4507 isPositioned: false 4508 }); 4509 const [latestMiddleware, setLatestMiddleware] = React19.useState(middleware); 4510 if (!deepEqual(latestMiddleware, middleware)) { 4511 setLatestMiddleware(middleware); 4512 } 4513 const [_reference, _setReference] = React19.useState(null); 4514 const [_floating, _setFloating] = React19.useState(null); 4515 const setReference = React19.useCallback((node) => { 4516 if (node !== referenceRef.current) { 4517 referenceRef.current = node; 4518 _setReference(node); 4519 } 4520 }, []); 4521 const setFloating = React19.useCallback((node) => { 4522 if (node !== floatingRef.current) { 4523 floatingRef.current = node; 4524 _setFloating(node); 4525 } 4526 }, []); 4527 const referenceEl = externalReference || _reference; 4528 const floatingEl = externalFloating || _floating; 4529 const referenceRef = React19.useRef(null); 4530 const floatingRef = React19.useRef(null); 4531 const dataRef = React19.useRef(data); 4532 const hasWhileElementsMounted = whileElementsMounted != null; 4533 const whileElementsMountedRef = useLatestRef(whileElementsMounted); 4534 const platformRef = useLatestRef(platform3); 4535 const openRef = useLatestRef(open); 4536 const update2 = React19.useCallback(() => { 4537 if (!referenceRef.current || !floatingRef.current) { 4538 return; 4539 } 4540 const config = { 4541 placement, 4542 strategy, 4543 middleware: latestMiddleware 4544 }; 4545 if (platformRef.current) { 4546 config.platform = platformRef.current; 4547 } 4548 computePosition2(referenceRef.current, floatingRef.current, config).then((data2) => { 4549 const fullData = { 4550 ...data2, 4551 // The floating element's position may be recomputed while it's closed 4552 // but still mounted (such as when transitioning out). To ensure 4553 // `isPositioned` will be `false` initially on the next open, avoid 4554 // setting it to `true` when `open === false` (must be specified). 4555 isPositioned: openRef.current !== false 4556 }; 4557 if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) { 4558 dataRef.current = fullData; 4559 ReactDOM3.flushSync(() => { 4560 setData(fullData); 4561 }); 4562 } 4563 }); 4564 }, [latestMiddleware, placement, strategy, platformRef, openRef]); 4565 index(() => { 4566 if (open === false && dataRef.current.isPositioned) { 4567 dataRef.current.isPositioned = false; 4568 setData((data2) => ({ 4569 ...data2, 4570 isPositioned: false 4571 })); 4572 } 4573 }, [open]); 4574 const isMountedRef = React19.useRef(false); 4575 index(() => { 4576 isMountedRef.current = true; 4577 return () => { 4578 isMountedRef.current = false; 4579 }; 4580 }, []); 4581 index(() => { 4582 if (referenceEl) referenceRef.current = referenceEl; 4583 if (floatingEl) floatingRef.current = floatingEl; 4584 if (referenceEl && floatingEl) { 4585 if (whileElementsMountedRef.current) { 4586 return whileElementsMountedRef.current(referenceEl, floatingEl, update2); 4587 } 4588 update2(); 4589 } 4590 }, [referenceEl, floatingEl, update2, whileElementsMountedRef, hasWhileElementsMounted]); 4591 const refs = React19.useMemo(() => ({ 4592 reference: referenceRef, 4593 floating: floatingRef, 4594 setReference, 4595 setFloating 4596 }), [setReference, setFloating]); 4597 const elements = React19.useMemo(() => ({ 4598 reference: referenceEl, 4599 floating: floatingEl 4600 }), [referenceEl, floatingEl]); 4601 const floatingStyles = React19.useMemo(() => { 4602 const initialStyles = { 4603 position: strategy, 4604 left: 0, 4605 top: 0 4606 }; 4607 if (!elements.floating) { 4608 return initialStyles; 4609 } 4610 const x = roundByDPR(elements.floating, data.x); 4611 const y = roundByDPR(elements.floating, data.y); 4612 if (transform) { 4613 return { 4614 ...initialStyles, 4615 transform: "translate(" + x + "px, " + y + "px)", 4616 ...getDPR(elements.floating) >= 1.5 && { 4617 willChange: "transform" 4618 } 4619 }; 4620 } 4621 return { 4622 position: strategy, 4623 left: x, 4624 top: y 4625 }; 4626 }, [strategy, transform, elements.floating, data.x, data.y]); 4627 return React19.useMemo(() => ({ 4628 ...data, 4629 update: update2, 4630 refs, 4631 elements, 4632 floatingStyles 4633 }), [data, update2, refs, elements, floatingStyles]); 4634 } 4635 var offset3 = (options, deps) => { 4636 const result = offset2(options); 4637 return { 4638 name: result.name, 4639 fn: result.fn, 4640 options: [options, deps] 4641 }; 4642 }; 4643 var shift3 = (options, deps) => { 4644 const result = shift2(options); 4645 return { 4646 name: result.name, 4647 fn: result.fn, 4648 options: [options, deps] 4649 }; 4650 }; 4651 var limitShift3 = (options, deps) => { 4652 const result = limitShift2(options); 4653 return { 4654 fn: result.fn, 4655 options: [options, deps] 4656 }; 4657 }; 4658 var flip3 = (options, deps) => { 4659 const result = flip2(options); 4660 return { 4661 name: result.name, 4662 fn: result.fn, 4663 options: [options, deps] 4664 }; 4665 }; 4666 var size3 = (options, deps) => { 4667 const result = size2(options); 4668 return { 4669 name: result.name, 4670 fn: result.fn, 4671 options: [options, deps] 4672 }; 4673 }; 4674 var hide3 = (options, deps) => { 4675 const result = hide2(options); 4676 return { 4677 name: result.name, 4678 fn: result.fn, 4679 options: [options, deps] 4680 }; 4681 }; 4682 4683 // node_modules/@base-ui/react/utils/popups/popupStoreUtils.mjs 4684 var React24 = __toESM(require_react(), 1); 4685 var ReactDOM4 = __toESM(require_react_dom(), 1); 4686 4687 // node_modules/@base-ui/react/floating-ui-react/hooks/useSyncedFloatingRootContext.mjs 4688 var React23 = __toESM(require_react(), 1); 4689 4690 // node_modules/@base-ui/utils/store/createSelector.mjs 4691 var createSelector = (a, b, c, d, e, f, ...other) => { 4692 if (other.length > 0) { 4693 throw new Error(true ? "Unsupported number of selectors" : formatErrorMessage_default(1)); 4694 } 4695 let selector; 4696 if (a && b && c && d && e && f) { 4697 selector = (state, a1, a2, a3) => { 4698 const va = a(state, a1, a2, a3); 4699 const vb = b(state, a1, a2, a3); 4700 const vc = c(state, a1, a2, a3); 4701 const vd = d(state, a1, a2, a3); 4702 const ve = e(state, a1, a2, a3); 4703 return f(va, vb, vc, vd, ve, a1, a2, a3); 4704 }; 4705 } else if (a && b && c && d && e) { 4706 selector = (state, a1, a2, a3) => { 4707 const va = a(state, a1, a2, a3); 4708 const vb = b(state, a1, a2, a3); 4709 const vc = c(state, a1, a2, a3); 4710 const vd = d(state, a1, a2, a3); 4711 return e(va, vb, vc, vd, a1, a2, a3); 4712 }; 4713 } else if (a && b && c && d) { 4714 selector = (state, a1, a2, a3) => { 4715 const va = a(state, a1, a2, a3); 4716 const vb = b(state, a1, a2, a3); 4717 const vc = c(state, a1, a2, a3); 4718 return d(va, vb, vc, a1, a2, a3); 4719 }; 4720 } else if (a && b && c) { 4721 selector = (state, a1, a2, a3) => { 4722 const va = a(state, a1, a2, a3); 4723 const vb = b(state, a1, a2, a3); 4724 return c(va, vb, a1, a2, a3); 4725 }; 4726 } else if (a && b) { 4727 selector = (state, a1, a2, a3) => { 4728 const va = a(state, a1, a2, a3); 4729 return b(va, a1, a2, a3); 4730 }; 4731 } else if (a) { 4732 selector = a; 4733 } else { 4734 throw ( 4735 /* minify-error-disabled */ 4736 new Error("Missing arguments") 4737 ); 4738 } 4739 return selector; 4740 }; 4741 4742 // node_modules/@base-ui/utils/store/useStore.mjs 4743 var React21 = __toESM(require_react(), 1); 4744 var import_shim = __toESM(require_shim(), 1); 4745 var import_with_selector = __toESM(require_with_selector(), 1); 4746 4747 // node_modules/@base-ui/utils/fastHooks.mjs 4748 var React20 = __toESM(require_react(), 1); 4749 var hooks = []; 4750 var currentInstance = void 0; 4751 function getInstance() { 4752 return currentInstance; 4753 } 4754 function register(hook) { 4755 hooks.push(hook); 4756 } 4757 function fastComponent(fn) { 4758 const FastComponent = (props, forwardedRef) => { 4759 const instance = useRefWithInit(createInstance).current; 4760 let result; 4761 try { 4762 currentInstance = instance; 4763 for (const hook of hooks) { 4764 hook.before(instance); 4765 } 4766 result = fn(props, forwardedRef); 4767 for (const hook of hooks) { 4768 hook.after(instance); 4769 } 4770 instance.didInitialize = true; 4771 } finally { 4772 currentInstance = void 0; 4773 } 4774 return result; 4775 }; 4776 FastComponent.displayName = fn.displayName || fn.name; 4777 return FastComponent; 4778 } 4779 function fastComponentRef(fn) { 4780 return /* @__PURE__ */ React20.forwardRef(fastComponent(fn)); 4781 } 4782 function createInstance() { 4783 return { 4784 didInitialize: false 4785 }; 4786 } 4787 4788 // node_modules/@base-ui/utils/store/useStore.mjs 4789 var canUseRawUseSyncExternalStore = isReactVersionAtLeast(19); 4790 var useStoreImplementation = canUseRawUseSyncExternalStore ? useStoreFast : useStoreLegacy; 4791 function useStore(store2, selector, a1, a2, a3) { 4792 return useStoreImplementation(store2, selector, a1, a2, a3); 4793 } 4794 function useStoreR19(store2, selector, a1, a2, a3) { 4795 const getSelection = React21.useCallback(() => selector(store2.getSnapshot(), a1, a2, a3), [store2, selector, a1, a2, a3]); 4796 return (0, import_shim.useSyncExternalStore)(store2.subscribe, getSelection, getSelection); 4797 } 4798 register({ 4799 before(instance) { 4800 instance.syncIndex = 0; 4801 if (!instance.didInitialize) { 4802 instance.syncTick = 1; 4803 instance.syncHooks = []; 4804 instance.didChangeStore = true; 4805 instance.getSnapshot = () => { 4806 let didChange2 = false; 4807 for (let i = 0; i < instance.syncHooks.length; i += 1) { 4808 const hook = instance.syncHooks[i]; 4809 const value = hook.selector(hook.store.state, hook.a1, hook.a2, hook.a3); 4810 if (!Object.is(hook.value, value)) { 4811 didChange2 = true; 4812 hook.value = value; 4813 } 4814 } 4815 if (didChange2) { 4816 instance.syncTick += 1; 4817 } 4818 return instance.syncTick; 4819 }; 4820 } 4821 }, 4822 after(instance) { 4823 if (instance.syncHooks.length > 0) { 4824 if (instance.didChangeStore) { 4825 instance.didChangeStore = false; 4826 instance.subscribe = (onStoreChange) => { 4827 const stores = /* @__PURE__ */ new Set(); 4828 for (const hook of instance.syncHooks) { 4829 stores.add(hook.store); 4830 } 4831 const unsubscribes = []; 4832 for (const store2 of stores) { 4833 unsubscribes.push(store2.subscribe(onStoreChange)); 4834 } 4835 return () => { 4836 for (const unsubscribe of unsubscribes) { 4837 unsubscribe(); 4838 } 4839 }; 4840 }; 4841 } 4842 (0, import_shim.useSyncExternalStore)(instance.subscribe, instance.getSnapshot, instance.getSnapshot); 4843 } 4844 } 4845 }); 4846 function useStoreFast(store2, selector, a1, a2, a3) { 4847 const instance = getInstance(); 4848 if (!instance) { 4849 return useStoreR19(store2, selector, a1, a2, a3); 4850 } 4851 const index2 = instance.syncIndex; 4852 instance.syncIndex += 1; 4853 let hook; 4854 if (!instance.didInitialize) { 4855 hook = { 4856 store: store2, 4857 selector, 4858 a1, 4859 a2, 4860 a3, 4861 value: selector(store2.getSnapshot(), a1, a2, a3) 4862 }; 4863 instance.syncHooks.push(hook); 4864 } else { 4865 hook = instance.syncHooks[index2]; 4866 if (hook.store !== store2 || hook.selector !== selector || !Object.is(hook.a1, a1) || !Object.is(hook.a2, a2) || !Object.is(hook.a3, a3)) { 4867 if (hook.store !== store2) { 4868 instance.didChangeStore = true; 4869 } 4870 hook.store = store2; 4871 hook.selector = selector; 4872 hook.a1 = a1; 4873 hook.a2 = a2; 4874 hook.a3 = a3; 4875 hook.value = selector(store2.getSnapshot(), a1, a2, a3); 4876 } 4877 } 4878 return hook.value; 4879 } 4880 function useStoreLegacy(store2, selector, a1, a2, a3) { 4881 return (0, import_with_selector.useSyncExternalStoreWithSelector)(store2.subscribe, store2.getSnapshot, store2.getSnapshot, (state) => selector(state, a1, a2, a3)); 4882 } 4883 4884 // node_modules/@base-ui/utils/store/Store.mjs 4885 var Store = class { 4886 /** 4887 * The current state of the store. 4888 * This property is updated immediately when the state changes as a result of calling {@link setState}, {@link update}, or {@link set}. 4889 * 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). 4890 * The values can be used directly (to avoid subscribing to the store) in effects or event handlers. 4891 * 4892 * Do not modify properties in state directly. Instead, use the provided methods to ensure proper state management and listener notification. 4893 */ 4894 // Internal state to handle recursive `setState()` calls 4895 constructor(state) { 4896 this.state = state; 4897 this.listeners = /* @__PURE__ */ new Set(); 4898 this.updateTick = 0; 4899 } 4900 /** 4901 * Registers a listener that will be called whenever the store's state changes. 4902 * 4903 * @param fn The listener function to be called on state changes. 4904 * @returns A function to unsubscribe the listener. 4905 */ 4906 subscribe = (fn) => { 4907 this.listeners.add(fn); 4908 return () => { 4909 this.listeners.delete(fn); 4910 }; 4911 }; 4912 /** 4913 * Returns the current state of the store. 4914 */ 4915 getSnapshot = () => { 4916 return this.state; 4917 }; 4918 /** 4919 * Updates the entire store's state and notifies all registered listeners. 4920 * 4921 * @param newState The new state to set for the store. 4922 */ 4923 setState(newState) { 4924 if (this.state === newState) { 4925 return; 4926 } 4927 this.state = newState; 4928 this.updateTick += 1; 4929 const currentTick = this.updateTick; 4930 for (const listener of this.listeners) { 4931 if (currentTick !== this.updateTick) { 4932 return; 4933 } 4934 listener(newState); 4935 } 4936 } 4937 /** 4938 * Merges the provided changes into the current state and notifies listeners if there are changes. 4939 * 4940 * @param changes An object containing the changes to apply to the current state. 4941 */ 4942 update(changes) { 4943 for (const key in changes) { 4944 if (!Object.is(this.state[key], changes[key])) { 4945 this.setState({ 4946 ...this.state, 4947 ...changes 4948 }); 4949 return; 4950 } 4951 } 4952 } 4953 /** 4954 * Sets a specific key in the store's state to a new value and notifies listeners if the value has changed. 4955 * 4956 * @param key The key in the store's state to update. 4957 * @param value The new value to set for the specified key. 4958 */ 4959 set(key, value) { 4960 if (!Object.is(this.state[key], value)) { 4961 this.setState({ 4962 ...this.state, 4963 [key]: value 4964 }); 4965 } 4966 } 4967 /** 4968 * Gives the state a new reference and updates all registered listeners. 4969 */ 4970 notifyAll() { 4971 const newState = { 4972 ...this.state 4973 }; 4974 this.setState(newState); 4975 } 4976 use(selector, a1, a2, a3) { 4977 return useStore(this, selector, a1, a2, a3); 4978 } 4979 }; 4980 4981 // node_modules/@base-ui/utils/store/ReactStore.mjs 4982 var React22 = __toESM(require_react(), 1); 4983 var ReactStore = class extends Store { 4984 /** 4985 * Creates a new ReactStore instance. 4986 * 4987 * @param state Initial state of the store. 4988 * @param context Non-reactive context values. 4989 * @param selectors Optional selectors for use with `useState`. 4990 */ 4991 constructor(state, context = {}, selectors3) { 4992 super(state); 4993 this.context = context; 4994 this.selectors = selectors3; 4995 } 4996 /** 4997 * Non-reactive values such as refs, callbacks, etc. 4998 */ 4999 /** 5000 * Synchronizes a single external value into the store. 5001 * 5002 * Note that the while the value in `state` is updated immediately, the value returned 5003 * by `useState` is updated before the next render (similarly to React's `useState`). 5004 */ 5005 useSyncedValue(key, value) { 5006 React22.useDebugValue(key); 5007 const store2 = this; 5008 useIsoLayoutEffect(() => { 5009 if (store2.state[key] !== value) { 5010 store2.set(key, value); 5011 } 5012 }, [store2, key, value]); 5013 } 5014 /** 5015 * Synchronizes a single external value into the store and 5016 * cleans it up (sets to `undefined`) on unmount. 5017 * 5018 * Note that the while the value in `state` is updated immediately, the value returned 5019 * by `useState` is updated before the next render (similarly to React's `useState`). 5020 */ 5021 useSyncedValueWithCleanup(key, value) { 5022 const store2 = this; 5023 useIsoLayoutEffect(() => { 5024 if (store2.state[key] !== value) { 5025 store2.set(key, value); 5026 } 5027 return () => { 5028 store2.set(key, void 0); 5029 }; 5030 }, [store2, key, value]); 5031 } 5032 /** 5033 * Synchronizes multiple external values into the store. 5034 * 5035 * Note that the while the values in `state` are updated immediately, the values returned 5036 * by `useState` are updated before the next render (similarly to React's `useState`). 5037 */ 5038 useSyncedValues(statePart) { 5039 const store2 = this; 5040 if (true) { 5041 React22.useDebugValue(statePart, (p) => Object.keys(p)); 5042 const keys = React22.useRef(Object.keys(statePart)).current; 5043 const nextKeys = Object.keys(statePart); 5044 if (keys.length !== nextKeys.length || keys.some((key, index2) => key !== nextKeys[index2])) { 5045 console.error("ReactStore.useSyncedValues expects the same prop keys on every render. Keys should be stable."); 5046 } 5047 } 5048 const dependencies = Object.values(statePart); 5049 useIsoLayoutEffect(() => { 5050 store2.update(statePart); 5051 }, [store2, ...dependencies]); 5052 } 5053 /** 5054 * Registers a controllable prop pair (`controlled`, `defaultValue`) for a specific key. If `controlled` 5055 * is non-undefined, the store's state at `key` is updated to match `controlled`. 5056 */ 5057 useControlledProp(key, controlled) { 5058 React22.useDebugValue(key); 5059 const store2 = this; 5060 const isControlled = controlled !== void 0; 5061 useIsoLayoutEffect(() => { 5062 if (isControlled && !Object.is(store2.state[key], controlled)) { 5063 store2.setState({ 5064 ...store2.state, 5065 [key]: controlled 5066 }); 5067 } 5068 }, [store2, key, controlled, isControlled]); 5069 if (true) { 5070 const cache = this.controlledValues ??= /* @__PURE__ */ new Map(); 5071 if (!cache.has(key)) { 5072 cache.set(key, isControlled); 5073 } 5074 const previouslyControlled = cache.get(key); 5075 if (previouslyControlled !== void 0 && previouslyControlled !== isControlled) { 5076 console.error(`A component is changing the $isControlled ? "" : "un"}controlled state of $key.toString()} to be $isControlled ? "un" : ""}controlled. Elements should not switch from uncontrolled to controlled (or vice versa).`); 5077 } 5078 } 5079 } 5080 /** Gets the current value from the store using a selector with the provided key. 5081 * 5082 * @param key Key of the selector to use. 5083 */ 5084 select(key, a1, a2, a3) { 5085 const selector = this.selectors[key]; 5086 return selector(this.state, a1, a2, a3); 5087 } 5088 /** 5089 * Returns a value from the store's state using a selector function. 5090 * Used to subscribe to specific parts of the state. 5091 * This methods causes a rerender whenever the selected state changes. 5092 * 5093 * @param key Key of the selector to use. 5094 */ 5095 useState(key, a1, a2, a3) { 5096 React22.useDebugValue(key); 5097 return useStore(this, this.selectors[key], a1, a2, a3); 5098 } 5099 /** 5100 * Wraps a function with `useStableCallback` to ensure it has a stable reference 5101 * and assigns it to the context. 5102 * 5103 * @param key Key of the event callback. Must be a function in the context. 5104 * @param fn Function to assign. 5105 */ 5106 useContextCallback(key, fn) { 5107 React22.useDebugValue(key); 5108 const stableFunction = useStableCallback(fn ?? NOOP); 5109 this.context[key] = stableFunction; 5110 } 5111 /** 5112 * Returns a stable setter function for a specific key in the store's state. 5113 * It's commonly used to pass as a ref callback to React elements. 5114 * 5115 * @param key Key of the state to set. 5116 */ 5117 useStateSetter(key) { 5118 const ref = React22.useRef(void 0); 5119 if (ref.current === void 0) { 5120 ref.current = (value) => { 5121 this.set(key, value); 5122 }; 5123 } 5124 return ref.current; 5125 } 5126 /** 5127 * Observes changes derived from the store's selectors and calls the listener when the selected value changes. 5128 * 5129 * @param key Key of the selector to observe. 5130 * @param listener Listener function called when the selector result changes. 5131 */ 5132 observe(selector, listener) { 5133 let selectFn; 5134 if (typeof selector === "function") { 5135 selectFn = selector; 5136 } else { 5137 selectFn = this.selectors[selector]; 5138 } 5139 let prevValue = selectFn(this.state); 5140 listener(prevValue, prevValue, this); 5141 return this.subscribe((nextState) => { 5142 const nextValue = selectFn(nextState); 5143 if (!Object.is(prevValue, nextValue)) { 5144 const oldValue = prevValue; 5145 prevValue = nextValue; 5146 listener(nextValue, oldValue, this); 5147 } 5148 }); 5149 } 5150 }; 5151 5152 // node_modules/@base-ui/react/floating-ui-react/components/FloatingRootStore.mjs 5153 var selectors = { 5154 open: createSelector((state) => state.open), 5155 transitionStatus: createSelector((state) => state.transitionStatus), 5156 domReferenceElement: createSelector((state) => state.domReferenceElement), 5157 referenceElement: createSelector((state) => state.positionReference ?? state.referenceElement), 5158 floatingElement: createSelector((state) => state.floatingElement), 5159 floatingId: createSelector((state) => state.floatingId) 5160 }; 5161 var FloatingRootStore = class extends ReactStore { 5162 constructor(options) { 5163 const { 5164 syncOnly, 5165 nested, 5166 onOpenChange, 5167 triggerElements, 5168 ...initialState 5169 } = options; 5170 super({ 5171 ...initialState, 5172 positionReference: initialState.referenceElement, 5173 domReferenceElement: initialState.referenceElement 5174 }, { 5175 onOpenChange, 5176 dataRef: { 5177 current: {} 5178 }, 5179 events: createEventEmitter(), 5180 nested, 5181 triggerElements 5182 }, selectors); 5183 this.syncOnly = syncOnly; 5184 } 5185 /** 5186 * Syncs the event used by hover logic to distinguish hover-open from click-like interaction. 5187 */ 5188 syncOpenEvent = (newOpen, event) => { 5189 if (!newOpen || !this.state.open || // Prevent a pending hover-open from overwriting a click-open event, while allowing 5190 // click events to upgrade a hover-open. 5191 event != null && isClickLikeEvent(event)) { 5192 this.context.dataRef.current.openEvent = newOpen ? event : void 0; 5193 } 5194 }; 5195 /** 5196 * Runs the root-owned side effects for an open state change. 5197 */ 5198 dispatchOpenChange = (newOpen, eventDetails) => { 5199 this.syncOpenEvent(newOpen, eventDetails.event); 5200 const details = { 5201 open: newOpen, 5202 reason: eventDetails.reason, 5203 nativeEvent: eventDetails.event, 5204 nested: this.context.nested, 5205 triggerElement: eventDetails.trigger 5206 }; 5207 this.context.events.emit("openchange", details); 5208 }; 5209 /** 5210 * Emits the `openchange` event through the internal event emitter and calls the `onOpenChange` handler with the provided arguments. 5211 * 5212 * @param newOpen The new open state. 5213 * @param eventDetails Details about the event that triggered the open state change. 5214 */ 5215 setOpen = (newOpen, eventDetails) => { 5216 if (this.syncOnly) { 5217 this.context.onOpenChange?.(newOpen, eventDetails); 5218 return; 5219 } 5220 this.dispatchOpenChange(newOpen, eventDetails); 5221 this.context.onOpenChange?.(newOpen, eventDetails); 5222 }; 5223 }; 5224 5225 // node_modules/@base-ui/react/floating-ui-react/hooks/useSyncedFloatingRootContext.mjs 5226 function useSyncedFloatingRootContext(options) { 5227 const { 5228 popupStore, 5229 treatPopupAsFloatingElement = false, 5230 floatingRootContext: floatingRootContextProp, 5231 floatingId, 5232 nested, 5233 onOpenChange 5234 } = options; 5235 const open = popupStore.useState("open"); 5236 const referenceElement = popupStore.useState("activeTriggerElement"); 5237 const floatingElement = popupStore.useState(treatPopupAsFloatingElement ? "popupElement" : "positionerElement"); 5238 const triggerElements = popupStore.context.triggerElements; 5239 const handleOpenChange = onOpenChange; 5240 const internalStoreRef = React23.useRef(null); 5241 if (floatingRootContextProp === void 0 && internalStoreRef.current === null) { 5242 internalStoreRef.current = new FloatingRootStore({ 5243 open, 5244 transitionStatus: void 0, 5245 referenceElement, 5246 floatingElement, 5247 triggerElements, 5248 onOpenChange: handleOpenChange, 5249 floatingId, 5250 syncOnly: true, 5251 nested 5252 }); 5253 } 5254 const store2 = floatingRootContextProp ?? internalStoreRef.current; 5255 popupStore.useSyncedValue("floatingId", floatingId); 5256 useIsoLayoutEffect(() => { 5257 const valuesToSync = { 5258 open, 5259 floatingId, 5260 referenceElement, 5261 floatingElement 5262 }; 5263 if (isElement(referenceElement)) { 5264 valuesToSync.domReferenceElement = referenceElement; 5265 } 5266 if (store2.state.positionReference === store2.state.referenceElement) { 5267 valuesToSync.positionReference = referenceElement; 5268 } 5269 store2.update(valuesToSync); 5270 }, [open, floatingId, referenceElement, floatingElement, store2]); 5271 store2.context.onOpenChange = handleOpenChange; 5272 store2.context.nested = nested; 5273 return store2; 5274 } 5275 5276 // node_modules/@base-ui/react/utils/popups/popupStoreUtils.mjs 5277 var FOCUSABLE_POPUP_PROPS = { 5278 tabIndex: -1, 5279 [FOCUSABLE_ATTRIBUTE]: "" 5280 }; 5281 function usePopupStore(externalStore, createStore, treatPopupAsFloatingElement = false) { 5282 const floatingId = useId(); 5283 const nested = useFloatingParentNodeId() != null; 5284 const internalStoreRef = React24.useRef(null); 5285 if (externalStore === void 0 && internalStoreRef.current === null) { 5286 internalStoreRef.current = createStore(floatingId, nested); 5287 } 5288 const store2 = externalStore ?? internalStoreRef.current; 5289 useSyncedFloatingRootContext({ 5290 popupStore: store2, 5291 treatPopupAsFloatingElement, 5292 floatingRootContext: store2.state.floatingRootContext, 5293 floatingId, 5294 nested, 5295 onOpenChange: store2.setOpen 5296 }); 5297 return { 5298 store: store2, 5299 internalStore: internalStoreRef.current 5300 }; 5301 } 5302 function useTriggerRegistration(id, store2) { 5303 const registeredElementIdRef = React24.useRef(null); 5304 const registeredElementRef = React24.useRef(null); 5305 return React24.useCallback((element) => { 5306 if (id === void 0) { 5307 return; 5308 } 5309 let shouldSyncTriggerCount = false; 5310 if (registeredElementIdRef.current !== null) { 5311 const registeredId = registeredElementIdRef.current; 5312 const registeredElement = registeredElementRef.current; 5313 const currentElement = store2.context.triggerElements.getById(registeredId); 5314 if (registeredElement && currentElement === registeredElement) { 5315 store2.context.triggerElements.delete(registeredId); 5316 shouldSyncTriggerCount = true; 5317 } 5318 registeredElementIdRef.current = null; 5319 registeredElementRef.current = null; 5320 } 5321 if (element !== null) { 5322 registeredElementIdRef.current = id; 5323 registeredElementRef.current = element; 5324 store2.context.triggerElements.add(id, element); 5325 shouldSyncTriggerCount = true; 5326 } 5327 if (shouldSyncTriggerCount) { 5328 const triggerCount = store2.context.triggerElements.size; 5329 if (store2.select("open") && store2.state.triggerCount !== triggerCount) { 5330 store2.set("triggerCount", triggerCount); 5331 } 5332 } 5333 }, [store2, id]); 5334 } 5335 function setPopupOpenState(state, open, trigger, preventUnmountOnClose = false) { 5336 if (open) { 5337 state.preventUnmountingOnClose = false; 5338 } else if (preventUnmountOnClose) { 5339 state.preventUnmountingOnClose = true; 5340 } 5341 const triggerId = trigger?.id ?? null; 5342 if (triggerId || open) { 5343 state.activeTriggerId = triggerId; 5344 state.activeTriggerElement = trigger ?? null; 5345 } 5346 } 5347 function attachPreventUnmountOnClose(eventDetails) { 5348 let preventUnmountOnClose = false; 5349 eventDetails.preventUnmountOnClose = () => { 5350 preventUnmountOnClose = true; 5351 }; 5352 return () => preventUnmountOnClose; 5353 } 5354 function applyPopupOpenChange(store2, nextOpen, eventDetails, options = {}) { 5355 const reason = eventDetails.reason; 5356 const isHover = reason === reason_parts_exports.triggerHover; 5357 const isFocusOpen = nextOpen && reason === reason_parts_exports.triggerFocus; 5358 const isDismissClose = !nextOpen && (reason === reason_parts_exports.triggerPress || reason === reason_parts_exports.escapeKey); 5359 const shouldPreventUnmountOnClose = attachPreventUnmountOnClose(eventDetails); 5360 store2.context.onOpenChange?.(nextOpen, eventDetails); 5361 if (eventDetails.isCanceled) { 5362 return; 5363 } 5364 options.onBeforeDispatch?.(); 5365 store2.state.floatingRootContext.dispatchOpenChange(nextOpen, eventDetails); 5366 const changeState = () => { 5367 const updatedState = { 5368 ...options.extraState, 5369 open: nextOpen 5370 }; 5371 if (isFocusOpen) { 5372 updatedState.instantType = "focus"; 5373 } else if (isDismissClose) { 5374 updatedState.instantType = "dismiss"; 5375 } else if (isHover) { 5376 updatedState.instantType = void 0; 5377 } 5378 setPopupOpenState(updatedState, nextOpen, eventDetails.trigger, shouldPreventUnmountOnClose()); 5379 store2.update(updatedState); 5380 }; 5381 if (isHover) { 5382 ReactDOM4.flushSync(changeState); 5383 } else { 5384 changeState(); 5385 } 5386 } 5387 function useInitialOpenSync(store2, openProp, defaultOpen, defaultTriggerId) { 5388 useOnFirstRender(() => { 5389 if (openProp === void 0 && store2.state.open === false && defaultOpen) { 5390 store2.state = { 5391 ...store2.state, 5392 open: true, 5393 activeTriggerId: defaultTriggerId, 5394 preventUnmountingOnClose: false 5395 }; 5396 } 5397 }); 5398 } 5399 function useTriggerDataForwarding(triggerId, triggerElementRef, store2, stateUpdates) { 5400 const isMountedByThisTrigger = store2.useState("isMountedByTrigger", triggerId); 5401 const baseRegisterTrigger = useTriggerRegistration(triggerId, store2); 5402 const registerTrigger = useStableCallback((element) => { 5403 baseRegisterTrigger(element); 5404 if (!element) { 5405 return; 5406 } 5407 const open = store2.select("open"); 5408 const activeTriggerId = store2.select("activeTriggerId"); 5409 if (activeTriggerId === triggerId) { 5410 store2.update({ 5411 activeTriggerElement: element, 5412 ...open ? stateUpdates : null 5413 }); 5414 return; 5415 } 5416 if (activeTriggerId == null && open) { 5417 store2.update({ 5418 activeTriggerId: triggerId, 5419 activeTriggerElement: element, 5420 ...stateUpdates 5421 }); 5422 } 5423 }); 5424 useIsoLayoutEffect(() => { 5425 if (isMountedByThisTrigger) { 5426 store2.update({ 5427 activeTriggerElement: triggerElementRef.current, 5428 ...stateUpdates 5429 }); 5430 } 5431 }, [isMountedByThisTrigger, store2, triggerElementRef, ...Object.values(stateUpdates)]); 5432 return { 5433 registerTrigger, 5434 isMountedByThisTrigger 5435 }; 5436 } 5437 function useImplicitActiveTrigger(store2, options = {}) { 5438 const { 5439 closeOnActiveTriggerUnmount = false 5440 } = options; 5441 const open = store2.useState("open"); 5442 const reactiveTriggerCount = store2.useState("triggerCount"); 5443 useIsoLayoutEffect(() => { 5444 if (!open) { 5445 if (store2.state.triggerCount !== 0) { 5446 store2.set("triggerCount", 0); 5447 } 5448 return; 5449 } 5450 const triggerCount = store2.context.triggerElements.size; 5451 const stateUpdates = {}; 5452 if (store2.state.triggerCount !== triggerCount) { 5453 stateUpdates.triggerCount = triggerCount; 5454 } 5455 const activeTriggerId = store2.select("activeTriggerId"); 5456 let lostActiveTriggerId = null; 5457 if (activeTriggerId) { 5458 const activeTriggerElement = store2.context.triggerElements.getById(activeTriggerId); 5459 if (!activeTriggerElement) { 5460 lostActiveTriggerId = activeTriggerId; 5461 } else if (activeTriggerElement !== store2.state.activeTriggerElement) { 5462 stateUpdates.activeTriggerElement = activeTriggerElement; 5463 } 5464 } 5465 if (!lostActiveTriggerId && !activeTriggerId && triggerCount === 1) { 5466 const iteratorResult = store2.context.triggerElements.entries().next(); 5467 if (!iteratorResult.done) { 5468 const [implicitTriggerId, implicitTriggerElement] = iteratorResult.value; 5469 stateUpdates.activeTriggerId = implicitTriggerId; 5470 stateUpdates.activeTriggerElement = implicitTriggerElement; 5471 } 5472 } 5473 if (stateUpdates.triggerCount !== void 0 || stateUpdates.activeTriggerId !== void 0 || stateUpdates.activeTriggerElement !== void 0) { 5474 store2.update(stateUpdates); 5475 } 5476 if (lostActiveTriggerId) { 5477 if (closeOnActiveTriggerUnmount) { 5478 queueMicrotask(() => { 5479 if (store2.select("open") && store2.select("activeTriggerId") === lostActiveTriggerId && !store2.context.triggerElements.getById(lostActiveTriggerId)) { 5480 const eventDetails = createChangeEventDetails(reason_parts_exports.none); 5481 store2.setOpen(false, eventDetails); 5482 if (!eventDetails.isCanceled) { 5483 store2.update({ 5484 activeTriggerId: null, 5485 activeTriggerElement: null 5486 }); 5487 } 5488 } 5489 }); 5490 } 5491 } 5492 }, [open, store2, reactiveTriggerCount, closeOnActiveTriggerUnmount]); 5493 } 5494 function useOpenStateTransitions(open, store2, onUnmount) { 5495 const { 5496 mounted, 5497 setMounted, 5498 transitionStatus 5499 } = useTransitionStatus(open); 5500 const preventUnmountingOnClose = store2.useState("preventUnmountingOnClose"); 5501 const syncedPreventUnmountingOnClose = open ? false : preventUnmountingOnClose; 5502 store2.useSyncedValues({ 5503 mounted, 5504 transitionStatus, 5505 preventUnmountingOnClose: syncedPreventUnmountingOnClose 5506 }); 5507 const forceUnmount = useStableCallback(() => { 5508 setMounted(false); 5509 store2.update({ 5510 activeTriggerId: null, 5511 activeTriggerElement: null, 5512 mounted: false, 5513 preventUnmountingOnClose: false 5514 }); 5515 onUnmount?.(); 5516 store2.context.onOpenChangeComplete?.(false); 5517 }); 5518 useOpenChangeComplete({ 5519 enabled: mounted && !open && !syncedPreventUnmountingOnClose, 5520 open, 5521 ref: store2.context.popupRef, 5522 onComplete() { 5523 if (!open) { 5524 forceUnmount(); 5525 } 5526 } 5527 }); 5528 return { 5529 forceUnmount, 5530 transitionStatus 5531 }; 5532 } 5533 function usePopupInteractionProps(store2, statePart) { 5534 store2.useSyncedValues(statePart); 5535 useIsoLayoutEffect(() => () => { 5536 store2.update({ 5537 activeTriggerProps: EMPTY_OBJECT, 5538 inactiveTriggerProps: EMPTY_OBJECT, 5539 popupProps: EMPTY_OBJECT 5540 }); 5541 }, [store2]); 5542 } 5543 5544 // node_modules/@base-ui/react/utils/popups/popupTriggerMap.mjs 5545 var PopupTriggerMap = class { 5546 constructor() { 5547 this.elementsSet = /* @__PURE__ */ new Set(); 5548 this.idMap = /* @__PURE__ */ new Map(); 5549 } 5550 /** 5551 * Adds a trigger element with the given ID. 5552 * 5553 * Note: The provided element is assumed to not be registered under multiple IDs. 5554 */ 5555 add(id, element) { 5556 const existingElement = this.idMap.get(id); 5557 if (existingElement === element) { 5558 return; 5559 } 5560 if (existingElement !== void 0) { 5561 this.elementsSet.delete(existingElement); 5562 } 5563 this.elementsSet.add(element); 5564 this.idMap.set(id, element); 5565 if (true) { 5566 if (this.elementsSet.size !== this.idMap.size) { 5567 throw new Error("Base UI: A trigger element cannot be registered under multiple IDs in PopupTriggerMap."); 5568 } 5569 } 5570 } 5571 /** 5572 * Removes the trigger element with the given ID. 5573 */ 5574 delete(id) { 5575 const element = this.idMap.get(id); 5576 if (element) { 5577 this.elementsSet.delete(element); 5578 this.idMap.delete(id); 5579 } 5580 } 5581 /** 5582 * Whether the given element is registered as a trigger. 5583 */ 5584 hasElement(element) { 5585 return this.elementsSet.has(element); 5586 } 5587 /** 5588 * Whether there is a registered trigger element matching the given predicate. 5589 */ 5590 hasMatchingElement(predicate) { 5591 for (const element of this.elementsSet) { 5592 if (predicate(element)) { 5593 return true; 5594 } 5595 } 5596 return false; 5597 } 5598 /** 5599 * Returns the trigger element associated with the given ID, or undefined if no such element exists. 5600 */ 5601 getById(id) { 5602 return this.idMap.get(id); 5603 } 5604 /** 5605 * Returns an iterable of all registered trigger entries, where each entry is a tuple of [id, element]. 5606 */ 5607 entries() { 5608 return this.idMap.entries(); 5609 } 5610 /** 5611 * Returns an iterable of all registered trigger elements. 5612 */ 5613 elements() { 5614 return this.elementsSet.values(); 5615 } 5616 /** 5617 * Returns the number of registered trigger elements. 5618 */ 5619 get size() { 5620 return this.idMap.size; 5621 } 5622 }; 5623 5624 // node_modules/@base-ui/react/floating-ui-react/utils/getEmptyRootContext.mjs 5625 function getEmptyRootContext() { 5626 return new FloatingRootStore({ 5627 open: false, 5628 transitionStatus: void 0, 5629 floatingElement: null, 5630 referenceElement: null, 5631 triggerElements: new PopupTriggerMap(), 5632 floatingId: void 0, 5633 syncOnly: false, 5634 nested: false, 5635 onOpenChange: void 0 5636 }); 5637 } 5638 5639 // node_modules/@base-ui/react/utils/popups/store.mjs 5640 function createInitialPopupStoreState() { 5641 return { 5642 open: false, 5643 openProp: void 0, 5644 mounted: false, 5645 transitionStatus: void 0, 5646 floatingRootContext: getEmptyRootContext(), 5647 floatingId: void 0, 5648 triggerCount: 0, 5649 preventUnmountingOnClose: false, 5650 payload: void 0, 5651 activeTriggerId: null, 5652 activeTriggerElement: null, 5653 triggerIdProp: void 0, 5654 popupElement: null, 5655 positionerElement: null, 5656 activeTriggerProps: EMPTY_OBJECT, 5657 inactiveTriggerProps: EMPTY_OBJECT, 5658 popupProps: EMPTY_OBJECT 5659 }; 5660 } 5661 function createPopupFloatingRootContext(triggerElements, floatingId, nested = false) { 5662 return new FloatingRootStore({ 5663 open: false, 5664 transitionStatus: void 0, 5665 floatingElement: null, 5666 referenceElement: null, 5667 triggerElements, 5668 floatingId, 5669 syncOnly: true, 5670 nested, 5671 onOpenChange: void 0 5672 }); 5673 } 5674 var activeTriggerIdSelector = createSelector((state) => state.triggerIdProp ?? state.activeTriggerId); 5675 var openSelector = createSelector((state) => state.openProp ?? state.open); 5676 var popupIdSelector = createSelector((state) => { 5677 const popupId = state.popupElement?.id ?? state.floatingId; 5678 return popupId || void 0; 5679 }); 5680 function triggerOwnsOpenPopup(state, triggerId) { 5681 return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) === triggerId; 5682 } 5683 function triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) { 5684 if (triggerOwnsOpenPopup(state, triggerId)) { 5685 return true; 5686 } 5687 return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) == null && state.triggerCount === 1; 5688 } 5689 var popupStoreSelectors = { 5690 open: openSelector, 5691 mounted: createSelector((state) => state.mounted), 5692 transitionStatus: createSelector((state) => state.transitionStatus), 5693 floatingRootContext: createSelector((state) => state.floatingRootContext), 5694 triggerCount: createSelector((state) => state.triggerCount), 5695 preventUnmountingOnClose: createSelector((state) => state.preventUnmountingOnClose), 5696 payload: createSelector((state) => state.payload), 5697 activeTriggerId: activeTriggerIdSelector, 5698 activeTriggerElement: createSelector((state) => state.mounted ? state.activeTriggerElement : null), 5699 popupId: popupIdSelector, 5700 /** 5701 * Whether the trigger with the given ID was used to open the popup. 5702 */ 5703 isTriggerActive: createSelector((state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId), 5704 /** 5705 * Whether the popup is open and was activated by a trigger with the given ID. 5706 */ 5707 isOpenedByTrigger: createSelector((state, triggerId) => triggerOwnsOpenPopup(state, triggerId)), 5708 /** 5709 * Whether the popup is mounted and was activated by a trigger with the given ID. 5710 */ 5711 isMountedByTrigger: createSelector((state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId && state.mounted), 5712 triggerProps: createSelector((state, isActive) => isActive ? state.activeTriggerProps : state.inactiveTriggerProps), 5713 /** 5714 * Popup id for the trigger that currently owns the open popup. 5715 */ 5716 triggerPopupId: createSelector((state, triggerId) => triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) ? popupIdSelector(state) : void 0), 5717 popupProps: createSelector((state) => state.popupProps), 5718 popupElement: createSelector((state) => state.popupElement), 5719 positionerElement: createSelector((state) => state.positionerElement) 5720 }; 5721 5722 // node_modules/@base-ui/react/floating-ui-react/hooks/useFloatingRootContext.mjs 5723 function useFloatingRootContext(options) { 5724 const { 5725 open = false, 5726 onOpenChange, 5727 elements = {} 5728 } = options; 5729 const floatingId = useId(); 5730 const nested = useFloatingParentNodeId() != null; 5731 if (true) { 5732 const optionDomReference = elements.reference; 5733 if (optionDomReference && !isElement(optionDomReference)) { 5734 console.error("Cannot pass a virtual element to the `elements.reference` option,", "as it must be a real DOM element. Use `context.setPositionReference()`", "instead."); 5735 } 5736 } 5737 const store2 = useRefWithInit(() => new FloatingRootStore({ 5738 open, 5739 transitionStatus: void 0, 5740 onOpenChange, 5741 referenceElement: elements.reference ?? null, 5742 floatingElement: elements.floating ?? null, 5743 triggerElements: new PopupTriggerMap(), 5744 floatingId, 5745 syncOnly: false, 5746 nested 5747 })).current; 5748 useIsoLayoutEffect(() => { 5749 const valuesToSync = { 5750 open, 5751 floatingId 5752 }; 5753 if (elements.reference !== void 0) { 5754 valuesToSync.referenceElement = elements.reference; 5755 valuesToSync.domReferenceElement = isElement(elements.reference) ? elements.reference : null; 5756 } 5757 if (elements.floating !== void 0) { 5758 valuesToSync.floatingElement = elements.floating; 5759 } 5760 store2.update(valuesToSync); 5761 }, [open, floatingId, elements.reference, elements.floating, store2]); 5762 store2.context.onOpenChange = onOpenChange; 5763 store2.context.nested = nested; 5764 return store2; 5765 } 5766 5767 // node_modules/@base-ui/react/floating-ui-react/hooks/useFloating.mjs 5768 function useFloating2(options = {}) { 5769 const { 5770 nodeId, 5771 externalTree 5772 } = options; 5773 const internalStore = useFloatingRootContext(options); 5774 const store2 = options.rootContext || internalStore; 5775 const referenceElement = store2.useState("referenceElement"); 5776 const floatingElement = store2.useState("floatingElement"); 5777 const domReferenceElement = store2.useState("domReferenceElement"); 5778 const open = store2.useState("open"); 5779 const floatingId = store2.useState("floatingId"); 5780 const [positionReference, setPositionReferenceRaw] = React25.useState(null); 5781 const [localDomReference, setLocalDomReference] = React25.useState(void 0); 5782 const [localFloatingElement, setLocalFloatingElement] = React25.useState(void 0); 5783 const domReferenceRef = React25.useRef(null); 5784 const tree = useFloatingTree(externalTree); 5785 const storeElements = React25.useMemo(() => ({ 5786 reference: referenceElement, 5787 floating: floatingElement, 5788 domReference: domReferenceElement 5789 }), [referenceElement, floatingElement, domReferenceElement]); 5790 const position = useFloating({ 5791 ...options, 5792 elements: { 5793 ...storeElements, 5794 ...positionReference && { 5795 reference: positionReference 5796 } 5797 } 5798 }); 5799 const localDomReferenceElement = isElement(localDomReference) ? localDomReference : null; 5800 const syncedFloatingElement = localFloatingElement === void 0 ? store2.state.floatingElement : localFloatingElement; 5801 store2.useSyncedValue("referenceElement", localDomReference ?? null); 5802 store2.useSyncedValue("domReferenceElement", localDomReference === void 0 ? domReferenceElement : localDomReferenceElement); 5803 store2.useSyncedValue("floatingElement", syncedFloatingElement); 5804 const setPositionReference = React25.useCallback((node) => { 5805 const computedPositionReference = isElement(node) ? { 5806 getBoundingClientRect: () => node.getBoundingClientRect(), 5807 getClientRects: () => node.getClientRects(), 5808 contextElement: node 5809 } : node; 5810 setPositionReferenceRaw(computedPositionReference); 5811 position.refs.setReference(computedPositionReference); 5812 }, [position.refs]); 5813 const setReference = React25.useCallback((node) => { 5814 if (isElement(node) || node === null) { 5815 domReferenceRef.current = node; 5816 setLocalDomReference(node); 5817 } 5818 if (isElement(position.refs.reference.current) || position.refs.reference.current === null || // Don't allow setting virtual elements using the old technique back to 5819 // `null` to support `positionReference` + an unstable `reference` 5820 // callback ref. 5821 node !== null && !isElement(node)) { 5822 position.refs.setReference(node); 5823 } 5824 }, [position.refs, setLocalDomReference]); 5825 const setFloating = React25.useCallback((node) => { 5826 setLocalFloatingElement(node); 5827 position.refs.setFloating(node); 5828 }, [position.refs]); 5829 const refs = React25.useMemo(() => ({ 5830 ...position.refs, 5831 setReference, 5832 setFloating, 5833 setPositionReference, 5834 domReference: domReferenceRef 5835 }), [position.refs, setReference, setFloating, setPositionReference]); 5836 const elements = React25.useMemo(() => ({ 5837 ...position.elements, 5838 domReference: domReferenceElement 5839 }), [position.elements, domReferenceElement]); 5840 const context = React25.useMemo(() => ({ 5841 ...position, 5842 dataRef: store2.context.dataRef, 5843 open, 5844 onOpenChange: store2.setOpen, 5845 events: store2.context.events, 5846 floatingId, 5847 refs, 5848 elements, 5849 nodeId, 5850 rootStore: store2 5851 }), [position, refs, elements, nodeId, store2, open, floatingId]); 5852 useIsoLayoutEffect(() => { 5853 if (domReferenceElement) { 5854 domReferenceRef.current = domReferenceElement; 5855 } 5856 }, [domReferenceElement]); 5857 useIsoLayoutEffect(() => { 5858 store2.context.dataRef.current.floatingContext = context; 5859 const node = tree?.nodesRef.current.find((n) => n.id === nodeId); 5860 if (node) { 5861 node.context = context; 5862 } 5863 }); 5864 return React25.useMemo(() => ({ 5865 ...position, 5866 context, 5867 refs, 5868 elements, 5869 rootStore: store2 5870 }), [position, refs, elements, context, store2]); 5871 } 5872 5873 // node_modules/@base-ui/react/floating-ui-react/hooks/useFocus.mjs 5874 var React26 = __toESM(require_react(), 1); 5875 var isMacSafari = parts_exports.os.mac && parts_exports.engine.webkit; 5876 function useFocus(context, props = {}) { 5877 const { 5878 enabled = true, 5879 delay 5880 } = props; 5881 const store2 = "rootStore" in context ? context.rootStore : context; 5882 const { 5883 events, 5884 dataRef 5885 } = store2.context; 5886 const blockFocusRef = React26.useRef(false); 5887 const blockedReferenceRef = React26.useRef(null); 5888 const keyboardModalityRef = React26.useRef(true); 5889 const timeout = useTimeout(); 5890 React26.useEffect(() => { 5891 const domReference = store2.select("domReferenceElement"); 5892 if (!enabled) { 5893 return void 0; 5894 } 5895 const win = getWindow(domReference); 5896 function onBlur() { 5897 const currentDomReference = store2.select("domReferenceElement"); 5898 if (!store2.select("open") && isHTMLElement(currentDomReference) && currentDomReference === activeElement(ownerDocument(currentDomReference))) { 5899 blockFocusRef.current = true; 5900 } 5901 } 5902 function onKeyDown() { 5903 keyboardModalityRef.current = true; 5904 } 5905 function onPointerDown() { 5906 keyboardModalityRef.current = false; 5907 } 5908 return mergeCleanups(addEventListener(win, "blur", onBlur), isMacSafari && addEventListener(win, "keydown", onKeyDown, true), isMacSafari && addEventListener(win, "pointerdown", onPointerDown, true)); 5909 }, [store2, enabled]); 5910 React26.useEffect(() => { 5911 if (!enabled) { 5912 return void 0; 5913 } 5914 function onOpenChangeLocal(details) { 5915 if (details.reason === reason_parts_exports.triggerPress || details.reason === reason_parts_exports.escapeKey) { 5916 const referenceElement = store2.select("domReferenceElement"); 5917 if (isElement(referenceElement)) { 5918 blockedReferenceRef.current = referenceElement; 5919 blockFocusRef.current = true; 5920 } 5921 } 5922 } 5923 events.on("openchange", onOpenChangeLocal); 5924 return () => { 5925 events.off("openchange", onOpenChangeLocal); 5926 }; 5927 }, [events, enabled, store2]); 5928 const reference = React26.useMemo(() => { 5929 function resetBlockedFocus() { 5930 blockFocusRef.current = false; 5931 blockedReferenceRef.current = null; 5932 } 5933 return { 5934 onMouseLeave() { 5935 resetBlockedFocus(); 5936 }, 5937 onFocus(event) { 5938 const focusTarget = event.currentTarget; 5939 if (blockFocusRef.current) { 5940 if (blockedReferenceRef.current === focusTarget) { 5941 return; 5942 } 5943 resetBlockedFocus(); 5944 } 5945 const target = getTarget(event.nativeEvent); 5946 if (isElement(target)) { 5947 if (isMacSafari && !event.relatedTarget) { 5948 if (!keyboardModalityRef.current && !isTypeableElement(target)) { 5949 return; 5950 } 5951 } else if (!matchesFocusVisible(target)) { 5952 return; 5953 } 5954 } 5955 const movedFromOtherEnabledTrigger = isTargetInsideEnabledTrigger(event.relatedTarget, store2.context.triggerElements); 5956 const { 5957 nativeEvent, 5958 currentTarget 5959 } = event; 5960 const delayValue = typeof delay === "function" ? delay() : delay; 5961 if (store2.select("open") && movedFromOtherEnabledTrigger || delayValue === 0 || delayValue === void 0) { 5962 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget)); 5963 return; 5964 } 5965 timeout.start(delayValue, () => { 5966 if (blockFocusRef.current) { 5967 return; 5968 } 5969 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget)); 5970 }); 5971 }, 5972 onBlur(event) { 5973 resetBlockedFocus(); 5974 const relatedTarget = event.relatedTarget; 5975 const nativeEvent = event.nativeEvent; 5976 const movedToFocusGuard = isElement(relatedTarget) && relatedTarget.hasAttribute(createAttribute("focus-guard")) && relatedTarget.getAttribute("data-type") === "outside"; 5977 timeout.start(0, () => { 5978 const domReference = store2.select("domReferenceElement"); 5979 const activeEl = activeElement(ownerDocument(domReference)); 5980 if (!relatedTarget && activeEl === domReference) { 5981 return; 5982 } 5983 if (contains(dataRef.current.floatingContext?.refs.floating.current, activeEl) || contains(domReference, activeEl) || movedToFocusGuard) { 5984 return; 5985 } 5986 const nextFocusedElement = relatedTarget ?? activeEl; 5987 if (isTargetInsideEnabledTrigger(nextFocusedElement, store2.context.triggerElements)) { 5988 return; 5989 } 5990 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent)); 5991 }); 5992 } 5993 }; 5994 }, [dataRef, delay, store2, timeout]); 5995 return React26.useMemo(() => enabled ? { 5996 reference, 5997 trigger: reference 5998 } : {}, [enabled, reference]); 5999 } 6000 6001 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverFloatingInteraction.mjs 6002 var React27 = __toESM(require_react(), 1); 6003 6004 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverInteractionSharedState.mjs 6005 var HoverInteraction = class _HoverInteraction { 6006 constructor() { 6007 this.pointerType = void 0; 6008 this.interactedInside = false; 6009 this.handler = void 0; 6010 this.blockMouseMove = true; 6011 this.performedPointerEventsMutation = false; 6012 this.pointerEventsScopeElement = null; 6013 this.pointerEventsReferenceElement = null; 6014 this.pointerEventsFloatingElement = null; 6015 this.restTimeoutPending = false; 6016 this.openChangeTimeout = new Timeout(); 6017 this.restTimeout = new Timeout(); 6018 this.handleCloseOptions = void 0; 6019 } 6020 static create() { 6021 return new _HoverInteraction(); 6022 } 6023 dispose = () => { 6024 this.openChangeTimeout.clear(); 6025 this.restTimeout.clear(); 6026 }; 6027 disposeEffect = () => { 6028 return this.dispose; 6029 }; 6030 }; 6031 var pointerEventsMutationOwnerByScopeElement = /* @__PURE__ */ new WeakMap(); 6032 function clearSafePolygonPointerEventsMutation(instance) { 6033 if (!instance.performedPointerEventsMutation) { 6034 return; 6035 } 6036 const scopeElement = instance.pointerEventsScopeElement; 6037 if (scopeElement && pointerEventsMutationOwnerByScopeElement.get(scopeElement) === instance) { 6038 instance.pointerEventsScopeElement?.style.removeProperty("pointer-events"); 6039 instance.pointerEventsReferenceElement?.style.removeProperty("pointer-events"); 6040 instance.pointerEventsFloatingElement?.style.removeProperty("pointer-events"); 6041 pointerEventsMutationOwnerByScopeElement.delete(scopeElement); 6042 } 6043 instance.performedPointerEventsMutation = false; 6044 instance.pointerEventsScopeElement = null; 6045 instance.pointerEventsReferenceElement = null; 6046 instance.pointerEventsFloatingElement = null; 6047 } 6048 function applySafePolygonPointerEventsMutation(instance, options) { 6049 const { 6050 scopeElement, 6051 referenceElement, 6052 floatingElement 6053 } = options; 6054 const existingOwner = pointerEventsMutationOwnerByScopeElement.get(scopeElement); 6055 if (existingOwner && existingOwner !== instance) { 6056 clearSafePolygonPointerEventsMutation(existingOwner); 6057 } 6058 clearSafePolygonPointerEventsMutation(instance); 6059 instance.performedPointerEventsMutation = true; 6060 instance.pointerEventsScopeElement = scopeElement; 6061 instance.pointerEventsReferenceElement = referenceElement; 6062 instance.pointerEventsFloatingElement = floatingElement; 6063 pointerEventsMutationOwnerByScopeElement.set(scopeElement, instance); 6064 scopeElement.style.pointerEvents = "none"; 6065 referenceElement.style.pointerEvents = "auto"; 6066 floatingElement.style.pointerEvents = "auto"; 6067 } 6068 function useHoverInteractionSharedState(store2) { 6069 const data = store2.context.dataRef.current; 6070 const instance = useRefWithInit(() => data.hoverInteractionState ?? HoverInteraction.create()).current; 6071 if (!data.hoverInteractionState) { 6072 data.hoverInteractionState = instance; 6073 } 6074 useOnMount(data.hoverInteractionState.disposeEffect); 6075 return data.hoverInteractionState; 6076 } 6077 6078 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverFloatingInteraction.mjs 6079 function useHoverFloatingInteraction(context, parameters = {}) { 6080 const { 6081 enabled = true, 6082 closeDelay: closeDelayProp = 0, 6083 nodeId: nodeIdProp 6084 } = parameters; 6085 const store2 = "rootStore" in context ? context.rootStore : context; 6086 const open = store2.useState("open"); 6087 const floatingElement = store2.useState("floatingElement"); 6088 const domReferenceElement = store2.useState("domReferenceElement"); 6089 const { 6090 dataRef 6091 } = store2.context; 6092 const tree = useFloatingTree(); 6093 const parentId = useFloatingParentNodeId(); 6094 const instance = useHoverInteractionSharedState(store2); 6095 const childClosedTimeout = useTimeout(); 6096 const isClickLikeOpenEvent2 = useStableCallback(() => { 6097 return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside); 6098 }); 6099 const isHoverOpen = useStableCallback(() => { 6100 return isHoverOpenEvent(dataRef.current.openEvent?.type); 6101 }); 6102 const clearPointerEvents = useStableCallback(() => { 6103 clearSafePolygonPointerEventsMutation(instance); 6104 }); 6105 useIsoLayoutEffect(() => { 6106 if (!open) { 6107 instance.pointerType = void 0; 6108 instance.restTimeoutPending = false; 6109 instance.interactedInside = false; 6110 clearPointerEvents(); 6111 } 6112 }, [open, instance, clearPointerEvents]); 6113 React27.useEffect(() => { 6114 return clearPointerEvents; 6115 }, [clearPointerEvents]); 6116 useIsoLayoutEffect(() => { 6117 if (!enabled) { 6118 return void 0; 6119 } 6120 if (open && instance.handleCloseOptions?.blockPointerEvents && isHoverOpen() && isElement(domReferenceElement) && floatingElement) { 6121 const ref = domReferenceElement; 6122 const floatingEl = floatingElement; 6123 const doc = ownerDocument(floatingElement); 6124 const parentFloating = tree?.nodesRef.current.find((node) => node.id === parentId)?.context?.elements.floating; 6125 if (parentFloating) { 6126 parentFloating.style.pointerEvents = ""; 6127 } 6128 const cachedScopeElement = instance.pointerEventsScopeElement !== floatingEl ? instance.pointerEventsScopeElement : null; 6129 const parentScopeElement = parentFloating !== floatingEl ? parentFloating : null; 6130 const scopeElement = instance.handleCloseOptions?.getScope?.() ?? cachedScopeElement ?? parentScopeElement ?? ref.closest("[data-rootownerid]") ?? doc.body; 6131 applySafePolygonPointerEventsMutation(instance, { 6132 scopeElement, 6133 referenceElement: ref, 6134 floatingElement: floatingEl 6135 }); 6136 return () => { 6137 clearPointerEvents(); 6138 }; 6139 } 6140 return void 0; 6141 }, [enabled, open, domReferenceElement, floatingElement, instance, isHoverOpen, tree, parentId, clearPointerEvents]); 6142 React27.useEffect(() => { 6143 if (!enabled) { 6144 return void 0; 6145 } 6146 function hasParentChildren() { 6147 return !!(tree && parentId && getNodeChildren(tree.nodesRef.current, parentId).length > 0); 6148 } 6149 function closeWithDelay(event) { 6150 const closeDelay = getDelay(closeDelayProp, "close", instance.pointerType); 6151 const close = () => { 6152 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 6153 tree?.events.emit("floating.closed", event); 6154 }; 6155 if (closeDelay) { 6156 instance.openChangeTimeout.start(closeDelay, close); 6157 } else { 6158 instance.openChangeTimeout.clear(); 6159 close(); 6160 } 6161 } 6162 function handleInteractInside(event) { 6163 const target = getTarget(event); 6164 if (!isInteractiveElement(target)) { 6165 instance.interactedInside = false; 6166 return; 6167 } 6168 instance.interactedInside = target?.closest("[aria-haspopup]") != null; 6169 } 6170 function onFloatingMouseEnter() { 6171 instance.openChangeTimeout.clear(); 6172 childClosedTimeout.clear(); 6173 tree?.events.off("floating.closed", onNodeClosed); 6174 clearPointerEvents(); 6175 } 6176 function onFloatingMouseLeave(event) { 6177 if (hasParentChildren() && tree) { 6178 tree.events.on("floating.closed", onNodeClosed); 6179 return; 6180 } 6181 if (isTargetInsideEnabledTrigger(event.relatedTarget, store2.context.triggerElements)) { 6182 return; 6183 } 6184 const currentNodeId = dataRef.current.floatingContext?.nodeId ?? nodeIdProp; 6185 const relatedTarget = event.relatedTarget; 6186 const isMovingIntoDescendantFloating = tree && currentNodeId && isElement(relatedTarget) && getNodeChildren(tree.nodesRef.current, currentNodeId, false).some((node) => contains(node.context?.elements.floating, relatedTarget)); 6187 if (isMovingIntoDescendantFloating) { 6188 return; 6189 } 6190 if (instance.handler) { 6191 instance.handler(event); 6192 return; 6193 } 6194 clearPointerEvents(); 6195 if (isHoverOpen() && !isClickLikeOpenEvent2()) { 6196 closeWithDelay(event); 6197 } 6198 } 6199 function onNodeClosed(event) { 6200 if (!tree || !parentId || hasParentChildren()) { 6201 return; 6202 } 6203 childClosedTimeout.start(0, () => { 6204 tree.events.off("floating.closed", onNodeClosed); 6205 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 6206 tree.events.emit("floating.closed", event); 6207 }); 6208 } 6209 const floating = floatingElement; 6210 return mergeCleanups(floating && addEventListener(floating, "mouseenter", onFloatingMouseEnter), floating && addEventListener(floating, "mouseleave", onFloatingMouseLeave), floating && addEventListener(floating, "pointerdown", handleInteractInside, true), () => { 6211 tree?.events.off("floating.closed", onNodeClosed); 6212 }); 6213 }, [enabled, floatingElement, store2, dataRef, closeDelayProp, nodeIdProp, isHoverOpen, isClickLikeOpenEvent2, clearPointerEvents, instance, tree, parentId, childClosedTimeout]); 6214 } 6215 6216 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverReferenceInteraction.mjs 6217 var React28 = __toESM(require_react(), 1); 6218 var ReactDOM5 = __toESM(require_react_dom(), 1); 6219 var EMPTY_REF = { 6220 current: null 6221 }; 6222 function useHoverReferenceInteraction(context, props = {}) { 6223 const { 6224 enabled = true, 6225 delay = 0, 6226 handleClose = null, 6227 mouseOnly = false, 6228 restMs = 0, 6229 move = true, 6230 triggerElementRef = EMPTY_REF, 6231 externalTree, 6232 isActiveTrigger = true, 6233 getHandleCloseContext, 6234 isClosing, 6235 shouldOpen: shouldOpenProp 6236 } = props; 6237 const store2 = "rootStore" in context ? context.rootStore : context; 6238 const { 6239 dataRef, 6240 events 6241 } = store2.context; 6242 const tree = useFloatingTree(externalTree); 6243 const instance = useHoverInteractionSharedState(store2); 6244 const isHoverCloseActiveRef = React28.useRef(false); 6245 const handleCloseRef = useValueAsRef(handleClose); 6246 const delayRef = useValueAsRef(delay); 6247 const restMsRef = useValueAsRef(restMs); 6248 const enabledRef = useValueAsRef(enabled); 6249 const shouldOpenRef = useValueAsRef(shouldOpenProp); 6250 const isClosingRef = useValueAsRef(isClosing); 6251 const isClickLikeOpenEvent2 = useStableCallback(() => { 6252 return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside); 6253 }); 6254 const checkShouldOpen = useStableCallback(() => { 6255 return shouldOpenRef.current?.() !== false; 6256 }); 6257 const isOverInactiveTrigger = useStableCallback((currentDomReference, currentTarget, target) => { 6258 const allTriggers = store2.context.triggerElements; 6259 if (allTriggers.hasElement(currentTarget)) { 6260 return !currentDomReference || !contains(currentDomReference, currentTarget); 6261 } 6262 if (!isElement(target)) { 6263 return false; 6264 } 6265 const targetElement = target; 6266 return allTriggers.hasMatchingElement((trigger) => contains(trigger, targetElement)) && (!currentDomReference || !contains(currentDomReference, targetElement)); 6267 }); 6268 const cleanupMouseMoveHandler = useStableCallback(() => { 6269 if (!instance.handler) { 6270 return; 6271 } 6272 const doc = ownerDocument(store2.select("domReferenceElement")); 6273 doc.removeEventListener("mousemove", instance.handler); 6274 instance.handler = void 0; 6275 }); 6276 const clearPointerEvents = useStableCallback(() => { 6277 clearSafePolygonPointerEventsMutation(instance); 6278 }); 6279 if (isActiveTrigger) { 6280 instance.handleCloseOptions = handleCloseRef.current?.__options; 6281 } 6282 React28.useEffect(() => cleanupMouseMoveHandler, [cleanupMouseMoveHandler]); 6283 React28.useEffect(() => { 6284 if (!enabled) { 6285 return void 0; 6286 } 6287 function onOpenChangeLocal(details) { 6288 if (!details.open) { 6289 isHoverCloseActiveRef.current = details.reason === reason_parts_exports.triggerHover; 6290 cleanupMouseMoveHandler(); 6291 instance.openChangeTimeout.clear(); 6292 instance.restTimeout.clear(); 6293 instance.blockMouseMove = true; 6294 instance.restTimeoutPending = false; 6295 } else { 6296 isHoverCloseActiveRef.current = false; 6297 } 6298 } 6299 events.on("openchange", onOpenChangeLocal); 6300 return () => { 6301 events.off("openchange", onOpenChangeLocal); 6302 }; 6303 }, [enabled, events, instance, cleanupMouseMoveHandler]); 6304 React28.useEffect(() => { 6305 if (!enabled) { 6306 return void 0; 6307 } 6308 function closeWithDelay(event, runElseBranch = true) { 6309 const closeDelay = getDelay(delayRef.current, "close", instance.pointerType); 6310 if (closeDelay) { 6311 instance.openChangeTimeout.start(closeDelay, () => { 6312 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 6313 tree?.events.emit("floating.closed", event); 6314 }); 6315 } else if (runElseBranch) { 6316 instance.openChangeTimeout.clear(); 6317 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 6318 tree?.events.emit("floating.closed", event); 6319 } 6320 } 6321 const trigger = triggerElementRef.current ?? (isActiveTrigger ? store2.select("domReferenceElement") : null); 6322 if (!isElement(trigger)) { 6323 return void 0; 6324 } 6325 function onMouseEnter(event) { 6326 instance.openChangeTimeout.clear(); 6327 instance.blockMouseMove = false; 6328 if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) { 6329 return; 6330 } 6331 const restMsValue = getRestMs(restMsRef.current); 6332 const openDelay = getDelay(delayRef.current, "open", instance.pointerType); 6333 const eventTarget = getTarget(event); 6334 const currentTarget = event.currentTarget ?? null; 6335 const currentDomReference = store2.select("domReferenceElement"); 6336 let triggerNode = currentTarget; 6337 if (isElement(eventTarget) && !store2.context.triggerElements.hasElement(eventTarget)) { 6338 for (const triggerElement of store2.context.triggerElements.elements()) { 6339 if (contains(triggerElement, eventTarget)) { 6340 triggerNode = triggerElement; 6341 break; 6342 } 6343 } 6344 } 6345 if (isElement(currentTarget) && isElement(currentDomReference) && !store2.context.triggerElements.hasElement(currentTarget) && contains(currentTarget, currentDomReference)) { 6346 triggerNode = currentDomReference; 6347 } 6348 const isOverInactive = triggerNode == null ? false : isOverInactiveTrigger(currentDomReference, triggerNode, eventTarget); 6349 const isOpen = store2.select("open"); 6350 const isInClosingTransition = isClosingRef.current?.() ?? store2.select("transitionStatus") === "ending"; 6351 const isHoverCloseTransition = !isOpen && isInClosingTransition && isHoverCloseActiveRef.current; 6352 const isReenteringSameTriggerDuringCloseTransition = !isOverInactive && isElement(triggerNode) && isElement(currentDomReference) && contains(currentDomReference, triggerNode) && isHoverCloseTransition; 6353 const isRestOnlyDelay = restMsValue > 0 && !openDelay; 6354 const shouldOpenImmediately = isOverInactive && (isOpen || isHoverCloseTransition) || isReenteringSameTriggerDuringCloseTransition; 6355 const shouldOpen = !isOpen || isOverInactive; 6356 if (shouldOpenImmediately) { 6357 if (checkShouldOpen()) { 6358 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode)); 6359 } 6360 return; 6361 } 6362 if (isRestOnlyDelay) { 6363 return; 6364 } 6365 if (openDelay) { 6366 instance.openChangeTimeout.start(openDelay, () => { 6367 if (shouldOpen && checkShouldOpen()) { 6368 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode)); 6369 } 6370 }); 6371 } else if (shouldOpen) { 6372 if (checkShouldOpen()) { 6373 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode)); 6374 } 6375 } 6376 } 6377 function onMouseLeave(event) { 6378 if (isClickLikeOpenEvent2()) { 6379 clearPointerEvents(); 6380 return; 6381 } 6382 cleanupMouseMoveHandler(); 6383 const domReferenceElement = store2.select("domReferenceElement"); 6384 const doc = ownerDocument(domReferenceElement); 6385 instance.restTimeout.clear(); 6386 instance.restTimeoutPending = false; 6387 const handleCloseContextBase = dataRef.current.floatingContext ?? getHandleCloseContext?.(); 6388 if (isTargetInsideEnabledTrigger(event.relatedTarget, store2.context.triggerElements)) { 6389 return; 6390 } 6391 if (handleCloseRef.current && handleCloseContextBase) { 6392 if (!store2.select("open")) { 6393 instance.openChangeTimeout.clear(); 6394 } 6395 const currentTrigger = triggerElementRef.current; 6396 instance.handler = handleCloseRef.current({ 6397 ...handleCloseContextBase, 6398 tree, 6399 x: event.clientX, 6400 y: event.clientY, 6401 onClose() { 6402 clearPointerEvents(); 6403 cleanupMouseMoveHandler(); 6404 if (enabledRef.current && !isClickLikeOpenEvent2() && currentTrigger === store2.select("domReferenceElement")) { 6405 closeWithDelay(event, true); 6406 } 6407 } 6408 }); 6409 doc.addEventListener("mousemove", instance.handler); 6410 instance.handler(event); 6411 return; 6412 } 6413 const shouldClose = instance.pointerType === "touch" ? !contains(store2.select("floatingElement"), event.relatedTarget) : true; 6414 if (shouldClose) { 6415 closeWithDelay(event); 6416 } 6417 } 6418 if (move) { 6419 return mergeCleanups(addEventListener(trigger, "mousemove", onMouseEnter, { 6420 once: true 6421 }), addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave)); 6422 } 6423 return mergeCleanups(addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave)); 6424 }, [cleanupMouseMoveHandler, clearPointerEvents, dataRef, delayRef, store2, enabled, handleCloseRef, instance, isActiveTrigger, isOverInactiveTrigger, isClickLikeOpenEvent2, mouseOnly, move, restMsRef, triggerElementRef, tree, enabledRef, getHandleCloseContext, isClosingRef, checkShouldOpen]); 6425 return React28.useMemo(() => { 6426 if (!enabled) { 6427 return void 0; 6428 } 6429 function setPointerRef(event) { 6430 instance.pointerType = event.pointerType; 6431 } 6432 return { 6433 onPointerDown: setPointerRef, 6434 onPointerEnter: setPointerRef, 6435 onMouseMove(event) { 6436 const { 6437 nativeEvent 6438 } = event; 6439 const trigger = event.currentTarget; 6440 const currentDomReference = store2.select("domReferenceElement"); 6441 const currentOpen = store2.select("open"); 6442 const isOverInactive = isOverInactiveTrigger(currentDomReference, trigger, event.target); 6443 if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) { 6444 return; 6445 } 6446 if (currentOpen && isOverInactive && instance.handleCloseOptions?.blockPointerEvents) { 6447 const floatingElement = store2.select("floatingElement"); 6448 if (floatingElement) { 6449 const scopeElement = instance.handleCloseOptions?.getScope?.() ?? trigger.ownerDocument.body; 6450 applySafePolygonPointerEventsMutation(instance, { 6451 scopeElement, 6452 referenceElement: trigger, 6453 floatingElement 6454 }); 6455 } 6456 } 6457 const restMsValue = getRestMs(restMsRef.current); 6458 if (currentOpen && !isOverInactive || restMsValue === 0) { 6459 return; 6460 } 6461 if (!isOverInactive && instance.restTimeoutPending && event.movementX ** 2 + event.movementY ** 2 < 2) { 6462 return; 6463 } 6464 instance.restTimeout.clear(); 6465 function handleMouseMove() { 6466 instance.restTimeoutPending = false; 6467 if (isClickLikeOpenEvent2()) { 6468 return; 6469 } 6470 const latestOpen = store2.select("open"); 6471 if (!instance.blockMouseMove && (!latestOpen || isOverInactive) && checkShouldOpen()) { 6472 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, nativeEvent, trigger)); 6473 } 6474 } 6475 if (instance.pointerType === "touch") { 6476 ReactDOM5.flushSync(() => { 6477 handleMouseMove(); 6478 }); 6479 } else if (isOverInactive && currentOpen) { 6480 handleMouseMove(); 6481 } else { 6482 instance.restTimeoutPending = true; 6483 instance.restTimeout.start(restMsValue, handleMouseMove); 6484 } 6485 } 6486 }; 6487 }, [enabled, instance, isClickLikeOpenEvent2, isOverInactiveTrigger, mouseOnly, store2, restMsRef, checkShouldOpen]); 6488 } 6489 6490 // node_modules/@base-ui/react/floating-ui-react/safePolygon.mjs 6491 var CURSOR_SPEED_THRESHOLD = 0.1; 6492 var CURSOR_SPEED_THRESHOLD_SQUARED = CURSOR_SPEED_THRESHOLD * CURSOR_SPEED_THRESHOLD; 6493 var POLYGON_BUFFER = 0.5; 6494 function hasIntersectingEdge(pointX, pointY, xi, yi, xj, yj) { 6495 return yi >= pointY !== yj >= pointY && pointX <= (xj - xi) * (pointY - yi) / (yj - yi) + xi; 6496 } 6497 function isPointInQuadrilateral(pointX, pointY, x1, y1, x2, y2, x3, y3, x4, y4) { 6498 let isInsideValue = false; 6499 if (hasIntersectingEdge(pointX, pointY, x1, y1, x2, y2)) { 6500 isInsideValue = !isInsideValue; 6501 } 6502 if (hasIntersectingEdge(pointX, pointY, x2, y2, x3, y3)) { 6503 isInsideValue = !isInsideValue; 6504 } 6505 if (hasIntersectingEdge(pointX, pointY, x3, y3, x4, y4)) { 6506 isInsideValue = !isInsideValue; 6507 } 6508 if (hasIntersectingEdge(pointX, pointY, x4, y4, x1, y1)) { 6509 isInsideValue = !isInsideValue; 6510 } 6511 return isInsideValue; 6512 } 6513 function isInsideRect(pointX, pointY, rect) { 6514 return pointX >= rect.x && pointX <= rect.x + rect.width && pointY >= rect.y && pointY <= rect.y + rect.height; 6515 } 6516 function isInsideAxisAlignedRect(pointX, pointY, x1, y1, x2, y2) { 6517 const minX = Math.min(x1, x2); 6518 const maxX = Math.max(x1, x2); 6519 const minY = Math.min(y1, y2); 6520 const maxY = Math.max(y1, y2); 6521 return pointX >= minX && pointX <= maxX && pointY >= minY && pointY <= maxY; 6522 } 6523 function safePolygon(options = {}) { 6524 const { 6525 blockPointerEvents = false 6526 } = options; 6527 const timeout = new Timeout(); 6528 const fn = ({ 6529 x, 6530 y, 6531 placement, 6532 elements, 6533 onClose, 6534 nodeId, 6535 tree 6536 }) => { 6537 const side = placement?.split("-")[0]; 6538 let hasLanded = false; 6539 let lastX = null; 6540 let lastY = null; 6541 let lastCursorTime = typeof performance !== "undefined" ? performance.now() : 0; 6542 function isCursorMovingSlowly(nextX, nextY) { 6543 const currentTime = performance.now(); 6544 const elapsedTime = currentTime - lastCursorTime; 6545 if (lastX === null || lastY === null || elapsedTime === 0) { 6546 lastX = nextX; 6547 lastY = nextY; 6548 lastCursorTime = currentTime; 6549 return false; 6550 } 6551 const deltaX = nextX - lastX; 6552 const deltaY = nextY - lastY; 6553 const distanceSquared = deltaX * deltaX + deltaY * deltaY; 6554 const thresholdSquared = elapsedTime * elapsedTime * CURSOR_SPEED_THRESHOLD_SQUARED; 6555 lastX = nextX; 6556 lastY = nextY; 6557 lastCursorTime = currentTime; 6558 return distanceSquared < thresholdSquared; 6559 } 6560 function close() { 6561 timeout.clear(); 6562 onClose(); 6563 } 6564 return function onMouseMove(event) { 6565 timeout.clear(); 6566 const domReference = elements.domReference; 6567 const floating = elements.floating; 6568 if (!domReference || !floating || side == null || x == null || y == null) { 6569 return void 0; 6570 } 6571 const { 6572 clientX, 6573 clientY 6574 } = event; 6575 const target = getTarget(event); 6576 const isLeave = event.type === "mouseleave"; 6577 const isOverFloatingEl = contains(floating, target); 6578 const isOverReferenceEl = contains(domReference, target); 6579 if (isOverFloatingEl) { 6580 hasLanded = true; 6581 if (!isLeave) { 6582 return void 0; 6583 } 6584 } 6585 if (isOverReferenceEl) { 6586 hasLanded = false; 6587 if (!isLeave) { 6588 hasLanded = true; 6589 return void 0; 6590 } 6591 } 6592 if (isLeave && isElement(event.relatedTarget) && contains(floating, event.relatedTarget)) { 6593 return void 0; 6594 } 6595 function hasOpenChildNode() { 6596 return Boolean(tree && getNodeChildren(tree.nodesRef.current, nodeId).length > 0); 6597 } 6598 function closeIfNoOpenChild() { 6599 if (!hasOpenChildNode()) { 6600 close(); 6601 } 6602 } 6603 if (hasOpenChildNode()) { 6604 return void 0; 6605 } 6606 const refRect = domReference.getBoundingClientRect(); 6607 const rect = floating.getBoundingClientRect(); 6608 const cursorLeaveFromRight = x > rect.right - rect.width / 2; 6609 const cursorLeaveFromBottom = y > rect.bottom - rect.height / 2; 6610 const isFloatingWider = rect.width > refRect.width; 6611 const isFloatingTaller = rect.height > refRect.height; 6612 const left = (isFloatingWider ? refRect : rect).left; 6613 const right = (isFloatingWider ? refRect : rect).right; 6614 const top = (isFloatingTaller ? refRect : rect).top; 6615 const bottom = (isFloatingTaller ? refRect : rect).bottom; 6616 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) { 6617 closeIfNoOpenChild(); 6618 return void 0; 6619 } 6620 let isInsideTroughRect = false; 6621 switch (side) { 6622 case "top": 6623 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, refRect.top + 1, right, rect.bottom - 1); 6624 break; 6625 case "bottom": 6626 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, rect.top + 1, right, refRect.bottom - 1); 6627 break; 6628 case "left": 6629 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, rect.right - 1, bottom, refRect.left + 1, top); 6630 break; 6631 case "right": 6632 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, refRect.right - 1, bottom, rect.left + 1, top); 6633 break; 6634 default: 6635 } 6636 if (isInsideTroughRect) { 6637 return void 0; 6638 } 6639 if (hasLanded && !isInsideRect(clientX, clientY, refRect)) { 6640 closeIfNoOpenChild(); 6641 return void 0; 6642 } 6643 if (!isLeave && isCursorMovingSlowly(clientX, clientY)) { 6644 closeIfNoOpenChild(); 6645 return void 0; 6646 } 6647 let isInsidePolygon = false; 6648 switch (side) { 6649 case "top": { 6650 const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; 6651 const cursorPointOneX = isFloatingWider ? x + cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset; 6652 const cursorPointTwoX = isFloatingWider ? x - cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset; 6653 const cursorPointY = y + POLYGON_BUFFER + 1; 6654 const commonYLeft = cursorLeaveFromRight ? rect.bottom - POLYGON_BUFFER : isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top; 6655 const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top : rect.bottom - POLYGON_BUFFER; 6656 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight); 6657 break; 6658 } 6659 case "bottom": { 6660 const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; 6661 const cursorPointOneX = isFloatingWider ? x + cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset; 6662 const cursorPointTwoX = isFloatingWider ? x - cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset; 6663 const cursorPointY = y - POLYGON_BUFFER; 6664 const commonYLeft = cursorLeaveFromRight ? rect.top + POLYGON_BUFFER : isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom; 6665 const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom : rect.top + POLYGON_BUFFER; 6666 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight); 6667 break; 6668 } 6669 case "left": { 6670 const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; 6671 const cursorPointOneY = isFloatingTaller ? y + cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset; 6672 const cursorPointTwoY = isFloatingTaller ? y - cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset; 6673 const cursorPointX = x + POLYGON_BUFFER + 1; 6674 const commonXTop = cursorLeaveFromBottom ? rect.right - POLYGON_BUFFER : isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left; 6675 const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left : rect.right - POLYGON_BUFFER; 6676 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, commonXTop, rect.top, commonXBottom, rect.bottom, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY); 6677 break; 6678 } 6679 case "right": { 6680 const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; 6681 const cursorPointOneY = isFloatingTaller ? y + cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset; 6682 const cursorPointTwoY = isFloatingTaller ? y - cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset; 6683 const cursorPointX = x - POLYGON_BUFFER; 6684 const commonXTop = cursorLeaveFromBottom ? rect.left + POLYGON_BUFFER : isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right; 6685 const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right : rect.left + POLYGON_BUFFER; 6686 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY, commonXTop, rect.top, commonXBottom, rect.bottom); 6687 break; 6688 } 6689 default: 6690 } 6691 if (!isInsidePolygon) { 6692 closeIfNoOpenChild(); 6693 } else if (!hasLanded) { 6694 timeout.start(40, closeIfNoOpenChild); 6695 } 6696 return void 0; 6697 }; 6698 }; 6699 fn.__options = { 6700 ...options, 6701 blockPointerEvents 6702 }; 6703 return fn; 6704 } 6705 6706 // node_modules/@base-ui/react/utils/popupStateMapping.mjs 6707 var CommonPopupDataAttributes = (function(CommonPopupDataAttributes2) { 6708 CommonPopupDataAttributes2["open"] = "data-open"; 6709 CommonPopupDataAttributes2["closed"] = "data-closed"; 6710 CommonPopupDataAttributes2[CommonPopupDataAttributes2["startingStyle"] = TransitionStatusDataAttributes.startingStyle] = "startingStyle"; 6711 CommonPopupDataAttributes2[CommonPopupDataAttributes2["endingStyle"] = TransitionStatusDataAttributes.endingStyle] = "endingStyle"; 6712 CommonPopupDataAttributes2["anchorHidden"] = "data-anchor-hidden"; 6713 CommonPopupDataAttributes2["side"] = "data-side"; 6714 CommonPopupDataAttributes2["align"] = "data-align"; 6715 return CommonPopupDataAttributes2; 6716 })({}); 6717 var CommonTriggerDataAttributes = /* @__PURE__ */ (function(CommonTriggerDataAttributes2) { 6718 CommonTriggerDataAttributes2["popupOpen"] = "data-popup-open"; 6719 CommonTriggerDataAttributes2["pressed"] = "data-pressed"; 6720 return CommonTriggerDataAttributes2; 6721 })({}); 6722 var TRIGGER_HOOK = { 6723 [CommonTriggerDataAttributes.popupOpen]: "" 6724 }; 6725 var PRESSABLE_TRIGGER_HOOK = { 6726 [CommonTriggerDataAttributes.popupOpen]: "", 6727 [CommonTriggerDataAttributes.pressed]: "" 6728 }; 6729 var POPUP_OPEN_HOOK = { 6730 [CommonPopupDataAttributes.open]: "" 6731 }; 6732 var POPUP_CLOSED_HOOK = { 6733 [CommonPopupDataAttributes.closed]: "" 6734 }; 6735 var ANCHOR_HIDDEN_HOOK = { 6736 [CommonPopupDataAttributes.anchorHidden]: "" 6737 }; 6738 var triggerOpenStateMapping = { 6739 open(value) { 6740 if (value) { 6741 return TRIGGER_HOOK; 6742 } 6743 return null; 6744 } 6745 }; 6746 var popupStateMapping = { 6747 open(value) { 6748 if (value) { 6749 return POPUP_OPEN_HOOK; 6750 } 6751 return POPUP_CLOSED_HOOK; 6752 }, 6753 anchorHidden(value) { 6754 if (value) { 6755 return ANCHOR_HIDDEN_HOOK; 6756 } 6757 return null; 6758 } 6759 }; 6760 6761 // node_modules/@base-ui/utils/inertValue.mjs 6762 function inertValue(value) { 6763 if (isReactVersionAtLeast(19)) { 6764 return value; 6765 } 6766 return value ? "true" : void 0; 6767 } 6768 6769 // node_modules/@base-ui/react/utils/useAnchorPositioning.mjs 6770 var React29 = __toESM(require_react(), 1); 6771 6772 // node_modules/@base-ui/react/floating-ui-react/middleware/arrow.mjs 6773 var baseArrow = (options) => ({ 6774 name: "arrow", 6775 options, 6776 async fn(state) { 6777 const { 6778 x, 6779 y, 6780 placement, 6781 rects, 6782 platform: platform3, 6783 elements, 6784 middlewareData 6785 } = state; 6786 const { 6787 element, 6788 padding = 0, 6789 offsetParent = "real" 6790 } = evaluate(options, state) || {}; 6791 if (element == null) { 6792 return {}; 6793 } 6794 const paddingObject = getPaddingObject(padding); 6795 const coords = { 6796 x, 6797 y 6798 }; 6799 const axis = getAlignmentAxis(placement); 6800 const length = getAxisLength(axis); 6801 const arrowDimensions = await platform3.getDimensions(element); 6802 const isYAxis = axis === "y"; 6803 const minProp = isYAxis ? "top" : "left"; 6804 const maxProp = isYAxis ? "bottom" : "right"; 6805 const clientProp = isYAxis ? "clientHeight" : "clientWidth"; 6806 const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length]; 6807 const startDiff = coords[axis] - rects.reference[axis]; 6808 const arrowOffsetParent = offsetParent === "real" ? await platform3.getOffsetParent?.(element) : elements.floating; 6809 let clientSize = elements.floating[clientProp] || rects.floating[length]; 6810 if (!clientSize || !await platform3.isElement?.(arrowOffsetParent)) { 6811 clientSize = elements.floating[clientProp] || rects.floating[length]; 6812 } 6813 const centerToReference = endDiff / 2 - startDiff / 2; 6814 const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1; 6815 const minPadding = Math.min(paddingObject[minProp], largestPossiblePadding); 6816 const maxPadding = Math.min(paddingObject[maxProp], largestPossiblePadding); 6817 const min2 = minPadding; 6818 const max2 = clientSize - arrowDimensions[length] - maxPadding; 6819 const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference; 6820 const offset4 = clamp(min2, center, max2); 6821 const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset4 && rects.reference[length] / 2 - (center < min2 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0; 6822 const alignmentOffset = shouldAddOffset ? center < min2 ? center - min2 : center - max2 : 0; 6823 return { 6824 [axis]: coords[axis] + alignmentOffset, 6825 data: { 6826 [axis]: offset4, 6827 centerOffset: center - offset4 - alignmentOffset, 6828 ...shouldAddOffset && { 6829 alignmentOffset 6830 } 6831 }, 6832 reset: shouldAddOffset 6833 }; 6834 } 6835 }); 6836 var arrow4 = (options, deps) => ({ 6837 ...baseArrow(options), 6838 options: [options, deps] 6839 }); 6840 6841 // node_modules/@base-ui/react/utils/hideMiddleware.mjs 6842 var nativeHideFn = hide3().fn; 6843 var hide4 = { 6844 name: "hide", 6845 async fn(state) { 6846 const { 6847 width, 6848 height, 6849 x, 6850 y 6851 } = state.rects.reference; 6852 const anchorHidden = width === 0 && height === 0 && x === 0 && y === 0; 6853 const nativeHideResult = await nativeHideFn(state); 6854 return { 6855 data: { 6856 referenceHidden: nativeHideResult.data?.referenceHidden || anchorHidden 6857 } 6858 }; 6859 } 6860 }; 6861 6862 // node_modules/@base-ui/react/utils/adaptiveOriginMiddleware.mjs 6863 var DEFAULT_SIDES = { 6864 sideX: "left", 6865 sideY: "top" 6866 }; 6867 var adaptiveOrigin = { 6868 name: "adaptiveOrigin", 6869 async fn(state) { 6870 const { 6871 x: rawX, 6872 y: rawY, 6873 rects: { 6874 floating: floatRect 6875 }, 6876 elements: { 6877 floating 6878 }, 6879 platform: platform3, 6880 strategy, 6881 placement 6882 } = state; 6883 const win = getWindow(floating); 6884 const styles = win.getComputedStyle(floating); 6885 const hasTransition = styles.transitionDuration !== "0s" && styles.transitionDuration !== ""; 6886 if (!hasTransition) { 6887 return { 6888 x: rawX, 6889 y: rawY, 6890 data: DEFAULT_SIDES 6891 }; 6892 } 6893 const offsetParent = await platform3.getOffsetParent?.(floating); 6894 let offsetDimensions = { 6895 width: 0, 6896 height: 0 6897 }; 6898 if (strategy === "fixed" && win?.visualViewport) { 6899 offsetDimensions = { 6900 width: win.visualViewport.width, 6901 height: win.visualViewport.height 6902 }; 6903 } else if (offsetParent === win) { 6904 const doc = ownerDocument(floating); 6905 offsetDimensions = { 6906 width: doc.documentElement.clientWidth, 6907 height: doc.documentElement.clientHeight 6908 }; 6909 } else if (await platform3.isElement?.(offsetParent)) { 6910 offsetDimensions = await platform3.getDimensions(offsetParent); 6911 } 6912 const currentSide = getSide(placement); 6913 let x = rawX; 6914 let y = rawY; 6915 if (currentSide === "left") { 6916 x = offsetDimensions.width - (rawX + floatRect.width); 6917 } 6918 if (currentSide === "top") { 6919 y = offsetDimensions.height - (rawY + floatRect.height); 6920 } 6921 const sideX = currentSide === "left" ? "right" : DEFAULT_SIDES.sideX; 6922 const sideY = currentSide === "top" ? "bottom" : DEFAULT_SIDES.sideY; 6923 return { 6924 x, 6925 y, 6926 data: { 6927 sideX, 6928 sideY 6929 } 6930 }; 6931 } 6932 }; 6933 6934 // node_modules/@base-ui/react/utils/useAnchorPositioning.mjs 6935 function getLogicalSide(sideParam, renderedSide, isRtl) { 6936 const isLogicalSideParam = sideParam === "inline-start" || sideParam === "inline-end"; 6937 const logicalRight = isRtl ? "inline-start" : "inline-end"; 6938 const logicalLeft = isRtl ? "inline-end" : "inline-start"; 6939 return { 6940 top: "top", 6941 right: isLogicalSideParam ? logicalRight : "right", 6942 bottom: "bottom", 6943 left: isLogicalSideParam ? logicalLeft : "left" 6944 }[renderedSide]; 6945 } 6946 function getOffsetData(state, sideParam, isRtl) { 6947 const { 6948 rects, 6949 placement 6950 } = state; 6951 const data = { 6952 side: getLogicalSide(sideParam, getSide(placement), isRtl), 6953 align: getAlignment(placement) || "center", 6954 anchor: { 6955 width: rects.reference.width, 6956 height: rects.reference.height 6957 }, 6958 positioner: { 6959 width: rects.floating.width, 6960 height: rects.floating.height 6961 } 6962 }; 6963 return data; 6964 } 6965 function useAnchorPositioning(params) { 6966 const { 6967 // Public parameters 6968 anchor, 6969 positionMethod = "absolute", 6970 side: sideParam = "bottom", 6971 sideOffset = 0, 6972 align = "center", 6973 alignOffset = 0, 6974 collisionBoundary, 6975 collisionPadding: collisionPaddingParam = 5, 6976 sticky = false, 6977 arrowPadding = 5, 6978 disableAnchorTracking = false, 6979 inline: inlineMiddleware, 6980 // Private parameters 6981 keepMounted = false, 6982 floatingRootContext, 6983 mounted, 6984 collisionAvoidance, 6985 shiftCrossAxis = false, 6986 nodeId, 6987 adaptiveOrigin: adaptiveOrigin2, 6988 lazyFlip = false, 6989 externalTree 6990 } = params; 6991 const [mountSide, setMountSide] = React29.useState(null); 6992 if (!mounted && mountSide !== null) { 6993 setMountSide(null); 6994 } 6995 const collisionAvoidanceSide = collisionAvoidance.side || "flip"; 6996 const collisionAvoidanceAlign = collisionAvoidance.align || "flip"; 6997 const collisionAvoidanceFallbackAxisSide = collisionAvoidance.fallbackAxisSide || "end"; 6998 const anchorFn = typeof anchor === "function" ? anchor : void 0; 6999 const anchorFnCallback = useStableCallback(anchorFn); 7000 const anchorDep = anchorFn ? anchorFnCallback : anchor; 7001 const anchorValueRef = useValueAsRef(anchor); 7002 const mountedRef = useValueAsRef(mounted); 7003 const direction = useDirection(); 7004 const isRtl = direction === "rtl"; 7005 const side = mountSide || { 7006 top: "top", 7007 right: "right", 7008 bottom: "bottom", 7009 left: "left", 7010 "inline-end": isRtl ? "left" : "right", 7011 "inline-start": isRtl ? "right" : "left" 7012 }[sideParam]; 7013 const placement = align === "center" ? side : `$side}-$align}`; 7014 let collisionPadding = collisionPaddingParam; 7015 const bias = 1; 7016 const biasTop = sideParam === "bottom" ? bias : 0; 7017 const biasBottom = sideParam === "top" ? bias : 0; 7018 const biasLeft = sideParam === "right" ? bias : 0; 7019 const biasRight = sideParam === "left" ? bias : 0; 7020 if (typeof collisionPadding === "number") { 7021 collisionPadding = { 7022 top: collisionPadding + biasTop, 7023 right: collisionPadding + biasRight, 7024 bottom: collisionPadding + biasBottom, 7025 left: collisionPadding + biasLeft 7026 }; 7027 } else if (collisionPadding) { 7028 collisionPadding = { 7029 top: (collisionPadding.top || 0) + biasTop, 7030 right: (collisionPadding.right || 0) + biasRight, 7031 bottom: (collisionPadding.bottom || 0) + biasBottom, 7032 left: (collisionPadding.left || 0) + biasLeft 7033 }; 7034 } 7035 const commonCollisionProps = { 7036 boundary: collisionBoundary === "clipping-ancestors" ? "clippingAncestors" : collisionBoundary, 7037 padding: collisionPadding 7038 }; 7039 const arrowRef = React29.useRef(null); 7040 const sideOffsetRef = useValueAsRef(sideOffset); 7041 const alignOffsetRef = useValueAsRef(alignOffset); 7042 const sideOffsetDep = typeof sideOffset !== "function" ? sideOffset : 0; 7043 const alignOffsetDep = typeof alignOffset !== "function" ? alignOffset : 0; 7044 const middleware = []; 7045 if (inlineMiddleware) { 7046 middleware.push(inlineMiddleware); 7047 } 7048 middleware.push(offset3((state) => { 7049 const data = getOffsetData(state, sideParam, isRtl); 7050 const sideAxis = typeof sideOffsetRef.current === "function" ? sideOffsetRef.current(data) : sideOffsetRef.current; 7051 const alignAxis = typeof alignOffsetRef.current === "function" ? alignOffsetRef.current(data) : alignOffsetRef.current; 7052 return { 7053 mainAxis: sideAxis, 7054 crossAxis: alignAxis, 7055 alignmentAxis: alignAxis 7056 }; 7057 }, [sideOffsetDep, alignOffsetDep, isRtl, sideParam])); 7058 const shiftDisabled = collisionAvoidanceAlign === "none" && collisionAvoidanceSide !== "shift"; 7059 const crossAxisShiftEnabled = !shiftDisabled && (sticky || shiftCrossAxis || collisionAvoidanceSide === "shift"); 7060 const flipMiddleware = collisionAvoidanceSide === "none" ? null : flip3({ 7061 ...commonCollisionProps, 7062 // Ensure the popup flips if it's been limited by its --available-height and it resizes. 7063 // Since the size() padding is smaller than the flip() padding, flip() will take precedence. 7064 padding: { 7065 top: collisionPadding.top + bias, 7066 right: collisionPadding.right + bias, 7067 bottom: collisionPadding.bottom + bias, 7068 left: collisionPadding.left + bias 7069 }, 7070 mainAxis: !shiftCrossAxis && collisionAvoidanceSide === "flip", 7071 crossAxis: collisionAvoidanceAlign === "flip" ? "alignment" : false, 7072 fallbackAxisSideDirection: collisionAvoidanceFallbackAxisSide 7073 }); 7074 const shiftMiddleware = shiftDisabled ? null : shift3((data) => { 7075 const html = ownerDocument(data.elements.floating).documentElement; 7076 return { 7077 ...commonCollisionProps, 7078 // Use the Layout Viewport to avoid shifting around when pinch-zooming 7079 // for context menus. 7080 rootBoundary: shiftCrossAxis ? { 7081 x: 0, 7082 y: 0, 7083 width: html.clientWidth, 7084 height: html.clientHeight 7085 } : void 0, 7086 mainAxis: collisionAvoidanceAlign !== "none", 7087 crossAxis: crossAxisShiftEnabled, 7088 limiter: sticky || shiftCrossAxis ? void 0 : limitShift3((limitData) => { 7089 if (!arrowRef.current) { 7090 return {}; 7091 } 7092 const { 7093 width, 7094 height 7095 } = arrowRef.current.getBoundingClientRect(); 7096 const sideAxis = getSideAxis(getSide(limitData.placement)); 7097 const arrowSize = sideAxis === "y" ? width : height; 7098 const offsetAmount = sideAxis === "y" ? collisionPadding.left + collisionPadding.right : collisionPadding.top + collisionPadding.bottom; 7099 return { 7100 offset: arrowSize / 2 + offsetAmount / 2 7101 }; 7102 }) 7103 }; 7104 }, [commonCollisionProps, sticky, shiftCrossAxis, collisionPadding, collisionAvoidanceAlign]); 7105 if (collisionAvoidanceSide === "shift" || collisionAvoidanceAlign === "shift" || align === "center") { 7106 middleware.push(shiftMiddleware, flipMiddleware); 7107 } else { 7108 middleware.push(flipMiddleware, shiftMiddleware); 7109 } 7110 middleware.push(size3({ 7111 ...commonCollisionProps, 7112 apply({ 7113 elements: { 7114 floating 7115 }, 7116 availableWidth, 7117 availableHeight, 7118 rects 7119 }) { 7120 if (!mountedRef.current) { 7121 return; 7122 } 7123 const floatingStyle = floating.style; 7124 floatingStyle.setProperty("--available-width", `$availableWidth}px`); 7125 floatingStyle.setProperty("--available-height", `$availableHeight}px`); 7126 const dpr = getWindow(floating).devicePixelRatio || 1; 7127 const { 7128 x: x2, 7129 y: y2, 7130 width, 7131 height 7132 } = rects.reference; 7133 const anchorWidth = (Math.round((x2 + width) * dpr) - Math.round(x2 * dpr)) / dpr; 7134 const anchorHeight = (Math.round((y2 + height) * dpr) - Math.round(y2 * dpr)) / dpr; 7135 floatingStyle.setProperty("--anchor-width", `$anchorWidth}px`); 7136 floatingStyle.setProperty("--anchor-height", `$anchorHeight}px`); 7137 } 7138 }), arrow4((state) => ({ 7139 // `transform-origin` calculations rely on an element existing. If the arrow hasn't been set, 7140 // we'll create a fake element. 7141 element: arrowRef.current || ownerDocument(state.elements.floating).createElement("div"), 7142 padding: arrowPadding, 7143 offsetParent: "floating" 7144 }), [arrowPadding]), { 7145 name: "transformOrigin", 7146 fn(state) { 7147 const { 7148 elements: elements2, 7149 middlewareData: middlewareData2, 7150 placement: renderedPlacement2, 7151 rects, 7152 y: y2 7153 } = state; 7154 const currentRenderedSide = getSide(renderedPlacement2); 7155 const currentRenderedAxis = getSideAxis(currentRenderedSide); 7156 const arrowEl = arrowRef.current; 7157 const arrowX = middlewareData2.arrow?.x || 0; 7158 const arrowY = middlewareData2.arrow?.y || 0; 7159 const arrowWidth = arrowEl?.clientWidth || 0; 7160 const arrowHeight = arrowEl?.clientHeight || 0; 7161 const transformX = arrowX + arrowWidth / 2; 7162 const transformY = arrowY + arrowHeight / 2; 7163 const shiftY = Math.abs(middlewareData2.shift?.y || 0); 7164 const halfAnchorHeight = rects.reference.height / 2; 7165 const sideOffsetValue = typeof sideOffset === "function" ? sideOffset(getOffsetData(state, sideParam, isRtl)) : sideOffset; 7166 const isOverlappingAnchor = shiftY > sideOffsetValue; 7167 const adjacentTransformOrigin = { 7168 top: `$transformX}px calc(100% + $sideOffsetValue}px)`, 7169 bottom: `$transformX}px ${-sideOffsetValue}px`, 7170 left: `calc(100% + $sideOffsetValue}px) $transformY}px`, 7171 right: `${-sideOffsetValue}px $transformY}px` 7172 }[currentRenderedSide]; 7173 const overlapTransformOrigin = `$transformX}px $rects.reference.y + halfAnchorHeight - y2}px`; 7174 elements2.floating.style.setProperty("--transform-origin", crossAxisShiftEnabled && currentRenderedAxis === "y" && isOverlappingAnchor ? overlapTransformOrigin : adjacentTransformOrigin); 7175 return {}; 7176 } 7177 }, hide4, adaptiveOrigin2); 7178 useIsoLayoutEffect(() => { 7179 if (!mounted && floatingRootContext) { 7180 floatingRootContext.update({ 7181 referenceElement: null, 7182 floatingElement: null, 7183 domReferenceElement: null, 7184 positionReference: null 7185 }); 7186 } 7187 }, [mounted, floatingRootContext]); 7188 const autoUpdateOptions = React29.useMemo(() => ({ 7189 elementResize: !disableAnchorTracking && typeof ResizeObserver !== "undefined", 7190 layoutShift: !disableAnchorTracking && typeof IntersectionObserver !== "undefined" 7191 }), [disableAnchorTracking]); 7192 const { 7193 refs, 7194 elements, 7195 x, 7196 y, 7197 middlewareData, 7198 update: update2, 7199 placement: renderedPlacement, 7200 context, 7201 isPositioned, 7202 floatingStyles: originalFloatingStyles 7203 } = useFloating2({ 7204 rootContext: floatingRootContext, 7205 open: keepMounted ? mounted : void 0, 7206 placement, 7207 middleware, 7208 strategy: positionMethod, 7209 whileElementsMounted: keepMounted ? void 0 : (...args) => autoUpdate(...args, autoUpdateOptions), 7210 nodeId, 7211 externalTree 7212 }); 7213 const { 7214 sideX, 7215 sideY 7216 } = middlewareData.adaptiveOrigin || DEFAULT_SIDES; 7217 const resolvedPosition = isPositioned ? positionMethod : "fixed"; 7218 const floatingStyles = React29.useMemo(() => { 7219 const base = adaptiveOrigin2 ? { 7220 position: resolvedPosition, 7221 [sideX]: x, 7222 [sideY]: y 7223 } : { 7224 position: resolvedPosition, 7225 ...originalFloatingStyles 7226 }; 7227 if (!isPositioned) { 7228 base.opacity = 0; 7229 } 7230 return base; 7231 }, [adaptiveOrigin2, resolvedPosition, sideX, x, sideY, y, originalFloatingStyles, isPositioned]); 7232 const registeredPositionReferenceRef = React29.useRef(null); 7233 useIsoLayoutEffect(() => { 7234 if (!mounted) { 7235 return; 7236 } 7237 const anchorValue = anchorValueRef.current; 7238 const resolvedAnchor = typeof anchorValue === "function" ? anchorValue() : anchorValue; 7239 const unwrappedElement = (isRef(resolvedAnchor) ? resolvedAnchor.current : resolvedAnchor) || null; 7240 const finalAnchor = unwrappedElement || null; 7241 if (finalAnchor !== registeredPositionReferenceRef.current) { 7242 refs.setPositionReference(finalAnchor); 7243 registeredPositionReferenceRef.current = finalAnchor; 7244 } 7245 }, [mounted, refs, anchorDep, anchorValueRef]); 7246 React29.useEffect(() => { 7247 if (!mounted) { 7248 return; 7249 } 7250 const anchorValue = anchorValueRef.current; 7251 if (typeof anchorValue === "function") { 7252 return; 7253 } 7254 if (isRef(anchorValue) && anchorValue.current !== registeredPositionReferenceRef.current) { 7255 refs.setPositionReference(anchorValue.current); 7256 registeredPositionReferenceRef.current = anchorValue.current; 7257 } 7258 }, [mounted, refs, anchorDep, anchorValueRef]); 7259 React29.useEffect(() => { 7260 if (keepMounted && mounted && elements.reference && elements.floating) { 7261 return autoUpdate(elements.reference, elements.floating, update2, autoUpdateOptions); 7262 } 7263 return void 0; 7264 }, [keepMounted, mounted, elements, update2, autoUpdateOptions]); 7265 const renderedSide = getSide(renderedPlacement); 7266 const logicalRenderedSide = getLogicalSide(sideParam, renderedSide, isRtl); 7267 const renderedAlign = getAlignment(renderedPlacement) || "center"; 7268 const anchorHidden = Boolean(middlewareData.hide?.referenceHidden); 7269 useIsoLayoutEffect(() => { 7270 if (lazyFlip && mounted && isPositioned) { 7271 setMountSide(renderedSide); 7272 } 7273 }, [lazyFlip, mounted, isPositioned, renderedSide]); 7274 const arrowStyles = React29.useMemo(() => ({ 7275 position: "absolute", 7276 top: middlewareData.arrow?.y, 7277 left: middlewareData.arrow?.x 7278 }), [middlewareData.arrow]); 7279 const arrowUncentered = middlewareData.arrow?.centerOffset !== 0; 7280 return React29.useMemo(() => ({ 7281 positionerStyles: floatingStyles, 7282 arrowStyles, 7283 arrowRef, 7284 arrowUncentered, 7285 side: logicalRenderedSide, 7286 align: renderedAlign, 7287 physicalSide: renderedSide, 7288 anchorHidden, 7289 refs, 7290 context, 7291 isPositioned, 7292 update: update2 7293 }), [floatingStyles, arrowStyles, arrowRef, arrowUncentered, logicalRenderedSide, renderedAlign, renderedSide, anchorHidden, refs, context, isPositioned, update2]); 7294 } 7295 function isRef(param) { 7296 return param != null && "current" in param; 7297 } 7298 7299 // node_modules/@base-ui/react/utils/getDisabledMountTransitionStyles.mjs 7300 function getDisabledMountTransitionStyles(transitionStatus) { 7301 return transitionStatus === "starting" ? DISABLED_TRANSITIONS_STYLE : EMPTY_OBJECT; 7302 } 7303 7304 // node_modules/@base-ui/react/utils/usePositioner.mjs 7305 function usePositioner(componentProps, state, { 7306 styles, 7307 transitionStatus, 7308 props, 7309 refs, 7310 hidden, 7311 inert = false 7312 }) { 7313 const style = { 7314 ...styles 7315 }; 7316 if (inert) { 7317 style.pointerEvents = "none"; 7318 } 7319 return useRenderElement("div", componentProps, { 7320 state, 7321 ref: refs, 7322 props: [{ 7323 role: "presentation", 7324 hidden, 7325 style 7326 }, getDisabledMountTransitionStyles(transitionStatus), props], 7327 stateAttributesMapping: popupStateMapping 7328 }); 7329 } 7330 7331 // node_modules/@base-ui/react/utils/usePopupViewport.mjs 7332 var React32 = __toESM(require_react(), 1); 7333 var ReactDOM6 = __toESM(require_react_dom(), 1); 7334 7335 // node_modules/@base-ui/utils/usePreviousValue.mjs 7336 var React30 = __toESM(require_react(), 1); 7337 function usePreviousValue(value) { 7338 const [state, setState] = React30.useState({ 7339 current: value, 7340 previous: null 7341 }); 7342 if (value !== state.current) { 7343 setState({ 7344 current: value, 7345 previous: state.current 7346 }); 7347 } 7348 return state.previous; 7349 } 7350 7351 // node_modules/@base-ui/react/utils/usePopupAutoResize.mjs 7352 var React31 = __toESM(require_react(), 1); 7353 7354 // node_modules/@base-ui/react/utils/getCssDimensions.mjs 7355 function getCssDimensions2(element) { 7356 const css = getComputedStyle2(element); 7357 let width = parseFloat(css.width) || 0; 7358 let height = parseFloat(css.height) || 0; 7359 const hasOffset = isHTMLElement(element); 7360 const offsetWidth = hasOffset ? element.offsetWidth : width; 7361 const offsetHeight = hasOffset ? element.offsetHeight : height; 7362 const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight; 7363 if (shouldFallback) { 7364 width = offsetWidth; 7365 height = offsetHeight; 7366 } 7367 return { 7368 width, 7369 height 7370 }; 7371 } 7372 7373 // node_modules/@base-ui/react/utils/usePopupAutoResize.mjs 7374 function usePopupAutoResize(parameters) { 7375 const { 7376 popupElement, 7377 positionerElement, 7378 content, 7379 mounted, 7380 onMeasureLayout: onMeasureLayoutParam, 7381 onMeasureLayoutComplete: onMeasureLayoutCompleteParam, 7382 side, 7383 direction 7384 } = parameters; 7385 const runOnceAnimationsFinish = useAnimationsFinished(popupElement, true, false); 7386 const animationFrame = useAnimationFrame(); 7387 const committedDimensionsRef = React31.useRef(null); 7388 const isInitialRenderRef = React31.useRef(true); 7389 const restoreAnchoringStylesRef = React31.useRef(NOOP); 7390 const onMeasureLayout = useStableCallback(onMeasureLayoutParam); 7391 const onMeasureLayoutComplete = useStableCallback(onMeasureLayoutCompleteParam); 7392 const anchoringStyles = React31.useMemo(() => { 7393 let isOriginSide = side === "top"; 7394 let isPhysicalLeft = side === "left"; 7395 if (direction === "rtl") { 7396 isOriginSide = isOriginSide || side === "inline-end"; 7397 isPhysicalLeft = isPhysicalLeft || side === "inline-end"; 7398 } else { 7399 isOriginSide = isOriginSide || side === "inline-start"; 7400 isPhysicalLeft = isPhysicalLeft || side === "inline-start"; 7401 } 7402 return isOriginSide ? { 7403 position: "absolute", 7404 [side === "top" ? "bottom" : "top"]: "0", 7405 [isPhysicalLeft ? "right" : "left"]: "0" 7406 } : EMPTY_OBJECT; 7407 }, [side, direction]); 7408 useIsoLayoutEffect(() => { 7409 if (!mounted) { 7410 restoreAnchoringStylesRef.current = NOOP; 7411 isInitialRenderRef.current = true; 7412 committedDimensionsRef.current = null; 7413 return void 0; 7414 } 7415 if (!popupElement || !positionerElement) { 7416 return void 0; 7417 } 7418 restoreAnchoringStylesRef.current = applyElementStyles(popupElement, anchoringStyles); 7419 setPopupCssSize(popupElement, "auto"); 7420 const restorePopupPosition = overrideElementStyle(popupElement, "position", "static"); 7421 const restorePopupTransform = overrideElementStyle(popupElement, "transform", "none"); 7422 const restorePopupScale = overrideElementStyle(popupElement, "scale", "1"); 7423 const restorePositionerAvailableSize = applyElementStyles(positionerElement, { 7424 "--available-width": "max-content", 7425 "--available-height": "max-content" 7426 }); 7427 function restoreMeasurementOverrides() { 7428 restorePopupPosition(); 7429 restorePopupTransform(); 7430 restorePositionerAvailableSize(); 7431 } 7432 function restoreMeasurementOverridesIncludingScale() { 7433 restoreMeasurementOverrides(); 7434 restorePopupScale(); 7435 } 7436 onMeasureLayout?.(); 7437 if (isInitialRenderRef.current || committedDimensionsRef.current === null) { 7438 setPositionerCssSize(positionerElement, "max-content"); 7439 const dimensions = getCssDimensions2(popupElement); 7440 committedDimensionsRef.current = dimensions; 7441 setPositionerCssSize(positionerElement, dimensions); 7442 restoreMeasurementOverridesIncludingScale(); 7443 onMeasureLayoutComplete?.(null, dimensions); 7444 isInitialRenderRef.current = false; 7445 return () => { 7446 restoreAnchoringStylesRef.current(); 7447 restoreAnchoringStylesRef.current = NOOP; 7448 }; 7449 } 7450 setPositionerCssSize(positionerElement, "max-content"); 7451 const previousDimensions = committedDimensionsRef.current; 7452 const newDimensions = getCssDimensions2(popupElement); 7453 committedDimensionsRef.current = newDimensions; 7454 setPopupCssSize(popupElement, previousDimensions); 7455 restoreMeasurementOverridesIncludingScale(); 7456 onMeasureLayoutComplete?.(previousDimensions, newDimensions); 7457 setPositionerCssSize(positionerElement, newDimensions); 7458 const abortController = new AbortController(); 7459 animationFrame.request(() => { 7460 setPopupCssSize(popupElement, newDimensions); 7461 runOnceAnimationsFinish(() => { 7462 popupElement.style.setProperty("--popup-width", "auto"); 7463 popupElement.style.setProperty("--popup-height", "auto"); 7464 }, abortController.signal); 7465 }); 7466 return () => { 7467 abortController.abort(); 7468 animationFrame.cancel(); 7469 restoreAnchoringStylesRef.current(); 7470 restoreAnchoringStylesRef.current = NOOP; 7471 }; 7472 }, [content, popupElement, positionerElement, runOnceAnimationsFinish, animationFrame, mounted, onMeasureLayout, onMeasureLayoutComplete, anchoringStyles]); 7473 } 7474 function overrideElementStyle(element, property, value) { 7475 const originalValue = element.style.getPropertyValue(property); 7476 element.style.setProperty(property, value); 7477 return () => { 7478 element.style.setProperty(property, originalValue); 7479 }; 7480 } 7481 function applyElementStyles(element, styles) { 7482 const restorers = []; 7483 for (const [key, value] of Object.entries(styles)) { 7484 restorers.push(overrideElementStyle(element, key, value)); 7485 } 7486 return restorers.length ? () => { 7487 restorers.forEach((restore) => restore()); 7488 } : NOOP; 7489 } 7490 function setPopupCssSize(popupElement, size4) { 7491 const width = size4 === "auto" ? "auto" : `$size4.width}px`; 7492 const height = size4 === "auto" ? "auto" : `$size4.height}px`; 7493 popupElement.style.setProperty("--popup-width", width); 7494 popupElement.style.setProperty("--popup-height", height); 7495 } 7496 function setPositionerCssSize(positionerElement, size4) { 7497 const width = size4 === "max-content" ? "max-content" : `$size4.width}px`; 7498 const height = size4 === "max-content" ? "max-content" : `$size4.height}px`; 7499 positionerElement.style.setProperty("--positioner-width", width); 7500 positionerElement.style.setProperty("--positioner-height", height); 7501 } 7502 7503 // node_modules/@base-ui/react/utils/usePopupViewport.mjs 7504 var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1); 7505 function usePopupViewport(parameters) { 7506 const { 7507 store: store2, 7508 side, 7509 cssVars, 7510 children 7511 } = parameters; 7512 const direction = useDirection(); 7513 const activeTrigger = store2.useState("activeTriggerElement"); 7514 const activeTriggerId = store2.useState("activeTriggerId"); 7515 const open = store2.useState("open"); 7516 const payload = store2.useState("payload"); 7517 const mounted = store2.useState("mounted"); 7518 const popupElement = store2.useState("popupElement"); 7519 const positionerElement = store2.useState("positionerElement"); 7520 const previousActiveTrigger = usePreviousValue(open ? activeTrigger : null); 7521 const currentContentKey = usePopupContentKey(activeTriggerId, payload); 7522 const capturedNodeRef = React32.useRef(null); 7523 const [previousContentNode, setPreviousContentNode] = React32.useState(null); 7524 const [newTriggerOffset, setNewTriggerOffset] = React32.useState(null); 7525 const currentContainerRef = React32.useRef(null); 7526 const previousContainerRef = React32.useRef(null); 7527 const onAnimationsFinished = useAnimationsFinished(currentContainerRef, true, false); 7528 const cleanupFrame = useAnimationFrame(); 7529 const [previousContentDimensions, setPreviousContentDimensions] = React32.useState(null); 7530 const [showStartingStyleAttribute, setShowStartingStyleAttribute] = React32.useState(false); 7531 useIsoLayoutEffect(() => { 7532 store2.set("hasViewport", true); 7533 return () => { 7534 store2.set("hasViewport", false); 7535 }; 7536 }, [store2]); 7537 const handleMeasureLayout = useStableCallback(() => { 7538 currentContainerRef.current?.style.setProperty("animation", "none"); 7539 currentContainerRef.current?.style.setProperty("transition", "none"); 7540 previousContainerRef.current?.style.setProperty("display", "none"); 7541 }); 7542 const handleMeasureLayoutComplete = useStableCallback((previousDimensions) => { 7543 currentContainerRef.current?.style.removeProperty("animation"); 7544 currentContainerRef.current?.style.removeProperty("transition"); 7545 previousContainerRef.current?.style.removeProperty("display"); 7546 if (previousDimensions) { 7547 setPreviousContentDimensions(previousDimensions); 7548 } 7549 }); 7550 const lastHandledTriggerRef = React32.useRef(null); 7551 useIsoLayoutEffect(() => { 7552 if (!open || !mounted) { 7553 lastHandledTriggerRef.current = null; 7554 } 7555 }, [open, mounted]); 7556 useIsoLayoutEffect(() => { 7557 if (activeTrigger && previousActiveTrigger && activeTrigger !== previousActiveTrigger && lastHandledTriggerRef.current !== activeTrigger && capturedNodeRef.current) { 7558 setPreviousContentNode(capturedNodeRef.current); 7559 setShowStartingStyleAttribute(true); 7560 const offset4 = calculateRelativePosition(previousActiveTrigger, activeTrigger); 7561 setNewTriggerOffset(offset4); 7562 cleanupFrame.request(() => { 7563 ReactDOM6.flushSync(() => { 7564 setShowStartingStyleAttribute(false); 7565 }); 7566 onAnimationsFinished(() => { 7567 setPreviousContentNode(null); 7568 setPreviousContentDimensions(null); 7569 capturedNodeRef.current = null; 7570 }); 7571 }); 7572 lastHandledTriggerRef.current = activeTrigger; 7573 } 7574 }, [activeTrigger, previousActiveTrigger, previousContentNode, onAnimationsFinished, cleanupFrame]); 7575 useIsoLayoutEffect(() => { 7576 const source = currentContainerRef.current; 7577 if (!source) { 7578 return; 7579 } 7580 const wrapper = ownerDocument(source).createElement("div"); 7581 for (const child of Array.from(source.childNodes)) { 7582 wrapper.appendChild(child.cloneNode(true)); 7583 } 7584 capturedNodeRef.current = wrapper; 7585 }); 7586 const isTransitioning = previousContentNode != null; 7587 let childrenToRender; 7588 if (!isTransitioning) { 7589 childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { 7590 "data-current": true, 7591 ref: currentContainerRef, 7592 children 7593 }, currentContentKey); 7594 } else { 7595 childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(React32.Fragment, { 7596 children: [/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { 7597 "data-previous": true, 7598 inert: inertValue(true), 7599 ref: previousContainerRef, 7600 style: { 7601 ...previousContentDimensions ? { 7602 [cssVars.popupWidth]: `$previousContentDimensions.width}px`, 7603 [cssVars.popupHeight]: `$previousContentDimensions.height}px` 7604 } : null, 7605 position: "absolute" 7606 }, 7607 "data-ending-style": showStartingStyleAttribute ? void 0 : "" 7608 }, "previous"), /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { 7609 "data-current": true, 7610 ref: currentContainerRef, 7611 "data-starting-style": showStartingStyleAttribute ? "" : void 0, 7612 children 7613 }, currentContentKey)] 7614 }); 7615 } 7616 useIsoLayoutEffect(() => { 7617 const container = previousContainerRef.current; 7618 if (!container || !previousContentNode) { 7619 return; 7620 } 7621 container.replaceChildren(...Array.from(previousContentNode.childNodes)); 7622 }, [previousContentNode]); 7623 usePopupAutoResize({ 7624 popupElement, 7625 positionerElement, 7626 mounted, 7627 content: payload, 7628 onMeasureLayout: handleMeasureLayout, 7629 onMeasureLayoutComplete: handleMeasureLayoutComplete, 7630 side, 7631 direction 7632 }); 7633 const state = { 7634 activationDirection: getActivationDirection(newTriggerOffset), 7635 transitioning: isTransitioning 7636 }; 7637 return { 7638 children: childrenToRender, 7639 state 7640 }; 7641 } 7642 function getActivationDirection(offset4) { 7643 if (!offset4) { 7644 return void 0; 7645 } 7646 return `$getValueWithTolerance(offset4.horizontal, 5, "right", "left")} $getValueWithTolerance(offset4.vertical, 5, "down", "up")}`; 7647 } 7648 function getValueWithTolerance(value, tolerance, positiveLabel, negativeLabel) { 7649 if (value > tolerance) { 7650 return positiveLabel; 7651 } 7652 if (value < -tolerance) { 7653 return negativeLabel; 7654 } 7655 return ""; 7656 } 7657 function calculateRelativePosition(from, to) { 7658 const fromRect = from.getBoundingClientRect(); 7659 const toRect = to.getBoundingClientRect(); 7660 const fromCenter = { 7661 x: fromRect.left + fromRect.width / 2, 7662 y: fromRect.top + fromRect.height / 2 7663 }; 7664 const toCenter = { 7665 x: toRect.left + toRect.width / 2, 7666 y: toRect.top + toRect.height / 2 7667 }; 7668 return { 7669 horizontal: toCenter.x - fromCenter.x, 7670 vertical: toCenter.y - fromCenter.y 7671 }; 7672 } 7673 function usePopupContentKey(activeTriggerId, payload) { 7674 const [contentKey, setContentKey] = React32.useState(0); 7675 const previousActiveTriggerIdRef = React32.useRef(activeTriggerId); 7676 const previousPayloadRef = React32.useRef(payload); 7677 const pendingPayloadUpdateRef = React32.useRef(false); 7678 useIsoLayoutEffect(() => { 7679 const previousActiveTriggerId = previousActiveTriggerIdRef.current; 7680 const previousPayload = previousPayloadRef.current; 7681 const triggerIdChanged = activeTriggerId !== previousActiveTriggerId; 7682 const payloadChanged = payload !== previousPayload; 7683 if (triggerIdChanged) { 7684 setContentKey((value) => value + 1); 7685 pendingPayloadUpdateRef.current = !payloadChanged; 7686 } else if (pendingPayloadUpdateRef.current && payloadChanged) { 7687 setContentKey((value) => value + 1); 7688 pendingPayloadUpdateRef.current = false; 7689 } 7690 previousActiveTriggerIdRef.current = activeTriggerId; 7691 previousPayloadRef.current = payload; 7692 }, [activeTriggerId, payload]); 7693 return `$activeTriggerId ?? "current"}-$contentKey}`; 7694 } 7695 7696 // node_modules/@base-ui/react/utils/FloatingPortalLite.mjs 7697 var React33 = __toESM(require_react(), 1); 7698 var ReactDOM7 = __toESM(require_react_dom(), 1); 7699 var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1); 7700 var FloatingPortalLite = /* @__PURE__ */ React33.forwardRef(function FloatingPortalLite2(componentProps, forwardedRef) { 7701 const { 7702 children, 7703 container, 7704 className, 7705 render, 7706 style, 7707 ...elementProps 7708 } = componentProps; 7709 const { 7710 portalNode, 7711 portalSubtree 7712 } = useFloatingPortalNode({ 7713 container, 7714 ref: forwardedRef, 7715 componentProps, 7716 elementProps 7717 }); 7718 if (!portalSubtree && !portalNode) { 7719 return null; 7720 } 7721 return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(React33.Fragment, { 7722 children: [portalSubtree, portalNode && /* @__PURE__ */ ReactDOM7.createPortal(children, portalNode)] 7723 }); 7724 }); 7725 if (true) FloatingPortalLite.displayName = "FloatingPortalLite"; 7726 7727 // node_modules/@base-ui/react/tooltip/index.parts.mjs 7728 var index_parts_exports = {}; 7729 __export(index_parts_exports, { 7730 Arrow: () => TooltipArrow, 7731 Handle: () => TooltipHandle, 7732 Popup: () => TooltipPopup, 7733 Portal: () => TooltipPortal, 7734 Positioner: () => TooltipPositioner, 7735 Provider: () => TooltipProvider, 7736 Root: () => TooltipRoot, 7737 Trigger: () => TooltipTrigger, 7738 Viewport: () => TooltipViewport, 7739 createHandle: () => createTooltipHandle 7740 }); 7741 7742 // node_modules/@base-ui/react/tooltip/root/TooltipRoot.mjs 7743 var React36 = __toESM(require_react(), 1); 7744 7745 // node_modules/@base-ui/react/tooltip/root/TooltipRootContext.mjs 7746 var React34 = __toESM(require_react(), 1); 7747 var TooltipRootContext = /* @__PURE__ */ React34.createContext(void 0); 7748 if (true) TooltipRootContext.displayName = "TooltipRootContext"; 7749 function useTooltipRootContext(optional) { 7750 const context = React34.useContext(TooltipRootContext); 7751 if (context === void 0 && !optional) { 7752 throw new Error(true ? "Base UI: TooltipRootContext is missing. Tooltip parts must be placed within <Tooltip.Root>." : formatErrorMessage_default(72)); 7753 } 7754 return context; 7755 } 7756 7757 // node_modules/@base-ui/react/tooltip/store/TooltipStore.mjs 7758 var React35 = __toESM(require_react(), 1); 7759 var selectors2 = { 7760 ...popupStoreSelectors, 7761 disabled: createSelector((state) => state.disabled), 7762 instantType: createSelector((state) => state.instantType), 7763 isInstantPhase: createSelector((state) => state.isInstantPhase), 7764 trackCursorAxis: createSelector((state) => state.trackCursorAxis), 7765 disableHoverablePopup: createSelector((state) => state.disableHoverablePopup), 7766 lastOpenChangeReason: createSelector((state) => state.openChangeReason), 7767 closeOnClick: createSelector((state) => state.closeOnClick), 7768 closeDelay: createSelector((state) => state.closeDelay), 7769 hasViewport: createSelector((state) => state.hasViewport) 7770 }; 7771 var TooltipStore = class _TooltipStore extends ReactStore { 7772 constructor(initialState, floatingId, nested = false) { 7773 const triggerElements = new PopupTriggerMap(); 7774 const state = { 7775 ...createInitialState(), 7776 ...initialState 7777 }; 7778 state.floatingRootContext = createPopupFloatingRootContext(triggerElements, floatingId, nested); 7779 super(state, { 7780 popupRef: /* @__PURE__ */ React35.createRef(), 7781 onOpenChange: void 0, 7782 onOpenChangeComplete: void 0, 7783 triggerElements 7784 }, selectors2); 7785 } 7786 setOpen = (nextOpen, eventDetails) => { 7787 applyPopupOpenChange(this, nextOpen, eventDetails, { 7788 extraState: { 7789 openChangeReason: eventDetails.reason 7790 } 7791 }); 7792 }; 7793 // Used by trigger clicks to clear a delayed hover open without reporting a public open-state change. 7794 cancelPendingOpen(event) { 7795 this.state.floatingRootContext.dispatchOpenChange(false, createChangeEventDetails(reason_parts_exports.triggerPress, event)); 7796 } 7797 static useStore(externalStore, initialState) { 7798 const store2 = usePopupStore(externalStore, (floatingId, nested) => new _TooltipStore(initialState, floatingId, nested)).store; 7799 return store2; 7800 } 7801 }; 7802 function createInitialState() { 7803 return { 7804 ...createInitialPopupStoreState(), 7805 disabled: false, 7806 instantType: void 0, 7807 isInstantPhase: false, 7808 trackCursorAxis: "none", 7809 disableHoverablePopup: false, 7810 openChangeReason: null, 7811 closeOnClick: true, 7812 closeDelay: 0, 7813 hasViewport: false 7814 }; 7815 } 7816 7817 // node_modules/@base-ui/react/tooltip/root/TooltipRoot.mjs 7818 var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); 7819 var TooltipRoot = fastComponent(function TooltipRoot2(props) { 7820 const { 7821 disabled: disabled2 = false, 7822 defaultOpen = false, 7823 open: openProp, 7824 disableHoverablePopup = false, 7825 trackCursorAxis = "none", 7826 actionsRef, 7827 onOpenChange, 7828 onOpenChangeComplete, 7829 handle, 7830 triggerId: triggerIdProp, 7831 defaultTriggerId: defaultTriggerIdProp = null, 7832 children 7833 } = props; 7834 const store2 = TooltipStore.useStore(handle?.store, { 7835 open: defaultOpen, 7836 openProp, 7837 activeTriggerId: defaultTriggerIdProp, 7838 triggerIdProp 7839 }); 7840 useInitialOpenSync(store2, openProp, defaultOpen, defaultTriggerIdProp); 7841 store2.useControlledProp("openProp", openProp); 7842 store2.useControlledProp("triggerIdProp", triggerIdProp); 7843 store2.useContextCallback("onOpenChange", onOpenChange); 7844 store2.useContextCallback("onOpenChangeComplete", onOpenChangeComplete); 7845 const openState = store2.useState("open"); 7846 const open = !disabled2 && openState; 7847 const activeTriggerId = store2.useState("activeTriggerId"); 7848 const mounted = store2.useState("mounted"); 7849 const payload = store2.useState("payload"); 7850 store2.useSyncedValues({ 7851 trackCursorAxis, 7852 disableHoverablePopup 7853 }); 7854 store2.useSyncedValue("disabled", disabled2); 7855 useImplicitActiveTrigger(store2, { 7856 closeOnActiveTriggerUnmount: true 7857 }); 7858 const { 7859 forceUnmount, 7860 transitionStatus 7861 } = useOpenStateTransitions(open, store2); 7862 const isInstantPhase = store2.useState("isInstantPhase"); 7863 const instantType = store2.useState("instantType"); 7864 const lastOpenChangeReason = store2.useState("lastOpenChangeReason"); 7865 const previousInstantTypeRef = React36.useRef(null); 7866 useIsoLayoutEffect(() => { 7867 if (openState && disabled2) { 7868 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.disabled)); 7869 } 7870 }, [openState, disabled2, store2]); 7871 useIsoLayoutEffect(() => { 7872 if (transitionStatus === "ending" && lastOpenChangeReason === reason_parts_exports.none || transitionStatus !== "ending" && isInstantPhase) { 7873 if (instantType !== "delay") { 7874 previousInstantTypeRef.current = instantType; 7875 } 7876 store2.set("instantType", "delay"); 7877 } else if (previousInstantTypeRef.current !== null) { 7878 store2.set("instantType", previousInstantTypeRef.current); 7879 previousInstantTypeRef.current = null; 7880 } 7881 }, [transitionStatus, isInstantPhase, lastOpenChangeReason, instantType, store2]); 7882 useIsoLayoutEffect(() => { 7883 if (open) { 7884 if (activeTriggerId == null) { 7885 store2.set("payload", void 0); 7886 } 7887 } 7888 }, [store2, activeTriggerId, open]); 7889 const handleImperativeClose = React36.useCallback(() => { 7890 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction)); 7891 }, [store2]); 7892 React36.useImperativeHandle(actionsRef, () => ({ 7893 unmount: forceUnmount, 7894 close: handleImperativeClose 7895 }), [forceUnmount, handleImperativeClose]); 7896 const shouldRenderInteractions = open || mounted || !disabled2 && trackCursorAxis !== "none"; 7897 return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(TooltipRootContext.Provider, { 7898 value: store2, 7899 children: [shouldRenderInteractions && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(TooltipInteractions, { 7900 store: store2, 7901 disabled: disabled2, 7902 trackCursorAxis 7903 }), typeof children === "function" ? children({ 7904 payload 7905 }) : children] 7906 }); 7907 }); 7908 if (true) TooltipRoot.displayName = "TooltipRoot"; 7909 function TooltipInteractions({ 7910 store: store2, 7911 disabled: disabled2, 7912 trackCursorAxis 7913 }) { 7914 const floatingRootContext = store2.useState("floatingRootContext"); 7915 const dismiss = useDismiss(floatingRootContext, { 7916 enabled: !disabled2, 7917 referencePress: () => store2.select("closeOnClick") 7918 }); 7919 const clientPoint = useClientPoint(floatingRootContext, { 7920 enabled: !disabled2 && trackCursorAxis !== "none", 7921 axis: trackCursorAxis === "none" ? void 0 : trackCursorAxis 7922 }); 7923 const activeTriggerProps = React36.useMemo(() => mergeProps(clientPoint.reference, dismiss.reference), [clientPoint.reference, dismiss.reference]); 7924 const inactiveTriggerProps = React36.useMemo(() => mergeProps(clientPoint.trigger, dismiss.trigger), [clientPoint.trigger, dismiss.trigger]); 7925 const popupProps = React36.useMemo(() => mergeProps(FOCUSABLE_POPUP_PROPS, clientPoint.floating, dismiss.floating), [clientPoint.floating, dismiss.floating]); 7926 usePopupInteractionProps(store2, { 7927 activeTriggerProps, 7928 inactiveTriggerProps, 7929 popupProps 7930 }); 7931 return null; 7932 } 7933 7934 // node_modules/@base-ui/react/tooltip/trigger/TooltipTrigger.mjs 7935 var React38 = __toESM(require_react(), 1); 7936 7937 // node_modules/@base-ui/react/tooltip/provider/TooltipProviderContext.mjs 7938 var React37 = __toESM(require_react(), 1); 7939 var TooltipProviderContext = /* @__PURE__ */ React37.createContext(void 0); 7940 if (true) TooltipProviderContext.displayName = "TooltipProviderContext"; 7941 function useTooltipProviderContext() { 7942 return React37.useContext(TooltipProviderContext); 7943 } 7944 7945 // node_modules/@base-ui/react/tooltip/trigger/TooltipTriggerDataAttributes.mjs 7946 var TooltipTriggerDataAttributes = (function(TooltipTriggerDataAttributes2) { 7947 TooltipTriggerDataAttributes2[TooltipTriggerDataAttributes2["popupOpen"] = CommonTriggerDataAttributes.popupOpen] = "popupOpen"; 7948 TooltipTriggerDataAttributes2["triggerDisabled"] = "data-trigger-disabled"; 7949 return TooltipTriggerDataAttributes2; 7950 })({}); 7951 7952 // node_modules/@base-ui/react/tooltip/utils/constants.mjs 7953 var OPEN_DELAY = 600; 7954 7955 // node_modules/@base-ui/react/tooltip/trigger/TooltipTrigger.mjs 7956 var TOOLTIP_TRIGGER_IDENTIFIER = "data-base-ui-tooltip-trigger"; 7957 function getTargetElement(event) { 7958 if ("composedPath" in event) { 7959 const path = event.composedPath(); 7960 for (let i = 0; i < path.length; i += 1) { 7961 const element = path[i]; 7962 if (isElement(element)) { 7963 return element; 7964 } 7965 } 7966 } 7967 const target = event.target; 7968 if (isElement(target)) { 7969 return target; 7970 } 7971 return null; 7972 } 7973 function closestEnabledTooltipTrigger(element) { 7974 let current = element; 7975 while (current) { 7976 if (current.hasAttribute(TOOLTIP_TRIGGER_IDENTIFIER)) { 7977 return current; 7978 } 7979 const parentElement = current.parentElement; 7980 if (parentElement) { 7981 current = parentElement; 7982 continue; 7983 } 7984 const root = current.getRootNode(); 7985 current = "host" in root && isElement(root.host) ? root.host : null; 7986 } 7987 return null; 7988 } 7989 var TooltipTrigger = fastComponentRef(function TooltipTrigger2(componentProps, forwardedRef) { 7990 const { 7991 render, 7992 className, 7993 style, 7994 handle, 7995 payload, 7996 disabled: disabledProp, 7997 delay, 7998 closeOnClick = true, 7999 closeDelay, 8000 id: idProp, 8001 ...elementProps 8002 } = componentProps; 8003 const rootContext = useTooltipRootContext(true); 8004 const store2 = handle?.store ?? rootContext; 8005 if (!store2) { 8006 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)); 8007 } 8008 const thisTriggerId = useBaseUiId(idProp); 8009 const isTriggerActive = store2.useState("isTriggerActive", thisTriggerId); 8010 const isOpenedByThisTrigger = store2.useState("isOpenedByTrigger", thisTriggerId); 8011 const floatingRootContext = store2.useState("floatingRootContext"); 8012 const triggerElementRef = React38.useRef(null); 8013 const delayWithDefault = delay ?? OPEN_DELAY; 8014 const closeDelayWithDefault = closeDelay ?? 0; 8015 const { 8016 registerTrigger, 8017 isMountedByThisTrigger 8018 } = useTriggerDataForwarding(thisTriggerId, triggerElementRef, store2, { 8019 payload, 8020 closeOnClick, 8021 closeDelay: closeDelayWithDefault 8022 }); 8023 const providerContext = useTooltipProviderContext(); 8024 const { 8025 delayRef, 8026 isInstantPhase, 8027 hasProvider 8028 } = useDelayGroup(floatingRootContext, { 8029 open: isOpenedByThisTrigger 8030 }); 8031 const hoverInteraction = useHoverInteractionSharedState(floatingRootContext); 8032 store2.useSyncedValue("isInstantPhase", isInstantPhase); 8033 const rootDisabled = store2.useState("disabled"); 8034 const disabled2 = disabledProp ?? rootDisabled; 8035 const disabledRef = useValueAsRef(disabled2); 8036 const trackCursorAxis = store2.useState("trackCursorAxis"); 8037 const disableHoverablePopup = store2.useState("disableHoverablePopup"); 8038 const isNestedTriggerHoveredRef = React38.useRef(false); 8039 const nestedTriggerOpenTimeout = useTimeout(); 8040 const pointerTypeRef = React38.useRef(void 0); 8041 function getOpenDelay() { 8042 const providerDelay = providerContext?.delay; 8043 const groupOpenValue = typeof delayRef.current === "object" ? delayRef.current.open : void 0; 8044 let computedOpenDelay = delayWithDefault; 8045 if (hasProvider) { 8046 if (groupOpenValue !== 0) { 8047 computedOpenDelay = delay ?? providerDelay ?? delayWithDefault; 8048 } else { 8049 computedOpenDelay = 0; 8050 } 8051 } 8052 return computedOpenDelay; 8053 } 8054 function isEnabledNestedTriggerTarget(target) { 8055 const triggerEl = triggerElementRef.current; 8056 if (!triggerEl || !target) { 8057 return false; 8058 } 8059 const nearestTrigger = closestEnabledTooltipTrigger(target); 8060 return nearestTrigger !== null && nearestTrigger !== triggerEl && contains(triggerEl, nearestTrigger); 8061 } 8062 function detectNestedTriggerHover(target) { 8063 const nestedTriggerHovered = isEnabledNestedTriggerTarget(target); 8064 isNestedTriggerHoveredRef.current = nestedTriggerHovered; 8065 if (nestedTriggerHovered) { 8066 hoverInteraction.openChangeTimeout.clear(); 8067 hoverInteraction.restTimeout.clear(); 8068 hoverInteraction.restTimeoutPending = false; 8069 nestedTriggerOpenTimeout.clear(); 8070 } 8071 return nestedTriggerHovered; 8072 } 8073 const hoverProps = useHoverReferenceInteraction(floatingRootContext, { 8074 enabled: !disabled2, 8075 mouseOnly: true, 8076 move: false, 8077 handleClose: !disableHoverablePopup && trackCursorAxis !== "both" ? safePolygon() : null, 8078 restMs: getOpenDelay, 8079 delay() { 8080 const closeValue = typeof delayRef.current === "object" ? delayRef.current.close : void 0; 8081 let computedCloseDelay = closeDelayWithDefault; 8082 if (closeDelay == null && hasProvider) { 8083 computedCloseDelay = closeValue; 8084 } 8085 return { 8086 close: computedCloseDelay 8087 }; 8088 }, 8089 triggerElementRef, 8090 isActiveTrigger: isTriggerActive, 8091 isClosing: () => store2.select("transitionStatus") === "ending", 8092 shouldOpen() { 8093 return !isNestedTriggerHoveredRef.current; 8094 } 8095 }); 8096 const focusProps = useFocus(floatingRootContext, { 8097 enabled: !disabled2 8098 }).reference; 8099 const handleNestedTriggerHover = (event) => { 8100 const wasNestedTriggerHovered = isNestedTriggerHoveredRef.current; 8101 const target = getTargetElement(event); 8102 const nestedTriggerHovered = detectNestedTriggerHover(target); 8103 const triggerEl = triggerElementRef.current; 8104 const targetInsideTrigger = triggerEl && target && contains(triggerEl, target); 8105 if (nestedTriggerHovered && store2.select("open") && store2.select("lastOpenChangeReason") === reason_parts_exports.triggerHover) { 8106 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 8107 return; 8108 } 8109 if (wasNestedTriggerHovered && !nestedTriggerHovered && targetInsideTrigger && !disabledRef.current && !store2.select("open") && triggerEl && // Match the hover hook's non-strict mouse fallback for mouse-only event sequences. 8110 isMouseLikePointerType(pointerTypeRef.current)) { 8111 const open = () => { 8112 if (!isNestedTriggerHoveredRef.current && !disabledRef.current && !store2.select("open")) { 8113 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerEl)); 8114 } 8115 }; 8116 const openDelay = getOpenDelay(); 8117 if (openDelay === 0) { 8118 nestedTriggerOpenTimeout.clear(); 8119 open(); 8120 } else { 8121 nestedTriggerOpenTimeout.start(openDelay, open); 8122 } 8123 } 8124 }; 8125 const rootTriggerProps = store2.useState("triggerProps", isMountedByThisTrigger); 8126 const shouldApplyRootTriggerProps = isMountedByThisTrigger || trackCursorAxis !== "none"; 8127 const state = { 8128 open: isOpenedByThisTrigger 8129 }; 8130 const element = useRenderElement("button", componentProps, { 8131 state, 8132 ref: [forwardedRef, registerTrigger, triggerElementRef], 8133 props: [hoverProps, focusProps, shouldApplyRootTriggerProps ? rootTriggerProps : void 0, { 8134 onMouseOver(event) { 8135 handleNestedTriggerHover(event.nativeEvent); 8136 }, 8137 onFocus(event) { 8138 if (isEnabledNestedTriggerTarget(getTargetElement(event.nativeEvent))) { 8139 event.preventBaseUIHandler(); 8140 } 8141 }, 8142 onMouseLeave() { 8143 isNestedTriggerHoveredRef.current = false; 8144 nestedTriggerOpenTimeout.clear(); 8145 pointerTypeRef.current = void 0; 8146 }, 8147 onPointerEnter(event) { 8148 pointerTypeRef.current = event.pointerType; 8149 }, 8150 onPointerDown(event) { 8151 pointerTypeRef.current = event.pointerType; 8152 store2.set("closeOnClick", closeOnClick); 8153 if (closeOnClick && !store2.select("open")) { 8154 store2.cancelPendingOpen(event.nativeEvent); 8155 } 8156 }, 8157 onClick(event) { 8158 if (closeOnClick && !store2.select("open")) { 8159 store2.cancelPendingOpen(event.nativeEvent); 8160 } 8161 }, 8162 id: thisTriggerId, 8163 [TooltipTriggerDataAttributes.triggerDisabled]: disabled2 ? "" : void 0, 8164 [TOOLTIP_TRIGGER_IDENTIFIER]: disabled2 ? void 0 : "" 8165 }, elementProps], 8166 stateAttributesMapping: triggerOpenStateMapping 8167 }); 8168 return element; 8169 }); 8170 if (true) TooltipTrigger.displayName = "TooltipTrigger"; 8171 8172 // node_modules/@base-ui/react/tooltip/portal/TooltipPortal.mjs 8173 var React40 = __toESM(require_react(), 1); 8174 8175 // node_modules/@base-ui/react/tooltip/portal/TooltipPortalContext.mjs 8176 var React39 = __toESM(require_react(), 1); 8177 var TooltipPortalContext = /* @__PURE__ */ React39.createContext(void 0); 8178 if (true) TooltipPortalContext.displayName = "TooltipPortalContext"; 8179 function useTooltipPortalContext() { 8180 const value = React39.useContext(TooltipPortalContext); 8181 if (value === void 0) { 8182 throw new Error(true ? "Base UI: <Tooltip.Portal> is missing." : formatErrorMessage_default(70)); 8183 } 8184 return value; 8185 } 8186 8187 // node_modules/@base-ui/react/tooltip/portal/TooltipPortal.mjs 8188 var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1); 8189 var TooltipPortal = /* @__PURE__ */ React40.forwardRef(function TooltipPortal2(props, forwardedRef) { 8190 const { 8191 keepMounted = false, 8192 ...portalProps 8193 } = props; 8194 const store2 = useTooltipRootContext(); 8195 const mounted = store2.useState("mounted"); 8196 const shouldRender = mounted || keepMounted; 8197 if (!shouldRender) { 8198 return null; 8199 } 8200 return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(TooltipPortalContext.Provider, { 8201 value: keepMounted, 8202 children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(FloatingPortalLite, { 8203 ref: forwardedRef, 8204 ...portalProps 8205 }) 8206 }); 8207 }); 8208 if (true) TooltipPortal.displayName = "TooltipPortal"; 8209 8210 // node_modules/@base-ui/react/tooltip/positioner/TooltipPositioner.mjs 8211 var React42 = __toESM(require_react(), 1); 8212 8213 // node_modules/@base-ui/react/tooltip/positioner/TooltipPositionerContext.mjs 8214 var React41 = __toESM(require_react(), 1); 8215 var TooltipPositionerContext = /* @__PURE__ */ React41.createContext(void 0); 8216 if (true) TooltipPositionerContext.displayName = "TooltipPositionerContext"; 8217 function useTooltipPositionerContext() { 8218 const context = React41.useContext(TooltipPositionerContext); 8219 if (context === void 0) { 8220 throw new Error(true ? "Base UI: TooltipPositionerContext is missing. TooltipPositioner parts must be placed within <Tooltip.Positioner>." : formatErrorMessage_default(71)); 8221 } 8222 return context; 8223 } 8224 8225 // node_modules/@base-ui/react/tooltip/positioner/TooltipPositioner.mjs 8226 var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1); 8227 var TooltipPositioner = /* @__PURE__ */ React42.forwardRef(function TooltipPositioner2(componentProps, forwardedRef) { 8228 const { 8229 render, 8230 className, 8231 anchor, 8232 positionMethod = "absolute", 8233 side = "top", 8234 align = "center", 8235 sideOffset = 0, 8236 alignOffset = 0, 8237 collisionBoundary = "clipping-ancestors", 8238 collisionPadding = 5, 8239 arrowPadding = 5, 8240 sticky = false, 8241 disableAnchorTracking = false, 8242 collisionAvoidance = POPUP_COLLISION_AVOIDANCE, 8243 style, 8244 ...elementProps 8245 } = componentProps; 8246 const store2 = useTooltipRootContext(); 8247 const keepMounted = useTooltipPortalContext(); 8248 const open = store2.useState("open"); 8249 const mounted = store2.useState("mounted"); 8250 const trackCursorAxis = store2.useState("trackCursorAxis"); 8251 const disableHoverablePopup = store2.useState("disableHoverablePopup"); 8252 const floatingRootContext = store2.useState("floatingRootContext"); 8253 const instantType = store2.useState("instantType"); 8254 const transitionStatus = store2.useState("transitionStatus"); 8255 const hasViewport = store2.useState("hasViewport"); 8256 const positioning = useAnchorPositioning({ 8257 anchor, 8258 positionMethod, 8259 floatingRootContext, 8260 mounted, 8261 side, 8262 sideOffset, 8263 align, 8264 alignOffset, 8265 collisionBoundary, 8266 collisionPadding, 8267 sticky, 8268 arrowPadding, 8269 disableAnchorTracking, 8270 keepMounted, 8271 collisionAvoidance, 8272 adaptiveOrigin: hasViewport ? adaptiveOrigin : void 0 8273 }); 8274 const state = React42.useMemo(() => ({ 8275 open, 8276 side: positioning.side, 8277 align: positioning.align, 8278 anchorHidden: positioning.anchorHidden, 8279 instant: trackCursorAxis !== "none" ? "tracking-cursor" : instantType 8280 }), [open, positioning.side, positioning.align, positioning.anchorHidden, trackCursorAxis, instantType]); 8281 const element = usePositioner(componentProps, state, { 8282 styles: positioning.positionerStyles, 8283 transitionStatus, 8284 props: elementProps, 8285 refs: [forwardedRef, store2.useStateSetter("positionerElement")], 8286 hidden: !mounted, 8287 inert: !open || trackCursorAxis === "both" || disableHoverablePopup 8288 }); 8289 return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TooltipPositionerContext.Provider, { 8290 value: positioning, 8291 children: element 8292 }); 8293 }); 8294 if (true) TooltipPositioner.displayName = "TooltipPositioner"; 8295 8296 // node_modules/@base-ui/react/tooltip/popup/TooltipPopup.mjs 8297 var React43 = __toESM(require_react(), 1); 8298 var stateAttributesMapping = { 8299 ...popupStateMapping, 8300 ...transitionStatusMapping 8301 }; 8302 var TooltipPopup = /* @__PURE__ */ React43.forwardRef(function TooltipPopup2(componentProps, forwardedRef) { 8303 const { 8304 render, 8305 className, 8306 style, 8307 ...elementProps 8308 } = componentProps; 8309 const store2 = useTooltipRootContext(); 8310 const { 8311 side, 8312 align 8313 } = useTooltipPositionerContext(); 8314 const open = store2.useState("open"); 8315 const instantType = store2.useState("instantType"); 8316 const transitionStatus = store2.useState("transitionStatus"); 8317 const popupProps = store2.useState("popupProps"); 8318 const floatingContext = store2.useState("floatingRootContext"); 8319 const disabled2 = store2.useState("disabled"); 8320 const closeDelay = store2.useState("closeDelay"); 8321 useOpenChangeComplete({ 8322 open, 8323 ref: store2.context.popupRef, 8324 onComplete() { 8325 if (open) { 8326 store2.context.onOpenChangeComplete?.(true); 8327 } 8328 } 8329 }); 8330 useHoverFloatingInteraction(floatingContext, { 8331 enabled: !disabled2, 8332 closeDelay 8333 }); 8334 const setPopupElement = store2.useStateSetter("popupElement"); 8335 const state = { 8336 open, 8337 side, 8338 align, 8339 instant: instantType, 8340 transitionStatus 8341 }; 8342 const element = useRenderElement("div", componentProps, { 8343 state, 8344 ref: [forwardedRef, store2.context.popupRef, setPopupElement], 8345 props: [popupProps, getDisabledMountTransitionStyles(transitionStatus), elementProps], 8346 stateAttributesMapping 8347 }); 8348 return element; 8349 }); 8350 if (true) TooltipPopup.displayName = "TooltipPopup"; 8351 8352 // node_modules/@base-ui/react/tooltip/arrow/TooltipArrow.mjs 8353 var React44 = __toESM(require_react(), 1); 8354 var TooltipArrow = /* @__PURE__ */ React44.forwardRef(function TooltipArrow2(componentProps, forwardedRef) { 8355 const { 8356 render, 8357 className, 8358 style, 8359 ...elementProps 8360 } = componentProps; 8361 const store2 = useTooltipRootContext(); 8362 const { 8363 arrowRef, 8364 side, 8365 align, 8366 arrowUncentered, 8367 arrowStyles 8368 } = useTooltipPositionerContext(); 8369 const open = store2.useState("open"); 8370 const instantType = store2.useState("instantType"); 8371 const state = { 8372 open, 8373 side, 8374 align, 8375 uncentered: arrowUncentered, 8376 instant: instantType 8377 }; 8378 const element = useRenderElement("div", componentProps, { 8379 state, 8380 ref: [forwardedRef, arrowRef], 8381 props: [{ 8382 style: arrowStyles, 8383 "aria-hidden": true 8384 }, elementProps], 8385 stateAttributesMapping: popupStateMapping 8386 }); 8387 return element; 8388 }); 8389 if (true) TooltipArrow.displayName = "TooltipArrow"; 8390 8391 // node_modules/@base-ui/react/tooltip/provider/TooltipProvider.mjs 8392 var React45 = __toESM(require_react(), 1); 8393 var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1); 8394 var TooltipProvider = function TooltipProvider2(props) { 8395 const { 8396 delay, 8397 closeDelay, 8398 timeout = 400 8399 } = props; 8400 const contextValue = React45.useMemo(() => ({ 8401 delay, 8402 closeDelay 8403 }), [delay, closeDelay]); 8404 const delayValue = React45.useMemo(() => ({ 8405 open: delay, 8406 close: closeDelay 8407 }), [delay, closeDelay]); 8408 return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TooltipProviderContext.Provider, { 8409 value: contextValue, 8410 children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FloatingDelayGroup, { 8411 delay: delayValue, 8412 timeoutMs: timeout, 8413 children: props.children 8414 }) 8415 }); 8416 }; 8417 if (true) TooltipProvider.displayName = "TooltipProvider"; 8418 8419 // node_modules/@base-ui/react/tooltip/viewport/TooltipViewport.mjs 8420 var React46 = __toESM(require_react(), 1); 8421 8422 // node_modules/@base-ui/react/tooltip/viewport/TooltipViewportCssVars.mjs 8423 var TooltipViewportCssVars = /* @__PURE__ */ (function(TooltipViewportCssVars2) { 8424 TooltipViewportCssVars2["popupWidth"] = "--popup-width"; 8425 TooltipViewportCssVars2["popupHeight"] = "--popup-height"; 8426 return TooltipViewportCssVars2; 8427 })({}); 8428 8429 // node_modules/@base-ui/react/tooltip/viewport/TooltipViewport.mjs 8430 var stateAttributesMapping2 = { 8431 activationDirection: (value) => value ? { 8432 "data-activation-direction": value 8433 } : null 8434 }; 8435 var TooltipViewport = /* @__PURE__ */ React46.forwardRef(function TooltipViewport2(componentProps, forwardedRef) { 8436 const { 8437 render, 8438 className, 8439 style, 8440 children, 8441 ...elementProps 8442 } = componentProps; 8443 const store2 = useTooltipRootContext(); 8444 const positioner = useTooltipPositionerContext(); 8445 const instantType = store2.useState("instantType"); 8446 const { 8447 children: childrenToRender, 8448 state: viewportState 8449 } = usePopupViewport({ 8450 store: store2, 8451 side: positioner.side, 8452 cssVars: TooltipViewportCssVars, 8453 children 8454 }); 8455 const state = { 8456 activationDirection: viewportState.activationDirection, 8457 transitioning: viewportState.transitioning, 8458 instant: instantType 8459 }; 8460 return useRenderElement("div", componentProps, { 8461 state, 8462 ref: forwardedRef, 8463 props: [elementProps, { 8464 children: childrenToRender 8465 }], 8466 stateAttributesMapping: stateAttributesMapping2 8467 }); 8468 }); 8469 if (true) TooltipViewport.displayName = "TooltipViewport"; 8470 8471 // node_modules/@base-ui/react/tooltip/store/TooltipHandle.mjs 8472 var TooltipHandle = class { 8473 /** 8474 * Internal store holding the tooltip state. 8475 * @internal 8476 */ 8477 constructor() { 8478 this.store = new TooltipStore(); 8479 } 8480 /** 8481 * Opens the tooltip and associates it with the trigger with the given ID. 8482 * The trigger must be a Tooltip.Trigger component with this handle passed as a prop. 8483 * 8484 * This method should only be called in an event handler or an effect (not during rendering). 8485 * 8486 * @param triggerId ID of the trigger to associate with the tooltip. 8487 */ 8488 open(triggerId) { 8489 const triggerElement = triggerId ? this.store.context.triggerElements.getById(triggerId) : void 0; 8490 if (triggerId && !triggerElement) { 8491 throw new Error(true ? `Base UI: TooltipHandle.open: No trigger found with id "$triggerId}".` : formatErrorMessage_default(81, triggerId)); 8492 } 8493 this.store.setOpen(true, createChangeEventDetails(reason_parts_exports.imperativeAction, void 0, triggerElement)); 8494 } 8495 /** 8496 * Closes the tooltip. 8497 */ 8498 close() { 8499 this.store.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction, void 0, void 0)); 8500 } 8501 /** 8502 * Indicates whether the tooltip is currently open. 8503 */ 8504 get isOpen() { 8505 return this.store.select("open"); 8506 } 8507 }; 8508 function createTooltipHandle() { 8509 return new TooltipHandle(); 8510 } 8511 8512 // node_modules/@base-ui/react/use-render/useRender.mjs 8513 function useRender(params) { 8514 return useRenderElement(params.defaultTagName ?? "div", params, params); 8515 } 8516 8517 // packages/icons/build-module/library/chevron-down.mjs 8518 var import_primitives = __toESM(require_primitives(), 1); 8519 var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1); 8520 var chevron_down_default = /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives.Path, { d: "M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z" }) }); 8521 8522 // packages/icons/build-module/library/chevron-left.mjs 8523 var import_primitives2 = __toESM(require_primitives(), 1); 8524 var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1); 8525 var chevron_left_default = /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives2.Path, { d: "M14.6 7l-1.2-1L8 12l5.4 6 1.2-1-4.6-5z" }) }); 8526 8527 // packages/icons/build-module/library/chevron-right.mjs 8528 var import_primitives3 = __toESM(require_primitives(), 1); 8529 var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1); 8530 var chevron_right_default = /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives3.Path, { d: "M10.6 6L9.4 7l4.6 5-4.6 5 1.2 1 5.4-6z" }) }); 8531 8532 // packages/icons/build-module/library/chevron-up.mjs 8533 var import_primitives4 = __toESM(require_primitives(), 1); 8534 var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1); 8535 var chevron_up_default = /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives4.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives4.Path, { d: "M6.5 12.4L12 8l5.5 4.4-.9 1.2L12 10l-4.5 3.6-1-1.2z" }) }); 8536 8537 // packages/icons/build-module/library/fullscreen.mjs 8538 var import_primitives5 = __toESM(require_primitives(), 1); 8539 var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1); 8540 var fullscreen_default = /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives5.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives5.Path, { d: "M6 4a2 2 0 0 0-2 2v3h1.5V6a.5.5 0 0 1 .5-.5h3V4H6Zm3 14.5H6a.5.5 0 0 1-.5-.5v-3H4v3a2 2 0 0 0 2 2h3v-1.5Zm6 1.5v-1.5h3a.5.5 0 0 0 .5-.5v-3H20v3a2 2 0 0 1-2 2h-3Zm3-16a2 2 0 0 1 2 2v3h-1.5V6a.5.5 0 0 0-.5-.5h-3V4h3Z" }) }); 8541 8542 // packages/ui/build-module/utils/render-slot-with-children.mjs 8543 var import_element10 = __toESM(require_element(), 1); 8544 function renderSlotWithChildren(slot, defaultSlot, children) { 8545 return (0, import_element10.cloneElement)(slot ?? defaultSlot, { children }); 8546 } 8547 8548 // packages/ui/build-module/utils/theme-provider.mjs 8549 var theme = __toESM(require_theme(), 1); 8550 8551 // packages/ui/build-module/lock-unlock.mjs 8552 var import_private_apis = __toESM(require_private_apis(), 1); 8553 var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( 8554 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", 8555 "@wordpress/ui" 8556 ); 8557 8558 // packages/ui/build-module/utils/theme-provider.mjs 8559 function getThemeProvider() { 8560 const themePackage = theme; 8561 if (themePackage.ThemeProvider) { 8562 return themePackage.ThemeProvider; 8563 } 8564 if (!themePackage.privateApis) { 8565 throw new Error( 8566 "@wordpress/ui: @wordpress/theme must expose `ThemeProvider` or `privateApis.ThemeProvider`." 8567 ); 8568 } 8569 return unlock( 8570 themePackage.privateApis 8571 ).ThemeProvider; 8572 } 8573 var ThemeProvider = getThemeProvider(); 8574 8575 // packages/ui/build-module/stack/stack.mjs 8576 var import_element11 = __toESM(require_element(), 1); 8577 var STYLE_HASH_ATTRIBUTE = "data-wp-hash"; 8578 function getRuntime() { 8579 const globalScope = globalThis; 8580 if (globalScope.__wpStyleRuntime) { 8581 return globalScope.__wpStyleRuntime; 8582 } 8583 globalScope.__wpStyleRuntime = { 8584 documents: /* @__PURE__ */ new Map(), 8585 styles: /* @__PURE__ */ new Map(), 8586 injectedStyles: /* @__PURE__ */ new WeakMap() 8587 }; 8588 if (typeof document !== "undefined") { 8589 registerDocument(document); 8590 } 8591 return globalScope.__wpStyleRuntime; 8592 } 8593 function documentContainsStyleHash(targetDocument, hash) { 8594 if (!targetDocument.head) { 8595 return false; 8596 } 8597 for (const style of targetDocument.head.querySelectorAll( 8598 `style[$STYLE_HASH_ATTRIBUTE}]` 8599 )) { 8600 if (style.getAttribute(STYLE_HASH_ATTRIBUTE) === hash) { 8601 return true; 8602 } 8603 } 8604 return false; 8605 } 8606 function injectStyle(targetDocument, hash, css) { 8607 if (!targetDocument.head) { 8608 return; 8609 } 8610 const runtime = getRuntime(); 8611 let injectedStyles = runtime.injectedStyles.get(targetDocument); 8612 if (!injectedStyles) { 8613 injectedStyles = /* @__PURE__ */ new Set(); 8614 runtime.injectedStyles.set(targetDocument, injectedStyles); 8615 } 8616 if (injectedStyles.has(hash)) { 8617 return; 8618 } 8619 if (documentContainsStyleHash(targetDocument, hash)) { 8620 injectedStyles.add(hash); 8621 return; 8622 } 8623 const style = targetDocument.createElement("style"); 8624 style.setAttribute(STYLE_HASH_ATTRIBUTE, hash); 8625 style.appendChild(targetDocument.createTextNode(css)); 8626 targetDocument.head.appendChild(style); 8627 injectedStyles.add(hash); 8628 } 8629 function registerDocument(targetDocument) { 8630 const runtime = getRuntime(); 8631 runtime.documents.set( 8632 targetDocument, 8633 (runtime.documents.get(targetDocument) ?? 0) + 1 8634 ); 8635 for (const [hash, css] of runtime.styles) { 8636 injectStyle(targetDocument, hash, css); 8637 } 8638 return () => { 8639 const count = runtime.documents.get(targetDocument); 8640 if (count === void 0) { 8641 return; 8642 } 8643 if (count <= 1) { 8644 runtime.documents.delete(targetDocument); 8645 return; 8646 } 8647 runtime.documents.set(targetDocument, count - 1); 8648 }; 8649 } 8650 function registerStyle(hash, css) { 8651 const runtime = getRuntime(); 8652 runtime.styles.set(hash, css); 8653 for (const targetDocument of runtime.documents.keys()) { 8654 injectStyle(targetDocument, hash, css); 8655 } 8656 } 8657 if (typeof process === "undefined" || true) { 8658 registerStyle("32aba35fe1", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._19ce0419607e1896__stack{display:flex}}}"); 8659 } 8660 var style_default = { "stack": "_19ce0419607e1896__stack" }; 8661 var gapTokens = { 8662 xs: "var(--wpds-dimension-gap-xs, 4px)", 8663 sm: "var(--wpds-dimension-gap-sm, 8px)", 8664 md: "var(--wpds-dimension-gap-md, 12px)", 8665 lg: "var(--wpds-dimension-gap-lg, 16px)", 8666 xl: "var(--wpds-dimension-gap-xl, 24px)", 8667 "2xl": "var(--wpds-dimension-gap-2xl, 32px)", 8668 "3xl": "var(--wpds-dimension-gap-3xl, 40px)" 8669 }; 8670 var Stack = (0, import_element11.forwardRef)(function Stack2({ direction, gap, align, justify, wrap, render, ...props }, ref) { 8671 const style = { 8672 gap: gap && gapTokens[gap], 8673 alignItems: align, 8674 justifyContent: justify, 8675 flexDirection: direction, 8676 flexWrap: wrap 8677 }; 8678 const element = useRender({ 8679 render, 8680 ref, 8681 props: mergeProps(props, { style, className: style_default.stack }) 8682 }); 8683 return element; 8684 }); 8685 8686 // packages/ui/build-module/tooltip/index.mjs 8687 var tooltip_exports = {}; 8688 __export(tooltip_exports, { 8689 Popup: () => Popup, 8690 Portal: () => Portal, 8691 Positioner: () => Positioner, 8692 Provider: () => Provider, 8693 Root: () => Root, 8694 Trigger: () => Trigger 8695 }); 8696 8697 // packages/ui/build-module/tooltip/popup.mjs 8698 var import_element14 = __toESM(require_element(), 1); 8699 8700 // packages/ui/build-module/tooltip/portal.mjs 8701 var import_element12 = __toESM(require_element(), 1); 8702 8703 // packages/ui/build-module/utils/wp-compat-overlay-slot.mjs 8704 var STYLE_HASH_ATTRIBUTE2 = "data-wp-hash"; 8705 function getRuntime2() { 8706 const globalScope = globalThis; 8707 if (globalScope.__wpStyleRuntime) { 8708 return globalScope.__wpStyleRuntime; 8709 } 8710 globalScope.__wpStyleRuntime = { 8711 documents: /* @__PURE__ */ new Map(), 8712 styles: /* @__PURE__ */ new Map(), 8713 injectedStyles: /* @__PURE__ */ new WeakMap() 8714 }; 8715 if (typeof document !== "undefined") { 8716 registerDocument2(document); 8717 } 8718 return globalScope.__wpStyleRuntime; 8719 } 8720 function documentContainsStyleHash2(targetDocument, hash) { 8721 if (!targetDocument.head) { 8722 return false; 8723 } 8724 for (const style of targetDocument.head.querySelectorAll( 8725 `style[$STYLE_HASH_ATTRIBUTE2}]` 8726 )) { 8727 if (style.getAttribute(STYLE_HASH_ATTRIBUTE2) === hash) { 8728 return true; 8729 } 8730 } 8731 return false; 8732 } 8733 function injectStyle2(targetDocument, hash, css) { 8734 if (!targetDocument.head) { 8735 return; 8736 } 8737 const runtime = getRuntime2(); 8738 let injectedStyles = runtime.injectedStyles.get(targetDocument); 8739 if (!injectedStyles) { 8740 injectedStyles = /* @__PURE__ */ new Set(); 8741 runtime.injectedStyles.set(targetDocument, injectedStyles); 8742 } 8743 if (injectedStyles.has(hash)) { 8744 return; 8745 } 8746 if (documentContainsStyleHash2(targetDocument, hash)) { 8747 injectedStyles.add(hash); 8748 return; 8749 } 8750 const style = targetDocument.createElement("style"); 8751 style.setAttribute(STYLE_HASH_ATTRIBUTE2, hash); 8752 style.appendChild(targetDocument.createTextNode(css)); 8753 targetDocument.head.appendChild(style); 8754 injectedStyles.add(hash); 8755 } 8756 function registerDocument2(targetDocument) { 8757 const runtime = getRuntime2(); 8758 runtime.documents.set( 8759 targetDocument, 8760 (runtime.documents.get(targetDocument) ?? 0) + 1 8761 ); 8762 for (const [hash, css] of runtime.styles) { 8763 injectStyle2(targetDocument, hash, css); 8764 } 8765 return () => { 8766 const count = runtime.documents.get(targetDocument); 8767 if (count === void 0) { 8768 return; 8769 } 8770 if (count <= 1) { 8771 runtime.documents.delete(targetDocument); 8772 return; 8773 } 8774 runtime.documents.set(targetDocument, count - 1); 8775 }; 8776 } 8777 function registerStyle2(hash, css) { 8778 const runtime = getRuntime2(); 8779 runtime.styles.set(hash, css); 8780 for (const targetDocument of runtime.documents.keys()) { 8781 injectStyle2(targetDocument, hash, css); 8782 } 8783 } 8784 if (typeof process === "undefined" || true) { 8785 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}}}"); 8786 } 8787 var wp_compat_overlay_slot_default = { "slot": "_11fc52b637ff8a7e__slot" }; 8788 var WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE = "data-wp-compat-overlay-slot"; 8789 function resolveOwnerDocument() { 8790 return typeof document === "undefined" ? null : document; 8791 } 8792 function isInWordPressEnvironment() { 8793 let topWp; 8794 try { 8795 topWp = window.top?.wp; 8796 } catch { 8797 } 8798 const wp = topWp ?? window.wp; 8799 return typeof wp?.components === "object" && wp.components !== null; 8800 } 8801 var cachedSlot = null; 8802 function ensureSlotIsAccessible(element) { 8803 element.setAttribute("aria-hidden", "false"); 8804 return element; 8805 } 8806 function createSlot(ownerDocument2) { 8807 const element = ownerDocument2.createElement("div"); 8808 element.setAttribute(WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE, ""); 8809 if (wp_compat_overlay_slot_default.slot) { 8810 element.classList.add(wp_compat_overlay_slot_default.slot); 8811 } 8812 ownerDocument2.body.appendChild(element); 8813 return element; 8814 } 8815 function getWpCompatOverlaySlot() { 8816 if (typeof window === "undefined") { 8817 return void 0; 8818 } 8819 if (!isInWordPressEnvironment() && window.__wpUiCompatOverlaySlotEnabled !== true) { 8820 return void 0; 8821 } 8822 const ownerDocument2 = resolveOwnerDocument(); 8823 if (!ownerDocument2 || !ownerDocument2.body) { 8824 return void 0; 8825 } 8826 if (cachedSlot && cachedSlot.ownerDocument === ownerDocument2 && cachedSlot.isConnected) { 8827 return ensureSlotIsAccessible(cachedSlot); 8828 } 8829 const existing = ownerDocument2.querySelector( 8830 `[$WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE}]` 8831 ); 8832 if (existing instanceof HTMLDivElement) { 8833 cachedSlot = ensureSlotIsAccessible(existing); 8834 return cachedSlot; 8835 } 8836 if (cachedSlot?.isConnected) { 8837 cachedSlot.remove(); 8838 } 8839 cachedSlot = ensureSlotIsAccessible(createSlot(ownerDocument2)); 8840 return cachedSlot; 8841 } 8842 8843 // packages/ui/build-module/tooltip/portal.mjs 8844 var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1); 8845 var Portal = (0, import_element12.forwardRef)( 8846 function TooltipPortal3({ container, ...restProps }, ref) { 8847 return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)( 8848 index_parts_exports.Portal, 8849 { 8850 container: container ?? getWpCompatOverlaySlot(), 8851 ...restProps, 8852 ref 8853 } 8854 ); 8855 } 8856 ); 8857 8858 // packages/ui/build-module/tooltip/positioner.mjs 8859 var import_element13 = __toESM(require_element(), 1); 8860 var import_jsx_runtime17 = __toESM(require_jsx_runtime(), 1); 8861 var STYLE_HASH_ATTRIBUTE3 = "data-wp-hash"; 8862 function getRuntime3() { 8863 const globalScope = globalThis; 8864 if (globalScope.__wpStyleRuntime) { 8865 return globalScope.__wpStyleRuntime; 8866 } 8867 globalScope.__wpStyleRuntime = { 8868 documents: /* @__PURE__ */ new Map(), 8869 styles: /* @__PURE__ */ new Map(), 8870 injectedStyles: /* @__PURE__ */ new WeakMap() 8871 }; 8872 if (typeof document !== "undefined") { 8873 registerDocument3(document); 8874 } 8875 return globalScope.__wpStyleRuntime; 8876 } 8877 function documentContainsStyleHash3(targetDocument, hash) { 8878 if (!targetDocument.head) { 8879 return false; 8880 } 8881 for (const style of targetDocument.head.querySelectorAll( 8882 `style[$STYLE_HASH_ATTRIBUTE3}]` 8883 )) { 8884 if (style.getAttribute(STYLE_HASH_ATTRIBUTE3) === hash) { 8885 return true; 8886 } 8887 } 8888 return false; 8889 } 8890 function injectStyle3(targetDocument, hash, css) { 8891 if (!targetDocument.head) { 8892 return; 8893 } 8894 const runtime = getRuntime3(); 8895 let injectedStyles = runtime.injectedStyles.get(targetDocument); 8896 if (!injectedStyles) { 8897 injectedStyles = /* @__PURE__ */ new Set(); 8898 runtime.injectedStyles.set(targetDocument, injectedStyles); 8899 } 8900 if (injectedStyles.has(hash)) { 8901 return; 8902 } 8903 if (documentContainsStyleHash3(targetDocument, hash)) { 8904 injectedStyles.add(hash); 8905 return; 8906 } 8907 const style = targetDocument.createElement("style"); 8908 style.setAttribute(STYLE_HASH_ATTRIBUTE3, hash); 8909 style.appendChild(targetDocument.createTextNode(css)); 8910 targetDocument.head.appendChild(style); 8911 injectedStyles.add(hash); 8912 } 8913 function registerDocument3(targetDocument) { 8914 const runtime = getRuntime3(); 8915 runtime.documents.set( 8916 targetDocument, 8917 (runtime.documents.get(targetDocument) ?? 0) + 1 8918 ); 8919 for (const [hash, css] of runtime.styles) { 8920 injectStyle3(targetDocument, hash, css); 8921 } 8922 return () => { 8923 const count = runtime.documents.get(targetDocument); 8924 if (count === void 0) { 8925 return; 8926 } 8927 if (count <= 1) { 8928 runtime.documents.delete(targetDocument); 8929 return; 8930 } 8931 runtime.documents.set(targetDocument, count - 1); 8932 }; 8933 } 8934 function registerStyle3(hash, css) { 8935 const runtime = getRuntime3(); 8936 runtime.styles.set(hash, css); 8937 for (const targetDocument of runtime.documents.keys()) { 8938 injectStyle3(targetDocument, hash, css); 8939 } 8940 } 8941 if (typeof process === "undefined" || true) { 8942 registerStyle3("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); 8943 } 8944 var resets_default = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; 8945 if (typeof process === "undefined" || true) { 8946 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}}}}'); 8947 } 8948 var style_default2 = { "positioner": "_480b748dd3510e64__positioner", "popup": "_50096b232db7709d__popup" }; 8949 var Positioner = (0, import_element13.forwardRef)( 8950 function TooltipPositioner3({ align = "center", className, side = "top", sideOffset = 4, ...props }, ref) { 8951 return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)( 8952 index_parts_exports.Positioner, 8953 { 8954 ref, 8955 align, 8956 side, 8957 sideOffset, 8958 ...props, 8959 className: clsx_default( 8960 resets_default["box-sizing"], 8961 style_default2.positioner, 8962 className 8963 ) 8964 } 8965 ); 8966 } 8967 ); 8968 8969 // packages/ui/build-module/tooltip/popup.mjs 8970 var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1); 8971 var STYLE_HASH_ATTRIBUTE4 = "data-wp-hash"; 8972 function getRuntime4() { 8973 const globalScope = globalThis; 8974 if (globalScope.__wpStyleRuntime) { 8975 return globalScope.__wpStyleRuntime; 8976 } 8977 globalScope.__wpStyleRuntime = { 8978 documents: /* @__PURE__ */ new Map(), 8979 styles: /* @__PURE__ */ new Map(), 8980 injectedStyles: /* @__PURE__ */ new WeakMap() 8981 }; 8982 if (typeof document !== "undefined") { 8983 registerDocument4(document); 8984 } 8985 return globalScope.__wpStyleRuntime; 8986 } 8987 function documentContainsStyleHash4(targetDocument, hash) { 8988 if (!targetDocument.head) { 8989 return false; 8990 } 8991 for (const style of targetDocument.head.querySelectorAll( 8992 `style[$STYLE_HASH_ATTRIBUTE4}]` 8993 )) { 8994 if (style.getAttribute(STYLE_HASH_ATTRIBUTE4) === hash) { 8995 return true; 8996 } 8997 } 8998 return false; 8999 } 9000 function injectStyle4(targetDocument, hash, css) { 9001 if (!targetDocument.head) { 9002 return; 9003 } 9004 const runtime = getRuntime4(); 9005 let injectedStyles = runtime.injectedStyles.get(targetDocument); 9006 if (!injectedStyles) { 9007 injectedStyles = /* @__PURE__ */ new Set(); 9008 runtime.injectedStyles.set(targetDocument, injectedStyles); 9009 } 9010 if (injectedStyles.has(hash)) { 9011 return; 9012 } 9013 if (documentContainsStyleHash4(targetDocument, hash)) { 9014 injectedStyles.add(hash); 9015 return; 9016 } 9017 const style = targetDocument.createElement("style"); 9018 style.setAttribute(STYLE_HASH_ATTRIBUTE4, hash); 9019 style.appendChild(targetDocument.createTextNode(css)); 9020 targetDocument.head.appendChild(style); 9021 injectedStyles.add(hash); 9022 } 9023 function registerDocument4(targetDocument) { 9024 const runtime = getRuntime4(); 9025 runtime.documents.set( 9026 targetDocument, 9027 (runtime.documents.get(targetDocument) ?? 0) + 1 9028 ); 9029 for (const [hash, css] of runtime.styles) { 9030 injectStyle4(targetDocument, hash, css); 9031 } 9032 return () => { 9033 const count = runtime.documents.get(targetDocument); 9034 if (count === void 0) { 9035 return; 9036 } 9037 if (count <= 1) { 9038 runtime.documents.delete(targetDocument); 9039 return; 9040 } 9041 runtime.documents.set(targetDocument, count - 1); 9042 }; 9043 } 9044 function registerStyle4(hash, css) { 9045 const runtime = getRuntime4(); 9046 runtime.styles.set(hash, css); 9047 for (const targetDocument of runtime.documents.keys()) { 9048 injectStyle4(targetDocument, hash, css); 9049 } 9050 } 9051 if (typeof process === "undefined" || true) { 9052 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}}}}'); 9053 } 9054 var style_default3 = { "positioner": "_480b748dd3510e64__positioner", "popup": "_50096b232db7709d__popup" }; 9055 var POPUP_COLOR = { background: "#1e1e1e" }; 9056 var Popup = (0, import_element14.forwardRef)(function TooltipPopup3({ portal, positioner, children, className, ...props }, ref) { 9057 const popupContent = /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(ThemeProvider, { color: POPUP_COLOR, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)( 9058 index_parts_exports.Popup, 9059 { 9060 ref, 9061 className: clsx_default(style_default3.popup, className), 9062 ...props, 9063 children 9064 } 9065 ) }); 9066 const positionedPopup = renderSlotWithChildren( 9067 positioner, 9068 /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Positioner, {}), 9069 popupContent 9070 ); 9071 return renderSlotWithChildren(portal, /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Portal, {}), positionedPopup); 9072 }); 9073 9074 // packages/ui/build-module/tooltip/trigger.mjs 9075 var import_element15 = __toESM(require_element(), 1); 9076 var import_jsx_runtime19 = __toESM(require_jsx_runtime(), 1); 9077 var Trigger = (0, import_element15.forwardRef)( 9078 function TooltipTrigger3(props, ref) { 9079 return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(index_parts_exports.Trigger, { ref, ...props }); 9080 } 9081 ); 9082 9083 // packages/ui/build-module/tooltip/root.mjs 9084 var import_jsx_runtime20 = __toESM(require_jsx_runtime(), 1); 9085 function Root(props) { 9086 return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(index_parts_exports.Root, { ...props }); 9087 } 9088 9089 // packages/ui/build-module/tooltip/provider.mjs 9090 var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1); 9091 function Provider({ ...props }) { 9092 return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(index_parts_exports.Provider, { ...props }); 9093 } 9094 9095 // packages/ui/build-module/visually-hidden/visually-hidden.mjs 9096 var import_element16 = __toESM(require_element(), 1); 9097 var STYLE_HASH_ATTRIBUTE5 = "data-wp-hash"; 9098 function getRuntime5() { 9099 const globalScope = globalThis; 9100 if (globalScope.__wpStyleRuntime) { 9101 return globalScope.__wpStyleRuntime; 9102 } 9103 globalScope.__wpStyleRuntime = { 9104 documents: /* @__PURE__ */ new Map(), 9105 styles: /* @__PURE__ */ new Map(), 9106 injectedStyles: /* @__PURE__ */ new WeakMap() 9107 }; 9108 if (typeof document !== "undefined") { 9109 registerDocument5(document); 9110 } 9111 return globalScope.__wpStyleRuntime; 9112 } 9113 function documentContainsStyleHash5(targetDocument, hash) { 9114 if (!targetDocument.head) { 9115 return false; 9116 } 9117 for (const style of targetDocument.head.querySelectorAll( 9118 `style[$STYLE_HASH_ATTRIBUTE5}]` 9119 )) { 9120 if (style.getAttribute(STYLE_HASH_ATTRIBUTE5) === hash) { 9121 return true; 9122 } 9123 } 9124 return false; 9125 } 9126 function injectStyle5(targetDocument, hash, css) { 9127 if (!targetDocument.head) { 9128 return; 9129 } 9130 const runtime = getRuntime5(); 9131 let injectedStyles = runtime.injectedStyles.get(targetDocument); 9132 if (!injectedStyles) { 9133 injectedStyles = /* @__PURE__ */ new Set(); 9134 runtime.injectedStyles.set(targetDocument, injectedStyles); 9135 } 9136 if (injectedStyles.has(hash)) { 9137 return; 9138 } 9139 if (documentContainsStyleHash5(targetDocument, hash)) { 9140 injectedStyles.add(hash); 9141 return; 9142 } 9143 const style = targetDocument.createElement("style"); 9144 style.setAttribute(STYLE_HASH_ATTRIBUTE5, hash); 9145 style.appendChild(targetDocument.createTextNode(css)); 9146 targetDocument.head.appendChild(style); 9147 injectedStyles.add(hash); 9148 } 9149 function registerDocument5(targetDocument) { 9150 const runtime = getRuntime5(); 9151 runtime.documents.set( 9152 targetDocument, 9153 (runtime.documents.get(targetDocument) ?? 0) + 1 9154 ); 9155 for (const [hash, css] of runtime.styles) { 9156 injectStyle5(targetDocument, hash, css); 9157 } 9158 return () => { 9159 const count = runtime.documents.get(targetDocument); 9160 if (count === void 0) { 9161 return; 9162 } 9163 if (count <= 1) { 9164 runtime.documents.delete(targetDocument); 9165 return; 9166 } 9167 runtime.documents.set(targetDocument, count - 1); 9168 }; 9169 } 9170 function registerStyle5(hash, css) { 9171 const runtime = getRuntime5(); 9172 runtime.styles.set(hash, css); 9173 for (const targetDocument of runtime.documents.keys()) { 9174 injectStyle5(targetDocument, hash, css); 9175 } 9176 } 9177 if (typeof process === "undefined" || true) { 9178 registerStyle5("fa606a57ae", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.f37b9e2e191ebd66__visually-hidden{word-wrap:normal;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal}}}"); 9179 } 9180 var style_default4 = { "visually-hidden": "f37b9e2e191ebd66__visually-hidden" }; 9181 var VisuallyHidden = (0, import_element16.forwardRef)( 9182 function VisuallyHidden2({ render, ...restProps }, ref) { 9183 const element = useRender({ 9184 render, 9185 ref, 9186 props: mergeProps( 9187 { className: style_default4["visually-hidden"] }, 9188 restProps, 9189 { 9190 // @ts-expect-error Arbitrary data-* attributes aren't indexable on the typed div props. Kept hardcoded so consumers can't change or remove it. 9191 "data-visually-hidden": "" 9192 } 9193 ) 9194 }); 9195 return element; 9196 } 9197 ); 9198 9199 // packages/admin-ui/build-module/navigable-region/index.mjs 9200 var import_element17 = __toESM(require_element(), 1); 9201 var import_jsx_runtime22 = __toESM(require_jsx_runtime(), 1); 9202 var NavigableRegion = (0, import_element17.forwardRef)( 9203 ({ children, className, ariaLabel, as: Tag = "div", ...props }, ref) => { 9204 return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)( 9205 Tag, 9206 { 9207 ref, 9208 className: clsx_default("admin-ui-navigable-region", className), 9209 "aria-label": ariaLabel, 9210 role: "region", 9211 tabIndex: "-1", 9212 ...props, 9213 children 9214 } 9215 ); 9216 } 9217 ); 9218 NavigableRegion.displayName = "NavigableRegion"; 9219 var navigable_region_default = NavigableRegion; 9220 9221 // packages/edit-post/build-module/components/layout/index.mjs 9222 var import_editor17 = __toESM(require_editor(), 1); 9223 var import_data24 = __toESM(require_data(), 1); 9224 var import_block_editor2 = __toESM(require_block_editor(), 1); 9225 9226 // packages/global-styles-engine/build-module/utils/common.mjs 9227 var import_style_engine = __toESM(require_style_engine(), 1); 9228 var ROOT_BLOCK_SELECTOR = "body"; 9229 var ROOT_CSS_PROPERTIES_SELECTOR = ":root"; 9230 9231 // packages/global-styles-engine/build-module/core/render.mjs 9232 var import_blocks = __toESM(require_blocks(), 1); 9233 var import_style_engine2 = __toESM(require_style_engine(), 1); 9234 var import_data = __toESM(require_data(), 1); 9235 9236 // packages/global-styles-engine/build-module/utils/spacing.mjs 9237 function getSpacingPresetCssVar(value) { 9238 if (!value) { 9239 return; 9240 } 9241 const slug = value.match(/var:preset\|spacing\|(.+)/); 9242 if (!slug) { 9243 return value; 9244 } 9245 return `var(--wp--preset--spacing--$slug[1]})`; 9246 } 9247 9248 // packages/global-styles-engine/build-module/utils/gap.mjs 9249 function getGapBoxControlValueFromStyle(blockGapValue) { 9250 if (!blockGapValue) { 9251 return null; 9252 } 9253 const isValueString = typeof blockGapValue === "string"; 9254 return { 9255 top: isValueString ? blockGapValue : blockGapValue?.top, 9256 left: isValueString ? blockGapValue : blockGapValue?.left 9257 }; 9258 } 9259 function getGapCSSValue(blockGapValue, defaultValue = "0") { 9260 const blockGapBoxControlValue = getGapBoxControlValueFromStyle(blockGapValue); 9261 if (!blockGapBoxControlValue) { 9262 return null; 9263 } 9264 const row = getSpacingPresetCssVar(blockGapBoxControlValue?.top) || defaultValue; 9265 const column = getSpacingPresetCssVar(blockGapBoxControlValue?.left) || defaultValue; 9266 return row === column ? row : `$row} $column}`; 9267 } 9268 9269 // packages/global-styles-engine/build-module/utils/layout.mjs 9270 var LAYOUT_DEFINITIONS = { 9271 default: { 9272 name: "default", 9273 slug: "flow", 9274 className: "is-layout-flow", 9275 baseStyles: [ 9276 { 9277 selector: " > .alignleft", 9278 rules: { 9279 float: "left", 9280 "margin-inline-start": "0", 9281 "margin-inline-end": "2em" 9282 } 9283 }, 9284 { 9285 selector: " > .alignright", 9286 rules: { 9287 float: "right", 9288 "margin-inline-start": "2em", 9289 "margin-inline-end": "0" 9290 } 9291 }, 9292 { 9293 selector: " > .aligncenter", 9294 rules: { 9295 "margin-left": "auto !important", 9296 "margin-right": "auto !important" 9297 } 9298 } 9299 ], 9300 spacingStyles: [ 9301 { 9302 selector: " > :first-child", 9303 rules: { 9304 "margin-block-start": "0" 9305 } 9306 }, 9307 { 9308 selector: " > :last-child", 9309 rules: { 9310 "margin-block-end": "0" 9311 } 9312 }, 9313 { 9314 selector: " > *", 9315 rules: { 9316 "margin-block-start": null, 9317 "margin-block-end": "0" 9318 } 9319 } 9320 ] 9321 }, 9322 constrained: { 9323 name: "constrained", 9324 slug: "constrained", 9325 className: "is-layout-constrained", 9326 baseStyles: [ 9327 { 9328 selector: " > .alignleft", 9329 rules: { 9330 float: "left", 9331 "margin-inline-start": "0", 9332 "margin-inline-end": "2em" 9333 } 9334 }, 9335 { 9336 selector: " > .alignright", 9337 rules: { 9338 float: "right", 9339 "margin-inline-start": "2em", 9340 "margin-inline-end": "0" 9341 } 9342 }, 9343 { 9344 selector: " > .aligncenter", 9345 rules: { 9346 "margin-left": "auto !important", 9347 "margin-right": "auto !important" 9348 } 9349 }, 9350 { 9351 selector: " > :where(:not(.alignleft):not(.alignright):not(.alignfull))", 9352 rules: { 9353 "max-width": "var(--wp--style--global--content-size)", 9354 "margin-left": "auto !important", 9355 "margin-right": "auto !important" 9356 } 9357 }, 9358 { 9359 selector: " > .alignwide", 9360 rules: { 9361 "max-width": "var(--wp--style--global--wide-size)" 9362 } 9363 } 9364 ], 9365 spacingStyles: [ 9366 { 9367 selector: " > :first-child", 9368 rules: { 9369 "margin-block-start": "0" 9370 } 9371 }, 9372 { 9373 selector: " > :last-child", 9374 rules: { 9375 "margin-block-end": "0" 9376 } 9377 }, 9378 { 9379 selector: " > *", 9380 rules: { 9381 "margin-block-start": null, 9382 "margin-block-end": "0" 9383 } 9384 } 9385 ] 9386 }, 9387 flex: { 9388 name: "flex", 9389 slug: "flex", 9390 className: "is-layout-flex", 9391 displayMode: "flex", 9392 baseStyles: [ 9393 { 9394 selector: "", 9395 rules: { 9396 "flex-wrap": "wrap", 9397 "align-items": "center" 9398 } 9399 }, 9400 { 9401 selector: " > :is(*, div)", 9402 // :is(*, div) instead of just * increases the specificity by 001. 9403 rules: { 9404 margin: "0" 9405 } 9406 } 9407 ], 9408 spacingStyles: [ 9409 { 9410 selector: "", 9411 rules: { 9412 gap: null 9413 } 9414 } 9415 ] 9416 }, 9417 grid: { 9418 name: "grid", 9419 slug: "grid", 9420 className: "is-layout-grid", 9421 displayMode: "grid", 9422 baseStyles: [ 9423 { 9424 selector: " > :is(*, div)", 9425 // :is(*, div) instead of just * increases the specificity by 001. 9426 rules: { 9427 margin: "0" 9428 } 9429 } 9430 ], 9431 spacingStyles: [ 9432 { 9433 selector: "", 9434 rules: { 9435 gap: null 9436 } 9437 } 9438 ] 9439 } 9440 }; 9441 9442 // packages/global-styles-engine/build-module/core/render.mjs 9443 function getLayoutStyles({ 9444 layoutDefinitions = LAYOUT_DEFINITIONS, 9445 style, 9446 selector, 9447 hasBlockGapSupport, 9448 hasFallbackGapSupport, 9449 fallbackGapValue 9450 }) { 9451 let ruleset = ""; 9452 let gapValue = hasBlockGapSupport ? getGapCSSValue(style?.spacing?.blockGap) : ""; 9453 if (hasFallbackGapSupport) { 9454 if (selector === ROOT_BLOCK_SELECTOR) { 9455 gapValue = !gapValue ? "0.5em" : gapValue; 9456 } else if (!hasBlockGapSupport && fallbackGapValue) { 9457 gapValue = fallbackGapValue; 9458 } 9459 } 9460 if (gapValue && layoutDefinitions) { 9461 Object.values(layoutDefinitions).forEach( 9462 ({ className, name, spacingStyles }) => { 9463 if (!hasBlockGapSupport && "flex" !== name && "grid" !== name) { 9464 return; 9465 } 9466 if (spacingStyles?.length) { 9467 spacingStyles.forEach((spacingStyle) => { 9468 const declarations = []; 9469 if (spacingStyle.rules) { 9470 Object.entries(spacingStyle.rules).forEach( 9471 ([cssProperty, cssValue]) => { 9472 declarations.push( 9473 `$cssProperty}: $cssValue ? cssValue : gapValue}` 9474 ); 9475 } 9476 ); 9477 } 9478 if (declarations.length) { 9479 let combinedSelector = ""; 9480 if (!hasBlockGapSupport) { 9481 combinedSelector = selector === ROOT_BLOCK_SELECTOR ? `:where(.$className}$spacingStyle?.selector || ""})` : `:where($selector}.$className}$spacingStyle?.selector || ""})`; 9482 } else { 9483 combinedSelector = selector === ROOT_BLOCK_SELECTOR ? `:root :where(.$className})$spacingStyle?.selector || ""}` : `:root :where($selector}-$className})$spacingStyle?.selector || ""}`; 9484 } 9485 ruleset += `$combinedSelector} { $declarations.join( 9486 "; " 9487 )}; }`; 9488 } 9489 }); 9490 } 9491 } 9492 ); 9493 if (selector === ROOT_BLOCK_SELECTOR && hasBlockGapSupport) { 9494 ruleset += `$ROOT_CSS_PROPERTIES_SELECTOR} { --wp--style--block-gap: $gapValue}; }`; 9495 } 9496 } 9497 if (selector === ROOT_BLOCK_SELECTOR && layoutDefinitions) { 9498 const validDisplayModes = ["block", "flex", "grid"]; 9499 Object.values(layoutDefinitions).forEach( 9500 ({ className, displayMode, baseStyles }) => { 9501 if (displayMode && validDisplayModes.includes(displayMode)) { 9502 ruleset += `$selector} .$className} { display:$displayMode}; }`; 9503 } 9504 if (baseStyles?.length) { 9505 baseStyles.forEach((baseStyle) => { 9506 const declarations = []; 9507 if (baseStyle.rules) { 9508 Object.entries(baseStyle.rules).forEach( 9509 ([cssProperty, cssValue]) => { 9510 declarations.push( 9511 `$cssProperty}: $cssValue}` 9512 ); 9513 } 9514 ); 9515 } 9516 if (declarations.length) { 9517 const combinedSelector = `.$className}$baseStyle?.selector || ""}`; 9518 ruleset += `$combinedSelector} { $declarations.join( 9519 "; " 9520 )}; }`; 9521 } 9522 }); 9523 } 9524 } 9525 ); 9526 } 9527 return ruleset; 9528 } 9529 9530 // packages/edit-post/build-module/components/layout/index.mjs 9531 var import_plugins = __toESM(require_plugins(), 1); 9532 var import_i18n14 = __toESM(require_i18n(), 1); 9533 var import_element28 = __toESM(require_element(), 1); 9534 var import_notices3 = __toESM(require_notices(), 1); 9535 var import_preferences10 = __toESM(require_preferences(), 1); 9536 var import_commands2 = __toESM(require_commands(), 1); 9537 var import_block_library = __toESM(require_block_library(), 1); 9538 var import_url5 = __toESM(require_url(), 1); 9539 var import_html_entities = __toESM(require_html_entities(), 1); 9540 var import_core_data8 = __toESM(require_core_data(), 1); 9541 var import_components9 = __toESM(require_components(), 1); 9542 var import_compose2 = __toESM(require_compose(), 1); 9543 9544 // packages/edit-post/build-module/components/back-button/index.mjs 9545 var import_editor2 = __toESM(require_editor(), 1); 9546 var import_components2 = __toESM(require_components(), 1); 9547 9548 // packages/edit-post/build-module/components/back-button/fullscreen-mode-close.mjs 9549 var import_data2 = __toESM(require_data(), 1); 9550 var import_components = __toESM(require_components(), 1); 9551 var import_i18n = __toESM(require_i18n(), 1); 9552 var import_url = __toESM(require_url(), 1); 9553 var import_editor = __toESM(require_editor(), 1); 9554 var import_core_data = __toESM(require_core_data(), 1); 9555 var import_jsx_runtime23 = __toESM(require_jsx_runtime(), 1); 9556 function FullscreenModeClose({ showTooltip, icon, href, initialPost }) { 9557 const postType = (0, import_data2.useSelect)( 9558 (select3) => { 9559 const { getCurrentPostType } = select3(import_editor.store); 9560 const { getPostType } = select3(import_core_data.store); 9561 return getPostType(initialPost?.type || getCurrentPostType()); 9562 }, 9563 [initialPost?.type] 9564 ); 9565 if (!postType) { 9566 return null; 9567 } 9568 const buttonHref = href ?? (0, import_url.addQueryArgs)("edit.php", { 9569 post_type: postType.slug 9570 }); 9571 const buttonLabel = postType?.labels?.view_items ?? (0, import_i18n.__)("Back"); 9572 return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)( 9573 import_components.Button, 9574 { 9575 size: "compact", 9576 href: buttonHref, 9577 label: buttonLabel, 9578 showTooltip, 9579 tooltipPosition: "bottom", 9580 icon: icon ?? ((0, import_i18n.isRTL)() ? chevron_right_default : chevron_left_default) 9581 } 9582 ); 9583 } 9584 var fullscreen_mode_close_default = FullscreenModeClose; 9585 9586 // packages/edit-post/build-module/lock-unlock.mjs 9587 var import_private_apis2 = __toESM(require_private_apis(), 1); 9588 var { lock: lock2, unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( 9589 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", 9590 "@wordpress/edit-post" 9591 ); 9592 9593 // packages/edit-post/build-module/components/back-button/index.mjs 9594 var import_jsx_runtime24 = __toESM(require_jsx_runtime(), 1); 9595 var { BackButton: BackButtonFill } = unlock2(import_editor2.privateApis); 9596 var slideX = { 9597 hidden: { x: "-100%" }, 9598 distractionFreeInactive: { x: 0 }, 9599 hover: { x: 0, transition: { type: "tween", delay: 0.2 } } 9600 }; 9601 function BackButton({ initialPost }) { 9602 return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(BackButtonFill, { children: ({ length }) => length <= 1 && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)( 9603 import_components2.__unstableMotion.div, 9604 { 9605 variants: slideX, 9606 transition: { type: "tween", delay: 0.8 }, 9607 children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)( 9608 fullscreen_mode_close_default, 9609 { 9610 showTooltip: true, 9611 initialPost 9612 } 9613 ) 9614 } 9615 ) }); 9616 } 9617 var back_button_default = BackButton; 9618 9619 // packages/edit-post/build-module/components/editor-initialization/listener-hooks.mjs 9620 var import_data3 = __toESM(require_data(), 1); 9621 var import_element18 = __toESM(require_element(), 1); 9622 var import_editor3 = __toESM(require_editor(), 1); 9623 var import_core_data2 = __toESM(require_core_data(), 1); 9624 9625 // packages/edit-post/build-module/store/constants.mjs 9626 var STORE_NAME = "core/edit-post"; 9627 var VIEW_AS_LINK_SELECTOR = "#wp-admin-bar-view a"; 9628 var VIEW_AS_PREVIEW_LINK_SELECTOR = "#wp-admin-bar-preview a"; 9629 9630 // packages/edit-post/build-module/components/editor-initialization/listener-hooks.mjs 9631 var useUpdatePostLinkListener = () => { 9632 const { isViewable, newPermalink } = (0, import_data3.useSelect)((select3) => { 9633 const { getPostType } = select3(import_core_data2.store); 9634 const { getCurrentPost, getEditedPostAttribute } = select3(import_editor3.store); 9635 const postType = getPostType(getEditedPostAttribute("type")); 9636 return { 9637 isViewable: postType?.viewable, 9638 newPermalink: getCurrentPost().link 9639 }; 9640 }, []); 9641 const nodeToUpdateRef = (0, import_element18.useRef)(); 9642 (0, import_element18.useEffect)(() => { 9643 nodeToUpdateRef.current = document.querySelector(VIEW_AS_PREVIEW_LINK_SELECTOR) || document.querySelector(VIEW_AS_LINK_SELECTOR); 9644 }, []); 9645 (0, import_element18.useEffect)(() => { 9646 if (!newPermalink || !nodeToUpdateRef.current) { 9647 return; 9648 } 9649 if (!isViewable) { 9650 nodeToUpdateRef.current.style.display = "none"; 9651 return; 9652 } 9653 nodeToUpdateRef.current.style.display = ""; 9654 nodeToUpdateRef.current.setAttribute("href", newPermalink); 9655 }, [newPermalink, isViewable]); 9656 }; 9657 9658 // packages/edit-post/build-module/components/editor-initialization/index.mjs 9659 function EditorInitialization() { 9660 useUpdatePostLinkListener(); 9661 return null; 9662 } 9663 9664 // packages/edit-post/build-module/components/keyboard-shortcuts/index.mjs 9665 var import_element19 = __toESM(require_element(), 1); 9666 var import_data7 = __toESM(require_data(), 1); 9667 var import_keyboard_shortcuts = __toESM(require_keyboard_shortcuts(), 1); 9668 var import_i18n3 = __toESM(require_i18n(), 1); 9669 9670 // packages/edit-post/build-module/store/index.mjs 9671 var import_data6 = __toESM(require_data(), 1); 9672 9673 // packages/edit-post/build-module/store/reducer.mjs 9674 var import_data4 = __toESM(require_data(), 1); 9675 function isSavingMetaBoxes(state = false, action) { 9676 switch (action.type) { 9677 case "REQUEST_META_BOX_UPDATES": 9678 return true; 9679 case "META_BOX_UPDATES_SUCCESS": 9680 case "META_BOX_UPDATES_FAILURE": 9681 return false; 9682 default: 9683 return state; 9684 } 9685 } 9686 function mergeMetaboxes(metaboxes = [], newMetaboxes) { 9687 const mergedMetaboxes = [...metaboxes]; 9688 for (const metabox of newMetaboxes) { 9689 const existing = mergedMetaboxes.findIndex( 9690 (box) => box.id === metabox.id 9691 ); 9692 if (existing !== -1) { 9693 mergedMetaboxes[existing] = { 9694 ...mergedMetaboxes[existing], 9695 ...metabox 9696 }; 9697 } else { 9698 mergedMetaboxes.push(metabox); 9699 } 9700 } 9701 return mergedMetaboxes; 9702 } 9703 function metaBoxLocations(state = {}, action) { 9704 switch (action.type) { 9705 case "SET_META_BOXES_PER_LOCATIONS": { 9706 const newState = { ...state }; 9707 for (const [location, metaboxes] of Object.entries( 9708 action.metaBoxesPerLocation 9709 )) { 9710 newState[location] = mergeMetaboxes( 9711 newState[location], 9712 metaboxes 9713 ); 9714 } 9715 return newState; 9716 } 9717 } 9718 return state; 9719 } 9720 function metaBoxesInitialized(state = false, action) { 9721 switch (action.type) { 9722 case "META_BOXES_INITIALIZED": 9723 return true; 9724 } 9725 return state; 9726 } 9727 var metaBoxes = (0, import_data4.combineReducers)({ 9728 isSaving: isSavingMetaBoxes, 9729 locations: metaBoxLocations, 9730 initialized: metaBoxesInitialized 9731 }); 9732 var reducer_default = (0, import_data4.combineReducers)({ 9733 metaBoxes 9734 }); 9735 9736 // packages/edit-post/build-module/store/actions.mjs 9737 var actions_exports = {}; 9738 __export(actions_exports, { 9739 __experimentalSetPreviewDeviceType: () => __experimentalSetPreviewDeviceType, 9740 __unstableCreateTemplate: () => __unstableCreateTemplate, 9741 closeGeneralSidebar: () => closeGeneralSidebar, 9742 closeModal: () => closeModal, 9743 closePublishSidebar: () => closePublishSidebar, 9744 hideBlockTypes: () => hideBlockTypes, 9745 initializeMetaBoxes: () => initializeMetaBoxes, 9746 metaBoxUpdatesFailure: () => metaBoxUpdatesFailure, 9747 metaBoxUpdatesSuccess: () => metaBoxUpdatesSuccess, 9748 openGeneralSidebar: () => openGeneralSidebar, 9749 openModal: () => openModal, 9750 openPublishSidebar: () => openPublishSidebar, 9751 removeEditorPanel: () => removeEditorPanel, 9752 requestMetaBoxUpdates: () => requestMetaBoxUpdates, 9753 setAvailableMetaBoxesPerLocation: () => setAvailableMetaBoxesPerLocation, 9754 setIsEditingTemplate: () => setIsEditingTemplate, 9755 setIsInserterOpened: () => setIsInserterOpened, 9756 setIsListViewOpened: () => setIsListViewOpened, 9757 showBlockTypes: () => showBlockTypes, 9758 switchEditorMode: () => switchEditorMode, 9759 toggleDistractionFree: () => toggleDistractionFree, 9760 toggleEditorPanelEnabled: () => toggleEditorPanelEnabled, 9761 toggleEditorPanelOpened: () => toggleEditorPanelOpened, 9762 toggleFeature: () => toggleFeature, 9763 toggleFullscreenMode: () => toggleFullscreenMode, 9764 togglePinnedPluginItem: () => togglePinnedPluginItem, 9765 togglePublishSidebar: () => togglePublishSidebar, 9766 updatePreferredStyleVariations: () => updatePreferredStyleVariations 9767 }); 9768 var import_api_fetch = __toESM(require_api_fetch(), 1); 9769 var import_preferences = __toESM(require_preferences(), 1); 9770 var import_editor4 = __toESM(require_editor(), 1); 9771 var import_deprecated = __toESM(require_deprecated(), 1); 9772 var import_hooks = __toESM(require_hooks(), 1); 9773 var import_core_data3 = __toESM(require_core_data(), 1); 9774 var import_notices = __toESM(require_notices(), 1); 9775 var import_i18n2 = __toESM(require_i18n(), 1); 9776 9777 // packages/edit-post/build-module/utils/meta-boxes.mjs 9778 var getMetaBoxContainer = (location) => { 9779 const area = document.querySelector( 9780 `.edit-post-meta-boxes-area.is-$location} .metabox-location-$location}` 9781 ); 9782 if (area) { 9783 return area; 9784 } 9785 return document.querySelector("#metaboxes .metabox-location-" + location); 9786 }; 9787 9788 // packages/edit-post/build-module/store/actions.mjs 9789 var { interfaceStore } = unlock2(import_editor4.privateApis); 9790 var openGeneralSidebar = (name) => ({ registry }) => { 9791 registry.dispatch(interfaceStore).enableComplementaryArea("core", name); 9792 }; 9793 var closeGeneralSidebar = () => ({ registry }) => registry.dispatch(interfaceStore).disableComplementaryArea("core"); 9794 var openModal = (name) => ({ registry }) => { 9795 (0, import_deprecated.default)("select( 'core/edit-post' ).openModal( name )", { 9796 since: "6.3", 9797 alternative: "select( 'core/interface').openModal( name )" 9798 }); 9799 return registry.dispatch(interfaceStore).openModal(name); 9800 }; 9801 var closeModal = () => ({ registry }) => { 9802 (0, import_deprecated.default)("select( 'core/edit-post' ).closeModal()", { 9803 since: "6.3", 9804 alternative: "select( 'core/interface').closeModal()" 9805 }); 9806 return registry.dispatch(interfaceStore).closeModal(); 9807 }; 9808 var openPublishSidebar = () => ({ registry }) => { 9809 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).openPublishSidebar", { 9810 since: "6.6", 9811 alternative: "dispatch( 'core/editor').openPublishSidebar" 9812 }); 9813 registry.dispatch(import_editor4.store).openPublishSidebar(); 9814 }; 9815 var closePublishSidebar = () => ({ registry }) => { 9816 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).closePublishSidebar", { 9817 since: "6.6", 9818 alternative: "dispatch( 'core/editor').closePublishSidebar" 9819 }); 9820 registry.dispatch(import_editor4.store).closePublishSidebar(); 9821 }; 9822 var togglePublishSidebar = () => ({ registry }) => { 9823 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).togglePublishSidebar", { 9824 since: "6.6", 9825 alternative: "dispatch( 'core/editor').togglePublishSidebar" 9826 }); 9827 registry.dispatch(import_editor4.store).togglePublishSidebar(); 9828 }; 9829 var toggleEditorPanelEnabled = (panelName) => ({ registry }) => { 9830 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).toggleEditorPanelEnabled", { 9831 since: "6.5", 9832 alternative: "dispatch( 'core/editor').toggleEditorPanelEnabled" 9833 }); 9834 registry.dispatch(import_editor4.store).toggleEditorPanelEnabled(panelName); 9835 }; 9836 var toggleEditorPanelOpened = (panelName) => ({ registry }) => { 9837 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).toggleEditorPanelOpened", { 9838 since: "6.5", 9839 alternative: "dispatch( 'core/editor').toggleEditorPanelOpened" 9840 }); 9841 registry.dispatch(import_editor4.store).toggleEditorPanelOpened(panelName); 9842 }; 9843 var removeEditorPanel = (panelName) => ({ registry }) => { 9844 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).removeEditorPanel", { 9845 since: "6.5", 9846 alternative: "dispatch( 'core/editor').removeEditorPanel" 9847 }); 9848 registry.dispatch(import_editor4.store).removeEditorPanel(panelName); 9849 }; 9850 var toggleFeature = (feature) => ({ registry }) => registry.dispatch(import_preferences.store).toggle("core/edit-post", feature); 9851 var switchEditorMode = (mode) => ({ registry }) => { 9852 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).switchEditorMode", { 9853 since: "6.6", 9854 alternative: "dispatch( 'core/editor').switchEditorMode" 9855 }); 9856 registry.dispatch(import_editor4.store).switchEditorMode(mode); 9857 }; 9858 var togglePinnedPluginItem = (pluginName) => ({ registry }) => { 9859 const isPinned = registry.select(interfaceStore).isItemPinned("core", pluginName); 9860 registry.dispatch(interfaceStore)[isPinned ? "unpinItem" : "pinItem"]("core", pluginName); 9861 }; 9862 function updatePreferredStyleVariations() { 9863 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).updatePreferredStyleVariations", { 9864 since: "6.6", 9865 hint: "Preferred Style Variations are not supported anymore." 9866 }); 9867 return { type: "NOTHING" }; 9868 } 9869 var showBlockTypes = (blockNames) => ({ registry }) => { 9870 unlock2(registry.dispatch(import_editor4.store)).showBlockTypes(blockNames); 9871 }; 9872 var hideBlockTypes = (blockNames) => ({ registry }) => { 9873 unlock2(registry.dispatch(import_editor4.store)).hideBlockTypes(blockNames); 9874 }; 9875 function setAvailableMetaBoxesPerLocation(metaBoxesPerLocation) { 9876 return { 9877 type: "SET_META_BOXES_PER_LOCATIONS", 9878 metaBoxesPerLocation 9879 }; 9880 } 9881 var requestMetaBoxUpdates = () => async ({ registry, select: select3, dispatch: dispatch2 }) => { 9882 dispatch2({ 9883 type: "REQUEST_META_BOX_UPDATES" 9884 }); 9885 if (window.tinyMCE) { 9886 window.tinyMCE.triggerSave(); 9887 } 9888 const baseFormData = new window.FormData( 9889 document.querySelector(".metabox-base-form") 9890 ); 9891 const postId = baseFormData.get("post_ID"); 9892 const postType = baseFormData.get("post_type"); 9893 const post = registry.select(import_core_data3.store).getEditedEntityRecord("postType", postType, postId); 9894 const additionalData = [ 9895 post.comment_status ? ["comment_status", post.comment_status] : false, 9896 post.ping_status ? ["ping_status", post.ping_status] : false, 9897 post.sticky ? ["sticky", post.sticky] : false, 9898 post.author ? ["post_author", post.author] : false 9899 ].filter(Boolean); 9900 const activeMetaBoxLocations = select3.getActiveMetaBoxLocations(); 9901 const formDataToMerge = [ 9902 baseFormData, 9903 ...activeMetaBoxLocations.map( 9904 (location) => new window.FormData(getMetaBoxContainer(location)) 9905 ) 9906 ]; 9907 const formData = formDataToMerge.reduce((memo, currentFormData) => { 9908 for (const [key, value] of currentFormData) { 9909 memo.append(key, value); 9910 } 9911 return memo; 9912 }, new window.FormData()); 9913 additionalData.forEach( 9914 ([key, value]) => formData.append(key, value) 9915 ); 9916 try { 9917 await (0, import_api_fetch.default)({ 9918 url: window._wpMetaBoxUrl, 9919 method: "POST", 9920 body: formData, 9921 parse: false 9922 }); 9923 dispatch2.metaBoxUpdatesSuccess(); 9924 } catch { 9925 dispatch2.metaBoxUpdatesFailure(); 9926 } 9927 }; 9928 function metaBoxUpdatesSuccess() { 9929 return { 9930 type: "META_BOX_UPDATES_SUCCESS" 9931 }; 9932 } 9933 function metaBoxUpdatesFailure() { 9934 return { 9935 type: "META_BOX_UPDATES_FAILURE" 9936 }; 9937 } 9938 var __experimentalSetPreviewDeviceType = (deviceType) => ({ registry }) => { 9939 (0, import_deprecated.default)( 9940 "dispatch( 'core/edit-post' ).__experimentalSetPreviewDeviceType", 9941 { 9942 since: "6.5", 9943 version: "6.7", 9944 hint: "registry.dispatch( editorStore ).setDeviceType" 9945 } 9946 ); 9947 registry.dispatch(import_editor4.store).setDeviceType(deviceType); 9948 }; 9949 var setIsInserterOpened = (value) => ({ registry }) => { 9950 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).setIsInserterOpened", { 9951 since: "6.5", 9952 alternative: "dispatch( 'core/editor').setIsInserterOpened" 9953 }); 9954 registry.dispatch(import_editor4.store).setIsInserterOpened(value); 9955 }; 9956 var setIsListViewOpened = (isOpen) => ({ registry }) => { 9957 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).setIsListViewOpened", { 9958 since: "6.5", 9959 alternative: "dispatch( 'core/editor').setIsListViewOpened" 9960 }); 9961 registry.dispatch(import_editor4.store).setIsListViewOpened(isOpen); 9962 }; 9963 function setIsEditingTemplate() { 9964 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).setIsEditingTemplate", { 9965 since: "6.5", 9966 alternative: "dispatch( 'core/editor').setRenderingMode" 9967 }); 9968 return { type: "NOTHING" }; 9969 } 9970 function __unstableCreateTemplate() { 9971 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).__unstableCreateTemplate", { 9972 since: "6.5" 9973 }); 9974 return { type: "NOTHING" }; 9975 } 9976 var metaBoxesInitialized2 = false; 9977 var initializeMetaBoxes = () => ({ registry, select: select3, dispatch: dispatch2 }) => { 9978 const isEditorReady = registry.select(import_editor4.store).__unstableIsEditorReady(); 9979 if (!isEditorReady) { 9980 return; 9981 } 9982 if (metaBoxesInitialized2) { 9983 return; 9984 } 9985 const postType = registry.select(import_editor4.store).getCurrentPostType(); 9986 if (window.postboxes.page !== postType) { 9987 window.postboxes.add_postbox_toggles(postType); 9988 } 9989 metaBoxesInitialized2 = true; 9990 (0, import_hooks.addAction)( 9991 "editor.savePost", 9992 "core/edit-post/save-metaboxes", 9993 async (post, options) => { 9994 if (!options.isAutosave && select3.hasMetaBoxes()) { 9995 await dispatch2.requestMetaBoxUpdates(); 9996 } 9997 } 9998 ); 9999 dispatch2({ 10000 type: "META_BOXES_INITIALIZED" 10001 }); 10002 }; 10003 var toggleDistractionFree = () => ({ registry }) => { 10004 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).toggleDistractionFree", { 10005 since: "6.6", 10006 alternative: "dispatch( 'core/editor').toggleDistractionFree" 10007 }); 10008 registry.dispatch(import_editor4.store).toggleDistractionFree(); 10009 }; 10010 var toggleFullscreenMode = () => ({ registry }) => { 10011 const isFullscreen = registry.select(import_preferences.store).get("core/edit-post", "fullscreenMode"); 10012 registry.dispatch(import_preferences.store).toggle("core/edit-post", "fullscreenMode"); 10013 registry.dispatch(import_notices.store).createInfoNotice( 10014 isFullscreen ? (0, import_i18n2.__)("Fullscreen mode deactivated.") : (0, import_i18n2.__)("Fullscreen mode activated."), 10015 { 10016 id: "core/edit-post/toggle-fullscreen-mode/notice", 10017 type: "snackbar", 10018 actions: [ 10019 { 10020 label: (0, import_i18n2.__)("Undo"), 10021 onClick: () => { 10022 registry.dispatch(import_preferences.store).toggle( 10023 "core/edit-post", 10024 "fullscreenMode" 10025 ); 10026 } 10027 } 10028 ] 10029 } 10030 ); 10031 }; 10032 10033 // packages/edit-post/build-module/store/selectors.mjs 10034 var selectors_exports = {}; 10035 __export(selectors_exports, { 10036 __experimentalGetInsertionPoint: () => __experimentalGetInsertionPoint, 10037 __experimentalGetPreviewDeviceType: () => __experimentalGetPreviewDeviceType, 10038 areMetaBoxesInitialized: () => areMetaBoxesInitialized, 10039 getActiveGeneralSidebarName: () => getActiveGeneralSidebarName, 10040 getActiveMetaBoxLocations: () => getActiveMetaBoxLocations, 10041 getAllMetaBoxes: () => getAllMetaBoxes, 10042 getEditedPostTemplate: () => getEditedPostTemplate, 10043 getEditorMode: () => getEditorMode, 10044 getHiddenBlockTypes: () => getHiddenBlockTypes, 10045 getMetaBoxesPerLocation: () => getMetaBoxesPerLocation, 10046 getPreference: () => getPreference, 10047 getPreferences: () => getPreferences, 10048 hasMetaBoxes: () => hasMetaBoxes, 10049 isEditingTemplate: () => isEditingTemplate, 10050 isEditorPanelEnabled: () => isEditorPanelEnabled, 10051 isEditorPanelOpened: () => isEditorPanelOpened, 10052 isEditorPanelRemoved: () => isEditorPanelRemoved, 10053 isEditorSidebarOpened: () => isEditorSidebarOpened, 10054 isFeatureActive: () => isFeatureActive, 10055 isInserterOpened: () => isInserterOpened, 10056 isListViewOpened: () => isListViewOpened, 10057 isMetaBoxLocationActive: () => isMetaBoxLocationActive, 10058 isMetaBoxLocationVisible: () => isMetaBoxLocationVisible, 10059 isModalActive: () => isModalActive, 10060 isPluginItemPinned: () => isPluginItemPinned, 10061 isPluginSidebarOpened: () => isPluginSidebarOpened, 10062 isPublishSidebarOpened: () => isPublishSidebarOpened, 10063 isSavingMetaBoxes: () => isSavingMetaBoxes2 10064 }); 10065 var import_data5 = __toESM(require_data(), 1); 10066 var import_preferences2 = __toESM(require_preferences(), 1); 10067 var import_core_data4 = __toESM(require_core_data(), 1); 10068 var import_editor5 = __toESM(require_editor(), 1); 10069 var import_deprecated2 = __toESM(require_deprecated(), 1); 10070 var { interfaceStore: interfaceStore2 } = unlock2(import_editor5.privateApis); 10071 var EMPTY_ARRAY2 = []; 10072 var EMPTY_OBJECT2 = {}; 10073 var getEditorMode = (0, import_data5.createRegistrySelector)( 10074 (select3) => () => select3(import_preferences2.store).get("core", "editorMode") ?? "visual" 10075 ); 10076 var isEditorSidebarOpened = (0, import_data5.createRegistrySelector)( 10077 (select3) => () => { 10078 const activeGeneralSidebar = select3(interfaceStore2).getActiveComplementaryArea("core"); 10079 return ["edit-post/document", "edit-post/block"].includes( 10080 activeGeneralSidebar 10081 ); 10082 } 10083 ); 10084 var isPluginSidebarOpened = (0, import_data5.createRegistrySelector)( 10085 (select3) => () => { 10086 const activeGeneralSidebar = select3(interfaceStore2).getActiveComplementaryArea("core"); 10087 return !!activeGeneralSidebar && !["edit-post/document", "edit-post/block"].includes( 10088 activeGeneralSidebar 10089 ); 10090 } 10091 ); 10092 var getActiveGeneralSidebarName = (0, import_data5.createRegistrySelector)( 10093 (select3) => () => { 10094 return select3(interfaceStore2).getActiveComplementaryArea("core"); 10095 } 10096 ); 10097 function convertPanelsToOldFormat(inactivePanels, openPanels) { 10098 const panelsWithEnabledState = inactivePanels?.reduce( 10099 (accumulatedPanels, panelName) => ({ 10100 ...accumulatedPanels, 10101 [panelName]: { 10102 enabled: false 10103 } 10104 }), 10105 {} 10106 ); 10107 const panels = openPanels?.reduce((accumulatedPanels, panelName) => { 10108 const currentPanelState = accumulatedPanels?.[panelName]; 10109 return { 10110 ...accumulatedPanels, 10111 [panelName]: { 10112 ...currentPanelState, 10113 opened: true 10114 } 10115 }; 10116 }, panelsWithEnabledState ?? {}); 10117 return panels ?? panelsWithEnabledState ?? EMPTY_OBJECT2; 10118 } 10119 var getPreferences = (0, import_data5.createRegistrySelector)((select3) => () => { 10120 (0, import_deprecated2.default)(`select( 'core/edit-post' ).getPreferences`, { 10121 since: "6.0", 10122 alternative: `select( 'core/preferences' ).get` 10123 }); 10124 const corePreferences = ["editorMode", "hiddenBlockTypes"].reduce( 10125 (accumulatedPrefs, preferenceKey) => { 10126 const value = select3(import_preferences2.store).get( 10127 "core", 10128 preferenceKey 10129 ); 10130 return { 10131 ...accumulatedPrefs, 10132 [preferenceKey]: value 10133 }; 10134 }, 10135 {} 10136 ); 10137 const inactivePanels = select3(import_preferences2.store).get( 10138 "core", 10139 "inactivePanels" 10140 ); 10141 const openPanels = select3(import_preferences2.store).get("core", "openPanels"); 10142 const panels = convertPanelsToOldFormat(inactivePanels, openPanels); 10143 return { 10144 ...corePreferences, 10145 panels 10146 }; 10147 }); 10148 function getPreference(state, preferenceKey, defaultValue) { 10149 (0, import_deprecated2.default)(`select( 'core/edit-post' ).getPreference`, { 10150 since: "6.0", 10151 alternative: `select( 'core/preferences' ).get` 10152 }); 10153 const preferences = getPreferences(state); 10154 const value = preferences[preferenceKey]; 10155 return value === void 0 ? defaultValue : value; 10156 } 10157 var getHiddenBlockTypes = (0, import_data5.createRegistrySelector)((select3) => () => { 10158 return select3(import_preferences2.store).get("core", "hiddenBlockTypes") ?? EMPTY_ARRAY2; 10159 }); 10160 var isPublishSidebarOpened = (0, import_data5.createRegistrySelector)( 10161 (select3) => () => { 10162 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isPublishSidebarOpened`, { 10163 since: "6.6", 10164 alternative: `select( 'core/editor' ).isPublishSidebarOpened` 10165 }); 10166 return select3(import_editor5.store).isPublishSidebarOpened(); 10167 } 10168 ); 10169 var isEditorPanelRemoved = (0, import_data5.createRegistrySelector)( 10170 (select3) => (state, panelName) => { 10171 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isEditorPanelRemoved`, { 10172 since: "6.5", 10173 alternative: `select( 'core/editor' ).isEditorPanelRemoved` 10174 }); 10175 return select3(import_editor5.store).isEditorPanelRemoved(panelName); 10176 } 10177 ); 10178 var isEditorPanelEnabled = (0, import_data5.createRegistrySelector)( 10179 (select3) => (state, panelName) => { 10180 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isEditorPanelEnabled`, { 10181 since: "6.5", 10182 alternative: `select( 'core/editor' ).isEditorPanelEnabled` 10183 }); 10184 return select3(import_editor5.store).isEditorPanelEnabled(panelName); 10185 } 10186 ); 10187 var isEditorPanelOpened = (0, import_data5.createRegistrySelector)( 10188 (select3) => (state, panelName) => { 10189 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isEditorPanelOpened`, { 10190 since: "6.5", 10191 alternative: `select( 'core/editor' ).isEditorPanelOpened` 10192 }); 10193 return select3(import_editor5.store).isEditorPanelOpened(panelName); 10194 } 10195 ); 10196 var isModalActive = (0, import_data5.createRegistrySelector)( 10197 (select3) => (state, modalName) => { 10198 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isModalActive`, { 10199 since: "6.3", 10200 alternative: `select( 'core/interface' ).isModalActive` 10201 }); 10202 return !!select3(interfaceStore2).isModalActive(modalName); 10203 } 10204 ); 10205 var isFeatureActive = (0, import_data5.createRegistrySelector)( 10206 (select3) => (state, feature) => { 10207 return !!select3(import_preferences2.store).get("core/edit-post", feature); 10208 } 10209 ); 10210 var isPluginItemPinned = (0, import_data5.createRegistrySelector)( 10211 (select3) => (state, pluginName) => { 10212 return select3(interfaceStore2).isItemPinned("core", pluginName); 10213 } 10214 ); 10215 var getActiveMetaBoxLocations = (0, import_data5.createSelector)( 10216 (state) => { 10217 return Object.keys(state.metaBoxes.locations).filter( 10218 (location) => isMetaBoxLocationActive(state, location) 10219 ); 10220 }, 10221 (state) => [state.metaBoxes.locations] 10222 ); 10223 var isMetaBoxLocationVisible = (0, import_data5.createRegistrySelector)( 10224 (select3) => (state, location) => { 10225 return isMetaBoxLocationActive(state, location) && getMetaBoxesPerLocation(state, location)?.some(({ id }) => { 10226 return select3(import_editor5.store).isEditorPanelEnabled( 10227 `meta-box-$id}` 10228 ); 10229 }); 10230 } 10231 ); 10232 function isMetaBoxLocationActive(state, location) { 10233 const metaBoxes2 = getMetaBoxesPerLocation(state, location); 10234 return !!metaBoxes2 && metaBoxes2.length !== 0; 10235 } 10236 function getMetaBoxesPerLocation(state, location) { 10237 return state.metaBoxes.locations[location]; 10238 } 10239 var getAllMetaBoxes = (0, import_data5.createSelector)( 10240 (state) => { 10241 return Object.values(state.metaBoxes.locations).flat(); 10242 }, 10243 (state) => [state.metaBoxes.locations] 10244 ); 10245 function hasMetaBoxes(state) { 10246 return getActiveMetaBoxLocations(state).length > 0; 10247 } 10248 function isSavingMetaBoxes2(state) { 10249 return state.metaBoxes.isSaving; 10250 } 10251 var __experimentalGetPreviewDeviceType = (0, import_data5.createRegistrySelector)( 10252 (select3) => () => { 10253 (0, import_deprecated2.default)( 10254 `select( 'core/edit-site' ).__experimentalGetPreviewDeviceType`, 10255 { 10256 since: "6.5", 10257 version: "6.7", 10258 alternative: `select( 'core/editor' ).getDeviceType` 10259 } 10260 ); 10261 return select3(import_editor5.store).getDeviceType(); 10262 } 10263 ); 10264 var isInserterOpened = (0, import_data5.createRegistrySelector)((select3) => () => { 10265 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isInserterOpened`, { 10266 since: "6.5", 10267 alternative: `select( 'core/editor' ).isInserterOpened` 10268 }); 10269 return select3(import_editor5.store).isInserterOpened(); 10270 }); 10271 var __experimentalGetInsertionPoint = (0, import_data5.createRegistrySelector)( 10272 (select3) => () => { 10273 (0, import_deprecated2.default)( 10274 `select( 'core/edit-post' ).__experimentalGetInsertionPoint`, 10275 { 10276 since: "6.5", 10277 version: "6.7" 10278 } 10279 ); 10280 return unlock2(select3(import_editor5.store)).getInserter(); 10281 } 10282 ); 10283 var isListViewOpened = (0, import_data5.createRegistrySelector)((select3) => () => { 10284 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isListViewOpened`, { 10285 since: "6.5", 10286 alternative: `select( 'core/editor' ).isListViewOpened` 10287 }); 10288 return select3(import_editor5.store).isListViewOpened(); 10289 }); 10290 var isEditingTemplate = (0, import_data5.createRegistrySelector)((select3) => () => { 10291 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isEditingTemplate`, { 10292 since: "6.5", 10293 alternative: `select( 'core/editor' ).getRenderingMode` 10294 }); 10295 return select3(import_editor5.store).getCurrentPostType() === "wp_template"; 10296 }); 10297 function areMetaBoxesInitialized(state) { 10298 return state.metaBoxes.initialized; 10299 } 10300 var getEditedPostTemplate = (0, import_data5.createRegistrySelector)( 10301 (select3) => () => { 10302 const { id: postId, type: postType } = select3(import_editor5.store).getCurrentPost(); 10303 const templateId = unlock2(select3(import_core_data4.store)).getTemplateId( 10304 postType, 10305 postId 10306 ); 10307 if (!templateId) { 10308 return void 0; 10309 } 10310 return select3(import_core_data4.store).getEditedEntityRecord( 10311 "postType", 10312 "wp_template", 10313 templateId 10314 ); 10315 } 10316 ); 10317 10318 // packages/edit-post/build-module/store/index.mjs 10319 var store = (0, import_data6.createReduxStore)(STORE_NAME, { 10320 reducer: reducer_default, 10321 actions: actions_exports, 10322 selectors: selectors_exports 10323 }); 10324 (0, import_data6.register)(store); 10325 10326 // packages/edit-post/build-module/components/keyboard-shortcuts/index.mjs 10327 function KeyboardShortcuts() { 10328 const { toggleFullscreenMode: toggleFullscreenMode2 } = (0, import_data7.useDispatch)(store); 10329 const { registerShortcut } = (0, import_data7.useDispatch)(import_keyboard_shortcuts.store); 10330 (0, import_element19.useEffect)(() => { 10331 registerShortcut({ 10332 name: "core/edit-post/toggle-fullscreen", 10333 category: "global", 10334 description: (0, import_i18n3.__)("Enable or disable fullscreen mode."), 10335 keyCombination: { 10336 modifier: "secondary", 10337 character: "f" 10338 } 10339 }); 10340 }, []); 10341 (0, import_keyboard_shortcuts.useShortcut)("core/edit-post/toggle-fullscreen", () => { 10342 toggleFullscreenMode2(); 10343 }); 10344 return null; 10345 } 10346 var keyboard_shortcuts_default = KeyboardShortcuts; 10347 10348 // packages/edit-post/build-module/components/init-pattern-modal/index.mjs 10349 var import_data8 = __toESM(require_data(), 1); 10350 var import_i18n4 = __toESM(require_i18n(), 1); 10351 var import_components3 = __toESM(require_components(), 1); 10352 var import_element20 = __toESM(require_element(), 1); 10353 var import_editor6 = __toESM(require_editor(), 1); 10354 var import_jsx_runtime25 = __toESM(require_jsx_runtime(), 1); 10355 function InitPatternModal() { 10356 const { editPost } = (0, import_data8.useDispatch)(import_editor6.store); 10357 const { isCleanNewPost } = (0, import_data8.useSelect)(import_editor6.store); 10358 const [syncType, setSyncType] = (0, import_element20.useState)(void 0); 10359 const [title, setTitle] = (0, import_element20.useState)(""); 10360 const [isModalOpen, setIsModalOpen] = (0, import_element20.useState)(() => isCleanNewPost()); 10361 if (!isModalOpen) { 10362 return null; 10363 } 10364 return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( 10365 import_components3.Modal, 10366 { 10367 title: (0, import_i18n4.__)("Create pattern"), 10368 onRequestClose: () => { 10369 setIsModalOpen(false); 10370 }, 10371 overlayClassName: "patterns-create-modal", 10372 children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( 10373 "form", 10374 { 10375 onSubmit: (event) => { 10376 event.preventDefault(); 10377 setIsModalOpen(false); 10378 editPost({ 10379 title, 10380 meta: { 10381 wp_pattern_sync_status: syncType 10382 } 10383 }); 10384 }, 10385 children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Stack, { direction: "column", gap: "lg", children: [ 10386 /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( 10387 import_components3.TextControl, 10388 { 10389 label: (0, import_i18n4.__)("Name"), 10390 value: title, 10391 onChange: setTitle, 10392 placeholder: (0, import_i18n4.__)("My pattern"), 10393 className: "patterns-create-modal__name-input" 10394 } 10395 ), 10396 /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( 10397 import_components3.ToggleControl, 10398 { 10399 label: (0, import_i18n4._x)("Synced", "pattern (singular)"), 10400 help: (0, import_i18n4.__)( 10401 "Sync this pattern across multiple locations." 10402 ), 10403 checked: !syncType, 10404 onChange: () => { 10405 setSyncType(!syncType ? "unsynced" : void 0); 10406 } 10407 } 10408 ), 10409 /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Stack, { justify: "end", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( 10410 import_components3.Button, 10411 { 10412 __next40pxDefaultSize: true, 10413 variant: "primary", 10414 type: "submit", 10415 disabled: !title, 10416 accessibleWhenDisabled: true, 10417 children: (0, import_i18n4.__)("Create") 10418 } 10419 ) }) 10420 ] }) 10421 } 10422 ) 10423 } 10424 ); 10425 } 10426 10427 // packages/edit-post/build-module/components/browser-url/index.mjs 10428 var import_element21 = __toESM(require_element(), 1); 10429 var import_data9 = __toESM(require_data(), 1); 10430 var import_url2 = __toESM(require_url(), 1); 10431 var import_editor7 = __toESM(require_editor(), 1); 10432 function getPostEditURL(postId) { 10433 return (0, import_url2.addQueryArgs)("post.php", { post: postId, action: "edit" }); 10434 } 10435 function BrowserURL() { 10436 const [historyId, setHistoryId] = (0, import_element21.useState)(null); 10437 const { postId, postStatus } = (0, import_data9.useSelect)((select3) => { 10438 const { getCurrentPost } = select3(import_editor7.store); 10439 const post = getCurrentPost(); 10440 let { id, status, type } = post; 10441 const isTemplate = ["wp_template", "wp_template_part"].includes( 10442 type 10443 ); 10444 if (isTemplate) { 10445 id = post.wp_id; 10446 } 10447 return { 10448 postId: id, 10449 postStatus: status 10450 }; 10451 }, []); 10452 (0, import_element21.useEffect)(() => { 10453 if (postId && postId !== historyId && postStatus !== "auto-draft") { 10454 window.history.replaceState( 10455 { id: postId }, 10456 "Post " + postId, 10457 getPostEditURL(postId) 10458 ); 10459 setHistoryId(postId); 10460 } 10461 }, [postId, postStatus, historyId]); 10462 return null; 10463 } 10464 10465 // packages/edit-post/build-module/components/meta-boxes/index.mjs 10466 var import_data12 = __toESM(require_data(), 1); 10467 10468 // packages/edit-post/build-module/components/meta-boxes/meta-boxes-area/index.mjs 10469 var import_element22 = __toESM(require_element(), 1); 10470 var import_components4 = __toESM(require_components(), 1); 10471 var import_data10 = __toESM(require_data(), 1); 10472 var import_block_editor = __toESM(require_block_editor(), 1); 10473 var import_jsx_runtime26 = __toESM(require_jsx_runtime(), 1); 10474 var { useNativeUndo } = unlock2(import_block_editor.privateApis); 10475 function MetaBoxesArea({ location }) { 10476 const container = (0, import_element22.useRef)(null); 10477 const formRef = (0, import_element22.useRef)(null); 10478 (0, import_element22.useEffect)(() => { 10479 formRef.current = document.querySelector( 10480 ".metabox-location-" + location 10481 ); 10482 if (formRef.current) { 10483 container.current.appendChild(formRef.current); 10484 } 10485 return () => { 10486 if (formRef.current) { 10487 document.querySelector("#metaboxes").appendChild(formRef.current); 10488 } 10489 }; 10490 }, [location]); 10491 const isSaving = (0, import_data10.useSelect)((select3) => { 10492 return select3(store).isSavingMetaBoxes(); 10493 }, []); 10494 const classes = clsx_default("edit-post-meta-boxes-area", `is-$location}`, { 10495 "is-loading": isSaving 10496 }); 10497 const nativeUndoRef = useNativeUndo(); 10498 return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: classes, ref: nativeUndoRef, children: [ 10499 isSaving && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_components4.Spinner, { className: "edit-post-meta-boxes-area__spinner" }), 10500 /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( 10501 "div", 10502 { 10503 className: "edit-post-meta-boxes-area__container", 10504 ref: container 10505 } 10506 ), 10507 /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "edit-post-meta-boxes-area__clear" }) 10508 ] }); 10509 } 10510 var meta_boxes_area_default = MetaBoxesArea; 10511 10512 // packages/edit-post/build-module/components/meta-boxes/meta-box-visibility.mjs 10513 var import_element23 = __toESM(require_element(), 1); 10514 var import_data11 = __toESM(require_data(), 1); 10515 var import_editor8 = __toESM(require_editor(), 1); 10516 function MetaBoxVisibility({ id }) { 10517 const isVisible = (0, import_data11.useSelect)( 10518 (select3) => { 10519 return select3(import_editor8.store).isEditorPanelEnabled( 10520 `meta-box-$id}` 10521 ); 10522 }, 10523 [id] 10524 ); 10525 (0, import_element23.useEffect)(() => { 10526 const element = document.getElementById(id); 10527 if (!element) { 10528 return; 10529 } 10530 if (isVisible) { 10531 element.classList.remove("is-hidden"); 10532 } else { 10533 element.classList.add("is-hidden"); 10534 } 10535 }, [id, isVisible]); 10536 return null; 10537 } 10538 10539 // packages/edit-post/build-module/components/meta-boxes/index.mjs 10540 var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1); 10541 function MetaBoxes({ location }) { 10542 const metaBoxes2 = (0, import_data12.useSelect)( 10543 (select3) => select3(store).getMetaBoxesPerLocation(location), 10544 [location] 10545 ); 10546 return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [ 10547 (metaBoxes2 ?? []).map(({ id }) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(MetaBoxVisibility, { id }, id)), 10548 /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(meta_boxes_area_default, { location }) 10549 ] }); 10550 } 10551 10552 // packages/edit-post/build-module/components/more-menu/index.mjs 10553 var import_i18n10 = __toESM(require_i18n(), 1); 10554 var import_compose = __toESM(require_compose(), 1); 10555 var import_editor14 = __toESM(require_editor(), 1); 10556 var import_keycodes = __toESM(require_keycodes(), 1); 10557 var import_preferences8 = __toESM(require_preferences(), 1); 10558 10559 // packages/edit-post/build-module/components/more-menu/manage-patterns-menu-item.mjs 10560 var import_components5 = __toESM(require_components(), 1); 10561 var import_core_data5 = __toESM(require_core_data(), 1); 10562 var import_data13 = __toESM(require_data(), 1); 10563 var import_i18n5 = __toESM(require_i18n(), 1); 10564 var import_url3 = __toESM(require_url(), 1); 10565 var import_jsx_runtime28 = __toESM(require_jsx_runtime(), 1); 10566 function ManagePatternsMenuItem() { 10567 const url = (0, import_data13.useSelect)((select3) => { 10568 const { canUser } = select3(import_core_data5.store); 10569 const defaultUrl = (0, import_url3.addQueryArgs)("edit.php", { 10570 post_type: "wp_block" 10571 }); 10572 const patternsUrl = (0, import_url3.addQueryArgs)("site-editor.php", { 10573 p: "/pattern" 10574 }); 10575 return canUser("create", { 10576 kind: "postType", 10577 name: "wp_template" 10578 }) ? patternsUrl : defaultUrl; 10579 }, []); 10580 return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_components5.MenuItem, { role: "menuitem", href: url, children: (0, import_i18n5.__)("Manage patterns") }); 10581 } 10582 var manage_patterns_menu_item_default = ManagePatternsMenuItem; 10583 10584 // packages/edit-post/build-module/components/more-menu/welcome-guide-menu-item.mjs 10585 var import_data14 = __toESM(require_data(), 1); 10586 var import_preferences3 = __toESM(require_preferences(), 1); 10587 var import_i18n6 = __toESM(require_i18n(), 1); 10588 var import_editor9 = __toESM(require_editor(), 1); 10589 var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1); 10590 function WelcomeGuideMenuItem() { 10591 const isEditingTemplate2 = (0, import_data14.useSelect)( 10592 (select3) => select3(import_editor9.store).getCurrentPostType() === "wp_template", 10593 [] 10594 ); 10595 return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( 10596 import_preferences3.PreferenceToggleMenuItem, 10597 { 10598 scope: "core/edit-post", 10599 name: isEditingTemplate2 ? "welcomeGuideTemplate" : "welcomeGuide", 10600 label: (0, import_i18n6.__)("Welcome Guide") 10601 } 10602 ); 10603 } 10604 10605 // packages/edit-post/build-module/components/preferences-modal/index.mjs 10606 var import_i18n9 = __toESM(require_i18n(), 1); 10607 var import_preferences7 = __toESM(require_preferences(), 1); 10608 var import_editor13 = __toESM(require_editor(), 1); 10609 10610 // packages/edit-post/build-module/components/preferences-modal/meta-boxes-section.mjs 10611 var import_i18n8 = __toESM(require_i18n(), 1); 10612 var import_data17 = __toESM(require_data(), 1); 10613 var import_editor12 = __toESM(require_editor(), 1); 10614 var import_preferences6 = __toESM(require_preferences(), 1); 10615 10616 // packages/edit-post/build-module/components/preferences-modal/enable-custom-fields.mjs 10617 var import_element24 = __toESM(require_element(), 1); 10618 var import_i18n7 = __toESM(require_i18n(), 1); 10619 var import_components6 = __toESM(require_components(), 1); 10620 var import_data15 = __toESM(require_data(), 1); 10621 var import_editor10 = __toESM(require_editor(), 1); 10622 var import_preferences4 = __toESM(require_preferences(), 1); 10623 var import_url4 = __toESM(require_url(), 1); 10624 var import_jsx_runtime30 = __toESM(require_jsx_runtime(), 1); 10625 var { PreferenceBaseOption } = unlock2(import_preferences4.privateApis); 10626 function submitCustomFieldsForm() { 10627 const customFieldsForm = document.getElementById( 10628 "toggle-custom-fields-form" 10629 ); 10630 customFieldsForm.querySelector('[name="_wp_http_referer"]').setAttribute("value", (0, import_url4.getPathAndQueryString)(window.location.href)); 10631 customFieldsForm.submit(); 10632 } 10633 function CustomFieldsConfirmation({ willEnable }) { 10634 const [isReloading, setIsReloading] = (0, import_element24.useState)(false); 10635 return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [ 10636 /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { className: "edit-post-preferences-modal__custom-fields-confirmation-message", children: (0, import_i18n7.__)( 10637 "A page reload is required for this change. Make sure your content is saved before reloading." 10638 ) }), 10639 /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( 10640 import_components6.Button, 10641 { 10642 __next40pxDefaultSize: true, 10643 variant: "secondary", 10644 isBusy: isReloading, 10645 accessibleWhenDisabled: true, 10646 disabled: isReloading, 10647 onClick: () => { 10648 setIsReloading(true); 10649 submitCustomFieldsForm(); 10650 }, 10651 children: willEnable ? (0, import_i18n7.__)("Show & Reload Page") : (0, import_i18n7.__)("Hide & Reload Page") 10652 } 10653 ) 10654 ] }); 10655 } 10656 function EnableCustomFieldsOption({ label }) { 10657 const areCustomFieldsEnabled = (0, import_data15.useSelect)((select3) => { 10658 return !!select3(import_editor10.store).getEditorSettings().enableCustomFields; 10659 }, []); 10660 const [isChecked, setIsChecked] = (0, import_element24.useState)(areCustomFieldsEnabled); 10661 return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)( 10662 PreferenceBaseOption, 10663 { 10664 label, 10665 isChecked, 10666 onChange: setIsChecked, 10667 children: isChecked !== areCustomFieldsEnabled && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(CustomFieldsConfirmation, { willEnable: isChecked }) 10668 } 10669 ); 10670 } 10671 10672 // packages/edit-post/build-module/components/preferences-modal/enable-panel.mjs 10673 var import_data16 = __toESM(require_data(), 1); 10674 var import_editor11 = __toESM(require_editor(), 1); 10675 var import_preferences5 = __toESM(require_preferences(), 1); 10676 var import_jsx_runtime31 = __toESM(require_jsx_runtime(), 1); 10677 var { PreferenceBaseOption: PreferenceBaseOption2 } = unlock2(import_preferences5.privateApis); 10678 function EnablePanelOption(props) { 10679 const { toggleEditorPanelEnabled: toggleEditorPanelEnabled2 } = (0, import_data16.useDispatch)(import_editor11.store); 10680 const { isChecked, isRemoved } = (0, import_data16.useSelect)( 10681 (select3) => { 10682 const { isEditorPanelEnabled: isEditorPanelEnabled2, isEditorPanelRemoved: isEditorPanelRemoved2 } = select3(import_editor11.store); 10683 return { 10684 isChecked: isEditorPanelEnabled2(props.panelName), 10685 isRemoved: isEditorPanelRemoved2(props.panelName) 10686 }; 10687 }, 10688 [props.panelName] 10689 ); 10690 if (isRemoved) { 10691 return null; 10692 } 10693 return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( 10694 PreferenceBaseOption2, 10695 { 10696 isChecked, 10697 onChange: () => toggleEditorPanelEnabled2(props.panelName), 10698 ...props 10699 } 10700 ); 10701 } 10702 10703 // packages/edit-post/build-module/components/preferences-modal/meta-boxes-section.mjs 10704 var import_jsx_runtime32 = __toESM(require_jsx_runtime(), 1); 10705 var { PreferencesModalSection } = unlock2(import_preferences6.privateApis); 10706 function MetaBoxesSection(sectionProps) { 10707 const { areCustomFieldsRegistered, metaBoxes: metaBoxes2 } = (0, import_data17.useSelect)((select3) => { 10708 const { getEditorSettings } = select3(import_editor12.store); 10709 const { getAllMetaBoxes: getAllMetaBoxes2 } = select3(store); 10710 return { 10711 areCustomFieldsRegistered: getEditorSettings().enableCustomFields !== void 0, 10712 metaBoxes: getAllMetaBoxes2() 10713 }; 10714 }, []); 10715 const thirdPartyMetaBoxes = metaBoxes2.filter( 10716 ({ id }) => id !== "postcustom" 10717 ); 10718 if (!areCustomFieldsRegistered && thirdPartyMetaBoxes.length === 0) { 10719 return null; 10720 } 10721 return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(PreferencesModalSection, { ...sectionProps, children: [ 10722 areCustomFieldsRegistered && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(EnableCustomFieldsOption, { label: (0, import_i18n8.__)("Custom fields") }), 10723 thirdPartyMetaBoxes.map(({ id, title }) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)( 10724 EnablePanelOption, 10725 { 10726 label: title, 10727 panelName: `meta-box-$id}` 10728 }, 10729 id 10730 )) 10731 ] }); 10732 } 10733 10734 // packages/edit-post/build-module/components/preferences-modal/index.mjs 10735 var import_jsx_runtime33 = __toESM(require_jsx_runtime(), 1); 10736 var { PreferenceToggleControl } = unlock2(import_preferences7.privateApis); 10737 var { PreferencesModal } = unlock2(import_editor13.privateApis); 10738 function EditPostPreferencesModal() { 10739 const extraSections = { 10740 general: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(MetaBoxesSection, { title: (0, import_i18n9.__)("Advanced") }), 10741 appearance: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 10742 PreferenceToggleControl, 10743 { 10744 scope: "core/edit-post", 10745 featureName: "themeStyles", 10746 help: (0, import_i18n9.__)("Make the editor look like your theme."), 10747 label: (0, import_i18n9.__)("Use theme styles") 10748 } 10749 ) 10750 }; 10751 return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(PreferencesModal, { extraSections }); 10752 } 10753 10754 // packages/edit-post/build-module/components/more-menu/index.mjs 10755 var import_jsx_runtime34 = __toESM(require_jsx_runtime(), 1); 10756 var { ToolsMoreMenuGroup, ViewMoreMenuGroup } = unlock2(import_editor14.privateApis); 10757 var MoreMenu = () => { 10758 const isLargeViewport = (0, import_compose.useViewportMatch)("large"); 10759 return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_jsx_runtime34.Fragment, { children: [ 10760 isLargeViewport && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(ViewMoreMenuGroup, { children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)( 10761 import_preferences8.PreferenceToggleMenuItem, 10762 { 10763 scope: "core/edit-post", 10764 name: "fullscreenMode", 10765 label: (0, import_i18n10.__)("Fullscreen mode"), 10766 info: (0, import_i18n10.__)("Show and hide the admin user interface"), 10767 messageActivated: (0, import_i18n10.__)("Fullscreen mode activated."), 10768 messageDeactivated: (0, import_i18n10.__)( 10769 "Fullscreen mode deactivated." 10770 ), 10771 shortcut: import_keycodes.displayShortcut.secondary("f") 10772 } 10773 ) }), 10774 /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(ToolsMoreMenuGroup, { children: [ 10775 /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(manage_patterns_menu_item_default, {}), 10776 /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(WelcomeGuideMenuItem, {}) 10777 ] }), 10778 /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(EditPostPreferencesModal, {}) 10779 ] }); 10780 }; 10781 var more_menu_default = MoreMenu; 10782 10783 // packages/edit-post/build-module/components/welcome-guide/index.mjs 10784 var import_data20 = __toESM(require_data(), 1); 10785 10786 // packages/edit-post/build-module/components/welcome-guide/default.mjs 10787 var import_data18 = __toESM(require_data(), 1); 10788 var import_components7 = __toESM(require_components(), 1); 10789 var import_i18n11 = __toESM(require_i18n(), 1); 10790 var import_element25 = __toESM(require_element(), 1); 10791 10792 // packages/edit-post/build-module/components/welcome-guide/image.mjs 10793 var import_jsx_runtime35 = __toESM(require_jsx_runtime(), 1); 10794 function WelcomeGuideImage({ nonAnimatedSrc, animatedSrc }) { 10795 return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("picture", { className: "edit-post-welcome-guide__image", children: [ 10796 /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( 10797 "source", 10798 { 10799 srcSet: nonAnimatedSrc, 10800 media: "(prefers-reduced-motion: reduce)" 10801 } 10802 ), 10803 /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("img", { src: animatedSrc, width: "312", height: "240", alt: "" }) 10804 ] }); 10805 } 10806 10807 // packages/edit-post/build-module/components/welcome-guide/default.mjs 10808 var import_jsx_runtime36 = __toESM(require_jsx_runtime(), 1); 10809 function WelcomeGuideDefault() { 10810 const { toggleFeature: toggleFeature2 } = (0, import_data18.useDispatch)(store); 10811 return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 10812 import_components7.Guide, 10813 { 10814 className: "edit-post-welcome-guide", 10815 contentLabel: (0, import_i18n11.__)("Welcome to the editor"), 10816 finishButtonText: (0, import_i18n11.__)("Get started"), 10817 onFinish: () => toggleFeature2("welcomeGuide"), 10818 pages: [ 10819 { 10820 image: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 10821 WelcomeGuideImage, 10822 { 10823 nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-canvas.svg", 10824 animatedSrc: "https://s.w.org/images/block-editor/welcome-canvas.gif" 10825 } 10826 ), 10827 content: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [ 10828 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("h1", { className: "edit-post-welcome-guide__heading", children: (0, import_i18n11.__)("Welcome to the editor") }), 10829 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "edit-post-welcome-guide__text", children: (0, import_i18n11.__)( 10830 "In the WordPress editor, each paragraph, image, or video is presented as a distinct \u201Cblock\u201D of content." 10831 ) }) 10832 ] }) 10833 }, 10834 { 10835 image: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 10836 WelcomeGuideImage, 10837 { 10838 nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-editor.svg", 10839 animatedSrc: "https://s.w.org/images/block-editor/welcome-editor.gif" 10840 } 10841 ), 10842 content: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [ 10843 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("h1", { className: "edit-post-welcome-guide__heading", children: (0, import_i18n11.__)("Customize each block") }), 10844 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "edit-post-welcome-guide__text", children: (0, import_i18n11.__)( 10845 "Each block comes with its own set of controls for changing things like color, width, and alignment. These will show and hide automatically when you have a block selected." 10846 ) }) 10847 ] }) 10848 }, 10849 { 10850 image: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 10851 WelcomeGuideImage, 10852 { 10853 nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-library.svg", 10854 animatedSrc: "https://s.w.org/images/block-editor/welcome-library.gif" 10855 } 10856 ), 10857 content: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [ 10858 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("h1", { className: "edit-post-welcome-guide__heading", children: (0, import_i18n11.__)("Explore all blocks") }), 10859 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "edit-post-welcome-guide__text", children: (0, import_element25.createInterpolateElement)( 10860 (0, import_i18n11.__)( 10861 "All of the blocks available to you live in the block library. You\u2019ll find it wherever you see the <InserterIconImage /> icon." 10862 ), 10863 { 10864 InserterIconImage: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 10865 "img", 10866 { 10867 alt: (0, import_i18n11.__)("inserter"), 10868 src: "data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='18' height='18' rx='2' fill='%231E1E1E'/%3E%3Cpath d='M9.22727 4V14M4 8.77273H14' stroke='white' stroke-width='1.5'/%3E%3C/svg%3E%0A" 10869 } 10870 ) 10871 } 10872 ) }) 10873 ] }) 10874 }, 10875 { 10876 image: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 10877 WelcomeGuideImage, 10878 { 10879 nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-documentation.svg", 10880 animatedSrc: "https://s.w.org/images/block-editor/welcome-documentation.gif" 10881 } 10882 ), 10883 content: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [ 10884 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("h1", { className: "edit-post-welcome-guide__heading", children: (0, import_i18n11.__)("Learn more") }), 10885 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "edit-post-welcome-guide__text", children: (0, import_element25.createInterpolateElement)( 10886 (0, import_i18n11.__)( 10887 "New to the block editor? Want to learn more about using it? <a>Here's a detailed guide.</a>" 10888 ), 10889 { 10890 a: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 10891 import_components7.ExternalLink, 10892 { 10893 href: (0, import_i18n11.__)( 10894 "https://wordpress.org/documentation/article/wordpress-block-editor/" 10895 ) 10896 } 10897 ) 10898 } 10899 ) }) 10900 ] }) 10901 } 10902 ] 10903 } 10904 ); 10905 } 10906 10907 // packages/edit-post/build-module/components/welcome-guide/template.mjs 10908 var import_data19 = __toESM(require_data(), 1); 10909 var import_components8 = __toESM(require_components(), 1); 10910 var import_i18n12 = __toESM(require_i18n(), 1); 10911 var import_jsx_runtime37 = __toESM(require_jsx_runtime(), 1); 10912 function WelcomeGuideTemplate() { 10913 const { toggleFeature: toggleFeature2 } = (0, import_data19.useDispatch)(store); 10914 return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( 10915 import_components8.Guide, 10916 { 10917 className: "edit-template-welcome-guide", 10918 contentLabel: (0, import_i18n12.__)("Welcome to the template editor"), 10919 finishButtonText: (0, import_i18n12.__)("Get started"), 10920 onFinish: () => toggleFeature2("welcomeGuideTemplate"), 10921 pages: [ 10922 { 10923 image: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( 10924 WelcomeGuideImage, 10925 { 10926 nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-template-editor.svg", 10927 animatedSrc: "https://s.w.org/images/block-editor/welcome-template-editor.gif" 10928 } 10929 ), 10930 content: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [ 10931 /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("h1", { className: "edit-post-welcome-guide__heading", children: (0, import_i18n12.__)("Welcome to the template editor") }), 10932 /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { className: "edit-post-welcome-guide__text", children: (0, import_i18n12.__)( 10933 "Templates help define the layout of the site. You can customize all aspects of your posts and pages using blocks and patterns in this editor." 10934 ) }) 10935 ] }) 10936 } 10937 ] 10938 } 10939 ); 10940 } 10941 10942 // packages/edit-post/build-module/components/welcome-guide/index.mjs 10943 var import_jsx_runtime38 = __toESM(require_jsx_runtime(), 1); 10944 function WelcomeGuide({ postType }) { 10945 const { isActive, isEditingTemplate: isEditingTemplate2 } = (0, import_data20.useSelect)( 10946 (select3) => { 10947 const { isFeatureActive: isFeatureActive2 } = select3(store); 10948 const _isEditingTemplate = postType === "wp_template"; 10949 const feature = _isEditingTemplate ? "welcomeGuideTemplate" : "welcomeGuide"; 10950 return { 10951 isActive: isFeatureActive2(feature), 10952 isEditingTemplate: _isEditingTemplate 10953 }; 10954 }, 10955 [postType] 10956 ); 10957 if (!isActive) { 10958 return null; 10959 } 10960 return isEditingTemplate2 ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(WelcomeGuideTemplate, {}) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(WelcomeGuideDefault, {}); 10961 } 10962 10963 // packages/edit-post/build-module/commands/use-commands.mjs 10964 var import_data21 = __toESM(require_data(), 1); 10965 var import_i18n13 = __toESM(require_i18n(), 1); 10966 var import_commands = __toESM(require_commands(), 1); 10967 var import_preferences9 = __toESM(require_preferences(), 1); 10968 var import_notices2 = __toESM(require_notices(), 1); 10969 function useCommands() { 10970 const { isFullscreen } = (0, import_data21.useSelect)((select3) => { 10971 const { get } = select3(import_preferences9.store); 10972 return { 10973 isFullscreen: get("core/edit-post", "fullscreenMode") 10974 }; 10975 }, []); 10976 const { toggle } = (0, import_data21.useDispatch)(import_preferences9.store); 10977 const { createInfoNotice } = (0, import_data21.useDispatch)(import_notices2.store); 10978 (0, import_commands.useCommand)({ 10979 name: "core/toggle-fullscreen-mode", 10980 label: isFullscreen ? (0, import_i18n13.__)("Exit fullscreen") : (0, import_i18n13.__)("Enter fullscreen"), 10981 icon: fullscreen_default, 10982 category: "command", 10983 callback: ({ close }) => { 10984 toggle("core/edit-post", "fullscreenMode"); 10985 close(); 10986 createInfoNotice( 10987 isFullscreen ? (0, import_i18n13.__)("Fullscreen off.") : (0, import_i18n13.__)("Fullscreen on."), 10988 { 10989 id: "core/edit-post/toggle-fullscreen-mode/notice", 10990 type: "snackbar", 10991 actions: [ 10992 { 10993 label: (0, import_i18n13.__)("Undo"), 10994 onClick: () => { 10995 toggle("core/edit-post", "fullscreenMode"); 10996 } 10997 } 10998 ] 10999 } 11000 ); 11001 } 11002 }); 11003 } 11004 11005 // packages/edit-post/build-module/hooks/use-navigate-to-entity-record.mjs 11006 var import_element26 = __toESM(require_element(), 1); 11007 var import_data22 = __toESM(require_data(), 1); 11008 var import_editor15 = __toESM(require_editor(), 1); 11009 var import_core_data6 = __toESM(require_core_data(), 1); 11010 function useNavigateToEntityRecord(initialPostId, initialPostType, defaultRenderingMode) { 11011 const registry = (0, import_data22.useRegistry)(); 11012 const [postHistory, dispatch2] = (0, import_element26.useReducer)( 11013 (historyState, { type, post: post2, previousRenderingMode: previousRenderingMode2, selectedBlockClientId }) => { 11014 if (type === "push") { 11015 const updatedHistory = [...historyState]; 11016 const currentIndex = updatedHistory.length - 1; 11017 updatedHistory[currentIndex] = { 11018 ...updatedHistory[currentIndex], 11019 selectedBlockClientId 11020 }; 11021 return [...updatedHistory, { post: post2, previousRenderingMode: previousRenderingMode2 }]; 11022 } 11023 if (type === "pop") { 11024 if (historyState.length > 1) { 11025 return historyState.slice(0, -1); 11026 } 11027 } 11028 return historyState; 11029 }, 11030 [ 11031 { 11032 post: { postId: initialPostId, postType: initialPostType } 11033 } 11034 ] 11035 ); 11036 const { post, previousRenderingMode } = postHistory[postHistory.length - 1]; 11037 const { getRenderingMode } = (0, import_data22.useSelect)(import_editor15.store); 11038 const { setRenderingMode } = (0, import_data22.useDispatch)(import_editor15.store); 11039 const { editEntityRecord } = (0, import_data22.useDispatch)(import_core_data6.store); 11040 const onNavigateToEntityRecord = (0, import_element26.useCallback)( 11041 (params) => { 11042 const entityEdits = registry.select(import_core_data6.store).getEntityRecordEdits("postType", post.postType, post.postId); 11043 const externalClientId = entityEdits?.selection?.selectionStart?.clientId ?? null; 11044 dispatch2({ 11045 type: "push", 11046 post: { postId: params.postId, postType: params.postType }, 11047 // Save the current rendering mode so we can restore it when navigating back. 11048 previousRenderingMode: getRenderingMode(), 11049 selectedBlockClientId: externalClientId 11050 }); 11051 setRenderingMode(defaultRenderingMode); 11052 }, 11053 [ 11054 registry, 11055 post.postType, 11056 post.postId, 11057 getRenderingMode, 11058 setRenderingMode, 11059 defaultRenderingMode 11060 ] 11061 ); 11062 const onNavigateToPreviousEntityRecord = (0, import_element26.useCallback)(() => { 11063 if (postHistory.length > 1) { 11064 const previousItem = postHistory[postHistory.length - 2]; 11065 if (previousItem.selectedBlockClientId) { 11066 editEntityRecord( 11067 "postType", 11068 previousItem.post.postType, 11069 previousItem.post.postId, 11070 { 11071 selection: { 11072 selectionStart: { 11073 clientId: previousItem.selectedBlockClientId 11074 }, 11075 selectionEnd: { 11076 clientId: previousItem.selectedBlockClientId 11077 } 11078 } 11079 }, 11080 { undoIgnore: true } 11081 ); 11082 } 11083 } 11084 dispatch2({ 11085 type: "pop" 11086 }); 11087 if (previousRenderingMode) { 11088 setRenderingMode(previousRenderingMode); 11089 } 11090 }, [ 11091 setRenderingMode, 11092 previousRenderingMode, 11093 postHistory, 11094 editEntityRecord 11095 ]); 11096 return { 11097 currentPost: post, 11098 onNavigateToEntityRecord, 11099 onNavigateToPreviousEntityRecord: postHistory.length > 1 ? onNavigateToPreviousEntityRecord : void 0 11100 }; 11101 } 11102 11103 // packages/edit-post/build-module/components/meta-boxes/use-meta-box-initialization.mjs 11104 var import_data23 = __toESM(require_data(), 1); 11105 var import_editor16 = __toESM(require_editor(), 1); 11106 var import_core_data7 = __toESM(require_core_data(), 1); 11107 var import_element27 = __toESM(require_element(), 1); 11108 var useMetaBoxInitialization = (enabled) => { 11109 const { 11110 isEnabledAndEditorReady, 11111 isCollaborationEnabled, 11112 hasIncompatibleMetaBoxes, 11113 hasActiveMetaBoxes 11114 } = (0, import_data23.useSelect)( 11115 (select3) => { 11116 const { 11117 __unstableIsEditorReady, 11118 isCollaborationEnabledForCurrentPost 11119 } = unlock2(select3(import_editor16.store)); 11120 return { 11121 isEnabledAndEditorReady: enabled && __unstableIsEditorReady(), 11122 isCollaborationEnabled: isCollaborationEnabledForCurrentPost(), 11123 hasIncompatibleMetaBoxes: enabled ? select3(store).getAllMetaBoxes().some((metaBox) => !metaBox.__rtc_compatible) : false, 11124 hasActiveMetaBoxes: enabled && select3(store).hasMetaBoxes() 11125 }; 11126 }, 11127 [enabled] 11128 ); 11129 const { setCollaborationSupported } = unlock2((0, import_data23.useDispatch)(import_core_data7.store)); 11130 const { updateEditorSettings } = (0, import_data23.useDispatch)(import_editor16.store); 11131 const { initializeMetaBoxes: initializeMetaBoxes2 } = (0, import_data23.useDispatch)(store); 11132 (0, import_element27.useEffect)(() => { 11133 if (isEnabledAndEditorReady) { 11134 initializeMetaBoxes2(); 11135 if (isCollaborationEnabled && hasIncompatibleMetaBoxes) { 11136 setCollaborationSupported(false); 11137 } 11138 if (hasActiveMetaBoxes) { 11139 updateEditorSettings({ disableVisualRevisions: true }); 11140 } 11141 } 11142 }, [ 11143 isEnabledAndEditorReady, 11144 initializeMetaBoxes2, 11145 isCollaborationEnabled, 11146 setCollaborationSupported, 11147 hasIncompatibleMetaBoxes, 11148 hasActiveMetaBoxes, 11149 updateEditorSettings 11150 ]); 11151 }; 11152 11153 // packages/edit-post/build-module/components/layout/index.mjs 11154 var import_jsx_runtime39 = __toESM(require_jsx_runtime(), 1); 11155 var { useCommandContext } = unlock2(import_commands2.privateApis); 11156 var { useDrag } = unlock2(import_components9.privateApis); 11157 var { Editor, FullscreenMode, UploadProgressSnackbar } = unlock2(import_editor17.privateApis); 11158 var { BlockKeyboardShortcuts } = unlock2(import_block_library.privateApis); 11159 var DESIGN_POST_TYPES = [ 11160 "wp_template", 11161 "wp_template_part", 11162 "wp_block", 11163 "wp_navigation" 11164 ]; 11165 function useEditorStyles(settings) { 11166 const { hasThemeStyleSupport } = (0, import_data24.useSelect)((select3) => { 11167 return { 11168 hasThemeStyleSupport: select3(store).isFeatureActive("themeStyles") 11169 }; 11170 }, []); 11171 return (0, import_element28.useMemo)(() => { 11172 const presetStyles = settings.styles?.filter( 11173 (style) => style.__unstableType && style.__unstableType !== "theme" 11174 ) ?? []; 11175 const defaultEditorStyles = [ 11176 ...settings?.defaultEditorStyles ?? [], 11177 ...presetStyles 11178 ]; 11179 const hasThemeStyles = hasThemeStyleSupport && presetStyles.length !== (settings.styles?.length ?? 0); 11180 if (!settings.disableLayoutStyles && !hasThemeStyles) { 11181 defaultEditorStyles.push({ 11182 css: getLayoutStyles({ 11183 style: {}, 11184 selector: "body", 11185 hasBlockGapSupport: false, 11186 hasFallbackGapSupport: true, 11187 fallbackGapValue: "0.5em" 11188 }) 11189 }); 11190 } 11191 return hasThemeStyles ? settings.styles ?? [] : defaultEditorStyles; 11192 }, [ 11193 settings.defaultEditorStyles, 11194 settings.disableLayoutStyles, 11195 settings.styles, 11196 hasThemeStyleSupport 11197 ]); 11198 } 11199 function MetaBoxesMain() { 11200 const [isOpen, openHeight, hasAnyVisible] = (0, import_data24.useSelect)((select3) => { 11201 const { get } = select3(import_preferences10.store); 11202 const { isMetaBoxLocationVisible: isMetaBoxLocationVisible2 } = select3(store); 11203 return [ 11204 !!get("core/edit-post", "metaBoxesMainIsOpen"), 11205 get("core/edit-post", "metaBoxesMainOpenHeight"), 11206 isMetaBoxLocationVisible2("normal") || isMetaBoxLocationVisible2("advanced") || isMetaBoxLocationVisible2("side") 11207 ]; 11208 }, []); 11209 const { set: setPreference } = (0, import_data24.useDispatch)(import_preferences10.store); 11210 const isShort = (0, import_compose2.useMediaQuery)("(max-height: 549px)"); 11211 const [{ min: min2 = 0, max: max2 }, setHeightConstraints] = (0, import_element28.useState)(() => ({})); 11212 const effectSizeConstraints = (0, import_compose2.useRefEffect)((node) => { 11213 const container = node.closest( 11214 ".interface-interface-skeleton__content" 11215 ); 11216 if (!container) { 11217 return; 11218 } 11219 const noticeContainer = container.querySelector(".editor-notices"); 11220 const resizeHandle = container.querySelector( 11221 ".edit-post-meta-boxes-main__presenter" 11222 ); 11223 const deriveConstraints = () => { 11224 const fullHeight = container.offsetHeight; 11225 let nextMax = fullHeight; 11226 if (noticeContainer) { 11227 nextMax -= noticeContainer.offsetHeight; 11228 } 11229 const nextMin = resizeHandle?.offsetHeight ?? 0; 11230 setHeightConstraints({ min: nextMin, max: nextMax }); 11231 }; 11232 const observer = new window.ResizeObserver(deriveConstraints); 11233 observer.observe(container); 11234 if (noticeContainer) { 11235 observer.observe(noticeContainer); 11236 } 11237 return () => observer.disconnect(); 11238 }, []); 11239 const metaBoxesMainRef = (0, import_element28.useRef)(); 11240 const setMainRefs = (0, import_compose2.useMergeRefs)([ 11241 metaBoxesMainRef, 11242 effectSizeConstraints 11243 ]); 11244 const separatorRef = (0, import_element28.useRef)(); 11245 const separatorHelpId = (0, import_element28.useId)(); 11246 const heightRef = (0, import_element28.useRef)(); 11247 const getAriaValueNow = (height) => Math.round((height - min2) / (max2 - min2) * 100); 11248 const persistIsOpen = (to = !isOpen) => setPreference("core/edit-post", "metaBoxesMainIsOpen", to); 11249 const applyHeight = (candidateHeight = "auto", isPersistent) => { 11250 let styleHeight; 11251 if (candidateHeight === "auto") { 11252 isPersistent = false; 11253 styleHeight = candidateHeight; 11254 } else { 11255 candidateHeight = Math.min(max2, Math.max(min2, candidateHeight)); 11256 heightRef.current = candidateHeight; 11257 styleHeight = `$candidateHeight}px`; 11258 } 11259 if (isPersistent) { 11260 setPreference( 11261 "core/edit-post", 11262 "metaBoxesMainOpenHeight", 11263 candidateHeight 11264 ); 11265 } else { 11266 metaBoxesMainRef.current.style.height = styleHeight; 11267 if (!isShort) { 11268 separatorRef.current.ariaValueNow = getAriaValueNow(candidateHeight); 11269 } 11270 } 11271 }; 11272 const bindDragGesture = useDrag( 11273 ({ movement, first, last, memo, tap, args }) => { 11274 const pane = metaBoxesMainRef.current; 11275 const [, yMovement] = movement; 11276 if (first) { 11277 pane.classList.add("is-resizing"); 11278 let fromHeight = heightRef.current ?? pane.offsetHeight; 11279 if (isOpen) { 11280 if (fromHeight > max2) { 11281 fromHeight = max2; 11282 } 11283 } else { 11284 fromHeight = min2; 11285 } 11286 applyHeight(fromHeight - yMovement); 11287 return { fromHeight }; 11288 } 11289 if (!first && !last && !tap) { 11290 applyHeight(memo.fromHeight - yMovement); 11291 return memo; 11292 } 11293 pane.classList.remove("is-resizing"); 11294 if (tap) { 11295 const [onTap] = args; 11296 onTap?.(); 11297 return; 11298 } 11299 const nextIsOpen = heightRef.current > min2; 11300 persistIsOpen(nextIsOpen); 11301 applyHeight(heightRef.current, nextIsOpen); 11302 }, 11303 { keyboardDisplacement: 20, filterTaps: true } 11304 ); 11305 if (!hasAnyVisible) { 11306 return; 11307 } 11308 const contents = /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)( 11309 "div", 11310 { 11311 className: "edit-post-layout__metaboxes edit-post-meta-boxes-main__liner", 11312 hidden: !isOpen, 11313 children: [ 11314 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(MetaBoxes, { location: "normal" }), 11315 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(MetaBoxes, { location: "advanced" }) 11316 ] 11317 } 11318 ); 11319 const isAutoHeight = openHeight === void 0; 11320 const usedOpenHeight = isShort ? "auto" : openHeight; 11321 const usedHeight = isOpen ? usedOpenHeight : min2; 11322 const usedAriaValueNow = max2 === void 0 || isAutoHeight ? 50 : getAriaValueNow(usedHeight); 11323 const paneLabel = (0, import_i18n14.__)("Meta Boxes"); 11324 const toggle = /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)( 11325 "button", 11326 { 11327 "aria-expanded": isOpen, 11328 onClick: ({ detail }) => { 11329 if (isShort || !detail) { 11330 persistIsOpen(); 11331 } 11332 }, 11333 ...!isShort && bindDragGesture(persistIsOpen), 11334 children: [ 11335 paneLabel, 11336 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_components9.Icon, { icon: isOpen ? chevron_up_default : chevron_down_default }) 11337 ] 11338 } 11339 ); 11340 const separator = !isShort && /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment, { children: [ 11341 /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(tooltip_exports.Root, { children: [ 11342 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( 11343 tooltip_exports.Trigger, 11344 { 11345 render: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( 11346 "button", 11347 { 11348 ref: separatorRef, 11349 role: "separator", 11350 "aria-valuenow": usedAriaValueNow, 11351 "aria-label": (0, import_i18n14.__)("Drag to resize"), 11352 "aria-describedby": separatorHelpId, 11353 ...bindDragGesture() 11354 } 11355 ) 11356 } 11357 ), 11358 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(tooltip_exports.Popup, { children: (0, import_i18n14.__)("Drag to resize") }) 11359 ] }), 11360 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(VisuallyHidden, { id: separatorHelpId, children: (0, import_i18n14.__)( 11361 "Use up and down arrow keys to resize the meta box pane." 11362 ) }) 11363 ] }); 11364 return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)( 11365 navigable_region_default, 11366 { 11367 ariaLabel: paneLabel, 11368 ref: setMainRefs, 11369 className: clsx_default( 11370 "edit-post-meta-boxes-main", 11371 !isShort && "is-resizable" 11372 ), 11373 style: { height: usedHeight }, 11374 children: [ 11375 /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "edit-post-meta-boxes-main__presenter", children: [ 11376 toggle, 11377 separator 11378 ] }), 11379 contents 11380 ] 11381 } 11382 ); 11383 } 11384 function Layout({ 11385 postId: initialPostId, 11386 postType: initialPostType, 11387 settings, 11388 initialEdits 11389 }) { 11390 useCommands(); 11391 const { createErrorNotice } = (0, import_data24.useDispatch)(import_notices3.store); 11392 const { 11393 currentPost: { postId: currentPostId, postType: currentPostType }, 11394 onNavigateToEntityRecord, 11395 onNavigateToPreviousEntityRecord 11396 } = useNavigateToEntityRecord( 11397 initialPostId, 11398 initialPostType, 11399 "post-only" 11400 ); 11401 const isEditingTemplate2 = currentPostType === "wp_template"; 11402 const { 11403 mode, 11404 isFullscreenActive, 11405 hasResolvedMode, 11406 hasActiveMetaboxes, 11407 hasBlockSelected, 11408 showIconLabels, 11409 isDistractionFree, 11410 showMetaBoxes, 11411 isWelcomeGuideVisible, 11412 templateId 11413 } = (0, import_data24.useSelect)( 11414 (select3) => { 11415 const { get } = select3(import_preferences10.store); 11416 const { isFeatureActive: isFeatureActive2, hasMetaBoxes: hasMetaBoxes2 } = select3(store); 11417 const { canUser, getPostType, getTemplateId } = unlock2( 11418 select3(import_core_data8.store) 11419 ); 11420 const supportsTemplateMode = settings.supportsTemplateMode; 11421 const isViewable = getPostType(currentPostType)?.viewable ?? false; 11422 const canViewTemplate = canUser("read", { 11423 kind: "postType", 11424 name: "wp_template" 11425 }); 11426 const { getBlockSelectionStart, isZoomOut } = unlock2( 11427 select3(import_block_editor2.store) 11428 ); 11429 const { getEditorMode: getEditorMode2, getDefaultRenderingMode } = unlock2( 11430 select3(import_editor17.store) 11431 ); 11432 const isNotDesignPostType = !DESIGN_POST_TYPES.includes(currentPostType); 11433 const isDirectlyEditingPattern = currentPostType === "wp_block" && !onNavigateToPreviousEntityRecord; 11434 const _templateId = getTemplateId(currentPostType, currentPostId); 11435 const defaultMode = getDefaultRenderingMode(currentPostType); 11436 return { 11437 mode: getEditorMode2(), 11438 isFullscreenActive: isFeatureActive2("fullscreenMode"), 11439 hasActiveMetaboxes: hasMetaBoxes2(), 11440 hasResolvedMode: defaultMode === "template-locked" ? !!_templateId : defaultMode !== void 0, 11441 hasBlockSelected: !!getBlockSelectionStart(), 11442 showIconLabels: get("core", "showIconLabels"), 11443 isDistractionFree: get("core", "distractionFree"), 11444 showMetaBoxes: isNotDesignPostType && !isZoomOut() || isDirectlyEditingPattern, 11445 isWelcomeGuideVisible: isFeatureActive2("welcomeGuide"), 11446 templateId: supportsTemplateMode && isViewable && canViewTemplate && !isEditingTemplate2 ? _templateId : null 11447 }; 11448 }, 11449 [ 11450 currentPostType, 11451 currentPostId, 11452 isEditingTemplate2, 11453 settings.supportsTemplateMode, 11454 onNavigateToPreviousEntityRecord 11455 ] 11456 ); 11457 useMetaBoxInitialization(hasActiveMetaboxes && hasResolvedMode); 11458 const commandContext = hasBlockSelected ? "block-selection-edit" : "entity-edit"; 11459 useCommandContext(commandContext); 11460 const styles = useEditorStyles(settings); 11461 const editorSettings = (0, import_element28.useMemo)( 11462 () => ({ 11463 ...settings, 11464 styles, 11465 onNavigateToEntityRecord, 11466 onNavigateToPreviousEntityRecord 11467 }), 11468 [ 11469 settings, 11470 styles, 11471 onNavigateToEntityRecord, 11472 onNavigateToPreviousEntityRecord 11473 ] 11474 ); 11475 if (showIconLabels) { 11476 document.body.classList.add("show-icon-labels"); 11477 } else { 11478 document.body.classList.remove("show-icon-labels"); 11479 } 11480 const navigateRegionsProps = (0, import_components9.__unstableUseNavigateRegions)(); 11481 const className = clsx_default("edit-post-layout", "is-mode-" + mode, { 11482 "has-metaboxes": hasActiveMetaboxes 11483 }); 11484 function onPluginAreaError(name) { 11485 createErrorNotice( 11486 (0, import_i18n14.sprintf)( 11487 /* translators: %s: plugin name */ 11488 (0, import_i18n14.__)( 11489 'The "%s" plugin has encountered an error and cannot be rendered.' 11490 ), 11491 name 11492 ) 11493 ); 11494 } 11495 const { createSuccessNotice } = (0, import_data24.useDispatch)(import_notices3.store); 11496 const onActionPerformed = (0, import_element28.useCallback)( 11497 (actionId, items) => { 11498 switch (actionId) { 11499 case "move-to-trash": 11500 { 11501 document.location.href = (0, import_url5.addQueryArgs)("edit.php", { 11502 trashed: 1, 11503 post_type: items[0].type, 11504 ids: items[0].id 11505 }); 11506 } 11507 break; 11508 case "duplicate-post": 11509 { 11510 const newItem = items[0]; 11511 const title = typeof newItem.title === "string" ? newItem.title : newItem.title?.rendered; 11512 createSuccessNotice( 11513 (0, import_i18n14.sprintf)( 11514 // translators: %s: Title of the created post or template, e.g: "Hello world". 11515 (0, import_i18n14.__)('"%s" successfully created.'), 11516 (0, import_html_entities.decodeEntities)(title) || (0, import_i18n14.__)("(no title)") 11517 ), 11518 { 11519 type: "snackbar", 11520 id: "duplicate-post-action", 11521 actions: [ 11522 { 11523 label: (0, import_i18n14.__)("Edit"), 11524 onClick: () => { 11525 const postId = newItem.id; 11526 document.location.href = (0, import_url5.addQueryArgs)("post.php", { 11527 post: postId, 11528 action: "edit" 11529 }); 11530 } 11531 } 11532 ] 11533 } 11534 ); 11535 } 11536 break; 11537 } 11538 }, 11539 [createSuccessNotice] 11540 ); 11541 const initialPost = (0, import_element28.useMemo)(() => { 11542 return { 11543 type: initialPostType, 11544 id: initialPostId 11545 }; 11546 }, [initialPostType, initialPostId]); 11547 const backButton = (0, import_compose2.useViewportMatch)("medium") && isFullscreenActive ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(back_button_default, { initialPost }) : null; 11548 return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_components9.SlotFillProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(tooltip_exports.Provider, { children: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_editor17.ErrorBoundary, { canCopyContent: true, children: [ 11549 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(WelcomeGuide, { postType: currentPostType }), 11550 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { ...navigateRegionsProps, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)( 11551 Editor, 11552 { 11553 settings: editorSettings, 11554 initialEdits, 11555 postType: currentPostType, 11556 postId: currentPostId, 11557 templateId, 11558 className, 11559 forceIsDirty: hasActiveMetaboxes, 11560 autoFocus: !isWelcomeGuideVisible, 11561 onActionPerformed, 11562 extraSidebarPanels: showMetaBoxes && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(MetaBoxes, { location: "side" }), 11563 extraContent: !isDistractionFree && showMetaBoxes && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(MetaBoxesMain, {}), 11564 children: [ 11565 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_editor17.PostLockedModal, {}), 11566 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(EditorInitialization, {}), 11567 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(FullscreenMode, { isActive: isFullscreenActive }), 11568 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(BrowserURL, {}), 11569 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_editor17.UnsavedChangesWarning, {}), 11570 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_editor17.AutosaveMonitor, {}), 11571 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_editor17.LocalAutosaveMonitor, {}), 11572 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(keyboard_shortcuts_default, {}), 11573 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_editor17.EditorKeyboardShortcutsRegister, {}), 11574 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(BlockKeyboardShortcuts, {}), 11575 currentPostType === "wp_block" && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(InitPatternModal, {}), 11576 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_plugins.PluginArea, { onError: onPluginAreaError }), 11577 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(more_menu_default, {}), 11578 backButton, 11579 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_notices3.SnackbarNotices, { className: "edit-post-layout__snackbar" }), 11580 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(UploadProgressSnackbar, {}) 11581 ] 11582 } 11583 ) }) 11584 ] }) }) }); 11585 } 11586 var layout_default = Layout; 11587 11588 // packages/edit-post/build-module/deprecated.mjs 11589 var import_editor18 = __toESM(require_editor(), 1); 11590 var import_url6 = __toESM(require_url(), 1); 11591 var import_deprecated3 = __toESM(require_deprecated(), 1); 11592 var import_jsx_runtime40 = __toESM(require_jsx_runtime(), 1); 11593 var { PluginPostExcerpt } = unlock2(import_editor18.privateApis); 11594 var isSiteEditor = (0, import_url6.getPath)(window.location.href)?.includes( 11595 "site-editor.php" 11596 ); 11597 var deprecateSlot = (name) => { 11598 (0, import_deprecated3.default)(`wp.editPost.$name}`, { 11599 since: "6.6", 11600 alternative: `wp.editor.$name}` 11601 }); 11602 }; 11603 function PluginBlockSettingsMenuItem(props) { 11604 if (isSiteEditor) { 11605 return null; 11606 } 11607 deprecateSlot("PluginBlockSettingsMenuItem"); 11608 return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_editor18.PluginBlockSettingsMenuItem, { ...props }); 11609 } 11610 function PluginDocumentSettingPanel(props) { 11611 if (isSiteEditor) { 11612 return null; 11613 } 11614 deprecateSlot("PluginDocumentSettingPanel"); 11615 return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_editor18.PluginDocumentSettingPanel, { ...props }); 11616 } 11617 function PluginMoreMenuItem(props) { 11618 if (isSiteEditor) { 11619 return null; 11620 } 11621 deprecateSlot("PluginMoreMenuItem"); 11622 return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_editor18.PluginMoreMenuItem, { ...props }); 11623 } 11624 function PluginPrePublishPanel(props) { 11625 if (isSiteEditor) { 11626 return null; 11627 } 11628 deprecateSlot("PluginPrePublishPanel"); 11629 return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_editor18.PluginPrePublishPanel, { ...props }); 11630 } 11631 function PluginPostPublishPanel(props) { 11632 if (isSiteEditor) { 11633 return null; 11634 } 11635 deprecateSlot("PluginPostPublishPanel"); 11636 return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_editor18.PluginPostPublishPanel, { ...props }); 11637 } 11638 function PluginPostStatusInfo(props) { 11639 if (isSiteEditor) { 11640 return null; 11641 } 11642 deprecateSlot("PluginPostStatusInfo"); 11643 return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_editor18.PluginPostStatusInfo, { ...props }); 11644 } 11645 function PluginSidebar(props) { 11646 if (isSiteEditor) { 11647 return null; 11648 } 11649 deprecateSlot("PluginSidebar"); 11650 return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_editor18.PluginSidebar, { ...props }); 11651 } 11652 function PluginSidebarMoreMenuItem(props) { 11653 if (isSiteEditor) { 11654 return null; 11655 } 11656 deprecateSlot("PluginSidebarMoreMenuItem"); 11657 return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_editor18.PluginSidebarMoreMenuItem, { ...props }); 11658 } 11659 function __experimentalPluginPostExcerpt() { 11660 if (isSiteEditor) { 11661 return null; 11662 } 11663 (0, import_deprecated3.default)("wp.editPost.__experimentalPluginPostExcerpt", { 11664 since: "6.6", 11665 hint: "Core and custom panels can be access programmatically using their panel name.", 11666 link: "https://developer.wordpress.org/block-editor/reference-guides/slotfills/plugin-document-setting-panel/#accessing-a-panel-programmatically" 11667 }); 11668 return PluginPostExcerpt; 11669 } 11670 11671 // packages/edit-post/build-module/index.mjs 11672 var import_jsx_runtime41 = __toESM(require_jsx_runtime(), 1); 11673 var { 11674 BackButton: __experimentalMainDashboardButton, 11675 registerCoreBlockBindingsSources 11676 } = unlock2(import_editor19.privateApis); 11677 var { enablePreloadMultiUse, clearPreloadedData } = unlock2( 11678 import_api_fetch2.default.privateApis 11679 ); 11680 function initializeEditor(id, postType, postId, settings, initialEdits) { 11681 const isMediumOrBigger = window.matchMedia("(min-width: 782px)").matches; 11682 const target = document.getElementById(id); 11683 const root = (0, import_element29.createRoot)(target); 11684 (0, import_data25.dispatch)(import_preferences11.store).setDefaults("core/edit-post", { 11685 fullscreenMode: true, 11686 themeStyles: true, 11687 welcomeGuide: true, 11688 welcomeGuideTemplate: true 11689 }); 11690 (0, import_data25.dispatch)(import_preferences11.store).setDefaults("core", { 11691 allowRightClickOverrides: true, 11692 editorMode: "visual", 11693 editorTool: "edit", 11694 fixedToolbar: false, 11695 hiddenBlockTypes: [], 11696 inactivePanels: [], 11697 openPanels: ["post-status"], 11698 showBlockBreadcrumbs: true, 11699 showIconLabels: false, 11700 showListViewByDefault: false, 11701 enableChoosePatternModal: true, 11702 isPublishSidebarEnabled: true, 11703 showCollaborationCursor: false, 11704 showCollaborationJoinNotifications: true, 11705 showCollaborationLeaveNotifications: true, 11706 showCollaborationPostSaveNotifications: true 11707 }); 11708 if (window.__clientSideMediaProcessing) { 11709 (0, import_data25.dispatch)(import_preferences11.store).setDefaults("core/media", { 11710 requireApproval: true, 11711 optimizeOnUpload: true 11712 }); 11713 } 11714 (0, import_data25.dispatch)(import_blocks2.store).reapplyBlockTypeFilters(); 11715 if (isMediumOrBigger && (0, import_data25.select)(import_preferences11.store).get("core", "showListViewByDefault") && !(0, import_data25.select)(import_preferences11.store).get("core", "distractionFree")) { 11716 (0, import_data25.dispatch)(import_editor19.store).setIsListViewOpened(true); 11717 } 11718 (0, import_block_library2.registerCoreBlocks)(); 11719 registerCoreBlockBindingsSources(); 11720 (0, import_widgets.registerLegacyWidgetBlock)({ inserter: false }); 11721 (0, import_widgets.registerWidgetGroupBlock)({ inserter: false }); 11722 if (false) { 11723 (0, import_block_library2.__experimentalRegisterExperimentalCoreBlocks)({ 11724 enableFSEBlocks: settings.__unstableEnableFullSiteEditingBlocks 11725 }); 11726 } 11727 const documentMode = document.compatMode === "CSS1Compat" ? "Standards" : "Quirks"; 11728 if (documentMode !== "Standards") { 11729 console.warn( 11730 "Your browser is using Quirks Mode. \nThis can cause rendering issues such as blocks overlaying meta boxes in the editor. Quirks Mode can be triggered by PHP errors or HTML code appearing before the opening <!DOCTYPE html>. Try checking the raw page source or your site's PHP error log and resolving errors there, removing any HTML before the doctype, or disabling plugins." 11731 ); 11732 } 11733 window.addEventListener("dragover", (e) => e.preventDefault(), false); 11734 window.addEventListener("drop", (e) => e.preventDefault(), false); 11735 enablePreloadMultiUse(); 11736 const preloadedResolutions = preloadResolutions(postType, postId); 11737 preloadedResolutions.finally(() => { 11738 clearPreloadedData(); 11739 if (postType && postId) { 11740 const post = (0, import_data25.select)(import_core_data9.store).getEntityRecord( 11741 "postType", 11742 postType, 11743 postId 11744 ); 11745 if (post) { 11746 (0, import_data25.dispatch)(import_editor19.store).setupEditor( 11747 post, 11748 initialEdits, 11749 settings.template 11750 ); 11751 } 11752 } 11753 root.render( 11754 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_element29.StrictMode, { children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( 11755 layout_default, 11756 { 11757 settings, 11758 postId, 11759 postType, 11760 initialEdits 11761 } 11762 ) }) 11763 ); 11764 }); 11765 return root; 11766 } 11767 async function preloadResolutions(postType, postId) { 11768 const core = (0, import_data25.resolveSelect)(import_core_data9.store); 11769 const coreSelect = (0, import_data25.select)(import_core_data9.store); 11770 try { 11771 await Promise.all([ 11772 core.getCurrentUser(), 11773 core.getEntitiesConfig("postType"), 11774 core.getEntitiesConfig("taxonomy"), 11775 core.getEntitiesConfig("root"), 11776 core.getEntityRecords("root", "taxonomy"), 11777 core.getCurrentTheme(), 11778 // Forward-resolver alias of `getCurrentTheme` with its own 11779 // resolution metadata, so it needs a separate kick. 11780 core.getThemeSupports(), 11781 core.getBlockPatternCategories(), 11782 core.__experimentalGetCurrentGlobalStylesId(), 11783 core.__experimentalGetCurrentThemeBaseGlobalStyles(), 11784 core.__experimentalGetCurrentThemeGlobalStylesVariations(), 11785 core.getEntityRecord("root", "__unstableBase"), 11786 core.getEntityRecord("root", "site"), 11787 core.canUser("read", { kind: "root", name: "site" }), 11788 core.canUser("create", { kind: "postType", name: "attachment" }), 11789 core.canUser("create", { kind: "postType", name: "page" }), 11790 core.canUser("create", { kind: "postType", name: "wp_block" }), 11791 core.canUser("create", { 11792 kind: "postType", 11793 name: "wp_template" 11794 }), 11795 // The DataForm-based inspector requests the entity form config 11796 // when the document sidebar mounts. The args must match the 11797 // `useViewConfig` call in `@wordpress/views` exactly for the 11798 // resolution (and its preload entry) to be shared. 11799 ...postType && window?.__experimentalDataFormInspector ? [ 11800 unlock2(core).getViewConfig("postType", postType, { 11801 fields: "form" 11802 }) 11803 ] : [], 11804 // Per-post resolvers. `getPostType` and `getEditedEntityRecord` 11805 // are shorthand/forward-resolver aliases with their own 11806 // resolution metadata, so they need separate kicks. 11807 ...postType && postId ? [ 11808 core.getPostType(postType), 11809 core.getEntityRecord("postType", postType, postId), 11810 core.getEditedEntityRecord( 11811 "postType", 11812 postType, 11813 postId 11814 ), 11815 core.getAutosaves(postType, postId), 11816 core.getDefaultTemplateId({ slug: "front-page" }), 11817 core.canUser("create", { 11818 kind: "postType", 11819 name: postType 11820 }) 11821 ] : [] 11822 ]); 11823 const tasks = []; 11824 const globalStylesId = coreSelect.__experimentalGetCurrentGlobalStylesId(); 11825 if (globalStylesId) { 11826 tasks.push( 11827 core.getEntityRecord("root", "globalStyles", globalStylesId), 11828 core.canUser("read", { 11829 kind: "root", 11830 name: "globalStyles", 11831 id: globalStylesId 11832 }) 11833 ); 11834 } 11835 if (postType && postId) { 11836 const post = coreSelect.getEntityRecord( 11837 "postType", 11838 postType, 11839 postId 11840 ); 11841 if (post) { 11842 let slug = "page" === postType ? "page" : "single-" + postType; 11843 if (post.slug) { 11844 slug += "-" + post.slug; 11845 } 11846 tasks.push(core.getDefaultTemplateId({ slug })); 11847 if (post.author) { 11848 tasks.push( 11849 core.getUser(post.author, { 11850 context: "view", 11851 _fields: "id,name" 11852 }) 11853 ); 11854 } 11855 } 11856 } 11857 if (tasks.length) { 11858 await Promise.all(tasks); 11859 } 11860 } catch { 11861 } 11862 } 11863 function reinitializeEditor() { 11864 (0, import_deprecated4.default)("wp.editPost.reinitializeEditor", { 11865 since: "6.2", 11866 version: "6.3" 11867 }); 11868 } 11869 return __toCommonJS(index_exports); 11870 })(); 11871 /*! Bundled license information: 11872 11873 use-sync-external-store/cjs/use-sync-external-store-shim.development.js: 11874 (** 11875 * @license React 11876 * use-sync-external-store-shim.development.js 11877 * 11878 * Copyright (c) Meta Platforms, Inc. and affiliates. 11879 * 11880 * This source code is licensed under the MIT license found in the 11881 * LICENSE file in the root directory of this source tree. 11882 *) 11883 11884 use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js: 11885 (** 11886 * @license React 11887 * use-sync-external-store-shim/with-selector.development.js 11888 * 11889 * Copyright (c) Meta Platforms, Inc. and affiliates. 11890 * 11891 * This source code is licensed under the MIT license found in the 11892 * LICENSE file in the root directory of this source tree. 11893 *) 11894 */
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated : Mon Aug 3 08:20:19 2026 | Cross-referenced by PHPXref |