| [ 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_blocks3 = __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_element28 = __toESM(require_element(), 1); 414 var import_data26 = __toESM(require_data(), 1); 415 var import_preferences11 = __toESM(require_preferences(), 1); 416 var import_widgets = __toESM(require_widgets(), 1); 417 var import_editor20 = __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/esm/safeReact.js 438 var React = __toESM(require_react(), 1); 439 var SafeReact = { 440 ...React 441 }; 442 443 // node_modules/@base-ui/utils/esm/useRefWithInit.js 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/esm/useStableCallback.js 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/esm/useIsoLayoutEffect.js 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/esm/warn.js 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/esm/internals/direction-context/DirectionContext.js 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/esm/internals/useRenderElement.js 518 var React7 = __toESM(require_react(), 1); 519 520 // node_modules/@base-ui/utils/esm/useMergedRefs.js 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/esm/getReactElementRef.js 610 var React6 = __toESM(require_react(), 1); 611 612 // node_modules/@base-ui/utils/esm/reactVersion.js 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/esm/getReactElementRef.js 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/esm/mergeObjects.js 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/esm/empty.js 647 function NOOP() { 648 } 649 var EMPTY_ARRAY = Object.freeze([]); 650 var EMPTY_OBJECT = Object.freeze({}); 651 652 // node_modules/@base-ui/react/esm/internals/getStateAttributesProps.js 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/esm/utils/resolveClassName.js 674 function resolveClassName(className, state) { 675 return typeof className === "function" ? className(state) : className; 676 } 677 678 // node_modules/@base-ui/react/esm/utils/resolveStyle.js 679 function resolveStyle(style, state) { 680 return typeof style === "function" ? style(state) : style; 681 } 682 683 // node_modules/@base-ui/react/esm/merge-props/mergeProps.js 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/esm/internals/useRenderElement.js 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/react/esm/internals/reason-parts.js 957 var reason_parts_exports = {}; 958 __export(reason_parts_exports, { 959 cancelOpen: () => cancelOpen, 960 chipRemovePress: () => chipRemovePress, 961 clearPress: () => clearPress, 962 closePress: () => closePress, 963 closeWatcher: () => closeWatcher, 964 decrementPress: () => decrementPress, 965 disabled: () => disabled, 966 drag: () => drag, 967 escapeKey: () => escapeKey, 968 focusOut: () => focusOut, 969 imperativeAction: () => imperativeAction, 970 incrementPress: () => incrementPress, 971 initial: () => initial, 972 inputBlur: () => inputBlur, 973 inputChange: () => inputChange, 974 inputClear: () => inputClear, 975 inputPaste: () => inputPaste, 976 inputPress: () => inputPress, 977 itemPress: () => itemPress, 978 keyboard: () => keyboard, 979 linkPress: () => linkPress, 980 listNavigation: () => listNavigation, 981 missing: () => missing, 982 none: () => none, 983 outsidePress: () => outsidePress, 984 pointer: () => pointer, 985 scrub: () => scrub, 986 siblingOpen: () => siblingOpen, 987 swipe: () => swipe, 988 trackPress: () => trackPress, 989 triggerFocus: () => triggerFocus, 990 triggerHover: () => triggerHover, 991 triggerPress: () => triggerPress, 992 wheel: () => wheel, 993 windowResize: () => windowResize 994 }); 995 var none = "none"; 996 var triggerPress = "trigger-press"; 997 var triggerHover = "trigger-hover"; 998 var triggerFocus = "trigger-focus"; 999 var outsidePress = "outside-press"; 1000 var itemPress = "item-press"; 1001 var closePress = "close-press"; 1002 var linkPress = "link-press"; 1003 var clearPress = "clear-press"; 1004 var chipRemovePress = "chip-remove-press"; 1005 var trackPress = "track-press"; 1006 var incrementPress = "increment-press"; 1007 var decrementPress = "decrement-press"; 1008 var inputChange = "input-change"; 1009 var inputClear = "input-clear"; 1010 var inputBlur = "input-blur"; 1011 var inputPaste = "input-paste"; 1012 var inputPress = "input-press"; 1013 var focusOut = "focus-out"; 1014 var escapeKey = "escape-key"; 1015 var closeWatcher = "close-watcher"; 1016 var listNavigation = "list-navigation"; 1017 var keyboard = "keyboard"; 1018 var pointer = "pointer"; 1019 var drag = "drag"; 1020 var wheel = "wheel"; 1021 var scrub = "scrub"; 1022 var cancelOpen = "cancel-open"; 1023 var siblingOpen = "sibling-open"; 1024 var disabled = "disabled"; 1025 var missing = "missing"; 1026 var initial = "initial"; 1027 var imperativeAction = "imperative-action"; 1028 var swipe = "swipe"; 1029 var windowResize = "window-resize"; 1030 1031 // node_modules/@base-ui/react/esm/internals/createBaseUIEventDetails.js 1032 function createChangeEventDetails(reason, event, trigger, customProperties) { 1033 let canceled = false; 1034 let allowPropagation = false; 1035 const custom = customProperties ?? EMPTY_OBJECT; 1036 const details = { 1037 reason, 1038 event: event ?? new Event("base-ui"), 1039 cancel() { 1040 canceled = true; 1041 }, 1042 allowPropagation() { 1043 allowPropagation = true; 1044 }, 1045 get isCanceled() { 1046 return canceled; 1047 }, 1048 get isPropagationAllowed() { 1049 return allowPropagation; 1050 }, 1051 trigger, 1052 ...custom 1053 }; 1054 return details; 1055 } 1056 1057 // node_modules/@base-ui/utils/esm/useId.js 1058 var React8 = __toESM(require_react(), 1); 1059 var globalId = 0; 1060 function useGlobalId(idOverride, prefix = "mui") { 1061 const [defaultId, setDefaultId] = React8.useState(idOverride); 1062 const id = idOverride || defaultId; 1063 React8.useEffect(() => { 1064 if (defaultId == null) { 1065 globalId += 1; 1066 setDefaultId(`$prefix}-$globalId}`); 1067 } 1068 }, [defaultId, prefix]); 1069 return id; 1070 } 1071 var maybeReactUseId = SafeReact.useId; 1072 function useId(idOverride, prefix) { 1073 if (maybeReactUseId !== void 0) { 1074 const reactId = maybeReactUseId(); 1075 return idOverride ?? (prefix ? `$prefix}-$reactId}` : reactId); 1076 } 1077 return useGlobalId(idOverride, prefix); 1078 } 1079 1080 // node_modules/@base-ui/react/esm/internals/useBaseUiId.js 1081 function useBaseUiId(idOverride) { 1082 return useId(idOverride, "base-ui"); 1083 } 1084 1085 // node_modules/@base-ui/react/esm/internals/useTransitionStatus.js 1086 var React10 = __toESM(require_react(), 1); 1087 1088 // node_modules/@base-ui/utils/esm/useOnMount.js 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/esm/useAnimationFrame.js 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/esm/internals/useTransitionStatus.js 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/esm/internals/stateAttributesMapping.js 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/esm/detectBrowser.js 1421 var hasNavigator = typeof navigator !== "undefined"; 1422 var nav = getNavigatorData(); 1423 var platform = getPlatform(); 1424 var userAgent = getUserAgent(); 1425 var isWebKit2 = typeof CSS === "undefined" || !CSS.supports ? false : CSS.supports("-webkit-backdrop-filter:none"); 1426 var isIOS = ( 1427 // iPads can claim to be MacIntel 1428 nav.platform === "MacIntel" && nav.maxTouchPoints > 1 ? true : /iP(hone|ad|od)|iOS/.test(nav.platform) 1429 ); 1430 var isFirefox = hasNavigator && /firefox/i.test(userAgent); 1431 var isSafari = hasNavigator && /apple/i.test(navigator.vendor); 1432 var isEdge = hasNavigator && /Edg/i.test(userAgent); 1433 var isAndroid = hasNavigator && /android/i.test(platform) || /android/i.test(userAgent); 1434 var isMac = hasNavigator && platform.toLowerCase().startsWith("mac") && !navigator.maxTouchPoints; 1435 var isJSDOM = userAgent.includes("jsdom/"); 1436 function getNavigatorData() { 1437 if (!hasNavigator) { 1438 return { 1439 platform: "", 1440 maxTouchPoints: -1 1441 }; 1442 } 1443 const uaData = navigator.userAgentData; 1444 if (uaData?.platform) { 1445 return { 1446 platform: uaData.platform, 1447 maxTouchPoints: navigator.maxTouchPoints 1448 }; 1449 } 1450 return { 1451 platform: navigator.platform ?? "", 1452 maxTouchPoints: navigator.maxTouchPoints ?? -1 1453 }; 1454 } 1455 function getUserAgent() { 1456 if (!hasNavigator) { 1457 return ""; 1458 } 1459 const uaData = navigator.userAgentData; 1460 if (uaData && Array.isArray(uaData.brands)) { 1461 return uaData.brands.map(({ 1462 brand, 1463 version: version2 1464 }) => `$brand}/$version2}`).join(" "); 1465 } 1466 return navigator.userAgent; 1467 } 1468 function getPlatform() { 1469 if (!hasNavigator) { 1470 return ""; 1471 } 1472 const uaData = navigator.userAgentData; 1473 if (uaData?.platform) { 1474 return uaData.platform; 1475 } 1476 return navigator.platform ?? ""; 1477 } 1478 1479 // node_modules/@base-ui/react/esm/floating-ui-react/utils/constants.js 1480 var FOCUSABLE_ATTRIBUTE = "data-base-ui-focusable"; 1481 var TYPEABLE_SELECTOR = "input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])"; 1482 1483 // node_modules/@base-ui/react/esm/internals/shadowDom.js 1484 function activeElement(doc) { 1485 let element = doc.activeElement; 1486 while (element?.shadowRoot?.activeElement != null) { 1487 element = element.shadowRoot.activeElement; 1488 } 1489 return element; 1490 } 1491 function contains(parent, child) { 1492 if (!parent || !child) { 1493 return false; 1494 } 1495 const rootNode = child.getRootNode?.(); 1496 if (parent.contains(child)) { 1497 return true; 1498 } 1499 if (rootNode && isShadowRoot(rootNode)) { 1500 let next = child; 1501 while (next) { 1502 if (parent === next) { 1503 return true; 1504 } 1505 next = next.parentNode || next.host; 1506 } 1507 } 1508 return false; 1509 } 1510 function getTarget(event) { 1511 if ("composedPath" in event) { 1512 return event.composedPath()[0]; 1513 } 1514 return event.target; 1515 } 1516 1517 // node_modules/@base-ui/react/esm/floating-ui-react/utils/element.js 1518 function isTargetInsideEnabledTrigger(target, triggerElements) { 1519 if (!isElement(target)) { 1520 return false; 1521 } 1522 const targetElement = target; 1523 if (triggerElements.hasElement(targetElement)) { 1524 return !targetElement.hasAttribute("data-trigger-disabled"); 1525 } 1526 for (const [, trigger] of triggerElements.entries()) { 1527 if (contains(trigger, targetElement)) { 1528 return !trigger.hasAttribute("data-trigger-disabled"); 1529 } 1530 } 1531 return false; 1532 } 1533 function isEventTargetWithin(event, node) { 1534 if (node == null) { 1535 return false; 1536 } 1537 if ("composedPath" in event) { 1538 return event.composedPath().includes(node); 1539 } 1540 const eventAgain = event; 1541 return eventAgain.target != null && node.contains(eventAgain.target); 1542 } 1543 function isRootElement(element) { 1544 return element.matches("html,body"); 1545 } 1546 function isTypeableElement(element) { 1547 return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR); 1548 } 1549 function isInteractiveElement(element) { 1550 return element?.closest(`button,a[href],[role="button"],select,[tabindex]:not([tabindex="-1"]),$TYPEABLE_SELECTOR}`) != null; 1551 } 1552 function matchesFocusVisible(element) { 1553 if (!element || isJSDOM) { 1554 return true; 1555 } 1556 try { 1557 return element.matches(":focus-visible"); 1558 } catch (_e) { 1559 return true; 1560 } 1561 } 1562 1563 // node_modules/@base-ui/react/esm/floating-ui-react/utils/nodes.js 1564 function getNodeChildren(nodes, id, onlyOpenChildren = true) { 1565 const directChildren = nodes.filter((node) => node.parentId === id); 1566 return directChildren.flatMap((child) => [...!onlyOpenChildren || child.context?.open ? [child] : [], ...getNodeChildren(nodes, child.id, onlyOpenChildren)]); 1567 } 1568 1569 // node_modules/@base-ui/react/esm/floating-ui-react/utils/event.js 1570 function isReactEvent(event) { 1571 return "nativeEvent" in event; 1572 } 1573 function isMouseLikePointerType(pointerType, strict) { 1574 const values = ["mouse", "pen"]; 1575 if (!strict) { 1576 values.push("", void 0); 1577 } 1578 return values.includes(pointerType); 1579 } 1580 function isClickLikeEvent(event) { 1581 const type = event.type; 1582 return type === "click" || type === "mousedown" || type === "keydown" || type === "keyup"; 1583 } 1584 1585 // node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs 1586 var sides = ["top", "right", "bottom", "left"]; 1587 var min = Math.min; 1588 var max = Math.max; 1589 var round = Math.round; 1590 var floor = Math.floor; 1591 var createCoords = (v) => ({ 1592 x: v, 1593 y: v 1594 }); 1595 var oppositeSideMap = { 1596 left: "right", 1597 right: "left", 1598 bottom: "top", 1599 top: "bottom" 1600 }; 1601 function clamp(start, value, end) { 1602 return max(start, min(value, end)); 1603 } 1604 function evaluate(value, param) { 1605 return typeof value === "function" ? value(param) : value; 1606 } 1607 function getSide(placement) { 1608 return placement.split("-")[0]; 1609 } 1610 function getAlignment(placement) { 1611 return placement.split("-")[1]; 1612 } 1613 function getOppositeAxis(axis) { 1614 return axis === "x" ? "y" : "x"; 1615 } 1616 function getAxisLength(axis) { 1617 return axis === "y" ? "height" : "width"; 1618 } 1619 function getSideAxis(placement) { 1620 const firstChar = placement[0]; 1621 return firstChar === "t" || firstChar === "b" ? "y" : "x"; 1622 } 1623 function getAlignmentAxis(placement) { 1624 return getOppositeAxis(getSideAxis(placement)); 1625 } 1626 function getAlignmentSides(placement, rects, rtl) { 1627 if (rtl === void 0) { 1628 rtl = false; 1629 } 1630 const alignment = getAlignment(placement); 1631 const alignmentAxis = getAlignmentAxis(placement); 1632 const length = getAxisLength(alignmentAxis); 1633 let mainAlignmentSide = alignmentAxis === "x" ? alignment === (rtl ? "end" : "start") ? "right" : "left" : alignment === "start" ? "bottom" : "top"; 1634 if (rects.reference[length] > rects.floating[length]) { 1635 mainAlignmentSide = getOppositePlacement(mainAlignmentSide); 1636 } 1637 return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)]; 1638 } 1639 function getExpandedPlacements(placement) { 1640 const oppositePlacement = getOppositePlacement(placement); 1641 return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)]; 1642 } 1643 function getOppositeAlignmentPlacement(placement) { 1644 return placement.includes("start") ? placement.replace("start", "end") : placement.replace("end", "start"); 1645 } 1646 var lrPlacement = ["left", "right"]; 1647 var rlPlacement = ["right", "left"]; 1648 var tbPlacement = ["top", "bottom"]; 1649 var btPlacement = ["bottom", "top"]; 1650 function getSideList(side, isStart, rtl) { 1651 switch (side) { 1652 case "top": 1653 case "bottom": 1654 if (rtl) return isStart ? rlPlacement : lrPlacement; 1655 return isStart ? lrPlacement : rlPlacement; 1656 case "left": 1657 case "right": 1658 return isStart ? tbPlacement : btPlacement; 1659 default: 1660 return []; 1661 } 1662 } 1663 function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) { 1664 const alignment = getAlignment(placement); 1665 let list = getSideList(getSide(placement), direction === "start", rtl); 1666 if (alignment) { 1667 list = list.map((side) => side + "-" + alignment); 1668 if (flipAlignment) { 1669 list = list.concat(list.map(getOppositeAlignmentPlacement)); 1670 } 1671 } 1672 return list; 1673 } 1674 function getOppositePlacement(placement) { 1675 const side = getSide(placement); 1676 return oppositeSideMap[side] + placement.slice(side.length); 1677 } 1678 function expandPaddingObject(padding) { 1679 return { 1680 top: 0, 1681 right: 0, 1682 bottom: 0, 1683 left: 0, 1684 ...padding 1685 }; 1686 } 1687 function getPaddingObject(padding) { 1688 return typeof padding !== "number" ? expandPaddingObject(padding) : { 1689 top: padding, 1690 right: padding, 1691 bottom: padding, 1692 left: padding 1693 }; 1694 } 1695 function rectToClientRect(rect) { 1696 const { 1697 x, 1698 y, 1699 width, 1700 height 1701 } = rect; 1702 return { 1703 width, 1704 height, 1705 top: y, 1706 left: x, 1707 right: x + width, 1708 bottom: y + height, 1709 x, 1710 y 1711 }; 1712 } 1713 1714 // node_modules/@base-ui/react/esm/floating-ui-react/utils/composite.js 1715 function isHiddenByStyles(styles) { 1716 return styles.visibility === "hidden" || styles.visibility === "collapse"; 1717 } 1718 function isElementVisible(element, styles = element ? getComputedStyle2(element) : null) { 1719 if (!element || !element.isConnected || !styles || isHiddenByStyles(styles)) { 1720 return false; 1721 } 1722 if (typeof element.checkVisibility === "function") { 1723 return element.checkVisibility(); 1724 } 1725 return styles.display !== "none" && styles.display !== "contents"; 1726 } 1727 1728 // node_modules/@base-ui/utils/esm/owner.js 1729 function ownerDocument(node) { 1730 return node?.ownerDocument || document; 1731 } 1732 1733 // node_modules/@base-ui/react/esm/floating-ui-react/utils/tabbable.js 1734 var CANDIDATE_SELECTOR = 'a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable="false"]),audio[controls],video[controls]'; 1735 function getParentElement(element) { 1736 const assignedSlot = element.assignedSlot; 1737 if (assignedSlot) { 1738 return assignedSlot; 1739 } 1740 if (element.parentElement) { 1741 return element.parentElement; 1742 } 1743 const rootNode = element.getRootNode(); 1744 return isShadowRoot(rootNode) ? rootNode.host : null; 1745 } 1746 function getDetailsSummary(details) { 1747 for (const child of Array.from(details.children)) { 1748 if (getNodeName(child) === "summary") { 1749 return child; 1750 } 1751 } 1752 return null; 1753 } 1754 function isWithinOpenDetailsSummary(element, details) { 1755 const summary = getDetailsSummary(details); 1756 return !!summary && (element === summary || contains(summary, element)); 1757 } 1758 function isFocusableCandidate(element) { 1759 const nodeName = element ? getNodeName(element) : ""; 1760 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"); 1761 } 1762 function isFocusableElement(element) { 1763 if (!isFocusableCandidate(element) || !element.isConnected || element.matches(":disabled")) { 1764 return false; 1765 } 1766 for (let current = element; current; current = getParentElement(current)) { 1767 const isAncestor = current !== element; 1768 const isSlot = getNodeName(current) === "slot"; 1769 if (current.hasAttribute("inert")) { 1770 return false; 1771 } 1772 if (isAncestor && getNodeName(current) === "details" && !current.open && !isWithinOpenDetailsSummary(element, current) || current.hasAttribute("hidden") || !isSlot && !isVisibleInTabbableTree(current, isAncestor)) { 1773 return false; 1774 } 1775 } 1776 return true; 1777 } 1778 function isVisibleInTabbableTree(element, isAncestor) { 1779 const styles = getComputedStyle2(element); 1780 if (!isAncestor) { 1781 return isElementVisible(element, styles); 1782 } 1783 return styles.display !== "none"; 1784 } 1785 function getTabIndex(element) { 1786 const tabIndex = element.tabIndex; 1787 if (tabIndex < 0) { 1788 const nodeName = getNodeName(element); 1789 if (nodeName === "details" || nodeName === "audio" || nodeName === "video" || isHTMLElement(element) && element.isContentEditable) { 1790 return 0; 1791 } 1792 } 1793 return tabIndex; 1794 } 1795 function getNamedRadioInput(element) { 1796 if (getNodeName(element) !== "input") { 1797 return null; 1798 } 1799 const input = element; 1800 return input.type === "radio" && input.name !== "" ? input : null; 1801 } 1802 function isTabbableRadio(element, candidates) { 1803 const input = getNamedRadioInput(element); 1804 if (!input) { 1805 return true; 1806 } 1807 const checkedRadio = candidates.find((candidate) => { 1808 const radio = getNamedRadioInput(candidate); 1809 return radio?.name === input.name && radio.form === input.form && radio.checked; 1810 }); 1811 if (checkedRadio) { 1812 return checkedRadio === input; 1813 } 1814 return candidates.find((candidate) => { 1815 const radio = getNamedRadioInput(candidate); 1816 return radio?.name === input.name && radio.form === input.form; 1817 }) === input; 1818 } 1819 function getComposedChildren(container) { 1820 if (isHTMLElement(container) && getNodeName(container) === "slot") { 1821 const assignedElements = container.assignedElements({ 1822 flatten: true 1823 }); 1824 if (assignedElements.length > 0) { 1825 return assignedElements; 1826 } 1827 } 1828 if (isHTMLElement(container) && container.shadowRoot) { 1829 return Array.from(container.shadowRoot.children); 1830 } 1831 return Array.from(container.children); 1832 } 1833 function appendCandidates(container, list) { 1834 getComposedChildren(container).forEach((child) => { 1835 if (isFocusableCandidate(child)) { 1836 list.push(child); 1837 } 1838 appendCandidates(child, list); 1839 }); 1840 } 1841 function appendMatchingElements(container, selector, list) { 1842 getComposedChildren(container).forEach((child) => { 1843 if (isHTMLElement(child) && child.matches(selector)) { 1844 list.push(child); 1845 } 1846 appendMatchingElements(child, selector, list); 1847 }); 1848 } 1849 function focusable(container) { 1850 const candidates = []; 1851 appendCandidates(container, candidates); 1852 return candidates.filter(isFocusableElement); 1853 } 1854 function tabbable(container) { 1855 const candidates = focusable(container); 1856 return candidates.filter((element) => getTabIndex(element) >= 0 && isTabbableRadio(element, candidates)); 1857 } 1858 function getTabbableIn(container, dir) { 1859 const list = tabbable(container); 1860 const len = list.length; 1861 if (len === 0) { 1862 return void 0; 1863 } 1864 const active = activeElement(ownerDocument(container)); 1865 const index2 = list.indexOf(active); 1866 const nextIndex = index2 === -1 ? dir === 1 ? 0 : len - 1 : index2 + dir; 1867 return list[nextIndex]; 1868 } 1869 function getNextTabbable(referenceElement) { 1870 return getTabbableIn(ownerDocument(referenceElement).body, 1) || referenceElement; 1871 } 1872 function getPreviousTabbable(referenceElement) { 1873 return getTabbableIn(ownerDocument(referenceElement).body, -1) || referenceElement; 1874 } 1875 function isOutsideEvent(event, container) { 1876 const containerElement = container || event.currentTarget; 1877 const relatedTarget = event.relatedTarget; 1878 return !relatedTarget || !contains(containerElement, relatedTarget); 1879 } 1880 function disableFocusInside(container) { 1881 const tabbableElements = tabbable(container); 1882 tabbableElements.forEach((element) => { 1883 element.dataset.tabindex = element.getAttribute("tabindex") || ""; 1884 element.setAttribute("tabindex", "-1"); 1885 }); 1886 } 1887 function enableFocusInside(container) { 1888 const elements = []; 1889 appendMatchingElements(container, "[data-tabindex]", elements); 1890 elements.forEach((element) => { 1891 const tabindex = element.dataset.tabindex; 1892 delete element.dataset.tabindex; 1893 if (tabindex) { 1894 element.setAttribute("tabindex", tabindex); 1895 } else { 1896 element.removeAttribute("tabindex"); 1897 } 1898 }); 1899 } 1900 1901 // node_modules/@base-ui/utils/esm/addEventListener.js 1902 function addEventListener(target, type, listener, options) { 1903 target.addEventListener(type, listener, options); 1904 return () => { 1905 target.removeEventListener(type, listener, options); 1906 }; 1907 } 1908 1909 // node_modules/@base-ui/utils/esm/useValueAsRef.js 1910 function useValueAsRef(value) { 1911 const latest = useRefWithInit(createLatestRef, value).current; 1912 latest.next = value; 1913 useIsoLayoutEffect(latest.effect); 1914 return latest; 1915 } 1916 function createLatestRef(value) { 1917 const latest = { 1918 current: value, 1919 next: value, 1920 effect: () => { 1921 latest.current = latest.next; 1922 } 1923 }; 1924 return latest; 1925 } 1926 1927 // node_modules/@base-ui/react/esm/internals/useOpenChangeComplete.js 1928 var React11 = __toESM(require_react(), 1); 1929 1930 // node_modules/@base-ui/react/esm/internals/useAnimationsFinished.js 1931 var ReactDOM = __toESM(require_react_dom(), 1); 1932 1933 // node_modules/@base-ui/react/esm/utils/resolveRef.js 1934 function resolveRef(maybeRef) { 1935 if (maybeRef == null) { 1936 return maybeRef; 1937 } 1938 return "current" in maybeRef ? maybeRef.current : maybeRef; 1939 } 1940 1941 // node_modules/@base-ui/react/esm/internals/useAnimationsFinished.js 1942 function useAnimationsFinished(elementOrRef, waitForStartingStyleRemoved = false, treatAbortedAsFinished = true) { 1943 const frame = useAnimationFrame(); 1944 return useStableCallback((fnToExecute, signal = null) => { 1945 frame.cancel(); 1946 const element = resolveRef(elementOrRef); 1947 if (element == null) { 1948 return; 1949 } 1950 const resolvedElement = element; 1951 const done = () => { 1952 ReactDOM.flushSync(fnToExecute); 1953 }; 1954 if (typeof resolvedElement.getAnimations !== "function" || globalThis.BASE_UI_ANIMATIONS_DISABLED) { 1955 fnToExecute(); 1956 return; 1957 } 1958 function exec() { 1959 Promise.all(resolvedElement.getAnimations().map((animation) => animation.finished)).then(() => { 1960 if (!signal?.aborted) { 1961 done(); 1962 } 1963 }).catch(() => { 1964 if (treatAbortedAsFinished) { 1965 if (!signal?.aborted) { 1966 done(); 1967 } 1968 return; 1969 } 1970 const currentAnimations = resolvedElement.getAnimations(); 1971 if (!signal?.aborted && currentAnimations.length > 0 && currentAnimations.some((animation) => animation.pending || animation.playState !== "finished")) { 1972 exec(); 1973 } 1974 }); 1975 } 1976 if (waitForStartingStyleRemoved) { 1977 const startingStyleAttribute = TransitionStatusDataAttributes.startingStyle; 1978 if (!resolvedElement.hasAttribute(startingStyleAttribute)) { 1979 frame.request(exec); 1980 return; 1981 } 1982 const attributeObserver = new MutationObserver(() => { 1983 if (!resolvedElement.hasAttribute(startingStyleAttribute)) { 1984 attributeObserver.disconnect(); 1985 exec(); 1986 } 1987 }); 1988 attributeObserver.observe(resolvedElement, { 1989 attributes: true, 1990 attributeFilter: [startingStyleAttribute] 1991 }); 1992 signal?.addEventListener("abort", () => attributeObserver.disconnect(), { 1993 once: true 1994 }); 1995 return; 1996 } 1997 frame.request(exec); 1998 }); 1999 } 2000 2001 // node_modules/@base-ui/react/esm/internals/useOpenChangeComplete.js 2002 function useOpenChangeComplete(parameters) { 2003 const { 2004 enabled = true, 2005 open, 2006 ref, 2007 onComplete: onCompleteParam 2008 } = parameters; 2009 const onComplete = useStableCallback(onCompleteParam); 2010 const runOnceAnimationsFinish = useAnimationsFinished(ref, open, false); 2011 React11.useEffect(() => { 2012 if (!enabled) { 2013 return void 0; 2014 } 2015 const abortController = new AbortController(); 2016 runOnceAnimationsFinish(onComplete, abortController.signal); 2017 return () => { 2018 abortController.abort(); 2019 }; 2020 }, [enabled, open, onComplete, runOnceAnimationsFinish]); 2021 } 2022 2023 // node_modules/@base-ui/utils/esm/useOnFirstRender.js 2024 var React12 = __toESM(require_react(), 1); 2025 function useOnFirstRender(fn) { 2026 const ref = React12.useRef(true); 2027 if (ref.current) { 2028 ref.current = false; 2029 fn(); 2030 } 2031 } 2032 2033 // node_modules/@base-ui/utils/esm/useTimeout.js 2034 var EMPTY3 = 0; 2035 var Timeout = class _Timeout { 2036 static create() { 2037 return new _Timeout(); 2038 } 2039 currentId = EMPTY3; 2040 /** 2041 * Executes `fn` after `delay`, clearing any previously scheduled call. 2042 */ 2043 start(delay, fn) { 2044 this.clear(); 2045 this.currentId = setTimeout(() => { 2046 this.currentId = EMPTY3; 2047 fn(); 2048 }, delay); 2049 } 2050 isStarted() { 2051 return this.currentId !== EMPTY3; 2052 } 2053 clear = () => { 2054 if (this.currentId !== EMPTY3) { 2055 clearTimeout(this.currentId); 2056 this.currentId = EMPTY3; 2057 } 2058 }; 2059 disposeEffect = () => { 2060 return this.clear; 2061 }; 2062 }; 2063 function useTimeout() { 2064 const timeout = useRefWithInit(Timeout.create).current; 2065 useOnMount(timeout.disposeEffect); 2066 return timeout; 2067 } 2068 2069 // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingDelayGroup.js 2070 var React13 = __toESM(require_react(), 1); 2071 2072 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverShared.js 2073 function resolveValue(value, pointerType) { 2074 if (pointerType != null && !isMouseLikePointerType(pointerType)) { 2075 return 0; 2076 } 2077 if (typeof value === "function") { 2078 return value(); 2079 } 2080 return value; 2081 } 2082 function getDelay(value, prop, pointerType) { 2083 const result = resolveValue(value, pointerType); 2084 if (typeof result === "number") { 2085 return result; 2086 } 2087 return result?.[prop]; 2088 } 2089 function getRestMs(value) { 2090 if (typeof value === "function") { 2091 return value(); 2092 } 2093 return value; 2094 } 2095 function isClickLikeOpenEvent(openEventType, interactedInside) { 2096 return interactedInside || openEventType === "click" || openEventType === "mousedown"; 2097 } 2098 function isHoverOpenEvent(openEventType) { 2099 return openEventType?.includes("mouse") && openEventType !== "mousedown"; 2100 } 2101 2102 // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingDelayGroup.js 2103 var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); 2104 var FloatingDelayGroupContext = /* @__PURE__ */ React13.createContext({ 2105 hasProvider: false, 2106 timeoutMs: 0, 2107 delayRef: { 2108 current: 0 2109 }, 2110 initialDelayRef: { 2111 current: 0 2112 }, 2113 timeout: new Timeout(), 2114 currentIdRef: { 2115 current: null 2116 }, 2117 currentContextRef: { 2118 current: null 2119 } 2120 }); 2121 if (true) FloatingDelayGroupContext.displayName = "FloatingDelayGroupContext"; 2122 function FloatingDelayGroup(props) { 2123 const { 2124 children, 2125 delay, 2126 timeoutMs = 0 2127 } = props; 2128 const delayRef = React13.useRef(delay); 2129 const initialDelayRef = React13.useRef(delay); 2130 const currentIdRef = React13.useRef(null); 2131 const currentContextRef = React13.useRef(null); 2132 const timeout = useTimeout(); 2133 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FloatingDelayGroupContext.Provider, { 2134 value: React13.useMemo(() => ({ 2135 hasProvider: true, 2136 delayRef, 2137 initialDelayRef, 2138 currentIdRef, 2139 timeoutMs, 2140 currentContextRef, 2141 timeout 2142 }), [timeoutMs, timeout]), 2143 children 2144 }); 2145 } 2146 function useDelayGroup(context, options = { 2147 open: false 2148 }) { 2149 const { 2150 open 2151 } = options; 2152 const store2 = "rootStore" in context ? context.rootStore : context; 2153 const floatingId = store2.useState("floatingId"); 2154 const groupContext = React13.useContext(FloatingDelayGroupContext); 2155 const { 2156 currentIdRef, 2157 delayRef, 2158 timeoutMs, 2159 initialDelayRef, 2160 currentContextRef, 2161 hasProvider, 2162 timeout 2163 } = groupContext; 2164 const [isInstantPhase, setIsInstantPhase] = React13.useState(false); 2165 useIsoLayoutEffect(() => { 2166 function unset() { 2167 setIsInstantPhase(false); 2168 currentContextRef.current?.setIsInstantPhase(false); 2169 currentIdRef.current = null; 2170 currentContextRef.current = null; 2171 delayRef.current = initialDelayRef.current; 2172 } 2173 if (!currentIdRef.current) { 2174 return void 0; 2175 } 2176 if (!open && currentIdRef.current === floatingId) { 2177 setIsInstantPhase(false); 2178 if (timeoutMs) { 2179 const closingId = floatingId; 2180 timeout.start(timeoutMs, () => { 2181 if (store2.select("open") || currentIdRef.current && currentIdRef.current !== closingId) { 2182 return; 2183 } 2184 unset(); 2185 }); 2186 return () => { 2187 timeout.clear(); 2188 }; 2189 } 2190 unset(); 2191 } 2192 return void 0; 2193 }, [open, floatingId, currentIdRef, delayRef, timeoutMs, initialDelayRef, currentContextRef, timeout, store2]); 2194 useIsoLayoutEffect(() => { 2195 if (!open) { 2196 return; 2197 } 2198 const prevContext = currentContextRef.current; 2199 const prevId = currentIdRef.current; 2200 timeout.clear(); 2201 currentContextRef.current = { 2202 onOpenChange: store2.setOpen, 2203 setIsInstantPhase 2204 }; 2205 currentIdRef.current = floatingId; 2206 delayRef.current = { 2207 open: 0, 2208 close: getDelay(initialDelayRef.current, "close") 2209 }; 2210 if (prevId !== null && prevId !== floatingId) { 2211 setIsInstantPhase(true); 2212 prevContext?.setIsInstantPhase(true); 2213 prevContext?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.none)); 2214 } else { 2215 setIsInstantPhase(false); 2216 prevContext?.setIsInstantPhase(false); 2217 } 2218 }, [open, floatingId, store2, currentIdRef, delayRef, initialDelayRef, currentContextRef, timeout]); 2219 useIsoLayoutEffect(() => { 2220 return () => { 2221 currentContextRef.current = null; 2222 }; 2223 }, [currentContextRef]); 2224 return React13.useMemo(() => ({ 2225 hasProvider, 2226 delayRef, 2227 isInstantPhase 2228 }), [hasProvider, delayRef, isInstantPhase]); 2229 } 2230 2231 // node_modules/@base-ui/utils/esm/mergeCleanups.js 2232 function mergeCleanups(...cleanups) { 2233 return () => { 2234 for (let i = 0; i < cleanups.length; i += 1) { 2235 const cleanup = cleanups[i]; 2236 if (cleanup) { 2237 cleanup(); 2238 } 2239 } 2240 }; 2241 } 2242 2243 // node_modules/@base-ui/react/esm/utils/FocusGuard.js 2244 var React14 = __toESM(require_react(), 1); 2245 2246 // node_modules/@base-ui/utils/esm/visuallyHidden.js 2247 var visuallyHiddenBase = { 2248 clipPath: "inset(50%)", 2249 overflow: "hidden", 2250 whiteSpace: "nowrap", 2251 border: 0, 2252 padding: 0, 2253 width: 1, 2254 height: 1, 2255 margin: -1 2256 }; 2257 var visuallyHidden = { 2258 ...visuallyHiddenBase, 2259 position: "fixed", 2260 top: 0, 2261 left: 0 2262 }; 2263 var visuallyHiddenInput = { 2264 ...visuallyHiddenBase, 2265 position: "absolute" 2266 }; 2267 2268 // node_modules/@base-ui/react/esm/utils/FocusGuard.js 2269 var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); 2270 var FocusGuard = /* @__PURE__ */ React14.forwardRef(function FocusGuard2(props, ref) { 2271 const [role, setRole] = React14.useState(); 2272 useIsoLayoutEffect(() => { 2273 if (isSafari) { 2274 setRole("button"); 2275 } 2276 }, []); 2277 const restProps = { 2278 tabIndex: 0, 2279 // Role is only for VoiceOver 2280 role 2281 }; 2282 return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { 2283 ...props, 2284 ref, 2285 style: visuallyHidden, 2286 "aria-hidden": role ? void 0 : true, 2287 ...restProps, 2288 "data-base-ui-focus-guard": "" 2289 }); 2290 }); 2291 if (true) FocusGuard.displayName = "FocusGuard"; 2292 2293 // node_modules/@base-ui/react/esm/floating-ui-react/utils/createAttribute.js 2294 function createAttribute(name) { 2295 return `data-base-ui-$name}`; 2296 } 2297 2298 // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingPortal.js 2299 var React15 = __toESM(require_react(), 1); 2300 var ReactDOM2 = __toESM(require_react_dom(), 1); 2301 2302 // node_modules/@base-ui/react/esm/internals/constants.js 2303 var DISABLED_TRANSITIONS_STYLE = { 2304 style: { 2305 transition: "none" 2306 } 2307 }; 2308 var BASE_UI_SWIPE_IGNORE_ATTRIBUTE = "data-base-ui-swipe-ignore"; 2309 var LEGACY_SWIPE_IGNORE_ATTRIBUTE = "data-swipe-ignore"; 2310 var BASE_UI_SWIPE_IGNORE_SELECTOR = `[$BASE_UI_SWIPE_IGNORE_ATTRIBUTE}]`; 2311 var LEGACY_SWIPE_IGNORE_SELECTOR = `[$LEGACY_SWIPE_IGNORE_ATTRIBUTE}]`; 2312 var POPUP_COLLISION_AVOIDANCE = { 2313 fallbackAxisSide: "end" 2314 }; 2315 var ownerVisuallyHidden = { 2316 clipPath: "inset(50%)", 2317 position: "fixed", 2318 top: 0, 2319 left: 0 2320 }; 2321 2322 // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingPortal.js 2323 var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); 2324 var PortalContext = /* @__PURE__ */ React15.createContext(null); 2325 if (true) PortalContext.displayName = "PortalContext"; 2326 var usePortalContext = () => React15.useContext(PortalContext); 2327 var attr = createAttribute("portal"); 2328 function useFloatingPortalNode(props = {}) { 2329 const { 2330 ref, 2331 container: containerProp, 2332 componentProps = EMPTY_OBJECT, 2333 elementProps 2334 } = props; 2335 const uniqueId = useId(); 2336 const portalContext = usePortalContext(); 2337 const parentPortalNode = portalContext?.portalNode; 2338 const [containerElement, setContainerElement] = React15.useState(null); 2339 const [portalNode, setPortalNode] = React15.useState(null); 2340 const setPortalNodeRef = useStableCallback((node) => { 2341 if (node !== null) { 2342 setPortalNode(node); 2343 } 2344 }); 2345 const containerRef = React15.useRef(null); 2346 useIsoLayoutEffect(() => { 2347 if (containerProp === null) { 2348 if (containerRef.current) { 2349 containerRef.current = null; 2350 setPortalNode(null); 2351 setContainerElement(null); 2352 } 2353 return; 2354 } 2355 if (uniqueId == null) { 2356 return; 2357 } 2358 const resolvedContainer = (containerProp && (isNode(containerProp) ? containerProp : containerProp.current)) ?? parentPortalNode ?? document.body; 2359 if (resolvedContainer == null) { 2360 if (containerRef.current) { 2361 containerRef.current = null; 2362 setPortalNode(null); 2363 setContainerElement(null); 2364 } 2365 return; 2366 } 2367 if (containerRef.current !== resolvedContainer) { 2368 containerRef.current = resolvedContainer; 2369 setPortalNode(null); 2370 setContainerElement(resolvedContainer); 2371 } 2372 }, [containerProp, parentPortalNode, uniqueId]); 2373 const portalElement = useRenderElement("div", componentProps, { 2374 ref: [ref, setPortalNodeRef], 2375 props: [{ 2376 id: uniqueId, 2377 [attr]: "" 2378 }, elementProps] 2379 }); 2380 const portalSubtree = containerElement && portalElement ? /* @__PURE__ */ ReactDOM2.createPortal(portalElement, containerElement) : null; 2381 return { 2382 portalNode, 2383 portalSubtree 2384 }; 2385 } 2386 var FloatingPortal = /* @__PURE__ */ React15.forwardRef(function FloatingPortal2(componentProps, forwardedRef) { 2387 const { 2388 render, 2389 className, 2390 style, 2391 children, 2392 container, 2393 renderGuards, 2394 ...elementProps 2395 } = componentProps; 2396 const { 2397 portalNode, 2398 portalSubtree 2399 } = useFloatingPortalNode({ 2400 container, 2401 ref: forwardedRef, 2402 componentProps, 2403 elementProps 2404 }); 2405 const beforeOutsideRef = React15.useRef(null); 2406 const afterOutsideRef = React15.useRef(null); 2407 const beforeInsideRef = React15.useRef(null); 2408 const afterInsideRef = React15.useRef(null); 2409 const [focusManagerState, setFocusManagerState] = React15.useState(null); 2410 const focusInsideDisabledRef = React15.useRef(false); 2411 const modal = focusManagerState?.modal; 2412 const open = focusManagerState?.open; 2413 const shouldRenderGuards = typeof renderGuards === "boolean" ? renderGuards : !!focusManagerState && !focusManagerState.modal && focusManagerState.open && !!portalNode; 2414 React15.useEffect(() => { 2415 if (!portalNode || modal) { 2416 return void 0; 2417 } 2418 function onFocus(event) { 2419 if (portalNode && event.relatedTarget && isOutsideEvent(event)) { 2420 if (event.type === "focusin") { 2421 if (focusInsideDisabledRef.current) { 2422 enableFocusInside(portalNode); 2423 focusInsideDisabledRef.current = false; 2424 } 2425 } else { 2426 disableFocusInside(portalNode); 2427 focusInsideDisabledRef.current = true; 2428 } 2429 } 2430 } 2431 return mergeCleanups(addEventListener(portalNode, "focusin", onFocus, true), addEventListener(portalNode, "focusout", onFocus, true)); 2432 }, [portalNode, modal]); 2433 React15.useEffect(() => { 2434 if (!portalNode || open !== false) { 2435 return; 2436 } 2437 enableFocusInside(portalNode); 2438 focusInsideDisabledRef.current = false; 2439 }, [open, portalNode]); 2440 const portalContextValue = React15.useMemo(() => ({ 2441 beforeOutsideRef, 2442 afterOutsideRef, 2443 beforeInsideRef, 2444 afterInsideRef, 2445 portalNode, 2446 setFocusManagerState 2447 }), [portalNode]); 2448 return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(React15.Fragment, { 2449 children: [portalSubtree, /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(PortalContext.Provider, { 2450 value: portalContextValue, 2451 children: [shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(FocusGuard, { 2452 "data-type": "outside", 2453 ref: beforeOutsideRef, 2454 onFocus: (event) => { 2455 if (isOutsideEvent(event, portalNode)) { 2456 beforeInsideRef.current?.focus(); 2457 } else { 2458 const domReference = focusManagerState ? focusManagerState.domReference : null; 2459 const prevTabbable = getPreviousTabbable(domReference); 2460 prevTabbable?.focus(); 2461 } 2462 } 2463 }), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { 2464 "aria-owns": portalNode.id, 2465 style: ownerVisuallyHidden 2466 }), portalNode && /* @__PURE__ */ ReactDOM2.createPortal(children, portalNode), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(FocusGuard, { 2467 "data-type": "outside", 2468 ref: afterOutsideRef, 2469 onFocus: (event) => { 2470 if (isOutsideEvent(event, portalNode)) { 2471 afterInsideRef.current?.focus(); 2472 } else { 2473 const domReference = focusManagerState ? focusManagerState.domReference : null; 2474 const nextTabbable = getNextTabbable(domReference); 2475 nextTabbable?.focus(); 2476 if (focusManagerState?.closeOnFocusOut) { 2477 focusManagerState?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.focusOut, event.nativeEvent)); 2478 } 2479 } 2480 } 2481 })] 2482 })] 2483 }); 2484 }); 2485 if (true) FloatingPortal.displayName = "FloatingPortal"; 2486 2487 // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTree.js 2488 var React16 = __toESM(require_react(), 1); 2489 2490 // node_modules/@base-ui/react/esm/floating-ui-react/utils/createEventEmitter.js 2491 function createEventEmitter() { 2492 const map = /* @__PURE__ */ new Map(); 2493 return { 2494 emit(event, data) { 2495 map.get(event)?.forEach((listener) => listener(data)); 2496 }, 2497 on(event, listener) { 2498 if (!map.has(event)) { 2499 map.set(event, /* @__PURE__ */ new Set()); 2500 } 2501 map.get(event).add(listener); 2502 }, 2503 off(event, listener) { 2504 map.get(event)?.delete(listener); 2505 } 2506 }; 2507 } 2508 2509 // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTree.js 2510 var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); 2511 var FloatingNodeContext = /* @__PURE__ */ React16.createContext(null); 2512 if (true) FloatingNodeContext.displayName = "FloatingNodeContext"; 2513 var FloatingTreeContext = /* @__PURE__ */ React16.createContext(null); 2514 if (true) FloatingTreeContext.displayName = "FloatingTreeContext"; 2515 var useFloatingParentNodeId = () => React16.useContext(FloatingNodeContext)?.id || null; 2516 var useFloatingTree = (externalTree) => { 2517 const contextTree = React16.useContext(FloatingTreeContext); 2518 return externalTree ?? contextTree; 2519 }; 2520 2521 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useClientPoint.js 2522 var React17 = __toESM(require_react(), 1); 2523 function createVirtualElement(domElement, data) { 2524 let offsetX = null; 2525 let offsetY = null; 2526 let isAutoUpdateEvent = false; 2527 return { 2528 contextElement: domElement || void 0, 2529 getBoundingClientRect() { 2530 const domRect = domElement?.getBoundingClientRect() || { 2531 width: 0, 2532 height: 0, 2533 x: 0, 2534 y: 0 2535 }; 2536 const isXAxis = data.axis === "x" || data.axis === "both"; 2537 const isYAxis = data.axis === "y" || data.axis === "both"; 2538 const canTrackCursorOnAutoUpdate = ["mouseenter", "mousemove"].includes(data.dataRef.current.openEvent?.type || "") && data.pointerType !== "touch"; 2539 let width = domRect.width; 2540 let height = domRect.height; 2541 let x = domRect.x; 2542 let y = domRect.y; 2543 if (offsetX == null && data.x && isXAxis) { 2544 offsetX = domRect.x - data.x; 2545 } 2546 if (offsetY == null && data.y && isYAxis) { 2547 offsetY = domRect.y - data.y; 2548 } 2549 x -= offsetX || 0; 2550 y -= offsetY || 0; 2551 width = 0; 2552 height = 0; 2553 if (!isAutoUpdateEvent || canTrackCursorOnAutoUpdate) { 2554 width = data.axis === "y" ? domRect.width : 0; 2555 height = data.axis === "x" ? domRect.height : 0; 2556 x = isXAxis && data.x != null ? data.x : x; 2557 y = isYAxis && data.y != null ? data.y : y; 2558 } else if (isAutoUpdateEvent && !canTrackCursorOnAutoUpdate) { 2559 height = data.axis === "x" ? domRect.height : height; 2560 width = data.axis === "y" ? domRect.width : width; 2561 } 2562 isAutoUpdateEvent = true; 2563 return { 2564 width, 2565 height, 2566 x, 2567 y, 2568 top: y, 2569 right: x + width, 2570 bottom: y + height, 2571 left: x 2572 }; 2573 } 2574 }; 2575 } 2576 function isMouseBasedEvent(event) { 2577 return event != null && event.clientX != null; 2578 } 2579 function useClientPoint(context, props = {}) { 2580 const { 2581 enabled = true, 2582 axis = "both" 2583 } = props; 2584 const store2 = "rootStore" in context ? context.rootStore : context; 2585 const open = store2.useState("open"); 2586 const floating = store2.useState("floatingElement"); 2587 const domReference = store2.useState("domReferenceElement"); 2588 const dataRef = store2.context.dataRef; 2589 const initialRef = React17.useRef(false); 2590 const cleanupListenerRef = React17.useRef(null); 2591 const [pointerType, setPointerType] = React17.useState(); 2592 const [reactive, setReactive] = React17.useState([]); 2593 const resetReference = useStableCallback((reference2) => { 2594 store2.set("positionReference", reference2); 2595 }); 2596 const setReference = useStableCallback((newX, newY, referenceElement) => { 2597 if (initialRef.current) { 2598 return; 2599 } 2600 if (dataRef.current.openEvent && !isMouseBasedEvent(dataRef.current.openEvent)) { 2601 return; 2602 } 2603 store2.set("positionReference", createVirtualElement(referenceElement ?? domReference, { 2604 x: newX, 2605 y: newY, 2606 axis, 2607 dataRef, 2608 pointerType 2609 })); 2610 }); 2611 const handleReferenceEnterOrMove = useStableCallback((event) => { 2612 if (!open) { 2613 setReference(event.clientX, event.clientY, event.currentTarget); 2614 } else if (!cleanupListenerRef.current) { 2615 setReference(event.clientX, event.clientY, event.currentTarget); 2616 setReactive([]); 2617 } 2618 }); 2619 const openCheck = isMouseLikePointerType(pointerType) ? floating : open; 2620 React17.useEffect(() => { 2621 if (!enabled) { 2622 resetReference(domReference); 2623 return void 0; 2624 } 2625 if (!openCheck) { 2626 return void 0; 2627 } 2628 function cleanupListener() { 2629 cleanupListenerRef.current?.(); 2630 cleanupListenerRef.current = null; 2631 } 2632 const win = getWindow(floating); 2633 function handleMouseMove(event) { 2634 const target = getTarget(event); 2635 if (!contains(floating, target)) { 2636 setReference(event.clientX, event.clientY); 2637 } else { 2638 cleanupListener(); 2639 } 2640 } 2641 if (!dataRef.current.openEvent || isMouseBasedEvent(dataRef.current.openEvent)) { 2642 cleanupListenerRef.current = addEventListener(win, "mousemove", handleMouseMove); 2643 } else { 2644 resetReference(domReference); 2645 } 2646 return cleanupListener; 2647 }, [openCheck, enabled, floating, dataRef, domReference, store2, setReference, resetReference, reactive]); 2648 React17.useEffect(() => () => { 2649 store2.set("positionReference", null); 2650 }, [store2]); 2651 React17.useEffect(() => { 2652 if (enabled && !floating) { 2653 initialRef.current = false; 2654 } 2655 }, [enabled, floating]); 2656 React17.useEffect(() => { 2657 if (!enabled && open) { 2658 initialRef.current = true; 2659 } 2660 }, [enabled, open]); 2661 const reference = React17.useMemo(() => { 2662 function setPointerTypeRef(event) { 2663 setPointerType(event.pointerType); 2664 } 2665 return { 2666 onPointerDown: setPointerTypeRef, 2667 onPointerEnter: setPointerTypeRef, 2668 onMouseMove: handleReferenceEnterOrMove, 2669 onMouseEnter: handleReferenceEnterOrMove 2670 }; 2671 }, [handleReferenceEnterOrMove]); 2672 return React17.useMemo(() => enabled ? { 2673 reference, 2674 trigger: reference 2675 } : {}, [enabled, reference]); 2676 } 2677 2678 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useDismiss.js 2679 var React18 = __toESM(require_react(), 1); 2680 var bubbleHandlerKeys = { 2681 intentional: "onClick", 2682 sloppy: "onPointerDown" 2683 }; 2684 function alwaysFalse() { 2685 return false; 2686 } 2687 function normalizeProp(normalizable) { 2688 return { 2689 escapeKey: typeof normalizable === "boolean" ? normalizable : normalizable?.escapeKey ?? false, 2690 outsidePress: typeof normalizable === "boolean" ? normalizable : normalizable?.outsidePress ?? true 2691 }; 2692 } 2693 function useDismiss(context, props = {}) { 2694 const { 2695 enabled = true, 2696 escapeKey: escapeKey2 = true, 2697 outsidePress: outsidePressProp = true, 2698 outsidePressEvent = "sloppy", 2699 referencePress = alwaysFalse, 2700 referencePressEvent = "sloppy", 2701 bubbles, 2702 externalTree 2703 } = props; 2704 const store2 = "rootStore" in context ? context.rootStore : context; 2705 const open = store2.useState("open"); 2706 const floatingElement = store2.useState("floatingElement"); 2707 const { 2708 dataRef 2709 } = store2.context; 2710 const tree = useFloatingTree(externalTree); 2711 const outsidePressFn = useStableCallback(typeof outsidePressProp === "function" ? outsidePressProp : () => false); 2712 const outsidePress2 = typeof outsidePressProp === "function" ? outsidePressFn : outsidePressProp; 2713 const outsidePressEnabled = outsidePress2 !== false; 2714 const getOutsidePressEventProp = useStableCallback(() => outsidePressEvent); 2715 const { 2716 escapeKey: escapeKeyBubbles, 2717 outsidePress: outsidePressBubbles 2718 } = normalizeProp(bubbles); 2719 const pressStartedInsideRef = React18.useRef(false); 2720 const pressStartPreventedRef = React18.useRef(false); 2721 const suppressNextOutsideClickRef = React18.useRef(false); 2722 const isComposingRef = React18.useRef(false); 2723 const currentPointerTypeRef = React18.useRef(""); 2724 const touchStateRef = React18.useRef(null); 2725 const cancelDismissOnEndTimeout = useTimeout(); 2726 const clearInsideReactTreeTimeout = useTimeout(); 2727 const clearInsideReactTree = useStableCallback(() => { 2728 clearInsideReactTreeTimeout.clear(); 2729 dataRef.current.insideReactTree = false; 2730 }); 2731 const hasBlockingChild = useStableCallback((bubbleKey) => { 2732 const nodeId = dataRef.current.floatingContext?.nodeId; 2733 const children = tree ? getNodeChildren(tree.nodesRef.current, nodeId) : []; 2734 return children.some((child) => child.context?.open && !child.context.dataRef.current[bubbleKey]); 2735 }); 2736 const isEventWithinOwnElements = useStableCallback((event) => { 2737 return isEventTargetWithin(event, store2.select("floatingElement")) || isEventTargetWithin(event, store2.select("domReferenceElement")); 2738 }); 2739 const closeOnReferencePress = useStableCallback((event) => { 2740 if (!referencePress()) { 2741 return; 2742 } 2743 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerPress, event.nativeEvent)); 2744 }); 2745 const closeOnEscapeKeyDown = useStableCallback((event) => { 2746 if (!open || !enabled || !escapeKey2 || event.key !== "Escape") { 2747 return; 2748 } 2749 if (isComposingRef.current) { 2750 return; 2751 } 2752 if (!escapeKeyBubbles && hasBlockingChild("__escapeKeyBubbles")) { 2753 return; 2754 } 2755 const native = isReactEvent(event) ? event.nativeEvent : event; 2756 const eventDetails = createChangeEventDetails(reason_parts_exports.escapeKey, native); 2757 store2.setOpen(false, eventDetails); 2758 if (!eventDetails.isCanceled) { 2759 event.preventDefault(); 2760 } 2761 if (!escapeKeyBubbles && !eventDetails.isPropagationAllowed) { 2762 event.stopPropagation(); 2763 } 2764 }); 2765 const markInsideReactTree = useStableCallback(() => { 2766 dataRef.current.insideReactTree = true; 2767 clearInsideReactTreeTimeout.start(0, clearInsideReactTree); 2768 }); 2769 const markPressStartedInsideReactTree = useStableCallback((event) => { 2770 if (!open || !enabled || event.button !== 0) { 2771 return; 2772 } 2773 const target = getTarget(event.nativeEvent); 2774 if (!contains(store2.select("floatingElement"), target)) { 2775 return; 2776 } 2777 if (!pressStartedInsideRef.current) { 2778 pressStartedInsideRef.current = true; 2779 pressStartPreventedRef.current = false; 2780 } 2781 }); 2782 const markInsidePressStartPrevented = useStableCallback((event) => { 2783 if (!open || !enabled) { 2784 return; 2785 } 2786 if (!(event.defaultPrevented || event.nativeEvent.defaultPrevented)) { 2787 return; 2788 } 2789 if (pressStartedInsideRef.current) { 2790 pressStartPreventedRef.current = true; 2791 } 2792 }); 2793 React18.useEffect(() => { 2794 if (!open || !enabled) { 2795 return void 0; 2796 } 2797 dataRef.current.__escapeKeyBubbles = escapeKeyBubbles; 2798 dataRef.current.__outsidePressBubbles = outsidePressBubbles; 2799 const compositionTimeout = new Timeout(); 2800 const preventedPressSuppressionTimeout = new Timeout(); 2801 function handleCompositionStart() { 2802 compositionTimeout.clear(); 2803 isComposingRef.current = true; 2804 } 2805 function handleCompositionEnd() { 2806 compositionTimeout.start( 2807 // 0ms or 1ms don't work in Safari. 5ms appears to consistently work. 2808 // Only apply to WebKit for the test to remain 0ms. 2809 isWebKit() ? 5 : 0, 2810 () => { 2811 isComposingRef.current = false; 2812 } 2813 ); 2814 } 2815 function suppressImmediateOutsideClickAfterPreventedStart() { 2816 suppressNextOutsideClickRef.current = true; 2817 preventedPressSuppressionTimeout.start(0, () => { 2818 suppressNextOutsideClickRef.current = false; 2819 }); 2820 } 2821 function resetPressStartState() { 2822 pressStartedInsideRef.current = false; 2823 pressStartPreventedRef.current = false; 2824 } 2825 function getOutsidePressEvent() { 2826 const type = currentPointerTypeRef.current; 2827 const computedType = type === "pen" || !type ? "mouse" : type; 2828 const outsidePressEventValue = getOutsidePressEventProp(); 2829 const resolved = typeof outsidePressEventValue === "function" ? outsidePressEventValue() : outsidePressEventValue; 2830 if (typeof resolved === "string") { 2831 return resolved; 2832 } 2833 return resolved[computedType]; 2834 } 2835 function shouldIgnoreEvent(event) { 2836 const computedOutsidePressEvent = getOutsidePressEvent(); 2837 return computedOutsidePressEvent === "intentional" && event.type !== "click" || computedOutsidePressEvent === "sloppy" && event.type === "click"; 2838 } 2839 function isEventWithinFloatingTree(event) { 2840 const nodeId = dataRef.current.floatingContext?.nodeId; 2841 const targetIsInsideChildren = tree && getNodeChildren(tree.nodesRef.current, nodeId).some((node) => isEventTargetWithin(event, node.context?.elements.floating)); 2842 return isEventWithinOwnElements(event) || targetIsInsideChildren; 2843 } 2844 function closeOnPressOutside(event) { 2845 if (shouldIgnoreEvent(event)) { 2846 if (event.type !== "click" && !isEventWithinOwnElements(event)) { 2847 preventedPressSuppressionTimeout.clear(); 2848 suppressNextOutsideClickRef.current = false; 2849 } 2850 clearInsideReactTree(); 2851 return; 2852 } 2853 if (dataRef.current.insideReactTree) { 2854 clearInsideReactTree(); 2855 return; 2856 } 2857 const target = getTarget(event); 2858 const inertSelector = `[$createAttribute("inert")}]`; 2859 const targetRoot = isElement(target) ? target.getRootNode() : null; 2860 const markers = Array.from((isShadowRoot(targetRoot) ? targetRoot : ownerDocument(store2.select("floatingElement"))).querySelectorAll(inertSelector)); 2861 const triggers = store2.context.triggerElements; 2862 if (target && (triggers.hasElement(target) || triggers.hasMatchingElement((trigger) => contains(trigger, target)))) { 2863 return; 2864 } 2865 let targetRootAncestor = isElement(target) ? target : null; 2866 while (targetRootAncestor && !isLastTraversableNode(targetRootAncestor)) { 2867 const nextParent = getParentNode(targetRootAncestor); 2868 if (isLastTraversableNode(nextParent) || !isElement(nextParent)) { 2869 break; 2870 } 2871 targetRootAncestor = nextParent; 2872 } 2873 if (markers.length && isElement(target) && !isRootElement(target) && // Clicked on a direct ancestor (e.g. FloatingOverlay). 2874 !contains(target, store2.select("floatingElement")) && // If the target root element contains none of the markers, then the 2875 // element was injected after the floating element rendered. 2876 markers.every((marker) => !contains(targetRootAncestor, marker))) { 2877 return; 2878 } 2879 if (isHTMLElement(target) && !("touches" in event)) { 2880 const lastTraversableNode = isLastTraversableNode(target); 2881 const style = getComputedStyle2(target); 2882 const scrollRe = /auto|scroll/; 2883 const isScrollableX = lastTraversableNode || scrollRe.test(style.overflowX); 2884 const isScrollableY = lastTraversableNode || scrollRe.test(style.overflowY); 2885 const canScrollX = isScrollableX && target.clientWidth > 0 && target.scrollWidth > target.clientWidth; 2886 const canScrollY = isScrollableY && target.clientHeight > 0 && target.scrollHeight > target.clientHeight; 2887 const isRTL3 = style.direction === "rtl"; 2888 const pressedVerticalScrollbar = canScrollY && (isRTL3 ? event.offsetX <= target.offsetWidth - target.clientWidth : event.offsetX > target.clientWidth); 2889 const pressedHorizontalScrollbar = canScrollX && event.offsetY > target.clientHeight; 2890 if (pressedVerticalScrollbar || pressedHorizontalScrollbar) { 2891 return; 2892 } 2893 } 2894 if (isEventWithinFloatingTree(event)) { 2895 return; 2896 } 2897 if (getOutsidePressEvent() === "intentional" && suppressNextOutsideClickRef.current) { 2898 preventedPressSuppressionTimeout.clear(); 2899 suppressNextOutsideClickRef.current = false; 2900 return; 2901 } 2902 if (typeof outsidePress2 === "function" && !outsidePress2(event)) { 2903 return; 2904 } 2905 if (hasBlockingChild("__outsidePressBubbles")) { 2906 return; 2907 } 2908 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.outsidePress, event)); 2909 clearInsideReactTree(); 2910 } 2911 function handlePointerDown(event) { 2912 if (getOutsidePressEvent() !== "sloppy" || event.pointerType === "touch" || !store2.select("open") || !enabled || isEventWithinOwnElements(event)) { 2913 return; 2914 } 2915 closeOnPressOutside(event); 2916 } 2917 function handleTouchStart(event) { 2918 if (getOutsidePressEvent() !== "sloppy" || !store2.select("open") || !enabled || isEventWithinOwnElements(event)) { 2919 return; 2920 } 2921 const touch = event.touches[0]; 2922 if (touch) { 2923 touchStateRef.current = { 2924 startTime: Date.now(), 2925 startX: touch.clientX, 2926 startY: touch.clientY, 2927 dismissOnTouchEnd: false, 2928 dismissOnMouseDown: true 2929 }; 2930 cancelDismissOnEndTimeout.start(1e3, () => { 2931 if (touchStateRef.current) { 2932 touchStateRef.current.dismissOnTouchEnd = false; 2933 touchStateRef.current.dismissOnMouseDown = false; 2934 } 2935 }); 2936 } 2937 } 2938 function addTargetEventListenerOnce(event, listener) { 2939 const target = getTarget(event); 2940 if (!target) { 2941 return; 2942 } 2943 const unsubscribe2 = addEventListener(target, event.type, () => { 2944 listener(event); 2945 unsubscribe2(); 2946 }); 2947 } 2948 function handleTouchStartCapture(event) { 2949 currentPointerTypeRef.current = "touch"; 2950 addTargetEventListenerOnce(event, handleTouchStart); 2951 } 2952 function closeOnPressOutsideCapture(event) { 2953 cancelDismissOnEndTimeout.clear(); 2954 if (event.type === "pointerdown") { 2955 currentPointerTypeRef.current = event.pointerType; 2956 } 2957 if (event.type === "mousedown" && touchStateRef.current && !touchStateRef.current.dismissOnMouseDown) { 2958 return; 2959 } 2960 addTargetEventListenerOnce(event, (targetEvent) => { 2961 if (targetEvent.type === "pointerdown") { 2962 handlePointerDown(targetEvent); 2963 } else { 2964 closeOnPressOutside(targetEvent); 2965 } 2966 }); 2967 } 2968 function handlePressEndCapture(event) { 2969 if (!pressStartedInsideRef.current) { 2970 return; 2971 } 2972 const pressStartedInsideDefaultPrevented = pressStartPreventedRef.current; 2973 resetPressStartState(); 2974 if (getOutsidePressEvent() !== "intentional") { 2975 return; 2976 } 2977 if (event.type === "pointercancel") { 2978 if (pressStartedInsideDefaultPrevented) { 2979 suppressImmediateOutsideClickAfterPreventedStart(); 2980 } 2981 return; 2982 } 2983 if (isEventWithinFloatingTree(event)) { 2984 return; 2985 } 2986 if (pressStartedInsideDefaultPrevented) { 2987 suppressImmediateOutsideClickAfterPreventedStart(); 2988 return; 2989 } 2990 if (typeof outsidePress2 === "function" && !outsidePress2(event)) { 2991 return; 2992 } 2993 preventedPressSuppressionTimeout.clear(); 2994 suppressNextOutsideClickRef.current = true; 2995 clearInsideReactTree(); 2996 } 2997 function handleTouchMove(event) { 2998 if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) { 2999 return; 3000 } 3001 const touch = event.touches[0]; 3002 if (!touch) { 3003 return; 3004 } 3005 const deltaX = Math.abs(touch.clientX - touchStateRef.current.startX); 3006 const deltaY = Math.abs(touch.clientY - touchStateRef.current.startY); 3007 const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY); 3008 if (distance > 5) { 3009 touchStateRef.current.dismissOnTouchEnd = true; 3010 } 3011 if (distance > 10) { 3012 closeOnPressOutside(event); 3013 cancelDismissOnEndTimeout.clear(); 3014 touchStateRef.current = null; 3015 } 3016 } 3017 function handleTouchMoveCapture(event) { 3018 addTargetEventListenerOnce(event, handleTouchMove); 3019 } 3020 function handleTouchEnd(event) { 3021 if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) { 3022 return; 3023 } 3024 if (touchStateRef.current.dismissOnTouchEnd) { 3025 closeOnPressOutside(event); 3026 } 3027 cancelDismissOnEndTimeout.clear(); 3028 touchStateRef.current = null; 3029 } 3030 function handleTouchEndCapture(event) { 3031 addTargetEventListenerOnce(event, handleTouchEnd); 3032 } 3033 const doc = ownerDocument(floatingElement); 3034 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))); 3035 return () => { 3036 unsubscribe(); 3037 compositionTimeout.clear(); 3038 preventedPressSuppressionTimeout.clear(); 3039 resetPressStartState(); 3040 suppressNextOutsideClickRef.current = false; 3041 }; 3042 }, [dataRef, floatingElement, escapeKey2, outsidePressEnabled, outsidePress2, open, enabled, escapeKeyBubbles, outsidePressBubbles, closeOnEscapeKeyDown, clearInsideReactTree, getOutsidePressEventProp, hasBlockingChild, isEventWithinOwnElements, tree, store2, cancelDismissOnEndTimeout]); 3043 React18.useEffect(clearInsideReactTree, [outsidePress2, clearInsideReactTree]); 3044 const reference = React18.useMemo(() => ({ 3045 onKeyDown: closeOnEscapeKeyDown, 3046 [bubbleHandlerKeys[referencePressEvent]]: closeOnReferencePress, 3047 ...referencePressEvent !== "intentional" && { 3048 onClick: closeOnReferencePress 3049 } 3050 }), [closeOnEscapeKeyDown, closeOnReferencePress, referencePressEvent]); 3051 const floating = React18.useMemo(() => ({ 3052 onKeyDown: closeOnEscapeKeyDown, 3053 // `onMouseDown` may be blocked if `event.preventDefault()` is called in 3054 // `onPointerDown`, such as with <NumberField.ScrubArea>. 3055 // See https://github.com/mui/base-ui/pull/3379 3056 onPointerDown: markInsidePressStartPrevented, 3057 onMouseDown: markInsidePressStartPrevented, 3058 onClickCapture: markInsideReactTree, 3059 onMouseDownCapture(event) { 3060 markInsideReactTree(); 3061 markPressStartedInsideReactTree(event); 3062 }, 3063 onPointerDownCapture(event) { 3064 markInsideReactTree(); 3065 markPressStartedInsideReactTree(event); 3066 }, 3067 onMouseUpCapture: markInsideReactTree, 3068 onTouchEndCapture: markInsideReactTree, 3069 onTouchMoveCapture: markInsideReactTree 3070 }), [closeOnEscapeKeyDown, markInsideReactTree, markPressStartedInsideReactTree, markInsidePressStartPrevented]); 3071 return React18.useMemo(() => enabled ? { 3072 reference, 3073 floating, 3074 trigger: reference 3075 } : {}, [enabled, reference, floating]); 3076 } 3077 3078 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useFloating.js 3079 var React25 = __toESM(require_react(), 1); 3080 3081 // node_modules/@floating-ui/core/dist/floating-ui.core.mjs 3082 function computeCoordsFromPlacement(_ref, placement, rtl) { 3083 let { 3084 reference, 3085 floating 3086 } = _ref; 3087 const sideAxis = getSideAxis(placement); 3088 const alignmentAxis = getAlignmentAxis(placement); 3089 const alignLength = getAxisLength(alignmentAxis); 3090 const side = getSide(placement); 3091 const isVertical = sideAxis === "y"; 3092 const commonX = reference.x + reference.width / 2 - floating.width / 2; 3093 const commonY = reference.y + reference.height / 2 - floating.height / 2; 3094 const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2; 3095 let coords; 3096 switch (side) { 3097 case "top": 3098 coords = { 3099 x: commonX, 3100 y: reference.y - floating.height 3101 }; 3102 break; 3103 case "bottom": 3104 coords = { 3105 x: commonX, 3106 y: reference.y + reference.height 3107 }; 3108 break; 3109 case "right": 3110 coords = { 3111 x: reference.x + reference.width, 3112 y: commonY 3113 }; 3114 break; 3115 case "left": 3116 coords = { 3117 x: reference.x - floating.width, 3118 y: commonY 3119 }; 3120 break; 3121 default: 3122 coords = { 3123 x: reference.x, 3124 y: reference.y 3125 }; 3126 } 3127 switch (getAlignment(placement)) { 3128 case "start": 3129 coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1); 3130 break; 3131 case "end": 3132 coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1); 3133 break; 3134 } 3135 return coords; 3136 } 3137 async function detectOverflow(state, options) { 3138 var _await$platform$isEle; 3139 if (options === void 0) { 3140 options = {}; 3141 } 3142 const { 3143 x, 3144 y, 3145 platform: platform3, 3146 rects, 3147 elements, 3148 strategy 3149 } = state; 3150 const { 3151 boundary = "clippingAncestors", 3152 rootBoundary = "viewport", 3153 elementContext = "floating", 3154 altBoundary = false, 3155 padding = 0 3156 } = evaluate(options, state); 3157 const paddingObject = getPaddingObject(padding); 3158 const altContext = elementContext === "floating" ? "reference" : "floating"; 3159 const element = elements[altBoundary ? altContext : elementContext]; 3160 const clippingClientRect = rectToClientRect(await platform3.getClippingRect({ 3161 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)), 3162 boundary, 3163 rootBoundary, 3164 strategy 3165 })); 3166 const rect = elementContext === "floating" ? { 3167 x, 3168 y, 3169 width: rects.floating.width, 3170 height: rects.floating.height 3171 } : rects.reference; 3172 const offsetParent = await (platform3.getOffsetParent == null ? void 0 : platform3.getOffsetParent(elements.floating)); 3173 const offsetScale = await (platform3.isElement == null ? void 0 : platform3.isElement(offsetParent)) ? await (platform3.getScale == null ? void 0 : platform3.getScale(offsetParent)) || { 3174 x: 1, 3175 y: 1 3176 } : { 3177 x: 1, 3178 y: 1 3179 }; 3180 const elementClientRect = rectToClientRect(platform3.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform3.convertOffsetParentRelativeRectToViewportRelativeRect({ 3181 elements, 3182 rect, 3183 offsetParent, 3184 strategy 3185 }) : rect); 3186 return { 3187 top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y, 3188 bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y, 3189 left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x, 3190 right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x 3191 }; 3192 } 3193 var MAX_RESET_COUNT = 50; 3194 var computePosition = async (reference, floating, config) => { 3195 const { 3196 placement = "bottom", 3197 strategy = "absolute", 3198 middleware = [], 3199 platform: platform3 3200 } = config; 3201 const platformWithDetectOverflow = platform3.detectOverflow ? platform3 : { 3202 ...platform3, 3203 detectOverflow 3204 }; 3205 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(floating)); 3206 let rects = await platform3.getElementRects({ 3207 reference, 3208 floating, 3209 strategy 3210 }); 3211 let { 3212 x, 3213 y 3214 } = computeCoordsFromPlacement(rects, placement, rtl); 3215 let statefulPlacement = placement; 3216 let resetCount = 0; 3217 const middlewareData = {}; 3218 for (let i = 0; i < middleware.length; i++) { 3219 const currentMiddleware = middleware[i]; 3220 if (!currentMiddleware) { 3221 continue; 3222 } 3223 const { 3224 name, 3225 fn 3226 } = currentMiddleware; 3227 const { 3228 x: nextX, 3229 y: nextY, 3230 data, 3231 reset 3232 } = await fn({ 3233 x, 3234 y, 3235 initialPlacement: placement, 3236 placement: statefulPlacement, 3237 strategy, 3238 middlewareData, 3239 rects, 3240 platform: platformWithDetectOverflow, 3241 elements: { 3242 reference, 3243 floating 3244 } 3245 }); 3246 x = nextX != null ? nextX : x; 3247 y = nextY != null ? nextY : y; 3248 middlewareData[name] = { 3249 ...middlewareData[name], 3250 ...data 3251 }; 3252 if (reset && resetCount < MAX_RESET_COUNT) { 3253 resetCount++; 3254 if (typeof reset === "object") { 3255 if (reset.placement) { 3256 statefulPlacement = reset.placement; 3257 } 3258 if (reset.rects) { 3259 rects = reset.rects === true ? await platform3.getElementRects({ 3260 reference, 3261 floating, 3262 strategy 3263 }) : reset.rects; 3264 } 3265 ({ 3266 x, 3267 y 3268 } = computeCoordsFromPlacement(rects, statefulPlacement, rtl)); 3269 } 3270 i = -1; 3271 } 3272 } 3273 return { 3274 x, 3275 y, 3276 placement: statefulPlacement, 3277 strategy, 3278 middlewareData 3279 }; 3280 }; 3281 var flip = function(options) { 3282 if (options === void 0) { 3283 options = {}; 3284 } 3285 return { 3286 name: "flip", 3287 options, 3288 async fn(state) { 3289 var _middlewareData$arrow, _middlewareData$flip; 3290 const { 3291 placement, 3292 middlewareData, 3293 rects, 3294 initialPlacement, 3295 platform: platform3, 3296 elements 3297 } = state; 3298 const { 3299 mainAxis: checkMainAxis = true, 3300 crossAxis: checkCrossAxis = true, 3301 fallbackPlacements: specifiedFallbackPlacements, 3302 fallbackStrategy = "bestFit", 3303 fallbackAxisSideDirection = "none", 3304 flipAlignment = true, 3305 ...detectOverflowOptions 3306 } = evaluate(options, state); 3307 if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) { 3308 return {}; 3309 } 3310 const side = getSide(placement); 3311 const initialSideAxis = getSideAxis(initialPlacement); 3312 const isBasePlacement = getSide(initialPlacement) === initialPlacement; 3313 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)); 3314 const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement)); 3315 const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== "none"; 3316 if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) { 3317 fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl)); 3318 } 3319 const placements2 = [initialPlacement, ...fallbackPlacements]; 3320 const overflow = await platform3.detectOverflow(state, detectOverflowOptions); 3321 const overflows = []; 3322 let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || []; 3323 if (checkMainAxis) { 3324 overflows.push(overflow[side]); 3325 } 3326 if (checkCrossAxis) { 3327 const sides2 = getAlignmentSides(placement, rects, rtl); 3328 overflows.push(overflow[sides2[0]], overflow[sides2[1]]); 3329 } 3330 overflowsData = [...overflowsData, { 3331 placement, 3332 overflows 3333 }]; 3334 if (!overflows.every((side2) => side2 <= 0)) { 3335 var _middlewareData$flip2, _overflowsData$filter; 3336 const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1; 3337 const nextPlacement = placements2[nextIndex]; 3338 if (nextPlacement) { 3339 const ignoreCrossAxisOverflow = checkCrossAxis === "alignment" ? initialSideAxis !== getSideAxis(nextPlacement) : false; 3340 if (!ignoreCrossAxisOverflow || // We leave the current main axis only if every placement on that axis 3341 // overflows the main axis. 3342 overflowsData.every((d) => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) { 3343 return { 3344 data: { 3345 index: nextIndex, 3346 overflows: overflowsData 3347 }, 3348 reset: { 3349 placement: nextPlacement 3350 } 3351 }; 3352 } 3353 } 3354 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; 3355 if (!resetPlacement) { 3356 switch (fallbackStrategy) { 3357 case "bestFit": { 3358 var _overflowsData$filter2; 3359 const placement2 = (_overflowsData$filter2 = overflowsData.filter((d) => { 3360 if (hasFallbackAxisSideDirection) { 3361 const currentSideAxis = getSideAxis(d.placement); 3362 return currentSideAxis === initialSideAxis || // Create a bias to the `y` side axis due to horizontal 3363 // reading directions favoring greater width. 3364 currentSideAxis === "y"; 3365 } 3366 return true; 3367 }).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]; 3368 if (placement2) { 3369 resetPlacement = placement2; 3370 } 3371 break; 3372 } 3373 case "initialPlacement": 3374 resetPlacement = initialPlacement; 3375 break; 3376 } 3377 } 3378 if (placement !== resetPlacement) { 3379 return { 3380 reset: { 3381 placement: resetPlacement 3382 } 3383 }; 3384 } 3385 } 3386 return {}; 3387 } 3388 }; 3389 }; 3390 function getSideOffsets(overflow, rect) { 3391 return { 3392 top: overflow.top - rect.height, 3393 right: overflow.right - rect.width, 3394 bottom: overflow.bottom - rect.height, 3395 left: overflow.left - rect.width 3396 }; 3397 } 3398 function isAnySideFullyClipped(overflow) { 3399 return sides.some((side) => overflow[side] >= 0); 3400 } 3401 var hide = function(options) { 3402 if (options === void 0) { 3403 options = {}; 3404 } 3405 return { 3406 name: "hide", 3407 options, 3408 async fn(state) { 3409 const { 3410 rects, 3411 platform: platform3 3412 } = state; 3413 const { 3414 strategy = "referenceHidden", 3415 ...detectOverflowOptions 3416 } = evaluate(options, state); 3417 switch (strategy) { 3418 case "referenceHidden": { 3419 const overflow = await platform3.detectOverflow(state, { 3420 ...detectOverflowOptions, 3421 elementContext: "reference" 3422 }); 3423 const offsets = getSideOffsets(overflow, rects.reference); 3424 return { 3425 data: { 3426 referenceHiddenOffsets: offsets, 3427 referenceHidden: isAnySideFullyClipped(offsets) 3428 } 3429 }; 3430 } 3431 case "escaped": { 3432 const overflow = await platform3.detectOverflow(state, { 3433 ...detectOverflowOptions, 3434 altBoundary: true 3435 }); 3436 const offsets = getSideOffsets(overflow, rects.floating); 3437 return { 3438 data: { 3439 escapedOffsets: offsets, 3440 escaped: isAnySideFullyClipped(offsets) 3441 } 3442 }; 3443 } 3444 default: { 3445 return {}; 3446 } 3447 } 3448 } 3449 }; 3450 }; 3451 var originSides = /* @__PURE__ */ new Set(["left", "top"]); 3452 async function convertValueToCoords(state, options) { 3453 const { 3454 placement, 3455 platform: platform3, 3456 elements 3457 } = state; 3458 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)); 3459 const side = getSide(placement); 3460 const alignment = getAlignment(placement); 3461 const isVertical = getSideAxis(placement) === "y"; 3462 const mainAxisMulti = originSides.has(side) ? -1 : 1; 3463 const crossAxisMulti = rtl && isVertical ? -1 : 1; 3464 const rawValue = evaluate(options, state); 3465 let { 3466 mainAxis, 3467 crossAxis, 3468 alignmentAxis 3469 } = typeof rawValue === "number" ? { 3470 mainAxis: rawValue, 3471 crossAxis: 0, 3472 alignmentAxis: null 3473 } : { 3474 mainAxis: rawValue.mainAxis || 0, 3475 crossAxis: rawValue.crossAxis || 0, 3476 alignmentAxis: rawValue.alignmentAxis 3477 }; 3478 if (alignment && typeof alignmentAxis === "number") { 3479 crossAxis = alignment === "end" ? alignmentAxis * -1 : alignmentAxis; 3480 } 3481 return isVertical ? { 3482 x: crossAxis * crossAxisMulti, 3483 y: mainAxis * mainAxisMulti 3484 } : { 3485 x: mainAxis * mainAxisMulti, 3486 y: crossAxis * crossAxisMulti 3487 }; 3488 } 3489 var offset = function(options) { 3490 if (options === void 0) { 3491 options = 0; 3492 } 3493 return { 3494 name: "offset", 3495 options, 3496 async fn(state) { 3497 var _middlewareData$offse, _middlewareData$arrow; 3498 const { 3499 x, 3500 y, 3501 placement, 3502 middlewareData 3503 } = state; 3504 const diffCoords = await convertValueToCoords(state, options); 3505 if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) { 3506 return {}; 3507 } 3508 return { 3509 x: x + diffCoords.x, 3510 y: y + diffCoords.y, 3511 data: { 3512 ...diffCoords, 3513 placement 3514 } 3515 }; 3516 } 3517 }; 3518 }; 3519 var shift = function(options) { 3520 if (options === void 0) { 3521 options = {}; 3522 } 3523 return { 3524 name: "shift", 3525 options, 3526 async fn(state) { 3527 const { 3528 x, 3529 y, 3530 placement, 3531 platform: platform3 3532 } = state; 3533 const { 3534 mainAxis: checkMainAxis = true, 3535 crossAxis: checkCrossAxis = false, 3536 limiter = { 3537 fn: (_ref) => { 3538 let { 3539 x: x2, 3540 y: y2 3541 } = _ref; 3542 return { 3543 x: x2, 3544 y: y2 3545 }; 3546 } 3547 }, 3548 ...detectOverflowOptions 3549 } = evaluate(options, state); 3550 const coords = { 3551 x, 3552 y 3553 }; 3554 const overflow = await platform3.detectOverflow(state, detectOverflowOptions); 3555 const crossAxis = getSideAxis(getSide(placement)); 3556 const mainAxis = getOppositeAxis(crossAxis); 3557 let mainAxisCoord = coords[mainAxis]; 3558 let crossAxisCoord = coords[crossAxis]; 3559 if (checkMainAxis) { 3560 const minSide = mainAxis === "y" ? "top" : "left"; 3561 const maxSide = mainAxis === "y" ? "bottom" : "right"; 3562 const min2 = mainAxisCoord + overflow[minSide]; 3563 const max2 = mainAxisCoord - overflow[maxSide]; 3564 mainAxisCoord = clamp(min2, mainAxisCoord, max2); 3565 } 3566 if (checkCrossAxis) { 3567 const minSide = crossAxis === "y" ? "top" : "left"; 3568 const maxSide = crossAxis === "y" ? "bottom" : "right"; 3569 const min2 = crossAxisCoord + overflow[minSide]; 3570 const max2 = crossAxisCoord - overflow[maxSide]; 3571 crossAxisCoord = clamp(min2, crossAxisCoord, max2); 3572 } 3573 const limitedCoords = limiter.fn({ 3574 ...state, 3575 [mainAxis]: mainAxisCoord, 3576 [crossAxis]: crossAxisCoord 3577 }); 3578 return { 3579 ...limitedCoords, 3580 data: { 3581 x: limitedCoords.x - x, 3582 y: limitedCoords.y - y, 3583 enabled: { 3584 [mainAxis]: checkMainAxis, 3585 [crossAxis]: checkCrossAxis 3586 } 3587 } 3588 }; 3589 } 3590 }; 3591 }; 3592 var limitShift = function(options) { 3593 if (options === void 0) { 3594 options = {}; 3595 } 3596 return { 3597 options, 3598 fn(state) { 3599 const { 3600 x, 3601 y, 3602 placement, 3603 rects, 3604 middlewareData 3605 } = state; 3606 const { 3607 offset: offset4 = 0, 3608 mainAxis: checkMainAxis = true, 3609 crossAxis: checkCrossAxis = true 3610 } = evaluate(options, state); 3611 const coords = { 3612 x, 3613 y 3614 }; 3615 const crossAxis = getSideAxis(placement); 3616 const mainAxis = getOppositeAxis(crossAxis); 3617 let mainAxisCoord = coords[mainAxis]; 3618 let crossAxisCoord = coords[crossAxis]; 3619 const rawOffset = evaluate(offset4, state); 3620 const computedOffset = typeof rawOffset === "number" ? { 3621 mainAxis: rawOffset, 3622 crossAxis: 0 3623 } : { 3624 mainAxis: 0, 3625 crossAxis: 0, 3626 ...rawOffset 3627 }; 3628 if (checkMainAxis) { 3629 const len = mainAxis === "y" ? "height" : "width"; 3630 const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis; 3631 const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis; 3632 if (mainAxisCoord < limitMin) { 3633 mainAxisCoord = limitMin; 3634 } else if (mainAxisCoord > limitMax) { 3635 mainAxisCoord = limitMax; 3636 } 3637 } 3638 if (checkCrossAxis) { 3639 var _middlewareData$offse, _middlewareData$offse2; 3640 const len = mainAxis === "y" ? "width" : "height"; 3641 const isOriginSide = originSides.has(getSide(placement)); 3642 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); 3643 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); 3644 if (crossAxisCoord < limitMin) { 3645 crossAxisCoord = limitMin; 3646 } else if (crossAxisCoord > limitMax) { 3647 crossAxisCoord = limitMax; 3648 } 3649 } 3650 return { 3651 [mainAxis]: mainAxisCoord, 3652 [crossAxis]: crossAxisCoord 3653 }; 3654 } 3655 }; 3656 }; 3657 var size = function(options) { 3658 if (options === void 0) { 3659 options = {}; 3660 } 3661 return { 3662 name: "size", 3663 options, 3664 async fn(state) { 3665 var _state$middlewareData, _state$middlewareData2; 3666 const { 3667 placement, 3668 rects, 3669 platform: platform3, 3670 elements 3671 } = state; 3672 const { 3673 apply = () => { 3674 }, 3675 ...detectOverflowOptions 3676 } = evaluate(options, state); 3677 const overflow = await platform3.detectOverflow(state, detectOverflowOptions); 3678 const side = getSide(placement); 3679 const alignment = getAlignment(placement); 3680 const isYAxis = getSideAxis(placement) === "y"; 3681 const { 3682 width, 3683 height 3684 } = rects.floating; 3685 let heightSide; 3686 let widthSide; 3687 if (side === "top" || side === "bottom") { 3688 heightSide = side; 3689 widthSide = alignment === (await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)) ? "start" : "end") ? "left" : "right"; 3690 } else { 3691 widthSide = side; 3692 heightSide = alignment === "end" ? "top" : "bottom"; 3693 } 3694 const maximumClippingHeight = height - overflow.top - overflow.bottom; 3695 const maximumClippingWidth = width - overflow.left - overflow.right; 3696 const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight); 3697 const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth); 3698 const noShift = !state.middlewareData.shift; 3699 let availableHeight = overflowAvailableHeight; 3700 let availableWidth = overflowAvailableWidth; 3701 if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) { 3702 availableWidth = maximumClippingWidth; 3703 } 3704 if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) { 3705 availableHeight = maximumClippingHeight; 3706 } 3707 if (noShift && !alignment) { 3708 const xMin = max(overflow.left, 0); 3709 const xMax = max(overflow.right, 0); 3710 const yMin = max(overflow.top, 0); 3711 const yMax = max(overflow.bottom, 0); 3712 if (isYAxis) { 3713 availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right)); 3714 } else { 3715 availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom)); 3716 } 3717 } 3718 await apply({ 3719 ...state, 3720 availableWidth, 3721 availableHeight 3722 }); 3723 const nextDimensions = await platform3.getDimensions(elements.floating); 3724 if (width !== nextDimensions.width || height !== nextDimensions.height) { 3725 return { 3726 reset: { 3727 rects: true 3728 } 3729 }; 3730 } 3731 return {}; 3732 } 3733 }; 3734 }; 3735 3736 // node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs 3737 function getCssDimensions(element) { 3738 const css = getComputedStyle2(element); 3739 let width = parseFloat(css.width) || 0; 3740 let height = parseFloat(css.height) || 0; 3741 const hasOffset = isHTMLElement(element); 3742 const offsetWidth = hasOffset ? element.offsetWidth : width; 3743 const offsetHeight = hasOffset ? element.offsetHeight : height; 3744 const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight; 3745 if (shouldFallback) { 3746 width = offsetWidth; 3747 height = offsetHeight; 3748 } 3749 return { 3750 width, 3751 height, 3752 $: shouldFallback 3753 }; 3754 } 3755 function unwrapElement(element) { 3756 return !isElement(element) ? element.contextElement : element; 3757 } 3758 function getScale(element) { 3759 const domElement = unwrapElement(element); 3760 if (!isHTMLElement(domElement)) { 3761 return createCoords(1); 3762 } 3763 const rect = domElement.getBoundingClientRect(); 3764 const { 3765 width, 3766 height, 3767 $ 3768 } = getCssDimensions(domElement); 3769 let x = ($ ? round(rect.width) : rect.width) / width; 3770 let y = ($ ? round(rect.height) : rect.height) / height; 3771 if (!x || !Number.isFinite(x)) { 3772 x = 1; 3773 } 3774 if (!y || !Number.isFinite(y)) { 3775 y = 1; 3776 } 3777 return { 3778 x, 3779 y 3780 }; 3781 } 3782 var noOffsets = /* @__PURE__ */ createCoords(0); 3783 function getVisualOffsets(element) { 3784 const win = getWindow(element); 3785 if (!isWebKit() || !win.visualViewport) { 3786 return noOffsets; 3787 } 3788 return { 3789 x: win.visualViewport.offsetLeft, 3790 y: win.visualViewport.offsetTop 3791 }; 3792 } 3793 function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) { 3794 if (isFixed === void 0) { 3795 isFixed = false; 3796 } 3797 if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) { 3798 return false; 3799 } 3800 return isFixed; 3801 } 3802 function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) { 3803 if (includeScale === void 0) { 3804 includeScale = false; 3805 } 3806 if (isFixedStrategy === void 0) { 3807 isFixedStrategy = false; 3808 } 3809 const clientRect = element.getBoundingClientRect(); 3810 const domElement = unwrapElement(element); 3811 let scale = createCoords(1); 3812 if (includeScale) { 3813 if (offsetParent) { 3814 if (isElement(offsetParent)) { 3815 scale = getScale(offsetParent); 3816 } 3817 } else { 3818 scale = getScale(element); 3819 } 3820 } 3821 const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0); 3822 let x = (clientRect.left + visualOffsets.x) / scale.x; 3823 let y = (clientRect.top + visualOffsets.y) / scale.y; 3824 let width = clientRect.width / scale.x; 3825 let height = clientRect.height / scale.y; 3826 if (domElement) { 3827 const win = getWindow(domElement); 3828 const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent; 3829 let currentWin = win; 3830 let currentIFrame = getFrameElement(currentWin); 3831 while (currentIFrame && offsetParent && offsetWin !== currentWin) { 3832 const iframeScale = getScale(currentIFrame); 3833 const iframeRect = currentIFrame.getBoundingClientRect(); 3834 const css = getComputedStyle2(currentIFrame); 3835 const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x; 3836 const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y; 3837 x *= iframeScale.x; 3838 y *= iframeScale.y; 3839 width *= iframeScale.x; 3840 height *= iframeScale.y; 3841 x += left; 3842 y += top; 3843 currentWin = getWindow(currentIFrame); 3844 currentIFrame = getFrameElement(currentWin); 3845 } 3846 } 3847 return rectToClientRect({ 3848 width, 3849 height, 3850 x, 3851 y 3852 }); 3853 } 3854 function getWindowScrollBarX(element, rect) { 3855 const leftScroll = getNodeScroll(element).scrollLeft; 3856 if (!rect) { 3857 return getBoundingClientRect(getDocumentElement(element)).left + leftScroll; 3858 } 3859 return rect.left + leftScroll; 3860 } 3861 function getHTMLOffset(documentElement, scroll) { 3862 const htmlRect = documentElement.getBoundingClientRect(); 3863 const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect); 3864 const y = htmlRect.top + scroll.scrollTop; 3865 return { 3866 x, 3867 y 3868 }; 3869 } 3870 function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) { 3871 let { 3872 elements, 3873 rect, 3874 offsetParent, 3875 strategy 3876 } = _ref; 3877 const isFixed = strategy === "fixed"; 3878 const documentElement = getDocumentElement(offsetParent); 3879 const topLayer = elements ? isTopLayer(elements.floating) : false; 3880 if (offsetParent === documentElement || topLayer && isFixed) { 3881 return rect; 3882 } 3883 let scroll = { 3884 scrollLeft: 0, 3885 scrollTop: 0 3886 }; 3887 let scale = createCoords(1); 3888 const offsets = createCoords(0); 3889 const isOffsetParentAnElement = isHTMLElement(offsetParent); 3890 if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { 3891 if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) { 3892 scroll = getNodeScroll(offsetParent); 3893 } 3894 if (isOffsetParentAnElement) { 3895 const offsetRect = getBoundingClientRect(offsetParent); 3896 scale = getScale(offsetParent); 3897 offsets.x = offsetRect.x + offsetParent.clientLeft; 3898 offsets.y = offsetRect.y + offsetParent.clientTop; 3899 } 3900 } 3901 const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0); 3902 return { 3903 width: rect.width * scale.x, 3904 height: rect.height * scale.y, 3905 x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x, 3906 y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y 3907 }; 3908 } 3909 function getClientRects(element) { 3910 return Array.from(element.getClientRects()); 3911 } 3912 function getDocumentRect(element) { 3913 const html = getDocumentElement(element); 3914 const scroll = getNodeScroll(element); 3915 const body = element.ownerDocument.body; 3916 const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth); 3917 const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight); 3918 let x = -scroll.scrollLeft + getWindowScrollBarX(element); 3919 const y = -scroll.scrollTop; 3920 if (getComputedStyle2(body).direction === "rtl") { 3921 x += max(html.clientWidth, body.clientWidth) - width; 3922 } 3923 return { 3924 width, 3925 height, 3926 x, 3927 y 3928 }; 3929 } 3930 var SCROLLBAR_MAX = 25; 3931 function getViewportRect(element, strategy) { 3932 const win = getWindow(element); 3933 const html = getDocumentElement(element); 3934 const visualViewport = win.visualViewport; 3935 let width = html.clientWidth; 3936 let height = html.clientHeight; 3937 let x = 0; 3938 let y = 0; 3939 if (visualViewport) { 3940 width = visualViewport.width; 3941 height = visualViewport.height; 3942 const visualViewportBased = isWebKit(); 3943 if (!visualViewportBased || visualViewportBased && strategy === "fixed") { 3944 x = visualViewport.offsetLeft; 3945 y = visualViewport.offsetTop; 3946 } 3947 } 3948 const windowScrollbarX = getWindowScrollBarX(html); 3949 if (windowScrollbarX <= 0) { 3950 const doc = html.ownerDocument; 3951 const body = doc.body; 3952 const bodyStyles = getComputedStyle(body); 3953 const bodyMarginInline = doc.compatMode === "CSS1Compat" ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0; 3954 const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline); 3955 if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) { 3956 width -= clippingStableScrollbarWidth; 3957 } 3958 } else if (windowScrollbarX <= SCROLLBAR_MAX) { 3959 width += windowScrollbarX; 3960 } 3961 return { 3962 width, 3963 height, 3964 x, 3965 y 3966 }; 3967 } 3968 function getInnerBoundingClientRect(element, strategy) { 3969 const clientRect = getBoundingClientRect(element, true, strategy === "fixed"); 3970 const top = clientRect.top + element.clientTop; 3971 const left = clientRect.left + element.clientLeft; 3972 const scale = isHTMLElement(element) ? getScale(element) : createCoords(1); 3973 const width = element.clientWidth * scale.x; 3974 const height = element.clientHeight * scale.y; 3975 const x = left * scale.x; 3976 const y = top * scale.y; 3977 return { 3978 width, 3979 height, 3980 x, 3981 y 3982 }; 3983 } 3984 function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) { 3985 let rect; 3986 if (clippingAncestor === "viewport") { 3987 rect = getViewportRect(element, strategy); 3988 } else if (clippingAncestor === "document") { 3989 rect = getDocumentRect(getDocumentElement(element)); 3990 } else if (isElement(clippingAncestor)) { 3991 rect = getInnerBoundingClientRect(clippingAncestor, strategy); 3992 } else { 3993 const visualOffsets = getVisualOffsets(element); 3994 rect = { 3995 x: clippingAncestor.x - visualOffsets.x, 3996 y: clippingAncestor.y - visualOffsets.y, 3997 width: clippingAncestor.width, 3998 height: clippingAncestor.height 3999 }; 4000 } 4001 return rectToClientRect(rect); 4002 } 4003 function hasFixedPositionAncestor(element, stopNode) { 4004 const parentNode = getParentNode(element); 4005 if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) { 4006 return false; 4007 } 4008 return getComputedStyle2(parentNode).position === "fixed" || hasFixedPositionAncestor(parentNode, stopNode); 4009 } 4010 function getClippingElementAncestors(element, cache) { 4011 const cachedResult = cache.get(element); 4012 if (cachedResult) { 4013 return cachedResult; 4014 } 4015 let result = getOverflowAncestors(element, [], false).filter((el) => isElement(el) && getNodeName(el) !== "body"); 4016 let currentContainingBlockComputedStyle = null; 4017 const elementIsFixed = getComputedStyle2(element).position === "fixed"; 4018 let currentNode = elementIsFixed ? getParentNode(element) : element; 4019 while (isElement(currentNode) && !isLastTraversableNode(currentNode)) { 4020 const computedStyle = getComputedStyle2(currentNode); 4021 const currentNodeIsContaining = isContainingBlock(currentNode); 4022 if (!currentNodeIsContaining && computedStyle.position === "fixed") { 4023 currentContainingBlockComputedStyle = null; 4024 } 4025 const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === "static" && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === "absolute" || currentContainingBlockComputedStyle.position === "fixed") || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode); 4026 if (shouldDropCurrentNode) { 4027 result = result.filter((ancestor) => ancestor !== currentNode); 4028 } else { 4029 currentContainingBlockComputedStyle = computedStyle; 4030 } 4031 currentNode = getParentNode(currentNode); 4032 } 4033 cache.set(element, result); 4034 return result; 4035 } 4036 function getClippingRect(_ref) { 4037 let { 4038 element, 4039 boundary, 4040 rootBoundary, 4041 strategy 4042 } = _ref; 4043 const elementClippingAncestors = boundary === "clippingAncestors" ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary); 4044 const clippingAncestors = [...elementClippingAncestors, rootBoundary]; 4045 const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy); 4046 let top = firstRect.top; 4047 let right = firstRect.right; 4048 let bottom = firstRect.bottom; 4049 let left = firstRect.left; 4050 for (let i = 1; i < clippingAncestors.length; i++) { 4051 const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy); 4052 top = max(rect.top, top); 4053 right = min(rect.right, right); 4054 bottom = min(rect.bottom, bottom); 4055 left = max(rect.left, left); 4056 } 4057 return { 4058 width: right - left, 4059 height: bottom - top, 4060 x: left, 4061 y: top 4062 }; 4063 } 4064 function getDimensions(element) { 4065 const { 4066 width, 4067 height 4068 } = getCssDimensions(element); 4069 return { 4070 width, 4071 height 4072 }; 4073 } 4074 function getRectRelativeToOffsetParent(element, offsetParent, strategy) { 4075 const isOffsetParentAnElement = isHTMLElement(offsetParent); 4076 const documentElement = getDocumentElement(offsetParent); 4077 const isFixed = strategy === "fixed"; 4078 const rect = getBoundingClientRect(element, true, isFixed, offsetParent); 4079 let scroll = { 4080 scrollLeft: 0, 4081 scrollTop: 0 4082 }; 4083 const offsets = createCoords(0); 4084 function setLeftRTLScrollbarOffset() { 4085 offsets.x = getWindowScrollBarX(documentElement); 4086 } 4087 if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { 4088 if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) { 4089 scroll = getNodeScroll(offsetParent); 4090 } 4091 if (isOffsetParentAnElement) { 4092 const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent); 4093 offsets.x = offsetRect.x + offsetParent.clientLeft; 4094 offsets.y = offsetRect.y + offsetParent.clientTop; 4095 } else if (documentElement) { 4096 setLeftRTLScrollbarOffset(); 4097 } 4098 } 4099 if (isFixed && !isOffsetParentAnElement && documentElement) { 4100 setLeftRTLScrollbarOffset(); 4101 } 4102 const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0); 4103 const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x; 4104 const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y; 4105 return { 4106 x, 4107 y, 4108 width: rect.width, 4109 height: rect.height 4110 }; 4111 } 4112 function isStaticPositioned(element) { 4113 return getComputedStyle2(element).position === "static"; 4114 } 4115 function getTrueOffsetParent(element, polyfill) { 4116 if (!isHTMLElement(element) || getComputedStyle2(element).position === "fixed") { 4117 return null; 4118 } 4119 if (polyfill) { 4120 return polyfill(element); 4121 } 4122 let rawOffsetParent = element.offsetParent; 4123 if (getDocumentElement(element) === rawOffsetParent) { 4124 rawOffsetParent = rawOffsetParent.ownerDocument.body; 4125 } 4126 return rawOffsetParent; 4127 } 4128 function getOffsetParent(element, polyfill) { 4129 const win = getWindow(element); 4130 if (isTopLayer(element)) { 4131 return win; 4132 } 4133 if (!isHTMLElement(element)) { 4134 let svgOffsetParent = getParentNode(element); 4135 while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) { 4136 if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) { 4137 return svgOffsetParent; 4138 } 4139 svgOffsetParent = getParentNode(svgOffsetParent); 4140 } 4141 return win; 4142 } 4143 let offsetParent = getTrueOffsetParent(element, polyfill); 4144 while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) { 4145 offsetParent = getTrueOffsetParent(offsetParent, polyfill); 4146 } 4147 if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) { 4148 return win; 4149 } 4150 return offsetParent || getContainingBlock(element) || win; 4151 } 4152 var getElementRects = async function(data) { 4153 const getOffsetParentFn = this.getOffsetParent || getOffsetParent; 4154 const getDimensionsFn = this.getDimensions; 4155 const floatingDimensions = await getDimensionsFn(data.floating); 4156 return { 4157 reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy), 4158 floating: { 4159 x: 0, 4160 y: 0, 4161 width: floatingDimensions.width, 4162 height: floatingDimensions.height 4163 } 4164 }; 4165 }; 4166 function isRTL(element) { 4167 return getComputedStyle2(element).direction === "rtl"; 4168 } 4169 var platform2 = { 4170 convertOffsetParentRelativeRectToViewportRelativeRect, 4171 getDocumentElement, 4172 getClippingRect, 4173 getOffsetParent, 4174 getElementRects, 4175 getClientRects, 4176 getDimensions, 4177 getScale, 4178 isElement, 4179 isRTL 4180 }; 4181 function rectsAreEqual(a, b) { 4182 return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height; 4183 } 4184 function observeMove(element, onMove) { 4185 let io = null; 4186 let timeoutId; 4187 const root = getDocumentElement(element); 4188 function cleanup() { 4189 var _io; 4190 clearTimeout(timeoutId); 4191 (_io = io) == null || _io.disconnect(); 4192 io = null; 4193 } 4194 function refresh(skip, threshold) { 4195 if (skip === void 0) { 4196 skip = false; 4197 } 4198 if (threshold === void 0) { 4199 threshold = 1; 4200 } 4201 cleanup(); 4202 const elementRectForRootMargin = element.getBoundingClientRect(); 4203 const { 4204 left, 4205 top, 4206 width, 4207 height 4208 } = elementRectForRootMargin; 4209 if (!skip) { 4210 onMove(); 4211 } 4212 if (!width || !height) { 4213 return; 4214 } 4215 const insetTop = floor(top); 4216 const insetRight = floor(root.clientWidth - (left + width)); 4217 const insetBottom = floor(root.clientHeight - (top + height)); 4218 const insetLeft = floor(left); 4219 const rootMargin = -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px"; 4220 const options = { 4221 rootMargin, 4222 threshold: max(0, min(1, threshold)) || 1 4223 }; 4224 let isFirstUpdate = true; 4225 function handleObserve(entries) { 4226 const ratio = entries[0].intersectionRatio; 4227 if (ratio !== threshold) { 4228 if (!isFirstUpdate) { 4229 return refresh(); 4230 } 4231 if (!ratio) { 4232 timeoutId = setTimeout(() => { 4233 refresh(false, 1e-7); 4234 }, 1e3); 4235 } else { 4236 refresh(false, ratio); 4237 } 4238 } 4239 if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) { 4240 refresh(); 4241 } 4242 isFirstUpdate = false; 4243 } 4244 try { 4245 io = new IntersectionObserver(handleObserve, { 4246 ...options, 4247 // Handle <iframe>s 4248 root: root.ownerDocument 4249 }); 4250 } catch (_e) { 4251 io = new IntersectionObserver(handleObserve, options); 4252 } 4253 io.observe(element); 4254 } 4255 refresh(true); 4256 return cleanup; 4257 } 4258 function autoUpdate(reference, floating, update2, options) { 4259 if (options === void 0) { 4260 options = {}; 4261 } 4262 const { 4263 ancestorScroll = true, 4264 ancestorResize = true, 4265 elementResize = typeof ResizeObserver === "function", 4266 layoutShift = typeof IntersectionObserver === "function", 4267 animationFrame = false 4268 } = options; 4269 const referenceEl = unwrapElement(reference); 4270 const ancestors = ancestorScroll || ancestorResize ? [...referenceEl ? getOverflowAncestors(referenceEl) : [], ...floating ? getOverflowAncestors(floating) : []] : []; 4271 ancestors.forEach((ancestor) => { 4272 ancestorScroll && ancestor.addEventListener("scroll", update2, { 4273 passive: true 4274 }); 4275 ancestorResize && ancestor.addEventListener("resize", update2); 4276 }); 4277 const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update2) : null; 4278 let reobserveFrame = -1; 4279 let resizeObserver = null; 4280 if (elementResize) { 4281 resizeObserver = new ResizeObserver((_ref) => { 4282 let [firstEntry] = _ref; 4283 if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) { 4284 resizeObserver.unobserve(floating); 4285 cancelAnimationFrame(reobserveFrame); 4286 reobserveFrame = requestAnimationFrame(() => { 4287 var _resizeObserver; 4288 (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating); 4289 }); 4290 } 4291 update2(); 4292 }); 4293 if (referenceEl && !animationFrame) { 4294 resizeObserver.observe(referenceEl); 4295 } 4296 if (floating) { 4297 resizeObserver.observe(floating); 4298 } 4299 } 4300 let frameId; 4301 let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null; 4302 if (animationFrame) { 4303 frameLoop(); 4304 } 4305 function frameLoop() { 4306 const nextRefRect = getBoundingClientRect(reference); 4307 if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) { 4308 update2(); 4309 } 4310 prevRefRect = nextRefRect; 4311 frameId = requestAnimationFrame(frameLoop); 4312 } 4313 update2(); 4314 return () => { 4315 var _resizeObserver2; 4316 ancestors.forEach((ancestor) => { 4317 ancestorScroll && ancestor.removeEventListener("scroll", update2); 4318 ancestorResize && ancestor.removeEventListener("resize", update2); 4319 }); 4320 cleanupIo == null || cleanupIo(); 4321 (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect(); 4322 resizeObserver = null; 4323 if (animationFrame) { 4324 cancelAnimationFrame(frameId); 4325 } 4326 }; 4327 } 4328 var offset2 = offset; 4329 var shift2 = shift; 4330 var flip2 = flip; 4331 var size2 = size; 4332 var hide2 = hide; 4333 var limitShift2 = limitShift; 4334 var computePosition2 = (reference, floating, options) => { 4335 const cache = /* @__PURE__ */ new Map(); 4336 const mergedOptions = { 4337 platform: platform2, 4338 ...options 4339 }; 4340 const platformWithCache = { 4341 ...mergedOptions.platform, 4342 _c: cache 4343 }; 4344 return computePosition(reference, floating, { 4345 ...mergedOptions, 4346 platform: platformWithCache 4347 }); 4348 }; 4349 4350 // node_modules/@base-ui/react/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs 4351 var React19 = __toESM(require_react(), 1); 4352 var import_react2 = __toESM(require_react(), 1); 4353 var ReactDOM3 = __toESM(require_react_dom(), 1); 4354 var isClient = typeof document !== "undefined"; 4355 var noop2 = function noop3() { 4356 }; 4357 var index = isClient ? import_react2.useLayoutEffect : noop2; 4358 function deepEqual(a, b) { 4359 if (a === b) { 4360 return true; 4361 } 4362 if (typeof a !== typeof b) { 4363 return false; 4364 } 4365 if (typeof a === "function" && a.toString() === b.toString()) { 4366 return true; 4367 } 4368 let length; 4369 let i; 4370 let keys; 4371 if (a && b && typeof a === "object") { 4372 if (Array.isArray(a)) { 4373 length = a.length; 4374 if (length !== b.length) return false; 4375 for (i = length; i-- !== 0; ) { 4376 if (!deepEqual(a[i], b[i])) { 4377 return false; 4378 } 4379 } 4380 return true; 4381 } 4382 keys = Object.keys(a); 4383 length = keys.length; 4384 if (length !== Object.keys(b).length) { 4385 return false; 4386 } 4387 for (i = length; i-- !== 0; ) { 4388 if (!{}.hasOwnProperty.call(b, keys[i])) { 4389 return false; 4390 } 4391 } 4392 for (i = length; i-- !== 0; ) { 4393 const key = keys[i]; 4394 if (key === "_owner" && a.$$typeof) { 4395 continue; 4396 } 4397 if (!deepEqual(a[key], b[key])) { 4398 return false; 4399 } 4400 } 4401 return true; 4402 } 4403 return a !== a && b !== b; 4404 } 4405 function getDPR(element) { 4406 if (typeof window === "undefined") { 4407 return 1; 4408 } 4409 const win = element.ownerDocument.defaultView || window; 4410 return win.devicePixelRatio || 1; 4411 } 4412 function roundByDPR(element, value) { 4413 const dpr = getDPR(element); 4414 return Math.round(value * dpr) / dpr; 4415 } 4416 function useLatestRef(value) { 4417 const ref = React19.useRef(value); 4418 index(() => { 4419 ref.current = value; 4420 }); 4421 return ref; 4422 } 4423 function useFloating(options) { 4424 if (options === void 0) { 4425 options = {}; 4426 } 4427 const { 4428 placement = "bottom", 4429 strategy = "absolute", 4430 middleware = [], 4431 platform: platform3, 4432 elements: { 4433 reference: externalReference, 4434 floating: externalFloating 4435 } = {}, 4436 transform = true, 4437 whileElementsMounted, 4438 open 4439 } = options; 4440 const [data, setData] = React19.useState({ 4441 x: 0, 4442 y: 0, 4443 strategy, 4444 placement, 4445 middlewareData: {}, 4446 isPositioned: false 4447 }); 4448 const [latestMiddleware, setLatestMiddleware] = React19.useState(middleware); 4449 if (!deepEqual(latestMiddleware, middleware)) { 4450 setLatestMiddleware(middleware); 4451 } 4452 const [_reference, _setReference] = React19.useState(null); 4453 const [_floating, _setFloating] = React19.useState(null); 4454 const setReference = React19.useCallback((node) => { 4455 if (node !== referenceRef.current) { 4456 referenceRef.current = node; 4457 _setReference(node); 4458 } 4459 }, []); 4460 const setFloating = React19.useCallback((node) => { 4461 if (node !== floatingRef.current) { 4462 floatingRef.current = node; 4463 _setFloating(node); 4464 } 4465 }, []); 4466 const referenceEl = externalReference || _reference; 4467 const floatingEl = externalFloating || _floating; 4468 const referenceRef = React19.useRef(null); 4469 const floatingRef = React19.useRef(null); 4470 const dataRef = React19.useRef(data); 4471 const hasWhileElementsMounted = whileElementsMounted != null; 4472 const whileElementsMountedRef = useLatestRef(whileElementsMounted); 4473 const platformRef = useLatestRef(platform3); 4474 const openRef = useLatestRef(open); 4475 const update2 = React19.useCallback(() => { 4476 if (!referenceRef.current || !floatingRef.current) { 4477 return; 4478 } 4479 const config = { 4480 placement, 4481 strategy, 4482 middleware: latestMiddleware 4483 }; 4484 if (platformRef.current) { 4485 config.platform = platformRef.current; 4486 } 4487 computePosition2(referenceRef.current, floatingRef.current, config).then((data2) => { 4488 const fullData = { 4489 ...data2, 4490 // The floating element's position may be recomputed while it's closed 4491 // but still mounted (such as when transitioning out). To ensure 4492 // `isPositioned` will be `false` initially on the next open, avoid 4493 // setting it to `true` when `open === false` (must be specified). 4494 isPositioned: openRef.current !== false 4495 }; 4496 if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) { 4497 dataRef.current = fullData; 4498 ReactDOM3.flushSync(() => { 4499 setData(fullData); 4500 }); 4501 } 4502 }); 4503 }, [latestMiddleware, placement, strategy, platformRef, openRef]); 4504 index(() => { 4505 if (open === false && dataRef.current.isPositioned) { 4506 dataRef.current.isPositioned = false; 4507 setData((data2) => ({ 4508 ...data2, 4509 isPositioned: false 4510 })); 4511 } 4512 }, [open]); 4513 const isMountedRef = React19.useRef(false); 4514 index(() => { 4515 isMountedRef.current = true; 4516 return () => { 4517 isMountedRef.current = false; 4518 }; 4519 }, []); 4520 index(() => { 4521 if (referenceEl) referenceRef.current = referenceEl; 4522 if (floatingEl) floatingRef.current = floatingEl; 4523 if (referenceEl && floatingEl) { 4524 if (whileElementsMountedRef.current) { 4525 return whileElementsMountedRef.current(referenceEl, floatingEl, update2); 4526 } 4527 update2(); 4528 } 4529 }, [referenceEl, floatingEl, update2, whileElementsMountedRef, hasWhileElementsMounted]); 4530 const refs = React19.useMemo(() => ({ 4531 reference: referenceRef, 4532 floating: floatingRef, 4533 setReference, 4534 setFloating 4535 }), [setReference, setFloating]); 4536 const elements = React19.useMemo(() => ({ 4537 reference: referenceEl, 4538 floating: floatingEl 4539 }), [referenceEl, floatingEl]); 4540 const floatingStyles = React19.useMemo(() => { 4541 const initialStyles = { 4542 position: strategy, 4543 left: 0, 4544 top: 0 4545 }; 4546 if (!elements.floating) { 4547 return initialStyles; 4548 } 4549 const x = roundByDPR(elements.floating, data.x); 4550 const y = roundByDPR(elements.floating, data.y); 4551 if (transform) { 4552 return { 4553 ...initialStyles, 4554 transform: "translate(" + x + "px, " + y + "px)", 4555 ...getDPR(elements.floating) >= 1.5 && { 4556 willChange: "transform" 4557 } 4558 }; 4559 } 4560 return { 4561 position: strategy, 4562 left: x, 4563 top: y 4564 }; 4565 }, [strategy, transform, elements.floating, data.x, data.y]); 4566 return React19.useMemo(() => ({ 4567 ...data, 4568 update: update2, 4569 refs, 4570 elements, 4571 floatingStyles 4572 }), [data, update2, refs, elements, floatingStyles]); 4573 } 4574 var offset3 = (options, deps) => { 4575 const result = offset2(options); 4576 return { 4577 name: result.name, 4578 fn: result.fn, 4579 options: [options, deps] 4580 }; 4581 }; 4582 var shift3 = (options, deps) => { 4583 const result = shift2(options); 4584 return { 4585 name: result.name, 4586 fn: result.fn, 4587 options: [options, deps] 4588 }; 4589 }; 4590 var limitShift3 = (options, deps) => { 4591 const result = limitShift2(options); 4592 return { 4593 fn: result.fn, 4594 options: [options, deps] 4595 }; 4596 }; 4597 var flip3 = (options, deps) => { 4598 const result = flip2(options); 4599 return { 4600 name: result.name, 4601 fn: result.fn, 4602 options: [options, deps] 4603 }; 4604 }; 4605 var size3 = (options, deps) => { 4606 const result = size2(options); 4607 return { 4608 name: result.name, 4609 fn: result.fn, 4610 options: [options, deps] 4611 }; 4612 }; 4613 var hide3 = (options, deps) => { 4614 const result = hide2(options); 4615 return { 4616 name: result.name, 4617 fn: result.fn, 4618 options: [options, deps] 4619 }; 4620 }; 4621 4622 // node_modules/@base-ui/react/esm/utils/popups/popupStoreUtils.js 4623 var React24 = __toESM(require_react(), 1); 4624 4625 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.js 4626 var React23 = __toESM(require_react(), 1); 4627 4628 // node_modules/@base-ui/utils/esm/store/createSelector.js 4629 var createSelector = (a, b, c, d, e, f, ...other) => { 4630 if (other.length > 0) { 4631 throw new Error(true ? "Unsupported number of selectors" : formatErrorMessage_default(1)); 4632 } 4633 let selector; 4634 if (a && b && c && d && e && f) { 4635 selector = (state, a1, a2, a3) => { 4636 const va = a(state, a1, a2, a3); 4637 const vb = b(state, a1, a2, a3); 4638 const vc = c(state, a1, a2, a3); 4639 const vd = d(state, a1, a2, a3); 4640 const ve = e(state, a1, a2, a3); 4641 return f(va, vb, vc, vd, ve, a1, a2, a3); 4642 }; 4643 } else if (a && b && c && d && e) { 4644 selector = (state, a1, a2, a3) => { 4645 const va = a(state, a1, a2, a3); 4646 const vb = b(state, a1, a2, a3); 4647 const vc = c(state, a1, a2, a3); 4648 const vd = d(state, a1, a2, a3); 4649 return e(va, vb, vc, vd, a1, a2, a3); 4650 }; 4651 } else if (a && b && c && d) { 4652 selector = (state, a1, a2, a3) => { 4653 const va = a(state, a1, a2, a3); 4654 const vb = b(state, a1, a2, a3); 4655 const vc = c(state, a1, a2, a3); 4656 return d(va, vb, vc, a1, a2, a3); 4657 }; 4658 } else if (a && b && c) { 4659 selector = (state, a1, a2, a3) => { 4660 const va = a(state, a1, a2, a3); 4661 const vb = b(state, a1, a2, a3); 4662 return c(va, vb, a1, a2, a3); 4663 }; 4664 } else if (a && b) { 4665 selector = (state, a1, a2, a3) => { 4666 const va = a(state, a1, a2, a3); 4667 return b(va, a1, a2, a3); 4668 }; 4669 } else if (a) { 4670 selector = a; 4671 } else { 4672 throw ( 4673 /* minify-error-disabled */ 4674 new Error("Missing arguments") 4675 ); 4676 } 4677 return selector; 4678 }; 4679 4680 // node_modules/@base-ui/utils/esm/store/useStore.js 4681 var React21 = __toESM(require_react(), 1); 4682 var import_shim = __toESM(require_shim(), 1); 4683 var import_with_selector = __toESM(require_with_selector(), 1); 4684 4685 // node_modules/@base-ui/utils/esm/fastHooks.js 4686 var React20 = __toESM(require_react(), 1); 4687 var hooks = []; 4688 var currentInstance = void 0; 4689 function getInstance() { 4690 return currentInstance; 4691 } 4692 function register(hook) { 4693 hooks.push(hook); 4694 } 4695 function fastComponent(fn) { 4696 const FastComponent = (props, forwardedRef) => { 4697 const instance = useRefWithInit(createInstance).current; 4698 let result; 4699 try { 4700 currentInstance = instance; 4701 for (const hook of hooks) { 4702 hook.before(instance); 4703 } 4704 result = fn(props, forwardedRef); 4705 for (const hook of hooks) { 4706 hook.after(instance); 4707 } 4708 instance.didInitialize = true; 4709 } finally { 4710 currentInstance = void 0; 4711 } 4712 return result; 4713 }; 4714 FastComponent.displayName = fn.displayName || fn.name; 4715 return FastComponent; 4716 } 4717 function fastComponentRef(fn) { 4718 return /* @__PURE__ */ React20.forwardRef(fastComponent(fn)); 4719 } 4720 function createInstance() { 4721 return { 4722 didInitialize: false 4723 }; 4724 } 4725 4726 // node_modules/@base-ui/utils/esm/store/useStore.js 4727 var canUseRawUseSyncExternalStore = isReactVersionAtLeast(19); 4728 var useStoreImplementation = canUseRawUseSyncExternalStore ? useStoreFast : useStoreLegacy; 4729 function useStore(store2, selector, a1, a2, a3) { 4730 return useStoreImplementation(store2, selector, a1, a2, a3); 4731 } 4732 function useStoreR19(store2, selector, a1, a2, a3) { 4733 const getSelection = React21.useCallback(() => selector(store2.getSnapshot(), a1, a2, a3), [store2, selector, a1, a2, a3]); 4734 return (0, import_shim.useSyncExternalStore)(store2.subscribe, getSelection, getSelection); 4735 } 4736 register({ 4737 before(instance) { 4738 instance.syncIndex = 0; 4739 if (!instance.didInitialize) { 4740 instance.syncTick = 1; 4741 instance.syncHooks = []; 4742 instance.didChangeStore = true; 4743 instance.getSnapshot = () => { 4744 let didChange2 = false; 4745 for (let i = 0; i < instance.syncHooks.length; i += 1) { 4746 const hook = instance.syncHooks[i]; 4747 const value = hook.selector(hook.store.state, hook.a1, hook.a2, hook.a3); 4748 if (hook.didChange || !Object.is(hook.value, value)) { 4749 didChange2 = true; 4750 hook.value = value; 4751 hook.didChange = false; 4752 } 4753 } 4754 if (didChange2) { 4755 instance.syncTick += 1; 4756 } 4757 return instance.syncTick; 4758 }; 4759 } 4760 }, 4761 after(instance) { 4762 if (instance.syncHooks.length > 0) { 4763 if (instance.didChangeStore) { 4764 instance.didChangeStore = false; 4765 instance.subscribe = (onStoreChange) => { 4766 const stores = /* @__PURE__ */ new Set(); 4767 for (const hook of instance.syncHooks) { 4768 stores.add(hook.store); 4769 } 4770 const unsubscribes = []; 4771 for (const store2 of stores) { 4772 unsubscribes.push(store2.subscribe(onStoreChange)); 4773 } 4774 return () => { 4775 for (const unsubscribe of unsubscribes) { 4776 unsubscribe(); 4777 } 4778 }; 4779 }; 4780 } 4781 (0, import_shim.useSyncExternalStore)(instance.subscribe, instance.getSnapshot, instance.getSnapshot); 4782 } 4783 } 4784 }); 4785 function useStoreFast(store2, selector, a1, a2, a3) { 4786 const instance = getInstance(); 4787 if (!instance) { 4788 return useStoreR19(store2, selector, a1, a2, a3); 4789 } 4790 const index2 = instance.syncIndex; 4791 instance.syncIndex += 1; 4792 let hook; 4793 if (!instance.didInitialize) { 4794 hook = { 4795 store: store2, 4796 selector, 4797 a1, 4798 a2, 4799 a3, 4800 value: selector(store2.getSnapshot(), a1, a2, a3), 4801 didChange: false 4802 }; 4803 instance.syncHooks.push(hook); 4804 } else { 4805 hook = instance.syncHooks[index2]; 4806 if (hook.store !== store2 || hook.selector !== selector || !Object.is(hook.a1, a1) || !Object.is(hook.a2, a2) || !Object.is(hook.a3, a3)) { 4807 if (hook.store !== store2) { 4808 instance.didChangeStore = true; 4809 } 4810 hook.store = store2; 4811 hook.selector = selector; 4812 hook.a1 = a1; 4813 hook.a2 = a2; 4814 hook.a3 = a3; 4815 hook.didChange = true; 4816 } 4817 } 4818 return hook.value; 4819 } 4820 function useStoreLegacy(store2, selector, a1, a2, a3) { 4821 return (0, import_with_selector.useSyncExternalStoreWithSelector)(store2.subscribe, store2.getSnapshot, store2.getSnapshot, (state) => selector(state, a1, a2, a3)); 4822 } 4823 4824 // node_modules/@base-ui/utils/esm/store/Store.js 4825 var Store = class { 4826 /** 4827 * The current state of the store. 4828 * This property is updated immediately when the state changes as a result of calling {@link setState}, {@link update}, or {@link set}. 4829 * 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). 4830 * The values can be used directly (to avoid subscribing to the store) in effects or event handlers. 4831 * 4832 * Do not modify properties in state directly. Instead, use the provided methods to ensure proper state management and listener notification. 4833 */ 4834 // Internal state to handle recursive `setState()` calls 4835 constructor(state) { 4836 this.state = state; 4837 this.listeners = /* @__PURE__ */ new Set(); 4838 this.updateTick = 0; 4839 } 4840 /** 4841 * Registers a listener that will be called whenever the store's state changes. 4842 * 4843 * @param fn The listener function to be called on state changes. 4844 * @returns A function to unsubscribe the listener. 4845 */ 4846 subscribe = (fn) => { 4847 this.listeners.add(fn); 4848 return () => { 4849 this.listeners.delete(fn); 4850 }; 4851 }; 4852 /** 4853 * Returns the current state of the store. 4854 */ 4855 getSnapshot = () => { 4856 return this.state; 4857 }; 4858 /** 4859 * Updates the entire store's state and notifies all registered listeners. 4860 * 4861 * @param newState The new state to set for the store. 4862 */ 4863 setState(newState) { 4864 if (this.state === newState) { 4865 return; 4866 } 4867 this.state = newState; 4868 this.updateTick += 1; 4869 const currentTick = this.updateTick; 4870 for (const listener of this.listeners) { 4871 if (currentTick !== this.updateTick) { 4872 return; 4873 } 4874 listener(newState); 4875 } 4876 } 4877 /** 4878 * Merges the provided changes into the current state and notifies listeners if there are changes. 4879 * 4880 * @param changes An object containing the changes to apply to the current state. 4881 */ 4882 update(changes) { 4883 for (const key in changes) { 4884 if (!Object.is(this.state[key], changes[key])) { 4885 this.setState({ 4886 ...this.state, 4887 ...changes 4888 }); 4889 return; 4890 } 4891 } 4892 } 4893 /** 4894 * Sets a specific key in the store's state to a new value and notifies listeners if the value has changed. 4895 * 4896 * @param key The key in the store's state to update. 4897 * @param value The new value to set for the specified key. 4898 */ 4899 set(key, value) { 4900 if (!Object.is(this.state[key], value)) { 4901 this.setState({ 4902 ...this.state, 4903 [key]: value 4904 }); 4905 } 4906 } 4907 /** 4908 * Gives the state a new reference and updates all registered listeners. 4909 */ 4910 notifyAll() { 4911 const newState = { 4912 ...this.state 4913 }; 4914 this.setState(newState); 4915 } 4916 use(selector, a1, a2, a3) { 4917 return useStore(this, selector, a1, a2, a3); 4918 } 4919 }; 4920 4921 // node_modules/@base-ui/utils/esm/store/ReactStore.js 4922 var React22 = __toESM(require_react(), 1); 4923 var ReactStore = class extends Store { 4924 /** 4925 * Creates a new ReactStore instance. 4926 * 4927 * @param state Initial state of the store. 4928 * @param context Non-reactive context values. 4929 * @param selectors Optional selectors for use with `useState`. 4930 */ 4931 constructor(state, context = {}, selectors3) { 4932 super(state); 4933 this.context = context; 4934 this.selectors = selectors3; 4935 } 4936 /** 4937 * Non-reactive values such as refs, callbacks, etc. 4938 */ 4939 /** 4940 * Synchronizes a single external value into the store. 4941 * 4942 * Note that the while the value in `state` is updated immediately, the value returned 4943 * by `useState` is updated before the next render (similarly to React's `useState`). 4944 */ 4945 useSyncedValue(key, value) { 4946 React22.useDebugValue(key); 4947 const store2 = this; 4948 useIsoLayoutEffect(() => { 4949 if (store2.state[key] !== value) { 4950 store2.set(key, value); 4951 } 4952 }, [store2, key, value]); 4953 } 4954 /** 4955 * Synchronizes a single external value into the store and 4956 * cleans it up (sets to `undefined`) on unmount. 4957 * 4958 * Note that the while the value in `state` is updated immediately, the value returned 4959 * by `useState` is updated before the next render (similarly to React's `useState`). 4960 */ 4961 useSyncedValueWithCleanup(key, value) { 4962 const store2 = this; 4963 useIsoLayoutEffect(() => { 4964 if (store2.state[key] !== value) { 4965 store2.set(key, value); 4966 } 4967 return () => { 4968 store2.set(key, void 0); 4969 }; 4970 }, [store2, key, value]); 4971 } 4972 /** 4973 * Synchronizes multiple external values into the store. 4974 * 4975 * Note that the while the values in `state` are updated immediately, the values returned 4976 * by `useState` are updated before the next render (similarly to React's `useState`). 4977 */ 4978 useSyncedValues(statePart) { 4979 const store2 = this; 4980 if (true) { 4981 React22.useDebugValue(statePart, (p) => Object.keys(p)); 4982 const keys = React22.useRef(Object.keys(statePart)).current; 4983 const nextKeys = Object.keys(statePart); 4984 if (keys.length !== nextKeys.length || keys.some((key, index2) => key !== nextKeys[index2])) { 4985 console.error("ReactStore.useSyncedValues expects the same prop keys on every render. Keys should be stable."); 4986 } 4987 } 4988 const dependencies = Object.values(statePart); 4989 useIsoLayoutEffect(() => { 4990 store2.update(statePart); 4991 }, [store2, ...dependencies]); 4992 } 4993 /** 4994 * Registers a controllable prop pair (`controlled`, `defaultValue`) for a specific key. If `controlled` 4995 * is non-undefined, the store's state at `key` is updated to match `controlled`. 4996 */ 4997 useControlledProp(key, controlled) { 4998 React22.useDebugValue(key); 4999 const store2 = this; 5000 const isControlled = controlled !== void 0; 5001 useIsoLayoutEffect(() => { 5002 if (isControlled && !Object.is(store2.state[key], controlled)) { 5003 store2.setState({ 5004 ...store2.state, 5005 [key]: controlled 5006 }); 5007 } 5008 }, [store2, key, controlled, isControlled]); 5009 if (true) { 5010 const cache = this.controlledValues ??= /* @__PURE__ */ new Map(); 5011 if (!cache.has(key)) { 5012 cache.set(key, isControlled); 5013 } 5014 const previouslyControlled = cache.get(key); 5015 if (previouslyControlled !== void 0 && previouslyControlled !== isControlled) { 5016 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).`); 5017 } 5018 } 5019 } 5020 /** Gets the current value from the store using a selector with the provided key. 5021 * 5022 * @param key Key of the selector to use. 5023 */ 5024 select(key, a1, a2, a3) { 5025 const selector = this.selectors[key]; 5026 return selector(this.state, a1, a2, a3); 5027 } 5028 /** 5029 * Returns a value from the store's state using a selector function. 5030 * Used to subscribe to specific parts of the state. 5031 * This methods causes a rerender whenever the selected state changes. 5032 * 5033 * @param key Key of the selector to use. 5034 */ 5035 useState(key, a1, a2, a3) { 5036 React22.useDebugValue(key); 5037 return useStore(this, this.selectors[key], a1, a2, a3); 5038 } 5039 /** 5040 * Wraps a function with `useStableCallback` to ensure it has a stable reference 5041 * and assigns it to the context. 5042 * 5043 * @param key Key of the event callback. Must be a function in the context. 5044 * @param fn Function to assign. 5045 */ 5046 useContextCallback(key, fn) { 5047 React22.useDebugValue(key); 5048 const stableFunction = useStableCallback(fn ?? NOOP); 5049 this.context[key] = stableFunction; 5050 } 5051 /** 5052 * Returns a stable setter function for a specific key in the store's state. 5053 * It's commonly used to pass as a ref callback to React elements. 5054 * 5055 * @param key Key of the state to set. 5056 */ 5057 useStateSetter(key) { 5058 const ref = React22.useRef(void 0); 5059 if (ref.current === void 0) { 5060 ref.current = (value) => { 5061 this.set(key, value); 5062 }; 5063 } 5064 return ref.current; 5065 } 5066 /** 5067 * Observes changes derived from the store's selectors and calls the listener when the selected value changes. 5068 * 5069 * @param key Key of the selector to observe. 5070 * @param listener Listener function called when the selector result changes. 5071 */ 5072 observe(selector, listener) { 5073 let selectFn; 5074 if (typeof selector === "function") { 5075 selectFn = selector; 5076 } else { 5077 selectFn = this.selectors[selector]; 5078 } 5079 let prevValue = selectFn(this.state); 5080 listener(prevValue, prevValue, this); 5081 return this.subscribe((nextState) => { 5082 const nextValue = selectFn(nextState); 5083 if (!Object.is(prevValue, nextValue)) { 5084 const oldValue = prevValue; 5085 prevValue = nextValue; 5086 listener(nextValue, oldValue, this); 5087 } 5088 }); 5089 } 5090 }; 5091 5092 // node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingRootStore.js 5093 var selectors = { 5094 open: createSelector((state) => state.open), 5095 transitionStatus: createSelector((state) => state.transitionStatus), 5096 domReferenceElement: createSelector((state) => state.domReferenceElement), 5097 referenceElement: createSelector((state) => state.positionReference ?? state.referenceElement), 5098 floatingElement: createSelector((state) => state.floatingElement), 5099 floatingId: createSelector((state) => state.floatingId) 5100 }; 5101 var FloatingRootStore = class extends ReactStore { 5102 constructor(options) { 5103 const { 5104 syncOnly, 5105 nested, 5106 onOpenChange, 5107 triggerElements, 5108 ...initialState 5109 } = options; 5110 super({ 5111 ...initialState, 5112 positionReference: initialState.referenceElement, 5113 domReferenceElement: initialState.referenceElement 5114 }, { 5115 onOpenChange, 5116 dataRef: { 5117 current: {} 5118 }, 5119 events: createEventEmitter(), 5120 nested, 5121 triggerElements 5122 }, selectors); 5123 this.syncOnly = syncOnly; 5124 } 5125 /** 5126 * Syncs the event used by hover logic to distinguish hover-open from click-like interaction. 5127 */ 5128 syncOpenEvent = (newOpen, event) => { 5129 if (!newOpen || !this.state.open || // Prevent a pending hover-open from overwriting a click-open event, while allowing 5130 // click events to upgrade a hover-open. 5131 event != null && isClickLikeEvent(event)) { 5132 this.context.dataRef.current.openEvent = newOpen ? event : void 0; 5133 } 5134 }; 5135 /** 5136 * Runs the root-owned side effects for an open state change. 5137 */ 5138 dispatchOpenChange = (newOpen, eventDetails) => { 5139 this.syncOpenEvent(newOpen, eventDetails.event); 5140 const details = { 5141 open: newOpen, 5142 reason: eventDetails.reason, 5143 nativeEvent: eventDetails.event, 5144 nested: this.context.nested, 5145 triggerElement: eventDetails.trigger 5146 }; 5147 this.context.events.emit("openchange", details); 5148 }; 5149 /** 5150 * Emits the `openchange` event through the internal event emitter and calls the `onOpenChange` handler with the provided arguments. 5151 * 5152 * @param newOpen The new open state. 5153 * @param eventDetails Details about the event that triggered the open state change. 5154 */ 5155 setOpen = (newOpen, eventDetails) => { 5156 if (this.syncOnly) { 5157 this.context.onOpenChange?.(newOpen, eventDetails); 5158 return; 5159 } 5160 this.dispatchOpenChange(newOpen, eventDetails); 5161 this.context.onOpenChange?.(newOpen, eventDetails); 5162 }; 5163 }; 5164 5165 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.js 5166 function useSyncedFloatingRootContext(options) { 5167 const { 5168 popupStore, 5169 treatPopupAsFloatingElement = false, 5170 floatingRootContext: floatingRootContextProp, 5171 floatingId, 5172 nested, 5173 onOpenChange 5174 } = options; 5175 const open = popupStore.useState("open"); 5176 const referenceElement = popupStore.useState("activeTriggerElement"); 5177 const floatingElement = popupStore.useState(treatPopupAsFloatingElement ? "popupElement" : "positionerElement"); 5178 const triggerElements = popupStore.context.triggerElements; 5179 const handleOpenChange = onOpenChange; 5180 const internalStoreRef = React23.useRef(null); 5181 if (floatingRootContextProp === void 0 && internalStoreRef.current === null) { 5182 internalStoreRef.current = new FloatingRootStore({ 5183 open, 5184 transitionStatus: void 0, 5185 referenceElement, 5186 floatingElement, 5187 triggerElements, 5188 onOpenChange: handleOpenChange, 5189 floatingId, 5190 syncOnly: true, 5191 nested 5192 }); 5193 } 5194 const store2 = floatingRootContextProp ?? internalStoreRef.current; 5195 popupStore.useSyncedValue("floatingId", floatingId); 5196 useIsoLayoutEffect(() => { 5197 const valuesToSync = { 5198 open, 5199 floatingId, 5200 referenceElement, 5201 floatingElement 5202 }; 5203 if (isElement(referenceElement)) { 5204 valuesToSync.domReferenceElement = referenceElement; 5205 } 5206 if (store2.state.positionReference === store2.state.referenceElement) { 5207 valuesToSync.positionReference = referenceElement; 5208 } 5209 store2.update(valuesToSync); 5210 }, [open, floatingId, referenceElement, floatingElement, store2]); 5211 store2.context.onOpenChange = handleOpenChange; 5212 store2.context.nested = nested; 5213 return store2; 5214 } 5215 5216 // node_modules/@base-ui/react/esm/utils/popups/popupStoreUtils.js 5217 var FOCUSABLE_POPUP_PROPS = { 5218 tabIndex: -1, 5219 [FOCUSABLE_ATTRIBUTE]: "" 5220 }; 5221 function usePopupStore(externalStore, createStore, treatPopupAsFloatingElement = false) { 5222 const floatingId = useId(); 5223 const nested = useFloatingParentNodeId() != null; 5224 const internalStoreRef = React24.useRef(null); 5225 if (externalStore === void 0 && internalStoreRef.current === null) { 5226 internalStoreRef.current = createStore(floatingId, nested); 5227 } 5228 const store2 = externalStore ?? internalStoreRef.current; 5229 useSyncedFloatingRootContext({ 5230 popupStore: store2, 5231 treatPopupAsFloatingElement, 5232 floatingRootContext: store2.state.floatingRootContext, 5233 floatingId, 5234 nested, 5235 onOpenChange: store2.setOpen 5236 }); 5237 return { 5238 store: store2, 5239 internalStore: internalStoreRef.current 5240 }; 5241 } 5242 function useTriggerRegistration(id, store2) { 5243 const registeredElementIdRef = React24.useRef(null); 5244 const registeredElementRef = React24.useRef(null); 5245 return React24.useCallback((element) => { 5246 if (id === void 0) { 5247 return; 5248 } 5249 let shouldSyncTriggerCount = false; 5250 if (registeredElementIdRef.current !== null) { 5251 const registeredId = registeredElementIdRef.current; 5252 const registeredElement = registeredElementRef.current; 5253 const currentElement = store2.context.triggerElements.getById(registeredId); 5254 if (registeredElement && currentElement === registeredElement) { 5255 store2.context.triggerElements.delete(registeredId); 5256 shouldSyncTriggerCount = true; 5257 } 5258 registeredElementIdRef.current = null; 5259 registeredElementRef.current = null; 5260 } 5261 if (element !== null) { 5262 registeredElementIdRef.current = id; 5263 registeredElementRef.current = element; 5264 store2.context.triggerElements.add(id, element); 5265 shouldSyncTriggerCount = true; 5266 } 5267 if (shouldSyncTriggerCount) { 5268 const triggerCount = store2.context.triggerElements.size; 5269 if (store2.select("open") && store2.state.triggerCount !== triggerCount) { 5270 store2.set("triggerCount", triggerCount); 5271 } 5272 } 5273 }, [store2, id]); 5274 } 5275 function setOpenTriggerState(state, open, trigger) { 5276 const triggerId = trigger?.id ?? null; 5277 if (triggerId || open) { 5278 state.activeTriggerId = triggerId; 5279 state.activeTriggerElement = trigger ?? null; 5280 } 5281 } 5282 function useTriggerDataForwarding(triggerId, triggerElementRef, store2, stateUpdates) { 5283 const isMountedByThisTrigger = store2.useState("isMountedByTrigger", triggerId); 5284 const baseRegisterTrigger = useTriggerRegistration(triggerId, store2); 5285 const registerTrigger = useStableCallback((element) => { 5286 baseRegisterTrigger(element); 5287 if (!element) { 5288 return; 5289 } 5290 const open = store2.select("open"); 5291 const activeTriggerId = store2.select("activeTriggerId"); 5292 if (activeTriggerId === triggerId) { 5293 store2.update({ 5294 activeTriggerElement: element, 5295 ...open ? stateUpdates : null 5296 }); 5297 return; 5298 } 5299 if (activeTriggerId == null && open) { 5300 store2.update({ 5301 activeTriggerId: triggerId, 5302 activeTriggerElement: element, 5303 ...stateUpdates 5304 }); 5305 } 5306 }); 5307 useIsoLayoutEffect(() => { 5308 if (isMountedByThisTrigger) { 5309 store2.update({ 5310 activeTriggerElement: triggerElementRef.current, 5311 ...stateUpdates 5312 }); 5313 } 5314 }, [isMountedByThisTrigger, store2, triggerElementRef, ...Object.values(stateUpdates)]); 5315 return { 5316 registerTrigger, 5317 isMountedByThisTrigger 5318 }; 5319 } 5320 function useImplicitActiveTrigger(store2) { 5321 const open = store2.useState("open"); 5322 const reactiveTriggerCount = store2.useState("triggerCount"); 5323 useIsoLayoutEffect(() => { 5324 if (!open) { 5325 if (store2.state.triggerCount !== 0) { 5326 store2.set("triggerCount", 0); 5327 } 5328 return; 5329 } 5330 const triggerCount = store2.context.triggerElements.size; 5331 const stateUpdates = {}; 5332 if (store2.state.triggerCount !== triggerCount) { 5333 stateUpdates.triggerCount = triggerCount; 5334 } 5335 if (!store2.select("activeTriggerId") && triggerCount === 1) { 5336 const iteratorResult = store2.context.triggerElements.entries().next(); 5337 if (!iteratorResult.done) { 5338 const [implicitTriggerId, implicitTriggerElement] = iteratorResult.value; 5339 stateUpdates.activeTriggerId = implicitTriggerId; 5340 stateUpdates.activeTriggerElement = implicitTriggerElement; 5341 } 5342 } 5343 if (stateUpdates.triggerCount !== void 0 || stateUpdates.activeTriggerId !== void 0) { 5344 store2.update(stateUpdates); 5345 } 5346 }, [open, store2, reactiveTriggerCount]); 5347 } 5348 function useOpenStateTransitions(open, store2, onUnmount) { 5349 const { 5350 mounted, 5351 setMounted, 5352 transitionStatus 5353 } = useTransitionStatus(open); 5354 store2.useSyncedValues({ 5355 mounted, 5356 transitionStatus 5357 }); 5358 const forceUnmount = useStableCallback(() => { 5359 setMounted(false); 5360 store2.update({ 5361 activeTriggerId: null, 5362 activeTriggerElement: null, 5363 mounted: false, 5364 preventUnmountingOnClose: false 5365 }); 5366 onUnmount?.(); 5367 store2.context.onOpenChangeComplete?.(false); 5368 }); 5369 const preventUnmountingOnClose = store2.useState("preventUnmountingOnClose"); 5370 useOpenChangeComplete({ 5371 enabled: mounted && !open && !preventUnmountingOnClose, 5372 open, 5373 ref: store2.context.popupRef, 5374 onComplete() { 5375 if (!open) { 5376 forceUnmount(); 5377 } 5378 } 5379 }); 5380 return { 5381 forceUnmount, 5382 transitionStatus 5383 }; 5384 } 5385 function usePopupInteractionProps(store2, statePart) { 5386 store2.useSyncedValues(statePart); 5387 useIsoLayoutEffect(() => () => { 5388 store2.update({ 5389 activeTriggerProps: EMPTY_OBJECT, 5390 inactiveTriggerProps: EMPTY_OBJECT, 5391 popupProps: EMPTY_OBJECT 5392 }); 5393 }, [store2]); 5394 } 5395 5396 // node_modules/@base-ui/react/esm/utils/popups/popupTriggerMap.js 5397 var PopupTriggerMap = class { 5398 constructor() { 5399 this.elementsSet = /* @__PURE__ */ new Set(); 5400 this.idMap = /* @__PURE__ */ new Map(); 5401 } 5402 /** 5403 * Adds a trigger element with the given ID. 5404 * 5405 * Note: The provided element is assumed to not be registered under multiple IDs. 5406 */ 5407 add(id, element) { 5408 const existingElement = this.idMap.get(id); 5409 if (existingElement === element) { 5410 return; 5411 } 5412 if (existingElement !== void 0) { 5413 this.elementsSet.delete(existingElement); 5414 } 5415 this.elementsSet.add(element); 5416 this.idMap.set(id, element); 5417 if (true) { 5418 if (this.elementsSet.size !== this.idMap.size) { 5419 throw new Error("Base UI: A trigger element cannot be registered under multiple IDs in PopupTriggerMap."); 5420 } 5421 } 5422 } 5423 /** 5424 * Removes the trigger element with the given ID. 5425 */ 5426 delete(id) { 5427 const element = this.idMap.get(id); 5428 if (element) { 5429 this.elementsSet.delete(element); 5430 this.idMap.delete(id); 5431 } 5432 } 5433 /** 5434 * Whether the given element is registered as a trigger. 5435 */ 5436 hasElement(element) { 5437 return this.elementsSet.has(element); 5438 } 5439 /** 5440 * Whether there is a registered trigger element matching the given predicate. 5441 */ 5442 hasMatchingElement(predicate) { 5443 for (const element of this.elementsSet) { 5444 if (predicate(element)) { 5445 return true; 5446 } 5447 } 5448 return false; 5449 } 5450 /** 5451 * Returns the trigger element associated with the given ID, or undefined if no such element exists. 5452 */ 5453 getById(id) { 5454 return this.idMap.get(id); 5455 } 5456 /** 5457 * Returns an iterable of all registered trigger entries, where each entry is a tuple of [id, element]. 5458 */ 5459 entries() { 5460 return this.idMap.entries(); 5461 } 5462 /** 5463 * Returns an iterable of all registered trigger elements. 5464 */ 5465 elements() { 5466 return this.elementsSet.values(); 5467 } 5468 /** 5469 * Returns the number of registered trigger elements. 5470 */ 5471 get size() { 5472 return this.idMap.size; 5473 } 5474 }; 5475 5476 // node_modules/@base-ui/react/esm/floating-ui-react/utils/getEmptyRootContext.js 5477 function getEmptyRootContext() { 5478 return new FloatingRootStore({ 5479 open: false, 5480 transitionStatus: void 0, 5481 floatingElement: null, 5482 referenceElement: null, 5483 triggerElements: new PopupTriggerMap(), 5484 floatingId: void 0, 5485 syncOnly: false, 5486 nested: false, 5487 onOpenChange: void 0 5488 }); 5489 } 5490 5491 // node_modules/@base-ui/react/esm/utils/popups/store.js 5492 function createInitialPopupStoreState() { 5493 return { 5494 open: false, 5495 openProp: void 0, 5496 mounted: false, 5497 transitionStatus: void 0, 5498 floatingRootContext: getEmptyRootContext(), 5499 floatingId: void 0, 5500 triggerCount: 0, 5501 preventUnmountingOnClose: false, 5502 payload: void 0, 5503 activeTriggerId: null, 5504 activeTriggerElement: null, 5505 triggerIdProp: void 0, 5506 popupElement: null, 5507 positionerElement: null, 5508 activeTriggerProps: EMPTY_OBJECT, 5509 inactiveTriggerProps: EMPTY_OBJECT, 5510 popupProps: EMPTY_OBJECT 5511 }; 5512 } 5513 function createPopupFloatingRootContext(triggerElements, floatingId, nested = false) { 5514 return new FloatingRootStore({ 5515 open: false, 5516 transitionStatus: void 0, 5517 floatingElement: null, 5518 referenceElement: null, 5519 triggerElements, 5520 floatingId, 5521 syncOnly: true, 5522 nested, 5523 onOpenChange: void 0 5524 }); 5525 } 5526 var activeTriggerIdSelector = createSelector((state) => state.triggerIdProp ?? state.activeTriggerId); 5527 var openSelector = createSelector((state) => state.openProp ?? state.open); 5528 var popupIdSelector = createSelector((state) => { 5529 const popupId = state.popupElement?.id ?? state.floatingId; 5530 return popupId || void 0; 5531 }); 5532 function triggerOwnsOpenPopup(state, triggerId) { 5533 return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) === triggerId; 5534 } 5535 function triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) { 5536 if (triggerOwnsOpenPopup(state, triggerId)) { 5537 return true; 5538 } 5539 return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) == null && state.triggerCount === 1; 5540 } 5541 var popupStoreSelectors = { 5542 open: openSelector, 5543 mounted: createSelector((state) => state.mounted), 5544 transitionStatus: createSelector((state) => state.transitionStatus), 5545 floatingRootContext: createSelector((state) => state.floatingRootContext), 5546 triggerCount: createSelector((state) => state.triggerCount), 5547 preventUnmountingOnClose: createSelector((state) => state.preventUnmountingOnClose), 5548 payload: createSelector((state) => state.payload), 5549 activeTriggerId: activeTriggerIdSelector, 5550 activeTriggerElement: createSelector((state) => state.mounted ? state.activeTriggerElement : null), 5551 popupId: popupIdSelector, 5552 /** 5553 * Whether the trigger with the given ID was used to open the popup. 5554 */ 5555 isTriggerActive: createSelector((state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId), 5556 /** 5557 * Whether the popup is open and was activated by a trigger with the given ID. 5558 */ 5559 isOpenedByTrigger: createSelector((state, triggerId) => triggerOwnsOpenPopup(state, triggerId)), 5560 /** 5561 * Whether the popup is mounted and was activated by a trigger with the given ID. 5562 */ 5563 isMountedByTrigger: createSelector((state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId && state.mounted), 5564 triggerProps: createSelector((state, isActive) => isActive ? state.activeTriggerProps : state.inactiveTriggerProps), 5565 /** 5566 * Popup id for the trigger that currently owns the open popup. 5567 */ 5568 triggerPopupId: createSelector((state, triggerId) => triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) ? popupIdSelector(state) : void 0), 5569 popupProps: createSelector((state) => state.popupProps), 5570 popupElement: createSelector((state) => state.popupElement), 5571 positionerElement: createSelector((state) => state.positionerElement) 5572 }; 5573 5574 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useFloatingRootContext.js 5575 function useFloatingRootContext(options) { 5576 const { 5577 open = false, 5578 onOpenChange, 5579 elements = {} 5580 } = options; 5581 const floatingId = useId(); 5582 const nested = useFloatingParentNodeId() != null; 5583 if (true) { 5584 const optionDomReference = elements.reference; 5585 if (optionDomReference && !isElement(optionDomReference)) { 5586 console.error("Cannot pass a virtual element to the `elements.reference` option,", "as it must be a real DOM element. Use `context.setPositionReference()`", "instead."); 5587 } 5588 } 5589 const store2 = useRefWithInit(() => new FloatingRootStore({ 5590 open, 5591 transitionStatus: void 0, 5592 onOpenChange, 5593 referenceElement: elements.reference ?? null, 5594 floatingElement: elements.floating ?? null, 5595 triggerElements: new PopupTriggerMap(), 5596 floatingId, 5597 syncOnly: false, 5598 nested 5599 })).current; 5600 useIsoLayoutEffect(() => { 5601 const valuesToSync = { 5602 open, 5603 floatingId 5604 }; 5605 if (elements.reference !== void 0) { 5606 valuesToSync.referenceElement = elements.reference; 5607 valuesToSync.domReferenceElement = isElement(elements.reference) ? elements.reference : null; 5608 } 5609 if (elements.floating !== void 0) { 5610 valuesToSync.floatingElement = elements.floating; 5611 } 5612 store2.update(valuesToSync); 5613 }, [open, floatingId, elements.reference, elements.floating, store2]); 5614 store2.context.onOpenChange = onOpenChange; 5615 store2.context.nested = nested; 5616 return store2; 5617 } 5618 5619 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useFloating.js 5620 function useFloating2(options = {}) { 5621 const { 5622 nodeId, 5623 externalTree 5624 } = options; 5625 const internalStore = useFloatingRootContext(options); 5626 const store2 = options.rootContext || internalStore; 5627 const referenceElement = store2.useState("referenceElement"); 5628 const floatingElement = store2.useState("floatingElement"); 5629 const domReferenceElement = store2.useState("domReferenceElement"); 5630 const open = store2.useState("open"); 5631 const floatingId = store2.useState("floatingId"); 5632 const [positionReference, setPositionReferenceRaw] = React25.useState(null); 5633 const [localDomReference, setLocalDomReference] = React25.useState(void 0); 5634 const [localFloatingElement, setLocalFloatingElement] = React25.useState(void 0); 5635 const domReferenceRef = React25.useRef(null); 5636 const tree = useFloatingTree(externalTree); 5637 const storeElements = React25.useMemo(() => ({ 5638 reference: referenceElement, 5639 floating: floatingElement, 5640 domReference: domReferenceElement 5641 }), [referenceElement, floatingElement, domReferenceElement]); 5642 const position = useFloating({ 5643 ...options, 5644 elements: { 5645 ...storeElements, 5646 ...positionReference && { 5647 reference: positionReference 5648 } 5649 } 5650 }); 5651 const localDomReferenceElement = isElement(localDomReference) ? localDomReference : null; 5652 const syncedFloatingElement = localFloatingElement === void 0 ? store2.state.floatingElement : localFloatingElement; 5653 store2.useSyncedValue("referenceElement", localDomReference ?? null); 5654 store2.useSyncedValue("domReferenceElement", localDomReference === void 0 ? domReferenceElement : localDomReferenceElement); 5655 store2.useSyncedValue("floatingElement", syncedFloatingElement); 5656 const setPositionReference = React25.useCallback((node) => { 5657 const computedPositionReference = isElement(node) ? { 5658 getBoundingClientRect: () => node.getBoundingClientRect(), 5659 getClientRects: () => node.getClientRects(), 5660 contextElement: node 5661 } : node; 5662 setPositionReferenceRaw(computedPositionReference); 5663 position.refs.setReference(computedPositionReference); 5664 }, [position.refs]); 5665 const setReference = React25.useCallback((node) => { 5666 if (isElement(node) || node === null) { 5667 domReferenceRef.current = node; 5668 setLocalDomReference(node); 5669 } 5670 if (isElement(position.refs.reference.current) || position.refs.reference.current === null || // Don't allow setting virtual elements using the old technique back to 5671 // `null` to support `positionReference` + an unstable `reference` 5672 // callback ref. 5673 node !== null && !isElement(node)) { 5674 position.refs.setReference(node); 5675 } 5676 }, [position.refs, setLocalDomReference]); 5677 const setFloating = React25.useCallback((node) => { 5678 setLocalFloatingElement(node); 5679 position.refs.setFloating(node); 5680 }, [position.refs]); 5681 const refs = React25.useMemo(() => ({ 5682 ...position.refs, 5683 setReference, 5684 setFloating, 5685 setPositionReference, 5686 domReference: domReferenceRef 5687 }), [position.refs, setReference, setFloating, setPositionReference]); 5688 const elements = React25.useMemo(() => ({ 5689 ...position.elements, 5690 domReference: domReferenceElement 5691 }), [position.elements, domReferenceElement]); 5692 const context = React25.useMemo(() => ({ 5693 ...position, 5694 dataRef: store2.context.dataRef, 5695 open, 5696 onOpenChange: store2.setOpen, 5697 events: store2.context.events, 5698 floatingId, 5699 refs, 5700 elements, 5701 nodeId, 5702 rootStore: store2 5703 }), [position, refs, elements, nodeId, store2, open, floatingId]); 5704 useIsoLayoutEffect(() => { 5705 if (domReferenceElement) { 5706 domReferenceRef.current = domReferenceElement; 5707 } 5708 }, [domReferenceElement]); 5709 useIsoLayoutEffect(() => { 5710 store2.context.dataRef.current.floatingContext = context; 5711 const node = tree?.nodesRef.current.find((n) => n.id === nodeId); 5712 if (node) { 5713 node.context = context; 5714 } 5715 }); 5716 return React25.useMemo(() => ({ 5717 ...position, 5718 context, 5719 refs, 5720 elements, 5721 rootStore: store2 5722 }), [position, refs, elements, context, store2]); 5723 } 5724 5725 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useFocus.js 5726 var React26 = __toESM(require_react(), 1); 5727 var isMacSafari = isMac && isSafari; 5728 function useFocus(context, props = {}) { 5729 const { 5730 enabled = true, 5731 delay 5732 } = props; 5733 const store2 = "rootStore" in context ? context.rootStore : context; 5734 const { 5735 events, 5736 dataRef 5737 } = store2.context; 5738 const blockFocusRef = React26.useRef(false); 5739 const blockedReferenceRef = React26.useRef(null); 5740 const keyboardModalityRef = React26.useRef(true); 5741 const timeout = useTimeout(); 5742 React26.useEffect(() => { 5743 const domReference = store2.select("domReferenceElement"); 5744 if (!enabled) { 5745 return void 0; 5746 } 5747 const win = getWindow(domReference); 5748 function onBlur() { 5749 const currentDomReference = store2.select("domReferenceElement"); 5750 if (!store2.select("open") && isHTMLElement(currentDomReference) && currentDomReference === activeElement(ownerDocument(currentDomReference))) { 5751 blockFocusRef.current = true; 5752 } 5753 } 5754 function onKeyDown() { 5755 keyboardModalityRef.current = true; 5756 } 5757 function onPointerDown() { 5758 keyboardModalityRef.current = false; 5759 } 5760 return mergeCleanups(addEventListener(win, "blur", onBlur), isMacSafari && addEventListener(win, "keydown", onKeyDown, true), isMacSafari && addEventListener(win, "pointerdown", onPointerDown, true)); 5761 }, [store2, enabled]); 5762 React26.useEffect(() => { 5763 if (!enabled) { 5764 return void 0; 5765 } 5766 function onOpenChangeLocal(details) { 5767 if (details.reason === reason_parts_exports.triggerPress || details.reason === reason_parts_exports.escapeKey) { 5768 const referenceElement = store2.select("domReferenceElement"); 5769 if (isElement(referenceElement)) { 5770 blockedReferenceRef.current = referenceElement; 5771 blockFocusRef.current = true; 5772 } 5773 } 5774 } 5775 events.on("openchange", onOpenChangeLocal); 5776 return () => { 5777 events.off("openchange", onOpenChangeLocal); 5778 }; 5779 }, [events, enabled, store2]); 5780 const reference = React26.useMemo(() => { 5781 function resetBlockedFocus() { 5782 blockFocusRef.current = false; 5783 blockedReferenceRef.current = null; 5784 } 5785 return { 5786 onMouseLeave() { 5787 resetBlockedFocus(); 5788 }, 5789 onFocus(event) { 5790 const focusTarget = event.currentTarget; 5791 if (blockFocusRef.current) { 5792 if (blockedReferenceRef.current === focusTarget) { 5793 return; 5794 } 5795 resetBlockedFocus(); 5796 } 5797 const target = getTarget(event.nativeEvent); 5798 if (isElement(target)) { 5799 if (isMacSafari && !event.relatedTarget) { 5800 if (!keyboardModalityRef.current && !isTypeableElement(target)) { 5801 return; 5802 } 5803 } else if (!matchesFocusVisible(target)) { 5804 return; 5805 } 5806 } 5807 const movedFromOtherEnabledTrigger = isTargetInsideEnabledTrigger(event.relatedTarget, store2.context.triggerElements); 5808 const { 5809 nativeEvent, 5810 currentTarget 5811 } = event; 5812 const delayValue = typeof delay === "function" ? delay() : delay; 5813 if (store2.select("open") && movedFromOtherEnabledTrigger || delayValue === 0 || delayValue === void 0) { 5814 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget)); 5815 return; 5816 } 5817 timeout.start(delayValue, () => { 5818 if (blockFocusRef.current) { 5819 return; 5820 } 5821 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget)); 5822 }); 5823 }, 5824 onBlur(event) { 5825 resetBlockedFocus(); 5826 const relatedTarget = event.relatedTarget; 5827 const nativeEvent = event.nativeEvent; 5828 const movedToFocusGuard = isElement(relatedTarget) && relatedTarget.hasAttribute(createAttribute("focus-guard")) && relatedTarget.getAttribute("data-type") === "outside"; 5829 timeout.start(0, () => { 5830 const domReference = store2.select("domReferenceElement"); 5831 const activeEl = activeElement(ownerDocument(domReference)); 5832 if (!relatedTarget && activeEl === domReference) { 5833 return; 5834 } 5835 if (contains(dataRef.current.floatingContext?.refs.floating.current, activeEl) || contains(domReference, activeEl) || movedToFocusGuard) { 5836 return; 5837 } 5838 const nextFocusedElement = relatedTarget ?? activeEl; 5839 if (isTargetInsideEnabledTrigger(nextFocusedElement, store2.context.triggerElements)) { 5840 return; 5841 } 5842 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent)); 5843 }); 5844 } 5845 }; 5846 }, [dataRef, delay, store2, timeout]); 5847 return React26.useMemo(() => enabled ? { 5848 reference, 5849 trigger: reference 5850 } : {}, [enabled, reference]); 5851 } 5852 5853 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverFloatingInteraction.js 5854 var React27 = __toESM(require_react(), 1); 5855 5856 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverInteractionSharedState.js 5857 var HoverInteraction = class _HoverInteraction { 5858 constructor() { 5859 this.pointerType = void 0; 5860 this.interactedInside = false; 5861 this.handler = void 0; 5862 this.blockMouseMove = true; 5863 this.performedPointerEventsMutation = false; 5864 this.pointerEventsScopeElement = null; 5865 this.pointerEventsReferenceElement = null; 5866 this.pointerEventsFloatingElement = null; 5867 this.restTimeoutPending = false; 5868 this.openChangeTimeout = new Timeout(); 5869 this.restTimeout = new Timeout(); 5870 this.handleCloseOptions = void 0; 5871 } 5872 static create() { 5873 return new _HoverInteraction(); 5874 } 5875 dispose = () => { 5876 this.openChangeTimeout.clear(); 5877 this.restTimeout.clear(); 5878 }; 5879 disposeEffect = () => { 5880 return this.dispose; 5881 }; 5882 }; 5883 var pointerEventsMutationOwnerByScopeElement = /* @__PURE__ */ new WeakMap(); 5884 function clearSafePolygonPointerEventsMutation(instance) { 5885 if (!instance.performedPointerEventsMutation) { 5886 return; 5887 } 5888 const scopeElement = instance.pointerEventsScopeElement; 5889 if (scopeElement && pointerEventsMutationOwnerByScopeElement.get(scopeElement) === instance) { 5890 instance.pointerEventsScopeElement?.style.removeProperty("pointer-events"); 5891 instance.pointerEventsReferenceElement?.style.removeProperty("pointer-events"); 5892 instance.pointerEventsFloatingElement?.style.removeProperty("pointer-events"); 5893 pointerEventsMutationOwnerByScopeElement.delete(scopeElement); 5894 } 5895 instance.performedPointerEventsMutation = false; 5896 instance.pointerEventsScopeElement = null; 5897 instance.pointerEventsReferenceElement = null; 5898 instance.pointerEventsFloatingElement = null; 5899 } 5900 function applySafePolygonPointerEventsMutation(instance, options) { 5901 const { 5902 scopeElement, 5903 referenceElement, 5904 floatingElement 5905 } = options; 5906 const existingOwner = pointerEventsMutationOwnerByScopeElement.get(scopeElement); 5907 if (existingOwner && existingOwner !== instance) { 5908 clearSafePolygonPointerEventsMutation(existingOwner); 5909 } 5910 clearSafePolygonPointerEventsMutation(instance); 5911 instance.performedPointerEventsMutation = true; 5912 instance.pointerEventsScopeElement = scopeElement; 5913 instance.pointerEventsReferenceElement = referenceElement; 5914 instance.pointerEventsFloatingElement = floatingElement; 5915 pointerEventsMutationOwnerByScopeElement.set(scopeElement, instance); 5916 scopeElement.style.pointerEvents = "none"; 5917 referenceElement.style.pointerEvents = "auto"; 5918 floatingElement.style.pointerEvents = "auto"; 5919 } 5920 function useHoverInteractionSharedState(store2) { 5921 const data = store2.context.dataRef.current; 5922 const instance = useRefWithInit(() => data.hoverInteractionState ?? HoverInteraction.create()).current; 5923 if (!data.hoverInteractionState) { 5924 data.hoverInteractionState = instance; 5925 } 5926 useOnMount(data.hoverInteractionState.disposeEffect); 5927 return data.hoverInteractionState; 5928 } 5929 5930 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverFloatingInteraction.js 5931 function useHoverFloatingInteraction(context, parameters = {}) { 5932 const { 5933 enabled = true, 5934 closeDelay: closeDelayProp = 0, 5935 nodeId: nodeIdProp 5936 } = parameters; 5937 const store2 = "rootStore" in context ? context.rootStore : context; 5938 const open = store2.useState("open"); 5939 const floatingElement = store2.useState("floatingElement"); 5940 const domReferenceElement = store2.useState("domReferenceElement"); 5941 const { 5942 dataRef 5943 } = store2.context; 5944 const tree = useFloatingTree(); 5945 const parentId = useFloatingParentNodeId(); 5946 const instance = useHoverInteractionSharedState(store2); 5947 const childClosedTimeout = useTimeout(); 5948 const isClickLikeOpenEvent2 = useStableCallback(() => { 5949 return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside); 5950 }); 5951 const isHoverOpen = useStableCallback(() => { 5952 return isHoverOpenEvent(dataRef.current.openEvent?.type); 5953 }); 5954 const clearPointerEvents = useStableCallback(() => { 5955 clearSafePolygonPointerEventsMutation(instance); 5956 }); 5957 useIsoLayoutEffect(() => { 5958 if (!open) { 5959 instance.pointerType = void 0; 5960 instance.restTimeoutPending = false; 5961 instance.interactedInside = false; 5962 clearPointerEvents(); 5963 } 5964 }, [open, instance, clearPointerEvents]); 5965 React27.useEffect(() => { 5966 return clearPointerEvents; 5967 }, [clearPointerEvents]); 5968 useIsoLayoutEffect(() => { 5969 if (!enabled) { 5970 return void 0; 5971 } 5972 if (open && instance.handleCloseOptions?.blockPointerEvents && isHoverOpen() && isElement(domReferenceElement) && floatingElement) { 5973 const ref = domReferenceElement; 5974 const floatingEl = floatingElement; 5975 const doc = ownerDocument(floatingElement); 5976 const parentFloating = tree?.nodesRef.current.find((node) => node.id === parentId)?.context?.elements.floating; 5977 if (parentFloating) { 5978 parentFloating.style.pointerEvents = ""; 5979 } 5980 const cachedScopeElement = instance.pointerEventsScopeElement !== floatingEl ? instance.pointerEventsScopeElement : null; 5981 const parentScopeElement = parentFloating !== floatingEl ? parentFloating : null; 5982 const scopeElement = instance.handleCloseOptions?.getScope?.() ?? cachedScopeElement ?? parentScopeElement ?? ref.closest("[data-rootownerid]") ?? doc.body; 5983 applySafePolygonPointerEventsMutation(instance, { 5984 scopeElement, 5985 referenceElement: ref, 5986 floatingElement: floatingEl 5987 }); 5988 return () => { 5989 clearPointerEvents(); 5990 }; 5991 } 5992 return void 0; 5993 }, [enabled, open, domReferenceElement, floatingElement, instance, isHoverOpen, tree, parentId, clearPointerEvents]); 5994 React27.useEffect(() => { 5995 if (!enabled) { 5996 return void 0; 5997 } 5998 function hasParentChildren() { 5999 return !!(tree && parentId && getNodeChildren(tree.nodesRef.current, parentId).length > 0); 6000 } 6001 function closeWithDelay(event) { 6002 const closeDelay = getDelay(closeDelayProp, "close", instance.pointerType); 6003 const close = () => { 6004 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 6005 tree?.events.emit("floating.closed", event); 6006 }; 6007 if (closeDelay) { 6008 instance.openChangeTimeout.start(closeDelay, close); 6009 } else { 6010 instance.openChangeTimeout.clear(); 6011 close(); 6012 } 6013 } 6014 function handleInteractInside(event) { 6015 const target = getTarget(event); 6016 if (!isInteractiveElement(target)) { 6017 instance.interactedInside = false; 6018 return; 6019 } 6020 instance.interactedInside = target?.closest("[aria-haspopup]") != null; 6021 } 6022 function onFloatingMouseEnter() { 6023 instance.openChangeTimeout.clear(); 6024 childClosedTimeout.clear(); 6025 tree?.events.off("floating.closed", onNodeClosed); 6026 clearPointerEvents(); 6027 } 6028 function onFloatingMouseLeave(event) { 6029 if (hasParentChildren() && tree) { 6030 tree.events.on("floating.closed", onNodeClosed); 6031 return; 6032 } 6033 if (isTargetInsideEnabledTrigger(event.relatedTarget, store2.context.triggerElements)) { 6034 return; 6035 } 6036 const currentNodeId = dataRef.current.floatingContext?.nodeId ?? nodeIdProp; 6037 const relatedTarget = event.relatedTarget; 6038 const isMovingIntoDescendantFloating = tree && currentNodeId && isElement(relatedTarget) && getNodeChildren(tree.nodesRef.current, currentNodeId, false).some((node) => contains(node.context?.elements.floating, relatedTarget)); 6039 if (isMovingIntoDescendantFloating) { 6040 return; 6041 } 6042 if (instance.handler) { 6043 instance.handler(event); 6044 return; 6045 } 6046 clearPointerEvents(); 6047 if (!isClickLikeOpenEvent2()) { 6048 closeWithDelay(event); 6049 } 6050 } 6051 function onNodeClosed(event) { 6052 if (!tree || !parentId || hasParentChildren()) { 6053 return; 6054 } 6055 childClosedTimeout.start(0, () => { 6056 tree.events.off("floating.closed", onNodeClosed); 6057 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 6058 tree.events.emit("floating.closed", event); 6059 }); 6060 } 6061 const floating = floatingElement; 6062 return mergeCleanups(floating && addEventListener(floating, "mouseenter", onFloatingMouseEnter), floating && addEventListener(floating, "mouseleave", onFloatingMouseLeave), floating && addEventListener(floating, "pointerdown", handleInteractInside, true), () => { 6063 tree?.events.off("floating.closed", onNodeClosed); 6064 }); 6065 }, [enabled, floatingElement, store2, dataRef, closeDelayProp, nodeIdProp, isClickLikeOpenEvent2, clearPointerEvents, instance, tree, parentId, childClosedTimeout]); 6066 } 6067 6068 // node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverReferenceInteraction.js 6069 var React28 = __toESM(require_react(), 1); 6070 var ReactDOM4 = __toESM(require_react_dom(), 1); 6071 var EMPTY_REF = { 6072 current: null 6073 }; 6074 function useHoverReferenceInteraction(context, props = {}) { 6075 const { 6076 enabled = true, 6077 delay = 0, 6078 handleClose = null, 6079 mouseOnly = false, 6080 restMs = 0, 6081 move = true, 6082 triggerElementRef = EMPTY_REF, 6083 externalTree, 6084 isActiveTrigger = true, 6085 getHandleCloseContext, 6086 isClosing, 6087 shouldOpen: shouldOpenProp 6088 } = props; 6089 const store2 = "rootStore" in context ? context.rootStore : context; 6090 const { 6091 dataRef, 6092 events 6093 } = store2.context; 6094 const tree = useFloatingTree(externalTree); 6095 const instance = useHoverInteractionSharedState(store2); 6096 const isHoverCloseActiveRef = React28.useRef(false); 6097 const handleCloseRef = useValueAsRef(handleClose); 6098 const delayRef = useValueAsRef(delay); 6099 const restMsRef = useValueAsRef(restMs); 6100 const enabledRef = useValueAsRef(enabled); 6101 const shouldOpenRef = useValueAsRef(shouldOpenProp); 6102 const isClosingRef = useValueAsRef(isClosing); 6103 const isClickLikeOpenEvent2 = useStableCallback(() => { 6104 return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside); 6105 }); 6106 const checkShouldOpen = useStableCallback(() => { 6107 return shouldOpenRef.current?.() !== false; 6108 }); 6109 const isOverInactiveTrigger = useStableCallback((currentDomReference, currentTarget, target) => { 6110 const allTriggers = store2.context.triggerElements; 6111 if (allTriggers.hasElement(currentTarget)) { 6112 return !currentDomReference || !contains(currentDomReference, currentTarget); 6113 } 6114 if (!isElement(target)) { 6115 return false; 6116 } 6117 const targetElement = target; 6118 return allTriggers.hasMatchingElement((trigger) => contains(trigger, targetElement)) && (!currentDomReference || !contains(currentDomReference, targetElement)); 6119 }); 6120 const cleanupMouseMoveHandler = useStableCallback(() => { 6121 if (!instance.handler) { 6122 return; 6123 } 6124 const doc = ownerDocument(store2.select("domReferenceElement")); 6125 doc.removeEventListener("mousemove", instance.handler); 6126 instance.handler = void 0; 6127 }); 6128 const clearPointerEvents = useStableCallback(() => { 6129 clearSafePolygonPointerEventsMutation(instance); 6130 }); 6131 if (isActiveTrigger) { 6132 instance.handleCloseOptions = handleCloseRef.current?.__options; 6133 } 6134 React28.useEffect(() => cleanupMouseMoveHandler, [cleanupMouseMoveHandler]); 6135 React28.useEffect(() => { 6136 if (!enabled) { 6137 return void 0; 6138 } 6139 function onOpenChangeLocal(details) { 6140 if (!details.open) { 6141 isHoverCloseActiveRef.current = details.reason === reason_parts_exports.triggerHover; 6142 cleanupMouseMoveHandler(); 6143 instance.openChangeTimeout.clear(); 6144 instance.restTimeout.clear(); 6145 instance.blockMouseMove = true; 6146 instance.restTimeoutPending = false; 6147 } else { 6148 isHoverCloseActiveRef.current = false; 6149 } 6150 } 6151 events.on("openchange", onOpenChangeLocal); 6152 return () => { 6153 events.off("openchange", onOpenChangeLocal); 6154 }; 6155 }, [enabled, events, instance, cleanupMouseMoveHandler]); 6156 React28.useEffect(() => { 6157 if (!enabled) { 6158 return void 0; 6159 } 6160 function closeWithDelay(event, runElseBranch = true) { 6161 const closeDelay = getDelay(delayRef.current, "close", instance.pointerType); 6162 if (closeDelay) { 6163 instance.openChangeTimeout.start(closeDelay, () => { 6164 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 6165 tree?.events.emit("floating.closed", event); 6166 }); 6167 } else if (runElseBranch) { 6168 instance.openChangeTimeout.clear(); 6169 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 6170 tree?.events.emit("floating.closed", event); 6171 } 6172 } 6173 const trigger = triggerElementRef.current ?? (isActiveTrigger ? store2.select("domReferenceElement") : null); 6174 if (!isElement(trigger)) { 6175 return void 0; 6176 } 6177 function onMouseEnter(event) { 6178 instance.openChangeTimeout.clear(); 6179 instance.blockMouseMove = false; 6180 if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) { 6181 return; 6182 } 6183 const restMsValue = getRestMs(restMsRef.current); 6184 const openDelay = getDelay(delayRef.current, "open", instance.pointerType); 6185 const eventTarget = getTarget(event); 6186 const currentTarget = event.currentTarget ?? null; 6187 const currentDomReference = store2.select("domReferenceElement"); 6188 let triggerNode = currentTarget; 6189 if (isElement(eventTarget) && !store2.context.triggerElements.hasElement(eventTarget)) { 6190 for (const triggerElement of store2.context.triggerElements.elements()) { 6191 if (contains(triggerElement, eventTarget)) { 6192 triggerNode = triggerElement; 6193 break; 6194 } 6195 } 6196 } 6197 if (isElement(currentTarget) && isElement(currentDomReference) && !store2.context.triggerElements.hasElement(currentTarget) && contains(currentTarget, currentDomReference)) { 6198 triggerNode = currentDomReference; 6199 } 6200 const isOverInactive = triggerNode == null ? false : isOverInactiveTrigger(currentDomReference, triggerNode, eventTarget); 6201 const isOpen = store2.select("open"); 6202 const isInClosingTransition = isClosingRef.current?.() ?? store2.select("transitionStatus") === "ending"; 6203 const isHoverCloseTransition = !isOpen && isInClosingTransition && isHoverCloseActiveRef.current; 6204 const isReenteringSameTriggerDuringCloseTransition = !isOverInactive && isElement(triggerNode) && isElement(currentDomReference) && contains(currentDomReference, triggerNode) && isHoverCloseTransition; 6205 const isRestOnlyDelay = restMsValue > 0 && !openDelay; 6206 const shouldOpenImmediately = isOverInactive && (isOpen || isHoverCloseTransition) || isReenteringSameTriggerDuringCloseTransition; 6207 const shouldOpen = !isOpen || isOverInactive; 6208 if (shouldOpenImmediately) { 6209 if (checkShouldOpen()) { 6210 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode)); 6211 } 6212 return; 6213 } 6214 if (isRestOnlyDelay) { 6215 return; 6216 } 6217 if (openDelay) { 6218 instance.openChangeTimeout.start(openDelay, () => { 6219 if (shouldOpen && checkShouldOpen()) { 6220 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode)); 6221 } 6222 }); 6223 } else if (shouldOpen) { 6224 if (checkShouldOpen()) { 6225 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode)); 6226 } 6227 } 6228 } 6229 function onMouseLeave(event) { 6230 if (isClickLikeOpenEvent2()) { 6231 clearPointerEvents(); 6232 return; 6233 } 6234 cleanupMouseMoveHandler(); 6235 const domReferenceElement = store2.select("domReferenceElement"); 6236 const doc = ownerDocument(domReferenceElement); 6237 instance.restTimeout.clear(); 6238 instance.restTimeoutPending = false; 6239 const handleCloseContextBase = dataRef.current.floatingContext ?? getHandleCloseContext?.(); 6240 if (isTargetInsideEnabledTrigger(event.relatedTarget, store2.context.triggerElements)) { 6241 return; 6242 } 6243 if (handleCloseRef.current && handleCloseContextBase) { 6244 if (!store2.select("open")) { 6245 instance.openChangeTimeout.clear(); 6246 } 6247 const currentTrigger = triggerElementRef.current; 6248 instance.handler = handleCloseRef.current({ 6249 ...handleCloseContextBase, 6250 tree, 6251 x: event.clientX, 6252 y: event.clientY, 6253 onClose() { 6254 clearPointerEvents(); 6255 cleanupMouseMoveHandler(); 6256 if (enabledRef.current && !isClickLikeOpenEvent2() && currentTrigger === store2.select("domReferenceElement")) { 6257 closeWithDelay(event, true); 6258 } 6259 } 6260 }); 6261 doc.addEventListener("mousemove", instance.handler); 6262 instance.handler(event); 6263 return; 6264 } 6265 const shouldClose = instance.pointerType === "touch" ? !contains(store2.select("floatingElement"), event.relatedTarget) : true; 6266 if (shouldClose) { 6267 closeWithDelay(event); 6268 } 6269 } 6270 if (move) { 6271 return mergeCleanups(addEventListener(trigger, "mousemove", onMouseEnter, { 6272 once: true 6273 }), addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave)); 6274 } 6275 return mergeCleanups(addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave)); 6276 }, [cleanupMouseMoveHandler, clearPointerEvents, dataRef, delayRef, store2, enabled, handleCloseRef, instance, isActiveTrigger, isOverInactiveTrigger, isClickLikeOpenEvent2, mouseOnly, move, restMsRef, triggerElementRef, tree, enabledRef, getHandleCloseContext, isClosingRef, checkShouldOpen]); 6277 return React28.useMemo(() => { 6278 if (!enabled) { 6279 return void 0; 6280 } 6281 function setPointerRef(event) { 6282 instance.pointerType = event.pointerType; 6283 } 6284 return { 6285 onPointerDown: setPointerRef, 6286 onPointerEnter: setPointerRef, 6287 onMouseMove(event) { 6288 const { 6289 nativeEvent 6290 } = event; 6291 const trigger = event.currentTarget; 6292 const currentDomReference = store2.select("domReferenceElement"); 6293 const currentOpen = store2.select("open"); 6294 const isOverInactive = isOverInactiveTrigger(currentDomReference, trigger, event.target); 6295 if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) { 6296 return; 6297 } 6298 if (currentOpen && isOverInactive && instance.handleCloseOptions?.blockPointerEvents) { 6299 const floatingElement = store2.select("floatingElement"); 6300 if (floatingElement) { 6301 const scopeElement = instance.handleCloseOptions?.getScope?.() ?? trigger.ownerDocument.body; 6302 applySafePolygonPointerEventsMutation(instance, { 6303 scopeElement, 6304 referenceElement: trigger, 6305 floatingElement 6306 }); 6307 } 6308 } 6309 const restMsValue = getRestMs(restMsRef.current); 6310 if (currentOpen && !isOverInactive || restMsValue === 0) { 6311 return; 6312 } 6313 if (!isOverInactive && instance.restTimeoutPending && event.movementX ** 2 + event.movementY ** 2 < 2) { 6314 return; 6315 } 6316 instance.restTimeout.clear(); 6317 function handleMouseMove() { 6318 instance.restTimeoutPending = false; 6319 if (isClickLikeOpenEvent2()) { 6320 return; 6321 } 6322 const latestOpen = store2.select("open"); 6323 if (!instance.blockMouseMove && (!latestOpen || isOverInactive) && checkShouldOpen()) { 6324 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, nativeEvent, trigger)); 6325 } 6326 } 6327 if (instance.pointerType === "touch") { 6328 ReactDOM4.flushSync(() => { 6329 handleMouseMove(); 6330 }); 6331 } else if (isOverInactive && currentOpen) { 6332 handleMouseMove(); 6333 } else { 6334 instance.restTimeoutPending = true; 6335 instance.restTimeout.start(restMsValue, handleMouseMove); 6336 } 6337 } 6338 }; 6339 }, [enabled, instance, isClickLikeOpenEvent2, isOverInactiveTrigger, mouseOnly, store2, restMsRef, checkShouldOpen]); 6340 } 6341 6342 // node_modules/@base-ui/react/esm/floating-ui-react/safePolygon.js 6343 var CURSOR_SPEED_THRESHOLD = 0.1; 6344 var CURSOR_SPEED_THRESHOLD_SQUARED = CURSOR_SPEED_THRESHOLD * CURSOR_SPEED_THRESHOLD; 6345 var POLYGON_BUFFER = 0.5; 6346 function hasIntersectingEdge(pointX, pointY, xi, yi, xj, yj) { 6347 return yi >= pointY !== yj >= pointY && pointX <= (xj - xi) * (pointY - yi) / (yj - yi) + xi; 6348 } 6349 function isPointInQuadrilateral(pointX, pointY, x1, y1, x2, y2, x3, y3, x4, y4) { 6350 let isInsideValue = false; 6351 if (hasIntersectingEdge(pointX, pointY, x1, y1, x2, y2)) { 6352 isInsideValue = !isInsideValue; 6353 } 6354 if (hasIntersectingEdge(pointX, pointY, x2, y2, x3, y3)) { 6355 isInsideValue = !isInsideValue; 6356 } 6357 if (hasIntersectingEdge(pointX, pointY, x3, y3, x4, y4)) { 6358 isInsideValue = !isInsideValue; 6359 } 6360 if (hasIntersectingEdge(pointX, pointY, x4, y4, x1, y1)) { 6361 isInsideValue = !isInsideValue; 6362 } 6363 return isInsideValue; 6364 } 6365 function isInsideRect(pointX, pointY, rect) { 6366 return pointX >= rect.x && pointX <= rect.x + rect.width && pointY >= rect.y && pointY <= rect.y + rect.height; 6367 } 6368 function isInsideAxisAlignedRect(pointX, pointY, x1, y1, x2, y2) { 6369 const minX = Math.min(x1, x2); 6370 const maxX = Math.max(x1, x2); 6371 const minY = Math.min(y1, y2); 6372 const maxY = Math.max(y1, y2); 6373 return pointX >= minX && pointX <= maxX && pointY >= minY && pointY <= maxY; 6374 } 6375 function safePolygon(options = {}) { 6376 const { 6377 blockPointerEvents = false 6378 } = options; 6379 const timeout = new Timeout(); 6380 const fn = ({ 6381 x, 6382 y, 6383 placement, 6384 elements, 6385 onClose, 6386 nodeId, 6387 tree 6388 }) => { 6389 const side = placement?.split("-")[0]; 6390 let hasLanded = false; 6391 let lastX = null; 6392 let lastY = null; 6393 let lastCursorTime = typeof performance !== "undefined" ? performance.now() : 0; 6394 function isCursorMovingSlowly(nextX, nextY) { 6395 const currentTime = performance.now(); 6396 const elapsedTime = currentTime - lastCursorTime; 6397 if (lastX === null || lastY === null || elapsedTime === 0) { 6398 lastX = nextX; 6399 lastY = nextY; 6400 lastCursorTime = currentTime; 6401 return false; 6402 } 6403 const deltaX = nextX - lastX; 6404 const deltaY = nextY - lastY; 6405 const distanceSquared = deltaX * deltaX + deltaY * deltaY; 6406 const thresholdSquared = elapsedTime * elapsedTime * CURSOR_SPEED_THRESHOLD_SQUARED; 6407 lastX = nextX; 6408 lastY = nextY; 6409 lastCursorTime = currentTime; 6410 return distanceSquared < thresholdSquared; 6411 } 6412 function close() { 6413 timeout.clear(); 6414 onClose(); 6415 } 6416 return function onMouseMove(event) { 6417 timeout.clear(); 6418 const domReference = elements.domReference; 6419 const floating = elements.floating; 6420 if (!domReference || !floating || side == null || x == null || y == null) { 6421 return void 0; 6422 } 6423 const { 6424 clientX, 6425 clientY 6426 } = event; 6427 const target = getTarget(event); 6428 const isLeave = event.type === "mouseleave"; 6429 const isOverFloatingEl = contains(floating, target); 6430 const isOverReferenceEl = contains(domReference, target); 6431 if (isOverFloatingEl) { 6432 hasLanded = true; 6433 if (!isLeave) { 6434 return void 0; 6435 } 6436 } 6437 if (isOverReferenceEl) { 6438 hasLanded = false; 6439 if (!isLeave) { 6440 hasLanded = true; 6441 return void 0; 6442 } 6443 } 6444 if (isLeave && isElement(event.relatedTarget) && contains(floating, event.relatedTarget)) { 6445 return void 0; 6446 } 6447 function hasOpenChildNode() { 6448 return Boolean(tree && getNodeChildren(tree.nodesRef.current, nodeId).length > 0); 6449 } 6450 function closeIfNoOpenChild() { 6451 if (!hasOpenChildNode()) { 6452 close(); 6453 } 6454 } 6455 if (hasOpenChildNode()) { 6456 return void 0; 6457 } 6458 const refRect = domReference.getBoundingClientRect(); 6459 const rect = floating.getBoundingClientRect(); 6460 const cursorLeaveFromRight = x > rect.right - rect.width / 2; 6461 const cursorLeaveFromBottom = y > rect.bottom - rect.height / 2; 6462 const isFloatingWider = rect.width > refRect.width; 6463 const isFloatingTaller = rect.height > refRect.height; 6464 const left = (isFloatingWider ? refRect : rect).left; 6465 const right = (isFloatingWider ? refRect : rect).right; 6466 const top = (isFloatingTaller ? refRect : rect).top; 6467 const bottom = (isFloatingTaller ? refRect : rect).bottom; 6468 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) { 6469 closeIfNoOpenChild(); 6470 return void 0; 6471 } 6472 let isInsideTroughRect = false; 6473 switch (side) { 6474 case "top": 6475 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, refRect.top + 1, right, rect.bottom - 1); 6476 break; 6477 case "bottom": 6478 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, rect.top + 1, right, refRect.bottom - 1); 6479 break; 6480 case "left": 6481 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, rect.right - 1, bottom, refRect.left + 1, top); 6482 break; 6483 case "right": 6484 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, refRect.right - 1, bottom, rect.left + 1, top); 6485 break; 6486 default: 6487 } 6488 if (isInsideTroughRect) { 6489 return void 0; 6490 } 6491 if (hasLanded && !isInsideRect(clientX, clientY, refRect)) { 6492 closeIfNoOpenChild(); 6493 return void 0; 6494 } 6495 if (!isLeave && isCursorMovingSlowly(clientX, clientY)) { 6496 closeIfNoOpenChild(); 6497 return void 0; 6498 } 6499 let isInsidePolygon = false; 6500 switch (side) { 6501 case "top": { 6502 const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; 6503 const cursorPointOneX = isFloatingWider ? x + cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset; 6504 const cursorPointTwoX = isFloatingWider ? x - cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset; 6505 const cursorPointY = y + POLYGON_BUFFER + 1; 6506 const commonYLeft = cursorLeaveFromRight ? rect.bottom - POLYGON_BUFFER : isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top; 6507 const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top : rect.bottom - POLYGON_BUFFER; 6508 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight); 6509 break; 6510 } 6511 case "bottom": { 6512 const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; 6513 const cursorPointOneX = isFloatingWider ? x + cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset; 6514 const cursorPointTwoX = isFloatingWider ? x - cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset; 6515 const cursorPointY = y - POLYGON_BUFFER; 6516 const commonYLeft = cursorLeaveFromRight ? rect.top + POLYGON_BUFFER : isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom; 6517 const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom : rect.top + POLYGON_BUFFER; 6518 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight); 6519 break; 6520 } 6521 case "left": { 6522 const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; 6523 const cursorPointOneY = isFloatingTaller ? y + cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset; 6524 const cursorPointTwoY = isFloatingTaller ? y - cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset; 6525 const cursorPointX = x + POLYGON_BUFFER + 1; 6526 const commonXTop = cursorLeaveFromBottom ? rect.right - POLYGON_BUFFER : isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left; 6527 const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left : rect.right - POLYGON_BUFFER; 6528 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, commonXTop, rect.top, commonXBottom, rect.bottom, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY); 6529 break; 6530 } 6531 case "right": { 6532 const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; 6533 const cursorPointOneY = isFloatingTaller ? y + cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset; 6534 const cursorPointTwoY = isFloatingTaller ? y - cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset; 6535 const cursorPointX = x - POLYGON_BUFFER; 6536 const commonXTop = cursorLeaveFromBottom ? rect.left + POLYGON_BUFFER : isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right; 6537 const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right : rect.left + POLYGON_BUFFER; 6538 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY, commonXTop, rect.top, commonXBottom, rect.bottom); 6539 break; 6540 } 6541 default: 6542 } 6543 if (!isInsidePolygon) { 6544 closeIfNoOpenChild(); 6545 } else if (!hasLanded) { 6546 timeout.start(40, closeIfNoOpenChild); 6547 } 6548 return void 0; 6549 }; 6550 }; 6551 fn.__options = { 6552 ...options, 6553 blockPointerEvents 6554 }; 6555 return fn; 6556 } 6557 6558 // node_modules/@base-ui/react/esm/utils/popupStateMapping.js 6559 var CommonPopupDataAttributes = (function(CommonPopupDataAttributes2) { 6560 CommonPopupDataAttributes2["open"] = "data-open"; 6561 CommonPopupDataAttributes2["closed"] = "data-closed"; 6562 CommonPopupDataAttributes2[CommonPopupDataAttributes2["startingStyle"] = TransitionStatusDataAttributes.startingStyle] = "startingStyle"; 6563 CommonPopupDataAttributes2[CommonPopupDataAttributes2["endingStyle"] = TransitionStatusDataAttributes.endingStyle] = "endingStyle"; 6564 CommonPopupDataAttributes2["anchorHidden"] = "data-anchor-hidden"; 6565 CommonPopupDataAttributes2["side"] = "data-side"; 6566 CommonPopupDataAttributes2["align"] = "data-align"; 6567 return CommonPopupDataAttributes2; 6568 })({}); 6569 var CommonTriggerDataAttributes = /* @__PURE__ */ (function(CommonTriggerDataAttributes2) { 6570 CommonTriggerDataAttributes2["popupOpen"] = "data-popup-open"; 6571 CommonTriggerDataAttributes2["pressed"] = "data-pressed"; 6572 return CommonTriggerDataAttributes2; 6573 })({}); 6574 var TRIGGER_HOOK = { 6575 [CommonTriggerDataAttributes.popupOpen]: "" 6576 }; 6577 var PRESSABLE_TRIGGER_HOOK = { 6578 [CommonTriggerDataAttributes.popupOpen]: "", 6579 [CommonTriggerDataAttributes.pressed]: "" 6580 }; 6581 var POPUP_OPEN_HOOK = { 6582 [CommonPopupDataAttributes.open]: "" 6583 }; 6584 var POPUP_CLOSED_HOOK = { 6585 [CommonPopupDataAttributes.closed]: "" 6586 }; 6587 var ANCHOR_HIDDEN_HOOK = { 6588 [CommonPopupDataAttributes.anchorHidden]: "" 6589 }; 6590 var triggerOpenStateMapping = { 6591 open(value) { 6592 if (value) { 6593 return TRIGGER_HOOK; 6594 } 6595 return null; 6596 } 6597 }; 6598 var popupStateMapping = { 6599 open(value) { 6600 if (value) { 6601 return POPUP_OPEN_HOOK; 6602 } 6603 return POPUP_CLOSED_HOOK; 6604 }, 6605 anchorHidden(value) { 6606 if (value) { 6607 return ANCHOR_HIDDEN_HOOK; 6608 } 6609 return null; 6610 } 6611 }; 6612 6613 // node_modules/@base-ui/utils/esm/inertValue.js 6614 function inertValue(value) { 6615 if (isReactVersionAtLeast(19)) { 6616 return value; 6617 } 6618 return value ? "true" : void 0; 6619 } 6620 6621 // node_modules/@base-ui/react/esm/utils/useAnchorPositioning.js 6622 var React29 = __toESM(require_react(), 1); 6623 6624 // node_modules/@base-ui/react/esm/floating-ui-react/middleware/arrow.js 6625 var baseArrow = (options) => ({ 6626 name: "arrow", 6627 options, 6628 async fn(state) { 6629 const { 6630 x, 6631 y, 6632 placement, 6633 rects, 6634 platform: platform3, 6635 elements, 6636 middlewareData 6637 } = state; 6638 const { 6639 element, 6640 padding = 0, 6641 offsetParent = "real" 6642 } = evaluate(options, state) || {}; 6643 if (element == null) { 6644 return {}; 6645 } 6646 const paddingObject = getPaddingObject(padding); 6647 const coords = { 6648 x, 6649 y 6650 }; 6651 const axis = getAlignmentAxis(placement); 6652 const length = getAxisLength(axis); 6653 const arrowDimensions = await platform3.getDimensions(element); 6654 const isYAxis = axis === "y"; 6655 const minProp = isYAxis ? "top" : "left"; 6656 const maxProp = isYAxis ? "bottom" : "right"; 6657 const clientProp = isYAxis ? "clientHeight" : "clientWidth"; 6658 const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length]; 6659 const startDiff = coords[axis] - rects.reference[axis]; 6660 const arrowOffsetParent = offsetParent === "real" ? await platform3.getOffsetParent?.(element) : elements.floating; 6661 let clientSize = elements.floating[clientProp] || rects.floating[length]; 6662 if (!clientSize || !await platform3.isElement?.(arrowOffsetParent)) { 6663 clientSize = elements.floating[clientProp] || rects.floating[length]; 6664 } 6665 const centerToReference = endDiff / 2 - startDiff / 2; 6666 const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1; 6667 const minPadding = Math.min(paddingObject[minProp], largestPossiblePadding); 6668 const maxPadding = Math.min(paddingObject[maxProp], largestPossiblePadding); 6669 const min2 = minPadding; 6670 const max2 = clientSize - arrowDimensions[length] - maxPadding; 6671 const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference; 6672 const offset4 = clamp(min2, center, max2); 6673 const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset4 && rects.reference[length] / 2 - (center < min2 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0; 6674 const alignmentOffset = shouldAddOffset ? center < min2 ? center - min2 : center - max2 : 0; 6675 return { 6676 [axis]: coords[axis] + alignmentOffset, 6677 data: { 6678 [axis]: offset4, 6679 centerOffset: center - offset4 - alignmentOffset, 6680 ...shouldAddOffset && { 6681 alignmentOffset 6682 } 6683 }, 6684 reset: shouldAddOffset 6685 }; 6686 } 6687 }); 6688 var arrow4 = (options, deps) => ({ 6689 ...baseArrow(options), 6690 options: [options, deps] 6691 }); 6692 6693 // node_modules/@base-ui/react/esm/utils/hideMiddleware.js 6694 var hide4 = { 6695 name: "hide", 6696 async fn(state) { 6697 const { 6698 width, 6699 height, 6700 x, 6701 y 6702 } = state.rects.reference; 6703 const anchorHidden = width === 0 && height === 0 && x === 0 && y === 0; 6704 const nativeHideResult = await hide3().fn(state); 6705 return { 6706 data: { 6707 referenceHidden: nativeHideResult.data?.referenceHidden || anchorHidden 6708 } 6709 }; 6710 } 6711 }; 6712 6713 // node_modules/@base-ui/react/esm/utils/adaptiveOriginMiddleware.js 6714 var DEFAULT_SIDES = { 6715 sideX: "left", 6716 sideY: "top" 6717 }; 6718 var adaptiveOrigin = { 6719 name: "adaptiveOrigin", 6720 async fn(state) { 6721 const { 6722 x: rawX, 6723 y: rawY, 6724 rects: { 6725 floating: floatRect 6726 }, 6727 elements: { 6728 floating 6729 }, 6730 platform: platform3, 6731 strategy, 6732 placement 6733 } = state; 6734 const win = getWindow(floating); 6735 const styles = win.getComputedStyle(floating); 6736 const hasTransition = styles.transitionDuration !== "0s" && styles.transitionDuration !== ""; 6737 if (!hasTransition) { 6738 return { 6739 x: rawX, 6740 y: rawY, 6741 data: DEFAULT_SIDES 6742 }; 6743 } 6744 const offsetParent = await platform3.getOffsetParent?.(floating); 6745 let offsetDimensions = { 6746 width: 0, 6747 height: 0 6748 }; 6749 if (strategy === "fixed" && win?.visualViewport) { 6750 offsetDimensions = { 6751 width: win.visualViewport.width, 6752 height: win.visualViewport.height 6753 }; 6754 } else if (offsetParent === win) { 6755 const doc = ownerDocument(floating); 6756 offsetDimensions = { 6757 width: doc.documentElement.clientWidth, 6758 height: doc.documentElement.clientHeight 6759 }; 6760 } else if (await platform3.isElement?.(offsetParent)) { 6761 offsetDimensions = await platform3.getDimensions(offsetParent); 6762 } 6763 const currentSide = getSide(placement); 6764 let x = rawX; 6765 let y = rawY; 6766 if (currentSide === "left") { 6767 x = offsetDimensions.width - (rawX + floatRect.width); 6768 } 6769 if (currentSide === "top") { 6770 y = offsetDimensions.height - (rawY + floatRect.height); 6771 } 6772 const sideX = currentSide === "left" ? "right" : DEFAULT_SIDES.sideX; 6773 const sideY = currentSide === "top" ? "bottom" : DEFAULT_SIDES.sideY; 6774 return { 6775 x, 6776 y, 6777 data: { 6778 sideX, 6779 sideY 6780 } 6781 }; 6782 } 6783 }; 6784 6785 // node_modules/@base-ui/react/esm/utils/useAnchorPositioning.js 6786 function getLogicalSide(sideParam, renderedSide, isRtl) { 6787 const isLogicalSideParam = sideParam === "inline-start" || sideParam === "inline-end"; 6788 const logicalRight = isRtl ? "inline-start" : "inline-end"; 6789 const logicalLeft = isRtl ? "inline-end" : "inline-start"; 6790 return { 6791 top: "top", 6792 right: isLogicalSideParam ? logicalRight : "right", 6793 bottom: "bottom", 6794 left: isLogicalSideParam ? logicalLeft : "left" 6795 }[renderedSide]; 6796 } 6797 function getOffsetData(state, sideParam, isRtl) { 6798 const { 6799 rects, 6800 placement 6801 } = state; 6802 const data = { 6803 side: getLogicalSide(sideParam, getSide(placement), isRtl), 6804 align: getAlignment(placement) || "center", 6805 anchor: { 6806 width: rects.reference.width, 6807 height: rects.reference.height 6808 }, 6809 positioner: { 6810 width: rects.floating.width, 6811 height: rects.floating.height 6812 } 6813 }; 6814 return data; 6815 } 6816 function useAnchorPositioning(params) { 6817 const { 6818 // Public parameters 6819 anchor, 6820 positionMethod = "absolute", 6821 side: sideParam = "bottom", 6822 sideOffset = 0, 6823 align = "center", 6824 alignOffset = 0, 6825 collisionBoundary, 6826 collisionPadding: collisionPaddingParam = 5, 6827 sticky = false, 6828 arrowPadding = 5, 6829 disableAnchorTracking = false, 6830 inline: inlineMiddleware, 6831 // Private parameters 6832 keepMounted = false, 6833 floatingRootContext, 6834 mounted, 6835 collisionAvoidance, 6836 shiftCrossAxis = false, 6837 nodeId, 6838 adaptiveOrigin: adaptiveOrigin2, 6839 lazyFlip = false, 6840 externalTree 6841 } = params; 6842 const [mountSide, setMountSide] = React29.useState(null); 6843 if (!mounted && mountSide !== null) { 6844 setMountSide(null); 6845 } 6846 const collisionAvoidanceSide = collisionAvoidance.side || "flip"; 6847 const collisionAvoidanceAlign = collisionAvoidance.align || "flip"; 6848 const collisionAvoidanceFallbackAxisSide = collisionAvoidance.fallbackAxisSide || "end"; 6849 const anchorFn = typeof anchor === "function" ? anchor : void 0; 6850 const anchorFnCallback = useStableCallback(anchorFn); 6851 const anchorDep = anchorFn ? anchorFnCallback : anchor; 6852 const anchorValueRef = useValueAsRef(anchor); 6853 const mountedRef = useValueAsRef(mounted); 6854 const direction = useDirection(); 6855 const isRtl = direction === "rtl"; 6856 const side = mountSide || { 6857 top: "top", 6858 right: "right", 6859 bottom: "bottom", 6860 left: "left", 6861 "inline-end": isRtl ? "left" : "right", 6862 "inline-start": isRtl ? "right" : "left" 6863 }[sideParam]; 6864 const placement = align === "center" ? side : `$side}-$align}`; 6865 let collisionPadding = collisionPaddingParam; 6866 const bias = 1; 6867 const biasTop = sideParam === "bottom" ? bias : 0; 6868 const biasBottom = sideParam === "top" ? bias : 0; 6869 const biasLeft = sideParam === "right" ? bias : 0; 6870 const biasRight = sideParam === "left" ? bias : 0; 6871 if (typeof collisionPadding === "number") { 6872 collisionPadding = { 6873 top: collisionPadding + biasTop, 6874 right: collisionPadding + biasRight, 6875 bottom: collisionPadding + biasBottom, 6876 left: collisionPadding + biasLeft 6877 }; 6878 } else if (collisionPadding) { 6879 collisionPadding = { 6880 top: (collisionPadding.top || 0) + biasTop, 6881 right: (collisionPadding.right || 0) + biasRight, 6882 bottom: (collisionPadding.bottom || 0) + biasBottom, 6883 left: (collisionPadding.left || 0) + biasLeft 6884 }; 6885 } 6886 const commonCollisionProps = { 6887 boundary: collisionBoundary === "clipping-ancestors" ? "clippingAncestors" : collisionBoundary, 6888 padding: collisionPadding 6889 }; 6890 const arrowRef = React29.useRef(null); 6891 const sideOffsetRef = useValueAsRef(sideOffset); 6892 const alignOffsetRef = useValueAsRef(alignOffset); 6893 const sideOffsetDep = typeof sideOffset !== "function" ? sideOffset : 0; 6894 const alignOffsetDep = typeof alignOffset !== "function" ? alignOffset : 0; 6895 const middleware = []; 6896 if (inlineMiddleware) { 6897 middleware.push(inlineMiddleware); 6898 } 6899 middleware.push(offset3((state) => { 6900 const data = getOffsetData(state, sideParam, isRtl); 6901 const sideAxis = typeof sideOffsetRef.current === "function" ? sideOffsetRef.current(data) : sideOffsetRef.current; 6902 const alignAxis = typeof alignOffsetRef.current === "function" ? alignOffsetRef.current(data) : alignOffsetRef.current; 6903 return { 6904 mainAxis: sideAxis, 6905 crossAxis: alignAxis, 6906 alignmentAxis: alignAxis 6907 }; 6908 }, [sideOffsetDep, alignOffsetDep, isRtl, sideParam])); 6909 const shiftDisabled = collisionAvoidanceAlign === "none" && collisionAvoidanceSide !== "shift"; 6910 const crossAxisShiftEnabled = !shiftDisabled && (sticky || shiftCrossAxis || collisionAvoidanceSide === "shift"); 6911 const flipMiddleware = collisionAvoidanceSide === "none" ? null : flip3({ 6912 ...commonCollisionProps, 6913 // Ensure the popup flips if it's been limited by its --available-height and it resizes. 6914 // Since the size() padding is smaller than the flip() padding, flip() will take precedence. 6915 padding: { 6916 top: collisionPadding.top + bias, 6917 right: collisionPadding.right + bias, 6918 bottom: collisionPadding.bottom + bias, 6919 left: collisionPadding.left + bias 6920 }, 6921 mainAxis: !shiftCrossAxis && collisionAvoidanceSide === "flip", 6922 crossAxis: collisionAvoidanceAlign === "flip" ? "alignment" : false, 6923 fallbackAxisSideDirection: collisionAvoidanceFallbackAxisSide 6924 }); 6925 const shiftMiddleware = shiftDisabled ? null : shift3((data) => { 6926 const html = ownerDocument(data.elements.floating).documentElement; 6927 return { 6928 ...commonCollisionProps, 6929 // Use the Layout Viewport to avoid shifting around when pinch-zooming 6930 // for context menus. 6931 rootBoundary: shiftCrossAxis ? { 6932 x: 0, 6933 y: 0, 6934 width: html.clientWidth, 6935 height: html.clientHeight 6936 } : void 0, 6937 mainAxis: collisionAvoidanceAlign !== "none", 6938 crossAxis: crossAxisShiftEnabled, 6939 limiter: sticky || shiftCrossAxis ? void 0 : limitShift3((limitData) => { 6940 if (!arrowRef.current) { 6941 return {}; 6942 } 6943 const { 6944 width, 6945 height 6946 } = arrowRef.current.getBoundingClientRect(); 6947 const sideAxis = getSideAxis(getSide(limitData.placement)); 6948 const arrowSize = sideAxis === "y" ? width : height; 6949 const offsetAmount = sideAxis === "y" ? collisionPadding.left + collisionPadding.right : collisionPadding.top + collisionPadding.bottom; 6950 return { 6951 offset: arrowSize / 2 + offsetAmount / 2 6952 }; 6953 }) 6954 }; 6955 }, [commonCollisionProps, sticky, shiftCrossAxis, collisionPadding, collisionAvoidanceAlign]); 6956 if (collisionAvoidanceSide === "shift" || collisionAvoidanceAlign === "shift" || align === "center") { 6957 middleware.push(shiftMiddleware, flipMiddleware); 6958 } else { 6959 middleware.push(flipMiddleware, shiftMiddleware); 6960 } 6961 middleware.push(size3({ 6962 ...commonCollisionProps, 6963 apply({ 6964 elements: { 6965 floating 6966 }, 6967 availableWidth, 6968 availableHeight, 6969 rects 6970 }) { 6971 if (!mountedRef.current) { 6972 return; 6973 } 6974 const floatingStyle = floating.style; 6975 floatingStyle.setProperty("--available-width", `$availableWidth}px`); 6976 floatingStyle.setProperty("--available-height", `$availableHeight}px`); 6977 const dpr = getWindow(floating).devicePixelRatio || 1; 6978 const { 6979 x: x2, 6980 y: y2, 6981 width, 6982 height 6983 } = rects.reference; 6984 const anchorWidth = (Math.round((x2 + width) * dpr) - Math.round(x2 * dpr)) / dpr; 6985 const anchorHeight = (Math.round((y2 + height) * dpr) - Math.round(y2 * dpr)) / dpr; 6986 floatingStyle.setProperty("--anchor-width", `$anchorWidth}px`); 6987 floatingStyle.setProperty("--anchor-height", `$anchorHeight}px`); 6988 } 6989 }), arrow4((state) => ({ 6990 // `transform-origin` calculations rely on an element existing. If the arrow hasn't been set, 6991 // we'll create a fake element. 6992 element: arrowRef.current || ownerDocument(state.elements.floating).createElement("div"), 6993 padding: arrowPadding, 6994 offsetParent: "floating" 6995 }), [arrowPadding]), { 6996 name: "transformOrigin", 6997 fn(state) { 6998 const { 6999 elements: elements2, 7000 middlewareData: middlewareData2, 7001 placement: renderedPlacement2, 7002 rects, 7003 y: y2 7004 } = state; 7005 const currentRenderedSide = getSide(renderedPlacement2); 7006 const currentRenderedAxis = getSideAxis(currentRenderedSide); 7007 const arrowEl = arrowRef.current; 7008 const arrowX = middlewareData2.arrow?.x || 0; 7009 const arrowY = middlewareData2.arrow?.y || 0; 7010 const arrowWidth = arrowEl?.clientWidth || 0; 7011 const arrowHeight = arrowEl?.clientHeight || 0; 7012 const transformX = arrowX + arrowWidth / 2; 7013 const transformY = arrowY + arrowHeight / 2; 7014 const shiftY = Math.abs(middlewareData2.shift?.y || 0); 7015 const halfAnchorHeight = rects.reference.height / 2; 7016 const sideOffsetValue = typeof sideOffset === "function" ? sideOffset(getOffsetData(state, sideParam, isRtl)) : sideOffset; 7017 const isOverlappingAnchor = shiftY > sideOffsetValue; 7018 const adjacentTransformOrigin = { 7019 top: `$transformX}px calc(100% + $sideOffsetValue}px)`, 7020 bottom: `$transformX}px ${-sideOffsetValue}px`, 7021 left: `calc(100% + $sideOffsetValue}px) $transformY}px`, 7022 right: `${-sideOffsetValue}px $transformY}px` 7023 }[currentRenderedSide]; 7024 const overlapTransformOrigin = `$transformX}px $rects.reference.y + halfAnchorHeight - y2}px`; 7025 elements2.floating.style.setProperty("--transform-origin", crossAxisShiftEnabled && currentRenderedAxis === "y" && isOverlappingAnchor ? overlapTransformOrigin : adjacentTransformOrigin); 7026 return {}; 7027 } 7028 }, hide4, adaptiveOrigin2); 7029 useIsoLayoutEffect(() => { 7030 if (!mounted && floatingRootContext) { 7031 floatingRootContext.update({ 7032 referenceElement: null, 7033 floatingElement: null, 7034 domReferenceElement: null, 7035 positionReference: null 7036 }); 7037 } 7038 }, [mounted, floatingRootContext]); 7039 const autoUpdateOptions = React29.useMemo(() => ({ 7040 elementResize: !disableAnchorTracking && typeof ResizeObserver !== "undefined", 7041 layoutShift: !disableAnchorTracking && typeof IntersectionObserver !== "undefined" 7042 }), [disableAnchorTracking]); 7043 const { 7044 refs, 7045 elements, 7046 x, 7047 y, 7048 middlewareData, 7049 update: update2, 7050 placement: renderedPlacement, 7051 context, 7052 isPositioned, 7053 floatingStyles: originalFloatingStyles 7054 } = useFloating2({ 7055 rootContext: floatingRootContext, 7056 open: keepMounted ? mounted : void 0, 7057 placement, 7058 middleware, 7059 strategy: positionMethod, 7060 whileElementsMounted: keepMounted ? void 0 : (...args) => autoUpdate(...args, autoUpdateOptions), 7061 nodeId, 7062 externalTree 7063 }); 7064 const { 7065 sideX, 7066 sideY 7067 } = middlewareData.adaptiveOrigin || DEFAULT_SIDES; 7068 const resolvedPosition = isPositioned ? positionMethod : "fixed"; 7069 const floatingStyles = React29.useMemo(() => { 7070 const base = adaptiveOrigin2 ? { 7071 position: resolvedPosition, 7072 [sideX]: x, 7073 [sideY]: y 7074 } : { 7075 position: resolvedPosition, 7076 ...originalFloatingStyles 7077 }; 7078 if (!isPositioned) { 7079 base.opacity = 0; 7080 } 7081 return base; 7082 }, [adaptiveOrigin2, resolvedPosition, sideX, x, sideY, y, originalFloatingStyles, isPositioned]); 7083 const registeredPositionReferenceRef = React29.useRef(null); 7084 useIsoLayoutEffect(() => { 7085 if (!mounted) { 7086 return; 7087 } 7088 const anchorValue = anchorValueRef.current; 7089 const resolvedAnchor = typeof anchorValue === "function" ? anchorValue() : anchorValue; 7090 const unwrappedElement = (isRef(resolvedAnchor) ? resolvedAnchor.current : resolvedAnchor) || null; 7091 const finalAnchor = unwrappedElement || null; 7092 if (finalAnchor !== registeredPositionReferenceRef.current) { 7093 refs.setPositionReference(finalAnchor); 7094 registeredPositionReferenceRef.current = finalAnchor; 7095 } 7096 }, [mounted, refs, anchorDep, anchorValueRef]); 7097 React29.useEffect(() => { 7098 if (!mounted) { 7099 return; 7100 } 7101 const anchorValue = anchorValueRef.current; 7102 if (typeof anchorValue === "function") { 7103 return; 7104 } 7105 if (isRef(anchorValue) && anchorValue.current !== registeredPositionReferenceRef.current) { 7106 refs.setPositionReference(anchorValue.current); 7107 registeredPositionReferenceRef.current = anchorValue.current; 7108 } 7109 }, [mounted, refs, anchorDep, anchorValueRef]); 7110 React29.useEffect(() => { 7111 if (keepMounted && mounted && elements.domReference && elements.floating) { 7112 return autoUpdate(elements.domReference, elements.floating, update2, autoUpdateOptions); 7113 } 7114 return void 0; 7115 }, [keepMounted, mounted, elements, update2, autoUpdateOptions]); 7116 const renderedSide = getSide(renderedPlacement); 7117 const logicalRenderedSide = getLogicalSide(sideParam, renderedSide, isRtl); 7118 const renderedAlign = getAlignment(renderedPlacement) || "center"; 7119 const anchorHidden = Boolean(middlewareData.hide?.referenceHidden); 7120 useIsoLayoutEffect(() => { 7121 if (lazyFlip && mounted && isPositioned) { 7122 setMountSide(renderedSide); 7123 } 7124 }, [lazyFlip, mounted, isPositioned, renderedSide]); 7125 const arrowStyles = React29.useMemo(() => ({ 7126 position: "absolute", 7127 top: middlewareData.arrow?.y, 7128 left: middlewareData.arrow?.x 7129 }), [middlewareData.arrow]); 7130 const arrowUncentered = middlewareData.arrow?.centerOffset !== 0; 7131 return React29.useMemo(() => ({ 7132 positionerStyles: floatingStyles, 7133 arrowStyles, 7134 arrowRef, 7135 arrowUncentered, 7136 side: logicalRenderedSide, 7137 align: renderedAlign, 7138 physicalSide: renderedSide, 7139 anchorHidden, 7140 refs, 7141 context, 7142 isPositioned, 7143 update: update2 7144 }), [floatingStyles, arrowStyles, arrowRef, arrowUncentered, logicalRenderedSide, renderedAlign, renderedSide, anchorHidden, refs, context, isPositioned, update2]); 7145 } 7146 function isRef(param) { 7147 return param != null && "current" in param; 7148 } 7149 7150 // node_modules/@base-ui/react/esm/utils/getDisabledMountTransitionStyles.js 7151 function getDisabledMountTransitionStyles(transitionStatus) { 7152 return transitionStatus === "starting" ? DISABLED_TRANSITIONS_STYLE : EMPTY_OBJECT; 7153 } 7154 7155 // node_modules/@base-ui/react/esm/utils/usePositioner.js 7156 function usePositioner(componentProps, state, { 7157 styles, 7158 transitionStatus, 7159 props, 7160 refs, 7161 hidden, 7162 inert = false 7163 }) { 7164 const style = { 7165 ...styles 7166 }; 7167 if (inert) { 7168 style.pointerEvents = "none"; 7169 } 7170 return useRenderElement("div", componentProps, { 7171 state, 7172 ref: refs, 7173 props: [{ 7174 role: "presentation", 7175 hidden, 7176 style 7177 }, getDisabledMountTransitionStyles(transitionStatus), props], 7178 stateAttributesMapping: popupStateMapping 7179 }); 7180 } 7181 7182 // node_modules/@base-ui/react/esm/utils/usePopupViewport.js 7183 var React32 = __toESM(require_react(), 1); 7184 var ReactDOM5 = __toESM(require_react_dom(), 1); 7185 7186 // node_modules/@base-ui/utils/esm/usePreviousValue.js 7187 var React30 = __toESM(require_react(), 1); 7188 function usePreviousValue(value) { 7189 const [state, setState] = React30.useState({ 7190 current: value, 7191 previous: null 7192 }); 7193 if (value !== state.current) { 7194 setState({ 7195 current: value, 7196 previous: state.current 7197 }); 7198 } 7199 return state.previous; 7200 } 7201 7202 // node_modules/@base-ui/react/esm/utils/usePopupAutoResize.js 7203 var React31 = __toESM(require_react(), 1); 7204 7205 // node_modules/@base-ui/react/esm/utils/getCssDimensions.js 7206 function getCssDimensions2(element) { 7207 const css = getComputedStyle2(element); 7208 let width = parseFloat(css.width) || 0; 7209 let height = parseFloat(css.height) || 0; 7210 const hasOffset = isHTMLElement(element); 7211 const offsetWidth = hasOffset ? element.offsetWidth : width; 7212 const offsetHeight = hasOffset ? element.offsetHeight : height; 7213 const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight; 7214 if (shouldFallback) { 7215 width = offsetWidth; 7216 height = offsetHeight; 7217 } 7218 return { 7219 width, 7220 height 7221 }; 7222 } 7223 7224 // node_modules/@base-ui/react/esm/utils/usePopupAutoResize.js 7225 var DEFAULT_ENABLED = () => true; 7226 function usePopupAutoResize(parameters) { 7227 const { 7228 popupElement, 7229 positionerElement, 7230 content, 7231 mounted, 7232 enabled = DEFAULT_ENABLED, 7233 onMeasureLayout: onMeasureLayoutParam, 7234 onMeasureLayoutComplete: onMeasureLayoutCompleteParam, 7235 side, 7236 direction 7237 } = parameters; 7238 const runOnceAnimationsFinish = useAnimationsFinished(popupElement, true, false); 7239 const animationFrame = useAnimationFrame(); 7240 const committedDimensionsRef = React31.useRef(null); 7241 const liveDimensionsRef = React31.useRef(null); 7242 const isInitialRenderRef = React31.useRef(true); 7243 const restoreAnchoringStylesRef = React31.useRef(NOOP); 7244 const onMeasureLayout = useStableCallback(onMeasureLayoutParam); 7245 const onMeasureLayoutComplete = useStableCallback(onMeasureLayoutCompleteParam); 7246 const anchoringStyles = React31.useMemo(() => { 7247 let isOriginSide = side === "top"; 7248 let isPhysicalLeft = side === "left"; 7249 if (direction === "rtl") { 7250 isOriginSide = isOriginSide || side === "inline-end"; 7251 isPhysicalLeft = isPhysicalLeft || side === "inline-end"; 7252 } else { 7253 isOriginSide = isOriginSide || side === "inline-start"; 7254 isPhysicalLeft = isPhysicalLeft || side === "inline-start"; 7255 } 7256 return isOriginSide ? { 7257 position: "absolute", 7258 [side === "top" ? "bottom" : "top"]: "0", 7259 [isPhysicalLeft ? "right" : "left"]: "0" 7260 } : EMPTY_OBJECT; 7261 }, [side, direction]); 7262 useIsoLayoutEffect(() => { 7263 if (!mounted || !enabled() || typeof ResizeObserver !== "function") { 7264 restoreAnchoringStylesRef.current = NOOP; 7265 isInitialRenderRef.current = true; 7266 committedDimensionsRef.current = null; 7267 liveDimensionsRef.current = null; 7268 return void 0; 7269 } 7270 if (!popupElement || !positionerElement) { 7271 return void 0; 7272 } 7273 restoreAnchoringStylesRef.current = applyElementStyles(popupElement, anchoringStyles); 7274 const observer = new ResizeObserver((entries) => { 7275 const entry = entries[0]; 7276 if (entry) { 7277 liveDimensionsRef.current = { 7278 width: Math.ceil(entry.borderBoxSize[0].inlineSize), 7279 height: Math.ceil(entry.borderBoxSize[0].blockSize) 7280 }; 7281 } 7282 }); 7283 observer.observe(popupElement); 7284 setPopupCssSize(popupElement, "auto"); 7285 const restorePopupPosition = overrideElementStyle(popupElement, "position", "static"); 7286 const restorePopupTransform = overrideElementStyle(popupElement, "transform", "none"); 7287 const restorePopupScale = overrideElementStyle(popupElement, "scale", "1"); 7288 const restorePositionerAvailableSize = applyElementStyles(positionerElement, { 7289 "--available-width": "max-content", 7290 "--available-height": "max-content" 7291 }); 7292 function restoreMeasurementOverrides() { 7293 restorePopupPosition(); 7294 restorePopupTransform(); 7295 restorePositionerAvailableSize(); 7296 } 7297 function restoreMeasurementOverridesIncludingScale() { 7298 restoreMeasurementOverrides(); 7299 restorePopupScale(); 7300 } 7301 onMeasureLayout?.(); 7302 if (isInitialRenderRef.current || committedDimensionsRef.current === null) { 7303 setPositionerCssSize(positionerElement, "max-content"); 7304 const dimensions = getCssDimensions2(popupElement); 7305 committedDimensionsRef.current = dimensions; 7306 setPositionerCssSize(positionerElement, dimensions); 7307 restoreMeasurementOverridesIncludingScale(); 7308 onMeasureLayoutComplete?.(null, dimensions); 7309 isInitialRenderRef.current = false; 7310 return () => { 7311 observer.disconnect(); 7312 restoreAnchoringStylesRef.current(); 7313 restoreAnchoringStylesRef.current = NOOP; 7314 }; 7315 } 7316 setPopupCssSize(popupElement, "auto"); 7317 setPositionerCssSize(positionerElement, "max-content"); 7318 const previousDimensions = committedDimensionsRef.current ?? liveDimensionsRef.current; 7319 const newDimensions = getCssDimensions2(popupElement); 7320 committedDimensionsRef.current = newDimensions; 7321 if (!previousDimensions) { 7322 setPositionerCssSize(positionerElement, newDimensions); 7323 restoreMeasurementOverridesIncludingScale(); 7324 onMeasureLayoutComplete?.(null, newDimensions); 7325 return () => { 7326 observer.disconnect(); 7327 animationFrame.cancel(); 7328 restoreAnchoringStylesRef.current(); 7329 restoreAnchoringStylesRef.current = NOOP; 7330 }; 7331 } 7332 setPopupCssSize(popupElement, previousDimensions); 7333 restoreMeasurementOverridesIncludingScale(); 7334 onMeasureLayoutComplete?.(previousDimensions, newDimensions); 7335 setPositionerCssSize(positionerElement, newDimensions); 7336 const abortController = new AbortController(); 7337 animationFrame.request(() => { 7338 setPopupCssSize(popupElement, newDimensions); 7339 runOnceAnimationsFinish(() => { 7340 popupElement.style.setProperty("--popup-width", "auto"); 7341 popupElement.style.setProperty("--popup-height", "auto"); 7342 }, abortController.signal); 7343 }); 7344 return () => { 7345 observer.disconnect(); 7346 abortController.abort(); 7347 animationFrame.cancel(); 7348 restoreAnchoringStylesRef.current(); 7349 restoreAnchoringStylesRef.current = NOOP; 7350 }; 7351 }, [content, popupElement, positionerElement, runOnceAnimationsFinish, animationFrame, enabled, mounted, onMeasureLayout, onMeasureLayoutComplete, anchoringStyles]); 7352 } 7353 function overrideElementStyle(element, property, value) { 7354 const originalValue = element.style.getPropertyValue(property); 7355 element.style.setProperty(property, value); 7356 return () => { 7357 element.style.setProperty(property, originalValue); 7358 }; 7359 } 7360 function applyElementStyles(element, styles) { 7361 const restorers = []; 7362 for (const [key, value] of Object.entries(styles)) { 7363 restorers.push(overrideElementStyle(element, key, value)); 7364 } 7365 return restorers.length ? () => { 7366 restorers.forEach((restore) => restore()); 7367 } : NOOP; 7368 } 7369 function setPopupCssSize(popupElement, size4) { 7370 const width = size4 === "auto" ? "auto" : `$size4.width}px`; 7371 const height = size4 === "auto" ? "auto" : `$size4.height}px`; 7372 popupElement.style.setProperty("--popup-width", width); 7373 popupElement.style.setProperty("--popup-height", height); 7374 } 7375 function setPositionerCssSize(positionerElement, size4) { 7376 const width = size4 === "max-content" ? "max-content" : `$size4.width}px`; 7377 const height = size4 === "max-content" ? "max-content" : `$size4.height}px`; 7378 positionerElement.style.setProperty("--positioner-width", width); 7379 positionerElement.style.setProperty("--positioner-height", height); 7380 } 7381 7382 // node_modules/@base-ui/react/esm/utils/usePopupViewport.js 7383 var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1); 7384 function usePopupViewport(parameters) { 7385 const { 7386 store: store2, 7387 side, 7388 cssVars, 7389 children 7390 } = parameters; 7391 const direction = useDirection(); 7392 const activeTrigger = store2.useState("activeTriggerElement"); 7393 const activeTriggerId = store2.useState("activeTriggerId"); 7394 const open = store2.useState("open"); 7395 const payload = store2.useState("payload"); 7396 const mounted = store2.useState("mounted"); 7397 const popupElement = store2.useState("popupElement"); 7398 const positionerElement = store2.useState("positionerElement"); 7399 const previousActiveTrigger = usePreviousValue(open ? activeTrigger : null); 7400 const currentContentKey = usePopupContentKey(activeTriggerId, payload); 7401 const capturedNodeRef = React32.useRef(null); 7402 const [previousContentNode, setPreviousContentNode] = React32.useState(null); 7403 const [newTriggerOffset, setNewTriggerOffset] = React32.useState(null); 7404 const currentContainerRef = React32.useRef(null); 7405 const previousContainerRef = React32.useRef(null); 7406 const onAnimationsFinished = useAnimationsFinished(currentContainerRef, true, false); 7407 const cleanupFrame = useAnimationFrame(); 7408 const [previousContentDimensions, setPreviousContentDimensions] = React32.useState(null); 7409 const [showStartingStyleAttribute, setShowStartingStyleAttribute] = React32.useState(false); 7410 useIsoLayoutEffect(() => { 7411 store2.set("hasViewport", true); 7412 return () => { 7413 store2.set("hasViewport", false); 7414 }; 7415 }, [store2]); 7416 const handleMeasureLayout = useStableCallback(() => { 7417 currentContainerRef.current?.style.setProperty("animation", "none"); 7418 currentContainerRef.current?.style.setProperty("transition", "none"); 7419 previousContainerRef.current?.style.setProperty("display", "none"); 7420 }); 7421 const handleMeasureLayoutComplete = useStableCallback((previousDimensions) => { 7422 currentContainerRef.current?.style.removeProperty("animation"); 7423 currentContainerRef.current?.style.removeProperty("transition"); 7424 previousContainerRef.current?.style.removeProperty("display"); 7425 if (previousDimensions) { 7426 setPreviousContentDimensions(previousDimensions); 7427 } 7428 }); 7429 const lastHandledTriggerRef = React32.useRef(null); 7430 useIsoLayoutEffect(() => { 7431 if (activeTrigger && previousActiveTrigger && activeTrigger !== previousActiveTrigger && lastHandledTriggerRef.current !== activeTrigger && capturedNodeRef.current) { 7432 setPreviousContentNode(capturedNodeRef.current); 7433 setShowStartingStyleAttribute(true); 7434 const offset4 = calculateRelativePosition(previousActiveTrigger, activeTrigger); 7435 setNewTriggerOffset(offset4); 7436 cleanupFrame.request(() => { 7437 ReactDOM5.flushSync(() => { 7438 setShowStartingStyleAttribute(false); 7439 }); 7440 onAnimationsFinished(() => { 7441 setPreviousContentNode(null); 7442 setPreviousContentDimensions(null); 7443 capturedNodeRef.current = null; 7444 }); 7445 }); 7446 lastHandledTriggerRef.current = activeTrigger; 7447 } 7448 }, [activeTrigger, previousActiveTrigger, previousContentNode, onAnimationsFinished, cleanupFrame]); 7449 useIsoLayoutEffect(() => { 7450 const source = currentContainerRef.current; 7451 if (!source) { 7452 return; 7453 } 7454 const wrapper = ownerDocument(source).createElement("div"); 7455 for (const child of Array.from(source.childNodes)) { 7456 wrapper.appendChild(child.cloneNode(true)); 7457 } 7458 capturedNodeRef.current = wrapper; 7459 }); 7460 const isTransitioning = previousContentNode != null; 7461 let childrenToRender; 7462 if (!isTransitioning) { 7463 childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { 7464 "data-current": true, 7465 ref: currentContainerRef, 7466 children 7467 }, currentContentKey); 7468 } else { 7469 childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(React32.Fragment, { 7470 children: [/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { 7471 "data-previous": true, 7472 inert: inertValue(true), 7473 ref: previousContainerRef, 7474 style: { 7475 ...previousContentDimensions ? { 7476 [cssVars.popupWidth]: `$previousContentDimensions.width}px`, 7477 [cssVars.popupHeight]: `$previousContentDimensions.height}px` 7478 } : null, 7479 position: "absolute" 7480 }, 7481 "data-ending-style": showStartingStyleAttribute ? void 0 : "" 7482 }, "previous"), /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { 7483 "data-current": true, 7484 ref: currentContainerRef, 7485 "data-starting-style": showStartingStyleAttribute ? "" : void 0, 7486 children 7487 }, currentContentKey)] 7488 }); 7489 } 7490 useIsoLayoutEffect(() => { 7491 const container = previousContainerRef.current; 7492 if (!container || !previousContentNode) { 7493 return; 7494 } 7495 container.replaceChildren(...Array.from(previousContentNode.childNodes)); 7496 }, [previousContentNode]); 7497 usePopupAutoResize({ 7498 popupElement, 7499 positionerElement, 7500 mounted, 7501 content: payload, 7502 onMeasureLayout: handleMeasureLayout, 7503 onMeasureLayoutComplete: handleMeasureLayoutComplete, 7504 side, 7505 direction 7506 }); 7507 const state = { 7508 activationDirection: getActivationDirection(newTriggerOffset), 7509 transitioning: isTransitioning 7510 }; 7511 return { 7512 children: childrenToRender, 7513 state 7514 }; 7515 } 7516 function getActivationDirection(offset4) { 7517 if (!offset4) { 7518 return void 0; 7519 } 7520 return `$getValueWithTolerance(offset4.horizontal, 5, "right", "left")} $getValueWithTolerance(offset4.vertical, 5, "down", "up")}`; 7521 } 7522 function getValueWithTolerance(value, tolerance, positiveLabel, negativeLabel) { 7523 if (value > tolerance) { 7524 return positiveLabel; 7525 } 7526 if (value < -tolerance) { 7527 return negativeLabel; 7528 } 7529 return ""; 7530 } 7531 function calculateRelativePosition(from, to) { 7532 const fromRect = from.getBoundingClientRect(); 7533 const toRect = to.getBoundingClientRect(); 7534 const fromCenter = { 7535 x: fromRect.left + fromRect.width / 2, 7536 y: fromRect.top + fromRect.height / 2 7537 }; 7538 const toCenter = { 7539 x: toRect.left + toRect.width / 2, 7540 y: toRect.top + toRect.height / 2 7541 }; 7542 return { 7543 horizontal: toCenter.x - fromCenter.x, 7544 vertical: toCenter.y - fromCenter.y 7545 }; 7546 } 7547 function usePopupContentKey(activeTriggerId, payload) { 7548 const [contentKey, setContentKey] = React32.useState(0); 7549 const previousActiveTriggerIdRef = React32.useRef(activeTriggerId); 7550 const previousPayloadRef = React32.useRef(payload); 7551 const pendingPayloadUpdateRef = React32.useRef(false); 7552 useIsoLayoutEffect(() => { 7553 const previousActiveTriggerId = previousActiveTriggerIdRef.current; 7554 const previousPayload = previousPayloadRef.current; 7555 const triggerIdChanged = activeTriggerId !== previousActiveTriggerId; 7556 const payloadChanged = payload !== previousPayload; 7557 if (triggerIdChanged) { 7558 setContentKey((value) => value + 1); 7559 pendingPayloadUpdateRef.current = !payloadChanged; 7560 } else if (pendingPayloadUpdateRef.current && payloadChanged) { 7561 setContentKey((value) => value + 1); 7562 pendingPayloadUpdateRef.current = false; 7563 } 7564 previousActiveTriggerIdRef.current = activeTriggerId; 7565 previousPayloadRef.current = payload; 7566 }, [activeTriggerId, payload]); 7567 return `$activeTriggerId ?? "current"}-$contentKey}`; 7568 } 7569 7570 // node_modules/@base-ui/react/esm/utils/FloatingPortalLite.js 7571 var React33 = __toESM(require_react(), 1); 7572 var ReactDOM6 = __toESM(require_react_dom(), 1); 7573 var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1); 7574 var FloatingPortalLite = /* @__PURE__ */ React33.forwardRef(function FloatingPortalLite2(componentProps, forwardedRef) { 7575 const { 7576 children, 7577 container, 7578 className, 7579 render, 7580 style, 7581 ...elementProps 7582 } = componentProps; 7583 const { 7584 portalNode, 7585 portalSubtree 7586 } = useFloatingPortalNode({ 7587 container, 7588 ref: forwardedRef, 7589 componentProps, 7590 elementProps 7591 }); 7592 if (!portalSubtree && !portalNode) { 7593 return null; 7594 } 7595 return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(React33.Fragment, { 7596 children: [portalSubtree, portalNode && /* @__PURE__ */ ReactDOM6.createPortal(children, portalNode)] 7597 }); 7598 }); 7599 if (true) FloatingPortalLite.displayName = "FloatingPortalLite"; 7600 7601 // node_modules/@base-ui/react/esm/tooltip/index.parts.js 7602 var index_parts_exports = {}; 7603 __export(index_parts_exports, { 7604 Arrow: () => TooltipArrow, 7605 Handle: () => TooltipHandle, 7606 Popup: () => TooltipPopup, 7607 Portal: () => TooltipPortal, 7608 Positioner: () => TooltipPositioner, 7609 Provider: () => TooltipProvider, 7610 Root: () => TooltipRoot, 7611 Trigger: () => TooltipTrigger, 7612 Viewport: () => TooltipViewport, 7613 createHandle: () => createTooltipHandle 7614 }); 7615 7616 // node_modules/@base-ui/react/esm/tooltip/root/TooltipRoot.js 7617 var React36 = __toESM(require_react(), 1); 7618 7619 // node_modules/@base-ui/react/esm/tooltip/root/TooltipRootContext.js 7620 var React34 = __toESM(require_react(), 1); 7621 var TooltipRootContext = /* @__PURE__ */ React34.createContext(void 0); 7622 if (true) TooltipRootContext.displayName = "TooltipRootContext"; 7623 function useTooltipRootContext(optional) { 7624 const context = React34.useContext(TooltipRootContext); 7625 if (context === void 0 && !optional) { 7626 throw new Error(true ? "Base UI: TooltipRootContext is missing. Tooltip parts must be placed within <Tooltip.Root>." : formatErrorMessage_default(72)); 7627 } 7628 return context; 7629 } 7630 7631 // node_modules/@base-ui/react/esm/tooltip/store/TooltipStore.js 7632 var React35 = __toESM(require_react(), 1); 7633 var ReactDOM7 = __toESM(require_react_dom(), 1); 7634 var selectors2 = { 7635 ...popupStoreSelectors, 7636 disabled: createSelector((state) => state.disabled), 7637 instantType: createSelector((state) => state.instantType), 7638 isInstantPhase: createSelector((state) => state.isInstantPhase), 7639 trackCursorAxis: createSelector((state) => state.trackCursorAxis), 7640 disableHoverablePopup: createSelector((state) => state.disableHoverablePopup), 7641 lastOpenChangeReason: createSelector((state) => state.openChangeReason), 7642 closeOnClick: createSelector((state) => state.closeOnClick), 7643 closeDelay: createSelector((state) => state.closeDelay), 7644 hasViewport: createSelector((state) => state.hasViewport) 7645 }; 7646 var TooltipStore = class _TooltipStore extends ReactStore { 7647 constructor(initialState, floatingId, nested = false) { 7648 const triggerElements = new PopupTriggerMap(); 7649 const state = { 7650 ...createInitialState(), 7651 ...initialState 7652 }; 7653 state.floatingRootContext = createPopupFloatingRootContext(triggerElements, floatingId, nested); 7654 super(state, { 7655 popupRef: /* @__PURE__ */ React35.createRef(), 7656 onOpenChange: void 0, 7657 onOpenChangeComplete: void 0, 7658 triggerElements 7659 }, selectors2); 7660 } 7661 setOpen = (nextOpen, eventDetails) => { 7662 const reason = eventDetails.reason; 7663 const isHover = reason === reason_parts_exports.triggerHover; 7664 const isFocusOpen = nextOpen && reason === reason_parts_exports.triggerFocus; 7665 const isDismissClose = !nextOpen && (reason === reason_parts_exports.triggerPress || reason === reason_parts_exports.escapeKey); 7666 eventDetails.preventUnmountOnClose = () => { 7667 this.set("preventUnmountingOnClose", true); 7668 }; 7669 this.context.onOpenChange?.(nextOpen, eventDetails); 7670 if (eventDetails.isCanceled) { 7671 return; 7672 } 7673 this.state.floatingRootContext.dispatchOpenChange(nextOpen, eventDetails); 7674 const changeState = () => { 7675 const updatedState = { 7676 open: nextOpen, 7677 openChangeReason: reason 7678 }; 7679 if (isFocusOpen) { 7680 updatedState.instantType = "focus"; 7681 } else if (isDismissClose) { 7682 updatedState.instantType = "dismiss"; 7683 } else if (reason === reason_parts_exports.triggerHover) { 7684 updatedState.instantType = void 0; 7685 } 7686 setOpenTriggerState(updatedState, nextOpen, eventDetails.trigger); 7687 this.update(updatedState); 7688 }; 7689 if (isHover) { 7690 ReactDOM7.flushSync(changeState); 7691 } else { 7692 changeState(); 7693 } 7694 }; 7695 // Used by trigger clicks to clear a delayed hover open without reporting a public open-state change. 7696 cancelPendingOpen(event) { 7697 this.state.floatingRootContext.dispatchOpenChange(false, createChangeEventDetails(reason_parts_exports.triggerPress, event)); 7698 } 7699 static useStore(externalStore, initialState) { 7700 const store2 = usePopupStore(externalStore, (floatingId, nested) => new _TooltipStore(initialState, floatingId, nested)).store; 7701 return store2; 7702 } 7703 }; 7704 function createInitialState() { 7705 return { 7706 ...createInitialPopupStoreState(), 7707 disabled: false, 7708 instantType: void 0, 7709 isInstantPhase: false, 7710 trackCursorAxis: "none", 7711 disableHoverablePopup: false, 7712 openChangeReason: null, 7713 closeOnClick: true, 7714 closeDelay: 0, 7715 hasViewport: false 7716 }; 7717 } 7718 7719 // node_modules/@base-ui/react/esm/tooltip/root/TooltipRoot.js 7720 var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); 7721 var TooltipRoot = fastComponent(function TooltipRoot2(props) { 7722 const { 7723 disabled: disabled2 = false, 7724 defaultOpen = false, 7725 open: openProp, 7726 disableHoverablePopup = false, 7727 trackCursorAxis = "none", 7728 actionsRef, 7729 onOpenChange, 7730 onOpenChangeComplete, 7731 handle, 7732 triggerId: triggerIdProp, 7733 defaultTriggerId: defaultTriggerIdProp = null, 7734 children 7735 } = props; 7736 const store2 = TooltipStore.useStore(handle?.store, { 7737 open: defaultOpen, 7738 openProp, 7739 activeTriggerId: defaultTriggerIdProp, 7740 triggerIdProp 7741 }); 7742 useOnFirstRender(() => { 7743 if (openProp === void 0 && store2.state.open === false && defaultOpen === true) { 7744 store2.update({ 7745 open: true, 7746 activeTriggerId: defaultTriggerIdProp 7747 }); 7748 } 7749 }); 7750 store2.useControlledProp("openProp", openProp); 7751 store2.useControlledProp("triggerIdProp", triggerIdProp); 7752 store2.useContextCallback("onOpenChange", onOpenChange); 7753 store2.useContextCallback("onOpenChangeComplete", onOpenChangeComplete); 7754 const openState = store2.useState("open"); 7755 const open = !disabled2 && openState; 7756 const activeTriggerId = store2.useState("activeTriggerId"); 7757 const mounted = store2.useState("mounted"); 7758 const payload = store2.useState("payload"); 7759 store2.useSyncedValues({ 7760 trackCursorAxis, 7761 disableHoverablePopup 7762 }); 7763 store2.useSyncedValue("disabled", disabled2); 7764 useImplicitActiveTrigger(store2); 7765 const { 7766 forceUnmount, 7767 transitionStatus 7768 } = useOpenStateTransitions(open, store2); 7769 const isInstantPhase = store2.useState("isInstantPhase"); 7770 const instantType = store2.useState("instantType"); 7771 const lastOpenChangeReason = store2.useState("lastOpenChangeReason"); 7772 const previousInstantTypeRef = React36.useRef(null); 7773 useIsoLayoutEffect(() => { 7774 if (openState && disabled2) { 7775 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.disabled)); 7776 } 7777 }, [openState, disabled2, store2]); 7778 useIsoLayoutEffect(() => { 7779 if (transitionStatus === "ending" && lastOpenChangeReason === reason_parts_exports.none || transitionStatus !== "ending" && isInstantPhase) { 7780 if (instantType !== "delay") { 7781 previousInstantTypeRef.current = instantType; 7782 } 7783 store2.set("instantType", "delay"); 7784 } else if (previousInstantTypeRef.current !== null) { 7785 store2.set("instantType", previousInstantTypeRef.current); 7786 previousInstantTypeRef.current = null; 7787 } 7788 }, [transitionStatus, isInstantPhase, lastOpenChangeReason, instantType, store2]); 7789 useIsoLayoutEffect(() => { 7790 if (open) { 7791 if (activeTriggerId == null) { 7792 store2.set("payload", void 0); 7793 } 7794 } 7795 }, [store2, activeTriggerId, open]); 7796 const handleImperativeClose = React36.useCallback(() => { 7797 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction)); 7798 }, [store2]); 7799 React36.useImperativeHandle(actionsRef, () => ({ 7800 unmount: forceUnmount, 7801 close: handleImperativeClose 7802 }), [forceUnmount, handleImperativeClose]); 7803 const shouldRenderInteractions = open || mounted || !disabled2 && trackCursorAxis !== "none"; 7804 return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(TooltipRootContext.Provider, { 7805 value: store2, 7806 children: [shouldRenderInteractions && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(TooltipInteractions, { 7807 store: store2, 7808 disabled: disabled2, 7809 trackCursorAxis 7810 }), typeof children === "function" ? children({ 7811 payload 7812 }) : children] 7813 }); 7814 }); 7815 if (true) TooltipRoot.displayName = "TooltipRoot"; 7816 function TooltipInteractions({ 7817 store: store2, 7818 disabled: disabled2, 7819 trackCursorAxis 7820 }) { 7821 const floatingRootContext = store2.useState("floatingRootContext"); 7822 const dismiss = useDismiss(floatingRootContext, { 7823 enabled: !disabled2, 7824 referencePress: () => store2.select("closeOnClick") 7825 }); 7826 const clientPoint = useClientPoint(floatingRootContext, { 7827 enabled: !disabled2 && trackCursorAxis !== "none", 7828 axis: trackCursorAxis === "none" ? void 0 : trackCursorAxis 7829 }); 7830 const activeTriggerProps = React36.useMemo(() => mergeProps(clientPoint.reference, dismiss.reference), [clientPoint.reference, dismiss.reference]); 7831 const inactiveTriggerProps = React36.useMemo(() => mergeProps(clientPoint.trigger, dismiss.trigger), [clientPoint.trigger, dismiss.trigger]); 7832 const popupProps = React36.useMemo(() => mergeProps(FOCUSABLE_POPUP_PROPS, clientPoint.floating, dismiss.floating), [clientPoint.floating, dismiss.floating]); 7833 usePopupInteractionProps(store2, { 7834 activeTriggerProps, 7835 inactiveTriggerProps, 7836 popupProps 7837 }); 7838 return null; 7839 } 7840 7841 // node_modules/@base-ui/react/esm/tooltip/trigger/TooltipTrigger.js 7842 var React38 = __toESM(require_react(), 1); 7843 7844 // node_modules/@base-ui/react/esm/tooltip/provider/TooltipProviderContext.js 7845 var React37 = __toESM(require_react(), 1); 7846 var TooltipProviderContext = /* @__PURE__ */ React37.createContext(void 0); 7847 if (true) TooltipProviderContext.displayName = "TooltipProviderContext"; 7848 function useTooltipProviderContext() { 7849 return React37.useContext(TooltipProviderContext); 7850 } 7851 7852 // node_modules/@base-ui/react/esm/tooltip/trigger/TooltipTriggerDataAttributes.js 7853 var TooltipTriggerDataAttributes = (function(TooltipTriggerDataAttributes2) { 7854 TooltipTriggerDataAttributes2[TooltipTriggerDataAttributes2["popupOpen"] = CommonTriggerDataAttributes.popupOpen] = "popupOpen"; 7855 TooltipTriggerDataAttributes2["triggerDisabled"] = "data-trigger-disabled"; 7856 return TooltipTriggerDataAttributes2; 7857 })({}); 7858 7859 // node_modules/@base-ui/react/esm/tooltip/utils/constants.js 7860 var OPEN_DELAY = 600; 7861 7862 // node_modules/@base-ui/react/esm/tooltip/trigger/TooltipTrigger.js 7863 var TOOLTIP_TRIGGER_IDENTIFIER = "data-base-ui-tooltip-trigger"; 7864 function getTargetElement(event) { 7865 if ("composedPath" in event) { 7866 const path = event.composedPath(); 7867 for (let i = 0; i < path.length; i += 1) { 7868 const element = path[i]; 7869 if (isElement(element)) { 7870 return element; 7871 } 7872 } 7873 } 7874 const target = event.target; 7875 if (isElement(target)) { 7876 return target; 7877 } 7878 return null; 7879 } 7880 function closestEnabledTooltipTrigger(element) { 7881 let current = element; 7882 while (current) { 7883 if (current.hasAttribute(TOOLTIP_TRIGGER_IDENTIFIER)) { 7884 return current; 7885 } 7886 const parentElement = current.parentElement; 7887 if (parentElement) { 7888 current = parentElement; 7889 continue; 7890 } 7891 const root = current.getRootNode(); 7892 current = "host" in root && isElement(root.host) ? root.host : null; 7893 } 7894 return null; 7895 } 7896 var TooltipTrigger = fastComponentRef(function TooltipTrigger2(componentProps, forwardedRef) { 7897 const { 7898 render, 7899 className, 7900 style, 7901 handle, 7902 payload, 7903 disabled: disabledProp, 7904 delay, 7905 closeOnClick = true, 7906 closeDelay, 7907 id: idProp, 7908 ...elementProps 7909 } = componentProps; 7910 const rootContext = useTooltipRootContext(true); 7911 const store2 = handle?.store ?? rootContext; 7912 if (!store2) { 7913 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)); 7914 } 7915 const thisTriggerId = useBaseUiId(idProp); 7916 const isTriggerActive = store2.useState("isTriggerActive", thisTriggerId); 7917 const isOpenedByThisTrigger = store2.useState("isOpenedByTrigger", thisTriggerId); 7918 const floatingRootContext = store2.useState("floatingRootContext"); 7919 const triggerElementRef = React38.useRef(null); 7920 const delayWithDefault = delay ?? OPEN_DELAY; 7921 const closeDelayWithDefault = closeDelay ?? 0; 7922 const { 7923 registerTrigger, 7924 isMountedByThisTrigger 7925 } = useTriggerDataForwarding(thisTriggerId, triggerElementRef, store2, { 7926 payload, 7927 closeOnClick, 7928 closeDelay: closeDelayWithDefault 7929 }); 7930 const providerContext = useTooltipProviderContext(); 7931 const { 7932 delayRef, 7933 isInstantPhase, 7934 hasProvider 7935 } = useDelayGroup(floatingRootContext, { 7936 open: isOpenedByThisTrigger 7937 }); 7938 const hoverInteraction = useHoverInteractionSharedState(floatingRootContext); 7939 store2.useSyncedValue("isInstantPhase", isInstantPhase); 7940 const rootDisabled = store2.useState("disabled"); 7941 const disabled2 = disabledProp ?? rootDisabled; 7942 const disabledRef = useValueAsRef(disabled2); 7943 const trackCursorAxis = store2.useState("trackCursorAxis"); 7944 const disableHoverablePopup = store2.useState("disableHoverablePopup"); 7945 const isNestedTriggerHoveredRef = React38.useRef(false); 7946 const nestedTriggerOpenTimeout = useTimeout(); 7947 const pointerTypeRef = React38.useRef(void 0); 7948 function getOpenDelay() { 7949 const providerDelay = providerContext?.delay; 7950 const groupOpenValue = typeof delayRef.current === "object" ? delayRef.current.open : void 0; 7951 let computedOpenDelay = delayWithDefault; 7952 if (hasProvider) { 7953 if (groupOpenValue !== 0) { 7954 computedOpenDelay = delay ?? providerDelay ?? delayWithDefault; 7955 } else { 7956 computedOpenDelay = 0; 7957 } 7958 } 7959 return computedOpenDelay; 7960 } 7961 function isEnabledNestedTriggerTarget(target) { 7962 const triggerEl = triggerElementRef.current; 7963 if (!triggerEl || !target) { 7964 return false; 7965 } 7966 const nearestTrigger = closestEnabledTooltipTrigger(target); 7967 return nearestTrigger !== null && nearestTrigger !== triggerEl && contains(triggerEl, nearestTrigger); 7968 } 7969 function detectNestedTriggerHover(target) { 7970 const nestedTriggerHovered = isEnabledNestedTriggerTarget(target); 7971 isNestedTriggerHoveredRef.current = nestedTriggerHovered; 7972 if (nestedTriggerHovered) { 7973 hoverInteraction.openChangeTimeout.clear(); 7974 hoverInteraction.restTimeout.clear(); 7975 hoverInteraction.restTimeoutPending = false; 7976 nestedTriggerOpenTimeout.clear(); 7977 } 7978 return nestedTriggerHovered; 7979 } 7980 const hoverProps = useHoverReferenceInteraction(floatingRootContext, { 7981 enabled: !disabled2, 7982 mouseOnly: true, 7983 move: false, 7984 handleClose: !disableHoverablePopup && trackCursorAxis !== "both" ? safePolygon() : null, 7985 restMs: getOpenDelay, 7986 delay() { 7987 const closeValue = typeof delayRef.current === "object" ? delayRef.current.close : void 0; 7988 let computedCloseDelay = closeDelayWithDefault; 7989 if (closeDelay == null && hasProvider) { 7990 computedCloseDelay = closeValue; 7991 } 7992 return { 7993 close: computedCloseDelay 7994 }; 7995 }, 7996 triggerElementRef, 7997 isActiveTrigger: isTriggerActive, 7998 isClosing: () => store2.select("transitionStatus") === "ending", 7999 shouldOpen() { 8000 return !isNestedTriggerHoveredRef.current; 8001 } 8002 }); 8003 const focusProps = useFocus(floatingRootContext, { 8004 enabled: !disabled2 8005 }).reference; 8006 const handleNestedTriggerHover = (event) => { 8007 const wasNestedTriggerHovered = isNestedTriggerHoveredRef.current; 8008 const target = getTargetElement(event); 8009 const nestedTriggerHovered = detectNestedTriggerHover(target); 8010 const triggerEl = triggerElementRef.current; 8011 const targetInsideTrigger = triggerEl && target && contains(triggerEl, target); 8012 if (nestedTriggerHovered && store2.select("open") && store2.select("lastOpenChangeReason") === reason_parts_exports.triggerHover) { 8013 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 8014 return; 8015 } 8016 if (wasNestedTriggerHovered && !nestedTriggerHovered && targetInsideTrigger && !disabledRef.current && !store2.select("open") && triggerEl && // Match the hover hook's non-strict mouse fallback for mouse-only event sequences. 8017 isMouseLikePointerType(pointerTypeRef.current)) { 8018 const open = () => { 8019 if (!isNestedTriggerHoveredRef.current && !disabledRef.current && !store2.select("open")) { 8020 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerEl)); 8021 } 8022 }; 8023 const openDelay = getOpenDelay(); 8024 if (openDelay === 0) { 8025 nestedTriggerOpenTimeout.clear(); 8026 open(); 8027 } else { 8028 nestedTriggerOpenTimeout.start(openDelay, open); 8029 } 8030 } 8031 }; 8032 const rootTriggerProps = store2.useState("triggerProps", isMountedByThisTrigger); 8033 const shouldApplyRootTriggerProps = isMountedByThisTrigger || trackCursorAxis !== "none"; 8034 const state = { 8035 open: isOpenedByThisTrigger 8036 }; 8037 const element = useRenderElement("button", componentProps, { 8038 state, 8039 ref: [forwardedRef, registerTrigger, triggerElementRef], 8040 props: [hoverProps, focusProps, shouldApplyRootTriggerProps ? rootTriggerProps : void 0, { 8041 onMouseOver(event) { 8042 handleNestedTriggerHover(event.nativeEvent); 8043 }, 8044 onFocus(event) { 8045 if (isEnabledNestedTriggerTarget(getTargetElement(event.nativeEvent))) { 8046 event.preventBaseUIHandler(); 8047 } 8048 }, 8049 onMouseLeave() { 8050 isNestedTriggerHoveredRef.current = false; 8051 nestedTriggerOpenTimeout.clear(); 8052 pointerTypeRef.current = void 0; 8053 }, 8054 onPointerEnter(event) { 8055 pointerTypeRef.current = event.pointerType; 8056 }, 8057 onPointerDown(event) { 8058 pointerTypeRef.current = event.pointerType; 8059 store2.set("closeOnClick", closeOnClick); 8060 if (closeOnClick && !store2.select("open")) { 8061 store2.cancelPendingOpen(event.nativeEvent); 8062 } 8063 }, 8064 onClick(event) { 8065 if (closeOnClick && !store2.select("open")) { 8066 store2.cancelPendingOpen(event.nativeEvent); 8067 } 8068 }, 8069 id: thisTriggerId, 8070 [TooltipTriggerDataAttributes.triggerDisabled]: disabled2 ? "" : void 0, 8071 [TOOLTIP_TRIGGER_IDENTIFIER]: disabled2 ? void 0 : "" 8072 }, elementProps], 8073 stateAttributesMapping: triggerOpenStateMapping 8074 }); 8075 return element; 8076 }); 8077 if (true) TooltipTrigger.displayName = "TooltipTrigger"; 8078 8079 // node_modules/@base-ui/react/esm/tooltip/portal/TooltipPortal.js 8080 var React40 = __toESM(require_react(), 1); 8081 8082 // node_modules/@base-ui/react/esm/tooltip/portal/TooltipPortalContext.js 8083 var React39 = __toESM(require_react(), 1); 8084 var TooltipPortalContext = /* @__PURE__ */ React39.createContext(void 0); 8085 if (true) TooltipPortalContext.displayName = "TooltipPortalContext"; 8086 function useTooltipPortalContext() { 8087 const value = React39.useContext(TooltipPortalContext); 8088 if (value === void 0) { 8089 throw new Error(true ? "Base UI: <Tooltip.Portal> is missing." : formatErrorMessage_default(70)); 8090 } 8091 return value; 8092 } 8093 8094 // node_modules/@base-ui/react/esm/tooltip/portal/TooltipPortal.js 8095 var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1); 8096 var TooltipPortal = /* @__PURE__ */ React40.forwardRef(function TooltipPortal2(props, forwardedRef) { 8097 const { 8098 keepMounted = false, 8099 ...portalProps 8100 } = props; 8101 const store2 = useTooltipRootContext(); 8102 const mounted = store2.useState("mounted"); 8103 const shouldRender = mounted || keepMounted; 8104 if (!shouldRender) { 8105 return null; 8106 } 8107 return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(TooltipPortalContext.Provider, { 8108 value: keepMounted, 8109 children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(FloatingPortalLite, { 8110 ref: forwardedRef, 8111 ...portalProps 8112 }) 8113 }); 8114 }); 8115 if (true) TooltipPortal.displayName = "TooltipPortal"; 8116 8117 // node_modules/@base-ui/react/esm/tooltip/positioner/TooltipPositioner.js 8118 var React42 = __toESM(require_react(), 1); 8119 8120 // node_modules/@base-ui/react/esm/tooltip/positioner/TooltipPositionerContext.js 8121 var React41 = __toESM(require_react(), 1); 8122 var TooltipPositionerContext = /* @__PURE__ */ React41.createContext(void 0); 8123 if (true) TooltipPositionerContext.displayName = "TooltipPositionerContext"; 8124 function useTooltipPositionerContext() { 8125 const context = React41.useContext(TooltipPositionerContext); 8126 if (context === void 0) { 8127 throw new Error(true ? "Base UI: TooltipPositionerContext is missing. TooltipPositioner parts must be placed within <Tooltip.Positioner>." : formatErrorMessage_default(71)); 8128 } 8129 return context; 8130 } 8131 8132 // node_modules/@base-ui/react/esm/tooltip/positioner/TooltipPositioner.js 8133 var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1); 8134 var TooltipPositioner = /* @__PURE__ */ React42.forwardRef(function TooltipPositioner2(componentProps, forwardedRef) { 8135 const { 8136 render, 8137 className, 8138 anchor, 8139 positionMethod = "absolute", 8140 side = "top", 8141 align = "center", 8142 sideOffset = 0, 8143 alignOffset = 0, 8144 collisionBoundary = "clipping-ancestors", 8145 collisionPadding = 5, 8146 arrowPadding = 5, 8147 sticky = false, 8148 disableAnchorTracking = false, 8149 collisionAvoidance = POPUP_COLLISION_AVOIDANCE, 8150 style, 8151 ...elementProps 8152 } = componentProps; 8153 const store2 = useTooltipRootContext(); 8154 const keepMounted = useTooltipPortalContext(); 8155 const open = store2.useState("open"); 8156 const mounted = store2.useState("mounted"); 8157 const trackCursorAxis = store2.useState("trackCursorAxis"); 8158 const disableHoverablePopup = store2.useState("disableHoverablePopup"); 8159 const floatingRootContext = store2.useState("floatingRootContext"); 8160 const instantType = store2.useState("instantType"); 8161 const transitionStatus = store2.useState("transitionStatus"); 8162 const hasViewport = store2.useState("hasViewport"); 8163 const positioning = useAnchorPositioning({ 8164 anchor, 8165 positionMethod, 8166 floatingRootContext, 8167 mounted, 8168 side, 8169 sideOffset, 8170 align, 8171 alignOffset, 8172 collisionBoundary, 8173 collisionPadding, 8174 sticky, 8175 arrowPadding, 8176 disableAnchorTracking, 8177 keepMounted, 8178 collisionAvoidance, 8179 adaptiveOrigin: hasViewport ? adaptiveOrigin : void 0 8180 }); 8181 const state = React42.useMemo(() => ({ 8182 open, 8183 side: positioning.side, 8184 align: positioning.align, 8185 anchorHidden: positioning.anchorHidden, 8186 instant: trackCursorAxis !== "none" ? "tracking-cursor" : instantType 8187 }), [open, positioning.side, positioning.align, positioning.anchorHidden, trackCursorAxis, instantType]); 8188 const element = usePositioner(componentProps, state, { 8189 styles: positioning.positionerStyles, 8190 transitionStatus, 8191 props: elementProps, 8192 refs: [forwardedRef, store2.useStateSetter("positionerElement")], 8193 hidden: !mounted, 8194 inert: !open || trackCursorAxis === "both" || disableHoverablePopup 8195 }); 8196 return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TooltipPositionerContext.Provider, { 8197 value: positioning, 8198 children: element 8199 }); 8200 }); 8201 if (true) TooltipPositioner.displayName = "TooltipPositioner"; 8202 8203 // node_modules/@base-ui/react/esm/tooltip/popup/TooltipPopup.js 8204 var React43 = __toESM(require_react(), 1); 8205 var stateAttributesMapping = { 8206 ...popupStateMapping, 8207 ...transitionStatusMapping 8208 }; 8209 var TooltipPopup = /* @__PURE__ */ React43.forwardRef(function TooltipPopup2(componentProps, forwardedRef) { 8210 const { 8211 render, 8212 className, 8213 style, 8214 ...elementProps 8215 } = componentProps; 8216 const store2 = useTooltipRootContext(); 8217 const { 8218 side, 8219 align 8220 } = useTooltipPositionerContext(); 8221 const open = store2.useState("open"); 8222 const instantType = store2.useState("instantType"); 8223 const transitionStatus = store2.useState("transitionStatus"); 8224 const popupProps = store2.useState("popupProps"); 8225 const floatingContext = store2.useState("floatingRootContext"); 8226 const disabled2 = store2.useState("disabled"); 8227 const closeDelay = store2.useState("closeDelay"); 8228 useOpenChangeComplete({ 8229 open, 8230 ref: store2.context.popupRef, 8231 onComplete() { 8232 if (open) { 8233 store2.context.onOpenChangeComplete?.(true); 8234 } 8235 } 8236 }); 8237 useHoverFloatingInteraction(floatingContext, { 8238 enabled: !disabled2, 8239 closeDelay 8240 }); 8241 const setPopupElement = store2.useStateSetter("popupElement"); 8242 const state = { 8243 open, 8244 side, 8245 align, 8246 instant: instantType, 8247 transitionStatus 8248 }; 8249 const element = useRenderElement("div", componentProps, { 8250 state, 8251 ref: [forwardedRef, store2.context.popupRef, setPopupElement], 8252 props: [popupProps, getDisabledMountTransitionStyles(transitionStatus), elementProps], 8253 stateAttributesMapping 8254 }); 8255 return element; 8256 }); 8257 if (true) TooltipPopup.displayName = "TooltipPopup"; 8258 8259 // node_modules/@base-ui/react/esm/tooltip/arrow/TooltipArrow.js 8260 var React44 = __toESM(require_react(), 1); 8261 var TooltipArrow = /* @__PURE__ */ React44.forwardRef(function TooltipArrow2(componentProps, forwardedRef) { 8262 const { 8263 render, 8264 className, 8265 style, 8266 ...elementProps 8267 } = componentProps; 8268 const store2 = useTooltipRootContext(); 8269 const { 8270 arrowRef, 8271 side, 8272 align, 8273 arrowUncentered, 8274 arrowStyles 8275 } = useTooltipPositionerContext(); 8276 const open = store2.useState("open"); 8277 const instantType = store2.useState("instantType"); 8278 const state = { 8279 open, 8280 side, 8281 align, 8282 uncentered: arrowUncentered, 8283 instant: instantType 8284 }; 8285 const element = useRenderElement("div", componentProps, { 8286 state, 8287 ref: [forwardedRef, arrowRef], 8288 props: [{ 8289 style: arrowStyles, 8290 "aria-hidden": true 8291 }, elementProps], 8292 stateAttributesMapping: popupStateMapping 8293 }); 8294 return element; 8295 }); 8296 if (true) TooltipArrow.displayName = "TooltipArrow"; 8297 8298 // node_modules/@base-ui/react/esm/tooltip/provider/TooltipProvider.js 8299 var React45 = __toESM(require_react(), 1); 8300 var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1); 8301 var TooltipProvider = function TooltipProvider2(props) { 8302 const { 8303 delay, 8304 closeDelay, 8305 timeout = 400 8306 } = props; 8307 const contextValue = React45.useMemo(() => ({ 8308 delay, 8309 closeDelay 8310 }), [delay, closeDelay]); 8311 const delayValue = React45.useMemo(() => ({ 8312 open: delay, 8313 close: closeDelay 8314 }), [delay, closeDelay]); 8315 return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TooltipProviderContext.Provider, { 8316 value: contextValue, 8317 children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FloatingDelayGroup, { 8318 delay: delayValue, 8319 timeoutMs: timeout, 8320 children: props.children 8321 }) 8322 }); 8323 }; 8324 if (true) TooltipProvider.displayName = "TooltipProvider"; 8325 8326 // node_modules/@base-ui/react/esm/tooltip/viewport/TooltipViewport.js 8327 var React46 = __toESM(require_react(), 1); 8328 8329 // node_modules/@base-ui/react/esm/tooltip/viewport/TooltipViewportCssVars.js 8330 var TooltipViewportCssVars = /* @__PURE__ */ (function(TooltipViewportCssVars2) { 8331 TooltipViewportCssVars2["popupWidth"] = "--popup-width"; 8332 TooltipViewportCssVars2["popupHeight"] = "--popup-height"; 8333 return TooltipViewportCssVars2; 8334 })({}); 8335 8336 // node_modules/@base-ui/react/esm/tooltip/viewport/TooltipViewport.js 8337 var stateAttributesMapping2 = { 8338 activationDirection: (value) => value ? { 8339 "data-activation-direction": value 8340 } : null 8341 }; 8342 var TooltipViewport = /* @__PURE__ */ React46.forwardRef(function TooltipViewport2(componentProps, forwardedRef) { 8343 const { 8344 render, 8345 className, 8346 style, 8347 children, 8348 ...elementProps 8349 } = componentProps; 8350 const store2 = useTooltipRootContext(); 8351 const positioner = useTooltipPositionerContext(); 8352 const instantType = store2.useState("instantType"); 8353 const { 8354 children: childrenToRender, 8355 state: viewportState 8356 } = usePopupViewport({ 8357 store: store2, 8358 side: positioner.side, 8359 cssVars: TooltipViewportCssVars, 8360 children 8361 }); 8362 const state = { 8363 activationDirection: viewportState.activationDirection, 8364 transitioning: viewportState.transitioning, 8365 instant: instantType 8366 }; 8367 return useRenderElement("div", componentProps, { 8368 state, 8369 ref: forwardedRef, 8370 props: [elementProps, { 8371 children: childrenToRender 8372 }], 8373 stateAttributesMapping: stateAttributesMapping2 8374 }); 8375 }); 8376 if (true) TooltipViewport.displayName = "TooltipViewport"; 8377 8378 // node_modules/@base-ui/react/esm/tooltip/store/TooltipHandle.js 8379 var TooltipHandle = class { 8380 /** 8381 * Internal store holding the tooltip state. 8382 * @internal 8383 */ 8384 constructor() { 8385 this.store = new TooltipStore(); 8386 } 8387 /** 8388 * Opens the tooltip and associates it with the trigger with the given ID. 8389 * The trigger must be a Tooltip.Trigger component with this handle passed as a prop. 8390 * 8391 * This method should only be called in an event handler or an effect (not during rendering). 8392 * 8393 * @param triggerId ID of the trigger to associate with the tooltip. 8394 */ 8395 open(triggerId) { 8396 const triggerElement = triggerId ? this.store.context.triggerElements.getById(triggerId) : void 0; 8397 if (triggerId && !triggerElement) { 8398 throw new Error(true ? `Base UI: TooltipHandle.open: No trigger found with id "$triggerId}".` : formatErrorMessage_default(81, triggerId)); 8399 } 8400 this.store.setOpen(true, createChangeEventDetails(reason_parts_exports.imperativeAction, void 0, triggerElement)); 8401 } 8402 /** 8403 * Closes the tooltip. 8404 */ 8405 close() { 8406 this.store.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction, void 0, void 0)); 8407 } 8408 /** 8409 * Indicates whether the tooltip is currently open. 8410 */ 8411 get isOpen() { 8412 return this.store.select("open"); 8413 } 8414 }; 8415 function createTooltipHandle() { 8416 return new TooltipHandle(); 8417 } 8418 8419 // node_modules/@base-ui/react/esm/use-render/useRender.js 8420 function useRender(params) { 8421 return useRenderElement(params.defaultTagName ?? "div", params, params); 8422 } 8423 8424 // packages/icons/build-module/library/arrow-up-left.mjs 8425 var import_primitives = __toESM(require_primitives(), 1); 8426 var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1); 8427 var arrow_up_left_default = /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives.Path, { d: "M14 6H6v8h1.5V8.5L17 18l1-1-9.5-9.5H14V6Z" }) }); 8428 8429 // packages/icons/build-module/library/arrow-up-right.mjs 8430 var import_primitives2 = __toESM(require_primitives(), 1); 8431 var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1); 8432 var arrow_up_right_default = /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives2.Path, { d: "M10 6H18V14H16.5V8.5L7 18L6 17L15.5 7.5H10V6Z" }) }); 8433 8434 // packages/icons/build-module/library/chevron-down.mjs 8435 var import_primitives3 = __toESM(require_primitives(), 1); 8436 var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1); 8437 var chevron_down_default = /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives3.Path, { d: "M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z" }) }); 8438 8439 // packages/icons/build-module/library/chevron-left.mjs 8440 var import_primitives4 = __toESM(require_primitives(), 1); 8441 var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1); 8442 var chevron_left_default = /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives4.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives4.Path, { d: "M14.6 7l-1.2-1L8 12l5.4 6 1.2-1-4.6-5z" }) }); 8443 8444 // packages/icons/build-module/library/chevron-right.mjs 8445 var import_primitives5 = __toESM(require_primitives(), 1); 8446 var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1); 8447 var chevron_right_default = /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives5.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives5.Path, { d: "M10.6 6L9.4 7l4.6 5-4.6 5 1.2 1 5.4-6z" }) }); 8448 8449 // packages/icons/build-module/library/chevron-up.mjs 8450 var import_primitives6 = __toESM(require_primitives(), 1); 8451 var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1); 8452 var chevron_up_default = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives6.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives6.Path, { d: "M6.5 12.4L12 8l5.5 4.4-.9 1.2L12 10l-4.5 3.6-1-1.2z" }) }); 8453 8454 // packages/icons/build-module/library/fullscreen.mjs 8455 var import_primitives7 = __toESM(require_primitives(), 1); 8456 var import_jsx_runtime17 = __toESM(require_jsx_runtime(), 1); 8457 var fullscreen_default = /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives7.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives7.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" }) }); 8458 8459 // packages/icons/build-module/library/wordpress.mjs 8460 var import_primitives8 = __toESM(require_primitives(), 1); 8461 var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1); 8462 var wordpress_default = /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives8.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "-2 -2 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives8.Path, { d: "M20 10c0-5.51-4.49-10-10-10C4.48 0 0 4.49 0 10c0 5.52 4.48 10 10 10 5.51 0 10-4.48 10-10zM7.78 15.37L4.37 6.22c.55-.02 1.17-.08 1.17-.08.5-.06.44-1.13-.06-1.11 0 0-1.45.11-2.37.11-.18 0-.37 0-.58-.01C4.12 2.69 6.87 1.11 10 1.11c2.33 0 4.45.87 6.05 2.34-.68-.11-1.65.39-1.65 1.58 0 .74.45 1.36.9 2.1.35.61.55 1.36.55 2.46 0 1.49-1.4 5-1.4 5l-3.03-8.37c.54-.02.82-.17.82-.17.5-.05.44-1.25-.06-1.22 0 0-1.44.12-2.38.12-.87 0-2.33-.12-2.33-.12-.5-.03-.56 1.2-.06 1.22l.92.08 1.26 3.41zM17.41 10c.24-.64.74-1.87.43-4.25.7 1.29 1.05 2.71 1.05 4.25 0 3.29-1.73 6.24-4.4 7.78.97-2.59 1.94-5.2 2.92-7.78zM6.1 18.09C3.12 16.65 1.11 13.53 1.11 10c0-1.3.23-2.48.72-3.59C3.25 10.3 4.67 14.2 6.1 18.09zm4.03-6.63l2.58 6.98c-.86.29-1.76.45-2.71.45-.79 0-1.57-.11-2.29-.33.81-2.38 1.62-4.74 2.42-7.1z" }) }); 8463 8464 // packages/ui/build-module/utils/render-slot-with-children.mjs 8465 var import_element10 = __toESM(require_element(), 1); 8466 function renderSlotWithChildren(slot, defaultSlot, children) { 8467 return (0, import_element10.cloneElement)(slot ?? defaultSlot, { children }); 8468 } 8469 8470 // packages/ui/build-module/lock-unlock.mjs 8471 var import_private_apis = __toESM(require_private_apis(), 1); 8472 var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( 8473 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", 8474 "@wordpress/ui" 8475 ); 8476 8477 // packages/ui/build-module/tooltip/index.mjs 8478 var tooltip_exports = {}; 8479 __export(tooltip_exports, { 8480 Popup: () => Popup, 8481 Portal: () => Portal, 8482 Positioner: () => Positioner, 8483 Provider: () => Provider, 8484 Root: () => Root, 8485 Trigger: () => Trigger 8486 }); 8487 8488 // packages/ui/build-module/tooltip/popup.mjs 8489 var import_element13 = __toESM(require_element(), 1); 8490 var import_theme = __toESM(require_theme(), 1); 8491 8492 // packages/ui/build-module/tooltip/portal.mjs 8493 var import_element11 = __toESM(require_element(), 1); 8494 8495 // packages/ui/build-module/utils/wp-compat-overlay-slot.mjs 8496 var STYLE_HASH_ATTRIBUTE = "data-wp-hash"; 8497 function getRuntime() { 8498 const globalScope = globalThis; 8499 if (globalScope.__wpStyleRuntime) { 8500 return globalScope.__wpStyleRuntime; 8501 } 8502 globalScope.__wpStyleRuntime = { 8503 documents: /* @__PURE__ */ new Map(), 8504 styles: /* @__PURE__ */ new Map(), 8505 injectedStyles: /* @__PURE__ */ new WeakMap() 8506 }; 8507 if (typeof document !== "undefined") { 8508 registerDocument(document); 8509 } 8510 return globalScope.__wpStyleRuntime; 8511 } 8512 function documentContainsStyleHash(targetDocument, hash) { 8513 if (!targetDocument.head) { 8514 return false; 8515 } 8516 for (const style of targetDocument.head.querySelectorAll( 8517 `style[$STYLE_HASH_ATTRIBUTE}]` 8518 )) { 8519 if (style.getAttribute(STYLE_HASH_ATTRIBUTE) === hash) { 8520 return true; 8521 } 8522 } 8523 return false; 8524 } 8525 function injectStyle(targetDocument, hash, css) { 8526 if (!targetDocument.head) { 8527 return; 8528 } 8529 const runtime = getRuntime(); 8530 let injectedStyles = runtime.injectedStyles.get(targetDocument); 8531 if (!injectedStyles) { 8532 injectedStyles = /* @__PURE__ */ new Set(); 8533 runtime.injectedStyles.set(targetDocument, injectedStyles); 8534 } 8535 if (injectedStyles.has(hash)) { 8536 return; 8537 } 8538 if (documentContainsStyleHash(targetDocument, hash)) { 8539 injectedStyles.add(hash); 8540 return; 8541 } 8542 const style = targetDocument.createElement("style"); 8543 style.setAttribute(STYLE_HASH_ATTRIBUTE, hash); 8544 style.appendChild(targetDocument.createTextNode(css)); 8545 targetDocument.head.appendChild(style); 8546 injectedStyles.add(hash); 8547 } 8548 function registerDocument(targetDocument) { 8549 const runtime = getRuntime(); 8550 runtime.documents.set( 8551 targetDocument, 8552 (runtime.documents.get(targetDocument) ?? 0) + 1 8553 ); 8554 for (const [hash, css] of runtime.styles) { 8555 injectStyle(targetDocument, hash, css); 8556 } 8557 return () => { 8558 const count = runtime.documents.get(targetDocument); 8559 if (count === void 0) { 8560 return; 8561 } 8562 if (count <= 1) { 8563 runtime.documents.delete(targetDocument); 8564 return; 8565 } 8566 runtime.documents.set(targetDocument, count - 1); 8567 }; 8568 } 8569 function registerStyle(hash, css) { 8570 const runtime = getRuntime(); 8571 runtime.styles.set(hash, css); 8572 for (const targetDocument of runtime.documents.keys()) { 8573 injectStyle(targetDocument, hash, css); 8574 } 8575 } 8576 if (typeof process === "undefined" || true) { 8577 registerStyle("be37f31c1e", "._11fc52b637ff8a7e__slot{inset:0;isolation:isolate;pointer-events:none;position:fixed;z-index:1000000003}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._11fc52b637ff8a7e__slot>*{pointer-events:auto}}}"); 8578 } 8579 var wp_compat_overlay_slot_default = { "slot": "_11fc52b637ff8a7e__slot" }; 8580 var WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE = "data-wp-compat-overlay-slot"; 8581 function resolveOwnerDocument() { 8582 return typeof document === "undefined" ? null : document; 8583 } 8584 function isInWordPressEnvironment() { 8585 let topWp; 8586 try { 8587 topWp = window.top?.wp; 8588 } catch { 8589 } 8590 const wp = topWp ?? window.wp; 8591 return typeof wp?.components === "object" && wp.components !== null; 8592 } 8593 var cachedSlot = null; 8594 function createSlot(ownerDocument2) { 8595 const element = ownerDocument2.createElement("div"); 8596 element.setAttribute(WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE, ""); 8597 if (wp_compat_overlay_slot_default.slot) { 8598 element.classList.add(wp_compat_overlay_slot_default.slot); 8599 } 8600 ownerDocument2.body.appendChild(element); 8601 return element; 8602 } 8603 function getWpCompatOverlaySlot() { 8604 if (typeof window === "undefined") { 8605 return void 0; 8606 } 8607 if (!isInWordPressEnvironment() && window.__wpUiCompatOverlaySlotEnabled !== true) { 8608 return void 0; 8609 } 8610 const ownerDocument2 = resolveOwnerDocument(); 8611 if (!ownerDocument2 || !ownerDocument2.body) { 8612 return void 0; 8613 } 8614 if (cachedSlot && cachedSlot.ownerDocument === ownerDocument2 && cachedSlot.isConnected) { 8615 return cachedSlot; 8616 } 8617 const existing = ownerDocument2.querySelector( 8618 `[$WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE}]` 8619 ); 8620 if (existing instanceof HTMLDivElement) { 8621 cachedSlot = existing; 8622 return existing; 8623 } 8624 if (cachedSlot?.isConnected) { 8625 cachedSlot.remove(); 8626 } 8627 cachedSlot = createSlot(ownerDocument2); 8628 return cachedSlot; 8629 } 8630 8631 // packages/ui/build-module/tooltip/portal.mjs 8632 var import_jsx_runtime19 = __toESM(require_jsx_runtime(), 1); 8633 var Portal = (0, import_element11.forwardRef)( 8634 function TooltipPortal3({ container, ...restProps }, ref) { 8635 return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)( 8636 index_parts_exports.Portal, 8637 { 8638 container: container ?? getWpCompatOverlaySlot(), 8639 ...restProps, 8640 ref 8641 } 8642 ); 8643 } 8644 ); 8645 8646 // packages/ui/build-module/tooltip/positioner.mjs 8647 var import_element12 = __toESM(require_element(), 1); 8648 var import_jsx_runtime20 = __toESM(require_jsx_runtime(), 1); 8649 var STYLE_HASH_ATTRIBUTE2 = "data-wp-hash"; 8650 function getRuntime2() { 8651 const globalScope = globalThis; 8652 if (globalScope.__wpStyleRuntime) { 8653 return globalScope.__wpStyleRuntime; 8654 } 8655 globalScope.__wpStyleRuntime = { 8656 documents: /* @__PURE__ */ new Map(), 8657 styles: /* @__PURE__ */ new Map(), 8658 injectedStyles: /* @__PURE__ */ new WeakMap() 8659 }; 8660 if (typeof document !== "undefined") { 8661 registerDocument2(document); 8662 } 8663 return globalScope.__wpStyleRuntime; 8664 } 8665 function documentContainsStyleHash2(targetDocument, hash) { 8666 if (!targetDocument.head) { 8667 return false; 8668 } 8669 for (const style of targetDocument.head.querySelectorAll( 8670 `style[$STYLE_HASH_ATTRIBUTE2}]` 8671 )) { 8672 if (style.getAttribute(STYLE_HASH_ATTRIBUTE2) === hash) { 8673 return true; 8674 } 8675 } 8676 return false; 8677 } 8678 function injectStyle2(targetDocument, hash, css) { 8679 if (!targetDocument.head) { 8680 return; 8681 } 8682 const runtime = getRuntime2(); 8683 let injectedStyles = runtime.injectedStyles.get(targetDocument); 8684 if (!injectedStyles) { 8685 injectedStyles = /* @__PURE__ */ new Set(); 8686 runtime.injectedStyles.set(targetDocument, injectedStyles); 8687 } 8688 if (injectedStyles.has(hash)) { 8689 return; 8690 } 8691 if (documentContainsStyleHash2(targetDocument, hash)) { 8692 injectedStyles.add(hash); 8693 return; 8694 } 8695 const style = targetDocument.createElement("style"); 8696 style.setAttribute(STYLE_HASH_ATTRIBUTE2, hash); 8697 style.appendChild(targetDocument.createTextNode(css)); 8698 targetDocument.head.appendChild(style); 8699 injectedStyles.add(hash); 8700 } 8701 function registerDocument2(targetDocument) { 8702 const runtime = getRuntime2(); 8703 runtime.documents.set( 8704 targetDocument, 8705 (runtime.documents.get(targetDocument) ?? 0) + 1 8706 ); 8707 for (const [hash, css] of runtime.styles) { 8708 injectStyle2(targetDocument, hash, css); 8709 } 8710 return () => { 8711 const count = runtime.documents.get(targetDocument); 8712 if (count === void 0) { 8713 return; 8714 } 8715 if (count <= 1) { 8716 runtime.documents.delete(targetDocument); 8717 return; 8718 } 8719 runtime.documents.set(targetDocument, count - 1); 8720 }; 8721 } 8722 function registerStyle2(hash, css) { 8723 const runtime = getRuntime2(); 8724 runtime.styles.set(hash, css); 8725 for (const targetDocument of runtime.documents.keys()) { 8726 injectStyle2(targetDocument, hash, css); 8727 } 8728 } 8729 if (typeof process === "undefined" || true) { 8730 registerStyle2("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); 8731 } 8732 var resets_default = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; 8733 if (typeof process === "undefined" || true) { 8734 registerStyle2("4811d023d1", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._480b748dd3510e64__positioner{z-index:var(--wp-ui-tooltip-z-index,initial)}._50096b232db7709d__popup{background-color:var(--wpds-color-bg-surface-neutral-strong,#fff);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-sm,0 1px 2px 0 #0000000d,0 2px 3px 0 #0000000a,0 6px 6px 0 #00000008,0 8px 8px 0 #00000005);color:var(--wpds-color-fg-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:1.4;padding:var(--wpds-dimension-padding-xs,4px) var(--wpds-dimension-padding-sm,8px);@media (forced-colors:active){border-bottom-color:CanvasText;border-bottom-style:solid;border-bottom-width:1px;border-left-color:CanvasText;border-left-style:solid;border-left-width:1px;border-right-color:CanvasText;border-right-style:solid;border-right-width:1px;border-top-color:CanvasText;border-top-style:solid;border-top-width:1px}}}}'); 8735 } 8736 var style_default = { "positioner": "_480b748dd3510e64__positioner", "popup": "_50096b232db7709d__popup" }; 8737 var Positioner = (0, import_element12.forwardRef)( 8738 function TooltipPositioner3({ align = "center", className, side = "top", sideOffset = 4, ...props }, ref) { 8739 return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)( 8740 index_parts_exports.Positioner, 8741 { 8742 ref, 8743 align, 8744 side, 8745 sideOffset, 8746 ...props, 8747 className: clsx_default( 8748 resets_default["box-sizing"], 8749 style_default.positioner, 8750 className 8751 ) 8752 } 8753 ); 8754 } 8755 ); 8756 8757 // packages/ui/build-module/tooltip/popup.mjs 8758 var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1); 8759 var STYLE_HASH_ATTRIBUTE3 = "data-wp-hash"; 8760 function getRuntime3() { 8761 const globalScope = globalThis; 8762 if (globalScope.__wpStyleRuntime) { 8763 return globalScope.__wpStyleRuntime; 8764 } 8765 globalScope.__wpStyleRuntime = { 8766 documents: /* @__PURE__ */ new Map(), 8767 styles: /* @__PURE__ */ new Map(), 8768 injectedStyles: /* @__PURE__ */ new WeakMap() 8769 }; 8770 if (typeof document !== "undefined") { 8771 registerDocument3(document); 8772 } 8773 return globalScope.__wpStyleRuntime; 8774 } 8775 function documentContainsStyleHash3(targetDocument, hash) { 8776 if (!targetDocument.head) { 8777 return false; 8778 } 8779 for (const style of targetDocument.head.querySelectorAll( 8780 `style[$STYLE_HASH_ATTRIBUTE3}]` 8781 )) { 8782 if (style.getAttribute(STYLE_HASH_ATTRIBUTE3) === hash) { 8783 return true; 8784 } 8785 } 8786 return false; 8787 } 8788 function injectStyle3(targetDocument, hash, css) { 8789 if (!targetDocument.head) { 8790 return; 8791 } 8792 const runtime = getRuntime3(); 8793 let injectedStyles = runtime.injectedStyles.get(targetDocument); 8794 if (!injectedStyles) { 8795 injectedStyles = /* @__PURE__ */ new Set(); 8796 runtime.injectedStyles.set(targetDocument, injectedStyles); 8797 } 8798 if (injectedStyles.has(hash)) { 8799 return; 8800 } 8801 if (documentContainsStyleHash3(targetDocument, hash)) { 8802 injectedStyles.add(hash); 8803 return; 8804 } 8805 const style = targetDocument.createElement("style"); 8806 style.setAttribute(STYLE_HASH_ATTRIBUTE3, hash); 8807 style.appendChild(targetDocument.createTextNode(css)); 8808 targetDocument.head.appendChild(style); 8809 injectedStyles.add(hash); 8810 } 8811 function registerDocument3(targetDocument) { 8812 const runtime = getRuntime3(); 8813 runtime.documents.set( 8814 targetDocument, 8815 (runtime.documents.get(targetDocument) ?? 0) + 1 8816 ); 8817 for (const [hash, css] of runtime.styles) { 8818 injectStyle3(targetDocument, hash, css); 8819 } 8820 return () => { 8821 const count = runtime.documents.get(targetDocument); 8822 if (count === void 0) { 8823 return; 8824 } 8825 if (count <= 1) { 8826 runtime.documents.delete(targetDocument); 8827 return; 8828 } 8829 runtime.documents.set(targetDocument, count - 1); 8830 }; 8831 } 8832 function registerStyle3(hash, css) { 8833 const runtime = getRuntime3(); 8834 runtime.styles.set(hash, css); 8835 for (const targetDocument of runtime.documents.keys()) { 8836 injectStyle3(targetDocument, hash, css); 8837 } 8838 } 8839 if (typeof process === "undefined" || true) { 8840 registerStyle3("4811d023d1", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._480b748dd3510e64__positioner{z-index:var(--wp-ui-tooltip-z-index,initial)}._50096b232db7709d__popup{background-color:var(--wpds-color-bg-surface-neutral-strong,#fff);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--wpds-elevation-sm,0 1px 2px 0 #0000000d,0 2px 3px 0 #0000000a,0 6px 6px 0 #00000008,0 8px 8px 0 #00000005);color:var(--wpds-color-fg-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:1.4;padding:var(--wpds-dimension-padding-xs,4px) var(--wpds-dimension-padding-sm,8px);@media (forced-colors:active){border-bottom-color:CanvasText;border-bottom-style:solid;border-bottom-width:1px;border-left-color:CanvasText;border-left-style:solid;border-left-width:1px;border-right-color:CanvasText;border-right-style:solid;border-right-width:1px;border-top-color:CanvasText;border-top-style:solid;border-top-width:1px}}}}'); 8841 } 8842 var style_default2 = { "positioner": "_480b748dd3510e64__positioner", "popup": "_50096b232db7709d__popup" }; 8843 var ThemeProvider = unlock(import_theme.privateApis).ThemeProvider; 8844 var POPUP_COLOR = { background: "#1e1e1e" }; 8845 var Popup = (0, import_element13.forwardRef)(function TooltipPopup3({ portal, positioner, children, className, ...props }, ref) { 8846 const popupContent = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ThemeProvider, { color: POPUP_COLOR, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)( 8847 index_parts_exports.Popup, 8848 { 8849 ref, 8850 className: clsx_default(style_default2.popup, className), 8851 ...props, 8852 children 8853 } 8854 ) }); 8855 const positionedPopup = renderSlotWithChildren( 8856 positioner, 8857 /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Positioner, {}), 8858 popupContent 8859 ); 8860 return renderSlotWithChildren(portal, /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Portal, {}), positionedPopup); 8861 }); 8862 8863 // packages/ui/build-module/tooltip/trigger.mjs 8864 var import_element14 = __toESM(require_element(), 1); 8865 var import_jsx_runtime22 = __toESM(require_jsx_runtime(), 1); 8866 var Trigger = (0, import_element14.forwardRef)( 8867 function TooltipTrigger3(props, ref) { 8868 return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(index_parts_exports.Trigger, { ref, ...props }); 8869 } 8870 ); 8871 8872 // packages/ui/build-module/tooltip/root.mjs 8873 var import_jsx_runtime23 = __toESM(require_jsx_runtime(), 1); 8874 function Root(props) { 8875 return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(index_parts_exports.Root, { ...props }); 8876 } 8877 8878 // packages/ui/build-module/tooltip/provider.mjs 8879 var import_jsx_runtime24 = __toESM(require_jsx_runtime(), 1); 8880 function Provider({ ...props }) { 8881 return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(index_parts_exports.Provider, { ...props }); 8882 } 8883 8884 // packages/ui/build-module/visually-hidden/visually-hidden.mjs 8885 var import_element15 = __toESM(require_element(), 1); 8886 var STYLE_HASH_ATTRIBUTE4 = "data-wp-hash"; 8887 function getRuntime4() { 8888 const globalScope = globalThis; 8889 if (globalScope.__wpStyleRuntime) { 8890 return globalScope.__wpStyleRuntime; 8891 } 8892 globalScope.__wpStyleRuntime = { 8893 documents: /* @__PURE__ */ new Map(), 8894 styles: /* @__PURE__ */ new Map(), 8895 injectedStyles: /* @__PURE__ */ new WeakMap() 8896 }; 8897 if (typeof document !== "undefined") { 8898 registerDocument4(document); 8899 } 8900 return globalScope.__wpStyleRuntime; 8901 } 8902 function documentContainsStyleHash4(targetDocument, hash) { 8903 if (!targetDocument.head) { 8904 return false; 8905 } 8906 for (const style of targetDocument.head.querySelectorAll( 8907 `style[$STYLE_HASH_ATTRIBUTE4}]` 8908 )) { 8909 if (style.getAttribute(STYLE_HASH_ATTRIBUTE4) === hash) { 8910 return true; 8911 } 8912 } 8913 return false; 8914 } 8915 function injectStyle4(targetDocument, hash, css) { 8916 if (!targetDocument.head) { 8917 return; 8918 } 8919 const runtime = getRuntime4(); 8920 let injectedStyles = runtime.injectedStyles.get(targetDocument); 8921 if (!injectedStyles) { 8922 injectedStyles = /* @__PURE__ */ new Set(); 8923 runtime.injectedStyles.set(targetDocument, injectedStyles); 8924 } 8925 if (injectedStyles.has(hash)) { 8926 return; 8927 } 8928 if (documentContainsStyleHash4(targetDocument, hash)) { 8929 injectedStyles.add(hash); 8930 return; 8931 } 8932 const style = targetDocument.createElement("style"); 8933 style.setAttribute(STYLE_HASH_ATTRIBUTE4, hash); 8934 style.appendChild(targetDocument.createTextNode(css)); 8935 targetDocument.head.appendChild(style); 8936 injectedStyles.add(hash); 8937 } 8938 function registerDocument4(targetDocument) { 8939 const runtime = getRuntime4(); 8940 runtime.documents.set( 8941 targetDocument, 8942 (runtime.documents.get(targetDocument) ?? 0) + 1 8943 ); 8944 for (const [hash, css] of runtime.styles) { 8945 injectStyle4(targetDocument, hash, css); 8946 } 8947 return () => { 8948 const count = runtime.documents.get(targetDocument); 8949 if (count === void 0) { 8950 return; 8951 } 8952 if (count <= 1) { 8953 runtime.documents.delete(targetDocument); 8954 return; 8955 } 8956 runtime.documents.set(targetDocument, count - 1); 8957 }; 8958 } 8959 function registerStyle4(hash, css) { 8960 const runtime = getRuntime4(); 8961 runtime.styles.set(hash, css); 8962 for (const targetDocument of runtime.documents.keys()) { 8963 injectStyle4(targetDocument, hash, css); 8964 } 8965 } 8966 if (typeof process === "undefined" || true) { 8967 registerStyle4("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}}}"); 8968 } 8969 var style_default3 = { "visually-hidden": "f37b9e2e191ebd66__visually-hidden" }; 8970 var VisuallyHidden = (0, import_element15.forwardRef)( 8971 function VisuallyHidden2({ render, ...restProps }, ref) { 8972 const element = useRender({ 8973 render, 8974 ref, 8975 props: mergeProps( 8976 { className: style_default3["visually-hidden"] }, 8977 restProps, 8978 { 8979 // @ts-expect-error Arbitrary data-* attributes aren't indexable on the typed div props. Kept hardcoded so consumers can't change or remove it. 8980 "data-visually-hidden": "" 8981 } 8982 ) 8983 }); 8984 return element; 8985 } 8986 ); 8987 8988 // packages/admin-ui/build-module/navigable-region/index.mjs 8989 var import_element16 = __toESM(require_element(), 1); 8990 var import_jsx_runtime25 = __toESM(require_jsx_runtime(), 1); 8991 var NavigableRegion = (0, import_element16.forwardRef)( 8992 ({ children, className, ariaLabel, as: Tag = "div", ...props }, ref) => { 8993 return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( 8994 Tag, 8995 { 8996 ref, 8997 className: clsx_default("admin-ui-navigable-region", className), 8998 "aria-label": ariaLabel, 8999 role: "region", 9000 tabIndex: "-1", 9001 ...props, 9002 children 9003 } 9004 ); 9005 } 9006 ); 9007 NavigableRegion.displayName = "NavigableRegion"; 9008 var navigable_region_default = NavigableRegion; 9009 9010 // packages/edit-post/build-module/components/layout/index.mjs 9011 var import_editor18 = __toESM(require_editor(), 1); 9012 var import_data25 = __toESM(require_data(), 1); 9013 var import_block_editor2 = __toESM(require_block_editor(), 1); 9014 9015 // packages/global-styles-engine/build-module/utils/common.mjs 9016 var import_style_engine = __toESM(require_style_engine(), 1); 9017 var ROOT_BLOCK_SELECTOR = "body"; 9018 var ROOT_CSS_PROPERTIES_SELECTOR = ":root"; 9019 9020 // packages/global-styles-engine/build-module/core/render.mjs 9021 var import_blocks = __toESM(require_blocks(), 1); 9022 var import_style_engine2 = __toESM(require_style_engine(), 1); 9023 var import_data = __toESM(require_data(), 1); 9024 9025 // packages/global-styles-engine/build-module/utils/spacing.mjs 9026 function getSpacingPresetCssVar(value) { 9027 if (!value) { 9028 return; 9029 } 9030 const slug = value.match(/var:preset\|spacing\|(.+)/); 9031 if (!slug) { 9032 return value; 9033 } 9034 return `var(--wp--preset--spacing--$slug[1]})`; 9035 } 9036 9037 // packages/global-styles-engine/build-module/utils/gap.mjs 9038 function getGapBoxControlValueFromStyle(blockGapValue) { 9039 if (!blockGapValue) { 9040 return null; 9041 } 9042 const isValueString = typeof blockGapValue === "string"; 9043 return { 9044 top: isValueString ? blockGapValue : blockGapValue?.top, 9045 left: isValueString ? blockGapValue : blockGapValue?.left 9046 }; 9047 } 9048 function getGapCSSValue(blockGapValue, defaultValue = "0") { 9049 const blockGapBoxControlValue = getGapBoxControlValueFromStyle(blockGapValue); 9050 if (!blockGapBoxControlValue) { 9051 return null; 9052 } 9053 const row = getSpacingPresetCssVar(blockGapBoxControlValue?.top) || defaultValue; 9054 const column = getSpacingPresetCssVar(blockGapBoxControlValue?.left) || defaultValue; 9055 return row === column ? row : `$row} $column}`; 9056 } 9057 9058 // packages/global-styles-engine/build-module/utils/layout.mjs 9059 var LAYOUT_DEFINITIONS = { 9060 default: { 9061 name: "default", 9062 slug: "flow", 9063 className: "is-layout-flow", 9064 baseStyles: [ 9065 { 9066 selector: " > .alignleft", 9067 rules: { 9068 float: "left", 9069 "margin-inline-start": "0", 9070 "margin-inline-end": "2em" 9071 } 9072 }, 9073 { 9074 selector: " > .alignright", 9075 rules: { 9076 float: "right", 9077 "margin-inline-start": "2em", 9078 "margin-inline-end": "0" 9079 } 9080 }, 9081 { 9082 selector: " > .aligncenter", 9083 rules: { 9084 "margin-left": "auto !important", 9085 "margin-right": "auto !important" 9086 } 9087 } 9088 ], 9089 spacingStyles: [ 9090 { 9091 selector: " > :first-child", 9092 rules: { 9093 "margin-block-start": "0" 9094 } 9095 }, 9096 { 9097 selector: " > :last-child", 9098 rules: { 9099 "margin-block-end": "0" 9100 } 9101 }, 9102 { 9103 selector: " > *", 9104 rules: { 9105 "margin-block-start": null, 9106 "margin-block-end": "0" 9107 } 9108 } 9109 ] 9110 }, 9111 constrained: { 9112 name: "constrained", 9113 slug: "constrained", 9114 className: "is-layout-constrained", 9115 baseStyles: [ 9116 { 9117 selector: " > .alignleft", 9118 rules: { 9119 float: "left", 9120 "margin-inline-start": "0", 9121 "margin-inline-end": "2em" 9122 } 9123 }, 9124 { 9125 selector: " > .alignright", 9126 rules: { 9127 float: "right", 9128 "margin-inline-start": "2em", 9129 "margin-inline-end": "0" 9130 } 9131 }, 9132 { 9133 selector: " > .aligncenter", 9134 rules: { 9135 "margin-left": "auto !important", 9136 "margin-right": "auto !important" 9137 } 9138 }, 9139 { 9140 selector: " > :where(:not(.alignleft):not(.alignright):not(.alignfull))", 9141 rules: { 9142 "max-width": "var(--wp--style--global--content-size)", 9143 "margin-left": "auto !important", 9144 "margin-right": "auto !important" 9145 } 9146 }, 9147 { 9148 selector: " > .alignwide", 9149 rules: { 9150 "max-width": "var(--wp--style--global--wide-size)" 9151 } 9152 } 9153 ], 9154 spacingStyles: [ 9155 { 9156 selector: " > :first-child", 9157 rules: { 9158 "margin-block-start": "0" 9159 } 9160 }, 9161 { 9162 selector: " > :last-child", 9163 rules: { 9164 "margin-block-end": "0" 9165 } 9166 }, 9167 { 9168 selector: " > *", 9169 rules: { 9170 "margin-block-start": null, 9171 "margin-block-end": "0" 9172 } 9173 } 9174 ] 9175 }, 9176 flex: { 9177 name: "flex", 9178 slug: "flex", 9179 className: "is-layout-flex", 9180 displayMode: "flex", 9181 baseStyles: [ 9182 { 9183 selector: "", 9184 rules: { 9185 "flex-wrap": "wrap", 9186 "align-items": "center" 9187 } 9188 }, 9189 { 9190 selector: " > :is(*, div)", 9191 // :is(*, div) instead of just * increases the specificity by 001. 9192 rules: { 9193 margin: "0" 9194 } 9195 } 9196 ], 9197 spacingStyles: [ 9198 { 9199 selector: "", 9200 rules: { 9201 gap: null 9202 } 9203 } 9204 ] 9205 }, 9206 grid: { 9207 name: "grid", 9208 slug: "grid", 9209 className: "is-layout-grid", 9210 displayMode: "grid", 9211 baseStyles: [ 9212 { 9213 selector: " > :is(*, div)", 9214 // :is(*, div) instead of just * increases the specificity by 001. 9215 rules: { 9216 margin: "0" 9217 } 9218 } 9219 ], 9220 spacingStyles: [ 9221 { 9222 selector: "", 9223 rules: { 9224 gap: null 9225 } 9226 } 9227 ] 9228 } 9229 }; 9230 9231 // packages/global-styles-engine/build-module/core/render.mjs 9232 function getLayoutStyles({ 9233 layoutDefinitions = LAYOUT_DEFINITIONS, 9234 style, 9235 selector, 9236 hasBlockGapSupport, 9237 hasFallbackGapSupport, 9238 fallbackGapValue 9239 }) { 9240 let ruleset = ""; 9241 let gapValue = hasBlockGapSupport ? getGapCSSValue(style?.spacing?.blockGap) : ""; 9242 if (hasFallbackGapSupport) { 9243 if (selector === ROOT_BLOCK_SELECTOR) { 9244 gapValue = !gapValue ? "0.5em" : gapValue; 9245 } else if (!hasBlockGapSupport && fallbackGapValue) { 9246 gapValue = fallbackGapValue; 9247 } 9248 } 9249 if (gapValue && layoutDefinitions) { 9250 Object.values(layoutDefinitions).forEach( 9251 ({ className, name, spacingStyles }) => { 9252 if (!hasBlockGapSupport && "flex" !== name && "grid" !== name) { 9253 return; 9254 } 9255 if (spacingStyles?.length) { 9256 spacingStyles.forEach((spacingStyle) => { 9257 const declarations = []; 9258 if (spacingStyle.rules) { 9259 Object.entries(spacingStyle.rules).forEach( 9260 ([cssProperty, cssValue]) => { 9261 declarations.push( 9262 `$cssProperty}: $cssValue ? cssValue : gapValue}` 9263 ); 9264 } 9265 ); 9266 } 9267 if (declarations.length) { 9268 let combinedSelector = ""; 9269 if (!hasBlockGapSupport) { 9270 combinedSelector = selector === ROOT_BLOCK_SELECTOR ? `:where(.$className}$spacingStyle?.selector || ""})` : `:where($selector}.$className}$spacingStyle?.selector || ""})`; 9271 } else { 9272 combinedSelector = selector === ROOT_BLOCK_SELECTOR ? `:root :where(.$className})$spacingStyle?.selector || ""}` : `:root :where($selector}-$className})$spacingStyle?.selector || ""}`; 9273 } 9274 ruleset += `$combinedSelector} { $declarations.join( 9275 "; " 9276 )}; }`; 9277 } 9278 }); 9279 } 9280 } 9281 ); 9282 if (selector === ROOT_BLOCK_SELECTOR && hasBlockGapSupport) { 9283 ruleset += `$ROOT_CSS_PROPERTIES_SELECTOR} { --wp--style--block-gap: $gapValue}; }`; 9284 } 9285 } 9286 if (selector === ROOT_BLOCK_SELECTOR && layoutDefinitions) { 9287 const validDisplayModes = ["block", "flex", "grid"]; 9288 Object.values(layoutDefinitions).forEach( 9289 ({ className, displayMode, baseStyles }) => { 9290 if (displayMode && validDisplayModes.includes(displayMode)) { 9291 ruleset += `$selector} .$className} { display:$displayMode}; }`; 9292 } 9293 if (baseStyles?.length) { 9294 baseStyles.forEach((baseStyle) => { 9295 const declarations = []; 9296 if (baseStyle.rules) { 9297 Object.entries(baseStyle.rules).forEach( 9298 ([cssProperty, cssValue]) => { 9299 declarations.push( 9300 `$cssProperty}: $cssValue}` 9301 ); 9302 } 9303 ); 9304 } 9305 if (declarations.length) { 9306 const combinedSelector = `.$className}$baseStyle?.selector || ""}`; 9307 ruleset += `$combinedSelector} { $declarations.join( 9308 "; " 9309 )}; }`; 9310 } 9311 }); 9312 } 9313 } 9314 ); 9315 } 9316 return ruleset; 9317 } 9318 9319 // packages/edit-post/build-module/components/layout/index.mjs 9320 var import_plugins = __toESM(require_plugins(), 1); 9321 var import_i18n14 = __toESM(require_i18n(), 1); 9322 var import_element27 = __toESM(require_element(), 1); 9323 var import_notices3 = __toESM(require_notices(), 1); 9324 var import_preferences10 = __toESM(require_preferences(), 1); 9325 var import_commands2 = __toESM(require_commands(), 1); 9326 var import_block_library = __toESM(require_block_library(), 1); 9327 var import_url5 = __toESM(require_url(), 1); 9328 var import_html_entities = __toESM(require_html_entities(), 1); 9329 var import_core_data8 = __toESM(require_core_data(), 1); 9330 var import_components9 = __toESM(require_components(), 1); 9331 var import_compose3 = __toESM(require_compose(), 1); 9332 9333 // packages/edit-post/build-module/components/back-button/index.mjs 9334 var import_editor2 = __toESM(require_editor(), 1); 9335 var import_components2 = __toESM(require_components(), 1); 9336 9337 // packages/edit-post/build-module/components/back-button/fullscreen-mode-close.mjs 9338 var import_data2 = __toESM(require_data(), 1); 9339 var import_components = __toESM(require_components(), 1); 9340 var import_i18n = __toESM(require_i18n(), 1); 9341 var import_url = __toESM(require_url(), 1); 9342 var import_editor = __toESM(require_editor(), 1); 9343 var import_core_data = __toESM(require_core_data(), 1); 9344 var import_compose = __toESM(require_compose(), 1); 9345 var import_jsx_runtime26 = __toESM(require_jsx_runtime(), 1); 9346 var siteIconVariants = { 9347 edit: { 9348 clipPath: "inset(0% round 0px)" 9349 }, 9350 hover: { 9351 clipPath: "inset( 22% round 2px )" 9352 }, 9353 tap: { 9354 clipPath: "inset(0% round 0px)" 9355 } 9356 }; 9357 var toggleHomeIconVariants = { 9358 edit: { 9359 opacity: 0, 9360 scale: 0.2 9361 }, 9362 hover: { 9363 opacity: 1, 9364 scale: 1, 9365 clipPath: "inset( 22% round 2px )" 9366 } 9367 }; 9368 function FullscreenModeClose({ showTooltip, icon, href, initialPost }) { 9369 const { isRequestingSiteIcon, postType, siteIconUrl } = (0, import_data2.useSelect)( 9370 (select3) => { 9371 const { getCurrentPostType } = select3(import_editor.store); 9372 const { getEntityRecord, getPostType, isResolving } = select3(import_core_data.store); 9373 const siteData = getEntityRecord("root", "__unstableBase", void 0) || {}; 9374 const _postType = initialPost?.type || getCurrentPostType(); 9375 return { 9376 isRequestingSiteIcon: isResolving("getEntityRecord", [ 9377 "root", 9378 "__unstableBase", 9379 void 0 9380 ]), 9381 postType: getPostType(_postType), 9382 siteIconUrl: siteData.site_icon_url 9383 }; 9384 }, 9385 [initialPost?.type] 9386 ); 9387 const disableMotion = (0, import_compose.useReducedMotion)(); 9388 const transition = { 9389 duration: disableMotion ? 0 : 0.2 9390 }; 9391 if (!postType) { 9392 return null; 9393 } 9394 let siteIconContent; 9395 if (isRequestingSiteIcon && !siteIconUrl) { 9396 siteIconContent = /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "edit-post-fullscreen-mode-close-site-icon__image" }); 9397 } else if (siteIconUrl) { 9398 siteIconContent = /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( 9399 "img", 9400 { 9401 className: "edit-post-fullscreen-mode-close-site-icon__image", 9402 alt: (0, import_i18n.__)("Site Icon"), 9403 src: siteIconUrl 9404 } 9405 ); 9406 } else { 9407 siteIconContent = /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( 9408 import_components.Icon, 9409 { 9410 className: "edit-post-fullscreen-mode-close-site-icon__icon", 9411 icon: wordpress_default, 9412 size: 48 9413 } 9414 ); 9415 } 9416 const buttonIcon = icon ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_components.Icon, { size: "36px", icon }) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "edit-post-fullscreen-mode-close-site-icon", children: siteIconContent }); 9417 const classes = clsx_default("edit-post-fullscreen-mode-close", { 9418 "has-icon": siteIconUrl 9419 }); 9420 const buttonHref = href ?? (0, import_url.addQueryArgs)("edit.php", { 9421 post_type: postType.slug 9422 }); 9423 const buttonLabel = postType?.labels?.view_items ?? (0, import_i18n.__)("Back"); 9424 const hasAdminBarInEditor = window.__experimentalAdminBarInEditor; 9425 return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)( 9426 import_components.__unstableMotion.div, 9427 { 9428 className: "edit-post-fullscreen-mode-close__view-mode-toggle", 9429 animate: "edit", 9430 initial: "edit", 9431 whileHover: "hover", 9432 whileTap: "tap", 9433 transition, 9434 children: [ 9435 /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( 9436 import_components.Button, 9437 { 9438 __next40pxDefaultSize: true, 9439 className: classes, 9440 href: buttonHref, 9441 label: buttonLabel, 9442 showTooltip, 9443 tooltipPosition: "bottom", 9444 children: !hasAdminBarInEditor && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( 9445 import_components.__unstableMotion.div, 9446 { 9447 variants: !disableMotion && siteIconVariants, 9448 children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "edit-post-fullscreen-mode-close__view-mode-toggle-icon", children: buttonIcon }) 9449 } 9450 ) 9451 } 9452 ), 9453 hasAdminBarInEditor ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "edit-post-fullscreen-mode-close__back-icon", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_components.Icon, { icon: (0, import_i18n.isRTL)() ? chevron_right_default : chevron_left_default }) }) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( 9454 import_components.__unstableMotion.div, 9455 { 9456 className: clsx_default( 9457 "edit-post-fullscreen-mode-close__back-icon", 9458 { 9459 "has-site-icon": siteIconUrl 9460 } 9461 ), 9462 variants: !disableMotion && toggleHomeIconVariants, 9463 children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_components.Icon, { icon: (0, import_i18n.isRTL)() ? arrow_up_right_default : arrow_up_left_default }) 9464 } 9465 ) 9466 ] 9467 } 9468 ); 9469 } 9470 var fullscreen_mode_close_default = FullscreenModeClose; 9471 9472 // packages/edit-post/build-module/lock-unlock.mjs 9473 var import_private_apis2 = __toESM(require_private_apis(), 1); 9474 var { lock: lock2, unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( 9475 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", 9476 "@wordpress/edit-post" 9477 ); 9478 9479 // packages/edit-post/build-module/components/back-button/index.mjs 9480 var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1); 9481 var { BackButton: BackButtonFill } = unlock2(import_editor2.privateApis); 9482 var slideX = { 9483 hidden: { x: "-100%" }, 9484 distractionFreeInactive: { x: 0 }, 9485 hover: { x: 0, transition: { type: "tween", delay: 0.2 } } 9486 }; 9487 function BackButton({ initialPost }) { 9488 return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(BackButtonFill, { children: ({ length }) => length <= 1 && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( 9489 import_components2.__unstableMotion.div, 9490 { 9491 variants: slideX, 9492 transition: { type: "tween", delay: 0.8 }, 9493 children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( 9494 fullscreen_mode_close_default, 9495 { 9496 showTooltip: true, 9497 initialPost 9498 } 9499 ) 9500 } 9501 ) }); 9502 } 9503 var back_button_default = BackButton; 9504 9505 // packages/edit-post/build-module/components/editor-initialization/listener-hooks.mjs 9506 var import_data3 = __toESM(require_data(), 1); 9507 var import_element17 = __toESM(require_element(), 1); 9508 var import_editor3 = __toESM(require_editor(), 1); 9509 var import_core_data2 = __toESM(require_core_data(), 1); 9510 9511 // packages/edit-post/build-module/store/constants.mjs 9512 var STORE_NAME = "core/edit-post"; 9513 var VIEW_AS_LINK_SELECTOR = "#wp-admin-bar-view a"; 9514 var VIEW_AS_PREVIEW_LINK_SELECTOR = "#wp-admin-bar-preview a"; 9515 9516 // packages/edit-post/build-module/components/editor-initialization/listener-hooks.mjs 9517 var useUpdatePostLinkListener = () => { 9518 const { isViewable, newPermalink } = (0, import_data3.useSelect)((select3) => { 9519 const { getPostType } = select3(import_core_data2.store); 9520 const { getCurrentPost, getEditedPostAttribute } = select3(import_editor3.store); 9521 const postType = getPostType(getEditedPostAttribute("type")); 9522 return { 9523 isViewable: postType?.viewable, 9524 newPermalink: getCurrentPost().link 9525 }; 9526 }, []); 9527 const nodeToUpdateRef = (0, import_element17.useRef)(); 9528 (0, import_element17.useEffect)(() => { 9529 nodeToUpdateRef.current = document.querySelector(VIEW_AS_PREVIEW_LINK_SELECTOR) || document.querySelector(VIEW_AS_LINK_SELECTOR); 9530 }, []); 9531 (0, import_element17.useEffect)(() => { 9532 if (!newPermalink || !nodeToUpdateRef.current) { 9533 return; 9534 } 9535 if (!isViewable) { 9536 nodeToUpdateRef.current.style.display = "none"; 9537 return; 9538 } 9539 nodeToUpdateRef.current.style.display = ""; 9540 nodeToUpdateRef.current.setAttribute("href", newPermalink); 9541 }, [newPermalink, isViewable]); 9542 }; 9543 9544 // packages/edit-post/build-module/components/editor-initialization/index.mjs 9545 function EditorInitialization() { 9546 useUpdatePostLinkListener(); 9547 return null; 9548 } 9549 9550 // packages/edit-post/build-module/components/keyboard-shortcuts/index.mjs 9551 var import_element18 = __toESM(require_element(), 1); 9552 var import_data7 = __toESM(require_data(), 1); 9553 var import_keyboard_shortcuts = __toESM(require_keyboard_shortcuts(), 1); 9554 var import_i18n3 = __toESM(require_i18n(), 1); 9555 9556 // packages/edit-post/build-module/store/index.mjs 9557 var import_data6 = __toESM(require_data(), 1); 9558 9559 // packages/edit-post/build-module/store/reducer.mjs 9560 var import_data4 = __toESM(require_data(), 1); 9561 function isSavingMetaBoxes(state = false, action) { 9562 switch (action.type) { 9563 case "REQUEST_META_BOX_UPDATES": 9564 return true; 9565 case "META_BOX_UPDATES_SUCCESS": 9566 case "META_BOX_UPDATES_FAILURE": 9567 return false; 9568 default: 9569 return state; 9570 } 9571 } 9572 function mergeMetaboxes(metaboxes = [], newMetaboxes) { 9573 const mergedMetaboxes = [...metaboxes]; 9574 for (const metabox of newMetaboxes) { 9575 const existing = mergedMetaboxes.findIndex( 9576 (box) => box.id === metabox.id 9577 ); 9578 if (existing !== -1) { 9579 mergedMetaboxes[existing] = { 9580 ...mergedMetaboxes[existing], 9581 ...metabox 9582 }; 9583 } else { 9584 mergedMetaboxes.push(metabox); 9585 } 9586 } 9587 return mergedMetaboxes; 9588 } 9589 function metaBoxLocations(state = {}, action) { 9590 switch (action.type) { 9591 case "SET_META_BOXES_PER_LOCATIONS": { 9592 const newState = { ...state }; 9593 for (const [location, metaboxes] of Object.entries( 9594 action.metaBoxesPerLocation 9595 )) { 9596 newState[location] = mergeMetaboxes( 9597 newState[location], 9598 metaboxes 9599 ); 9600 } 9601 return newState; 9602 } 9603 } 9604 return state; 9605 } 9606 function metaBoxesInitialized(state = false, action) { 9607 switch (action.type) { 9608 case "META_BOXES_INITIALIZED": 9609 return true; 9610 } 9611 return state; 9612 } 9613 var metaBoxes = (0, import_data4.combineReducers)({ 9614 isSaving: isSavingMetaBoxes, 9615 locations: metaBoxLocations, 9616 initialized: metaBoxesInitialized 9617 }); 9618 var reducer_default = (0, import_data4.combineReducers)({ 9619 metaBoxes 9620 }); 9621 9622 // packages/edit-post/build-module/store/actions.mjs 9623 var actions_exports = {}; 9624 __export(actions_exports, { 9625 __experimentalSetPreviewDeviceType: () => __experimentalSetPreviewDeviceType, 9626 __unstableCreateTemplate: () => __unstableCreateTemplate, 9627 closeGeneralSidebar: () => closeGeneralSidebar, 9628 closeModal: () => closeModal, 9629 closePublishSidebar: () => closePublishSidebar, 9630 hideBlockTypes: () => hideBlockTypes, 9631 initializeMetaBoxes: () => initializeMetaBoxes, 9632 metaBoxUpdatesFailure: () => metaBoxUpdatesFailure, 9633 metaBoxUpdatesSuccess: () => metaBoxUpdatesSuccess, 9634 openGeneralSidebar: () => openGeneralSidebar, 9635 openModal: () => openModal, 9636 openPublishSidebar: () => openPublishSidebar, 9637 removeEditorPanel: () => removeEditorPanel, 9638 requestMetaBoxUpdates: () => requestMetaBoxUpdates, 9639 setAvailableMetaBoxesPerLocation: () => setAvailableMetaBoxesPerLocation, 9640 setIsEditingTemplate: () => setIsEditingTemplate, 9641 setIsInserterOpened: () => setIsInserterOpened, 9642 setIsListViewOpened: () => setIsListViewOpened, 9643 showBlockTypes: () => showBlockTypes, 9644 switchEditorMode: () => switchEditorMode, 9645 toggleDistractionFree: () => toggleDistractionFree, 9646 toggleEditorPanelEnabled: () => toggleEditorPanelEnabled, 9647 toggleEditorPanelOpened: () => toggleEditorPanelOpened, 9648 toggleFeature: () => toggleFeature, 9649 toggleFullscreenMode: () => toggleFullscreenMode, 9650 togglePinnedPluginItem: () => togglePinnedPluginItem, 9651 togglePublishSidebar: () => togglePublishSidebar, 9652 updatePreferredStyleVariations: () => updatePreferredStyleVariations 9653 }); 9654 var import_api_fetch = __toESM(require_api_fetch(), 1); 9655 var import_preferences = __toESM(require_preferences(), 1); 9656 var import_editor4 = __toESM(require_editor(), 1); 9657 var import_deprecated = __toESM(require_deprecated(), 1); 9658 var import_hooks = __toESM(require_hooks(), 1); 9659 var import_core_data3 = __toESM(require_core_data(), 1); 9660 var import_notices = __toESM(require_notices(), 1); 9661 var import_i18n2 = __toESM(require_i18n(), 1); 9662 9663 // packages/edit-post/build-module/utils/meta-boxes.mjs 9664 var getMetaBoxContainer = (location) => { 9665 const area = document.querySelector( 9666 `.edit-post-meta-boxes-area.is-$location} .metabox-location-$location}` 9667 ); 9668 if (area) { 9669 return area; 9670 } 9671 return document.querySelector("#metaboxes .metabox-location-" + location); 9672 }; 9673 9674 // packages/edit-post/build-module/store/actions.mjs 9675 var { interfaceStore } = unlock2(import_editor4.privateApis); 9676 var openGeneralSidebar = (name) => ({ registry }) => { 9677 registry.dispatch(interfaceStore).enableComplementaryArea("core", name); 9678 }; 9679 var closeGeneralSidebar = () => ({ registry }) => registry.dispatch(interfaceStore).disableComplementaryArea("core"); 9680 var openModal = (name) => ({ registry }) => { 9681 (0, import_deprecated.default)("select( 'core/edit-post' ).openModal( name )", { 9682 since: "6.3", 9683 alternative: "select( 'core/interface').openModal( name )" 9684 }); 9685 return registry.dispatch(interfaceStore).openModal(name); 9686 }; 9687 var closeModal = () => ({ registry }) => { 9688 (0, import_deprecated.default)("select( 'core/edit-post' ).closeModal()", { 9689 since: "6.3", 9690 alternative: "select( 'core/interface').closeModal()" 9691 }); 9692 return registry.dispatch(interfaceStore).closeModal(); 9693 }; 9694 var openPublishSidebar = () => ({ registry }) => { 9695 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).openPublishSidebar", { 9696 since: "6.6", 9697 alternative: "dispatch( 'core/editor').openPublishSidebar" 9698 }); 9699 registry.dispatch(import_editor4.store).openPublishSidebar(); 9700 }; 9701 var closePublishSidebar = () => ({ registry }) => { 9702 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).closePublishSidebar", { 9703 since: "6.6", 9704 alternative: "dispatch( 'core/editor').closePublishSidebar" 9705 }); 9706 registry.dispatch(import_editor4.store).closePublishSidebar(); 9707 }; 9708 var togglePublishSidebar = () => ({ registry }) => { 9709 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).togglePublishSidebar", { 9710 since: "6.6", 9711 alternative: "dispatch( 'core/editor').togglePublishSidebar" 9712 }); 9713 registry.dispatch(import_editor4.store).togglePublishSidebar(); 9714 }; 9715 var toggleEditorPanelEnabled = (panelName) => ({ registry }) => { 9716 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).toggleEditorPanelEnabled", { 9717 since: "6.5", 9718 alternative: "dispatch( 'core/editor').toggleEditorPanelEnabled" 9719 }); 9720 registry.dispatch(import_editor4.store).toggleEditorPanelEnabled(panelName); 9721 }; 9722 var toggleEditorPanelOpened = (panelName) => ({ registry }) => { 9723 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).toggleEditorPanelOpened", { 9724 since: "6.5", 9725 alternative: "dispatch( 'core/editor').toggleEditorPanelOpened" 9726 }); 9727 registry.dispatch(import_editor4.store).toggleEditorPanelOpened(panelName); 9728 }; 9729 var removeEditorPanel = (panelName) => ({ registry }) => { 9730 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).removeEditorPanel", { 9731 since: "6.5", 9732 alternative: "dispatch( 'core/editor').removeEditorPanel" 9733 }); 9734 registry.dispatch(import_editor4.store).removeEditorPanel(panelName); 9735 }; 9736 var toggleFeature = (feature) => ({ registry }) => registry.dispatch(import_preferences.store).toggle("core/edit-post", feature); 9737 var switchEditorMode = (mode) => ({ registry }) => { 9738 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).switchEditorMode", { 9739 since: "6.6", 9740 alternative: "dispatch( 'core/editor').switchEditorMode" 9741 }); 9742 registry.dispatch(import_editor4.store).switchEditorMode(mode); 9743 }; 9744 var togglePinnedPluginItem = (pluginName) => ({ registry }) => { 9745 const isPinned = registry.select(interfaceStore).isItemPinned("core", pluginName); 9746 registry.dispatch(interfaceStore)[isPinned ? "unpinItem" : "pinItem"]("core", pluginName); 9747 }; 9748 function updatePreferredStyleVariations() { 9749 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).updatePreferredStyleVariations", { 9750 since: "6.6", 9751 hint: "Preferred Style Variations are not supported anymore." 9752 }); 9753 return { type: "NOTHING" }; 9754 } 9755 var showBlockTypes = (blockNames) => ({ registry }) => { 9756 unlock2(registry.dispatch(import_editor4.store)).showBlockTypes(blockNames); 9757 }; 9758 var hideBlockTypes = (blockNames) => ({ registry }) => { 9759 unlock2(registry.dispatch(import_editor4.store)).hideBlockTypes(blockNames); 9760 }; 9761 function setAvailableMetaBoxesPerLocation(metaBoxesPerLocation) { 9762 return { 9763 type: "SET_META_BOXES_PER_LOCATIONS", 9764 metaBoxesPerLocation 9765 }; 9766 } 9767 var requestMetaBoxUpdates = () => async ({ registry, select: select3, dispatch: dispatch2 }) => { 9768 dispatch2({ 9769 type: "REQUEST_META_BOX_UPDATES" 9770 }); 9771 if (window.tinyMCE) { 9772 window.tinyMCE.triggerSave(); 9773 } 9774 const baseFormData = new window.FormData( 9775 document.querySelector(".metabox-base-form") 9776 ); 9777 const postId = baseFormData.get("post_ID"); 9778 const postType = baseFormData.get("post_type"); 9779 const post = registry.select(import_core_data3.store).getEditedEntityRecord("postType", postType, postId); 9780 const additionalData = [ 9781 post.comment_status ? ["comment_status", post.comment_status] : false, 9782 post.ping_status ? ["ping_status", post.ping_status] : false, 9783 post.sticky ? ["sticky", post.sticky] : false, 9784 post.author ? ["post_author", post.author] : false 9785 ].filter(Boolean); 9786 const activeMetaBoxLocations = select3.getActiveMetaBoxLocations(); 9787 const formDataToMerge = [ 9788 baseFormData, 9789 ...activeMetaBoxLocations.map( 9790 (location) => new window.FormData(getMetaBoxContainer(location)) 9791 ) 9792 ]; 9793 const formData = formDataToMerge.reduce((memo, currentFormData) => { 9794 for (const [key, value] of currentFormData) { 9795 memo.append(key, value); 9796 } 9797 return memo; 9798 }, new window.FormData()); 9799 additionalData.forEach( 9800 ([key, value]) => formData.append(key, value) 9801 ); 9802 try { 9803 await (0, import_api_fetch.default)({ 9804 url: window._wpMetaBoxUrl, 9805 method: "POST", 9806 body: formData, 9807 parse: false 9808 }); 9809 dispatch2.metaBoxUpdatesSuccess(); 9810 } catch { 9811 dispatch2.metaBoxUpdatesFailure(); 9812 } 9813 }; 9814 function metaBoxUpdatesSuccess() { 9815 return { 9816 type: "META_BOX_UPDATES_SUCCESS" 9817 }; 9818 } 9819 function metaBoxUpdatesFailure() { 9820 return { 9821 type: "META_BOX_UPDATES_FAILURE" 9822 }; 9823 } 9824 var __experimentalSetPreviewDeviceType = (deviceType) => ({ registry }) => { 9825 (0, import_deprecated.default)( 9826 "dispatch( 'core/edit-post' ).__experimentalSetPreviewDeviceType", 9827 { 9828 since: "6.5", 9829 version: "6.7", 9830 hint: "registry.dispatch( editorStore ).setDeviceType" 9831 } 9832 ); 9833 registry.dispatch(import_editor4.store).setDeviceType(deviceType); 9834 }; 9835 var setIsInserterOpened = (value) => ({ registry }) => { 9836 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).setIsInserterOpened", { 9837 since: "6.5", 9838 alternative: "dispatch( 'core/editor').setIsInserterOpened" 9839 }); 9840 registry.dispatch(import_editor4.store).setIsInserterOpened(value); 9841 }; 9842 var setIsListViewOpened = (isOpen) => ({ registry }) => { 9843 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).setIsListViewOpened", { 9844 since: "6.5", 9845 alternative: "dispatch( 'core/editor').setIsListViewOpened" 9846 }); 9847 registry.dispatch(import_editor4.store).setIsListViewOpened(isOpen); 9848 }; 9849 function setIsEditingTemplate() { 9850 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).setIsEditingTemplate", { 9851 since: "6.5", 9852 alternative: "dispatch( 'core/editor').setRenderingMode" 9853 }); 9854 return { type: "NOTHING" }; 9855 } 9856 function __unstableCreateTemplate() { 9857 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).__unstableCreateTemplate", { 9858 since: "6.5" 9859 }); 9860 return { type: "NOTHING" }; 9861 } 9862 var metaBoxesInitialized2 = false; 9863 var initializeMetaBoxes = () => ({ registry, select: select3, dispatch: dispatch2 }) => { 9864 const isEditorReady = registry.select(import_editor4.store).__unstableIsEditorReady(); 9865 if (!isEditorReady) { 9866 return; 9867 } 9868 if (metaBoxesInitialized2) { 9869 return; 9870 } 9871 const postType = registry.select(import_editor4.store).getCurrentPostType(); 9872 if (window.postboxes.page !== postType) { 9873 window.postboxes.add_postbox_toggles(postType); 9874 } 9875 metaBoxesInitialized2 = true; 9876 (0, import_hooks.addAction)( 9877 "editor.savePost", 9878 "core/edit-post/save-metaboxes", 9879 async (post, options) => { 9880 if (!options.isAutosave && select3.hasMetaBoxes()) { 9881 await dispatch2.requestMetaBoxUpdates(); 9882 } 9883 } 9884 ); 9885 dispatch2({ 9886 type: "META_BOXES_INITIALIZED" 9887 }); 9888 }; 9889 var toggleDistractionFree = () => ({ registry }) => { 9890 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).toggleDistractionFree", { 9891 since: "6.6", 9892 alternative: "dispatch( 'core/editor').toggleDistractionFree" 9893 }); 9894 registry.dispatch(import_editor4.store).toggleDistractionFree(); 9895 }; 9896 var toggleFullscreenMode = () => ({ registry }) => { 9897 const isFullscreen = registry.select(import_preferences.store).get("core/edit-post", "fullscreenMode"); 9898 registry.dispatch(import_preferences.store).toggle("core/edit-post", "fullscreenMode"); 9899 registry.dispatch(import_notices.store).createInfoNotice( 9900 isFullscreen ? (0, import_i18n2.__)("Fullscreen mode deactivated.") : (0, import_i18n2.__)("Fullscreen mode activated."), 9901 { 9902 id: "core/edit-post/toggle-fullscreen-mode/notice", 9903 type: "snackbar", 9904 actions: [ 9905 { 9906 label: (0, import_i18n2.__)("Undo"), 9907 onClick: () => { 9908 registry.dispatch(import_preferences.store).toggle( 9909 "core/edit-post", 9910 "fullscreenMode" 9911 ); 9912 } 9913 } 9914 ] 9915 } 9916 ); 9917 }; 9918 9919 // packages/edit-post/build-module/store/selectors.mjs 9920 var selectors_exports = {}; 9921 __export(selectors_exports, { 9922 __experimentalGetInsertionPoint: () => __experimentalGetInsertionPoint, 9923 __experimentalGetPreviewDeviceType: () => __experimentalGetPreviewDeviceType, 9924 areMetaBoxesInitialized: () => areMetaBoxesInitialized, 9925 getActiveGeneralSidebarName: () => getActiveGeneralSidebarName, 9926 getActiveMetaBoxLocations: () => getActiveMetaBoxLocations, 9927 getAllMetaBoxes: () => getAllMetaBoxes, 9928 getEditedPostTemplate: () => getEditedPostTemplate, 9929 getEditorMode: () => getEditorMode, 9930 getHiddenBlockTypes: () => getHiddenBlockTypes, 9931 getMetaBoxesPerLocation: () => getMetaBoxesPerLocation, 9932 getPreference: () => getPreference, 9933 getPreferences: () => getPreferences, 9934 hasMetaBoxes: () => hasMetaBoxes, 9935 isEditingTemplate: () => isEditingTemplate, 9936 isEditorPanelEnabled: () => isEditorPanelEnabled, 9937 isEditorPanelOpened: () => isEditorPanelOpened, 9938 isEditorPanelRemoved: () => isEditorPanelRemoved, 9939 isEditorSidebarOpened: () => isEditorSidebarOpened, 9940 isFeatureActive: () => isFeatureActive, 9941 isInserterOpened: () => isInserterOpened, 9942 isListViewOpened: () => isListViewOpened, 9943 isMetaBoxLocationActive: () => isMetaBoxLocationActive, 9944 isMetaBoxLocationVisible: () => isMetaBoxLocationVisible, 9945 isModalActive: () => isModalActive, 9946 isPluginItemPinned: () => isPluginItemPinned, 9947 isPluginSidebarOpened: () => isPluginSidebarOpened, 9948 isPublishSidebarOpened: () => isPublishSidebarOpened, 9949 isSavingMetaBoxes: () => isSavingMetaBoxes2 9950 }); 9951 var import_data5 = __toESM(require_data(), 1); 9952 var import_preferences2 = __toESM(require_preferences(), 1); 9953 var import_core_data4 = __toESM(require_core_data(), 1); 9954 var import_editor5 = __toESM(require_editor(), 1); 9955 var import_deprecated2 = __toESM(require_deprecated(), 1); 9956 var { interfaceStore: interfaceStore2 } = unlock2(import_editor5.privateApis); 9957 var EMPTY_ARRAY2 = []; 9958 var EMPTY_OBJECT2 = {}; 9959 var getEditorMode = (0, import_data5.createRegistrySelector)( 9960 (select3) => () => select3(import_preferences2.store).get("core", "editorMode") ?? "visual" 9961 ); 9962 var isEditorSidebarOpened = (0, import_data5.createRegistrySelector)( 9963 (select3) => () => { 9964 const activeGeneralSidebar = select3(interfaceStore2).getActiveComplementaryArea("core"); 9965 return ["edit-post/document", "edit-post/block"].includes( 9966 activeGeneralSidebar 9967 ); 9968 } 9969 ); 9970 var isPluginSidebarOpened = (0, import_data5.createRegistrySelector)( 9971 (select3) => () => { 9972 const activeGeneralSidebar = select3(interfaceStore2).getActiveComplementaryArea("core"); 9973 return !!activeGeneralSidebar && !["edit-post/document", "edit-post/block"].includes( 9974 activeGeneralSidebar 9975 ); 9976 } 9977 ); 9978 var getActiveGeneralSidebarName = (0, import_data5.createRegistrySelector)( 9979 (select3) => () => { 9980 return select3(interfaceStore2).getActiveComplementaryArea("core"); 9981 } 9982 ); 9983 function convertPanelsToOldFormat(inactivePanels, openPanels) { 9984 const panelsWithEnabledState = inactivePanels?.reduce( 9985 (accumulatedPanels, panelName) => ({ 9986 ...accumulatedPanels, 9987 [panelName]: { 9988 enabled: false 9989 } 9990 }), 9991 {} 9992 ); 9993 const panels = openPanels?.reduce((accumulatedPanels, panelName) => { 9994 const currentPanelState = accumulatedPanels?.[panelName]; 9995 return { 9996 ...accumulatedPanels, 9997 [panelName]: { 9998 ...currentPanelState, 9999 opened: true 10000 } 10001 }; 10002 }, panelsWithEnabledState ?? {}); 10003 return panels ?? panelsWithEnabledState ?? EMPTY_OBJECT2; 10004 } 10005 var getPreferences = (0, import_data5.createRegistrySelector)((select3) => () => { 10006 (0, import_deprecated2.default)(`select( 'core/edit-post' ).getPreferences`, { 10007 since: "6.0", 10008 alternative: `select( 'core/preferences' ).get` 10009 }); 10010 const corePreferences = ["editorMode", "hiddenBlockTypes"].reduce( 10011 (accumulatedPrefs, preferenceKey) => { 10012 const value = select3(import_preferences2.store).get( 10013 "core", 10014 preferenceKey 10015 ); 10016 return { 10017 ...accumulatedPrefs, 10018 [preferenceKey]: value 10019 }; 10020 }, 10021 {} 10022 ); 10023 const inactivePanels = select3(import_preferences2.store).get( 10024 "core", 10025 "inactivePanels" 10026 ); 10027 const openPanels = select3(import_preferences2.store).get("core", "openPanels"); 10028 const panels = convertPanelsToOldFormat(inactivePanels, openPanels); 10029 return { 10030 ...corePreferences, 10031 panels 10032 }; 10033 }); 10034 function getPreference(state, preferenceKey, defaultValue) { 10035 (0, import_deprecated2.default)(`select( 'core/edit-post' ).getPreference`, { 10036 since: "6.0", 10037 alternative: `select( 'core/preferences' ).get` 10038 }); 10039 const preferences = getPreferences(state); 10040 const value = preferences[preferenceKey]; 10041 return value === void 0 ? defaultValue : value; 10042 } 10043 var getHiddenBlockTypes = (0, import_data5.createRegistrySelector)((select3) => () => { 10044 return select3(import_preferences2.store).get("core", "hiddenBlockTypes") ?? EMPTY_ARRAY2; 10045 }); 10046 var isPublishSidebarOpened = (0, import_data5.createRegistrySelector)( 10047 (select3) => () => { 10048 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isPublishSidebarOpened`, { 10049 since: "6.6", 10050 alternative: `select( 'core/editor' ).isPublishSidebarOpened` 10051 }); 10052 return select3(import_editor5.store).isPublishSidebarOpened(); 10053 } 10054 ); 10055 var isEditorPanelRemoved = (0, import_data5.createRegistrySelector)( 10056 (select3) => (state, panelName) => { 10057 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isEditorPanelRemoved`, { 10058 since: "6.5", 10059 alternative: `select( 'core/editor' ).isEditorPanelRemoved` 10060 }); 10061 return select3(import_editor5.store).isEditorPanelRemoved(panelName); 10062 } 10063 ); 10064 var isEditorPanelEnabled = (0, import_data5.createRegistrySelector)( 10065 (select3) => (state, panelName) => { 10066 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isEditorPanelEnabled`, { 10067 since: "6.5", 10068 alternative: `select( 'core/editor' ).isEditorPanelEnabled` 10069 }); 10070 return select3(import_editor5.store).isEditorPanelEnabled(panelName); 10071 } 10072 ); 10073 var isEditorPanelOpened = (0, import_data5.createRegistrySelector)( 10074 (select3) => (state, panelName) => { 10075 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isEditorPanelOpened`, { 10076 since: "6.5", 10077 alternative: `select( 'core/editor' ).isEditorPanelOpened` 10078 }); 10079 return select3(import_editor5.store).isEditorPanelOpened(panelName); 10080 } 10081 ); 10082 var isModalActive = (0, import_data5.createRegistrySelector)( 10083 (select3) => (state, modalName) => { 10084 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isModalActive`, { 10085 since: "6.3", 10086 alternative: `select( 'core/interface' ).isModalActive` 10087 }); 10088 return !!select3(interfaceStore2).isModalActive(modalName); 10089 } 10090 ); 10091 var isFeatureActive = (0, import_data5.createRegistrySelector)( 10092 (select3) => (state, feature) => { 10093 return !!select3(import_preferences2.store).get("core/edit-post", feature); 10094 } 10095 ); 10096 var isPluginItemPinned = (0, import_data5.createRegistrySelector)( 10097 (select3) => (state, pluginName) => { 10098 return select3(interfaceStore2).isItemPinned("core", pluginName); 10099 } 10100 ); 10101 var getActiveMetaBoxLocations = (0, import_data5.createSelector)( 10102 (state) => { 10103 return Object.keys(state.metaBoxes.locations).filter( 10104 (location) => isMetaBoxLocationActive(state, location) 10105 ); 10106 }, 10107 (state) => [state.metaBoxes.locations] 10108 ); 10109 var isMetaBoxLocationVisible = (0, import_data5.createRegistrySelector)( 10110 (select3) => (state, location) => { 10111 return isMetaBoxLocationActive(state, location) && getMetaBoxesPerLocation(state, location)?.some(({ id }) => { 10112 return select3(import_editor5.store).isEditorPanelEnabled( 10113 `meta-box-$id}` 10114 ); 10115 }); 10116 } 10117 ); 10118 function isMetaBoxLocationActive(state, location) { 10119 const metaBoxes2 = getMetaBoxesPerLocation(state, location); 10120 return !!metaBoxes2 && metaBoxes2.length !== 0; 10121 } 10122 function getMetaBoxesPerLocation(state, location) { 10123 return state.metaBoxes.locations[location]; 10124 } 10125 var getAllMetaBoxes = (0, import_data5.createSelector)( 10126 (state) => { 10127 return Object.values(state.metaBoxes.locations).flat(); 10128 }, 10129 (state) => [state.metaBoxes.locations] 10130 ); 10131 function hasMetaBoxes(state) { 10132 return getActiveMetaBoxLocations(state).length > 0; 10133 } 10134 function isSavingMetaBoxes2(state) { 10135 return state.metaBoxes.isSaving; 10136 } 10137 var __experimentalGetPreviewDeviceType = (0, import_data5.createRegistrySelector)( 10138 (select3) => () => { 10139 (0, import_deprecated2.default)( 10140 `select( 'core/edit-site' ).__experimentalGetPreviewDeviceType`, 10141 { 10142 since: "6.5", 10143 version: "6.7", 10144 alternative: `select( 'core/editor' ).getDeviceType` 10145 } 10146 ); 10147 return select3(import_editor5.store).getDeviceType(); 10148 } 10149 ); 10150 var isInserterOpened = (0, import_data5.createRegistrySelector)((select3) => () => { 10151 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isInserterOpened`, { 10152 since: "6.5", 10153 alternative: `select( 'core/editor' ).isInserterOpened` 10154 }); 10155 return select3(import_editor5.store).isInserterOpened(); 10156 }); 10157 var __experimentalGetInsertionPoint = (0, import_data5.createRegistrySelector)( 10158 (select3) => () => { 10159 (0, import_deprecated2.default)( 10160 `select( 'core/edit-post' ).__experimentalGetInsertionPoint`, 10161 { 10162 since: "6.5", 10163 version: "6.7" 10164 } 10165 ); 10166 return unlock2(select3(import_editor5.store)).getInserter(); 10167 } 10168 ); 10169 var isListViewOpened = (0, import_data5.createRegistrySelector)((select3) => () => { 10170 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isListViewOpened`, { 10171 since: "6.5", 10172 alternative: `select( 'core/editor' ).isListViewOpened` 10173 }); 10174 return select3(import_editor5.store).isListViewOpened(); 10175 }); 10176 var isEditingTemplate = (0, import_data5.createRegistrySelector)((select3) => () => { 10177 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isEditingTemplate`, { 10178 since: "6.5", 10179 alternative: `select( 'core/editor' ).getRenderingMode` 10180 }); 10181 return select3(import_editor5.store).getCurrentPostType() === "wp_template"; 10182 }); 10183 function areMetaBoxesInitialized(state) { 10184 return state.metaBoxes.initialized; 10185 } 10186 var getEditedPostTemplate = (0, import_data5.createRegistrySelector)( 10187 (select3) => () => { 10188 const { id: postId, type: postType } = select3(import_editor5.store).getCurrentPost(); 10189 const templateId = unlock2(select3(import_core_data4.store)).getTemplateId( 10190 postType, 10191 postId 10192 ); 10193 if (!templateId) { 10194 return void 0; 10195 } 10196 return select3(import_core_data4.store).getEditedEntityRecord( 10197 "postType", 10198 "wp_template", 10199 templateId 10200 ); 10201 } 10202 ); 10203 10204 // packages/edit-post/build-module/store/index.mjs 10205 var store = (0, import_data6.createReduxStore)(STORE_NAME, { 10206 reducer: reducer_default, 10207 actions: actions_exports, 10208 selectors: selectors_exports 10209 }); 10210 (0, import_data6.register)(store); 10211 10212 // packages/edit-post/build-module/components/keyboard-shortcuts/index.mjs 10213 function KeyboardShortcuts() { 10214 const { toggleFullscreenMode: toggleFullscreenMode2 } = (0, import_data7.useDispatch)(store); 10215 const { registerShortcut } = (0, import_data7.useDispatch)(import_keyboard_shortcuts.store); 10216 (0, import_element18.useEffect)(() => { 10217 registerShortcut({ 10218 name: "core/edit-post/toggle-fullscreen", 10219 category: "global", 10220 description: (0, import_i18n3.__)("Enable or disable fullscreen mode."), 10221 keyCombination: { 10222 modifier: "secondary", 10223 character: "f" 10224 } 10225 }); 10226 }, []); 10227 (0, import_keyboard_shortcuts.useShortcut)("core/edit-post/toggle-fullscreen", () => { 10228 toggleFullscreenMode2(); 10229 }); 10230 return null; 10231 } 10232 var keyboard_shortcuts_default = KeyboardShortcuts; 10233 10234 // packages/edit-post/build-module/components/init-pattern-modal/index.mjs 10235 var import_data8 = __toESM(require_data(), 1); 10236 var import_i18n4 = __toESM(require_i18n(), 1); 10237 var import_components3 = __toESM(require_components(), 1); 10238 var import_element19 = __toESM(require_element(), 1); 10239 var import_editor6 = __toESM(require_editor(), 1); 10240 var import_jsx_runtime28 = __toESM(require_jsx_runtime(), 1); 10241 function InitPatternModal() { 10242 const { editPost } = (0, import_data8.useDispatch)(import_editor6.store); 10243 const [syncType, setSyncType] = (0, import_element19.useState)(void 0); 10244 const [title, setTitle] = (0, import_element19.useState)(""); 10245 const isNewPost = (0, import_data8.useSelect)( 10246 (select3) => select3(import_editor6.store).isCleanNewPost(), 10247 [] 10248 ); 10249 const [isModalOpen, setIsModalOpen] = (0, import_element19.useState)(() => isNewPost); 10250 if (!isNewPost) { 10251 return null; 10252 } 10253 return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_jsx_runtime28.Fragment, { children: isModalOpen && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)( 10254 import_components3.Modal, 10255 { 10256 title: (0, import_i18n4.__)("Create pattern"), 10257 onRequestClose: () => { 10258 setIsModalOpen(false); 10259 }, 10260 overlayClassName: "reusable-blocks-menu-items__convert-modal", 10261 children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)( 10262 "form", 10263 { 10264 onSubmit: (event) => { 10265 event.preventDefault(); 10266 setIsModalOpen(false); 10267 editPost({ 10268 title, 10269 meta: { 10270 wp_pattern_sync_status: syncType 10271 } 10272 }); 10273 }, 10274 children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_components3.__experimentalVStack, { spacing: "5", children: [ 10275 /* @__PURE__ */ (0, import_jsx_runtime28.jsx)( 10276 import_components3.TextControl, 10277 { 10278 label: (0, import_i18n4.__)("Name"), 10279 value: title, 10280 onChange: setTitle, 10281 placeholder: (0, import_i18n4.__)("My pattern"), 10282 className: "patterns-create-modal__name-input", 10283 __next40pxDefaultSize: true 10284 } 10285 ), 10286 /* @__PURE__ */ (0, import_jsx_runtime28.jsx)( 10287 import_components3.ToggleControl, 10288 { 10289 label: (0, import_i18n4._x)("Synced", "pattern (singular)"), 10290 help: (0, import_i18n4.__)( 10291 "Sync this pattern across multiple locations." 10292 ), 10293 checked: !syncType, 10294 onChange: () => { 10295 setSyncType( 10296 !syncType ? "unsynced" : void 0 10297 ); 10298 } 10299 } 10300 ), 10301 /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_components3.__experimentalHStack, { justify: "right", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)( 10302 import_components3.Button, 10303 { 10304 __next40pxDefaultSize: true, 10305 variant: "primary", 10306 type: "submit", 10307 disabled: !title, 10308 accessibleWhenDisabled: true, 10309 children: (0, import_i18n4.__)("Create") 10310 } 10311 ) }) 10312 ] }) 10313 } 10314 ) 10315 } 10316 ) }); 10317 } 10318 10319 // packages/edit-post/build-module/components/browser-url/index.mjs 10320 var import_element20 = __toESM(require_element(), 1); 10321 var import_data9 = __toESM(require_data(), 1); 10322 var import_url2 = __toESM(require_url(), 1); 10323 var import_editor7 = __toESM(require_editor(), 1); 10324 function getPostEditURL(postId) { 10325 return (0, import_url2.addQueryArgs)("post.php", { post: postId, action: "edit" }); 10326 } 10327 function BrowserURL() { 10328 const [historyId, setHistoryId] = (0, import_element20.useState)(null); 10329 const { postId, postStatus } = (0, import_data9.useSelect)((select3) => { 10330 const { getCurrentPost } = select3(import_editor7.store); 10331 const post = getCurrentPost(); 10332 let { id, status, type } = post; 10333 const isTemplate = ["wp_template", "wp_template_part"].includes( 10334 type 10335 ); 10336 if (isTemplate) { 10337 id = post.wp_id; 10338 } 10339 return { 10340 postId: id, 10341 postStatus: status 10342 }; 10343 }, []); 10344 (0, import_element20.useEffect)(() => { 10345 if (postId && postId !== historyId && postStatus !== "auto-draft") { 10346 window.history.replaceState( 10347 { id: postId }, 10348 "Post " + postId, 10349 getPostEditURL(postId) 10350 ); 10351 setHistoryId(postId); 10352 } 10353 }, [postId, postStatus, historyId]); 10354 return null; 10355 } 10356 10357 // packages/edit-post/build-module/components/meta-boxes/index.mjs 10358 var import_data12 = __toESM(require_data(), 1); 10359 10360 // packages/edit-post/build-module/components/meta-boxes/meta-boxes-area/index.mjs 10361 var import_element21 = __toESM(require_element(), 1); 10362 var import_components4 = __toESM(require_components(), 1); 10363 var import_data10 = __toESM(require_data(), 1); 10364 var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1); 10365 function MetaBoxesArea({ location }) { 10366 const container = (0, import_element21.useRef)(null); 10367 const formRef = (0, import_element21.useRef)(null); 10368 (0, import_element21.useEffect)(() => { 10369 formRef.current = document.querySelector( 10370 ".metabox-location-" + location 10371 ); 10372 if (formRef.current) { 10373 container.current.appendChild(formRef.current); 10374 } 10375 return () => { 10376 if (formRef.current) { 10377 document.querySelector("#metaboxes").appendChild(formRef.current); 10378 } 10379 }; 10380 }, [location]); 10381 const isSaving = (0, import_data10.useSelect)((select3) => { 10382 return select3(store).isSavingMetaBoxes(); 10383 }, []); 10384 const classes = clsx_default("edit-post-meta-boxes-area", `is-$location}`, { 10385 "is-loading": isSaving 10386 }); 10387 return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: classes, children: [ 10388 isSaving && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_components4.Spinner, { className: "edit-post-meta-boxes-area__spinner" }), 10389 /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( 10390 "div", 10391 { 10392 className: "edit-post-meta-boxes-area__container", 10393 ref: container 10394 } 10395 ), 10396 /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "edit-post-meta-boxes-area__clear" }) 10397 ] }); 10398 } 10399 var meta_boxes_area_default = MetaBoxesArea; 10400 10401 // packages/edit-post/build-module/components/meta-boxes/meta-box-visibility.mjs 10402 var import_element22 = __toESM(require_element(), 1); 10403 var import_data11 = __toESM(require_data(), 1); 10404 var import_editor8 = __toESM(require_editor(), 1); 10405 function MetaBoxVisibility({ id }) { 10406 const isVisible = (0, import_data11.useSelect)( 10407 (select3) => { 10408 return select3(import_editor8.store).isEditorPanelEnabled( 10409 `meta-box-$id}` 10410 ); 10411 }, 10412 [id] 10413 ); 10414 (0, import_element22.useEffect)(() => { 10415 const element = document.getElementById(id); 10416 if (!element) { 10417 return; 10418 } 10419 if (isVisible) { 10420 element.classList.remove("is-hidden"); 10421 } else { 10422 element.classList.add("is-hidden"); 10423 } 10424 }, [id, isVisible]); 10425 return null; 10426 } 10427 10428 // packages/edit-post/build-module/components/meta-boxes/index.mjs 10429 var import_jsx_runtime30 = __toESM(require_jsx_runtime(), 1); 10430 function MetaBoxes({ location }) { 10431 const metaBoxes2 = (0, import_data12.useSelect)( 10432 (select3) => select3(store).getMetaBoxesPerLocation(location), 10433 [location] 10434 ); 10435 return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [ 10436 (metaBoxes2 ?? []).map(({ id }) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(MetaBoxVisibility, { id }, id)), 10437 /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(meta_boxes_area_default, { location }) 10438 ] }); 10439 } 10440 10441 // packages/edit-post/build-module/components/more-menu/index.mjs 10442 var import_i18n10 = __toESM(require_i18n(), 1); 10443 var import_compose2 = __toESM(require_compose(), 1); 10444 var import_editor14 = __toESM(require_editor(), 1); 10445 var import_keycodes = __toESM(require_keycodes(), 1); 10446 var import_preferences8 = __toESM(require_preferences(), 1); 10447 10448 // packages/edit-post/build-module/components/more-menu/manage-patterns-menu-item.mjs 10449 var import_components5 = __toESM(require_components(), 1); 10450 var import_core_data5 = __toESM(require_core_data(), 1); 10451 var import_data13 = __toESM(require_data(), 1); 10452 var import_i18n5 = __toESM(require_i18n(), 1); 10453 var import_url3 = __toESM(require_url(), 1); 10454 var import_jsx_runtime31 = __toESM(require_jsx_runtime(), 1); 10455 function ManagePatternsMenuItem() { 10456 const url = (0, import_data13.useSelect)((select3) => { 10457 const { canUser } = select3(import_core_data5.store); 10458 const defaultUrl = (0, import_url3.addQueryArgs)("edit.php", { 10459 post_type: "wp_block" 10460 }); 10461 const patternsUrl = (0, import_url3.addQueryArgs)("site-editor.php", { 10462 p: "/pattern" 10463 }); 10464 return canUser("create", { 10465 kind: "postType", 10466 name: "wp_template" 10467 }) ? patternsUrl : defaultUrl; 10468 }, []); 10469 return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_components5.MenuItem, { role: "menuitem", href: url, children: (0, import_i18n5.__)("Manage patterns") }); 10470 } 10471 var manage_patterns_menu_item_default = ManagePatternsMenuItem; 10472 10473 // packages/edit-post/build-module/components/more-menu/welcome-guide-menu-item.mjs 10474 var import_data14 = __toESM(require_data(), 1); 10475 var import_preferences3 = __toESM(require_preferences(), 1); 10476 var import_i18n6 = __toESM(require_i18n(), 1); 10477 var import_editor9 = __toESM(require_editor(), 1); 10478 var import_jsx_runtime32 = __toESM(require_jsx_runtime(), 1); 10479 function WelcomeGuideMenuItem() { 10480 const isEditingTemplate2 = (0, import_data14.useSelect)( 10481 (select3) => select3(import_editor9.store).getCurrentPostType() === "wp_template", 10482 [] 10483 ); 10484 return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)( 10485 import_preferences3.PreferenceToggleMenuItem, 10486 { 10487 scope: "core/edit-post", 10488 name: isEditingTemplate2 ? "welcomeGuideTemplate" : "welcomeGuide", 10489 label: (0, import_i18n6.__)("Welcome Guide") 10490 } 10491 ); 10492 } 10493 10494 // packages/edit-post/build-module/components/preferences-modal/index.mjs 10495 var import_i18n9 = __toESM(require_i18n(), 1); 10496 var import_preferences7 = __toESM(require_preferences(), 1); 10497 var import_editor13 = __toESM(require_editor(), 1); 10498 10499 // packages/edit-post/build-module/components/preferences-modal/meta-boxes-section.mjs 10500 var import_i18n8 = __toESM(require_i18n(), 1); 10501 var import_data17 = __toESM(require_data(), 1); 10502 var import_editor12 = __toESM(require_editor(), 1); 10503 var import_preferences6 = __toESM(require_preferences(), 1); 10504 10505 // packages/edit-post/build-module/components/preferences-modal/enable-custom-fields.mjs 10506 var import_element23 = __toESM(require_element(), 1); 10507 var import_i18n7 = __toESM(require_i18n(), 1); 10508 var import_components6 = __toESM(require_components(), 1); 10509 var import_data15 = __toESM(require_data(), 1); 10510 var import_editor10 = __toESM(require_editor(), 1); 10511 var import_preferences4 = __toESM(require_preferences(), 1); 10512 var import_url4 = __toESM(require_url(), 1); 10513 var import_jsx_runtime33 = __toESM(require_jsx_runtime(), 1); 10514 var { PreferenceBaseOption } = unlock2(import_preferences4.privateApis); 10515 function submitCustomFieldsForm() { 10516 const customFieldsForm = document.getElementById( 10517 "toggle-custom-fields-form" 10518 ); 10519 customFieldsForm.querySelector('[name="_wp_http_referer"]').setAttribute("value", (0, import_url4.getPathAndQueryString)(window.location.href)); 10520 customFieldsForm.submit(); 10521 } 10522 function CustomFieldsConfirmation({ willEnable }) { 10523 const [isReloading, setIsReloading] = (0, import_element23.useState)(false); 10524 return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [ 10525 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "edit-post-preferences-modal__custom-fields-confirmation-message", children: (0, import_i18n7.__)( 10526 "A page reload is required for this change. Make sure your content is saved before reloading." 10527 ) }), 10528 /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 10529 import_components6.Button, 10530 { 10531 __next40pxDefaultSize: true, 10532 variant: "secondary", 10533 isBusy: isReloading, 10534 accessibleWhenDisabled: true, 10535 disabled: isReloading, 10536 onClick: () => { 10537 setIsReloading(true); 10538 submitCustomFieldsForm(); 10539 }, 10540 children: willEnable ? (0, import_i18n7.__)("Show & Reload Page") : (0, import_i18n7.__)("Hide & Reload Page") 10541 } 10542 ) 10543 ] }); 10544 } 10545 function EnableCustomFieldsOption({ label }) { 10546 const areCustomFieldsEnabled = (0, import_data15.useSelect)((select3) => { 10547 return !!select3(import_editor10.store).getEditorSettings().enableCustomFields; 10548 }, []); 10549 const [isChecked, setIsChecked] = (0, import_element23.useState)(areCustomFieldsEnabled); 10550 return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 10551 PreferenceBaseOption, 10552 { 10553 label, 10554 isChecked, 10555 onChange: setIsChecked, 10556 children: isChecked !== areCustomFieldsEnabled && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(CustomFieldsConfirmation, { willEnable: isChecked }) 10557 } 10558 ); 10559 } 10560 10561 // packages/edit-post/build-module/components/preferences-modal/enable-panel.mjs 10562 var import_data16 = __toESM(require_data(), 1); 10563 var import_editor11 = __toESM(require_editor(), 1); 10564 var import_preferences5 = __toESM(require_preferences(), 1); 10565 var import_jsx_runtime34 = __toESM(require_jsx_runtime(), 1); 10566 var { PreferenceBaseOption: PreferenceBaseOption2 } = unlock2(import_preferences5.privateApis); 10567 function EnablePanelOption(props) { 10568 const { toggleEditorPanelEnabled: toggleEditorPanelEnabled2 } = (0, import_data16.useDispatch)(import_editor11.store); 10569 const { isChecked, isRemoved } = (0, import_data16.useSelect)( 10570 (select3) => { 10571 const { isEditorPanelEnabled: isEditorPanelEnabled2, isEditorPanelRemoved: isEditorPanelRemoved2 } = select3(import_editor11.store); 10572 return { 10573 isChecked: isEditorPanelEnabled2(props.panelName), 10574 isRemoved: isEditorPanelRemoved2(props.panelName) 10575 }; 10576 }, 10577 [props.panelName] 10578 ); 10579 if (isRemoved) { 10580 return null; 10581 } 10582 return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)( 10583 PreferenceBaseOption2, 10584 { 10585 isChecked, 10586 onChange: () => toggleEditorPanelEnabled2(props.panelName), 10587 ...props 10588 } 10589 ); 10590 } 10591 10592 // packages/edit-post/build-module/components/preferences-modal/meta-boxes-section.mjs 10593 var import_jsx_runtime35 = __toESM(require_jsx_runtime(), 1); 10594 var { PreferencesModalSection } = unlock2(import_preferences6.privateApis); 10595 function MetaBoxesSection({ 10596 areCustomFieldsRegistered, 10597 metaBoxes: metaBoxes2, 10598 ...sectionProps 10599 }) { 10600 const thirdPartyMetaBoxes = metaBoxes2.filter( 10601 ({ id }) => id !== "postcustom" 10602 ); 10603 if (!areCustomFieldsRegistered && thirdPartyMetaBoxes.length === 0) { 10604 return null; 10605 } 10606 return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(PreferencesModalSection, { ...sectionProps, children: [ 10607 areCustomFieldsRegistered && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(EnableCustomFieldsOption, { label: (0, import_i18n8.__)("Custom fields") }), 10608 thirdPartyMetaBoxes.map(({ id, title }) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( 10609 EnablePanelOption, 10610 { 10611 label: title, 10612 panelName: `meta-box-$id}` 10613 }, 10614 id 10615 )) 10616 ] }); 10617 } 10618 var meta_boxes_section_default = (0, import_data17.withSelect)((select3) => { 10619 const { getEditorSettings } = select3(import_editor12.store); 10620 const { getAllMetaBoxes: getAllMetaBoxes2 } = select3(store); 10621 return { 10622 // This setting should not live in the block editor's store. 10623 areCustomFieldsRegistered: getEditorSettings().enableCustomFields !== void 0, 10624 metaBoxes: getAllMetaBoxes2() 10625 }; 10626 })(MetaBoxesSection); 10627 10628 // packages/edit-post/build-module/components/preferences-modal/index.mjs 10629 var import_jsx_runtime36 = __toESM(require_jsx_runtime(), 1); 10630 var { PreferenceToggleControl } = unlock2(import_preferences7.privateApis); 10631 var { PreferencesModal } = unlock2(import_editor13.privateApis); 10632 function EditPostPreferencesModal() { 10633 const extraSections = { 10634 general: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(meta_boxes_section_default, { title: (0, import_i18n9.__)("Advanced") }), 10635 appearance: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 10636 PreferenceToggleControl, 10637 { 10638 scope: "core/edit-post", 10639 featureName: "themeStyles", 10640 help: (0, import_i18n9.__)("Make the editor look like your theme."), 10641 label: (0, import_i18n9.__)("Use theme styles") 10642 } 10643 ) 10644 }; 10645 return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(PreferencesModal, { extraSections }); 10646 } 10647 10648 // packages/edit-post/build-module/components/more-menu/index.mjs 10649 var import_jsx_runtime37 = __toESM(require_jsx_runtime(), 1); 10650 var { ToolsMoreMenuGroup, ViewMoreMenuGroup } = unlock2(import_editor14.privateApis); 10651 var MoreMenu = () => { 10652 const isLargeViewport = (0, import_compose2.useViewportMatch)("large"); 10653 return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [ 10654 isLargeViewport && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(ViewMoreMenuGroup, { children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( 10655 import_preferences8.PreferenceToggleMenuItem, 10656 { 10657 scope: "core/edit-post", 10658 name: "fullscreenMode", 10659 label: (0, import_i18n10.__)("Fullscreen mode"), 10660 info: (0, import_i18n10.__)("Show and hide the admin user interface"), 10661 messageActivated: (0, import_i18n10.__)("Fullscreen mode activated."), 10662 messageDeactivated: (0, import_i18n10.__)( 10663 "Fullscreen mode deactivated." 10664 ), 10665 shortcut: import_keycodes.displayShortcut.secondary("f") 10666 } 10667 ) }), 10668 /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(ToolsMoreMenuGroup, { children: [ 10669 /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(manage_patterns_menu_item_default, {}), 10670 /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(WelcomeGuideMenuItem, {}) 10671 ] }), 10672 /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(EditPostPreferencesModal, {}) 10673 ] }); 10674 }; 10675 var more_menu_default = MoreMenu; 10676 10677 // packages/edit-post/build-module/components/welcome-guide/index.mjs 10678 var import_data20 = __toESM(require_data(), 1); 10679 10680 // packages/edit-post/build-module/components/welcome-guide/default.mjs 10681 var import_data18 = __toESM(require_data(), 1); 10682 var import_components7 = __toESM(require_components(), 1); 10683 var import_i18n11 = __toESM(require_i18n(), 1); 10684 var import_element24 = __toESM(require_element(), 1); 10685 10686 // packages/edit-post/build-module/components/welcome-guide/image.mjs 10687 var import_jsx_runtime38 = __toESM(require_jsx_runtime(), 1); 10688 function WelcomeGuideImage({ nonAnimatedSrc, animatedSrc }) { 10689 return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("picture", { className: "edit-post-welcome-guide__image", children: [ 10690 /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( 10691 "source", 10692 { 10693 srcSet: nonAnimatedSrc, 10694 media: "(prefers-reduced-motion: reduce)" 10695 } 10696 ), 10697 /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("img", { src: animatedSrc, width: "312", height: "240", alt: "" }) 10698 ] }); 10699 } 10700 10701 // packages/edit-post/build-module/components/welcome-guide/default.mjs 10702 var import_jsx_runtime39 = __toESM(require_jsx_runtime(), 1); 10703 function WelcomeGuideDefault() { 10704 const { toggleFeature: toggleFeature2 } = (0, import_data18.useDispatch)(store); 10705 return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( 10706 import_components7.Guide, 10707 { 10708 className: "edit-post-welcome-guide", 10709 contentLabel: (0, import_i18n11.__)("Welcome to the editor"), 10710 finishButtonText: (0, import_i18n11.__)("Get started"), 10711 onFinish: () => toggleFeature2("welcomeGuide"), 10712 pages: [ 10713 { 10714 image: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( 10715 WelcomeGuideImage, 10716 { 10717 nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-canvas.svg", 10718 animatedSrc: "https://s.w.org/images/block-editor/welcome-canvas.gif" 10719 } 10720 ), 10721 content: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment, { children: [ 10722 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("h1", { className: "edit-post-welcome-guide__heading", children: (0, import_i18n11.__)("Welcome to the editor") }), 10723 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("p", { className: "edit-post-welcome-guide__text", children: (0, import_i18n11.__)( 10724 "In the WordPress editor, each paragraph, image, or video is presented as a distinct \u201Cblock\u201D of content." 10725 ) }) 10726 ] }) 10727 }, 10728 { 10729 image: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( 10730 WelcomeGuideImage, 10731 { 10732 nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-editor.svg", 10733 animatedSrc: "https://s.w.org/images/block-editor/welcome-editor.gif" 10734 } 10735 ), 10736 content: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment, { children: [ 10737 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("h1", { className: "edit-post-welcome-guide__heading", children: (0, import_i18n11.__)("Customize each block") }), 10738 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("p", { className: "edit-post-welcome-guide__text", children: (0, import_i18n11.__)( 10739 "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." 10740 ) }) 10741 ] }) 10742 }, 10743 { 10744 image: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( 10745 WelcomeGuideImage, 10746 { 10747 nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-library.svg", 10748 animatedSrc: "https://s.w.org/images/block-editor/welcome-library.gif" 10749 } 10750 ), 10751 content: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment, { children: [ 10752 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("h1", { className: "edit-post-welcome-guide__heading", children: (0, import_i18n11.__)("Explore all blocks") }), 10753 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("p", { className: "edit-post-welcome-guide__text", children: (0, import_element24.createInterpolateElement)( 10754 (0, import_i18n11.__)( 10755 "All of the blocks available to you live in the block library. You\u2019ll find it wherever you see the <InserterIconImage /> icon." 10756 ), 10757 { 10758 InserterIconImage: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( 10759 "img", 10760 { 10761 alt: (0, import_i18n11.__)("inserter"), 10762 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" 10763 } 10764 ) 10765 } 10766 ) }) 10767 ] }) 10768 }, 10769 { 10770 image: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( 10771 WelcomeGuideImage, 10772 { 10773 nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-documentation.svg", 10774 animatedSrc: "https://s.w.org/images/block-editor/welcome-documentation.gif" 10775 } 10776 ), 10777 content: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment, { children: [ 10778 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("h1", { className: "edit-post-welcome-guide__heading", children: (0, import_i18n11.__)("Learn more") }), 10779 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("p", { className: "edit-post-welcome-guide__text", children: (0, import_element24.createInterpolateElement)( 10780 (0, import_i18n11.__)( 10781 "New to the block editor? Want to learn more about using it? <a>Here's a detailed guide.</a>" 10782 ), 10783 { 10784 a: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( 10785 import_components7.ExternalLink, 10786 { 10787 href: (0, import_i18n11.__)( 10788 "https://wordpress.org/documentation/article/wordpress-block-editor/" 10789 ) 10790 } 10791 ) 10792 } 10793 ) }) 10794 ] }) 10795 } 10796 ] 10797 } 10798 ); 10799 } 10800 10801 // packages/edit-post/build-module/components/welcome-guide/template.mjs 10802 var import_data19 = __toESM(require_data(), 1); 10803 var import_components8 = __toESM(require_components(), 1); 10804 var import_i18n12 = __toESM(require_i18n(), 1); 10805 var import_jsx_runtime40 = __toESM(require_jsx_runtime(), 1); 10806 function WelcomeGuideTemplate() { 10807 const { toggleFeature: toggleFeature2 } = (0, import_data19.useDispatch)(store); 10808 return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( 10809 import_components8.Guide, 10810 { 10811 className: "edit-template-welcome-guide", 10812 contentLabel: (0, import_i18n12.__)("Welcome to the template editor"), 10813 finishButtonText: (0, import_i18n12.__)("Get started"), 10814 onFinish: () => toggleFeature2("welcomeGuideTemplate"), 10815 pages: [ 10816 { 10817 image: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( 10818 WelcomeGuideImage, 10819 { 10820 nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-template-editor.svg", 10821 animatedSrc: "https://s.w.org/images/block-editor/welcome-template-editor.gif" 10822 } 10823 ), 10824 content: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_jsx_runtime40.Fragment, { children: [ 10825 /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("h1", { className: "edit-post-welcome-guide__heading", children: (0, import_i18n12.__)("Welcome to the template editor") }), 10826 /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("p", { className: "edit-post-welcome-guide__text", children: (0, import_i18n12.__)( 10827 "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." 10828 ) }) 10829 ] }) 10830 } 10831 ] 10832 } 10833 ); 10834 } 10835 10836 // packages/edit-post/build-module/components/welcome-guide/index.mjs 10837 var import_jsx_runtime41 = __toESM(require_jsx_runtime(), 1); 10838 function WelcomeGuide({ postType }) { 10839 const { isActive, isEditingTemplate: isEditingTemplate2 } = (0, import_data20.useSelect)( 10840 (select3) => { 10841 const { isFeatureActive: isFeatureActive2 } = select3(store); 10842 const _isEditingTemplate = postType === "wp_template"; 10843 const feature = _isEditingTemplate ? "welcomeGuideTemplate" : "welcomeGuide"; 10844 return { 10845 isActive: isFeatureActive2(feature), 10846 isEditingTemplate: _isEditingTemplate 10847 }; 10848 }, 10849 [postType] 10850 ); 10851 if (!isActive) { 10852 return null; 10853 } 10854 return isEditingTemplate2 ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(WelcomeGuideTemplate, {}) : /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(WelcomeGuideDefault, {}); 10855 } 10856 10857 // packages/edit-post/build-module/commands/use-commands.mjs 10858 var import_data21 = __toESM(require_data(), 1); 10859 var import_i18n13 = __toESM(require_i18n(), 1); 10860 var import_commands = __toESM(require_commands(), 1); 10861 var import_preferences9 = __toESM(require_preferences(), 1); 10862 var import_notices2 = __toESM(require_notices(), 1); 10863 function useCommands() { 10864 const { isFullscreen } = (0, import_data21.useSelect)((select3) => { 10865 const { get } = select3(import_preferences9.store); 10866 return { 10867 isFullscreen: get("core/edit-post", "fullscreenMode") 10868 }; 10869 }, []); 10870 const { toggle } = (0, import_data21.useDispatch)(import_preferences9.store); 10871 const { createInfoNotice } = (0, import_data21.useDispatch)(import_notices2.store); 10872 (0, import_commands.useCommand)({ 10873 name: "core/toggle-fullscreen-mode", 10874 label: isFullscreen ? (0, import_i18n13.__)("Exit fullscreen") : (0, import_i18n13.__)("Enter fullscreen"), 10875 icon: fullscreen_default, 10876 category: "command", 10877 callback: ({ close }) => { 10878 toggle("core/edit-post", "fullscreenMode"); 10879 close(); 10880 createInfoNotice( 10881 isFullscreen ? (0, import_i18n13.__)("Fullscreen off.") : (0, import_i18n13.__)("Fullscreen on."), 10882 { 10883 id: "core/edit-post/toggle-fullscreen-mode/notice", 10884 type: "snackbar", 10885 actions: [ 10886 { 10887 label: (0, import_i18n13.__)("Undo"), 10888 onClick: () => { 10889 toggle("core/edit-post", "fullscreenMode"); 10890 } 10891 } 10892 ] 10893 } 10894 ); 10895 } 10896 }); 10897 } 10898 10899 // packages/edit-post/build-module/components/layout/use-should-iframe.mjs 10900 var import_editor15 = __toESM(require_editor(), 1); 10901 var import_data22 = __toESM(require_data(), 1); 10902 var import_blocks2 = __toESM(require_blocks(), 1); 10903 var import_block_editor = __toESM(require_block_editor(), 1); 10904 var isGutenbergPlugin = false ? true : false; 10905 function useShouldIframe() { 10906 return (0, import_data22.useSelect)((select3) => { 10907 const { getCurrentPostType, getDeviceType } = select3(import_editor15.store); 10908 const { getClientIdsWithDescendants, getBlockName } = select3(import_block_editor.store); 10909 const { getBlockType } = select3(import_blocks2.store); 10910 return ( 10911 // If the Gutenberg plugin is active, we ALWAYS use the iframe for 10912 // consistency across the post and site editor. We plan on enforcing 10913 // the iframe in the future, so Gutenberg both serves as way for us 10914 // to warn plugin developers and for plugin developers to test their 10915 // blocks easily. Before GB v22.5, we only enforced it for 10916 // block-based themes (classic themes used the same rules as core). 10917 isGutenbergPlugin || // We also still want to iframe all the special 10918 // editor features and modes such as device previews, zoom out, and 10919 // template/pattern editing. 10920 getDeviceType() !== "Desktop" || ["wp_template", "wp_block"].includes(getCurrentPostType()) || unlock2(select3(import_block_editor.store)).isZoomOut() || // Finally, still iframe the editor if all present blocks are v3 10921 // (which means they are marked as iframe-compatible). 10922 [...new Set(getClientIdsWithDescendants().map(getBlockName))].map(getBlockType).filter(Boolean).every((blockType) => blockType.apiVersion >= 3) 10923 ); 10924 }, []); 10925 } 10926 10927 // packages/edit-post/build-module/hooks/use-navigate-to-entity-record.mjs 10928 var import_element25 = __toESM(require_element(), 1); 10929 var import_data23 = __toESM(require_data(), 1); 10930 var import_editor16 = __toESM(require_editor(), 1); 10931 var import_core_data6 = __toESM(require_core_data(), 1); 10932 function useNavigateToEntityRecord(initialPostId, initialPostType, defaultRenderingMode) { 10933 const registry = (0, import_data23.useRegistry)(); 10934 const [postHistory, dispatch2] = (0, import_element25.useReducer)( 10935 (historyState, { type, post: post2, previousRenderingMode: previousRenderingMode2, selectedBlockClientId }) => { 10936 if (type === "push") { 10937 const updatedHistory = [...historyState]; 10938 const currentIndex = updatedHistory.length - 1; 10939 updatedHistory[currentIndex] = { 10940 ...updatedHistory[currentIndex], 10941 selectedBlockClientId 10942 }; 10943 return [...updatedHistory, { post: post2, previousRenderingMode: previousRenderingMode2 }]; 10944 } 10945 if (type === "pop") { 10946 if (historyState.length > 1) { 10947 return historyState.slice(0, -1); 10948 } 10949 } 10950 return historyState; 10951 }, 10952 [ 10953 { 10954 post: { postId: initialPostId, postType: initialPostType } 10955 } 10956 ] 10957 ); 10958 const { post, previousRenderingMode } = postHistory[postHistory.length - 1]; 10959 const { getRenderingMode } = (0, import_data23.useSelect)(import_editor16.store); 10960 const { setRenderingMode } = (0, import_data23.useDispatch)(import_editor16.store); 10961 const { editEntityRecord } = (0, import_data23.useDispatch)(import_core_data6.store); 10962 const onNavigateToEntityRecord = (0, import_element25.useCallback)( 10963 (params) => { 10964 const entityEdits = registry.select(import_core_data6.store).getEntityRecordEdits("postType", post.postType, post.postId); 10965 const externalClientId = entityEdits?.selection?.selectionStart?.clientId ?? null; 10966 dispatch2({ 10967 type: "push", 10968 post: { postId: params.postId, postType: params.postType }, 10969 // Save the current rendering mode so we can restore it when navigating back. 10970 previousRenderingMode: getRenderingMode(), 10971 selectedBlockClientId: externalClientId 10972 }); 10973 setRenderingMode(defaultRenderingMode); 10974 }, 10975 [ 10976 registry, 10977 post.postType, 10978 post.postId, 10979 getRenderingMode, 10980 setRenderingMode, 10981 defaultRenderingMode 10982 ] 10983 ); 10984 const onNavigateToPreviousEntityRecord = (0, import_element25.useCallback)(() => { 10985 if (postHistory.length > 1) { 10986 const previousItem = postHistory[postHistory.length - 2]; 10987 if (previousItem.selectedBlockClientId) { 10988 editEntityRecord( 10989 "postType", 10990 previousItem.post.postType, 10991 previousItem.post.postId, 10992 { 10993 selection: { 10994 selectionStart: { 10995 clientId: previousItem.selectedBlockClientId 10996 }, 10997 selectionEnd: { 10998 clientId: previousItem.selectedBlockClientId 10999 } 11000 } 11001 }, 11002 { undoIgnore: true } 11003 ); 11004 } 11005 } 11006 dispatch2({ 11007 type: "pop" 11008 }); 11009 if (previousRenderingMode) { 11010 setRenderingMode(previousRenderingMode); 11011 } 11012 }, [ 11013 setRenderingMode, 11014 previousRenderingMode, 11015 postHistory, 11016 editEntityRecord 11017 ]); 11018 return { 11019 currentPost: post, 11020 onNavigateToEntityRecord, 11021 onNavigateToPreviousEntityRecord: postHistory.length > 1 ? onNavigateToPreviousEntityRecord : void 0 11022 }; 11023 } 11024 11025 // packages/edit-post/build-module/components/meta-boxes/use-meta-box-initialization.mjs 11026 var import_data24 = __toESM(require_data(), 1); 11027 var import_editor17 = __toESM(require_editor(), 1); 11028 var import_core_data7 = __toESM(require_core_data(), 1); 11029 var import_element26 = __toESM(require_element(), 1); 11030 var useMetaBoxInitialization = (enabled) => { 11031 const { 11032 isEnabledAndEditorReady, 11033 isCollaborationEnabled, 11034 hasIncompatibleMetaBoxes, 11035 hasActiveMetaBoxes 11036 } = (0, import_data24.useSelect)( 11037 (select3) => { 11038 const { 11039 __unstableIsEditorReady, 11040 isCollaborationEnabledForCurrentPost 11041 } = unlock2(select3(import_editor17.store)); 11042 return { 11043 isEnabledAndEditorReady: enabled && __unstableIsEditorReady(), 11044 isCollaborationEnabled: isCollaborationEnabledForCurrentPost(), 11045 hasIncompatibleMetaBoxes: enabled ? select3(store).getAllMetaBoxes().some((metaBox) => !metaBox.__rtc_compatible) : false, 11046 hasActiveMetaBoxes: enabled && select3(store).hasMetaBoxes() 11047 }; 11048 }, 11049 [enabled] 11050 ); 11051 const { setCollaborationSupported } = unlock2((0, import_data24.useDispatch)(import_core_data7.store)); 11052 const { updateEditorSettings } = (0, import_data24.useDispatch)(import_editor17.store); 11053 const { initializeMetaBoxes: initializeMetaBoxes2 } = (0, import_data24.useDispatch)(store); 11054 (0, import_element26.useEffect)(() => { 11055 if (isEnabledAndEditorReady) { 11056 initializeMetaBoxes2(); 11057 if (isCollaborationEnabled && hasIncompatibleMetaBoxes) { 11058 setCollaborationSupported(false); 11059 } 11060 if (hasActiveMetaBoxes) { 11061 updateEditorSettings({ disableVisualRevisions: true }); 11062 } 11063 } 11064 }, [ 11065 isEnabledAndEditorReady, 11066 initializeMetaBoxes2, 11067 isCollaborationEnabled, 11068 setCollaborationSupported, 11069 hasIncompatibleMetaBoxes, 11070 hasActiveMetaBoxes, 11071 updateEditorSettings 11072 ]); 11073 }; 11074 11075 // packages/edit-post/build-module/components/layout/index.mjs 11076 var import_jsx_runtime42 = __toESM(require_jsx_runtime(), 1); 11077 var { useCommandContext } = unlock2(import_commands2.privateApis); 11078 var { useDrag } = unlock2(import_components9.privateApis); 11079 var { Editor, FullscreenMode, UploadProgressSnackbar } = unlock2(import_editor18.privateApis); 11080 var { BlockKeyboardShortcuts } = unlock2(import_block_library.privateApis); 11081 var DESIGN_POST_TYPES = [ 11082 "wp_template", 11083 "wp_template_part", 11084 "wp_block", 11085 "wp_navigation" 11086 ]; 11087 function useEditorStyles(settings) { 11088 const { hasThemeStyleSupport } = (0, import_data25.useSelect)((select3) => { 11089 return { 11090 hasThemeStyleSupport: select3(store).isFeatureActive("themeStyles") 11091 }; 11092 }, []); 11093 return (0, import_element27.useMemo)(() => { 11094 const presetStyles = settings.styles?.filter( 11095 (style) => style.__unstableType && style.__unstableType !== "theme" 11096 ) ?? []; 11097 const defaultEditorStyles = [ 11098 ...settings?.defaultEditorStyles ?? [], 11099 ...presetStyles 11100 ]; 11101 const hasThemeStyles = hasThemeStyleSupport && presetStyles.length !== (settings.styles?.length ?? 0); 11102 if (!settings.disableLayoutStyles && !hasThemeStyles) { 11103 defaultEditorStyles.push({ 11104 css: getLayoutStyles({ 11105 style: {}, 11106 selector: "body", 11107 hasBlockGapSupport: false, 11108 hasFallbackGapSupport: true, 11109 fallbackGapValue: "0.5em" 11110 }) 11111 }); 11112 } 11113 return hasThemeStyles ? settings.styles ?? [] : defaultEditorStyles; 11114 }, [ 11115 settings.defaultEditorStyles, 11116 settings.disableLayoutStyles, 11117 settings.styles, 11118 hasThemeStyleSupport 11119 ]); 11120 } 11121 function MetaBoxesMain({ isLegacy }) { 11122 const [isOpen, openHeight, hasAnyVisible] = (0, import_data25.useSelect)((select3) => { 11123 const { get } = select3(import_preferences10.store); 11124 const { isMetaBoxLocationVisible: isMetaBoxLocationVisible2 } = select3(store); 11125 return [ 11126 !!get("core/edit-post", "metaBoxesMainIsOpen"), 11127 get("core/edit-post", "metaBoxesMainOpenHeight"), 11128 isMetaBoxLocationVisible2("normal") || isMetaBoxLocationVisible2("advanced") || isMetaBoxLocationVisible2("side") 11129 ]; 11130 }, []); 11131 const { set: setPreference } = (0, import_data25.useDispatch)(import_preferences10.store); 11132 const isShort = (0, import_compose3.useMediaQuery)("(max-height: 549px)"); 11133 const [{ min: min2 = 0, max: max2 }, setHeightConstraints] = (0, import_element27.useState)(() => ({})); 11134 const effectSizeConstraints = (0, import_compose3.useRefEffect)((node) => { 11135 const container = node.closest( 11136 ".interface-interface-skeleton__content" 11137 ); 11138 if (!container) { 11139 return; 11140 } 11141 const noticeContainer = container.querySelector( 11142 ":scope > .notices-inline-notices-wrapper" 11143 ); 11144 const resizeHandle = container.querySelector( 11145 ".edit-post-meta-boxes-main__presenter" 11146 ); 11147 const deriveConstraints = () => { 11148 const fullHeight = container.offsetHeight; 11149 let nextMax = fullHeight; 11150 if (noticeContainer) { 11151 nextMax -= noticeContainer.offsetHeight; 11152 } 11153 const nextMin = resizeHandle?.offsetHeight ?? 0; 11154 setHeightConstraints({ min: nextMin, max: nextMax }); 11155 }; 11156 const observer = new window.ResizeObserver(deriveConstraints); 11157 observer.observe(container); 11158 if (noticeContainer) { 11159 observer.observe(noticeContainer); 11160 } 11161 return () => observer.disconnect(); 11162 }, []); 11163 const metaBoxesMainRef = (0, import_element27.useRef)(); 11164 const setMainRefs = (0, import_compose3.useMergeRefs)([ 11165 metaBoxesMainRef, 11166 effectSizeConstraints 11167 ]); 11168 const separatorRef = (0, import_element27.useRef)(); 11169 const separatorHelpId = (0, import_element27.useId)(); 11170 const heightRef = (0, import_element27.useRef)(); 11171 const getAriaValueNow = (height) => Math.round((height - min2) / (max2 - min2) * 100); 11172 const persistIsOpen = (to = !isOpen) => setPreference("core/edit-post", "metaBoxesMainIsOpen", to); 11173 const applyHeight = (candidateHeight = "auto", isPersistent) => { 11174 let styleHeight; 11175 if (candidateHeight === "auto") { 11176 isPersistent = false; 11177 styleHeight = candidateHeight; 11178 } else { 11179 candidateHeight = Math.min(max2, Math.max(min2, candidateHeight)); 11180 heightRef.current = candidateHeight; 11181 styleHeight = `$candidateHeight}px`; 11182 } 11183 if (isPersistent) { 11184 setPreference( 11185 "core/edit-post", 11186 "metaBoxesMainOpenHeight", 11187 candidateHeight 11188 ); 11189 } else { 11190 metaBoxesMainRef.current.style.height = styleHeight; 11191 if (!isShort) { 11192 separatorRef.current.ariaValueNow = getAriaValueNow(candidateHeight); 11193 } 11194 } 11195 }; 11196 const bindDragGesture = useDrag( 11197 ({ movement, first, last, memo, tap, args }) => { 11198 const pane = metaBoxesMainRef.current; 11199 const [, yMovement] = movement; 11200 if (first) { 11201 pane.classList.add("is-resizing"); 11202 let fromHeight = heightRef.current ?? pane.offsetHeight; 11203 if (isOpen) { 11204 if (fromHeight > max2) { 11205 fromHeight = max2; 11206 } 11207 } else { 11208 fromHeight = min2; 11209 } 11210 applyHeight(fromHeight - yMovement); 11211 return { fromHeight }; 11212 } 11213 if (!first && !last && !tap) { 11214 applyHeight(memo.fromHeight - yMovement); 11215 return memo; 11216 } 11217 pane.classList.remove("is-resizing"); 11218 if (tap) { 11219 const [onTap] = args; 11220 onTap?.(); 11221 return; 11222 } 11223 const nextIsOpen = heightRef.current > min2; 11224 persistIsOpen(nextIsOpen); 11225 applyHeight(heightRef.current, nextIsOpen); 11226 }, 11227 { keyboardDisplacement: 20, filterTaps: true } 11228 ); 11229 if (!hasAnyVisible) { 11230 return; 11231 } 11232 const contents = /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)( 11233 "div", 11234 { 11235 className: "edit-post-layout__metaboxes edit-post-meta-boxes-main__liner", 11236 hidden: !isLegacy && !isOpen, 11237 children: [ 11238 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(MetaBoxes, { location: "normal" }), 11239 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(MetaBoxes, { location: "advanced" }) 11240 ] 11241 } 11242 ); 11243 if (isLegacy) { 11244 return contents; 11245 } 11246 const isAutoHeight = openHeight === void 0; 11247 const usedOpenHeight = isShort ? "auto" : openHeight; 11248 const usedHeight = isOpen ? usedOpenHeight : min2; 11249 const usedAriaValueNow = max2 === void 0 || isAutoHeight ? 50 : getAriaValueNow(usedHeight); 11250 const paneLabel = (0, import_i18n14.__)("Meta Boxes"); 11251 const toggle = /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)( 11252 "button", 11253 { 11254 "aria-expanded": isOpen, 11255 onClick: ({ detail }) => { 11256 if (isShort || !detail) { 11257 persistIsOpen(); 11258 } 11259 }, 11260 ...!isShort && bindDragGesture(persistIsOpen), 11261 children: [ 11262 paneLabel, 11263 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_components9.Icon, { icon: isOpen ? chevron_up_default : chevron_down_default }) 11264 ] 11265 } 11266 ); 11267 const separator = !isShort && /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [ 11268 /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(tooltip_exports.Root, { children: [ 11269 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( 11270 tooltip_exports.Trigger, 11271 { 11272 render: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( 11273 "button", 11274 { 11275 ref: separatorRef, 11276 role: "separator", 11277 "aria-valuenow": usedAriaValueNow, 11278 "aria-label": (0, import_i18n14.__)("Drag to resize"), 11279 "aria-describedby": separatorHelpId, 11280 ...bindDragGesture() 11281 } 11282 ) 11283 } 11284 ), 11285 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(tooltip_exports.Popup, { children: (0, import_i18n14.__)("Drag to resize") }) 11286 ] }), 11287 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(VisuallyHidden, { id: separatorHelpId, children: (0, import_i18n14.__)( 11288 "Use up and down arrow keys to resize the meta box pane." 11289 ) }) 11290 ] }); 11291 return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)( 11292 navigable_region_default, 11293 { 11294 ariaLabel: paneLabel, 11295 ref: setMainRefs, 11296 className: clsx_default( 11297 "edit-post-meta-boxes-main", 11298 !isShort && "is-resizable" 11299 ), 11300 style: { height: usedHeight }, 11301 children: [ 11302 /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "edit-post-meta-boxes-main__presenter", children: [ 11303 toggle, 11304 separator 11305 ] }), 11306 contents 11307 ] 11308 } 11309 ); 11310 } 11311 function Layout({ 11312 postId: initialPostId, 11313 postType: initialPostType, 11314 settings, 11315 initialEdits 11316 }) { 11317 useCommands(); 11318 const shouldIframe = useShouldIframe(); 11319 const { createErrorNotice } = (0, import_data25.useDispatch)(import_notices3.store); 11320 const { 11321 currentPost: { postId: currentPostId, postType: currentPostType }, 11322 onNavigateToEntityRecord, 11323 onNavigateToPreviousEntityRecord 11324 } = useNavigateToEntityRecord( 11325 initialPostId, 11326 initialPostType, 11327 "post-only" 11328 ); 11329 const isEditingTemplate2 = currentPostType === "wp_template"; 11330 const { 11331 mode, 11332 isFullscreenActive, 11333 hasResolvedMode, 11334 hasActiveMetaboxes, 11335 hasBlockSelected, 11336 showIconLabels, 11337 isDistractionFree, 11338 showMetaBoxes, 11339 isWelcomeGuideVisible, 11340 templateId, 11341 isDevicePreview 11342 } = (0, import_data25.useSelect)( 11343 (select3) => { 11344 const { get } = select3(import_preferences10.store); 11345 const { isFeatureActive: isFeatureActive2, hasMetaBoxes: hasMetaBoxes2 } = select3(store); 11346 const { canUser, getPostType, getTemplateId } = unlock2( 11347 select3(import_core_data8.store) 11348 ); 11349 const supportsTemplateMode = settings.supportsTemplateMode; 11350 const isViewable = getPostType(currentPostType)?.viewable ?? false; 11351 const canViewTemplate = canUser("read", { 11352 kind: "postType", 11353 name: "wp_template" 11354 }); 11355 const { getBlockSelectionStart, isZoomOut } = unlock2( 11356 select3(import_block_editor2.store) 11357 ); 11358 const { getEditorMode: getEditorMode2, getDefaultRenderingMode, getDeviceType } = unlock2(select3(import_editor18.store)); 11359 const isNotDesignPostType = !DESIGN_POST_TYPES.includes(currentPostType); 11360 const isDirectlyEditingPattern = currentPostType === "wp_block" && !onNavigateToPreviousEntityRecord; 11361 const _templateId = getTemplateId(currentPostType, currentPostId); 11362 const defaultMode = getDefaultRenderingMode(currentPostType); 11363 return { 11364 mode: getEditorMode2(), 11365 isFullscreenActive: isFeatureActive2("fullscreenMode"), 11366 hasActiveMetaboxes: hasMetaBoxes2(), 11367 hasResolvedMode: defaultMode === "template-locked" ? !!_templateId : defaultMode !== void 0, 11368 hasBlockSelected: !!getBlockSelectionStart(), 11369 showIconLabels: get("core", "showIconLabels"), 11370 isDistractionFree: get("core", "distractionFree"), 11371 showMetaBoxes: isNotDesignPostType && !isZoomOut() || isDirectlyEditingPattern, 11372 isWelcomeGuideVisible: isFeatureActive2("welcomeGuide"), 11373 templateId: supportsTemplateMode && isViewable && canViewTemplate && !isEditingTemplate2 ? _templateId : null, 11374 isDevicePreview: getDeviceType() !== "Desktop" 11375 }; 11376 }, 11377 [ 11378 currentPostType, 11379 currentPostId, 11380 isEditingTemplate2, 11381 settings.supportsTemplateMode, 11382 onNavigateToPreviousEntityRecord 11383 ] 11384 ); 11385 useMetaBoxInitialization(hasActiveMetaboxes && hasResolvedMode); 11386 const commandContext = hasBlockSelected ? "block-selection-edit" : "entity-edit"; 11387 useCommandContext(commandContext); 11388 const styles = useEditorStyles(settings); 11389 const editorSettings = (0, import_element27.useMemo)( 11390 () => ({ 11391 ...settings, 11392 styles, 11393 onNavigateToEntityRecord, 11394 onNavigateToPreviousEntityRecord 11395 }), 11396 [ 11397 settings, 11398 styles, 11399 onNavigateToEntityRecord, 11400 onNavigateToPreviousEntityRecord 11401 ] 11402 ); 11403 if (showIconLabels) { 11404 document.body.classList.add("show-icon-labels"); 11405 } else { 11406 document.body.classList.remove("show-icon-labels"); 11407 } 11408 const navigateRegionsProps = (0, import_components9.__unstableUseNavigateRegions)(); 11409 const className = clsx_default("edit-post-layout", "is-mode-" + mode, { 11410 "has-metaboxes": hasActiveMetaboxes 11411 }); 11412 function onPluginAreaError(name) { 11413 createErrorNotice( 11414 (0, import_i18n14.sprintf)( 11415 /* translators: %s: plugin name */ 11416 (0, import_i18n14.__)( 11417 'The "%s" plugin has encountered an error and cannot be rendered.' 11418 ), 11419 name 11420 ) 11421 ); 11422 } 11423 const { createSuccessNotice } = (0, import_data25.useDispatch)(import_notices3.store); 11424 const onActionPerformed = (0, import_element27.useCallback)( 11425 (actionId, items) => { 11426 switch (actionId) { 11427 case "move-to-trash": 11428 { 11429 document.location.href = (0, import_url5.addQueryArgs)("edit.php", { 11430 trashed: 1, 11431 post_type: items[0].type, 11432 ids: items[0].id 11433 }); 11434 } 11435 break; 11436 case "duplicate-post": 11437 { 11438 const newItem = items[0]; 11439 const title = typeof newItem.title === "string" ? newItem.title : newItem.title?.rendered; 11440 createSuccessNotice( 11441 (0, import_i18n14.sprintf)( 11442 // translators: %s: Title of the created post or template, e.g: "Hello world". 11443 (0, import_i18n14.__)('"%s" successfully created.'), 11444 (0, import_html_entities.decodeEntities)(title) || (0, import_i18n14.__)("(no title)") 11445 ), 11446 { 11447 type: "snackbar", 11448 id: "duplicate-post-action", 11449 actions: [ 11450 { 11451 label: (0, import_i18n14.__)("Edit"), 11452 onClick: () => { 11453 const postId = newItem.id; 11454 document.location.href = (0, import_url5.addQueryArgs)("post.php", { 11455 post: postId, 11456 action: "edit" 11457 }); 11458 } 11459 } 11460 ] 11461 } 11462 ); 11463 } 11464 break; 11465 } 11466 }, 11467 [createSuccessNotice] 11468 ); 11469 const initialPost = (0, import_element27.useMemo)(() => { 11470 return { 11471 type: initialPostType, 11472 id: initialPostId 11473 }; 11474 }, [initialPostType, initialPostId]); 11475 const backButton = (0, import_compose3.useViewportMatch)("medium") && isFullscreenActive ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(back_button_default, { initialPost }) : null; 11476 return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_components9.SlotFillProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(tooltip_exports.Provider, { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_editor18.ErrorBoundary, { canCopyContent: true, children: [ 11477 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(WelcomeGuide, { postType: currentPostType }), 11478 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { ...navigateRegionsProps, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)( 11479 Editor, 11480 { 11481 settings: editorSettings, 11482 initialEdits, 11483 postType: currentPostType, 11484 postId: currentPostId, 11485 templateId, 11486 className, 11487 forceIsDirty: hasActiveMetaboxes, 11488 disableIframe: !shouldIframe, 11489 autoFocus: !isWelcomeGuideVisible, 11490 onActionPerformed, 11491 extraSidebarPanels: showMetaBoxes && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(MetaBoxes, { location: "side" }), 11492 extraContent: !isDistractionFree && showMetaBoxes && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)( 11493 MetaBoxesMain, 11494 { 11495 isLegacy: isDevicePreview 11496 } 11497 ), 11498 children: [ 11499 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_editor18.PostLockedModal, {}), 11500 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(EditorInitialization, {}), 11501 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(FullscreenMode, { isActive: isFullscreenActive }), 11502 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(BrowserURL, {}), 11503 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_editor18.UnsavedChangesWarning, {}), 11504 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_editor18.AutosaveMonitor, {}), 11505 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_editor18.LocalAutosaveMonitor, {}), 11506 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(keyboard_shortcuts_default, {}), 11507 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_editor18.EditorKeyboardShortcutsRegister, {}), 11508 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(BlockKeyboardShortcuts, {}), 11509 currentPostType === "wp_block" && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(InitPatternModal, {}), 11510 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_plugins.PluginArea, { onError: onPluginAreaError }), 11511 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(more_menu_default, {}), 11512 backButton, 11513 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_notices3.SnackbarNotices, { className: "edit-post-layout__snackbar" }), 11514 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(UploadProgressSnackbar, {}) 11515 ] 11516 } 11517 ) }) 11518 ] }) }) }); 11519 } 11520 var layout_default = Layout; 11521 11522 // packages/edit-post/build-module/deprecated.mjs 11523 var import_editor19 = __toESM(require_editor(), 1); 11524 var import_url6 = __toESM(require_url(), 1); 11525 var import_deprecated3 = __toESM(require_deprecated(), 1); 11526 var import_jsx_runtime43 = __toESM(require_jsx_runtime(), 1); 11527 var { PluginPostExcerpt } = unlock2(import_editor19.privateApis); 11528 var isSiteEditor = (0, import_url6.getPath)(window.location.href)?.includes( 11529 "site-editor.php" 11530 ); 11531 var deprecateSlot = (name) => { 11532 (0, import_deprecated3.default)(`wp.editPost.$name}`, { 11533 since: "6.6", 11534 alternative: `wp.editor.$name}` 11535 }); 11536 }; 11537 function PluginBlockSettingsMenuItem(props) { 11538 if (isSiteEditor) { 11539 return null; 11540 } 11541 deprecateSlot("PluginBlockSettingsMenuItem"); 11542 return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_editor19.PluginBlockSettingsMenuItem, { ...props }); 11543 } 11544 function PluginDocumentSettingPanel(props) { 11545 if (isSiteEditor) { 11546 return null; 11547 } 11548 deprecateSlot("PluginDocumentSettingPanel"); 11549 return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_editor19.PluginDocumentSettingPanel, { ...props }); 11550 } 11551 function PluginMoreMenuItem(props) { 11552 if (isSiteEditor) { 11553 return null; 11554 } 11555 deprecateSlot("PluginMoreMenuItem"); 11556 return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_editor19.PluginMoreMenuItem, { ...props }); 11557 } 11558 function PluginPrePublishPanel(props) { 11559 if (isSiteEditor) { 11560 return null; 11561 } 11562 deprecateSlot("PluginPrePublishPanel"); 11563 return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_editor19.PluginPrePublishPanel, { ...props }); 11564 } 11565 function PluginPostPublishPanel(props) { 11566 if (isSiteEditor) { 11567 return null; 11568 } 11569 deprecateSlot("PluginPostPublishPanel"); 11570 return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_editor19.PluginPostPublishPanel, { ...props }); 11571 } 11572 function PluginPostStatusInfo(props) { 11573 if (isSiteEditor) { 11574 return null; 11575 } 11576 deprecateSlot("PluginPostStatusInfo"); 11577 return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_editor19.PluginPostStatusInfo, { ...props }); 11578 } 11579 function PluginSidebar(props) { 11580 if (isSiteEditor) { 11581 return null; 11582 } 11583 deprecateSlot("PluginSidebar"); 11584 return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_editor19.PluginSidebar, { ...props }); 11585 } 11586 function PluginSidebarMoreMenuItem(props) { 11587 if (isSiteEditor) { 11588 return null; 11589 } 11590 deprecateSlot("PluginSidebarMoreMenuItem"); 11591 return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_editor19.PluginSidebarMoreMenuItem, { ...props }); 11592 } 11593 function __experimentalPluginPostExcerpt() { 11594 if (isSiteEditor) { 11595 return null; 11596 } 11597 (0, import_deprecated3.default)("wp.editPost.__experimentalPluginPostExcerpt", { 11598 since: "6.6", 11599 hint: "Core and custom panels can be access programmatically using their panel name.", 11600 link: "https://developer.wordpress.org/block-editor/reference-guides/slotfills/plugin-document-setting-panel/#accessing-a-panel-programmatically" 11601 }); 11602 return PluginPostExcerpt; 11603 } 11604 11605 // packages/edit-post/build-module/index.mjs 11606 var import_jsx_runtime44 = __toESM(require_jsx_runtime(), 1); 11607 var { 11608 BackButton: __experimentalMainDashboardButton, 11609 registerCoreBlockBindingsSources 11610 } = unlock2(import_editor20.privateApis); 11611 var { enablePreloadMultiUse, clearPreloadedData } = unlock2( 11612 import_api_fetch2.default.privateApis 11613 ); 11614 function initializeEditor(id, postType, postId, settings, initialEdits) { 11615 const isMediumOrBigger = window.matchMedia("(min-width: 782px)").matches; 11616 const target = document.getElementById(id); 11617 const root = (0, import_element28.createRoot)(target); 11618 (0, import_data26.dispatch)(import_preferences11.store).setDefaults("core/edit-post", { 11619 fullscreenMode: true, 11620 themeStyles: true, 11621 welcomeGuide: true, 11622 welcomeGuideTemplate: true 11623 }); 11624 (0, import_data26.dispatch)(import_preferences11.store).setDefaults("core", { 11625 allowRightClickOverrides: true, 11626 editorMode: "visual", 11627 editorTool: "edit", 11628 fixedToolbar: false, 11629 hiddenBlockTypes: [], 11630 inactivePanels: [], 11631 openPanels: ["post-status"], 11632 showBlockBreadcrumbs: true, 11633 showIconLabels: false, 11634 showListViewByDefault: false, 11635 enableChoosePatternModal: true, 11636 isPublishSidebarEnabled: true, 11637 showCollaborationCursor: false, 11638 showCollaborationNotifications: true 11639 }); 11640 if (window.__clientSideMediaProcessing) { 11641 (0, import_data26.dispatch)(import_preferences11.store).setDefaults("core/media", { 11642 requireApproval: true, 11643 optimizeOnUpload: true 11644 }); 11645 } 11646 (0, import_data26.dispatch)(import_blocks3.store).reapplyBlockTypeFilters(); 11647 if (isMediumOrBigger && (0, import_data26.select)(import_preferences11.store).get("core", "showListViewByDefault") && !(0, import_data26.select)(import_preferences11.store).get("core", "distractionFree")) { 11648 (0, import_data26.dispatch)(import_editor20.store).setIsListViewOpened(true); 11649 } 11650 (0, import_block_library2.registerCoreBlocks)(); 11651 registerCoreBlockBindingsSources(); 11652 (0, import_widgets.registerLegacyWidgetBlock)({ inserter: false }); 11653 (0, import_widgets.registerWidgetGroupBlock)({ inserter: false }); 11654 if (false) { 11655 (0, import_block_library2.__experimentalRegisterExperimentalCoreBlocks)({ 11656 enableFSEBlocks: settings.__unstableEnableFullSiteEditingBlocks 11657 }); 11658 } 11659 const documentMode = document.compatMode === "CSS1Compat" ? "Standards" : "Quirks"; 11660 if (documentMode !== "Standards") { 11661 console.warn( 11662 "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." 11663 ); 11664 } 11665 const isIphone = window.navigator.userAgent.indexOf("iPhone") !== -1; 11666 if (isIphone) { 11667 window.addEventListener("scroll", (event) => { 11668 const editorScrollContainer = document.getElementsByClassName( 11669 "interface-interface-skeleton__body" 11670 )[0]; 11671 if (event.target === document) { 11672 if (window.scrollY > 100) { 11673 editorScrollContainer.scrollTop = editorScrollContainer.scrollTop + window.scrollY; 11674 } 11675 if (document.getElementsByClassName("is-mode-visual")[0]) { 11676 window.scrollTo(0, 0); 11677 } 11678 } 11679 }); 11680 } 11681 window.addEventListener("dragover", (e) => e.preventDefault(), false); 11682 window.addEventListener("drop", (e) => e.preventDefault(), false); 11683 enablePreloadMultiUse(); 11684 const preloadedResolutions = preloadResolutions(postType, postId); 11685 preloadedResolutions.finally(() => { 11686 clearPreloadedData(); 11687 if (postType && postId) { 11688 const post = (0, import_data26.select)(import_core_data9.store).getEntityRecord( 11689 "postType", 11690 postType, 11691 postId 11692 ); 11693 if (post) { 11694 (0, import_data26.dispatch)(import_editor20.store).setupEditor( 11695 post, 11696 initialEdits, 11697 settings.template 11698 ); 11699 } 11700 } 11701 root.render( 11702 /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_element28.StrictMode, { children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)( 11703 layout_default, 11704 { 11705 settings, 11706 postId, 11707 postType, 11708 initialEdits 11709 } 11710 ) }) 11711 ); 11712 }); 11713 return root; 11714 } 11715 async function preloadResolutions(postType, postId) { 11716 const core = (0, import_data26.resolveSelect)(import_core_data9.store); 11717 const coreSelect = (0, import_data26.select)(import_core_data9.store); 11718 try { 11719 await Promise.all([ 11720 core.getCurrentUser(), 11721 core.getEntitiesConfig("postType"), 11722 core.getEntitiesConfig("taxonomy"), 11723 core.getEntitiesConfig("root"), 11724 core.getEntityRecords("root", "taxonomy"), 11725 core.getCurrentTheme(), 11726 // Forward-resolver alias of `getCurrentTheme` with its own 11727 // resolution metadata, so it needs a separate kick. 11728 core.getThemeSupports(), 11729 core.getBlockPatternCategories(), 11730 core.__experimentalGetCurrentGlobalStylesId(), 11731 core.__experimentalGetCurrentThemeBaseGlobalStyles(), 11732 core.__experimentalGetCurrentThemeGlobalStylesVariations(), 11733 core.getEntityRecord("root", "__unstableBase"), 11734 core.getEntityRecord("root", "site"), 11735 core.canUser("read", { kind: "root", name: "site" }), 11736 core.canUser("create", { kind: "postType", name: "attachment" }), 11737 core.canUser("create", { kind: "postType", name: "page" }), 11738 core.canUser("create", { kind: "postType", name: "wp_block" }), 11739 core.canUser("create", { 11740 kind: "postType", 11741 name: "wp_template" 11742 }), 11743 // Per-post resolvers. `getPostType` and `getEditedEntityRecord` 11744 // are shorthand/forward-resolver aliases with their own 11745 // resolution metadata, so they need separate kicks. 11746 ...postType && postId ? [ 11747 core.getPostType(postType), 11748 core.getEntityRecord("postType", postType, postId), 11749 core.getEditedEntityRecord( 11750 "postType", 11751 postType, 11752 postId 11753 ), 11754 core.getAutosaves(postType, postId), 11755 core.getDefaultTemplateId({ slug: "front-page" }), 11756 core.canUser("create", { 11757 kind: "postType", 11758 name: postType 11759 }) 11760 ] : [] 11761 ]); 11762 const tasks = []; 11763 const globalStylesId = coreSelect.__experimentalGetCurrentGlobalStylesId(); 11764 if (globalStylesId) { 11765 tasks.push( 11766 core.getEntityRecord("root", "globalStyles", globalStylesId), 11767 core.canUser("read", { 11768 kind: "root", 11769 name: "globalStyles", 11770 id: globalStylesId 11771 }) 11772 ); 11773 } 11774 if (postType && postId) { 11775 const post = coreSelect.getEntityRecord( 11776 "postType", 11777 postType, 11778 postId 11779 ); 11780 if (post) { 11781 let slug = "page" === postType ? "page" : "single-" + postType; 11782 if (post.slug) { 11783 slug += "-" + post.slug; 11784 } 11785 tasks.push(core.getDefaultTemplateId({ slug })); 11786 if (post.author) { 11787 tasks.push( 11788 core.getUser(post.author, { 11789 context: "view", 11790 _fields: "id,name" 11791 }) 11792 ); 11793 } 11794 } 11795 } 11796 if (tasks.length) { 11797 await Promise.all(tasks); 11798 } 11799 } catch { 11800 } 11801 } 11802 function reinitializeEditor() { 11803 (0, import_deprecated4.default)("wp.editPost.reinitializeEditor", { 11804 since: "6.2", 11805 version: "6.3" 11806 }); 11807 } 11808 return __toCommonJS(index_exports); 11809 })(); 11810 /*! Bundled license information: 11811 11812 use-sync-external-store/cjs/use-sync-external-store-shim.development.js: 11813 (** 11814 * @license React 11815 * use-sync-external-store-shim.development.js 11816 * 11817 * Copyright (c) Meta Platforms, Inc. and affiliates. 11818 * 11819 * This source code is licensed under the MIT license found in the 11820 * LICENSE file in the root directory of this source tree. 11821 *) 11822 11823 use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js: 11824 (** 11825 * @license React 11826 * use-sync-external-store-shim/with-selector.development.js 11827 * 11828 * Copyright (c) Meta Platforms, Inc. and affiliates. 11829 * 11830 * This source code is licensed under the MIT license found in the 11831 * LICENSE file in the root directory of this source tree. 11832 *) 11833 */
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated : Tue Jul 14 08:20:16 2026 | Cross-referenced by PHPXref |