| [ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
1 (function() { 2 var wp; 3 (wp ||= {}).editPost = (() => { 4 var __create = Object.create; 5 var __defProp = Object.defineProperty; 6 var __getOwnPropDesc = Object.getOwnPropertyDescriptor; 7 var __getOwnPropNames = Object.getOwnPropertyNames; 8 var __getProtoOf = Object.getPrototypeOf; 9 var __hasOwnProp = Object.prototype.hasOwnProperty; 10 var __commonJS = (cb, mod) => function __require() { 11 return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; 12 }; 13 var __export = (target, all) => { 14 for (var name in all) 15 __defProp(target, name, { get: all[name], enumerable: true }); 16 }; 17 var __copyProps = (to, from, except, desc) => { 18 if (from && typeof from === "object" || typeof from === "function") { 19 for (let key of __getOwnPropNames(from)) 20 if (!__hasOwnProp.call(to, key) && key !== except) 21 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 22 } 23 return to; 24 }; 25 var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( 26 // If the importer is in node compatibility mode or this is not an ESM 27 // file that has been converted to a CommonJS file using a Babel- 28 // compatible transform (i.e. "__esModule" has not been set), then set 29 // "default" to the CommonJS "module.exports" for node compatibility. 30 isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, 31 mod 32 )); 33 var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); 34 35 // package-external:@wordpress/blocks 36 var require_blocks = __commonJS({ 37 "package-external:@wordpress/blocks"(exports, module) { 38 module.exports = window.wp.blocks; 39 } 40 }); 41 42 // package-external:@wordpress/block-library 43 var require_block_library = __commonJS({ 44 "package-external:@wordpress/block-library"(exports, module) { 45 module.exports = window.wp.blockLibrary; 46 } 47 }); 48 49 // package-external:@wordpress/deprecated 50 var require_deprecated = __commonJS({ 51 "package-external:@wordpress/deprecated"(exports, module) { 52 module.exports = window.wp.deprecated; 53 } 54 }); 55 56 // package-external:@wordpress/element 57 var require_element = __commonJS({ 58 "package-external:@wordpress/element"(exports, module) { 59 module.exports = window.wp.element; 60 } 61 }); 62 63 // package-external:@wordpress/data 64 var require_data = __commonJS({ 65 "package-external:@wordpress/data"(exports, module) { 66 module.exports = window.wp.data; 67 } 68 }); 69 70 // package-external:@wordpress/preferences 71 var require_preferences = __commonJS({ 72 "package-external:@wordpress/preferences"(exports, module) { 73 module.exports = window.wp.preferences; 74 } 75 }); 76 77 // package-external:@wordpress/widgets 78 var require_widgets = __commonJS({ 79 "package-external:@wordpress/widgets"(exports, module) { 80 module.exports = window.wp.widgets; 81 } 82 }); 83 84 // package-external:@wordpress/editor 85 var require_editor = __commonJS({ 86 "package-external:@wordpress/editor"(exports, module) { 87 module.exports = window.wp.editor; 88 } 89 }); 90 91 // package-external:@wordpress/core-data 92 var require_core_data = __commonJS({ 93 "package-external:@wordpress/core-data"(exports, module) { 94 module.exports = window.wp.coreData; 95 } 96 }); 97 98 // package-external:@wordpress/api-fetch 99 var require_api_fetch = __commonJS({ 100 "package-external:@wordpress/api-fetch"(exports, module) { 101 module.exports = window.wp.apiFetch; 102 } 103 }); 104 105 // package-external:@wordpress/i18n 106 var require_i18n = __commonJS({ 107 "package-external:@wordpress/i18n"(exports, module) { 108 module.exports = window.wp.i18n; 109 } 110 }); 111 112 // vendor-external:react 113 var require_react = __commonJS({ 114 "vendor-external:react"(exports, module) { 115 module.exports = window.React; 116 } 117 }); 118 119 // vendor-external:react/jsx-runtime 120 var require_jsx_runtime = __commonJS({ 121 "vendor-external:react/jsx-runtime"(exports, module) { 122 module.exports = window.ReactJSXRuntime; 123 } 124 }); 125 126 // vendor-external:react-dom 127 var require_react_dom = __commonJS({ 128 "vendor-external:react-dom"(exports, module) { 129 module.exports = window.ReactDOM; 130 } 131 }); 132 133 // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js 134 var require_use_sync_external_store_shim_development = __commonJS({ 135 "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(exports) { 136 "use strict"; 137 (function() { 138 function is(x, y) { 139 return x === y && (0 !== x || 1 / x === 1 / y) || x !== x && y !== y; 140 } 141 function useSyncExternalStore$2(subscribe, getSnapshot) { 142 didWarnOld18Alpha || void 0 === React48.startTransition || (didWarnOld18Alpha = true, console.error( 143 "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." 144 )); 145 var value = getSnapshot(); 146 if (!didWarnUncachedGetSnapshot) { 147 var cachedValue = getSnapshot(); 148 objectIs(value, cachedValue) || (console.error( 149 "The result of getSnapshot should be cached to avoid an infinite loop" 150 ), didWarnUncachedGetSnapshot = true); 151 } 152 cachedValue = useState16({ 153 inst: { value, getSnapshot } 154 }); 155 var inst = cachedValue[0].inst, forceUpdate = cachedValue[1]; 156 useLayoutEffect4( 157 function() { 158 inst.value = value; 159 inst.getSnapshot = getSnapshot; 160 checkIfSnapshotChanged(inst) && forceUpdate({ inst }); 161 }, 162 [subscribe, value, getSnapshot] 163 ); 164 useEffect17( 165 function() { 166 checkIfSnapshotChanged(inst) && forceUpdate({ inst }); 167 return subscribe(function() { 168 checkIfSnapshotChanged(inst) && forceUpdate({ inst }); 169 }); 170 }, 171 [subscribe] 172 ); 173 useDebugValue2(value); 174 return value; 175 } 176 function checkIfSnapshotChanged(inst) { 177 var latestGetSnapshot = inst.getSnapshot; 178 inst = inst.value; 179 try { 180 var nextValue = latestGetSnapshot(); 181 return !objectIs(inst, nextValue); 182 } catch (error) { 183 return true; 184 } 185 } 186 function useSyncExternalStore$1(subscribe, getSnapshot) { 187 return getSnapshot(); 188 } 189 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); 190 var React48 = require_react(), objectIs = "function" === typeof Object.is ? Object.is : is, useState16 = React48.useState, useEffect17 = React48.useEffect, useLayoutEffect4 = React48.useLayoutEffect, useDebugValue2 = React48.useDebugValue, didWarnOld18Alpha = false, didWarnUncachedGetSnapshot = false, shim = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2; 191 exports.useSyncExternalStore = void 0 !== React48.useSyncExternalStore ? React48.useSyncExternalStore : shim; 192 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); 193 })(); 194 } 195 }); 196 197 // node_modules/use-sync-external-store/shim/index.js 198 var require_shim = __commonJS({ 199 "node_modules/use-sync-external-store/shim/index.js"(exports, module) { 200 "use strict"; 201 if (false) { 202 module.exports = null; 203 } else { 204 module.exports = require_use_sync_external_store_shim_development(); 205 } 206 } 207 }); 208 209 // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js 210 var require_with_selector_development = __commonJS({ 211 "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js"(exports) { 212 "use strict"; 213 (function() { 214 function is(x, y) { 215 return x === y && (0 !== x || 1 / x === 1 / y) || x !== x && y !== y; 216 } 217 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); 218 var React48 = require_react(), shim = require_shim(), objectIs = "function" === typeof Object.is ? Object.is : is, useSyncExternalStore3 = shim.useSyncExternalStore, useRef22 = React48.useRef, useEffect17 = React48.useEffect, useMemo17 = React48.useMemo, useDebugValue2 = React48.useDebugValue; 219 exports.useSyncExternalStoreWithSelector = function(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) { 220 var instRef = useRef22(null); 221 if (null === instRef.current) { 222 var inst = { hasValue: false, value: null }; 223 instRef.current = inst; 224 } else inst = instRef.current; 225 instRef = useMemo17( 226 function() { 227 function memoizedSelector(nextSnapshot) { 228 if (!hasMemo) { 229 hasMemo = true; 230 memoizedSnapshot = nextSnapshot; 231 nextSnapshot = selector(nextSnapshot); 232 if (void 0 !== isEqual && inst.hasValue) { 233 var currentSelection = inst.value; 234 if (isEqual(currentSelection, nextSnapshot)) 235 return memoizedSelection = currentSelection; 236 } 237 return memoizedSelection = nextSnapshot; 238 } 239 currentSelection = memoizedSelection; 240 if (objectIs(memoizedSnapshot, nextSnapshot)) 241 return currentSelection; 242 var nextSelection = selector(nextSnapshot); 243 if (void 0 !== isEqual && isEqual(currentSelection, nextSelection)) 244 return memoizedSnapshot = nextSnapshot, currentSelection; 245 memoizedSnapshot = nextSnapshot; 246 return memoizedSelection = nextSelection; 247 } 248 var hasMemo = false, memoizedSnapshot, memoizedSelection, maybeGetServerSnapshot = void 0 === getServerSnapshot ? null : getServerSnapshot; 249 return [ 250 function() { 251 return memoizedSelector(getSnapshot()); 252 }, 253 null === maybeGetServerSnapshot ? void 0 : function() { 254 return memoizedSelector(maybeGetServerSnapshot()); 255 } 256 ]; 257 }, 258 [getSnapshot, getServerSnapshot, selector, isEqual] 259 ); 260 var value = useSyncExternalStore3(subscribe, instRef[0], instRef[1]); 261 useEffect17( 262 function() { 263 inst.hasValue = true; 264 inst.value = value; 265 }, 266 [value] 267 ); 268 useDebugValue2(value); 269 return value; 270 }; 271 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); 272 })(); 273 } 274 }); 275 276 // node_modules/use-sync-external-store/shim/with-selector.js 277 var require_with_selector = __commonJS({ 278 "node_modules/use-sync-external-store/shim/with-selector.js"(exports, module) { 279 "use strict"; 280 if (false) { 281 module.exports = null; 282 } else { 283 module.exports = require_with_selector_development(); 284 } 285 } 286 }); 287 288 // package-external:@wordpress/compose 289 var require_compose = __commonJS({ 290 "package-external:@wordpress/compose"(exports, module) { 291 module.exports = window.wp.compose; 292 } 293 }); 294 295 // package-external:@wordpress/theme 296 var require_theme = __commonJS({ 297 "package-external:@wordpress/theme"(exports, module) { 298 module.exports = window.wp.theme; 299 } 300 }); 301 302 // package-external:@wordpress/private-apis 303 var require_private_apis = __commonJS({ 304 "package-external:@wordpress/private-apis"(exports, module) { 305 module.exports = window.wp.privateApis; 306 } 307 }); 308 309 // package-external:@wordpress/primitives 310 var require_primitives = __commonJS({ 311 "package-external:@wordpress/primitives"(exports, module) { 312 module.exports = window.wp.primitives; 313 } 314 }); 315 316 // package-external:@wordpress/components 317 var require_components = __commonJS({ 318 "package-external:@wordpress/components"(exports, module) { 319 module.exports = window.wp.components; 320 } 321 }); 322 323 // package-external:@wordpress/block-editor 324 var require_block_editor = __commonJS({ 325 "package-external:@wordpress/block-editor"(exports, module) { 326 module.exports = window.wp.blockEditor; 327 } 328 }); 329 330 // package-external:@wordpress/style-engine 331 var require_style_engine = __commonJS({ 332 "package-external:@wordpress/style-engine"(exports, module) { 333 module.exports = window.wp.styleEngine; 334 } 335 }); 336 337 // package-external:@wordpress/plugins 338 var require_plugins = __commonJS({ 339 "package-external:@wordpress/plugins"(exports, module) { 340 module.exports = window.wp.plugins; 341 } 342 }); 343 344 // package-external:@wordpress/notices 345 var require_notices = __commonJS({ 346 "package-external:@wordpress/notices"(exports, module) { 347 module.exports = window.wp.notices; 348 } 349 }); 350 351 // package-external:@wordpress/commands 352 var require_commands = __commonJS({ 353 "package-external:@wordpress/commands"(exports, module) { 354 module.exports = window.wp.commands; 355 } 356 }); 357 358 // package-external:@wordpress/url 359 var require_url = __commonJS({ 360 "package-external:@wordpress/url"(exports, module) { 361 module.exports = window.wp.url; 362 } 363 }); 364 365 // package-external:@wordpress/html-entities 366 var require_html_entities = __commonJS({ 367 "package-external:@wordpress/html-entities"(exports, module) { 368 module.exports = window.wp.htmlEntities; 369 } 370 }); 371 372 // package-external:@wordpress/keyboard-shortcuts 373 var require_keyboard_shortcuts = __commonJS({ 374 "package-external:@wordpress/keyboard-shortcuts"(exports, module) { 375 module.exports = window.wp.keyboardShortcuts; 376 } 377 }); 378 379 // package-external:@wordpress/hooks 380 var require_hooks = __commonJS({ 381 "package-external:@wordpress/hooks"(exports, module) { 382 module.exports = window.wp.hooks; 383 } 384 }); 385 386 // package-external:@wordpress/keycodes 387 var require_keycodes = __commonJS({ 388 "package-external:@wordpress/keycodes"(exports, module) { 389 module.exports = window.wp.keycodes; 390 } 391 }); 392 393 // packages/edit-post/build-module/index.mjs 394 var index_exports = {}; 395 __export(index_exports, { 396 PluginBlockSettingsMenuItem: () => PluginBlockSettingsMenuItem, 397 PluginDocumentSettingPanel: () => PluginDocumentSettingPanel, 398 PluginMoreMenuItem: () => PluginMoreMenuItem, 399 PluginPostPublishPanel: () => PluginPostPublishPanel, 400 PluginPostStatusInfo: () => PluginPostStatusInfo, 401 PluginPrePublishPanel: () => PluginPrePublishPanel, 402 PluginSidebar: () => PluginSidebar, 403 PluginSidebarMoreMenuItem: () => PluginSidebarMoreMenuItem, 404 __experimentalFullscreenModeClose: () => fullscreen_mode_close_default, 405 __experimentalMainDashboardButton: () => __experimentalMainDashboardButton, 406 __experimentalPluginPostExcerpt: () => __experimentalPluginPostExcerpt, 407 initializeEditor: () => initializeEditor, 408 reinitializeEditor: () => reinitializeEditor, 409 store: () => store 410 }); 411 var import_blocks2 = __toESM(require_blocks(), 1); 412 var import_block_library = __toESM(require_block_library(), 1); 413 var import_deprecated4 = __toESM(require_deprecated(), 1); 414 var import_element30 = __toESM(require_element(), 1); 415 var import_data27 = __toESM(require_data(), 1); 416 var import_preferences11 = __toESM(require_preferences(), 1); 417 var import_widgets = __toESM(require_widgets(), 1); 418 var import_editor21 = __toESM(require_editor(), 1); 419 var import_core_data10 = __toESM(require_core_data(), 1); 420 var import_api_fetch2 = __toESM(require_api_fetch(), 1); 421 422 // node_modules/clsx/dist/clsx.mjs 423 function r(e) { 424 var t, f, n = ""; 425 if ("string" == typeof e || "number" == typeof e) n += e; 426 else if ("object" == typeof e) if (Array.isArray(e)) { 427 var o = e.length; 428 for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f); 429 } else for (f in e) e[f] && (n && (n += " "), n += f); 430 return n; 431 } 432 function clsx() { 433 for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t); 434 return n; 435 } 436 var clsx_default = clsx; 437 438 // node_modules/@base-ui/utils/safeReact.mjs 439 var React = __toESM(require_react(), 1); 440 var SafeReact = { 441 ...React 442 }; 443 444 // node_modules/@base-ui/utils/useRefWithInit.mjs 445 var React2 = __toESM(require_react(), 1); 446 var UNINITIALIZED = {}; 447 function useRefWithInit(init, initArg) { 448 const ref = React2.useRef(UNINITIALIZED); 449 if (ref.current === UNINITIALIZED) { 450 ref.current = init(initArg); 451 } 452 return ref; 453 } 454 455 // node_modules/@base-ui/utils/useStableCallback.mjs 456 var useInsertionEffect = SafeReact.useInsertionEffect; 457 var useSafeInsertionEffect = ( 458 // React 17 doesn't have useInsertionEffect. 459 useInsertionEffect && // Preact replaces useInsertionEffect with useLayoutEffect and fires too late. 460 useInsertionEffect !== SafeReact.useLayoutEffect ? useInsertionEffect : (fn) => fn() 461 ); 462 function useStableCallback(callback) { 463 const stable = useRefWithInit(createStableCallback).current; 464 stable.next = callback; 465 useSafeInsertionEffect(stable.effect); 466 return stable.trampoline; 467 } 468 function createStableCallback() { 469 const stable = { 470 next: void 0, 471 callback: assertNotCalled, 472 trampoline: (...args) => stable.callback?.(...args), 473 effect: () => { 474 stable.callback = stable.next; 475 } 476 }; 477 return stable; 478 } 479 function assertNotCalled() { 480 if (true) { 481 throw ( 482 /* minify-error-disabled */ 483 new Error("Base UI: Cannot call an event handler while rendering.") 484 ); 485 } 486 } 487 488 // node_modules/@base-ui/utils/warn.mjs 489 var set; 490 if (true) { 491 set = /* @__PURE__ */ new Set(); 492 } 493 function warn(...messages) { 494 if (true) { 495 const messageKey = messages.join(" "); 496 if (!set.has(messageKey)) { 497 set.add(messageKey); 498 console.warn(`Base UI: $messageKey}`); 499 } 500 } 501 } 502 503 // node_modules/@base-ui/utils/useIsoLayoutEffect.mjs 504 var React3 = __toESM(require_react(), 1); 505 var noop = () => { 506 }; 507 var useIsoLayoutEffect = typeof document !== "undefined" ? React3.useLayoutEffect : noop; 508 509 // node_modules/@base-ui/react/internals/useRenderElement.mjs 510 var React6 = __toESM(require_react(), 1); 511 512 // node_modules/@base-ui/utils/useMergedRefs.mjs 513 function useMergedRefs(a, b, c, d) { 514 const forkRef = useRefWithInit(createForkRef).current; 515 if (didChange(forkRef, a, b, c, d)) { 516 update(forkRef, [a, b, c, d]); 517 } 518 return forkRef.callback; 519 } 520 function useMergedRefsN(refs) { 521 const forkRef = useRefWithInit(createForkRef).current; 522 if (didChangeN(forkRef, refs)) { 523 update(forkRef, refs); 524 } 525 return forkRef.callback; 526 } 527 function createForkRef() { 528 return { 529 callback: null, 530 cleanup: null, 531 refs: [] 532 }; 533 } 534 function didChange(forkRef, a, b, c, d) { 535 return forkRef.refs[0] !== a || forkRef.refs[1] !== b || forkRef.refs[2] !== c || forkRef.refs[3] !== d; 536 } 537 function didChangeN(forkRef, newRefs) { 538 return forkRef.refs.length !== newRefs.length || forkRef.refs.some((ref, index2) => ref !== newRefs[index2]); 539 } 540 function update(forkRef, refs) { 541 forkRef.refs = refs; 542 if (refs.every((ref) => ref == null)) { 543 forkRef.callback = null; 544 return; 545 } 546 forkRef.callback = (instance) => { 547 if (forkRef.cleanup) { 548 forkRef.cleanup(); 549 forkRef.cleanup = null; 550 } 551 if (instance != null) { 552 const cleanupCallbacks = Array(refs.length).fill(null); 553 for (let i = 0; i < refs.length; i += 1) { 554 const ref = refs[i]; 555 if (ref == null) { 556 continue; 557 } 558 switch (typeof ref) { 559 case "function": { 560 const refCleanup = ref(instance); 561 if (typeof refCleanup === "function") { 562 cleanupCallbacks[i] = refCleanup; 563 } 564 break; 565 } 566 case "object": { 567 ref.current = instance; 568 break; 569 } 570 default: 571 } 572 } 573 forkRef.cleanup = () => { 574 for (let i = 0; i < refs.length; i += 1) { 575 const ref = refs[i]; 576 if (ref == null) { 577 continue; 578 } 579 switch (typeof ref) { 580 case "function": { 581 const cleanupCallback = cleanupCallbacks[i]; 582 if (typeof cleanupCallback === "function") { 583 cleanupCallback(); 584 } else { 585 void ref(null); 586 } 587 break; 588 } 589 case "object": { 590 ref.current = null; 591 break; 592 } 593 default: 594 } 595 } 596 }; 597 } 598 }; 599 } 600 601 // node_modules/@base-ui/utils/getReactElementRef.mjs 602 var React5 = __toESM(require_react(), 1); 603 604 // node_modules/@base-ui/utils/reactVersion.mjs 605 var React4 = __toESM(require_react(), 1); 606 var majorVersion = parseInt(React4.version, 10); 607 function isReactVersionAtLeast(reactVersionToCheck) { 608 return majorVersion >= reactVersionToCheck; 609 } 610 611 // node_modules/@base-ui/utils/getReactElementRef.mjs 612 function getReactElementRef(element) { 613 if (!/* @__PURE__ */ React5.isValidElement(element)) { 614 return null; 615 } 616 const reactElement = element; 617 const propsWithRef = reactElement.props; 618 return (isReactVersionAtLeast(19) ? propsWithRef?.ref : reactElement.ref) ?? null; 619 } 620 621 // node_modules/@base-ui/utils/mergeObjects.mjs 622 function mergeObjects(a, b) { 623 if (a && !b) { 624 return a; 625 } 626 if (!a && b) { 627 return b; 628 } 629 if (a || b) { 630 return { 631 ...a, 632 ...b 633 }; 634 } 635 return void 0; 636 } 637 638 // node_modules/@base-ui/utils/empty.mjs 639 function NOOP() { 640 } 641 var EMPTY_ARRAY = Object.freeze([]); 642 var EMPTY_OBJECT = Object.freeze({}); 643 644 // node_modules/@base-ui/react/internals/getStateAttributesProps.mjs 645 function getStateAttributesProps(state, customMapping) { 646 const props = {}; 647 for (const key in state) { 648 const value = state[key]; 649 if (customMapping?.hasOwnProperty(key)) { 650 const customProps = customMapping[key](value); 651 if (customProps != null) { 652 Object.assign(props, customProps); 653 } 654 continue; 655 } 656 if (value === true) { 657 props[`data-$key.toLowerCase()}`] = ""; 658 } else if (value) { 659 props[`data-$key.toLowerCase()}`] = value.toString(); 660 } 661 } 662 return props; 663 } 664 665 // node_modules/@base-ui/react/utils/resolveClassName.mjs 666 function resolveClassName(className, state) { 667 return typeof className === "function" ? className(state) : className; 668 } 669 670 // node_modules/@base-ui/react/utils/resolveStyle.mjs 671 function resolveStyle(style, state) { 672 return typeof style === "function" ? style(state) : style; 673 } 674 675 // node_modules/@base-ui/react/merge-props/mergeProps.mjs 676 var EMPTY_PROPS = {}; 677 function mergeProps(a, b, c, d, e) { 678 if (!c && !d && !e && !a) { 679 return createInitialMergedProps(b); 680 } 681 let merged = createInitialMergedProps(a); 682 if (b) { 683 merged = mergeInto(merged, b); 684 } 685 if (c) { 686 merged = mergeInto(merged, c); 687 } 688 if (d) { 689 merged = mergeInto(merged, d); 690 } 691 if (e) { 692 merged = mergeInto(merged, e); 693 } 694 return merged; 695 } 696 function mergePropsN(props) { 697 if (props.length === 0) { 698 return EMPTY_PROPS; 699 } 700 if (props.length === 1) { 701 return createInitialMergedProps(props[0]); 702 } 703 let merged = createInitialMergedProps(props[0]); 704 for (let i = 1; i < props.length; i += 1) { 705 merged = mergeInto(merged, props[i]); 706 } 707 return merged; 708 } 709 function createInitialMergedProps(inputProps) { 710 if (isPropsGetter(inputProps)) { 711 return { 712 ...resolvePropsGetter(inputProps, EMPTY_PROPS) 713 }; 714 } 715 return copyInitialProps(inputProps); 716 } 717 function mergeInto(merged, inputProps) { 718 if (isPropsGetter(inputProps)) { 719 return resolvePropsGetter(inputProps, merged); 720 } 721 return mutablyMergeInto(merged, inputProps); 722 } 723 function copyInitialProps(inputProps) { 724 const copiedProps = { 725 ...inputProps 726 }; 727 for (const propName in copiedProps) { 728 const propValue = copiedProps[propName]; 729 if (isEventHandler(propName, propValue)) { 730 copiedProps[propName] = wrapEventHandler(propValue); 731 } 732 } 733 return copiedProps; 734 } 735 function mutablyMergeInto(mergedProps, externalProps) { 736 if (!externalProps) { 737 return mergedProps; 738 } 739 for (const propName in externalProps) { 740 const externalPropValue = externalProps[propName]; 741 switch (propName) { 742 case "style": { 743 mergedProps[propName] = mergeObjects(mergedProps.style, externalPropValue); 744 break; 745 } 746 case "className": { 747 mergedProps[propName] = mergeClassNames(mergedProps.className, externalPropValue); 748 break; 749 } 750 default: { 751 if (isEventHandler(propName, externalPropValue)) { 752 mergedProps[propName] = mergeEventHandlers(mergedProps[propName], externalPropValue); 753 } else { 754 mergedProps[propName] = externalPropValue; 755 } 756 } 757 } 758 } 759 return mergedProps; 760 } 761 function isEventHandler(key, value) { 762 const code0 = key.charCodeAt(0); 763 const code1 = key.charCodeAt(1); 764 const code2 = key.charCodeAt(2); 765 return code0 === 111 && code1 === 110 && code2 >= 65 && code2 <= 90 && (typeof value === "function" || typeof value === "undefined"); 766 } 767 function isPropsGetter(inputProps) { 768 return typeof inputProps === "function"; 769 } 770 function resolvePropsGetter(inputProps, previousProps) { 771 if (isPropsGetter(inputProps)) { 772 return inputProps(previousProps); 773 } 774 return inputProps ?? EMPTY_PROPS; 775 } 776 function mergeEventHandlers(ourHandler, theirHandler) { 777 if (!theirHandler) { 778 return ourHandler; 779 } 780 if (!ourHandler) { 781 return wrapEventHandler(theirHandler); 782 } 783 return (...args) => { 784 const event = args[0]; 785 if (isSyntheticEvent(event)) { 786 const baseUIEvent = event; 787 makeEventPreventable(baseUIEvent); 788 const result2 = theirHandler(...args); 789 if (!baseUIEvent.baseUIHandlerPrevented) { 790 ourHandler?.(...args); 791 } 792 return result2; 793 } 794 const result = theirHandler(...args); 795 ourHandler?.(...args); 796 return result; 797 }; 798 } 799 function wrapEventHandler(handler) { 800 if (!handler) { 801 return handler; 802 } 803 return (...args) => { 804 const event = args[0]; 805 if (isSyntheticEvent(event)) { 806 makeEventPreventable(event); 807 } 808 return handler(...args); 809 }; 810 } 811 function makeEventPreventable(event) { 812 event.preventBaseUIHandler = () => { 813 event.baseUIHandlerPrevented = true; 814 }; 815 return event; 816 } 817 function mergeClassNames(ourClassName, theirClassName) { 818 if (theirClassName) { 819 if (ourClassName) { 820 return theirClassName + " " + ourClassName; 821 } 822 return theirClassName; 823 } 824 return ourClassName; 825 } 826 function isSyntheticEvent(event) { 827 return event != null && typeof event === "object" && "nativeEvent" in event; 828 } 829 830 // node_modules/@base-ui/react/internals/useRenderElement.mjs 831 var import_react = __toESM(require_react(), 1); 832 function useRenderElement(element, componentProps, params = {}) { 833 const renderProp = componentProps.render; 834 const outProps = useRenderElementProps(componentProps, params); 835 if (params.enabled === false) { 836 return null; 837 } 838 const state = params.state ?? EMPTY_OBJECT; 839 return evaluateRenderProp(element, renderProp, outProps, state); 840 } 841 function useRenderElementProps(componentProps, params = {}) { 842 const { 843 className: classNameProp, 844 style: styleProp, 845 render: renderProp 846 } = componentProps; 847 const { 848 state = EMPTY_OBJECT, 849 ref, 850 props, 851 stateAttributesMapping, 852 enabled = true 853 } = params; 854 const className = enabled ? resolveClassName(classNameProp, state) : void 0; 855 const style = enabled ? resolveStyle(styleProp, state) : void 0; 856 const stateProps = enabled ? getStateAttributesProps(state, stateAttributesMapping) : EMPTY_OBJECT; 857 const resolvedProps = enabled && props ? resolveRenderFunctionProps(props) : void 0; 858 const outProps = enabled ? mergeObjects(stateProps, resolvedProps) ?? {} : EMPTY_OBJECT; 859 if (typeof document !== "undefined") { 860 if (!enabled) { 861 void useMergedRefs(null, null); 862 } else if (Array.isArray(ref)) { 863 outProps.ref = useMergedRefsN([outProps.ref, getReactElementRef(renderProp), ...ref]); 864 } else { 865 outProps.ref = useMergedRefs(outProps.ref, getReactElementRef(renderProp), ref); 866 } 867 } 868 if (!enabled) { 869 return EMPTY_OBJECT; 870 } 871 if (className !== void 0) { 872 outProps.className = mergeClassNames(outProps.className, className); 873 } 874 if (style !== void 0) { 875 outProps.style = mergeObjects(outProps.style, style); 876 } 877 return outProps; 878 } 879 function resolveRenderFunctionProps(props) { 880 if (Array.isArray(props)) { 881 return mergePropsN(props); 882 } 883 return mergeProps(void 0, props); 884 } 885 var REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for("react.lazy"); 886 var COMPONENT_IDENTIFIER_PATTERN = /^[A-Z][A-Za-z0-9$]*$/; 887 var LOWERCASE_CHARACTER_PATTERN = /[a-z]/; 888 function evaluateRenderProp(element, render, props, state) { 889 if (render) { 890 if (typeof render === "function") { 891 if (true) { 892 warnIfRenderPropLooksLikeComponent(render); 893 } 894 return render(props, state); 895 } 896 const mergedProps = mergeProps(props, render.props); 897 mergedProps.ref = props.ref; 898 let newElement = render; 899 if (newElement?.$$typeof === REACT_LAZY_TYPE) { 900 const children = React6.Children.toArray(render); 901 newElement = children[0]; 902 } 903 if (true) { 904 if (!/* @__PURE__ */ React6.isValidElement(newElement)) { 905 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")); 906 } 907 } 908 return /* @__PURE__ */ React6.cloneElement(newElement, mergedProps); 909 } 910 if (element) { 911 if (typeof element === "string") { 912 return renderTag(element, props); 913 } 914 } 915 throw new Error(true ? "Base UI: Render element or function are not defined." : formatErrorMessage_default(8)); 916 } 917 function warnIfRenderPropLooksLikeComponent(renderFn) { 918 const functionName = renderFn.name; 919 if (functionName.length === 0) { 920 return; 921 } 922 if (!COMPONENT_IDENTIFIER_PATTERN.test(functionName)) { 923 return; 924 } 925 if (!LOWERCASE_CHARACTER_PATTERN.test(functionName)) { 926 return; 927 } 928 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"); 929 } 930 function renderTag(Tag, props) { 931 if (Tag === "button") { 932 return /* @__PURE__ */ (0, import_react.createElement)("button", { 933 type: "button", 934 ...props, 935 key: props.key 936 }); 937 } 938 if (Tag === "img") { 939 return /* @__PURE__ */ (0, import_react.createElement)("img", { 940 alt: "", 941 ...props, 942 key: props.key 943 }); 944 } 945 return /* @__PURE__ */ React6.createElement(Tag, props); 946 } 947 948 // node_modules/@base-ui/utils/useId.mjs 949 var React7 = __toESM(require_react(), 1); 950 var globalId = 0; 951 function useGlobalId(idOverride, prefix = "mui") { 952 const [defaultId, setDefaultId] = React7.useState(idOverride); 953 const id = idOverride || defaultId; 954 React7.useEffect(() => { 955 if (defaultId == null) { 956 globalId += 1; 957 setDefaultId(`$prefix}-$globalId}`); 958 } 959 }, [defaultId, prefix]); 960 return id; 961 } 962 var maybeReactUseId = SafeReact.useId; 963 function useId(idOverride, prefix) { 964 if (maybeReactUseId !== void 0) { 965 const reactId = maybeReactUseId(); 966 return idOverride ?? (prefix ? `$prefix}-$reactId}` : reactId); 967 } 968 return useGlobalId(idOverride, prefix); 969 } 970 971 // node_modules/@base-ui/react/internals/useBaseUiId.mjs 972 function useBaseUiId(idOverride) { 973 return useId(idOverride, "base-ui"); 974 } 975 976 // node_modules/@base-ui/react/internals/reason-parts.mjs 977 var reason_parts_exports = {}; 978 __export(reason_parts_exports, { 979 cancelOpen: () => cancelOpen, 980 chipRemovePress: () => chipRemovePress, 981 clearPress: () => clearPress, 982 closePress: () => closePress, 983 closeWatcher: () => closeWatcher, 984 decrementPress: () => decrementPress, 985 disabled: () => disabled, 986 drag: () => drag, 987 escapeKey: () => escapeKey, 988 focusOut: () => focusOut, 989 imperativeAction: () => imperativeAction, 990 incrementPress: () => incrementPress, 991 initial: () => initial, 992 inputBlur: () => inputBlur, 993 inputChange: () => inputChange, 994 inputClear: () => inputClear, 995 inputPaste: () => inputPaste, 996 inputPress: () => inputPress, 997 itemPress: () => itemPress, 998 keyboard: () => keyboard, 999 linkPress: () => linkPress, 1000 listNavigation: () => listNavigation, 1001 missing: () => missing, 1002 none: () => none, 1003 outsidePress: () => outsidePress, 1004 pointer: () => pointer, 1005 scrub: () => scrub, 1006 siblingOpen: () => siblingOpen, 1007 swipe: () => swipe, 1008 trackPress: () => trackPress, 1009 triggerFocus: () => triggerFocus, 1010 triggerHover: () => triggerHover, 1011 triggerPress: () => triggerPress, 1012 wheel: () => wheel, 1013 windowResize: () => windowResize 1014 }); 1015 var none = "none"; 1016 var triggerPress = "trigger-press"; 1017 var triggerHover = "trigger-hover"; 1018 var triggerFocus = "trigger-focus"; 1019 var outsidePress = "outside-press"; 1020 var itemPress = "item-press"; 1021 var closePress = "close-press"; 1022 var linkPress = "link-press"; 1023 var clearPress = "clear-press"; 1024 var chipRemovePress = "chip-remove-press"; 1025 var trackPress = "track-press"; 1026 var incrementPress = "increment-press"; 1027 var decrementPress = "decrement-press"; 1028 var inputChange = "input-change"; 1029 var inputClear = "input-clear"; 1030 var inputBlur = "input-blur"; 1031 var inputPaste = "input-paste"; 1032 var inputPress = "input-press"; 1033 var focusOut = "focus-out"; 1034 var escapeKey = "escape-key"; 1035 var closeWatcher = "close-watcher"; 1036 var listNavigation = "list-navigation"; 1037 var keyboard = "keyboard"; 1038 var pointer = "pointer"; 1039 var drag = "drag"; 1040 var wheel = "wheel"; 1041 var scrub = "scrub"; 1042 var cancelOpen = "cancel-open"; 1043 var siblingOpen = "sibling-open"; 1044 var disabled = "disabled"; 1045 var missing = "missing"; 1046 var initial = "initial"; 1047 var imperativeAction = "imperative-action"; 1048 var swipe = "swipe"; 1049 var windowResize = "window-resize"; 1050 1051 // node_modules/@base-ui/react/internals/createBaseUIEventDetails.mjs 1052 function createChangeEventDetails(reason, event, trigger, customProperties) { 1053 let canceled = false; 1054 let allowPropagation = false; 1055 const custom = customProperties ?? EMPTY_OBJECT; 1056 const details = { 1057 reason, 1058 event: event ?? new Event("base-ui"), 1059 cancel() { 1060 canceled = true; 1061 }, 1062 allowPropagation() { 1063 allowPropagation = true; 1064 }, 1065 get isCanceled() { 1066 return canceled; 1067 }, 1068 get isPropagationAllowed() { 1069 return allowPropagation; 1070 }, 1071 trigger, 1072 ...custom 1073 }; 1074 return details; 1075 } 1076 1077 // node_modules/@base-ui/react/internals/useTransitionStatus.mjs 1078 var React9 = __toESM(require_react(), 1); 1079 1080 // node_modules/@base-ui/utils/useOnMount.mjs 1081 var React8 = __toESM(require_react(), 1); 1082 function useOnMount(fn) { 1083 React8.useEffect(fn, EMPTY_ARRAY); 1084 } 1085 1086 // node_modules/@base-ui/utils/useAnimationFrame.mjs 1087 var EMPTY = null; 1088 var LAST_RAF = globalThis.requestAnimationFrame; 1089 var Scheduler = class { 1090 /* This implementation uses an array as a backing data-structure for frame callbacks. 1091 * It allows `O(1)` callback cancelling by inserting a `null` in the array, though it 1092 * never calls the native `cancelAnimationFrame` if there are no frames left. This can 1093 * be much more efficient if there is a call pattern that alterns as 1094 * "request-cancel-request-cancel-…". 1095 * But in the case of "request-request-…-cancel-cancel-…", it leaves the final animation 1096 * frame to run anyway. We turn that frame into a `O(1)` no-op via `callbacksCount`. */ 1097 callbacks = []; 1098 callbacksCount = 0; 1099 nextId = 1; 1100 startId = 1; 1101 isScheduled = false; 1102 tick = (timestamp) => { 1103 this.isScheduled = false; 1104 const currentCallbacks = this.callbacks; 1105 const currentCallbacksCount = this.callbacksCount; 1106 this.callbacks = []; 1107 this.callbacksCount = 0; 1108 this.startId = this.nextId; 1109 if (currentCallbacksCount > 0) { 1110 for (let i = 0; i < currentCallbacks.length; i += 1) { 1111 currentCallbacks[i]?.(timestamp); 1112 } 1113 } 1114 }; 1115 request(fn) { 1116 const id = this.nextId; 1117 this.nextId += 1; 1118 this.callbacks.push(fn); 1119 this.callbacksCount += 1; 1120 const didRAFChange = LAST_RAF !== requestAnimationFrame && (LAST_RAF = requestAnimationFrame, true); 1121 if (!this.isScheduled || didRAFChange) { 1122 requestAnimationFrame(this.tick); 1123 this.isScheduled = true; 1124 } 1125 return id; 1126 } 1127 cancel(id) { 1128 const index2 = id - this.startId; 1129 if (index2 < 0 || index2 >= this.callbacks.length) { 1130 return; 1131 } 1132 this.callbacks[index2] = null; 1133 this.callbacksCount -= 1; 1134 } 1135 }; 1136 var scheduler = new Scheduler(); 1137 var AnimationFrame = class _AnimationFrame { 1138 static create() { 1139 return new _AnimationFrame(); 1140 } 1141 static request(fn) { 1142 return scheduler.request(fn); 1143 } 1144 static cancel(id) { 1145 return scheduler.cancel(id); 1146 } 1147 currentId = EMPTY; 1148 /** 1149 * Executes `fn` after `delay`, clearing any previously scheduled call. 1150 */ 1151 request(fn) { 1152 this.cancel(); 1153 this.currentId = scheduler.request(() => { 1154 this.currentId = EMPTY; 1155 fn(); 1156 }); 1157 } 1158 cancel = () => { 1159 if (this.currentId !== EMPTY) { 1160 scheduler.cancel(this.currentId); 1161 this.currentId = EMPTY; 1162 } 1163 }; 1164 disposeEffect = () => { 1165 return this.cancel; 1166 }; 1167 }; 1168 function useAnimationFrame() { 1169 const timeout = useRefWithInit(AnimationFrame.create).current; 1170 useOnMount(timeout.disposeEffect); 1171 return timeout; 1172 } 1173 1174 // node_modules/@base-ui/react/internals/useTransitionStatus.mjs 1175 function useTransitionStatus(open, enableIdleState = false, deferEndingState = false) { 1176 const [transitionStatus, setTransitionStatus] = React9.useState(open && enableIdleState ? "idle" : void 0); 1177 const [mounted, setMounted] = React9.useState(open); 1178 if (open && !mounted) { 1179 setMounted(true); 1180 setTransitionStatus("starting"); 1181 } 1182 if (!open && mounted && transitionStatus !== "ending" && !deferEndingState) { 1183 setTransitionStatus("ending"); 1184 } 1185 if (!open && !mounted && transitionStatus === "ending") { 1186 setTransitionStatus(void 0); 1187 } 1188 useIsoLayoutEffect(() => { 1189 if (!open && mounted && transitionStatus !== "ending" && deferEndingState) { 1190 const frame = AnimationFrame.request(() => { 1191 setTransitionStatus("ending"); 1192 }); 1193 return () => { 1194 AnimationFrame.cancel(frame); 1195 }; 1196 } 1197 return void 0; 1198 }, [open, mounted, transitionStatus, deferEndingState]); 1199 useIsoLayoutEffect(() => { 1200 if (!open || enableIdleState) { 1201 return void 0; 1202 } 1203 const frame = AnimationFrame.request(() => { 1204 setTransitionStatus(void 0); 1205 }); 1206 return () => { 1207 AnimationFrame.cancel(frame); 1208 }; 1209 }, [enableIdleState, open]); 1210 useIsoLayoutEffect(() => { 1211 if (!open || !enableIdleState) { 1212 return void 0; 1213 } 1214 if (open && mounted && transitionStatus !== "idle") { 1215 setTransitionStatus("starting"); 1216 } 1217 const frame = AnimationFrame.request(() => { 1218 setTransitionStatus("idle"); 1219 }); 1220 return () => { 1221 AnimationFrame.cancel(frame); 1222 }; 1223 }, [enableIdleState, open, mounted, transitionStatus]); 1224 return { 1225 mounted, 1226 setMounted, 1227 transitionStatus 1228 }; 1229 } 1230 1231 // node_modules/@base-ui/react/internals/stateAttributesMapping.mjs 1232 var TransitionStatusDataAttributes = /* @__PURE__ */ (function(TransitionStatusDataAttributes2) { 1233 TransitionStatusDataAttributes2["startingStyle"] = "data-starting-style"; 1234 TransitionStatusDataAttributes2["endingStyle"] = "data-ending-style"; 1235 return TransitionStatusDataAttributes2; 1236 })({}); 1237 var STARTING_HOOK = { 1238 "data-starting-style": "" 1239 }; 1240 var ENDING_HOOK = { 1241 "data-ending-style": "" 1242 }; 1243 var transitionStatusMapping = { 1244 transitionStatus(value) { 1245 if (value === "starting") { 1246 return STARTING_HOOK; 1247 } 1248 if (value === "ending") { 1249 return ENDING_HOOK; 1250 } 1251 return null; 1252 } 1253 }; 1254 1255 // node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs 1256 function hasWindow() { 1257 return typeof window !== "undefined"; 1258 } 1259 function getNodeName(node) { 1260 if (isNode(node)) { 1261 return (node.nodeName || "").toLowerCase(); 1262 } 1263 return "#document"; 1264 } 1265 function getWindow(node) { 1266 var _node$ownerDocument; 1267 return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window; 1268 } 1269 function getDocumentElement(node) { 1270 var _ref; 1271 return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement; 1272 } 1273 function isNode(value) { 1274 if (!hasWindow()) { 1275 return false; 1276 } 1277 return value instanceof Node || value instanceof getWindow(value).Node; 1278 } 1279 function isElement(value) { 1280 if (!hasWindow()) { 1281 return false; 1282 } 1283 return value instanceof Element || value instanceof getWindow(value).Element; 1284 } 1285 function isHTMLElement(value) { 1286 if (!hasWindow()) { 1287 return false; 1288 } 1289 return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement; 1290 } 1291 function isShadowRoot(value) { 1292 if (!hasWindow() || typeof ShadowRoot === "undefined") { 1293 return false; 1294 } 1295 return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot; 1296 } 1297 function isOverflowElement(element) { 1298 const { 1299 overflow, 1300 overflowX, 1301 overflowY, 1302 display 1303 } = getComputedStyle2(element); 1304 return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== "inline" && display !== "contents"; 1305 } 1306 function isTableElement(element) { 1307 return /^(table|td|th)$/.test(getNodeName(element)); 1308 } 1309 function isTopLayer(element) { 1310 try { 1311 if (element.matches(":popover-open")) { 1312 return true; 1313 } 1314 } catch (_e) { 1315 } 1316 try { 1317 return element.matches(":modal"); 1318 } catch (_e) { 1319 return false; 1320 } 1321 } 1322 var willChangeRe = /transform|translate|scale|rotate|perspective|filter/; 1323 var containRe = /paint|layout|strict|content/; 1324 var isNotNone = (value) => !!value && value !== "none"; 1325 var isWebKitValue; 1326 function isContainingBlock(elementOrCss) { 1327 const css = isElement(elementOrCss) ? getComputedStyle2(elementOrCss) : elementOrCss; 1328 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 || ""); 1329 } 1330 function getContainingBlock(element) { 1331 let currentNode = getParentNode(element); 1332 while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) { 1333 if (isContainingBlock(currentNode)) { 1334 return currentNode; 1335 } else if (isTopLayer(currentNode)) { 1336 return null; 1337 } 1338 currentNode = getParentNode(currentNode); 1339 } 1340 return null; 1341 } 1342 function isWebKit() { 1343 if (isWebKitValue == null) { 1344 isWebKitValue = typeof CSS !== "undefined" && CSS.supports && CSS.supports("-webkit-backdrop-filter", "none"); 1345 } 1346 return isWebKitValue; 1347 } 1348 function isLastTraversableNode(node) { 1349 return /^(html|body|#document)$/.test(getNodeName(node)); 1350 } 1351 function getComputedStyle2(element) { 1352 return getWindow(element).getComputedStyle(element); 1353 } 1354 function getNodeScroll(element) { 1355 if (isElement(element)) { 1356 return { 1357 scrollLeft: element.scrollLeft, 1358 scrollTop: element.scrollTop 1359 }; 1360 } 1361 return { 1362 scrollLeft: element.scrollX, 1363 scrollTop: element.scrollY 1364 }; 1365 } 1366 function getParentNode(node) { 1367 if (getNodeName(node) === "html") { 1368 return node; 1369 } 1370 const result = ( 1371 // Step into the shadow DOM of the parent of a slotted node. 1372 node.assignedSlot || // DOM Element detected. 1373 node.parentNode || // ShadowRoot detected. 1374 isShadowRoot(node) && node.host || // Fallback. 1375 getDocumentElement(node) 1376 ); 1377 return isShadowRoot(result) ? result.host : result; 1378 } 1379 function getNearestOverflowAncestor(node) { 1380 const parentNode = getParentNode(node); 1381 if (isLastTraversableNode(parentNode)) { 1382 return (node.ownerDocument || node).body; 1383 } 1384 if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) { 1385 return parentNode; 1386 } 1387 return getNearestOverflowAncestor(parentNode); 1388 } 1389 function getOverflowAncestors(node, list, traverseIframes) { 1390 var _node$ownerDocument2; 1391 if (list === void 0) { 1392 list = []; 1393 } 1394 if (traverseIframes === void 0) { 1395 traverseIframes = true; 1396 } 1397 const scrollableAncestor = getNearestOverflowAncestor(node); 1398 const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body); 1399 const win = getWindow(scrollableAncestor); 1400 if (isBody) { 1401 const frameElement = getFrameElement(win); 1402 return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []); 1403 } else { 1404 return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes)); 1405 } 1406 } 1407 function getFrameElement(win) { 1408 return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null; 1409 } 1410 1411 // node_modules/@base-ui/utils/owner.mjs 1412 function ownerDocument(node) { 1413 return node?.ownerDocument || document; 1414 } 1415 1416 // node_modules/@base-ui/utils/addEventListener.mjs 1417 function addEventListener(target, type, listener, options) { 1418 target.addEventListener(type, listener, options); 1419 return () => { 1420 target.removeEventListener(type, listener, options); 1421 }; 1422 } 1423 1424 // node_modules/@base-ui/utils/useValueAsRef.mjs 1425 function useValueAsRef(value) { 1426 const latest = useRefWithInit(createLatestRef, value).current; 1427 latest.next = value; 1428 useIsoLayoutEffect(latest.effect); 1429 return latest; 1430 } 1431 function createLatestRef(value) { 1432 const latest = { 1433 current: value, 1434 next: value, 1435 effect: () => { 1436 latest.current = latest.next; 1437 } 1438 }; 1439 return latest; 1440 } 1441 1442 // node_modules/@base-ui/react/internals/useOpenChangeComplete.mjs 1443 var React10 = __toESM(require_react(), 1); 1444 1445 // node_modules/@base-ui/react/internals/useAnimationsFinished.mjs 1446 var ReactDOM = __toESM(require_react_dom(), 1); 1447 1448 // node_modules/@base-ui/react/utils/resolveRef.mjs 1449 function resolveRef(maybeRef) { 1450 if (maybeRef == null) { 1451 return maybeRef; 1452 } 1453 return "current" in maybeRef ? maybeRef.current : maybeRef; 1454 } 1455 1456 // node_modules/@base-ui/react/internals/useAnimationsFinished.mjs 1457 function useAnimationsFinished(elementOrRef, waitForStartingStyleRemoved = false) { 1458 const frame = useAnimationFrame(); 1459 return useStableCallback((fnToExecute, signal = null) => { 1460 frame.cancel(); 1461 const element = resolveRef(elementOrRef); 1462 if (element == null) { 1463 return; 1464 } 1465 const resolvedElement = element; 1466 const done = () => { 1467 ReactDOM.flushSync(fnToExecute); 1468 }; 1469 if (typeof resolvedElement.getAnimations !== "function" || globalThis.BASE_UI_ANIMATIONS_DISABLED) { 1470 fnToExecute(); 1471 return; 1472 } 1473 function exec() { 1474 Promise.all(resolvedElement.getAnimations().map((animation) => animation.finished)).then(() => { 1475 if (!signal?.aborted) { 1476 done(); 1477 } 1478 }, () => { 1479 if (signal?.aborted) { 1480 return; 1481 } 1482 const currentAnimations = resolvedElement.getAnimations(); 1483 if (currentAnimations.some((animation) => animation.pending || animation.playState !== "finished")) { 1484 exec(); 1485 return; 1486 } 1487 done(); 1488 }); 1489 } 1490 if (waitForStartingStyleRemoved) { 1491 const startingStyleAttribute = "data-starting-style"; 1492 if (!resolvedElement.hasAttribute(startingStyleAttribute)) { 1493 frame.request(exec); 1494 return; 1495 } 1496 const attributeObserver = new MutationObserver(() => { 1497 if (!resolvedElement.hasAttribute(startingStyleAttribute)) { 1498 attributeObserver.disconnect(); 1499 exec(); 1500 } 1501 }); 1502 attributeObserver.observe(resolvedElement, { 1503 attributes: true, 1504 attributeFilter: [startingStyleAttribute] 1505 }); 1506 signal?.addEventListener("abort", () => attributeObserver.disconnect(), { 1507 once: true 1508 }); 1509 return; 1510 } 1511 frame.request(exec); 1512 }); 1513 } 1514 1515 // node_modules/@base-ui/react/internals/useOpenChangeComplete.mjs 1516 function useOpenChangeComplete(parameters) { 1517 const { 1518 enabled = true, 1519 open, 1520 ref, 1521 onComplete: onCompleteParam 1522 } = parameters; 1523 const onComplete = useStableCallback(onCompleteParam); 1524 const runOnceAnimationsFinish = useAnimationsFinished(ref, open); 1525 React10.useEffect(() => { 1526 if (!enabled) { 1527 return void 0; 1528 } 1529 const abortController = new AbortController(); 1530 runOnceAnimationsFinish(onComplete, abortController.signal); 1531 return () => { 1532 abortController.abort(); 1533 }; 1534 }, [enabled, open, onComplete, runOnceAnimationsFinish]); 1535 } 1536 1537 // node_modules/@base-ui/utils/platform/parts.mjs 1538 var parts_exports = {}; 1539 __export(parts_exports, { 1540 engine: () => engine_exports, 1541 env: () => env_exports, 1542 os: () => os_exports, 1543 screenReader: () => screen_reader_exports 1544 }); 1545 1546 // node_modules/@base-ui/utils/platform/os.mjs 1547 var os_exports = {}; 1548 __export(os_exports, { 1549 android: () => android, 1550 apple: () => apple, 1551 ios: () => ios, 1552 linux: () => linux, 1553 mac: () => mac, 1554 windows: () => windows 1555 }); 1556 1557 // node_modules/@base-ui/utils/platform/shared.mjs 1558 function readRawData() { 1559 if (typeof navigator === "undefined") { 1560 return { 1561 userAgent: "", 1562 platform: "", 1563 maxTouchPoints: 0 1564 }; 1565 } 1566 if (true) { 1567 const uaData = navigator.userAgentData; 1568 if (uaData && Array.isArray(uaData.brands)) { 1569 return { 1570 userAgent: uaData.brands.map(({ 1571 brand, 1572 version: version2 1573 }) => `$brand}/$version2}`).join(" "), 1574 platform: uaData.platform ?? navigator.platform ?? "", 1575 maxTouchPoints: navigator.maxTouchPoints ?? 0 1576 }; 1577 } 1578 } 1579 return { 1580 userAgent: navigator.userAgent, 1581 platform: navigator.platform ?? "", 1582 maxTouchPoints: navigator.maxTouchPoints ?? 0 1583 }; 1584 } 1585 var { 1586 userAgent, 1587 platform, 1588 maxTouchPoints 1589 } = readRawData(); 1590 var lowerUserAgent = userAgent.toLowerCase(); 1591 var lowerPlatform = platform.toLowerCase(); 1592 1593 // node_modules/@base-ui/utils/platform/os.mjs 1594 var ios = /^i(os$|p)/.test(lowerPlatform) || lowerPlatform === "macintel" && maxTouchPoints > 1; 1595 var ANDROID_STRING = "android"; 1596 var android = lowerPlatform === ANDROID_STRING || lowerUserAgent.includes(ANDROID_STRING); 1597 var mac = !ios && lowerPlatform.startsWith("mac"); 1598 var windows = lowerPlatform.startsWith("win"); 1599 var linux = !android && /^(linux|chrome os)/.test(lowerPlatform); 1600 var apple = mac || ios; 1601 1602 // node_modules/@base-ui/utils/platform/engine.mjs 1603 var engine_exports = {}; 1604 __export(engine_exports, { 1605 blink: () => blink, 1606 gecko: () => gecko, 1607 webkit: () => webkit 1608 }); 1609 var webkit = typeof CSS !== "undefined" && !!CSS.supports?.("-webkit-backdrop-filter:none"); 1610 var gecko = !webkit && lowerUserAgent.includes("firefox"); 1611 var blink = !webkit && lowerUserAgent.includes("chrom"); 1612 1613 // node_modules/@base-ui/utils/platform/screen-reader.mjs 1614 var screen_reader_exports = {}; 1615 __export(screen_reader_exports, { 1616 voiceOver: () => voiceOver 1617 }); 1618 var voiceOver = apple; 1619 1620 // node_modules/@base-ui/utils/platform/env.mjs 1621 var env_exports = {}; 1622 __export(env_exports, { 1623 jsdom: () => jsdom 1624 }); 1625 var jsdom = /jsdom|happydom/.test(lowerUserAgent); 1626 1627 // node_modules/@base-ui/utils/useTimeout.mjs 1628 var EMPTY2 = 0; 1629 var Timeout = class _Timeout { 1630 static create() { 1631 return new _Timeout(); 1632 } 1633 currentId = EMPTY2; 1634 /** 1635 * Executes `fn` after `delay`, clearing any previously scheduled call. 1636 */ 1637 start(delay, fn) { 1638 this.clear(); 1639 this.currentId = setTimeout(() => { 1640 this.currentId = EMPTY2; 1641 fn(); 1642 }, delay); 1643 } 1644 isStarted() { 1645 return this.currentId !== EMPTY2; 1646 } 1647 clear = () => { 1648 if (this.currentId !== EMPTY2) { 1649 clearTimeout(this.currentId); 1650 this.currentId = EMPTY2; 1651 } 1652 }; 1653 disposeEffect = () => { 1654 return this.clear; 1655 }; 1656 }; 1657 function useTimeout() { 1658 const timeout = useRefWithInit(Timeout.create).current; 1659 useOnMount(timeout.disposeEffect); 1660 return timeout; 1661 } 1662 1663 // node_modules/@base-ui/react/floating-ui-react/components/FloatingDelayGroup.mjs 1664 var React11 = __toESM(require_react(), 1); 1665 1666 // node_modules/@base-ui/react/floating-ui-react/utils/event.mjs 1667 function isReactEvent(event) { 1668 return "nativeEvent" in event; 1669 } 1670 function isMouseLikePointerType(pointerType, strict) { 1671 const values = ["mouse", "pen"]; 1672 if (!strict) { 1673 values.push("", void 0); 1674 } 1675 return values.includes(pointerType); 1676 } 1677 function isClickLikeEvent(event) { 1678 const type = event.type; 1679 return type === "click" || type === "mousedown" || type === "keydown" || type === "keyup"; 1680 } 1681 1682 // node_modules/@base-ui/react/floating-ui-react/utils/constants.mjs 1683 var FOCUSABLE_ATTRIBUTE = "data-base-ui-focusable"; 1684 var TYPEABLE_SELECTOR = "input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])"; 1685 1686 // node_modules/@base-ui/react/internals/shadowDom.mjs 1687 function activeElement(doc) { 1688 let element = doc.activeElement; 1689 while (element?.shadowRoot?.activeElement != null) { 1690 element = element.shadowRoot.activeElement; 1691 } 1692 return element; 1693 } 1694 function contains(parent, child) { 1695 if (!parent || !child) { 1696 return false; 1697 } 1698 const rootNode = child.getRootNode?.(); 1699 if (parent.contains(child)) { 1700 return true; 1701 } 1702 if (rootNode && isShadowRoot(rootNode)) { 1703 let next = child; 1704 while (next) { 1705 if (parent === next) { 1706 return true; 1707 } 1708 next = next.parentNode || next.host; 1709 } 1710 } 1711 return false; 1712 } 1713 function getTarget(event) { 1714 if ("composedPath" in event) { 1715 return event.composedPath()[0]; 1716 } 1717 return event.target; 1718 } 1719 1720 // node_modules/@base-ui/react/floating-ui-react/utils/element.mjs 1721 function isTargetInsideEnabledTrigger(target, triggerElements) { 1722 if (!isElement(target)) { 1723 return false; 1724 } 1725 const targetElement = target; 1726 if (triggerElements.hasElement(targetElement)) { 1727 return !targetElement.hasAttribute("data-trigger-disabled"); 1728 } 1729 for (const [, trigger] of triggerElements.entries()) { 1730 if (contains(trigger, targetElement)) { 1731 return !trigger.hasAttribute("data-trigger-disabled"); 1732 } 1733 } 1734 return false; 1735 } 1736 function isEventTargetWithin(event, node) { 1737 if (node == null) { 1738 return false; 1739 } 1740 if ("composedPath" in event) { 1741 return event.composedPath().includes(node); 1742 } 1743 const eventAgain = event; 1744 return eventAgain.target != null && node.contains(eventAgain.target); 1745 } 1746 function isRootElement(element) { 1747 return element.matches("html,body"); 1748 } 1749 function isTypeableElement(element) { 1750 return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR); 1751 } 1752 function isInteractiveElement(element) { 1753 return element?.closest(`button,a[href],[role="button"],select,[tabindex]:not([tabindex="-1"]),$TYPEABLE_SELECTOR}`) != null; 1754 } 1755 function matchesFocusVisible(element) { 1756 if (!element || parts_exports.env.jsdom) { 1757 return true; 1758 } 1759 try { 1760 return element.matches(":focus-visible"); 1761 } catch (_e) { 1762 return true; 1763 } 1764 } 1765 1766 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverShared.mjs 1767 function resolveValue(value, pointerType) { 1768 if (pointerType != null && !isMouseLikePointerType(pointerType)) { 1769 return 0; 1770 } 1771 if (typeof value === "function") { 1772 return value(); 1773 } 1774 return value; 1775 } 1776 function getDelay(value, prop, pointerType) { 1777 const result = resolveValue(value, pointerType); 1778 if (typeof result === "number") { 1779 return result; 1780 } 1781 return result?.[prop]; 1782 } 1783 function getRestMs(value) { 1784 if (typeof value === "function") { 1785 return value(); 1786 } 1787 return value; 1788 } 1789 function isClickLikeOpenEvent(openEventType, interactedInside) { 1790 return interactedInside || openEventType === "click" || openEventType === "mousedown"; 1791 } 1792 function isHoverOpenEvent(openEventType) { 1793 return openEventType?.includes("mouse") && openEventType !== "mousedown"; 1794 } 1795 1796 // node_modules/@base-ui/react/floating-ui-react/components/FloatingDelayGroup.mjs 1797 var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); 1798 var FloatingDelayGroupContext = /* @__PURE__ */ React11.createContext({ 1799 hasProvider: false, 1800 timeoutMs: 0, 1801 delayRef: { 1802 current: 0 1803 }, 1804 initialDelayRef: { 1805 current: 0 1806 }, 1807 timeout: new Timeout(), 1808 currentIdRef: { 1809 current: null 1810 }, 1811 currentContextRef: { 1812 current: null 1813 } 1814 }); 1815 if (true) FloatingDelayGroupContext.displayName = "FloatingDelayGroupContext"; 1816 function resetDelayRef(delayRef, initialDelayRef) { 1817 delayRef.current = initialDelayRef.current; 1818 } 1819 function FloatingDelayGroup(props) { 1820 const { 1821 children, 1822 delay, 1823 timeoutMs = 0 1824 } = props; 1825 const delayRef = React11.useRef(delay); 1826 const initialDelayRef = React11.useRef(delay); 1827 const currentIdRef = React11.useRef(null); 1828 const currentContextRef = React11.useRef(null); 1829 const timeout = useTimeout(); 1830 useIsoLayoutEffect(() => { 1831 initialDelayRef.current = delay; 1832 if (!currentIdRef.current) { 1833 delayRef.current = delay; 1834 return; 1835 } 1836 delayRef.current = { 1837 open: getDelay(delayRef.current, "open"), 1838 close: getDelay(delay, "close") 1839 }; 1840 }, [delay, currentIdRef, delayRef, initialDelayRef]); 1841 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FloatingDelayGroupContext.Provider, { 1842 value: React11.useMemo(() => ({ 1843 hasProvider: true, 1844 delayRef, 1845 initialDelayRef, 1846 currentIdRef, 1847 timeoutMs, 1848 currentContextRef, 1849 timeout 1850 }), [timeoutMs, timeout]), 1851 children 1852 }); 1853 } 1854 function useDelayGroup(context, options = { 1855 open: false 1856 }) { 1857 const { 1858 open 1859 } = options; 1860 const store2 = "rootStore" in context ? context.rootStore : context; 1861 const floatingId = store2.useState("floatingId"); 1862 const groupContext = React11.useContext(FloatingDelayGroupContext); 1863 const { 1864 currentIdRef, 1865 delayRef, 1866 timeoutMs, 1867 initialDelayRef, 1868 currentContextRef, 1869 hasProvider, 1870 timeout 1871 } = groupContext; 1872 const [isInstantPhase, setIsInstantPhase] = React11.useState(false); 1873 const openRef = React11.useRef(open); 1874 useIsoLayoutEffect(() => { 1875 openRef.current = open; 1876 }, [open]); 1877 useIsoLayoutEffect(() => { 1878 function unset() { 1879 currentContextRef.current?.setIsInstantPhase(false); 1880 currentIdRef.current = null; 1881 currentContextRef.current = null; 1882 delayRef.current = initialDelayRef.current; 1883 timeout.clear(); 1884 } 1885 if (!currentIdRef.current) { 1886 return void 0; 1887 } 1888 if (!open && currentIdRef.current === floatingId) { 1889 setIsInstantPhase(false); 1890 if (timeoutMs) { 1891 const closingId = floatingId; 1892 timeout.start(timeoutMs, () => { 1893 if (store2.select("open") || currentIdRef.current && currentIdRef.current !== closingId) { 1894 return; 1895 } 1896 unset(); 1897 }); 1898 return () => { 1899 if (openRef.current || currentIdRef.current !== closingId) { 1900 timeout.clear(); 1901 } 1902 }; 1903 } 1904 unset(); 1905 } 1906 return void 0; 1907 }, [open, floatingId, currentIdRef, delayRef, timeoutMs, initialDelayRef, currentContextRef, timeout, store2]); 1908 useIsoLayoutEffect(() => { 1909 if (!open) { 1910 return; 1911 } 1912 const prevContext = currentContextRef.current; 1913 const prevId = currentIdRef.current; 1914 timeout.clear(); 1915 currentContextRef.current = { 1916 onOpenChange: store2.setOpen, 1917 setIsInstantPhase 1918 }; 1919 currentIdRef.current = floatingId; 1920 delayRef.current = { 1921 open: 0, 1922 close: getDelay(initialDelayRef.current, "close") 1923 }; 1924 if (prevId !== null && prevId !== floatingId) { 1925 setIsInstantPhase(true); 1926 prevContext?.setIsInstantPhase(true); 1927 prevContext?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.none)); 1928 } else { 1929 setIsInstantPhase(false); 1930 prevContext?.setIsInstantPhase(false); 1931 } 1932 }, [open, floatingId, store2, currentIdRef, delayRef, initialDelayRef, currentContextRef, timeout]); 1933 useIsoLayoutEffect(() => { 1934 return () => { 1935 if (currentIdRef.current === floatingId) { 1936 currentContextRef.current = null; 1937 if (!openRef.current) { 1938 return; 1939 } 1940 currentIdRef.current = null; 1941 resetDelayRef(delayRef, initialDelayRef); 1942 timeout.clear(); 1943 } 1944 }; 1945 }, [currentContextRef, currentIdRef, delayRef, floatingId, initialDelayRef, timeout]); 1946 return React11.useMemo(() => ({ 1947 hasProvider, 1948 delayRef, 1949 isInstantPhase 1950 }), [hasProvider, delayRef, isInstantPhase]); 1951 } 1952 1953 // node_modules/@base-ui/utils/mergeCleanups.mjs 1954 function mergeCleanups(...cleanups) { 1955 return () => { 1956 for (let i = 0; i < cleanups.length; i += 1) { 1957 const cleanup = cleanups[i]; 1958 if (cleanup) { 1959 cleanup(); 1960 } 1961 } 1962 }; 1963 } 1964 1965 // node_modules/@base-ui/react/utils/FocusGuard.mjs 1966 var React12 = __toESM(require_react(), 1); 1967 1968 // node_modules/@base-ui/utils/visuallyHidden.mjs 1969 var visuallyHiddenBase = { 1970 clipPath: "inset(50%)", 1971 overflow: "hidden", 1972 whiteSpace: "nowrap", 1973 border: 0, 1974 padding: 0, 1975 width: 1, 1976 height: 1, 1977 margin: -1 1978 }; 1979 var visuallyHidden = { 1980 ...visuallyHiddenBase, 1981 position: "fixed", 1982 top: 0, 1983 left: 0 1984 }; 1985 var visuallyHiddenInput = { 1986 ...visuallyHiddenBase, 1987 position: "absolute" 1988 }; 1989 1990 // node_modules/@base-ui/react/utils/FocusGuard.mjs 1991 var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); 1992 var FocusGuard = /* @__PURE__ */ React12.forwardRef(function FocusGuard2(props, ref) { 1993 const [role, setRole] = React12.useState(); 1994 useIsoLayoutEffect(() => { 1995 if (parts_exports.screenReader.voiceOver && parts_exports.engine.webkit) { 1996 setRole("button"); 1997 } 1998 }, []); 1999 const restProps = { 2000 tabIndex: 0, 2001 // Role is only for VoiceOver 2002 role 2003 }; 2004 return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { 2005 ...props, 2006 ref, 2007 style: visuallyHidden, 2008 "aria-hidden": role ? void 0 : true, 2009 ...restProps, 2010 "data-base-ui-focus-guard": "" 2011 }); 2012 }); 2013 if (true) FocusGuard.displayName = "FocusGuard"; 2014 2015 // node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs 2016 var min = Math.min; 2017 var max = Math.max; 2018 var round = Math.round; 2019 var floor = Math.floor; 2020 var createCoords = (v) => ({ 2021 x: v, 2022 y: v 2023 }); 2024 var oppositeSideMap = { 2025 left: "right", 2026 right: "left", 2027 bottom: "top", 2028 top: "bottom" 2029 }; 2030 function clamp(start, value, end) { 2031 return max(start, min(value, end)); 2032 } 2033 function evaluate(value, param) { 2034 return typeof value === "function" ? value(param) : value; 2035 } 2036 function getSide(placement) { 2037 return placement.split("-")[0]; 2038 } 2039 function getAlignment(placement) { 2040 return placement.split("-")[1]; 2041 } 2042 function getOppositeAxis(axis) { 2043 return axis === "x" ? "y" : "x"; 2044 } 2045 function getAxisLength(axis) { 2046 return axis === "y" ? "height" : "width"; 2047 } 2048 function getSideAxis(placement) { 2049 const firstChar = placement[0]; 2050 return firstChar === "t" || firstChar === "b" ? "y" : "x"; 2051 } 2052 function getAlignmentAxis(placement) { 2053 return getOppositeAxis(getSideAxis(placement)); 2054 } 2055 function getAlignmentSides(placement, rects, rtl) { 2056 if (rtl === void 0) { 2057 rtl = false; 2058 } 2059 const alignment = getAlignment(placement); 2060 const alignmentAxis = getAlignmentAxis(placement); 2061 const length = getAxisLength(alignmentAxis); 2062 let mainAlignmentSide = alignmentAxis === "x" ? alignment === (rtl ? "end" : "start") ? "right" : "left" : alignment === "start" ? "bottom" : "top"; 2063 if (rects.reference[length] > rects.floating[length]) { 2064 mainAlignmentSide = getOppositePlacement(mainAlignmentSide); 2065 } 2066 return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)]; 2067 } 2068 function getExpandedPlacements(placement) { 2069 const oppositePlacement = getOppositePlacement(placement); 2070 return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)]; 2071 } 2072 function getOppositeAlignmentPlacement(placement) { 2073 return placement.includes("start") ? placement.replace("start", "end") : placement.replace("end", "start"); 2074 } 2075 var lrPlacement = ["left", "right"]; 2076 var rlPlacement = ["right", "left"]; 2077 var tbPlacement = ["top", "bottom"]; 2078 var btPlacement = ["bottom", "top"]; 2079 function getSideList(side, isStart, rtl) { 2080 switch (side) { 2081 case "top": 2082 case "bottom": 2083 if (rtl) return isStart ? rlPlacement : lrPlacement; 2084 return isStart ? lrPlacement : rlPlacement; 2085 case "left": 2086 case "right": 2087 return isStart ? tbPlacement : btPlacement; 2088 default: 2089 return []; 2090 } 2091 } 2092 function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) { 2093 const alignment = getAlignment(placement); 2094 let list = getSideList(getSide(placement), direction === "start", rtl); 2095 if (alignment) { 2096 list = list.map((side) => side + "-" + alignment); 2097 if (flipAlignment) { 2098 list = list.concat(list.map(getOppositeAlignmentPlacement)); 2099 } 2100 } 2101 return list; 2102 } 2103 function getOppositePlacement(placement) { 2104 const side = getSide(placement); 2105 return oppositeSideMap[side] + placement.slice(side.length); 2106 } 2107 function expandPaddingObject(padding) { 2108 var _padding$top, _padding$right, _padding$bottom, _padding$left; 2109 return { 2110 top: (_padding$top = padding.top) != null ? _padding$top : 0, 2111 right: (_padding$right = padding.right) != null ? _padding$right : 0, 2112 bottom: (_padding$bottom = padding.bottom) != null ? _padding$bottom : 0, 2113 left: (_padding$left = padding.left) != null ? _padding$left : 0 2114 }; 2115 } 2116 function getPaddingObject(padding) { 2117 return typeof padding !== "number" ? expandPaddingObject(padding) : { 2118 top: padding, 2119 right: padding, 2120 bottom: padding, 2121 left: padding 2122 }; 2123 } 2124 function rectToClientRect(rect) { 2125 const { 2126 x, 2127 y, 2128 width, 2129 height 2130 } = rect; 2131 return { 2132 width, 2133 height, 2134 top: y, 2135 left: x, 2136 right: x + width, 2137 bottom: y + height, 2138 x, 2139 y 2140 }; 2141 } 2142 2143 // node_modules/@base-ui/react/floating-ui-react/utils/composite.mjs 2144 function isHiddenByStyles(styles) { 2145 return styles.visibility === "hidden" || styles.visibility === "collapse"; 2146 } 2147 function isElementVisible(element, styles = element ? getComputedStyle2(element) : null) { 2148 if (!element || !element.isConnected || !styles || isHiddenByStyles(styles)) { 2149 return false; 2150 } 2151 if (typeof element.checkVisibility === "function") { 2152 return element.checkVisibility(); 2153 } 2154 return styles.display !== "none" && styles.display !== "contents"; 2155 } 2156 2157 // node_modules/@base-ui/react/floating-ui-react/utils/tabbable.mjs 2158 var CANDIDATE_SELECTOR = 'a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable="false"]),audio[controls],video[controls]'; 2159 function getParentElement(element) { 2160 const assignedSlot = element.assignedSlot; 2161 if (assignedSlot) { 2162 return assignedSlot; 2163 } 2164 if (element.parentElement) { 2165 return element.parentElement; 2166 } 2167 const rootNode = element.getRootNode(); 2168 return isShadowRoot(rootNode) ? rootNode.host : null; 2169 } 2170 function getDetailsSummary(details) { 2171 for (const child of Array.from(details.children)) { 2172 if (getNodeName(child) === "summary") { 2173 return child; 2174 } 2175 } 2176 return null; 2177 } 2178 function isWithinOpenDetailsSummary(element, details) { 2179 const summary = getDetailsSummary(details); 2180 return !!summary && (element === summary || contains(summary, element)); 2181 } 2182 function isFocusableCandidate(element) { 2183 const nodeName = element ? getNodeName(element) : ""; 2184 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"); 2185 } 2186 function isFocusableElement(element) { 2187 if (!isFocusableCandidate(element) || !element.isConnected || element.matches(":disabled")) { 2188 return false; 2189 } 2190 for (let current = element; current; current = getParentElement(current)) { 2191 const isAncestor = current !== element; 2192 const isSlot = getNodeName(current) === "slot"; 2193 if (current.hasAttribute("inert")) { 2194 return false; 2195 } 2196 if (isAncestor && getNodeName(current) === "details" && !current.open && !isWithinOpenDetailsSummary(element, current) || current.hasAttribute("hidden") || !isSlot && !isVisibleInTabbableTree(current, isAncestor)) { 2197 return false; 2198 } 2199 } 2200 return true; 2201 } 2202 function isVisibleInTabbableTree(element, isAncestor) { 2203 const styles = getComputedStyle2(element); 2204 if (!isAncestor) { 2205 return isElementVisible(element, styles); 2206 } 2207 return styles.display !== "none"; 2208 } 2209 function getTabIndex(element) { 2210 const tabIndex = element.tabIndex; 2211 if (tabIndex < 0) { 2212 const nodeName = getNodeName(element); 2213 if (nodeName === "details" || nodeName === "audio" || nodeName === "video" || isHTMLElement(element) && element.isContentEditable) { 2214 return 0; 2215 } 2216 } 2217 return tabIndex; 2218 } 2219 function getNamedRadioInput(element) { 2220 if (getNodeName(element) !== "input") { 2221 return null; 2222 } 2223 const input = element; 2224 return input.type === "radio" && input.name !== "" ? input : null; 2225 } 2226 function isTabbableRadio(element, candidates) { 2227 const input = getNamedRadioInput(element); 2228 if (!input) { 2229 return true; 2230 } 2231 const checkedRadio = candidates.find((candidate) => { 2232 const radio = getNamedRadioInput(candidate); 2233 return radio?.name === input.name && radio.form === input.form && radio.checked; 2234 }); 2235 if (checkedRadio) { 2236 return checkedRadio === input; 2237 } 2238 return candidates.find((candidate) => { 2239 const radio = getNamedRadioInput(candidate); 2240 return radio?.name === input.name && radio.form === input.form; 2241 }) === input; 2242 } 2243 function getComposedChildren(container) { 2244 if (isHTMLElement(container) && getNodeName(container) === "slot") { 2245 const assignedElements = container.assignedElements({ 2246 flatten: true 2247 }); 2248 if (assignedElements.length > 0) { 2249 return assignedElements; 2250 } 2251 } 2252 if (isHTMLElement(container) && container.shadowRoot) { 2253 return Array.from(container.shadowRoot.children); 2254 } 2255 return Array.from(container.children); 2256 } 2257 function appendCandidates(container, list) { 2258 getComposedChildren(container).forEach((child) => { 2259 if (isFocusableCandidate(child)) { 2260 list.push(child); 2261 } 2262 appendCandidates(child, list); 2263 }); 2264 } 2265 function appendMatchingElements(container, selector, list) { 2266 getComposedChildren(container).forEach((child) => { 2267 if (isHTMLElement(child) && child.matches(selector)) { 2268 list.push(child); 2269 } 2270 appendMatchingElements(child, selector, list); 2271 }); 2272 } 2273 function focusable(container) { 2274 const candidates = []; 2275 appendCandidates(container, candidates); 2276 return candidates.filter(isFocusableElement); 2277 } 2278 function tabbable(container) { 2279 const candidates = focusable(container); 2280 return candidates.filter((element) => getTabIndex(element) >= 0 && isTabbableRadio(element, candidates)); 2281 } 2282 function getTabbableIn(container, dir) { 2283 const list = tabbable(container); 2284 const len = list.length; 2285 if (len === 0) { 2286 return void 0; 2287 } 2288 const active = activeElement(ownerDocument(container)); 2289 const index2 = list.indexOf(active); 2290 const nextIndex = index2 === -1 ? dir === 1 ? 0 : len - 1 : index2 + dir; 2291 return list[nextIndex]; 2292 } 2293 function getNextTabbable(referenceElement) { 2294 return getTabbableIn(ownerDocument(referenceElement).body, 1) || referenceElement; 2295 } 2296 function getPreviousTabbable(referenceElement) { 2297 return getTabbableIn(ownerDocument(referenceElement).body, -1) || referenceElement; 2298 } 2299 function isOutsideEvent(event, container) { 2300 const containerElement = container || event.currentTarget; 2301 const relatedTarget = event.relatedTarget; 2302 return !relatedTarget || !contains(containerElement, relatedTarget); 2303 } 2304 function disableFocusInside(container) { 2305 const tabbableElements = tabbable(container); 2306 tabbableElements.forEach((element) => { 2307 element.dataset.tabindex = element.getAttribute("tabindex") || ""; 2308 element.setAttribute("tabindex", "-1"); 2309 }); 2310 } 2311 function enableFocusInside(container) { 2312 const elements = []; 2313 appendMatchingElements(container, "[data-tabindex]", elements); 2314 elements.forEach((element) => { 2315 const tabindex = element.dataset.tabindex; 2316 delete element.dataset.tabindex; 2317 if (tabindex) { 2318 element.setAttribute("tabindex", tabindex); 2319 } else { 2320 element.removeAttribute("tabindex"); 2321 } 2322 }); 2323 } 2324 2325 // node_modules/@base-ui/react/floating-ui-react/utils/nodes.mjs 2326 function getNodeChildren(nodes, id, onlyOpenChildren = true) { 2327 const directChildren = nodes.filter((node) => node.parentId === id); 2328 return directChildren.flatMap((child) => [...!onlyOpenChildren || child.context?.open ? [child] : [], ...getNodeChildren(nodes, child.id, onlyOpenChildren)]); 2329 } 2330 2331 // node_modules/@base-ui/react/floating-ui-react/utils/createAttribute.mjs 2332 function createAttribute(name) { 2333 return `data-base-ui-$name}`; 2334 } 2335 2336 // node_modules/@base-ui/react/floating-ui-react/components/FloatingPortal.mjs 2337 var React13 = __toESM(require_react(), 1); 2338 var ReactDOM2 = __toESM(require_react_dom(), 1); 2339 2340 // node_modules/@base-ui/react/internals/constants.mjs 2341 var DISABLED_TRANSITIONS_STYLE = { 2342 style: { 2343 transition: "none" 2344 } 2345 }; 2346 var BASE_UI_SWIPE_IGNORE_ATTRIBUTE = "data-base-ui-swipe-ignore"; 2347 var LEGACY_SWIPE_IGNORE_ATTRIBUTE = "data-swipe-ignore"; 2348 var BASE_UI_SWIPE_IGNORE_SELECTOR = `[$BASE_UI_SWIPE_IGNORE_ATTRIBUTE}]`; 2349 var LEGACY_SWIPE_IGNORE_SELECTOR = `[$LEGACY_SWIPE_IGNORE_ATTRIBUTE}]`; 2350 var POPUP_COLLISION_AVOIDANCE = { 2351 fallbackAxisSide: "end" 2352 }; 2353 var ownerVisuallyHidden = { 2354 clipPath: "inset(50%)", 2355 position: "fixed", 2356 top: 0, 2357 left: 0 2358 }; 2359 2360 // node_modules/@base-ui/react/floating-ui-react/components/FloatingPortal.mjs 2361 var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); 2362 var PortalContext = /* @__PURE__ */ React13.createContext(null); 2363 if (true) PortalContext.displayName = "PortalContext"; 2364 var usePortalContext = () => React13.useContext(PortalContext); 2365 var attr = createAttribute("portal"); 2366 function useFloatingPortalNode(props = {}) { 2367 const { 2368 ref, 2369 container: containerProp, 2370 componentProps = EMPTY_OBJECT, 2371 elementProps 2372 } = props; 2373 const uniqueId = useId(); 2374 const portalContext = usePortalContext(); 2375 const parentPortalNode = portalContext?.portalNode; 2376 const [containerElement, setContainerElement] = React13.useState(null); 2377 const [portalNode, setPortalNode] = React13.useState(null); 2378 const setPortalNodeRef = useStableCallback((node) => { 2379 if (node !== null) { 2380 setPortalNode(node); 2381 } 2382 }); 2383 const containerRef = React13.useRef(null); 2384 useIsoLayoutEffect(() => { 2385 if (containerProp === null) { 2386 if (containerRef.current) { 2387 containerRef.current = null; 2388 setPortalNode(null); 2389 setContainerElement(null); 2390 } 2391 return; 2392 } 2393 const resolvedContainer = (containerProp && (isNode(containerProp) ? containerProp : containerProp.current)) ?? parentPortalNode ?? document.body; 2394 if (resolvedContainer == null) { 2395 if (containerRef.current) { 2396 containerRef.current = null; 2397 setPortalNode(null); 2398 setContainerElement(null); 2399 } 2400 return; 2401 } 2402 if (containerRef.current !== resolvedContainer) { 2403 containerRef.current = resolvedContainer; 2404 setPortalNode(null); 2405 setContainerElement(resolvedContainer); 2406 } 2407 }, [containerProp, parentPortalNode]); 2408 const portalElement = useRenderElement("div", componentProps, { 2409 ref: [ref, setPortalNodeRef], 2410 props: [{ 2411 id: uniqueId, 2412 [attr]: "" 2413 }, elementProps] 2414 }); 2415 const portalSubtree = containerElement && portalElement ? /* @__PURE__ */ ReactDOM2.createPortal(portalElement, containerElement) : null; 2416 return { 2417 node: portalNode, 2418 // `id` and `render` props can override or remove the generated ID. Use the exact 2419 // rendered value so `aria-owns` never points at an ID absent from the DOM. 2420 nodeId: /* @__PURE__ */ React13.isValidElement(portalElement) ? portalElement.props.id : void 0, 2421 subtree: portalSubtree 2422 }; 2423 } 2424 var FloatingPortal = /* @__PURE__ */ React13.forwardRef(function FloatingPortal2(componentProps, forwardedRef) { 2425 const { 2426 render, 2427 className, 2428 style, 2429 children, 2430 container, 2431 ...elementProps 2432 } = componentProps; 2433 const { 2434 node: portalNode, 2435 nodeId: portalNodeId, 2436 subtree: portalSubtree 2437 } = useFloatingPortalNode({ 2438 container, 2439 ref: forwardedRef, 2440 componentProps, 2441 elementProps 2442 }); 2443 const beforeOutsideRef = React13.useRef(null); 2444 const afterOutsideRef = React13.useRef(null); 2445 const beforeInsideRef = React13.useRef(null); 2446 const afterInsideRef = React13.useRef(null); 2447 const [focusManagerState, setFocusManagerState] = React13.useState(null); 2448 const focusInsideDisabledRef = React13.useRef(false); 2449 const modal = focusManagerState?.modal; 2450 const open = focusManagerState?.open; 2451 const shouldRenderGuards = !!focusManagerState && !focusManagerState.modal && focusManagerState.open && !!portalNode; 2452 React13.useEffect(() => { 2453 if (!portalNode || modal) { 2454 return void 0; 2455 } 2456 function onFocus(event) { 2457 if (portalNode && event.relatedTarget && isOutsideEvent(event)) { 2458 if (event.type === "focusin") { 2459 if (focusInsideDisabledRef.current) { 2460 enableFocusInside(portalNode); 2461 focusInsideDisabledRef.current = false; 2462 } 2463 } else { 2464 disableFocusInside(portalNode); 2465 focusInsideDisabledRef.current = true; 2466 } 2467 } 2468 } 2469 return mergeCleanups(addEventListener(portalNode, "focusin", onFocus, true), addEventListener(portalNode, "focusout", onFocus, true)); 2470 }, [portalNode, modal]); 2471 useIsoLayoutEffect(() => { 2472 if (!portalNode || open !== true || !focusInsideDisabledRef.current) { 2473 return; 2474 } 2475 enableFocusInside(portalNode); 2476 focusInsideDisabledRef.current = false; 2477 }, [open, portalNode]); 2478 const portalContextValue = React13.useMemo(() => ({ 2479 beforeOutsideRef, 2480 afterOutsideRef, 2481 beforeInsideRef, 2482 afterInsideRef, 2483 portalNode, 2484 setFocusManagerState 2485 }), [portalNode]); 2486 return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(React13.Fragment, { 2487 children: [portalSubtree, /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(PortalContext.Provider, { 2488 value: portalContextValue, 2489 children: [shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(FocusGuard, { 2490 "data-type": "outside", 2491 ref: beforeOutsideRef, 2492 onFocus: (event) => { 2493 if (isOutsideEvent(event, portalNode)) { 2494 beforeInsideRef.current?.focus(); 2495 } else { 2496 const domReference = focusManagerState ? focusManagerState.domReference : null; 2497 const prevTabbable = getPreviousTabbable(domReference); 2498 prevTabbable?.focus(); 2499 } 2500 } 2501 }), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { 2502 "aria-owns": portalNodeId, 2503 style: ownerVisuallyHidden 2504 }), portalNode && /* @__PURE__ */ ReactDOM2.createPortal(children, portalNode), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(FocusGuard, { 2505 "data-type": "outside", 2506 ref: afterOutsideRef, 2507 onFocus: (event) => { 2508 if (isOutsideEvent(event, portalNode)) { 2509 afterInsideRef.current?.focus(); 2510 } else { 2511 const domReference = focusManagerState ? focusManagerState.domReference : null; 2512 const nextTabbable = getNextTabbable(domReference); 2513 nextTabbable?.focus(); 2514 if (focusManagerState?.closeOnFocusOut) { 2515 focusManagerState?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.focusOut, event.nativeEvent)); 2516 } 2517 } 2518 } 2519 })] 2520 })] 2521 }); 2522 }); 2523 if (true) FloatingPortal.displayName = "FloatingPortal"; 2524 2525 // node_modules/@base-ui/react/floating-ui-react/components/FloatingTree.mjs 2526 var React14 = __toESM(require_react(), 1); 2527 2528 // node_modules/@base-ui/react/floating-ui-react/utils/createEventEmitter.mjs 2529 function createEventEmitter() { 2530 const map = /* @__PURE__ */ new Map(); 2531 return { 2532 emit(event, data) { 2533 map.get(event)?.forEach((listener) => listener(data)); 2534 }, 2535 on(event, listener) { 2536 if (!map.has(event)) { 2537 map.set(event, /* @__PURE__ */ new Set()); 2538 } 2539 map.get(event).add(listener); 2540 }, 2541 off(event, listener) { 2542 map.get(event)?.delete(listener); 2543 } 2544 }; 2545 } 2546 2547 // node_modules/@base-ui/react/floating-ui-react/components/FloatingTree.mjs 2548 var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); 2549 var FloatingNodeContext = /* @__PURE__ */ React14.createContext(null); 2550 if (true) FloatingNodeContext.displayName = "FloatingNodeContext"; 2551 var FloatingTreeContext = /* @__PURE__ */ React14.createContext(null); 2552 if (true) FloatingTreeContext.displayName = "FloatingTreeContext"; 2553 var useFloatingParentNodeId = () => React14.useContext(FloatingNodeContext)?.id || null; 2554 var useFloatingTree = (externalTree) => { 2555 const contextTree = React14.useContext(FloatingTreeContext); 2556 return externalTree ?? contextTree; 2557 }; 2558 2559 // node_modules/@base-ui/react/floating-ui-react/hooks/useClientPoint.mjs 2560 var React15 = __toESM(require_react(), 1); 2561 function createVirtualElement(domElement, data) { 2562 let offsetX = null; 2563 let offsetY = null; 2564 let isAutoUpdateEvent = false; 2565 return { 2566 contextElement: domElement || void 0, 2567 getBoundingClientRect() { 2568 const domRect = domElement?.getBoundingClientRect() || { 2569 width: 0, 2570 height: 0, 2571 x: 0, 2572 y: 0 2573 }; 2574 const isXAxis = data.axis === "x" || data.axis === "both"; 2575 const isYAxis = data.axis === "y" || data.axis === "both"; 2576 const canTrackCursorOnAutoUpdate = ["mouseenter", "mousemove"].includes(data.dataRef.current.openEvent?.type || "") && data.pointerType !== "touch"; 2577 let width = domRect.width; 2578 let height = domRect.height; 2579 let x = domRect.x; 2580 let y = domRect.y; 2581 if (offsetX == null && data.x && isXAxis) { 2582 offsetX = domRect.x - data.x; 2583 } 2584 if (offsetY == null && data.y && isYAxis) { 2585 offsetY = domRect.y - data.y; 2586 } 2587 x -= offsetX || 0; 2588 y -= offsetY || 0; 2589 width = 0; 2590 height = 0; 2591 if (!isAutoUpdateEvent || canTrackCursorOnAutoUpdate) { 2592 width = data.axis === "y" ? domRect.width : 0; 2593 height = data.axis === "x" ? domRect.height : 0; 2594 x = isXAxis && data.x != null ? data.x : x; 2595 y = isYAxis && data.y != null ? data.y : y; 2596 } else if (isAutoUpdateEvent && !canTrackCursorOnAutoUpdate) { 2597 height = data.axis === "x" ? domRect.height : height; 2598 width = data.axis === "y" ? domRect.width : width; 2599 } 2600 isAutoUpdateEvent = true; 2601 return { 2602 width, 2603 height, 2604 x, 2605 y, 2606 top: y, 2607 right: x + width, 2608 bottom: y + height, 2609 left: x 2610 }; 2611 } 2612 }; 2613 } 2614 function isMouseBasedEvent(event) { 2615 return event != null && event.clientX != null; 2616 } 2617 function useClientPoint(context, props = {}) { 2618 const { 2619 enabled = true, 2620 axis = "both" 2621 } = props; 2622 const store2 = "rootStore" in context ? context.rootStore : context; 2623 const open = store2.useState("open"); 2624 const floating = store2.useState("floatingElement"); 2625 const domReference = store2.useState("domReferenceElement"); 2626 const dataRef = store2.context.dataRef; 2627 const initialRef = React15.useRef(false); 2628 const cleanupListenerRef = React15.useRef(null); 2629 const [pointerType, setPointerType] = React15.useState(); 2630 const [reactive, setReactive] = React15.useState([]); 2631 const resetReference = useStableCallback((reference2) => { 2632 store2.set("positionReference", reference2); 2633 }); 2634 const setReference = useStableCallback((newX, newY, referenceElement) => { 2635 if (initialRef.current) { 2636 return; 2637 } 2638 if (dataRef.current.openEvent && !isMouseBasedEvent(dataRef.current.openEvent)) { 2639 return; 2640 } 2641 store2.set("positionReference", createVirtualElement(referenceElement ?? domReference, { 2642 x: newX, 2643 y: newY, 2644 axis, 2645 dataRef, 2646 pointerType 2647 })); 2648 }); 2649 const handleReferenceEnterOrMove = useStableCallback((event) => { 2650 if (!open) { 2651 setReference(event.clientX, event.clientY, event.currentTarget); 2652 } else if (!cleanupListenerRef.current) { 2653 setReference(event.clientX, event.clientY, event.currentTarget); 2654 setReactive([]); 2655 } 2656 }); 2657 const openCheck = isMouseLikePointerType(pointerType) ? floating : open; 2658 React15.useEffect(() => { 2659 if (!enabled) { 2660 resetReference(domReference); 2661 return void 0; 2662 } 2663 if (!openCheck) { 2664 return void 0; 2665 } 2666 function cleanupListener() { 2667 cleanupListenerRef.current?.(); 2668 cleanupListenerRef.current = null; 2669 } 2670 const win = getWindow(floating); 2671 function handleMouseMove(event) { 2672 const target = getTarget(event); 2673 if (!contains(floating, target)) { 2674 setReference(event.clientX, event.clientY); 2675 } else { 2676 cleanupListener(); 2677 } 2678 } 2679 if (!dataRef.current.openEvent || isMouseBasedEvent(dataRef.current.openEvent)) { 2680 cleanupListenerRef.current = addEventListener(win, "mousemove", handleMouseMove); 2681 } else { 2682 resetReference(domReference); 2683 } 2684 return cleanupListener; 2685 }, [openCheck, enabled, floating, dataRef, domReference, store2, setReference, resetReference, reactive]); 2686 React15.useEffect(() => () => { 2687 store2.set("positionReference", null); 2688 }, [store2]); 2689 React15.useEffect(() => { 2690 if (enabled && !floating) { 2691 initialRef.current = false; 2692 } 2693 }, [enabled, floating]); 2694 React15.useEffect(() => { 2695 if (!enabled && open) { 2696 initialRef.current = true; 2697 } 2698 }, [enabled, open]); 2699 const reference = React15.useMemo(() => { 2700 function setPointerTypeRef(event) { 2701 setPointerType(event.pointerType); 2702 } 2703 return { 2704 onPointerDown: setPointerTypeRef, 2705 onPointerEnter: setPointerTypeRef, 2706 onMouseMove: handleReferenceEnterOrMove, 2707 onMouseEnter: handleReferenceEnterOrMove 2708 }; 2709 }, [handleReferenceEnterOrMove]); 2710 return React15.useMemo(() => enabled ? { 2711 reference, 2712 trigger: reference 2713 } : {}, [enabled, reference]); 2714 } 2715 2716 // node_modules/@base-ui/react/floating-ui-react/hooks/useDismiss.mjs 2717 var React16 = __toESM(require_react(), 1); 2718 function alwaysFalse() { 2719 return false; 2720 } 2721 function normalizeProp(normalizable) { 2722 return { 2723 escapeKey: typeof normalizable === "boolean" ? normalizable : normalizable?.escapeKey ?? false, 2724 outsidePress: typeof normalizable === "boolean" ? normalizable : normalizable?.outsidePress ?? true 2725 }; 2726 } 2727 function useDismiss(context, props = {}) { 2728 const { 2729 enabled = true, 2730 escapeKey: escapeKey2 = true, 2731 outsidePress: outsidePressProp = true, 2732 outsidePressEvent = "sloppy", 2733 referencePress = alwaysFalse, 2734 bubbles, 2735 externalTree 2736 } = props; 2737 const store2 = "rootStore" in context ? context.rootStore : context; 2738 const open = store2.useState("open"); 2739 const floatingElement = store2.useState("floatingElement"); 2740 const { 2741 dataRef 2742 } = store2.context; 2743 const tree = useFloatingTree(externalTree); 2744 const outsidePressFn = useStableCallback(typeof outsidePressProp === "function" ? outsidePressProp : () => false); 2745 const outsidePress2 = typeof outsidePressProp === "function" ? outsidePressFn : outsidePressProp; 2746 const outsidePressEnabled = outsidePress2 !== false; 2747 const getOutsidePressEventProp = useStableCallback(() => outsidePressEvent); 2748 const { 2749 escapeKey: escapeKeyBubbles, 2750 outsidePress: outsidePressBubbles 2751 } = normalizeProp(bubbles); 2752 const pressStartedInsideRef = React16.useRef(false); 2753 const pressStartPreventedRef = React16.useRef(false); 2754 const suppressNextOutsideClickRef = React16.useRef(false); 2755 const isComposingRef = React16.useRef(false); 2756 const currentPointerTypeRef = React16.useRef(""); 2757 const touchStateRef = React16.useRef(null); 2758 const cancelDismissOnEndTimeout = useTimeout(); 2759 const clearInsideReactTreeTimeout = useTimeout(); 2760 const clearInsideReactTree = useStableCallback(() => { 2761 clearInsideReactTreeTimeout.clear(); 2762 dataRef.current.insideReactTree = false; 2763 }); 2764 const hasBlockingChild = useStableCallback((bubbleKey) => { 2765 const nodeId = dataRef.current.floatingContext?.nodeId; 2766 const children = tree ? getNodeChildren(tree.nodesRef.current, nodeId) : []; 2767 return children.some((child) => child.context?.open && !child.context.dataRef.current[bubbleKey]); 2768 }); 2769 const isEventWithinOwnElements = useStableCallback((event) => { 2770 return isEventTargetWithin(event, store2.select("floatingElement")) || isEventTargetWithin(event, store2.select("domReferenceElement")); 2771 }); 2772 const closeOnReferencePress = useStableCallback((event) => { 2773 if (!referencePress()) { 2774 return; 2775 } 2776 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerPress, event.nativeEvent)); 2777 }); 2778 const closeOnEscapeKeyDown = useStableCallback((event) => { 2779 if (!open || !enabled || !escapeKey2 || event.key !== "Escape") { 2780 return; 2781 } 2782 if (isComposingRef.current) { 2783 return; 2784 } 2785 if (!escapeKeyBubbles && hasBlockingChild("__escapeKeyBubbles")) { 2786 return; 2787 } 2788 const native = isReactEvent(event) ? event.nativeEvent : event; 2789 const eventDetails = createChangeEventDetails(reason_parts_exports.escapeKey, native); 2790 store2.setOpen(false, eventDetails); 2791 if (!eventDetails.isCanceled) { 2792 event.preventDefault(); 2793 } 2794 if (!escapeKeyBubbles && !eventDetails.isPropagationAllowed) { 2795 event.stopPropagation(); 2796 } 2797 }); 2798 const markInsideReactTree = useStableCallback(() => { 2799 dataRef.current.insideReactTree = true; 2800 clearInsideReactTreeTimeout.start(0, clearInsideReactTree); 2801 }); 2802 const markPressStartedInsideReactTree = useStableCallback((event) => { 2803 if (!open || !enabled || event.button !== 0) { 2804 return; 2805 } 2806 const target = getTarget(event.nativeEvent); 2807 if (!contains(store2.select("floatingElement"), target)) { 2808 return; 2809 } 2810 if (!pressStartedInsideRef.current) { 2811 pressStartedInsideRef.current = true; 2812 pressStartPreventedRef.current = false; 2813 } 2814 }); 2815 const markInsidePressStartPrevented = useStableCallback((event) => { 2816 if (!open || !enabled) { 2817 return; 2818 } 2819 if (!(event.defaultPrevented || event.nativeEvent.defaultPrevented)) { 2820 return; 2821 } 2822 if (pressStartedInsideRef.current) { 2823 pressStartPreventedRef.current = true; 2824 } 2825 }); 2826 React16.useEffect(() => { 2827 if (!open || !enabled) { 2828 return clearInsideReactTree; 2829 } 2830 dataRef.current.__escapeKeyBubbles = escapeKeyBubbles; 2831 dataRef.current.__outsidePressBubbles = outsidePressBubbles; 2832 const compositionTimeout = new Timeout(); 2833 const preventedPressSuppressionTimeout = new Timeout(); 2834 function handleCompositionStart() { 2835 compositionTimeout.clear(); 2836 isComposingRef.current = true; 2837 } 2838 function handleCompositionEnd() { 2839 compositionTimeout.start( 2840 // 0ms or 1ms don't work in Safari. 5ms appears to consistently work. 2841 // Only apply to WebKit for the test to remain 0ms. 2842 parts_exports.engine.webkit ? 5 : 0, 2843 () => { 2844 isComposingRef.current = false; 2845 } 2846 ); 2847 } 2848 function suppressImmediateOutsideClickAfterPreventedStart() { 2849 suppressNextOutsideClickRef.current = true; 2850 preventedPressSuppressionTimeout.start(0, () => { 2851 suppressNextOutsideClickRef.current = false; 2852 }); 2853 } 2854 function resetPressStartState() { 2855 pressStartedInsideRef.current = false; 2856 pressStartPreventedRef.current = false; 2857 } 2858 function getOutsidePressEvent() { 2859 const type = currentPointerTypeRef.current; 2860 const computedType = type === "pen" || !type ? "mouse" : type; 2861 const outsidePressEventValue = getOutsidePressEventProp(); 2862 const resolved = typeof outsidePressEventValue === "function" ? outsidePressEventValue() : outsidePressEventValue; 2863 if (typeof resolved === "string") { 2864 return resolved; 2865 } 2866 return resolved[computedType]; 2867 } 2868 function shouldIgnoreEvent(event) { 2869 const computedOutsidePressEvent = getOutsidePressEvent(); 2870 return computedOutsidePressEvent === "intentional" && event.type !== "click" || computedOutsidePressEvent === "sloppy" && event.type === "click"; 2871 } 2872 function isEventWithinFloatingTree(event) { 2873 const nodeId = dataRef.current.floatingContext?.nodeId; 2874 const targetIsInsideChildren = tree && getNodeChildren(tree.nodesRef.current, nodeId).some((node) => isEventTargetWithin(event, node.context?.elements.floating)); 2875 return isEventWithinOwnElements(event) || targetIsInsideChildren; 2876 } 2877 function closeOnPressOutside(event) { 2878 if (shouldIgnoreEvent(event)) { 2879 if (event.type !== "click" && !isEventWithinOwnElements(event)) { 2880 preventedPressSuppressionTimeout.clear(); 2881 suppressNextOutsideClickRef.current = false; 2882 } 2883 clearInsideReactTree(); 2884 return; 2885 } 2886 if (dataRef.current.insideReactTree) { 2887 clearInsideReactTree(); 2888 return; 2889 } 2890 const target = getTarget(event); 2891 const inertSelector = `[$createAttribute("inert")}]`; 2892 const targetRoot = isElement(target) ? target.getRootNode() : null; 2893 const markers = Array.from((isShadowRoot(targetRoot) ? targetRoot : ownerDocument(store2.select("floatingElement"))).querySelectorAll(inertSelector)); 2894 const triggers = store2.context.triggerElements; 2895 if (target && (triggers.hasElement(target) || triggers.hasMatchingElement((trigger) => contains(trigger, target)))) { 2896 return; 2897 } 2898 let targetRootAncestor = isElement(target) ? target : null; 2899 while (targetRootAncestor && !isLastTraversableNode(targetRootAncestor)) { 2900 const nextParent = getParentNode(targetRootAncestor); 2901 if (isLastTraversableNode(nextParent) || !isElement(nextParent)) { 2902 break; 2903 } 2904 targetRootAncestor = nextParent; 2905 } 2906 if (markers.length && isElement(target) && !isRootElement(target) && // Clicked on a direct ancestor (e.g. FloatingOverlay). 2907 !contains(target, store2.select("floatingElement")) && // If the target root element contains none of the markers, then the 2908 // element was injected after the floating element rendered. 2909 markers.every((marker) => !contains(targetRootAncestor, marker))) { 2910 return; 2911 } 2912 if (isHTMLElement(target) && !("touches" in event)) { 2913 const lastTraversableNode = isLastTraversableNode(target); 2914 const style = getComputedStyle2(target); 2915 const scrollRe = /auto|scroll/; 2916 const isScrollableX = lastTraversableNode || scrollRe.test(style.overflowX); 2917 const isScrollableY = lastTraversableNode || scrollRe.test(style.overflowY); 2918 const canScrollX = isScrollableX && target.clientWidth > 0 && target.scrollWidth > target.clientWidth; 2919 const canScrollY = isScrollableY && target.clientHeight > 0 && target.scrollHeight > target.clientHeight; 2920 const isRTL4 = style.direction === "rtl"; 2921 const pressedVerticalScrollbar = canScrollY && (isRTL4 ? event.offsetX <= target.offsetWidth - target.clientWidth : event.offsetX > target.clientWidth); 2922 const pressedHorizontalScrollbar = canScrollX && event.offsetY > target.clientHeight; 2923 if (pressedVerticalScrollbar || pressedHorizontalScrollbar) { 2924 return; 2925 } 2926 } 2927 if (isEventWithinFloatingTree(event)) { 2928 return; 2929 } 2930 if (getOutsidePressEvent() === "intentional" && suppressNextOutsideClickRef.current) { 2931 preventedPressSuppressionTimeout.clear(); 2932 suppressNextOutsideClickRef.current = false; 2933 return; 2934 } 2935 if (typeof outsidePress2 === "function" && !outsidePress2(event)) { 2936 return; 2937 } 2938 if (hasBlockingChild("__outsidePressBubbles")) { 2939 return; 2940 } 2941 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.outsidePress, event)); 2942 clearInsideReactTree(); 2943 } 2944 function handlePointerDown(event) { 2945 if (getOutsidePressEvent() !== "sloppy" || event.pointerType === "touch" || !store2.select("open") || !enabled || isEventWithinOwnElements(event)) { 2946 return; 2947 } 2948 closeOnPressOutside(event); 2949 } 2950 function handleTouchStart(event) { 2951 if (getOutsidePressEvent() !== "sloppy" || !store2.select("open") || !enabled || isEventWithinOwnElements(event)) { 2952 return; 2953 } 2954 const touch = event.touches[0]; 2955 if (touch) { 2956 touchStateRef.current = { 2957 startTime: Date.now(), 2958 startX: touch.clientX, 2959 startY: touch.clientY, 2960 dismissOnTouchEnd: false, 2961 dismissOnMouseDown: true 2962 }; 2963 cancelDismissOnEndTimeout.start(1e3, () => { 2964 if (touchStateRef.current) { 2965 touchStateRef.current.dismissOnTouchEnd = false; 2966 touchStateRef.current.dismissOnMouseDown = false; 2967 } 2968 }); 2969 } 2970 } 2971 function addTargetEventListenerOnce(event, listener) { 2972 const target = getTarget(event); 2973 if (!target) { 2974 return; 2975 } 2976 const unsubscribe2 = addEventListener(target, event.type, () => { 2977 listener(event); 2978 unsubscribe2(); 2979 }); 2980 } 2981 function handleTouchStartCapture(event) { 2982 currentPointerTypeRef.current = "touch"; 2983 addTargetEventListenerOnce(event, handleTouchStart); 2984 } 2985 function closeOnPressOutsideCapture(event) { 2986 cancelDismissOnEndTimeout.clear(); 2987 if (event.type === "pointerdown") { 2988 currentPointerTypeRef.current = event.pointerType; 2989 } 2990 if (event.type === "mousedown" && touchStateRef.current && !touchStateRef.current.dismissOnMouseDown) { 2991 return; 2992 } 2993 addTargetEventListenerOnce(event, (targetEvent) => { 2994 if (targetEvent.type === "pointerdown") { 2995 handlePointerDown(targetEvent); 2996 } else { 2997 closeOnPressOutside(targetEvent); 2998 } 2999 }); 3000 } 3001 function handlePressEndCapture(event) { 3002 if (!pressStartedInsideRef.current) { 3003 return; 3004 } 3005 const pressStartedInsideDefaultPrevented = pressStartPreventedRef.current; 3006 resetPressStartState(); 3007 if (getOutsidePressEvent() !== "intentional") { 3008 return; 3009 } 3010 if (event.type === "pointercancel") { 3011 if (pressStartedInsideDefaultPrevented) { 3012 suppressImmediateOutsideClickAfterPreventedStart(); 3013 } 3014 return; 3015 } 3016 if (isEventWithinFloatingTree(event)) { 3017 return; 3018 } 3019 if (pressStartedInsideDefaultPrevented) { 3020 suppressImmediateOutsideClickAfterPreventedStart(); 3021 return; 3022 } 3023 if (typeof outsidePress2 === "function" && !outsidePress2(event)) { 3024 return; 3025 } 3026 preventedPressSuppressionTimeout.clear(); 3027 suppressNextOutsideClickRef.current = true; 3028 clearInsideReactTree(); 3029 } 3030 function handleTouchMove(event) { 3031 if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) { 3032 return; 3033 } 3034 const touch = event.touches[0]; 3035 if (!touch) { 3036 return; 3037 } 3038 const deltaX = Math.abs(touch.clientX - touchStateRef.current.startX); 3039 const deltaY = Math.abs(touch.clientY - touchStateRef.current.startY); 3040 const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY); 3041 if (distance > 5) { 3042 touchStateRef.current.dismissOnTouchEnd = true; 3043 } 3044 if (distance > 10) { 3045 closeOnPressOutside(event); 3046 cancelDismissOnEndTimeout.clear(); 3047 touchStateRef.current = null; 3048 } 3049 } 3050 function handleTouchMoveCapture(event) { 3051 addTargetEventListenerOnce(event, handleTouchMove); 3052 } 3053 function handleTouchEnd(event) { 3054 if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) { 3055 return; 3056 } 3057 if (touchStateRef.current.dismissOnTouchEnd) { 3058 closeOnPressOutside(event); 3059 } 3060 cancelDismissOnEndTimeout.clear(); 3061 touchStateRef.current = null; 3062 } 3063 function handleTouchEndCapture(event) { 3064 addTargetEventListenerOnce(event, handleTouchEnd); 3065 } 3066 const doc = ownerDocument(floatingElement); 3067 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))); 3068 return () => { 3069 unsubscribe(); 3070 compositionTimeout.clear(); 3071 preventedPressSuppressionTimeout.clear(); 3072 resetPressStartState(); 3073 suppressNextOutsideClickRef.current = false; 3074 clearInsideReactTree(); 3075 }; 3076 }, [dataRef, floatingElement, escapeKey2, outsidePressEnabled, outsidePress2, open, enabled, escapeKeyBubbles, outsidePressBubbles, closeOnEscapeKeyDown, clearInsideReactTree, getOutsidePressEventProp, hasBlockingChild, isEventWithinOwnElements, tree, store2, cancelDismissOnEndTimeout]); 3077 const reference = React16.useMemo(() => ({ 3078 onKeyDown: closeOnEscapeKeyDown, 3079 onPointerDown: closeOnReferencePress, 3080 onClick: closeOnReferencePress 3081 }), [closeOnEscapeKeyDown, closeOnReferencePress]); 3082 const floating = React16.useMemo(() => ({ 3083 onKeyDown: closeOnEscapeKeyDown, 3084 // `onMouseDown` may be blocked if `event.preventDefault()` is called in 3085 // `onPointerDown`, such as with <NumberField.ScrubArea>. 3086 // See https://github.com/mui/base-ui/pull/3379 3087 onPointerDown: markInsidePressStartPrevented, 3088 onMouseDown: markInsidePressStartPrevented, 3089 onClickCapture: markInsideReactTree, 3090 onMouseDownCapture(event) { 3091 markInsideReactTree(); 3092 markPressStartedInsideReactTree(event); 3093 }, 3094 onPointerDownCapture(event) { 3095 markInsideReactTree(); 3096 markPressStartedInsideReactTree(event); 3097 }, 3098 onMouseUpCapture: markInsideReactTree, 3099 onTouchEndCapture: markInsideReactTree, 3100 onTouchMoveCapture: markInsideReactTree 3101 }), [closeOnEscapeKeyDown, markInsideReactTree, markPressStartedInsideReactTree, markInsidePressStartPrevented]); 3102 return React16.useMemo(() => enabled ? { 3103 reference, 3104 floating, 3105 trigger: reference 3106 } : {}, [enabled, reference, floating]); 3107 } 3108 3109 // node_modules/@base-ui/react/floating-ui-react/hooks/useFloating.mjs 3110 var React24 = __toESM(require_react(), 1); 3111 3112 // node_modules/@floating-ui/core/dist/floating-ui.core.mjs 3113 function computeCoordsFromPlacement(_ref, placement, rtl) { 3114 let { 3115 reference, 3116 floating 3117 } = _ref; 3118 const sideAxis = getSideAxis(placement); 3119 const alignmentAxis = getAlignmentAxis(placement); 3120 const alignLength = getAxisLength(alignmentAxis); 3121 const side = getSide(placement); 3122 const isVertical = sideAxis === "y"; 3123 const commonX = reference.x + reference.width / 2 - floating.width / 2; 3124 const commonY = reference.y + reference.height / 2 - floating.height / 2; 3125 const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2; 3126 let coords; 3127 switch (side) { 3128 case "top": 3129 coords = { 3130 x: commonX, 3131 y: reference.y - floating.height 3132 }; 3133 break; 3134 case "bottom": 3135 coords = { 3136 x: commonX, 3137 y: reference.y + reference.height 3138 }; 3139 break; 3140 case "right": 3141 coords = { 3142 x: reference.x + reference.width, 3143 y: commonY 3144 }; 3145 break; 3146 case "left": 3147 coords = { 3148 x: reference.x - floating.width, 3149 y: commonY 3150 }; 3151 break; 3152 default: 3153 coords = { 3154 x: reference.x, 3155 y: reference.y 3156 }; 3157 } 3158 const alignment = getAlignment(placement); 3159 if (alignment) { 3160 coords[alignmentAxis] += commonAlign * (alignment === "end" ? 1 : -1) * (rtl && isVertical ? -1 : 1); 3161 } 3162 return coords; 3163 } 3164 async function detectOverflow(state, options) { 3165 var _await$platform$isEle; 3166 if (options === void 0) { 3167 options = {}; 3168 } 3169 const { 3170 x, 3171 y, 3172 platform: platform3, 3173 rects, 3174 elements, 3175 strategy 3176 } = state; 3177 const { 3178 boundary = "clippingAncestors", 3179 rootBoundary = "viewport", 3180 elementContext = "floating", 3181 altBoundary = false, 3182 padding = 0 3183 } = evaluate(options, state); 3184 const paddingObject = getPaddingObject(padding); 3185 const altContext = elementContext === "floating" ? "reference" : "floating"; 3186 const element = elements[altBoundary ? altContext : elementContext]; 3187 const clippingClientRect = rectToClientRect(await platform3.getClippingRect({ 3188 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)), 3189 boundary, 3190 rootBoundary, 3191 strategy 3192 })); 3193 const rect = elementContext === "floating" ? { 3194 x, 3195 y, 3196 width: rects.floating.width, 3197 height: rects.floating.height 3198 } : rects.reference; 3199 const offsetParent = await (platform3.getOffsetParent == null ? void 0 : platform3.getOffsetParent(elements.floating)); 3200 const offsetScale = await (platform3.isElement == null ? void 0 : platform3.isElement(offsetParent)) && await (platform3.getScale == null ? void 0 : platform3.getScale(offsetParent)) || { 3201 x: 1, 3202 y: 1 3203 }; 3204 const elementClientRect = rectToClientRect(platform3.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform3.convertOffsetParentRelativeRectToViewportRelativeRect({ 3205 elements, 3206 rect, 3207 offsetParent, 3208 strategy 3209 }) : rect); 3210 return { 3211 top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y, 3212 bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y, 3213 left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x, 3214 right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x 3215 }; 3216 } 3217 var MAX_RESET_COUNT = 50; 3218 var computePosition = async (reference, floating, config) => { 3219 const { 3220 placement = "bottom", 3221 strategy = "absolute", 3222 middleware = [], 3223 platform: platform3 3224 } = config; 3225 const platformWithDetectOverflow = platform3.detectOverflow ? platform3 : { 3226 ...platform3, 3227 detectOverflow 3228 }; 3229 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(floating)); 3230 let rects = await platform3.getElementRects({ 3231 reference, 3232 floating, 3233 strategy 3234 }); 3235 let { 3236 x, 3237 y 3238 } = computeCoordsFromPlacement(rects, placement, rtl); 3239 let statefulPlacement = placement; 3240 let resetCount = 0; 3241 const middlewareData = {}; 3242 for (let i = 0; i < middleware.length; i++) { 3243 const currentMiddleware = middleware[i]; 3244 if (!currentMiddleware) { 3245 continue; 3246 } 3247 const { 3248 name, 3249 fn 3250 } = currentMiddleware; 3251 const { 3252 x: nextX, 3253 y: nextY, 3254 data, 3255 reset 3256 } = await fn({ 3257 x, 3258 y, 3259 initialPlacement: placement, 3260 placement: statefulPlacement, 3261 strategy, 3262 middlewareData, 3263 rects, 3264 platform: platformWithDetectOverflow, 3265 elements: { 3266 reference, 3267 floating 3268 } 3269 }); 3270 x = nextX != null ? nextX : x; 3271 y = nextY != null ? nextY : y; 3272 middlewareData[name] = { 3273 ...middlewareData[name], 3274 ...data 3275 }; 3276 if (reset && resetCount < MAX_RESET_COUNT) { 3277 resetCount++; 3278 if (typeof reset === "object") { 3279 if (reset.placement) { 3280 statefulPlacement = reset.placement; 3281 } 3282 if (reset.rects) { 3283 rects = reset.rects === true ? await platform3.getElementRects({ 3284 reference, 3285 floating, 3286 strategy 3287 }) : reset.rects; 3288 } 3289 ({ 3290 x, 3291 y 3292 } = computeCoordsFromPlacement(rects, statefulPlacement, rtl)); 3293 } 3294 i = -1; 3295 } 3296 } 3297 return { 3298 x, 3299 y, 3300 placement: statefulPlacement, 3301 strategy, 3302 middlewareData 3303 }; 3304 }; 3305 var flip = function(options) { 3306 if (options === void 0) { 3307 options = {}; 3308 } 3309 return { 3310 name: "flip", 3311 options, 3312 async fn(state) { 3313 var _middlewareData$arrow, _middlewareData$flip; 3314 const { 3315 placement, 3316 middlewareData, 3317 rects, 3318 initialPlacement, 3319 platform: platform3, 3320 elements 3321 } = state; 3322 const { 3323 mainAxis: checkMainAxis = true, 3324 crossAxis: checkCrossAxis = true, 3325 fallbackPlacements: specifiedFallbackPlacements, 3326 fallbackStrategy = "bestFit", 3327 fallbackAxisSideDirection = "none", 3328 flipAlignment = true, 3329 ...detectOverflowOptions 3330 } = evaluate(options, state); 3331 if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) { 3332 return {}; 3333 } 3334 const side = getSide(placement); 3335 const initialSideAxis = getSideAxis(initialPlacement); 3336 const isBasePlacement = getSide(initialPlacement) === initialPlacement; 3337 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)); 3338 const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement)); 3339 const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== "none"; 3340 if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) { 3341 fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl)); 3342 } 3343 const placements2 = [initialPlacement, ...fallbackPlacements]; 3344 const overflow = await platform3.detectOverflow(state, detectOverflowOptions); 3345 const overflows = []; 3346 let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || []; 3347 if (checkMainAxis) { 3348 overflows.push(overflow[side]); 3349 } 3350 if (checkCrossAxis) { 3351 const sides2 = getAlignmentSides(placement, rects, rtl); 3352 overflows.push(overflow[sides2[0]], overflow[sides2[1]]); 3353 } 3354 overflowsData = [...overflowsData, { 3355 placement, 3356 overflows 3357 }]; 3358 if (!overflows.every((side2) => side2 <= 0)) { 3359 var _middlewareData$flip2, _overflowsData$filter; 3360 const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1; 3361 const nextPlacement = placements2[nextIndex]; 3362 if (nextPlacement) { 3363 const ignoreCrossAxisOverflow = checkCrossAxis === "alignment" ? initialSideAxis !== getSideAxis(nextPlacement) : false; 3364 if (!ignoreCrossAxisOverflow || // We leave the current main axis only if every placement on that axis 3365 // overflows the main axis. 3366 overflowsData.every((d) => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) { 3367 return { 3368 data: { 3369 index: nextIndex, 3370 overflows: overflowsData 3371 }, 3372 reset: { 3373 placement: nextPlacement 3374 } 3375 }; 3376 } 3377 } 3378 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; 3379 if (!resetPlacement) { 3380 switch (fallbackStrategy) { 3381 case "bestFit": { 3382 var _overflowsData$filter2; 3383 const placement2 = (_overflowsData$filter2 = overflowsData.filter((d) => { 3384 if (hasFallbackAxisSideDirection) { 3385 const currentSideAxis = getSideAxis(d.placement); 3386 return currentSideAxis === initialSideAxis || // Create a bias to the `y` side axis due to horizontal 3387 // reading directions favoring greater width. 3388 currentSideAxis === "y"; 3389 } 3390 return true; 3391 }).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]; 3392 if (placement2) { 3393 resetPlacement = placement2; 3394 } 3395 break; 3396 } 3397 case "initialPlacement": 3398 resetPlacement = initialPlacement; 3399 break; 3400 } 3401 } 3402 if (placement !== resetPlacement) { 3403 return { 3404 reset: { 3405 placement: resetPlacement 3406 } 3407 }; 3408 } 3409 } 3410 return {}; 3411 } 3412 }; 3413 }; 3414 var originSides = /* @__PURE__ */ new Set(["left", "top"]); 3415 async function convertValueToCoords(state, options) { 3416 const { 3417 placement, 3418 platform: platform3, 3419 elements 3420 } = state; 3421 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)); 3422 const side = getSide(placement); 3423 const alignment = getAlignment(placement); 3424 const isVertical = getSideAxis(placement) === "y"; 3425 const mainAxisMulti = originSides.has(side) ? -1 : 1; 3426 const crossAxisMulti = rtl && isVertical ? -1 : 1; 3427 const rawValue = evaluate(options, state); 3428 let { 3429 mainAxis, 3430 crossAxis, 3431 alignmentAxis 3432 } = typeof rawValue === "number" ? { 3433 mainAxis: rawValue, 3434 crossAxis: 0, 3435 alignmentAxis: null 3436 } : { 3437 mainAxis: rawValue.mainAxis || 0, 3438 crossAxis: rawValue.crossAxis || 0, 3439 alignmentAxis: rawValue.alignmentAxis 3440 }; 3441 if (alignment && typeof alignmentAxis === "number") { 3442 crossAxis = alignment === "end" ? alignmentAxis * -1 : alignmentAxis; 3443 } 3444 return isVertical ? { 3445 x: crossAxis * crossAxisMulti, 3446 y: mainAxis * mainAxisMulti 3447 } : { 3448 x: mainAxis * mainAxisMulti, 3449 y: crossAxis * crossAxisMulti 3450 }; 3451 } 3452 var offset = function(options) { 3453 if (options === void 0) { 3454 options = 0; 3455 } 3456 return { 3457 name: "offset", 3458 options, 3459 async fn(state) { 3460 var _middlewareData$offse, _middlewareData$arrow; 3461 const { 3462 x, 3463 y, 3464 placement, 3465 middlewareData 3466 } = state; 3467 const diffCoords = await convertValueToCoords(state, options); 3468 if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) { 3469 return {}; 3470 } 3471 return { 3472 x: x + diffCoords.x, 3473 y: y + diffCoords.y, 3474 data: { 3475 ...diffCoords, 3476 placement 3477 } 3478 }; 3479 } 3480 }; 3481 }; 3482 var shift = function(options) { 3483 if (options === void 0) { 3484 options = {}; 3485 } 3486 return { 3487 name: "shift", 3488 options, 3489 async fn(state) { 3490 const { 3491 x, 3492 y, 3493 placement, 3494 platform: platform3 3495 } = state; 3496 const { 3497 mainAxis: checkMainAxis = true, 3498 crossAxis: checkCrossAxis = false, 3499 limiter = { 3500 fn: (_ref) => { 3501 let { 3502 x: x2, 3503 y: y2 3504 } = _ref; 3505 return { 3506 x: x2, 3507 y: y2 3508 }; 3509 } 3510 }, 3511 ...detectOverflowOptions 3512 } = evaluate(options, state); 3513 const coords = { 3514 x, 3515 y 3516 }; 3517 const overflow = await platform3.detectOverflow(state, detectOverflowOptions); 3518 const crossAxis = getSideAxis(placement); 3519 const mainAxis = getOppositeAxis(crossAxis); 3520 let mainAxisCoord = coords[mainAxis]; 3521 let crossAxisCoord = coords[crossAxis]; 3522 const clampCoord = (axis, coord) => clamp(coord + overflow[axis === "y" ? "top" : "left"], coord, coord - overflow[axis === "y" ? "bottom" : "right"]); 3523 if (checkMainAxis) { 3524 mainAxisCoord = clampCoord(mainAxis, mainAxisCoord); 3525 } 3526 if (checkCrossAxis) { 3527 crossAxisCoord = clampCoord(crossAxis, crossAxisCoord); 3528 } 3529 const limitedCoords = limiter.fn({ 3530 ...state, 3531 [mainAxis]: mainAxisCoord, 3532 [crossAxis]: crossAxisCoord 3533 }); 3534 return { 3535 ...limitedCoords, 3536 data: { 3537 x: limitedCoords.x - x, 3538 y: limitedCoords.y - y, 3539 enabled: { 3540 [mainAxis]: checkMainAxis, 3541 [crossAxis]: checkCrossAxis 3542 } 3543 } 3544 }; 3545 } 3546 }; 3547 }; 3548 var limitShift = function(options) { 3549 if (options === void 0) { 3550 options = {}; 3551 } 3552 return { 3553 options, 3554 fn(state) { 3555 var _rawOffset$mainAxis, _rawOffset$crossAxis; 3556 const { 3557 x, 3558 y, 3559 placement, 3560 rects, 3561 middlewareData 3562 } = state; 3563 const { 3564 offset: offset4 = 0, 3565 mainAxis: checkMainAxis = true, 3566 crossAxis: checkCrossAxis = true 3567 } = evaluate(options, state); 3568 const coords = { 3569 x, 3570 y 3571 }; 3572 const crossAxis = getSideAxis(placement); 3573 const mainAxis = getOppositeAxis(crossAxis); 3574 let mainAxisCoord = coords[mainAxis]; 3575 let crossAxisCoord = coords[crossAxis]; 3576 const rawOffset = evaluate(offset4, state); 3577 const computedOffset = typeof rawOffset === "number" ? { 3578 mainAxis: rawOffset, 3579 crossAxis: 0 3580 } : { 3581 mainAxis: (_rawOffset$mainAxis = rawOffset.mainAxis) != null ? _rawOffset$mainAxis : 0, 3582 crossAxis: (_rawOffset$crossAxis = rawOffset.crossAxis) != null ? _rawOffset$crossAxis : 0 3583 }; 3584 if (checkMainAxis) { 3585 const len = mainAxis === "y" ? "height" : "width"; 3586 const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis; 3587 const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis; 3588 if (mainAxisCoord < limitMin) { 3589 mainAxisCoord = limitMin; 3590 } else if (mainAxisCoord > limitMax) { 3591 mainAxisCoord = limitMax; 3592 } 3593 } 3594 if (checkCrossAxis) { 3595 var _middlewareData$offse, _middlewareData$offse2; 3596 const len = mainAxis === "y" ? "width" : "height"; 3597 const isOriginSide = originSides.has(getSide(placement)); 3598 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); 3599 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); 3600 if (crossAxisCoord < limitMin) { 3601 crossAxisCoord = limitMin; 3602 } else if (crossAxisCoord > limitMax) { 3603 crossAxisCoord = limitMax; 3604 } 3605 } 3606 return { 3607 [mainAxis]: mainAxisCoord, 3608 [crossAxis]: crossAxisCoord 3609 }; 3610 } 3611 }; 3612 }; 3613 var size = function(options) { 3614 if (options === void 0) { 3615 options = {}; 3616 } 3617 return { 3618 name: "size", 3619 options, 3620 async fn(state) { 3621 const { 3622 placement, 3623 rects, 3624 platform: platform3, 3625 elements 3626 } = state; 3627 const { 3628 apply = () => { 3629 }, 3630 ...detectOverflowOptions 3631 } = evaluate(options, state); 3632 const overflow = await platform3.detectOverflow(state, detectOverflowOptions); 3633 const side = getSide(placement); 3634 const alignment = getAlignment(placement); 3635 const isYAxis = getSideAxis(placement) === "y"; 3636 const { 3637 width, 3638 height 3639 } = rects.floating; 3640 let heightSide; 3641 let widthSide; 3642 if (side === "top" || side === "bottom") { 3643 heightSide = side; 3644 widthSide = alignment === (await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)) ? "start" : "end") ? "left" : "right"; 3645 } else { 3646 widthSide = side; 3647 heightSide = alignment === "end" ? "top" : "bottom"; 3648 } 3649 const maximumClippingHeight = height - overflow.top - overflow.bottom; 3650 const maximumClippingWidth = width - overflow.left - overflow.right; 3651 const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight); 3652 const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth); 3653 const shiftData = state.middlewareData.shift; 3654 const noShift = !shiftData; 3655 let availableHeight = overflowAvailableHeight; 3656 let availableWidth = overflowAvailableWidth; 3657 if (shiftData != null && shiftData.enabled.x) { 3658 availableWidth = maximumClippingWidth; 3659 } 3660 if (shiftData != null && shiftData.enabled.y) { 3661 availableHeight = maximumClippingHeight; 3662 } 3663 if (noShift && !alignment) { 3664 if (isYAxis) { 3665 availableWidth = width - 2 * max(overflow.left, overflow.right); 3666 } else { 3667 availableHeight = height - 2 * max(overflow.top, overflow.bottom); 3668 } 3669 } 3670 await apply({ 3671 ...state, 3672 availableWidth, 3673 availableHeight 3674 }); 3675 const nextDimensions = await platform3.getDimensions(elements.floating); 3676 if (width !== nextDimensions.width || height !== nextDimensions.height) { 3677 return { 3678 reset: { 3679 rects: true 3680 } 3681 }; 3682 } 3683 return {}; 3684 } 3685 }; 3686 }; 3687 3688 // node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs 3689 function getCssDimensions(element) { 3690 const css = getComputedStyle2(element); 3691 let width = parseFloat(css.width) || 0; 3692 let height = parseFloat(css.height) || 0; 3693 const hasOffset = isHTMLElement(element); 3694 const offsetWidth = hasOffset ? element.offsetWidth : width; 3695 const offsetHeight = hasOffset ? element.offsetHeight : height; 3696 const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight; 3697 if (shouldFallback) { 3698 width = offsetWidth; 3699 height = offsetHeight; 3700 } 3701 return { 3702 width, 3703 height, 3704 $: shouldFallback 3705 }; 3706 } 3707 function unwrapElement(element) { 3708 return !isElement(element) ? element.contextElement : element; 3709 } 3710 function getScale(element) { 3711 const domElement = unwrapElement(element); 3712 if (!isHTMLElement(domElement)) { 3713 return createCoords(1); 3714 } 3715 const rect = domElement.getBoundingClientRect(); 3716 const { 3717 width, 3718 height, 3719 $ 3720 } = getCssDimensions(domElement); 3721 let x = ($ ? round(rect.width) : rect.width) / width; 3722 let y = ($ ? round(rect.height) : rect.height) / height; 3723 if (!x || !Number.isFinite(x)) { 3724 x = 1; 3725 } 3726 if (!y || !Number.isFinite(y)) { 3727 y = 1; 3728 } 3729 return { 3730 x, 3731 y 3732 }; 3733 } 3734 var noOffsets = /* @__PURE__ */ createCoords(0); 3735 function getVisualOffsets(element) { 3736 const win = getWindow(element); 3737 if (!isWebKit() || !win.visualViewport) { 3738 return noOffsets; 3739 } 3740 return { 3741 x: win.visualViewport.offsetLeft, 3742 y: win.visualViewport.offsetTop 3743 }; 3744 } 3745 function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) { 3746 if (isFixed === void 0) { 3747 isFixed = false; 3748 } 3749 return !!floatingOffsetParent && isFixed && floatingOffsetParent === getWindow(element); 3750 } 3751 function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) { 3752 if (includeScale === void 0) { 3753 includeScale = false; 3754 } 3755 if (isFixedStrategy === void 0) { 3756 isFixedStrategy = false; 3757 } 3758 const clientRect = element.getBoundingClientRect(); 3759 const domElement = unwrapElement(element); 3760 let scale = createCoords(1); 3761 if (includeScale) { 3762 if (offsetParent) { 3763 if (isElement(offsetParent)) { 3764 scale = getScale(offsetParent); 3765 } 3766 } else { 3767 scale = getScale(element); 3768 } 3769 } 3770 const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0); 3771 let x = (clientRect.left + visualOffsets.x) / scale.x; 3772 let y = (clientRect.top + visualOffsets.y) / scale.y; 3773 let width = clientRect.width / scale.x; 3774 let height = clientRect.height / scale.y; 3775 if (domElement && offsetParent) { 3776 const win = getWindow(domElement); 3777 const offsetWin = isElement(offsetParent) ? getWindow(offsetParent) : offsetParent; 3778 let currentWin = win; 3779 let currentIFrame = getFrameElement(currentWin); 3780 while (currentIFrame && offsetWin !== currentWin) { 3781 const iframeScale = getScale(currentIFrame); 3782 const iframeRect = currentIFrame.getBoundingClientRect(); 3783 const css = getComputedStyle2(currentIFrame); 3784 const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x; 3785 const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y; 3786 x *= iframeScale.x; 3787 y *= iframeScale.y; 3788 width *= iframeScale.x; 3789 height *= iframeScale.y; 3790 x += left; 3791 y += top; 3792 currentWin = getWindow(currentIFrame); 3793 currentIFrame = getFrameElement(currentWin); 3794 } 3795 } 3796 return rectToClientRect({ 3797 width, 3798 height, 3799 x, 3800 y 3801 }); 3802 } 3803 function getWindowScrollBarX(element, rect) { 3804 const leftScroll = getNodeScroll(element).scrollLeft; 3805 if (!rect) { 3806 return getBoundingClientRect(getDocumentElement(element)).left + leftScroll; 3807 } 3808 return rect.left + leftScroll; 3809 } 3810 function getHTMLOffset(documentElement, scroll) { 3811 const htmlRect = documentElement.getBoundingClientRect(); 3812 const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect); 3813 const y = htmlRect.top + scroll.scrollTop; 3814 return { 3815 x, 3816 y 3817 }; 3818 } 3819 function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) { 3820 let { 3821 elements, 3822 rect, 3823 offsetParent, 3824 strategy 3825 } = _ref; 3826 const isFixed = strategy === "fixed"; 3827 const documentElement = getDocumentElement(offsetParent); 3828 const topLayer = elements ? isTopLayer(elements.floating) : false; 3829 if (offsetParent === documentElement || topLayer && isFixed) { 3830 return rect; 3831 } 3832 let scroll = { 3833 scrollLeft: 0, 3834 scrollTop: 0 3835 }; 3836 let scale = createCoords(1); 3837 const offsets = createCoords(0); 3838 const isOffsetParentAnElement = isHTMLElement(offsetParent); 3839 if (isOffsetParentAnElement || !isFixed) { 3840 if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) { 3841 scroll = getNodeScroll(offsetParent); 3842 } 3843 if (isOffsetParentAnElement) { 3844 const offsetRect = getBoundingClientRect(offsetParent); 3845 scale = getScale(offsetParent); 3846 offsets.x = offsetRect.x + offsetParent.clientLeft; 3847 offsets.y = offsetRect.y + offsetParent.clientTop; 3848 } 3849 } 3850 const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0); 3851 return { 3852 width: rect.width * scale.x, 3853 height: rect.height * scale.y, 3854 x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x, 3855 y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y 3856 }; 3857 } 3858 function getClientRects(element) { 3859 return element.getClientRects ? Array.from(element.getClientRects()) : []; 3860 } 3861 function getDocumentRect(html) { 3862 const scroll = getNodeScroll(html); 3863 const body = html.ownerDocument.body; 3864 const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth); 3865 const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight); 3866 let x = -scroll.scrollLeft + getWindowScrollBarX(html); 3867 const y = -scroll.scrollTop; 3868 if (getComputedStyle2(body).direction === "rtl") { 3869 x += max(html.clientWidth, body.clientWidth) - width; 3870 } 3871 return { 3872 width, 3873 height, 3874 x, 3875 y 3876 }; 3877 } 3878 var SCROLLBAR_MAX = 25; 3879 function getViewportRect(element, strategy, rootBoundary) { 3880 if (rootBoundary === void 0) { 3881 rootBoundary = "viewport"; 3882 } 3883 const isLayoutViewport = rootBoundary === "layoutViewport"; 3884 const win = getWindow(element); 3885 const html = getDocumentElement(element); 3886 const visualViewport = win.visualViewport; 3887 let width = html.clientWidth; 3888 let height = html.clientHeight; 3889 let x = 0; 3890 let y = 0; 3891 if (visualViewport) { 3892 const layoutRelativeClientCoords = !isWebKit() || strategy === "fixed"; 3893 if (isLayoutViewport) { 3894 if (!layoutRelativeClientCoords) { 3895 x = -visualViewport.offsetLeft; 3896 y = -visualViewport.offsetTop; 3897 } 3898 } else { 3899 width = visualViewport.width; 3900 height = visualViewport.height; 3901 if (layoutRelativeClientCoords) { 3902 x = visualViewport.offsetLeft; 3903 y = visualViewport.offsetTop; 3904 } 3905 } 3906 } 3907 const windowScrollbarX = getWindowScrollBarX(html); 3908 if (windowScrollbarX <= 0) { 3909 const doc = html.ownerDocument; 3910 const body = doc.body; 3911 const bodyStyles = getComputedStyle(body); 3912 const bodyMarginInline = doc.compatMode === "CSS1Compat" ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0; 3913 const reservedWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline); 3914 const gutter = getComputedStyle(html).scrollbarGutter === "stable both-edges" ? reservedWidth / 2 : reservedWidth; 3915 if (gutter <= SCROLLBAR_MAX) { 3916 width -= gutter; 3917 } 3918 } 3919 return { 3920 width, 3921 height, 3922 x, 3923 y 3924 }; 3925 } 3926 function getInnerBoundingClientRect(element, strategy) { 3927 const clientRect = getBoundingClientRect(element, true, strategy === "fixed"); 3928 const top = clientRect.top + element.clientTop; 3929 const left = clientRect.left + element.clientLeft; 3930 const scale = getScale(element); 3931 const width = element.clientWidth * scale.x; 3932 const height = element.clientHeight * scale.y; 3933 const x = left * scale.x; 3934 const y = top * scale.y; 3935 return { 3936 width, 3937 height, 3938 x, 3939 y 3940 }; 3941 } 3942 function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) { 3943 let rect; 3944 if (clippingAncestor === "viewport" || clippingAncestor === "layoutViewport") { 3945 rect = getViewportRect(element, strategy, clippingAncestor); 3946 } else if (clippingAncestor === "document") { 3947 rect = getDocumentRect(getDocumentElement(element)); 3948 } else if (isElement(clippingAncestor)) { 3949 rect = getInnerBoundingClientRect(clippingAncestor, strategy); 3950 } else { 3951 const visualOffsets = getVisualOffsets(element); 3952 rect = { 3953 x: clippingAncestor.x - visualOffsets.x, 3954 y: clippingAncestor.y - visualOffsets.y, 3955 width: clippingAncestor.width, 3956 height: clippingAncestor.height 3957 }; 3958 } 3959 return rectToClientRect(rect); 3960 } 3961 function getClippingElementAncestors(element, cache) { 3962 const cachedResult = cache.get(element); 3963 if (cachedResult) { 3964 return cachedResult; 3965 } 3966 let result = getOverflowAncestors(element, [], false).filter((el) => isElement(el) && getNodeName(el) !== "body"); 3967 let lastKeptComputedStyle = null; 3968 const elementIsFixed = getComputedStyle2(element).position === "fixed"; 3969 let currentNode = elementIsFixed ? getParentNode(element) : element; 3970 while (isElement(currentNode) && !isLastTraversableNode(currentNode)) { 3971 const computedStyle = getComputedStyle2(currentNode); 3972 const currentNodeIsContaining = isContainingBlock(currentNode); 3973 const lastPosition = lastKeptComputedStyle ? lastKeptComputedStyle.position : elementIsFixed ? "fixed" : ""; 3974 const shouldDropCurrentNode = !currentNodeIsContaining && (lastPosition === "fixed" || lastPosition === "absolute" && computedStyle.position === "static"); 3975 if (shouldDropCurrentNode) { 3976 result = result.filter((ancestor) => ancestor !== currentNode); 3977 } else { 3978 lastKeptComputedStyle = computedStyle; 3979 } 3980 currentNode = getParentNode(currentNode); 3981 } 3982 cache.set(element, result); 3983 return result; 3984 } 3985 function getClippingRect(_ref) { 3986 let { 3987 element, 3988 boundary, 3989 rootBoundary, 3990 strategy 3991 } = _ref; 3992 const elementClippingAncestors = boundary === "clippingAncestors" ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary); 3993 const clippingAncestors = [...elementClippingAncestors, rootBoundary]; 3994 const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy); 3995 let top = firstRect.top; 3996 let right = firstRect.right; 3997 let bottom = firstRect.bottom; 3998 let left = firstRect.left; 3999 for (let i = 1; i < clippingAncestors.length; i++) { 4000 const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy); 4001 top = max(rect.top, top); 4002 right = min(rect.right, right); 4003 bottom = min(rect.bottom, bottom); 4004 left = max(rect.left, left); 4005 } 4006 return { 4007 width: right - left, 4008 height: bottom - top, 4009 x: left, 4010 y: top 4011 }; 4012 } 4013 function getDimensions(element) { 4014 const { 4015 width, 4016 height 4017 } = getCssDimensions(element); 4018 return { 4019 width, 4020 height 4021 }; 4022 } 4023 function getRectRelativeToOffsetParent(element, offsetParent, strategy) { 4024 const isOffsetParentAnElement = isHTMLElement(offsetParent); 4025 const documentElement = getDocumentElement(offsetParent); 4026 const isFixed = strategy === "fixed"; 4027 const rect = getBoundingClientRect(element, true, isFixed, offsetParent); 4028 let scroll = { 4029 scrollLeft: 0, 4030 scrollTop: 0 4031 }; 4032 const offsets = createCoords(0); 4033 if (isOffsetParentAnElement || !isFixed) { 4034 if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) { 4035 scroll = getNodeScroll(offsetParent); 4036 } 4037 if (isOffsetParentAnElement) { 4038 const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent); 4039 offsets.x = offsetRect.x + offsetParent.clientLeft; 4040 offsets.y = offsetRect.y + offsetParent.clientTop; 4041 } 4042 } 4043 if (!isOffsetParentAnElement && documentElement) { 4044 offsets.x = getWindowScrollBarX(documentElement); 4045 } 4046 const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0); 4047 const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x; 4048 const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y; 4049 return { 4050 x, 4051 y, 4052 width: rect.width, 4053 height: rect.height 4054 }; 4055 } 4056 function isStaticPositioned(element) { 4057 return getComputedStyle2(element).position === "static"; 4058 } 4059 function getTrueOffsetParent(element, polyfill) { 4060 if (!isHTMLElement(element) || getComputedStyle2(element).position === "fixed") { 4061 return null; 4062 } 4063 if (polyfill) { 4064 return polyfill(element); 4065 } 4066 let rawOffsetParent = element.offsetParent; 4067 if (getDocumentElement(element) === rawOffsetParent) { 4068 rawOffsetParent = rawOffsetParent.ownerDocument.body; 4069 } 4070 return rawOffsetParent; 4071 } 4072 function getOffsetParent(element, polyfill) { 4073 const win = getWindow(element); 4074 if (isTopLayer(element)) { 4075 return win; 4076 } 4077 if (!isHTMLElement(element)) { 4078 let svgOffsetParent = getParentNode(element); 4079 while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) { 4080 if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) { 4081 return svgOffsetParent; 4082 } 4083 svgOffsetParent = getParentNode(svgOffsetParent); 4084 } 4085 return win; 4086 } 4087 let offsetParent = getTrueOffsetParent(element, polyfill); 4088 while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) { 4089 offsetParent = getTrueOffsetParent(offsetParent, polyfill); 4090 } 4091 if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) { 4092 return win; 4093 } 4094 return offsetParent || getContainingBlock(element) || win; 4095 } 4096 var getElementRects = async function(data) { 4097 const getOffsetParentFn = this.getOffsetParent || getOffsetParent; 4098 const getDimensionsFn = this.getDimensions; 4099 const floatingDimensions = await getDimensionsFn(data.floating); 4100 return { 4101 reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy), 4102 floating: { 4103 x: 0, 4104 y: 0, 4105 width: floatingDimensions.width, 4106 height: floatingDimensions.height 4107 } 4108 }; 4109 }; 4110 function isRTL(element) { 4111 return getComputedStyle2(element).direction === "rtl"; 4112 } 4113 var platform2 = { 4114 convertOffsetParentRelativeRectToViewportRelativeRect, 4115 getDocumentElement, 4116 getClippingRect, 4117 getOffsetParent, 4118 getElementRects, 4119 getClientRects, 4120 getDimensions, 4121 getScale, 4122 isElement, 4123 isRTL 4124 }; 4125 function rectsAreEqual(a, b) { 4126 return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height; 4127 } 4128 function observeMove(element, onMove, ancestorResize) { 4129 let io = null; 4130 let timeoutId; 4131 const root = getDocumentElement(element); 4132 function cleanup() { 4133 var _io; 4134 clearTimeout(timeoutId); 4135 (_io = io) == null || _io.disconnect(); 4136 io = null; 4137 } 4138 function refresh(skip, threshold) { 4139 if (skip === void 0) { 4140 skip = false; 4141 } 4142 if (threshold === void 0) { 4143 threshold = 1; 4144 } 4145 cleanup(); 4146 const elementRectForRootMargin = element.getBoundingClientRect(); 4147 const { 4148 left, 4149 top, 4150 width, 4151 height 4152 } = elementRectForRootMargin; 4153 if (!skip) { 4154 onMove(); 4155 } 4156 if (!width || !height) { 4157 return; 4158 } 4159 const insetTop = floor(top); 4160 const insetRight = floor(root.clientWidth - (left + width)); 4161 const insetBottom = floor(root.clientHeight - (top + height)); 4162 const insetLeft = floor(left); 4163 const rootMargin = -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px"; 4164 const options = { 4165 rootMargin, 4166 threshold: max(0, min(1, threshold)) || 1 4167 }; 4168 let isFirstUpdate = true; 4169 function handleObserve(entries) { 4170 const ratio = entries[0].intersectionRatio; 4171 if (!rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) { 4172 return refresh(); 4173 } 4174 if (ratio !== threshold) { 4175 if (!isFirstUpdate) { 4176 return refresh(); 4177 } 4178 if (!ratio) { 4179 timeoutId = setTimeout(() => { 4180 refresh(false, 1e-7); 4181 }, 1e3); 4182 } else { 4183 refresh(false, ratio); 4184 } 4185 } 4186 isFirstUpdate = false; 4187 } 4188 try { 4189 io = new IntersectionObserver(handleObserve, { 4190 ...options, 4191 // Handle <iframe>s 4192 root: root.ownerDocument 4193 }); 4194 } catch (_e) { 4195 io = new IntersectionObserver(handleObserve, options); 4196 } 4197 io.observe(element); 4198 } 4199 const win = getWindow(element); 4200 const handleResize = () => refresh(ancestorResize); 4201 win.addEventListener("resize", handleResize); 4202 refresh(true); 4203 return () => { 4204 win.removeEventListener("resize", handleResize); 4205 cleanup(); 4206 }; 4207 } 4208 function autoUpdate(reference, floating, update2, options) { 4209 if (options === void 0) { 4210 options = {}; 4211 } 4212 const { 4213 ancestorScroll = true, 4214 ancestorResize = true, 4215 elementResize = typeof ResizeObserver === "function", 4216 layoutShift = typeof IntersectionObserver === "function", 4217 animationFrame = false 4218 } = options; 4219 const referenceEl = unwrapElement(reference); 4220 const ancestors = ancestorScroll || ancestorResize ? [...referenceEl ? getOverflowAncestors(referenceEl) : [], ...floating ? getOverflowAncestors(floating) : []] : []; 4221 ancestors.forEach((ancestor) => { 4222 ancestorScroll && ancestor.addEventListener("scroll", update2); 4223 ancestorResize && ancestor.addEventListener("resize", update2); 4224 }); 4225 const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update2, ancestorResize) : null; 4226 let reobserveFrame = -1; 4227 let resizeObserver = null; 4228 if (elementResize) { 4229 resizeObserver = new ResizeObserver((_ref) => { 4230 let [firstEntry] = _ref; 4231 if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) { 4232 resizeObserver.unobserve(floating); 4233 cancelAnimationFrame(reobserveFrame); 4234 reobserveFrame = requestAnimationFrame(() => { 4235 var _resizeObserver; 4236 (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating); 4237 }); 4238 } 4239 update2(); 4240 }); 4241 if (referenceEl && !animationFrame) { 4242 resizeObserver.observe(referenceEl); 4243 } 4244 if (floating) { 4245 resizeObserver.observe(floating); 4246 } 4247 } 4248 let frameId; 4249 let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null; 4250 if (animationFrame) { 4251 frameLoop(); 4252 } 4253 function frameLoop() { 4254 const nextRefRect = getBoundingClientRect(reference); 4255 if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) { 4256 update2(); 4257 } 4258 prevRefRect = nextRefRect; 4259 frameId = requestAnimationFrame(frameLoop); 4260 } 4261 update2(); 4262 return () => { 4263 var _resizeObserver2; 4264 ancestors.forEach((ancestor) => { 4265 ancestorScroll && ancestor.removeEventListener("scroll", update2); 4266 ancestorResize && ancestor.removeEventListener("resize", update2); 4267 }); 4268 cleanupIo == null || cleanupIo(); 4269 (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect(); 4270 resizeObserver = null; 4271 if (animationFrame) { 4272 cancelAnimationFrame(frameId); 4273 } 4274 }; 4275 } 4276 var offset2 = offset; 4277 var shift2 = shift; 4278 var flip2 = flip; 4279 var size2 = size; 4280 var limitShift2 = limitShift; 4281 var computePosition2 = (reference, floating, options) => { 4282 const cache = /* @__PURE__ */ new Map(); 4283 const mergedOptions = options != null ? options : {}; 4284 const platformWithCache = { 4285 ...platform2, 4286 ...mergedOptions.platform, 4287 _c: cache 4288 }; 4289 return computePosition(reference, floating, { 4290 ...mergedOptions, 4291 platform: platformWithCache 4292 }); 4293 }; 4294 4295 // node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs 4296 var React17 = __toESM(require_react(), 1); 4297 var import_react2 = __toESM(require_react(), 1); 4298 var ReactDOM3 = __toESM(require_react_dom(), 1); 4299 var isClient = typeof document !== "undefined"; 4300 var noop2 = function noop3() { 4301 }; 4302 var index = isClient ? import_react2.useLayoutEffect : noop2; 4303 function deepEqual(a, b) { 4304 if (a === b) { 4305 return true; 4306 } 4307 if (typeof a !== typeof b) { 4308 return false; 4309 } 4310 if (typeof a === "function" && a.toString() === b.toString()) { 4311 return true; 4312 } 4313 let length; 4314 let i; 4315 let keys; 4316 if (a && b && typeof a === "object") { 4317 if (Array.isArray(a)) { 4318 length = a.length; 4319 if (length !== b.length) return false; 4320 for (i = length; i-- !== 0; ) { 4321 if (!deepEqual(a[i], b[i])) { 4322 return false; 4323 } 4324 } 4325 return true; 4326 } 4327 keys = Object.keys(a); 4328 length = keys.length; 4329 if (length !== Object.keys(b).length) { 4330 return false; 4331 } 4332 for (i = length; i-- !== 0; ) { 4333 if (!{}.hasOwnProperty.call(b, keys[i])) { 4334 return false; 4335 } 4336 } 4337 for (i = length; i-- !== 0; ) { 4338 const key = keys[i]; 4339 if (key === "_owner" && a.$$typeof) { 4340 continue; 4341 } 4342 if (!deepEqual(a[key], b[key])) { 4343 return false; 4344 } 4345 } 4346 return true; 4347 } 4348 return a !== a && b !== b; 4349 } 4350 function getDPR(element) { 4351 if (typeof window === "undefined") { 4352 return 1; 4353 } 4354 const win = element.ownerDocument.defaultView || window; 4355 return win.devicePixelRatio || 1; 4356 } 4357 function roundByDPR(element, value) { 4358 const dpr = getDPR(element); 4359 return Math.round(value * dpr) / dpr; 4360 } 4361 function useLatestRef(value) { 4362 const ref = React17.useRef(value); 4363 index(() => { 4364 ref.current = value; 4365 }); 4366 return ref; 4367 } 4368 function useFloating(options) { 4369 if (options === void 0) { 4370 options = {}; 4371 } 4372 const { 4373 placement = "bottom", 4374 strategy = "absolute", 4375 middleware = [], 4376 platform: platform3, 4377 elements: { 4378 reference: externalReference, 4379 floating: externalFloating 4380 } = {}, 4381 transform = true, 4382 whileElementsMounted, 4383 open 4384 } = options; 4385 const [data, setData] = React17.useState({ 4386 x: 0, 4387 y: 0, 4388 strategy, 4389 placement, 4390 middlewareData: {}, 4391 isPositioned: false 4392 }); 4393 const [latestMiddleware, setLatestMiddleware] = React17.useState(middleware); 4394 if (!deepEqual(latestMiddleware, middleware)) { 4395 setLatestMiddleware(middleware); 4396 } 4397 const [_reference, _setReference] = React17.useState(null); 4398 const [_floating, _setFloating] = React17.useState(null); 4399 const setReference = React17.useCallback((node) => { 4400 if (node !== referenceRef.current) { 4401 referenceRef.current = node; 4402 _setReference(node); 4403 } 4404 }, []); 4405 const setFloating = React17.useCallback((node) => { 4406 if (node !== floatingRef.current) { 4407 floatingRef.current = node; 4408 _setFloating(node); 4409 } 4410 }, []); 4411 const referenceEl = externalReference || _reference; 4412 const floatingEl = externalFloating || _floating; 4413 const referenceRef = React17.useRef(null); 4414 const floatingRef = React17.useRef(null); 4415 const dataRef = React17.useRef(data); 4416 const hasWhileElementsMounted = whileElementsMounted != null; 4417 const whileElementsMountedRef = useLatestRef(whileElementsMounted); 4418 const platformRef = useLatestRef(platform3); 4419 const openRef = useLatestRef(open); 4420 const update2 = React17.useCallback(() => { 4421 if (!referenceRef.current || !floatingRef.current) { 4422 return; 4423 } 4424 const config = { 4425 placement, 4426 strategy, 4427 middleware: latestMiddleware 4428 }; 4429 if (platformRef.current) { 4430 config.platform = platformRef.current; 4431 } 4432 computePosition2(referenceRef.current, floatingRef.current, config).then((data2) => { 4433 const fullData = { 4434 ...data2, 4435 // The floating element's position may be recomputed while it's closed 4436 // but still mounted (such as when transitioning out). To ensure 4437 // `isPositioned` will be `false` initially on the next open, avoid 4438 // setting it to `true` when `open === false` (must be specified). 4439 isPositioned: openRef.current !== false 4440 }; 4441 if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) { 4442 dataRef.current = fullData; 4443 ReactDOM3.flushSync(() => { 4444 setData(fullData); 4445 }); 4446 } 4447 }); 4448 }, [latestMiddleware, placement, strategy, platformRef, openRef]); 4449 index(() => { 4450 if (open === false && dataRef.current.isPositioned) { 4451 dataRef.current.isPositioned = false; 4452 setData((data2) => ({ 4453 ...data2, 4454 isPositioned: false 4455 })); 4456 } 4457 }, [open]); 4458 const isMountedRef = React17.useRef(false); 4459 index(() => { 4460 isMountedRef.current = true; 4461 return () => { 4462 isMountedRef.current = false; 4463 }; 4464 }, []); 4465 index(() => { 4466 if (referenceEl) referenceRef.current = referenceEl; 4467 if (floatingEl) floatingRef.current = floatingEl; 4468 if (referenceEl && floatingEl) { 4469 if (whileElementsMountedRef.current) { 4470 return whileElementsMountedRef.current(referenceEl, floatingEl, update2); 4471 } 4472 update2(); 4473 } 4474 }, [referenceEl, floatingEl, update2, whileElementsMountedRef, hasWhileElementsMounted]); 4475 const refs = React17.useMemo(() => ({ 4476 reference: referenceRef, 4477 floating: floatingRef, 4478 setReference, 4479 setFloating 4480 }), [setReference, setFloating]); 4481 const elements = React17.useMemo(() => ({ 4482 reference: referenceEl, 4483 floating: floatingEl 4484 }), [referenceEl, floatingEl]); 4485 const floatingStyles = React17.useMemo(() => { 4486 const initialStyles = { 4487 position: strategy, 4488 left: 0, 4489 top: 0 4490 }; 4491 if (!elements.floating) { 4492 return initialStyles; 4493 } 4494 const x = roundByDPR(elements.floating, data.x); 4495 const y = roundByDPR(elements.floating, data.y); 4496 if (transform) { 4497 return { 4498 ...initialStyles, 4499 transform: "translate(" + x + "px, " + y + "px)", 4500 ...getDPR(elements.floating) >= 1.5 && { 4501 willChange: "transform" 4502 } 4503 }; 4504 } 4505 return { 4506 position: strategy, 4507 left: x, 4508 top: y 4509 }; 4510 }, [strategy, transform, elements.floating, data.x, data.y]); 4511 return React17.useMemo(() => ({ 4512 ...data, 4513 update: update2, 4514 refs, 4515 elements, 4516 floatingStyles 4517 }), [data, update2, refs, elements, floatingStyles]); 4518 } 4519 var offset3 = (options, deps) => { 4520 const result = offset2(options); 4521 return { 4522 name: result.name, 4523 fn: result.fn, 4524 options: [options, deps] 4525 }; 4526 }; 4527 var shift3 = (options, deps) => { 4528 const result = shift2(options); 4529 return { 4530 name: result.name, 4531 fn: result.fn, 4532 options: [options, deps] 4533 }; 4534 }; 4535 var limitShift3 = (options, deps) => { 4536 const result = limitShift2(options); 4537 return { 4538 fn: result.fn, 4539 options: [options, deps] 4540 }; 4541 }; 4542 var flip3 = (options, deps) => { 4543 const result = flip2(options); 4544 return { 4545 name: result.name, 4546 fn: result.fn, 4547 options: [options, deps] 4548 }; 4549 }; 4550 var size3 = (options, deps) => { 4551 const result = size2(options); 4552 return { 4553 name: result.name, 4554 fn: result.fn, 4555 options: [options, deps] 4556 }; 4557 }; 4558 4559 // node_modules/@base-ui/react/utils/popups/popupHandle.mjs 4560 var BasePopupHandle = class { 4561 /** 4562 * Stores of every root currently using this handle, in attach order. A handle is meant to be used 4563 * by a single mounted root, but roots can transiently overlap (e.g. during an animated route 4564 * transition), so this stack lets `attachStore`'s cleanup restore the previous root instead of 4565 * leaving a still-mounted root uncontrollable when a newer overlapping root detaches first. 4566 */ 4567 attachedStores = []; 4568 /** 4569 * Store of the root that currently controls the handle: the most recently attached one still 4570 * mounted, or `null` when no root is attached. Imperative methods are no-ops while this is `null`. 4571 */ 4572 attachedStoreValue = null; 4573 /** 4574 * Listeners notified when `attachedStore` changes, so detached triggers can follow the store pointer. 4575 */ 4576 storeListeners = /* @__PURE__ */ new Set(); 4577 /** 4578 * Creates a handle backed by the store used while no root is attached. 4579 * 4580 * @param fallbackStore Inert, closed store handed to detached triggers while no root is attached, 4581 * so they can render and register without a mounted root. Triggers register into whichever store 4582 * `store` currently resolves to, so while detached they live in this store's trigger map and 4583 * migrate themselves to the root's store (and back) as it attaches/detaches. 4584 * @param componentName Component name used to prefix dev warnings, e.g. `'Menu'` produces 4585 * `MenuHandle.open()` in warning text. 4586 * @param throwOnMissingTrigger Whether `open(triggerId)` throws when no trigger with that id is 4587 * registered. Anchored popups (Menu, Popover, Tooltip, PreviewCard) need a trigger to anchor to, 4588 * so they throw; Dialog is not anchored and instead opens unassociated with a dev warning. 4589 */ 4590 constructor(fallbackStore, componentName, throwOnMissingTrigger = true) { 4591 this.fallbackStore = fallbackStore; 4592 this.componentName = componentName; 4593 this.throwOnMissingTrigger = throwOnMissingTrigger; 4594 } 4595 get attachedStore() { 4596 return this.attachedStoreValue; 4597 } 4598 /** 4599 * Store that detached triggers read from: the attached root's store, or an inert fallback store 4600 * used while no root is attached. 4601 * @internal 4602 */ 4603 get store() { 4604 return this.attachedStoreValue ?? this.fallbackStore; 4605 } 4606 /** 4607 * Stable fallback store used for server rendering and hydration. Root stores cannot be recorded on 4608 * the handle during render because a handle can be shared by concurrent server-rendered requests. 4609 * @internal 4610 */ 4611 get serverStore() { 4612 return this.fallbackStore; 4613 } 4614 /** 4615 * Subscribes to changes of the attached store pointer so detached triggers re-render and re-bind 4616 * when a root attaches or detaches. Returns a function that removes the listener. 4617 * @internal 4618 */ 4619 subscribeStore(listener) { 4620 this.storeListeners.add(listener); 4621 return () => { 4622 this.storeListeners.delete(listener); 4623 }; 4624 } 4625 /** 4626 * Points the handle at a root's store and notifies subscribers so detached triggers re-render and 4627 * re-register into it (their registration ref re-fires on the store-pointer change). Returns a 4628 * cleanup function that detaches the store again. 4629 * @internal 4630 */ 4631 attachStore(newStore) { 4632 this.attachedStores.push(newStore); 4633 this.setActiveStore(newStore); 4634 if (true) { 4635 if (this.attachedStores.length > 1) { 4636 const dev = this; 4637 (dev.overlapWarningFrame ??= AnimationFrame.create()).request(() => { 4638 if (this.attachedStores.length > 1) { 4639 console.warn("Base UI: A handle is attached to more than one mounted root at the same time. The most recently mounted root takes over and the previous one stops being controlled by the handle. A handle should be used by a single root that stays mounted for the lifetime of the handle."); 4640 } 4641 }); 4642 } 4643 } 4644 return () => { 4645 const index2 = this.attachedStores.lastIndexOf(newStore); 4646 if (index2 !== -1) { 4647 this.attachedStores.splice(index2, 1); 4648 } 4649 this.setActiveStore(this.attachedStores[this.attachedStores.length - 1] ?? null); 4650 }; 4651 } 4652 /** 4653 * Sets the store that currently controls the handle and notifies subscribers when it changes, so 4654 * detached triggers re-render and migrate their registration to the new store. 4655 */ 4656 setActiveStore(store2) { 4657 if (this.attachedStoreValue !== store2) { 4658 this.attachedStoreValue = store2; 4659 this.storeListeners.forEach((listener) => { 4660 listener(); 4661 }); 4662 } 4663 } 4664 /** 4665 * Opens the attached root's store and associates it with the trigger with the given id, or a 4666 * no-op (with a dev warning) while no root is attached. Shared by every concrete handle's public 4667 * `open()` method, which only narrows the parameter type. 4668 * 4669 * When a trigger id is given but no matching trigger is registered, anchored popups throw (see 4670 * `throwOnMissingTrigger`); Dialog opens unassociated with a dev warning instead. 4671 * 4672 * This method should only be called in an event handler or an effect (not during rendering). 4673 * 4674 * @param triggerId ID of the trigger to associate with the popup, or `null`/`undefined` to open 4675 * without associating any trigger. 4676 */ 4677 openByTrigger(triggerId) { 4678 const attachedStore = this.attachedStore; 4679 if (attachedStore === null) { 4680 if (true) { 4681 console.warn(`Base UI: $this.componentName}Handle.open() was called while no root using this handle is mounted. The call was ignored; mount a root with this handle before opening it imperatively.`); 4682 } 4683 return; 4684 } 4685 let triggerElement; 4686 if (triggerId) { 4687 for (let i = this.attachedStores.length - 1; i >= 0 && !triggerElement; i -= 1) { 4688 triggerElement = this.attachedStores[i].context.triggerElements.getById(triggerId); 4689 } 4690 triggerElement ??= this.fallbackStore.context.triggerElements.getById(triggerId); 4691 } 4692 if (triggerId && !triggerElement) { 4693 if (this.throwOnMissingTrigger) { 4694 throw new Error(true ? `Base UI: $this.componentName}Handle.open() was called with the trigger id "$triggerId}", but no matching trigger is registered with this handle. An anchored popup cannot open without a trigger to anchor to. Pass the id of a mounted $this.componentName}.Trigger that has this handle set on its "handle" prop.` : formatErrorMessage_default(99, this.componentName, triggerId, this.componentName)); 4695 } 4696 if (true) { 4697 console.warn(`Base UI: $this.componentName}Handle.open: No trigger found with id "$triggerId}". The popup will open, but the trigger will not be associated with it.`); 4698 } 4699 } 4700 attachedStore.setOpen(true, createChangeEventDetails(reason_parts_exports.imperativeAction, void 0, triggerElement)); 4701 } 4702 /** 4703 * Closes the popup by setting the attached root's store to closed, or a no-op (with a dev warning) 4704 * while no root is attached. Shared by every concrete handle's public `close()` method. 4705 * 4706 * This method should only be called in an event handler or an effect (not during rendering). 4707 */ 4708 closePopup() { 4709 const attachedStore = this.attachedStore; 4710 if (attachedStore === null) { 4711 if (true) { 4712 console.warn(`Base UI: $this.componentName}Handle.close() was called while no root using this handle is mounted. The call was ignored.`); 4713 } 4714 return; 4715 } 4716 attachedStore.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction)); 4717 } 4718 }; 4719 4720 // node_modules/@base-ui/react/utils/popups/popupStoreUtils.mjs 4721 var React22 = __toESM(require_react(), 1); 4722 var ReactDOM4 = __toESM(require_react_dom(), 1); 4723 4724 // node_modules/@base-ui/react/floating-ui-react/hooks/useSyncedFloatingRootContext.mjs 4725 var React21 = __toESM(require_react(), 1); 4726 4727 // node_modules/@base-ui/utils/store/useStore.mjs 4728 var React19 = __toESM(require_react(), 1); 4729 var import_shim = __toESM(require_shim(), 1); 4730 var import_with_selector = __toESM(require_with_selector(), 1); 4731 4732 // node_modules/@base-ui/utils/fastHooks.mjs 4733 var React18 = __toESM(require_react(), 1); 4734 var hooks = []; 4735 var currentInstance = void 0; 4736 function getInstance() { 4737 return currentInstance; 4738 } 4739 function register(hook) { 4740 hooks.push(hook); 4741 } 4742 function fastComponent(fn) { 4743 const FastComponent = (props, forwardedRef) => { 4744 const instance = useRefWithInit(createInstance).current; 4745 let result; 4746 try { 4747 currentInstance = instance; 4748 for (const hook of hooks) { 4749 hook.before(instance); 4750 } 4751 result = fn(props, forwardedRef); 4752 for (const hook of hooks) { 4753 hook.after(instance); 4754 } 4755 instance.didInitialize = true; 4756 } finally { 4757 currentInstance = void 0; 4758 } 4759 return result; 4760 }; 4761 FastComponent.displayName = fn.displayName || fn.name; 4762 return FastComponent; 4763 } 4764 function fastComponentRef(fn) { 4765 return /* @__PURE__ */ React18.forwardRef(fastComponent(fn)); 4766 } 4767 function createInstance() { 4768 return { 4769 didInitialize: false 4770 }; 4771 } 4772 4773 // node_modules/@base-ui/utils/store/useStore.mjs 4774 var canUseRawUseSyncExternalStore = isReactVersionAtLeast(19); 4775 var useStoreImplementation = canUseRawUseSyncExternalStore ? useStoreFast : useStoreLegacy; 4776 function useStore(store2, selector, a1, a2, a3) { 4777 return useStoreImplementation(store2, selector, a1, a2, a3); 4778 } 4779 function useStoreR19(store2, selector, a1, a2, a3) { 4780 const getSelection = React19.useCallback(() => selector(store2.getSnapshot(), a1, a2, a3), [store2, selector, a1, a2, a3]); 4781 return (0, import_shim.useSyncExternalStore)(store2.subscribe, getSelection, getSelection); 4782 } 4783 register({ 4784 before(instance) { 4785 instance.syncIndex = 0; 4786 if (!instance.didInitialize) { 4787 instance.syncTick = 1; 4788 instance.syncHooks = []; 4789 instance.didChangeStore = true; 4790 instance.getSnapshot = () => { 4791 let didChange2 = false; 4792 for (let i = 0; i < instance.syncHooks.length; i += 1) { 4793 const hook = instance.syncHooks[i]; 4794 const value = hook.selector(hook.store.state, hook.a1, hook.a2, hook.a3); 4795 if (!Object.is(hook.value, value)) { 4796 didChange2 = true; 4797 hook.value = value; 4798 } 4799 } 4800 if (didChange2) { 4801 instance.syncTick += 1; 4802 } 4803 return instance.syncTick; 4804 }; 4805 } 4806 }, 4807 after(instance) { 4808 if (instance.syncHooks.length > 0) { 4809 if (instance.didChangeStore) { 4810 instance.didChangeStore = false; 4811 instance.subscribe = (onStoreChange) => { 4812 const stores = /* @__PURE__ */ new Set(); 4813 for (const hook of instance.syncHooks) { 4814 stores.add(hook.store); 4815 } 4816 const unsubscribes = []; 4817 for (const store2 of stores) { 4818 unsubscribes.push(store2.subscribe(onStoreChange)); 4819 } 4820 return () => { 4821 for (const unsubscribe of unsubscribes) { 4822 unsubscribe(); 4823 } 4824 }; 4825 }; 4826 } 4827 (0, import_shim.useSyncExternalStore)(instance.subscribe, instance.getSnapshot, instance.getSnapshot); 4828 } 4829 } 4830 }); 4831 function useStoreFast(store2, selector, a1, a2, a3) { 4832 const instance = getInstance(); 4833 if (!instance) { 4834 return useStoreR19(store2, selector, a1, a2, a3); 4835 } 4836 const index2 = instance.syncIndex; 4837 instance.syncIndex += 1; 4838 let hook; 4839 if (!instance.didInitialize) { 4840 hook = { 4841 store: store2, 4842 selector, 4843 a1, 4844 a2, 4845 a3, 4846 value: selector(store2.getSnapshot(), a1, a2, a3) 4847 }; 4848 instance.syncHooks.push(hook); 4849 } else { 4850 hook = instance.syncHooks[index2]; 4851 if (hook.store !== store2 || hook.selector !== selector || !Object.is(hook.a1, a1) || !Object.is(hook.a2, a2) || !Object.is(hook.a3, a3)) { 4852 if (hook.store !== store2) { 4853 instance.didChangeStore = true; 4854 } 4855 hook.store = store2; 4856 hook.selector = selector; 4857 hook.a1 = a1; 4858 hook.a2 = a2; 4859 hook.a3 = a3; 4860 hook.value = selector(store2.getSnapshot(), a1, a2, a3); 4861 } 4862 } 4863 return hook.value; 4864 } 4865 function useStoreLegacy(store2, selector, a1, a2, a3) { 4866 return (0, import_with_selector.useSyncExternalStoreWithSelector)(store2.subscribe, store2.getSnapshot, store2.getSnapshot, (state) => selector(state, a1, a2, a3)); 4867 } 4868 4869 // node_modules/@base-ui/utils/store/Store.mjs 4870 var Store = class { 4871 /** 4872 * The current state of the store. 4873 * This property is updated immediately when the state changes as a result of calling {@link setState}, {@link update}, or {@link set}. 4874 * 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). 4875 * The values can be used directly (to avoid subscribing to the store) in effects or event handlers. 4876 * 4877 * Do not modify properties in state directly. Instead, use the provided methods to ensure proper state management and listener notification. 4878 */ 4879 // Internal state to handle recursive `setState()` calls 4880 constructor(state) { 4881 this.state = state; 4882 this.listeners = /* @__PURE__ */ new Set(); 4883 this.updateTick = 0; 4884 } 4885 /** 4886 * Registers a listener that will be called whenever the store's state changes. 4887 * 4888 * @param fn The listener function to be called on state changes. 4889 * @returns A function to unsubscribe the listener. 4890 */ 4891 subscribe = (fn) => { 4892 this.listeners.add(fn); 4893 return () => { 4894 this.listeners.delete(fn); 4895 }; 4896 }; 4897 /** 4898 * Returns the current state of the store. 4899 */ 4900 getSnapshot = () => { 4901 return this.state; 4902 }; 4903 /** 4904 * Updates the entire store's state and notifies all registered listeners. 4905 * 4906 * @param newState The new state to set for the store. 4907 */ 4908 setState(newState) { 4909 if (this.state === newState) { 4910 return; 4911 } 4912 this.state = newState; 4913 this.updateTick += 1; 4914 const currentTick = this.updateTick; 4915 for (const listener of this.listeners) { 4916 if (currentTick !== this.updateTick) { 4917 return; 4918 } 4919 listener(newState); 4920 } 4921 } 4922 /** 4923 * Merges the provided changes into the current state and notifies listeners if there are changes. 4924 * 4925 * @param changes An object containing the changes to apply to the current state. 4926 */ 4927 update(changes) { 4928 for (const key in changes) { 4929 if (!Object.is(this.state[key], changes[key])) { 4930 this.setState({ 4931 ...this.state, 4932 ...changes 4933 }); 4934 return; 4935 } 4936 } 4937 } 4938 /** 4939 * Sets a specific key in the store's state to a new value and notifies listeners if the value has changed. 4940 * 4941 * @param key The key in the store's state to update. 4942 * @param value The new value to set for the specified key. 4943 */ 4944 set(key, value) { 4945 if (!Object.is(this.state[key], value)) { 4946 this.setState({ 4947 ...this.state, 4948 [key]: value 4949 }); 4950 } 4951 } 4952 /** 4953 * Gives the state a new reference and updates all registered listeners. 4954 */ 4955 notifyAll() { 4956 const newState = { 4957 ...this.state 4958 }; 4959 this.setState(newState); 4960 } 4961 use(selector, a1, a2, a3) { 4962 return useStore(this, selector, a1, a2, a3); 4963 } 4964 }; 4965 4966 // node_modules/@base-ui/utils/store/ReactStore.mjs 4967 var React20 = __toESM(require_react(), 1); 4968 var ReactStore = class extends Store { 4969 /** 4970 * Creates a new ReactStore instance. 4971 * 4972 * @param state Initial state of the store. 4973 * @param context Non-reactive context values. 4974 * @param selectors Optional selectors for use with `useState`. 4975 */ 4976 constructor(state, context = {}, selectors3) { 4977 super(state); 4978 this.context = context; 4979 this.selectors = selectors3; 4980 } 4981 /** 4982 * Non-reactive values such as refs, callbacks, etc. 4983 */ 4984 /** 4985 * Synchronizes a single external value into the store. 4986 * 4987 * Note that the while the value in `state` is updated immediately, the value returned 4988 * by `useState` is updated before the next render (similarly to React's `useState`). 4989 */ 4990 useSyncedValue(key, value) { 4991 React20.useDebugValue(key); 4992 const store2 = this; 4993 useIsoLayoutEffect(() => { 4994 if (store2.state[key] !== value) { 4995 store2.set(key, value); 4996 } 4997 }, [store2, key, value]); 4998 } 4999 /** 5000 * Synchronizes a single external value into the store and 5001 * cleans it up (sets to `undefined`) on unmount. 5002 * 5003 * Note that the while the value in `state` is updated immediately, the value returned 5004 * by `useState` is updated before the next render (similarly to React's `useState`). 5005 */ 5006 useSyncedValueWithCleanup(key, value) { 5007 const store2 = this; 5008 useIsoLayoutEffect(() => { 5009 if (store2.state[key] !== value) { 5010 store2.set(key, value); 5011 } 5012 return () => { 5013 store2.set(key, void 0); 5014 }; 5015 }, [store2, key, value]); 5016 } 5017 /** 5018 * Synchronizes multiple external values into the store. 5019 * 5020 * Note that the while the values in `state` are updated immediately, the values returned 5021 * by `useState` are updated before the next render (similarly to React's `useState`). 5022 */ 5023 useSyncedValues(statePart) { 5024 const store2 = this; 5025 if (true) { 5026 React20.useDebugValue(statePart, (p) => Object.keys(p)); 5027 const keys = React20.useRef(Object.keys(statePart)).current; 5028 const nextKeys = Object.keys(statePart); 5029 if (keys.length !== nextKeys.length || keys.some((key, index2) => key !== nextKeys[index2])) { 5030 console.error("ReactStore.useSyncedValues expects the same prop keys on every render. Keys should be stable."); 5031 } 5032 } 5033 const dependencies = Object.values(statePart); 5034 useIsoLayoutEffect(() => { 5035 store2.update(statePart); 5036 }, [store2, ...dependencies]); 5037 } 5038 /** 5039 * Registers a controllable prop pair (`controlled`, `defaultValue`) for a specific key. If `controlled` 5040 * is non-undefined, the store's state at `key` is updated to match `controlled`. 5041 */ 5042 useControlledProp(key, controlled) { 5043 React20.useDebugValue(key); 5044 const store2 = this; 5045 const isControlled = controlled !== void 0; 5046 useIsoLayoutEffect(() => { 5047 if (isControlled && !Object.is(store2.state[key], controlled)) { 5048 store2.setState({ 5049 ...store2.state, 5050 [key]: controlled 5051 }); 5052 } 5053 }, [store2, key, controlled, isControlled]); 5054 if (true) { 5055 const cache = this.controlledValues ??= /* @__PURE__ */ new Map(); 5056 if (!cache.has(key)) { 5057 cache.set(key, isControlled); 5058 } 5059 const previouslyControlled = cache.get(key); 5060 if (previouslyControlled !== void 0 && previouslyControlled !== isControlled) { 5061 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).`); 5062 } 5063 } 5064 } 5065 /** Gets the current value from the store using a selector with the provided key. 5066 * 5067 * @param key Key of the selector to use. 5068 */ 5069 select(key, a1, a2, a3) { 5070 const selector = this.selectors[key]; 5071 return selector(this.state, a1, a2, a3); 5072 } 5073 /** 5074 * Returns a value from the store's state using a selector function. 5075 * Used to subscribe to specific parts of the state. 5076 * This methods causes a rerender whenever the selected state changes. 5077 * 5078 * @param key Key of the selector to use. 5079 */ 5080 useState(key, a1, a2, a3) { 5081 React20.useDebugValue(key); 5082 return useStore(this, this.selectors[key], a1, a2, a3); 5083 } 5084 /** 5085 * Wraps a function with `useStableCallback` to ensure it has a stable reference 5086 * and assigns it to the context. 5087 * 5088 * @param key Key of the event callback. Must be a function in the context. 5089 * @param fn Function to assign. 5090 */ 5091 useContextCallback(key, fn) { 5092 React20.useDebugValue(key); 5093 const stableFunction = useStableCallback(fn ?? NOOP); 5094 this.context[key] = stableFunction; 5095 } 5096 /** 5097 * Returns a stable setter function for a specific key in the store's state. 5098 * It's commonly used to pass as a ref callback to React elements. 5099 * 5100 * @param key Key of the state to set. 5101 */ 5102 useStateSetter(key) { 5103 const ref = React20.useRef(void 0); 5104 if (ref.current === void 0) { 5105 ref.current = (value) => { 5106 this.set(key, value); 5107 }; 5108 } 5109 return ref.current; 5110 } 5111 /** 5112 * Observes changes derived from the store's selectors and calls the listener when the selected value changes. 5113 * 5114 * @param key Key of the selector to observe. 5115 * @param listener Listener function called when the selector result changes. 5116 */ 5117 observe(selector, listener) { 5118 let selectFn; 5119 if (typeof selector === "function") { 5120 selectFn = selector; 5121 } else { 5122 selectFn = this.selectors[selector]; 5123 } 5124 let prevValue = selectFn(this.state); 5125 listener(prevValue, prevValue, this); 5126 return this.subscribe((nextState) => { 5127 const nextValue = selectFn(nextState); 5128 if (!Object.is(prevValue, nextValue)) { 5129 const oldValue = prevValue; 5130 prevValue = nextValue; 5131 listener(nextValue, oldValue, this); 5132 } 5133 }); 5134 } 5135 }; 5136 5137 // node_modules/@base-ui/react/floating-ui-react/components/FloatingRootStore.mjs 5138 var selectors = { 5139 open: (state) => state.open, 5140 transitionStatus: (state) => state.transitionStatus, 5141 domReferenceElement: (state) => state.domReferenceElement, 5142 referenceElement: (state) => state.positionReference ?? state.referenceElement, 5143 floatingElement: (state) => state.floatingElement, 5144 floatingId: (state) => state.floatingId 5145 }; 5146 var FloatingRootStore = class extends ReactStore { 5147 constructor(options) { 5148 const { 5149 syncOnly, 5150 nested, 5151 onOpenChange, 5152 triggerElements, 5153 ...initialState 5154 } = options; 5155 super({ 5156 ...initialState, 5157 positionReference: initialState.referenceElement, 5158 domReferenceElement: initialState.referenceElement 5159 }, { 5160 onOpenChange, 5161 dataRef: { 5162 current: {} 5163 }, 5164 events: createEventEmitter(), 5165 nested, 5166 triggerElements 5167 }, selectors); 5168 this.syncOnly = syncOnly; 5169 } 5170 /** 5171 * Syncs the event used by hover logic to distinguish hover-open from click-like interaction. 5172 */ 5173 syncOpenEvent = (newOpen, event) => { 5174 if (!newOpen || !this.state.open || // Prevent a pending hover-open from overwriting a click-open event, while allowing 5175 // click events to upgrade a hover-open. 5176 event != null && isClickLikeEvent(event)) { 5177 this.context.dataRef.current.openEvent = newOpen ? event : void 0; 5178 } 5179 }; 5180 /** 5181 * Runs the root-owned side effects for an open state change. 5182 */ 5183 dispatchOpenChange = (newOpen, eventDetails) => { 5184 this.syncOpenEvent(newOpen, eventDetails.event); 5185 const details = { 5186 open: newOpen, 5187 reason: eventDetails.reason, 5188 nativeEvent: eventDetails.event, 5189 nested: this.context.nested, 5190 triggerElement: eventDetails.trigger 5191 }; 5192 this.context.events.emit("openchange", details); 5193 }; 5194 /** 5195 * Emits the `openchange` event through the internal event emitter and calls the `onOpenChange` handler with the provided arguments. 5196 * 5197 * @param newOpen The new open state. 5198 * @param eventDetails Details about the event that triggered the open state change. 5199 */ 5200 setOpen = (newOpen, eventDetails) => { 5201 if (this.syncOnly) { 5202 this.context.onOpenChange?.(newOpen, eventDetails); 5203 return; 5204 } 5205 this.dispatchOpenChange(newOpen, eventDetails); 5206 this.context.onOpenChange?.(newOpen, eventDetails); 5207 }; 5208 }; 5209 5210 // node_modules/@base-ui/react/floating-ui-react/hooks/useSyncedFloatingRootContext.mjs 5211 function useSyncedFloatingRootContext(options) { 5212 const { 5213 popupStore, 5214 treatPopupAsFloatingElement = false, 5215 floatingRootContext: floatingRootContextProp, 5216 floatingId, 5217 nested, 5218 onOpenChange 5219 } = options; 5220 const open = popupStore.useState("open"); 5221 const referenceElement = popupStore.useState("activeTriggerElement"); 5222 const floatingElement = popupStore.useState(treatPopupAsFloatingElement ? "popupElement" : "positionerElement"); 5223 const triggerElements = popupStore.context.triggerElements; 5224 const handleOpenChange = onOpenChange; 5225 const internalStoreRef = React21.useRef(null); 5226 if (floatingRootContextProp === void 0 && internalStoreRef.current === null) { 5227 internalStoreRef.current = new FloatingRootStore({ 5228 open, 5229 transitionStatus: void 0, 5230 referenceElement, 5231 floatingElement, 5232 triggerElements, 5233 onOpenChange: handleOpenChange, 5234 floatingId, 5235 syncOnly: true, 5236 nested 5237 }); 5238 } 5239 const store2 = floatingRootContextProp ?? internalStoreRef.current; 5240 popupStore.useSyncedValue("floatingId", floatingId); 5241 useIsoLayoutEffect(() => { 5242 const valuesToSync = { 5243 open, 5244 floatingId, 5245 referenceElement, 5246 floatingElement 5247 }; 5248 if (isElement(referenceElement)) { 5249 valuesToSync.domReferenceElement = referenceElement; 5250 } 5251 if (store2.state.positionReference === store2.state.referenceElement) { 5252 valuesToSync.positionReference = referenceElement; 5253 } 5254 store2.update(valuesToSync); 5255 }, [open, floatingId, referenceElement, floatingElement, store2]); 5256 store2.context.onOpenChange = handleOpenChange; 5257 store2.context.nested = nested; 5258 return store2; 5259 } 5260 5261 // node_modules/@base-ui/react/utils/popups/popupStoreUtils.mjs 5262 var FOCUSABLE_POPUP_PROPS = { 5263 tabIndex: -1, 5264 [FOCUSABLE_ATTRIBUTE]: "" 5265 }; 5266 function usePopupRootStore(createStore, treatPopupAsFloatingElement = false) { 5267 const floatingId = useId(); 5268 const nested = useFloatingParentNodeId() != null; 5269 const store2 = useRefWithInit(() => createStore(floatingId, nested)).current; 5270 useSyncedFloatingRootContext({ 5271 popupStore: store2, 5272 treatPopupAsFloatingElement, 5273 floatingRootContext: store2.state.floatingRootContext, 5274 floatingId, 5275 nested, 5276 onOpenChange: store2.setOpen 5277 }); 5278 return store2; 5279 } 5280 function PopupHandleAttachment({ 5281 handle, 5282 store: store2 5283 }) { 5284 useIsoLayoutEffect(() => { 5285 return handle.attachStore(store2); 5286 }, [handle, store2]); 5287 return null; 5288 } 5289 function useTriggerRegistration(id, store2) { 5290 const registeredElementIdRef = React22.useRef(null); 5291 const registeredElementRef = React22.useRef(null); 5292 return React22.useCallback((element) => { 5293 if (id === void 0) { 5294 return; 5295 } 5296 let shouldSyncTriggerCount = false; 5297 if (registeredElementIdRef.current !== null) { 5298 const registeredId = registeredElementIdRef.current; 5299 const registeredElement = registeredElementRef.current; 5300 const currentElement = store2.context.triggerElements.getById(registeredId); 5301 if (registeredElement && currentElement === registeredElement) { 5302 store2.context.triggerElements.delete(registeredId); 5303 shouldSyncTriggerCount = true; 5304 } 5305 registeredElementIdRef.current = null; 5306 registeredElementRef.current = null; 5307 } 5308 if (element !== null) { 5309 registeredElementIdRef.current = id; 5310 registeredElementRef.current = element; 5311 store2.context.triggerElements.add(id, element); 5312 shouldSyncTriggerCount = true; 5313 } 5314 if (shouldSyncTriggerCount) { 5315 const triggerCount = store2.context.triggerElements.size; 5316 if (store2.select("open") && store2.state.triggerCount !== triggerCount) { 5317 store2.set("triggerCount", triggerCount); 5318 } 5319 } 5320 }, [store2, id]); 5321 } 5322 function setPopupOpenState(state, open, trigger, preventUnmountOnClose = false) { 5323 if (open) { 5324 state.preventUnmountingOnClose = false; 5325 } else if (preventUnmountOnClose) { 5326 state.preventUnmountingOnClose = true; 5327 } 5328 const triggerId = trigger?.id ?? null; 5329 if (triggerId || open) { 5330 state.activeTriggerId = triggerId; 5331 state.activeTriggerElement = trigger ?? null; 5332 } 5333 } 5334 function attachPreventUnmountOnClose(eventDetails) { 5335 let preventUnmountOnClose = false; 5336 eventDetails.preventUnmountOnClose = () => { 5337 preventUnmountOnClose = true; 5338 }; 5339 return () => preventUnmountOnClose; 5340 } 5341 function applyPopupOpenChange(store2, nextOpen, eventDetails, options = {}) { 5342 const reason = eventDetails.reason; 5343 const isHover = reason === reason_parts_exports.triggerHover; 5344 const isFocusOpen = nextOpen && reason === reason_parts_exports.triggerFocus; 5345 const isDismissClose = !nextOpen && (reason === reason_parts_exports.triggerPress || reason === reason_parts_exports.escapeKey); 5346 const shouldPreventUnmountOnClose = attachPreventUnmountOnClose(eventDetails); 5347 store2.context.onOpenChange?.(nextOpen, eventDetails); 5348 if (eventDetails.isCanceled) { 5349 return; 5350 } 5351 options.onBeforeDispatch?.(); 5352 store2.state.floatingRootContext.dispatchOpenChange(nextOpen, eventDetails); 5353 const changeState = () => { 5354 const updatedState = { 5355 ...options.extraState, 5356 open: nextOpen 5357 }; 5358 if (isFocusOpen) { 5359 updatedState.instantType = "focus"; 5360 } else if (isDismissClose) { 5361 updatedState.instantType = "dismiss"; 5362 } else if (isHover) { 5363 updatedState.instantType = void 0; 5364 } 5365 setPopupOpenState(updatedState, nextOpen, eventDetails.trigger, shouldPreventUnmountOnClose()); 5366 store2.update(updatedState); 5367 }; 5368 if (isHover) { 5369 ReactDOM4.flushSync(changeState); 5370 } else { 5371 changeState(); 5372 } 5373 } 5374 function useTriggerDataForwarding(triggerId, triggerElementRef, store2, stateUpdates) { 5375 const isMountedByThisTrigger = store2.useState("isMountedByTrigger", triggerId); 5376 const baseRegisterTrigger = useTriggerRegistration(triggerId, store2); 5377 const applyTriggerData = useStableCallback((element) => { 5378 const open = store2.select("open"); 5379 const activeTriggerId = store2.select("activeTriggerId"); 5380 if (activeTriggerId === triggerId) { 5381 store2.update({ 5382 activeTriggerElement: element, 5383 ...open ? stateUpdates : null 5384 }); 5385 return; 5386 } 5387 if (activeTriggerId == null && open) { 5388 store2.update({ 5389 activeTriggerId: triggerId, 5390 activeTriggerElement: element, 5391 ...stateUpdates 5392 }); 5393 } 5394 }); 5395 const registerTrigger = React22.useCallback((element) => { 5396 baseRegisterTrigger(element); 5397 if (element) { 5398 applyTriggerData(element); 5399 } 5400 }, [baseRegisterTrigger, applyTriggerData]); 5401 useIsoLayoutEffect(() => { 5402 if (isMountedByThisTrigger) { 5403 store2.update({ 5404 activeTriggerElement: triggerElementRef.current, 5405 ...stateUpdates 5406 }); 5407 } 5408 }, [isMountedByThisTrigger, store2, triggerElementRef, ...Object.values(stateUpdates)]); 5409 return { 5410 registerTrigger, 5411 isMountedByThisTrigger 5412 }; 5413 } 5414 function useImplicitActiveTrigger(store2, options = {}) { 5415 const { 5416 closeOnActiveTriggerUnmount = false 5417 } = options; 5418 const resolvedActiveTriggerIdRef = React22.useRef(null); 5419 const open = store2.useState("open"); 5420 const reactiveTriggerCount = store2.useState("triggerCount"); 5421 const activeTriggerId = store2.useState("activeTriggerId"); 5422 const reactiveActiveTriggerElement = store2.useState("activeTriggerElement"); 5423 useIsoLayoutEffect(() => { 5424 if (!open) { 5425 resolvedActiveTriggerIdRef.current = null; 5426 if (store2.state.triggerCount !== 0) { 5427 store2.set("triggerCount", 0); 5428 } 5429 return; 5430 } 5431 const triggerCount = store2.context.triggerElements.size; 5432 const stateUpdates = {}; 5433 if (store2.state.triggerCount !== triggerCount) { 5434 stateUpdates.triggerCount = triggerCount; 5435 } 5436 const currentActiveTriggerId = store2.select("activeTriggerId"); 5437 let lostActiveTriggerId = null; 5438 if (currentActiveTriggerId) { 5439 const activeTriggerElement = store2.context.triggerElements.getById(currentActiveTriggerId); 5440 if (!activeTriggerElement) { 5441 for (const [triggerId, triggerElement] of store2.context.triggerElements.entries()) { 5442 if (triggerElement === store2.state.activeTriggerElement) { 5443 stateUpdates.activeTriggerId = triggerId; 5444 stateUpdates.activeTriggerElement = triggerElement; 5445 resolvedActiveTriggerIdRef.current = triggerId; 5446 break; 5447 } 5448 } 5449 if (stateUpdates.activeTriggerId === void 0) { 5450 if (resolvedActiveTriggerIdRef.current === currentActiveTriggerId) { 5451 lostActiveTriggerId = currentActiveTriggerId; 5452 } else { 5453 resolvedActiveTriggerIdRef.current = null; 5454 } 5455 } 5456 } else { 5457 resolvedActiveTriggerIdRef.current = currentActiveTriggerId; 5458 if (activeTriggerElement !== store2.state.activeTriggerElement) { 5459 stateUpdates.activeTriggerElement = activeTriggerElement; 5460 } 5461 } 5462 } else { 5463 resolvedActiveTriggerIdRef.current = null; 5464 } 5465 if (!lostActiveTriggerId && !currentActiveTriggerId && triggerCount === 1) { 5466 const iteratorResult = store2.context.triggerElements.entries().next(); 5467 if (!iteratorResult.done) { 5468 const [implicitTriggerId, implicitTriggerElement] = iteratorResult.value; 5469 stateUpdates.activeTriggerId = implicitTriggerId; 5470 stateUpdates.activeTriggerElement = implicitTriggerElement; 5471 resolvedActiveTriggerIdRef.current = implicitTriggerId; 5472 } 5473 } 5474 if (stateUpdates.triggerCount !== void 0 || stateUpdates.activeTriggerId !== void 0 || stateUpdates.activeTriggerElement !== void 0) { 5475 store2.update(stateUpdates); 5476 } 5477 if (lostActiveTriggerId) { 5478 if (closeOnActiveTriggerUnmount) { 5479 queueMicrotask(() => { 5480 if (store2.select("open") && store2.select("activeTriggerId") === lostActiveTriggerId && !store2.context.triggerElements.getById(lostActiveTriggerId)) { 5481 const eventDetails = createChangeEventDetails(reason_parts_exports.none); 5482 store2.setOpen(false, eventDetails); 5483 if (!eventDetails.isCanceled) { 5484 store2.update({ 5485 activeTriggerId: null, 5486 activeTriggerElement: null 5487 }); 5488 } 5489 } 5490 }); 5491 } 5492 } 5493 }, [open, store2, reactiveTriggerCount, activeTriggerId, reactiveActiveTriggerElement, closeOnActiveTriggerUnmount]); 5494 } 5495 function useOpenStateTransitions(open, store2, onUnmount) { 5496 const { 5497 mounted, 5498 setMounted, 5499 transitionStatus 5500 } = useTransitionStatus(open); 5501 const preventUnmountingOnClose = store2.useState("preventUnmountingOnClose"); 5502 const syncedPreventUnmountingOnClose = open ? false : preventUnmountingOnClose; 5503 store2.useSyncedValues({ 5504 mounted, 5505 transitionStatus, 5506 preventUnmountingOnClose: syncedPreventUnmountingOnClose 5507 }); 5508 const forceUnmount = useStableCallback(() => { 5509 setMounted(false); 5510 store2.update({ 5511 activeTriggerId: null, 5512 activeTriggerElement: null, 5513 mounted: false, 5514 preventUnmountingOnClose: false 5515 }); 5516 onUnmount?.(); 5517 store2.context.onOpenChangeComplete?.(false); 5518 }); 5519 useOpenChangeComplete({ 5520 enabled: mounted && !open && !syncedPreventUnmountingOnClose, 5521 open, 5522 ref: store2.context.popupRef, 5523 onComplete() { 5524 if (!open) { 5525 forceUnmount(); 5526 } 5527 } 5528 }); 5529 return { 5530 forceUnmount, 5531 transitionStatus 5532 }; 5533 } 5534 function usePopupInteractionProps(store2, statePart) { 5535 store2.useSyncedValues(statePart); 5536 useIsoLayoutEffect(() => () => { 5537 store2.update({ 5538 activeTriggerProps: EMPTY_OBJECT, 5539 inactiveTriggerProps: EMPTY_OBJECT, 5540 popupProps: EMPTY_OBJECT 5541 }); 5542 }, [store2]); 5543 } 5544 5545 // node_modules/@base-ui/react/utils/popups/popupTriggerMap.mjs 5546 var devElementIdsByMap; 5547 function getDevElementIds(map) { 5548 devElementIdsByMap ??= /* @__PURE__ */ new WeakMap(); 5549 let elementIds = devElementIdsByMap.get(map); 5550 if (!elementIds) { 5551 elementIds = /* @__PURE__ */ new WeakMap(); 5552 devElementIdsByMap.set(map, elementIds); 5553 } 5554 return elementIds; 5555 } 5556 var PopupTriggerMap = class { 5557 constructor() { 5558 this.idMap = /* @__PURE__ */ new Map(); 5559 } 5560 /** 5561 * Adds a trigger element with the given ID. 5562 * 5563 * Note: The provided element is assumed to not be registered under multiple IDs. 5564 */ 5565 add(id, element) { 5566 if (true) { 5567 const elementIds = getDevElementIds(this); 5568 const existingId = elementIds.get(element); 5569 if (existingId !== void 0 && existingId !== id) { 5570 throw new Error("Base UI: A trigger element cannot be registered under multiple IDs in PopupTriggerMap."); 5571 } 5572 const previousElement = this.idMap.get(id); 5573 if (previousElement !== void 0 && previousElement !== element) { 5574 elementIds.delete(previousElement); 5575 } 5576 elementIds.set(element, id); 5577 } 5578 this.idMap.set(id, element); 5579 } 5580 /** 5581 * Removes the trigger element with the given ID. 5582 */ 5583 delete(id) { 5584 if (true) { 5585 const element = this.idMap.get(id); 5586 if (element !== void 0) { 5587 devElementIdsByMap?.get(this)?.delete(element); 5588 } 5589 } 5590 this.idMap.delete(id); 5591 } 5592 /** 5593 * Whether the given element is registered as a trigger. 5594 */ 5595 hasElement(element) { 5596 for (const registered of this.idMap.values()) { 5597 if (registered === element) { 5598 return true; 5599 } 5600 } 5601 return false; 5602 } 5603 /** 5604 * Whether there is a registered trigger element matching the given predicate. 5605 */ 5606 hasMatchingElement(predicate) { 5607 for (const element of this.idMap.values()) { 5608 if (predicate(element)) { 5609 return true; 5610 } 5611 } 5612 return false; 5613 } 5614 /** 5615 * Returns the trigger element associated with the given ID, or undefined if no such element exists. 5616 */ 5617 getById(id) { 5618 return this.idMap.get(id); 5619 } 5620 /** 5621 * Returns an iterable of all registered trigger entries, where each entry is a tuple of [id, element]. 5622 */ 5623 entries() { 5624 return this.idMap.entries(); 5625 } 5626 /** 5627 * Returns an iterable of all registered trigger elements. 5628 */ 5629 elements() { 5630 return this.idMap.values(); 5631 } 5632 /** 5633 * Returns the number of registered trigger elements. 5634 */ 5635 get size() { 5636 return this.idMap.size; 5637 } 5638 }; 5639 5640 // node_modules/@base-ui/react/floating-ui-react/utils/getEmptyRootContext.mjs 5641 function getEmptyRootContext() { 5642 return new FloatingRootStore({ 5643 open: false, 5644 transitionStatus: void 0, 5645 floatingElement: null, 5646 referenceElement: null, 5647 triggerElements: new PopupTriggerMap(), 5648 floatingId: void 0, 5649 syncOnly: false, 5650 nested: false, 5651 onOpenChange: void 0 5652 }); 5653 } 5654 5655 // node_modules/@base-ui/react/utils/popups/store.mjs 5656 function createInitialPopupStoreState() { 5657 return { 5658 open: false, 5659 openProp: void 0, 5660 mounted: false, 5661 transitionStatus: void 0, 5662 floatingRootContext: getEmptyRootContext(), 5663 floatingId: void 0, 5664 triggerCount: 0, 5665 preventUnmountingOnClose: false, 5666 payload: void 0, 5667 activeTriggerId: null, 5668 activeTriggerElement: null, 5669 triggerIdProp: void 0, 5670 popupElement: null, 5671 positionerElement: null, 5672 activeTriggerProps: EMPTY_OBJECT, 5673 inactiveTriggerProps: EMPTY_OBJECT, 5674 popupProps: EMPTY_OBJECT 5675 }; 5676 } 5677 function createPopupFloatingRootContext(triggerElements, floatingId, nested = false) { 5678 return new FloatingRootStore({ 5679 open: false, 5680 transitionStatus: void 0, 5681 floatingElement: null, 5682 referenceElement: null, 5683 triggerElements, 5684 floatingId, 5685 syncOnly: true, 5686 nested, 5687 onOpenChange: void 0 5688 }); 5689 } 5690 var activeTriggerIdSelector = (state) => state.triggerIdProp ?? state.activeTriggerId; 5691 var openSelector = (state) => state.openProp ?? state.open; 5692 var popupIdSelector = (state) => { 5693 const popupId = state.popupElement?.id ?? state.floatingId; 5694 return popupId || void 0; 5695 }; 5696 function triggerOwnsOpenPopup(state, triggerId) { 5697 return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) === triggerId; 5698 } 5699 function triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) { 5700 if (triggerOwnsOpenPopup(state, triggerId)) { 5701 return true; 5702 } 5703 return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) == null && state.triggerCount === 1; 5704 } 5705 var popupStoreSelectors = { 5706 open: openSelector, 5707 mounted: (state) => state.mounted, 5708 transitionStatus: (state) => state.transitionStatus, 5709 floatingRootContext: (state) => state.floatingRootContext, 5710 triggerCount: (state) => state.triggerCount, 5711 preventUnmountingOnClose: (state) => state.preventUnmountingOnClose, 5712 payload: (state) => state.payload, 5713 activeTriggerId: activeTriggerIdSelector, 5714 activeTriggerElement: (state) => state.mounted ? state.activeTriggerElement : null, 5715 popupId: popupIdSelector, 5716 /** 5717 * Whether the trigger with the given ID was used to open the popup. 5718 */ 5719 isTriggerActive: (state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId, 5720 /** 5721 * Whether the popup is open and was activated by a trigger with the given ID. 5722 */ 5723 isOpenedByTrigger: (state, triggerId) => triggerOwnsOpenPopup(state, triggerId), 5724 /** 5725 * Whether the popup is mounted and was activated by a trigger with the given ID. 5726 */ 5727 isMountedByTrigger: (state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId && state.mounted, 5728 triggerProps: (state, isActive) => isActive ? state.activeTriggerProps : state.inactiveTriggerProps, 5729 /** 5730 * Popup id for the trigger that currently owns the open popup. 5731 */ 5732 triggerPopupId: (state, triggerId) => triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) ? popupIdSelector(state) : void 0, 5733 popupProps: (state) => state.popupProps, 5734 popupElement: (state) => state.popupElement, 5735 positionerElement: (state) => state.positionerElement 5736 }; 5737 5738 // node_modules/@base-ui/react/utils/popups/usePopupHandleStore.mjs 5739 var React23 = __toESM(require_react(), 1); 5740 var import_shim2 = __toESM(require_shim(), 1); 5741 function usePopupHandleStore(handle) { 5742 const subscribe = React23.useCallback((listener) => { 5743 if (handle === void 0) { 5744 return NOOP; 5745 } 5746 return handle.subscribeStore(listener); 5747 }, [handle]); 5748 const getSnapshot = React23.useCallback(() => { 5749 return handle === void 0 ? void 0 : handle.store; 5750 }, [handle]); 5751 return (0, import_shim2.useSyncExternalStore)(subscribe, getSnapshot, () => handle?.serverStore); 5752 } 5753 5754 // node_modules/@base-ui/react/floating-ui-react/hooks/useFloating.mjs 5755 function useBaseUIFloating(options) { 5756 return useFloatingWithStore(options, options.rootContext); 5757 } 5758 function useFloatingWithStore(options, store2) { 5759 const { 5760 nodeId, 5761 externalTree 5762 } = options; 5763 const referenceElement = store2.useState("referenceElement"); 5764 const floatingElement = store2.useState("floatingElement"); 5765 const domReferenceElement = store2.useState("domReferenceElement"); 5766 const open = store2.useState("open"); 5767 const floatingId = store2.useState("floatingId"); 5768 const [positionReference, setPositionReferenceRaw] = React24.useState(null); 5769 const [localDomReference, setLocalDomReference] = React24.useState(void 0); 5770 const [localFloatingElement, setLocalFloatingElement] = React24.useState(void 0); 5771 const domReferenceRef = React24.useRef(null); 5772 const tree = useFloatingTree(externalTree); 5773 const storeElements = React24.useMemo(() => ({ 5774 reference: referenceElement, 5775 floating: floatingElement, 5776 domReference: domReferenceElement 5777 }), [referenceElement, floatingElement, domReferenceElement]); 5778 const position = useFloating({ 5779 ...options, 5780 elements: { 5781 ...storeElements, 5782 ...positionReference && { 5783 reference: positionReference 5784 } 5785 } 5786 }); 5787 const localDomReferenceElement = isElement(localDomReference) ? localDomReference : null; 5788 const syncedFloatingElement = localFloatingElement === void 0 ? store2.state.floatingElement : localFloatingElement; 5789 store2.useSyncedValue("referenceElement", localDomReference ?? null); 5790 store2.useSyncedValue("domReferenceElement", localDomReference === void 0 ? domReferenceElement : localDomReferenceElement); 5791 store2.useSyncedValue("floatingElement", syncedFloatingElement); 5792 const setPositionReference = React24.useCallback((node) => { 5793 const computedPositionReference = isElement(node) ? { 5794 getBoundingClientRect: () => node.getBoundingClientRect(), 5795 getClientRects: () => node.getClientRects(), 5796 contextElement: node 5797 } : node; 5798 setPositionReferenceRaw(computedPositionReference); 5799 position.refs.setReference(computedPositionReference); 5800 }, [position.refs]); 5801 const setReference = React24.useCallback((node) => { 5802 if (isElement(node) || node === null) { 5803 domReferenceRef.current = node; 5804 setLocalDomReference(node); 5805 } 5806 if (isElement(position.refs.reference.current) || position.refs.reference.current === null || // Don't allow setting virtual elements using the old technique back to 5807 // `null` to support `positionReference` + an unstable `reference` 5808 // callback ref. 5809 node !== null && !isElement(node)) { 5810 position.refs.setReference(node); 5811 } 5812 }, [position.refs, setLocalDomReference]); 5813 const setFloating = React24.useCallback((node) => { 5814 setLocalFloatingElement(node); 5815 position.refs.setFloating(node); 5816 }, [position.refs]); 5817 const refs = React24.useMemo(() => ({ 5818 ...position.refs, 5819 setReference, 5820 setFloating, 5821 setPositionReference, 5822 domReference: domReferenceRef 5823 }), [position.refs, setReference, setFloating, setPositionReference]); 5824 const elements = React24.useMemo(() => ({ 5825 ...position.elements, 5826 domReference: domReferenceElement 5827 }), [position.elements, domReferenceElement]); 5828 const context = React24.useMemo(() => ({ 5829 ...position, 5830 dataRef: store2.context.dataRef, 5831 open, 5832 onOpenChange: store2.setOpen, 5833 events: store2.context.events, 5834 floatingId, 5835 refs, 5836 elements, 5837 nodeId, 5838 rootStore: store2 5839 }), [position, refs, elements, nodeId, store2, open, floatingId]); 5840 useIsoLayoutEffect(() => { 5841 if (domReferenceElement) { 5842 domReferenceRef.current = domReferenceElement; 5843 } 5844 }, [domReferenceElement]); 5845 useIsoLayoutEffect(() => { 5846 store2.context.dataRef.current.floatingContext = context; 5847 const node = tree?.nodesRef.current.find((n) => n.id === nodeId); 5848 if (node) { 5849 node.context = context; 5850 } 5851 }); 5852 return React24.useMemo(() => ({ 5853 ...position, 5854 context, 5855 refs, 5856 elements, 5857 rootStore: store2 5858 }), [position, refs, elements, context, store2]); 5859 } 5860 5861 // node_modules/@base-ui/react/floating-ui-react/hooks/useFocus.mjs 5862 var React25 = __toESM(require_react(), 1); 5863 var isMacSafari = parts_exports.os.mac && parts_exports.engine.webkit; 5864 function useFocus(context, props = {}) { 5865 const { 5866 enabled = true, 5867 delay 5868 } = props; 5869 const store2 = "rootStore" in context ? context.rootStore : context; 5870 const { 5871 events, 5872 dataRef 5873 } = store2.context; 5874 const blockFocusRef = React25.useRef(false); 5875 const blockedReferenceRef = React25.useRef(null); 5876 const keyboardModalityRef = React25.useRef(true); 5877 const timeout = useTimeout(); 5878 React25.useEffect(() => { 5879 const domReference = store2.select("domReferenceElement"); 5880 if (!enabled) { 5881 return void 0; 5882 } 5883 const win = getWindow(domReference); 5884 function onBlur() { 5885 const currentDomReference = store2.select("domReferenceElement"); 5886 if (!store2.select("open") && isHTMLElement(currentDomReference) && currentDomReference === activeElement(ownerDocument(currentDomReference))) { 5887 blockFocusRef.current = true; 5888 } 5889 } 5890 function onKeyDown() { 5891 keyboardModalityRef.current = true; 5892 } 5893 function onPointerDown() { 5894 keyboardModalityRef.current = false; 5895 } 5896 return mergeCleanups(addEventListener(win, "blur", onBlur), isMacSafari && addEventListener(win, "keydown", onKeyDown, true), isMacSafari && addEventListener(win, "pointerdown", onPointerDown, true)); 5897 }, [store2, enabled]); 5898 React25.useEffect(() => { 5899 if (!enabled) { 5900 return void 0; 5901 } 5902 function onOpenChangeLocal(details) { 5903 if (details.reason === reason_parts_exports.triggerPress || details.reason === reason_parts_exports.escapeKey) { 5904 const referenceElement = store2.select("domReferenceElement"); 5905 if (isElement(referenceElement)) { 5906 blockedReferenceRef.current = referenceElement; 5907 blockFocusRef.current = true; 5908 } 5909 } 5910 } 5911 events.on("openchange", onOpenChangeLocal); 5912 return () => { 5913 events.off("openchange", onOpenChangeLocal); 5914 }; 5915 }, [events, enabled, store2]); 5916 const reference = React25.useMemo(() => { 5917 function resetBlockedFocus() { 5918 blockFocusRef.current = false; 5919 blockedReferenceRef.current = null; 5920 } 5921 return { 5922 onMouseLeave() { 5923 resetBlockedFocus(); 5924 }, 5925 onFocus(event) { 5926 const focusTarget = event.currentTarget; 5927 if (blockFocusRef.current) { 5928 if (blockedReferenceRef.current === focusTarget) { 5929 return; 5930 } 5931 resetBlockedFocus(); 5932 } 5933 const target = getTarget(event.nativeEvent); 5934 if (isElement(target)) { 5935 if (isMacSafari && !event.relatedTarget) { 5936 if (!keyboardModalityRef.current && !isTypeableElement(target)) { 5937 return; 5938 } 5939 } else if (!matchesFocusVisible(target)) { 5940 return; 5941 } 5942 } 5943 const movedFromOtherEnabledTrigger = isTargetInsideEnabledTrigger(event.relatedTarget, store2.context.triggerElements); 5944 const { 5945 nativeEvent, 5946 currentTarget 5947 } = event; 5948 const delayValue = typeof delay === "function" ? delay() : delay; 5949 if (store2.select("open") && movedFromOtherEnabledTrigger || delayValue === 0 || delayValue === void 0) { 5950 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget)); 5951 return; 5952 } 5953 timeout.start(delayValue, () => { 5954 if (blockFocusRef.current) { 5955 return; 5956 } 5957 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget)); 5958 }); 5959 }, 5960 onBlur(event) { 5961 resetBlockedFocus(); 5962 const relatedTarget = event.relatedTarget; 5963 const nativeEvent = event.nativeEvent; 5964 const movedToFocusGuard = isElement(relatedTarget) && relatedTarget.hasAttribute(createAttribute("focus-guard")) && relatedTarget.getAttribute("data-type") === "outside"; 5965 timeout.start(0, () => { 5966 const domReference = store2.select("domReferenceElement"); 5967 const activeEl = activeElement(ownerDocument(domReference)); 5968 if (!relatedTarget && activeEl === domReference) { 5969 return; 5970 } 5971 if (contains(dataRef.current.floatingContext?.refs.floating.current, activeEl) || contains(domReference, activeEl) || movedToFocusGuard) { 5972 return; 5973 } 5974 const nextFocusedElement = relatedTarget ?? activeEl; 5975 if (isTargetInsideEnabledTrigger(nextFocusedElement, store2.context.triggerElements)) { 5976 return; 5977 } 5978 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent)); 5979 }); 5980 } 5981 }; 5982 }, [dataRef, delay, store2, timeout]); 5983 return React25.useMemo(() => enabled ? { 5984 reference, 5985 trigger: reference 5986 } : {}, [enabled, reference]); 5987 } 5988 5989 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverFloatingInteraction.mjs 5990 var React26 = __toESM(require_react(), 1); 5991 5992 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverInteractionSharedState.mjs 5993 var HoverInteraction = class _HoverInteraction { 5994 constructor() { 5995 this.pointerType = void 0; 5996 this.interactedInside = false; 5997 this.handler = void 0; 5998 this.blockMouseMove = true; 5999 this.performedPointerEventsMutation = false; 6000 this.pointerEventsScopeElement = null; 6001 this.pointerEventsReferenceElement = null; 6002 this.pointerEventsFloatingElement = null; 6003 this.restTimeoutPending = false; 6004 this.openChangeTimeout = new Timeout(); 6005 this.restTimeout = new Timeout(); 6006 this.handleCloseOptions = void 0; 6007 } 6008 static create() { 6009 return new _HoverInteraction(); 6010 } 6011 dispose = () => { 6012 this.openChangeTimeout.clear(); 6013 this.restTimeout.clear(); 6014 }; 6015 disposeEffect = () => { 6016 return this.dispose; 6017 }; 6018 }; 6019 var pointerEventsMutationOwnerByScopeElement = /* @__PURE__ */ new WeakMap(); 6020 function clearSafePolygonPointerEventsMutation(instance) { 6021 if (!instance.performedPointerEventsMutation) { 6022 return; 6023 } 6024 const scopeElement = instance.pointerEventsScopeElement; 6025 if (scopeElement && pointerEventsMutationOwnerByScopeElement.get(scopeElement) === instance) { 6026 instance.pointerEventsScopeElement?.style.removeProperty("pointer-events"); 6027 instance.pointerEventsReferenceElement?.style.removeProperty("pointer-events"); 6028 instance.pointerEventsFloatingElement?.style.removeProperty("pointer-events"); 6029 pointerEventsMutationOwnerByScopeElement.delete(scopeElement); 6030 } 6031 instance.performedPointerEventsMutation = false; 6032 instance.pointerEventsScopeElement = null; 6033 instance.pointerEventsReferenceElement = null; 6034 instance.pointerEventsFloatingElement = null; 6035 } 6036 function applySafePolygonPointerEventsMutation(instance, options) { 6037 const { 6038 scopeElement, 6039 referenceElement, 6040 floatingElement 6041 } = options; 6042 const existingOwner = pointerEventsMutationOwnerByScopeElement.get(scopeElement); 6043 if (existingOwner && existingOwner !== instance) { 6044 clearSafePolygonPointerEventsMutation(existingOwner); 6045 } 6046 clearSafePolygonPointerEventsMutation(instance); 6047 instance.performedPointerEventsMutation = true; 6048 instance.pointerEventsScopeElement = scopeElement; 6049 instance.pointerEventsReferenceElement = referenceElement; 6050 instance.pointerEventsFloatingElement = floatingElement; 6051 pointerEventsMutationOwnerByScopeElement.set(scopeElement, instance); 6052 scopeElement.style.pointerEvents = "none"; 6053 referenceElement.style.pointerEvents = "auto"; 6054 floatingElement.style.pointerEvents = "auto"; 6055 } 6056 function useHoverInteractionSharedState(store2) { 6057 const data = store2.context.dataRef.current; 6058 const instance = useRefWithInit(() => data.hoverInteractionState ?? HoverInteraction.create()).current; 6059 if (!data.hoverInteractionState) { 6060 data.hoverInteractionState = instance; 6061 } 6062 useOnMount(data.hoverInteractionState.disposeEffect); 6063 return data.hoverInteractionState; 6064 } 6065 6066 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverFloatingInteraction.mjs 6067 function useHoverFloatingInteraction(context, parameters = {}) { 6068 const { 6069 enabled = true, 6070 closeDelay: closeDelayProp = 0, 6071 nodeId: nodeIdProp 6072 } = parameters; 6073 const store2 = "rootStore" in context ? context.rootStore : context; 6074 const open = store2.useState("open"); 6075 const floatingElement = store2.useState("floatingElement"); 6076 const domReferenceElement = store2.useState("domReferenceElement"); 6077 const { 6078 dataRef 6079 } = store2.context; 6080 const tree = useFloatingTree(); 6081 const parentId = useFloatingParentNodeId(); 6082 const instance = useHoverInteractionSharedState(store2); 6083 const childClosedTimeout = useTimeout(); 6084 const isClickLikeOpenEvent2 = useStableCallback(() => { 6085 return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside); 6086 }); 6087 const isHoverOpen = useStableCallback(() => { 6088 return isHoverOpenEvent(dataRef.current.openEvent?.type); 6089 }); 6090 const clearPointerEvents = useStableCallback(() => { 6091 clearSafePolygonPointerEventsMutation(instance); 6092 }); 6093 useIsoLayoutEffect(() => { 6094 if (!open) { 6095 instance.pointerType = void 0; 6096 instance.restTimeoutPending = false; 6097 instance.interactedInside = false; 6098 clearPointerEvents(); 6099 } 6100 }, [open, instance, clearPointerEvents]); 6101 React26.useEffect(() => { 6102 return clearPointerEvents; 6103 }, [clearPointerEvents]); 6104 useIsoLayoutEffect(() => { 6105 if (!enabled) { 6106 return void 0; 6107 } 6108 if (open && instance.handleCloseOptions?.blockPointerEvents && isHoverOpen() && isElement(domReferenceElement) && floatingElement) { 6109 const ref = domReferenceElement; 6110 const floatingEl = floatingElement; 6111 const doc = ownerDocument(floatingElement); 6112 const parentFloating = tree?.nodesRef.current.find((node) => node.id === parentId)?.context?.elements.floating; 6113 if (parentFloating) { 6114 parentFloating.style.pointerEvents = ""; 6115 } 6116 const cachedScopeElement = instance.pointerEventsScopeElement !== floatingEl ? instance.pointerEventsScopeElement : null; 6117 const parentScopeElement = parentFloating !== floatingEl ? parentFloating : null; 6118 const scopeElement = instance.handleCloseOptions?.getScope?.() ?? cachedScopeElement ?? parentScopeElement ?? ref.closest("[data-rootownerid]") ?? doc.body; 6119 applySafePolygonPointerEventsMutation(instance, { 6120 scopeElement, 6121 referenceElement: ref, 6122 floatingElement: floatingEl 6123 }); 6124 return () => { 6125 clearPointerEvents(); 6126 }; 6127 } 6128 return void 0; 6129 }, [enabled, open, domReferenceElement, floatingElement, instance, isHoverOpen, tree, parentId, clearPointerEvents]); 6130 React26.useEffect(() => { 6131 if (!enabled) { 6132 return void 0; 6133 } 6134 function hasParentChildren() { 6135 return !!(tree && parentId && getNodeChildren(tree.nodesRef.current, parentId).length > 0); 6136 } 6137 function closeWithDelay(event) { 6138 const closeDelay = getDelay(closeDelayProp, "close", instance.pointerType); 6139 const close = () => { 6140 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 6141 tree?.events.emit("floating.closed", event); 6142 }; 6143 if (closeDelay) { 6144 instance.openChangeTimeout.start(closeDelay, close); 6145 } else { 6146 instance.openChangeTimeout.clear(); 6147 close(); 6148 } 6149 } 6150 function handleInteractInside(event) { 6151 const target = getTarget(event); 6152 if (!isInteractiveElement(target)) { 6153 instance.interactedInside = false; 6154 return; 6155 } 6156 instance.interactedInside = target?.closest("[aria-haspopup]") != null; 6157 } 6158 function onFloatingMouseEnter() { 6159 instance.openChangeTimeout.clear(); 6160 childClosedTimeout.clear(); 6161 tree?.events.off("floating.closed", onNodeClosed); 6162 clearPointerEvents(); 6163 } 6164 function onFloatingMouseLeave(event) { 6165 if (hasParentChildren() && tree) { 6166 tree.events.on("floating.closed", onNodeClosed); 6167 return; 6168 } 6169 if (isTargetInsideEnabledTrigger(event.relatedTarget, store2.context.triggerElements)) { 6170 return; 6171 } 6172 const currentNodeId = dataRef.current.floatingContext?.nodeId ?? nodeIdProp; 6173 const relatedTarget = event.relatedTarget; 6174 const isMovingIntoDescendantFloating = tree && currentNodeId && isElement(relatedTarget) && getNodeChildren(tree.nodesRef.current, currentNodeId, false).some((node) => contains(node.context?.elements.floating, relatedTarget)); 6175 if (isMovingIntoDescendantFloating) { 6176 return; 6177 } 6178 if (instance.handler) { 6179 instance.handler(event); 6180 return; 6181 } 6182 clearPointerEvents(); 6183 if (isHoverOpen() && !isClickLikeOpenEvent2()) { 6184 closeWithDelay(event); 6185 } 6186 } 6187 function onNodeClosed(event) { 6188 if (!tree || !parentId || hasParentChildren()) { 6189 return; 6190 } 6191 childClosedTimeout.start(0, () => { 6192 tree.events.off("floating.closed", onNodeClosed); 6193 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 6194 tree.events.emit("floating.closed", event); 6195 }); 6196 } 6197 const floating = floatingElement; 6198 return mergeCleanups(floating && addEventListener(floating, "mouseenter", onFloatingMouseEnter), floating && addEventListener(floating, "mouseleave", onFloatingMouseLeave), floating && addEventListener(floating, "pointerdown", handleInteractInside, true), () => { 6199 tree?.events.off("floating.closed", onNodeClosed); 6200 }); 6201 }, [enabled, floatingElement, store2, dataRef, closeDelayProp, nodeIdProp, isHoverOpen, isClickLikeOpenEvent2, clearPointerEvents, instance, tree, parentId, childClosedTimeout]); 6202 } 6203 6204 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverReferenceInteraction.mjs 6205 var React27 = __toESM(require_react(), 1); 6206 var ReactDOM5 = __toESM(require_react_dom(), 1); 6207 var EMPTY_REF = { 6208 current: null 6209 }; 6210 function useHoverReferenceInteraction(context, props = {}) { 6211 const { 6212 enabled = true, 6213 delay = 0, 6214 handleClose = null, 6215 mouseOnly = false, 6216 restMs = 0, 6217 move: move2 = true, 6218 triggerElementRef = EMPTY_REF, 6219 externalTree, 6220 isActiveTrigger = true, 6221 getHandleCloseContext, 6222 isClosing, 6223 shouldOpen: shouldOpenProp, 6224 guardStaleOpen = false 6225 } = props; 6226 const store2 = "rootStore" in context ? context.rootStore : context; 6227 const { 6228 dataRef, 6229 events 6230 } = store2.context; 6231 const tree = useFloatingTree(externalTree); 6232 const instance = useHoverInteractionSharedState(store2); 6233 const isHoverCloseActiveRef = React27.useRef(false); 6234 const handleCloseRef = useValueAsRef(handleClose); 6235 const delayRef = useValueAsRef(delay); 6236 const restMsRef = useValueAsRef(restMs); 6237 const enabledRef = useValueAsRef(enabled); 6238 const shouldOpenRef = useValueAsRef(shouldOpenProp); 6239 const isClosingRef = useValueAsRef(isClosing); 6240 const isClickLikeOpenEvent2 = useStableCallback(() => { 6241 return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside); 6242 }); 6243 const checkShouldOpen = useStableCallback(() => { 6244 return shouldOpenRef.current?.() !== false; 6245 }); 6246 const isOverInactiveTrigger = useStableCallback((currentDomReference, currentTarget, target) => { 6247 const allTriggers = store2.context.triggerElements; 6248 if (allTriggers.hasElement(currentTarget)) { 6249 return !currentDomReference || !contains(currentDomReference, currentTarget); 6250 } 6251 if (!isElement(target)) { 6252 return false; 6253 } 6254 const targetElement = target; 6255 return allTriggers.hasMatchingElement((trigger) => contains(trigger, targetElement)) && (!currentDomReference || !contains(currentDomReference, targetElement)); 6256 }); 6257 const cleanupMouseMoveHandler = useStableCallback(() => { 6258 if (!instance.handler) { 6259 return; 6260 } 6261 const doc = ownerDocument(store2.select("domReferenceElement")); 6262 doc.removeEventListener("mousemove", instance.handler); 6263 instance.handler = void 0; 6264 }); 6265 const clearPointerEvents = useStableCallback(() => { 6266 clearSafePolygonPointerEventsMutation(instance); 6267 }); 6268 if (isActiveTrigger) { 6269 instance.handleCloseOptions = handleCloseRef.current?.__options; 6270 } 6271 React27.useEffect(() => cleanupMouseMoveHandler, [cleanupMouseMoveHandler]); 6272 React27.useEffect(() => { 6273 if (!enabled) { 6274 return void 0; 6275 } 6276 function onOpenChangeLocal(details) { 6277 if (!details.open) { 6278 isHoverCloseActiveRef.current = details.reason === reason_parts_exports.triggerHover; 6279 cleanupMouseMoveHandler(); 6280 instance.openChangeTimeout.clear(); 6281 instance.restTimeout.clear(); 6282 instance.blockMouseMove = true; 6283 instance.restTimeoutPending = false; 6284 } else { 6285 isHoverCloseActiveRef.current = false; 6286 } 6287 } 6288 events.on("openchange", onOpenChangeLocal); 6289 return () => { 6290 events.off("openchange", onOpenChangeLocal); 6291 }; 6292 }, [enabled, events, instance, cleanupMouseMoveHandler]); 6293 React27.useEffect(() => { 6294 if (!enabled) { 6295 return void 0; 6296 } 6297 function closeWithDelay(event, runElseBranch = true) { 6298 const closeDelay = getDelay(delayRef.current, "close", instance.pointerType); 6299 if (closeDelay) { 6300 instance.openChangeTimeout.start(closeDelay, () => { 6301 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 6302 tree?.events.emit("floating.closed", event); 6303 }); 6304 } else if (runElseBranch) { 6305 instance.openChangeTimeout.clear(); 6306 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 6307 tree?.events.emit("floating.closed", event); 6308 } 6309 } 6310 const trigger = triggerElementRef.current ?? (isActiveTrigger ? store2.select("domReferenceElement") : null); 6311 if (!isElement(trigger)) { 6312 return void 0; 6313 } 6314 function onMouseEnter(event) { 6315 instance.openChangeTimeout.clear(); 6316 instance.blockMouseMove = false; 6317 if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) { 6318 return; 6319 } 6320 const restMsValue = getRestMs(restMsRef.current); 6321 const openDelay = getDelay(delayRef.current, "open", instance.pointerType); 6322 const eventTarget = getTarget(event); 6323 const currentTarget = event.currentTarget ?? null; 6324 const currentDomReference = store2.select("domReferenceElement"); 6325 let triggerNode = currentTarget; 6326 if (isElement(eventTarget) && !store2.context.triggerElements.hasElement(eventTarget)) { 6327 for (const triggerElement of store2.context.triggerElements.elements()) { 6328 if (contains(triggerElement, eventTarget)) { 6329 triggerNode = triggerElement; 6330 break; 6331 } 6332 } 6333 } 6334 if (isElement(currentTarget) && isElement(currentDomReference) && !store2.context.triggerElements.hasElement(currentTarget) && contains(currentTarget, currentDomReference)) { 6335 triggerNode = currentDomReference; 6336 } 6337 const isOverInactive = triggerNode == null ? false : isOverInactiveTrigger(currentDomReference, triggerNode, eventTarget); 6338 const isOpen = store2.select("open"); 6339 const isInClosingTransition = isClosingRef.current?.() ?? store2.select("transitionStatus") === "ending"; 6340 const isHoverCloseTransition = !isOpen && isInClosingTransition && isHoverCloseActiveRef.current; 6341 const isReenteringSameTriggerDuringCloseTransition = !isOverInactive && isElement(triggerNode) && isElement(currentDomReference) && contains(currentDomReference, triggerNode) && isHoverCloseTransition; 6342 const isRestOnlyDelay = restMsValue > 0 && !openDelay; 6343 const shouldOpenImmediately = isOverInactive && (isOpen || isHoverCloseTransition) || isReenteringSameTriggerDuringCloseTransition; 6344 const shouldOpen = !isOpen || isOverInactive; 6345 if (shouldOpenImmediately) { 6346 if (checkShouldOpen()) { 6347 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode)); 6348 } 6349 return; 6350 } 6351 if (isRestOnlyDelay) { 6352 return; 6353 } 6354 if (openDelay) { 6355 instance.openChangeTimeout.start(openDelay, () => { 6356 if (shouldOpen && checkShouldOpen()) { 6357 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode)); 6358 } 6359 }); 6360 } else if (shouldOpen) { 6361 if (checkShouldOpen()) { 6362 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode)); 6363 } 6364 } 6365 } 6366 function onMouseLeave(event) { 6367 if (isClickLikeOpenEvent2()) { 6368 clearPointerEvents(); 6369 return; 6370 } 6371 cleanupMouseMoveHandler(); 6372 const domReferenceElement = store2.select("domReferenceElement"); 6373 const doc = ownerDocument(domReferenceElement); 6374 instance.restTimeout.clear(); 6375 instance.restTimeoutPending = false; 6376 const handleCloseContextBase = dataRef.current.floatingContext ?? getHandleCloseContext?.(); 6377 if (isTargetInsideEnabledTrigger(event.relatedTarget, store2.context.triggerElements)) { 6378 return; 6379 } 6380 if (handleCloseRef.current && handleCloseContextBase) { 6381 if (!store2.select("open")) { 6382 instance.openChangeTimeout.clear(); 6383 } 6384 const currentTrigger = triggerElementRef.current; 6385 instance.handler = handleCloseRef.current({ 6386 ...handleCloseContextBase, 6387 tree, 6388 x: event.clientX, 6389 y: event.clientY, 6390 onClose() { 6391 clearPointerEvents(); 6392 cleanupMouseMoveHandler(); 6393 if (enabledRef.current && !isClickLikeOpenEvent2() && currentTrigger === store2.select("domReferenceElement")) { 6394 closeWithDelay(event, true); 6395 } 6396 } 6397 }); 6398 doc.addEventListener("mousemove", instance.handler); 6399 instance.handler(event); 6400 return; 6401 } 6402 const shouldClose = instance.pointerType === "touch" ? !contains(store2.select("floatingElement"), event.relatedTarget) : true; 6403 if (shouldClose) { 6404 closeWithDelay(event); 6405 } 6406 } 6407 function onMouseOut(event) { 6408 if (contains(trigger, event.relatedTarget)) { 6409 return; 6410 } 6411 instance.openChangeTimeout.clear(); 6412 instance.restTimeout.clear(); 6413 instance.restTimeoutPending = false; 6414 } 6415 const staleOpenGuard = guardStaleOpen ? addEventListener(trigger, "mouseout", onMouseOut) : void 0; 6416 if (move2) { 6417 return mergeCleanups(addEventListener(trigger, "mousemove", onMouseEnter, { 6418 once: true 6419 }), addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave), staleOpenGuard); 6420 } 6421 return mergeCleanups(addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave), staleOpenGuard); 6422 }, [cleanupMouseMoveHandler, clearPointerEvents, dataRef, delayRef, store2, enabled, handleCloseRef, instance, isActiveTrigger, isOverInactiveTrigger, isClickLikeOpenEvent2, mouseOnly, move2, restMsRef, triggerElementRef, tree, enabledRef, getHandleCloseContext, isClosingRef, checkShouldOpen, guardStaleOpen]); 6423 return React27.useMemo(() => { 6424 if (!enabled) { 6425 return void 0; 6426 } 6427 function setPointerRef(event) { 6428 instance.pointerType = event.pointerType; 6429 } 6430 return { 6431 onPointerDown: setPointerRef, 6432 onPointerEnter: setPointerRef, 6433 onMouseMove(event) { 6434 const { 6435 nativeEvent 6436 } = event; 6437 const trigger = event.currentTarget; 6438 const currentDomReference = store2.select("domReferenceElement"); 6439 const currentOpen = store2.select("open"); 6440 const isOverInactive = isOverInactiveTrigger(currentDomReference, trigger, event.target); 6441 if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) { 6442 return; 6443 } 6444 if (currentOpen && isOverInactive && instance.handleCloseOptions?.blockPointerEvents) { 6445 const floatingElement = store2.select("floatingElement"); 6446 if (floatingElement) { 6447 const scopeElement = instance.handleCloseOptions?.getScope?.() ?? trigger.ownerDocument.body; 6448 applySafePolygonPointerEventsMutation(instance, { 6449 scopeElement, 6450 referenceElement: trigger, 6451 floatingElement 6452 }); 6453 } 6454 } 6455 const restMsValue = getRestMs(restMsRef.current); 6456 if (currentOpen && !isOverInactive || restMsValue === 0) { 6457 return; 6458 } 6459 if (!isOverInactive && instance.restTimeoutPending && event.movementX ** 2 + event.movementY ** 2 < 2) { 6460 return; 6461 } 6462 instance.restTimeout.clear(); 6463 function handleMouseMove() { 6464 instance.restTimeoutPending = false; 6465 if (isClickLikeOpenEvent2()) { 6466 return; 6467 } 6468 const latestOpen = store2.select("open"); 6469 if (!instance.blockMouseMove && (!latestOpen || isOverInactive) && checkShouldOpen()) { 6470 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, nativeEvent, trigger)); 6471 } 6472 } 6473 if (instance.pointerType === "touch") { 6474 ReactDOM5.flushSync(() => { 6475 handleMouseMove(); 6476 }); 6477 } else if (isOverInactive && currentOpen) { 6478 handleMouseMove(); 6479 } else { 6480 instance.restTimeoutPending = true; 6481 instance.restTimeout.start(restMsValue, handleMouseMove); 6482 } 6483 } 6484 }; 6485 }, [enabled, instance, isClickLikeOpenEvent2, isOverInactiveTrigger, mouseOnly, store2, restMsRef, checkShouldOpen]); 6486 } 6487 6488 // node_modules/@base-ui/react/floating-ui-react/safePolygon.mjs 6489 var CURSOR_SPEED_THRESHOLD = 0.1; 6490 var CURSOR_SPEED_THRESHOLD_SQUARED = CURSOR_SPEED_THRESHOLD * CURSOR_SPEED_THRESHOLD; 6491 var POLYGON_BUFFER = 0.5; 6492 function hasIntersectingEdge(pointX, pointY, xi, yi, xj, yj) { 6493 return yi >= pointY !== yj >= pointY && pointX <= (xj - xi) * (pointY - yi) / (yj - yi) + xi; 6494 } 6495 function isPointInQuadrilateral(pointX, pointY, x1, y1, x2, y2, x3, y3, x4, y4) { 6496 let isInsideValue = false; 6497 if (hasIntersectingEdge(pointX, pointY, x1, y1, x2, y2)) { 6498 isInsideValue = !isInsideValue; 6499 } 6500 if (hasIntersectingEdge(pointX, pointY, x2, y2, x3, y3)) { 6501 isInsideValue = !isInsideValue; 6502 } 6503 if (hasIntersectingEdge(pointX, pointY, x3, y3, x4, y4)) { 6504 isInsideValue = !isInsideValue; 6505 } 6506 if (hasIntersectingEdge(pointX, pointY, x4, y4, x1, y1)) { 6507 isInsideValue = !isInsideValue; 6508 } 6509 return isInsideValue; 6510 } 6511 function isInsideRect(pointX, pointY, rect) { 6512 return pointX >= rect.x && pointX <= rect.x + rect.width && pointY >= rect.y && pointY <= rect.y + rect.height; 6513 } 6514 function isInsideAxisAlignedRect(pointX, pointY, x1, y1, x2, y2) { 6515 const minX = Math.min(x1, x2); 6516 const maxX = Math.max(x1, x2); 6517 const minY = Math.min(y1, y2); 6518 const maxY = Math.max(y1, y2); 6519 return pointX >= minX && pointX <= maxX && pointY >= minY && pointY <= maxY; 6520 } 6521 function safePolygon(options = {}) { 6522 const { 6523 blockPointerEvents = false 6524 } = options; 6525 const timeout = new Timeout(); 6526 const fn = ({ 6527 x, 6528 y, 6529 placement, 6530 elements, 6531 onClose, 6532 nodeId, 6533 tree 6534 }) => { 6535 const side = placement?.split("-")[0]; 6536 let hasLanded = false; 6537 let lastX = null; 6538 let lastY = null; 6539 let lastCursorTime = typeof performance !== "undefined" ? performance.now() : 0; 6540 function isCursorMovingSlowly(nextX, nextY) { 6541 const currentTime = performance.now(); 6542 const elapsedTime = currentTime - lastCursorTime; 6543 if (lastX === null || lastY === null || elapsedTime === 0) { 6544 lastX = nextX; 6545 lastY = nextY; 6546 lastCursorTime = currentTime; 6547 return false; 6548 } 6549 const deltaX = nextX - lastX; 6550 const deltaY = nextY - lastY; 6551 const distanceSquared = deltaX * deltaX + deltaY * deltaY; 6552 const thresholdSquared = elapsedTime * elapsedTime * CURSOR_SPEED_THRESHOLD_SQUARED; 6553 lastX = nextX; 6554 lastY = nextY; 6555 lastCursorTime = currentTime; 6556 return distanceSquared < thresholdSquared; 6557 } 6558 function close() { 6559 timeout.clear(); 6560 onClose(); 6561 } 6562 return function onMouseMove(event) { 6563 timeout.clear(); 6564 const domReference = elements.domReference; 6565 const floating = elements.floating; 6566 if (!domReference || !floating || side == null || x == null || y == null) { 6567 return void 0; 6568 } 6569 const { 6570 clientX, 6571 clientY 6572 } = event; 6573 const target = getTarget(event); 6574 const isLeave = event.type === "mouseleave"; 6575 const isOverFloatingEl = contains(floating, target); 6576 const isOverReferenceEl = contains(domReference, target); 6577 if (isOverFloatingEl) { 6578 hasLanded = true; 6579 if (!isLeave) { 6580 return void 0; 6581 } 6582 } 6583 if (isOverReferenceEl) { 6584 hasLanded = false; 6585 if (!isLeave) { 6586 hasLanded = true; 6587 return void 0; 6588 } 6589 } 6590 if (isLeave && isElement(event.relatedTarget) && contains(floating, event.relatedTarget)) { 6591 return void 0; 6592 } 6593 function hasOpenChildNode() { 6594 return Boolean(tree && getNodeChildren(tree.nodesRef.current, nodeId).length > 0); 6595 } 6596 function closeIfNoOpenChild() { 6597 if (!hasOpenChildNode()) { 6598 close(); 6599 } 6600 } 6601 if (hasOpenChildNode()) { 6602 return void 0; 6603 } 6604 const refRect = domReference.getBoundingClientRect(); 6605 const rect = floating.getBoundingClientRect(); 6606 const cursorLeaveFromRight = x > rect.right - rect.width / 2; 6607 const cursorLeaveFromBottom = y > rect.bottom - rect.height / 2; 6608 const isFloatingWider = rect.width > refRect.width; 6609 const isFloatingTaller = rect.height > refRect.height; 6610 const left = (isFloatingWider ? refRect : rect).left; 6611 const right = (isFloatingWider ? refRect : rect).right; 6612 const top = (isFloatingTaller ? refRect : rect).top; 6613 const bottom = (isFloatingTaller ? refRect : rect).bottom; 6614 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) { 6615 closeIfNoOpenChild(); 6616 return void 0; 6617 } 6618 let isInsideTroughRect = false; 6619 switch (side) { 6620 case "top": 6621 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, refRect.top + 1, right, rect.bottom - 1); 6622 break; 6623 case "bottom": 6624 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, rect.top + 1, right, refRect.bottom - 1); 6625 break; 6626 case "left": 6627 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, rect.right - 1, bottom, refRect.left + 1, top); 6628 break; 6629 case "right": 6630 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, refRect.right - 1, bottom, rect.left + 1, top); 6631 break; 6632 default: 6633 } 6634 if (isInsideTroughRect) { 6635 return void 0; 6636 } 6637 if (hasLanded && !isInsideRect(clientX, clientY, refRect)) { 6638 closeIfNoOpenChild(); 6639 return void 0; 6640 } 6641 if (!isLeave && isCursorMovingSlowly(clientX, clientY)) { 6642 closeIfNoOpenChild(); 6643 return void 0; 6644 } 6645 let isInsidePolygon = false; 6646 switch (side) { 6647 case "top": { 6648 const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; 6649 const cursorPointOneX = isFloatingWider ? x + cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset; 6650 const cursorPointTwoX = isFloatingWider ? x - cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset; 6651 const cursorPointY = y + POLYGON_BUFFER + 1; 6652 const commonYLeft = cursorLeaveFromRight ? rect.bottom - POLYGON_BUFFER : isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top; 6653 const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top : rect.bottom - POLYGON_BUFFER; 6654 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight); 6655 break; 6656 } 6657 case "bottom": { 6658 const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; 6659 const cursorPointOneX = isFloatingWider ? x + cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset; 6660 const cursorPointTwoX = isFloatingWider ? x - cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset; 6661 const cursorPointY = y - POLYGON_BUFFER; 6662 const commonYLeft = cursorLeaveFromRight ? rect.top + POLYGON_BUFFER : isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom; 6663 const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom : rect.top + POLYGON_BUFFER; 6664 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight); 6665 break; 6666 } 6667 case "left": { 6668 const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; 6669 const cursorPointOneY = isFloatingTaller ? y + cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset; 6670 const cursorPointTwoY = isFloatingTaller ? y - cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset; 6671 const cursorPointX = x + POLYGON_BUFFER + 1; 6672 const commonXTop = cursorLeaveFromBottom ? rect.right - POLYGON_BUFFER : isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left; 6673 const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left : rect.right - POLYGON_BUFFER; 6674 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, commonXTop, rect.top, commonXBottom, rect.bottom, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY); 6675 break; 6676 } 6677 case "right": { 6678 const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; 6679 const cursorPointOneY = isFloatingTaller ? y + cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset; 6680 const cursorPointTwoY = isFloatingTaller ? y - cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset; 6681 const cursorPointX = x - POLYGON_BUFFER; 6682 const commonXTop = cursorLeaveFromBottom ? rect.left + POLYGON_BUFFER : isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right; 6683 const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right : rect.left + POLYGON_BUFFER; 6684 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY, commonXTop, rect.top, commonXBottom, rect.bottom); 6685 break; 6686 } 6687 default: 6688 } 6689 if (!isInsidePolygon) { 6690 closeIfNoOpenChild(); 6691 } else if (!hasLanded) { 6692 timeout.start(40, closeIfNoOpenChild); 6693 } 6694 return void 0; 6695 }; 6696 }; 6697 fn.__options = { 6698 ...options, 6699 blockPointerEvents 6700 }; 6701 return fn; 6702 } 6703 6704 // node_modules/@base-ui/react/utils/NullStore.mjs 6705 var NullStore = class extends ReactStore { 6706 // `update`/`set`/`notifyAll` funnel through `setState` in the base `Store`, so overriding 6707 // `setState` alone would neutralize them today. They are overridden explicitly so the store stays 6708 // inert even if a future base-class change stops routing a mutator through `setState`. 6709 setState(_newState) { 6710 } 6711 update(_changes) { 6712 } 6713 set(_key, _value) { 6714 } 6715 notifyAll() { 6716 } 6717 }; 6718 6719 // node_modules/@base-ui/react/utils/popupStateMapping.mjs 6720 var CommonPopupDataAttributes = (function(CommonPopupDataAttributes2) { 6721 CommonPopupDataAttributes2["open"] = "data-open"; 6722 CommonPopupDataAttributes2["closed"] = "data-closed"; 6723 CommonPopupDataAttributes2[CommonPopupDataAttributes2["startingStyle"] = TransitionStatusDataAttributes.startingStyle] = "startingStyle"; 6724 CommonPopupDataAttributes2[CommonPopupDataAttributes2["endingStyle"] = TransitionStatusDataAttributes.endingStyle] = "endingStyle"; 6725 CommonPopupDataAttributes2["anchorHidden"] = "data-anchor-hidden"; 6726 CommonPopupDataAttributes2["side"] = "data-side"; 6727 CommonPopupDataAttributes2["align"] = "data-align"; 6728 return CommonPopupDataAttributes2; 6729 })({}); 6730 var TRIGGER_HOOK = { 6731 "data-popup-open": "" 6732 }; 6733 var POPUP_OPEN_HOOK = { 6734 "data-open": "" 6735 }; 6736 var POPUP_CLOSED_HOOK = { 6737 "data-closed": "" 6738 }; 6739 var ANCHOR_HIDDEN_HOOK = { 6740 "data-anchor-hidden": "" 6741 }; 6742 var triggerOpenStateMapping = { 6743 open(value) { 6744 if (value) { 6745 return TRIGGER_HOOK; 6746 } 6747 return null; 6748 } 6749 }; 6750 var popupStateMapping = { 6751 open(value) { 6752 if (value) { 6753 return POPUP_OPEN_HOOK; 6754 } 6755 return POPUP_CLOSED_HOOK; 6756 }, 6757 anchorHidden(value) { 6758 if (value) { 6759 return ANCHOR_HIDDEN_HOOK; 6760 } 6761 return null; 6762 } 6763 }; 6764 var popupTransitionStateMapping = { 6765 ...popupStateMapping, 6766 ...transitionStatusMapping 6767 }; 6768 6769 // node_modules/@base-ui/utils/inertValue.mjs 6770 function inertValue(value) { 6771 if (isReactVersionAtLeast(19)) { 6772 return value; 6773 } 6774 return value ? "true" : void 0; 6775 } 6776 6777 // node_modules/@base-ui/react/internals/direction-context/DirectionContext.mjs 6778 var React28 = __toESM(require_react(), 1); 6779 var DirectionContext = /* @__PURE__ */ React28.createContext(void 0); 6780 if (true) DirectionContext.displayName = "DirectionContext"; 6781 function useDirection() { 6782 const context = React28.useContext(DirectionContext); 6783 return context?.direction ?? "ltr"; 6784 } 6785 6786 // node_modules/@base-ui/react/internals/useAnchorPositioning.mjs 6787 var React29 = __toESM(require_react(), 1); 6788 6789 // node_modules/@base-ui/react/floating-ui-react/middleware/arrow.mjs 6790 var baseArrow = (options) => ({ 6791 name: "arrow", 6792 options, 6793 async fn(state) { 6794 const { 6795 x, 6796 y, 6797 placement, 6798 rects, 6799 platform: platform3, 6800 elements, 6801 middlewareData 6802 } = state; 6803 const { 6804 element, 6805 padding = 0, 6806 offsetParent = "real" 6807 } = evaluate(options, state) || {}; 6808 if (element == null) { 6809 return {}; 6810 } 6811 const paddingObject = getPaddingObject(padding); 6812 const coords = { 6813 x, 6814 y 6815 }; 6816 const axis = getAlignmentAxis(placement); 6817 const length = getAxisLength(axis); 6818 const arrowDimensions = await platform3.getDimensions(element); 6819 const isYAxis = axis === "y"; 6820 const minProp = isYAxis ? "top" : "left"; 6821 const maxProp = isYAxis ? "bottom" : "right"; 6822 const clientProp = isYAxis ? "clientHeight" : "clientWidth"; 6823 const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length]; 6824 const startDiff = coords[axis] - rects.reference[axis]; 6825 const arrowOffsetParent = offsetParent === "real" ? await platform3.getOffsetParent?.(element) : elements.floating; 6826 let clientSize = elements.floating[clientProp] || rects.floating[length]; 6827 if (!clientSize || !await platform3.isElement?.(arrowOffsetParent)) { 6828 clientSize = elements.floating[clientProp] || rects.floating[length]; 6829 } 6830 const centerToReference = endDiff / 2 - startDiff / 2; 6831 const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1; 6832 const minPadding = Math.min(paddingObject[minProp], largestPossiblePadding); 6833 const maxPadding = Math.min(paddingObject[maxProp], largestPossiblePadding); 6834 const min2 = minPadding; 6835 const max2 = clientSize - arrowDimensions[length] - maxPadding; 6836 const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference; 6837 const offset4 = clamp(min2, center, max2); 6838 const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset4 && rects.reference[length] / 2 - (center < min2 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0; 6839 const alignmentOffset = shouldAddOffset ? center < min2 ? center - min2 : center - max2 : 0; 6840 return { 6841 [axis]: coords[axis] + alignmentOffset, 6842 data: { 6843 [axis]: offset4, 6844 centerOffset: center - offset4 - alignmentOffset, 6845 ...shouldAddOffset && { 6846 alignmentOffset 6847 } 6848 }, 6849 reset: shouldAddOffset 6850 }; 6851 } 6852 }); 6853 var arrow4 = (options, deps) => ({ 6854 ...baseArrow(options), 6855 options: [options, deps] 6856 }); 6857 6858 // node_modules/@base-ui/react/utils/hideMiddleware.mjs 6859 var hide4 = { 6860 name: "hide", 6861 async fn(state) { 6862 const { 6863 width, 6864 height, 6865 x, 6866 y 6867 } = state.rects.reference; 6868 const anchorHidden = width === 0 && height === 0 && x === 0 && y === 0; 6869 const overflow = await state.platform.detectOverflow(state, { 6870 elementContext: "reference" 6871 }); 6872 const referenceHidden = overflow.top - height >= 0 || overflow.right - width >= 0 || overflow.bottom - height >= 0 || overflow.left - width >= 0; 6873 return { 6874 data: { 6875 referenceHidden: referenceHidden || anchorHidden 6876 } 6877 }; 6878 } 6879 }; 6880 6881 // node_modules/@base-ui/react/utils/adaptiveOriginConstants.mjs 6882 var DEFAULT_SIDES = { 6883 sideX: "left", 6884 sideY: "top" 6885 }; 6886 6887 // node_modules/@base-ui/react/internals/useAnchorPositioning.mjs 6888 var AVAILABLE_WIDTH_VAR = "--available-width"; 6889 var AVAILABLE_HEIGHT_VAR = "--available-height"; 6890 function getLogicalSide(sideParam, renderedSide, isRtl) { 6891 const isLogicalSideParam = sideParam === "inline-start" || sideParam === "inline-end"; 6892 const logicalRight = isRtl ? "inline-start" : "inline-end"; 6893 const logicalLeft = isRtl ? "inline-end" : "inline-start"; 6894 return { 6895 top: "top", 6896 right: isLogicalSideParam ? logicalRight : "right", 6897 bottom: "bottom", 6898 left: isLogicalSideParam ? logicalLeft : "left" 6899 }[renderedSide]; 6900 } 6901 function getOffsetData(state, sideParam, isRtl) { 6902 const { 6903 rects, 6904 placement 6905 } = state; 6906 const data = { 6907 side: getLogicalSide(sideParam, getSide(placement), isRtl), 6908 align: getAlignment(placement) || "center", 6909 anchor: { 6910 width: rects.reference.width, 6911 height: rects.reference.height 6912 }, 6913 positioner: { 6914 width: rects.floating.width, 6915 height: rects.floating.height 6916 } 6917 }; 6918 return data; 6919 } 6920 function useAnchorPositioning(params) { 6921 return useAnchorPositioningWithHook(params, useBaseUIFloating); 6922 } 6923 function useAnchorPositioningWithHook(params, useFloatingHook) { 6924 const { 6925 // Public parameters 6926 anchor, 6927 positionMethod = "absolute", 6928 side: sideParam = "bottom", 6929 sideOffset = 0, 6930 align = "center", 6931 alignOffset = 0, 6932 collisionBoundary, 6933 collisionPadding: collisionPaddingParam = 5, 6934 sticky = false, 6935 arrowPadding = 5, 6936 disableAnchorTracking = false, 6937 inline: inlineMiddleware, 6938 // Private parameters 6939 keepMounted = false, 6940 floatingRootContext, 6941 mounted, 6942 collisionAvoidance, 6943 shift: shift4, 6944 nodeId, 6945 adaptiveOrigin: adaptiveOrigin2, 6946 lazyFlip = false, 6947 externalTree 6948 } = params; 6949 const [mountSide, setMountSide] = React29.useState(null); 6950 if (!mounted && mountSide !== null) { 6951 setMountSide(null); 6952 } 6953 const collisionAvoidanceSide = collisionAvoidance.side || "flip"; 6954 const collisionAvoidanceAlign = collisionAvoidance.align || "flip"; 6955 const collisionAvoidanceFallbackAxisSide = collisionAvoidance.fallbackAxisSide || "end"; 6956 const shiftCrossAxis = shift4?.crossAxis ?? false; 6957 const shiftRootBoundary = shift4?.rootBoundary; 6958 const anchorFn = typeof anchor === "function" ? anchor : void 0; 6959 const anchorFnCallback = useStableCallback(anchorFn); 6960 const anchorDep = anchorFn ? anchorFnCallback : anchor; 6961 const anchorValueRef = useValueAsRef(anchor); 6962 const mountedRef = useValueAsRef(mounted); 6963 const direction = useDirection(); 6964 const isRtl = direction === "rtl"; 6965 const side = mountSide || { 6966 top: "top", 6967 right: "right", 6968 bottom: "bottom", 6969 left: "left", 6970 "inline-end": isRtl ? "left" : "right", 6971 "inline-start": isRtl ? "right" : "left" 6972 }[sideParam]; 6973 const placement = align === "center" ? side : `$side}-$align}`; 6974 let collisionPadding = collisionPaddingParam; 6975 if (typeof collisionPadding === "number") { 6976 collisionPadding = { 6977 top: collisionPadding, 6978 right: collisionPadding, 6979 bottom: collisionPadding, 6980 left: collisionPadding 6981 }; 6982 } else if (collisionPadding) { 6983 collisionPadding = { 6984 top: collisionPadding.top || 0, 6985 right: collisionPadding.right || 0, 6986 bottom: collisionPadding.bottom || 0, 6987 left: collisionPadding.left || 0 6988 }; 6989 } 6990 const bias = 1; 6991 const biasTop = sideParam === "bottom" ? bias : 0; 6992 const biasBottom = sideParam === "top" ? bias : 0; 6993 const biasLeft = sideParam === "right" ? bias : 0; 6994 const biasRight = sideParam === "left" ? bias : 0; 6995 const commonCollisionProps = { 6996 boundary: collisionBoundary === "clipping-ancestors" ? "clippingAncestors" : collisionBoundary, 6997 padding: collisionPadding 6998 }; 6999 const arrowRef = React29.useRef(null); 7000 const sideOffsetRef = useValueAsRef(sideOffset); 7001 const alignOffsetRef = useValueAsRef(alignOffset); 7002 const sideOffsetDep = typeof sideOffset !== "function" ? sideOffset : 0; 7003 const alignOffsetDep = typeof alignOffset !== "function" ? alignOffset : 0; 7004 const middleware = []; 7005 if (inlineMiddleware) { 7006 middleware.push(inlineMiddleware); 7007 } 7008 middleware.push(offset3((state) => { 7009 const data = getOffsetData(state, sideParam, isRtl); 7010 const sideAxis = typeof sideOffsetRef.current === "function" ? sideOffsetRef.current(data) : sideOffsetRef.current; 7011 const alignAxis = typeof alignOffsetRef.current === "function" ? alignOffsetRef.current(data) : alignOffsetRef.current; 7012 return { 7013 mainAxis: sideAxis, 7014 crossAxis: alignAxis, 7015 alignmentAxis: alignAxis 7016 }; 7017 }, [sideOffsetDep, alignOffsetDep, isRtl, sideParam])); 7018 const shiftDisabled = collisionAvoidanceAlign === "none" && collisionAvoidanceSide !== "shift"; 7019 const crossAxisShiftEnabled = !shiftDisabled && (sticky || shiftCrossAxis || collisionAvoidanceSide === "shift"); 7020 const flipMiddleware = collisionAvoidanceSide === "none" ? null : flip3({ 7021 ...commonCollisionProps, 7022 // Ensure the popup flips if it's been limited by its --available-height and it resizes. 7023 // Since the size() padding is smaller than the flip() padding, flip() will take precedence. 7024 padding: { 7025 top: collisionPadding.top + bias + biasTop, 7026 right: collisionPadding.right + bias + biasRight, 7027 bottom: collisionPadding.bottom + bias + biasBottom, 7028 left: collisionPadding.left + bias + biasLeft 7029 }, 7030 mainAxis: !shiftCrossAxis && collisionAvoidanceSide === "flip", 7031 crossAxis: collisionAvoidanceAlign === "flip" ? "alignment" : false, 7032 fallbackAxisSideDirection: collisionAvoidanceFallbackAxisSide 7033 }); 7034 const shiftMiddleware = shiftDisabled ? null : shift3({ 7035 ...commonCollisionProps, 7036 // Use the Layout Viewport to avoid shifting around when pinch-zooming. 7037 rootBoundary: shiftRootBoundary, 7038 mainAxis: collisionAvoidanceAlign !== "none", 7039 crossAxis: crossAxisShiftEnabled, 7040 limiter: sticky || shiftCrossAxis ? void 0 : limitShift3((limitData) => { 7041 if (!arrowRef.current) { 7042 return {}; 7043 } 7044 const { 7045 width, 7046 height 7047 } = arrowRef.current.getBoundingClientRect(); 7048 const sideAxis = getSideAxis(getSide(limitData.placement)); 7049 const arrowSize = sideAxis === "y" ? width : height; 7050 const offsetAmount = sideAxis === "y" ? collisionPadding.left + collisionPadding.right : collisionPadding.top + collisionPadding.bottom; 7051 return { 7052 offset: arrowSize / 2 + offsetAmount / 2 7053 }; 7054 }) 7055 }, [commonCollisionProps, sticky, shiftCrossAxis, shiftRootBoundary, collisionPadding, collisionAvoidanceAlign]); 7056 if (collisionAvoidanceSide === "shift" || collisionAvoidanceAlign === "shift" || align === "center") { 7057 middleware.push(shiftMiddleware, flipMiddleware); 7058 } else { 7059 middleware.push(flipMiddleware, shiftMiddleware); 7060 } 7061 middleware.push(size3({ 7062 ...commonCollisionProps, 7063 apply({ 7064 elements: { 7065 floating 7066 }, 7067 availableWidth, 7068 availableHeight, 7069 rects 7070 }) { 7071 if (!mountedRef.current) { 7072 return; 7073 } 7074 const floatingStyle = floating.style; 7075 floatingStyle.setProperty(AVAILABLE_WIDTH_VAR, `$availableWidth}px`); 7076 floatingStyle.setProperty(AVAILABLE_HEIGHT_VAR, `$availableHeight}px`); 7077 const dpr = getWindow(floating).devicePixelRatio || 1; 7078 const { 7079 x: x2, 7080 y: y2, 7081 width, 7082 height 7083 } = rects.reference; 7084 const anchorWidth = (Math.round((x2 + width) * dpr) - Math.round(x2 * dpr)) / dpr; 7085 const anchorHeight = (Math.round((y2 + height) * dpr) - Math.round(y2 * dpr)) / dpr; 7086 floatingStyle.setProperty("--anchor-width", `$anchorWidth}px`); 7087 floatingStyle.setProperty("--anchor-height", `$anchorHeight}px`); 7088 } 7089 }), arrow4((state) => ({ 7090 // `transform-origin` calculations rely on an element existing. If the arrow hasn't been set, 7091 // we'll create a fake element. 7092 element: arrowRef.current || ownerDocument(state.elements.floating).createElement("div"), 7093 padding: arrowPadding, 7094 offsetParent: "floating" 7095 }), [arrowPadding]), { 7096 name: "transformOrigin", 7097 fn(state) { 7098 const { 7099 elements: elements2, 7100 middlewareData: middlewareData2, 7101 placement: renderedPlacement2, 7102 rects, 7103 y: y2 7104 } = state; 7105 const currentRenderedSide = getSide(renderedPlacement2); 7106 const currentRenderedAxis = getSideAxis(currentRenderedSide); 7107 const arrowEl = arrowRef.current; 7108 const arrowX = middlewareData2.arrow?.x || 0; 7109 const arrowY = middlewareData2.arrow?.y || 0; 7110 const arrowWidth = arrowEl?.clientWidth || 0; 7111 const arrowHeight = arrowEl?.clientHeight || 0; 7112 const transformX = arrowX + arrowWidth / 2; 7113 const transformY = arrowY + arrowHeight / 2; 7114 const shiftY = Math.abs(middlewareData2.shift?.y || 0); 7115 const halfAnchorHeight = rects.reference.height / 2; 7116 const sideOffsetValue = typeof sideOffset === "function" ? sideOffset(getOffsetData(state, sideParam, isRtl)) : sideOffset; 7117 const isOverlappingAnchor = shiftY > sideOffsetValue; 7118 const adjacentTransformOrigin = { 7119 top: `$transformX}px calc(100% + $sideOffsetValue}px)`, 7120 bottom: `$transformX}px ${-sideOffsetValue}px`, 7121 left: `calc(100% + $sideOffsetValue}px) $transformY}px`, 7122 right: `${-sideOffsetValue}px $transformY}px` 7123 }[currentRenderedSide]; 7124 const overlapTransformOrigin = `$transformX}px $rects.reference.y + halfAnchorHeight - y2}px`; 7125 elements2.floating.style.setProperty("--transform-origin", crossAxisShiftEnabled && currentRenderedAxis === "y" && isOverlappingAnchor ? overlapTransformOrigin : adjacentTransformOrigin); 7126 return {}; 7127 } 7128 }, hide4, adaptiveOrigin2); 7129 useIsoLayoutEffect(() => { 7130 if (!mounted && floatingRootContext) { 7131 floatingRootContext.update({ 7132 referenceElement: null, 7133 floatingElement: null, 7134 domReferenceElement: null, 7135 positionReference: null 7136 }); 7137 } 7138 }, [mounted, floatingRootContext]); 7139 const autoUpdateOptions = React29.useMemo(() => ({ 7140 elementResize: !disableAnchorTracking && typeof ResizeObserver !== "undefined", 7141 layoutShift: !disableAnchorTracking && typeof IntersectionObserver !== "undefined" 7142 }), [disableAnchorTracking]); 7143 const { 7144 refs, 7145 elements, 7146 x, 7147 y, 7148 middlewareData, 7149 update: update2, 7150 placement: renderedPlacement, 7151 context, 7152 isPositioned, 7153 floatingStyles: originalFloatingStyles 7154 } = useFloatingHook({ 7155 rootContext: floatingRootContext, 7156 open: keepMounted ? mounted : void 0, 7157 placement, 7158 middleware, 7159 strategy: positionMethod, 7160 whileElementsMounted: keepMounted ? void 0 : (...args) => autoUpdate(...args, autoUpdateOptions), 7161 nodeId, 7162 externalTree 7163 }); 7164 const { 7165 sideX, 7166 sideY 7167 } = middlewareData.adaptiveOrigin || DEFAULT_SIDES; 7168 const resolvedPosition = isPositioned ? positionMethod : "fixed"; 7169 const floatingStyles = React29.useMemo(() => { 7170 let base; 7171 if (!isPositioned) { 7172 base = { 7173 position: resolvedPosition, 7174 top: 0, 7175 left: 0 7176 }; 7177 } else if (adaptiveOrigin2) { 7178 base = { 7179 position: resolvedPosition, 7180 [sideX]: x, 7181 [sideY]: y 7182 }; 7183 } else { 7184 base = { 7185 ...originalFloatingStyles, 7186 position: resolvedPosition 7187 }; 7188 } 7189 base[AVAILABLE_WIDTH_VAR] = "100vw"; 7190 base[AVAILABLE_HEIGHT_VAR] = "100vh"; 7191 if (!isPositioned) { 7192 base.opacity = 0; 7193 } 7194 return base; 7195 }, [adaptiveOrigin2, resolvedPosition, sideX, x, sideY, y, originalFloatingStyles, isPositioned]); 7196 const registeredPositionReferenceRef = React29.useRef(null); 7197 useIsoLayoutEffect(() => { 7198 if (!mounted) { 7199 return; 7200 } 7201 const anchorValue = anchorValueRef.current; 7202 const resolvedAnchor = typeof anchorValue === "function" ? anchorValue() : anchorValue; 7203 const unwrappedElement = (isRef(resolvedAnchor) ? resolvedAnchor.current : resolvedAnchor) || null; 7204 const finalAnchor = unwrappedElement || null; 7205 if (finalAnchor !== registeredPositionReferenceRef.current) { 7206 refs.setPositionReference(finalAnchor); 7207 registeredPositionReferenceRef.current = finalAnchor; 7208 } 7209 }, [mounted, refs, anchorDep, anchorValueRef]); 7210 React29.useEffect(() => { 7211 if (!mounted) { 7212 return; 7213 } 7214 const anchorValue = anchorValueRef.current; 7215 if (typeof anchorValue === "function") { 7216 return; 7217 } 7218 if (isRef(anchorValue) && anchorValue.current !== registeredPositionReferenceRef.current) { 7219 refs.setPositionReference(anchorValue.current); 7220 registeredPositionReferenceRef.current = anchorValue.current; 7221 } 7222 }, [mounted, refs, anchorDep, anchorValueRef]); 7223 React29.useEffect(() => { 7224 if (keepMounted && mounted && elements.reference && elements.floating) { 7225 return autoUpdate(elements.reference, elements.floating, update2, autoUpdateOptions); 7226 } 7227 return void 0; 7228 }, [keepMounted, mounted, elements, update2, autoUpdateOptions]); 7229 const renderedSide = getSide(renderedPlacement); 7230 const logicalRenderedSide = getLogicalSide(sideParam, renderedSide, isRtl); 7231 const renderedAlign = getAlignment(renderedPlacement) || "center"; 7232 const anchorHidden = Boolean(middlewareData.hide?.referenceHidden); 7233 useIsoLayoutEffect(() => { 7234 if (lazyFlip && mounted && isPositioned && renderedSide !== side) { 7235 setMountSide(renderedSide); 7236 } 7237 }, [lazyFlip, mounted, isPositioned, renderedSide, side]); 7238 const arrowStyles = React29.useMemo(() => ({ 7239 position: "absolute", 7240 top: middlewareData.arrow?.y, 7241 left: middlewareData.arrow?.x 7242 }), [middlewareData.arrow]); 7243 const arrowUncentered = middlewareData.arrow?.centerOffset !== 0; 7244 return React29.useMemo(() => ({ 7245 positionerStyles: floatingStyles, 7246 arrowStyles, 7247 arrowRef, 7248 arrowUncentered, 7249 side: logicalRenderedSide, 7250 align: renderedAlign, 7251 physicalSide: renderedSide, 7252 anchorHidden, 7253 refs, 7254 context, 7255 isPositioned, 7256 update: update2 7257 }), [floatingStyles, arrowStyles, arrowRef, arrowUncentered, logicalRenderedSide, renderedAlign, renderedSide, anchorHidden, refs, context, isPositioned, update2]); 7258 } 7259 function isRef(param) { 7260 return param != null && "current" in param; 7261 } 7262 7263 // node_modules/@base-ui/react/internals/getDisabledMountTransitionStyles.mjs 7264 function getDisabledMountTransitionStyles(transitionStatus) { 7265 return transitionStatus === "starting" ? DISABLED_TRANSITIONS_STYLE : EMPTY_OBJECT; 7266 } 7267 7268 // node_modules/@base-ui/react/utils/usePositioner.mjs 7269 function usePositioner(componentProps, state, { 7270 styles, 7271 transitionStatus, 7272 props, 7273 refs, 7274 hidden, 7275 inert = false 7276 }) { 7277 const style = { 7278 ...styles 7279 }; 7280 if (inert) { 7281 style.pointerEvents = "none"; 7282 } 7283 return useRenderElement("div", componentProps, { 7284 state, 7285 ref: refs, 7286 props: [{ 7287 role: "presentation", 7288 hidden, 7289 style 7290 }, getDisabledMountTransitionStyles(transitionStatus), props], 7291 stateAttributesMapping: popupStateMapping 7292 }); 7293 } 7294 7295 // node_modules/@base-ui/react/utils/usePopupViewport.mjs 7296 var React33 = __toESM(require_react(), 1); 7297 var ReactDOM6 = __toESM(require_react_dom(), 1); 7298 7299 // node_modules/@base-ui/utils/usePreviousValue.mjs 7300 var React30 = __toESM(require_react(), 1); 7301 function usePreviousValue(value) { 7302 const [state, setState] = React30.useState({ 7303 current: value, 7304 previous: null 7305 }); 7306 if (!Object.is(value, state.current)) { 7307 setState({ 7308 current: value, 7309 previous: state.current 7310 }); 7311 } 7312 return state.previous; 7313 } 7314 7315 // node_modules/@base-ui/react/utils/usePopupAutoResize.mjs 7316 var React31 = __toESM(require_react(), 1); 7317 7318 // node_modules/@base-ui/react/utils/getCssDimensions.mjs 7319 function getCssDimensions2(element) { 7320 const css = getComputedStyle2(element); 7321 let width = parseFloat(css.width) || 0; 7322 let height = parseFloat(css.height) || 0; 7323 const hasOffset = isHTMLElement(element); 7324 const offsetWidth = hasOffset ? element.offsetWidth : width; 7325 const offsetHeight = hasOffset ? element.offsetHeight : height; 7326 const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight; 7327 if (shouldFallback) { 7328 width = offsetWidth; 7329 height = offsetHeight; 7330 } 7331 return { 7332 width, 7333 height 7334 }; 7335 } 7336 7337 // node_modules/@base-ui/react/utils/usePopupAutoResize.mjs 7338 function usePopupAutoResize(parameters) { 7339 const { 7340 popupElement, 7341 positionerElement, 7342 content, 7343 mounted, 7344 onMeasureLayout: onMeasureLayoutParam, 7345 onMeasureLayoutComplete: onMeasureLayoutCompleteParam, 7346 side, 7347 direction 7348 } = parameters; 7349 const runOnceAnimationsFinish = useAnimationsFinished(popupElement, true); 7350 const animationFrame = useAnimationFrame(); 7351 const committedDimensionsRef = React31.useRef(null); 7352 const isInitialRenderRef = React31.useRef(true); 7353 const restoreAnchoringStylesRef = React31.useRef(NOOP); 7354 const onMeasureLayout = useStableCallback(onMeasureLayoutParam); 7355 const onMeasureLayoutComplete = useStableCallback(onMeasureLayoutCompleteParam); 7356 const anchoringStyles = React31.useMemo(() => getPopupAnchoringStyles(side, direction), [side, direction]); 7357 useIsoLayoutEffect(() => { 7358 if (!mounted) { 7359 restoreAnchoringStylesRef.current = NOOP; 7360 isInitialRenderRef.current = true; 7361 committedDimensionsRef.current = null; 7362 return void 0; 7363 } 7364 if (!popupElement || !positionerElement) { 7365 return void 0; 7366 } 7367 restoreAnchoringStylesRef.current = applyElementStyles(popupElement, anchoringStyles); 7368 setPopupCssSize(popupElement, "auto"); 7369 const restorePopupPosition = overrideElementStyle(popupElement, "position", "static"); 7370 const restorePopupTransform = overrideElementStyle(popupElement, "transform", "none"); 7371 const restorePopupScale = overrideElementStyle(popupElement, "scale", "1"); 7372 const restorePositionerAvailableSize = applyElementStyles(positionerElement, { 7373 "--available-width": "max-content", 7374 "--available-height": "max-content" 7375 }); 7376 function restoreMeasurementOverrides() { 7377 restorePopupPosition(); 7378 restorePopupTransform(); 7379 restorePositionerAvailableSize(); 7380 } 7381 function restoreMeasurementOverridesIncludingScale() { 7382 restoreMeasurementOverrides(); 7383 restorePopupScale(); 7384 } 7385 onMeasureLayout?.(); 7386 if (isInitialRenderRef.current || committedDimensionsRef.current === null) { 7387 setPositionerCssSize(positionerElement, "max-content"); 7388 const dimensions = getCssDimensions2(popupElement); 7389 committedDimensionsRef.current = dimensions; 7390 setPositionerCssSize(positionerElement, dimensions); 7391 restoreMeasurementOverridesIncludingScale(); 7392 onMeasureLayoutComplete?.(null, dimensions); 7393 isInitialRenderRef.current = false; 7394 return () => { 7395 restoreAnchoringStylesRef.current(); 7396 restoreAnchoringStylesRef.current = NOOP; 7397 }; 7398 } 7399 setPositionerCssSize(positionerElement, "max-content"); 7400 const previousDimensions = committedDimensionsRef.current; 7401 const newDimensions = getCssDimensions2(popupElement); 7402 committedDimensionsRef.current = newDimensions; 7403 setPopupCssSize(popupElement, previousDimensions); 7404 restoreMeasurementOverridesIncludingScale(); 7405 onMeasureLayoutComplete?.(previousDimensions, newDimensions); 7406 setPositionerCssSize(positionerElement, newDimensions); 7407 const abortController = new AbortController(); 7408 animationFrame.request(() => { 7409 setPopupCssSize(popupElement, newDimensions); 7410 runOnceAnimationsFinish(() => { 7411 popupElement.style.setProperty("--popup-width", "auto"); 7412 popupElement.style.setProperty("--popup-height", "auto"); 7413 }, abortController.signal); 7414 }); 7415 return () => { 7416 abortController.abort(); 7417 animationFrame.cancel(); 7418 restoreAnchoringStylesRef.current(); 7419 restoreAnchoringStylesRef.current = NOOP; 7420 }; 7421 }, [content, popupElement, positionerElement, runOnceAnimationsFinish, animationFrame, mounted, onMeasureLayout, onMeasureLayoutComplete, anchoringStyles]); 7422 } 7423 function getPopupAnchoringStyles(side, direction) { 7424 const isPhysicalTop = side === "top"; 7425 const isPhysicalLeft = side === "left" || side === (direction === "rtl" ? "inline-end" : "inline-start"); 7426 if (!isPhysicalTop && !isPhysicalLeft) { 7427 return EMPTY_OBJECT; 7428 } 7429 return { 7430 position: "absolute", 7431 [isPhysicalTop ? "bottom" : "top"]: "0", 7432 [isPhysicalLeft ? "right" : "left"]: "0" 7433 }; 7434 } 7435 function overrideElementStyle(element, property, value) { 7436 const originalValue = element.style.getPropertyValue(property); 7437 element.style.setProperty(property, value); 7438 return () => { 7439 element.style.setProperty(property, originalValue); 7440 }; 7441 } 7442 function applyElementStyles(element, styles) { 7443 const restorers = []; 7444 for (const [key, value] of Object.entries(styles)) { 7445 restorers.push(overrideElementStyle(element, key, value)); 7446 } 7447 return restorers.length ? () => { 7448 restorers.forEach((restore) => restore()); 7449 } : NOOP; 7450 } 7451 function setPopupCssSize(popupElement, size4) { 7452 const width = size4 === "auto" ? "auto" : `$size4.width}px`; 7453 const height = size4 === "auto" ? "auto" : `$size4.height}px`; 7454 popupElement.style.setProperty("--popup-width", width); 7455 popupElement.style.setProperty("--popup-height", height); 7456 } 7457 function setPositionerCssSize(positionerElement, size4) { 7458 const width = size4 === "max-content" ? "max-content" : `$size4.width}px`; 7459 const height = size4 === "max-content" ? "max-content" : `$size4.height}px`; 7460 positionerElement.style.setProperty("--positioner-width", width); 7461 positionerElement.style.setProperty("--positioner-height", height); 7462 } 7463 7464 // node_modules/@base-ui/react/direction-provider/DirectionProvider.mjs 7465 var React32 = __toESM(require_react(), 1); 7466 var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1); 7467 var DirectionProvider = function DirectionProvider2(props) { 7468 const { 7469 direction = "ltr" 7470 } = props; 7471 const contextValue = React32.useMemo(() => ({ 7472 direction 7473 }), [direction]); 7474 return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DirectionContext.Provider, { 7475 value: contextValue, 7476 children: props.children 7477 }); 7478 }; 7479 if (true) DirectionProvider.displayName = "DirectionProvider"; 7480 7481 // node_modules/@base-ui/react/utils/adaptiveOriginMiddleware.mjs 7482 var adaptiveOrigin = { 7483 name: "adaptiveOrigin", 7484 async fn(state) { 7485 const { 7486 x: rawX, 7487 y: rawY, 7488 rects: { 7489 floating: floatRect 7490 }, 7491 elements: { 7492 floating 7493 }, 7494 platform: platform3, 7495 strategy, 7496 placement 7497 } = state; 7498 const win = getWindow(floating); 7499 const styles = win.getComputedStyle(floating); 7500 const hasTransition = styles.transitionDuration !== "0s" && styles.transitionDuration !== ""; 7501 if (!hasTransition) { 7502 return { 7503 x: rawX, 7504 y: rawY, 7505 data: DEFAULT_SIDES 7506 }; 7507 } 7508 const offsetParent = await platform3.getOffsetParent?.(floating); 7509 let offsetDimensions = { 7510 width: 0, 7511 height: 0 7512 }; 7513 if (strategy === "fixed" && win?.visualViewport) { 7514 offsetDimensions = { 7515 width: win.visualViewport.width, 7516 height: win.visualViewport.height 7517 }; 7518 } else if (offsetParent === win) { 7519 const doc = ownerDocument(floating); 7520 offsetDimensions = { 7521 width: doc.documentElement.clientWidth, 7522 height: doc.documentElement.clientHeight 7523 }; 7524 } else if (await platform3.isElement?.(offsetParent)) { 7525 offsetDimensions = await platform3.getDimensions(offsetParent); 7526 } 7527 const currentSide = getSide(placement); 7528 let x = rawX; 7529 let y = rawY; 7530 if (currentSide === "left") { 7531 x = offsetDimensions.width - (rawX + floatRect.width); 7532 } 7533 if (currentSide === "top") { 7534 y = offsetDimensions.height - (rawY + floatRect.height); 7535 } 7536 const sideX = currentSide === "left" ? "right" : DEFAULT_SIDES.sideX; 7537 const sideY = currentSide === "top" ? "bottom" : DEFAULT_SIDES.sideY; 7538 return { 7539 x, 7540 y, 7541 data: { 7542 sideX, 7543 sideY 7544 } 7545 }; 7546 } 7547 }; 7548 7549 // node_modules/@base-ui/react/utils/usePopupViewport.mjs 7550 var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1); 7551 var popupViewportStateMapping = { 7552 activationDirection: (value) => value ? { 7553 "data-activation-direction": value 7554 } : null 7555 }; 7556 function usePopupViewport(parameters) { 7557 const { 7558 store: store2, 7559 side, 7560 children 7561 } = parameters; 7562 const direction = useDirection(); 7563 const activeTrigger = store2.useState("activeTriggerElement"); 7564 const activeTriggerId = store2.useState("activeTriggerId"); 7565 const open = store2.useState("open"); 7566 const payload = store2.useState("payload"); 7567 const mounted = store2.useState("mounted"); 7568 const popupElement = store2.useState("popupElement"); 7569 const positionerElement = store2.useState("positionerElement"); 7570 const previousActiveTrigger = usePreviousValue(open ? activeTrigger : null); 7571 const currentContentKey = usePopupContentKey(activeTriggerId, payload); 7572 const capturedNodeRef = React33.useRef(null); 7573 const [previousContentNode, setPreviousContentNode] = React33.useState(null); 7574 const [newTriggerOffset, setNewTriggerOffset] = React33.useState(null); 7575 const currentContainerRef = React33.useRef(null); 7576 const previousContainerRef = React33.useRef(null); 7577 const onAnimationsFinished = useAnimationsFinished(currentContainerRef, true); 7578 const cleanupFrame = useAnimationFrame(); 7579 const cleanupControllerRef = React33.useRef(null); 7580 const [previousContentDimensions, setPreviousContentDimensions] = React33.useState(null); 7581 const [showStartingStyleAttribute, setShowStartingStyleAttribute] = React33.useState(false); 7582 useIsoLayoutEffect(() => { 7583 store2.set("adaptiveOrigin", adaptiveOrigin); 7584 return () => { 7585 store2.set("adaptiveOrigin", void 0); 7586 }; 7587 }, [store2]); 7588 const handleMeasureLayout = useStableCallback(() => { 7589 currentContainerRef.current?.style.setProperty("animation", "none"); 7590 currentContainerRef.current?.style.setProperty("transition", "none"); 7591 previousContainerRef.current?.style.setProperty("display", "none"); 7592 }); 7593 const handleMeasureLayoutComplete = useStableCallback((previousDimensions) => { 7594 currentContainerRef.current?.style.removeProperty("animation"); 7595 currentContainerRef.current?.style.removeProperty("transition"); 7596 previousContainerRef.current?.style.removeProperty("display"); 7597 if (previousDimensions) { 7598 setPreviousContentDimensions(previousDimensions); 7599 } 7600 }); 7601 const armViewportCleanup = useStableCallback(() => { 7602 cleanupControllerRef.current?.abort(); 7603 const controller = new AbortController(); 7604 cleanupControllerRef.current = controller; 7605 onAnimationsFinished(() => { 7606 setPreviousContentNode(null); 7607 setPreviousContentDimensions(null); 7608 capturedNodeRef.current = null; 7609 }, controller.signal); 7610 }); 7611 const lastHandledTriggerRef = React33.useRef(null); 7612 useIsoLayoutEffect(() => { 7613 if (!open || !mounted) { 7614 lastHandledTriggerRef.current = null; 7615 } 7616 }, [open, mounted]); 7617 useIsoLayoutEffect(() => { 7618 if (activeTrigger && previousActiveTrigger && activeTrigger !== previousActiveTrigger && lastHandledTriggerRef.current !== activeTrigger && capturedNodeRef.current) { 7619 setPreviousContentNode(capturedNodeRef.current); 7620 setShowStartingStyleAttribute(true); 7621 const offset4 = calculateRelativePosition(previousActiveTrigger, activeTrigger); 7622 setNewTriggerOffset(offset4); 7623 lastHandledTriggerRef.current = activeTrigger; 7624 } 7625 }, [activeTrigger, previousActiveTrigger]); 7626 useIsoLayoutEffect(() => { 7627 if (previousContentNode == null) { 7628 return; 7629 } 7630 cleanupControllerRef.current?.abort(); 7631 setShowStartingStyleAttribute(true); 7632 cleanupFrame.request(() => { 7633 ReactDOM6.flushSync(() => { 7634 setShowStartingStyleAttribute(false); 7635 }); 7636 armViewportCleanup(); 7637 }); 7638 }, [currentContentKey, previousContentNode, armViewportCleanup, cleanupFrame]); 7639 useIsoLayoutEffect(() => { 7640 const source = currentContainerRef.current; 7641 if (!source) { 7642 return; 7643 } 7644 const wrapper = ownerDocument(source).createElement("div"); 7645 for (const child of Array.from(source.childNodes)) { 7646 wrapper.appendChild(child.cloneNode(true)); 7647 } 7648 capturedNodeRef.current = wrapper; 7649 }); 7650 const isTransitioning = previousContentNode != null; 7651 let childrenToRender; 7652 if (!isTransitioning) { 7653 childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { 7654 "data-current": true, 7655 ref: currentContainerRef, 7656 children 7657 }, currentContentKey); 7658 } else { 7659 childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(React33.Fragment, { 7660 children: [/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { 7661 "data-previous": true, 7662 inert: inertValue(true), 7663 ref: previousContainerRef, 7664 style: { 7665 ...previousContentDimensions ? { 7666 "--popup-width": `$previousContentDimensions.width}px`, 7667 "--popup-height": `$previousContentDimensions.height}px` 7668 } : null, 7669 position: "absolute" 7670 }, 7671 "data-ending-style": showStartingStyleAttribute ? void 0 : "" 7672 }, "previous"), /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { 7673 "data-current": true, 7674 ref: currentContainerRef, 7675 "data-starting-style": showStartingStyleAttribute ? "" : void 0, 7676 children 7677 }, currentContentKey)] 7678 }); 7679 } 7680 useIsoLayoutEffect(() => { 7681 const container = previousContainerRef.current; 7682 if (!container || !previousContentNode) { 7683 return; 7684 } 7685 container.replaceChildren(...Array.from(previousContentNode.childNodes)); 7686 }, [previousContentNode]); 7687 usePopupAutoResize({ 7688 popupElement, 7689 positionerElement, 7690 mounted, 7691 content: payload, 7692 onMeasureLayout: handleMeasureLayout, 7693 onMeasureLayoutComplete: handleMeasureLayoutComplete, 7694 side, 7695 direction 7696 }); 7697 const state = { 7698 activationDirection: getActivationDirection(newTriggerOffset), 7699 transitioning: isTransitioning 7700 }; 7701 return { 7702 children: childrenToRender, 7703 state 7704 }; 7705 } 7706 function getActivationDirection(offset4) { 7707 if (!offset4) { 7708 return void 0; 7709 } 7710 return `$getValueWithTolerance(offset4.horizontal, 5, "right", "left")} $getValueWithTolerance(offset4.vertical, 5, "down", "up")}`; 7711 } 7712 function getValueWithTolerance(value, tolerance, positiveLabel, negativeLabel) { 7713 if (value > tolerance) { 7714 return positiveLabel; 7715 } 7716 if (value < -tolerance) { 7717 return negativeLabel; 7718 } 7719 return ""; 7720 } 7721 function calculateRelativePosition(from, to) { 7722 const fromRect = from.getBoundingClientRect(); 7723 const toRect = to.getBoundingClientRect(); 7724 const fromCenter = { 7725 x: fromRect.left + fromRect.width / 2, 7726 y: fromRect.top + fromRect.height / 2 7727 }; 7728 const toCenter = { 7729 x: toRect.left + toRect.width / 2, 7730 y: toRect.top + toRect.height / 2 7731 }; 7732 return { 7733 horizontal: toCenter.x - fromCenter.x, 7734 vertical: toCenter.y - fromCenter.y 7735 }; 7736 } 7737 function usePopupContentKey(activeTriggerId, payload) { 7738 const [contentKey, setContentKey] = React33.useState(0); 7739 const previousActiveTriggerIdRef = React33.useRef(activeTriggerId); 7740 const previousPayloadRef = React33.useRef(payload); 7741 const pendingPayloadUpdateRef = React33.useRef(false); 7742 useIsoLayoutEffect(() => { 7743 const previousActiveTriggerId = previousActiveTriggerIdRef.current; 7744 const previousPayload = previousPayloadRef.current; 7745 const triggerIdChanged = activeTriggerId !== previousActiveTriggerId; 7746 const payloadChanged = payload !== previousPayload; 7747 if (triggerIdChanged) { 7748 setContentKey((value) => value + 1); 7749 pendingPayloadUpdateRef.current = !payloadChanged; 7750 } else if (pendingPayloadUpdateRef.current && payloadChanged) { 7751 setContentKey((value) => value + 1); 7752 pendingPayloadUpdateRef.current = false; 7753 } 7754 previousActiveTriggerIdRef.current = activeTriggerId; 7755 previousPayloadRef.current = payload; 7756 }, [activeTriggerId, payload]); 7757 return `$activeTriggerId ?? "current"}-$contentKey}`; 7758 } 7759 7760 // node_modules/@base-ui/react/utils/FloatingPortalLite.mjs 7761 var React34 = __toESM(require_react(), 1); 7762 var ReactDOM7 = __toESM(require_react_dom(), 1); 7763 var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); 7764 var FloatingPortalLite = /* @__PURE__ */ React34.forwardRef(function FloatingPortalLite2(componentProps, forwardedRef) { 7765 const { 7766 children, 7767 container, 7768 className, 7769 render, 7770 style, 7771 ...elementProps 7772 } = componentProps; 7773 const { 7774 node: portalNode, 7775 subtree: portalSubtree 7776 } = useFloatingPortalNode({ 7777 container, 7778 ref: forwardedRef, 7779 componentProps, 7780 elementProps 7781 }); 7782 if (!portalSubtree && !portalNode) { 7783 return null; 7784 } 7785 return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(React34.Fragment, { 7786 children: [portalSubtree, portalNode && /* @__PURE__ */ ReactDOM7.createPortal(children, portalNode)] 7787 }); 7788 }); 7789 if (true) FloatingPortalLite.displayName = "FloatingPortalLite"; 7790 7791 // node_modules/@base-ui/react/tooltip/index.parts.mjs 7792 var index_parts_exports = {}; 7793 __export(index_parts_exports, { 7794 Arrow: () => TooltipArrow, 7795 Handle: () => TooltipHandle, 7796 Popup: () => TooltipPopup, 7797 Portal: () => TooltipPortal, 7798 Positioner: () => TooltipPositioner, 7799 Provider: () => TooltipProvider, 7800 Root: () => TooltipRoot, 7801 Trigger: () => TooltipTrigger, 7802 Viewport: () => TooltipViewport, 7803 createHandle: () => createTooltipHandle 7804 }); 7805 7806 // node_modules/@base-ui/react/tooltip/root/TooltipRoot.mjs 7807 var React37 = __toESM(require_react(), 1); 7808 7809 // node_modules/@base-ui/react/tooltip/root/TooltipRootContext.mjs 7810 var React35 = __toESM(require_react(), 1); 7811 var TooltipRootContext = /* @__PURE__ */ React35.createContext(void 0); 7812 if (true) TooltipRootContext.displayName = "TooltipRootContext"; 7813 function useTooltipRootContext(optional) { 7814 const context = React35.useContext(TooltipRootContext); 7815 if (context === void 0 && !optional) { 7816 throw new Error(true ? "Base UI: TooltipRootContext is missing. Tooltip parts must be placed within <Tooltip.Root>." : formatErrorMessage_default(72)); 7817 } 7818 return context; 7819 } 7820 7821 // node_modules/@base-ui/react/tooltip/store/TooltipStore.mjs 7822 var React36 = __toESM(require_react(), 1); 7823 var selectors2 = { 7824 ...popupStoreSelectors, 7825 disabled: (state) => state.disabled, 7826 instantType: (state) => state.instantType, 7827 isInstantPhase: (state) => state.isInstantPhase, 7828 trackCursorAxis: (state) => state.trackCursorAxis, 7829 disableHoverablePopup: (state) => state.disableHoverablePopup, 7830 lastOpenChangeReason: (state) => state.openChangeReason, 7831 closeOnClick: (state) => state.closeOnClick, 7832 closeDelay: (state) => state.closeDelay, 7833 adaptiveOrigin: (state) => state.adaptiveOrigin 7834 }; 7835 var TooltipStore = class extends ReactStore { 7836 constructor(initialState, floatingId, nested) { 7837 const triggerElements = new PopupTriggerMap(); 7838 super(createInitialState(initialState, triggerElements, floatingId, nested), createInitialContext(triggerElements), selectors2); 7839 } 7840 setOpen = (nextOpen, eventDetails) => { 7841 applyPopupOpenChange(this, nextOpen, eventDetails, { 7842 extraState: { 7843 openChangeReason: eventDetails.reason 7844 } 7845 }); 7846 }; 7847 // Used by trigger clicks to clear a delayed hover open without reporting a public open-state change. 7848 cancelPendingOpen(event) { 7849 this.state.floatingRootContext.dispatchOpenChange(false, createChangeEventDetails(reason_parts_exports.triggerPress, event)); 7850 } 7851 }; 7852 function createNullTooltipStore() { 7853 const triggerElements = new PopupTriggerMap(); 7854 const store2 = new NullStore(Object.freeze(createInitialState(void 0, triggerElements)), Object.freeze(createInitialContext(triggerElements)), selectors2); 7855 return Object.assign(store2, { 7856 setOpen: NOOP, 7857 cancelPendingOpen: NOOP 7858 }); 7859 } 7860 function createInitialState(initialState, triggerElements, floatingId, nested = false) { 7861 const state = { 7862 ...createInitialPopupStoreState(), 7863 disabled: false, 7864 instantType: void 0, 7865 isInstantPhase: false, 7866 trackCursorAxis: "none", 7867 disableHoverablePopup: false, 7868 openChangeReason: null, 7869 closeOnClick: true, 7870 closeDelay: 0, 7871 adaptiveOrigin: void 0, 7872 ...initialState 7873 }; 7874 state.floatingRootContext = createPopupFloatingRootContext(triggerElements, floatingId, nested); 7875 return state; 7876 } 7877 function createInitialContext(triggerElements) { 7878 return { 7879 popupRef: /* @__PURE__ */ React36.createRef(), 7880 onOpenChange: void 0, 7881 onOpenChangeComplete: void 0, 7882 triggerElements 7883 }; 7884 } 7885 7886 // node_modules/@base-ui/react/tooltip/root/TooltipRoot.mjs 7887 var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1); 7888 var TooltipRoot = fastComponent(function TooltipRoot2(props) { 7889 const { 7890 disabled: disabled2 = false, 7891 defaultOpen = false, 7892 open: openProp, 7893 disableHoverablePopup = false, 7894 trackCursorAxis = "none", 7895 actionsRef, 7896 onOpenChange, 7897 onOpenChangeComplete, 7898 handle, 7899 triggerId: triggerIdProp, 7900 defaultTriggerId: defaultTriggerIdProp = null, 7901 children 7902 } = props; 7903 const store2 = usePopupRootStore((floatingId, nested) => new TooltipStore({ 7904 open: defaultOpen, 7905 openProp, 7906 activeTriggerId: defaultTriggerIdProp, 7907 triggerIdProp 7908 }, floatingId, nested)); 7909 store2.useControlledProp("openProp", openProp); 7910 store2.useControlledProp("triggerIdProp", triggerIdProp); 7911 store2.useContextCallback("onOpenChange", onOpenChange); 7912 store2.useContextCallback("onOpenChangeComplete", onOpenChangeComplete); 7913 const openState = store2.useState("open"); 7914 const open = !disabled2 && openState; 7915 const activeTriggerId = store2.useState("activeTriggerId"); 7916 const mounted = store2.useState("mounted"); 7917 const payload = store2.useState("payload"); 7918 store2.useSyncedValues({ 7919 trackCursorAxis, 7920 disableHoverablePopup, 7921 disabled: disabled2 7922 }); 7923 useImplicitActiveTrigger(store2, { 7924 closeOnActiveTriggerUnmount: true 7925 }); 7926 const { 7927 forceUnmount, 7928 transitionStatus 7929 } = useOpenStateTransitions(open, store2); 7930 const isInstantPhase = store2.useState("isInstantPhase"); 7931 const instantType = store2.useState("instantType"); 7932 const lastOpenChangeReason = store2.useState("lastOpenChangeReason"); 7933 const previousInstantTypeRef = React37.useRef(null); 7934 useIsoLayoutEffect(() => { 7935 if (openState && disabled2) { 7936 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.disabled)); 7937 } 7938 }, [openState, disabled2, store2]); 7939 useIsoLayoutEffect(() => { 7940 if (transitionStatus === "ending" && lastOpenChangeReason === reason_parts_exports.none || transitionStatus !== "ending" && isInstantPhase) { 7941 if (instantType !== "delay") { 7942 previousInstantTypeRef.current = instantType; 7943 } 7944 store2.set("instantType", "delay"); 7945 } else if (previousInstantTypeRef.current !== null) { 7946 store2.set("instantType", previousInstantTypeRef.current); 7947 previousInstantTypeRef.current = null; 7948 } 7949 }, [transitionStatus, isInstantPhase, lastOpenChangeReason, instantType, store2]); 7950 useIsoLayoutEffect(() => { 7951 if (open) { 7952 if (activeTriggerId == null) { 7953 store2.set("payload", void 0); 7954 } 7955 } 7956 }, [store2, activeTriggerId, open]); 7957 React37.useImperativeHandle(actionsRef, () => ({ 7958 unmount: forceUnmount, 7959 close: () => store2.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction)) 7960 }), [forceUnmount, store2]); 7961 const shouldRenderInteractions = open || mounted || !disabled2 && trackCursorAxis !== "none"; 7962 return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(TooltipRootContext.Provider, { 7963 value: store2, 7964 children: [handle && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(PopupHandleAttachment, { 7965 handle, 7966 store: store2 7967 }), shouldRenderInteractions && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(TooltipInteractions, { 7968 store: store2, 7969 disabled: disabled2, 7970 trackCursorAxis 7971 }), typeof children === "function" ? children({ 7972 payload 7973 }) : children] 7974 }); 7975 }); 7976 if (true) TooltipRoot.displayName = "TooltipRoot"; 7977 function TooltipInteractions({ 7978 store: store2, 7979 disabled: disabled2, 7980 trackCursorAxis 7981 }) { 7982 const floatingRootContext = store2.useState("floatingRootContext"); 7983 const dismiss = useDismiss(floatingRootContext, { 7984 enabled: !disabled2, 7985 referencePress: () => store2.select("closeOnClick") 7986 }); 7987 const clientPoint = useClientPoint(floatingRootContext, { 7988 enabled: !disabled2 && trackCursorAxis !== "none", 7989 axis: trackCursorAxis === "none" ? void 0 : trackCursorAxis 7990 }); 7991 const triggerProps = React37.useMemo(() => mergeProps(clientPoint.reference, dismiss.reference), [clientPoint.reference, dismiss.reference]); 7992 usePopupInteractionProps(store2, { 7993 activeTriggerProps: triggerProps, 7994 inactiveTriggerProps: triggerProps, 7995 popupProps: dismiss.floating ?? EMPTY_OBJECT 7996 }); 7997 return null; 7998 } 7999 8000 // node_modules/@base-ui/react/tooltip/trigger/TooltipTrigger.mjs 8001 var React39 = __toESM(require_react(), 1); 8002 8003 // node_modules/@base-ui/react/tooltip/provider/TooltipProviderContext.mjs 8004 var React38 = __toESM(require_react(), 1); 8005 var TooltipProviderContext = /* @__PURE__ */ React38.createContext(void 0); 8006 if (true) TooltipProviderContext.displayName = "TooltipProviderContext"; 8007 function useTooltipProviderContext() { 8008 return React38.useContext(TooltipProviderContext); 8009 } 8010 8011 // node_modules/@base-ui/react/tooltip/utils/constants.mjs 8012 var OPEN_DELAY = 600; 8013 8014 // node_modules/@base-ui/react/tooltip/trigger/TooltipTrigger.mjs 8015 var TOOLTIP_TRIGGER_IDENTIFIER = "data-base-ui-tooltip-trigger"; 8016 function getTargetElement(event) { 8017 if ("composedPath" in event) { 8018 const path = event.composedPath(); 8019 for (let i = 0; i < path.length; i += 1) { 8020 const element = path[i]; 8021 if (isElement(element)) { 8022 return element; 8023 } 8024 } 8025 } 8026 const target = event.target; 8027 if (isElement(target)) { 8028 return target; 8029 } 8030 return null; 8031 } 8032 function closestEnabledTooltipTrigger(element) { 8033 let current = element; 8034 while (current) { 8035 const trigger = current.closest(`[$TOOLTIP_TRIGGER_IDENTIFIER}]`); 8036 if (trigger) { 8037 return trigger; 8038 } 8039 const root = current.getRootNode(); 8040 current = "host" in root && isElement(root.host) ? root.host : null; 8041 } 8042 return null; 8043 } 8044 var TooltipTrigger = fastComponentRef(function TooltipTrigger2(componentProps, forwardedRef) { 8045 const { 8046 render, 8047 className, 8048 style, 8049 handle, 8050 payload, 8051 disabled: disabledProp, 8052 delay, 8053 closeOnClick = true, 8054 closeDelay, 8055 id: idProp, 8056 ...elementProps 8057 } = componentProps; 8058 const rootContext = useTooltipRootContext(true); 8059 const handleStore = usePopupHandleStore(handle); 8060 const store2 = handleStore ?? rootContext; 8061 if (!store2) { 8062 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)); 8063 } 8064 const thisTriggerId = useBaseUiId(idProp); 8065 const isTriggerActive = store2.useState("isTriggerActive", thisTriggerId); 8066 const isOpenedByThisTrigger = store2.useState("isOpenedByTrigger", thisTriggerId); 8067 const floatingRootContext = store2.useState("floatingRootContext"); 8068 const triggerElementRef = React39.useRef(null); 8069 const delayWithDefault = delay ?? OPEN_DELAY; 8070 const closeDelayWithDefault = closeDelay ?? 0; 8071 const { 8072 registerTrigger, 8073 isMountedByThisTrigger 8074 } = useTriggerDataForwarding(thisTriggerId, triggerElementRef, store2, { 8075 payload, 8076 closeOnClick, 8077 closeDelay: closeDelayWithDefault 8078 }); 8079 const providerDelay = useTooltipProviderContext(); 8080 const { 8081 delayRef, 8082 isInstantPhase, 8083 hasProvider 8084 } = useDelayGroup(floatingRootContext, { 8085 open: isOpenedByThisTrigger 8086 }); 8087 const hoverInteraction = useHoverInteractionSharedState(floatingRootContext); 8088 store2.useSyncedValue("isInstantPhase", isInstantPhase); 8089 const rootDisabled = store2.useState("disabled"); 8090 const disabled2 = disabledProp ?? rootDisabled; 8091 const disabledRef = useValueAsRef(disabled2); 8092 const trackCursorAxis = store2.useState("trackCursorAxis"); 8093 const disableHoverablePopup = store2.useState("disableHoverablePopup"); 8094 const isNestedTriggerHoveredRef = React39.useRef(false); 8095 const nestedTriggerOpenTimeout = useTimeout(); 8096 const pointerTypeRef = React39.useRef(void 0); 8097 function getOpenDelay() { 8098 if (!hasProvider) { 8099 return delayWithDefault; 8100 } 8101 return getDelay(delayRef.current, "open") === 0 ? 0 : delay ?? providerDelay ?? OPEN_DELAY; 8102 } 8103 function isEnabledNestedTriggerTarget(target) { 8104 const triggerEl = triggerElementRef.current; 8105 if (!triggerEl || !target) { 8106 return false; 8107 } 8108 const nearestTrigger = closestEnabledTooltipTrigger(target); 8109 return nearestTrigger !== null && nearestTrigger !== triggerEl && contains(triggerEl, nearestTrigger); 8110 } 8111 function detectNestedTriggerHover(target) { 8112 const nestedTriggerHovered = isEnabledNestedTriggerTarget(target); 8113 isNestedTriggerHoveredRef.current = nestedTriggerHovered; 8114 if (nestedTriggerHovered) { 8115 hoverInteraction.openChangeTimeout.clear(); 8116 hoverInteraction.restTimeout.clear(); 8117 hoverInteraction.restTimeoutPending = false; 8118 nestedTriggerOpenTimeout.clear(); 8119 } 8120 return nestedTriggerHovered; 8121 } 8122 const hoverProps = useHoverReferenceInteraction(floatingRootContext, { 8123 enabled: !disabled2, 8124 mouseOnly: true, 8125 move: false, 8126 handleClose: !disableHoverablePopup && trackCursorAxis !== "both" ? safePolygon() : null, 8127 restMs: getOpenDelay, 8128 delay() { 8129 if (closeDelay == null && hasProvider) { 8130 return { 8131 close: getDelay(delayRef.current, "close") 8132 }; 8133 } 8134 return { 8135 close: closeDelayWithDefault 8136 }; 8137 }, 8138 triggerElementRef, 8139 isActiveTrigger: isTriggerActive, 8140 isClosing: () => store2.select("transitionStatus") === "ending", 8141 shouldOpen() { 8142 return !isNestedTriggerHoveredRef.current; 8143 } 8144 }); 8145 const focusProps = useFocus(floatingRootContext, { 8146 enabled: !disabled2 8147 }).reference; 8148 const handleNestedTriggerHover = (event) => { 8149 const wasNestedTriggerHovered = isNestedTriggerHoveredRef.current; 8150 const target = getTargetElement(event); 8151 const nestedTriggerHovered = detectNestedTriggerHover(target); 8152 const triggerEl = triggerElementRef.current; 8153 const targetInsideTrigger = triggerEl && target && contains(triggerEl, target); 8154 if (nestedTriggerHovered && store2.select("open") && store2.select("lastOpenChangeReason") === reason_parts_exports.triggerHover) { 8155 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 8156 return; 8157 } 8158 if (wasNestedTriggerHovered && !nestedTriggerHovered && targetInsideTrigger && !disabledRef.current && !store2.select("open") && triggerEl && // Match the hover hook's non-strict mouse fallback for mouse-only event sequences. 8159 isMouseLikePointerType(pointerTypeRef.current)) { 8160 const open = () => { 8161 if (!isNestedTriggerHoveredRef.current && !disabledRef.current && !store2.select("open")) { 8162 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerEl)); 8163 } 8164 }; 8165 const openDelay = getOpenDelay(); 8166 if (openDelay === 0) { 8167 nestedTriggerOpenTimeout.clear(); 8168 open(); 8169 } else { 8170 nestedTriggerOpenTimeout.start(openDelay, open); 8171 } 8172 } 8173 }; 8174 const rootTriggerProps = store2.useState("triggerProps", isMountedByThisTrigger); 8175 const shouldApplyRootTriggerProps = isMountedByThisTrigger || trackCursorAxis !== "none"; 8176 const state = { 8177 open: isOpenedByThisTrigger 8178 }; 8179 const element = useRenderElement("button", componentProps, { 8180 state, 8181 ref: [forwardedRef, registerTrigger, triggerElementRef], 8182 props: [hoverProps, focusProps, shouldApplyRootTriggerProps ? rootTriggerProps : void 0, { 8183 onMouseOver(event) { 8184 handleNestedTriggerHover(event.nativeEvent); 8185 }, 8186 onFocus(event) { 8187 if (isEnabledNestedTriggerTarget(getTargetElement(event.nativeEvent))) { 8188 event.preventBaseUIHandler(); 8189 } 8190 }, 8191 onMouseLeave() { 8192 isNestedTriggerHoveredRef.current = false; 8193 nestedTriggerOpenTimeout.clear(); 8194 pointerTypeRef.current = void 0; 8195 }, 8196 onPointerEnter(event) { 8197 pointerTypeRef.current = event.pointerType; 8198 }, 8199 onPointerDown(event) { 8200 pointerTypeRef.current = event.pointerType; 8201 store2.set("closeOnClick", closeOnClick); 8202 if (closeOnClick && !store2.select("open")) { 8203 store2.cancelPendingOpen(event.nativeEvent); 8204 } 8205 }, 8206 onClick(event) { 8207 if (closeOnClick && !store2.select("open")) { 8208 store2.cancelPendingOpen(event.nativeEvent); 8209 } 8210 }, 8211 id: thisTriggerId, 8212 "data-trigger-disabled": disabled2 ? "" : void 0, 8213 [TOOLTIP_TRIGGER_IDENTIFIER]: disabled2 ? void 0 : "" 8214 }, elementProps], 8215 stateAttributesMapping: triggerOpenStateMapping 8216 }); 8217 return element; 8218 }); 8219 if (true) TooltipTrigger.displayName = "TooltipTrigger"; 8220 8221 // node_modules/@base-ui/react/tooltip/portal/TooltipPortal.mjs 8222 var React41 = __toESM(require_react(), 1); 8223 8224 // node_modules/@base-ui/react/tooltip/portal/TooltipPortalContext.mjs 8225 var React40 = __toESM(require_react(), 1); 8226 var TooltipPortalContext = /* @__PURE__ */ React40.createContext(void 0); 8227 if (true) TooltipPortalContext.displayName = "TooltipPortalContext"; 8228 function useTooltipPortalContext() { 8229 const value = React40.useContext(TooltipPortalContext); 8230 if (value === void 0) { 8231 throw new Error(true ? "Base UI: <Tooltip.Portal> is missing." : formatErrorMessage_default(70)); 8232 } 8233 return value; 8234 } 8235 8236 // node_modules/@base-ui/react/tooltip/portal/TooltipPortal.mjs 8237 var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1); 8238 var TooltipPortal = /* @__PURE__ */ React41.forwardRef(function TooltipPortal2(props, forwardedRef) { 8239 const { 8240 keepMounted = false, 8241 ...portalProps 8242 } = props; 8243 const store2 = useTooltipRootContext(); 8244 const mounted = store2.useState("mounted"); 8245 const shouldRender = mounted || keepMounted; 8246 if (!shouldRender) { 8247 return null; 8248 } 8249 return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TooltipPortalContext.Provider, { 8250 value: keepMounted, 8251 children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(FloatingPortalLite, { 8252 ref: forwardedRef, 8253 ...portalProps 8254 }) 8255 }); 8256 }); 8257 if (true) TooltipPortal.displayName = "TooltipPortal"; 8258 8259 // node_modules/@base-ui/react/tooltip/positioner/TooltipPositioner.mjs 8260 var React43 = __toESM(require_react(), 1); 8261 8262 // node_modules/@base-ui/react/tooltip/positioner/TooltipPositionerContext.mjs 8263 var React42 = __toESM(require_react(), 1); 8264 var TooltipPositionerContext = /* @__PURE__ */ React42.createContext(void 0); 8265 if (true) TooltipPositionerContext.displayName = "TooltipPositionerContext"; 8266 function useTooltipPositionerContext() { 8267 const context = React42.useContext(TooltipPositionerContext); 8268 if (context === void 0) { 8269 throw new Error(true ? "Base UI: TooltipPositionerContext is missing. TooltipPositioner parts must be placed within <Tooltip.Positioner>." : formatErrorMessage_default(71)); 8270 } 8271 return context; 8272 } 8273 8274 // node_modules/@base-ui/react/tooltip/positioner/TooltipPositioner.mjs 8275 var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1); 8276 var TooltipPositioner = /* @__PURE__ */ React43.forwardRef(function TooltipPositioner2(componentProps, forwardedRef) { 8277 const { 8278 render, 8279 className, 8280 anchor, 8281 positionMethod = "absolute", 8282 side = "top", 8283 align = "center", 8284 sideOffset = 0, 8285 alignOffset = 0, 8286 collisionBoundary = "clipping-ancestors", 8287 collisionPadding = 5, 8288 arrowPadding = 5, 8289 sticky = false, 8290 disableAnchorTracking = false, 8291 collisionAvoidance = POPUP_COLLISION_AVOIDANCE, 8292 style, 8293 ...elementProps 8294 } = componentProps; 8295 const store2 = useTooltipRootContext(); 8296 const keepMounted = useTooltipPortalContext(); 8297 const open = store2.useState("open"); 8298 const mounted = store2.useState("mounted"); 8299 const trackCursorAxis = store2.useState("trackCursorAxis"); 8300 const disableHoverablePopup = store2.useState("disableHoverablePopup"); 8301 const floatingRootContext = store2.useState("floatingRootContext"); 8302 const instantType = store2.useState("instantType"); 8303 const transitionStatus = store2.useState("transitionStatus"); 8304 const adaptiveOrigin2 = store2.useState("adaptiveOrigin"); 8305 const positioning = useAnchorPositioning({ 8306 anchor, 8307 positionMethod, 8308 floatingRootContext, 8309 mounted, 8310 side, 8311 sideOffset, 8312 align, 8313 alignOffset, 8314 collisionBoundary, 8315 collisionPadding, 8316 sticky, 8317 arrowPadding, 8318 disableAnchorTracking, 8319 keepMounted, 8320 collisionAvoidance, 8321 adaptiveOrigin: adaptiveOrigin2 8322 }); 8323 const state = React43.useMemo(() => ({ 8324 open, 8325 side: positioning.side, 8326 align: positioning.align, 8327 anchorHidden: positioning.anchorHidden, 8328 instant: trackCursorAxis !== "none" ? "tracking-cursor" : instantType 8329 }), [open, positioning.side, positioning.align, positioning.anchorHidden, trackCursorAxis, instantType]); 8330 const element = usePositioner(componentProps, state, { 8331 styles: positioning.positionerStyles, 8332 transitionStatus, 8333 props: elementProps, 8334 refs: [forwardedRef, store2.useStateSetter("positionerElement")], 8335 hidden: !mounted, 8336 inert: !open || trackCursorAxis === "both" || disableHoverablePopup 8337 }); 8338 return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TooltipPositionerContext.Provider, { 8339 value: positioning, 8340 children: element 8341 }); 8342 }); 8343 if (true) TooltipPositioner.displayName = "TooltipPositioner"; 8344 8345 // node_modules/@base-ui/react/tooltip/popup/TooltipPopup.mjs 8346 var React44 = __toESM(require_react(), 1); 8347 var TooltipPopup = /* @__PURE__ */ React44.forwardRef(function TooltipPopup2(componentProps, forwardedRef) { 8348 const { 8349 render, 8350 className, 8351 style, 8352 ...elementProps 8353 } = componentProps; 8354 const store2 = useTooltipRootContext(); 8355 const { 8356 side, 8357 align 8358 } = useTooltipPositionerContext(); 8359 const open = store2.useState("open"); 8360 const instantType = store2.useState("instantType"); 8361 const transitionStatus = store2.useState("transitionStatus"); 8362 const popupProps = store2.useState("popupProps"); 8363 const floatingContext = store2.useState("floatingRootContext"); 8364 const disabled2 = store2.useState("disabled"); 8365 const closeDelay = store2.useState("closeDelay"); 8366 useOpenChangeComplete({ 8367 open, 8368 ref: store2.context.popupRef, 8369 onComplete() { 8370 if (open) { 8371 store2.context.onOpenChangeComplete?.(true); 8372 } 8373 } 8374 }); 8375 useHoverFloatingInteraction(floatingContext, { 8376 enabled: !disabled2, 8377 closeDelay 8378 }); 8379 const setPopupElement = store2.useStateSetter("popupElement"); 8380 const state = { 8381 open, 8382 side, 8383 align, 8384 instant: instantType, 8385 transitionStatus 8386 }; 8387 const element = useRenderElement("div", componentProps, { 8388 state, 8389 ref: [forwardedRef, store2.context.popupRef, setPopupElement], 8390 props: [FOCUSABLE_POPUP_PROPS, popupProps, getDisabledMountTransitionStyles(transitionStatus), elementProps], 8391 stateAttributesMapping: popupTransitionStateMapping 8392 }); 8393 return element; 8394 }); 8395 if (true) TooltipPopup.displayName = "TooltipPopup"; 8396 8397 // node_modules/@base-ui/react/tooltip/arrow/TooltipArrow.mjs 8398 var React45 = __toESM(require_react(), 1); 8399 var TooltipArrow = /* @__PURE__ */ React45.forwardRef(function TooltipArrow2(componentProps, forwardedRef) { 8400 const { 8401 render, 8402 className, 8403 style, 8404 ...elementProps 8405 } = componentProps; 8406 const store2 = useTooltipRootContext(); 8407 const { 8408 arrowRef, 8409 side, 8410 align, 8411 arrowUncentered, 8412 arrowStyles 8413 } = useTooltipPositionerContext(); 8414 const open = store2.useState("open"); 8415 const instantType = store2.useState("instantType"); 8416 const state = { 8417 open, 8418 side, 8419 align, 8420 uncentered: arrowUncentered, 8421 instant: instantType 8422 }; 8423 const element = useRenderElement("div", componentProps, { 8424 state, 8425 ref: [forwardedRef, arrowRef], 8426 props: [{ 8427 style: arrowStyles, 8428 "aria-hidden": true 8429 }, elementProps], 8430 stateAttributesMapping: popupStateMapping 8431 }); 8432 return element; 8433 }); 8434 if (true) TooltipArrow.displayName = "TooltipArrow"; 8435 8436 // node_modules/@base-ui/react/tooltip/provider/TooltipProvider.mjs 8437 var React46 = __toESM(require_react(), 1); 8438 var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1); 8439 var TooltipProvider = function TooltipProvider2(props) { 8440 const { 8441 delay, 8442 closeDelay, 8443 timeout = 400 8444 } = props; 8445 const delayValue = React46.useMemo(() => ({ 8446 open: delay, 8447 close: closeDelay 8448 }), [delay, closeDelay]); 8449 return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(TooltipProviderContext.Provider, { 8450 value: delay, 8451 children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(FloatingDelayGroup, { 8452 delay: delayValue, 8453 timeoutMs: timeout, 8454 children: props.children 8455 }) 8456 }); 8457 }; 8458 if (true) TooltipProvider.displayName = "TooltipProvider"; 8459 8460 // node_modules/@base-ui/react/tooltip/viewport/TooltipViewport.mjs 8461 var React47 = __toESM(require_react(), 1); 8462 var TooltipViewport = /* @__PURE__ */ React47.forwardRef(function TooltipViewport2(componentProps, forwardedRef) { 8463 const { 8464 render, 8465 className, 8466 style, 8467 children, 8468 ...elementProps 8469 } = componentProps; 8470 const store2 = useTooltipRootContext(); 8471 const positioner = useTooltipPositionerContext(); 8472 const instantType = store2.useState("instantType"); 8473 const { 8474 children: childrenToRender, 8475 state: viewportState 8476 } = usePopupViewport({ 8477 store: store2, 8478 side: positioner.side, 8479 children 8480 }); 8481 const state = { 8482 activationDirection: viewportState.activationDirection, 8483 transitioning: viewportState.transitioning, 8484 instant: instantType 8485 }; 8486 return useRenderElement("div", componentProps, { 8487 state, 8488 ref: forwardedRef, 8489 props: [elementProps, { 8490 children: childrenToRender 8491 }], 8492 stateAttributesMapping: popupViewportStateMapping 8493 }); 8494 }); 8495 if (true) TooltipViewport.displayName = "TooltipViewport"; 8496 8497 // node_modules/@base-ui/react/tooltip/store/TooltipHandle.mjs 8498 var TooltipHandle = class extends BasePopupHandle { 8499 constructor() { 8500 super(createNullTooltipStore(), "Tooltip"); 8501 } 8502 /** 8503 * Opens the tooltip and associates it with the trigger with the given id. 8504 * 8505 * This method should only be called in an event handler or an effect (not during rendering). 8506 * 8507 * @param triggerId ID of the trigger to associate with the tooltip. The trigger must be a matching 8508 * `Tooltip.Trigger` with this handle passed as a prop. 8509 */ 8510 open(triggerId) { 8511 this.openByTrigger(triggerId); 8512 } 8513 /** 8514 * Closes the tooltip. 8515 * 8516 * This method should only be called in an event handler or an effect (not during rendering). 8517 */ 8518 close() { 8519 this.closePopup(); 8520 } 8521 /** 8522 * Whether the tooltip is currently open. Returns `false` while no root is attached to the handle. 8523 */ 8524 get isOpen() { 8525 return this.attachedStore?.select("open") ?? false; 8526 } 8527 }; 8528 function createTooltipHandle() { 8529 return new TooltipHandle(); 8530 } 8531 8532 // node_modules/@base-ui/react/use-render/useRender.mjs 8533 function useRender(params) { 8534 return useRenderElement(params.defaultTagName ?? "div", params, params); 8535 } 8536 8537 // packages/ui/build-module/tooltip/index.mjs 8538 var tooltip_exports = {}; 8539 __export(tooltip_exports, { 8540 Popup: () => Popup, 8541 Portal: () => Portal, 8542 Positioner: () => Positioner, 8543 Provider: () => Provider, 8544 Root: () => Root, 8545 Trigger: () => Trigger 8546 }); 8547 8548 // packages/ui/build-module/tooltip/popup.mjs 8549 var import_element13 = __toESM(require_element(), 1); 8550 8551 // packages/ui/build-module/tooltip/portal.mjs 8552 var import_element10 = __toESM(require_element(), 1); 8553 8554 // packages/ui/build-module/utils/wp-compat-overlay-slot.mjs 8555 var STYLE_HASH_ATTRIBUTE = "data-wp-hash"; 8556 function getRuntime() { 8557 const globalScope = globalThis; 8558 if (globalScope.__wpStyleRuntime) { 8559 return globalScope.__wpStyleRuntime; 8560 } 8561 globalScope.__wpStyleRuntime = { 8562 documents: /* @__PURE__ */ new Map(), 8563 styles: /* @__PURE__ */ new Map(), 8564 injectedStyles: /* @__PURE__ */ new WeakMap() 8565 }; 8566 if (typeof document !== "undefined") { 8567 registerDocument(document); 8568 } 8569 return globalScope.__wpStyleRuntime; 8570 } 8571 function documentContainsStyleHash(targetDocument, hash) { 8572 if (!targetDocument.head) { 8573 return false; 8574 } 8575 for (const style of targetDocument.head.querySelectorAll( 8576 `style[$STYLE_HASH_ATTRIBUTE}]` 8577 )) { 8578 if (style.getAttribute(STYLE_HASH_ATTRIBUTE) === hash) { 8579 return true; 8580 } 8581 } 8582 return false; 8583 } 8584 function injectStyle(targetDocument, hash, css) { 8585 if (!targetDocument.head) { 8586 return; 8587 } 8588 const runtime = getRuntime(); 8589 let injectedStyles = runtime.injectedStyles.get(targetDocument); 8590 if (!injectedStyles) { 8591 injectedStyles = /* @__PURE__ */ new Set(); 8592 runtime.injectedStyles.set(targetDocument, injectedStyles); 8593 } 8594 if (injectedStyles.has(hash)) { 8595 return; 8596 } 8597 if (documentContainsStyleHash(targetDocument, hash)) { 8598 injectedStyles.add(hash); 8599 return; 8600 } 8601 const style = targetDocument.createElement("style"); 8602 style.setAttribute(STYLE_HASH_ATTRIBUTE, hash); 8603 style.appendChild(targetDocument.createTextNode(css)); 8604 targetDocument.head.appendChild(style); 8605 injectedStyles.add(hash); 8606 } 8607 function registerDocument(targetDocument) { 8608 const runtime = getRuntime(); 8609 runtime.documents.set( 8610 targetDocument, 8611 (runtime.documents.get(targetDocument) ?? 0) + 1 8612 ); 8613 for (const [hash, css] of runtime.styles) { 8614 injectStyle(targetDocument, hash, css); 8615 } 8616 return () => { 8617 const count = runtime.documents.get(targetDocument); 8618 if (count === void 0) { 8619 return; 8620 } 8621 if (count <= 1) { 8622 runtime.documents.delete(targetDocument); 8623 return; 8624 } 8625 runtime.documents.set(targetDocument, count - 1); 8626 }; 8627 } 8628 function registerStyle(hash, css) { 8629 const runtime = getRuntime(); 8630 runtime.styles.set(hash, css); 8631 for (const targetDocument of runtime.documents.keys()) { 8632 injectStyle(targetDocument, hash, css); 8633 } 8634 } 8635 if (typeof process === "undefined" || true) { 8636 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}}}"); 8637 } 8638 var wp_compat_overlay_slot_default = { "slot": "_11fc52b637ff8a7e__slot" }; 8639 var WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE = "data-wp-compat-overlay-slot"; 8640 function resolveOwnerDocument() { 8641 return typeof document === "undefined" ? null : document; 8642 } 8643 function isInWordPressEnvironment() { 8644 let topWp; 8645 try { 8646 topWp = window.top?.wp; 8647 } catch { 8648 } 8649 const wp = topWp ?? window.wp; 8650 return typeof wp?.components === "object" && wp.components !== null; 8651 } 8652 var cachedSlot = null; 8653 function ensureSlotIsAccessible(element) { 8654 element.setAttribute("aria-hidden", "false"); 8655 return element; 8656 } 8657 function createSlot(ownerDocument2) { 8658 const element = ownerDocument2.createElement("div"); 8659 element.setAttribute(WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE, ""); 8660 if (wp_compat_overlay_slot_default.slot) { 8661 element.classList.add(wp_compat_overlay_slot_default.slot); 8662 } 8663 ownerDocument2.body.appendChild(element); 8664 return element; 8665 } 8666 function getWpCompatOverlaySlot() { 8667 if (typeof window === "undefined") { 8668 return void 0; 8669 } 8670 if (!isInWordPressEnvironment() && window.__wpUiCompatOverlaySlotEnabled !== true) { 8671 return void 0; 8672 } 8673 const ownerDocument2 = resolveOwnerDocument(); 8674 if (!ownerDocument2 || !ownerDocument2.body) { 8675 return void 0; 8676 } 8677 if (cachedSlot && cachedSlot.ownerDocument === ownerDocument2 && cachedSlot.isConnected) { 8678 return ensureSlotIsAccessible(cachedSlot); 8679 } 8680 const existing = ownerDocument2.querySelector( 8681 `[$WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE}]` 8682 ); 8683 if (existing instanceof HTMLDivElement) { 8684 cachedSlot = ensureSlotIsAccessible(existing); 8685 return cachedSlot; 8686 } 8687 if (cachedSlot?.isConnected) { 8688 cachedSlot.remove(); 8689 } 8690 cachedSlot = ensureSlotIsAccessible(createSlot(ownerDocument2)); 8691 return cachedSlot; 8692 } 8693 8694 // packages/ui/build-module/tooltip/portal.mjs 8695 var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1); 8696 var Portal = (0, import_element10.forwardRef)( 8697 function TooltipPortal3({ container, ...restProps }, ref) { 8698 return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)( 8699 index_parts_exports.Portal, 8700 { 8701 container: container ?? getWpCompatOverlaySlot(), 8702 ...restProps, 8703 ref 8704 } 8705 ); 8706 } 8707 ); 8708 8709 // packages/ui/build-module/tooltip/positioner.mjs 8710 var import_element11 = __toESM(require_element(), 1); 8711 var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1); 8712 var STYLE_HASH_ATTRIBUTE2 = "data-wp-hash"; 8713 function getRuntime2() { 8714 const globalScope = globalThis; 8715 if (globalScope.__wpStyleRuntime) { 8716 return globalScope.__wpStyleRuntime; 8717 } 8718 globalScope.__wpStyleRuntime = { 8719 documents: /* @__PURE__ */ new Map(), 8720 styles: /* @__PURE__ */ new Map(), 8721 injectedStyles: /* @__PURE__ */ new WeakMap() 8722 }; 8723 if (typeof document !== "undefined") { 8724 registerDocument2(document); 8725 } 8726 return globalScope.__wpStyleRuntime; 8727 } 8728 function documentContainsStyleHash2(targetDocument, hash) { 8729 if (!targetDocument.head) { 8730 return false; 8731 } 8732 for (const style of targetDocument.head.querySelectorAll( 8733 `style[$STYLE_HASH_ATTRIBUTE2}]` 8734 )) { 8735 if (style.getAttribute(STYLE_HASH_ATTRIBUTE2) === hash) { 8736 return true; 8737 } 8738 } 8739 return false; 8740 } 8741 function injectStyle2(targetDocument, hash, css) { 8742 if (!targetDocument.head) { 8743 return; 8744 } 8745 const runtime = getRuntime2(); 8746 let injectedStyles = runtime.injectedStyles.get(targetDocument); 8747 if (!injectedStyles) { 8748 injectedStyles = /* @__PURE__ */ new Set(); 8749 runtime.injectedStyles.set(targetDocument, injectedStyles); 8750 } 8751 if (injectedStyles.has(hash)) { 8752 return; 8753 } 8754 if (documentContainsStyleHash2(targetDocument, hash)) { 8755 injectedStyles.add(hash); 8756 return; 8757 } 8758 const style = targetDocument.createElement("style"); 8759 style.setAttribute(STYLE_HASH_ATTRIBUTE2, hash); 8760 style.appendChild(targetDocument.createTextNode(css)); 8761 targetDocument.head.appendChild(style); 8762 injectedStyles.add(hash); 8763 } 8764 function registerDocument2(targetDocument) { 8765 const runtime = getRuntime2(); 8766 runtime.documents.set( 8767 targetDocument, 8768 (runtime.documents.get(targetDocument) ?? 0) + 1 8769 ); 8770 for (const [hash, css] of runtime.styles) { 8771 injectStyle2(targetDocument, hash, css); 8772 } 8773 return () => { 8774 const count = runtime.documents.get(targetDocument); 8775 if (count === void 0) { 8776 return; 8777 } 8778 if (count <= 1) { 8779 runtime.documents.delete(targetDocument); 8780 return; 8781 } 8782 runtime.documents.set(targetDocument, count - 1); 8783 }; 8784 } 8785 function registerStyle2(hash, css) { 8786 const runtime = getRuntime2(); 8787 runtime.styles.set(hash, css); 8788 for (const targetDocument of runtime.documents.keys()) { 8789 injectStyle2(targetDocument, hash, css); 8790 } 8791 } 8792 if (typeof process === "undefined" || true) { 8793 registerStyle2("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); 8794 } 8795 var resets_default = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; 8796 if (typeof process === "undefined" || true) { 8797 registerStyle2("19fcc06039", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._480b748dd3510e64__positioner{z-index:var(--wp-ui-tooltip-z-index,initial)}._50096b232db7709d__popup{--_wp-ui-elevation-sm:0 1px 2px rgba(0,0,0,.05),0 2px 3px rgba(0,0,0,.04),0 6px 6px rgba(0,0,0,.03),0 8px 8px rgba(0,0,0,.02);background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-elevation-sm);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:1.4;padding:var(--wpds-dimension-padding-xs,4px) var(--wpds-dimension-padding-sm,8px);@media (forced-colors:active){border-bottom-color:CanvasText;border-bottom-style:solid;border-bottom-width:1px;border-left-color:CanvasText;border-left-style:solid;border-left-width:1px;border-right-color:CanvasText;border-right-style:solid;border-right-width:1px;border-top-color:CanvasText;border-top-style:solid;border-top-width:1px}}}}'); 8798 } 8799 var style_default = { "positioner": "_480b748dd3510e64__positioner", "popup": "_50096b232db7709d__popup" }; 8800 var Positioner = (0, import_element11.forwardRef)( 8801 function TooltipPositioner3({ align = "center", className, side = "top", sideOffset = 4, ...props }, ref) { 8802 return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)( 8803 index_parts_exports.Positioner, 8804 { 8805 ref, 8806 align, 8807 side, 8808 sideOffset, 8809 ...props, 8810 className: clsx_default( 8811 resets_default["box-sizing"], 8812 style_default.positioner, 8813 className 8814 ) 8815 } 8816 ); 8817 } 8818 ); 8819 8820 // packages/ui/build-module/utils/render-slot-with-children.mjs 8821 var import_element12 = __toESM(require_element(), 1); 8822 function renderSlotWithChildren(slot, defaultSlot, children) { 8823 return (0, import_element12.cloneElement)(slot ?? defaultSlot, { children }); 8824 } 8825 8826 // packages/ui/build-module/utils/theme-provider.mjs 8827 var theme = __toESM(require_theme(), 1); 8828 8829 // packages/ui/build-module/lock-unlock.mjs 8830 var import_private_apis = __toESM(require_private_apis(), 1); 8831 var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( 8832 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", 8833 "@wordpress/ui" 8834 ); 8835 8836 // packages/ui/build-module/utils/theme-provider.mjs 8837 function getThemeProvider() { 8838 const themePackage = theme; 8839 if (themePackage.ThemeProvider) { 8840 return themePackage.ThemeProvider; 8841 } 8842 if (!themePackage.privateApis) { 8843 throw new Error( 8844 "@wordpress/ui: @wordpress/theme must expose `ThemeProvider` or `privateApis.ThemeProvider`." 8845 ); 8846 } 8847 return unlock( 8848 themePackage.privateApis 8849 ).ThemeProvider; 8850 } 8851 var ThemeProvider = getThemeProvider(); 8852 8853 // packages/ui/build-module/tooltip/popup.mjs 8854 var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1); 8855 var STYLE_HASH_ATTRIBUTE3 = "data-wp-hash"; 8856 function getRuntime3() { 8857 const globalScope = globalThis; 8858 if (globalScope.__wpStyleRuntime) { 8859 return globalScope.__wpStyleRuntime; 8860 } 8861 globalScope.__wpStyleRuntime = { 8862 documents: /* @__PURE__ */ new Map(), 8863 styles: /* @__PURE__ */ new Map(), 8864 injectedStyles: /* @__PURE__ */ new WeakMap() 8865 }; 8866 if (typeof document !== "undefined") { 8867 registerDocument3(document); 8868 } 8869 return globalScope.__wpStyleRuntime; 8870 } 8871 function documentContainsStyleHash3(targetDocument, hash) { 8872 if (!targetDocument.head) { 8873 return false; 8874 } 8875 for (const style of targetDocument.head.querySelectorAll( 8876 `style[$STYLE_HASH_ATTRIBUTE3}]` 8877 )) { 8878 if (style.getAttribute(STYLE_HASH_ATTRIBUTE3) === hash) { 8879 return true; 8880 } 8881 } 8882 return false; 8883 } 8884 function injectStyle3(targetDocument, hash, css) { 8885 if (!targetDocument.head) { 8886 return; 8887 } 8888 const runtime = getRuntime3(); 8889 let injectedStyles = runtime.injectedStyles.get(targetDocument); 8890 if (!injectedStyles) { 8891 injectedStyles = /* @__PURE__ */ new Set(); 8892 runtime.injectedStyles.set(targetDocument, injectedStyles); 8893 } 8894 if (injectedStyles.has(hash)) { 8895 return; 8896 } 8897 if (documentContainsStyleHash3(targetDocument, hash)) { 8898 injectedStyles.add(hash); 8899 return; 8900 } 8901 const style = targetDocument.createElement("style"); 8902 style.setAttribute(STYLE_HASH_ATTRIBUTE3, hash); 8903 style.appendChild(targetDocument.createTextNode(css)); 8904 targetDocument.head.appendChild(style); 8905 injectedStyles.add(hash); 8906 } 8907 function registerDocument3(targetDocument) { 8908 const runtime = getRuntime3(); 8909 runtime.documents.set( 8910 targetDocument, 8911 (runtime.documents.get(targetDocument) ?? 0) + 1 8912 ); 8913 for (const [hash, css] of runtime.styles) { 8914 injectStyle3(targetDocument, hash, css); 8915 } 8916 return () => { 8917 const count = runtime.documents.get(targetDocument); 8918 if (count === void 0) { 8919 return; 8920 } 8921 if (count <= 1) { 8922 runtime.documents.delete(targetDocument); 8923 return; 8924 } 8925 runtime.documents.set(targetDocument, count - 1); 8926 }; 8927 } 8928 function registerStyle3(hash, css) { 8929 const runtime = getRuntime3(); 8930 runtime.styles.set(hash, css); 8931 for (const targetDocument of runtime.documents.keys()) { 8932 injectStyle3(targetDocument, hash, css); 8933 } 8934 } 8935 if (typeof process === "undefined" || true) { 8936 registerStyle3("19fcc06039", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._480b748dd3510e64__positioner{z-index:var(--wp-ui-tooltip-z-index,initial)}._50096b232db7709d__popup{--_wp-ui-elevation-sm:0 1px 2px rgba(0,0,0,.05),0 2px 3px rgba(0,0,0,.04),0 6px 6px rgba(0,0,0,.03),0 8px 8px rgba(0,0,0,.02);background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-elevation-sm);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:1.4;padding:var(--wpds-dimension-padding-xs,4px) var(--wpds-dimension-padding-sm,8px);@media (forced-colors:active){border-bottom-color:CanvasText;border-bottom-style:solid;border-bottom-width:1px;border-left-color:CanvasText;border-left-style:solid;border-left-width:1px;border-right-color:CanvasText;border-right-style:solid;border-right-width:1px;border-top-color:CanvasText;border-top-style:solid;border-top-width:1px}}}}'); 8937 } 8938 var style_default2 = { "positioner": "_480b748dd3510e64__positioner", "popup": "_50096b232db7709d__popup" }; 8939 var POPUP_COLOR = { background: "#1e1e1e" }; 8940 var Popup = (0, import_element13.forwardRef)(function TooltipPopup3({ portal, positioner, children, className, ...props }, ref) { 8941 const popupContent = /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ThemeProvider, { color: POPUP_COLOR, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)( 8942 index_parts_exports.Popup, 8943 { 8944 ref, 8945 className: clsx_default(style_default2.popup, className), 8946 ...props, 8947 children 8948 } 8949 ) }); 8950 const positionedPopup = renderSlotWithChildren( 8951 positioner, 8952 /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Positioner, {}), 8953 popupContent 8954 ); 8955 return renderSlotWithChildren(portal, /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Portal, {}), positionedPopup); 8956 }); 8957 8958 // packages/ui/build-module/tooltip/trigger.mjs 8959 var import_element14 = __toESM(require_element(), 1); 8960 var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1); 8961 var Trigger = (0, import_element14.forwardRef)( 8962 function TooltipTrigger3(props, ref) { 8963 return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(index_parts_exports.Trigger, { ref, ...props }); 8964 } 8965 ); 8966 8967 // packages/ui/build-module/utils/direction-provider.mjs 8968 var import_i18n = __toESM(require_i18n(), 1); 8969 var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1); 8970 function DirectionProvider3({ children }) { 8971 return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(DirectionProvider, { direction: (0, import_i18n.isRTL)() ? "rtl" : "ltr", children }); 8972 } 8973 8974 // packages/ui/build-module/tooltip/root.mjs 8975 var import_jsx_runtime17 = __toESM(require_jsx_runtime(), 1); 8976 function Root(props) { 8977 return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(DirectionProvider3, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(index_parts_exports.Root, { ...props }) }); 8978 } 8979 8980 // packages/ui/build-module/tooltip/provider.mjs 8981 var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1); 8982 function Provider({ ...props }) { 8983 return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(index_parts_exports.Provider, { ...props }); 8984 } 8985 8986 // packages/icons/build-module/library/chevron-down.mjs 8987 var import_primitives = __toESM(require_primitives(), 1); 8988 var import_jsx_runtime19 = __toESM(require_jsx_runtime(), 1); 8989 var chevron_down_default = /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives.Path, { d: "M7 11L12 15L17 11", vectorEffect: "non-scaling-stroke" }) }); 8990 8991 // packages/icons/build-module/library/chevron-left.mjs 8992 var import_primitives2 = __toESM(require_primitives(), 1); 8993 var import_jsx_runtime20 = __toESM(require_jsx_runtime(), 1); 8994 var chevron_left_default = /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives2.Path, { d: "M14 6.5L9 12L14 17.5", vectorEffect: "non-scaling-stroke" }) }); 8995 8996 // packages/icons/build-module/library/chevron-right.mjs 8997 var import_primitives3 = __toESM(require_primitives(), 1); 8998 var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1); 8999 var chevron_right_default = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives3.Path, { d: "M10 6.5L15 12L10 17.5", vectorEffect: "non-scaling-stroke" }) }); 9000 9001 // packages/icons/build-module/library/chevron-up.mjs 9002 var import_primitives4 = __toESM(require_primitives(), 1); 9003 var import_jsx_runtime22 = __toESM(require_jsx_runtime(), 1); 9004 var chevron_up_default = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives4.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives4.Path, { d: "M7 13L12 9L17 13", vectorEffect: "non-scaling-stroke" }) }); 9005 9006 // packages/icons/build-module/library/fullscreen.mjs 9007 var import_primitives5 = __toESM(require_primitives(), 1); 9008 var import_jsx_runtime23 = __toESM(require_jsx_runtime(), 1); 9009 var fullscreen_default = /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives5.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives5.Path, { d: "M6 4a2 2 0 0 0-2 2v3h1.5V6a.5.5 0 0 1 .5-.5h3V4H6Zm3 14.5H6a.5.5 0 0 1-.5-.5v-3H4v3a2 2 0 0 0 2 2h3v-1.5Zm6 1.5v-1.5h3a.5.5 0 0 0 .5-.5v-3H20v3a2 2 0 0 1-2 2h-3Zm3-16a2 2 0 0 1 2 2v3h-1.5V6a.5.5 0 0 0-.5-.5h-3V4h3Z" }) }); 9010 9011 // packages/ui/build-module/visually-hidden/visually-hidden.mjs 9012 var import_element15 = __toESM(require_element(), 1); 9013 var STYLE_HASH_ATTRIBUTE4 = "data-wp-hash"; 9014 function getRuntime4() { 9015 const globalScope = globalThis; 9016 if (globalScope.__wpStyleRuntime) { 9017 return globalScope.__wpStyleRuntime; 9018 } 9019 globalScope.__wpStyleRuntime = { 9020 documents: /* @__PURE__ */ new Map(), 9021 styles: /* @__PURE__ */ new Map(), 9022 injectedStyles: /* @__PURE__ */ new WeakMap() 9023 }; 9024 if (typeof document !== "undefined") { 9025 registerDocument4(document); 9026 } 9027 return globalScope.__wpStyleRuntime; 9028 } 9029 function documentContainsStyleHash4(targetDocument, hash) { 9030 if (!targetDocument.head) { 9031 return false; 9032 } 9033 for (const style of targetDocument.head.querySelectorAll( 9034 `style[$STYLE_HASH_ATTRIBUTE4}]` 9035 )) { 9036 if (style.getAttribute(STYLE_HASH_ATTRIBUTE4) === hash) { 9037 return true; 9038 } 9039 } 9040 return false; 9041 } 9042 function injectStyle4(targetDocument, hash, css) { 9043 if (!targetDocument.head) { 9044 return; 9045 } 9046 const runtime = getRuntime4(); 9047 let injectedStyles = runtime.injectedStyles.get(targetDocument); 9048 if (!injectedStyles) { 9049 injectedStyles = /* @__PURE__ */ new Set(); 9050 runtime.injectedStyles.set(targetDocument, injectedStyles); 9051 } 9052 if (injectedStyles.has(hash)) { 9053 return; 9054 } 9055 if (documentContainsStyleHash4(targetDocument, hash)) { 9056 injectedStyles.add(hash); 9057 return; 9058 } 9059 const style = targetDocument.createElement("style"); 9060 style.setAttribute(STYLE_HASH_ATTRIBUTE4, hash); 9061 style.appendChild(targetDocument.createTextNode(css)); 9062 targetDocument.head.appendChild(style); 9063 injectedStyles.add(hash); 9064 } 9065 function registerDocument4(targetDocument) { 9066 const runtime = getRuntime4(); 9067 runtime.documents.set( 9068 targetDocument, 9069 (runtime.documents.get(targetDocument) ?? 0) + 1 9070 ); 9071 for (const [hash, css] of runtime.styles) { 9072 injectStyle4(targetDocument, hash, css); 9073 } 9074 return () => { 9075 const count = runtime.documents.get(targetDocument); 9076 if (count === void 0) { 9077 return; 9078 } 9079 if (count <= 1) { 9080 runtime.documents.delete(targetDocument); 9081 return; 9082 } 9083 runtime.documents.set(targetDocument, count - 1); 9084 }; 9085 } 9086 function registerStyle4(hash, css) { 9087 const runtime = getRuntime4(); 9088 runtime.styles.set(hash, css); 9089 for (const targetDocument of runtime.documents.keys()) { 9090 injectStyle4(targetDocument, hash, css); 9091 } 9092 } 9093 if (typeof process === "undefined" || true) { 9094 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}}}"); 9095 } 9096 var style_default3 = { "visually-hidden": "f37b9e2e191ebd66__visually-hidden" }; 9097 var VisuallyHidden = (0, import_element15.forwardRef)( 9098 function VisuallyHidden2({ render, ...restProps }, ref) { 9099 const element = useRender({ 9100 render, 9101 ref, 9102 props: mergeProps( 9103 { className: style_default3["visually-hidden"] }, 9104 restProps, 9105 { 9106 // @ts-expect-error Arbitrary data-* attributes aren't indexable on the typed div props. Kept hardcoded so consumers can't change or remove it. 9107 "data-visually-hidden": "" 9108 } 9109 ) 9110 }); 9111 return element; 9112 } 9113 ); 9114 9115 // packages/ui/build-module/stack/stack.mjs 9116 var import_element16 = __toESM(require_element(), 1); 9117 var STYLE_HASH_ATTRIBUTE5 = "data-wp-hash"; 9118 function getRuntime5() { 9119 const globalScope = globalThis; 9120 if (globalScope.__wpStyleRuntime) { 9121 return globalScope.__wpStyleRuntime; 9122 } 9123 globalScope.__wpStyleRuntime = { 9124 documents: /* @__PURE__ */ new Map(), 9125 styles: /* @__PURE__ */ new Map(), 9126 injectedStyles: /* @__PURE__ */ new WeakMap() 9127 }; 9128 if (typeof document !== "undefined") { 9129 registerDocument5(document); 9130 } 9131 return globalScope.__wpStyleRuntime; 9132 } 9133 function documentContainsStyleHash5(targetDocument, hash) { 9134 if (!targetDocument.head) { 9135 return false; 9136 } 9137 for (const style of targetDocument.head.querySelectorAll( 9138 `style[$STYLE_HASH_ATTRIBUTE5}]` 9139 )) { 9140 if (style.getAttribute(STYLE_HASH_ATTRIBUTE5) === hash) { 9141 return true; 9142 } 9143 } 9144 return false; 9145 } 9146 function injectStyle5(targetDocument, hash, css) { 9147 if (!targetDocument.head) { 9148 return; 9149 } 9150 const runtime = getRuntime5(); 9151 let injectedStyles = runtime.injectedStyles.get(targetDocument); 9152 if (!injectedStyles) { 9153 injectedStyles = /* @__PURE__ */ new Set(); 9154 runtime.injectedStyles.set(targetDocument, injectedStyles); 9155 } 9156 if (injectedStyles.has(hash)) { 9157 return; 9158 } 9159 if (documentContainsStyleHash5(targetDocument, hash)) { 9160 injectedStyles.add(hash); 9161 return; 9162 } 9163 const style = targetDocument.createElement("style"); 9164 style.setAttribute(STYLE_HASH_ATTRIBUTE5, hash); 9165 style.appendChild(targetDocument.createTextNode(css)); 9166 targetDocument.head.appendChild(style); 9167 injectedStyles.add(hash); 9168 } 9169 function registerDocument5(targetDocument) { 9170 const runtime = getRuntime5(); 9171 runtime.documents.set( 9172 targetDocument, 9173 (runtime.documents.get(targetDocument) ?? 0) + 1 9174 ); 9175 for (const [hash, css] of runtime.styles) { 9176 injectStyle5(targetDocument, hash, css); 9177 } 9178 return () => { 9179 const count = runtime.documents.get(targetDocument); 9180 if (count === void 0) { 9181 return; 9182 } 9183 if (count <= 1) { 9184 runtime.documents.delete(targetDocument); 9185 return; 9186 } 9187 runtime.documents.set(targetDocument, count - 1); 9188 }; 9189 } 9190 function registerStyle5(hash, css) { 9191 const runtime = getRuntime5(); 9192 runtime.styles.set(hash, css); 9193 for (const targetDocument of runtime.documents.keys()) { 9194 injectStyle5(targetDocument, hash, css); 9195 } 9196 } 9197 if (typeof process === "undefined" || true) { 9198 registerStyle5("32aba35fe1", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._19ce0419607e1896__stack{display:flex}}}"); 9199 } 9200 var style_default4 = { "stack": "_19ce0419607e1896__stack" }; 9201 var gapTokens = { 9202 xs: "var(--wpds-dimension-gap-xs, 4px)", 9203 sm: "var(--wpds-dimension-gap-sm, 8px)", 9204 md: "var(--wpds-dimension-gap-md, 12px)", 9205 lg: "var(--wpds-dimension-gap-lg, 16px)", 9206 xl: "var(--wpds-dimension-gap-xl, 24px)", 9207 "2xl": "var(--wpds-dimension-gap-2xl, 32px)", 9208 "3xl": "var(--wpds-dimension-gap-3xl, 40px)" 9209 }; 9210 var Stack = (0, import_element16.forwardRef)(function Stack2({ direction, gap, align, justify, wrap, render, ...props }, ref) { 9211 const style = { 9212 gap: gap && gapTokens[gap], 9213 alignItems: align, 9214 justifyContent: justify, 9215 flexDirection: direction, 9216 flexWrap: wrap 9217 }; 9218 const element = useRender({ 9219 render, 9220 ref, 9221 props: mergeProps(props, { style, className: style_default4.stack }) 9222 }); 9223 return element; 9224 }); 9225 9226 // packages/admin-ui/build-module/navigable-region/index.mjs 9227 var import_element17 = __toESM(require_element(), 1); 9228 var import_jsx_runtime24 = __toESM(require_jsx_runtime(), 1); 9229 var NavigableRegion = (0, import_element17.forwardRef)( 9230 ({ children, className, ariaLabel, as: Tag = "div", ...props }, ref) => { 9231 return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)( 9232 Tag, 9233 { 9234 ref, 9235 className: clsx_default("admin-ui-navigable-region", className), 9236 "aria-label": ariaLabel, 9237 role: "region", 9238 tabIndex: "-1", 9239 ...props, 9240 children 9241 } 9242 ); 9243 } 9244 ); 9245 NavigableRegion.displayName = "NavigableRegion"; 9246 var navigable_region_default = NavigableRegion; 9247 9248 // packages/admin-ui/build-module/admin-theme-colors/index.mjs 9249 var DEFAULT_THEME_COLORS = { 9250 primary: "#3858e9", 9251 background: "#222524" 9252 }; 9253 var ADMIN_THEME_COLORS = /* @__PURE__ */ new Map([ 9254 ["modern", DEFAULT_THEME_COLORS], 9255 ["fresh", { primary: "#007cba", background: "#25292b" }], 9256 ["midnight", { primary: "#cf4339", background: "#3d4042" }], 9257 ["coffee", { primary: "#916745", background: "#5b534d" }], 9258 ["ocean", { primary: "#567958", background: "#5f787f" }], 9259 ["blue", { primary: "#437aa8", background: "#3876a8" }], 9260 ["ectoplasm", { primary: "#646c3e", background: "#4f386e" }], 9261 ["sunrise", { primary: "#ad631e", background: "#cc4541" }], 9262 ["light", { primary: "#007cba", background: "#eaeeed" }] 9263 ]); 9264 function getAdminThemeColors() { 9265 const scheme = document.body.className.match(/admin-color-([\w-]+)/)?.[1] ?? "modern"; 9266 return ADMIN_THEME_COLORS.get(scheme) ?? DEFAULT_THEME_COLORS; 9267 } 9268 9269 // packages/edit-post/build-module/components/layout/index.mjs 9270 var import_editor19 = __toESM(require_editor(), 1); 9271 var import_data26 = __toESM(require_data(), 1); 9272 var import_block_editor2 = __toESM(require_block_editor(), 1); 9273 9274 // packages/global-styles-engine/build-module/utils/common.mjs 9275 var import_style_engine = __toESM(require_style_engine(), 1); 9276 var ROOT_BLOCK_SELECTOR = "body"; 9277 var ROOT_CSS_PROPERTIES_SELECTOR = ":root"; 9278 9279 // packages/global-styles-engine/build-module/core/render.mjs 9280 var import_blocks = __toESM(require_blocks(), 1); 9281 var import_style_engine2 = __toESM(require_style_engine(), 1); 9282 var import_data = __toESM(require_data(), 1); 9283 9284 // packages/global-styles-engine/build-module/utils/spacing.mjs 9285 function getSpacingPresetCssVar(value) { 9286 if (!value) { 9287 return; 9288 } 9289 const slug = value.match(/var:preset\|spacing\|(.+)/); 9290 if (!slug) { 9291 return value; 9292 } 9293 return `var(--wp--preset--spacing--$slug[1]})`; 9294 } 9295 9296 // packages/global-styles-engine/build-module/utils/gap.mjs 9297 function getGapBoxControlValueFromStyle(blockGapValue) { 9298 if (!blockGapValue) { 9299 return null; 9300 } 9301 const isValueString = typeof blockGapValue === "string"; 9302 return { 9303 top: isValueString ? blockGapValue : blockGapValue?.top, 9304 left: isValueString ? blockGapValue : blockGapValue?.left 9305 }; 9306 } 9307 function getGapCSSValue(blockGapValue, defaultValue = "0") { 9308 const blockGapBoxControlValue = getGapBoxControlValueFromStyle(blockGapValue); 9309 if (!blockGapBoxControlValue) { 9310 return null; 9311 } 9312 const row = getSpacingPresetCssVar(blockGapBoxControlValue?.top) || defaultValue; 9313 const column = getSpacingPresetCssVar(blockGapBoxControlValue?.left) || defaultValue; 9314 return row === column ? row : `$row} $column}`; 9315 } 9316 9317 // packages/global-styles-engine/build-module/utils/layout.mjs 9318 var LAYOUT_DEFINITIONS = { 9319 default: { 9320 name: "default", 9321 slug: "flow", 9322 className: "is-layout-flow", 9323 baseStyles: [ 9324 { 9325 selector: " > .alignleft", 9326 rules: { 9327 float: "left", 9328 "margin-inline-start": "0", 9329 "margin-inline-end": "2em" 9330 } 9331 }, 9332 { 9333 selector: " > .alignright", 9334 rules: { 9335 float: "right", 9336 "margin-inline-start": "2em", 9337 "margin-inline-end": "0" 9338 } 9339 }, 9340 { 9341 selector: " > .aligncenter", 9342 rules: { 9343 "margin-left": "auto !important", 9344 "margin-right": "auto !important" 9345 } 9346 } 9347 ], 9348 spacingStyles: [ 9349 { 9350 selector: " > :first-child", 9351 rules: { 9352 "margin-block-start": "0" 9353 } 9354 }, 9355 { 9356 selector: " > :last-child", 9357 rules: { 9358 "margin-block-end": "0" 9359 } 9360 }, 9361 { 9362 selector: " > *", 9363 rules: { 9364 "margin-block-start": null, 9365 "margin-block-end": "0" 9366 } 9367 } 9368 ] 9369 }, 9370 constrained: { 9371 name: "constrained", 9372 slug: "constrained", 9373 className: "is-layout-constrained", 9374 baseStyles: [ 9375 { 9376 selector: " > .alignleft", 9377 rules: { 9378 float: "left", 9379 "margin-inline-start": "0", 9380 "margin-inline-end": "2em" 9381 } 9382 }, 9383 { 9384 selector: " > .alignright", 9385 rules: { 9386 float: "right", 9387 "margin-inline-start": "2em", 9388 "margin-inline-end": "0" 9389 } 9390 }, 9391 { 9392 selector: " > .aligncenter", 9393 rules: { 9394 "margin-left": "auto !important", 9395 "margin-right": "auto !important" 9396 } 9397 }, 9398 { 9399 selector: " > :where(:not(.alignleft):not(.alignright):not(.alignfull))", 9400 rules: { 9401 "max-width": "var(--wp--style--global--content-size)", 9402 "margin-left": "auto !important", 9403 "margin-right": "auto !important" 9404 } 9405 }, 9406 { 9407 selector: " > .alignwide", 9408 rules: { 9409 "max-width": "var(--wp--style--global--wide-size)" 9410 } 9411 } 9412 ], 9413 spacingStyles: [ 9414 { 9415 selector: " > :first-child", 9416 rules: { 9417 "margin-block-start": "0" 9418 } 9419 }, 9420 { 9421 selector: " > :last-child", 9422 rules: { 9423 "margin-block-end": "0" 9424 } 9425 }, 9426 { 9427 selector: " > *", 9428 rules: { 9429 "margin-block-start": null, 9430 "margin-block-end": "0" 9431 } 9432 } 9433 ] 9434 }, 9435 flex: { 9436 name: "flex", 9437 slug: "flex", 9438 className: "is-layout-flex", 9439 displayMode: "flex", 9440 baseStyles: [ 9441 { 9442 selector: "", 9443 rules: { 9444 "flex-wrap": "wrap", 9445 "align-items": "center" 9446 } 9447 }, 9448 { 9449 selector: " > :is(*, div)", 9450 // :is(*, div) instead of just * increases the specificity by 001. 9451 rules: { 9452 margin: "0" 9453 } 9454 } 9455 ], 9456 spacingStyles: [ 9457 { 9458 selector: "", 9459 rules: { 9460 gap: null 9461 } 9462 } 9463 ] 9464 }, 9465 grid: { 9466 name: "grid", 9467 slug: "grid", 9468 className: "is-layout-grid", 9469 displayMode: "grid", 9470 baseStyles: [ 9471 { 9472 selector: " > :is(*, div)", 9473 // :is(*, div) instead of just * increases the specificity by 001. 9474 rules: { 9475 margin: "0" 9476 } 9477 } 9478 ], 9479 spacingStyles: [ 9480 { 9481 selector: "", 9482 rules: { 9483 gap: null 9484 } 9485 } 9486 ] 9487 } 9488 }; 9489 9490 // packages/global-styles-engine/build-module/core/render.mjs 9491 function getLayoutStyles({ 9492 layoutDefinitions = LAYOUT_DEFINITIONS, 9493 style, 9494 selector, 9495 hasBlockGapSupport, 9496 hasFallbackGapSupport, 9497 fallbackGapValue 9498 }) { 9499 let ruleset = ""; 9500 const blockGapValue = style?.spacing?.blockGap; 9501 let gapValue = hasBlockGapSupport ? getGapCSSValue(blockGapValue) : ""; 9502 if (hasFallbackGapSupport) { 9503 if (selector === ROOT_BLOCK_SELECTOR) { 9504 gapValue = !gapValue ? "0.5em" : gapValue; 9505 } else if (!hasBlockGapSupport && fallbackGapValue) { 9506 gapValue = fallbackGapValue; 9507 } 9508 } 9509 const rowGapValue = hasBlockGapSupport && blockGapValue && typeof blockGapValue !== "string" ? getGapCSSValue(blockGapValue.top) : gapValue; 9510 if (gapValue && layoutDefinitions) { 9511 Object.values(layoutDefinitions).forEach( 9512 ({ className, name, spacingStyles }) => { 9513 if (!hasBlockGapSupport && "flex" !== name && "grid" !== name) { 9514 return; 9515 } 9516 const layoutGapValue = ["default", "constrained"].includes( 9517 name 9518 ) ? rowGapValue : gapValue; 9519 if (spacingStyles?.length) { 9520 spacingStyles.forEach((spacingStyle) => { 9521 const declarations = []; 9522 if (spacingStyle.rules) { 9523 Object.entries(spacingStyle.rules).forEach( 9524 ([cssProperty, cssValue]) => { 9525 declarations.push( 9526 `$cssProperty}: $cssValue ? cssValue : layoutGapValue}` 9527 ); 9528 } 9529 ); 9530 } 9531 if (declarations.length) { 9532 let combinedSelector = ""; 9533 if (!hasBlockGapSupport) { 9534 combinedSelector = selector === ROOT_BLOCK_SELECTOR ? `:where(.$className}$spacingStyle?.selector || ""})` : `:where($selector}.$className}$spacingStyle?.selector || ""})`; 9535 } else { 9536 combinedSelector = selector === ROOT_BLOCK_SELECTOR ? `:root :where(.$className})$spacingStyle?.selector || ""}` : `:root :where($selector}-$className})$spacingStyle?.selector || ""}`; 9537 } 9538 ruleset += `$combinedSelector} { $declarations.join( 9539 "; " 9540 )}; }`; 9541 } 9542 }); 9543 } 9544 } 9545 ); 9546 if (selector === ROOT_BLOCK_SELECTOR && hasBlockGapSupport) { 9547 ruleset += `$ROOT_CSS_PROPERTIES_SELECTOR} { --wp--style--block-gap: $gapValue}; }`; 9548 } 9549 } 9550 if (selector === ROOT_BLOCK_SELECTOR && layoutDefinitions) { 9551 const validDisplayModes = ["block", "flex", "grid"]; 9552 Object.values(layoutDefinitions).forEach( 9553 ({ className, displayMode, baseStyles }) => { 9554 if (displayMode && validDisplayModes.includes(displayMode)) { 9555 ruleset += `$selector} .$className} { display:$displayMode}; }`; 9556 } 9557 if (baseStyles?.length) { 9558 baseStyles.forEach((baseStyle) => { 9559 const declarations = []; 9560 if (baseStyle.rules) { 9561 Object.entries(baseStyle.rules).forEach( 9562 ([cssProperty, cssValue]) => { 9563 declarations.push( 9564 `$cssProperty}: $cssValue}` 9565 ); 9566 } 9567 ); 9568 } 9569 if (declarations.length) { 9570 const combinedSelector = `.$className}$baseStyle?.selector || ""}`; 9571 ruleset += `$combinedSelector} { $declarations.join( 9572 "; " 9573 )}; }`; 9574 } 9575 }); 9576 } 9577 } 9578 ); 9579 } 9580 return ruleset; 9581 } 9582 9583 // packages/edit-post/build-module/components/layout/index.mjs 9584 var import_plugins = __toESM(require_plugins(), 1); 9585 var import_i18n15 = __toESM(require_i18n(), 1); 9586 var import_element29 = __toESM(require_element(), 1); 9587 var import_notices3 = __toESM(require_notices(), 1); 9588 var import_preferences10 = __toESM(require_preferences(), 1); 9589 var import_commands2 = __toESM(require_commands(), 1); 9590 var import_url6 = __toESM(require_url(), 1); 9591 var import_html_entities = __toESM(require_html_entities(), 1); 9592 var import_core_data9 = __toESM(require_core_data(), 1); 9593 var import_components8 = __toESM(require_components(), 1); 9594 var import_compose2 = __toESM(require_compose(), 1); 9595 var import_theme = __toESM(require_theme(), 1); 9596 9597 // packages/edit-post/build-module/components/back-button/index.mjs 9598 var import_editor2 = __toESM(require_editor(), 1); 9599 var import_components2 = __toESM(require_components(), 1); 9600 var import_preferences = __toESM(require_preferences(), 1); 9601 var import_data3 = __toESM(require_data(), 1); 9602 9603 // packages/edit-post/build-module/components/back-button/fullscreen-mode-close.mjs 9604 var import_data2 = __toESM(require_data(), 1); 9605 var import_components = __toESM(require_components(), 1); 9606 var import_i18n2 = __toESM(require_i18n(), 1); 9607 var import_url = __toESM(require_url(), 1); 9608 var import_editor = __toESM(require_editor(), 1); 9609 var import_core_data = __toESM(require_core_data(), 1); 9610 var import_jsx_runtime25 = __toESM(require_jsx_runtime(), 1); 9611 function FullscreenModeClose({ showTooltip, icon, href, initialPost }) { 9612 const postType = (0, import_data2.useSelect)( 9613 (select3) => { 9614 const { getCurrentPostType } = select3(import_editor.store); 9615 const { getPostType } = select3(import_core_data.store); 9616 return getPostType(initialPost?.type || getCurrentPostType()); 9617 }, 9618 [initialPost?.type] 9619 ); 9620 if (!postType) { 9621 return null; 9622 } 9623 const buttonHref = href ?? (0, import_url.addQueryArgs)("edit.php", { 9624 post_type: postType.slug 9625 }); 9626 const buttonLabel = postType?.labels?.view_items ?? (0, import_i18n2.__)("Back"); 9627 return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( 9628 import_components.Button, 9629 { 9630 size: "compact", 9631 href: buttonHref, 9632 label: buttonLabel, 9633 showTooltip, 9634 tooltipPosition: "bottom", 9635 icon: icon ?? ((0, import_i18n2.isRTL)() ? chevron_right_default : chevron_left_default) 9636 } 9637 ); 9638 } 9639 var fullscreen_mode_close_default = FullscreenModeClose; 9640 9641 // packages/edit-post/build-module/lock-unlock.mjs 9642 var import_private_apis2 = __toESM(require_private_apis(), 1); 9643 var { lock: lock2, unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( 9644 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", 9645 "@wordpress/edit-post" 9646 ); 9647 9648 // packages/edit-post/build-module/components/back-button/index.mjs 9649 var import_jsx_runtime26 = __toESM(require_jsx_runtime(), 1); 9650 var { BackButton: BackButtonFill } = unlock2(import_editor2.privateApis); 9651 var slideX = { 9652 hidden: { x: "-100%" }, 9653 distractionFreeInactive: { x: 0 }, 9654 hover: { x: 0, transition: { type: "tween", delay: 0.2 } } 9655 }; 9656 function BackButton({ initialPost }) { 9657 const showIconLabels = (0, import_data3.useSelect)((select3) => { 9658 return select3(import_preferences.store).get("core", "showIconLabels"); 9659 }, []); 9660 return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(BackButtonFill, { children: ({ length }) => length <= 1 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( 9661 import_components2.__unstableMotion.div, 9662 { 9663 variants: slideX, 9664 transition: { type: "tween", delay: 0.8 }, 9665 children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)( 9666 fullscreen_mode_close_default, 9667 { 9668 showTooltip: !showIconLabels, 9669 initialPost 9670 } 9671 ) 9672 } 9673 ) }); 9674 } 9675 var back_button_default = BackButton; 9676 9677 // packages/edit-post/build-module/components/editor-initialization/listener-hooks.mjs 9678 var import_data4 = __toESM(require_data(), 1); 9679 var import_element18 = __toESM(require_element(), 1); 9680 var import_editor3 = __toESM(require_editor(), 1); 9681 var import_core_data2 = __toESM(require_core_data(), 1); 9682 9683 // packages/edit-post/build-module/store/constants.mjs 9684 var STORE_NAME = "core/edit-post"; 9685 var VIEW_AS_LINK_SELECTOR = "#wp-admin-bar-view a"; 9686 var VIEW_AS_PREVIEW_LINK_SELECTOR = "#wp-admin-bar-preview a"; 9687 9688 // packages/edit-post/build-module/components/editor-initialization/listener-hooks.mjs 9689 var useUpdatePostLinkListener = () => { 9690 const { isViewable, newPermalink } = (0, import_data4.useSelect)((select3) => { 9691 const { getPostType } = select3(import_core_data2.store); 9692 const { getCurrentPost, getEditedPostAttribute } = select3(import_editor3.store); 9693 const postType = getPostType(getEditedPostAttribute("type")); 9694 return { 9695 isViewable: postType?.viewable, 9696 newPermalink: getCurrentPost().link 9697 }; 9698 }, []); 9699 const nodeToUpdateRef = (0, import_element18.useRef)(); 9700 (0, import_element18.useEffect)(() => { 9701 nodeToUpdateRef.current = document.querySelector(VIEW_AS_PREVIEW_LINK_SELECTOR) || document.querySelector(VIEW_AS_LINK_SELECTOR); 9702 }, []); 9703 (0, import_element18.useEffect)(() => { 9704 if (!newPermalink || !nodeToUpdateRef.current) { 9705 return; 9706 } 9707 if (!isViewable) { 9708 nodeToUpdateRef.current.style.display = "none"; 9709 return; 9710 } 9711 nodeToUpdateRef.current.style.display = ""; 9712 nodeToUpdateRef.current.setAttribute("href", newPermalink); 9713 }, [newPermalink, isViewable]); 9714 }; 9715 9716 // packages/edit-post/build-module/components/editor-initialization/index.mjs 9717 function EditorInitialization() { 9718 useUpdatePostLinkListener(); 9719 return null; 9720 } 9721 9722 // packages/edit-post/build-module/components/keyboard-shortcuts/index.mjs 9723 var import_element19 = __toESM(require_element(), 1); 9724 var import_data8 = __toESM(require_data(), 1); 9725 var import_keyboard_shortcuts = __toESM(require_keyboard_shortcuts(), 1); 9726 var import_i18n4 = __toESM(require_i18n(), 1); 9727 9728 // packages/edit-post/build-module/store/index.mjs 9729 var import_data7 = __toESM(require_data(), 1); 9730 9731 // packages/edit-post/build-module/store/reducer.mjs 9732 var import_data5 = __toESM(require_data(), 1); 9733 function isSavingMetaBoxes(state = false, action) { 9734 switch (action.type) { 9735 case "REQUEST_META_BOX_UPDATES": 9736 return true; 9737 case "META_BOX_UPDATES_SUCCESS": 9738 case "META_BOX_UPDATES_FAILURE": 9739 return false; 9740 default: 9741 return state; 9742 } 9743 } 9744 function mergeMetaboxes(metaboxes = [], newMetaboxes) { 9745 const mergedMetaboxes = [...metaboxes]; 9746 for (const metabox of newMetaboxes) { 9747 const existing = mergedMetaboxes.findIndex( 9748 (box) => box.id === metabox.id 9749 ); 9750 if (existing !== -1) { 9751 mergedMetaboxes[existing] = { 9752 ...mergedMetaboxes[existing], 9753 ...metabox 9754 }; 9755 } else { 9756 mergedMetaboxes.push(metabox); 9757 } 9758 } 9759 return mergedMetaboxes; 9760 } 9761 function metaBoxLocations(state = {}, action) { 9762 switch (action.type) { 9763 case "SET_META_BOXES_PER_LOCATIONS": { 9764 const newState = { ...state }; 9765 for (const [location, metaboxes] of Object.entries( 9766 action.metaBoxesPerLocation 9767 )) { 9768 newState[location] = mergeMetaboxes( 9769 newState[location], 9770 metaboxes 9771 ); 9772 } 9773 return newState; 9774 } 9775 } 9776 return state; 9777 } 9778 function metaBoxesInitialized(state = false, action) { 9779 switch (action.type) { 9780 case "META_BOXES_INITIALIZED": 9781 return true; 9782 } 9783 return state; 9784 } 9785 var metaBoxes = (0, import_data5.combineReducers)({ 9786 isSaving: isSavingMetaBoxes, 9787 locations: metaBoxLocations, 9788 initialized: metaBoxesInitialized 9789 }); 9790 var reducer_default = (0, import_data5.combineReducers)({ 9791 metaBoxes 9792 }); 9793 9794 // packages/edit-post/build-module/store/actions.mjs 9795 var actions_exports = {}; 9796 __export(actions_exports, { 9797 __experimentalSetPreviewDeviceType: () => __experimentalSetPreviewDeviceType, 9798 __unstableCreateTemplate: () => __unstableCreateTemplate, 9799 closeGeneralSidebar: () => closeGeneralSidebar, 9800 closeModal: () => closeModal, 9801 closePublishSidebar: () => closePublishSidebar, 9802 hideBlockTypes: () => hideBlockTypes, 9803 initializeMetaBoxes: () => initializeMetaBoxes, 9804 metaBoxUpdatesFailure: () => metaBoxUpdatesFailure, 9805 metaBoxUpdatesSuccess: () => metaBoxUpdatesSuccess, 9806 openGeneralSidebar: () => openGeneralSidebar, 9807 openModal: () => openModal, 9808 openPublishSidebar: () => openPublishSidebar, 9809 removeEditorPanel: () => removeEditorPanel, 9810 requestMetaBoxUpdates: () => requestMetaBoxUpdates, 9811 setAvailableMetaBoxesPerLocation: () => setAvailableMetaBoxesPerLocation, 9812 setIsEditingTemplate: () => setIsEditingTemplate, 9813 setIsInserterOpened: () => setIsInserterOpened, 9814 setIsListViewOpened: () => setIsListViewOpened, 9815 showBlockTypes: () => showBlockTypes, 9816 switchEditorMode: () => switchEditorMode, 9817 toggleDistractionFree: () => toggleDistractionFree, 9818 toggleEditorPanelEnabled: () => toggleEditorPanelEnabled, 9819 toggleEditorPanelOpened: () => toggleEditorPanelOpened, 9820 toggleFeature: () => toggleFeature, 9821 toggleFullscreenMode: () => toggleFullscreenMode, 9822 togglePinnedPluginItem: () => togglePinnedPluginItem, 9823 togglePublishSidebar: () => togglePublishSidebar, 9824 updatePreferredStyleVariations: () => updatePreferredStyleVariations 9825 }); 9826 var import_api_fetch = __toESM(require_api_fetch(), 1); 9827 var import_preferences2 = __toESM(require_preferences(), 1); 9828 var import_editor4 = __toESM(require_editor(), 1); 9829 var import_deprecated = __toESM(require_deprecated(), 1); 9830 var import_hooks = __toESM(require_hooks(), 1); 9831 var import_core_data3 = __toESM(require_core_data(), 1); 9832 var import_notices = __toESM(require_notices(), 1); 9833 var import_i18n3 = __toESM(require_i18n(), 1); 9834 9835 // packages/edit-post/build-module/utils/meta-boxes.mjs 9836 var getMetaBoxContainer = (location) => { 9837 const area = document.querySelector( 9838 `.edit-post-meta-boxes-area.is-$location} .metabox-location-$location}` 9839 ); 9840 if (area) { 9841 return area; 9842 } 9843 return document.querySelector("#metaboxes .metabox-location-" + location); 9844 }; 9845 9846 // packages/edit-post/build-module/store/actions.mjs 9847 var { interfaceStore } = unlock2(import_editor4.privateApis); 9848 var openGeneralSidebar = (name) => ({ registry }) => { 9849 registry.dispatch(interfaceStore).enableComplementaryArea("core", name); 9850 }; 9851 var closeGeneralSidebar = () => ({ registry }) => registry.dispatch(interfaceStore).disableComplementaryArea("core"); 9852 var openModal = (name) => ({ registry }) => { 9853 (0, import_deprecated.default)("select( 'core/edit-post' ).openModal( name )", { 9854 since: "6.3", 9855 alternative: "select( 'core/interface').openModal( name )" 9856 }); 9857 return registry.dispatch(interfaceStore).openModal(name); 9858 }; 9859 var closeModal = () => ({ registry }) => { 9860 (0, import_deprecated.default)("select( 'core/edit-post' ).closeModal()", { 9861 since: "6.3", 9862 alternative: "select( 'core/interface').closeModal()" 9863 }); 9864 return registry.dispatch(interfaceStore).closeModal(); 9865 }; 9866 var openPublishSidebar = () => ({ registry }) => { 9867 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).openPublishSidebar", { 9868 since: "6.6", 9869 alternative: "dispatch( 'core/editor').openPublishSidebar" 9870 }); 9871 registry.dispatch(import_editor4.store).openPublishSidebar(); 9872 }; 9873 var closePublishSidebar = () => ({ registry }) => { 9874 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).closePublishSidebar", { 9875 since: "6.6", 9876 alternative: "dispatch( 'core/editor').closePublishSidebar" 9877 }); 9878 registry.dispatch(import_editor4.store).closePublishSidebar(); 9879 }; 9880 var togglePublishSidebar = () => ({ registry }) => { 9881 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).togglePublishSidebar", { 9882 since: "6.6", 9883 alternative: "dispatch( 'core/editor').togglePublishSidebar" 9884 }); 9885 registry.dispatch(import_editor4.store).togglePublishSidebar(); 9886 }; 9887 var toggleEditorPanelEnabled = (panelName) => ({ registry }) => { 9888 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).toggleEditorPanelEnabled", { 9889 since: "6.5", 9890 alternative: "dispatch( 'core/editor').toggleEditorPanelEnabled" 9891 }); 9892 registry.dispatch(import_editor4.store).toggleEditorPanelEnabled(panelName); 9893 }; 9894 var toggleEditorPanelOpened = (panelName) => ({ registry }) => { 9895 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).toggleEditorPanelOpened", { 9896 since: "6.5", 9897 alternative: "dispatch( 'core/editor').toggleEditorPanelOpened" 9898 }); 9899 registry.dispatch(import_editor4.store).toggleEditorPanelOpened(panelName); 9900 }; 9901 var removeEditorPanel = (panelName) => ({ registry }) => { 9902 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).removeEditorPanel", { 9903 since: "6.5", 9904 alternative: "dispatch( 'core/editor').removeEditorPanel" 9905 }); 9906 registry.dispatch(import_editor4.store).removeEditorPanel(panelName); 9907 }; 9908 var toggleFeature = (feature) => ({ registry }) => registry.dispatch(import_preferences2.store).toggle("core/edit-post", feature); 9909 var switchEditorMode = (mode) => ({ registry }) => { 9910 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).switchEditorMode", { 9911 since: "6.6", 9912 alternative: "dispatch( 'core/editor').switchEditorMode" 9913 }); 9914 registry.dispatch(import_editor4.store).switchEditorMode(mode); 9915 }; 9916 var togglePinnedPluginItem = (pluginName) => ({ registry }) => { 9917 const isPinned = registry.select(interfaceStore).isItemPinned("core", pluginName); 9918 registry.dispatch(interfaceStore)[isPinned ? "unpinItem" : "pinItem"]("core", pluginName); 9919 }; 9920 function updatePreferredStyleVariations() { 9921 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).updatePreferredStyleVariations", { 9922 since: "6.6", 9923 hint: "Preferred Style Variations are not supported anymore." 9924 }); 9925 return { type: "NOTHING" }; 9926 } 9927 var showBlockTypes = (blockNames) => ({ registry }) => { 9928 unlock2(registry.dispatch(import_editor4.store)).showBlockTypes(blockNames); 9929 }; 9930 var hideBlockTypes = (blockNames) => ({ registry }) => { 9931 unlock2(registry.dispatch(import_editor4.store)).hideBlockTypes(blockNames); 9932 }; 9933 function setAvailableMetaBoxesPerLocation(metaBoxesPerLocation) { 9934 return { 9935 type: "SET_META_BOXES_PER_LOCATIONS", 9936 metaBoxesPerLocation 9937 }; 9938 } 9939 var requestMetaBoxUpdates = () => async ({ registry, select: select3, dispatch: dispatch2 }) => { 9940 dispatch2({ 9941 type: "REQUEST_META_BOX_UPDATES" 9942 }); 9943 if (window.tinyMCE) { 9944 window.tinyMCE.triggerSave(); 9945 } 9946 const baseFormData = new window.FormData( 9947 document.querySelector(".metabox-base-form") 9948 ); 9949 const postId = baseFormData.get("post_ID"); 9950 const postType = baseFormData.get("post_type"); 9951 const post = registry.select(import_core_data3.store).getEditedEntityRecord("postType", postType, postId); 9952 const additionalData = [ 9953 post.comment_status ? ["comment_status", post.comment_status] : false, 9954 post.ping_status ? ["ping_status", post.ping_status] : false, 9955 post.sticky ? ["sticky", post.sticky] : false, 9956 post.author ? ["post_author", post.author] : false 9957 ].filter(Boolean); 9958 const activeMetaBoxLocations = select3.getActiveMetaBoxLocations(); 9959 const formDataToMerge = [ 9960 baseFormData, 9961 ...activeMetaBoxLocations.map( 9962 (location) => new window.FormData(getMetaBoxContainer(location)) 9963 ) 9964 ]; 9965 const formData = formDataToMerge.reduce((memo, currentFormData) => { 9966 for (const [key, value] of currentFormData) { 9967 memo.append(key, value); 9968 } 9969 return memo; 9970 }, new window.FormData()); 9971 additionalData.forEach( 9972 ([key, value]) => formData.append(key, value) 9973 ); 9974 try { 9975 await (0, import_api_fetch.default)({ 9976 url: window._wpMetaBoxUrl, 9977 method: "POST", 9978 body: formData, 9979 parse: false 9980 }); 9981 dispatch2.metaBoxUpdatesSuccess(); 9982 } catch { 9983 dispatch2.metaBoxUpdatesFailure(); 9984 } 9985 }; 9986 function metaBoxUpdatesSuccess() { 9987 return { 9988 type: "META_BOX_UPDATES_SUCCESS" 9989 }; 9990 } 9991 function metaBoxUpdatesFailure() { 9992 return { 9993 type: "META_BOX_UPDATES_FAILURE" 9994 }; 9995 } 9996 var __experimentalSetPreviewDeviceType = (deviceType) => ({ registry }) => { 9997 (0, import_deprecated.default)( 9998 "dispatch( 'core/edit-post' ).__experimentalSetPreviewDeviceType", 9999 { 10000 since: "6.5", 10001 version: "6.7", 10002 hint: "registry.dispatch( editorStore ).setDeviceType" 10003 } 10004 ); 10005 registry.dispatch(import_editor4.store).setDeviceType(deviceType); 10006 }; 10007 var setIsInserterOpened = (value) => ({ registry }) => { 10008 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).setIsInserterOpened", { 10009 since: "6.5", 10010 alternative: "dispatch( 'core/editor').setIsInserterOpened" 10011 }); 10012 registry.dispatch(import_editor4.store).setIsInserterOpened(value); 10013 }; 10014 var setIsListViewOpened = (isOpen) => ({ registry }) => { 10015 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).setIsListViewOpened", { 10016 since: "6.5", 10017 alternative: "dispatch( 'core/editor').setIsListViewOpened" 10018 }); 10019 registry.dispatch(import_editor4.store).setIsListViewOpened(isOpen); 10020 }; 10021 function setIsEditingTemplate() { 10022 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).setIsEditingTemplate", { 10023 since: "6.5", 10024 alternative: "dispatch( 'core/editor').setRenderingMode" 10025 }); 10026 return { type: "NOTHING" }; 10027 } 10028 function __unstableCreateTemplate() { 10029 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).__unstableCreateTemplate", { 10030 since: "6.5" 10031 }); 10032 return { type: "NOTHING" }; 10033 } 10034 var metaBoxesInitialized2 = false; 10035 var initializeMetaBoxes = () => ({ registry, select: select3, dispatch: dispatch2 }) => { 10036 const isEditorReady = registry.select(import_editor4.store).__unstableIsEditorReady(); 10037 if (!isEditorReady) { 10038 return; 10039 } 10040 if (metaBoxesInitialized2) { 10041 return; 10042 } 10043 const postType = registry.select(import_editor4.store).getCurrentPostType(); 10044 if (window.postboxes.page !== postType) { 10045 window.postboxes.add_postbox_toggles(postType); 10046 } 10047 metaBoxesInitialized2 = true; 10048 (0, import_hooks.addAction)( 10049 "editor.savePost", 10050 "core/edit-post/save-metaboxes", 10051 async (post, options) => { 10052 if (!options.isAutosave && select3.hasMetaBoxes()) { 10053 await dispatch2.requestMetaBoxUpdates(); 10054 } 10055 } 10056 ); 10057 dispatch2({ 10058 type: "META_BOXES_INITIALIZED" 10059 }); 10060 }; 10061 var toggleDistractionFree = () => ({ registry }) => { 10062 (0, import_deprecated.default)("dispatch( 'core/edit-post' ).toggleDistractionFree", { 10063 since: "6.6", 10064 alternative: "dispatch( 'core/editor').toggleDistractionFree" 10065 }); 10066 registry.dispatch(import_editor4.store).toggleDistractionFree(); 10067 }; 10068 var toggleFullscreenMode = () => ({ registry }) => { 10069 const isFullscreen = registry.select(import_preferences2.store).get("core/edit-post", "fullscreenMode"); 10070 registry.dispatch(import_preferences2.store).toggle("core/edit-post", "fullscreenMode"); 10071 registry.dispatch(import_notices.store).createInfoNotice( 10072 isFullscreen ? (0, import_i18n3.__)("Fullscreen mode deactivated.") : (0, import_i18n3.__)("Fullscreen mode activated."), 10073 { 10074 id: "core/edit-post/toggle-fullscreen-mode/notice", 10075 type: "snackbar", 10076 actions: [ 10077 { 10078 label: (0, import_i18n3.__)("Undo"), 10079 onClick: () => { 10080 registry.dispatch(import_preferences2.store).toggle( 10081 "core/edit-post", 10082 "fullscreenMode" 10083 ); 10084 } 10085 } 10086 ] 10087 } 10088 ); 10089 }; 10090 10091 // packages/edit-post/build-module/store/selectors.mjs 10092 var selectors_exports = {}; 10093 __export(selectors_exports, { 10094 __experimentalGetInsertionPoint: () => __experimentalGetInsertionPoint, 10095 __experimentalGetPreviewDeviceType: () => __experimentalGetPreviewDeviceType, 10096 areMetaBoxesInitialized: () => areMetaBoxesInitialized, 10097 getActiveGeneralSidebarName: () => getActiveGeneralSidebarName, 10098 getActiveMetaBoxLocations: () => getActiveMetaBoxLocations, 10099 getAllMetaBoxes: () => getAllMetaBoxes, 10100 getEditedPostTemplate: () => getEditedPostTemplate, 10101 getEditorMode: () => getEditorMode, 10102 getHiddenBlockTypes: () => getHiddenBlockTypes, 10103 getMetaBoxesPerLocation: () => getMetaBoxesPerLocation, 10104 getPreference: () => getPreference, 10105 getPreferences: () => getPreferences, 10106 hasMetaBoxes: () => hasMetaBoxes, 10107 isEditingTemplate: () => isEditingTemplate, 10108 isEditorPanelEnabled: () => isEditorPanelEnabled, 10109 isEditorPanelOpened: () => isEditorPanelOpened, 10110 isEditorPanelRemoved: () => isEditorPanelRemoved, 10111 isEditorSidebarOpened: () => isEditorSidebarOpened, 10112 isFeatureActive: () => isFeatureActive, 10113 isInserterOpened: () => isInserterOpened, 10114 isListViewOpened: () => isListViewOpened, 10115 isMetaBoxLocationActive: () => isMetaBoxLocationActive, 10116 isMetaBoxLocationVisible: () => isMetaBoxLocationVisible, 10117 isModalActive: () => isModalActive, 10118 isPluginItemPinned: () => isPluginItemPinned, 10119 isPluginSidebarOpened: () => isPluginSidebarOpened, 10120 isPublishSidebarOpened: () => isPublishSidebarOpened, 10121 isSavingMetaBoxes: () => isSavingMetaBoxes2 10122 }); 10123 var import_data6 = __toESM(require_data(), 1); 10124 var import_preferences3 = __toESM(require_preferences(), 1); 10125 var import_core_data4 = __toESM(require_core_data(), 1); 10126 var import_editor5 = __toESM(require_editor(), 1); 10127 var import_deprecated2 = __toESM(require_deprecated(), 1); 10128 var { interfaceStore: interfaceStore2 } = unlock2(import_editor5.privateApis); 10129 var EMPTY_ARRAY2 = []; 10130 var EMPTY_OBJECT2 = {}; 10131 var getEditorMode = (0, import_data6.createRegistrySelector)( 10132 (select3) => () => select3(import_preferences3.store).get("core", "editorMode") ?? "visual" 10133 ); 10134 var isEditorSidebarOpened = (0, import_data6.createRegistrySelector)( 10135 (select3) => () => { 10136 const activeGeneralSidebar = select3(interfaceStore2).getActiveComplementaryArea("core"); 10137 return ["edit-post/document", "edit-post/block"].includes( 10138 activeGeneralSidebar 10139 ); 10140 } 10141 ); 10142 var isPluginSidebarOpened = (0, import_data6.createRegistrySelector)( 10143 (select3) => () => { 10144 const activeGeneralSidebar = select3(interfaceStore2).getActiveComplementaryArea("core"); 10145 return !!activeGeneralSidebar && !["edit-post/document", "edit-post/block"].includes( 10146 activeGeneralSidebar 10147 ); 10148 } 10149 ); 10150 var getActiveGeneralSidebarName = (0, import_data6.createRegistrySelector)( 10151 (select3) => () => { 10152 return select3(interfaceStore2).getActiveComplementaryArea("core"); 10153 } 10154 ); 10155 function convertPanelsToOldFormat(inactivePanels, openPanels) { 10156 const panelsWithEnabledState = inactivePanels?.reduce( 10157 (accumulatedPanels, panelName) => ({ 10158 ...accumulatedPanels, 10159 [panelName]: { 10160 enabled: false 10161 } 10162 }), 10163 {} 10164 ); 10165 const panels = openPanels?.reduce((accumulatedPanels, panelName) => { 10166 const currentPanelState = accumulatedPanels?.[panelName]; 10167 return { 10168 ...accumulatedPanels, 10169 [panelName]: { 10170 ...currentPanelState, 10171 opened: true 10172 } 10173 }; 10174 }, panelsWithEnabledState ?? {}); 10175 return panels ?? panelsWithEnabledState ?? EMPTY_OBJECT2; 10176 } 10177 var getPreferences = (0, import_data6.createRegistrySelector)((select3) => () => { 10178 (0, import_deprecated2.default)(`select( 'core/edit-post' ).getPreferences`, { 10179 since: "6.0", 10180 alternative: `select( 'core/preferences' ).get` 10181 }); 10182 const corePreferences = ["editorMode", "hiddenBlockTypes"].reduce( 10183 (accumulatedPrefs, preferenceKey) => { 10184 const value = select3(import_preferences3.store).get( 10185 "core", 10186 preferenceKey 10187 ); 10188 return { 10189 ...accumulatedPrefs, 10190 [preferenceKey]: value 10191 }; 10192 }, 10193 {} 10194 ); 10195 const inactivePanels = select3(import_preferences3.store).get( 10196 "core", 10197 "inactivePanels" 10198 ); 10199 const openPanels = select3(import_preferences3.store).get("core", "openPanels"); 10200 const panels = convertPanelsToOldFormat(inactivePanels, openPanels); 10201 return { 10202 ...corePreferences, 10203 panels 10204 }; 10205 }); 10206 function getPreference(state, preferenceKey, defaultValue) { 10207 (0, import_deprecated2.default)(`select( 'core/edit-post' ).getPreference`, { 10208 since: "6.0", 10209 alternative: `select( 'core/preferences' ).get` 10210 }); 10211 const preferences = getPreferences(state); 10212 const value = preferences[preferenceKey]; 10213 return value === void 0 ? defaultValue : value; 10214 } 10215 var getHiddenBlockTypes = (0, import_data6.createRegistrySelector)((select3) => () => { 10216 return select3(import_preferences3.store).get("core", "hiddenBlockTypes") ?? EMPTY_ARRAY2; 10217 }); 10218 var isPublishSidebarOpened = (0, import_data6.createRegistrySelector)( 10219 (select3) => () => { 10220 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isPublishSidebarOpened`, { 10221 since: "6.6", 10222 alternative: `select( 'core/editor' ).isPublishSidebarOpened` 10223 }); 10224 return select3(import_editor5.store).isPublishSidebarOpened(); 10225 } 10226 ); 10227 var isEditorPanelRemoved = (0, import_data6.createRegistrySelector)( 10228 (select3) => (state, panelName) => { 10229 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isEditorPanelRemoved`, { 10230 since: "6.5", 10231 alternative: `select( 'core/editor' ).isEditorPanelRemoved` 10232 }); 10233 return select3(import_editor5.store).isEditorPanelRemoved(panelName); 10234 } 10235 ); 10236 var isEditorPanelEnabled = (0, import_data6.createRegistrySelector)( 10237 (select3) => (state, panelName) => { 10238 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isEditorPanelEnabled`, { 10239 since: "6.5", 10240 alternative: `select( 'core/editor' ).isEditorPanelEnabled` 10241 }); 10242 return select3(import_editor5.store).isEditorPanelEnabled(panelName); 10243 } 10244 ); 10245 var isEditorPanelOpened = (0, import_data6.createRegistrySelector)( 10246 (select3) => (state, panelName) => { 10247 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isEditorPanelOpened`, { 10248 since: "6.5", 10249 alternative: `select( 'core/editor' ).isEditorPanelOpened` 10250 }); 10251 return select3(import_editor5.store).isEditorPanelOpened(panelName); 10252 } 10253 ); 10254 var isModalActive = (0, import_data6.createRegistrySelector)( 10255 (select3) => (state, modalName) => { 10256 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isModalActive`, { 10257 since: "6.3", 10258 alternative: `select( 'core/interface' ).isModalActive` 10259 }); 10260 return !!select3(interfaceStore2).isModalActive(modalName); 10261 } 10262 ); 10263 var isFeatureActive = (0, import_data6.createRegistrySelector)( 10264 (select3) => (state, feature) => { 10265 return !!select3(import_preferences3.store).get("core/edit-post", feature); 10266 } 10267 ); 10268 var isPluginItemPinned = (0, import_data6.createRegistrySelector)( 10269 (select3) => (state, pluginName) => { 10270 return select3(interfaceStore2).isItemPinned("core", pluginName); 10271 } 10272 ); 10273 var getActiveMetaBoxLocations = (0, import_data6.createSelector)( 10274 (state) => { 10275 return Object.keys(state.metaBoxes.locations).filter( 10276 (location) => isMetaBoxLocationActive(state, location) 10277 ); 10278 }, 10279 (state) => [state.metaBoxes.locations] 10280 ); 10281 var isMetaBoxLocationVisible = (0, import_data6.createRegistrySelector)( 10282 (select3) => (state, location) => { 10283 return isMetaBoxLocationActive(state, location) && getMetaBoxesPerLocation(state, location)?.some(({ id }) => { 10284 return select3(import_editor5.store).isEditorPanelEnabled( 10285 `meta-box-$id}` 10286 ); 10287 }); 10288 } 10289 ); 10290 function isMetaBoxLocationActive(state, location) { 10291 const metaBoxes2 = getMetaBoxesPerLocation(state, location); 10292 return !!metaBoxes2 && metaBoxes2.length !== 0; 10293 } 10294 function getMetaBoxesPerLocation(state, location) { 10295 return state.metaBoxes.locations[location]; 10296 } 10297 var getAllMetaBoxes = (0, import_data6.createSelector)( 10298 (state) => { 10299 return Object.values(state.metaBoxes.locations).flat(); 10300 }, 10301 (state) => [state.metaBoxes.locations] 10302 ); 10303 function hasMetaBoxes(state) { 10304 return getActiveMetaBoxLocations(state).length > 0; 10305 } 10306 function isSavingMetaBoxes2(state) { 10307 return state.metaBoxes.isSaving; 10308 } 10309 var __experimentalGetPreviewDeviceType = (0, import_data6.createRegistrySelector)( 10310 (select3) => () => { 10311 (0, import_deprecated2.default)( 10312 `select( 'core/edit-site' ).__experimentalGetPreviewDeviceType`, 10313 { 10314 since: "6.5", 10315 version: "6.7", 10316 alternative: `select( 'core/editor' ).getDeviceType` 10317 } 10318 ); 10319 return select3(import_editor5.store).getDeviceType(); 10320 } 10321 ); 10322 var isInserterOpened = (0, import_data6.createRegistrySelector)((select3) => () => { 10323 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isInserterOpened`, { 10324 since: "6.5", 10325 alternative: `select( 'core/editor' ).isInserterOpened` 10326 }); 10327 return select3(import_editor5.store).isInserterOpened(); 10328 }); 10329 var __experimentalGetInsertionPoint = (0, import_data6.createRegistrySelector)( 10330 (select3) => () => { 10331 (0, import_deprecated2.default)( 10332 `select( 'core/edit-post' ).__experimentalGetInsertionPoint`, 10333 { 10334 since: "6.5", 10335 version: "6.7" 10336 } 10337 ); 10338 return unlock2(select3(import_editor5.store)).getInserter(); 10339 } 10340 ); 10341 var isListViewOpened = (0, import_data6.createRegistrySelector)((select3) => () => { 10342 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isListViewOpened`, { 10343 since: "6.5", 10344 alternative: `select( 'core/editor' ).isListViewOpened` 10345 }); 10346 return select3(import_editor5.store).isListViewOpened(); 10347 }); 10348 var isEditingTemplate = (0, import_data6.createRegistrySelector)((select3) => () => { 10349 (0, import_deprecated2.default)(`select( 'core/edit-post' ).isEditingTemplate`, { 10350 since: "6.5", 10351 alternative: `select( 'core/editor' ).getRenderingMode` 10352 }); 10353 return select3(import_editor5.store).getCurrentPostType() === "wp_template"; 10354 }); 10355 function areMetaBoxesInitialized(state) { 10356 return state.metaBoxes.initialized; 10357 } 10358 var getEditedPostTemplate = (0, import_data6.createRegistrySelector)( 10359 (select3) => () => { 10360 const { id: postId, type: postType } = select3(import_editor5.store).getCurrentPost(); 10361 const templateId = unlock2(select3(import_core_data4.store)).getTemplateId( 10362 postType, 10363 postId 10364 ); 10365 if (!templateId) { 10366 return void 0; 10367 } 10368 return select3(import_core_data4.store).getEditedEntityRecord( 10369 "postType", 10370 "wp_template", 10371 templateId 10372 ); 10373 } 10374 ); 10375 10376 // packages/edit-post/build-module/store/index.mjs 10377 var store = (0, import_data7.createReduxStore)(STORE_NAME, { 10378 reducer: reducer_default, 10379 actions: actions_exports, 10380 selectors: selectors_exports 10381 }); 10382 (0, import_data7.register)(store); 10383 10384 // packages/edit-post/build-module/components/keyboard-shortcuts/index.mjs 10385 function KeyboardShortcuts() { 10386 const { toggleFullscreenMode: toggleFullscreenMode2 } = (0, import_data8.useDispatch)(store); 10387 const { registerShortcut } = (0, import_data8.useDispatch)(import_keyboard_shortcuts.store); 10388 (0, import_element19.useEffect)(() => { 10389 registerShortcut({ 10390 name: "core/edit-post/toggle-fullscreen", 10391 category: "global", 10392 description: (0, import_i18n4.__)("Enable or disable fullscreen mode."), 10393 keyCombination: { 10394 modifier: "secondary", 10395 character: "f" 10396 } 10397 }); 10398 }, []); 10399 (0, import_keyboard_shortcuts.useShortcut)("core/edit-post/toggle-fullscreen", () => { 10400 toggleFullscreenMode2(); 10401 }); 10402 return null; 10403 } 10404 var keyboard_shortcuts_default = KeyboardShortcuts; 10405 10406 // packages/edit-post/build-module/components/init-pattern-modal/index.mjs 10407 var import_data9 = __toESM(require_data(), 1); 10408 var import_i18n5 = __toESM(require_i18n(), 1); 10409 var import_components3 = __toESM(require_components(), 1); 10410 var import_element20 = __toESM(require_element(), 1); 10411 var import_editor6 = __toESM(require_editor(), 1); 10412 var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1); 10413 function InitPatternModal() { 10414 const { editPost } = (0, import_data9.useDispatch)(import_editor6.store); 10415 const { isCleanNewPost } = (0, import_data9.useSelect)(import_editor6.store); 10416 const [syncType, setSyncType] = (0, import_element20.useState)(void 0); 10417 const [title, setTitle] = (0, import_element20.useState)(""); 10418 const [isModalOpen, setIsModalOpen] = (0, import_element20.useState)(() => isCleanNewPost()); 10419 if (!isModalOpen) { 10420 return null; 10421 } 10422 return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( 10423 import_components3.Modal, 10424 { 10425 title: (0, import_i18n5.__)("Create pattern"), 10426 onRequestClose: () => { 10427 setIsModalOpen(false); 10428 }, 10429 overlayClassName: "patterns-create-modal", 10430 children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( 10431 "form", 10432 { 10433 onSubmit: (event) => { 10434 event.preventDefault(); 10435 setIsModalOpen(false); 10436 editPost({ 10437 title, 10438 meta: { 10439 wp_pattern_sync_status: syncType 10440 } 10441 }); 10442 }, 10443 children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Stack, { direction: "column", gap: "lg", children: [ 10444 /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( 10445 import_components3.TextControl, 10446 { 10447 label: (0, import_i18n5.__)("Name"), 10448 value: title, 10449 onChange: setTitle, 10450 placeholder: (0, import_i18n5.__)("My pattern"), 10451 className: "patterns-create-modal__name-input" 10452 } 10453 ), 10454 /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( 10455 import_components3.ToggleControl, 10456 { 10457 label: (0, import_i18n5._x)("Synced", "pattern (singular)"), 10458 help: (0, import_i18n5.__)( 10459 "Sync this pattern across multiple locations." 10460 ), 10461 checked: !syncType, 10462 onChange: () => { 10463 setSyncType(!syncType ? "unsynced" : void 0); 10464 } 10465 } 10466 ), 10467 /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Stack, { justify: "end", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( 10468 import_components3.Button, 10469 { 10470 __next40pxDefaultSize: true, 10471 variant: "primary", 10472 type: "submit", 10473 disabled: !title, 10474 accessibleWhenDisabled: true, 10475 children: (0, import_i18n5.__)("Create") 10476 } 10477 ) }) 10478 ] }) 10479 } 10480 ) 10481 } 10482 ); 10483 } 10484 10485 // packages/edit-post/build-module/components/browser-url/index.mjs 10486 var import_element22 = __toESM(require_element(), 1); 10487 var import_data11 = __toESM(require_data(), 1); 10488 var import_url3 = __toESM(require_url(), 1); 10489 var import_editor8 = __toESM(require_editor(), 1); 10490 10491 // packages/edit-post/build-module/components/browser-url/use-classic-revision-redirect.mjs 10492 var import_data10 = __toESM(require_data(), 1); 10493 var import_core_data5 = __toESM(require_core_data(), 1); 10494 var import_editor7 = __toESM(require_editor(), 1); 10495 var import_element21 = __toESM(require_element(), 1); 10496 var import_url2 = __toESM(require_url(), 1); 10497 function useClassicRevisionRedirect() { 10498 const registry = (0, import_data10.useRegistry)(); 10499 const { disableVisualRevisions, currentRevisionId, postType, postId } = (0, import_data10.useSelect)((select3) => { 10500 const editor = select3(import_editor7.store); 10501 return { 10502 disableVisualRevisions: !!editor.getEditorSettings().disableVisualRevisions, 10503 currentRevisionId: unlock2(editor).getCurrentRevisionId(), 10504 postType: editor.getCurrentPostType(), 10505 postId: editor.getCurrentPostId() 10506 }; 10507 }, []); 10508 const hasClassicRevisionScreen = ![ 10509 "wp_template", 10510 "wp_template_part" 10511 ].includes(postType); 10512 (0, import_element21.useEffect)(() => { 10513 if (!disableVisualRevisions || !hasClassicRevisionScreen || !currentRevisionId || !postType || !postId) { 10514 return; 10515 } 10516 let cancelled = false; 10517 registry.resolveSelect(import_core_data5.store).getRevision("postType", postType, postId, currentRevisionId, { 10518 context: "edit", 10519 _fields: "id" 10520 }).then((revision) => { 10521 if (cancelled || !revision) { 10522 return; 10523 } 10524 const editor = registry.select(import_editor7.store); 10525 const isStillSelected = !!editor.getEditorSettings().disableVisualRevisions && editor.getCurrentPostType() === postType && String(editor.getCurrentPostId()) === String(postId) && unlock2(editor).getCurrentRevisionId() === currentRevisionId; 10526 if (!isStillSelected) { 10527 return; 10528 } 10529 window.location.replace( 10530 (0, import_url2.addQueryArgs)("revision.php", { 10531 revision: currentRevisionId 10532 }) 10533 ); 10534 }); 10535 return () => { 10536 cancelled = true; 10537 }; 10538 }, [ 10539 disableVisualRevisions, 10540 hasClassicRevisionScreen, 10541 currentRevisionId, 10542 postType, 10543 postId, 10544 registry 10545 ]); 10546 } 10547 10548 // packages/edit-post/build-module/components/browser-url/index.mjs 10549 var URL_WRITE_DEBOUNCE_MS = 300; 10550 function getPostEditURL(postId, revisionId) { 10551 const args = { post: postId, action: "edit" }; 10552 if (revisionId) { 10553 args.revision = revisionId; 10554 } 10555 return (0, import_url3.addQueryArgs)("post.php", args); 10556 } 10557 function BrowserURL() { 10558 useClassicRevisionRedirect(); 10559 const [initialRevisionId] = (0, import_element22.useState)(() => { 10560 const revision = Number( 10561 (0, import_url3.getQueryArg)(window.location.href, "revision") 10562 ); 10563 return Number.isInteger(revision) && revision > 0 ? revision : null; 10564 }); 10565 const hasHandledInitialRevisionRef = (0, import_element22.useRef)(false); 10566 const { postId, postStatus, currentRevisionId } = (0, import_data11.useSelect)((select3) => { 10567 const { getCurrentPost } = select3(import_editor8.store); 10568 const { getCurrentRevisionId } = unlock2(select3(import_editor8.store)); 10569 const post = getCurrentPost(); 10570 let { id, status, type } = post; 10571 const isTemplate = ["wp_template", "wp_template_part"].includes( 10572 type 10573 ); 10574 if (isTemplate) { 10575 id = post.wp_id; 10576 } 10577 return { 10578 postId: id, 10579 postStatus: status, 10580 // `post.php` rejects templates because `show_ui` is false. Adding 10581 // their revision ID to this URL would create a dead link. 10582 currentRevisionId: isTemplate ? null : getCurrentRevisionId() 10583 }; 10584 }, []); 10585 const { openRevision } = unlock2((0, import_data11.useDispatch)(import_editor8.store)); 10586 const lastURLWriteTimeRef = (0, import_element22.useRef)(null); 10587 const lastPostIdRef = (0, import_element22.useRef)(null); 10588 (0, import_element22.useEffect)(() => { 10589 if (!postId) { 10590 return; 10591 } 10592 if (initialRevisionId && !hasHandledInitialRevisionRef.current) { 10593 hasHandledInitialRevisionRef.current = true; 10594 openRevision(initialRevisionId); 10595 return; 10596 } 10597 if (postStatus === "auto-draft") { 10598 return; 10599 } 10600 const previousPostId = lastPostIdRef.current; 10601 lastPostIdRef.current = postId; 10602 const url = getPostEditURL(postId, currentRevisionId); 10603 const write = () => { 10604 lastURLWriteTimeRef.current = Date.now(); 10605 try { 10606 window.history.replaceState( 10607 { id: postId }, 10608 "Post " + postId, 10609 url 10610 ); 10611 } catch { 10612 } 10613 }; 10614 if (previousPostId !== null && previousPostId !== postId) { 10615 write(); 10616 return; 10617 } 10618 if (lastURLWriteTimeRef.current === null) { 10619 write(); 10620 return; 10621 } 10622 if (Date.now() - lastURLWriteTimeRef.current >= URL_WRITE_DEBOUNCE_MS) { 10623 write(); 10624 return; 10625 } 10626 const timeoutId = setTimeout(write, URL_WRITE_DEBOUNCE_MS); 10627 return () => clearTimeout(timeoutId); 10628 }, [ 10629 postId, 10630 postStatus, 10631 currentRevisionId, 10632 initialRevisionId, 10633 openRevision 10634 ]); 10635 return null; 10636 } 10637 10638 // packages/edit-post/build-module/components/meta-boxes/index.mjs 10639 var import_data14 = __toESM(require_data(), 1); 10640 10641 // packages/edit-post/build-module/components/meta-boxes/meta-boxes-area/index.mjs 10642 var import_element23 = __toESM(require_element(), 1); 10643 var import_components4 = __toESM(require_components(), 1); 10644 var import_data12 = __toESM(require_data(), 1); 10645 var import_block_editor = __toESM(require_block_editor(), 1); 10646 var import_jsx_runtime28 = __toESM(require_jsx_runtime(), 1); 10647 var { useNativeUndo } = unlock2(import_block_editor.privateApis); 10648 function move(parent, node) { 10649 if (parent.moveBefore && parent.isConnected && node.isConnected) { 10650 parent.moveBefore(node, null); 10651 } else { 10652 parent.appendChild(node); 10653 } 10654 } 10655 function MetaBoxesArea({ location }) { 10656 const container = (0, import_element23.useRef)(null); 10657 const formRef = (0, import_element23.useRef)(null); 10658 (0, import_element23.useLayoutEffect)(() => { 10659 formRef.current = document.querySelector( 10660 ".metabox-location-" + location 10661 ); 10662 if (formRef.current) { 10663 move(container.current, formRef.current); 10664 } 10665 return () => { 10666 if (formRef.current) { 10667 move(document.querySelector("#metaboxes"), formRef.current); 10668 } 10669 }; 10670 }, [location]); 10671 const isSaving = (0, import_data12.useSelect)((select3) => { 10672 return select3(store).isSavingMetaBoxes(); 10673 }, []); 10674 const classes = clsx_default("edit-post-meta-boxes-area", `is-$location}`, { 10675 "is-loading": isSaving 10676 }); 10677 const nativeUndoRef = useNativeUndo(); 10678 return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: classes, ref: nativeUndoRef, children: [ 10679 isSaving && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_components4.Spinner, { className: "edit-post-meta-boxes-area__spinner" }), 10680 /* @__PURE__ */ (0, import_jsx_runtime28.jsx)( 10681 "div", 10682 { 10683 className: "edit-post-meta-boxes-area__container", 10684 ref: container 10685 } 10686 ), 10687 /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "edit-post-meta-boxes-area__clear" }) 10688 ] }); 10689 } 10690 var meta_boxes_area_default = MetaBoxesArea; 10691 10692 // packages/edit-post/build-module/components/meta-boxes/meta-box-visibility.mjs 10693 var import_element24 = __toESM(require_element(), 1); 10694 var import_data13 = __toESM(require_data(), 1); 10695 var import_editor9 = __toESM(require_editor(), 1); 10696 function MetaBoxVisibility({ id }) { 10697 const isVisible = (0, import_data13.useSelect)( 10698 (select3) => { 10699 return select3(import_editor9.store).isEditorPanelEnabled( 10700 `meta-box-$id}` 10701 ); 10702 }, 10703 [id] 10704 ); 10705 (0, import_element24.useEffect)(() => { 10706 const element = document.getElementById(id); 10707 if (!element) { 10708 return; 10709 } 10710 if (isVisible) { 10711 element.classList.remove("is-hidden"); 10712 } else { 10713 element.classList.add("is-hidden"); 10714 } 10715 }, [id, isVisible]); 10716 return null; 10717 } 10718 10719 // packages/edit-post/build-module/components/meta-boxes/index.mjs 10720 var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1); 10721 function MetaBoxes({ location }) { 10722 const metaBoxes2 = (0, import_data14.useSelect)( 10723 (select3) => select3(store).getMetaBoxesPerLocation(location), 10724 [location] 10725 ); 10726 return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [ 10727 (metaBoxes2 ?? []).map(({ id }) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(MetaBoxVisibility, { id }, id)), 10728 /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(meta_boxes_area_default, { location }) 10729 ] }); 10730 } 10731 10732 // packages/edit-post/build-module/components/more-menu/index.mjs 10733 var import_i18n11 = __toESM(require_i18n(), 1); 10734 var import_compose = __toESM(require_compose(), 1); 10735 var import_editor16 = __toESM(require_editor(), 1); 10736 var import_keycodes = __toESM(require_keycodes(), 1); 10737 10738 // packages/edit-post/build-module/components/more-menu/manage-patterns-menu-item.mjs 10739 var import_core_data6 = __toESM(require_core_data(), 1); 10740 var import_data15 = __toESM(require_data(), 1); 10741 var import_editor10 = __toESM(require_editor(), 1); 10742 var import_i18n6 = __toESM(require_i18n(), 1); 10743 var import_url4 = __toESM(require_url(), 1); 10744 var import_jsx_runtime30 = __toESM(require_jsx_runtime(), 1); 10745 var { MoreMenuItem } = unlock2(import_editor10.privateApis); 10746 function ManagePatternsMenuItem() { 10747 const url = (0, import_data15.useSelect)((select3) => { 10748 const { canUser } = select3(import_core_data6.store); 10749 const defaultUrl = (0, import_url4.addQueryArgs)("edit.php", { 10750 post_type: "wp_block" 10751 }); 10752 const patternsUrl = (0, import_url4.addQueryArgs)("site-editor.php", { 10753 p: "/pattern" 10754 }); 10755 return canUser("create", { 10756 kind: "postType", 10757 name: "wp_template" 10758 }) ? patternsUrl : defaultUrl; 10759 }, []); 10760 return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(MoreMenuItem, { href: url, children: (0, import_i18n6.__)("Manage patterns") }); 10761 } 10762 var manage_patterns_menu_item_default = ManagePatternsMenuItem; 10763 10764 // packages/edit-post/build-module/components/more-menu/welcome-guide-menu-item.mjs 10765 var import_i18n7 = __toESM(require_i18n(), 1); 10766 var import_data16 = __toESM(require_data(), 1); 10767 var import_editor11 = __toESM(require_editor(), 1); 10768 var import_preferences4 = __toESM(require_preferences(), 1); 10769 var import_jsx_runtime31 = __toESM(require_jsx_runtime(), 1); 10770 var { MoreMenuItem: MoreMenuItem2 } = unlock2(import_editor11.privateApis); 10771 function WelcomeGuideMenuItem() { 10772 const isEditingTemplate2 = (0, import_data16.useSelect)( 10773 (select3) => select3(import_editor11.store).getCurrentPostType() === "wp_template", 10774 [] 10775 ); 10776 const { toggle } = (0, import_data16.useDispatch)(import_preferences4.store); 10777 return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)( 10778 MoreMenuItem2, 10779 { 10780 onClick: () => toggle( 10781 "core/edit-post", 10782 isEditingTemplate2 ? "welcomeGuideTemplate" : "welcomeGuide" 10783 ), 10784 children: (0, import_i18n7.__)("Welcome Guide") 10785 } 10786 ); 10787 } 10788 10789 // packages/edit-post/build-module/components/preferences-modal/index.mjs 10790 var import_i18n10 = __toESM(require_i18n(), 1); 10791 var import_preferences8 = __toESM(require_preferences(), 1); 10792 var import_editor15 = __toESM(require_editor(), 1); 10793 10794 // packages/edit-post/build-module/components/preferences-modal/meta-boxes-section.mjs 10795 var import_i18n9 = __toESM(require_i18n(), 1); 10796 var import_data19 = __toESM(require_data(), 1); 10797 var import_editor14 = __toESM(require_editor(), 1); 10798 var import_preferences7 = __toESM(require_preferences(), 1); 10799 10800 // packages/edit-post/build-module/components/preferences-modal/enable-custom-fields.mjs 10801 var import_element25 = __toESM(require_element(), 1); 10802 var import_i18n8 = __toESM(require_i18n(), 1); 10803 var import_components5 = __toESM(require_components(), 1); 10804 var import_data17 = __toESM(require_data(), 1); 10805 var import_editor12 = __toESM(require_editor(), 1); 10806 var import_preferences5 = __toESM(require_preferences(), 1); 10807 var import_url5 = __toESM(require_url(), 1); 10808 var import_jsx_runtime32 = __toESM(require_jsx_runtime(), 1); 10809 var { PreferenceBaseOption } = unlock2(import_preferences5.privateApis); 10810 function submitCustomFieldsForm() { 10811 const customFieldsForm = document.getElementById( 10812 "toggle-custom-fields-form" 10813 ); 10814 customFieldsForm.querySelector('[name="_wp_http_referer"]').setAttribute("value", (0, import_url5.getPathAndQueryString)(window.location.href)); 10815 customFieldsForm.submit(); 10816 } 10817 function CustomFieldsConfirmation({ willEnable }) { 10818 const [isReloading, setIsReloading] = (0, import_element25.useState)(false); 10819 return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [ 10820 /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "edit-post-preferences-modal__custom-fields-confirmation-message", children: (0, import_i18n8.__)( 10821 "A page reload is required for this change. Make sure your content is saved before reloading." 10822 ) }), 10823 /* @__PURE__ */ (0, import_jsx_runtime32.jsx)( 10824 import_components5.Button, 10825 { 10826 __next40pxDefaultSize: true, 10827 variant: "secondary", 10828 isBusy: isReloading, 10829 accessibleWhenDisabled: true, 10830 disabled: isReloading, 10831 onClick: () => { 10832 setIsReloading(true); 10833 submitCustomFieldsForm(); 10834 }, 10835 children: willEnable ? (0, import_i18n8.__)("Show & Reload Page") : (0, import_i18n8.__)("Hide & Reload Page") 10836 } 10837 ) 10838 ] }); 10839 } 10840 function EnableCustomFieldsOption({ label }) { 10841 const areCustomFieldsEnabled = (0, import_data17.useSelect)((select3) => { 10842 return !!select3(import_editor12.store).getEditorSettings().enableCustomFields; 10843 }, []); 10844 const [isChecked, setIsChecked] = (0, import_element25.useState)(areCustomFieldsEnabled); 10845 return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)( 10846 PreferenceBaseOption, 10847 { 10848 label, 10849 isChecked, 10850 onChange: setIsChecked, 10851 children: isChecked !== areCustomFieldsEnabled && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(CustomFieldsConfirmation, { willEnable: isChecked }) 10852 } 10853 ); 10854 } 10855 10856 // packages/edit-post/build-module/components/preferences-modal/enable-panel.mjs 10857 var import_data18 = __toESM(require_data(), 1); 10858 var import_editor13 = __toESM(require_editor(), 1); 10859 var import_preferences6 = __toESM(require_preferences(), 1); 10860 var import_jsx_runtime33 = __toESM(require_jsx_runtime(), 1); 10861 var { PreferenceBaseOption: PreferenceBaseOption2 } = unlock2(import_preferences6.privateApis); 10862 function EnablePanelOption(props) { 10863 const { toggleEditorPanelEnabled: toggleEditorPanelEnabled2 } = (0, import_data18.useDispatch)(import_editor13.store); 10864 const { isChecked, isRemoved } = (0, import_data18.useSelect)( 10865 (select3) => { 10866 const { isEditorPanelEnabled: isEditorPanelEnabled2, isEditorPanelRemoved: isEditorPanelRemoved2 } = select3(import_editor13.store); 10867 return { 10868 isChecked: isEditorPanelEnabled2(props.panelName), 10869 isRemoved: isEditorPanelRemoved2(props.panelName) 10870 }; 10871 }, 10872 [props.panelName] 10873 ); 10874 if (isRemoved) { 10875 return null; 10876 } 10877 return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 10878 PreferenceBaseOption2, 10879 { 10880 isChecked, 10881 onChange: () => toggleEditorPanelEnabled2(props.panelName), 10882 ...props 10883 } 10884 ); 10885 } 10886 10887 // packages/edit-post/build-module/components/preferences-modal/meta-boxes-section.mjs 10888 var import_jsx_runtime34 = __toESM(require_jsx_runtime(), 1); 10889 var { PreferencesModalSection } = unlock2(import_preferences7.privateApis); 10890 function MetaBoxesSection(sectionProps) { 10891 const { areCustomFieldsRegistered, metaBoxes: metaBoxes2 } = (0, import_data19.useSelect)((select3) => { 10892 const { getEditorSettings } = select3(import_editor14.store); 10893 const { getAllMetaBoxes: getAllMetaBoxes2 } = select3(store); 10894 return { 10895 areCustomFieldsRegistered: getEditorSettings().enableCustomFields !== void 0, 10896 metaBoxes: getAllMetaBoxes2() 10897 }; 10898 }, []); 10899 const thirdPartyMetaBoxes = metaBoxes2.filter( 10900 ({ id }) => id !== "postcustom" 10901 ); 10902 if (!areCustomFieldsRegistered && thirdPartyMetaBoxes.length === 0) { 10903 return null; 10904 } 10905 return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(PreferencesModalSection, { ...sectionProps, children: [ 10906 areCustomFieldsRegistered && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(EnableCustomFieldsOption, { label: (0, import_i18n9.__)("Custom fields") }), 10907 thirdPartyMetaBoxes.map(({ id, title }) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)( 10908 EnablePanelOption, 10909 { 10910 label: title, 10911 panelName: `meta-box-$id}` 10912 }, 10913 id 10914 )) 10915 ] }); 10916 } 10917 10918 // packages/edit-post/build-module/components/preferences-modal/index.mjs 10919 var import_jsx_runtime35 = __toESM(require_jsx_runtime(), 1); 10920 var { PreferenceToggleControl } = unlock2(import_preferences8.privateApis); 10921 var { PreferencesModal } = unlock2(import_editor15.privateApis); 10922 function EditPostPreferencesModal() { 10923 const extraSections = { 10924 general: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(MetaBoxesSection, { title: (0, import_i18n10.__)("Advanced") }), 10925 appearance: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( 10926 PreferenceToggleControl, 10927 { 10928 scope: "core/edit-post", 10929 featureName: "themeStyles", 10930 help: (0, import_i18n10.__)("Make the editor look like your theme."), 10931 label: (0, import_i18n10.__)("Use theme styles") 10932 } 10933 ) 10934 }; 10935 return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(PreferencesModal, { extraSections }); 10936 } 10937 10938 // packages/edit-post/build-module/components/more-menu/index.mjs 10939 var import_jsx_runtime36 = __toESM(require_jsx_runtime(), 1); 10940 var { MoreMenuPreferenceItem, ToolsMoreMenuGroup, ViewMoreMenuGroup } = unlock2(import_editor16.privateApis); 10941 var FULLSCREEN_SHORTCUT = { 10942 ariaKeyShortcut: import_keycodes.ariaKeyShortcut.secondary("f"), 10943 displayShortcut: import_keycodes.displayShortcut.secondary("f"), 10944 label: import_keycodes.shortcutAriaLabel.secondary("f") 10945 }; 10946 var MoreMenu = () => { 10947 const isLargeViewport = (0, import_compose.useViewportMatch)("large"); 10948 return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [ 10949 isLargeViewport && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ViewMoreMenuGroup, { children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 10950 MoreMenuPreferenceItem, 10951 { 10952 scope: "core/edit-post", 10953 name: "fullscreenMode", 10954 label: (0, import_i18n11.__)("Fullscreen mode"), 10955 info: (0, import_i18n11.__)("Show and hide the admin user interface"), 10956 messageActivated: (0, import_i18n11.__)("Fullscreen mode activated."), 10957 messageDeactivated: (0, import_i18n11.__)( 10958 "Fullscreen mode deactivated." 10959 ), 10960 shortcut: FULLSCREEN_SHORTCUT 10961 } 10962 ) }), 10963 /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(ToolsMoreMenuGroup, { children: [ 10964 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(manage_patterns_menu_item_default, {}), 10965 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(WelcomeGuideMenuItem, {}) 10966 ] }), 10967 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(EditPostPreferencesModal, {}) 10968 ] }); 10969 }; 10970 var more_menu_default = MoreMenu; 10971 10972 // packages/edit-post/build-module/components/welcome-guide/index.mjs 10973 var import_data22 = __toESM(require_data(), 1); 10974 10975 // packages/edit-post/build-module/components/welcome-guide/default.mjs 10976 var import_data20 = __toESM(require_data(), 1); 10977 var import_components6 = __toESM(require_components(), 1); 10978 var import_i18n12 = __toESM(require_i18n(), 1); 10979 var import_element26 = __toESM(require_element(), 1); 10980 10981 // packages/edit-post/build-module/components/welcome-guide/image.mjs 10982 var import_jsx_runtime37 = __toESM(require_jsx_runtime(), 1); 10983 function WelcomeGuideImage({ nonAnimatedSrc, animatedSrc }) { 10984 return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("picture", { className: "edit-post-welcome-guide__image", children: [ 10985 /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( 10986 "source", 10987 { 10988 srcSet: nonAnimatedSrc, 10989 media: "(prefers-reduced-motion: reduce)" 10990 } 10991 ), 10992 /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("img", { src: animatedSrc, width: "312", height: "240", alt: "" }) 10993 ] }); 10994 } 10995 10996 // packages/edit-post/build-module/components/welcome-guide/default.mjs 10997 var import_jsx_runtime38 = __toESM(require_jsx_runtime(), 1); 10998 function WelcomeGuideDefault() { 10999 const { toggleFeature: toggleFeature2 } = (0, import_data20.useDispatch)(store); 11000 return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( 11001 import_components6.Guide, 11002 { 11003 className: "edit-post-welcome-guide", 11004 contentLabel: (0, import_i18n12.__)("Welcome to the editor"), 11005 finishButtonText: (0, import_i18n12.__)("Get started"), 11006 onFinish: () => toggleFeature2("welcomeGuide"), 11007 pages: [ 11008 { 11009 image: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( 11010 WelcomeGuideImage, 11011 { 11012 nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-canvas.svg", 11013 animatedSrc: "https://s.w.org/images/block-editor/welcome-canvas.gif" 11014 } 11015 ), 11016 content: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [ 11017 /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("h1", { className: "edit-post-welcome-guide__heading", children: (0, import_i18n12.__)("Welcome to the editor") }), 11018 /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "edit-post-welcome-guide__text", children: (0, import_i18n12.__)( 11019 "In the WordPress editor, each paragraph, image, or video is presented as a distinct \u201Cblock\u201D of content." 11020 ) }) 11021 ] }) 11022 }, 11023 { 11024 image: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( 11025 WelcomeGuideImage, 11026 { 11027 nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-editor.svg", 11028 animatedSrc: "https://s.w.org/images/block-editor/welcome-editor.gif" 11029 } 11030 ), 11031 content: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [ 11032 /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("h1", { className: "edit-post-welcome-guide__heading", children: (0, import_i18n12.__)("Customize each block") }), 11033 /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "edit-post-welcome-guide__text", children: (0, import_i18n12.__)( 11034 "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." 11035 ) }) 11036 ] }) 11037 }, 11038 { 11039 image: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( 11040 WelcomeGuideImage, 11041 { 11042 nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-library.svg", 11043 animatedSrc: "https://s.w.org/images/block-editor/welcome-library.gif" 11044 } 11045 ), 11046 content: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [ 11047 /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("h1", { className: "edit-post-welcome-guide__heading", children: (0, import_i18n12.__)("Explore all blocks") }), 11048 /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "edit-post-welcome-guide__text", children: (0, import_element26.createInterpolateElement)( 11049 (0, import_i18n12.__)( 11050 "All of the blocks available to you live in the block library. You\u2019ll find it wherever you see the <InserterIconImage /> icon." 11051 ), 11052 { 11053 InserterIconImage: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( 11054 "img", 11055 { 11056 alt: (0, import_i18n12.__)("inserter"), 11057 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" 11058 } 11059 ) 11060 } 11061 ) }) 11062 ] }) 11063 }, 11064 { 11065 image: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( 11066 WelcomeGuideImage, 11067 { 11068 nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-documentation.svg", 11069 animatedSrc: "https://s.w.org/images/block-editor/welcome-documentation.gif" 11070 } 11071 ), 11072 content: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [ 11073 /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("h1", { className: "edit-post-welcome-guide__heading", children: (0, import_i18n12.__)("Learn more") }), 11074 /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "edit-post-welcome-guide__text", children: (0, import_element26.createInterpolateElement)( 11075 (0, import_i18n12.__)( 11076 "New to the block editor? Want to learn more about using it? <a>Here's a detailed guide.</a>" 11077 ), 11078 { 11079 a: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( 11080 import_components6.ExternalLink, 11081 { 11082 href: (0, import_i18n12.__)( 11083 "https://wordpress.org/documentation/article/wordpress-block-editor/" 11084 ) 11085 } 11086 ) 11087 } 11088 ) }) 11089 ] }) 11090 } 11091 ] 11092 } 11093 ); 11094 } 11095 11096 // packages/edit-post/build-module/components/welcome-guide/template.mjs 11097 var import_data21 = __toESM(require_data(), 1); 11098 var import_components7 = __toESM(require_components(), 1); 11099 var import_i18n13 = __toESM(require_i18n(), 1); 11100 var import_jsx_runtime39 = __toESM(require_jsx_runtime(), 1); 11101 function WelcomeGuideTemplate() { 11102 const { toggleFeature: toggleFeature2 } = (0, import_data21.useDispatch)(store); 11103 return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( 11104 import_components7.Guide, 11105 { 11106 className: "edit-template-welcome-guide", 11107 contentLabel: (0, import_i18n13.__)("Welcome to the template editor"), 11108 finishButtonText: (0, import_i18n13.__)("Get started"), 11109 onFinish: () => toggleFeature2("welcomeGuideTemplate"), 11110 pages: [ 11111 { 11112 image: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( 11113 WelcomeGuideImage, 11114 { 11115 nonAnimatedSrc: "https://s.w.org/images/block-editor/welcome-template-editor.svg", 11116 animatedSrc: "https://s.w.org/images/block-editor/welcome-template-editor.gif" 11117 } 11118 ), 11119 content: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment, { children: [ 11120 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("h1", { className: "edit-post-welcome-guide__heading", children: (0, import_i18n13.__)("Welcome to the template editor") }), 11121 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("p", { className: "edit-post-welcome-guide__text", children: (0, import_i18n13.__)( 11122 "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." 11123 ) }) 11124 ] }) 11125 } 11126 ] 11127 } 11128 ); 11129 } 11130 11131 // packages/edit-post/build-module/components/welcome-guide/index.mjs 11132 var import_jsx_runtime40 = __toESM(require_jsx_runtime(), 1); 11133 function WelcomeGuide({ postType }) { 11134 const { isActive, isEditingTemplate: isEditingTemplate2 } = (0, import_data22.useSelect)( 11135 (select3) => { 11136 const { isFeatureActive: isFeatureActive2 } = select3(store); 11137 const _isEditingTemplate = postType === "wp_template"; 11138 const feature = _isEditingTemplate ? "welcomeGuideTemplate" : "welcomeGuide"; 11139 return { 11140 isActive: isFeatureActive2(feature), 11141 isEditingTemplate: _isEditingTemplate 11142 }; 11143 }, 11144 [postType] 11145 ); 11146 if (!isActive) { 11147 return null; 11148 } 11149 return isEditingTemplate2 ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(WelcomeGuideTemplate, {}) : /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(WelcomeGuideDefault, {}); 11150 } 11151 11152 // packages/edit-post/build-module/commands/use-commands.mjs 11153 var import_data23 = __toESM(require_data(), 1); 11154 var import_i18n14 = __toESM(require_i18n(), 1); 11155 var import_commands = __toESM(require_commands(), 1); 11156 var import_preferences9 = __toESM(require_preferences(), 1); 11157 var import_notices2 = __toESM(require_notices(), 1); 11158 function useCommands() { 11159 const { isFullscreen } = (0, import_data23.useSelect)((select3) => { 11160 const { get } = select3(import_preferences9.store); 11161 return { 11162 isFullscreen: get("core/edit-post", "fullscreenMode") 11163 }; 11164 }, []); 11165 const { toggle } = (0, import_data23.useDispatch)(import_preferences9.store); 11166 const { createInfoNotice } = (0, import_data23.useDispatch)(import_notices2.store); 11167 (0, import_commands.useCommand)({ 11168 name: "core/toggle-fullscreen-mode", 11169 label: isFullscreen ? (0, import_i18n14.__)("Exit fullscreen") : (0, import_i18n14.__)("Enter fullscreen"), 11170 icon: fullscreen_default, 11171 category: "command", 11172 callback: ({ close }) => { 11173 toggle("core/edit-post", "fullscreenMode"); 11174 close(); 11175 createInfoNotice( 11176 isFullscreen ? (0, import_i18n14.__)("Fullscreen off.") : (0, import_i18n14.__)("Fullscreen on."), 11177 { 11178 id: "core/edit-post/toggle-fullscreen-mode/notice", 11179 type: "snackbar", 11180 actions: [ 11181 { 11182 label: (0, import_i18n14.__)("Undo"), 11183 onClick: () => { 11184 toggle("core/edit-post", "fullscreenMode"); 11185 } 11186 } 11187 ] 11188 } 11189 ); 11190 } 11191 }); 11192 } 11193 11194 // packages/edit-post/build-module/hooks/use-navigate-to-entity-record.mjs 11195 var import_element27 = __toESM(require_element(), 1); 11196 var import_data24 = __toESM(require_data(), 1); 11197 var import_editor17 = __toESM(require_editor(), 1); 11198 var import_core_data7 = __toESM(require_core_data(), 1); 11199 function useNavigateToEntityRecord(initialPostId, initialPostType, defaultRenderingMode) { 11200 const registry = (0, import_data24.useRegistry)(); 11201 const [postHistory, dispatch2] = (0, import_element27.useReducer)( 11202 (historyState, { type, post: post2, previousRenderingMode: previousRenderingMode2, selectedBlockClientId }) => { 11203 if (type === "push") { 11204 const updatedHistory = [...historyState]; 11205 const currentIndex = updatedHistory.length - 1; 11206 updatedHistory[currentIndex] = { 11207 ...updatedHistory[currentIndex], 11208 selectedBlockClientId 11209 }; 11210 return [...updatedHistory, { post: post2, previousRenderingMode: previousRenderingMode2 }]; 11211 } 11212 if (type === "pop") { 11213 if (historyState.length > 1) { 11214 return historyState.slice(0, -1); 11215 } 11216 } 11217 return historyState; 11218 }, 11219 [ 11220 { 11221 post: { postId: initialPostId, postType: initialPostType } 11222 } 11223 ] 11224 ); 11225 const { post, previousRenderingMode } = postHistory[postHistory.length - 1]; 11226 const { getRenderingMode } = (0, import_data24.useSelect)(import_editor17.store); 11227 const { setRenderingMode } = (0, import_data24.useDispatch)(import_editor17.store); 11228 const { editEntityRecord } = (0, import_data24.useDispatch)(import_core_data7.store); 11229 const onNavigateToEntityRecord = (0, import_element27.useCallback)( 11230 (params) => { 11231 const entityEdits = registry.select(import_core_data7.store).getEntityRecordEdits("postType", post.postType, post.postId); 11232 const externalClientId = entityEdits?.selection?.selectionStart?.clientId ?? null; 11233 dispatch2({ 11234 type: "push", 11235 post: { postId: params.postId, postType: params.postType }, 11236 // Save the current rendering mode so we can restore it when navigating back. 11237 previousRenderingMode: getRenderingMode(), 11238 selectedBlockClientId: externalClientId 11239 }); 11240 setRenderingMode(defaultRenderingMode); 11241 }, 11242 [ 11243 registry, 11244 post.postType, 11245 post.postId, 11246 getRenderingMode, 11247 setRenderingMode, 11248 defaultRenderingMode 11249 ] 11250 ); 11251 const onNavigateToPreviousEntityRecord = (0, import_element27.useCallback)(() => { 11252 if (postHistory.length > 1) { 11253 const previousItem = postHistory[postHistory.length - 2]; 11254 if (previousItem.selectedBlockClientId) { 11255 editEntityRecord( 11256 "postType", 11257 previousItem.post.postType, 11258 previousItem.post.postId, 11259 { 11260 selection: { 11261 selectionStart: { 11262 clientId: previousItem.selectedBlockClientId 11263 }, 11264 selectionEnd: { 11265 clientId: previousItem.selectedBlockClientId 11266 } 11267 } 11268 }, 11269 { undoIgnore: true } 11270 ); 11271 } 11272 } 11273 dispatch2({ 11274 type: "pop" 11275 }); 11276 if (previousRenderingMode) { 11277 setRenderingMode(previousRenderingMode); 11278 } 11279 }, [ 11280 setRenderingMode, 11281 previousRenderingMode, 11282 postHistory, 11283 editEntityRecord 11284 ]); 11285 return { 11286 currentPost: post, 11287 onNavigateToEntityRecord, 11288 onNavigateToPreviousEntityRecord: postHistory.length > 1 ? onNavigateToPreviousEntityRecord : void 0 11289 }; 11290 } 11291 11292 // packages/edit-post/build-module/components/meta-boxes/use-meta-box-initialization.mjs 11293 var import_data25 = __toESM(require_data(), 1); 11294 var import_editor18 = __toESM(require_editor(), 1); 11295 var import_core_data8 = __toESM(require_core_data(), 1); 11296 var import_element28 = __toESM(require_element(), 1); 11297 var useMetaBoxInitialization = (enabled) => { 11298 const { 11299 isEnabledAndEditorReady, 11300 isCollaborationEnabled, 11301 hasIncompatibleMetaBoxes, 11302 hasActiveMetaBoxes 11303 } = (0, import_data25.useSelect)( 11304 (select3) => { 11305 const { 11306 __unstableIsEditorReady, 11307 isCollaborationEnabledForCurrentPost 11308 } = unlock2(select3(import_editor18.store)); 11309 return { 11310 isEnabledAndEditorReady: enabled && __unstableIsEditorReady(), 11311 isCollaborationEnabled: isCollaborationEnabledForCurrentPost(), 11312 hasIncompatibleMetaBoxes: enabled ? select3(store).getAllMetaBoxes().some((metaBox) => !metaBox.__rtc_compatible) : false, 11313 hasActiveMetaBoxes: enabled && select3(store).hasMetaBoxes() 11314 }; 11315 }, 11316 [enabled] 11317 ); 11318 const { setCollaborationSupported } = unlock2((0, import_data25.useDispatch)(import_core_data8.store)); 11319 const { updateEditorSettings } = (0, import_data25.useDispatch)(import_editor18.store); 11320 const { initializeMetaBoxes: initializeMetaBoxes2 } = (0, import_data25.useDispatch)(store); 11321 (0, import_element28.useEffect)(() => { 11322 if (isEnabledAndEditorReady) { 11323 initializeMetaBoxes2(); 11324 if (isCollaborationEnabled && hasIncompatibleMetaBoxes) { 11325 setCollaborationSupported(false); 11326 } 11327 if (hasActiveMetaBoxes) { 11328 updateEditorSettings({ disableVisualRevisions: true }); 11329 } 11330 } 11331 }, [ 11332 isEnabledAndEditorReady, 11333 initializeMetaBoxes2, 11334 isCollaborationEnabled, 11335 setCollaborationSupported, 11336 hasIncompatibleMetaBoxes, 11337 hasActiveMetaBoxes, 11338 updateEditorSettings 11339 ]); 11340 }; 11341 11342 // packages/edit-post/build-module/components/layout/index.mjs 11343 var import_jsx_runtime41 = __toESM(require_jsx_runtime(), 1); 11344 var { useCommandContext } = unlock2(import_commands2.privateApis); 11345 var { useDrag } = unlock2(import_components8.privateApis); 11346 var { Editor, FullscreenMode, UploadProgressSnackbar } = unlock2(import_editor19.privateApis); 11347 var DESIGN_POST_TYPES = [ 11348 "wp_template", 11349 "wp_template_part", 11350 "wp_block", 11351 "wp_navigation" 11352 ]; 11353 function useEditorStyles(settings) { 11354 const { hasThemeStyleSupport } = (0, import_data26.useSelect)((select3) => { 11355 return { 11356 hasThemeStyleSupport: select3(store).isFeatureActive("themeStyles") 11357 }; 11358 }, []); 11359 return (0, import_element29.useMemo)(() => { 11360 const presetStyles = settings.styles?.filter( 11361 (style) => style.__unstableType && style.__unstableType !== "theme" 11362 ) ?? []; 11363 const defaultEditorStyles = [ 11364 ...settings?.defaultEditorStyles ?? [], 11365 ...presetStyles 11366 ]; 11367 const hasThemeStyles = hasThemeStyleSupport && presetStyles.length !== (settings.styles?.length ?? 0); 11368 if (!settings.disableLayoutStyles && !hasThemeStyles) { 11369 defaultEditorStyles.push({ 11370 css: getLayoutStyles({ 11371 style: {}, 11372 selector: "body", 11373 hasBlockGapSupport: false, 11374 hasFallbackGapSupport: true, 11375 fallbackGapValue: "0.5em" 11376 }) 11377 }); 11378 } 11379 return hasThemeStyles ? settings.styles ?? [] : defaultEditorStyles; 11380 }, [ 11381 settings.defaultEditorStyles, 11382 settings.disableLayoutStyles, 11383 settings.styles, 11384 hasThemeStyleSupport 11385 ]); 11386 } 11387 function MetaBoxesMain() { 11388 const [isOpen, openHeight, hasAnyVisible] = (0, import_data26.useSelect)((select3) => { 11389 const { get } = select3(import_preferences10.store); 11390 const { isMetaBoxLocationVisible: isMetaBoxLocationVisible2 } = select3(store); 11391 return [ 11392 !!get("core/edit-post", "metaBoxesMainIsOpen"), 11393 get("core/edit-post", "metaBoxesMainOpenHeight"), 11394 isMetaBoxLocationVisible2("normal") || isMetaBoxLocationVisible2("advanced") || isMetaBoxLocationVisible2("side") 11395 ]; 11396 }, []); 11397 const { set: setPreference } = (0, import_data26.useDispatch)(import_preferences10.store); 11398 const isShort = (0, import_compose2.useMediaQuery)("(max-height: 549px)"); 11399 const [{ min: min2 = 0, max: max2 }, setHeightConstraints] = (0, import_element29.useState)(() => ({})); 11400 const effectSizeConstraints = (0, import_compose2.useRefEffect)((node) => { 11401 const container = node.closest( 11402 ".interface-interface-skeleton__content" 11403 ); 11404 if (!container) { 11405 return; 11406 } 11407 const noticeContainer = container.querySelector(".editor-notices"); 11408 const resizeHandle = container.querySelector( 11409 ".edit-post-meta-boxes-main__presenter" 11410 ); 11411 const deriveConstraints = () => { 11412 const fullHeight = container.offsetHeight; 11413 let nextMax = fullHeight; 11414 if (noticeContainer) { 11415 nextMax -= noticeContainer.offsetHeight; 11416 } 11417 const nextMin = resizeHandle?.offsetHeight ?? 0; 11418 setHeightConstraints({ min: nextMin, max: nextMax }); 11419 }; 11420 const observer = new window.ResizeObserver(deriveConstraints); 11421 observer.observe(container); 11422 if (noticeContainer) { 11423 observer.observe(noticeContainer); 11424 } 11425 return () => observer.disconnect(); 11426 }, []); 11427 const metaBoxesMainRef = (0, import_element29.useRef)(); 11428 const setMainRefs = (0, import_compose2.useMergeRefs)([ 11429 metaBoxesMainRef, 11430 effectSizeConstraints 11431 ]); 11432 const separatorRef = (0, import_element29.useRef)(); 11433 const separatorHelpId = (0, import_element29.useId)(); 11434 const heightRef = (0, import_element29.useRef)(); 11435 const getAriaValueNow = (height) => Math.round((height - min2) / (max2 - min2) * 100); 11436 const persistIsOpen = (to = !isOpen) => setPreference("core/edit-post", "metaBoxesMainIsOpen", to); 11437 const applyHeight = (candidateHeight = "auto", isPersistent) => { 11438 let styleHeight; 11439 if (candidateHeight === "auto") { 11440 isPersistent = false; 11441 styleHeight = candidateHeight; 11442 } else { 11443 candidateHeight = Math.min(max2, Math.max(min2, candidateHeight)); 11444 heightRef.current = candidateHeight; 11445 styleHeight = `$candidateHeight}px`; 11446 } 11447 if (isPersistent) { 11448 setPreference( 11449 "core/edit-post", 11450 "metaBoxesMainOpenHeight", 11451 candidateHeight 11452 ); 11453 } else { 11454 metaBoxesMainRef.current.style.height = styleHeight; 11455 if (!isShort) { 11456 separatorRef.current.ariaValueNow = getAriaValueNow(candidateHeight); 11457 } 11458 } 11459 }; 11460 const bindDragGesture = useDrag( 11461 ({ movement, first, last, memo, tap, args }) => { 11462 const pane = metaBoxesMainRef.current; 11463 const [, yMovement] = movement; 11464 if (first) { 11465 pane.classList.add("is-resizing"); 11466 let fromHeight = heightRef.current ?? pane.offsetHeight; 11467 if (isOpen) { 11468 if (fromHeight > max2) { 11469 fromHeight = max2; 11470 } 11471 } else { 11472 fromHeight = min2; 11473 } 11474 applyHeight(fromHeight - yMovement); 11475 return { fromHeight }; 11476 } 11477 if (!first && !last && !tap) { 11478 applyHeight(memo.fromHeight - yMovement); 11479 return memo; 11480 } 11481 pane.classList.remove("is-resizing"); 11482 if (tap) { 11483 const [onTap] = args; 11484 onTap?.(); 11485 return; 11486 } 11487 const nextIsOpen = heightRef.current > min2; 11488 persistIsOpen(nextIsOpen); 11489 applyHeight(heightRef.current, nextIsOpen); 11490 }, 11491 { keyboardDisplacement: 20, filterTaps: true } 11492 ); 11493 if (!hasAnyVisible) { 11494 return; 11495 } 11496 const contents = /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)( 11497 "div", 11498 { 11499 className: "edit-post-layout__metaboxes edit-post-meta-boxes-main__liner", 11500 hidden: !isOpen, 11501 children: [ 11502 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(MetaBoxes, { location: "normal" }), 11503 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(MetaBoxes, { location: "advanced" }) 11504 ] 11505 } 11506 ); 11507 const isAutoHeight = openHeight === void 0; 11508 const usedOpenHeight = isShort ? "auto" : openHeight; 11509 const usedHeight = isOpen ? usedOpenHeight : min2; 11510 const usedAriaValueNow = max2 === void 0 || isAutoHeight ? 50 : getAriaValueNow(usedHeight); 11511 const paneLabel = (0, import_i18n15.__)("Meta Boxes"); 11512 const toggle = /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)( 11513 "button", 11514 { 11515 "aria-expanded": isOpen, 11516 onClick: ({ detail }) => { 11517 if (isShort || !detail) { 11518 persistIsOpen(); 11519 } 11520 }, 11521 ...!isShort && bindDragGesture(persistIsOpen), 11522 children: [ 11523 paneLabel, 11524 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_components8.Icon, { icon: isOpen ? chevron_up_default : chevron_down_default }) 11525 ] 11526 } 11527 ); 11528 const separator = !isShort && /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_jsx_runtime41.Fragment, { children: [ 11529 /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(tooltip_exports.Root, { children: [ 11530 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( 11531 tooltip_exports.Trigger, 11532 { 11533 render: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( 11534 "button", 11535 { 11536 ref: separatorRef, 11537 role: "separator", 11538 "aria-valuenow": usedAriaValueNow, 11539 "aria-label": (0, import_i18n15.__)("Drag to resize"), 11540 "aria-describedby": separatorHelpId, 11541 ...bindDragGesture() 11542 } 11543 ) 11544 } 11545 ), 11546 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(tooltip_exports.Popup, { children: (0, import_i18n15.__)("Drag to resize") }) 11547 ] }), 11548 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(VisuallyHidden, { id: separatorHelpId, children: (0, import_i18n15.__)( 11549 "Use up and down arrow keys to resize the meta box pane." 11550 ) }) 11551 ] }); 11552 return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)( 11553 navigable_region_default, 11554 { 11555 ariaLabel: paneLabel, 11556 ref: setMainRefs, 11557 className: clsx_default( 11558 "edit-post-meta-boxes-main", 11559 !isShort && "is-resizable" 11560 ), 11561 style: { height: usedHeight }, 11562 children: [ 11563 /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "edit-post-meta-boxes-main__presenter", children: [ 11564 toggle, 11565 separator 11566 ] }), 11567 contents 11568 ] 11569 } 11570 ); 11571 } 11572 function Layout({ 11573 postId: initialPostId, 11574 postType: initialPostType, 11575 settings, 11576 initialEdits 11577 }) { 11578 useCommands(); 11579 const { createErrorNotice } = (0, import_data26.useDispatch)(import_notices3.store); 11580 const { 11581 currentPost: { postId: currentPostId, postType: currentPostType }, 11582 onNavigateToEntityRecord, 11583 onNavigateToPreviousEntityRecord 11584 } = useNavigateToEntityRecord( 11585 initialPostId, 11586 initialPostType, 11587 "post-only" 11588 ); 11589 const isEditingTemplate2 = currentPostType === "wp_template"; 11590 const { 11591 mode, 11592 isFullscreenActive, 11593 hasResolvedMode, 11594 hasActiveMetaboxes, 11595 hasBlockSelected, 11596 showIconLabels, 11597 isDistractionFree, 11598 showMetaBoxes, 11599 isWelcomeGuideVisible, 11600 templateId 11601 } = (0, import_data26.useSelect)( 11602 (select3) => { 11603 const { get } = select3(import_preferences10.store); 11604 const { isFeatureActive: isFeatureActive2, hasMetaBoxes: hasMetaBoxes2 } = select3(store); 11605 const { canUser, getPostType, getTemplateId } = unlock2( 11606 select3(import_core_data9.store) 11607 ); 11608 const supportsTemplateMode = settings.supportsTemplateMode; 11609 const isViewable = getPostType(currentPostType)?.viewable ?? false; 11610 const canViewTemplate = canUser("read", { 11611 kind: "postType", 11612 name: "wp_template" 11613 }); 11614 const { getBlockSelectionStart, isZoomOut } = unlock2( 11615 select3(import_block_editor2.store) 11616 ); 11617 const { getEditorMode: getEditorMode2, getDefaultRenderingMode } = unlock2( 11618 select3(import_editor19.store) 11619 ); 11620 const isNotDesignPostType = !DESIGN_POST_TYPES.includes(currentPostType); 11621 const isDirectlyEditingPattern = currentPostType === "wp_block" && !onNavigateToPreviousEntityRecord; 11622 const _templateId = getTemplateId(currentPostType, currentPostId); 11623 const defaultMode = getDefaultRenderingMode(currentPostType); 11624 return { 11625 mode: getEditorMode2(), 11626 isFullscreenActive: isFeatureActive2("fullscreenMode"), 11627 hasActiveMetaboxes: hasMetaBoxes2(), 11628 hasResolvedMode: defaultMode === "template-locked" ? !!_templateId : defaultMode !== void 0, 11629 hasBlockSelected: !!getBlockSelectionStart(), 11630 showIconLabels: get("core", "showIconLabels"), 11631 isDistractionFree: get("core", "distractionFree"), 11632 showMetaBoxes: isNotDesignPostType && !isZoomOut() || isDirectlyEditingPattern, 11633 isWelcomeGuideVisible: isFeatureActive2("welcomeGuide"), 11634 templateId: supportsTemplateMode && isViewable && canViewTemplate && !isEditingTemplate2 ? _templateId : null 11635 }; 11636 }, 11637 [ 11638 currentPostType, 11639 currentPostId, 11640 isEditingTemplate2, 11641 settings.supportsTemplateMode, 11642 onNavigateToPreviousEntityRecord 11643 ] 11644 ); 11645 useMetaBoxInitialization(hasActiveMetaboxes && hasResolvedMode); 11646 const commandContext = hasBlockSelected ? "block-selection-edit" : "entity-edit"; 11647 useCommandContext(commandContext); 11648 const styles = useEditorStyles(settings); 11649 const editorSettings = (0, import_element29.useMemo)( 11650 () => ({ 11651 ...settings, 11652 styles, 11653 onNavigateToEntityRecord, 11654 onNavigateToPreviousEntityRecord 11655 }), 11656 [ 11657 settings, 11658 styles, 11659 onNavigateToEntityRecord, 11660 onNavigateToPreviousEntityRecord 11661 ] 11662 ); 11663 if (showIconLabels) { 11664 document.body.classList.add("show-icon-labels"); 11665 } else { 11666 document.body.classList.remove("show-icon-labels"); 11667 } 11668 const navigateRegionsProps = (0, import_components8.__unstableUseNavigateRegions)(); 11669 const className = clsx_default("edit-post-layout", "is-mode-" + mode, { 11670 "has-metaboxes": hasActiveMetaboxes 11671 }); 11672 function onPluginAreaError(name) { 11673 createErrorNotice( 11674 (0, import_i18n15.sprintf)( 11675 /* translators: %s: plugin name */ 11676 (0, import_i18n15.__)( 11677 'The "%s" plugin has encountered an error and cannot be rendered.' 11678 ), 11679 name 11680 ) 11681 ); 11682 } 11683 const { createSuccessNotice } = (0, import_data26.useDispatch)(import_notices3.store); 11684 const onActionPerformed = (0, import_element29.useCallback)( 11685 (actionId, items) => { 11686 switch (actionId) { 11687 case "move-to-trash": 11688 { 11689 document.location.href = (0, import_url6.addQueryArgs)("edit.php", { 11690 trashed: 1, 11691 post_type: items[0].type, 11692 ids: items[0].id 11693 }); 11694 } 11695 break; 11696 case "duplicate-post": 11697 { 11698 const newItem = items[0]; 11699 const title = typeof newItem.title === "string" ? newItem.title : newItem.title?.rendered; 11700 createSuccessNotice( 11701 (0, import_i18n15.sprintf)( 11702 // translators: %s: Title of the created post or template, e.g: "Hello world". 11703 (0, import_i18n15.__)('"%s" successfully created.'), 11704 (0, import_html_entities.decodeEntities)(title) || (0, import_i18n15.__)("(no title)") 11705 ), 11706 { 11707 type: "snackbar", 11708 id: "duplicate-post-action", 11709 actions: [ 11710 { 11711 label: (0, import_i18n15.__)("Edit"), 11712 onClick: () => { 11713 const postId = newItem.id; 11714 document.location.href = (0, import_url6.addQueryArgs)("post.php", { 11715 post: postId, 11716 action: "edit" 11717 }); 11718 } 11719 } 11720 ] 11721 } 11722 ); 11723 } 11724 break; 11725 } 11726 }, 11727 [createSuccessNotice] 11728 ); 11729 const initialPost = (0, import_element29.useMemo)(() => { 11730 return { 11731 type: initialPostType, 11732 id: initialPostId 11733 }; 11734 }, [initialPostType, initialPostId]); 11735 const backButton = (0, import_compose2.useViewportMatch)("medium") && isFullscreenActive ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(back_button_default, { initialPost }) : null; 11736 const adminPrimary = (0, import_element29.useMemo)(() => getAdminThemeColors().primary, []); 11737 return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_components8.SlotFillProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(tooltip_exports.Provider, { children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_theme.ThemeProvider, { isRoot: true, color: { primary: adminPrimary }, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_editor19.ErrorBoundary, { canCopyContent: true, children: [ 11738 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(WelcomeGuide, { postType: currentPostType }), 11739 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { ...navigateRegionsProps, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)( 11740 Editor, 11741 { 11742 settings: editorSettings, 11743 initialEdits, 11744 postType: currentPostType, 11745 postId: currentPostId, 11746 templateId, 11747 className, 11748 forceIsDirty: hasActiveMetaboxes, 11749 autoFocus: !isWelcomeGuideVisible, 11750 onActionPerformed, 11751 extraSidebarPanels: showMetaBoxes && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(MetaBoxes, { location: "side" }), 11752 extraContent: !isDistractionFree && showMetaBoxes && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(MetaBoxesMain, {}), 11753 children: [ 11754 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_editor19.PostLockedModal, {}), 11755 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(EditorInitialization, {}), 11756 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( 11757 FullscreenMode, 11758 { 11759 isActive: isFullscreenActive 11760 } 11761 ), 11762 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(BrowserURL, {}), 11763 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_editor19.UnsavedChangesWarning, {}), 11764 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_editor19.AutosaveMonitor, {}), 11765 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_editor19.LocalAutosaveMonitor, {}), 11766 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(keyboard_shortcuts_default, {}), 11767 currentPostType === "wp_block" && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(InitPatternModal, {}), 11768 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_plugins.PluginArea, { onError: onPluginAreaError }), 11769 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(more_menu_default, {}), 11770 backButton, 11771 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_notices3.SnackbarNotices, { className: "edit-post-layout__snackbar" }), 11772 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(UploadProgressSnackbar, {}) 11773 ] 11774 } 11775 ) }) 11776 ] }) }) }) }); 11777 } 11778 var layout_default = Layout; 11779 11780 // packages/edit-post/build-module/deprecated.mjs 11781 var import_editor20 = __toESM(require_editor(), 1); 11782 var import_url7 = __toESM(require_url(), 1); 11783 var import_deprecated3 = __toESM(require_deprecated(), 1); 11784 var import_jsx_runtime42 = __toESM(require_jsx_runtime(), 1); 11785 var { PluginPostExcerpt } = unlock2(import_editor20.privateApis); 11786 var isSiteEditor = (0, import_url7.getPath)(window.location.href)?.includes( 11787 "site-editor.php" 11788 ); 11789 var deprecateSlot = (name) => { 11790 (0, import_deprecated3.default)(`wp.editPost.$name}`, { 11791 since: "6.6", 11792 alternative: `wp.editor.$name}` 11793 }); 11794 }; 11795 function PluginBlockSettingsMenuItem(props) { 11796 if (isSiteEditor) { 11797 return null; 11798 } 11799 deprecateSlot("PluginBlockSettingsMenuItem"); 11800 return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_editor20.PluginBlockSettingsMenuItem, { ...props }); 11801 } 11802 function PluginDocumentSettingPanel(props) { 11803 if (isSiteEditor) { 11804 return null; 11805 } 11806 deprecateSlot("PluginDocumentSettingPanel"); 11807 return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_editor20.PluginDocumentSettingPanel, { ...props }); 11808 } 11809 function PluginMoreMenuItem(props) { 11810 if (isSiteEditor) { 11811 return null; 11812 } 11813 deprecateSlot("PluginMoreMenuItem"); 11814 return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_editor20.PluginMoreMenuItem, { ...props }); 11815 } 11816 function PluginPrePublishPanel(props) { 11817 if (isSiteEditor) { 11818 return null; 11819 } 11820 deprecateSlot("PluginPrePublishPanel"); 11821 return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_editor20.PluginPrePublishPanel, { ...props }); 11822 } 11823 function PluginPostPublishPanel(props) { 11824 if (isSiteEditor) { 11825 return null; 11826 } 11827 deprecateSlot("PluginPostPublishPanel"); 11828 return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_editor20.PluginPostPublishPanel, { ...props }); 11829 } 11830 function PluginPostStatusInfo(props) { 11831 if (isSiteEditor) { 11832 return null; 11833 } 11834 deprecateSlot("PluginPostStatusInfo"); 11835 return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_editor20.PluginPostStatusInfo, { ...props }); 11836 } 11837 function PluginSidebar(props) { 11838 if (isSiteEditor) { 11839 return null; 11840 } 11841 deprecateSlot("PluginSidebar"); 11842 return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_editor20.PluginSidebar, { ...props }); 11843 } 11844 function PluginSidebarMoreMenuItem(props) { 11845 if (isSiteEditor) { 11846 return null; 11847 } 11848 deprecateSlot("PluginSidebarMoreMenuItem"); 11849 return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_editor20.PluginSidebarMoreMenuItem, { ...props }); 11850 } 11851 function __experimentalPluginPostExcerpt() { 11852 if (isSiteEditor) { 11853 return null; 11854 } 11855 (0, import_deprecated3.default)("wp.editPost.__experimentalPluginPostExcerpt", { 11856 since: "6.6", 11857 hint: "Core and custom panels can be access programmatically using their panel name.", 11858 link: "https://developer.wordpress.org/block-editor/reference-guides/slotfills/plugin-document-setting-panel/#accessing-a-panel-programmatically" 11859 }); 11860 return PluginPostExcerpt; 11861 } 11862 11863 // packages/edit-post/build-module/index.mjs 11864 var import_jsx_runtime43 = __toESM(require_jsx_runtime(), 1); 11865 var { 11866 BackButton: __experimentalMainDashboardButton, 11867 registerCoreBlockBindingsSources 11868 } = unlock2(import_editor21.privateApis); 11869 var { enablePreloadMultiUse, clearPreloadedData } = unlock2( 11870 import_api_fetch2.default.privateApis 11871 ); 11872 function initializeEditor(id, postType, postId, settings, initialEdits) { 11873 const target = document.getElementById(id); 11874 const root = (0, import_element30.createRoot)(target); 11875 (0, import_data27.dispatch)(import_preferences11.store).setDefaults("core/edit-post", { 11876 fullscreenMode: true, 11877 themeStyles: true, 11878 welcomeGuide: true, 11879 welcomeGuideTemplate: true 11880 }); 11881 (0, import_data27.dispatch)(import_preferences11.store).setDefaults("core", { 11882 allowRightClickOverrides: true, 11883 editorMode: "visual", 11884 editorTool: "edit", 11885 fixedToolbar: false, 11886 hiddenBlockTypes: [], 11887 inactivePanels: [], 11888 openPanels: ["post-status"], 11889 showBlockBreadcrumbs: true, 11890 showIconLabels: false, 11891 showListViewByDefault: false, 11892 enableChoosePatternModal: true, 11893 isPublishSidebarEnabled: true, 11894 showCollaborationCursor: false, 11895 showCollaborationJoinNotifications: true, 11896 showCollaborationLeaveNotifications: true, 11897 showCollaborationPostSaveNotifications: true 11898 }); 11899 if (window.__clientSideMediaProcessing) { 11900 (0, import_data27.dispatch)(import_preferences11.store).setDefaults("core/media", { 11901 requireApproval: true, 11902 optimizeOnUpload: true 11903 }); 11904 } 11905 (0, import_data27.dispatch)(import_blocks2.store).reapplyBlockTypeFilters(); 11906 (0, import_block_library.registerCoreBlocks)(); 11907 registerCoreBlockBindingsSources(); 11908 (0, import_widgets.registerLegacyWidgetBlock)({ inserter: false }); 11909 (0, import_widgets.registerWidgetGroupBlock)({ inserter: false }); 11910 if (false) { 11911 (0, import_block_library.__experimentalRegisterExperimentalCoreBlocks)({ 11912 enableFSEBlocks: settings.__unstableEnableFullSiteEditingBlocks 11913 }); 11914 } 11915 const documentMode = document.compatMode === "CSS1Compat" ? "Standards" : "Quirks"; 11916 if (documentMode !== "Standards") { 11917 console.warn( 11918 "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." 11919 ); 11920 } 11921 window.addEventListener("dragover", (e) => e.preventDefault(), false); 11922 window.addEventListener("drop", (e) => e.preventDefault(), false); 11923 enablePreloadMultiUse(); 11924 const preloadedResolutions = preloadResolutions(postType, postId); 11925 preloadedResolutions.finally(() => { 11926 clearPreloadedData(); 11927 if (postType && postId) { 11928 const post = (0, import_data27.select)(import_core_data10.store).getEntityRecord( 11929 "postType", 11930 postType, 11931 postId 11932 ); 11933 if (post) { 11934 (0, import_data27.dispatch)(import_editor21.store).setupEditor( 11935 post, 11936 initialEdits, 11937 settings.template 11938 ); 11939 } 11940 } 11941 root.render( 11942 /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_element30.StrictMode, { children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)( 11943 layout_default, 11944 { 11945 settings, 11946 postId, 11947 postType, 11948 initialEdits 11949 } 11950 ) }) 11951 ); 11952 }); 11953 return root; 11954 } 11955 async function preloadResolutions(postType, postId) { 11956 const core = (0, import_data27.resolveSelect)(import_core_data10.store); 11957 const coreSelect = (0, import_data27.select)(import_core_data10.store); 11958 try { 11959 await Promise.all([ 11960 core.getCurrentUser(), 11961 core.getEntitiesConfig("postType"), 11962 core.getEntitiesConfig("taxonomy"), 11963 core.getEntitiesConfig("root"), 11964 core.getEntityRecords("root", "taxonomy"), 11965 core.getCurrentTheme(), 11966 // Forward-resolver alias of `getCurrentTheme` with its own 11967 // resolution metadata, so it needs a separate kick. 11968 core.getThemeSupports(), 11969 core.getBlockPatternCategories(), 11970 core.__experimentalGetCurrentGlobalStylesId(), 11971 core.__experimentalGetCurrentThemeBaseGlobalStyles(), 11972 core.__experimentalGetCurrentThemeGlobalStylesVariations(), 11973 core.getEntityRecord("root", "__unstableBase"), 11974 core.canUser("read", { kind: "root", name: "site" }), 11975 core.canUser("create", { kind: "postType", name: "attachment" }), 11976 core.canUser("create", { kind: "postType", name: "page" }), 11977 core.canUser("create", { kind: "postType", name: "wp_block" }), 11978 core.canUser("create", { 11979 kind: "postType", 11980 name: "wp_template" 11981 }), 11982 // The DataForm-based inspector requests the entity form config 11983 // when the document sidebar mounts. The args must match the 11984 // `useViewConfig` call in `@wordpress/views` exactly for the 11985 // resolution (and its preload entry) to be shared. 11986 ...postType && window?.__experimentalDataFormInspector ? [ 11987 unlock2(core).getViewConfig("postType", postType, { 11988 fields: "form" 11989 }) 11990 ] : [], 11991 // Per-post resolvers. `getPostType` and `getEditedEntityRecord` 11992 // are shorthand/forward-resolver aliases with their own 11993 // resolution metadata, so they need separate kicks. 11994 ...postType && postId ? [ 11995 core.getPostType(postType), 11996 core.getEntityRecord("postType", postType, postId), 11997 core.getEditedEntityRecord( 11998 "postType", 11999 postType, 12000 postId 12001 ), 12002 core.getAutosaves(postType, postId), 12003 core.getDefaultTemplateId({ slug: "front-page" }), 12004 core.canUser("create", { 12005 kind: "postType", 12006 name: postType 12007 }) 12008 ] : [] 12009 ]); 12010 const tasks = []; 12011 if (coreSelect.canUser("read", { kind: "root", name: "site" })) { 12012 tasks.push(core.getEntityRecord("root", "site")); 12013 } 12014 const globalStylesId = coreSelect.__experimentalGetCurrentGlobalStylesId(); 12015 if (globalStylesId) { 12016 tasks.push( 12017 core.canUser("update", { 12018 kind: "root", 12019 name: "globalStyles", 12020 id: globalStylesId 12021 }) 12022 ); 12023 } 12024 if (postType && postId) { 12025 const post = coreSelect.getEntityRecord( 12026 "postType", 12027 postType, 12028 postId 12029 ); 12030 if (post) { 12031 let slug = "page" === postType ? "page" : "single-" + postType; 12032 if (post.slug) { 12033 slug += "-" + post.slug; 12034 } 12035 tasks.push(core.getDefaultTemplateId({ slug })); 12036 if (post.author) { 12037 tasks.push( 12038 core.getUser(post.author, { 12039 context: "view", 12040 _fields: "id,name" 12041 }) 12042 ); 12043 } 12044 } 12045 } 12046 if (tasks.length) { 12047 await Promise.all(tasks); 12048 } 12049 if (globalStylesId) { 12050 if (coreSelect.canUser("update", { 12051 kind: "root", 12052 name: "globalStyles", 12053 id: globalStylesId 12054 })) { 12055 await core.getEntityRecord( 12056 "root", 12057 "globalStyles", 12058 globalStylesId 12059 ); 12060 } else { 12061 await core.getEntityRecord( 12062 "root", 12063 "globalStyles", 12064 globalStylesId, 12065 { context: "view" } 12066 ); 12067 } 12068 } 12069 } catch { 12070 } 12071 } 12072 function reinitializeEditor() { 12073 (0, import_deprecated4.default)("wp.editPost.reinitializeEditor", { 12074 since: "6.2", 12075 version: "6.3" 12076 }); 12077 } 12078 return __toCommonJS(index_exports); 12079 })(); 12080 /*! Bundled license information: 12081 12082 use-sync-external-store/cjs/use-sync-external-store-shim.development.js: 12083 (** 12084 * @license React 12085 * use-sync-external-store-shim.development.js 12086 * 12087 * Copyright (c) Meta Platforms, Inc. and affiliates. 12088 * 12089 * This source code is licensed under the MIT license found in the 12090 * LICENSE file in the root directory of this source tree. 12091 *) 12092 12093 use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js: 12094 (** 12095 * @license React 12096 * use-sync-external-store-shim/with-selector.development.js 12097 * 12098 * Copyright (c) Meta Platforms, Inc. and affiliates. 12099 * 12100 * This source code is licensed under the MIT license found in the 12101 * LICENSE file in the root directory of this source tree. 12102 *) 12103 */ 12104 (window.wp ||= {}).editPost = wp.editPost; 12105 })();
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated : Sun Sep 13 08:20:28 2026 | Cross-referenced by PHPXref |