| [ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
1 (function() { 2 var wp; 3 (wp ||= {}).blockDirectory = (() => { 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/plugins 36 var require_plugins = __commonJS({ 37 "package-external:@wordpress/plugins"(exports, module) { 38 module.exports = window.wp.plugins; 39 } 40 }); 41 42 // package-external:@wordpress/hooks 43 var require_hooks = __commonJS({ 44 "package-external:@wordpress/hooks"(exports, module) { 45 module.exports = window.wp.hooks; 46 } 47 }); 48 49 // package-external:@wordpress/blocks 50 var require_blocks = __commonJS({ 51 "package-external:@wordpress/blocks"(exports, module) { 52 module.exports = window.wp.blocks; 53 } 54 }); 55 56 // package-external:@wordpress/data 57 var require_data = __commonJS({ 58 "package-external:@wordpress/data"(exports, module) { 59 module.exports = window.wp.data; 60 } 61 }); 62 63 // package-external:@wordpress/element 64 var require_element = __commonJS({ 65 "package-external:@wordpress/element"(exports, module) { 66 module.exports = window.wp.element; 67 } 68 }); 69 70 // package-external:@wordpress/editor 71 var require_editor = __commonJS({ 72 "package-external:@wordpress/editor"(exports, module) { 73 module.exports = window.wp.editor; 74 } 75 }); 76 77 // package-external:@wordpress/block-editor 78 var require_block_editor = __commonJS({ 79 "package-external:@wordpress/block-editor"(exports, module) { 80 module.exports = window.wp.blockEditor; 81 } 82 }); 83 84 // package-external:@wordpress/i18n 85 var require_i18n = __commonJS({ 86 "package-external:@wordpress/i18n"(exports, module) { 87 module.exports = window.wp.i18n; 88 } 89 }); 90 91 // package-external:@wordpress/api-fetch 92 var require_api_fetch = __commonJS({ 93 "package-external:@wordpress/api-fetch"(exports, module) { 94 module.exports = window.wp.apiFetch; 95 } 96 }); 97 98 // package-external:@wordpress/notices 99 var require_notices = __commonJS({ 100 "package-external:@wordpress/notices"(exports, module) { 101 module.exports = window.wp.notices; 102 } 103 }); 104 105 // package-external:@wordpress/url 106 var require_url = __commonJS({ 107 "package-external:@wordpress/url"(exports, module) { 108 module.exports = window.wp.url; 109 } 110 }); 111 112 // package-external:@wordpress/compose 113 var require_compose = __commonJS({ 114 "package-external:@wordpress/compose"(exports, module) { 115 module.exports = window.wp.compose; 116 } 117 }); 118 119 // package-external:@wordpress/components 120 var require_components = __commonJS({ 121 "package-external:@wordpress/components"(exports, module) { 122 module.exports = window.wp.components; 123 } 124 }); 125 126 // package-external:@wordpress/core-data 127 var require_core_data = __commonJS({ 128 "package-external:@wordpress/core-data"(exports, module) { 129 module.exports = window.wp.coreData; 130 } 131 }); 132 133 // package-external:@wordpress/html-entities 134 var require_html_entities = __commonJS({ 135 "package-external:@wordpress/html-entities"(exports, module) { 136 module.exports = window.wp.htmlEntities; 137 } 138 }); 139 140 // vendor-external:react 141 var require_react = __commonJS({ 142 "vendor-external:react"(exports, module) { 143 module.exports = window.React; 144 } 145 }); 146 147 // vendor-external:react/jsx-runtime 148 var require_jsx_runtime = __commonJS({ 149 "vendor-external:react/jsx-runtime"(exports, module) { 150 module.exports = window.ReactJSXRuntime; 151 } 152 }); 153 154 // vendor-external:react-dom 155 var require_react_dom = __commonJS({ 156 "vendor-external:react-dom"(exports, module) { 157 module.exports = window.ReactDOM; 158 } 159 }); 160 161 // package-external:@wordpress/primitives 162 var require_primitives = __commonJS({ 163 "package-external:@wordpress/primitives"(exports, module) { 164 module.exports = window.wp.primitives; 165 } 166 }); 167 168 // node_modules/.store/use-sync-external-store@1.7.0-jHNF5n8408rkWhZ5NHKclA/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js 169 var require_use_sync_external_store_shim_development = __commonJS({ 170 "node_modules/.store/use-sync-external-store@1.7.0-jHNF5n8408rkWhZ5NHKclA/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(exports) { 171 "use strict"; 172 (function() { 173 function is(x, y) { 174 return x === y && (0 !== x || 1 / x === 1 / y) || x !== x && y !== y; 175 } 176 function useSyncExternalStore$2(subscribe, getSnapshot) { 177 didWarnOld18Alpha || void 0 === React53.startTransition || (didWarnOld18Alpha = true, console.error( 178 "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." 179 )); 180 var value = getSnapshot(); 181 if (!didWarnUncachedGetSnapshot) { 182 var cachedValue = getSnapshot(); 183 objectIs(value, cachedValue) || (console.error( 184 "The result of getSnapshot should be cached to avoid an infinite loop" 185 ), didWarnUncachedGetSnapshot = true); 186 } 187 cachedValue = useState13({ 188 inst: { value, getSnapshot } 189 }); 190 var inst = cachedValue[0].inst, forceUpdate = cachedValue[1]; 191 useLayoutEffect3( 192 function() { 193 inst.value = value; 194 inst.getSnapshot = getSnapshot; 195 checkIfSnapshotChanged(inst) && forceUpdate({ inst }); 196 }, 197 [subscribe, value, getSnapshot] 198 ); 199 useEffect15( 200 function() { 201 checkIfSnapshotChanged(inst) && forceUpdate({ inst }); 202 return subscribe(function() { 203 checkIfSnapshotChanged(inst) && forceUpdate({ inst }); 204 }); 205 }, 206 [subscribe] 207 ); 208 useDebugValue2(value); 209 return value; 210 } 211 function checkIfSnapshotChanged(inst) { 212 var latestGetSnapshot = inst.getSnapshot; 213 inst = inst.value; 214 try { 215 var nextValue = latestGetSnapshot(); 216 return !objectIs(inst, nextValue); 217 } catch (error2) { 218 return true; 219 } 220 } 221 function useSyncExternalStore$1(subscribe, getSnapshot) { 222 return getSnapshot(); 223 } 224 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); 225 var React53 = require_react(), objectIs = "function" === typeof Object.is ? Object.is : is, useState13 = React53.useState, useEffect15 = React53.useEffect, useLayoutEffect3 = React53.useLayoutEffect, useDebugValue2 = React53.useDebugValue, didWarnOld18Alpha = false, didWarnUncachedGetSnapshot = false, shim = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2; 226 exports.useSyncExternalStore = void 0 !== React53.useSyncExternalStore ? React53.useSyncExternalStore : shim; 227 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); 228 })(); 229 } 230 }); 231 232 // node_modules/.store/use-sync-external-store@1.7.0-jHNF5n8408rkWhZ5NHKclA/node_modules/use-sync-external-store/shim/index.js 233 var require_shim = __commonJS({ 234 "node_modules/.store/use-sync-external-store@1.7.0-jHNF5n8408rkWhZ5NHKclA/node_modules/use-sync-external-store/shim/index.js"(exports, module) { 235 "use strict"; 236 if (false) { 237 module.exports = null; 238 } else { 239 module.exports = require_use_sync_external_store_shim_development(); 240 } 241 } 242 }); 243 244 // node_modules/.store/use-sync-external-store@1.7.0-jHNF5n8408rkWhZ5NHKclA/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js 245 var require_with_selector_development = __commonJS({ 246 "node_modules/.store/use-sync-external-store@1.7.0-jHNF5n8408rkWhZ5NHKclA/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js"(exports) { 247 "use strict"; 248 (function() { 249 function is(x, y) { 250 return x === y && (0 !== x || 1 / x === 1 / y) || x !== x && y !== y; 251 } 252 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); 253 var React53 = require_react(), shim = require_shim(), objectIs = "function" === typeof Object.is ? Object.is : is, useSyncExternalStore3 = shim.useSyncExternalStore, useRef20 = React53.useRef, useEffect15 = React53.useEffect, useMemo17 = React53.useMemo, useDebugValue2 = React53.useDebugValue; 254 exports.useSyncExternalStoreWithSelector = function(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) { 255 var instRef = useRef20(null); 256 if (null === instRef.current) { 257 var inst = { hasValue: false, value: null }; 258 instRef.current = inst; 259 } else inst = instRef.current; 260 instRef = useMemo17( 261 function() { 262 function memoizedSelector(nextSnapshot) { 263 if (!hasMemo) { 264 hasMemo = true; 265 memoizedSnapshot = nextSnapshot; 266 nextSnapshot = selector(nextSnapshot); 267 if (void 0 !== isEqual && inst.hasValue) { 268 var currentSelection = inst.value; 269 if (isEqual(currentSelection, nextSnapshot)) 270 return memoizedSelection = currentSelection; 271 } 272 return memoizedSelection = nextSnapshot; 273 } 274 currentSelection = memoizedSelection; 275 if (objectIs(memoizedSnapshot, nextSnapshot)) 276 return currentSelection; 277 var nextSelection = selector(nextSnapshot); 278 if (void 0 !== isEqual && isEqual(currentSelection, nextSelection)) 279 return memoizedSnapshot = nextSnapshot, currentSelection; 280 memoizedSnapshot = nextSnapshot; 281 return memoizedSelection = nextSelection; 282 } 283 var hasMemo = false, memoizedSnapshot, memoizedSelection, maybeGetServerSnapshot = void 0 === getServerSnapshot ? null : getServerSnapshot; 284 return [ 285 function() { 286 return memoizedSelector(getSnapshot()); 287 }, 288 null === maybeGetServerSnapshot ? void 0 : function() { 289 return memoizedSelector(maybeGetServerSnapshot()); 290 } 291 ]; 292 }, 293 [getSnapshot, getServerSnapshot, selector, isEqual] 294 ); 295 var value = useSyncExternalStore3(subscribe, instRef[0], instRef[1]); 296 useEffect15( 297 function() { 298 inst.hasValue = true; 299 inst.value = value; 300 }, 301 [value] 302 ); 303 useDebugValue2(value); 304 return value; 305 }; 306 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); 307 })(); 308 } 309 }); 310 311 // node_modules/.store/use-sync-external-store@1.7.0-jHNF5n8408rkWhZ5NHKclA/node_modules/use-sync-external-store/shim/with-selector.js 312 var require_with_selector = __commonJS({ 313 "node_modules/.store/use-sync-external-store@1.7.0-jHNF5n8408rkWhZ5NHKclA/node_modules/use-sync-external-store/shim/with-selector.js"(exports, module) { 314 "use strict"; 315 if (false) { 316 module.exports = null; 317 } else { 318 module.exports = require_with_selector_development(); 319 } 320 } 321 }); 322 323 // package-external:@wordpress/a11y 324 var require_a11y = __commonJS({ 325 "package-external:@wordpress/a11y"(exports, module) { 326 module.exports = window.wp.a11y; 327 } 328 }); 329 330 // package-external:@wordpress/theme 331 var require_theme = __commonJS({ 332 "package-external:@wordpress/theme"(exports, module) { 333 module.exports = window.wp.theme; 334 } 335 }); 336 337 // package-external:@wordpress/private-apis 338 var require_private_apis = __commonJS({ 339 "package-external:@wordpress/private-apis"(exports, module) { 340 module.exports = window.wp.privateApis; 341 } 342 }); 343 344 // packages/block-directory/build-module/index.mjs 345 var index_exports = {}; 346 __export(index_exports, { 347 store: () => store 348 }); 349 350 // packages/block-directory/build-module/plugins/index.mjs 351 var import_plugins = __toESM(require_plugins(), 1); 352 var import_hooks = __toESM(require_hooks(), 1); 353 354 // packages/block-directory/build-module/components/auto-block-uninstaller/index.mjs 355 var import_blocks2 = __toESM(require_blocks(), 1); 356 var import_data4 = __toESM(require_data(), 1); 357 var import_element = __toESM(require_element(), 1); 358 var import_editor = __toESM(require_editor(), 1); 359 360 // packages/block-directory/build-module/store/index.mjs 361 var import_data3 = __toESM(require_data(), 1); 362 363 // packages/block-directory/build-module/store/reducer.mjs 364 var import_data = __toESM(require_data(), 1); 365 var downloadableBlocks = (state = {}, action) => { 366 switch (action.type) { 367 case "FETCH_DOWNLOADABLE_BLOCKS": 368 return { 369 ...state, 370 [action.filterValue]: { 371 isRequesting: true 372 } 373 }; 374 case "RECEIVE_DOWNLOADABLE_BLOCKS": 375 return { 376 ...state, 377 [action.filterValue]: { 378 results: action.downloadableBlocks, 379 isRequesting: false 380 } 381 }; 382 } 383 return state; 384 }; 385 var blockManagement = (state = { 386 installedBlockTypes: [], 387 isInstalling: {} 388 }, action) => { 389 switch (action.type) { 390 case "ADD_INSTALLED_BLOCK_TYPE": 391 return { 392 ...state, 393 installedBlockTypes: [ 394 ...state.installedBlockTypes, 395 action.item 396 ] 397 }; 398 case "REMOVE_INSTALLED_BLOCK_TYPE": 399 return { 400 ...state, 401 installedBlockTypes: state.installedBlockTypes.filter( 402 (blockType) => blockType.name !== action.item.name 403 ) 404 }; 405 case "SET_INSTALLING_BLOCK": 406 return { 407 ...state, 408 isInstalling: { 409 ...state.isInstalling, 410 [action.blockId]: action.isInstalling 411 } 412 }; 413 } 414 return state; 415 }; 416 var errorNotices = (state = {}, action) => { 417 switch (action.type) { 418 case "SET_ERROR_NOTICE": 419 return { 420 ...state, 421 [action.blockId]: { 422 message: action.message, 423 isFatal: action.isFatal 424 } 425 }; 426 case "CLEAR_ERROR_NOTICE": 427 const { [action.blockId]: blockId, ...restState } = state; 428 return restState; 429 } 430 return state; 431 }; 432 var reducer_default = (0, import_data.combineReducers)({ 433 downloadableBlocks, 434 blockManagement, 435 errorNotices 436 }); 437 438 // packages/block-directory/build-module/store/selectors.mjs 439 var selectors_exports = {}; 440 __export(selectors_exports, { 441 getDownloadableBlocks: () => getDownloadableBlocks, 442 getErrorNoticeForBlock: () => getErrorNoticeForBlock, 443 getErrorNotices: () => getErrorNotices, 444 getInstalledBlockTypes: () => getInstalledBlockTypes, 445 getNewBlockTypes: () => getNewBlockTypes, 446 getUnusedBlockTypes: () => getUnusedBlockTypes, 447 isInstalling: () => isInstalling, 448 isRequestingDownloadableBlocks: () => isRequestingDownloadableBlocks 449 }); 450 var import_data2 = __toESM(require_data(), 1); 451 var import_block_editor = __toESM(require_block_editor(), 1); 452 var EMPTY_ARRAY = []; 453 function isRequestingDownloadableBlocks(state, filterValue) { 454 return state.downloadableBlocks[filterValue]?.isRequesting ?? false; 455 } 456 function getDownloadableBlocks(state, filterValue) { 457 return state.downloadableBlocks[filterValue]?.results ?? EMPTY_ARRAY; 458 } 459 function getInstalledBlockTypes(state) { 460 return state.blockManagement.installedBlockTypes; 461 } 462 var getNewBlockTypes = (0, import_data2.createRegistrySelector)( 463 (select) => (0, import_data2.createSelector)( 464 (state) => { 465 const installedBlockTypes = getInstalledBlockTypes(state); 466 if (!installedBlockTypes.length) { 467 return EMPTY_ARRAY; 468 } 469 const { getBlockName, getClientIdsWithDescendants } = select(import_block_editor.store); 470 const installedBlockNames = installedBlockTypes.map( 471 (blockType) => blockType.name 472 ); 473 const foundBlockNames = getClientIdsWithDescendants().flatMap( 474 (clientId) => { 475 const blockName = getBlockName(clientId); 476 return installedBlockNames.includes(blockName) ? blockName : []; 477 } 478 ); 479 const newBlockTypes = installedBlockTypes.filter( 480 (blockType) => foundBlockNames.includes(blockType.name) 481 ); 482 return newBlockTypes.length > 0 ? newBlockTypes : EMPTY_ARRAY; 483 }, 484 (state) => [ 485 getInstalledBlockTypes(state), 486 select(import_block_editor.store).getClientIdsWithDescendants() 487 ] 488 ) 489 ); 490 var getUnusedBlockTypes = (0, import_data2.createRegistrySelector)( 491 (select) => (0, import_data2.createSelector)( 492 (state) => { 493 const installedBlockTypes = getInstalledBlockTypes(state); 494 if (!installedBlockTypes.length) { 495 return EMPTY_ARRAY; 496 } 497 const { getBlockName, getClientIdsWithDescendants } = select(import_block_editor.store); 498 const installedBlockNames = installedBlockTypes.map( 499 (blockType) => blockType.name 500 ); 501 const foundBlockNames = getClientIdsWithDescendants().flatMap( 502 (clientId) => { 503 const blockName = getBlockName(clientId); 504 return installedBlockNames.includes(blockName) ? blockName : []; 505 } 506 ); 507 const unusedBlockTypes = installedBlockTypes.filter( 508 (blockType) => !foundBlockNames.includes(blockType.name) 509 ); 510 return unusedBlockTypes.length > 0 ? unusedBlockTypes : EMPTY_ARRAY; 511 }, 512 (state) => [ 513 getInstalledBlockTypes(state), 514 select(import_block_editor.store).getClientIdsWithDescendants() 515 ] 516 ) 517 ); 518 function isInstalling(state, blockId) { 519 return state.blockManagement.isInstalling[blockId] || false; 520 } 521 function getErrorNotices(state) { 522 return state.errorNotices; 523 } 524 function getErrorNoticeForBlock(state, blockId) { 525 return state.errorNotices[blockId]; 526 } 527 528 // packages/block-directory/build-module/store/actions.mjs 529 var actions_exports = {}; 530 __export(actions_exports, { 531 addInstalledBlockType: () => addInstalledBlockType, 532 clearErrorNotice: () => clearErrorNotice, 533 fetchDownloadableBlocks: () => fetchDownloadableBlocks, 534 installBlockType: () => installBlockType, 535 receiveDownloadableBlocks: () => receiveDownloadableBlocks, 536 removeInstalledBlockType: () => removeInstalledBlockType, 537 setErrorNotice: () => setErrorNotice, 538 setIsInstalling: () => setIsInstalling, 539 uninstallBlockType: () => uninstallBlockType 540 }); 541 var import_blocks = __toESM(require_blocks(), 1); 542 var import_i18n = __toESM(require_i18n(), 1); 543 var import_api_fetch2 = __toESM(require_api_fetch(), 1); 544 var import_notices = __toESM(require_notices(), 1); 545 var import_url = __toESM(require_url(), 1); 546 547 // packages/block-directory/build-module/store/load-assets.mjs 548 var import_api_fetch = __toESM(require_api_fetch(), 1); 549 var loadAsset = (el) => { 550 return new Promise((resolve, reject) => { 551 const newNode = document.createElement(el.nodeName); 552 ["id", "rel", "src", "href", "type"].forEach((attr2) => { 553 if (el[attr2]) { 554 newNode[attr2] = el[attr2]; 555 } 556 }); 557 if (el.innerHTML) { 558 newNode.appendChild(document.createTextNode(el.innerHTML)); 559 } 560 newNode.onload = () => resolve(true); 561 newNode.onerror = () => reject(new Error("Error loading asset.")); 562 document.body.appendChild(newNode); 563 if ("link" === newNode.nodeName.toLowerCase() || "script" === newNode.nodeName.toLowerCase() && !newNode.src) { 564 resolve(); 565 } 566 }); 567 }; 568 async function loadAssets() { 569 const response = await (0, import_api_fetch.default)({ 570 url: document.location.href, 571 parse: false 572 }); 573 const data = await response.text(); 574 const doc = new window.DOMParser().parseFromString(data, "text/html"); 575 const newAssets = Array.from( 576 doc.querySelectorAll('link[rel="stylesheet"],script') 577 ).filter((asset) => asset.id && !document.getElementById(asset.id)); 578 for (const newAsset of newAssets) { 579 await loadAsset(newAsset); 580 } 581 } 582 583 // packages/block-directory/build-module/store/utils/get-plugin-url.mjs 584 function getPluginUrl(block) { 585 if (!block) { 586 return false; 587 } 588 const link = block.links["wp:plugin"] || block.links.self; 589 if (link && link.length) { 590 return link[0].href; 591 } 592 return false; 593 } 594 595 // packages/block-directory/build-module/store/actions.mjs 596 function fetchDownloadableBlocks(filterValue) { 597 return { type: "FETCH_DOWNLOADABLE_BLOCKS", filterValue }; 598 } 599 function receiveDownloadableBlocks(downloadableBlocks2, filterValue) { 600 return { 601 type: "RECEIVE_DOWNLOADABLE_BLOCKS", 602 downloadableBlocks: downloadableBlocks2, 603 filterValue 604 }; 605 } 606 var installBlockType = (block) => async ({ registry, dispatch }) => { 607 const { id, name } = block; 608 let success = false; 609 dispatch.clearErrorNotice(id); 610 try { 611 dispatch.setIsInstalling(id, true); 612 const url = getPluginUrl(block); 613 let links = {}; 614 if (url) { 615 await (0, import_api_fetch2.default)({ 616 method: "PUT", 617 url, 618 data: { status: "active" } 619 }); 620 } else { 621 const response = await (0, import_api_fetch2.default)({ 622 method: "POST", 623 path: "wp/v2/plugins", 624 data: { slug: id, status: "active" } 625 }); 626 links = response._links; 627 } 628 dispatch.addInstalledBlockType({ 629 ...block, 630 links: { ...block.links, ...links } 631 }); 632 const metadataFields = [ 633 "api_version", 634 "title", 635 "category", 636 "parent", 637 "ancestor", 638 "icon", 639 "description", 640 "keywords", 641 "attributes", 642 "provides_context", 643 "uses_context", 644 "selectors", 645 "supports", 646 "styles", 647 "example", 648 "variations", 649 "allowed_blocks", 650 "block_hooks" 651 ]; 652 await (0, import_api_fetch2.default)({ 653 path: (0, import_url.addQueryArgs)(`/wp/v2/block-types/$name}`, { 654 _fields: metadataFields 655 }) 656 }).catch(() => { 657 }).then((response) => { 658 if (!response) { 659 return; 660 } 661 (0, import_blocks.unstable__bootstrapServerSideBlockDefinitions)({ 662 [name]: Object.fromEntries( 663 Object.entries(response).filter( 664 ([key]) => metadataFields.includes(key) 665 ) 666 ) 667 }); 668 }); 669 await loadAssets(); 670 const registeredBlocks = registry.select(import_blocks.store).getBlockTypes(); 671 if (!registeredBlocks.some((i) => i.name === name)) { 672 throw new Error( 673 (0, import_i18n.__)("Error registering block. Try reloading the page.") 674 ); 675 } 676 registry.dispatch(import_notices.store).createInfoNotice( 677 (0, import_i18n.sprintf)( 678 // translators: %s is the block title. 679 (0, import_i18n.__)("Block %s installed and added."), 680 block.title 681 ), 682 { 683 speak: true, 684 type: "snackbar" 685 } 686 ); 687 success = true; 688 } catch (error2) { 689 let message = error2.message || (0, import_i18n.__)("An error occurred."); 690 let isFatal = error2 instanceof Error; 691 const fatalAPIErrors = { 692 folder_exists: (0, import_i18n.__)( 693 "This block is already installed. Try reloading the page." 694 ), 695 unable_to_connect_to_filesystem: (0, import_i18n.__)( 696 "Error installing block. You can reload the page and try again." 697 ) 698 }; 699 if (fatalAPIErrors[error2.code]) { 700 isFatal = true; 701 message = fatalAPIErrors[error2.code]; 702 } 703 dispatch.setErrorNotice(id, message, isFatal); 704 registry.dispatch(import_notices.store).createErrorNotice(message, { 705 speak: true, 706 isDismissible: true 707 }); 708 } 709 dispatch.setIsInstalling(id, false); 710 return success; 711 }; 712 var uninstallBlockType = (block) => async ({ registry, dispatch }) => { 713 try { 714 const url = getPluginUrl(block); 715 await (0, import_api_fetch2.default)({ 716 method: "PUT", 717 url, 718 data: { status: "inactive" } 719 }); 720 await (0, import_api_fetch2.default)({ 721 method: "DELETE", 722 url 723 }); 724 dispatch.removeInstalledBlockType(block); 725 } catch (error2) { 726 registry.dispatch(import_notices.store).createErrorNotice( 727 error2.message || (0, import_i18n.__)("An error occurred.") 728 ); 729 } 730 }; 731 function addInstalledBlockType(item) { 732 return { 733 type: "ADD_INSTALLED_BLOCK_TYPE", 734 item 735 }; 736 } 737 function removeInstalledBlockType(item) { 738 return { 739 type: "REMOVE_INSTALLED_BLOCK_TYPE", 740 item 741 }; 742 } 743 function setIsInstalling(blockId, isInstalling2) { 744 return { 745 type: "SET_INSTALLING_BLOCK", 746 blockId, 747 isInstalling: isInstalling2 748 }; 749 } 750 function setErrorNotice(blockId, message, isFatal = false) { 751 return { 752 type: "SET_ERROR_NOTICE", 753 blockId, 754 message, 755 isFatal 756 }; 757 } 758 function clearErrorNotice(blockId) { 759 return { 760 type: "CLEAR_ERROR_NOTICE", 761 blockId 762 }; 763 } 764 765 // packages/block-directory/build-module/store/resolvers.mjs 766 var resolvers_exports = {}; 767 __export(resolvers_exports, { 768 getDownloadableBlocks: () => getDownloadableBlocks2 769 }); 770 771 // node_modules/.store/tslib@2.8.1-LT-dxu1EkVy7OUDyVf5glQ/node_modules/tslib/tslib.es6.mjs 772 var __assign = function() { 773 __assign = Object.assign || function __assign2(t) { 774 for (var s, i = 1, n = arguments.length; i < n; i++) { 775 s = arguments[i]; 776 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; 777 } 778 return t; 779 }; 780 return __assign.apply(this, arguments); 781 }; 782 783 // node_modules/.store/lower-case@2.0.2-5YZP5nczP5_f_8Vt5KBPjA/node_modules/lower-case/dist.es2015/index.js 784 function lowerCase(str) { 785 return str.toLowerCase(); 786 } 787 788 // node_modules/.store/no-case@3.0.4-R4Hzt6qn-erEsTak7ojDpg/node_modules/no-case/dist.es2015/index.js 789 var DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g]; 790 var DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi; 791 function noCase(input, options) { 792 if (options === void 0) { 793 options = {}; 794 } 795 var _a = options.splitRegexp, splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a, _b = options.stripRegexp, stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b, _c = options.transform, transform = _c === void 0 ? lowerCase : _c, _d = options.delimiter, delimiter = _d === void 0 ? " " : _d; 796 var result = replace(replace(input, splitRegexp, "$1\0$2"), stripRegexp, "\0"); 797 var start = 0; 798 var end = result.length; 799 while (result.charAt(start) === "\0") 800 start++; 801 while (result.charAt(end - 1) === "\0") 802 end--; 803 return result.slice(start, end).split("\0").map(transform).join(delimiter); 804 } 805 function replace(input, re, value) { 806 if (re instanceof RegExp) 807 return input.replace(re, value); 808 return re.reduce(function(input2, re2) { 809 return input2.replace(re2, value); 810 }, input); 811 } 812 813 // node_modules/.store/pascal-case@3.1.2-khtSA9hpCTEVLYfMgyRdoA/node_modules/pascal-case/dist.es2015/index.js 814 function pascalCaseTransform(input, index2) { 815 var firstChar = input.charAt(0); 816 var lowerChars = input.substr(1).toLowerCase(); 817 if (index2 > 0 && firstChar >= "0" && firstChar <= "9") { 818 return "_" + firstChar + lowerChars; 819 } 820 return "" + firstChar.toUpperCase() + lowerChars; 821 } 822 function pascalCase(input, options) { 823 if (options === void 0) { 824 options = {}; 825 } 826 return noCase(input, __assign({ delimiter: "", transform: pascalCaseTransform }, options)); 827 } 828 829 // node_modules/.store/camel-case@4.1.2-5Gz5buNb7xjdcDcS4uJ7xw/node_modules/camel-case/dist.es2015/index.js 830 function camelCaseTransform(input, index2) { 831 if (index2 === 0) 832 return input.toLowerCase(); 833 return pascalCaseTransform(input, index2); 834 } 835 function camelCase(input, options) { 836 if (options === void 0) { 837 options = {}; 838 } 839 return pascalCase(input, __assign({ transform: camelCaseTransform }, options)); 840 } 841 842 // packages/block-directory/build-module/store/resolvers.mjs 843 var import_api_fetch3 = __toESM(require_api_fetch(), 1); 844 var getDownloadableBlocks2 = (filterValue) => async ({ dispatch }) => { 845 if (!filterValue) { 846 return; 847 } 848 try { 849 dispatch(fetchDownloadableBlocks(filterValue)); 850 const results = await (0, import_api_fetch3.default)({ 851 path: `wp/v2/block-directory/search?term=$filterValue}` 852 }); 853 const blocks = results.map( 854 (result) => Object.fromEntries( 855 Object.entries(result).map(([key, value]) => [ 856 camelCase(key), 857 value 858 ]) 859 ) 860 ); 861 dispatch(receiveDownloadableBlocks(blocks, filterValue)); 862 } catch { 863 dispatch(receiveDownloadableBlocks([], filterValue)); 864 } 865 }; 866 867 // packages/block-directory/build-module/store/index.mjs 868 var STORE_NAME = "core/block-directory"; 869 var storeConfig = { 870 reducer: reducer_default, 871 selectors: selectors_exports, 872 actions: actions_exports, 873 resolvers: resolvers_exports 874 }; 875 var store = (0, import_data3.createReduxStore)(STORE_NAME, storeConfig); 876 (0, import_data3.register)(store); 877 878 // packages/block-directory/build-module/components/auto-block-uninstaller/index.mjs 879 function AutoBlockUninstaller() { 880 const { uninstallBlockType: uninstallBlockType2 } = (0, import_data4.useDispatch)(store); 881 const shouldRemoveBlockTypes = (0, import_data4.useSelect)((select) => { 882 const { isAutosavingPost, isSavingPost } = select(import_editor.store); 883 return isSavingPost() && !isAutosavingPost(); 884 }, []); 885 const unusedBlockTypes = (0, import_data4.useSelect)( 886 (select) => select(store).getUnusedBlockTypes(), 887 [] 888 ); 889 (0, import_element.useEffect)(() => { 890 if (shouldRemoveBlockTypes && unusedBlockTypes.length) { 891 unusedBlockTypes.forEach((blockType) => { 892 uninstallBlockType2(blockType); 893 (0, import_blocks2.unregisterBlockType)(blockType.name); 894 }); 895 } 896 }, [shouldRemoveBlockTypes]); 897 return null; 898 } 899 900 // packages/block-directory/build-module/plugins/inserter-menu-downloadable-blocks-panel/index.mjs 901 var import_block_editor3 = __toESM(require_block_editor(), 1); 902 var import_compose = __toESM(require_compose(), 1); 903 var import_element35 = __toESM(require_element(), 1); 904 905 // packages/block-directory/build-module/components/downloadable-blocks-panel/index.mjs 906 var import_i18n13 = __toESM(require_i18n(), 1); 907 var import_components3 = __toESM(require_components(), 1); 908 var import_core_data = __toESM(require_core_data(), 1); 909 var import_data8 = __toESM(require_data(), 1); 910 var import_blocks5 = __toESM(require_blocks(), 1); 911 912 // packages/block-directory/build-module/components/downloadable-blocks-list/index.mjs 913 var import_i18n10 = __toESM(require_i18n(), 1); 914 var import_components2 = __toESM(require_components(), 1); 915 var import_blocks4 = __toESM(require_blocks(), 1); 916 var import_data7 = __toESM(require_data(), 1); 917 918 // node_modules/.store/clsx@2.1.1-XOLP1vUL9vEGfpiXm37fAw/node_modules/clsx/dist/clsx.mjs 919 function r(e) { 920 var t, f, n = ""; 921 if ("string" == typeof e || "number" == typeof e) n += e; 922 else if ("object" == typeof e) if (Array.isArray(e)) { 923 var o = e.length; 924 for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f); 925 } else for (f in e) e[f] && (n && (n += " "), n += f); 926 return n; 927 } 928 function clsx() { 929 for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t); 930 return n; 931 } 932 var clsx_default = clsx; 933 934 // packages/block-directory/build-module/components/downloadable-block-list-item/index.mjs 935 var import_i18n9 = __toESM(require_i18n(), 1); 936 var import_components = __toESM(require_components(), 1); 937 var import_element33 = __toESM(require_element(), 1); 938 var import_html_entities = __toESM(require_html_entities(), 1); 939 var import_blocks3 = __toESM(require_blocks(), 1); 940 var import_data6 = __toESM(require_data(), 1); 941 942 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/useRenderElement.mjs 943 var React4 = __toESM(require_react(), 1); 944 945 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/useRefWithInit.mjs 946 var React = __toESM(require_react(), 1); 947 var UNINITIALIZED = {}; 948 function useRefWithInit(init, initArg) { 949 const ref = React.useRef(UNINITIALIZED); 950 if (ref.current === UNINITIALIZED) { 951 ref.current = init(initArg); 952 } 953 return ref; 954 } 955 956 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/useMergedRefs.mjs 957 function useMergedRefs(a, b, c, d) { 958 const forkRef = useRefWithInit(createForkRef).current; 959 if (didChange(forkRef, a, b, c, d)) { 960 update(forkRef, [a, b, c, d]); 961 } 962 return forkRef.callback; 963 } 964 function useMergedRefsN(refs) { 965 const forkRef = useRefWithInit(createForkRef).current; 966 if (didChangeN(forkRef, refs)) { 967 update(forkRef, refs); 968 } 969 return forkRef.callback; 970 } 971 function createForkRef() { 972 return { 973 callback: null, 974 cleanup: null, 975 refs: [] 976 }; 977 } 978 function didChange(forkRef, a, b, c, d) { 979 return forkRef.refs[0] !== a || forkRef.refs[1] !== b || forkRef.refs[2] !== c || forkRef.refs[3] !== d; 980 } 981 function didChangeN(forkRef, newRefs) { 982 return forkRef.refs.length !== newRefs.length || forkRef.refs.some((ref, index2) => ref !== newRefs[index2]); 983 } 984 function update(forkRef, refs) { 985 forkRef.refs = refs; 986 if (refs.every((ref) => ref == null)) { 987 forkRef.callback = null; 988 return; 989 } 990 forkRef.callback = (instance) => { 991 if (forkRef.cleanup) { 992 forkRef.cleanup(); 993 forkRef.cleanup = null; 994 } 995 if (instance != null) { 996 const cleanupCallbacks = Array(refs.length).fill(null); 997 for (let i = 0; i < refs.length; i += 1) { 998 const ref = refs[i]; 999 if (ref == null) { 1000 continue; 1001 } 1002 switch (typeof ref) { 1003 case "function": { 1004 const refCleanup = ref(instance); 1005 if (typeof refCleanup === "function") { 1006 cleanupCallbacks[i] = refCleanup; 1007 } 1008 break; 1009 } 1010 case "object": { 1011 ref.current = instance; 1012 break; 1013 } 1014 default: 1015 } 1016 } 1017 forkRef.cleanup = () => { 1018 for (let i = 0; i < refs.length; i += 1) { 1019 const ref = refs[i]; 1020 if (ref == null) { 1021 continue; 1022 } 1023 switch (typeof ref) { 1024 case "function": { 1025 const cleanupCallback = cleanupCallbacks[i]; 1026 if (typeof cleanupCallback === "function") { 1027 cleanupCallback(); 1028 } else { 1029 void ref(null); 1030 } 1031 break; 1032 } 1033 case "object": { 1034 ref.current = null; 1035 break; 1036 } 1037 default: 1038 } 1039 } 1040 }; 1041 } 1042 }; 1043 } 1044 1045 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/getReactElementRef.mjs 1046 var React3 = __toESM(require_react(), 1); 1047 1048 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/reactVersion.mjs 1049 var React2 = __toESM(require_react(), 1); 1050 var majorVersion = parseInt(React2.version, 10); 1051 function isReactVersionAtLeast(reactVersionToCheck) { 1052 return majorVersion >= reactVersionToCheck; 1053 } 1054 1055 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/getReactElementRef.mjs 1056 function getReactElementRef(element) { 1057 if (!/* @__PURE__ */ React3.isValidElement(element)) { 1058 return null; 1059 } 1060 const reactElement = element; 1061 const propsWithRef = reactElement.props; 1062 return (isReactVersionAtLeast(19) ? propsWithRef?.ref : reactElement.ref) ?? null; 1063 } 1064 1065 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/mergeObjects.mjs 1066 function mergeObjects(a, b) { 1067 if (a && !b) { 1068 return a; 1069 } 1070 if (!a && b) { 1071 return b; 1072 } 1073 if (a || b) { 1074 return { 1075 ...a, 1076 ...b 1077 }; 1078 } 1079 return void 0; 1080 } 1081 1082 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/createLogOnce.mjs 1083 var loggedMessages; 1084 if (true) { 1085 loggedMessages = /* @__PURE__ */ new Set(); 1086 } 1087 function createLogOnce(severity, prefix) { 1088 return function logOnce(...messages) { 1089 if (true) { 1090 const message = messages.join(" "); 1091 const output = prefix ? `$prefix}: $message}` : message; 1092 const key = `$severity}:$output}`; 1093 if (!loggedMessages.has(key)) { 1094 loggedMessages.add(key); 1095 if (severity === "warn") { 1096 console.warn(output); 1097 } else { 1098 console.error(output); 1099 } 1100 } 1101 } 1102 }; 1103 } 1104 1105 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/warn.mjs 1106 var warn = createLogOnce("warn", "Base UI"); 1107 1108 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/empty.mjs 1109 function NOOP() { 1110 } 1111 var EMPTY_ARRAY2 = Object.freeze([]); 1112 var EMPTY_OBJECT = Object.freeze({}); 1113 1114 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/getStateAttributesProps.mjs 1115 function getStateAttributesProps(state, customMapping) { 1116 const props = {}; 1117 for (const key in state) { 1118 const value = state[key]; 1119 if (customMapping?.hasOwnProperty(key)) { 1120 const customProps = customMapping[key](value); 1121 if (customProps != null) { 1122 Object.assign(props, customProps); 1123 } 1124 continue; 1125 } 1126 if (value === true) { 1127 props[`data-$key.toLowerCase()}`] = ""; 1128 } else if (value) { 1129 props[`data-$key.toLowerCase()}`] = value.toString(); 1130 } 1131 } 1132 return props; 1133 } 1134 1135 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/resolveClassName.mjs 1136 function resolveClassName(className, state) { 1137 return typeof className === "function" ? className(state) : className; 1138 } 1139 1140 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/resolveStyle.mjs 1141 function resolveStyle(style, state) { 1142 return typeof style === "function" ? style(state) : style; 1143 } 1144 1145 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/merge-props/mergeProps.mjs 1146 var EMPTY_PROPS = {}; 1147 function mergeProps(a, b, c, d, e) { 1148 if (!c && !d && !e && !a) { 1149 return createInitialMergedProps(b); 1150 } 1151 let merged = createInitialMergedProps(a); 1152 if (b) { 1153 merged = mergeInto(merged, b); 1154 } 1155 if (c) { 1156 merged = mergeInto(merged, c); 1157 } 1158 if (d) { 1159 merged = mergeInto(merged, d); 1160 } 1161 if (e) { 1162 merged = mergeInto(merged, e); 1163 } 1164 return merged; 1165 } 1166 function mergePropsN(props) { 1167 if (props.length === 0) { 1168 return EMPTY_PROPS; 1169 } 1170 if (props.length === 1) { 1171 return createInitialMergedProps(props[0]); 1172 } 1173 let merged = createInitialMergedProps(props[0]); 1174 for (let i = 1; i < props.length; i += 1) { 1175 merged = mergeInto(merged, props[i]); 1176 } 1177 return merged; 1178 } 1179 function createInitialMergedProps(inputProps) { 1180 if (isPropsGetter(inputProps)) { 1181 return { 1182 ...inputProps(EMPTY_PROPS) 1183 }; 1184 } 1185 return copyInitialProps(inputProps); 1186 } 1187 function mergeInto(merged, inputProps) { 1188 if (isPropsGetter(inputProps)) { 1189 return inputProps(merged); 1190 } 1191 return mutablyMergeInto(merged, inputProps); 1192 } 1193 function copyInitialProps(inputProps) { 1194 const copiedProps = { 1195 ...inputProps 1196 }; 1197 for (const propName in copiedProps) { 1198 const propValue = copiedProps[propName]; 1199 if (isEventHandler(propName, propValue)) { 1200 copiedProps[propName] = wrapEventHandler(propValue); 1201 } 1202 } 1203 return copiedProps; 1204 } 1205 function mutablyMergeInto(mergedProps, externalProps) { 1206 if (!externalProps) { 1207 return mergedProps; 1208 } 1209 for (const propName in externalProps) { 1210 const externalPropValue = externalProps[propName]; 1211 switch (propName) { 1212 case "style": { 1213 mergedProps[propName] = mergeObjects(mergedProps.style, externalPropValue); 1214 break; 1215 } 1216 case "className": { 1217 mergedProps[propName] = mergeClassNames(mergedProps.className, externalPropValue); 1218 break; 1219 } 1220 default: { 1221 if (isEventHandler(propName, externalPropValue)) { 1222 mergedProps[propName] = mergeEventHandlers(mergedProps[propName], externalPropValue); 1223 } else { 1224 mergedProps[propName] = externalPropValue; 1225 } 1226 } 1227 } 1228 } 1229 return mergedProps; 1230 } 1231 function isEventHandler(key, value) { 1232 const code0 = key.charCodeAt(0); 1233 const code1 = key.charCodeAt(1); 1234 const code2 = key.charCodeAt(2); 1235 return code0 === 111 && code1 === 110 && code2 >= 65 && code2 <= 90 && (typeof value === "function" || typeof value === "undefined"); 1236 } 1237 function isPropsGetter(inputProps) { 1238 return typeof inputProps === "function"; 1239 } 1240 function mergeEventHandlers(ourHandler, theirHandler) { 1241 if (!theirHandler) { 1242 return ourHandler; 1243 } 1244 if (!ourHandler) { 1245 return wrapEventHandler(theirHandler); 1246 } 1247 return (...args) => { 1248 const event = args[0]; 1249 if (isSyntheticEvent(event)) { 1250 const baseUIEvent = event; 1251 makeEventPreventable(baseUIEvent); 1252 const result2 = theirHandler(...args); 1253 if (!baseUIEvent.baseUIHandlerPrevented) { 1254 ourHandler?.(...args); 1255 } 1256 return result2; 1257 } 1258 const result = theirHandler(...args); 1259 ourHandler?.(...args); 1260 return result; 1261 }; 1262 } 1263 function wrapEventHandler(handler) { 1264 if (!handler) { 1265 return handler; 1266 } 1267 return (...args) => { 1268 const event = args[0]; 1269 if (isSyntheticEvent(event)) { 1270 makeEventPreventable(event); 1271 } 1272 return handler(...args); 1273 }; 1274 } 1275 function makeEventPreventable(event) { 1276 event.preventBaseUIHandler = () => { 1277 event.baseUIHandlerPrevented = true; 1278 }; 1279 return event; 1280 } 1281 function mergeClassNames(ourClassName, theirClassName) { 1282 if (theirClassName) { 1283 if (ourClassName) { 1284 return theirClassName + " " + ourClassName; 1285 } 1286 return theirClassName; 1287 } 1288 return ourClassName; 1289 } 1290 function isSyntheticEvent(event) { 1291 return event != null && typeof event === "object" && "nativeEvent" in event; 1292 } 1293 1294 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/useRenderElement.mjs 1295 var import_react = __toESM(require_react(), 1); 1296 function useRenderElement(element, componentProps, params = {}) { 1297 let renderProp = componentProps.render; 1298 if (params.enabled !== false) { 1299 renderProp = unwrapLazyRenderProp(renderProp); 1300 } 1301 const outProps = useRenderElementProps(componentProps, params, renderProp); 1302 if (params.enabled === false) { 1303 return null; 1304 } 1305 const state = params.state ?? EMPTY_OBJECT; 1306 return evaluateRenderProp(element, renderProp, outProps, state); 1307 } 1308 function useRenderElementProps(componentProps, params, renderProp) { 1309 const { 1310 className: classNameProp, 1311 style: styleProp 1312 } = componentProps; 1313 const { 1314 state = EMPTY_OBJECT, 1315 ref, 1316 props, 1317 stateAttributesMapping, 1318 enabled = true 1319 } = params; 1320 const className = enabled ? resolveClassName(classNameProp, state) : void 0; 1321 const style = enabled ? resolveStyle(styleProp, state) : void 0; 1322 const stateProps = enabled ? getStateAttributesProps(state, stateAttributesMapping) : EMPTY_OBJECT; 1323 const resolvedProps = enabled && props ? resolveRenderFunctionProps(props) : void 0; 1324 const outProps = enabled ? mergeObjects(stateProps, resolvedProps) ?? {} : EMPTY_OBJECT; 1325 if (typeof document !== "undefined") { 1326 if (!enabled) { 1327 void useMergedRefs(null, null); 1328 } else if (Array.isArray(ref)) { 1329 outProps.ref = useMergedRefsN([outProps.ref, getReactElementRef(renderProp), ...ref]); 1330 } else { 1331 outProps.ref = useMergedRefs(outProps.ref, getReactElementRef(renderProp), ref); 1332 } 1333 } 1334 if (!enabled) { 1335 return EMPTY_OBJECT; 1336 } 1337 if (className !== void 0) { 1338 outProps.className = mergeClassNames(outProps.className, className); 1339 } 1340 if (style !== void 0) { 1341 outProps.style = mergeObjects(outProps.style, style); 1342 } 1343 return outProps; 1344 } 1345 function resolveRenderFunctionProps(props) { 1346 if (Array.isArray(props)) { 1347 return mergePropsN(props); 1348 } 1349 return mergeProps(void 0, props); 1350 } 1351 var REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for("react.lazy"); 1352 var COMPONENT_IDENTIFIER_PATTERN = /^[A-Z][A-Za-z0-9$]*$/; 1353 var LOWERCASE_CHARACTER_PATTERN = /[a-z]/; 1354 function unwrapLazyRenderProp(render) { 1355 if (render?.$$typeof !== REACT_LAZY_TYPE) { 1356 return render; 1357 } 1358 const unwrapped = React4.Children.toArray(render)[0]; 1359 return /* @__PURE__ */ React4.isValidElement(unwrapped) ? unwrapped : render; 1360 } 1361 function evaluateRenderProp(element, render, props, state) { 1362 if (render) { 1363 if (typeof render === "function") { 1364 if (true) { 1365 warnIfRenderPropLooksLikeComponent(render); 1366 } 1367 return render(props, state); 1368 } 1369 const mergedProps = mergeProps(props, render.props); 1370 mergedProps.ref = props.ref; 1371 if (true) { 1372 if (!/* @__PURE__ */ React4.isValidElement(render)) { 1373 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")); 1374 } 1375 } 1376 return /* @__PURE__ */ React4.cloneElement(render, mergedProps); 1377 } 1378 return renderTag(element, props); 1379 } 1380 function warnIfRenderPropLooksLikeComponent(renderFn) { 1381 const functionName = renderFn.name; 1382 if (functionName.length === 0) { 1383 return; 1384 } 1385 if (!COMPONENT_IDENTIFIER_PATTERN.test(functionName)) { 1386 return; 1387 } 1388 if (!LOWERCASE_CHARACTER_PATTERN.test(functionName)) { 1389 return; 1390 } 1391 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"); 1392 } 1393 function renderTag(Tag, props) { 1394 if (Tag === "button") { 1395 return /* @__PURE__ */ (0, import_react.createElement)("button", { 1396 type: "button", 1397 ...props, 1398 key: props.key 1399 }); 1400 } 1401 if (Tag === "img") { 1402 return /* @__PURE__ */ (0, import_react.createElement)("img", { 1403 alt: "", 1404 ...props, 1405 key: props.key 1406 }); 1407 } 1408 return /* @__PURE__ */ React4.createElement(Tag, props); 1409 } 1410 1411 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/safeReact.mjs 1412 var React5 = __toESM(require_react(), 1); 1413 var SafeReact = { 1414 ...React5 1415 }; 1416 1417 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/useStableCallback.mjs 1418 var useInsertionEffect = SafeReact.useInsertionEffect; 1419 var useSafeInsertionEffect = ( 1420 // React 17 doesn't have useInsertionEffect. 1421 useInsertionEffect && // Preact replaces useInsertionEffect with useLayoutEffect and fires too late. 1422 useInsertionEffect !== SafeReact.useLayoutEffect ? useInsertionEffect : (fn) => fn() 1423 ); 1424 function useStableCallback(callback) { 1425 const stable = useRefWithInit(createStableCallback).current; 1426 stable.next = callback; 1427 useSafeInsertionEffect(stable.effect); 1428 return stable.trampoline; 1429 } 1430 function createStableCallback() { 1431 const stable = { 1432 next: void 0, 1433 callback: assertNotCalled, 1434 trampoline: (...args) => stable.callback?.(...args), 1435 effect: () => { 1436 stable.callback = stable.next; 1437 } 1438 }; 1439 return stable; 1440 } 1441 function assertNotCalled() { 1442 if (true) { 1443 throw ( 1444 /* minify-error-disabled */ 1445 new Error("Base UI: Cannot call an event handler while rendering.") 1446 ); 1447 } 1448 } 1449 1450 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/useIsoLayoutEffect.mjs 1451 var React6 = __toESM(require_react(), 1); 1452 var noop = () => { 1453 }; 1454 var useIsoLayoutEffect = typeof document !== "undefined" ? React6.useLayoutEffect : noop; 1455 1456 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/useOpenChangeComplete.mjs 1457 var React8 = __toESM(require_react(), 1); 1458 1459 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/useAnimationsFinished.mjs 1460 var ReactDOM = __toESM(require_react_dom(), 1); 1461 1462 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/useOnMount.mjs 1463 var React7 = __toESM(require_react(), 1); 1464 function useOnMount(fn) { 1465 React7.useEffect(fn, EMPTY_ARRAY2); 1466 } 1467 1468 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/useAnimationFrame.mjs 1469 var EMPTY = null; 1470 var LAST_RAF = globalThis.requestAnimationFrame; 1471 var Scheduler = class { 1472 /* This implementation uses an array as a backing data-structure for frame callbacks. 1473 * It allows `O(1)` callback cancelling by inserting a `null` in the array, though it 1474 * never calls the native `cancelAnimationFrame` if there are no frames left. This can 1475 * be much more efficient if there is a call pattern that alterns as 1476 * "request-cancel-request-cancel-…". 1477 * But in the case of "request-request-…-cancel-cancel-…", it leaves the final animation 1478 * frame to run anyway. We turn that frame into a `O(1)` no-op via `callbacksCount`. */ 1479 callbacks = []; 1480 callbacksCount = 0; 1481 nextId = 1; 1482 startId = 1; 1483 isScheduled = false; 1484 tick = (timestamp) => { 1485 this.isScheduled = false; 1486 const currentCallbacks = this.callbacks; 1487 const currentCallbacksCount = this.callbacksCount; 1488 this.callbacks = []; 1489 this.callbacksCount = 0; 1490 this.startId = this.nextId; 1491 if (currentCallbacksCount > 0) { 1492 for (let i = 0; i < currentCallbacks.length; i += 1) { 1493 currentCallbacks[i]?.(timestamp); 1494 } 1495 } 1496 }; 1497 request(fn) { 1498 const id = this.nextId; 1499 this.nextId += 1; 1500 this.callbacks.push(fn); 1501 this.callbacksCount += 1; 1502 const didRAFChange = LAST_RAF !== requestAnimationFrame && (LAST_RAF = requestAnimationFrame, true); 1503 if (!this.isScheduled || didRAFChange) { 1504 requestAnimationFrame(this.tick); 1505 this.isScheduled = true; 1506 } 1507 return id; 1508 } 1509 cancel(id) { 1510 const index2 = id - this.startId; 1511 if (index2 < 0 || index2 >= this.callbacks.length) { 1512 return; 1513 } 1514 if (this.callbacks[index2] === null) { 1515 return; 1516 } 1517 this.callbacks[index2] = null; 1518 this.callbacksCount -= 1; 1519 } 1520 }; 1521 var scheduler = new Scheduler(); 1522 var AnimationFrame = class _AnimationFrame { 1523 static create() { 1524 return new _AnimationFrame(); 1525 } 1526 static request(fn) { 1527 return scheduler.request(fn); 1528 } 1529 static cancel(id) { 1530 return scheduler.cancel(id); 1531 } 1532 currentId = EMPTY; 1533 /** 1534 * Executes `fn` after `delay`, clearing any previously scheduled call. 1535 */ 1536 request(fn) { 1537 this.cancel(); 1538 this.currentId = scheduler.request(() => { 1539 this.currentId = EMPTY; 1540 fn(); 1541 }); 1542 } 1543 cancel = () => { 1544 if (this.currentId !== EMPTY) { 1545 scheduler.cancel(this.currentId); 1546 this.currentId = EMPTY; 1547 } 1548 }; 1549 disposeEffect = () => { 1550 return this.cancel; 1551 }; 1552 }; 1553 function useAnimationFrame() { 1554 const timeout = useRefWithInit(AnimationFrame.create).current; 1555 useOnMount(timeout.disposeEffect); 1556 return timeout; 1557 } 1558 1559 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/resolveRef.mjs 1560 function resolveRef(maybeRef) { 1561 if (maybeRef == null) { 1562 return maybeRef; 1563 } 1564 return "current" in maybeRef ? maybeRef.current : maybeRef; 1565 } 1566 1567 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/getFiniteAnimations.mjs 1568 function getFiniteAnimations(element, options) { 1569 return element.getAnimations(options).filter((animation) => { 1570 const timing = animation.effect?.getTiming(); 1571 return timing?.duration !== Infinity && timing?.iterations !== Infinity; 1572 }); 1573 } 1574 1575 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/TransitionStatusDataAttributes.mjs 1576 var startingStyle = "data-starting-style"; 1577 var endingStyle = "data-ending-style"; 1578 1579 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/useAnimationsFinished.mjs 1580 var pendingCallbacks = null; 1581 function flushBeforePaint(fn) { 1582 if (!pendingCallbacks) { 1583 const callbacks = []; 1584 pendingCallbacks = callbacks; 1585 queueMicrotask(() => { 1586 pendingCallbacks = null; 1587 ReactDOM.flushSync(() => { 1588 for (const callback of callbacks) { 1589 callback(); 1590 } 1591 }); 1592 }); 1593 } 1594 pendingCallbacks.push(fn); 1595 } 1596 function useAnimationsFinished(elementOrRef, waitForStartingStyleRemoved = false, batch = false) { 1597 const frame = useAnimationFrame(); 1598 return useStableCallback((fnToExecute, signal = null) => { 1599 frame.cancel(); 1600 const element = resolveRef(elementOrRef); 1601 if (element == null) { 1602 return; 1603 } 1604 const resolvedElement = element; 1605 const done = () => { 1606 if (!batch) { 1607 ReactDOM.flushSync(fnToExecute); 1608 return; 1609 } 1610 flushBeforePaint(() => { 1611 if (!signal?.aborted) { 1612 fnToExecute(); 1613 } 1614 }); 1615 }; 1616 if (typeof resolvedElement.getAnimations !== "function" || globalThis.BASE_UI_ANIMATIONS_DISABLED) { 1617 fnToExecute(); 1618 return; 1619 } 1620 function exec() { 1621 Promise.all(getFiniteAnimations(resolvedElement).map((animation) => animation.finished.then(NOOP))).then(() => { 1622 if (!signal?.aborted) { 1623 done(); 1624 } 1625 }, () => { 1626 if (signal?.aborted) { 1627 return; 1628 } 1629 const currentAnimations = getFiniteAnimations(resolvedElement); 1630 if (currentAnimations.some((animation) => animation.pending || animation.playState !== "finished")) { 1631 exec(); 1632 return; 1633 } 1634 done(); 1635 }); 1636 } 1637 if (waitForStartingStyleRemoved) { 1638 const startingStyleAttribute = startingStyle; 1639 if (!resolvedElement.hasAttribute(startingStyleAttribute)) { 1640 frame.request(exec); 1641 return; 1642 } 1643 const attributeObserver = new MutationObserver(() => { 1644 if (!resolvedElement.hasAttribute(startingStyleAttribute)) { 1645 attributeObserver.disconnect(); 1646 exec(); 1647 } 1648 }); 1649 attributeObserver.observe(resolvedElement, { 1650 attributes: true, 1651 attributeFilter: [startingStyleAttribute] 1652 }); 1653 signal?.addEventListener("abort", () => attributeObserver.disconnect(), { 1654 once: true 1655 }); 1656 return; 1657 } 1658 frame.request(exec); 1659 }); 1660 } 1661 1662 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/useOpenChangeComplete.mjs 1663 function useOpenChangeComplete(parameters) { 1664 const { 1665 enabled = true, 1666 open: open2, 1667 ref, 1668 batch = false, 1669 onComplete: onCompleteParam 1670 } = parameters; 1671 const onComplete = useStableCallback(onCompleteParam); 1672 const runOnceAnimationsFinish = useAnimationsFinished(ref, open2, batch); 1673 React8.useEffect(() => { 1674 if (!enabled) { 1675 return void 0; 1676 } 1677 const abortController = new AbortController(); 1678 runOnceAnimationsFinish(onComplete, abortController.signal); 1679 return () => { 1680 abortController.abort(); 1681 }; 1682 }, [enabled, open2, onComplete, runOnceAnimationsFinish]); 1683 } 1684 1685 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/stateAttributesMapping.mjs 1686 var STARTING_HOOK = { 1687 [startingStyle]: "" 1688 }; 1689 var ENDING_HOOK = { 1690 [endingStyle]: "" 1691 }; 1692 var transitionStatusMapping = { 1693 transitionStatus(value) { 1694 if (value === "starting") { 1695 return STARTING_HOOK; 1696 } 1697 if (value === "ending") { 1698 return ENDING_HOOK; 1699 } 1700 return null; 1701 } 1702 }; 1703 1704 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/useTransitionStatus.mjs 1705 var React9 = __toESM(require_react(), 1); 1706 function useTransitionStatus(open2, enableIdleState = false, deferEndingState = false, animateInitialOpen = false) { 1707 const [transitionStatus, setTransitionStatus] = React9.useState(open2 && enableIdleState ? "idle" : void 0); 1708 const [mounted, setMounted] = React9.useState(open2 && !animateInitialOpen); 1709 if (open2 && !mounted) { 1710 setMounted(true); 1711 setTransitionStatus("starting"); 1712 } 1713 if (!open2 && mounted && transitionStatus !== "ending" && !deferEndingState) { 1714 setTransitionStatus("ending"); 1715 } 1716 if (!open2 && !mounted && transitionStatus === "ending") { 1717 setTransitionStatus(void 0); 1718 } 1719 useIsoLayoutEffect(() => { 1720 if (!open2 && mounted && transitionStatus !== "ending" && deferEndingState) { 1721 const frame = AnimationFrame.request(() => { 1722 setTransitionStatus("ending"); 1723 }); 1724 return () => { 1725 AnimationFrame.cancel(frame); 1726 }; 1727 } 1728 return void 0; 1729 }, [open2, mounted, transitionStatus, deferEndingState]); 1730 useIsoLayoutEffect(() => { 1731 if (!open2 || enableIdleState || transitionStatus === void 0) { 1732 return void 0; 1733 } 1734 const frame = AnimationFrame.request(() => { 1735 setTransitionStatus(void 0); 1736 }); 1737 return () => { 1738 AnimationFrame.cancel(frame); 1739 }; 1740 }, [enableIdleState, open2, transitionStatus]); 1741 useIsoLayoutEffect(() => { 1742 if (!open2 || !enableIdleState) { 1743 return void 0; 1744 } 1745 if (open2 && mounted && transitionStatus !== "idle") { 1746 setTransitionStatus("starting"); 1747 } 1748 const frame = AnimationFrame.request(() => { 1749 setTransitionStatus("idle"); 1750 }); 1751 return () => { 1752 AnimationFrame.cancel(frame); 1753 }; 1754 }, [enableIdleState, open2, mounted, transitionStatus]); 1755 return { 1756 mounted, 1757 setMounted, 1758 transitionStatus 1759 }; 1760 } 1761 1762 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/useTimeout.mjs 1763 var EMPTY2 = 0; 1764 var Timeout = class _Timeout { 1765 static create() { 1766 return new _Timeout(); 1767 } 1768 currentId = EMPTY2; 1769 /** 1770 * Executes `fn` after `delay`, clearing any previously scheduled call. 1771 */ 1772 start(delay, fn) { 1773 this.clear(); 1774 this.currentId = setTimeout(() => { 1775 this.currentId = EMPTY2; 1776 fn(); 1777 }, delay); 1778 } 1779 isStarted() { 1780 return this.currentId !== EMPTY2; 1781 } 1782 clear = () => { 1783 if (this.currentId !== EMPTY2) { 1784 clearTimeout(this.currentId); 1785 this.currentId = EMPTY2; 1786 } 1787 }; 1788 disposeEffect = () => { 1789 return this.clear; 1790 }; 1791 }; 1792 function useTimeout() { 1793 const timeout = useRefWithInit(Timeout.create).current; 1794 useOnMount(timeout.disposeEffect); 1795 return timeout; 1796 } 1797 1798 // packages/ui/build-module/icon/icon.mjs 1799 var import_element2 = __toESM(require_element(), 1); 1800 var import_primitives = __toESM(require_primitives(), 1); 1801 var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); 1802 var Icon = (0, import_element2.forwardRef)( 1803 function UnforwardedIcon({ icon, size: size4 = 24, style, ...restProps }, ref) { 1804 const mergedStyle = icon.props.style || style ? { ...icon.props.style, ...style } : void 0; 1805 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( 1806 import_primitives.SVG, 1807 { 1808 ref, 1809 ...icon.props, 1810 ...restProps, 1811 ...mergedStyle ? { style: mergedStyle } : {}, 1812 width: size4, 1813 height: size4 1814 } 1815 ); 1816 } 1817 ); 1818 1819 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/error.mjs 1820 var error = createLogOnce("error", "Base UI"); 1821 1822 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/useId.mjs 1823 var React11 = __toESM(require_react(), 1); 1824 1825 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/useForcedRerendering.mjs 1826 var React10 = __toESM(require_react(), 1); 1827 function useForcedRerendering() { 1828 const [, setState] = React10.useState({}); 1829 return React10.useCallback(() => { 1830 setState({}); 1831 }, []); 1832 } 1833 1834 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/useId.mjs 1835 var globalId = 0; 1836 function useGlobalId(idOverride, prefix = "mui") { 1837 const defaultId = React11.useRef(void 0); 1838 const forceRerender = useForcedRerendering(); 1839 const id = idOverride ?? defaultId.current; 1840 React11.useEffect(() => { 1841 if (defaultId.current == null) { 1842 globalId += 1; 1843 defaultId.current = `$prefix}-$globalId}`; 1844 if (idOverride == null) { 1845 forceRerender(); 1846 } 1847 } 1848 }, [idOverride, prefix, forceRerender]); 1849 return id; 1850 } 1851 var maybeReactUseId = SafeReact.useId; 1852 function useId(idOverride, prefix) { 1853 if (maybeReactUseId !== void 0) { 1854 const reactId = maybeReactUseId(); 1855 return idOverride ?? (prefix ? `$prefix}-$reactId}` : reactId); 1856 } 1857 return useGlobalId(idOverride, prefix); 1858 } 1859 1860 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/useBaseUiId.mjs 1861 function useBaseUiId(idOverride) { 1862 return useId(idOverride, "base-ui"); 1863 } 1864 1865 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/createBaseUIEventDetails.mjs 1866 function createChangeEventDetails(reason, event, trigger, customProperties) { 1867 let canceled = false; 1868 let allowPropagation = false; 1869 const custom = customProperties ?? EMPTY_OBJECT; 1870 const details = { 1871 reason, 1872 event: event ?? new Event("base-ui"), 1873 cancel() { 1874 canceled = true; 1875 }, 1876 allowPropagation() { 1877 allowPropagation = true; 1878 }, 1879 get isCanceled() { 1880 return canceled; 1881 }, 1882 get isPropagationAllowed() { 1883 return allowPropagation; 1884 }, 1885 trigger, 1886 ...custom 1887 }; 1888 return details; 1889 } 1890 1891 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/reason-parts.mjs 1892 var reason_parts_exports = {}; 1893 __export(reason_parts_exports, { 1894 cancelOpen: () => cancelOpen, 1895 chipRemovePress: () => chipRemovePress, 1896 clearPress: () => clearPress, 1897 closePress: () => closePress, 1898 closeWatcher: () => closeWatcher, 1899 decrementPress: () => decrementPress, 1900 disabled: () => disabled, 1901 drag: () => drag, 1902 escapeKey: () => escapeKey, 1903 focusOut: () => focusOut, 1904 imperativeAction: () => imperativeAction, 1905 incrementPress: () => incrementPress, 1906 initial: () => initial, 1907 inputBlur: () => inputBlur, 1908 inputChange: () => inputChange, 1909 inputClear: () => inputClear, 1910 inputPaste: () => inputPaste, 1911 inputPress: () => inputPress, 1912 itemPress: () => itemPress, 1913 keyboard: () => keyboard, 1914 linkPress: () => linkPress, 1915 listNavigation: () => listNavigation, 1916 missing: () => missing, 1917 none: () => none, 1918 outsidePress: () => outsidePress, 1919 pointer: () => pointer, 1920 popupClose: () => popupClose, 1921 scrub: () => scrub, 1922 siblingOpen: () => siblingOpen, 1923 swipe: () => swipe, 1924 trackPress: () => trackPress, 1925 triggerFocus: () => triggerFocus, 1926 triggerHover: () => triggerHover, 1927 triggerPress: () => triggerPress, 1928 wheel: () => wheel, 1929 windowResize: () => windowResize 1930 }); 1931 var none = "none"; 1932 var triggerPress = "trigger-press"; 1933 var triggerHover = "trigger-hover"; 1934 var triggerFocus = "trigger-focus"; 1935 var outsidePress = "outside-press"; 1936 var itemPress = "item-press"; 1937 var closePress = "close-press"; 1938 var linkPress = "link-press"; 1939 var clearPress = "clear-press"; 1940 var chipRemovePress = "chip-remove-press"; 1941 var trackPress = "track-press"; 1942 var incrementPress = "increment-press"; 1943 var decrementPress = "decrement-press"; 1944 var inputChange = "input-change"; 1945 var inputClear = "input-clear"; 1946 var inputBlur = "input-blur"; 1947 var inputPaste = "input-paste"; 1948 var inputPress = "input-press"; 1949 var focusOut = "focus-out"; 1950 var escapeKey = "escape-key"; 1951 var closeWatcher = "close-watcher"; 1952 var listNavigation = "list-navigation"; 1953 var keyboard = "keyboard"; 1954 var pointer = "pointer"; 1955 var drag = "drag"; 1956 var wheel = "wheel"; 1957 var scrub = "scrub"; 1958 var popupClose = "popup-close"; 1959 var cancelOpen = "cancel-open"; 1960 var siblingOpen = "sibling-open"; 1961 var disabled = "disabled"; 1962 var missing = "missing"; 1963 var initial = "initial"; 1964 var imperativeAction = "imperative-action"; 1965 var swipe = "swipe"; 1966 var windowResize = "window-resize"; 1967 1968 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/use-button/useButton.mjs 1969 var React14 = __toESM(require_react(), 1); 1970 1971 // node_modules/.store/@floating-ui/utils@0.2.12-gOxTzMf36nCrbeHpEew-rw/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs 1972 function hasWindow() { 1973 return typeof window !== "undefined"; 1974 } 1975 function getNodeName(node) { 1976 if (isNode(node)) { 1977 return (node.nodeName || "").toLowerCase(); 1978 } 1979 return "#document"; 1980 } 1981 function getWindow(node) { 1982 var _node$ownerDocument; 1983 return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window; 1984 } 1985 function getDocumentElement(node) { 1986 var _ref; 1987 return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement; 1988 } 1989 function isNode(value) { 1990 if (!hasWindow()) { 1991 return false; 1992 } 1993 return value instanceof Node || value instanceof getWindow(value).Node; 1994 } 1995 function isElement(value) { 1996 if (!hasWindow()) { 1997 return false; 1998 } 1999 return value instanceof Element || value instanceof getWindow(value).Element; 2000 } 2001 function isHTMLElement(value) { 2002 if (!hasWindow()) { 2003 return false; 2004 } 2005 return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement; 2006 } 2007 function isShadowRoot(value) { 2008 if (!hasWindow() || typeof ShadowRoot === "undefined") { 2009 return false; 2010 } 2011 return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot; 2012 } 2013 function isOverflowElement(element) { 2014 const { 2015 overflow, 2016 overflowX, 2017 overflowY, 2018 display 2019 } = getComputedStyle2(element); 2020 return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== "inline" && display !== "contents"; 2021 } 2022 function isTableElement(element) { 2023 return /^(table|td|th)$/.test(getNodeName(element)); 2024 } 2025 function isTopLayer(element) { 2026 try { 2027 if (element.matches(":popover-open")) { 2028 return true; 2029 } 2030 } catch (_e) { 2031 } 2032 try { 2033 return element.matches(":modal"); 2034 } catch (_e) { 2035 return false; 2036 } 2037 } 2038 var willChangeRe = /transform|translate|scale|rotate|perspective|filter/; 2039 var containRe = /paint|layout|strict|content/; 2040 var isNotNone = (value) => !!value && value !== "none"; 2041 var isWebKitValue; 2042 function isContainingBlock(elementOrCss) { 2043 const css = isElement(elementOrCss) ? getComputedStyle2(elementOrCss) : elementOrCss; 2044 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 || ""); 2045 } 2046 function getContainingBlock(element) { 2047 let currentNode = getParentNode(element); 2048 while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) { 2049 if (isContainingBlock(currentNode)) { 2050 return currentNode; 2051 } else if (isTopLayer(currentNode)) { 2052 return null; 2053 } 2054 currentNode = getParentNode(currentNode); 2055 } 2056 return null; 2057 } 2058 function isWebKit() { 2059 if (isWebKitValue == null) { 2060 isWebKitValue = typeof CSS !== "undefined" && CSS.supports && CSS.supports("-webkit-backdrop-filter", "none"); 2061 } 2062 return isWebKitValue; 2063 } 2064 function isLastTraversableNode(node) { 2065 return /^(html|body|#document)$/.test(getNodeName(node)); 2066 } 2067 function getComputedStyle2(element) { 2068 return getWindow(element).getComputedStyle(element); 2069 } 2070 function getNodeScroll(element) { 2071 if (isElement(element)) { 2072 return { 2073 scrollLeft: element.scrollLeft, 2074 scrollTop: element.scrollTop 2075 }; 2076 } 2077 return { 2078 scrollLeft: element.scrollX, 2079 scrollTop: element.scrollY 2080 }; 2081 } 2082 function getParentNode(node) { 2083 if (getNodeName(node) === "html") { 2084 return node; 2085 } 2086 const result = ( 2087 // Step into the shadow DOM of the parent of a slotted node. 2088 node.assignedSlot || // DOM Element detected. 2089 node.parentNode || // ShadowRoot detected. 2090 isShadowRoot(node) && node.host || // Fallback. 2091 getDocumentElement(node) 2092 ); 2093 return isShadowRoot(result) ? result.host : result; 2094 } 2095 function getNearestOverflowAncestor(node) { 2096 const parentNode = getParentNode(node); 2097 if (isLastTraversableNode(parentNode)) { 2098 return (node.ownerDocument || node).body; 2099 } 2100 if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) { 2101 return parentNode; 2102 } 2103 return getNearestOverflowAncestor(parentNode); 2104 } 2105 function getOverflowAncestors(node, list, traverseIframes) { 2106 var _node$ownerDocument2; 2107 if (list === void 0) { 2108 list = []; 2109 } 2110 if (traverseIframes === void 0) { 2111 traverseIframes = true; 2112 } 2113 const scrollableAncestor = getNearestOverflowAncestor(node); 2114 const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body); 2115 const win = getWindow(scrollableAncestor); 2116 if (isBody) { 2117 const frameElement = getFrameElement(win); 2118 return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []); 2119 } else { 2120 return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes)); 2121 } 2122 } 2123 function getFrameElement(win) { 2124 return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null; 2125 } 2126 2127 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/composite/root/CompositeRootContext.mjs 2128 var React12 = __toESM(require_react(), 1); 2129 var CompositeRootContext = /* @__PURE__ */ React12.createContext(void 0); 2130 if (true) CompositeRootContext.displayName = "CompositeRootContext"; 2131 function useCompositeRootContext(optional = false) { 2132 const context = React12.useContext(CompositeRootContext); 2133 if (context === void 0 && !optional) { 2134 throw new Error(true ? "Base UI: CompositeRootContext is missing. Composite parts must be placed within <Composite.Root>." : formatErrorMessage_default(16)); 2135 } 2136 return context; 2137 } 2138 2139 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/useFocusableWhenDisabled.mjs 2140 var React13 = __toESM(require_react(), 1); 2141 function useFocusableWhenDisabled(parameters) { 2142 const { 2143 focusableWhenDisabled, 2144 disabled: disabled2, 2145 composite = false, 2146 tabIndex: tabIndexProp = 0, 2147 isNativeButton 2148 } = parameters; 2149 const isFocusableComposite = composite && focusableWhenDisabled !== false; 2150 const isNonFocusableComposite = composite && focusableWhenDisabled === false; 2151 const props = React13.useMemo(() => { 2152 const additionalProps = { 2153 // allow Tabbing away from focusableWhenDisabled elements 2154 onKeyDown(event) { 2155 if (disabled2 && focusableWhenDisabled && event.key !== "Tab") { 2156 event.preventDefault(); 2157 } 2158 } 2159 }; 2160 if (!composite) { 2161 additionalProps.tabIndex = tabIndexProp; 2162 if (!isNativeButton && disabled2) { 2163 additionalProps.tabIndex = focusableWhenDisabled ? tabIndexProp : -1; 2164 } 2165 } 2166 if (isNativeButton && (focusableWhenDisabled || isFocusableComposite) || !isNativeButton && disabled2) { 2167 additionalProps["aria-disabled"] = disabled2; 2168 } 2169 if (isNativeButton && (!focusableWhenDisabled || isNonFocusableComposite)) { 2170 additionalProps.disabled = disabled2; 2171 } 2172 return additionalProps; 2173 }, [composite, disabled2, focusableWhenDisabled, isFocusableComposite, isNonFocusableComposite, isNativeButton, tabIndexProp]); 2174 return { 2175 props 2176 }; 2177 } 2178 2179 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/owner.mjs 2180 function ownerDocument(node) { 2181 return node?.ownerDocument || document; 2182 } 2183 2184 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/dispatchClickWithModifiers.mjs 2185 function dispatchClickWithModifiers(target, sourceEvent, { 2186 detail = 0, 2187 pointerType = "" 2188 } = {}) { 2189 target.dispatchEvent(new (getWindow(target)).PointerEvent("click", { 2190 bubbles: true, 2191 cancelable: true, 2192 composed: true, 2193 detail, 2194 pointerType, 2195 shiftKey: sourceEvent.shiftKey, 2196 ctrlKey: sourceEvent.ctrlKey, 2197 altKey: sourceEvent.altKey, 2198 metaKey: sourceEvent.metaKey 2199 })); 2200 } 2201 2202 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/use-button/useButton.mjs 2203 function useButton(parameters = {}) { 2204 const { 2205 disabled: disabled2 = false, 2206 focusableWhenDisabled, 2207 tabIndex = 0, 2208 native: isNativeButton = true, 2209 composite: compositeProp 2210 } = parameters; 2211 const elementRef = React14.useRef(null); 2212 const compositeRootContext = useCompositeRootContext(true); 2213 const isCompositeItem = compositeProp ?? compositeRootContext !== void 0; 2214 const { 2215 props: focusableWhenDisabledProps 2216 } = useFocusableWhenDisabled({ 2217 focusableWhenDisabled, 2218 disabled: disabled2, 2219 composite: isCompositeItem, 2220 tabIndex, 2221 isNativeButton 2222 }); 2223 if (true) { 2224 React14.useEffect(() => { 2225 if (!elementRef.current) { 2226 return; 2227 } 2228 const isButtonTag = isButtonElement(elementRef.current); 2229 if (isNativeButton) { 2230 if (!isButtonTag) { 2231 const ownerStackMessage = SafeReact.captureOwnerStack?.() || ""; 2232 const message = "A component that acts as a button expected a native <button> because the `nativeButton` prop is true. Rendering a non-<button> removes native button semantics, which can impact forms and accessibility. Use a real <button> in the `render` prop, or set `nativeButton` to `false`."; 2233 error(`$message}$ownerStackMessage}`); 2234 } 2235 } else if (isButtonTag) { 2236 const ownerStackMessage = SafeReact.captureOwnerStack?.() || ""; 2237 const message = "A component that acts as a button expected a non-<button> because the `nativeButton` prop is false. Rendering a <button> keeps native behavior while Base UI applies non-native attributes and handlers, which can add unintended extra attributes (such as `role` or `aria-disabled`). Use a non-<button> in the `render` prop, or set `nativeButton` to `true`."; 2238 error(`$message}$ownerStackMessage}`); 2239 } 2240 }, [isNativeButton]); 2241 } 2242 const updateDisabled = React14.useCallback(() => { 2243 const element = elementRef.current; 2244 if (!isButtonElement(element)) { 2245 return; 2246 } 2247 if (isCompositeItem && disabled2 && focusableWhenDisabledProps.disabled === void 0 && element.disabled) { 2248 element.disabled = false; 2249 } 2250 }, [disabled2, focusableWhenDisabledProps.disabled, isCompositeItem]); 2251 useIsoLayoutEffect(updateDisabled, [updateDisabled]); 2252 const getButtonProps = React14.useCallback((externalProps = {}) => { 2253 const { 2254 onClick: externalOnClick, 2255 onMouseDown: externalOnMouseDown, 2256 onKeyUp: externalOnKeyUp, 2257 onKeyDown: externalOnKeyDown, 2258 onPointerDown: externalOnPointerDown, 2259 ...otherExternalProps 2260 } = externalProps; 2261 return mergeProps({ 2262 onClick(event) { 2263 if (disabled2) { 2264 event.preventDefault(); 2265 return; 2266 } 2267 externalOnClick?.(event); 2268 }, 2269 onMouseDown(event) { 2270 if (!disabled2) { 2271 externalOnMouseDown?.(event); 2272 } 2273 }, 2274 onKeyDown(event) { 2275 if (disabled2) { 2276 return; 2277 } 2278 makeEventPreventable(event); 2279 externalOnKeyDown?.(event); 2280 if (event.baseUIHandlerPrevented) { 2281 return; 2282 } 2283 const isCurrentTarget = event.target === event.currentTarget; 2284 const currentTarget = event.currentTarget; 2285 const isButton = isButtonElement(currentTarget); 2286 const isLink = !isNativeButton && isValidLinkElement(currentTarget); 2287 const shouldClick = isCurrentTarget && (isNativeButton ? isButton : !isLink); 2288 const isEnterKey = event.key === "Enter"; 2289 const isSpaceKey = event.key === " "; 2290 const role = currentTarget.getAttribute("role"); 2291 const isTextNavigationRole = role?.startsWith("menuitem") || role === "option" || role === "gridcell"; 2292 if (isCurrentTarget && isCompositeItem && isSpaceKey) { 2293 if (event.defaultPrevented && isTextNavigationRole) { 2294 return; 2295 } 2296 event.preventDefault(); 2297 if (!isNativeButton || isButton) { 2298 event.preventBaseUIHandler(); 2299 dispatchClickWithModifiers(currentTarget, event); 2300 } 2301 return; 2302 } 2303 if (!shouldClick || isNativeButton || !isSpaceKey && !isEnterKey) { 2304 if (isCurrentTarget && isLink && isSpaceKey) { 2305 event.preventDefault(); 2306 } 2307 return; 2308 } 2309 if (event.defaultPrevented) { 2310 return; 2311 } 2312 event.preventDefault(); 2313 if (isEnterKey) { 2314 event.preventBaseUIHandler(); 2315 dispatchClickWithModifiers(currentTarget, event); 2316 } 2317 }, 2318 onKeyUp(event) { 2319 if (disabled2) { 2320 return; 2321 } 2322 makeEventPreventable(event); 2323 externalOnKeyUp?.(event); 2324 if (event.target === event.currentTarget && isNativeButton && isCompositeItem && isButtonElement(event.currentTarget) && event.key === " ") { 2325 event.preventDefault(); 2326 return; 2327 } 2328 if (event.baseUIHandlerPrevented) { 2329 return; 2330 } 2331 if (event.target === event.currentTarget && !isNativeButton && !isCompositeItem && !event.defaultPrevented && event.key === " ") { 2332 event.preventBaseUIHandler(); 2333 dispatchClickWithModifiers(event.currentTarget, event); 2334 } 2335 }, 2336 onPointerDown(event) { 2337 if (disabled2) { 2338 event.preventDefault(); 2339 return; 2340 } 2341 externalOnPointerDown?.(event); 2342 } 2343 }, isNativeButton ? { 2344 type: "button" 2345 } : { 2346 role: "button" 2347 }, focusableWhenDisabledProps, otherExternalProps); 2348 }, [disabled2, focusableWhenDisabledProps, isCompositeItem, isNativeButton]); 2349 const buttonRef = useStableCallback((element) => { 2350 elementRef.current = element; 2351 updateDisabled(); 2352 }); 2353 return { 2354 getButtonProps, 2355 buttonRef 2356 }; 2357 } 2358 function isButtonElement(elem) { 2359 return isHTMLElement(elem) && elem.tagName === "BUTTON"; 2360 } 2361 function isValidLinkElement(elem) { 2362 return isHTMLElement(elem) && elem.tagName === "A" && Boolean(elem.href); 2363 } 2364 2365 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/addEventListener.mjs 2366 function addEventListener(target, type, listener, options) { 2367 target.addEventListener(type, listener, options); 2368 return () => { 2369 target.removeEventListener(type, listener, options); 2370 }; 2371 } 2372 2373 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/useValueAsRef.mjs 2374 function useValueAsRef(value) { 2375 const latest = useRefWithInit(createLatestRef, value).current; 2376 latest.next = value; 2377 useIsoLayoutEffect(latest.effect); 2378 return latest; 2379 } 2380 function createLatestRef(value) { 2381 const latest = { 2382 current: value, 2383 next: value, 2384 effect: () => { 2385 latest.current = latest.next; 2386 } 2387 }; 2388 return latest; 2389 } 2390 2391 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/platform/parts.mjs 2392 var parts_exports = {}; 2393 __export(parts_exports, { 2394 engine: () => engine_exports, 2395 env: () => env_exports, 2396 mediaQuery: () => media_query_exports, 2397 os: () => os_exports, 2398 screenReader: () => screen_reader_exports 2399 }); 2400 2401 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/platform/os.mjs 2402 var os_exports = {}; 2403 __export(os_exports, { 2404 android: () => android, 2405 apple: () => apple, 2406 ios: () => ios, 2407 linux: () => linux, 2408 mac: () => mac, 2409 windows: () => windows 2410 }); 2411 2412 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/platform/shared.mjs 2413 function readRawData() { 2414 if (typeof navigator === "undefined") { 2415 return { 2416 userAgent: "", 2417 platform: "", 2418 maxTouchPoints: 0 2419 }; 2420 } 2421 if (true) { 2422 const uaData = navigator.userAgentData; 2423 if (uaData && Array.isArray(uaData.brands)) { 2424 return { 2425 userAgent: uaData.brands.map(({ 2426 brand, 2427 version: version2 2428 }) => `$brand}/$version2}`).join(" "), 2429 platform: uaData.platform ?? navigator.platform ?? "", 2430 maxTouchPoints: navigator.maxTouchPoints ?? 0 2431 }; 2432 } 2433 } 2434 return { 2435 userAgent: navigator.userAgent, 2436 platform: navigator.platform ?? "", 2437 maxTouchPoints: navigator.maxTouchPoints ?? 0 2438 }; 2439 } 2440 var { 2441 userAgent, 2442 platform, 2443 maxTouchPoints 2444 } = readRawData(); 2445 var lowerUserAgent = userAgent.toLowerCase(); 2446 var lowerPlatform = platform.toLowerCase(); 2447 2448 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/platform/os.mjs 2449 var ios = /^i(os$|p)/.test(lowerPlatform) || lowerPlatform === "macintel" && maxTouchPoints > 1; 2450 var ANDROID_STRING = "android"; 2451 var android = lowerPlatform === ANDROID_STRING || lowerUserAgent.includes(ANDROID_STRING); 2452 var mac = !ios && lowerPlatform.startsWith("mac"); 2453 var windows = lowerPlatform.startsWith("win"); 2454 var linux = !android && /^(linux|chrome os)/.test(lowerPlatform); 2455 var apple = mac || ios; 2456 2457 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/platform/engine.mjs 2458 var engine_exports = {}; 2459 __export(engine_exports, { 2460 blink: () => blink, 2461 gecko: () => gecko, 2462 webkit: () => webkit 2463 }); 2464 var webkit = typeof CSS !== "undefined" && !!CSS.supports?.("-webkit-backdrop-filter:none"); 2465 var gecko = !webkit && lowerUserAgent.includes("firefox"); 2466 var blink = !webkit && lowerUserAgent.includes("chrom"); 2467 2468 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/platform/screen-reader.mjs 2469 var screen_reader_exports = {}; 2470 __export(screen_reader_exports, { 2471 voiceOver: () => voiceOver 2472 }); 2473 var voiceOver = apple; 2474 2475 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/platform/env.mjs 2476 var env_exports = {}; 2477 __export(env_exports, { 2478 jsdom: () => jsdom 2479 }); 2480 var jsdom = /jsdom|happydom/.test(lowerUserAgent); 2481 2482 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/platform/media-query.mjs 2483 var media_query_exports = {}; 2484 __export(media_query_exports, { 2485 iOS: () => iOS 2486 }); 2487 var iOS = "@supports (-webkit-touch-callout: none)"; 2488 2489 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/components/FloatingDelayGroup.mjs 2490 var React15 = __toESM(require_react(), 1); 2491 2492 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/utils/event.mjs 2493 function isReactEvent(event) { 2494 return "nativeEvent" in event; 2495 } 2496 function isVirtualClick(event) { 2497 if (event.pointerType === "" && event.isTrusted) { 2498 return true; 2499 } 2500 if (parts_exports.os.android && event.pointerType) { 2501 return event.type === "click" && event.buttons === 1; 2502 } 2503 return event.detail === 0 && !event.pointerType; 2504 } 2505 function isMouseLikePointerType(pointerType, strict) { 2506 const values = ["mouse", "pen"]; 2507 if (!strict) { 2508 values.push("", void 0); 2509 } 2510 return values.includes(pointerType); 2511 } 2512 function isClickLikeEvent(event) { 2513 const type = event.type; 2514 return type === "click" || type === "mousedown" || type === "keydown" || type === "keyup"; 2515 } 2516 2517 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/shadowDom.mjs 2518 function activeElement(doc) { 2519 let element = doc.activeElement; 2520 while (element?.shadowRoot?.activeElement != null) { 2521 element = element.shadowRoot.activeElement; 2522 } 2523 return element; 2524 } 2525 function contains(parent, child) { 2526 if (!parent || !child) { 2527 return false; 2528 } 2529 const rootNode = child.getRootNode?.(); 2530 if (parent.contains(child)) { 2531 return true; 2532 } 2533 if (rootNode && isShadowRoot(rootNode)) { 2534 let next = child; 2535 while (next) { 2536 if (parent === next) { 2537 return true; 2538 } 2539 next = next.parentNode || next.host; 2540 } 2541 } 2542 return false; 2543 } 2544 function closest(node, selector) { 2545 let current = node; 2546 while (current) { 2547 if (isElement(current) && current.matches(selector)) { 2548 return current; 2549 } 2550 current = current.assignedSlot ?? current.parentNode ?? (isShadowRoot(current) ? current.host : null); 2551 } 2552 return null; 2553 } 2554 function getTarget(event) { 2555 if ("composedPath" in event) { 2556 return event.composedPath()[0] ?? event.target; 2557 } 2558 return event.target; 2559 } 2560 2561 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/utils/constants.mjs 2562 var FOCUSABLE_ATTRIBUTE = "data-base-ui-focusable"; 2563 var TYPEABLE_SELECTOR = "input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])"; 2564 2565 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/CommonPopupDataAttributes.mjs 2566 var open = "data-open"; 2567 var closed = "data-closed"; 2568 var anchorHidden = "data-anchor-hidden"; 2569 2570 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/CommonTriggerDataAttributes.mjs 2571 var CommonTriggerDataAttributes_exports = {}; 2572 __export(CommonTriggerDataAttributes_exports, { 2573 popupOpen: () => popupOpen, 2574 pressed: () => pressed 2575 }); 2576 var popupOpen = "data-popup-open"; 2577 var pressed = "data-pressed"; 2578 2579 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/popupStateMapping.mjs 2580 var TRIGGER_HOOK = { 2581 [popupOpen]: "" 2582 }; 2583 var PRESSABLE_TRIGGER_HOOK = { 2584 [popupOpen]: "", 2585 [pressed]: "" 2586 }; 2587 var POPUP_OPEN_HOOK = { 2588 [open]: "" 2589 }; 2590 var POPUP_CLOSED_HOOK = { 2591 [closed]: "" 2592 }; 2593 var ANCHOR_HIDDEN_HOOK = { 2594 [anchorHidden]: "" 2595 }; 2596 var triggerOpenStateMapping = { 2597 open(value) { 2598 if (value) { 2599 return TRIGGER_HOOK; 2600 } 2601 return null; 2602 } 2603 }; 2604 var popupStateMapping = { 2605 open(value) { 2606 if (value) { 2607 return POPUP_OPEN_HOOK; 2608 } 2609 return POPUP_CLOSED_HOOK; 2610 }, 2611 anchorHidden(value) { 2612 if (value) { 2613 return ANCHOR_HIDDEN_HOOK; 2614 } 2615 return null; 2616 } 2617 }; 2618 var popupTransitionStateMapping = { 2619 ...popupStateMapping, 2620 ...transitionStatusMapping 2621 }; 2622 2623 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/trigger/TooltipTriggerDataAttributes.mjs 2624 var popupOpen2 = CommonTriggerDataAttributes_exports.popupOpen; 2625 var triggerDisabled = "data-trigger-disabled"; 2626 2627 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/utils/element.mjs 2628 function isTargetInsideEnabledTrigger(target, triggerElements) { 2629 if (!isElement(target)) { 2630 return false; 2631 } 2632 const targetElement = target; 2633 if (triggerElements.hasElement(targetElement)) { 2634 return !targetElement.hasAttribute(triggerDisabled); 2635 } 2636 for (const [, trigger] of triggerElements.entries()) { 2637 if (contains(trigger, targetElement)) { 2638 return !trigger.hasAttribute(triggerDisabled); 2639 } 2640 } 2641 return false; 2642 } 2643 function isEventTargetWithin(event, node) { 2644 if (node == null) { 2645 return false; 2646 } 2647 if ("composedPath" in event) { 2648 return event.composedPath().includes(node); 2649 } 2650 const eventAgain = event; 2651 return eventAgain.target != null && node.contains(eventAgain.target); 2652 } 2653 function isRootElement(element) { 2654 return element.matches("html,body"); 2655 } 2656 function isTypeableElement(element) { 2657 return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR); 2658 } 2659 function isInteractiveElement(element) { 2660 return closest(element, `button,a[href],[role="button"],select,[tabindex]:not([tabindex="-1"]),$TYPEABLE_SELECTOR}`) != null; 2661 } 2662 function matchesFocusVisible(element) { 2663 if (!element || parts_exports.env.jsdom) { 2664 return true; 2665 } 2666 try { 2667 return element.matches(":focus-visible"); 2668 } catch (_e) { 2669 return true; 2670 } 2671 } 2672 2673 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/hooks/useHoverShared.mjs 2674 function resolveValue(value, pointerType) { 2675 if (pointerType != null && !isMouseLikePointerType(pointerType)) { 2676 return 0; 2677 } 2678 if (typeof value === "function") { 2679 return value(); 2680 } 2681 return value; 2682 } 2683 function getDelay(value, prop, pointerType) { 2684 const result = resolveValue(value, pointerType); 2685 if (typeof result === "number") { 2686 return result; 2687 } 2688 return result?.[prop]; 2689 } 2690 function getRestMs(value) { 2691 if (typeof value === "function") { 2692 return value(); 2693 } 2694 return value; 2695 } 2696 function isClickLikeOpenEvent(openEventType, interactedInside) { 2697 return interactedInside || openEventType === "click" || openEventType === "mousedown"; 2698 } 2699 function isHoverOpenEvent(openEventType) { 2700 return openEventType?.includes("mouse") && openEventType !== "mousedown"; 2701 } 2702 2703 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/components/FloatingDelayGroup.mjs 2704 var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); 2705 var FloatingDelayGroupContext = /* @__PURE__ */ React15.createContext({ 2706 hasProvider: false, 2707 timeoutMs: 0, 2708 delayRef: { 2709 current: 0 2710 }, 2711 initialDelayRef: { 2712 current: 0 2713 }, 2714 timeout: new Timeout(), 2715 currentIdRef: { 2716 current: null 2717 }, 2718 currentContextRef: { 2719 current: null 2720 } 2721 }); 2722 if (true) FloatingDelayGroupContext.displayName = "FloatingDelayGroupContext"; 2723 function resetDelayRef(delayRef, initialDelayRef) { 2724 delayRef.current = initialDelayRef.current; 2725 } 2726 function FloatingDelayGroup(props) { 2727 const { 2728 children, 2729 delay, 2730 timeoutMs = 0 2731 } = props; 2732 const delayRef = React15.useRef(delay); 2733 const initialDelayRef = React15.useRef(delay); 2734 const currentIdRef = React15.useRef(null); 2735 const currentContextRef = React15.useRef(null); 2736 const timeout = useTimeout(); 2737 useIsoLayoutEffect(() => { 2738 initialDelayRef.current = delay; 2739 if (!currentIdRef.current) { 2740 delayRef.current = delay; 2741 return; 2742 } 2743 delayRef.current = { 2744 open: getDelay(delayRef.current, "open"), 2745 close: getDelay(delay, "close") 2746 }; 2747 }, [delay, currentIdRef, delayRef, initialDelayRef]); 2748 return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(FloatingDelayGroupContext.Provider, { 2749 value: React15.useMemo(() => ({ 2750 hasProvider: true, 2751 delayRef, 2752 initialDelayRef, 2753 currentIdRef, 2754 timeoutMs, 2755 currentContextRef, 2756 timeout 2757 }), [timeoutMs, timeout]), 2758 children 2759 }); 2760 } 2761 function useDelayGroup(store2, options = { 2762 open: false 2763 }) { 2764 const { 2765 open: open2 2766 } = options; 2767 const floatingId = store2.useState("floatingId"); 2768 const groupContext = React15.useContext(FloatingDelayGroupContext); 2769 const { 2770 currentIdRef, 2771 delayRef, 2772 timeoutMs, 2773 initialDelayRef, 2774 currentContextRef, 2775 hasProvider, 2776 timeout 2777 } = groupContext; 2778 const [isInstantPhase, setIsInstantPhase] = React15.useState(false); 2779 const openRef = React15.useRef(open2); 2780 useIsoLayoutEffect(() => { 2781 openRef.current = open2; 2782 }, [open2]); 2783 useIsoLayoutEffect(() => { 2784 function unset() { 2785 currentContextRef.current?.setIsInstantPhase(false); 2786 currentIdRef.current = null; 2787 currentContextRef.current = null; 2788 delayRef.current = initialDelayRef.current; 2789 timeout.clear(); 2790 } 2791 if (!currentIdRef.current) { 2792 return void 0; 2793 } 2794 if (!open2 && currentIdRef.current === floatingId) { 2795 setIsInstantPhase(false); 2796 if (timeoutMs) { 2797 const closingId = floatingId; 2798 timeout.start(timeoutMs, () => { 2799 if (store2.select("open") || currentIdRef.current && currentIdRef.current !== closingId) { 2800 return; 2801 } 2802 unset(); 2803 }); 2804 return () => { 2805 if (openRef.current || currentIdRef.current !== closingId) { 2806 timeout.clear(); 2807 } 2808 }; 2809 } 2810 unset(); 2811 } 2812 return void 0; 2813 }, [open2, floatingId, currentIdRef, delayRef, timeoutMs, initialDelayRef, currentContextRef, timeout, store2]); 2814 useIsoLayoutEffect(() => { 2815 if (!open2) { 2816 return; 2817 } 2818 const prevContext = currentContextRef.current; 2819 const prevId = currentIdRef.current; 2820 timeout.clear(); 2821 currentContextRef.current = { 2822 onOpenChange: store2.setOpen, 2823 setIsInstantPhase 2824 }; 2825 currentIdRef.current = floatingId; 2826 delayRef.current = { 2827 open: 0, 2828 close: getDelay(initialDelayRef.current, "close") 2829 }; 2830 if (prevId !== null && prevId !== floatingId) { 2831 setIsInstantPhase(true); 2832 prevContext?.setIsInstantPhase(true); 2833 prevContext?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.none)); 2834 } else { 2835 setIsInstantPhase(false); 2836 prevContext?.setIsInstantPhase(false); 2837 } 2838 }, [open2, floatingId, store2, currentIdRef, delayRef, initialDelayRef, currentContextRef, timeout]); 2839 useIsoLayoutEffect(() => { 2840 return () => { 2841 if (currentIdRef.current === floatingId) { 2842 currentContextRef.current = null; 2843 if (!openRef.current) { 2844 return; 2845 } 2846 currentIdRef.current = null; 2847 resetDelayRef(delayRef, initialDelayRef); 2848 timeout.clear(); 2849 } 2850 }; 2851 }, [currentContextRef, currentIdRef, delayRef, floatingId, initialDelayRef, timeout]); 2852 return React15.useMemo(() => ({ 2853 activeIdRef: currentIdRef, 2854 hasProvider, 2855 delayRef, 2856 isInstantPhase 2857 }), [currentIdRef, hasProvider, delayRef, isInstantPhase]); 2858 } 2859 2860 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/mergeCleanups.mjs 2861 function mergeCleanups(...cleanups) { 2862 return () => { 2863 for (let i = 0; i < cleanups.length; i += 1) { 2864 const cleanup = cleanups[i]; 2865 if (cleanup) { 2866 cleanup(); 2867 } 2868 } 2869 }; 2870 } 2871 2872 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/FocusGuard.mjs 2873 var React16 = __toESM(require_react(), 1); 2874 2875 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/visuallyHidden.mjs 2876 var visuallyHiddenBase = { 2877 clipPath: "inset(50%)", 2878 overflow: "hidden", 2879 whiteSpace: "nowrap", 2880 border: 0, 2881 padding: 0, 2882 width: 1, 2883 height: 1, 2884 margin: -1 2885 }; 2886 var visuallyHidden = { 2887 ...visuallyHiddenBase, 2888 position: "fixed", 2889 margin: 0, 2890 top: 0, 2891 left: 0 2892 }; 2893 var visuallyHiddenInput = { 2894 ...visuallyHiddenBase, 2895 position: "absolute" 2896 }; 2897 2898 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/FocusGuard.mjs 2899 var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); 2900 var FocusGuard = /* @__PURE__ */ React16.forwardRef(function FocusGuard2(props, ref) { 2901 const [role, setRole] = React16.useState(); 2902 useIsoLayoutEffect(() => { 2903 if (parts_exports.screenReader.voiceOver && parts_exports.engine.webkit) { 2904 setRole("button"); 2905 } 2906 }, []); 2907 const restProps = { 2908 tabIndex: 0, 2909 // Role is only for VoiceOver 2910 role 2911 }; 2912 return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { 2913 ...props, 2914 ref, 2915 style: visuallyHidden, 2916 "aria-hidden": role ? void 0 : true, 2917 ...restProps, 2918 "data-base-ui-focus-guard": "" 2919 }); 2920 }); 2921 if (true) FocusGuard.displayName = "FocusGuard"; 2922 2923 // node_modules/.store/@floating-ui/utils@0.2.12-gOxTzMf36nCrbeHpEew-rw/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs 2924 var min = Math.min; 2925 var max = Math.max; 2926 var round = Math.round; 2927 var floor = Math.floor; 2928 var createCoords = (v) => ({ 2929 x: v, 2930 y: v 2931 }); 2932 var oppositeSideMap = { 2933 left: "right", 2934 right: "left", 2935 bottom: "top", 2936 top: "bottom" 2937 }; 2938 function clamp(start, value, end) { 2939 return max(start, min(value, end)); 2940 } 2941 function evaluate(value, param) { 2942 return typeof value === "function" ? value(param) : value; 2943 } 2944 function getSide(placement) { 2945 return placement.split("-")[0]; 2946 } 2947 function getAlignment(placement) { 2948 return placement.split("-")[1]; 2949 } 2950 function getOppositeAxis(axis) { 2951 return axis === "x" ? "y" : "x"; 2952 } 2953 function getAxisLength(axis) { 2954 return axis === "y" ? "height" : "width"; 2955 } 2956 function getSideAxis(placement) { 2957 const firstChar = placement[0]; 2958 return firstChar === "t" || firstChar === "b" ? "y" : "x"; 2959 } 2960 function getAlignmentAxis(placement) { 2961 return getOppositeAxis(getSideAxis(placement)); 2962 } 2963 function getAlignmentSides(placement, rects, rtl) { 2964 if (rtl === void 0) { 2965 rtl = false; 2966 } 2967 const alignment = getAlignment(placement); 2968 const alignmentAxis = getAlignmentAxis(placement); 2969 const length = getAxisLength(alignmentAxis); 2970 let mainAlignmentSide = alignmentAxis === "x" ? alignment === (rtl ? "end" : "start") ? "right" : "left" : alignment === "start" ? "bottom" : "top"; 2971 if (rects.reference[length] > rects.floating[length]) { 2972 mainAlignmentSide = getOppositePlacement(mainAlignmentSide); 2973 } 2974 return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)]; 2975 } 2976 function getExpandedPlacements(placement) { 2977 const oppositePlacement = getOppositePlacement(placement); 2978 return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)]; 2979 } 2980 function getOppositeAlignmentPlacement(placement) { 2981 return placement.includes("start") ? placement.replace("start", "end") : placement.replace("end", "start"); 2982 } 2983 var lrPlacement = ["left", "right"]; 2984 var rlPlacement = ["right", "left"]; 2985 var tbPlacement = ["top", "bottom"]; 2986 var btPlacement = ["bottom", "top"]; 2987 function getSideList(side, isStart, rtl) { 2988 switch (side) { 2989 case "top": 2990 case "bottom": 2991 if (rtl) return isStart ? rlPlacement : lrPlacement; 2992 return isStart ? lrPlacement : rlPlacement; 2993 case "left": 2994 case "right": 2995 return isStart ? tbPlacement : btPlacement; 2996 default: 2997 return []; 2998 } 2999 } 3000 function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) { 3001 const alignment = getAlignment(placement); 3002 let list = getSideList(getSide(placement), direction === "start", rtl); 3003 if (alignment) { 3004 list = list.map((side) => side + "-" + alignment); 3005 if (flipAlignment) { 3006 list = list.concat(list.map(getOppositeAlignmentPlacement)); 3007 } 3008 } 3009 return list; 3010 } 3011 function getOppositePlacement(placement) { 3012 const side = getSide(placement); 3013 return oppositeSideMap[side] + placement.slice(side.length); 3014 } 3015 function expandPaddingObject(padding) { 3016 var _padding$top, _padding$right, _padding$bottom, _padding$left; 3017 return { 3018 top: (_padding$top = padding.top) != null ? _padding$top : 0, 3019 right: (_padding$right = padding.right) != null ? _padding$right : 0, 3020 bottom: (_padding$bottom = padding.bottom) != null ? _padding$bottom : 0, 3021 left: (_padding$left = padding.left) != null ? _padding$left : 0 3022 }; 3023 } 3024 function getPaddingObject(padding) { 3025 return typeof padding !== "number" ? expandPaddingObject(padding) : { 3026 top: padding, 3027 right: padding, 3028 bottom: padding, 3029 left: padding 3030 }; 3031 } 3032 function rectToClientRect(rect) { 3033 const { 3034 x, 3035 y, 3036 width, 3037 height 3038 } = rect; 3039 return { 3040 width, 3041 height, 3042 top: y, 3043 left: x, 3044 right: x + width, 3045 bottom: y + height, 3046 x, 3047 y 3048 }; 3049 } 3050 3051 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/utils/composite.mjs 3052 function isHiddenByStyles(styles) { 3053 return styles.visibility === "hidden" || styles.visibility === "collapse"; 3054 } 3055 function isElementVisible(element, styles = element ? getComputedStyle2(element) : null) { 3056 if (!element || !element.isConnected || !styles || isHiddenByStyles(styles)) { 3057 return false; 3058 } 3059 if (typeof element.checkVisibility === "function") { 3060 return element.checkVisibility(); 3061 } 3062 return styles.display !== "none" && styles.display !== "contents"; 3063 } 3064 3065 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/utils/tabbable.mjs 3066 var CANDIDATE_SELECTOR = 'a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable="false"]),audio[controls],video[controls]'; 3067 function getParentElement(element) { 3068 const assignedSlot = element.assignedSlot; 3069 if (assignedSlot) { 3070 return assignedSlot; 3071 } 3072 if (element.parentElement) { 3073 return element.parentElement; 3074 } 3075 const rootNode = element.getRootNode(); 3076 return isShadowRoot(rootNode) ? rootNode.host : null; 3077 } 3078 function getDetailsSummary(details) { 3079 for (const child of Array.from(details.children)) { 3080 if (getNodeName(child) === "summary") { 3081 return child; 3082 } 3083 } 3084 return null; 3085 } 3086 function isWithinOpenDetailsSummary(element, details) { 3087 const summary = getDetailsSummary(details); 3088 return !!summary && (element === summary || contains(summary, element)); 3089 } 3090 function isFocusableCandidate(element) { 3091 const nodeName = element ? getNodeName(element) : ""; 3092 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"); 3093 } 3094 function isFocusableElement(element) { 3095 if (!isFocusableCandidate(element) || !element.isConnected || element.matches(":disabled")) { 3096 return false; 3097 } 3098 for (let current = element; current; current = getParentElement(current)) { 3099 const isAncestor = current !== element; 3100 const isSlot = getNodeName(current) === "slot"; 3101 if (current.hasAttribute("inert")) { 3102 return false; 3103 } 3104 if (isAncestor && getNodeName(current) === "details" && !current.open && !isWithinOpenDetailsSummary(element, current) || current.hasAttribute("hidden") || !isSlot && !isVisibleInTabbableTree(current, isAncestor)) { 3105 return false; 3106 } 3107 } 3108 return true; 3109 } 3110 function isVisibleInTabbableTree(element, isAncestor) { 3111 const styles = getComputedStyle2(element); 3112 if (!isAncestor) { 3113 return isElementVisible(element, styles); 3114 } 3115 return styles.display !== "none"; 3116 } 3117 function getTabIndex(element) { 3118 const tabIndex = element.tabIndex; 3119 if (tabIndex < 0) { 3120 const nodeName = getNodeName(element); 3121 if (nodeName === "details" || nodeName === "audio" || nodeName === "video" || isHTMLElement(element) && element.isContentEditable) { 3122 return 0; 3123 } 3124 } 3125 return tabIndex; 3126 } 3127 function getNamedRadioInput(element) { 3128 if (getNodeName(element) !== "input") { 3129 return null; 3130 } 3131 const input = element; 3132 return input.type === "radio" && input.name !== "" ? input : null; 3133 } 3134 function isTabbableRadio(element, candidates) { 3135 const input = getNamedRadioInput(element); 3136 if (!input) { 3137 return true; 3138 } 3139 const checkedRadio = candidates.find((candidate) => { 3140 const radio = getNamedRadioInput(candidate); 3141 return radio?.name === input.name && radio.form === input.form && radio.checked; 3142 }); 3143 if (checkedRadio) { 3144 return checkedRadio === input; 3145 } 3146 return candidates.find((candidate) => { 3147 const radio = getNamedRadioInput(candidate); 3148 return radio?.name === input.name && radio.form === input.form; 3149 }) === input; 3150 } 3151 function getComposedChildren(container) { 3152 if (isHTMLElement(container) && getNodeName(container) === "slot") { 3153 const assignedElements = container.assignedElements({ 3154 flatten: true 3155 }); 3156 if (assignedElements.length > 0) { 3157 return assignedElements; 3158 } 3159 } 3160 if (isHTMLElement(container) && container.shadowRoot) { 3161 return Array.from(container.shadowRoot.children); 3162 } 3163 return Array.from(container.children); 3164 } 3165 function appendCandidates(container, list) { 3166 getComposedChildren(container).forEach((child) => { 3167 if (isFocusableCandidate(child)) { 3168 list.push(child); 3169 } 3170 appendCandidates(child, list); 3171 }); 3172 } 3173 function appendMatchingElements(container, selector, list) { 3174 getComposedChildren(container).forEach((child) => { 3175 if (isHTMLElement(child) && child.matches(selector)) { 3176 list.push(child); 3177 } 3178 appendMatchingElements(child, selector, list); 3179 }); 3180 } 3181 function focusable(container) { 3182 const candidates = []; 3183 appendCandidates(container, candidates); 3184 return candidates.filter(isFocusableElement); 3185 } 3186 function tabbable(container) { 3187 const candidates = focusable(container); 3188 return candidates.filter((element) => getTabIndex(element) >= 0 && isTabbableRadio(element, candidates)); 3189 } 3190 function getTabbableIn(container, dir) { 3191 const list = tabbable(container); 3192 const len = list.length; 3193 if (len === 0) { 3194 return void 0; 3195 } 3196 const active = activeElement(ownerDocument(container)); 3197 const index2 = list.indexOf(active); 3198 const nextIndex = index2 === -1 ? dir === 1 ? 0 : len - 1 : index2 + dir; 3199 return list[nextIndex]; 3200 } 3201 function getNextTabbable(referenceElement) { 3202 return getTabbableIn(ownerDocument(referenceElement).body, 1) || referenceElement; 3203 } 3204 function getPreviousTabbable(referenceElement) { 3205 return getTabbableIn(ownerDocument(referenceElement).body, -1) || referenceElement; 3206 } 3207 function isOutsideEvent(event, container) { 3208 const containerElement = container || event.currentTarget; 3209 const relatedTarget = event.relatedTarget; 3210 return !relatedTarget || !contains(containerElement, relatedTarget); 3211 } 3212 function disableFocusInside(container) { 3213 const tabbableElements = tabbable(container); 3214 tabbableElements.forEach((element) => { 3215 element.dataset.tabindex = element.getAttribute("tabindex") || ""; 3216 element.setAttribute("tabindex", "-1"); 3217 }); 3218 } 3219 function enableFocusInside(container) { 3220 const elements = []; 3221 appendMatchingElements(container, "[data-tabindex]", elements); 3222 elements.forEach((element) => { 3223 const tabindex = element.dataset.tabindex; 3224 delete element.dataset.tabindex; 3225 if (tabindex) { 3226 element.setAttribute("tabindex", tabindex); 3227 } else { 3228 element.removeAttribute("tabindex"); 3229 } 3230 }); 3231 } 3232 3233 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/utils/nodes.mjs 3234 function getNodeChildren(nodes, id, onlyOpenChildren = true) { 3235 const directChildren = nodes.filter((node) => node.parentId === id); 3236 return directChildren.flatMap((child) => [...!onlyOpenChildren || child.context?.open ? [child] : [], ...getNodeChildren(nodes, child.id, onlyOpenChildren)]); 3237 } 3238 3239 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/utils/createAttribute.mjs 3240 function createAttribute(name) { 3241 return `data-base-ui-$name}`; 3242 } 3243 3244 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/components/FloatingPortal.mjs 3245 var React17 = __toESM(require_react(), 1); 3246 var ReactDOM2 = __toESM(require_react_dom(), 1); 3247 3248 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/constants.mjs 3249 var DISABLED_TRANSITIONS_STYLE = { 3250 style: { 3251 transition: "none" 3252 } 3253 }; 3254 var BASE_UI_SWIPE_IGNORE_ATTRIBUTE = "data-base-ui-swipe-ignore"; 3255 var LEGACY_SWIPE_IGNORE_ATTRIBUTE = "data-swipe-ignore"; 3256 var BASE_UI_SWIPE_IGNORE_SELECTOR = `[$BASE_UI_SWIPE_IGNORE_ATTRIBUTE}]`; 3257 var LEGACY_SWIPE_IGNORE_SELECTOR = `[$LEGACY_SWIPE_IGNORE_ATTRIBUTE}]`; 3258 var POPUP_COLLISION_AVOIDANCE = { 3259 fallbackAxisSide: "end" 3260 }; 3261 var ownerVisuallyHidden = { 3262 clipPath: "inset(50%)", 3263 position: "fixed", 3264 top: 0, 3265 left: 0 3266 }; 3267 3268 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/components/FloatingPortal.mjs 3269 var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); 3270 var PortalContext = /* @__PURE__ */ React17.createContext(null); 3271 if (true) PortalContext.displayName = "PortalContext"; 3272 var usePortalContext = () => React17.useContext(PortalContext); 3273 var attr = createAttribute("portal"); 3274 function useFloatingPortalNode(props = {}) { 3275 const { 3276 ref, 3277 container: containerProp, 3278 componentProps = EMPTY_OBJECT, 3279 elementProps 3280 } = props; 3281 const uniqueId = useId(); 3282 const portalContext = usePortalContext(); 3283 const parentPortalNode = portalContext?.portalNode; 3284 const [containerElement, setContainerElement] = React17.useState(null); 3285 const [portalNode, setPortalNode] = React17.useState(null); 3286 const setPortalNodeRef = useStableCallback((node) => { 3287 if (node !== null) { 3288 setPortalNode(node); 3289 } 3290 }); 3291 const containerRef = React17.useRef(null); 3292 useIsoLayoutEffect(() => { 3293 if (containerProp === null) { 3294 if (containerRef.current) { 3295 containerRef.current = null; 3296 setPortalNode(null); 3297 setContainerElement(null); 3298 } 3299 return; 3300 } 3301 const resolvedContainer = (containerProp && (isNode(containerProp) ? containerProp : containerProp.current)) ?? parentPortalNode ?? document.body; 3302 if (resolvedContainer == null) { 3303 if (containerRef.current) { 3304 containerRef.current = null; 3305 setPortalNode(null); 3306 setContainerElement(null); 3307 } 3308 return; 3309 } 3310 if (containerRef.current !== resolvedContainer) { 3311 containerRef.current = resolvedContainer; 3312 setPortalNode(null); 3313 setContainerElement(resolvedContainer); 3314 } 3315 }, [containerProp, parentPortalNode]); 3316 const portalElement = useRenderElement("div", componentProps, { 3317 ref: [ref, setPortalNodeRef], 3318 props: [{ 3319 id: uniqueId, 3320 [attr]: "" 3321 }, elementProps] 3322 }); 3323 const portalSubtree = containerElement && portalElement ? /* @__PURE__ */ ReactDOM2.createPortal(portalElement, containerElement) : null; 3324 return { 3325 node: portalNode, 3326 // `id` and `render` props can override or remove the generated ID. Use the exact 3327 // rendered value so `aria-owns` never points at an ID absent from the DOM. 3328 nodeId: /* @__PURE__ */ React17.isValidElement(portalElement) ? portalElement.props.id : void 0, 3329 subtree: portalSubtree 3330 }; 3331 } 3332 var FloatingPortal = /* @__PURE__ */ React17.forwardRef(function FloatingPortal2(componentProps, forwardedRef) { 3333 const { 3334 render, 3335 className, 3336 style, 3337 children, 3338 container, 3339 portalOwnerRole, 3340 ...elementProps 3341 } = componentProps; 3342 const { 3343 node: portalNode, 3344 nodeId: portalNodeId, 3345 subtree: portalSubtree 3346 } = useFloatingPortalNode({ 3347 container, 3348 ref: forwardedRef, 3349 componentProps, 3350 elementProps 3351 }); 3352 const beforeOutsideRef = React17.useRef(null); 3353 const afterOutsideRef = React17.useRef(null); 3354 const beforeInsideRef = React17.useRef(null); 3355 const afterInsideRef = React17.useRef(null); 3356 const [focusManagerState, setFocusManagerState] = React17.useState(null); 3357 const focusInsideDisabledRef = React17.useRef(false); 3358 const modal = focusManagerState?.modal; 3359 const open2 = focusManagerState?.open; 3360 const shouldRenderGuards = !!focusManagerState && !focusManagerState.modal && focusManagerState.open && !!portalNode; 3361 React17.useEffect(() => { 3362 if (!portalNode || modal) { 3363 return void 0; 3364 } 3365 function onFocus(event) { 3366 if (portalNode && event.relatedTarget && isOutsideEvent(event)) { 3367 if (event.type === "focusin") { 3368 if (focusInsideDisabledRef.current) { 3369 enableFocusInside(portalNode); 3370 focusInsideDisabledRef.current = false; 3371 } 3372 } else { 3373 disableFocusInside(portalNode); 3374 focusInsideDisabledRef.current = true; 3375 } 3376 } 3377 } 3378 return mergeCleanups(addEventListener(portalNode, "focusin", onFocus, true), addEventListener(portalNode, "focusout", onFocus, true)); 3379 }, [portalNode, modal]); 3380 useIsoLayoutEffect(() => { 3381 if (!portalNode || open2 !== true || !focusInsideDisabledRef.current) { 3382 return; 3383 } 3384 enableFocusInside(portalNode); 3385 focusInsideDisabledRef.current = false; 3386 }, [open2, portalNode]); 3387 const portalContextValue = React17.useMemo(() => ({ 3388 beforeOutsideRef, 3389 afterOutsideRef, 3390 beforeInsideRef, 3391 afterInsideRef, 3392 portalNode, 3393 setFocusManagerState 3394 }), [portalNode]); 3395 return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(React17.Fragment, { 3396 children: [portalSubtree, /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(PortalContext.Provider, { 3397 value: portalContextValue, 3398 children: [shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FocusGuard, { 3399 "data-type": "outside", 3400 ref: beforeOutsideRef, 3401 onFocus: (event) => { 3402 if (isOutsideEvent(event, portalNode)) { 3403 beforeInsideRef.current?.focus(); 3404 } else { 3405 const domReference = focusManagerState ? focusManagerState.domReference : null; 3406 const prevTabbable = getPreviousTabbable(domReference); 3407 prevTabbable?.focus(); 3408 } 3409 } 3410 }), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { 3411 role: portalOwnerRole, 3412 "aria-owns": portalNodeId, 3413 style: ownerVisuallyHidden 3414 }), portalNode && /* @__PURE__ */ ReactDOM2.createPortal(children, portalNode), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FocusGuard, { 3415 "data-type": "outside", 3416 ref: afterOutsideRef, 3417 onFocus: (event) => { 3418 if (isOutsideEvent(event, portalNode)) { 3419 afterInsideRef.current?.focus(); 3420 } else { 3421 const domReference = focusManagerState ? focusManagerState.domReference : null; 3422 const nextTabbable = getNextTabbable(domReference); 3423 nextTabbable?.focus(); 3424 if (focusManagerState?.closeOnFocusOut) { 3425 focusManagerState?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.focusOut, event.nativeEvent)); 3426 } 3427 } 3428 } 3429 })] 3430 })] 3431 }); 3432 }); 3433 if (true) FloatingPortal.displayName = "FloatingPortal"; 3434 3435 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/components/FloatingTree.mjs 3436 var React18 = __toESM(require_react(), 1); 3437 3438 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/utils/createEventEmitter.mjs 3439 function createEventEmitter() { 3440 const map = /* @__PURE__ */ new Map(); 3441 return { 3442 emit(event, data) { 3443 map.get(event)?.forEach((listener) => listener(data)); 3444 }, 3445 on(event, listener) { 3446 if (!map.has(event)) { 3447 map.set(event, /* @__PURE__ */ new Set()); 3448 } 3449 map.get(event).add(listener); 3450 }, 3451 off(event, listener) { 3452 map.get(event)?.delete(listener); 3453 } 3454 }; 3455 } 3456 3457 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/components/FloatingTree.mjs 3458 var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1); 3459 var FloatingNodeContext = /* @__PURE__ */ React18.createContext(null); 3460 if (true) FloatingNodeContext.displayName = "FloatingNodeContext"; 3461 var FloatingTreeContext = /* @__PURE__ */ React18.createContext(null); 3462 if (true) FloatingTreeContext.displayName = "FloatingTreeContext"; 3463 var useFloatingParentNodeId = () => React18.useContext(FloatingNodeContext)?.id || null; 3464 var useFloatingTree = (externalTree) => { 3465 const contextTree = React18.useContext(FloatingTreeContext); 3466 return externalTree ?? contextTree; 3467 }; 3468 3469 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/hooks/useClientPoint.mjs 3470 var React19 = __toESM(require_react(), 1); 3471 function createVirtualElement(domElement, data) { 3472 let offsetX = null; 3473 let offsetY = null; 3474 let isAutoUpdateEvent = false; 3475 return { 3476 contextElement: domElement || void 0, 3477 getBoundingClientRect() { 3478 const domRect = domElement?.getBoundingClientRect() || { 3479 width: 0, 3480 height: 0, 3481 x: 0, 3482 y: 0 3483 }; 3484 const isXAxis = data.axis === "x" || data.axis === "both"; 3485 const isYAxis = data.axis === "y" || data.axis === "both"; 3486 const canTrackCursorOnAutoUpdate = ["mouseenter", "mousemove"].includes(data.dataRef.current.openEvent?.type || "") && data.pointerType !== "touch"; 3487 const width = data.axis === "y" ? domRect.width : 0; 3488 const height = data.axis === "x" ? domRect.height : 0; 3489 let x = domRect.x; 3490 let y = domRect.y; 3491 if (offsetX == null && data.x && isXAxis) { 3492 offsetX = domRect.x - data.x; 3493 } 3494 if (offsetY == null && data.y && isYAxis) { 3495 offsetY = domRect.y - data.y; 3496 } 3497 x -= offsetX || 0; 3498 y -= offsetY || 0; 3499 if (!isAutoUpdateEvent || canTrackCursorOnAutoUpdate) { 3500 x = isXAxis && data.x != null ? data.x : x; 3501 y = isYAxis && data.y != null ? data.y : y; 3502 } 3503 isAutoUpdateEvent = true; 3504 return { 3505 width, 3506 height, 3507 x, 3508 y, 3509 top: y, 3510 right: x + width, 3511 bottom: y + height, 3512 left: x 3513 }; 3514 } 3515 }; 3516 } 3517 function isMouseBasedEvent(event) { 3518 return event != null && event.clientX != null; 3519 } 3520 function useClientPoint(store2, props = {}) { 3521 const { 3522 enabled = true, 3523 axis = "both" 3524 } = props; 3525 const open2 = store2.useState("open"); 3526 const floating = store2.useState("floatingElement"); 3527 const domReference = store2.useState("domReferenceElement"); 3528 const dataRef = store2.context.dataRef; 3529 const initialRef = React19.useRef(false); 3530 const cleanupListenerRef = React19.useRef(null); 3531 const [pointerType, setPointerType] = React19.useState(); 3532 const [reactive, setReactive] = React19.useState([]); 3533 const resetReference = useStableCallback((reference2) => { 3534 store2.set("positionReference", reference2); 3535 }); 3536 const setReference = useStableCallback((newX, newY, referenceElement) => { 3537 if (initialRef.current) { 3538 return; 3539 } 3540 if (dataRef.current.openEvent && !isMouseBasedEvent(dataRef.current.openEvent)) { 3541 return; 3542 } 3543 store2.set("positionReference", createVirtualElement(referenceElement ?? domReference, { 3544 x: newX, 3545 y: newY, 3546 axis, 3547 dataRef, 3548 pointerType 3549 })); 3550 }); 3551 const handleReferenceEnterOrMove = useStableCallback((event) => { 3552 if (!open2) { 3553 setReference(event.clientX, event.clientY, event.currentTarget); 3554 } else if (!cleanupListenerRef.current) { 3555 setReference(event.clientX, event.clientY, event.currentTarget); 3556 setReactive([]); 3557 } 3558 }); 3559 const openCheck = isMouseLikePointerType(pointerType) ? floating : open2; 3560 React19.useEffect(() => { 3561 if (!enabled) { 3562 resetReference(domReference); 3563 return void 0; 3564 } 3565 if (!openCheck) { 3566 return void 0; 3567 } 3568 function cleanupListener() { 3569 cleanupListenerRef.current?.(); 3570 cleanupListenerRef.current = null; 3571 } 3572 const win = getWindow(floating); 3573 function handleMouseMove(event) { 3574 const target = getTarget(event); 3575 if (!contains(floating, target)) { 3576 setReference(event.clientX, event.clientY); 3577 } else { 3578 cleanupListener(); 3579 } 3580 } 3581 if (!dataRef.current.openEvent || isMouseBasedEvent(dataRef.current.openEvent)) { 3582 cleanupListenerRef.current = addEventListener(win, "mousemove", handleMouseMove); 3583 } else { 3584 resetReference(domReference); 3585 } 3586 return cleanupListener; 3587 }, [openCheck, enabled, floating, dataRef, domReference, store2, setReference, resetReference, reactive]); 3588 React19.useEffect(() => () => { 3589 store2.set("positionReference", null); 3590 }, [store2]); 3591 React19.useEffect(() => { 3592 if (enabled && !floating) { 3593 initialRef.current = false; 3594 } 3595 }, [enabled, floating]); 3596 React19.useEffect(() => { 3597 if (!enabled && open2) { 3598 initialRef.current = true; 3599 } 3600 }, [enabled, open2]); 3601 const reference = React19.useMemo(() => { 3602 function setPointerTypeRef(event) { 3603 setPointerType(event.pointerType); 3604 } 3605 return { 3606 onPointerDown: setPointerTypeRef, 3607 onPointerEnter: setPointerTypeRef, 3608 onMouseMove: handleReferenceEnterOrMove, 3609 onMouseEnter: handleReferenceEnterOrMove 3610 }; 3611 }, [handleReferenceEnterOrMove]); 3612 return React19.useMemo(() => enabled ? { 3613 reference, 3614 trigger: reference 3615 } : {}, [enabled, reference]); 3616 } 3617 3618 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/hooks/useDismiss.mjs 3619 var React20 = __toESM(require_react(), 1); 3620 function alwaysFalse() { 3621 return false; 3622 } 3623 function normalizeProp(normalizable) { 3624 return { 3625 escapeKey: typeof normalizable === "boolean" ? normalizable : normalizable?.escapeKey ?? false, 3626 outsidePress: typeof normalizable === "boolean" ? normalizable : normalizable?.outsidePress ?? true 3627 }; 3628 } 3629 function useDismiss(store2, props = {}) { 3630 const { 3631 enabled = true, 3632 escapeKey: escapeKey2 = true, 3633 outsidePress: outsidePressProp = true, 3634 outsidePressEvent = "sloppy", 3635 referencePress = alwaysFalse, 3636 bubbles, 3637 externalTree 3638 } = props; 3639 const open2 = store2.useState("open"); 3640 const floatingElement = store2.useState("floatingElement"); 3641 const { 3642 dataRef, 3643 events 3644 } = store2.context; 3645 const tree = useFloatingTree(externalTree); 3646 const outsidePressFn = useStableCallback(typeof outsidePressProp === "function" ? outsidePressProp : () => false); 3647 const outsidePress2 = typeof outsidePressProp === "function" ? outsidePressFn : outsidePressProp; 3648 const outsidePressEnabled = outsidePress2 !== false; 3649 const getOutsidePressEventProp = useStableCallback(() => outsidePressEvent); 3650 const { 3651 escapeKey: escapeKeyBubbles, 3652 outsidePress: outsidePressBubbles 3653 } = normalizeProp(bubbles); 3654 const pressStartedInsideRef = React20.useRef(false); 3655 const pressStartPreventedRef = React20.useRef(false); 3656 const suppressNextOutsideClickRef = React20.useRef(false); 3657 const sawPressWhileOpenRef = React20.useRef(false); 3658 const isComposingRef = React20.useRef(false); 3659 const currentPointerTypeRef = React20.useRef(""); 3660 const touchStateRef = React20.useRef(null); 3661 const cancelDismissOnEndTimeout = useTimeout(); 3662 const clearInsideReactTreeTimeout = useTimeout(); 3663 const compositionTimeout = useTimeout(); 3664 const clearInsideReactTree = useStableCallback(() => { 3665 clearInsideReactTreeTimeout.clear(); 3666 dataRef.current.insideReactTree = false; 3667 }); 3668 const hasBlockingChild = useStableCallback((bubbleKey) => { 3669 const nodeId = dataRef.current.floatingContext?.nodeId; 3670 const children = tree ? getNodeChildren(tree.nodesRef.current, nodeId) : []; 3671 return children.some((child) => child.context?.open && !child.context.dataRef.current[bubbleKey]); 3672 }); 3673 const isEventWithinOwnElements = useStableCallback((event) => { 3674 return isEventTargetWithin(event, store2.select("floatingElement")) || isEventTargetWithin(event, store2.select("domReferenceElement")); 3675 }); 3676 const closeOnReferencePress = useStableCallback((event) => { 3677 if (!referencePress()) { 3678 return; 3679 } 3680 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerPress, event.nativeEvent)); 3681 }); 3682 const closeOnEscapeKeyDown = useStableCallback((event) => { 3683 if (!open2 || !enabled || !escapeKey2 || event.key !== "Escape") { 3684 return; 3685 } 3686 const native = isReactEvent(event) ? event.nativeEvent : event; 3687 if (isComposingRef.current || native.isComposing) { 3688 return; 3689 } 3690 if (!escapeKeyBubbles && hasBlockingChild("__escapeKeyBubbles")) { 3691 return; 3692 } 3693 const eventDetails = createChangeEventDetails(reason_parts_exports.escapeKey, native); 3694 store2.setOpen(false, eventDetails); 3695 if (!eventDetails.isCanceled) { 3696 event.preventDefault(); 3697 } 3698 if (!escapeKeyBubbles && !eventDetails.isPropagationAllowed) { 3699 event.stopPropagation(); 3700 } 3701 }); 3702 const markInsideReactTree = useStableCallback(() => { 3703 dataRef.current.insideReactTree = true; 3704 clearInsideReactTreeTimeout.start(0, clearInsideReactTree); 3705 }); 3706 const markPressStartedInsideReactTree = useStableCallback((event) => { 3707 if (!open2 || !enabled || event.button !== 0) { 3708 return; 3709 } 3710 const target = getTarget(event.nativeEvent); 3711 if (!contains(store2.select("floatingElement"), target)) { 3712 return; 3713 } 3714 if (!pressStartedInsideRef.current) { 3715 pressStartedInsideRef.current = true; 3716 pressStartPreventedRef.current = false; 3717 } 3718 }); 3719 const markInsidePressStartPrevented = useStableCallback((event) => { 3720 if (!open2 || !enabled) { 3721 return; 3722 } 3723 if (!(event.defaultPrevented || event.nativeEvent.defaultPrevented)) { 3724 return; 3725 } 3726 if (pressStartedInsideRef.current) { 3727 pressStartPreventedRef.current = true; 3728 } 3729 }); 3730 React20.useEffect(() => { 3731 function handleOpenChange(details) { 3732 if (!details.open) { 3733 sawPressWhileOpenRef.current = false; 3734 } 3735 } 3736 events.on("openchange", handleOpenChange); 3737 return () => { 3738 events.off("openchange", handleOpenChange); 3739 }; 3740 }, [events]); 3741 React20.useEffect(() => clearInsideReactTree, [clearInsideReactTree]); 3742 React20.useEffect(() => { 3743 if (!open2 || !enabled) { 3744 if (!open2) { 3745 sawPressWhileOpenRef.current = false; 3746 isComposingRef.current = false; 3747 currentPointerTypeRef.current = ""; 3748 touchStateRef.current = null; 3749 } 3750 return clearInsideReactTree; 3751 } 3752 dataRef.current.__escapeKeyBubbles = escapeKeyBubbles; 3753 dataRef.current.__outsidePressBubbles = outsidePressBubbles; 3754 const preventedPressSuppressionTimeout = new Timeout(); 3755 const doc = ownerDocument(floatingElement); 3756 function handleCompositionStart() { 3757 compositionTimeout.clear(); 3758 isComposingRef.current = true; 3759 } 3760 function handleCompositionEnd() { 3761 isComposingRef.current = true; 3762 compositionTimeout.start( 3763 // 0ms or 1ms don't work in Safari. 5ms appears to consistently work. 3764 // Only apply to WebKit for the test to remain 0ms. 3765 parts_exports.engine.webkit ? 5 : 0, 3766 () => { 3767 isComposingRef.current = false; 3768 } 3769 ); 3770 } 3771 function suppressImmediateOutsideClickAfterPreventedStart() { 3772 suppressNextOutsideClickRef.current = true; 3773 preventedPressSuppressionTimeout.start(0, () => { 3774 suppressNextOutsideClickRef.current = false; 3775 }); 3776 } 3777 function resetPressStartState() { 3778 pressStartedInsideRef.current = false; 3779 pressStartPreventedRef.current = false; 3780 } 3781 function getOutsidePressEvent() { 3782 const type = currentPointerTypeRef.current; 3783 const computedType = type === "pen" || !type ? "mouse" : type; 3784 const outsidePressEventValue = getOutsidePressEventProp(); 3785 const resolved = typeof outsidePressEventValue === "function" ? outsidePressEventValue() : outsidePressEventValue; 3786 if (typeof resolved === "string") { 3787 return resolved; 3788 } 3789 return resolved[computedType]; 3790 } 3791 function shouldIgnoreEvent(event) { 3792 const computedOutsidePressEvent = getOutsidePressEvent(); 3793 return computedOutsidePressEvent === "intentional" && event.type !== "click" || computedOutsidePressEvent === "sloppy" && event.type === "click"; 3794 } 3795 function isEventWithinFloatingTree(event) { 3796 const nodeId = dataRef.current.floatingContext?.nodeId; 3797 const targetIsInsideChildren = tree && getNodeChildren(tree.nodesRef.current, nodeId).some((node) => isEventTargetWithin(event, node.context?.elements.floating)); 3798 return isEventWithinOwnElements(event) || targetIsInsideChildren; 3799 } 3800 function closeOnPressOutside(event) { 3801 if (shouldIgnoreEvent(event)) { 3802 if (event.type !== "click" && !isEventWithinOwnElements(event)) { 3803 preventedPressSuppressionTimeout.clear(); 3804 suppressNextOutsideClickRef.current = false; 3805 } 3806 clearInsideReactTree(); 3807 return; 3808 } 3809 if (dataRef.current.insideReactTree) { 3810 clearInsideReactTree(); 3811 return; 3812 } 3813 const target = getTarget(event); 3814 const inertSelector = `[$createAttribute("inert")}]`; 3815 const targetRoot = isElement(target) ? target.getRootNode() : null; 3816 const markers = Array.from((isShadowRoot(targetRoot) ? targetRoot : ownerDocument(store2.select("floatingElement"))).querySelectorAll(inertSelector)); 3817 const triggers = store2.context.triggerElements; 3818 if (target && (triggers.hasElement(target) || triggers.hasMatchingElement((trigger) => contains(trigger, target)))) { 3819 return; 3820 } 3821 let targetRootAncestor = isElement(target) ? target : null; 3822 while (targetRootAncestor && !isLastTraversableNode(targetRootAncestor)) { 3823 const nextParent = getParentNode(targetRootAncestor); 3824 if (isLastTraversableNode(nextParent) || !isElement(nextParent)) { 3825 break; 3826 } 3827 targetRootAncestor = nextParent; 3828 } 3829 if (markers.length && isElement(target) && !isRootElement(target) && // Clicked on a direct ancestor (e.g. FloatingOverlay). 3830 !contains(target, store2.select("floatingElement")) && // If the target root element contains none of the markers, then the 3831 // element was injected after the floating element rendered. 3832 markers.every((marker) => !contains(targetRootAncestor, marker))) { 3833 return; 3834 } 3835 if (isHTMLElement(target) && !("touches" in event)) { 3836 const lastTraversableNode = isLastTraversableNode(target); 3837 const style = getComputedStyle2(target); 3838 const scrollRe = /auto|scroll/; 3839 const isScrollableX = lastTraversableNode || scrollRe.test(style.overflowX); 3840 const isScrollableY = lastTraversableNode || scrollRe.test(style.overflowY); 3841 const canScrollX = isScrollableX && target.clientWidth > 0 && target.scrollWidth > target.clientWidth; 3842 const canScrollY = isScrollableY && target.clientHeight > 0 && target.scrollHeight > target.clientHeight; 3843 const isRTL3 = style.direction === "rtl"; 3844 const pressedVerticalScrollbar = canScrollY && (isRTL3 ? event.offsetX <= target.offsetWidth - target.clientWidth : event.offsetX > target.clientWidth); 3845 const pressedHorizontalScrollbar = canScrollX && event.offsetY > target.clientHeight; 3846 if (pressedVerticalScrollbar || pressedHorizontalScrollbar) { 3847 return; 3848 } 3849 } 3850 if (isEventWithinFloatingTree(event)) { 3851 return; 3852 } 3853 if (getOutsidePressEvent() === "intentional") { 3854 if (event.detail !== 0 && !isVirtualClick(event) && !sawPressWhileOpenRef.current) { 3855 return; 3856 } 3857 if (suppressNextOutsideClickRef.current) { 3858 preventedPressSuppressionTimeout.clear(); 3859 suppressNextOutsideClickRef.current = false; 3860 return; 3861 } 3862 } 3863 if (typeof outsidePress2 === "function" && !outsidePress2(event)) { 3864 return; 3865 } 3866 if (hasBlockingChild("__outsidePressBubbles")) { 3867 return; 3868 } 3869 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.outsidePress, event)); 3870 clearInsideReactTree(); 3871 } 3872 function handlePointerDown(event) { 3873 if (getOutsidePressEvent() !== "sloppy" || event.pointerType === "touch" || !store2.select("open") || !enabled || isEventWithinOwnElements(event)) { 3874 return; 3875 } 3876 closeOnPressOutside(event); 3877 } 3878 function handleTouchStart(event) { 3879 if (getOutsidePressEvent() !== "sloppy" || !store2.select("open") || !enabled || isEventWithinOwnElements(event)) { 3880 return; 3881 } 3882 const touch = event.touches[0]; 3883 if (touch) { 3884 touchStateRef.current = { 3885 startTime: Date.now(), 3886 startX: touch.clientX, 3887 startY: touch.clientY, 3888 dismissOnTouchEnd: false, 3889 dismissOnMouseDown: true 3890 }; 3891 cancelDismissOnEndTimeout.start(1e3, () => { 3892 if (touchStateRef.current) { 3893 touchStateRef.current.dismissOnTouchEnd = false; 3894 touchStateRef.current.dismissOnMouseDown = false; 3895 } 3896 }); 3897 } 3898 } 3899 function addTargetEventListenerOnce(event, listener) { 3900 const target = getTarget(event); 3901 if (!target) { 3902 return; 3903 } 3904 const unsubscribe2 = addEventListener(target, event.type, () => { 3905 listener(event); 3906 unsubscribe2(); 3907 }); 3908 } 3909 function handleTouchStartCapture(event) { 3910 currentPointerTypeRef.current = "touch"; 3911 addTargetEventListenerOnce(event, handleTouchStart); 3912 } 3913 function closeOnPressOutsideCapture(event) { 3914 cancelDismissOnEndTimeout.clear(); 3915 if (event.type === "pointerdown") { 3916 if (event.button === 0) { 3917 sawPressWhileOpenRef.current = true; 3918 } 3919 currentPointerTypeRef.current = event.pointerType; 3920 } 3921 if (event.type === "mousedown" && touchStateRef.current && !touchStateRef.current.dismissOnMouseDown) { 3922 return; 3923 } 3924 addTargetEventListenerOnce(event, (targetEvent) => { 3925 if (targetEvent.type === "pointerdown") { 3926 handlePointerDown(targetEvent); 3927 } else { 3928 closeOnPressOutside(targetEvent); 3929 } 3930 }); 3931 } 3932 function handlePressEndCapture(event) { 3933 if (event.type === "pointercancel") { 3934 sawPressWhileOpenRef.current = false; 3935 } 3936 if (!pressStartedInsideRef.current) { 3937 return; 3938 } 3939 const pressStartedInsideDefaultPrevented = pressStartPreventedRef.current; 3940 resetPressStartState(); 3941 if (getOutsidePressEvent() !== "intentional") { 3942 return; 3943 } 3944 if (event.type === "pointercancel") { 3945 if (pressStartedInsideDefaultPrevented) { 3946 suppressImmediateOutsideClickAfterPreventedStart(); 3947 } 3948 return; 3949 } 3950 if (isEventWithinFloatingTree(event)) { 3951 return; 3952 } 3953 if (pressStartedInsideDefaultPrevented) { 3954 suppressImmediateOutsideClickAfterPreventedStart(); 3955 return; 3956 } 3957 if (typeof outsidePress2 === "function" && !outsidePress2(event)) { 3958 return; 3959 } 3960 preventedPressSuppressionTimeout.clear(); 3961 suppressNextOutsideClickRef.current = true; 3962 clearInsideReactTree(); 3963 } 3964 function handleTouchMove(event) { 3965 if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) { 3966 return; 3967 } 3968 const touch = event.touches[0]; 3969 if (!touch) { 3970 return; 3971 } 3972 const deltaX = Math.abs(touch.clientX - touchStateRef.current.startX); 3973 const deltaY = Math.abs(touch.clientY - touchStateRef.current.startY); 3974 const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY); 3975 if (distance > 5) { 3976 touchStateRef.current.dismissOnTouchEnd = true; 3977 } 3978 if (distance > 10) { 3979 closeOnPressOutside(event); 3980 cancelDismissOnEndTimeout.clear(); 3981 touchStateRef.current = null; 3982 } 3983 } 3984 function handleTouchMoveCapture(event) { 3985 addTargetEventListenerOnce(event, handleTouchMove); 3986 } 3987 function handleTouchEnd(event) { 3988 if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) { 3989 return; 3990 } 3991 if (touchStateRef.current.dismissOnTouchEnd) { 3992 closeOnPressOutside(event); 3993 } 3994 cancelDismissOnEndTimeout.clear(); 3995 touchStateRef.current = null; 3996 } 3997 function handleTouchEndCapture(event) { 3998 addTargetEventListenerOnce(event, handleTouchEnd); 3999 } 4000 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, { 4001 capture: true, 4002 passive: true 4003 }), addEventListener(doc, "touchmove", handleTouchMoveCapture, { 4004 capture: true, 4005 passive: true 4006 }), addEventListener(doc, "touchend", handleTouchEndCapture, { 4007 capture: true, 4008 passive: true 4009 }))); 4010 return () => { 4011 unsubscribe(); 4012 preventedPressSuppressionTimeout.clear(); 4013 resetPressStartState(); 4014 suppressNextOutsideClickRef.current = false; 4015 }; 4016 }, [dataRef, floatingElement, escapeKey2, outsidePressEnabled, outsidePress2, open2, enabled, escapeKeyBubbles, outsidePressBubbles, closeOnEscapeKeyDown, clearInsideReactTree, getOutsidePressEventProp, hasBlockingChild, isEventWithinOwnElements, tree, store2, cancelDismissOnEndTimeout, compositionTimeout]); 4017 const reference = React20.useMemo(() => ({ 4018 onKeyDown: closeOnEscapeKeyDown, 4019 onPointerDown: closeOnReferencePress, 4020 onClick: closeOnReferencePress 4021 }), [closeOnEscapeKeyDown, closeOnReferencePress]); 4022 const floating = React20.useMemo(() => ({ 4023 onKeyDown: closeOnEscapeKeyDown, 4024 // `onMouseDown` may be blocked if `event.preventDefault()` is called in 4025 // `onPointerDown`, such as with <NumberField.ScrubArea>. 4026 // See https://github.com/mui/base-ui/pull/3379 4027 onPointerDown: markInsidePressStartPrevented, 4028 onMouseDown: markInsidePressStartPrevented, 4029 onClickCapture: markInsideReactTree, 4030 onMouseDownCapture(event) { 4031 markInsideReactTree(); 4032 markPressStartedInsideReactTree(event); 4033 }, 4034 onPointerDownCapture(event) { 4035 markInsideReactTree(); 4036 markPressStartedInsideReactTree(event); 4037 }, 4038 onMouseUpCapture: markInsideReactTree, 4039 onTouchEndCapture: markInsideReactTree, 4040 onTouchMoveCapture: markInsideReactTree 4041 }), [closeOnEscapeKeyDown, markInsideReactTree, markPressStartedInsideReactTree, markInsidePressStartPrevented]); 4042 return React20.useMemo(() => enabled ? { 4043 reference, 4044 floating, 4045 trigger: reference 4046 } : {}, [enabled, reference, floating]); 4047 } 4048 4049 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/popups/popupHandle.mjs 4050 var BasePopupHandle = class { 4051 /** 4052 * Stores of every root currently using this handle, in attach order. A handle is meant to be used 4053 * by a single mounted root, but roots can transiently overlap (e.g. during an animated route 4054 * transition), so this stack lets `attachStore`'s cleanup restore the previous root instead of 4055 * leaving a still-mounted root uncontrollable when a newer overlapping root detaches first. 4056 */ 4057 attachedStores = []; 4058 /** 4059 * Store of the root that currently controls the handle: the most recently attached one still 4060 * mounted, or `null` when no root is attached. Imperative methods are no-ops while this is `null`. 4061 */ 4062 attachedStoreValue = null; 4063 /** 4064 * Listeners notified when `attachedStore` changes, so detached triggers can follow the store pointer. 4065 */ 4066 storeListeners = /* @__PURE__ */ new Set(); 4067 /** 4068 * Creates a handle backed by the store used while no root is attached. 4069 * 4070 * @param fallbackStore Inert, closed store handed to detached triggers while no root is attached, 4071 * so they can render and register without a mounted root. Triggers register into whichever store 4072 * `store` currently resolves to, so while detached they live in this store's trigger map and 4073 * migrate themselves to the root's store (and back) as it attaches/detaches. 4074 * @param componentName Component name used to prefix dev warnings, e.g. `'Menu'` produces 4075 * `MenuHandle.open()` in warning text. 4076 * @param throwOnMissingTrigger Whether `open(triggerId)` throws when no trigger with that id is 4077 * registered. Anchored popups (Menu, Popover, Tooltip, PreviewCard) need a trigger to anchor to, 4078 * so they throw; Dialog is not anchored and instead opens unassociated with a dev warning. 4079 */ 4080 constructor(fallbackStore, componentName, throwOnMissingTrigger = true) { 4081 this.fallbackStore = fallbackStore; 4082 this.componentName = componentName; 4083 this.throwOnMissingTrigger = throwOnMissingTrigger; 4084 } 4085 get attachedStore() { 4086 return this.attachedStoreValue; 4087 } 4088 /** 4089 * Store that detached triggers read from: the attached root's store, or an inert fallback store 4090 * used while no root is attached. 4091 * @internal 4092 */ 4093 get store() { 4094 return this.attachedStoreValue ?? this.fallbackStore; 4095 } 4096 /** 4097 * Stable fallback store used for server rendering and hydration. Root stores cannot be recorded on 4098 * the handle during render because a handle can be shared by concurrent server-rendered requests. 4099 * @internal 4100 */ 4101 get serverStore() { 4102 return this.fallbackStore; 4103 } 4104 /** 4105 * Subscribes to changes of the attached store pointer so detached triggers re-render and re-bind 4106 * when a root attaches or detaches. Returns a function that removes the listener. 4107 * @internal 4108 */ 4109 subscribeStore(listener) { 4110 this.storeListeners.add(listener); 4111 return () => { 4112 this.storeListeners.delete(listener); 4113 }; 4114 } 4115 /** 4116 * Points the handle at a root's store and notifies subscribers so detached triggers re-render and 4117 * re-register into it (their registration effect migrates them when the store pointer changes). 4118 * Returns a cleanup function that detaches the store again. 4119 * @internal 4120 */ 4121 attachStore(newStore) { 4122 this.attachedStores.push(newStore); 4123 this.setActiveStore(newStore); 4124 if (true) { 4125 if (this.attachedStores.length > 1) { 4126 const dev = this; 4127 (dev.overlapWarningFrame ??= AnimationFrame.create()).request(() => { 4128 if (this.attachedStores.length > 1) { 4129 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."); 4130 } 4131 }); 4132 } 4133 } 4134 return () => { 4135 const index2 = this.attachedStores.lastIndexOf(newStore); 4136 if (index2 !== -1) { 4137 this.attachedStores.splice(index2, 1); 4138 } 4139 this.setActiveStore(this.attachedStores[this.attachedStores.length - 1] ?? null); 4140 }; 4141 } 4142 /** 4143 * Sets the store that currently controls the handle and notifies subscribers when it changes, so 4144 * detached triggers re-render and migrate their registration to the new store. 4145 */ 4146 setActiveStore(store2) { 4147 if (this.attachedStoreValue !== store2) { 4148 this.attachedStoreValue = store2; 4149 this.storeListeners.forEach((listener) => { 4150 listener(); 4151 }); 4152 } 4153 } 4154 /** 4155 * Opens the attached root's store and associates it with the trigger with the given id, or a 4156 * no-op (with a dev warning) while no root is attached. Shared by every concrete handle's public 4157 * `open()` method, which only narrows the parameter type. 4158 * 4159 * When a trigger id is given but no matching trigger is registered, anchored popups throw (see 4160 * `throwOnMissingTrigger`); Dialog opens unassociated with a dev warning instead. 4161 * 4162 * This method should only be called in an event handler or an effect (not during rendering). 4163 * 4164 * @param triggerId ID of the trigger to associate with the popup, or `null`/`undefined` to open 4165 * without associating any trigger. 4166 */ 4167 openByTrigger(triggerId) { 4168 const attachedStore = this.attachedStore; 4169 if (attachedStore === null) { 4170 if (true) { 4171 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.`); 4172 } 4173 return; 4174 } 4175 let triggerElement; 4176 if (triggerId) { 4177 for (let i = this.attachedStores.length - 1; i >= 0 && !triggerElement; i -= 1) { 4178 triggerElement = this.attachedStores[i].context.triggerElements.getById(triggerId); 4179 } 4180 triggerElement ??= this.fallbackStore.context.triggerElements.getById(triggerId); 4181 } 4182 if (triggerId && !triggerElement) { 4183 if (this.throwOnMissingTrigger) { 4184 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)); 4185 } 4186 if (true) { 4187 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.`); 4188 } 4189 } 4190 attachedStore.setOpen(true, createChangeEventDetails(reason_parts_exports.imperativeAction, void 0, triggerElement)); 4191 } 4192 /** 4193 * Closes the popup by setting the attached root's store to closed, or a no-op (with a dev warning) 4194 * while no root is attached. Shared by every concrete handle's public `close()` method. 4195 * 4196 * This method should only be called in an event handler or an effect (not during rendering). 4197 */ 4198 closePopup() { 4199 const attachedStore = this.attachedStore; 4200 if (attachedStore === null) { 4201 if (true) { 4202 console.warn(`Base UI: $this.componentName}Handle.close() was called while no root using this handle is mounted. The call was ignored.`); 4203 } 4204 return; 4205 } 4206 attachedStore.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction)); 4207 } 4208 }; 4209 4210 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/popups/popupStoreUtils.mjs 4211 var React22 = __toESM(require_react(), 1); 4212 var ReactDOM3 = __toESM(require_react_dom(), 1); 4213 4214 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/hooks/useSyncedFloatingRootContext.mjs 4215 function useSyncedFloatingRootContext(options) { 4216 const { 4217 popupStore, 4218 treatPopupAsFloatingElement = false, 4219 floatingRootContext: store2, 4220 floatingId, 4221 nested, 4222 onOpenChange 4223 } = options; 4224 const open2 = popupStore.useState("open"); 4225 const referenceElement = popupStore.useState("activeTriggerElement"); 4226 const floatingElement = popupStore.useState(treatPopupAsFloatingElement ? "popupElement" : "positionerElement"); 4227 const handleOpenChange = onOpenChange; 4228 popupStore.useSyncedValue("floatingId", floatingId); 4229 useIsoLayoutEffect(() => { 4230 const valuesToSync = { 4231 open: open2, 4232 floatingId, 4233 referenceElement, 4234 floatingElement 4235 }; 4236 if (isElement(referenceElement)) { 4237 valuesToSync.domReferenceElement = referenceElement; 4238 } 4239 if (store2.state.positionReference === store2.state.referenceElement) { 4240 valuesToSync.positionReference = referenceElement; 4241 } 4242 store2.update(valuesToSync); 4243 }, [open2, floatingId, referenceElement, floatingElement, store2]); 4244 store2.context.onOpenChange = handleOpenChange; 4245 store2.context.nested = nested; 4246 return store2; 4247 } 4248 4249 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/useUnmountAfterClose.mjs 4250 var React21 = __toESM(require_react(), 1); 4251 function useUnmountAfterClose(parameters) { 4252 const { 4253 open: open2, 4254 ref, 4255 preventUnmountOnClose, 4256 setPreventUnmountOnClose: setPreventUnmountOnCloseParam, 4257 onUnmount, 4258 animateInitialOpen 4259 } = parameters; 4260 const setPreventUnmountOnClose = useStableCallback(setPreventUnmountOnCloseParam); 4261 const { 4262 mounted, 4263 setMounted, 4264 transitionStatus 4265 } = useTransitionStatus(open2, false, false, animateInitialOpen); 4266 const preventUnmountingOnClose = open2 ? false : preventUnmountOnClose; 4267 useIsoLayoutEffect(() => { 4268 if (open2) { 4269 setPreventUnmountOnClose(false); 4270 } 4271 }, [open2, setPreventUnmountOnClose]); 4272 const mountedRef = React21.useRef(mounted); 4273 const pendingUnmountRef = React21.useRef(false); 4274 const rerender = useForcedRerendering(); 4275 const unmount = () => { 4276 mountedRef.current = false; 4277 setMounted(false); 4278 onUnmount(); 4279 }; 4280 useIsoLayoutEffect(() => { 4281 mountedRef.current = mounted; 4282 if (pendingUnmountRef.current) { 4283 pendingUnmountRef.current = false; 4284 if (!open2 && mounted) { 4285 unmount(); 4286 } 4287 } 4288 }); 4289 const forceUnmount = useStableCallback(() => { 4290 if (!mountedRef.current) { 4291 return; 4292 } 4293 if (open2) { 4294 pendingUnmountRef.current = true; 4295 rerender(); 4296 return; 4297 } 4298 unmount(); 4299 }); 4300 useOpenChangeComplete({ 4301 enabled: mounted && !open2 && !preventUnmountingOnClose, 4302 open: open2, 4303 ref, 4304 onComplete() { 4305 if (!open2) { 4306 forceUnmount(); 4307 } 4308 } 4309 }); 4310 return { 4311 mounted, 4312 transitionStatus, 4313 preventUnmountingOnClose, 4314 forceUnmount 4315 }; 4316 } 4317 4318 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/popups/popupStoreUtils.mjs 4319 var FOCUSABLE_POPUP_PROPS = { 4320 tabIndex: -1, 4321 [FOCUSABLE_ATTRIBUTE]: "" 4322 }; 4323 function usePopupRootStore(createStore, treatPopupAsFloatingElement = false) { 4324 const floatingId = useId(); 4325 const nested = useFloatingParentNodeId() != null; 4326 const store2 = useRefWithInit(() => createStore(floatingId, nested)).current; 4327 useSyncedFloatingRootContext({ 4328 popupStore: store2, 4329 treatPopupAsFloatingElement, 4330 floatingRootContext: store2.state.floatingRootContext, 4331 floatingId, 4332 nested, 4333 onOpenChange: store2.setOpen 4334 }); 4335 return store2; 4336 } 4337 function PopupHandleAttachment({ 4338 handle, 4339 store: store2 4340 }) { 4341 useIsoLayoutEffect(() => { 4342 return handle.attachStore(store2); 4343 }, [handle, store2]); 4344 return null; 4345 } 4346 function syncTriggerCount(store2) { 4347 const triggerCount = store2.context.triggerElements.size; 4348 if (store2.select("open") && store2.state.triggerCount !== triggerCount) { 4349 store2.set("triggerCount", triggerCount); 4350 } 4351 } 4352 function useTriggerRegistration(id, store2) { 4353 const registrationRef = React22.useRef(null); 4354 return useStableCallback((element) => { 4355 const registration = registrationRef.current; 4356 if (registration !== null) { 4357 if (registration.element === element && registration.store === store2 && registration.id === id) { 4358 return; 4359 } 4360 registrationRef.current = null; 4361 const registeredStore = registration.store; 4362 if (registeredStore.context.triggerElements.getById(registration.id) === registration.element) { 4363 registeredStore.context.triggerElements.delete(registration.id); 4364 syncTriggerCount(registeredStore); 4365 } 4366 } 4367 if (element !== null && id !== void 0) { 4368 registrationRef.current = { 4369 store: store2, 4370 id, 4371 element 4372 }; 4373 store2.context.triggerElements.add(id, element); 4374 syncTriggerCount(store2); 4375 } 4376 }); 4377 } 4378 function createPopupOpenState(state, open2, trigger, preventUnmountOnClose = false) { 4379 let preventUnmountingOnClose = state.preventUnmountingOnClose; 4380 if (open2) { 4381 preventUnmountingOnClose = false; 4382 } else if (preventUnmountOnClose) { 4383 preventUnmountingOnClose = true; 4384 } 4385 const triggerId = trigger?.id ?? null; 4386 let activeTriggerId = state.activeTriggerId; 4387 let activeTriggerElement = state.activeTriggerElement; 4388 if (triggerId || open2) { 4389 activeTriggerId = triggerId; 4390 activeTriggerElement = trigger ?? null; 4391 } 4392 return { 4393 open: open2, 4394 preventUnmountingOnClose, 4395 activeTriggerId, 4396 activeTriggerElement, 4397 // An open request without a trigger (a handle's `open(null)` or `openWithPayload()`) must not 4398 // be reassociated with a lone registered trigger later on. Controlled and default opens never 4399 // pass through here, so they keep claiming a lone trigger. A close request keeps the flag: a 4400 // controlled root may decline it and stay open, so the Root clears the flag only once the 4401 // popup is effectively closed. 4402 openedWithoutTrigger: open2 ? trigger == null : state.openedWithoutTrigger 4403 }; 4404 } 4405 function attachPreventUnmountOnClose(eventDetails) { 4406 let preventUnmountOnClose = false; 4407 eventDetails.preventUnmountOnClose = () => { 4408 preventUnmountOnClose = true; 4409 }; 4410 return () => preventUnmountOnClose; 4411 } 4412 function applyPopupOpenChange(store2, nextOpen, eventDetails, options = {}) { 4413 const reason = eventDetails.reason; 4414 const isHover = reason === reason_parts_exports.triggerHover; 4415 const isFocusOpen = nextOpen && reason === reason_parts_exports.triggerFocus; 4416 const isDismissClose = !nextOpen && (reason === reason_parts_exports.triggerPress || reason === reason_parts_exports.escapeKey); 4417 const shouldPreventUnmountOnClose = attachPreventUnmountOnClose(eventDetails); 4418 store2.context.onOpenChange?.(nextOpen, eventDetails); 4419 if (eventDetails.isCanceled) { 4420 return; 4421 } 4422 options.onBeforeDispatch?.(); 4423 store2.state.floatingRootContext.dispatchOpenChange(nextOpen, eventDetails); 4424 const changeState = () => { 4425 const popupOpenState = createPopupOpenState(store2.state, nextOpen, eventDetails.trigger, shouldPreventUnmountOnClose()); 4426 const updatedState = { 4427 ...options.extraState, 4428 ...popupOpenState 4429 }; 4430 if (isFocusOpen) { 4431 updatedState.instantType = "focus"; 4432 } else if (isDismissClose) { 4433 updatedState.instantType = "dismiss"; 4434 } else if (isHover) { 4435 updatedState.instantType = void 0; 4436 } 4437 store2.update(updatedState); 4438 }; 4439 if (isHover) { 4440 ReactDOM3.flushSync(changeState); 4441 } else { 4442 changeState(); 4443 } 4444 } 4445 function useTriggerDataForwarding(triggerId, triggerElementRef, store2, stateUpdates) { 4446 const isMountedByThisTrigger = store2.useState("isMountedByTrigger", triggerId); 4447 const baseRegisterTrigger = useTriggerRegistration(triggerId, store2); 4448 const applyTriggerData = useStableCallback((element) => { 4449 const open2 = store2.select("open"); 4450 const activeTriggerId = store2.select("activeTriggerId"); 4451 if (activeTriggerId === triggerId) { 4452 const changes = { 4453 activeTriggerElement: element, 4454 ...open2 ? stateUpdates : null 4455 }; 4456 store2.update(changes); 4457 return; 4458 } 4459 if (activeTriggerId == null && open2 && !store2.state.openedWithoutTrigger) { 4460 const changes = { 4461 activeTriggerId: triggerId ?? null, 4462 activeTriggerElement: element, 4463 ...stateUpdates 4464 }; 4465 store2.update(changes); 4466 } 4467 }); 4468 const registerTrigger = useStableCallback((element) => { 4469 baseRegisterTrigger(element); 4470 if (element) { 4471 applyTriggerData(element); 4472 } 4473 }); 4474 useIsoLayoutEffect(() => { 4475 registerTrigger(triggerElementRef.current); 4476 return () => registerTrigger(null); 4477 }, [registerTrigger, triggerElementRef, store2, triggerId]); 4478 useIsoLayoutEffect(() => { 4479 if (isMountedByThisTrigger) { 4480 const changes = { 4481 activeTriggerElement: triggerElementRef.current, 4482 ...stateUpdates 4483 }; 4484 store2.update(changes); 4485 } 4486 }, [isMountedByThisTrigger, store2, triggerElementRef, ...Object.values(stateUpdates)]); 4487 return { 4488 registerTrigger, 4489 isMountedByThisTrigger 4490 }; 4491 } 4492 function useImplicitActiveTrigger(store2, options = {}) { 4493 const { 4494 closeOnActiveTriggerUnmount = false 4495 } = options; 4496 const resolvedActiveTriggerIdRef = React22.useRef(null); 4497 const open2 = store2.useState("open"); 4498 const reactiveTriggerCount = store2.useState("triggerCount"); 4499 const activeTriggerId = store2.useState("activeTriggerId"); 4500 const reactiveActiveTriggerElement = store2.useState("activeTriggerElement"); 4501 useIsoLayoutEffect(() => { 4502 if (!open2) { 4503 resolvedActiveTriggerIdRef.current = null; 4504 if (store2.state.triggerCount !== 0) { 4505 store2.set("triggerCount", 0); 4506 } 4507 if (store2.state.openedWithoutTrigger) { 4508 store2.set("openedWithoutTrigger", false); 4509 } 4510 return; 4511 } 4512 const triggerCount = store2.context.triggerElements.size; 4513 const stateUpdates = {}; 4514 if (store2.state.triggerCount !== triggerCount) { 4515 stateUpdates.triggerCount = triggerCount; 4516 } 4517 const currentActiveTriggerId = store2.select("activeTriggerId"); 4518 let lostActiveTriggerId = null; 4519 if (currentActiveTriggerId) { 4520 const activeTriggerElement = store2.context.triggerElements.getById(currentActiveTriggerId); 4521 if (!activeTriggerElement) { 4522 for (const [triggerId, triggerElement] of store2.context.triggerElements.entries()) { 4523 if (triggerElement === store2.state.activeTriggerElement) { 4524 stateUpdates.activeTriggerId = triggerId; 4525 stateUpdates.activeTriggerElement = triggerElement; 4526 resolvedActiveTriggerIdRef.current = triggerId; 4527 break; 4528 } 4529 } 4530 if (stateUpdates.activeTriggerId === void 0) { 4531 if (resolvedActiveTriggerIdRef.current === currentActiveTriggerId) { 4532 lostActiveTriggerId = currentActiveTriggerId; 4533 } else { 4534 resolvedActiveTriggerIdRef.current = null; 4535 } 4536 } 4537 } else { 4538 resolvedActiveTriggerIdRef.current = currentActiveTriggerId; 4539 if (activeTriggerElement !== store2.state.activeTriggerElement) { 4540 stateUpdates.activeTriggerElement = activeTriggerElement; 4541 } 4542 } 4543 } else { 4544 resolvedActiveTriggerIdRef.current = null; 4545 } 4546 if (!lostActiveTriggerId && !currentActiveTriggerId && !store2.state.openedWithoutTrigger && triggerCount === 1) { 4547 const iteratorResult = store2.context.triggerElements.entries().next(); 4548 if (!iteratorResult.done) { 4549 const [implicitTriggerId, implicitTriggerElement] = iteratorResult.value; 4550 stateUpdates.activeTriggerId = implicitTriggerId; 4551 stateUpdates.activeTriggerElement = implicitTriggerElement; 4552 resolvedActiveTriggerIdRef.current = implicitTriggerId; 4553 } 4554 } 4555 if (stateUpdates.triggerCount !== void 0 || stateUpdates.activeTriggerId !== void 0 || stateUpdates.activeTriggerElement !== void 0) { 4556 store2.update(stateUpdates); 4557 } 4558 if (lostActiveTriggerId) { 4559 if (closeOnActiveTriggerUnmount) { 4560 queueMicrotask(() => { 4561 if (store2.select("open") && store2.select("activeTriggerId") === lostActiveTriggerId && !store2.context.triggerElements.getById(lostActiveTriggerId)) { 4562 const eventDetails = createChangeEventDetails(reason_parts_exports.none); 4563 store2.setOpen(false, eventDetails); 4564 if (!eventDetails.isCanceled) { 4565 store2.update({ 4566 activeTriggerId: null, 4567 activeTriggerElement: null 4568 }); 4569 } 4570 } 4571 }); 4572 } 4573 } 4574 }, [open2, store2, reactiveTriggerCount, activeTriggerId, reactiveActiveTriggerElement, closeOnActiveTriggerUnmount]); 4575 } 4576 function useOpenStateTransitions(open2, store2, onUnmount, animateInitialOpen) { 4577 const { 4578 mounted, 4579 transitionStatus, 4580 forceUnmount 4581 } = useUnmountAfterClose({ 4582 open: open2, 4583 ref: store2.context.popupRef, 4584 preventUnmountOnClose: store2.useState("preventUnmountingOnClose"), 4585 setPreventUnmountOnClose: (preventUnmountOnClose) => store2.set("preventUnmountingOnClose", preventUnmountOnClose), 4586 animateInitialOpen, 4587 onUnmount() { 4588 store2.update({ 4589 activeTriggerId: null, 4590 activeTriggerElement: null, 4591 mounted: false, 4592 preventUnmountingOnClose: false 4593 }); 4594 onUnmount?.(); 4595 store2.context.onOpenChangeComplete?.(false); 4596 } 4597 }); 4598 useRefWithInit(() => { 4599 store2.set("mounted", mounted); 4600 return null; 4601 }); 4602 store2.useSyncedValues({ 4603 mounted, 4604 transitionStatus 4605 }); 4606 return { 4607 forceUnmount, 4608 transitionStatus 4609 }; 4610 } 4611 function usePopupInteractionProps(store2, statePart) { 4612 store2.useSyncedValues(statePart); 4613 useIsoLayoutEffect(() => () => { 4614 store2.update({ 4615 activeTriggerProps: EMPTY_OBJECT, 4616 inactiveTriggerProps: EMPTY_OBJECT, 4617 popupProps: EMPTY_OBJECT 4618 }); 4619 }, [store2]); 4620 } 4621 4622 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/popups/popupTriggerMap.mjs 4623 var devElementIdsByMap; 4624 function getDevElementIds(map) { 4625 devElementIdsByMap ??= /* @__PURE__ */ new WeakMap(); 4626 let elementIds = devElementIdsByMap.get(map); 4627 if (!elementIds) { 4628 elementIds = /* @__PURE__ */ new WeakMap(); 4629 devElementIdsByMap.set(map, elementIds); 4630 } 4631 return elementIds; 4632 } 4633 var PopupTriggerMap = class { 4634 idMap = /* @__PURE__ */ new Map(); 4635 /** 4636 * Adds a trigger element with the given ID. 4637 * 4638 * Note: The provided element is assumed to not be registered under multiple IDs. 4639 */ 4640 add(id, element) { 4641 if (true) { 4642 const elementIds = getDevElementIds(this); 4643 const existingId = elementIds.get(element); 4644 if (existingId !== void 0 && existingId !== id) { 4645 throw new Error("Base UI: A trigger element cannot be registered under multiple IDs in PopupTriggerMap."); 4646 } 4647 const previousElement = this.idMap.get(id); 4648 if (previousElement !== void 0 && previousElement !== element) { 4649 elementIds.delete(previousElement); 4650 } 4651 elementIds.set(element, id); 4652 } 4653 this.idMap.set(id, element); 4654 } 4655 /** 4656 * Removes the trigger element with the given ID. 4657 */ 4658 delete(id) { 4659 if (true) { 4660 const element = this.idMap.get(id); 4661 if (element !== void 0) { 4662 devElementIdsByMap?.get(this)?.delete(element); 4663 } 4664 } 4665 this.idMap.delete(id); 4666 } 4667 /** 4668 * Whether the given element is registered as a trigger. 4669 */ 4670 hasElement(element) { 4671 for (const registered of this.idMap.values()) { 4672 if (registered === element) { 4673 return true; 4674 } 4675 } 4676 return false; 4677 } 4678 /** 4679 * Whether there is a registered trigger element matching the given predicate. 4680 */ 4681 hasMatchingElement(predicate) { 4682 for (const element of this.idMap.values()) { 4683 if (predicate(element)) { 4684 return true; 4685 } 4686 } 4687 return false; 4688 } 4689 /** 4690 * Returns the trigger element associated with the given ID, or undefined if no such element exists. 4691 */ 4692 getById(id) { 4693 return this.idMap.get(id); 4694 } 4695 /** 4696 * Returns an iterable of all registered trigger entries, where each entry is a tuple of [id, element]. 4697 */ 4698 entries() { 4699 return this.idMap.entries(); 4700 } 4701 /** 4702 * Returns an iterable of all registered trigger elements. 4703 */ 4704 elements() { 4705 return this.idMap.values(); 4706 } 4707 /** 4708 * Returns the number of registered trigger elements. 4709 */ 4710 get size() { 4711 return this.idMap.size; 4712 } 4713 }; 4714 4715 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/store/useStore.mjs 4716 var React24 = __toESM(require_react(), 1); 4717 var import_shim = __toESM(require_shim(), 1); 4718 var import_with_selector = __toESM(require_with_selector(), 1); 4719 4720 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/fastHooks.mjs 4721 var React23 = __toESM(require_react(), 1); 4722 var hooks = []; 4723 var currentInstance = void 0; 4724 function getInstance() { 4725 return currentInstance; 4726 } 4727 function register2(hook) { 4728 hooks.push(hook); 4729 } 4730 function fastComponent(fn) { 4731 const FastComponent = (props, forwardedRef) => { 4732 const instance = useRefWithInit(createInstance).current; 4733 let result; 4734 try { 4735 currentInstance = instance; 4736 for (const hook of hooks) { 4737 hook.before(instance); 4738 } 4739 result = fn(props, forwardedRef); 4740 for (const hook of hooks) { 4741 hook.after(instance); 4742 } 4743 instance.didInitialize = true; 4744 } finally { 4745 currentInstance = void 0; 4746 } 4747 return result; 4748 }; 4749 FastComponent.displayName = fn.displayName || fn.name; 4750 return FastComponent; 4751 } 4752 function fastComponentRef(fn) { 4753 return /* @__PURE__ */ React23.forwardRef(fastComponent(fn)); 4754 } 4755 function createInstance() { 4756 return { 4757 didInitialize: false 4758 }; 4759 } 4760 4761 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/store/useStore.mjs 4762 var canUseRawUseSyncExternalStore = isReactVersionAtLeast(19); 4763 var useStoreImplementation = canUseRawUseSyncExternalStore ? useStoreFast : useStoreLegacy; 4764 function useStore(store2, selector, a1, a2, a3) { 4765 return useStoreImplementation(store2, selector, a1, a2, a3); 4766 } 4767 function useStoreR19(store2, selector, a1, a2, a3) { 4768 const getSelection = React24.useCallback(() => selector(store2.getSnapshot(), a1, a2, a3), [store2, selector, a1, a2, a3]); 4769 return (0, import_shim.useSyncExternalStore)(store2.subscribe, getSelection, getSelection); 4770 } 4771 register2({ 4772 before(instance) { 4773 instance.syncIndex = 0; 4774 if (!instance.didInitialize) { 4775 instance.syncTick = 1; 4776 instance.syncHooks = []; 4777 instance.didChangeStore = true; 4778 instance.getSnapshot = () => { 4779 let didChange2 = false; 4780 for (let i = 0; i < instance.syncHooks.length; i += 1) { 4781 const hook = instance.syncHooks[i]; 4782 const value = hook.selector(hook.store.state, hook.a1, hook.a2, hook.a3); 4783 if (!Object.is(hook.value, value)) { 4784 didChange2 = true; 4785 hook.value = value; 4786 } 4787 } 4788 if (didChange2) { 4789 instance.syncTick += 1; 4790 } 4791 return instance.syncTick; 4792 }; 4793 } 4794 }, 4795 after(instance) { 4796 if (instance.syncHooks.length > 0) { 4797 if (instance.didChangeStore) { 4798 instance.didChangeStore = false; 4799 instance.subscribe = (onStoreChange) => { 4800 const stores = /* @__PURE__ */ new Set(); 4801 for (const hook of instance.syncHooks) { 4802 stores.add(hook.store); 4803 } 4804 const unsubscribes = []; 4805 for (const store2 of stores) { 4806 unsubscribes.push(store2.subscribe(onStoreChange)); 4807 } 4808 return () => { 4809 for (const unsubscribe of unsubscribes) { 4810 unsubscribe(); 4811 } 4812 }; 4813 }; 4814 } 4815 (0, import_shim.useSyncExternalStore)(instance.subscribe, instance.getSnapshot, instance.getSnapshot); 4816 } 4817 } 4818 }); 4819 function useStoreFast(store2, selector, a1, a2, a3) { 4820 const instance = getInstance(); 4821 if (!instance) { 4822 return useStoreR19(store2, selector, a1, a2, a3); 4823 } 4824 const index2 = instance.syncIndex; 4825 instance.syncIndex += 1; 4826 let hook; 4827 if (!instance.didInitialize) { 4828 hook = { 4829 store: store2, 4830 selector, 4831 a1, 4832 a2, 4833 a3, 4834 value: selector(store2.getSnapshot(), a1, a2, a3) 4835 }; 4836 instance.syncHooks.push(hook); 4837 } else { 4838 hook = instance.syncHooks[index2]; 4839 if (hook.store !== store2 || hook.selector !== selector || !Object.is(hook.a1, a1) || !Object.is(hook.a2, a2) || !Object.is(hook.a3, a3)) { 4840 if (hook.store !== store2) { 4841 instance.didChangeStore = true; 4842 } 4843 hook.store = store2; 4844 hook.selector = selector; 4845 hook.a1 = a1; 4846 hook.a2 = a2; 4847 hook.a3 = a3; 4848 hook.value = selector(store2.getSnapshot(), a1, a2, a3); 4849 } 4850 } 4851 return hook.value; 4852 } 4853 function useStoreLegacy(store2, selector, a1, a2, a3) { 4854 return (0, import_with_selector.useSyncExternalStoreWithSelector)(store2.subscribe, store2.getSnapshot, store2.getSnapshot, (state) => selector(state, a1, a2, a3)); 4855 } 4856 4857 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/store/Store.mjs 4858 var Store = class { 4859 /** 4860 * Creates a store with the given initial state, constructing the class it is called on. 4861 * Calling it on a generic base class (e.g. `ReactStore.create(...)`) constructs that 4862 * class but degrades the inferred instance type to `Store`; use `new` there instead. 4863 */ 4864 static create(state) { 4865 return new this(state); 4866 } 4867 /** 4868 * The current state of the store. 4869 * This property is updated immediately when the state changes as a result of calling {@link setState}, {@link update}, or {@link set}. 4870 * 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). 4871 * The values can be used directly (to avoid subscribing to the store) in effects or event handlers. 4872 * 4873 * Do not modify properties in state directly. Instead, use the provided methods to ensure proper state management and listener notification. 4874 */ 4875 // Internal state to handle recursive `setState()` calls 4876 constructor(state) { 4877 this.state = state; 4878 this.listeners = /* @__PURE__ */ new Set(); 4879 this.updateTick = 0; 4880 } 4881 /** 4882 * Registers a listener that will be called whenever the store's state changes. 4883 * 4884 * @param fn The listener function to be called on state changes. 4885 * @returns A function to unsubscribe the listener. 4886 */ 4887 subscribe = (fn) => { 4888 this.listeners.add(fn); 4889 return () => { 4890 this.listeners.delete(fn); 4891 }; 4892 }; 4893 /** 4894 * Returns the current state of the store. 4895 */ 4896 getSnapshot = () => { 4897 return this.state; 4898 }; 4899 /** 4900 * Updates the entire store's state and notifies all registered listeners. 4901 * 4902 * @param newState The new state to set for the store. 4903 */ 4904 setState(newState) { 4905 if (this.state === newState) { 4906 return; 4907 } 4908 this.state = newState; 4909 this.updateTick += 1; 4910 const currentTick = this.updateTick; 4911 for (const listener of this.listeners) { 4912 if (currentTick !== this.updateTick) { 4913 return; 4914 } 4915 listener(newState); 4916 } 4917 } 4918 /** 4919 * Merges the provided changes into the current state and notifies listeners if there are changes. 4920 * Each value must match its state key. Pass an exact known subset rather than a broad 4921 * `Partial<State>`, which may contain `undefined` for required state fields. 4922 * 4923 * @param changes An object containing the changes to apply to the current state. 4924 */ 4925 update(changes) { 4926 for (const key in changes) { 4927 if (!Object.is(this.state[key], changes[key])) { 4928 this.setState({ 4929 ...this.state, 4930 ...changes 4931 }); 4932 return; 4933 } 4934 } 4935 } 4936 /** 4937 * Sets a specific key in the store's state to a new value and notifies listeners if the value has changed. 4938 * 4939 * @param key The key in the store's state to update. 4940 * @param value The new value to set for the specified key. 4941 */ 4942 set(key, value) { 4943 if (!Object.is(this.state[key], value)) { 4944 this.setState({ 4945 ...this.state, 4946 [key]: value 4947 }); 4948 } 4949 } 4950 /** 4951 * Gives the state a new reference and updates all registered listeners. 4952 */ 4953 notifyAll() { 4954 const newState = { 4955 ...this.state 4956 }; 4957 this.setState(newState); 4958 } 4959 use(selector, a1, a2, a3) { 4960 return useStore(this, selector, a1, a2, a3); 4961 } 4962 }; 4963 4964 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/store/ReactStore.mjs 4965 var React25 = __toESM(require_react(), 1); 4966 var ReactStore = class extends Store { 4967 /** 4968 * Creates a new ReactStore instance. 4969 * 4970 * @param state Initial state of the store. 4971 * @param context Non-reactive context values. 4972 * @param selectors Optional selectors for use with `useState`. 4973 */ 4974 constructor(state, context = {}, selectors3) { 4975 super(state); 4976 this.context = context; 4977 this.selectors = selectors3; 4978 } 4979 /** 4980 * Non-reactive values such as refs, callbacks, etc. 4981 */ 4982 /** 4983 * Synchronizes a single external value into the store. 4984 * 4985 * Note that the while the value in `state` is updated immediately, the value returned 4986 * by `useState` is updated before the next render (similarly to React's `useState`). 4987 */ 4988 useSyncedValue(key, value) { 4989 React25.useDebugValue(key); 4990 const store2 = this; 4991 useIsoLayoutEffect(() => { 4992 if (store2.state[key] !== value) { 4993 store2.set(key, value); 4994 } 4995 }, [store2, key, value]); 4996 } 4997 /** 4998 * Synchronizes a single external value into the store and 4999 * cleans it up (sets to `undefined`) on unmount. 5000 * 5001 * Note that the while the value in `state` is updated immediately, the value returned 5002 * by `useState` is updated before the next render (similarly to React's `useState`). 5003 */ 5004 useSyncedValueWithCleanup(key, value) { 5005 const store2 = this; 5006 useIsoLayoutEffect(() => { 5007 if (store2.state[key] !== value) { 5008 store2.set(key, value); 5009 } 5010 return () => { 5011 store2.set(key, void 0); 5012 }; 5013 }, [store2, key, value]); 5014 } 5015 /** 5016 * Synchronizes multiple external values into the store. 5017 * Each value must match its state key. Pass an exact known subset rather than a broad 5018 * `Partial<State>`, which may contain `undefined` for required state fields. 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 * @param statePart An exact subset of state fields to synchronize. Unknown keys are not accepted. 5024 */ 5025 useSyncedValues(statePart) { 5026 const store2 = this; 5027 if (true) { 5028 React25.useDebugValue(statePart, (p) => Object.keys(p)); 5029 const keys = React25.useRef(Object.keys(statePart)).current; 5030 const nextKeys = Object.keys(statePart); 5031 if (keys.length !== nextKeys.length || keys.some((key, index2) => key !== nextKeys[index2])) { 5032 console.error("ReactStore.useSyncedValues expects the same prop keys on every render. Keys should be stable."); 5033 } 5034 } 5035 const dependencies = Object.values(statePart); 5036 useIsoLayoutEffect(() => { 5037 store2.update(statePart); 5038 }, [store2, ...dependencies]); 5039 } 5040 /** 5041 * Registers a controllable prop pair (`controlled`, `defaultValue`) for a specific key. If `controlled` 5042 * is non-undefined, the store's state at `key` is updated to match `controlled`. 5043 */ 5044 useControlledProp(key, controlled) { 5045 React25.useDebugValue(key); 5046 const store2 = this; 5047 const isControlled = controlled !== void 0; 5048 useIsoLayoutEffect(() => { 5049 if (isControlled && !Object.is(store2.state[key], controlled)) { 5050 store2.setState({ 5051 ...store2.state, 5052 [key]: controlled 5053 }); 5054 } 5055 }, [store2, key, controlled, isControlled]); 5056 if (true) { 5057 const cache = this.controlledValues ??= /* @__PURE__ */ new Map(); 5058 if (!cache.has(key)) { 5059 cache.set(key, isControlled); 5060 } 5061 const previouslyControlled = cache.get(key); 5062 if (previouslyControlled !== void 0 && previouslyControlled !== isControlled) { 5063 console.error(`A component is changing the $previouslyControlled ? "" : "un"}controlled state of $key.toString()} to be $previouslyControlled ? "un" : ""}controlled. Elements should not switch from uncontrolled to controlled (or vice versa).`); 5064 } 5065 } 5066 } 5067 /** Gets the current value from the store using a selector with the provided key. 5068 * 5069 * @param key Key of the selector to use. 5070 */ 5071 select(key, a1, a2, a3) { 5072 const selector = this.selectors[key]; 5073 return selector(this.state, a1, a2, a3); 5074 } 5075 /** 5076 * Returns a value from the store's state using a selector function. 5077 * Used to subscribe to specific parts of the state. 5078 * This methods causes a rerender whenever the selected state changes. 5079 * 5080 * @param key Key of the selector to use. 5081 */ 5082 useState(key, a1, a2, a3) { 5083 React25.useDebugValue(key); 5084 return useStore(this, this.selectors[key], a1, a2, a3); 5085 } 5086 /** 5087 * Wraps a function with `useStableCallback` to ensure it has a stable reference 5088 * and assigns it to the context. 5089 * 5090 * @param key Key of the event callback. Must be a function in the context. 5091 * @param fn Function to assign. 5092 */ 5093 useContextCallback(key, fn) { 5094 React25.useDebugValue(key); 5095 const stableFunction = useStableCallback(fn ?? NOOP); 5096 this.context[key] = stableFunction; 5097 } 5098 /** 5099 * Returns a stable setter function for a specific key in the store's state. 5100 * It's commonly used to pass as a ref callback to React elements. 5101 * 5102 * @param key Key of the state to set. 5103 */ 5104 useStateSetter(key) { 5105 const ref = React25.useRef(void 0); 5106 if (ref.current === void 0) { 5107 ref.current = (value) => { 5108 this.set(key, value); 5109 }; 5110 } 5111 return ref.current; 5112 } 5113 /** 5114 * Observes changes derived from the store's selectors and calls the listener when the selected value changes. 5115 * 5116 * @param key Key of the selector to observe. 5117 * @param listener Listener function called when the selector result changes. 5118 */ 5119 observe(selector, listener) { 5120 let selectFn; 5121 if (typeof selector === "function") { 5122 selectFn = selector; 5123 } else { 5124 selectFn = this.selectors[selector]; 5125 } 5126 let prevValue = selectFn(this.state); 5127 listener(prevValue, prevValue, this); 5128 return this.subscribe((nextState) => { 5129 const nextValue = selectFn(nextState); 5130 if (!Object.is(prevValue, nextValue)) { 5131 const oldValue = prevValue; 5132 prevValue = nextValue; 5133 listener(nextValue, oldValue, this); 5134 } 5135 }); 5136 } 5137 }; 5138 5139 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/components/FloatingRootStore.mjs 5140 var selectors = { 5141 open: (state) => state.open, 5142 transitionStatus: (state) => state.transitionStatus, 5143 domReferenceElement: (state) => state.domReferenceElement, 5144 referenceElement: (state) => state.positionReference ?? state.referenceElement, 5145 floatingElement: (state) => state.floatingElement, 5146 floatingId: (state) => state.floatingId 5147 }; 5148 var FloatingRootStore = class extends ReactStore { 5149 constructor(options) { 5150 const { 5151 syncOnly, 5152 nested, 5153 onOpenChange, 5154 triggerElements, 5155 ...initialState 5156 } = options; 5157 super({ 5158 ...initialState, 5159 positionReference: initialState.referenceElement, 5160 domReferenceElement: initialState.referenceElement 5161 }, { 5162 onOpenChange, 5163 dataRef: { 5164 current: {} 5165 }, 5166 events: createEventEmitter(), 5167 nested, 5168 triggerElements 5169 }, selectors); 5170 this.syncOnly = syncOnly; 5171 } 5172 /** 5173 * Syncs the event used by hover logic to distinguish hover-open from click-like interaction. 5174 */ 5175 syncOpenEvent = (newOpen, event) => { 5176 if (!newOpen || !this.state.open || // Prevent a pending hover-open from overwriting a click-open event, while allowing 5177 // click events to upgrade a hover-open. 5178 event != null && isClickLikeEvent(event)) { 5179 this.context.dataRef.current.openEvent = newOpen ? event : void 0; 5180 } 5181 }; 5182 /** 5183 * Runs the root-owned side effects for an open state change. 5184 */ 5185 dispatchOpenChange = (newOpen, eventDetails) => { 5186 this.syncOpenEvent(newOpen, eventDetails.event); 5187 const details = { 5188 open: newOpen, 5189 reason: eventDetails.reason, 5190 nativeEvent: eventDetails.event, 5191 nested: this.context.nested, 5192 triggerElement: eventDetails.trigger 5193 }; 5194 this.context.events.emit("openchange", details); 5195 }; 5196 /** 5197 * Emits the `openchange` event through the internal event emitter and calls the `onOpenChange` handler with the provided arguments. 5198 * 5199 * @param newOpen The new open state. 5200 * @param eventDetails Details about the event that triggered the open state change. 5201 */ 5202 setOpen = (newOpen, eventDetails) => { 5203 if (this.syncOnly) { 5204 this.context.onOpenChange?.(newOpen, eventDetails); 5205 return; 5206 } 5207 this.dispatchOpenChange(newOpen, eventDetails); 5208 this.context.onOpenChange?.(newOpen, eventDetails); 5209 }; 5210 }; 5211 5212 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/popups/store.mjs 5213 function createInitialPopupStoreState(triggerElements, floatingId, nested = false) { 5214 return { 5215 open: false, 5216 openProp: void 0, 5217 mounted: false, 5218 transitionStatus: void 0, 5219 floatingRootContext: new FloatingRootStore({ 5220 open: false, 5221 transitionStatus: void 0, 5222 floatingElement: null, 5223 referenceElement: null, 5224 triggerElements, 5225 floatingId, 5226 syncOnly: true, 5227 nested, 5228 onOpenChange: void 0 5229 }), 5230 floatingId, 5231 triggerCount: 0, 5232 preventUnmountingOnClose: false, 5233 payload: void 0, 5234 activeTriggerId: null, 5235 activeTriggerElement: null, 5236 openedWithoutTrigger: false, 5237 triggerIdProp: void 0, 5238 popupElement: null, 5239 positionerElement: null, 5240 activeTriggerProps: EMPTY_OBJECT, 5241 inactiveTriggerProps: EMPTY_OBJECT, 5242 popupProps: EMPTY_OBJECT 5243 }; 5244 } 5245 var activeTriggerIdSelector = (state) => state.triggerIdProp ?? state.activeTriggerId; 5246 var openSelector = (state) => state.openProp ?? state.open; 5247 var popupIdSelector = (state) => { 5248 const popupId = state.popupElement?.id ?? state.floatingId; 5249 return popupId || void 0; 5250 }; 5251 function triggerOwnsOpenPopup(state, triggerId) { 5252 return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) === triggerId; 5253 } 5254 function triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) { 5255 if (triggerOwnsOpenPopup(state, triggerId)) { 5256 return true; 5257 } 5258 return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) == null && !state.openedWithoutTrigger && state.triggerCount === 1; 5259 } 5260 var popupStoreSelectors = { 5261 open: openSelector, 5262 mounted: (state) => state.mounted, 5263 // `open` is written synchronously on an open change; `mounted`/`transitionStatus` sync in a 5264 // layout effect. Match useTransitionStatus so a retained popup does not miss its starting phase. 5265 transitionStatus: (state) => openSelector(state) && !state.mounted ? "starting" : state.transitionStatus, 5266 floatingRootContext: (state) => state.floatingRootContext, 5267 triggerCount: (state) => state.triggerCount, 5268 preventUnmountingOnClose: (state) => state.preventUnmountingOnClose, 5269 payload: (state) => state.payload, 5270 activeTriggerId: activeTriggerIdSelector, 5271 activeTriggerElement: (state) => state.mounted ? state.activeTriggerElement : null, 5272 popupId: popupIdSelector, 5273 /** 5274 * Whether the trigger with the given ID was used to open the popup. 5275 */ 5276 isTriggerActive: (state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId, 5277 /** 5278 * Whether the popup is open and was activated by a trigger with the given ID. 5279 */ 5280 isOpenedByTrigger: (state, triggerId) => triggerOwnsOpenPopup(state, triggerId), 5281 /** 5282 * Whether the popup is mounted and was activated by a trigger with the given ID. 5283 */ 5284 isMountedByTrigger: (state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId && state.mounted, 5285 triggerProps: (state, isActive) => isActive ? state.activeTriggerProps : state.inactiveTriggerProps, 5286 /** 5287 * Popup id for the trigger that currently owns the open popup. 5288 */ 5289 triggerPopupId: (state, triggerId) => triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) ? popupIdSelector(state) : void 0, 5290 popupProps: (state) => state.popupProps, 5291 popupElement: (state) => state.popupElement, 5292 positionerElement: (state) => state.positionerElement 5293 }; 5294 5295 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/popups/usePopupHandleStore.mjs 5296 var React26 = __toESM(require_react(), 1); 5297 var import_shim2 = __toESM(require_shim(), 1); 5298 function usePopupHandleStore(handle) { 5299 const subscribe = React26.useCallback((listener) => { 5300 if (handle === void 0) { 5301 return NOOP; 5302 } 5303 return handle.subscribeStore(listener); 5304 }, [handle]); 5305 const getSnapshot = React26.useCallback(() => { 5306 return handle === void 0 ? void 0 : handle.store; 5307 }, [handle]); 5308 return (0, import_shim2.useSyncExternalStore)(subscribe, getSnapshot, () => handle?.serverStore); 5309 } 5310 5311 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/hooks/useFocus.mjs 5312 var React27 = __toESM(require_react(), 1); 5313 var isMacSafari = parts_exports.os.mac && parts_exports.engine.webkit; 5314 function useFocus(store2, props = {}) { 5315 const { 5316 enabled = true, 5317 delay 5318 } = props; 5319 const { 5320 events, 5321 dataRef 5322 } = store2.context; 5323 const blockFocusRef = React27.useRef(false); 5324 const blockedReferenceRef = React27.useRef(null); 5325 const keyboardModalityRef = React27.useRef(true); 5326 const timeout = useTimeout(); 5327 React27.useEffect(() => { 5328 const domReference = store2.select("domReferenceElement"); 5329 if (!enabled) { 5330 return void 0; 5331 } 5332 const win = getWindow(domReference); 5333 function onBlur() { 5334 const currentDomReference = store2.select("domReferenceElement"); 5335 if (!store2.select("open") && isHTMLElement(currentDomReference) && currentDomReference === activeElement(ownerDocument(currentDomReference))) { 5336 blockFocusRef.current = true; 5337 blockedReferenceRef.current = currentDomReference; 5338 } 5339 } 5340 function onKeyDown() { 5341 keyboardModalityRef.current = true; 5342 } 5343 function onPointerDown() { 5344 keyboardModalityRef.current = false; 5345 } 5346 return mergeCleanups(addEventListener(win, "blur", onBlur), isMacSafari && addEventListener(win, "keydown", onKeyDown, true), isMacSafari && addEventListener(win, "pointerdown", onPointerDown, true)); 5347 }, [store2, enabled]); 5348 React27.useEffect(() => { 5349 if (!enabled) { 5350 return void 0; 5351 } 5352 function onOpenChangeLocal(details) { 5353 if (details.reason === reason_parts_exports.triggerPress || details.reason === reason_parts_exports.escapeKey) { 5354 const referenceElement = store2.select("domReferenceElement"); 5355 if (isElement(referenceElement)) { 5356 blockedReferenceRef.current = referenceElement; 5357 blockFocusRef.current = true; 5358 } 5359 } 5360 } 5361 events.on("openchange", onOpenChangeLocal); 5362 return () => { 5363 events.off("openchange", onOpenChangeLocal); 5364 }; 5365 }, [events, enabled, store2]); 5366 const reference = React27.useMemo(() => { 5367 function resetBlockedFocus() { 5368 blockFocusRef.current = false; 5369 blockedReferenceRef.current = null; 5370 } 5371 return { 5372 onMouseLeave() { 5373 resetBlockedFocus(); 5374 }, 5375 onFocus(event) { 5376 const focusTarget = event.currentTarget; 5377 if (blockFocusRef.current) { 5378 if (blockedReferenceRef.current === focusTarget) { 5379 return; 5380 } 5381 resetBlockedFocus(); 5382 } 5383 const target = getTarget(event.nativeEvent); 5384 if (isElement(target)) { 5385 if (isMacSafari && !event.relatedTarget) { 5386 if (!keyboardModalityRef.current && !isTypeableElement(target)) { 5387 return; 5388 } 5389 } else if (!matchesFocusVisible(target)) { 5390 return; 5391 } 5392 } 5393 const movedFromOtherEnabledTrigger = isTargetInsideEnabledTrigger(event.relatedTarget, store2.context.triggerElements); 5394 const { 5395 nativeEvent, 5396 currentTarget 5397 } = event; 5398 if (store2.select("open") && movedFromOtherEnabledTrigger || !delay) { 5399 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget)); 5400 return; 5401 } 5402 timeout.start(delay, () => { 5403 if (blockFocusRef.current) { 5404 return; 5405 } 5406 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget)); 5407 }); 5408 }, 5409 onBlur(event) { 5410 resetBlockedFocus(); 5411 const relatedTarget = event.relatedTarget; 5412 const nativeEvent = event.nativeEvent; 5413 const movedToFocusGuard = isElement(relatedTarget) && relatedTarget.hasAttribute(createAttribute("focus-guard")) && relatedTarget.getAttribute("data-type") === "outside"; 5414 timeout.start(0, () => { 5415 const domReference = store2.select("domReferenceElement"); 5416 const activeEl = activeElement(ownerDocument(domReference)); 5417 if (!relatedTarget && activeEl === domReference) { 5418 return; 5419 } 5420 if (contains(dataRef.current.floatingContext?.refs.floating.current, activeEl) || contains(domReference, activeEl) || movedToFocusGuard) { 5421 return; 5422 } 5423 const nextFocusedElement = relatedTarget ?? activeEl; 5424 if (isTargetInsideEnabledTrigger(nextFocusedElement, store2.context.triggerElements)) { 5425 return; 5426 } 5427 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent)); 5428 }); 5429 } 5430 }; 5431 }, [dataRef, delay, store2, timeout]); 5432 return React27.useMemo(() => enabled ? { 5433 reference, 5434 trigger: reference 5435 } : {}, [enabled, reference]); 5436 } 5437 5438 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/hooks/useHoverFloatingInteraction.mjs 5439 var React28 = __toESM(require_react(), 1); 5440 5441 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/hooks/useHoverInteractionSharedState.mjs 5442 var HoverInteraction = class _HoverInteraction { 5443 pointerType = void 0; 5444 interactedInside = false; 5445 handler = void 0; 5446 blockMouseMove = true; 5447 performedPointerEventsMutation = false; 5448 pointerEventsScopeElement = null; 5449 pointerEventsReferenceElement = null; 5450 pointerEventsFloatingElement = null; 5451 restTimeoutPending = false; 5452 openChangeTimeout = new Timeout(); 5453 restTimeout = new Timeout(); 5454 handleCloseOptions = void 0; 5455 static create() { 5456 return new _HoverInteraction(); 5457 } 5458 dispose = () => { 5459 this.openChangeTimeout.clear(); 5460 this.restTimeout.clear(); 5461 }; 5462 disposeEffect = () => { 5463 return this.dispose; 5464 }; 5465 }; 5466 var pointerEventsMutationOwnerByScopeElement = /* @__PURE__ */ new WeakMap(); 5467 function clearSafePolygonPointerEventsMutation(instance) { 5468 if (!instance.performedPointerEventsMutation) { 5469 return; 5470 } 5471 const scopeElement = instance.pointerEventsScopeElement; 5472 if (scopeElement && pointerEventsMutationOwnerByScopeElement.get(scopeElement) === instance) { 5473 instance.pointerEventsScopeElement?.style.removeProperty("pointer-events"); 5474 instance.pointerEventsReferenceElement?.style.removeProperty("pointer-events"); 5475 instance.pointerEventsFloatingElement?.style.removeProperty("pointer-events"); 5476 pointerEventsMutationOwnerByScopeElement.delete(scopeElement); 5477 } 5478 instance.performedPointerEventsMutation = false; 5479 instance.pointerEventsScopeElement = null; 5480 instance.pointerEventsReferenceElement = null; 5481 instance.pointerEventsFloatingElement = null; 5482 } 5483 function applySafePolygonPointerEventsMutation(instance, options) { 5484 const { 5485 scopeElement, 5486 referenceElement, 5487 floatingElement 5488 } = options; 5489 const existingOwner = pointerEventsMutationOwnerByScopeElement.get(scopeElement); 5490 if (existingOwner && existingOwner !== instance) { 5491 clearSafePolygonPointerEventsMutation(existingOwner); 5492 } 5493 clearSafePolygonPointerEventsMutation(instance); 5494 instance.performedPointerEventsMutation = true; 5495 instance.pointerEventsScopeElement = scopeElement; 5496 instance.pointerEventsReferenceElement = referenceElement; 5497 instance.pointerEventsFloatingElement = floatingElement; 5498 pointerEventsMutationOwnerByScopeElement.set(scopeElement, instance); 5499 scopeElement.style.pointerEvents = "none"; 5500 referenceElement.style.pointerEvents = "auto"; 5501 floatingElement.style.pointerEvents = "auto"; 5502 } 5503 function useHoverInteractionSharedState(store2) { 5504 const data = store2.context.dataRef.current; 5505 const instance = useRefWithInit(() => data.hoverInteractionState ?? HoverInteraction.create()).current; 5506 if (!data.hoverInteractionState) { 5507 data.hoverInteractionState = instance; 5508 } 5509 useOnMount(data.hoverInteractionState.disposeEffect); 5510 return data.hoverInteractionState; 5511 } 5512 5513 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/hooks/useHoverFloatingInteraction.mjs 5514 function useHoverFloatingInteraction(store2, parameters = {}) { 5515 const { 5516 enabled = true, 5517 closeDelay: closeDelayProp = 0, 5518 nodeId: nodeIdProp 5519 } = parameters; 5520 const open2 = store2.useState("open"); 5521 const floatingElement = store2.useState("floatingElement"); 5522 const domReferenceElement = store2.useState("domReferenceElement"); 5523 const { 5524 dataRef 5525 } = store2.context; 5526 const tree = useFloatingTree(); 5527 const parentId = useFloatingParentNodeId(); 5528 const instance = useHoverInteractionSharedState(store2); 5529 const childClosedTimeout = useTimeout(); 5530 const isClickLikeOpenEvent2 = useStableCallback(() => { 5531 return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside); 5532 }); 5533 const isHoverOpen = useStableCallback(() => { 5534 return isHoverOpenEvent(dataRef.current.openEvent?.type); 5535 }); 5536 const clearPointerEvents = useStableCallback(() => { 5537 clearSafePolygonPointerEventsMutation(instance); 5538 }); 5539 useIsoLayoutEffect(() => { 5540 if (!open2) { 5541 instance.pointerType = void 0; 5542 instance.restTimeoutPending = false; 5543 instance.interactedInside = false; 5544 clearPointerEvents(); 5545 } 5546 }, [open2, instance, clearPointerEvents]); 5547 React28.useEffect(() => { 5548 return clearPointerEvents; 5549 }, [clearPointerEvents]); 5550 useIsoLayoutEffect(() => { 5551 if (!enabled) { 5552 return void 0; 5553 } 5554 if (open2 && instance.handleCloseOptions?.blockPointerEvents && isHoverOpen() && isElement(domReferenceElement) && floatingElement) { 5555 const ref = domReferenceElement; 5556 const floatingEl = floatingElement; 5557 const doc = ownerDocument(floatingElement); 5558 const parentFloating = tree?.nodesRef.current.find((node) => node.id === parentId)?.context?.elements.floating; 5559 if (parentFloating) { 5560 parentFloating.style.pointerEvents = ""; 5561 } 5562 const cachedScopeElement = instance.pointerEventsScopeElement !== floatingEl ? instance.pointerEventsScopeElement : null; 5563 const parentScopeElement = parentFloating !== floatingEl ? parentFloating : null; 5564 const scopeElement = instance.handleCloseOptions?.getScope?.() ?? cachedScopeElement ?? parentScopeElement ?? closest(ref, "[data-rootownerid]") ?? doc.body; 5565 applySafePolygonPointerEventsMutation(instance, { 5566 scopeElement, 5567 referenceElement: ref, 5568 floatingElement: floatingEl 5569 }); 5570 return () => { 5571 clearPointerEvents(); 5572 }; 5573 } 5574 return void 0; 5575 }, [enabled, open2, domReferenceElement, floatingElement, instance, isHoverOpen, tree, parentId, clearPointerEvents]); 5576 React28.useEffect(() => { 5577 if (!enabled) { 5578 return void 0; 5579 } 5580 function hasParentChildren() { 5581 return !!(tree && parentId && getNodeChildren(tree.nodesRef.current, parentId).length > 0); 5582 } 5583 function closeWithDelay(event) { 5584 const closeDelay = getDelay(closeDelayProp, "close", instance.pointerType); 5585 const close = () => { 5586 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 5587 tree?.events.emit("floating.closed", event); 5588 }; 5589 if (closeDelay) { 5590 instance.openChangeTimeout.start(closeDelay, close); 5591 } else { 5592 instance.openChangeTimeout.clear(); 5593 close(); 5594 } 5595 } 5596 function handleInteractInside(event) { 5597 const target = getTarget(event); 5598 if (!isInteractiveElement(target)) { 5599 instance.interactedInside = false; 5600 return; 5601 } 5602 instance.interactedInside = closest(target, "[aria-haspopup]") != null; 5603 } 5604 function onFloatingMouseEnter() { 5605 instance.openChangeTimeout.clear(); 5606 childClosedTimeout.clear(); 5607 tree?.events.off("floating.closed", onNodeClosed); 5608 clearPointerEvents(); 5609 } 5610 function onFloatingMouseLeave(event) { 5611 if (hasParentChildren() && tree) { 5612 tree.events.on("floating.closed", onNodeClosed); 5613 return; 5614 } 5615 if (isTargetInsideEnabledTrigger(event.relatedTarget, store2.context.triggerElements)) { 5616 return; 5617 } 5618 const currentNodeId = dataRef.current.floatingContext?.nodeId ?? nodeIdProp; 5619 const relatedTarget = event.relatedTarget; 5620 const isMovingIntoDescendantFloating = tree && currentNodeId && isElement(relatedTarget) && getNodeChildren(tree.nodesRef.current, currentNodeId, false).some((node) => contains(node.context?.elements.floating, relatedTarget)); 5621 if (isMovingIntoDescendantFloating) { 5622 return; 5623 } 5624 if (instance.handler) { 5625 instance.handler(event); 5626 return; 5627 } 5628 clearPointerEvents(); 5629 if (isHoverOpen() && !isClickLikeOpenEvent2()) { 5630 closeWithDelay(event); 5631 } 5632 } 5633 function onNodeClosed(event) { 5634 if (!tree || !parentId || hasParentChildren()) { 5635 return; 5636 } 5637 childClosedTimeout.start(0, () => { 5638 tree.events.off("floating.closed", onNodeClosed); 5639 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 5640 tree.events.emit("floating.closed", event); 5641 }); 5642 } 5643 const floating = floatingElement; 5644 return mergeCleanups(floating && addEventListener(floating, "mouseenter", onFloatingMouseEnter), floating && addEventListener(floating, "mouseleave", onFloatingMouseLeave), floating && addEventListener(floating, "pointerdown", handleInteractInside, true), () => { 5645 tree?.events.off("floating.closed", onNodeClosed); 5646 }); 5647 }, [enabled, floatingElement, store2, dataRef, closeDelayProp, nodeIdProp, isHoverOpen, isClickLikeOpenEvent2, clearPointerEvents, instance, tree, parentId, childClosedTimeout]); 5648 } 5649 5650 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/hooks/useHoverReferenceInteraction.mjs 5651 var React29 = __toESM(require_react(), 1); 5652 var ReactDOM4 = __toESM(require_react_dom(), 1); 5653 var EMPTY_REF = { 5654 current: null 5655 }; 5656 function useHoverReferenceInteraction(store2, props = {}) { 5657 const { 5658 enabled = true, 5659 delay = 0, 5660 handleClose = null, 5661 mouseOnly = false, 5662 restMs = 0, 5663 move = true, 5664 triggerElementRef = EMPTY_REF, 5665 externalTree, 5666 isActiveTrigger = true, 5667 getHandleCloseContext, 5668 isClosing, 5669 shouldOpen: shouldOpenProp, 5670 guardStaleOpen = false 5671 } = props; 5672 const { 5673 dataRef, 5674 events 5675 } = store2.context; 5676 const tree = useFloatingTree(externalTree); 5677 const instance = useHoverInteractionSharedState(store2); 5678 const isHoverCloseActiveRef = React29.useRef(false); 5679 const handleCloseRef = useValueAsRef(handleClose); 5680 const delayRef = useValueAsRef(delay); 5681 const restMsRef = useValueAsRef(restMs); 5682 const enabledRef = useValueAsRef(enabled); 5683 const shouldOpenRef = useValueAsRef(shouldOpenProp); 5684 const isClosingRef = useValueAsRef(isClosing); 5685 const isClickLikeOpenEvent2 = useStableCallback(() => { 5686 return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside); 5687 }); 5688 const checkShouldOpen = useStableCallback(() => { 5689 return shouldOpenRef.current?.() !== false; 5690 }); 5691 const isOverInactiveTrigger = useStableCallback((currentDomReference, currentTarget, target) => { 5692 const allTriggers = store2.context.triggerElements; 5693 if (allTriggers.hasElement(currentTarget)) { 5694 return !currentDomReference || !contains(currentDomReference, currentTarget); 5695 } 5696 if (!isElement(target)) { 5697 return false; 5698 } 5699 const targetElement = target; 5700 return allTriggers.hasMatchingElement((trigger) => contains(trigger, targetElement)) && (!currentDomReference || !contains(currentDomReference, targetElement)); 5701 }); 5702 const cleanupMouseMoveHandler = useStableCallback(() => { 5703 if (!instance.handler) { 5704 return; 5705 } 5706 const doc = ownerDocument(store2.select("domReferenceElement")); 5707 doc.removeEventListener("mousemove", instance.handler); 5708 instance.handler = void 0; 5709 }); 5710 const clearPointerEvents = useStableCallback(() => { 5711 clearSafePolygonPointerEventsMutation(instance); 5712 }); 5713 if (isActiveTrigger) { 5714 instance.handleCloseOptions = handleClose?.__options; 5715 } 5716 React29.useEffect(() => cleanupMouseMoveHandler, [cleanupMouseMoveHandler]); 5717 React29.useEffect(() => { 5718 if (!enabled) { 5719 return void 0; 5720 } 5721 function onOpenChangeLocal(details) { 5722 if (!details.open) { 5723 isHoverCloseActiveRef.current = details.reason === reason_parts_exports.triggerHover; 5724 cleanupMouseMoveHandler(); 5725 instance.openChangeTimeout.clear(); 5726 instance.restTimeout.clear(); 5727 instance.blockMouseMove = true; 5728 instance.restTimeoutPending = false; 5729 } else { 5730 isHoverCloseActiveRef.current = false; 5731 } 5732 } 5733 events.on("openchange", onOpenChangeLocal); 5734 return () => { 5735 events.off("openchange", onOpenChangeLocal); 5736 }; 5737 }, [enabled, events, instance, cleanupMouseMoveHandler]); 5738 React29.useEffect(() => { 5739 if (!enabled) { 5740 return void 0; 5741 } 5742 function closeWithDelay(event, runElseBranch = true) { 5743 const closeDelay = getDelay(delayRef.current, "close", instance.pointerType); 5744 if (closeDelay) { 5745 instance.openChangeTimeout.start(closeDelay, () => { 5746 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 5747 tree?.events.emit("floating.closed", event); 5748 }); 5749 } else if (runElseBranch) { 5750 instance.openChangeTimeout.clear(); 5751 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 5752 tree?.events.emit("floating.closed", event); 5753 } 5754 } 5755 const trigger = triggerElementRef.current ?? (isActiveTrigger ? store2.select("domReferenceElement") : null); 5756 if (!isElement(trigger)) { 5757 return void 0; 5758 } 5759 function onMouseEnter(event) { 5760 instance.openChangeTimeout.clear(); 5761 instance.blockMouseMove = false; 5762 if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) { 5763 return; 5764 } 5765 const restMsValue = getRestMs(restMsRef.current); 5766 const openDelay = getDelay(delayRef.current, "open", instance.pointerType); 5767 const eventTarget = getTarget(event); 5768 const currentTarget = event.currentTarget ?? null; 5769 const currentDomReference = store2.select("domReferenceElement"); 5770 let triggerNode = currentTarget; 5771 if (isElement(eventTarget) && !store2.context.triggerElements.hasElement(eventTarget)) { 5772 for (const triggerElement of store2.context.triggerElements.elements()) { 5773 if (contains(triggerElement, eventTarget)) { 5774 triggerNode = triggerElement; 5775 break; 5776 } 5777 } 5778 } 5779 if (isElement(currentTarget) && isElement(currentDomReference) && !store2.context.triggerElements.hasElement(currentTarget) && contains(currentTarget, currentDomReference)) { 5780 triggerNode = currentDomReference; 5781 } 5782 const isOverInactive = triggerNode == null ? false : isOverInactiveTrigger(currentDomReference, triggerNode, eventTarget); 5783 const isOpen = store2.select("open"); 5784 const isInClosingTransition = isClosingRef.current?.() ?? store2.select("transitionStatus") === "ending"; 5785 const isHoverCloseTransition = !isOpen && isInClosingTransition && isHoverCloseActiveRef.current; 5786 const isReenteringSameTriggerDuringCloseTransition = !isOverInactive && isElement(triggerNode) && isElement(currentDomReference) && contains(currentDomReference, triggerNode) && isHoverCloseTransition; 5787 const isRestOnlyDelay = restMsValue > 0 && !openDelay; 5788 const shouldOpenImmediately = isOverInactive && (isOpen || isHoverCloseTransition) || isReenteringSameTriggerDuringCloseTransition; 5789 const shouldOpen = !isOpen || isOverInactive; 5790 if (shouldOpenImmediately) { 5791 if (checkShouldOpen()) { 5792 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode)); 5793 } 5794 return; 5795 } 5796 if (isRestOnlyDelay) { 5797 return; 5798 } 5799 if (openDelay) { 5800 instance.openChangeTimeout.start(openDelay, () => { 5801 if (shouldOpen && checkShouldOpen()) { 5802 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode)); 5803 } 5804 }); 5805 } else if (shouldOpen) { 5806 if (checkShouldOpen()) { 5807 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode)); 5808 } 5809 } 5810 } 5811 function onMouseLeave(event) { 5812 if (isClickLikeOpenEvent2()) { 5813 clearPointerEvents(); 5814 return; 5815 } 5816 cleanupMouseMoveHandler(); 5817 const domReferenceElement = store2.select("domReferenceElement"); 5818 const doc = ownerDocument(domReferenceElement); 5819 instance.restTimeout.clear(); 5820 instance.restTimeoutPending = false; 5821 const handleCloseContextBase = dataRef.current.floatingContext ?? getHandleCloseContext?.(); 5822 if (isTargetInsideEnabledTrigger(event.relatedTarget, store2.context.triggerElements)) { 5823 return; 5824 } 5825 if (handleCloseRef.current && handleCloseContextBase) { 5826 if (!store2.select("open")) { 5827 instance.openChangeTimeout.clear(); 5828 } 5829 const currentTrigger = triggerElementRef.current; 5830 instance.handler = handleCloseRef.current({ 5831 ...handleCloseContextBase, 5832 tree, 5833 x: event.clientX, 5834 y: event.clientY, 5835 onClose() { 5836 clearPointerEvents(); 5837 cleanupMouseMoveHandler(); 5838 if (enabledRef.current && !isClickLikeOpenEvent2() && currentTrigger === store2.select("domReferenceElement")) { 5839 closeWithDelay(event, true); 5840 } 5841 } 5842 }); 5843 doc.addEventListener("mousemove", instance.handler); 5844 instance.handler(event); 5845 return; 5846 } 5847 const shouldClose = instance.pointerType === "touch" ? !contains(store2.select("floatingElement"), event.relatedTarget) : true; 5848 if (shouldClose) { 5849 closeWithDelay(event); 5850 } 5851 } 5852 function onMouseOut(event) { 5853 if (contains(trigger, event.relatedTarget)) { 5854 return; 5855 } 5856 instance.openChangeTimeout.clear(); 5857 instance.restTimeout.clear(); 5858 instance.restTimeoutPending = false; 5859 } 5860 const staleOpenGuard = guardStaleOpen ? addEventListener(trigger, "mouseout", onMouseOut) : void 0; 5861 if (move) { 5862 return mergeCleanups(addEventListener(trigger, "mousemove", onMouseEnter, { 5863 once: true 5864 }), addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave), staleOpenGuard); 5865 } 5866 return mergeCleanups(addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave), staleOpenGuard); 5867 }, [cleanupMouseMoveHandler, clearPointerEvents, dataRef, delayRef, store2, enabled, handleCloseRef, instance, isActiveTrigger, isOverInactiveTrigger, isClickLikeOpenEvent2, mouseOnly, move, restMsRef, triggerElementRef, tree, enabledRef, getHandleCloseContext, isClosingRef, checkShouldOpen, guardStaleOpen]); 5868 return React29.useMemo(() => { 5869 if (!enabled) { 5870 return void 0; 5871 } 5872 function setPointerRef(event) { 5873 instance.pointerType = event.pointerType; 5874 } 5875 return { 5876 onPointerDown: setPointerRef, 5877 onPointerEnter: setPointerRef, 5878 onMouseMove(event) { 5879 const { 5880 nativeEvent 5881 } = event; 5882 const trigger = event.currentTarget; 5883 const currentDomReference = store2.select("domReferenceElement"); 5884 const currentOpen = store2.select("open"); 5885 const isOverInactive = isOverInactiveTrigger(currentDomReference, trigger, event.target); 5886 if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) { 5887 return; 5888 } 5889 if (currentOpen && isOverInactive && instance.handleCloseOptions?.blockPointerEvents) { 5890 const floatingElement = store2.select("floatingElement"); 5891 if (floatingElement) { 5892 const scopeElement = instance.handleCloseOptions?.getScope?.() ?? trigger.ownerDocument.body; 5893 applySafePolygonPointerEventsMutation(instance, { 5894 scopeElement, 5895 referenceElement: trigger, 5896 floatingElement 5897 }); 5898 } 5899 } 5900 const restMsValue = getRestMs(restMsRef.current); 5901 if (currentOpen && !isOverInactive || restMsValue === 0) { 5902 return; 5903 } 5904 if (!isOverInactive && instance.restTimeoutPending && event.movementX ** 2 + event.movementY ** 2 < 2) { 5905 return; 5906 } 5907 instance.restTimeout.clear(); 5908 function handleMouseMove() { 5909 instance.restTimeoutPending = false; 5910 if (isClickLikeOpenEvent2()) { 5911 return; 5912 } 5913 const latestOpen = store2.select("open"); 5914 if (!instance.blockMouseMove && (!latestOpen || isOverInactive) && checkShouldOpen()) { 5915 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, nativeEvent, trigger)); 5916 } 5917 } 5918 if (instance.pointerType === "touch") { 5919 ReactDOM4.flushSync(() => { 5920 handleMouseMove(); 5921 }); 5922 } else if (isOverInactive && currentOpen) { 5923 handleMouseMove(); 5924 } else { 5925 instance.restTimeoutPending = true; 5926 instance.restTimeout.start(restMsValue, handleMouseMove); 5927 } 5928 } 5929 }; 5930 }, [enabled, instance, isClickLikeOpenEvent2, isOverInactiveTrigger, mouseOnly, store2, restMsRef, checkShouldOpen]); 5931 } 5932 5933 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/safePolygon.mjs 5934 var CURSOR_SPEED_THRESHOLD = 0.1; 5935 var CURSOR_SPEED_THRESHOLD_SQUARED = CURSOR_SPEED_THRESHOLD * CURSOR_SPEED_THRESHOLD; 5936 var POLYGON_BUFFER = 0.5; 5937 function hasIntersectingEdge(pointX, pointY, xi, yi, xj, yj) { 5938 return yi >= pointY !== yj >= pointY && pointX <= (xj - xi) * (pointY - yi) / (yj - yi) + xi; 5939 } 5940 function isPointInQuadrilateral(pointX, pointY, x1, y1, x2, y2, x3, y3, x4, y4) { 5941 let isInsideValue = false; 5942 if (hasIntersectingEdge(pointX, pointY, x1, y1, x2, y2)) { 5943 isInsideValue = !isInsideValue; 5944 } 5945 if (hasIntersectingEdge(pointX, pointY, x2, y2, x3, y3)) { 5946 isInsideValue = !isInsideValue; 5947 } 5948 if (hasIntersectingEdge(pointX, pointY, x3, y3, x4, y4)) { 5949 isInsideValue = !isInsideValue; 5950 } 5951 if (hasIntersectingEdge(pointX, pointY, x4, y4, x1, y1)) { 5952 isInsideValue = !isInsideValue; 5953 } 5954 return isInsideValue; 5955 } 5956 function isInsideRect(pointX, pointY, rect) { 5957 return pointX >= rect.x && pointX <= rect.x + rect.width && pointY >= rect.y && pointY <= rect.y + rect.height; 5958 } 5959 function isInsideAxisAlignedRect(pointX, pointY, x1, y1, x2, y2) { 5960 const minX = Math.min(x1, x2); 5961 const maxX = Math.max(x1, x2); 5962 const minY = Math.min(y1, y2); 5963 const maxY = Math.max(y1, y2); 5964 return pointX >= minX && pointX <= maxX && pointY >= minY && pointY <= maxY; 5965 } 5966 function safePolygon(options = {}) { 5967 const { 5968 blockPointerEvents = false 5969 } = options; 5970 const timeout = new Timeout(); 5971 const fn = ({ 5972 x, 5973 y, 5974 placement, 5975 elements, 5976 onClose, 5977 nodeId, 5978 tree 5979 }) => { 5980 const side = placement?.split("-")[0]; 5981 let hasLanded = false; 5982 let lastX = null; 5983 let lastY = null; 5984 let lastCursorTime = typeof performance !== "undefined" ? performance.now() : 0; 5985 function isCursorMovingSlowly(nextX, nextY) { 5986 const currentTime = performance.now(); 5987 const elapsedTime = currentTime - lastCursorTime; 5988 if (lastX === null || lastY === null || elapsedTime === 0) { 5989 lastX = nextX; 5990 lastY = nextY; 5991 lastCursorTime = currentTime; 5992 return false; 5993 } 5994 const deltaX = nextX - lastX; 5995 const deltaY = nextY - lastY; 5996 const distanceSquared = deltaX * deltaX + deltaY * deltaY; 5997 const thresholdSquared = elapsedTime * elapsedTime * CURSOR_SPEED_THRESHOLD_SQUARED; 5998 lastX = nextX; 5999 lastY = nextY; 6000 lastCursorTime = currentTime; 6001 return distanceSquared < thresholdSquared; 6002 } 6003 function close() { 6004 timeout.clear(); 6005 onClose(); 6006 } 6007 return function onMouseMove(event) { 6008 timeout.clear(); 6009 const domReference = elements.domReference; 6010 const floating = elements.floating; 6011 if (!domReference || !floating || side == null || x == null || y == null) { 6012 return void 0; 6013 } 6014 const { 6015 clientX, 6016 clientY 6017 } = event; 6018 const target = getTarget(event); 6019 const isLeave = event.type === "mouseleave"; 6020 const isOverFloatingEl = contains(floating, target); 6021 const isOverReferenceEl = contains(domReference, target); 6022 if (isOverFloatingEl) { 6023 hasLanded = true; 6024 if (!isLeave) { 6025 return void 0; 6026 } 6027 } 6028 if (isOverReferenceEl) { 6029 hasLanded = false; 6030 if (!isLeave) { 6031 hasLanded = true; 6032 return void 0; 6033 } 6034 } 6035 if (isLeave && isElement(event.relatedTarget) && contains(floating, event.relatedTarget)) { 6036 return void 0; 6037 } 6038 function hasOpenChildNode() { 6039 return Boolean(tree && getNodeChildren(tree.nodesRef.current, nodeId).length > 0); 6040 } 6041 function closeIfNoOpenChild() { 6042 if (!hasOpenChildNode()) { 6043 close(); 6044 } 6045 } 6046 if (hasOpenChildNode()) { 6047 return void 0; 6048 } 6049 const refRect = domReference.getBoundingClientRect(); 6050 const rect = floating.getBoundingClientRect(); 6051 const cursorLeaveFromRight = x > rect.right - rect.width / 2; 6052 const cursorLeaveFromBottom = y > rect.bottom - rect.height / 2; 6053 const isFloatingWider = rect.width > refRect.width; 6054 const isFloatingTaller = rect.height > refRect.height; 6055 const left = (isFloatingWider ? refRect : rect).left; 6056 const right = (isFloatingWider ? refRect : rect).right; 6057 const top = (isFloatingTaller ? refRect : rect).top; 6058 const bottom = (isFloatingTaller ? refRect : rect).bottom; 6059 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) { 6060 closeIfNoOpenChild(); 6061 return void 0; 6062 } 6063 let isInsideTroughRect = false; 6064 switch (side) { 6065 case "top": 6066 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, refRect.top + 1, right, rect.bottom - 1); 6067 break; 6068 case "bottom": 6069 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, rect.top + 1, right, refRect.bottom - 1); 6070 break; 6071 case "left": 6072 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, rect.right - 1, bottom, refRect.left + 1, top); 6073 break; 6074 case "right": 6075 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, refRect.right - 1, bottom, rect.left + 1, top); 6076 break; 6077 default: 6078 } 6079 if (isInsideTroughRect) { 6080 return void 0; 6081 } 6082 if (hasLanded && !isInsideRect(clientX, clientY, refRect)) { 6083 closeIfNoOpenChild(); 6084 return void 0; 6085 } 6086 if (!isLeave && isCursorMovingSlowly(clientX, clientY)) { 6087 closeIfNoOpenChild(); 6088 return void 0; 6089 } 6090 let isInsidePolygon = false; 6091 switch (side) { 6092 case "top": { 6093 const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; 6094 const cursorPointOneX = isFloatingWider ? x + cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset; 6095 const cursorPointTwoX = isFloatingWider ? x - cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset; 6096 const cursorPointY = y + POLYGON_BUFFER + 1; 6097 const commonYLeft = cursorLeaveFromRight ? rect.bottom - POLYGON_BUFFER : isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top; 6098 const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top : rect.bottom - POLYGON_BUFFER; 6099 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight); 6100 break; 6101 } 6102 case "bottom": { 6103 const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; 6104 const cursorPointOneX = isFloatingWider ? x + cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset; 6105 const cursorPointTwoX = isFloatingWider ? x - cursorXOffset : cursorLeaveFromRight ? x + cursorXOffset : x - cursorXOffset; 6106 const cursorPointY = y - POLYGON_BUFFER; 6107 const commonYLeft = cursorLeaveFromRight ? rect.top + POLYGON_BUFFER : isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom; 6108 const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom : rect.top + POLYGON_BUFFER; 6109 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight); 6110 break; 6111 } 6112 case "left": { 6113 const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; 6114 const cursorPointOneY = isFloatingTaller ? y + cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset; 6115 const cursorPointTwoY = isFloatingTaller ? y - cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset; 6116 const cursorPointX = x + POLYGON_BUFFER + 1; 6117 const commonXTop = cursorLeaveFromBottom ? rect.right - POLYGON_BUFFER : isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left; 6118 const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left : rect.right - POLYGON_BUFFER; 6119 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, commonXTop, rect.top, commonXBottom, rect.bottom, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY); 6120 break; 6121 } 6122 case "right": { 6123 const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; 6124 const cursorPointOneY = isFloatingTaller ? y + cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset; 6125 const cursorPointTwoY = isFloatingTaller ? y - cursorYOffset : cursorLeaveFromBottom ? y + cursorYOffset : y - cursorYOffset; 6126 const cursorPointX = x - POLYGON_BUFFER; 6127 const commonXTop = cursorLeaveFromBottom ? rect.left + POLYGON_BUFFER : isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right; 6128 const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right : rect.left + POLYGON_BUFFER; 6129 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY, commonXTop, rect.top, commonXBottom, rect.bottom); 6130 break; 6131 } 6132 default: 6133 } 6134 if (!isInsidePolygon) { 6135 closeIfNoOpenChild(); 6136 } else if (!hasLanded) { 6137 timeout.start(40, closeIfNoOpenChild); 6138 } 6139 return void 0; 6140 }; 6141 }; 6142 fn.__options = { 6143 ...options, 6144 blockPointerEvents 6145 }; 6146 return fn; 6147 } 6148 6149 // node_modules/.store/@floating-ui/core@1.8.0-3V8aS7jJHHGcsCINjP9-5A/node_modules/@floating-ui/core/dist/floating-ui.core.mjs 6150 function computeCoordsFromPlacement(_ref, placement, rtl) { 6151 let { 6152 reference, 6153 floating 6154 } = _ref; 6155 const sideAxis = getSideAxis(placement); 6156 const alignmentAxis = getAlignmentAxis(placement); 6157 const alignLength = getAxisLength(alignmentAxis); 6158 const side = getSide(placement); 6159 const isVertical = sideAxis === "y"; 6160 const commonX = reference.x + reference.width / 2 - floating.width / 2; 6161 const commonY = reference.y + reference.height / 2 - floating.height / 2; 6162 const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2; 6163 let coords; 6164 switch (side) { 6165 case "top": 6166 coords = { 6167 x: commonX, 6168 y: reference.y - floating.height 6169 }; 6170 break; 6171 case "bottom": 6172 coords = { 6173 x: commonX, 6174 y: reference.y + reference.height 6175 }; 6176 break; 6177 case "right": 6178 coords = { 6179 x: reference.x + reference.width, 6180 y: commonY 6181 }; 6182 break; 6183 case "left": 6184 coords = { 6185 x: reference.x - floating.width, 6186 y: commonY 6187 }; 6188 break; 6189 default: 6190 coords = { 6191 x: reference.x, 6192 y: reference.y 6193 }; 6194 } 6195 const alignment = getAlignment(placement); 6196 if (alignment) { 6197 coords[alignmentAxis] += commonAlign * (alignment === "end" ? 1 : -1) * (rtl && isVertical ? -1 : 1); 6198 } 6199 return coords; 6200 } 6201 async function detectOverflow(state, options) { 6202 var _await$platform$isEle; 6203 if (options === void 0) { 6204 options = {}; 6205 } 6206 const { 6207 x, 6208 y, 6209 platform: platform3, 6210 rects, 6211 elements, 6212 strategy 6213 } = state; 6214 const { 6215 boundary = "clippingAncestors", 6216 rootBoundary = "viewport", 6217 elementContext = "floating", 6218 altBoundary = false, 6219 padding = 0 6220 } = evaluate(options, state); 6221 const paddingObject = getPaddingObject(padding); 6222 const altContext = elementContext === "floating" ? "reference" : "floating"; 6223 const element = elements[altBoundary ? altContext : elementContext]; 6224 const clippingClientRect = rectToClientRect(await platform3.getClippingRect({ 6225 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)), 6226 boundary, 6227 rootBoundary, 6228 strategy 6229 })); 6230 const rect = elementContext === "floating" ? { 6231 x, 6232 y, 6233 width: rects.floating.width, 6234 height: rects.floating.height 6235 } : rects.reference; 6236 const offsetParent = await (platform3.getOffsetParent == null ? void 0 : platform3.getOffsetParent(elements.floating)); 6237 const offsetScale = await (platform3.isElement == null ? void 0 : platform3.isElement(offsetParent)) && await (platform3.getScale == null ? void 0 : platform3.getScale(offsetParent)) || { 6238 x: 1, 6239 y: 1 6240 }; 6241 const elementClientRect = rectToClientRect(platform3.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform3.convertOffsetParentRelativeRectToViewportRelativeRect({ 6242 elements, 6243 rect, 6244 offsetParent, 6245 strategy 6246 }) : rect); 6247 return { 6248 top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y, 6249 bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y, 6250 left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x, 6251 right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x 6252 }; 6253 } 6254 var MAX_RESET_COUNT = 50; 6255 var computePosition = async (reference, floating, config) => { 6256 const { 6257 placement = "bottom", 6258 strategy = "absolute", 6259 middleware = [], 6260 platform: platform3 6261 } = config; 6262 const platformWithDetectOverflow = platform3.detectOverflow ? platform3 : { 6263 ...platform3, 6264 detectOverflow 6265 }; 6266 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(floating)); 6267 let rects = await platform3.getElementRects({ 6268 reference, 6269 floating, 6270 strategy 6271 }); 6272 let { 6273 x, 6274 y 6275 } = computeCoordsFromPlacement(rects, placement, rtl); 6276 let statefulPlacement = placement; 6277 let resetCount = 0; 6278 const middlewareData = {}; 6279 for (let i = 0; i < middleware.length; i++) { 6280 const currentMiddleware = middleware[i]; 6281 if (!currentMiddleware) { 6282 continue; 6283 } 6284 const { 6285 name, 6286 fn 6287 } = currentMiddleware; 6288 const { 6289 x: nextX, 6290 y: nextY, 6291 data, 6292 reset 6293 } = await fn({ 6294 x, 6295 y, 6296 initialPlacement: placement, 6297 placement: statefulPlacement, 6298 strategy, 6299 middlewareData, 6300 rects, 6301 platform: platformWithDetectOverflow, 6302 elements: { 6303 reference, 6304 floating 6305 } 6306 }); 6307 x = nextX != null ? nextX : x; 6308 y = nextY != null ? nextY : y; 6309 middlewareData[name] = { 6310 ...middlewareData[name], 6311 ...data 6312 }; 6313 if (reset && resetCount < MAX_RESET_COUNT) { 6314 resetCount++; 6315 if (typeof reset === "object") { 6316 if (reset.placement) { 6317 statefulPlacement = reset.placement; 6318 } 6319 if (reset.rects) { 6320 rects = reset.rects === true ? await platform3.getElementRects({ 6321 reference, 6322 floating, 6323 strategy 6324 }) : reset.rects; 6325 } 6326 ({ 6327 x, 6328 y 6329 } = computeCoordsFromPlacement(rects, statefulPlacement, rtl)); 6330 } 6331 i = -1; 6332 } 6333 } 6334 return { 6335 x, 6336 y, 6337 placement: statefulPlacement, 6338 strategy, 6339 middlewareData 6340 }; 6341 }; 6342 var flip = function(options) { 6343 if (options === void 0) { 6344 options = {}; 6345 } 6346 return { 6347 name: "flip", 6348 options, 6349 async fn(state) { 6350 var _middlewareData$arrow, _middlewareData$flip; 6351 const { 6352 placement, 6353 middlewareData, 6354 rects, 6355 initialPlacement, 6356 platform: platform3, 6357 elements 6358 } = state; 6359 const { 6360 mainAxis: checkMainAxis = true, 6361 crossAxis: checkCrossAxis = true, 6362 fallbackPlacements: specifiedFallbackPlacements, 6363 fallbackStrategy = "bestFit", 6364 fallbackAxisSideDirection = "none", 6365 flipAlignment = true, 6366 ...detectOverflowOptions 6367 } = evaluate(options, state); 6368 if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) { 6369 return {}; 6370 } 6371 const side = getSide(placement); 6372 const initialSideAxis = getSideAxis(initialPlacement); 6373 const isBasePlacement = getSide(initialPlacement) === initialPlacement; 6374 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)); 6375 const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement)); 6376 const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== "none"; 6377 if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) { 6378 fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl)); 6379 } 6380 const placements2 = [initialPlacement, ...fallbackPlacements]; 6381 const overflow = await platform3.detectOverflow(state, detectOverflowOptions); 6382 const overflows = []; 6383 let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || []; 6384 if (checkMainAxis) { 6385 overflows.push(overflow[side]); 6386 } 6387 if (checkCrossAxis) { 6388 const sides2 = getAlignmentSides(placement, rects, rtl); 6389 overflows.push(overflow[sides2[0]], overflow[sides2[1]]); 6390 } 6391 overflowsData = [...overflowsData, { 6392 placement, 6393 overflows 6394 }]; 6395 if (!overflows.every((side2) => side2 <= 0)) { 6396 var _middlewareData$flip2, _overflowsData$filter; 6397 const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1; 6398 const nextPlacement = placements2[nextIndex]; 6399 if (nextPlacement) { 6400 const ignoreCrossAxisOverflow = checkCrossAxis === "alignment" ? initialSideAxis !== getSideAxis(nextPlacement) : false; 6401 if (!ignoreCrossAxisOverflow || // We leave the current main axis only if every placement on that axis 6402 // overflows the main axis. 6403 overflowsData.every((d) => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) { 6404 return { 6405 data: { 6406 index: nextIndex, 6407 overflows: overflowsData 6408 }, 6409 reset: { 6410 placement: nextPlacement 6411 } 6412 }; 6413 } 6414 } 6415 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; 6416 if (!resetPlacement) { 6417 switch (fallbackStrategy) { 6418 case "bestFit": { 6419 var _overflowsData$filter2; 6420 const placement2 = (_overflowsData$filter2 = overflowsData.filter((d) => { 6421 if (hasFallbackAxisSideDirection) { 6422 const currentSideAxis = getSideAxis(d.placement); 6423 return currentSideAxis === initialSideAxis || // Create a bias to the `y` side axis due to horizontal 6424 // reading directions favoring greater width. 6425 currentSideAxis === "y"; 6426 } 6427 return true; 6428 }).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]; 6429 if (placement2) { 6430 resetPlacement = placement2; 6431 } 6432 break; 6433 } 6434 case "initialPlacement": 6435 resetPlacement = initialPlacement; 6436 break; 6437 } 6438 } 6439 if (placement !== resetPlacement) { 6440 return { 6441 reset: { 6442 placement: resetPlacement 6443 } 6444 }; 6445 } 6446 } 6447 return {}; 6448 } 6449 }; 6450 }; 6451 var originSides = /* @__PURE__ */ new Set(["left", "top"]); 6452 async function convertValueToCoords(state, options) { 6453 const { 6454 placement, 6455 platform: platform3, 6456 elements 6457 } = state; 6458 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)); 6459 const side = getSide(placement); 6460 const alignment = getAlignment(placement); 6461 const isVertical = getSideAxis(placement) === "y"; 6462 const mainAxisMulti = originSides.has(side) ? -1 : 1; 6463 const crossAxisMulti = rtl && isVertical ? -1 : 1; 6464 const rawValue = evaluate(options, state); 6465 let { 6466 mainAxis, 6467 crossAxis, 6468 alignmentAxis 6469 } = typeof rawValue === "number" ? { 6470 mainAxis: rawValue, 6471 crossAxis: 0, 6472 alignmentAxis: null 6473 } : { 6474 mainAxis: rawValue.mainAxis || 0, 6475 crossAxis: rawValue.crossAxis || 0, 6476 alignmentAxis: rawValue.alignmentAxis 6477 }; 6478 if (alignment && typeof alignmentAxis === "number") { 6479 crossAxis = alignment === "end" ? alignmentAxis * -1 : alignmentAxis; 6480 } 6481 return isVertical ? { 6482 x: crossAxis * crossAxisMulti, 6483 y: mainAxis * mainAxisMulti 6484 } : { 6485 x: mainAxis * mainAxisMulti, 6486 y: crossAxis * crossAxisMulti 6487 }; 6488 } 6489 var offset = function(options) { 6490 if (options === void 0) { 6491 options = 0; 6492 } 6493 return { 6494 name: "offset", 6495 options, 6496 async fn(state) { 6497 var _middlewareData$offse, _middlewareData$arrow; 6498 const { 6499 x, 6500 y, 6501 placement, 6502 middlewareData 6503 } = state; 6504 const diffCoords = await convertValueToCoords(state, options); 6505 if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) { 6506 return {}; 6507 } 6508 return { 6509 x: x + diffCoords.x, 6510 y: y + diffCoords.y, 6511 data: { 6512 ...diffCoords, 6513 placement 6514 } 6515 }; 6516 } 6517 }; 6518 }; 6519 var shift = function(options) { 6520 if (options === void 0) { 6521 options = {}; 6522 } 6523 return { 6524 name: "shift", 6525 options, 6526 async fn(state) { 6527 const { 6528 x, 6529 y, 6530 placement, 6531 platform: platform3 6532 } = state; 6533 const { 6534 mainAxis: checkMainAxis = true, 6535 crossAxis: checkCrossAxis = false, 6536 limiter = { 6537 fn: (_ref) => { 6538 let { 6539 x: x2, 6540 y: y2 6541 } = _ref; 6542 return { 6543 x: x2, 6544 y: y2 6545 }; 6546 } 6547 }, 6548 ...detectOverflowOptions 6549 } = evaluate(options, state); 6550 const coords = { 6551 x, 6552 y 6553 }; 6554 const overflow = await platform3.detectOverflow(state, detectOverflowOptions); 6555 const crossAxis = getSideAxis(placement); 6556 const mainAxis = getOppositeAxis(crossAxis); 6557 let mainAxisCoord = coords[mainAxis]; 6558 let crossAxisCoord = coords[crossAxis]; 6559 const clampCoord = (axis, coord) => clamp(coord + overflow[axis === "y" ? "top" : "left"], coord, coord - overflow[axis === "y" ? "bottom" : "right"]); 6560 if (checkMainAxis) { 6561 mainAxisCoord = clampCoord(mainAxis, mainAxisCoord); 6562 } 6563 if (checkCrossAxis) { 6564 crossAxisCoord = clampCoord(crossAxis, crossAxisCoord); 6565 } 6566 const limitedCoords = limiter.fn({ 6567 ...state, 6568 [mainAxis]: mainAxisCoord, 6569 [crossAxis]: crossAxisCoord 6570 }); 6571 return { 6572 ...limitedCoords, 6573 data: { 6574 x: limitedCoords.x - x, 6575 y: limitedCoords.y - y, 6576 enabled: { 6577 [mainAxis]: checkMainAxis, 6578 [crossAxis]: checkCrossAxis 6579 } 6580 } 6581 }; 6582 } 6583 }; 6584 }; 6585 var limitShift = function(options) { 6586 if (options === void 0) { 6587 options = {}; 6588 } 6589 return { 6590 options, 6591 fn(state) { 6592 var _rawOffset$mainAxis, _rawOffset$crossAxis; 6593 const { 6594 x, 6595 y, 6596 placement, 6597 rects, 6598 middlewareData 6599 } = state; 6600 const { 6601 offset: offset4 = 0, 6602 mainAxis: checkMainAxis = true, 6603 crossAxis: checkCrossAxis = true 6604 } = evaluate(options, state); 6605 const coords = { 6606 x, 6607 y 6608 }; 6609 const crossAxis = getSideAxis(placement); 6610 const mainAxis = getOppositeAxis(crossAxis); 6611 let mainAxisCoord = coords[mainAxis]; 6612 let crossAxisCoord = coords[crossAxis]; 6613 const rawOffset = evaluate(offset4, state); 6614 const computedOffset = typeof rawOffset === "number" ? { 6615 mainAxis: rawOffset, 6616 crossAxis: 0 6617 } : { 6618 mainAxis: (_rawOffset$mainAxis = rawOffset.mainAxis) != null ? _rawOffset$mainAxis : 0, 6619 crossAxis: (_rawOffset$crossAxis = rawOffset.crossAxis) != null ? _rawOffset$crossAxis : 0 6620 }; 6621 if (checkMainAxis) { 6622 const len = mainAxis === "y" ? "height" : "width"; 6623 const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis; 6624 const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis; 6625 if (mainAxisCoord < limitMin) { 6626 mainAxisCoord = limitMin; 6627 } else if (mainAxisCoord > limitMax) { 6628 mainAxisCoord = limitMax; 6629 } 6630 } 6631 if (checkCrossAxis) { 6632 var _middlewareData$offse, _middlewareData$offse2; 6633 const len = mainAxis === "y" ? "width" : "height"; 6634 const isOriginSide = originSides.has(getSide(placement)); 6635 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); 6636 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); 6637 if (crossAxisCoord < limitMin) { 6638 crossAxisCoord = limitMin; 6639 } else if (crossAxisCoord > limitMax) { 6640 crossAxisCoord = limitMax; 6641 } 6642 } 6643 return { 6644 [mainAxis]: mainAxisCoord, 6645 [crossAxis]: crossAxisCoord 6646 }; 6647 } 6648 }; 6649 }; 6650 var size = function(options) { 6651 if (options === void 0) { 6652 options = {}; 6653 } 6654 return { 6655 name: "size", 6656 options, 6657 async fn(state) { 6658 const { 6659 placement, 6660 rects, 6661 platform: platform3, 6662 elements 6663 } = state; 6664 const { 6665 apply = () => { 6666 }, 6667 ...detectOverflowOptions 6668 } = evaluate(options, state); 6669 const overflow = await platform3.detectOverflow(state, detectOverflowOptions); 6670 const side = getSide(placement); 6671 const alignment = getAlignment(placement); 6672 const isYAxis = getSideAxis(placement) === "y"; 6673 const { 6674 width, 6675 height 6676 } = rects.floating; 6677 let heightSide; 6678 let widthSide; 6679 if (side === "top" || side === "bottom") { 6680 heightSide = side; 6681 widthSide = alignment === (await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)) ? "start" : "end") ? "left" : "right"; 6682 } else { 6683 widthSide = side; 6684 heightSide = alignment === "end" ? "top" : "bottom"; 6685 } 6686 const maximumClippingHeight = height - overflow.top - overflow.bottom; 6687 const maximumClippingWidth = width - overflow.left - overflow.right; 6688 const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight); 6689 const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth); 6690 const shiftData = state.middlewareData.shift; 6691 const noShift = !shiftData; 6692 let availableHeight2 = overflowAvailableHeight; 6693 let availableWidth2 = overflowAvailableWidth; 6694 if (shiftData != null && shiftData.enabled.x) { 6695 availableWidth2 = maximumClippingWidth; 6696 } 6697 if (shiftData != null && shiftData.enabled.y) { 6698 availableHeight2 = maximumClippingHeight; 6699 } 6700 if (noShift && !alignment) { 6701 if (isYAxis) { 6702 availableWidth2 = width - 2 * max(overflow.left, overflow.right); 6703 } else { 6704 availableHeight2 = height - 2 * max(overflow.top, overflow.bottom); 6705 } 6706 } 6707 await apply({ 6708 ...state, 6709 availableWidth: availableWidth2, 6710 availableHeight: availableHeight2 6711 }); 6712 const nextDimensions = await platform3.getDimensions(elements.floating); 6713 if (width !== nextDimensions.width || height !== nextDimensions.height) { 6714 return { 6715 reset: { 6716 rects: true 6717 } 6718 }; 6719 } 6720 return {}; 6721 } 6722 }; 6723 }; 6724 6725 // node_modules/.store/@floating-ui/dom@1.8.0-vHXcr4FgWneV0cgwFw-d7A/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs 6726 function getCssDimensions(element) { 6727 const css = getComputedStyle2(element); 6728 let width = parseFloat(css.width) || 0; 6729 let height = parseFloat(css.height) || 0; 6730 const hasOffset = isHTMLElement(element); 6731 const offsetWidth = hasOffset ? element.offsetWidth : width; 6732 const offsetHeight = hasOffset ? element.offsetHeight : height; 6733 const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight; 6734 if (shouldFallback) { 6735 width = offsetWidth; 6736 height = offsetHeight; 6737 } 6738 return { 6739 width, 6740 height, 6741 $: shouldFallback 6742 }; 6743 } 6744 function unwrapElement(element) { 6745 return !isElement(element) ? element.contextElement : element; 6746 } 6747 function getScale(element) { 6748 const domElement = unwrapElement(element); 6749 if (!isHTMLElement(domElement)) { 6750 return createCoords(1); 6751 } 6752 const rect = domElement.getBoundingClientRect(); 6753 const { 6754 width, 6755 height, 6756 $ 6757 } = getCssDimensions(domElement); 6758 let x = ($ ? round(rect.width) : rect.width) / width; 6759 let y = ($ ? round(rect.height) : rect.height) / height; 6760 if (!x || !Number.isFinite(x)) { 6761 x = 1; 6762 } 6763 if (!y || !Number.isFinite(y)) { 6764 y = 1; 6765 } 6766 return { 6767 x, 6768 y 6769 }; 6770 } 6771 var noOffsets = /* @__PURE__ */ createCoords(0); 6772 function getVisualOffsets(element) { 6773 const win = getWindow(element); 6774 if (!isWebKit() || !win.visualViewport) { 6775 return noOffsets; 6776 } 6777 return { 6778 x: win.visualViewport.offsetLeft, 6779 y: win.visualViewport.offsetTop 6780 }; 6781 } 6782 function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) { 6783 if (isFixed === void 0) { 6784 isFixed = false; 6785 } 6786 return !!floatingOffsetParent && isFixed && floatingOffsetParent === getWindow(element); 6787 } 6788 function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) { 6789 if (includeScale === void 0) { 6790 includeScale = false; 6791 } 6792 if (isFixedStrategy === void 0) { 6793 isFixedStrategy = false; 6794 } 6795 const clientRect = element.getBoundingClientRect(); 6796 const domElement = unwrapElement(element); 6797 let scale = createCoords(1); 6798 if (includeScale) { 6799 if (offsetParent) { 6800 if (isElement(offsetParent)) { 6801 scale = getScale(offsetParent); 6802 } 6803 } else { 6804 scale = getScale(element); 6805 } 6806 } 6807 const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0); 6808 let x = (clientRect.left + visualOffsets.x) / scale.x; 6809 let y = (clientRect.top + visualOffsets.y) / scale.y; 6810 let width = clientRect.width / scale.x; 6811 let height = clientRect.height / scale.y; 6812 if (domElement && offsetParent) { 6813 const win = getWindow(domElement); 6814 const offsetWin = isElement(offsetParent) ? getWindow(offsetParent) : offsetParent; 6815 let currentWin = win; 6816 let currentIFrame = getFrameElement(currentWin); 6817 while (currentIFrame && offsetWin !== currentWin) { 6818 const iframeScale = getScale(currentIFrame); 6819 const iframeRect = currentIFrame.getBoundingClientRect(); 6820 const css = getComputedStyle2(currentIFrame); 6821 const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x; 6822 const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y; 6823 x *= iframeScale.x; 6824 y *= iframeScale.y; 6825 width *= iframeScale.x; 6826 height *= iframeScale.y; 6827 x += left; 6828 y += top; 6829 currentWin = getWindow(currentIFrame); 6830 currentIFrame = getFrameElement(currentWin); 6831 } 6832 } 6833 return rectToClientRect({ 6834 width, 6835 height, 6836 x, 6837 y 6838 }); 6839 } 6840 function getWindowScrollBarX(element, rect) { 6841 const leftScroll = getNodeScroll(element).scrollLeft; 6842 if (!rect) { 6843 return getBoundingClientRect(getDocumentElement(element)).left + leftScroll; 6844 } 6845 return rect.left + leftScroll; 6846 } 6847 function getHTMLOffset(documentElement, scroll) { 6848 const htmlRect = documentElement.getBoundingClientRect(); 6849 const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect); 6850 const y = htmlRect.top + scroll.scrollTop; 6851 return { 6852 x, 6853 y 6854 }; 6855 } 6856 function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) { 6857 let { 6858 elements, 6859 rect, 6860 offsetParent, 6861 strategy 6862 } = _ref; 6863 const isFixed = strategy === "fixed"; 6864 const documentElement = getDocumentElement(offsetParent); 6865 const topLayer = elements ? isTopLayer(elements.floating) : false; 6866 if (offsetParent === documentElement || topLayer && isFixed) { 6867 return rect; 6868 } 6869 let scroll = { 6870 scrollLeft: 0, 6871 scrollTop: 0 6872 }; 6873 let scale = createCoords(1); 6874 const offsets = createCoords(0); 6875 const isOffsetParentAnElement = isHTMLElement(offsetParent); 6876 if (isOffsetParentAnElement || !isFixed) { 6877 if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) { 6878 scroll = getNodeScroll(offsetParent); 6879 } 6880 if (isOffsetParentAnElement) { 6881 const offsetRect = getBoundingClientRect(offsetParent); 6882 scale = getScale(offsetParent); 6883 offsets.x = offsetRect.x + offsetParent.clientLeft; 6884 offsets.y = offsetRect.y + offsetParent.clientTop; 6885 } 6886 } 6887 const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0); 6888 return { 6889 width: rect.width * scale.x, 6890 height: rect.height * scale.y, 6891 x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x, 6892 y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y 6893 }; 6894 } 6895 function getClientRects(element) { 6896 return element.getClientRects ? Array.from(element.getClientRects()) : []; 6897 } 6898 function getDocumentRect(html) { 6899 const scroll = getNodeScroll(html); 6900 const body = html.ownerDocument.body; 6901 const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth); 6902 const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight); 6903 let x = -scroll.scrollLeft + getWindowScrollBarX(html); 6904 const y = -scroll.scrollTop; 6905 if (getComputedStyle2(body).direction === "rtl") { 6906 x += max(html.clientWidth, body.clientWidth) - width; 6907 } 6908 return { 6909 width, 6910 height, 6911 x, 6912 y 6913 }; 6914 } 6915 var SCROLLBAR_MAX = 25; 6916 function getViewportRect(element, strategy, rootBoundary) { 6917 if (rootBoundary === void 0) { 6918 rootBoundary = "viewport"; 6919 } 6920 const isLayoutViewport = rootBoundary === "layoutViewport"; 6921 const win = getWindow(element); 6922 const html = getDocumentElement(element); 6923 const visualViewport = win.visualViewport; 6924 let width = html.clientWidth; 6925 let height = html.clientHeight; 6926 let x = 0; 6927 let y = 0; 6928 if (visualViewport) { 6929 const layoutRelativeClientCoords = !isWebKit() || strategy === "fixed"; 6930 if (isLayoutViewport) { 6931 if (!layoutRelativeClientCoords) { 6932 x = -visualViewport.offsetLeft; 6933 y = -visualViewport.offsetTop; 6934 } 6935 } else { 6936 width = visualViewport.width; 6937 height = visualViewport.height; 6938 if (layoutRelativeClientCoords) { 6939 x = visualViewport.offsetLeft; 6940 y = visualViewport.offsetTop; 6941 } 6942 } 6943 } 6944 const windowScrollbarX = getWindowScrollBarX(html); 6945 if (windowScrollbarX <= 0) { 6946 const doc = html.ownerDocument; 6947 const body = doc.body; 6948 const bodyStyles = getComputedStyle(body); 6949 const bodyMarginInline = doc.compatMode === "CSS1Compat" ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0; 6950 const reservedWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline); 6951 const gutter = getComputedStyle(html).scrollbarGutter === "stable both-edges" ? reservedWidth / 2 : reservedWidth; 6952 if (gutter <= SCROLLBAR_MAX) { 6953 width -= gutter; 6954 } 6955 } 6956 return { 6957 width, 6958 height, 6959 x, 6960 y 6961 }; 6962 } 6963 function getInnerBoundingClientRect(element, strategy) { 6964 const clientRect = getBoundingClientRect(element, true, strategy === "fixed"); 6965 const top = clientRect.top + element.clientTop; 6966 const left = clientRect.left + element.clientLeft; 6967 const scale = getScale(element); 6968 const width = element.clientWidth * scale.x; 6969 const height = element.clientHeight * scale.y; 6970 const x = left * scale.x; 6971 const y = top * scale.y; 6972 return { 6973 width, 6974 height, 6975 x, 6976 y 6977 }; 6978 } 6979 function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) { 6980 let rect; 6981 if (clippingAncestor === "viewport" || clippingAncestor === "layoutViewport") { 6982 rect = getViewportRect(element, strategy, clippingAncestor); 6983 } else if (clippingAncestor === "document") { 6984 rect = getDocumentRect(getDocumentElement(element)); 6985 } else if (isElement(clippingAncestor)) { 6986 rect = getInnerBoundingClientRect(clippingAncestor, strategy); 6987 } else { 6988 const visualOffsets = getVisualOffsets(element); 6989 rect = { 6990 x: clippingAncestor.x - visualOffsets.x, 6991 y: clippingAncestor.y - visualOffsets.y, 6992 width: clippingAncestor.width, 6993 height: clippingAncestor.height 6994 }; 6995 } 6996 return rectToClientRect(rect); 6997 } 6998 function getClippingElementAncestors(element, cache) { 6999 const cachedResult = cache.get(element); 7000 if (cachedResult) { 7001 return cachedResult; 7002 } 7003 let result = getOverflowAncestors(element, [], false).filter((el) => isElement(el) && getNodeName(el) !== "body"); 7004 let lastKeptComputedStyle = null; 7005 const elementIsFixed = getComputedStyle2(element).position === "fixed"; 7006 let currentNode = elementIsFixed ? getParentNode(element) : element; 7007 while (isElement(currentNode) && !isLastTraversableNode(currentNode)) { 7008 const computedStyle = getComputedStyle2(currentNode); 7009 const currentNodeIsContaining = isContainingBlock(currentNode); 7010 const lastPosition = lastKeptComputedStyle ? lastKeptComputedStyle.position : elementIsFixed ? "fixed" : ""; 7011 const shouldDropCurrentNode = !currentNodeIsContaining && (lastPosition === "fixed" || lastPosition === "absolute" && computedStyle.position === "static"); 7012 if (shouldDropCurrentNode) { 7013 result = result.filter((ancestor) => ancestor !== currentNode); 7014 } else { 7015 lastKeptComputedStyle = computedStyle; 7016 } 7017 currentNode = getParentNode(currentNode); 7018 } 7019 cache.set(element, result); 7020 return result; 7021 } 7022 function getClippingRect(_ref) { 7023 let { 7024 element, 7025 boundary, 7026 rootBoundary, 7027 strategy 7028 } = _ref; 7029 const elementClippingAncestors = boundary === "clippingAncestors" ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary); 7030 const clippingAncestors = [...elementClippingAncestors, rootBoundary]; 7031 const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy); 7032 let top = firstRect.top; 7033 let right = firstRect.right; 7034 let bottom = firstRect.bottom; 7035 let left = firstRect.left; 7036 for (let i = 1; i < clippingAncestors.length; i++) { 7037 const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy); 7038 top = max(rect.top, top); 7039 right = min(rect.right, right); 7040 bottom = min(rect.bottom, bottom); 7041 left = max(rect.left, left); 7042 } 7043 return { 7044 width: right - left, 7045 height: bottom - top, 7046 x: left, 7047 y: top 7048 }; 7049 } 7050 function getDimensions(element) { 7051 const { 7052 width, 7053 height 7054 } = getCssDimensions(element); 7055 return { 7056 width, 7057 height 7058 }; 7059 } 7060 function getRectRelativeToOffsetParent(element, offsetParent, strategy) { 7061 const isOffsetParentAnElement = isHTMLElement(offsetParent); 7062 const documentElement = getDocumentElement(offsetParent); 7063 const isFixed = strategy === "fixed"; 7064 const rect = getBoundingClientRect(element, true, isFixed, offsetParent); 7065 let scroll = { 7066 scrollLeft: 0, 7067 scrollTop: 0 7068 }; 7069 const offsets = createCoords(0); 7070 if (isOffsetParentAnElement || !isFixed) { 7071 if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) { 7072 scroll = getNodeScroll(offsetParent); 7073 } 7074 if (isOffsetParentAnElement) { 7075 const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent); 7076 offsets.x = offsetRect.x + offsetParent.clientLeft; 7077 offsets.y = offsetRect.y + offsetParent.clientTop; 7078 } 7079 } 7080 if (!isOffsetParentAnElement && documentElement) { 7081 offsets.x = getWindowScrollBarX(documentElement); 7082 } 7083 const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0); 7084 const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x; 7085 const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y; 7086 return { 7087 x, 7088 y, 7089 width: rect.width, 7090 height: rect.height 7091 }; 7092 } 7093 function isStaticPositioned(element) { 7094 return getComputedStyle2(element).position === "static"; 7095 } 7096 function getTrueOffsetParent(element, polyfill) { 7097 if (!isHTMLElement(element) || getComputedStyle2(element).position === "fixed") { 7098 return null; 7099 } 7100 if (polyfill) { 7101 return polyfill(element); 7102 } 7103 let rawOffsetParent = element.offsetParent; 7104 if (getDocumentElement(element) === rawOffsetParent) { 7105 rawOffsetParent = rawOffsetParent.ownerDocument.body; 7106 } 7107 return rawOffsetParent; 7108 } 7109 function getOffsetParent(element, polyfill) { 7110 const win = getWindow(element); 7111 if (isTopLayer(element)) { 7112 return win; 7113 } 7114 if (!isHTMLElement(element)) { 7115 let svgOffsetParent = getParentNode(element); 7116 while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) { 7117 if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) { 7118 return svgOffsetParent; 7119 } 7120 svgOffsetParent = getParentNode(svgOffsetParent); 7121 } 7122 return win; 7123 } 7124 let offsetParent = getTrueOffsetParent(element, polyfill); 7125 while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) { 7126 offsetParent = getTrueOffsetParent(offsetParent, polyfill); 7127 } 7128 if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) { 7129 return win; 7130 } 7131 return offsetParent || getContainingBlock(element) || win; 7132 } 7133 var getElementRects = async function(data) { 7134 const getOffsetParentFn = this.getOffsetParent || getOffsetParent; 7135 const getDimensionsFn = this.getDimensions; 7136 const floatingDimensions = await getDimensionsFn(data.floating); 7137 return { 7138 reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy), 7139 floating: { 7140 x: 0, 7141 y: 0, 7142 width: floatingDimensions.width, 7143 height: floatingDimensions.height 7144 } 7145 }; 7146 }; 7147 function isRTL(element) { 7148 return getComputedStyle2(element).direction === "rtl"; 7149 } 7150 var platform2 = { 7151 convertOffsetParentRelativeRectToViewportRelativeRect, 7152 getDocumentElement, 7153 getClippingRect, 7154 getOffsetParent, 7155 getElementRects, 7156 getClientRects, 7157 getDimensions, 7158 getScale, 7159 isElement, 7160 isRTL 7161 }; 7162 function rectsAreEqual(a, b) { 7163 return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height; 7164 } 7165 function observeMove(element, onMove, ancestorResize) { 7166 let io = null; 7167 let timeoutId; 7168 const root = getDocumentElement(element); 7169 function cleanup() { 7170 var _io; 7171 clearTimeout(timeoutId); 7172 (_io = io) == null || _io.disconnect(); 7173 io = null; 7174 } 7175 function refresh(skip, threshold) { 7176 if (skip === void 0) { 7177 skip = false; 7178 } 7179 if (threshold === void 0) { 7180 threshold = 1; 7181 } 7182 cleanup(); 7183 const elementRectForRootMargin = element.getBoundingClientRect(); 7184 const { 7185 left, 7186 top, 7187 width, 7188 height 7189 } = elementRectForRootMargin; 7190 if (!skip) { 7191 onMove(); 7192 } 7193 if (!width || !height) { 7194 return; 7195 } 7196 const insetTop = floor(top); 7197 const insetRight = floor(root.clientWidth - (left + width)); 7198 const insetBottom = floor(root.clientHeight - (top + height)); 7199 const insetLeft = floor(left); 7200 const rootMargin = -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px"; 7201 const options = { 7202 rootMargin, 7203 threshold: max(0, min(1, threshold)) || 1 7204 }; 7205 let isFirstUpdate = true; 7206 function handleObserve(entries) { 7207 const ratio = entries[0].intersectionRatio; 7208 if (!rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) { 7209 return refresh(); 7210 } 7211 if (ratio !== threshold) { 7212 if (!isFirstUpdate) { 7213 return refresh(); 7214 } 7215 if (!ratio) { 7216 timeoutId = setTimeout(() => { 7217 refresh(false, 1e-7); 7218 }, 1e3); 7219 } else { 7220 refresh(false, ratio); 7221 } 7222 } 7223 isFirstUpdate = false; 7224 } 7225 try { 7226 io = new IntersectionObserver(handleObserve, { 7227 ...options, 7228 // Handle <iframe>s 7229 root: root.ownerDocument 7230 }); 7231 } catch (_e) { 7232 io = new IntersectionObserver(handleObserve, options); 7233 } 7234 io.observe(element); 7235 } 7236 const win = getWindow(element); 7237 const handleResize = () => refresh(ancestorResize); 7238 win.addEventListener("resize", handleResize); 7239 refresh(true); 7240 return () => { 7241 win.removeEventListener("resize", handleResize); 7242 cleanup(); 7243 }; 7244 } 7245 function autoUpdate(reference, floating, update2, options) { 7246 if (options === void 0) { 7247 options = {}; 7248 } 7249 const { 7250 ancestorScroll = true, 7251 ancestorResize = true, 7252 elementResize = typeof ResizeObserver === "function", 7253 layoutShift = typeof IntersectionObserver === "function", 7254 animationFrame = false 7255 } = options; 7256 const referenceEl = unwrapElement(reference); 7257 const ancestors = ancestorScroll || ancestorResize ? [...referenceEl ? getOverflowAncestors(referenceEl) : [], ...floating ? getOverflowAncestors(floating) : []] : []; 7258 ancestors.forEach((ancestor) => { 7259 ancestorScroll && ancestor.addEventListener("scroll", update2); 7260 ancestorResize && ancestor.addEventListener("resize", update2); 7261 }); 7262 const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update2, ancestorResize) : null; 7263 let reobserveFrame = -1; 7264 let resizeObserver = null; 7265 if (elementResize) { 7266 resizeObserver = new ResizeObserver((_ref) => { 7267 let [firstEntry] = _ref; 7268 if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) { 7269 resizeObserver.unobserve(floating); 7270 cancelAnimationFrame(reobserveFrame); 7271 reobserveFrame = requestAnimationFrame(() => { 7272 var _resizeObserver; 7273 (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating); 7274 }); 7275 } 7276 update2(); 7277 }); 7278 if (referenceEl && !animationFrame) { 7279 resizeObserver.observe(referenceEl); 7280 } 7281 if (floating) { 7282 resizeObserver.observe(floating); 7283 } 7284 } 7285 let frameId; 7286 let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null; 7287 if (animationFrame) { 7288 frameLoop(); 7289 } 7290 function frameLoop() { 7291 const nextRefRect = getBoundingClientRect(reference); 7292 if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) { 7293 update2(); 7294 } 7295 prevRefRect = nextRefRect; 7296 frameId = requestAnimationFrame(frameLoop); 7297 } 7298 update2(); 7299 return () => { 7300 var _resizeObserver2; 7301 ancestors.forEach((ancestor) => { 7302 ancestorScroll && ancestor.removeEventListener("scroll", update2); 7303 ancestorResize && ancestor.removeEventListener("resize", update2); 7304 }); 7305 cleanupIo == null || cleanupIo(); 7306 (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect(); 7307 resizeObserver = null; 7308 if (animationFrame) { 7309 cancelAnimationFrame(frameId); 7310 } 7311 }; 7312 } 7313 var offset2 = offset; 7314 var shift2 = shift; 7315 var flip2 = flip; 7316 var size2 = size; 7317 var limitShift2 = limitShift; 7318 var computePosition2 = (reference, floating, options) => { 7319 const cache = /* @__PURE__ */ new Map(); 7320 const mergedOptions = options != null ? options : {}; 7321 const platformWithCache = { 7322 ...platform2, 7323 ...mergedOptions.platform, 7324 _c: cache 7325 }; 7326 return computePosition(reference, floating, { 7327 ...mergedOptions, 7328 platform: platformWithCache 7329 }); 7330 }; 7331 7332 // node_modules/.store/@floating-ui/react-dom@2.1.9-AxWcAwqlMfOrAFOinFKSVg/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs 7333 var React30 = __toESM(require_react(), 1); 7334 var import_react2 = __toESM(require_react(), 1); 7335 var ReactDOM5 = __toESM(require_react_dom(), 1); 7336 var isClient = typeof document !== "undefined"; 7337 var noop2 = function noop3() { 7338 }; 7339 var index = isClient ? import_react2.useLayoutEffect : noop2; 7340 function deepEqual(a, b) { 7341 if (a === b) { 7342 return true; 7343 } 7344 if (typeof a !== typeof b) { 7345 return false; 7346 } 7347 if (typeof a === "function" && a.toString() === b.toString()) { 7348 return true; 7349 } 7350 let length; 7351 let i; 7352 let keys; 7353 if (a && b && typeof a === "object") { 7354 if (Array.isArray(a)) { 7355 length = a.length; 7356 if (length !== b.length) return false; 7357 for (i = length; i-- !== 0; ) { 7358 if (!deepEqual(a[i], b[i])) { 7359 return false; 7360 } 7361 } 7362 return true; 7363 } 7364 keys = Object.keys(a); 7365 length = keys.length; 7366 if (length !== Object.keys(b).length) { 7367 return false; 7368 } 7369 for (i = length; i-- !== 0; ) { 7370 if (!{}.hasOwnProperty.call(b, keys[i])) { 7371 return false; 7372 } 7373 } 7374 for (i = length; i-- !== 0; ) { 7375 const key = keys[i]; 7376 if (key === "_owner" && a.$$typeof) { 7377 continue; 7378 } 7379 if (!deepEqual(a[key], b[key])) { 7380 return false; 7381 } 7382 } 7383 return true; 7384 } 7385 return a !== a && b !== b; 7386 } 7387 function getDPR(element) { 7388 if (typeof window === "undefined") { 7389 return 1; 7390 } 7391 const win = element.ownerDocument.defaultView || window; 7392 return win.devicePixelRatio || 1; 7393 } 7394 function roundByDPR(element, value) { 7395 const dpr = getDPR(element); 7396 return Math.round(value * dpr) / dpr; 7397 } 7398 function useLatestRef(value) { 7399 const ref = React30.useRef(value); 7400 index(() => { 7401 ref.current = value; 7402 }); 7403 return ref; 7404 } 7405 function useFloating(options) { 7406 if (options === void 0) { 7407 options = {}; 7408 } 7409 const { 7410 placement = "bottom", 7411 strategy = "absolute", 7412 middleware = [], 7413 platform: platform3, 7414 elements: { 7415 reference: externalReference, 7416 floating: externalFloating 7417 } = {}, 7418 transform = true, 7419 whileElementsMounted, 7420 open: open2 7421 } = options; 7422 const [data, setData] = React30.useState({ 7423 x: 0, 7424 y: 0, 7425 strategy, 7426 placement, 7427 middlewareData: {}, 7428 isPositioned: false 7429 }); 7430 const [latestMiddleware, setLatestMiddleware] = React30.useState(middleware); 7431 if (!deepEqual(latestMiddleware, middleware)) { 7432 setLatestMiddleware(middleware); 7433 } 7434 const [_reference, _setReference] = React30.useState(null); 7435 const [_floating, _setFloating] = React30.useState(null); 7436 const setReference = React30.useCallback((node) => { 7437 if (node !== referenceRef.current) { 7438 referenceRef.current = node; 7439 _setReference(node); 7440 } 7441 }, []); 7442 const setFloating = React30.useCallback((node) => { 7443 if (node !== floatingRef.current) { 7444 floatingRef.current = node; 7445 _setFloating(node); 7446 } 7447 }, []); 7448 const referenceEl = externalReference || _reference; 7449 const floatingEl = externalFloating || _floating; 7450 const referenceRef = React30.useRef(null); 7451 const floatingRef = React30.useRef(null); 7452 const dataRef = React30.useRef(data); 7453 const hasWhileElementsMounted = whileElementsMounted != null; 7454 const whileElementsMountedRef = useLatestRef(whileElementsMounted); 7455 const platformRef = useLatestRef(platform3); 7456 const openRef = useLatestRef(open2); 7457 const update2 = React30.useCallback(() => { 7458 if (!referenceRef.current || !floatingRef.current) { 7459 return; 7460 } 7461 const config = { 7462 placement, 7463 strategy, 7464 middleware: latestMiddleware 7465 }; 7466 if (platformRef.current) { 7467 config.platform = platformRef.current; 7468 } 7469 computePosition2(referenceRef.current, floatingRef.current, config).then((data2) => { 7470 const fullData = { 7471 ...data2, 7472 // The floating element's position may be recomputed while it's closed 7473 // but still mounted (such as when transitioning out). To ensure 7474 // `isPositioned` will be `false` initially on the next open, avoid 7475 // setting it to `true` when `open === false` (must be specified). 7476 isPositioned: openRef.current !== false 7477 }; 7478 if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) { 7479 dataRef.current = fullData; 7480 ReactDOM5.flushSync(() => { 7481 setData(fullData); 7482 }); 7483 } 7484 }); 7485 }, [latestMiddleware, placement, strategy, platformRef, openRef]); 7486 index(() => { 7487 if (open2 === false && dataRef.current.isPositioned) { 7488 dataRef.current.isPositioned = false; 7489 setData((data2) => ({ 7490 ...data2, 7491 isPositioned: false 7492 })); 7493 } 7494 }, [open2]); 7495 const isMountedRef = React30.useRef(false); 7496 index(() => { 7497 isMountedRef.current = true; 7498 return () => { 7499 isMountedRef.current = false; 7500 }; 7501 }, []); 7502 index(() => { 7503 if (referenceEl) referenceRef.current = referenceEl; 7504 if (floatingEl) floatingRef.current = floatingEl; 7505 if (referenceEl && floatingEl) { 7506 if (whileElementsMountedRef.current) { 7507 return whileElementsMountedRef.current(referenceEl, floatingEl, update2); 7508 } 7509 update2(); 7510 } 7511 }, [referenceEl, floatingEl, update2, whileElementsMountedRef, hasWhileElementsMounted]); 7512 const refs = React30.useMemo(() => ({ 7513 reference: referenceRef, 7514 floating: floatingRef, 7515 setReference, 7516 setFloating 7517 }), [setReference, setFloating]); 7518 const elements = React30.useMemo(() => ({ 7519 reference: referenceEl, 7520 floating: floatingEl 7521 }), [referenceEl, floatingEl]); 7522 const floatingStyles = React30.useMemo(() => { 7523 const initialStyles = { 7524 position: strategy, 7525 left: 0, 7526 top: 0 7527 }; 7528 if (!elements.floating) { 7529 return initialStyles; 7530 } 7531 const x = roundByDPR(elements.floating, data.x); 7532 const y = roundByDPR(elements.floating, data.y); 7533 if (transform) { 7534 return { 7535 ...initialStyles, 7536 transform: "translate(" + x + "px, " + y + "px)", 7537 ...getDPR(elements.floating) >= 1.5 && { 7538 willChange: "transform" 7539 } 7540 }; 7541 } 7542 return { 7543 position: strategy, 7544 left: x, 7545 top: y 7546 }; 7547 }, [strategy, transform, elements.floating, data.x, data.y]); 7548 return React30.useMemo(() => ({ 7549 ...data, 7550 update: update2, 7551 refs, 7552 elements, 7553 floatingStyles 7554 }), [data, update2, refs, elements, floatingStyles]); 7555 } 7556 var offset3 = (options, deps) => { 7557 const result = offset2(options); 7558 return { 7559 name: result.name, 7560 fn: result.fn, 7561 options: [options, deps] 7562 }; 7563 }; 7564 var shift3 = (options, deps) => { 7565 const result = shift2(options); 7566 return { 7567 name: result.name, 7568 fn: result.fn, 7569 options: [options, deps] 7570 }; 7571 }; 7572 var limitShift3 = (options, deps) => { 7573 const result = limitShift2(options); 7574 return { 7575 fn: result.fn, 7576 options: [options, deps] 7577 }; 7578 }; 7579 var flip3 = (options, deps) => { 7580 const result = flip2(options); 7581 return { 7582 name: result.name, 7583 fn: result.fn, 7584 options: [options, deps] 7585 }; 7586 }; 7587 var size3 = (options, deps) => { 7588 const result = size2(options); 7589 return { 7590 name: result.name, 7591 fn: result.fn, 7592 options: [options, deps] 7593 }; 7594 }; 7595 7596 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/NullStore.mjs 7597 var NullStore = class extends ReactStore { 7598 // `update`/`set`/`notifyAll` funnel through `setState` in the base `Store`, so overriding 7599 // `setState` alone would neutralize them today. They are overridden explicitly so the store stays 7600 // inert even if a future base-class change stops routing a mutator through `setState`. 7601 setState(_newState) { 7602 } 7603 update(_changes) { 7604 } 7605 set(_key, _value) { 7606 } 7607 notifyAll() { 7608 } 7609 }; 7610 7611 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/inertValue.mjs 7612 function inertValue(value) { 7613 if (isReactVersionAtLeast(19)) { 7614 return value; 7615 } 7616 return value ? "true" : void 0; 7617 } 7618 7619 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/direction-context/DirectionContext.mjs 7620 var React31 = __toESM(require_react(), 1); 7621 var DirectionContext = /* @__PURE__ */ React31.createContext(void 0); 7622 if (true) DirectionContext.displayName = "DirectionContext"; 7623 function useDirection() { 7624 const context = React31.useContext(DirectionContext); 7625 return context?.direction ?? "ltr"; 7626 } 7627 7628 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/useAnchorPositioning.mjs 7629 var React33 = __toESM(require_react(), 1); 7630 7631 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/hooks/useFloating.mjs 7632 var React32 = __toESM(require_react(), 1); 7633 function useBaseUIFloating(options) { 7634 const { 7635 nodeId, 7636 externalTree, 7637 rootContext: store2 7638 } = options; 7639 const referenceElement = store2.useState("referenceElement"); 7640 const floatingElement = store2.useState("floatingElement"); 7641 const domReferenceElement = store2.useState("domReferenceElement"); 7642 const open2 = store2.useState("open"); 7643 const floatingId = store2.useState("floatingId"); 7644 const [positionReference, setPositionReferenceRaw] = React32.useState(null); 7645 const domReferenceRef = React32.useRef(null); 7646 const tree = useFloatingTree(externalTree); 7647 const storeElements = React32.useMemo(() => ({ 7648 reference: referenceElement, 7649 floating: floatingElement, 7650 domReference: domReferenceElement 7651 }), [referenceElement, floatingElement, domReferenceElement]); 7652 const position = useFloating({ 7653 ...options, 7654 elements: { 7655 ...storeElements, 7656 ...positionReference && { 7657 reference: positionReference 7658 } 7659 } 7660 }); 7661 const setPositionReference = React32.useCallback((node) => { 7662 const computedPositionReference = isElement(node) ? { 7663 getBoundingClientRect: () => node.getBoundingClientRect(), 7664 getClientRects: () => node.getClientRects(), 7665 contextElement: node 7666 } : node; 7667 setPositionReferenceRaw(computedPositionReference); 7668 position.refs.setReference(computedPositionReference); 7669 }, [position.refs]); 7670 const refs = React32.useMemo(() => ({ 7671 ...position.refs, 7672 setPositionReference, 7673 domReference: domReferenceRef 7674 }), [position.refs, setPositionReference]); 7675 const elements = React32.useMemo(() => ({ 7676 ...position.elements, 7677 domReference: domReferenceElement 7678 }), [position.elements, domReferenceElement]); 7679 const context = React32.useMemo(() => ({ 7680 ...position, 7681 dataRef: store2.context.dataRef, 7682 open: open2, 7683 onOpenChange: store2.setOpen, 7684 events: store2.context.events, 7685 floatingId, 7686 refs, 7687 elements, 7688 nodeId, 7689 rootStore: store2 7690 }), [position, refs, elements, nodeId, store2, open2, floatingId]); 7691 useIsoLayoutEffect(() => { 7692 if (domReferenceElement) { 7693 domReferenceRef.current = domReferenceElement; 7694 } 7695 }, [domReferenceElement]); 7696 useIsoLayoutEffect(() => { 7697 store2.context.dataRef.current.floatingContext = context; 7698 const node = tree?.nodesRef.current.find((n) => n.id === nodeId); 7699 if (node) { 7700 node.context = context; 7701 } 7702 }); 7703 return React32.useMemo(() => ({ 7704 ...position, 7705 context, 7706 refs, 7707 elements, 7708 rootStore: store2 7709 }), [position, refs, elements, context, store2]); 7710 } 7711 7712 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/floating-ui-react/middleware/arrow.mjs 7713 var baseArrow = (options) => ({ 7714 name: "arrow", 7715 options, 7716 async fn(state) { 7717 const { 7718 x, 7719 y, 7720 placement, 7721 rects, 7722 platform: platform3, 7723 elements, 7724 middlewareData 7725 } = state; 7726 const { 7727 element, 7728 padding = 0 7729 } = evaluate(options, state) || {}; 7730 if (element == null) { 7731 return {}; 7732 } 7733 const paddingObject = getPaddingObject(padding); 7734 const coords = { 7735 x, 7736 y 7737 }; 7738 const axis = getAlignmentAxis(placement); 7739 const length = getAxisLength(axis); 7740 const arrowDimensions = await platform3.getDimensions(element); 7741 const isYAxis = axis === "y"; 7742 const minProp = isYAxis ? "top" : "left"; 7743 const maxProp = isYAxis ? "bottom" : "right"; 7744 const clientProp = isYAxis ? "clientHeight" : "clientWidth"; 7745 const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length]; 7746 const startDiff = coords[axis] - rects.reference[axis]; 7747 const clientSize = elements.floating[clientProp] || rects.floating[length]; 7748 const centerToReference = endDiff / 2 - startDiff / 2; 7749 const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1; 7750 const minPadding = Math.min(paddingObject[minProp], largestPossiblePadding); 7751 const maxPadding = Math.min(paddingObject[maxProp], largestPossiblePadding); 7752 const min2 = minPadding; 7753 const max2 = clientSize - arrowDimensions[length] - maxPadding; 7754 const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference; 7755 const offset4 = clamp(min2, center, max2); 7756 const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset4 && rects.reference[length] / 2 - (center < min2 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0; 7757 const alignmentOffset = shouldAddOffset ? center < min2 ? center - min2 : center - max2 : 0; 7758 return { 7759 [axis]: coords[axis] + alignmentOffset, 7760 data: { 7761 [axis]: offset4, 7762 centerOffset: center - offset4 - alignmentOffset, 7763 ...shouldAddOffset && { 7764 alignmentOffset 7765 } 7766 }, 7767 reset: shouldAddOffset 7768 }; 7769 } 7770 }); 7771 var arrow4 = (options, deps) => { 7772 const { 7773 name, 7774 fn 7775 } = baseArrow(options); 7776 return { 7777 name, 7778 fn, 7779 options: [options, deps] 7780 }; 7781 }; 7782 7783 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/hideMiddleware.mjs 7784 var hide4 = { 7785 name: "hide", 7786 async fn(state) { 7787 const { 7788 width, 7789 height, 7790 x, 7791 y 7792 } = state.rects.reference; 7793 const anchorHidden2 = width === 0 && height === 0 && x === 0 && y === 0; 7794 const overflow = await state.platform.detectOverflow(state, { 7795 elementContext: "reference" 7796 }); 7797 const referenceHidden = overflow.top - height >= 0 || overflow.right - width >= 0 || overflow.bottom - height >= 0 || overflow.left - width >= 0; 7798 return { 7799 data: { 7800 referenceHidden: referenceHidden || anchorHidden2 7801 } 7802 }; 7803 } 7804 }; 7805 7806 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/adaptiveOriginConstants.mjs 7807 var DEFAULT_SIDES = { 7808 sideX: "left", 7809 sideY: "top" 7810 }; 7811 7812 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/CommonPositionerCssVars.mjs 7813 var availableWidth = "--available-width"; 7814 var availableHeight = "--available-height"; 7815 var anchorWidth = "--anchor-width"; 7816 var anchorHeight = "--anchor-height"; 7817 var transformOrigin = "--transform-origin"; 7818 var positionerWidth = "--positioner-width"; 7819 var positionerHeight = "--positioner-height"; 7820 7821 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/useAnchorPositioning.mjs 7822 var AVAILABLE_WIDTH_VAR = availableWidth; 7823 var AVAILABLE_HEIGHT_VAR = availableHeight; 7824 function getLogicalSide(sideParam, renderedSide, isRtl) { 7825 const isLogicalSideParam = sideParam === "inline-start" || sideParam === "inline-end"; 7826 const logicalRight = isRtl ? "inline-start" : "inline-end"; 7827 const logicalLeft = isRtl ? "inline-end" : "inline-start"; 7828 return { 7829 top: "top", 7830 right: isLogicalSideParam ? logicalRight : "right", 7831 bottom: "bottom", 7832 left: isLogicalSideParam ? logicalLeft : "left" 7833 }[renderedSide]; 7834 } 7835 function getOffsetData(state, sideParam, isRtl) { 7836 const { 7837 rects, 7838 placement 7839 } = state; 7840 const data = { 7841 side: getLogicalSide(sideParam, getSide(placement), isRtl), 7842 align: getAlignment(placement) || "center", 7843 anchor: { 7844 width: rects.reference.width, 7845 height: rects.reference.height 7846 }, 7847 positioner: { 7848 width: rects.floating.width, 7849 height: rects.floating.height 7850 } 7851 }; 7852 return data; 7853 } 7854 function useAnchorPositioning(params) { 7855 return useAnchorPositioningWithHook(params, useBaseUIFloating); 7856 } 7857 function useAnchorPositioningWithHook(params, useFloatingHook) { 7858 const { 7859 // Public parameters 7860 anchor, 7861 positionMethod = "absolute", 7862 side: sideParam = "bottom", 7863 sideOffset = 0, 7864 align = "center", 7865 alignOffset = 0, 7866 collisionBoundary, 7867 collisionPadding: collisionPaddingParam = 5, 7868 sticky = false, 7869 arrowPadding = 5, 7870 disableAnchorTracking = false, 7871 inline: inlineMiddleware, 7872 // Private parameters 7873 keepMounted = false, 7874 floatingRootContext, 7875 mounted, 7876 collisionAvoidance, 7877 shift: shift4, 7878 nodeId, 7879 adaptiveOrigin: adaptiveOrigin2, 7880 lazyFlip = false, 7881 externalTree 7882 } = params; 7883 const collisionAvoidanceSide = collisionAvoidance.side || "flip"; 7884 const collisionAvoidanceAlign = collisionAvoidance.align || "flip"; 7885 const collisionAvoidanceFallbackAxisSide = collisionAvoidance.fallbackAxisSide || "end"; 7886 const shiftCrossAxis = shift4?.crossAxis ?? false; 7887 const shiftRootBoundary = shift4?.rootBoundary; 7888 const anchorFn = typeof anchor === "function" ? anchor : void 0; 7889 const anchorFnCallback = useStableCallback(anchorFn); 7890 const anchorDep = anchorFn ? anchorFnCallback : anchor; 7891 const anchorValueRef = useValueAsRef(anchor); 7892 const mountedRef = useValueAsRef(mounted); 7893 const direction = useDirection(); 7894 const isRtl = direction === "rtl"; 7895 const [mountPlacement, setMountPlacement] = React33.useState(null); 7896 if (!mounted && mountPlacement !== null) { 7897 setMountPlacement(null); 7898 } 7899 const lockAlign = lazyFlip === "placement"; 7900 const mountSide = mountPlacement ? getSide(mountPlacement) : null; 7901 const mountAlign = mountPlacement && lockAlign ? getAlignment(mountPlacement) || "center" : null; 7902 const side = mountSide || { 7903 top: "top", 7904 right: "right", 7905 bottom: "bottom", 7906 left: "left", 7907 "inline-end": isRtl ? "left" : "right", 7908 "inline-start": isRtl ? "right" : "left" 7909 }[sideParam]; 7910 const placementAlign = mountAlign || align; 7911 const placement = placementAlign === "center" ? side : `$side}-$placementAlign}`; 7912 let collisionPadding = collisionPaddingParam; 7913 if (typeof collisionPadding === "number") { 7914 collisionPadding = { 7915 top: collisionPadding, 7916 right: collisionPadding, 7917 bottom: collisionPadding, 7918 left: collisionPadding 7919 }; 7920 } else if (collisionPadding) { 7921 collisionPadding = { 7922 top: collisionPadding.top || 0, 7923 right: collisionPadding.right || 0, 7924 bottom: collisionPadding.bottom || 0, 7925 left: collisionPadding.left || 0 7926 }; 7927 } 7928 const bias = 1; 7929 const biasTop = sideParam === "bottom" ? bias : 0; 7930 const biasBottom = sideParam === "top" ? bias : 0; 7931 const biasLeft = sideParam === "right" ? bias : 0; 7932 const biasRight = sideParam === "left" ? bias : 0; 7933 const commonCollisionProps = { 7934 boundary: collisionBoundary === "clipping-ancestors" ? "clippingAncestors" : collisionBoundary, 7935 padding: collisionPadding 7936 }; 7937 const arrowRef = React33.useRef(null); 7938 const sideOffsetRef = useValueAsRef(sideOffset); 7939 const alignOffsetRef = useValueAsRef(alignOffset); 7940 const sideOffsetDep = typeof sideOffset !== "function" ? sideOffset : 0; 7941 const alignOffsetDep = typeof alignOffset !== "function" ? alignOffset : 0; 7942 const middleware = []; 7943 if (inlineMiddleware) { 7944 middleware.push(inlineMiddleware); 7945 } 7946 middleware.push(offset3((state) => { 7947 const data = getOffsetData(state, sideParam, isRtl); 7948 const sideAxis = typeof sideOffsetRef.current === "function" ? sideOffsetRef.current(data) : sideOffsetRef.current; 7949 const alignAxis = typeof alignOffsetRef.current === "function" ? alignOffsetRef.current(data) : alignOffsetRef.current; 7950 return { 7951 mainAxis: sideAxis, 7952 crossAxis: alignAxis, 7953 alignmentAxis: alignAxis 7954 }; 7955 }, [sideOffsetDep, alignOffsetDep, isRtl, sideParam])); 7956 const shiftDisabled = collisionAvoidanceAlign === "none" && collisionAvoidanceSide !== "shift"; 7957 const crossAxisShiftEnabled = !shiftDisabled && (sticky || shiftCrossAxis || collisionAvoidanceSide === "shift"); 7958 const flipMiddleware = collisionAvoidanceSide === "none" ? null : flip3({ 7959 ...commonCollisionProps, 7960 // Ensure the popup flips if it's been limited by its --available-height and it resizes. 7961 // Since the size() padding is smaller than the flip() padding, flip() will take precedence. 7962 padding: { 7963 top: collisionPadding.top + bias + biasTop, 7964 right: collisionPadding.right + bias + biasRight, 7965 bottom: collisionPadding.bottom + bias + biasBottom, 7966 left: collisionPadding.left + bias + biasLeft 7967 }, 7968 mainAxis: !shiftCrossAxis && collisionAvoidanceSide === "flip", 7969 crossAxis: collisionAvoidanceAlign === "flip" ? "alignment" : false, 7970 fallbackAxisSideDirection: collisionAvoidanceFallbackAxisSide 7971 }); 7972 const shiftMiddleware = shiftDisabled ? null : shift3({ 7973 ...commonCollisionProps, 7974 // Use the Layout Viewport to avoid shifting around when pinch-zooming. 7975 rootBoundary: shiftRootBoundary, 7976 mainAxis: collisionAvoidanceAlign !== "none", 7977 crossAxis: crossAxisShiftEnabled, 7978 limiter: sticky || shiftCrossAxis ? void 0 : limitShift3((limitData) => { 7979 if (!arrowRef.current) { 7980 return {}; 7981 } 7982 const { 7983 width, 7984 height 7985 } = arrowRef.current.getBoundingClientRect(); 7986 const sideAxis = getSideAxis(getSide(limitData.placement)); 7987 const arrowSize = sideAxis === "y" ? width : height; 7988 const offsetAmount = sideAxis === "y" ? collisionPadding.left + collisionPadding.right : collisionPadding.top + collisionPadding.bottom; 7989 return { 7990 offset: arrowSize / 2 + offsetAmount / 2 7991 }; 7992 }) 7993 }, [commonCollisionProps, sticky, shiftCrossAxis, shiftRootBoundary, collisionPadding, collisionAvoidanceAlign]); 7994 if (collisionAvoidanceSide === "shift" || collisionAvoidanceAlign === "shift" || placementAlign === "center") { 7995 middleware.push(shiftMiddleware, flipMiddleware); 7996 } else { 7997 middleware.push(flipMiddleware, shiftMiddleware); 7998 } 7999 middleware.push(size3({ 8000 ...commonCollisionProps, 8001 apply({ 8002 elements: { 8003 floating 8004 }, 8005 availableWidth: availableWidth2, 8006 availableHeight: availableHeight2, 8007 rects 8008 }) { 8009 if (!mountedRef.current) { 8010 return; 8011 } 8012 const floatingStyle = floating.style; 8013 floatingStyle.setProperty(AVAILABLE_WIDTH_VAR, `$availableWidth2}px`); 8014 floatingStyle.setProperty(AVAILABLE_HEIGHT_VAR, `$availableHeight2}px`); 8015 const dpr = getWindow(floating).devicePixelRatio || 1; 8016 const { 8017 x: x2, 8018 y: y2, 8019 width, 8020 height 8021 } = rects.reference; 8022 const anchorWidth2 = (Math.round((x2 + width) * dpr) - Math.round(x2 * dpr)) / dpr; 8023 const anchorHeight2 = (Math.round((y2 + height) * dpr) - Math.round(y2 * dpr)) / dpr; 8024 floatingStyle.setProperty(anchorWidth, `$anchorWidth2}px`); 8025 floatingStyle.setProperty(anchorHeight, `$anchorHeight2}px`); 8026 } 8027 }), arrow4((state) => ({ 8028 // `transform-origin` calculations rely on an element existing. If the arrow hasn't been set, 8029 // we'll create a fake element. 8030 element: arrowRef.current || ownerDocument(state.elements.floating).createElement("div"), 8031 // No padding for the fake arrow: it would displace aligned popups on narrow anchors. 8032 padding: arrowRef.current ? arrowPadding : 0 8033 }), [arrowPadding]), { 8034 name: "transformOrigin", 8035 fn(state) { 8036 const { 8037 elements: { 8038 floating 8039 }, 8040 middlewareData: middlewareData2, 8041 placement: renderedPlacement2, 8042 platform: platform3, 8043 rects, 8044 y: y2 8045 } = state; 8046 const renderedSide2 = getSide(renderedPlacement2); 8047 const renderedAlign2 = getAlignment(renderedPlacement2); 8048 const isVertical = getSideAxis(renderedSide2) === "y"; 8049 const arrowEl = arrowRef.current; 8050 const sideOffsetValue = typeof sideOffset === "function" ? sideOffset(getOffsetData(state, sideParam, isRtl)) : sideOffset; 8051 let crossOrigin; 8052 if (!arrowEl && renderedAlign2 && Math.abs(isVertical ? middlewareData2.shift?.x || 0 : middlewareData2.shift?.y || 0) <= 1) { 8053 crossOrigin = renderedAlign2 === "start" === (isVertical && platform3.isRTL?.(floating) === true) ? "100%" : "0%"; 8054 } else { 8055 const arrowOffset = isVertical ? middlewareData2.arrow?.x || 0 : middlewareData2.arrow?.y || 0; 8056 const arrowSize = isVertical ? arrowEl?.clientWidth || 0 : arrowEl?.clientHeight || 0; 8057 crossOrigin = `$arrowOffset + arrowSize / 2}px`; 8058 } 8059 let sideOrigin = renderedSide2 === "top" || renderedSide2 === "left" ? `calc(100% + $sideOffsetValue}px)` : `${-sideOffsetValue}px`; 8060 if (crossAxisShiftEnabled && isVertical && Math.abs(middlewareData2.shift?.y || 0) > sideOffsetValue) { 8061 sideOrigin = `$rects.reference.y + rects.reference.height / 2 - y2}px`; 8062 } 8063 floating.style.setProperty(transformOrigin, isVertical ? `$crossOrigin} $sideOrigin}` : `$sideOrigin} $crossOrigin}`); 8064 return {}; 8065 } 8066 }, hide4, adaptiveOrigin2); 8067 useIsoLayoutEffect(() => { 8068 if (!mounted && floatingRootContext) { 8069 floatingRootContext.update({ 8070 referenceElement: null, 8071 floatingElement: null, 8072 domReferenceElement: null, 8073 positionReference: null 8074 }); 8075 } 8076 }, [mounted, floatingRootContext]); 8077 const autoUpdateOptions = React33.useMemo(() => ({ 8078 ancestorScroll: !disableAnchorTracking, 8079 elementResize: !disableAnchorTracking && typeof ResizeObserver !== "undefined", 8080 layoutShift: !disableAnchorTracking && typeof IntersectionObserver !== "undefined" 8081 }), [disableAnchorTracking]); 8082 const { 8083 refs, 8084 elements, 8085 x, 8086 y, 8087 middlewareData, 8088 update: update2, 8089 placement: renderedPlacement, 8090 context, 8091 isPositioned, 8092 floatingStyles: originalFloatingStyles 8093 } = useFloatingHook({ 8094 rootContext: floatingRootContext, 8095 open: keepMounted ? mounted : void 0, 8096 placement, 8097 middleware, 8098 strategy: positionMethod, 8099 whileElementsMounted: keepMounted ? void 0 : (...args) => autoUpdate(...args, autoUpdateOptions), 8100 nodeId, 8101 externalTree 8102 }); 8103 const { 8104 sideX, 8105 sideY 8106 } = middlewareData.adaptiveOrigin || DEFAULT_SIDES; 8107 const resolvedPosition = isPositioned ? positionMethod : "fixed"; 8108 const floatingStyles = React33.useMemo(() => { 8109 let base; 8110 if (!isPositioned) { 8111 base = { 8112 position: resolvedPosition, 8113 top: 0, 8114 left: 0 8115 }; 8116 } else if (adaptiveOrigin2) { 8117 base = { 8118 position: resolvedPosition, 8119 [sideX]: x, 8120 [sideY]: y 8121 }; 8122 } else { 8123 base = { 8124 ...originalFloatingStyles, 8125 position: resolvedPosition 8126 }; 8127 } 8128 base[AVAILABLE_WIDTH_VAR] = "100vw"; 8129 base[AVAILABLE_HEIGHT_VAR] = "100vh"; 8130 if (!isPositioned) { 8131 base.opacity = 0; 8132 } 8133 return base; 8134 }, [adaptiveOrigin2, resolvedPosition, sideX, x, sideY, y, originalFloatingStyles, isPositioned]); 8135 const registeredPositionReferenceRef = React33.useRef(null); 8136 useIsoLayoutEffect(() => { 8137 if (!mounted) { 8138 return; 8139 } 8140 const anchorValue = anchorValueRef.current; 8141 const resolvedAnchor = typeof anchorValue === "function" ? anchorValue() : anchorValue; 8142 const unwrappedElement = (isRef(resolvedAnchor) ? resolvedAnchor.current : resolvedAnchor) || null; 8143 const finalAnchor = unwrappedElement || null; 8144 if (finalAnchor !== registeredPositionReferenceRef.current) { 8145 refs.setPositionReference(finalAnchor); 8146 registeredPositionReferenceRef.current = finalAnchor; 8147 } 8148 }, [mounted, refs, anchorDep, anchorValueRef]); 8149 React33.useEffect(() => { 8150 if (!mounted) { 8151 return; 8152 } 8153 const anchorValue = anchorValueRef.current; 8154 if (typeof anchorValue === "function") { 8155 return; 8156 } 8157 if (isRef(anchorValue) && anchorValue.current !== registeredPositionReferenceRef.current) { 8158 refs.setPositionReference(anchorValue.current); 8159 registeredPositionReferenceRef.current = anchorValue.current; 8160 } 8161 }, [mounted, refs, anchorDep, anchorValueRef]); 8162 React33.useEffect(() => { 8163 if (keepMounted && mounted && elements.reference && elements.floating) { 8164 return autoUpdate(elements.reference, elements.floating, update2, autoUpdateOptions); 8165 } 8166 return void 0; 8167 }, [keepMounted, mounted, elements, update2, autoUpdateOptions]); 8168 const renderedSide = getSide(renderedPlacement); 8169 const logicalRenderedSide = getLogicalSide(sideParam, renderedSide, isRtl); 8170 const renderedAlign = getAlignment(renderedPlacement) || "center"; 8171 const anchorHidden2 = Boolean(middlewareData.hide?.referenceHidden); 8172 useIsoLayoutEffect(() => { 8173 if (lazyFlip && mounted && isPositioned && (renderedSide !== side || lockAlign && renderedAlign !== placementAlign)) { 8174 setMountPlacement(renderedPlacement); 8175 } 8176 }, [lazyFlip, lockAlign, mounted, isPositioned, renderedPlacement, renderedSide, renderedAlign, side, placementAlign]); 8177 const arrowStyles = React33.useMemo(() => ({ 8178 position: "absolute", 8179 top: middlewareData.arrow?.y, 8180 left: middlewareData.arrow?.x 8181 }), [middlewareData.arrow]); 8182 const arrowUncentered = middlewareData.arrow?.centerOffset !== 0; 8183 return React33.useMemo(() => ({ 8184 positionerStyles: floatingStyles, 8185 arrowStyles, 8186 arrowRef, 8187 arrowUncentered, 8188 side: logicalRenderedSide, 8189 align: renderedAlign, 8190 physicalSide: renderedSide, 8191 anchorHidden: anchorHidden2, 8192 refs, 8193 context, 8194 isPositioned, 8195 update: update2 8196 }), [floatingStyles, arrowStyles, arrowRef, arrowUncentered, logicalRenderedSide, renderedAlign, renderedSide, anchorHidden2, refs, context, isPositioned, update2]); 8197 } 8198 function isRef(param) { 8199 return param != null && "current" in param; 8200 } 8201 8202 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/internals/getDisabledMountTransitionStyles.mjs 8203 function getDisabledMountTransitionStyles(transitionStatus) { 8204 return transitionStatus === "starting" ? DISABLED_TRANSITIONS_STYLE : EMPTY_OBJECT; 8205 } 8206 8207 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/usePositioner.mjs 8208 function usePositioner(componentProps, state, { 8209 styles, 8210 transitionStatus, 8211 props, 8212 refs, 8213 hidden, 8214 inert = false 8215 }) { 8216 const style = { 8217 ...styles 8218 }; 8219 if (inert) { 8220 style.pointerEvents = "none"; 8221 } 8222 return useRenderElement("div", componentProps, { 8223 state, 8224 ref: refs, 8225 props: [{ 8226 role: "presentation", 8227 hidden, 8228 style 8229 }, getDisabledMountTransitionStyles(transitionStatus), props], 8230 stateAttributesMapping: popupStateMapping 8231 }); 8232 } 8233 8234 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/button/Button.mjs 8235 var React34 = __toESM(require_react(), 1); 8236 var Button = /* @__PURE__ */ React34.forwardRef(function Button2(componentProps, forwardedRef) { 8237 const { 8238 render, 8239 className, 8240 disabled: disabled2 = false, 8241 focusableWhenDisabled = false, 8242 nativeButton = true, 8243 style, 8244 ...elementProps 8245 } = componentProps; 8246 const { 8247 getButtonProps, 8248 buttonRef 8249 } = useButton({ 8250 disabled: disabled2, 8251 focusableWhenDisabled, 8252 native: nativeButton 8253 }); 8254 const state = { 8255 disabled: disabled2 8256 }; 8257 return useRenderElement("button", componentProps, { 8258 state, 8259 ref: [forwardedRef, buttonRef], 8260 props: [elementProps, getButtonProps] 8261 }); 8262 }); 8263 if (true) Button.displayName = "Button"; 8264 8265 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/usePopupViewport.mjs 8266 var React38 = __toESM(require_react(), 1); 8267 var ReactDOM6 = __toESM(require_react_dom(), 1); 8268 8269 // node_modules/.store/@base-ui/utils@0.5.0--7My7Lubseca8je9LSEweA/node_modules/@base-ui/utils/usePreviousValue.mjs 8270 var React35 = __toESM(require_react(), 1); 8271 function usePreviousValue(value) { 8272 const [state, setState] = React35.useState({ 8273 current: value, 8274 previous: null 8275 }); 8276 if (!Object.is(value, state.current)) { 8277 setState({ 8278 current: value, 8279 previous: state.current 8280 }); 8281 } 8282 return state.previous; 8283 } 8284 8285 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/usePopupAutoResize.mjs 8286 var React36 = __toESM(require_react(), 1); 8287 8288 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/getCssDimensions.mjs 8289 function getCssDimensions2(element) { 8290 const css = getComputedStyle2(element); 8291 let width = parseFloat(css.width) || 0; 8292 let height = parseFloat(css.height) || 0; 8293 const hasOffset = isHTMLElement(element); 8294 const offsetWidth = hasOffset ? element.offsetWidth : width; 8295 const offsetHeight = hasOffset ? element.offsetHeight : height; 8296 const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight; 8297 if (shouldFallback) { 8298 width = offsetWidth; 8299 height = offsetHeight; 8300 } 8301 return { 8302 width, 8303 height 8304 }; 8305 } 8306 8307 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/CommonPopupCssVars.mjs 8308 var popupWidth = "--popup-width"; 8309 var popupHeight = "--popup-height"; 8310 8311 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/usePopupAutoResize.mjs 8312 function usePopupAutoResize(parameters) { 8313 const { 8314 popupElement, 8315 positionerElement, 8316 content, 8317 mounted, 8318 onMeasureLayout: onMeasureLayoutParam, 8319 onMeasureLayoutComplete: onMeasureLayoutCompleteParam, 8320 side, 8321 direction 8322 } = parameters; 8323 const runOnceAnimationsFinish = useAnimationsFinished(popupElement, true); 8324 const animationFrame = useAnimationFrame(); 8325 const committedDimensionsRef = React36.useRef(null); 8326 const onMeasureLayout = useStableCallback(onMeasureLayoutParam); 8327 const onMeasureLayoutComplete = useStableCallback(onMeasureLayoutCompleteParam); 8328 const anchoringStyles = React36.useMemo(() => getPopupAnchoringStyles(side, direction), [side, direction]); 8329 useIsoLayoutEffect(() => { 8330 if (!mounted) { 8331 committedDimensionsRef.current = null; 8332 return void 0; 8333 } 8334 if (!popupElement || !positionerElement) { 8335 return void 0; 8336 } 8337 const restoreAnchoringStyles = applyElementStyles(popupElement, anchoringStyles); 8338 setPopupCssSize(popupElement, "auto"); 8339 const restorePopupPosition = overrideElementStyle(popupElement, "position", "static"); 8340 const restorePopupTransform = overrideElementStyle(popupElement, "transform", "none"); 8341 const restorePopupScale = overrideElementStyle(popupElement, "scale", "1"); 8342 const restorePositionerAvailableSize = applyElementStyles(positionerElement, { 8343 [availableWidth]: "max-content", 8344 [availableHeight]: "max-content" 8345 }); 8346 function restoreMeasurementOverrides() { 8347 restorePopupPosition(); 8348 restorePopupTransform(); 8349 restorePositionerAvailableSize(); 8350 restorePopupScale(); 8351 } 8352 onMeasureLayout?.(); 8353 if (committedDimensionsRef.current === null) { 8354 setPositionerCssSize(positionerElement, "max-content"); 8355 const dimensions = getCssDimensions2(popupElement); 8356 committedDimensionsRef.current = dimensions; 8357 setPositionerCssSize(positionerElement, dimensions); 8358 restoreMeasurementOverrides(); 8359 onMeasureLayoutComplete?.(null, dimensions); 8360 return restoreAnchoringStyles; 8361 } 8362 setPositionerCssSize(positionerElement, "max-content"); 8363 const previousDimensions = committedDimensionsRef.current; 8364 const newDimensions = getCssDimensions2(popupElement); 8365 committedDimensionsRef.current = newDimensions; 8366 setPopupCssSize(popupElement, previousDimensions); 8367 restoreMeasurementOverrides(); 8368 onMeasureLayoutComplete?.(previousDimensions, newDimensions); 8369 setPositionerCssSize(positionerElement, newDimensions); 8370 const abortController = new AbortController(); 8371 animationFrame.request(() => { 8372 setPopupCssSize(popupElement, newDimensions); 8373 runOnceAnimationsFinish(() => { 8374 popupElement.style.setProperty(popupWidth, "auto"); 8375 popupElement.style.setProperty(popupHeight, "auto"); 8376 }, abortController.signal); 8377 }); 8378 return () => { 8379 abortController.abort(); 8380 animationFrame.cancel(); 8381 restoreAnchoringStyles(); 8382 }; 8383 }, [content, popupElement, positionerElement, runOnceAnimationsFinish, animationFrame, mounted, onMeasureLayout, onMeasureLayoutComplete, anchoringStyles]); 8384 } 8385 function getPopupAnchoringStyles(side, direction) { 8386 const isPhysicalTop = side === "top"; 8387 const isPhysicalLeft = side === "left" || side === (direction === "rtl" ? "inline-end" : "inline-start"); 8388 if (!isPhysicalTop && !isPhysicalLeft) { 8389 return EMPTY_OBJECT; 8390 } 8391 return { 8392 position: "absolute", 8393 [isPhysicalTop ? "bottom" : "top"]: "0", 8394 [isPhysicalLeft ? "right" : "left"]: "0" 8395 }; 8396 } 8397 function overrideElementStyle(element, property, value) { 8398 const originalValue = element.style.getPropertyValue(property); 8399 element.style.setProperty(property, value); 8400 return () => { 8401 element.style.setProperty(property, originalValue); 8402 }; 8403 } 8404 function applyElementStyles(element, styles) { 8405 const restorers = []; 8406 for (const [key, value] of Object.entries(styles)) { 8407 restorers.push(overrideElementStyle(element, key, value)); 8408 } 8409 return restorers.length ? () => { 8410 restorers.forEach((restore) => restore()); 8411 } : NOOP; 8412 } 8413 function setPopupCssSize(popupElement, size4) { 8414 const width = size4 === "auto" ? "auto" : `$size4.width}px`; 8415 const height = size4 === "auto" ? "auto" : `$size4.height}px`; 8416 popupElement.style.setProperty(popupWidth, width); 8417 popupElement.style.setProperty(popupHeight, height); 8418 } 8419 function setPositionerCssSize(positionerElement, size4) { 8420 const width = size4 === "max-content" ? "max-content" : `$size4.width}px`; 8421 const height = size4 === "max-content" ? "max-content" : `$size4.height}px`; 8422 positionerElement.style.setProperty(positionerWidth, width); 8423 positionerElement.style.setProperty(positionerHeight, height); 8424 } 8425 8426 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/direction-provider/DirectionProvider.mjs 8427 var React37 = __toESM(require_react(), 1); 8428 var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1); 8429 var DirectionProvider = function DirectionProvider2(props) { 8430 const { 8431 direction = "ltr" 8432 } = props; 8433 const contextValue = React37.useMemo(() => ({ 8434 direction 8435 }), [direction]); 8436 return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(DirectionContext.Provider, { 8437 value: contextValue, 8438 children: props.children 8439 }); 8440 }; 8441 if (true) DirectionProvider.displayName = "DirectionProvider"; 8442 8443 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/adaptiveOriginMiddleware.mjs 8444 var adaptiveOrigin = { 8445 name: "adaptiveOrigin", 8446 async fn(state) { 8447 const { 8448 x: rawX, 8449 y: rawY, 8450 rects: { 8451 floating: floatRect 8452 }, 8453 elements: { 8454 floating 8455 }, 8456 platform: platform3, 8457 strategy, 8458 placement 8459 } = state; 8460 const win = getWindow(floating); 8461 const styles = win.getComputedStyle(floating); 8462 const hasTransition = styles.transitionDuration !== "0s" && styles.transitionDuration !== ""; 8463 if (!hasTransition) { 8464 return { 8465 x: rawX, 8466 y: rawY, 8467 data: DEFAULT_SIDES 8468 }; 8469 } 8470 const offsetParent = await platform3.getOffsetParent?.(floating); 8471 let offsetDimensions = { 8472 width: 0, 8473 height: 0 8474 }; 8475 if (strategy === "fixed" && win?.visualViewport) { 8476 offsetDimensions = { 8477 width: win.visualViewport.width, 8478 height: win.visualViewport.height 8479 }; 8480 } else if (offsetParent === win) { 8481 const doc = ownerDocument(floating); 8482 offsetDimensions = { 8483 width: doc.documentElement.clientWidth, 8484 height: doc.documentElement.clientHeight 8485 }; 8486 } else if (await platform3.isElement?.(offsetParent)) { 8487 offsetDimensions = await platform3.getDimensions(offsetParent); 8488 } 8489 const currentSide = getSide(placement); 8490 let x = rawX; 8491 let y = rawY; 8492 if (currentSide === "left") { 8493 x = offsetDimensions.width - (rawX + floatRect.width); 8494 } 8495 if (currentSide === "top") { 8496 y = offsetDimensions.height - (rawY + floatRect.height); 8497 } 8498 const sideX = currentSide === "left" ? "right" : DEFAULT_SIDES.sideX; 8499 const sideY = currentSide === "top" ? "bottom" : DEFAULT_SIDES.sideY; 8500 return { 8501 x, 8502 y, 8503 data: { 8504 sideX, 8505 sideY 8506 } 8507 }; 8508 } 8509 }; 8510 8511 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/CommonViewportDataAttributes.mjs 8512 var activationDirection = "data-activation-direction"; 8513 8514 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/usePopupViewport.mjs 8515 var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); 8516 var popupViewportStateMapping = { 8517 activationDirection: (value) => value ? { 8518 [activationDirection]: value 8519 } : null 8520 }; 8521 function usePopupViewport(parameters) { 8522 const { 8523 store: store2, 8524 side, 8525 children 8526 } = parameters; 8527 const direction = useDirection(); 8528 const activeTrigger = store2.useState("activeTriggerElement"); 8529 const activeTriggerId = store2.useState("activeTriggerId"); 8530 const open2 = store2.useState("open"); 8531 const payload = store2.useState("payload"); 8532 const mounted = store2.useState("mounted"); 8533 const popupElement = store2.useState("popupElement"); 8534 const positionerElement = store2.useState("positionerElement"); 8535 const previousActiveTrigger = usePreviousValue(open2 ? activeTrigger : null); 8536 const currentContentKey = usePopupContentKey(activeTriggerId, payload); 8537 const capturedNodeRef = React38.useRef(null); 8538 const [previousContentNode, setPreviousContentNode] = React38.useState(null); 8539 const [newTriggerOffset, setNewTriggerOffset] = React38.useState(null); 8540 const currentContainerRef = React38.useRef(null); 8541 const previousContainerRef = React38.useRef(null); 8542 const onAnimationsFinished = useAnimationsFinished(currentContainerRef, true); 8543 const cleanupFrame = useAnimationFrame(); 8544 const cleanupControllerRef = React38.useRef(null); 8545 const [previousContentDimensions, setPreviousContentDimensions] = React38.useState(null); 8546 const [showStartingStyleAttribute, setShowStartingStyleAttribute] = React38.useState(false); 8547 useIsoLayoutEffect(() => { 8548 store2.set("adaptiveOrigin", adaptiveOrigin); 8549 return () => { 8550 store2.set("adaptiveOrigin", void 0); 8551 }; 8552 }, [store2]); 8553 const handleMeasureLayout = useStableCallback(() => { 8554 currentContainerRef.current?.style.setProperty("animation", "none"); 8555 currentContainerRef.current?.style.setProperty("transition", "none"); 8556 previousContainerRef.current?.style.setProperty("display", "none"); 8557 }); 8558 const handleMeasureLayoutComplete = useStableCallback((previousDimensions) => { 8559 currentContainerRef.current?.style.removeProperty("animation"); 8560 currentContainerRef.current?.style.removeProperty("transition"); 8561 previousContainerRef.current?.style.removeProperty("display"); 8562 if (previousDimensions) { 8563 setPreviousContentDimensions(previousDimensions); 8564 } 8565 }); 8566 const armViewportCleanup = useStableCallback(() => { 8567 cleanupControllerRef.current?.abort(); 8568 const controller = new AbortController(); 8569 cleanupControllerRef.current = controller; 8570 onAnimationsFinished(() => { 8571 setPreviousContentNode(null); 8572 setPreviousContentDimensions(null); 8573 capturedNodeRef.current = null; 8574 }, controller.signal); 8575 }); 8576 const lastHandledTriggerRef = React38.useRef(null); 8577 useIsoLayoutEffect(() => { 8578 if (!open2 || !mounted) { 8579 lastHandledTriggerRef.current = null; 8580 } 8581 }, [open2, mounted]); 8582 useIsoLayoutEffect(() => { 8583 if (open2 && activeTrigger && previousActiveTrigger && activeTrigger !== previousActiveTrigger && lastHandledTriggerRef.current !== activeTrigger && capturedNodeRef.current) { 8584 setPreviousContentNode(capturedNodeRef.current); 8585 setShowStartingStyleAttribute(true); 8586 const offset4 = calculateRelativePosition(previousActiveTrigger, activeTrigger); 8587 setNewTriggerOffset(offset4); 8588 lastHandledTriggerRef.current = activeTrigger; 8589 } 8590 }, [open2, activeTrigger, previousActiveTrigger]); 8591 useIsoLayoutEffect(() => { 8592 if (previousContentNode == null) { 8593 return; 8594 } 8595 cleanupControllerRef.current?.abort(); 8596 setShowStartingStyleAttribute(true); 8597 cleanupFrame.request(() => { 8598 ReactDOM6.flushSync(() => { 8599 setShowStartingStyleAttribute(false); 8600 }); 8601 armViewportCleanup(); 8602 }); 8603 }, [currentContentKey, previousContentNode, armViewportCleanup, cleanupFrame]); 8604 useIsoLayoutEffect(() => { 8605 const source = currentContainerRef.current; 8606 if (!source) { 8607 return; 8608 } 8609 const wrapper = ownerDocument(source).createElement("div"); 8610 for (const child of Array.from(source.childNodes)) { 8611 wrapper.appendChild(child.cloneNode(true)); 8612 } 8613 capturedNodeRef.current = wrapper; 8614 }); 8615 const isTransitioning = previousContentNode != null; 8616 let childrenToRender; 8617 if (!isTransitioning) { 8618 childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { 8619 "data-current": true, 8620 ref: currentContainerRef, 8621 children 8622 }, currentContentKey); 8623 } else { 8624 childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(React38.Fragment, { 8625 children: [/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { 8626 "data-previous": true, 8627 inert: inertValue(true), 8628 ref: previousContainerRef, 8629 style: { 8630 ...previousContentDimensions ? { 8631 [popupWidth]: `$previousContentDimensions.width}px`, 8632 [popupHeight]: `$previousContentDimensions.height}px` 8633 } : null, 8634 position: "absolute" 8635 }, 8636 "data-ending-style": showStartingStyleAttribute ? void 0 : "" 8637 }, "previous"), /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { 8638 "data-current": true, 8639 ref: currentContainerRef, 8640 "data-starting-style": showStartingStyleAttribute ? "" : void 0, 8641 children 8642 }, currentContentKey)] 8643 }); 8644 } 8645 useIsoLayoutEffect(() => { 8646 const container = previousContainerRef.current; 8647 if (!container || !previousContentNode) { 8648 return; 8649 } 8650 container.replaceChildren(...Array.from(previousContentNode.childNodes)); 8651 }, [previousContentNode]); 8652 usePopupAutoResize({ 8653 popupElement, 8654 positionerElement, 8655 mounted, 8656 content: payload, 8657 onMeasureLayout: handleMeasureLayout, 8658 onMeasureLayoutComplete: handleMeasureLayoutComplete, 8659 side, 8660 direction 8661 }); 8662 const state = { 8663 activationDirection: getActivationDirection(newTriggerOffset), 8664 transitioning: isTransitioning 8665 }; 8666 return { 8667 children: childrenToRender, 8668 state 8669 }; 8670 } 8671 function getActivationDirection(offset4) { 8672 if (!offset4) { 8673 return void 0; 8674 } 8675 return `$getValueWithTolerance(offset4.horizontal, 5, "right", "left")} $getValueWithTolerance(offset4.vertical, 5, "down", "up")}`; 8676 } 8677 function getValueWithTolerance(value, tolerance, positiveLabel, negativeLabel) { 8678 if (value > tolerance) { 8679 return positiveLabel; 8680 } 8681 if (value < -tolerance) { 8682 return negativeLabel; 8683 } 8684 return ""; 8685 } 8686 function calculateRelativePosition(from, to) { 8687 const fromRect = from.getBoundingClientRect(); 8688 const toRect = to.getBoundingClientRect(); 8689 const fromCenter = { 8690 x: fromRect.left + fromRect.width / 2, 8691 y: fromRect.top + fromRect.height / 2 8692 }; 8693 const toCenter = { 8694 x: toRect.left + toRect.width / 2, 8695 y: toRect.top + toRect.height / 2 8696 }; 8697 return { 8698 horizontal: toCenter.x - fromCenter.x, 8699 vertical: toCenter.y - fromCenter.y 8700 }; 8701 } 8702 function usePopupContentKey(activeTriggerId, payload) { 8703 const [contentKey, setContentKey] = React38.useState(0); 8704 const previousActiveTriggerIdRef = React38.useRef(activeTriggerId); 8705 const previousPayloadRef = React38.useRef(payload); 8706 const pendingPayloadUpdateRef = React38.useRef(false); 8707 useIsoLayoutEffect(() => { 8708 const previousActiveTriggerId = previousActiveTriggerIdRef.current; 8709 const previousPayload = previousPayloadRef.current; 8710 const triggerIdChanged = activeTriggerId !== previousActiveTriggerId; 8711 const payloadChanged = payload !== previousPayload; 8712 if (triggerIdChanged) { 8713 setContentKey((value) => value + 1); 8714 pendingPayloadUpdateRef.current = !payloadChanged; 8715 } else if (pendingPayloadUpdateRef.current && payloadChanged) { 8716 setContentKey((value) => value + 1); 8717 pendingPayloadUpdateRef.current = false; 8718 } 8719 previousActiveTriggerIdRef.current = activeTriggerId; 8720 previousPayloadRef.current = payload; 8721 }, [activeTriggerId, payload]); 8722 return `$activeTriggerId ?? "current"}-$contentKey}`; 8723 } 8724 8725 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/utils/FloatingPortalLite.mjs 8726 var React39 = __toESM(require_react(), 1); 8727 var ReactDOM7 = __toESM(require_react_dom(), 1); 8728 var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1); 8729 var FloatingPortalLite = /* @__PURE__ */ React39.forwardRef(function FloatingPortalLite2(componentProps, forwardedRef) { 8730 const { 8731 children, 8732 container, 8733 className, 8734 render, 8735 style, 8736 ...elementProps 8737 } = componentProps; 8738 const { 8739 node: portalNode, 8740 subtree: portalSubtree 8741 } = useFloatingPortalNode({ 8742 container, 8743 ref: forwardedRef, 8744 componentProps, 8745 elementProps 8746 }); 8747 if (!portalSubtree && !portalNode) { 8748 return null; 8749 } 8750 return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(React39.Fragment, { 8751 children: [portalSubtree, portalNode && /* @__PURE__ */ ReactDOM7.createPortal(children, portalNode)] 8752 }); 8753 }); 8754 if (true) FloatingPortalLite.displayName = "FloatingPortalLite"; 8755 8756 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/index.parts.mjs 8757 var index_parts_exports = {}; 8758 __export(index_parts_exports, { 8759 Arrow: () => TooltipArrow, 8760 Handle: () => TooltipHandle, 8761 Popup: () => TooltipPopup, 8762 Portal: () => TooltipPortal, 8763 Positioner: () => TooltipPositioner, 8764 Provider: () => TooltipProvider, 8765 Root: () => TooltipRoot, 8766 Trigger: () => TooltipTrigger, 8767 Viewport: () => TooltipViewport, 8768 createHandle: () => createTooltipHandle 8769 }); 8770 8771 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/root/TooltipRoot.mjs 8772 var React42 = __toESM(require_react(), 1); 8773 8774 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/root/TooltipRootContext.mjs 8775 var React40 = __toESM(require_react(), 1); 8776 var TooltipRootContext = /* @__PURE__ */ React40.createContext(void 0); 8777 if (true) TooltipRootContext.displayName = "TooltipRootContext"; 8778 function useTooltipRootContext(optional) { 8779 const context = React40.useContext(TooltipRootContext); 8780 if (context === void 0 && !optional) { 8781 throw new Error(true ? "Base UI: TooltipRootContext is missing. Tooltip parts must be placed within <Tooltip.Root>." : formatErrorMessage_default(72)); 8782 } 8783 return context; 8784 } 8785 8786 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/store/TooltipStore.mjs 8787 var React41 = __toESM(require_react(), 1); 8788 var selectors2 = { 8789 ...popupStoreSelectors, 8790 disabled: (state) => state.disabled, 8791 instantType: (state) => state.instantType, 8792 isInstantPhase: (state) => state.isInstantPhase, 8793 trackCursorAxis: (state) => state.trackCursorAxis, 8794 disableHoverablePopup: (state) => state.disableHoverablePopup, 8795 lastOpenChangeReason: (state) => state.openChangeReason, 8796 closeOnClick: (state) => state.closeOnClick, 8797 // Active and inactive trigger props are the same object, so a constant for triggers that discard 8798 // them keeps those triggers from re-rendering when the props change. 8799 appliedTriggerProps: (state, apply) => apply ? state.activeTriggerProps : void 0, 8800 closeDelay: (state) => state.closeDelay, 8801 adaptiveOrigin: (state) => state.adaptiveOrigin 8802 }; 8803 var TooltipStore = class extends ReactStore { 8804 constructor(initialState, floatingId, nested) { 8805 const triggerElements = new PopupTriggerMap(); 8806 super(createInitialState(initialState, triggerElements, floatingId, nested), createInitialContext(triggerElements), selectors2); 8807 } 8808 setOpen = (nextOpen, eventDetails) => { 8809 applyPopupOpenChange(this, nextOpen, eventDetails, { 8810 extraState: { 8811 openChangeReason: eventDetails.reason 8812 } 8813 }); 8814 }; 8815 // Used by trigger clicks to clear a delayed hover open without reporting a public open-state change. 8816 cancelPendingOpen(event) { 8817 this.state.floatingRootContext.dispatchOpenChange(false, createChangeEventDetails(reason_parts_exports.triggerPress, event)); 8818 } 8819 }; 8820 function createNullTooltipStore() { 8821 const triggerElements = new PopupTriggerMap(); 8822 const store2 = new NullStore(Object.freeze(createInitialState(void 0, triggerElements)), Object.freeze(createInitialContext(triggerElements)), selectors2); 8823 return Object.assign(store2, { 8824 setOpen: NOOP, 8825 cancelPendingOpen: NOOP 8826 }); 8827 } 8828 function createInitialState(initialState, triggerElements, floatingId, nested = false) { 8829 const state = { 8830 ...createInitialPopupStoreState(triggerElements, floatingId, nested), 8831 disabled: false, 8832 instantType: void 0, 8833 isInstantPhase: false, 8834 trackCursorAxis: "none", 8835 disableHoverablePopup: false, 8836 openChangeReason: null, 8837 closeOnClick: true, 8838 closeDelay: 0, 8839 adaptiveOrigin: void 0, 8840 ...initialState 8841 }; 8842 return state; 8843 } 8844 function createInitialContext(triggerElements) { 8845 return { 8846 popupRef: /* @__PURE__ */ React41.createRef(), 8847 onOpenChange: void 0, 8848 onOpenChangeComplete: void 0, 8849 triggerElements 8850 }; 8851 } 8852 8853 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/root/TooltipRoot.mjs 8854 var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1); 8855 var TooltipRoot = fastComponent(function TooltipRoot2(props) { 8856 const { 8857 disabled: disabled2 = false, 8858 defaultOpen = false, 8859 open: openProp, 8860 disableHoverablePopup = false, 8861 trackCursorAxis = "none", 8862 actionsRef, 8863 onOpenChange, 8864 onOpenChangeComplete, 8865 handle, 8866 triggerId: triggerIdProp, 8867 defaultTriggerId: defaultTriggerIdProp = null, 8868 children 8869 } = props; 8870 const store2 = usePopupRootStore((floatingId, nested) => new TooltipStore({ 8871 open: defaultOpen, 8872 openProp, 8873 activeTriggerId: defaultTriggerIdProp, 8874 triggerIdProp 8875 }, floatingId, nested)); 8876 store2.useControlledProp("openProp", openProp); 8877 store2.useControlledProp("triggerIdProp", triggerIdProp); 8878 store2.useContextCallback("onOpenChange", onOpenChange); 8879 store2.useContextCallback("onOpenChangeComplete", onOpenChangeComplete); 8880 const openState = store2.useState("open"); 8881 const open2 = !disabled2 && openState; 8882 const activeTriggerId = store2.useState("activeTriggerId"); 8883 const mounted = store2.useState("mounted"); 8884 const payload = store2.useState("payload"); 8885 store2.useSyncedValues({ 8886 trackCursorAxis, 8887 disableHoverablePopup, 8888 disabled: disabled2 8889 }); 8890 useImplicitActiveTrigger(store2, { 8891 closeOnActiveTriggerUnmount: true 8892 }); 8893 const { 8894 forceUnmount, 8895 transitionStatus 8896 } = useOpenStateTransitions(open2, store2); 8897 const isInstantPhase = store2.useState("isInstantPhase"); 8898 const instantType = store2.useState("instantType"); 8899 const lastOpenChangeReason = store2.useState("lastOpenChangeReason"); 8900 const previousInstantTypeRef = React42.useRef(null); 8901 useIsoLayoutEffect(() => { 8902 if (openState && disabled2) { 8903 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.disabled)); 8904 } 8905 }, [openState, disabled2, store2]); 8906 useIsoLayoutEffect(() => { 8907 if (transitionStatus === "ending" && lastOpenChangeReason === reason_parts_exports.none || transitionStatus !== "ending" && isInstantPhase) { 8908 if (instantType !== "delay") { 8909 previousInstantTypeRef.current = instantType; 8910 } 8911 store2.set("instantType", "delay"); 8912 } else if (previousInstantTypeRef.current !== null) { 8913 store2.set("instantType", previousInstantTypeRef.current); 8914 previousInstantTypeRef.current = null; 8915 } 8916 }, [transitionStatus, isInstantPhase, lastOpenChangeReason, instantType, store2]); 8917 useIsoLayoutEffect(() => { 8918 if (open2) { 8919 if (activeTriggerId == null) { 8920 store2.set("payload", void 0); 8921 } 8922 } 8923 }, [store2, activeTriggerId, open2]); 8924 React42.useImperativeHandle(actionsRef, () => ({ 8925 unmount: forceUnmount, 8926 close: () => store2.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction)) 8927 }), [forceUnmount, store2]); 8928 const shouldRenderInteractions = open2 || mounted || !disabled2 && trackCursorAxis !== "none"; 8929 return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(TooltipRootContext.Provider, { 8930 value: store2, 8931 children: [handle && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(PopupHandleAttachment, { 8932 handle, 8933 store: store2 8934 }), shouldRenderInteractions && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(TooltipInteractions, { 8935 store: store2, 8936 disabled: disabled2, 8937 trackCursorAxis 8938 }), typeof children === "function" ? children({ 8939 payload 8940 }) : children] 8941 }); 8942 }); 8943 if (true) TooltipRoot.displayName = "TooltipRoot"; 8944 function TooltipInteractions({ 8945 store: store2, 8946 disabled: disabled2, 8947 trackCursorAxis 8948 }) { 8949 const floatingRootContext = store2.useState("floatingRootContext"); 8950 const dismiss = useDismiss(floatingRootContext, { 8951 enabled: !disabled2, 8952 referencePress: () => store2.select("closeOnClick") 8953 }); 8954 const clientPoint = useClientPoint(floatingRootContext, { 8955 enabled: !disabled2 && trackCursorAxis !== "none", 8956 axis: trackCursorAxis === "none" ? void 0 : trackCursorAxis 8957 }); 8958 const triggerProps = React42.useMemo(() => mergeProps(clientPoint.reference, dismiss.reference), [clientPoint.reference, dismiss.reference]); 8959 usePopupInteractionProps(store2, { 8960 activeTriggerProps: triggerProps, 8961 inactiveTriggerProps: triggerProps, 8962 popupProps: dismiss.floating ?? EMPTY_OBJECT 8963 }); 8964 return null; 8965 } 8966 8967 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/trigger/TooltipTrigger.mjs 8968 var React44 = __toESM(require_react(), 1); 8969 8970 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/provider/TooltipProviderContext.mjs 8971 var React43 = __toESM(require_react(), 1); 8972 var TooltipProviderContext = /* @__PURE__ */ React43.createContext(void 0); 8973 if (true) TooltipProviderContext.displayName = "TooltipProviderContext"; 8974 function useTooltipProviderContext() { 8975 return React43.useContext(TooltipProviderContext); 8976 } 8977 8978 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/utils/constants.mjs 8979 var OPEN_DELAY = 600; 8980 8981 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/trigger/TooltipTrigger.mjs 8982 var TOOLTIP_TRIGGER_IDENTIFIER = "data-base-ui-tooltip-trigger"; 8983 function getTargetElement(event) { 8984 const target = getTarget(event); 8985 return isElement(target) ? target : null; 8986 } 8987 var TooltipTrigger = fastComponentRef(function TooltipTrigger2(componentProps, forwardedRef) { 8988 const { 8989 render, 8990 className, 8991 style, 8992 handle, 8993 payload, 8994 disabled: disabledProp, 8995 delay, 8996 closeOnClick = true, 8997 closeDelay, 8998 id: idProp, 8999 ...elementProps 9000 } = componentProps; 9001 const rootContext = useTooltipRootContext(true); 9002 const handleStore = usePopupHandleStore(handle); 9003 const store2 = handleStore ?? rootContext; 9004 if (!store2) { 9005 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)); 9006 } 9007 const thisTriggerId = useBaseUiId(idProp); 9008 const isTriggerActive = store2.useState("isTriggerActive", thisTriggerId); 9009 const isOpenedByThisTrigger = store2.useState("isOpenedByTrigger", thisTriggerId); 9010 const floatingRootContext = store2.useState("floatingRootContext"); 9011 const triggerElementRef = React44.useRef(null); 9012 const closeDelayWithDefault = closeDelay ?? 0; 9013 const { 9014 registerTrigger, 9015 isMountedByThisTrigger 9016 } = useTriggerDataForwarding(thisTriggerId, triggerElementRef, store2, { 9017 payload, 9018 closeOnClick, 9019 closeDelay: closeDelayWithDefault 9020 }); 9021 const providerDelay = useTooltipProviderContext(); 9022 const { 9023 activeIdRef, 9024 delayRef, 9025 isInstantPhase, 9026 hasProvider 9027 } = useDelayGroup(floatingRootContext, { 9028 open: isOpenedByThisTrigger 9029 }); 9030 const hoverInteraction = useHoverInteractionSharedState(floatingRootContext); 9031 store2.useSyncedValue("isInstantPhase", isInstantPhase); 9032 const rootDisabled = store2.useState("disabled"); 9033 const disabled2 = disabledProp ?? rootDisabled; 9034 const disabledRef = useValueAsRef(disabled2); 9035 const trackCursorAxis = store2.useState("trackCursorAxis"); 9036 const disableHoverablePopup = store2.useState("disableHoverablePopup"); 9037 const isNestedTriggerHoveredRef = React44.useRef(false); 9038 const nestedTriggerOpenTimeout = useTimeout(); 9039 const pointerTypeRef = React44.useRef(void 0); 9040 function getOpenDelay() { 9041 if (hasProvider && activeIdRef.current != null) { 9042 return 0; 9043 } 9044 return delay ?? providerDelay ?? OPEN_DELAY; 9045 } 9046 function isEnabledNestedTriggerTarget(target) { 9047 const triggerEl = triggerElementRef.current; 9048 if (!triggerEl || !target) { 9049 return false; 9050 } 9051 const nearestTrigger = closest(target, `[$TOOLTIP_TRIGGER_IDENTIFIER}]`); 9052 return nearestTrigger !== null && nearestTrigger !== triggerEl && contains(triggerEl, nearestTrigger); 9053 } 9054 function detectNestedTriggerHover(target) { 9055 const nestedTriggerHovered = isEnabledNestedTriggerTarget(target); 9056 isNestedTriggerHoveredRef.current = nestedTriggerHovered; 9057 if (nestedTriggerHovered) { 9058 hoverInteraction.openChangeTimeout.clear(); 9059 hoverInteraction.restTimeout.clear(); 9060 hoverInteraction.restTimeoutPending = false; 9061 nestedTriggerOpenTimeout.clear(); 9062 } 9063 return nestedTriggerHovered; 9064 } 9065 const hoverProps = useHoverReferenceInteraction(floatingRootContext, { 9066 enabled: !disabled2, 9067 mouseOnly: true, 9068 move: false, 9069 handleClose: !disableHoverablePopup && trackCursorAxis !== "both" ? safePolygon() : null, 9070 restMs: getOpenDelay, 9071 delay() { 9072 if (closeDelay == null && hasProvider) { 9073 return { 9074 close: getDelay(delayRef.current, "close") 9075 }; 9076 } 9077 return { 9078 close: closeDelayWithDefault 9079 }; 9080 }, 9081 triggerElementRef, 9082 isActiveTrigger: isTriggerActive, 9083 isClosing: () => store2.select("transitionStatus") === "ending", 9084 shouldOpen() { 9085 return !isNestedTriggerHoveredRef.current; 9086 } 9087 }); 9088 const focusProps = useFocus(floatingRootContext, { 9089 enabled: !disabled2 9090 }).reference; 9091 const handleNestedTriggerHover = (event) => { 9092 const wasNestedTriggerHovered = isNestedTriggerHoveredRef.current; 9093 const target = getTargetElement(event); 9094 const nestedTriggerHovered = detectNestedTriggerHover(target); 9095 const triggerEl = triggerElementRef.current; 9096 const targetInsideTrigger = triggerEl && target && contains(triggerEl, target); 9097 if (nestedTriggerHovered && store2.select("open") && store2.select("lastOpenChangeReason") === reason_parts_exports.triggerHover) { 9098 store2.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 9099 return; 9100 } 9101 if (wasNestedTriggerHovered && !nestedTriggerHovered && targetInsideTrigger && !disabledRef.current && !store2.select("open") && triggerEl && // Match the hover hook's non-strict mouse fallback for mouse-only event sequences. 9102 isMouseLikePointerType(pointerTypeRef.current)) { 9103 const open2 = () => { 9104 if (!isNestedTriggerHoveredRef.current && !disabledRef.current && !store2.select("open")) { 9105 store2.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerEl)); 9106 } 9107 }; 9108 const openDelay = getOpenDelay(); 9109 if (openDelay === 0) { 9110 nestedTriggerOpenTimeout.clear(); 9111 open2(); 9112 } else { 9113 nestedTriggerOpenTimeout.start(openDelay, open2); 9114 } 9115 } 9116 }; 9117 const rootTriggerProps = store2.useState("appliedTriggerProps", isMountedByThisTrigger || trackCursorAxis !== "none"); 9118 const state = { 9119 open: isOpenedByThisTrigger 9120 }; 9121 const element = useRenderElement("button", componentProps, { 9122 state, 9123 ref: [forwardedRef, registerTrigger, triggerElementRef], 9124 props: [hoverProps, focusProps, rootTriggerProps, { 9125 onMouseOver(event) { 9126 handleNestedTriggerHover(event.nativeEvent); 9127 }, 9128 onFocus(event) { 9129 if (isEnabledNestedTriggerTarget(getTargetElement(event.nativeEvent))) { 9130 event.preventBaseUIHandler(); 9131 } 9132 }, 9133 onMouseLeave() { 9134 isNestedTriggerHoveredRef.current = false; 9135 nestedTriggerOpenTimeout.clear(); 9136 pointerTypeRef.current = void 0; 9137 }, 9138 onPointerEnter(event) { 9139 pointerTypeRef.current = event.pointerType; 9140 }, 9141 onPointerDown(event) { 9142 pointerTypeRef.current = event.pointerType; 9143 store2.set("closeOnClick", closeOnClick); 9144 if (closeOnClick && !store2.select("open")) { 9145 store2.cancelPendingOpen(event.nativeEvent); 9146 } 9147 }, 9148 onClick(event) { 9149 if (closeOnClick && !store2.select("open")) { 9150 store2.cancelPendingOpen(event.nativeEvent); 9151 } 9152 }, 9153 id: thisTriggerId, 9154 [triggerDisabled]: disabled2 ? "" : void 0, 9155 [TOOLTIP_TRIGGER_IDENTIFIER]: disabled2 ? void 0 : "" 9156 }, elementProps], 9157 stateAttributesMapping: triggerOpenStateMapping 9158 }); 9159 return element; 9160 }); 9161 if (true) TooltipTrigger.displayName = "TooltipTrigger"; 9162 9163 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/portal/TooltipPortal.mjs 9164 var React46 = __toESM(require_react(), 1); 9165 9166 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/portal/TooltipPortalContext.mjs 9167 var React45 = __toESM(require_react(), 1); 9168 var TooltipPortalContext = /* @__PURE__ */ React45.createContext(void 0); 9169 if (true) TooltipPortalContext.displayName = "TooltipPortalContext"; 9170 function useTooltipPortalContext() { 9171 const value = React45.useContext(TooltipPortalContext); 9172 if (value === void 0) { 9173 throw new Error(true ? "Base UI: <Tooltip.Portal> is missing." : formatErrorMessage_default(70)); 9174 } 9175 return value; 9176 } 9177 9178 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/portal/TooltipPortal.mjs 9179 var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1); 9180 var TooltipPortal = /* @__PURE__ */ React46.forwardRef(function TooltipPortal2(props, forwardedRef) { 9181 const { 9182 keepMounted = false, 9183 ...portalProps 9184 } = props; 9185 const store2 = useTooltipRootContext(); 9186 const mounted = store2.useState("mounted"); 9187 const shouldRender = mounted || keepMounted; 9188 if (!shouldRender) { 9189 return null; 9190 } 9191 return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TooltipPortalContext.Provider, { 9192 value: keepMounted, 9193 children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FloatingPortalLite, { 9194 ref: forwardedRef, 9195 ...portalProps 9196 }) 9197 }); 9198 }); 9199 if (true) TooltipPortal.displayName = "TooltipPortal"; 9200 9201 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/positioner/TooltipPositioner.mjs 9202 var React48 = __toESM(require_react(), 1); 9203 9204 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/positioner/TooltipPositionerContext.mjs 9205 var React47 = __toESM(require_react(), 1); 9206 var TooltipPositionerContext = /* @__PURE__ */ React47.createContext(void 0); 9207 if (true) TooltipPositionerContext.displayName = "TooltipPositionerContext"; 9208 function useTooltipPositionerContext() { 9209 const context = React47.useContext(TooltipPositionerContext); 9210 if (context === void 0) { 9211 throw new Error(true ? "Base UI: TooltipPositionerContext is missing. TooltipPositioner parts must be placed within <Tooltip.Positioner>." : formatErrorMessage_default(71)); 9212 } 9213 return context; 9214 } 9215 9216 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/positioner/TooltipPositioner.mjs 9217 var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1); 9218 var TooltipPositioner = /* @__PURE__ */ React48.forwardRef(function TooltipPositioner2(componentProps, forwardedRef) { 9219 const { 9220 render, 9221 className, 9222 anchor, 9223 positionMethod = "absolute", 9224 side = "top", 9225 align = "center", 9226 sideOffset = 0, 9227 alignOffset = 0, 9228 collisionBoundary = "clipping-ancestors", 9229 collisionPadding = 5, 9230 arrowPadding = 5, 9231 sticky = false, 9232 disableAnchorTracking = false, 9233 collisionAvoidance = POPUP_COLLISION_AVOIDANCE, 9234 style, 9235 ...elementProps 9236 } = componentProps; 9237 const store2 = useTooltipRootContext(); 9238 const keepMounted = useTooltipPortalContext(); 9239 const open2 = store2.useState("open"); 9240 const mounted = store2.useState("mounted"); 9241 const trackCursorAxis = store2.useState("trackCursorAxis"); 9242 const disableHoverablePopup = store2.useState("disableHoverablePopup"); 9243 const floatingRootContext = store2.useState("floatingRootContext"); 9244 const instantType = store2.useState("instantType"); 9245 const transitionStatus = store2.useState("transitionStatus"); 9246 const adaptiveOrigin2 = store2.useState("adaptiveOrigin"); 9247 const positioning = useAnchorPositioning({ 9248 anchor, 9249 positionMethod, 9250 floatingRootContext, 9251 mounted, 9252 side, 9253 sideOffset, 9254 align, 9255 alignOffset, 9256 collisionBoundary, 9257 collisionPadding, 9258 sticky, 9259 arrowPadding, 9260 disableAnchorTracking, 9261 keepMounted, 9262 collisionAvoidance, 9263 adaptiveOrigin: adaptiveOrigin2 9264 }); 9265 const state = React48.useMemo(() => ({ 9266 open: open2, 9267 side: positioning.side, 9268 align: positioning.align, 9269 anchorHidden: positioning.anchorHidden, 9270 instant: trackCursorAxis !== "none" ? "tracking-cursor" : instantType 9271 }), [open2, positioning.side, positioning.align, positioning.anchorHidden, trackCursorAxis, instantType]); 9272 const element = usePositioner(componentProps, state, { 9273 styles: positioning.positionerStyles, 9274 transitionStatus, 9275 props: elementProps, 9276 refs: [forwardedRef, store2.useStateSetter("positionerElement")], 9277 hidden: !mounted, 9278 inert: !open2 || trackCursorAxis === "both" || disableHoverablePopup 9279 }); 9280 return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(TooltipPositionerContext.Provider, { 9281 value: positioning, 9282 children: element 9283 }); 9284 }); 9285 if (true) TooltipPositioner.displayName = "TooltipPositioner"; 9286 9287 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/popup/TooltipPopup.mjs 9288 var React49 = __toESM(require_react(), 1); 9289 var TooltipPopup = /* @__PURE__ */ React49.forwardRef(function TooltipPopup2(componentProps, forwardedRef) { 9290 const { 9291 render, 9292 className, 9293 style, 9294 ...elementProps 9295 } = componentProps; 9296 const store2 = useTooltipRootContext(); 9297 const { 9298 side, 9299 align 9300 } = useTooltipPositionerContext(); 9301 const open2 = store2.useState("open"); 9302 const instantType = store2.useState("instantType"); 9303 const transitionStatus = store2.useState("transitionStatus"); 9304 const popupProps = store2.useState("popupProps"); 9305 const floatingContext = store2.useState("floatingRootContext"); 9306 const disabled2 = store2.useState("disabled"); 9307 const closeDelay = store2.useState("closeDelay"); 9308 useOpenChangeComplete({ 9309 open: open2, 9310 ref: store2.context.popupRef, 9311 onComplete() { 9312 if (open2) { 9313 store2.context.onOpenChangeComplete?.(true); 9314 } 9315 } 9316 }); 9317 useHoverFloatingInteraction(floatingContext, { 9318 enabled: !disabled2, 9319 closeDelay 9320 }); 9321 const setPopupElement = store2.useStateSetter("popupElement"); 9322 const state = { 9323 open: open2, 9324 side, 9325 align, 9326 instant: instantType, 9327 transitionStatus 9328 }; 9329 const element = useRenderElement("div", componentProps, { 9330 state, 9331 ref: [forwardedRef, store2.context.popupRef, setPopupElement], 9332 props: [FOCUSABLE_POPUP_PROPS, popupProps, getDisabledMountTransitionStyles(transitionStatus), elementProps], 9333 stateAttributesMapping: popupTransitionStateMapping 9334 }); 9335 return element; 9336 }); 9337 if (true) TooltipPopup.displayName = "TooltipPopup"; 9338 9339 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/arrow/TooltipArrow.mjs 9340 var React50 = __toESM(require_react(), 1); 9341 var TooltipArrow = /* @__PURE__ */ React50.forwardRef(function TooltipArrow2(componentProps, forwardedRef) { 9342 const { 9343 render, 9344 className, 9345 style, 9346 ...elementProps 9347 } = componentProps; 9348 const store2 = useTooltipRootContext(); 9349 const { 9350 arrowRef, 9351 side, 9352 align, 9353 arrowUncentered, 9354 arrowStyles 9355 } = useTooltipPositionerContext(); 9356 const open2 = store2.useState("open"); 9357 const instantType = store2.useState("instantType"); 9358 const state = { 9359 open: open2, 9360 side, 9361 align, 9362 uncentered: arrowUncentered, 9363 instant: instantType 9364 }; 9365 const element = useRenderElement("div", componentProps, { 9366 state, 9367 ref: [forwardedRef, arrowRef], 9368 props: [{ 9369 style: arrowStyles, 9370 "aria-hidden": true 9371 }, elementProps], 9372 stateAttributesMapping: popupStateMapping 9373 }); 9374 return element; 9375 }); 9376 if (true) TooltipArrow.displayName = "TooltipArrow"; 9377 9378 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/provider/TooltipProvider.mjs 9379 var React51 = __toESM(require_react(), 1); 9380 var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1); 9381 var TooltipProvider = function TooltipProvider2(props) { 9382 const { 9383 delay, 9384 closeDelay, 9385 timeout = 400 9386 } = props; 9387 const delayValue = React51.useMemo(() => ({ 9388 open: delay, 9389 close: closeDelay 9390 }), [delay, closeDelay]); 9391 return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(TooltipProviderContext.Provider, { 9392 value: delay, 9393 children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(FloatingDelayGroup, { 9394 delay: delayValue, 9395 timeoutMs: timeout, 9396 children: props.children 9397 }) 9398 }); 9399 }; 9400 if (true) TooltipProvider.displayName = "TooltipProvider"; 9401 9402 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/viewport/TooltipViewport.mjs 9403 var React52 = __toESM(require_react(), 1); 9404 var TooltipViewport = /* @__PURE__ */ React52.forwardRef(function TooltipViewport2(componentProps, forwardedRef) { 9405 const { 9406 render, 9407 className, 9408 style, 9409 children, 9410 ...elementProps 9411 } = componentProps; 9412 const store2 = useTooltipRootContext(); 9413 const positioner = useTooltipPositionerContext(); 9414 const instantType = store2.useState("instantType"); 9415 const { 9416 children: childrenToRender, 9417 state: viewportState 9418 } = usePopupViewport({ 9419 store: store2, 9420 side: positioner.side, 9421 children 9422 }); 9423 const state = { 9424 activationDirection: viewportState.activationDirection, 9425 transitioning: viewportState.transitioning, 9426 instant: instantType 9427 }; 9428 return useRenderElement("div", componentProps, { 9429 state, 9430 ref: forwardedRef, 9431 props: [elementProps, { 9432 children: childrenToRender 9433 }], 9434 stateAttributesMapping: popupViewportStateMapping 9435 }); 9436 }); 9437 if (true) TooltipViewport.displayName = "TooltipViewport"; 9438 9439 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/tooltip/store/TooltipHandle.mjs 9440 var TooltipHandle = class extends BasePopupHandle { 9441 constructor() { 9442 super(createNullTooltipStore(), "Tooltip"); 9443 } 9444 /** 9445 * Opens the tooltip and associates it with the trigger with the given id. 9446 * 9447 * This method should only be called in an event handler or an effect (not during rendering). 9448 * 9449 * @param triggerId ID of the trigger to associate with the tooltip. The trigger must be a matching 9450 * `Tooltip.Trigger` with this handle passed as a prop. 9451 */ 9452 open(triggerId) { 9453 this.openByTrigger(triggerId); 9454 } 9455 /** 9456 * Closes the tooltip. 9457 * 9458 * This method should only be called in an event handler or an effect (not during rendering). 9459 */ 9460 close() { 9461 this.closePopup(); 9462 } 9463 /** 9464 * Whether the tooltip is currently open. Returns `false` while no root is attached to the handle. 9465 */ 9466 get isOpen() { 9467 return this.attachedStore?.select("open") ?? false; 9468 } 9469 }; 9470 function createTooltipHandle() { 9471 return new TooltipHandle(); 9472 } 9473 9474 // node_modules/.store/@base-ui/react@1.9.0-uHNeM94OdjIeOtpyYGvL0A/node_modules/@base-ui/react/use-render/useRender.mjs 9475 function useRender(params) { 9476 return useRenderElement(params.defaultTagName ?? "div", params, params); 9477 } 9478 9479 // packages/ui/build-module/text/text.mjs 9480 var import_element12 = __toESM(require_element(), 1); 9481 var STYLE_HASH_ATTRIBUTE = "data-wp-hash"; 9482 function getRuntime() { 9483 const globalScope = globalThis; 9484 if (globalScope.__wpStyleRuntime) { 9485 return globalScope.__wpStyleRuntime; 9486 } 9487 globalScope.__wpStyleRuntime = { 9488 documents: /* @__PURE__ */ new Map(), 9489 styles: /* @__PURE__ */ new Map(), 9490 injectedStyles: /* @__PURE__ */ new WeakMap() 9491 }; 9492 if (typeof document !== "undefined") { 9493 registerDocument(document); 9494 } 9495 return globalScope.__wpStyleRuntime; 9496 } 9497 function documentContainsStyleHash(targetDocument, hash) { 9498 if (!targetDocument.head) { 9499 return false; 9500 } 9501 for (const style of targetDocument.head.querySelectorAll( 9502 `style[$STYLE_HASH_ATTRIBUTE}]` 9503 )) { 9504 if (style.getAttribute(STYLE_HASH_ATTRIBUTE) === hash) { 9505 return true; 9506 } 9507 } 9508 return false; 9509 } 9510 function injectStyle(targetDocument, hash, css) { 9511 if (!targetDocument.head) { 9512 return; 9513 } 9514 const runtime = getRuntime(); 9515 let injectedStyles = runtime.injectedStyles.get(targetDocument); 9516 if (!injectedStyles) { 9517 injectedStyles = /* @__PURE__ */ new Set(); 9518 runtime.injectedStyles.set(targetDocument, injectedStyles); 9519 } 9520 if (injectedStyles.has(hash)) { 9521 return; 9522 } 9523 if (documentContainsStyleHash(targetDocument, hash)) { 9524 injectedStyles.add(hash); 9525 return; 9526 } 9527 const style = targetDocument.createElement("style"); 9528 style.setAttribute(STYLE_HASH_ATTRIBUTE, hash); 9529 style.appendChild(targetDocument.createTextNode(css)); 9530 targetDocument.head.appendChild(style); 9531 injectedStyles.add(hash); 9532 } 9533 function registerDocument(targetDocument) { 9534 const runtime = getRuntime(); 9535 runtime.documents.set( 9536 targetDocument, 9537 (runtime.documents.get(targetDocument) ?? 0) + 1 9538 ); 9539 for (const [hash, css] of runtime.styles) { 9540 injectStyle(targetDocument, hash, css); 9541 } 9542 return () => { 9543 const count = runtime.documents.get(targetDocument); 9544 if (count === void 0) { 9545 return; 9546 } 9547 if (count <= 1) { 9548 runtime.documents.delete(targetDocument); 9549 return; 9550 } 9551 runtime.documents.set(targetDocument, count - 1); 9552 }; 9553 } 9554 function registerStyle(hash, css) { 9555 const runtime = getRuntime(); 9556 runtime.styles.set(hash, css); 9557 for (const targetDocument of runtime.documents.keys()) { 9558 injectStyle(targetDocument, hash, css); 9559 } 9560 } 9561 if (typeof process === "undefined" || true) { 9562 registerStyle("09bae534ff", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._9745ffa515d864cf__text{text-wrap:pretty;margin:0}._8882b6a7feb4fd3d__heading-2xl{--_gcd-heading-font-size:var(--wpds-typography-font-size-2xl,32px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-emphasis,600);--_gcd-p-font-size:var(--wpds-typography-font-size-2xl,32px);--_gcd-p-line-height:var(--wpds-typography-line-height-2xl,40px);font-size:var(--wpds-typography-font-size-2xl,32px);line-height:var(--wpds-typography-line-height-2xl,40px)}._664e3e7687c45603__heading-xl,._8882b6a7feb4fd3d__heading-2xl{font-family:var(--wpds-typography-font-family-heading,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-typography-font-weight-emphasis,600)}._664e3e7687c45603__heading-xl{--_gcd-heading-font-size:var(--wpds-typography-font-size-xl,20px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-emphasis,600);--_gcd-p-font-size:var(--wpds-typography-font-size-xl,20px);--_gcd-p-line-height:var(--wpds-typography-line-height-md,24px);font-size:var(--wpds-typography-font-size-xl,20px);line-height:var(--wpds-typography-line-height-md,24px)}.dac661a5de0ed2bd__heading-lg{--_gcd-heading-font-size:var(--wpds-typography-font-size-lg,15px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-emphasis,600);--_gcd-p-font-size:var(--wpds-typography-font-size-lg,15px);--_gcd-p-line-height:var(--wpds-typography-line-height-sm,20px);font-size:var(--wpds-typography-font-size-lg,15px)}._59c7f3f740e2f96e__heading-md,.dac661a5de0ed2bd__heading-lg{font-family:var(--wpds-typography-font-family-heading,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-typography-font-weight-emphasis,600);line-height:var(--wpds-typography-line-height-sm,20px)}._59c7f3f740e2f96e__heading-md{--_gcd-heading-font-size:var(--wpds-typography-font-size-md,13px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-emphasis,600);--_gcd-p-font-size:var(--wpds-typography-font-size-md,13px);--_gcd-p-line-height:var(--wpds-typography-line-height-sm,20px);font-size:var(--wpds-typography-font-size-md,13px)}.cf052fbad8d93b7e__heading-sm{--_gcd-heading-font-size:var(--wpds-typography-font-size-xs,11px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-emphasis,600);--_gcd-p-font-size:var(--wpds-typography-font-size-xs,11px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);font-family:var(--wpds-typography-font-family-heading,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);line-height:var(--wpds-typography-line-height-xs,16px);text-transform:uppercase}._212b9cfef57a0af4__body-xl{--_gcd-heading-font-size:var(--wpds-typography-font-size-xl,20px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-default,400);--_gcd-p-font-size:var(--wpds-typography-font-size-xl,20px);--_gcd-p-line-height:var(--wpds-typography-line-height-xl,32px);font-size:var(--wpds-typography-font-size-xl,20px);line-height:var(--wpds-typography-line-height-xl,32px)}._07f57bc0aa36b2c6__body-lg,._212b9cfef57a0af4__body-xl{font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-typography-font-weight-default,400)}._07f57bc0aa36b2c6__body-lg{--_gcd-heading-font-size:var(--wpds-typography-font-size-lg,15px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-default,400);--_gcd-p-font-size:var(--wpds-typography-font-size-lg,15px);--_gcd-p-line-height:var(--wpds-typography-line-height-md,24px);font-size:var(--wpds-typography-font-size-lg,15px);line-height:var(--wpds-typography-line-height-md,24px)}._0c6da4457aec9e62__body-md{--_gcd-heading-font-size:var(--wpds-typography-font-size-md,13px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-default,400);--_gcd-p-font-size:var(--wpds-typography-font-size-md,13px);--_gcd-p-line-height:var(--wpds-typography-line-height-sm,20px);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--wpds-typography-line-height-sm,20px)}._0c6da4457aec9e62__body-md,.b998f87ff17b7bec__body-sm{font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-typography-font-weight-default,400)}.b998f87ff17b7bec__body-sm{--_gcd-heading-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-default,400);--_gcd-p-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);font-size:var(--wpds-typography-font-size-sm,12px);line-height:var(--wpds-typography-line-height-xs,16px)}}}'); 9563 } 9564 var style_default = { "text": "_9745ffa515d864cf__text", "heading-2xl": "_8882b6a7feb4fd3d__heading-2xl", "heading-xl": "_664e3e7687c45603__heading-xl", "heading-lg": "dac661a5de0ed2bd__heading-lg", "heading-md": "_59c7f3f740e2f96e__heading-md", "heading-sm": "cf052fbad8d93b7e__heading-sm", "body-xl": "_212b9cfef57a0af4__body-xl", "body-lg": "_07f57bc0aa36b2c6__body-lg", "body-md": "_0c6da4457aec9e62__body-md", "body-sm": "b998f87ff17b7bec__body-sm" }; 9565 if (typeof process === "undefined" || true) { 9566 registerStyle("726f348f3f", "._78c10a0773e51a91__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}._5b33aa2d48624b4f__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-weak,#707070))}&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._980b3b4776ac8f81__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._43e478b4279a076c__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._698099e25b0fb1a6__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6)._326aee4184d261fd__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-emphasis,600));margin:var(--_gcd-heading-margin,0)}.e9576240835601ba__a,.e9576240835601ba__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}._3f05789653864a73__ol{list-style:var(--_gcd-ol-list-style,none);margin:var(--_gcd-ol-margin,0);padding-block:var(--_gcd-ol-padding-block,0);padding-inline:var(--_gcd-ol-padding-inline,0)}._3c72ff72abe57859__li{margin:var(--_gcd-li-margin,0)}[role=treeitem] span._79d16267c15d9eb2__span[aria-hidden]{display:var(--_gcd-span-display,inline);font-family:var(--_gcd-span-font-family,inherit);font-size:var(--_gcd-span-font-size,inherit);line-height:var(--_gcd-span-line-height,1);pointer-events:var(--_gcd-span-pointer-events,auto);position:var(--_gcd-span-position,static)}"); 9567 } 9568 var global_css_defense_default = { "button": "_78c10a0773e51a91__button", "input": "_5b33aa2d48624b4f__input", "textarea": "_980b3b4776ac8f81__textarea", "div": "_43e478b4279a076c__div", "p": "_698099e25b0fb1a6__p", "heading": "_326aee4184d261fd__heading", "a": "e9576240835601ba__a", "ol": "_3f05789653864a73__ol", "li": "_3c72ff72abe57859__li", "span": "_79d16267c15d9eb2__span" }; 9569 var Text = (0, import_element12.forwardRef)( 9570 function UnforwardedText({ variant = "body-md", render, className, ...props }, ref) { 9571 const element = useRender({ 9572 render, 9573 defaultTagName: "span", 9574 ref, 9575 props: mergeProps(props, { 9576 className: clsx_default( 9577 style_default.text, 9578 global_css_defense_default.heading, 9579 global_css_defense_default.p, 9580 style_default[variant], 9581 className 9582 ) 9583 }) 9584 }); 9585 return element; 9586 } 9587 ); 9588 9589 // packages/ui/build-module/button/button.mjs 9590 var import_a11y = __toESM(require_a11y(), 1); 9591 var import_element14 = __toESM(require_element(), 1); 9592 var import_i18n2 = __toESM(require_i18n(), 1); 9593 9594 // packages/ui/build-module/spinner/spinner.mjs 9595 var import_element13 = __toESM(require_element(), 1); 9596 var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1); 9597 var STYLE_HASH_ATTRIBUTE2 = "data-wp-hash"; 9598 function getRuntime2() { 9599 const globalScope = globalThis; 9600 if (globalScope.__wpStyleRuntime) { 9601 return globalScope.__wpStyleRuntime; 9602 } 9603 globalScope.__wpStyleRuntime = { 9604 documents: /* @__PURE__ */ new Map(), 9605 styles: /* @__PURE__ */ new Map(), 9606 injectedStyles: /* @__PURE__ */ new WeakMap() 9607 }; 9608 if (typeof document !== "undefined") { 9609 registerDocument2(document); 9610 } 9611 return globalScope.__wpStyleRuntime; 9612 } 9613 function documentContainsStyleHash2(targetDocument, hash) { 9614 if (!targetDocument.head) { 9615 return false; 9616 } 9617 for (const style of targetDocument.head.querySelectorAll( 9618 `style[$STYLE_HASH_ATTRIBUTE2}]` 9619 )) { 9620 if (style.getAttribute(STYLE_HASH_ATTRIBUTE2) === hash) { 9621 return true; 9622 } 9623 } 9624 return false; 9625 } 9626 function injectStyle2(targetDocument, hash, css) { 9627 if (!targetDocument.head) { 9628 return; 9629 } 9630 const runtime = getRuntime2(); 9631 let injectedStyles = runtime.injectedStyles.get(targetDocument); 9632 if (!injectedStyles) { 9633 injectedStyles = /* @__PURE__ */ new Set(); 9634 runtime.injectedStyles.set(targetDocument, injectedStyles); 9635 } 9636 if (injectedStyles.has(hash)) { 9637 return; 9638 } 9639 if (documentContainsStyleHash2(targetDocument, hash)) { 9640 injectedStyles.add(hash); 9641 return; 9642 } 9643 const style = targetDocument.createElement("style"); 9644 style.setAttribute(STYLE_HASH_ATTRIBUTE2, hash); 9645 style.appendChild(targetDocument.createTextNode(css)); 9646 targetDocument.head.appendChild(style); 9647 injectedStyles.add(hash); 9648 } 9649 function registerDocument2(targetDocument) { 9650 const runtime = getRuntime2(); 9651 runtime.documents.set( 9652 targetDocument, 9653 (runtime.documents.get(targetDocument) ?? 0) + 1 9654 ); 9655 for (const [hash, css] of runtime.styles) { 9656 injectStyle2(targetDocument, hash, css); 9657 } 9658 return () => { 9659 const count = runtime.documents.get(targetDocument); 9660 if (count === void 0) { 9661 return; 9662 } 9663 if (count <= 1) { 9664 runtime.documents.delete(targetDocument); 9665 return; 9666 } 9667 runtime.documents.set(targetDocument, count - 1); 9668 }; 9669 } 9670 function registerStyle2(hash, css) { 9671 const runtime = getRuntime2(); 9672 runtime.styles.set(hash, css); 9673 for (const targetDocument of runtime.documents.keys()) { 9674 injectStyle2(targetDocument, hash, css); 9675 } 9676 } 9677 if (typeof process === "undefined" || true) { 9678 registerStyle2("b081213352", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.da418dc15e63be57__spinner{background-color:transparent;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:inline-block;height:var(--wpds-dimension-size-2xs,16px);opacity:1;overflow:visible;position:relative;width:var(--wpds-dimension-size-2xs,16px)}._8b83deccaefa3c92__indicator{fill:transparent;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;transform-origin:50% 50%;@media (forced-colors:active){stroke:CanvasText}animation:_0da63cf2c7b08803__spinner-spin 1.4s linear infinite both}@keyframes _0da63cf2c7b08803__spinner-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}}}"); 9679 } 9680 var style_default2 = { "spinner": "da418dc15e63be57__spinner", "indicator": "_8b83deccaefa3c92__indicator", "spinner-spin": "_0da63cf2c7b08803__spinner-spin" }; 9681 var Spinner = (0, import_element13.forwardRef)( 9682 function UnforwardedSpinner({ className, color, style, ...props }, ref) { 9683 return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)( 9684 "svg", 9685 { 9686 className: clsx_default(style_default2.spinner, className), 9687 style: color === void 0 ? style : { ...style, color }, 9688 viewBox: "0 0 24 24", 9689 xmlns: "http://www.w3.org/2000/svg", 9690 role: "presentation", 9691 focusable: "false", 9692 ...props, 9693 ref, 9694 children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)( 9695 "path", 9696 { 9697 className: style_default2.indicator, 9698 d: "m 12 0 a 12 12 0 0 1 0 24" 9699 } 9700 ) 9701 } 9702 ); 9703 } 9704 ); 9705 9706 // packages/ui/build-module/button/button.mjs 9707 var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1); 9708 var STYLE_HASH_ATTRIBUTE3 = "data-wp-hash"; 9709 function getRuntime3() { 9710 const globalScope = globalThis; 9711 if (globalScope.__wpStyleRuntime) { 9712 return globalScope.__wpStyleRuntime; 9713 } 9714 globalScope.__wpStyleRuntime = { 9715 documents: /* @__PURE__ */ new Map(), 9716 styles: /* @__PURE__ */ new Map(), 9717 injectedStyles: /* @__PURE__ */ new WeakMap() 9718 }; 9719 if (typeof document !== "undefined") { 9720 registerDocument3(document); 9721 } 9722 return globalScope.__wpStyleRuntime; 9723 } 9724 function documentContainsStyleHash3(targetDocument, hash) { 9725 if (!targetDocument.head) { 9726 return false; 9727 } 9728 for (const style of targetDocument.head.querySelectorAll( 9729 `style[$STYLE_HASH_ATTRIBUTE3}]` 9730 )) { 9731 if (style.getAttribute(STYLE_HASH_ATTRIBUTE3) === hash) { 9732 return true; 9733 } 9734 } 9735 return false; 9736 } 9737 function injectStyle3(targetDocument, hash, css) { 9738 if (!targetDocument.head) { 9739 return; 9740 } 9741 const runtime = getRuntime3(); 9742 let injectedStyles = runtime.injectedStyles.get(targetDocument); 9743 if (!injectedStyles) { 9744 injectedStyles = /* @__PURE__ */ new Set(); 9745 runtime.injectedStyles.set(targetDocument, injectedStyles); 9746 } 9747 if (injectedStyles.has(hash)) { 9748 return; 9749 } 9750 if (documentContainsStyleHash3(targetDocument, hash)) { 9751 injectedStyles.add(hash); 9752 return; 9753 } 9754 const style = targetDocument.createElement("style"); 9755 style.setAttribute(STYLE_HASH_ATTRIBUTE3, hash); 9756 style.appendChild(targetDocument.createTextNode(css)); 9757 targetDocument.head.appendChild(style); 9758 injectedStyles.add(hash); 9759 } 9760 function registerDocument3(targetDocument) { 9761 const runtime = getRuntime3(); 9762 runtime.documents.set( 9763 targetDocument, 9764 (runtime.documents.get(targetDocument) ?? 0) + 1 9765 ); 9766 for (const [hash, css] of runtime.styles) { 9767 injectStyle3(targetDocument, hash, css); 9768 } 9769 return () => { 9770 const count = runtime.documents.get(targetDocument); 9771 if (count === void 0) { 9772 return; 9773 } 9774 if (count <= 1) { 9775 runtime.documents.delete(targetDocument); 9776 return; 9777 } 9778 runtime.documents.set(targetDocument, count - 1); 9779 }; 9780 } 9781 function registerStyle3(hash, css) { 9782 const runtime = getRuntime3(); 9783 runtime.styles.set(hash, css); 9784 for (const targetDocument of runtime.documents.keys()) { 9785 injectStyle3(targetDocument, hash, css); 9786 } 9787 } 9788 if (typeof process === "undefined" || true) { 9789 registerStyle3("06ca4dbe45", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.e01b07636421375d__button,.ec10ae721bc68934__is-unstyled{appearance:none;padding:0}.e01b07636421375d__button{--wp-ui-button-font-weight:var(--wpds-typography-font-weight-emphasis,600);--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-strong,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-strong-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 93%,#000));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-strong-disabled,#e6e6e6);--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-brand-strong,#fff);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-brand-strong-active,#fff);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-brand-strong-disabled,#8d8d8d);--wp-ui-button-padding-block:var(--wpds-dimension-padding-xs,4px);--wp-ui-button-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-button-height:var(--wpds-dimension-size-lg,40px);--wp-ui-button-aspect-ratio:auto;--wp-ui-button-font-size:var(--wpds-typography-font-size-md,13px);--wp-ui-button-min-width:calc(4ch + var(--wp-ui-button-padding-inline)*2);--wp-ui-button-icon-margin:calc((var(--wpds-dimension-size-2xs, 16px) - var(--wpds-dimension-size-sm, 24px))/2);--wp-ui-button-border-color:var(--wp-ui-button-background-color);--wp-ui-button-border-color-active:var(--wp-ui-button-background-color-active);--wp-ui-button-border-color-disabled:var(--wp-ui-button-background-color-disabled);--_gcd-button-font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);--_gcd-button-font-size:var(--wp-ui-button-font-size);--_gcd-button-font-weight:var(--wp-ui-button-font-weight);align-items:center;aspect-ratio:var(--wp-ui-button-aspect-ratio);background-clip:border-box;background-color:var(--wp-ui-button-background-color);border-color:var(--wp-ui-button-border-color);border-radius:var(--wpds-border-radius-sm,2px);border-style:solid;border-width:1px;color:var(--wp-ui-button-foreground-color);display:inline-flex;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(--wp-ui-button-font-size);font-weight:var(--wp-ui-button-font-weight);gap:var(--wpds-dimension-gap-sm,8px);justify-content:center;line-height:var(--wpds-typography-line-height-sm,20px);max-width:100%;min-height:var(--wp-ui-button-height);min-width:var(--wp-ui-button-min-width);overflow-wrap:anywhere;padding-block:var(--wp-ui-button-padding-block);padding-inline:var(--wp-ui-button-padding-inline);position:relative;text-align:center;text-decoration:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}@media not (prefers-reduced-motion){transition:color .1s ease-out;*{transition:opacity .1s ease-out}}&[href]{cursor:pointer}[href]{color:inherit;text-decoration:inherit}&:not([data-disabled]):is(:hover,:active,:focus){background-color:var(--wp-ui-button-background-color-active);border-color:var(--wp-ui-button-border-color-active);color:var(--wp-ui-button-foreground-color-active)}&[data-disabled]:not(._414eb921eb9928fa__is-loading){background-color:var(--wp-ui-button-background-color-disabled);border-color:var(--wp-ui-button-border-color-disabled);color:var(--wp-ui-button-foreground-color-disabled);@media (forced-colors:active){border-bottom-color:GrayText;border-left-color:GrayText;border-right-color:GrayText;border-top-color:GrayText;color:GrayText}}}._36aecfa8aa1c059c__is-small{--wp-ui-button-padding-block:0px;--wp-ui-button-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-button-height:var(--wpds-dimension-size-sm,24px)}._6e27e09880945492__icon{margin:var(--wp-ui-button-icon-margin)}.e861e38ec209c386__is-brand{&._126c37d7228179eb__is-outline,&._52d3a0733adabb28__is-minimal{--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-brand,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000));--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-brand-disabled,#8d8d8d)}&._126c37d7228179eb__is-outline{--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);--wp-ui-button-border-color:var(--wpds-color-stroke-interactive-brand,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-border-color-active:var(--wpds-color-stroke-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 85%,#000));--wp-ui-button-border-color-disabled:var(--wpds-color-stroke-interactive-brand-disabled,#dbdbdb)}&._52d3a0733adabb28__is-minimal{--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-weak-disabled,#0000)}}._4f1e6661283d0b09__is-neutral{&._52d3a0733adabb28__is-minimal[aria-pressed=true],&._7b8ab25ed58515d2__is-solid{--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-strong,#2d2d2d);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-strong-active,#1e1e1e);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-strong-disabled,#e6e6e6);--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-neutral-strong,#f0f0f0);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-neutral-strong-active,#f0f0f0);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-neutral-strong-disabled,#8d8d8d)}&._126c37d7228179eb__is-outline,&._52d3a0733adabb28__is-minimal:not([aria-pressed=true]){--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-neutral-active,#1e1e1e);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d)}&._126c37d7228179eb__is-outline{--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-weak-active,#ededed);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-weak-disabled,#0000);--wp-ui-button-border-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d);--wp-ui-button-border-color-active:var(--wpds-color-stroke-interactive-neutral-active,#6e6e6e);--wp-ui-button-border-color-disabled:var(--wpds-color-stroke-interactive-neutral-disabled,#dbdbdb)}&._52d3a0733adabb28__is-minimal:not([aria-pressed=true]){--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-weak-active,#ededed);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-weak-disabled,#0000)}}.ec10ae721bc68934__is-unstyled{background:none;border:none;min-width:unset}.df99f7773c9c8915__is-compact{--wp-ui-button-height:var(--wpds-dimension-size-md,32px)}._414eb921eb9928fa__is-loading:not(.ec10ae721bc68934__is-unstyled){color:transparent;&:not([data-disabled]):is(:hover,:active,:focus){color:transparent}@media (forced-colors:active){color:ButtonFace}>:not(._20f9e334daee91a7__spinner){opacity:0}}}@layer compositions{._20f9e334daee91a7__spinner{color:var(--wp-ui-button-foreground-color);height:var(--wp-ui-button-font-size);inset:0;margin:auto;pointer-events:none;position:absolute;width:var(--wp-ui-button-font-size);>*{stroke-width:2.75}@media (prefers-reduced-motion){>*{animation:none}}@media (forced-colors:active){>*{stroke:ButtonText}}}}}'); 9790 } 9791 var style_default3 = { "button": "e01b07636421375d__button", "is-unstyled": "ec10ae721bc68934__is-unstyled", "is-loading": "_414eb921eb9928fa__is-loading", "is-small": "_36aecfa8aa1c059c__is-small", "icon": "_6e27e09880945492__icon", "is-brand": "e861e38ec209c386__is-brand", "is-outline": "_126c37d7228179eb__is-outline", "is-minimal": "_52d3a0733adabb28__is-minimal", "is-neutral": "_4f1e6661283d0b09__is-neutral", "is-solid": "_7b8ab25ed58515d2__is-solid", "is-compact": "df99f7773c9c8915__is-compact", "spinner": "_20f9e334daee91a7__spinner" }; 9792 if (typeof process === "undefined" || true) { 9793 registerStyle3("37477070fb", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{.ccc29f9575c4c758__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); 9794 } 9795 var resets_default = { "box-sizing": "ccc29f9575c4c758__box-sizing" }; 9796 if (typeof process === "undefined" || true) { 9797 registerStyle3("c13e206e92", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._0f52be5f1d4ce686__outset-ring--focus-within:focus-within,._8f922cee854f2408__outset-ring--focus-visible:focus-visible,.accedd6ae8fd878e__outset-ring--focus:focus{--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}._3ad2c88c126f2bdd__outset-ring--focus-within-except-active:focus-within,.c20f61b115485a7f__outset-ring--focus-except-active:focus{outline:none}._3ad2c88c126f2bdd__outset-ring--focus-within-except-active:focus-within:not(:has(:active)),.c20f61b115485a7f__outset-ring--focus-except-active:focus:not(:active){--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}}}"); 9798 } 9799 var focus_module_default = { "outset-ring--focus": "accedd6ae8fd878e__outset-ring--focus", "outset-ring--focus-visible": "_8f922cee854f2408__outset-ring--focus-visible", "outset-ring--focus-within": "_0f52be5f1d4ce686__outset-ring--focus-within", "outset-ring--focus-except-active": "c20f61b115485a7f__outset-ring--focus-except-active", "outset-ring--focus-within-except-active": "_3ad2c88c126f2bdd__outset-ring--focus-within-except-active" }; 9800 if (typeof process === "undefined" || true) { 9801 registerStyle3("726f348f3f", "._78c10a0773e51a91__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}._5b33aa2d48624b4f__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-weak,#707070))}&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._980b3b4776ac8f81__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._43e478b4279a076c__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._698099e25b0fb1a6__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6)._326aee4184d261fd__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-emphasis,600));margin:var(--_gcd-heading-margin,0)}.e9576240835601ba__a,.e9576240835601ba__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}._3f05789653864a73__ol{list-style:var(--_gcd-ol-list-style,none);margin:var(--_gcd-ol-margin,0);padding-block:var(--_gcd-ol-padding-block,0);padding-inline:var(--_gcd-ol-padding-inline,0)}._3c72ff72abe57859__li{margin:var(--_gcd-li-margin,0)}[role=treeitem] span._79d16267c15d9eb2__span[aria-hidden]{display:var(--_gcd-span-display,inline);font-family:var(--_gcd-span-font-family,inherit);font-size:var(--_gcd-span-font-size,inherit);line-height:var(--_gcd-span-line-height,1);pointer-events:var(--_gcd-span-pointer-events,auto);position:var(--_gcd-span-position,static)}"); 9802 } 9803 var global_css_defense_default2 = { "button": "_78c10a0773e51a91__button", "input": "_5b33aa2d48624b4f__input", "textarea": "_980b3b4776ac8f81__textarea", "div": "_43e478b4279a076c__div", "p": "_698099e25b0fb1a6__p", "heading": "_326aee4184d261fd__heading", "a": "e9576240835601ba__a", "ol": "_3f05789653864a73__ol", "li": "_3c72ff72abe57859__li", "span": "_79d16267c15d9eb2__span" }; 9804 var Button3 = (0, import_element14.forwardRef)( 9805 function UnforwardedButton({ 9806 tone = "brand", 9807 variant = "solid", 9808 size: size4 = "default", 9809 className, 9810 focusableWhenDisabled = true, 9811 disabled: disabled2, 9812 loading, 9813 loadingAnnouncement = (0, import_i18n2.__)("Loading"), 9814 children, 9815 ...props 9816 }, ref) { 9817 const mergedClassName = clsx_default( 9818 global_css_defense_default2.button, 9819 resets_default["box-sizing"], 9820 focus_module_default["outset-ring--focus-except-active"], 9821 variant !== "unstyled" && style_default3.button, 9822 style_default3[`is-$tone}`], 9823 style_default3[`is-$variant}`], 9824 style_default3[`is-$size4}`], 9825 loading && style_default3["is-loading"], 9826 className 9827 ); 9828 (0, import_element14.useEffect)(() => { 9829 if (loading && loadingAnnouncement) { 9830 (0, import_a11y.speak)(loadingAnnouncement); 9831 } 9832 }, [loading, loadingAnnouncement]); 9833 return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)( 9834 Button, 9835 { 9836 ref, 9837 className: mergedClassName, 9838 focusableWhenDisabled, 9839 disabled: disabled2 ?? loading, 9840 ...props, 9841 children: [ 9842 children, 9843 loading && variant !== "unstyled" && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Spinner, { className: style_default3.spinner }) 9844 ] 9845 } 9846 ); 9847 } 9848 ); 9849 9850 // packages/ui/build-module/button/icon.mjs 9851 var import_element15 = __toESM(require_element(), 1); 9852 var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1); 9853 var STYLE_HASH_ATTRIBUTE4 = "data-wp-hash"; 9854 function getRuntime4() { 9855 const globalScope = globalThis; 9856 if (globalScope.__wpStyleRuntime) { 9857 return globalScope.__wpStyleRuntime; 9858 } 9859 globalScope.__wpStyleRuntime = { 9860 documents: /* @__PURE__ */ new Map(), 9861 styles: /* @__PURE__ */ new Map(), 9862 injectedStyles: /* @__PURE__ */ new WeakMap() 9863 }; 9864 if (typeof document !== "undefined") { 9865 registerDocument4(document); 9866 } 9867 return globalScope.__wpStyleRuntime; 9868 } 9869 function documentContainsStyleHash4(targetDocument, hash) { 9870 if (!targetDocument.head) { 9871 return false; 9872 } 9873 for (const style of targetDocument.head.querySelectorAll( 9874 `style[$STYLE_HASH_ATTRIBUTE4}]` 9875 )) { 9876 if (style.getAttribute(STYLE_HASH_ATTRIBUTE4) === hash) { 9877 return true; 9878 } 9879 } 9880 return false; 9881 } 9882 function injectStyle4(targetDocument, hash, css) { 9883 if (!targetDocument.head) { 9884 return; 9885 } 9886 const runtime = getRuntime4(); 9887 let injectedStyles = runtime.injectedStyles.get(targetDocument); 9888 if (!injectedStyles) { 9889 injectedStyles = /* @__PURE__ */ new Set(); 9890 runtime.injectedStyles.set(targetDocument, injectedStyles); 9891 } 9892 if (injectedStyles.has(hash)) { 9893 return; 9894 } 9895 if (documentContainsStyleHash4(targetDocument, hash)) { 9896 injectedStyles.add(hash); 9897 return; 9898 } 9899 const style = targetDocument.createElement("style"); 9900 style.setAttribute(STYLE_HASH_ATTRIBUTE4, hash); 9901 style.appendChild(targetDocument.createTextNode(css)); 9902 targetDocument.head.appendChild(style); 9903 injectedStyles.add(hash); 9904 } 9905 function registerDocument4(targetDocument) { 9906 const runtime = getRuntime4(); 9907 runtime.documents.set( 9908 targetDocument, 9909 (runtime.documents.get(targetDocument) ?? 0) + 1 9910 ); 9911 for (const [hash, css] of runtime.styles) { 9912 injectStyle4(targetDocument, hash, css); 9913 } 9914 return () => { 9915 const count = runtime.documents.get(targetDocument); 9916 if (count === void 0) { 9917 return; 9918 } 9919 if (count <= 1) { 9920 runtime.documents.delete(targetDocument); 9921 return; 9922 } 9923 runtime.documents.set(targetDocument, count - 1); 9924 }; 9925 } 9926 function registerStyle4(hash, css) { 9927 const runtime = getRuntime4(); 9928 runtime.styles.set(hash, css); 9929 for (const targetDocument of runtime.documents.keys()) { 9930 injectStyle4(targetDocument, hash, css); 9931 } 9932 } 9933 if (typeof process === "undefined" || true) { 9934 registerStyle4("06ca4dbe45", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.e01b07636421375d__button,.ec10ae721bc68934__is-unstyled{appearance:none;padding:0}.e01b07636421375d__button{--wp-ui-button-font-weight:var(--wpds-typography-font-weight-emphasis,600);--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-strong,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-strong-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 93%,#000));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-strong-disabled,#e6e6e6);--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-brand-strong,#fff);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-brand-strong-active,#fff);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-brand-strong-disabled,#8d8d8d);--wp-ui-button-padding-block:var(--wpds-dimension-padding-xs,4px);--wp-ui-button-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-button-height:var(--wpds-dimension-size-lg,40px);--wp-ui-button-aspect-ratio:auto;--wp-ui-button-font-size:var(--wpds-typography-font-size-md,13px);--wp-ui-button-min-width:calc(4ch + var(--wp-ui-button-padding-inline)*2);--wp-ui-button-icon-margin:calc((var(--wpds-dimension-size-2xs, 16px) - var(--wpds-dimension-size-sm, 24px))/2);--wp-ui-button-border-color:var(--wp-ui-button-background-color);--wp-ui-button-border-color-active:var(--wp-ui-button-background-color-active);--wp-ui-button-border-color-disabled:var(--wp-ui-button-background-color-disabled);--_gcd-button-font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);--_gcd-button-font-size:var(--wp-ui-button-font-size);--_gcd-button-font-weight:var(--wp-ui-button-font-weight);align-items:center;aspect-ratio:var(--wp-ui-button-aspect-ratio);background-clip:border-box;background-color:var(--wp-ui-button-background-color);border-color:var(--wp-ui-button-border-color);border-radius:var(--wpds-border-radius-sm,2px);border-style:solid;border-width:1px;color:var(--wp-ui-button-foreground-color);display:inline-flex;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(--wp-ui-button-font-size);font-weight:var(--wp-ui-button-font-weight);gap:var(--wpds-dimension-gap-sm,8px);justify-content:center;line-height:var(--wpds-typography-line-height-sm,20px);max-width:100%;min-height:var(--wp-ui-button-height);min-width:var(--wp-ui-button-min-width);overflow-wrap:anywhere;padding-block:var(--wp-ui-button-padding-block);padding-inline:var(--wp-ui-button-padding-inline);position:relative;text-align:center;text-decoration:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}@media not (prefers-reduced-motion){transition:color .1s ease-out;*{transition:opacity .1s ease-out}}&[href]{cursor:pointer}[href]{color:inherit;text-decoration:inherit}&:not([data-disabled]):is(:hover,:active,:focus){background-color:var(--wp-ui-button-background-color-active);border-color:var(--wp-ui-button-border-color-active);color:var(--wp-ui-button-foreground-color-active)}&[data-disabled]:not(._414eb921eb9928fa__is-loading){background-color:var(--wp-ui-button-background-color-disabled);border-color:var(--wp-ui-button-border-color-disabled);color:var(--wp-ui-button-foreground-color-disabled);@media (forced-colors:active){border-bottom-color:GrayText;border-left-color:GrayText;border-right-color:GrayText;border-top-color:GrayText;color:GrayText}}}._36aecfa8aa1c059c__is-small{--wp-ui-button-padding-block:0px;--wp-ui-button-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-button-height:var(--wpds-dimension-size-sm,24px)}._6e27e09880945492__icon{margin:var(--wp-ui-button-icon-margin)}.e861e38ec209c386__is-brand{&._126c37d7228179eb__is-outline,&._52d3a0733adabb28__is-minimal{--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-brand,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000));--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-brand-disabled,#8d8d8d)}&._126c37d7228179eb__is-outline{--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);--wp-ui-button-border-color:var(--wpds-color-stroke-interactive-brand,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-border-color-active:var(--wpds-color-stroke-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 85%,#000));--wp-ui-button-border-color-disabled:var(--wpds-color-stroke-interactive-brand-disabled,#dbdbdb)}&._52d3a0733adabb28__is-minimal{--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-weak-disabled,#0000)}}._4f1e6661283d0b09__is-neutral{&._52d3a0733adabb28__is-minimal[aria-pressed=true],&._7b8ab25ed58515d2__is-solid{--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-strong,#2d2d2d);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-strong-active,#1e1e1e);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-strong-disabled,#e6e6e6);--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-neutral-strong,#f0f0f0);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-neutral-strong-active,#f0f0f0);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-neutral-strong-disabled,#8d8d8d)}&._126c37d7228179eb__is-outline,&._52d3a0733adabb28__is-minimal:not([aria-pressed=true]){--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-neutral-active,#1e1e1e);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d)}&._126c37d7228179eb__is-outline{--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-weak-active,#ededed);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-weak-disabled,#0000);--wp-ui-button-border-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d);--wp-ui-button-border-color-active:var(--wpds-color-stroke-interactive-neutral-active,#6e6e6e);--wp-ui-button-border-color-disabled:var(--wpds-color-stroke-interactive-neutral-disabled,#dbdbdb)}&._52d3a0733adabb28__is-minimal:not([aria-pressed=true]){--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-weak-active,#ededed);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-weak-disabled,#0000)}}.ec10ae721bc68934__is-unstyled{background:none;border:none;min-width:unset}.df99f7773c9c8915__is-compact{--wp-ui-button-height:var(--wpds-dimension-size-md,32px)}._414eb921eb9928fa__is-loading:not(.ec10ae721bc68934__is-unstyled){color:transparent;&:not([data-disabled]):is(:hover,:active,:focus){color:transparent}@media (forced-colors:active){color:ButtonFace}>:not(._20f9e334daee91a7__spinner){opacity:0}}}@layer compositions{._20f9e334daee91a7__spinner{color:var(--wp-ui-button-foreground-color);height:var(--wp-ui-button-font-size);inset:0;margin:auto;pointer-events:none;position:absolute;width:var(--wp-ui-button-font-size);>*{stroke-width:2.75}@media (prefers-reduced-motion){>*{animation:none}}@media (forced-colors:active){>*{stroke:ButtonText}}}}}'); 9935 } 9936 var style_default4 = { "button": "e01b07636421375d__button", "is-unstyled": "ec10ae721bc68934__is-unstyled", "is-loading": "_414eb921eb9928fa__is-loading", "is-small": "_36aecfa8aa1c059c__is-small", "icon": "_6e27e09880945492__icon", "is-brand": "e861e38ec209c386__is-brand", "is-outline": "_126c37d7228179eb__is-outline", "is-minimal": "_52d3a0733adabb28__is-minimal", "is-neutral": "_4f1e6661283d0b09__is-neutral", "is-solid": "_7b8ab25ed58515d2__is-solid", "is-compact": "df99f7773c9c8915__is-compact", "spinner": "_20f9e334daee91a7__spinner" }; 9937 var ButtonIcon = (0, import_element15.forwardRef)( 9938 function UnforwardedButtonIcon({ className, icon, ...props }, ref) { 9939 return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)( 9940 Icon, 9941 { 9942 ref, 9943 icon, 9944 className: clsx_default(style_default4.icon, className), 9945 size: 24, 9946 ...props 9947 } 9948 ); 9949 } 9950 ); 9951 9952 // packages/ui/build-module/button/index.mjs 9953 ButtonIcon.displayName = "Button.Icon"; 9954 var Button4 = Object.assign(Button3, { 9955 /** 9956 * An icon component specifically designed to work well when rendered inside 9957 * a `Button` component. 9958 */ 9959 Icon: ButtonIcon 9960 }); 9961 9962 // packages/icons/build-module/icon/index.mjs 9963 var import_element16 = __toESM(require_element(), 1); 9964 var icon_default = (0, import_element16.forwardRef)( 9965 ({ icon, size: size4 = 24, style, ...props }, ref) => { 9966 const intrinsicStyle = icon.props.style; 9967 const mergedStyle = intrinsicStyle || style ? { ...intrinsicStyle, ...style } : void 0; 9968 return (0, import_element16.cloneElement)(icon, { 9969 width: size4, 9970 height: size4, 9971 ...props, 9972 // Merge styles so the icon's intrinsic style (e.g. `fill: none` on 9973 // stroke-based icons) is preserved unless the consumer overrides 9974 // the same property explicitly. 9975 ...mergedStyle ? { style: mergedStyle } : {}, 9976 ref 9977 }); 9978 } 9979 ); 9980 9981 // packages/icons/build-module/library/caution.mjs 9982 var import_primitives2 = __toESM(require_primitives(), 1); 9983 var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1); 9984 var caution_default = /* @__PURE__ */ (0, import_jsx_runtime16.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_runtime16.jsx)(import_primitives2.Path, { d: "M12 8L12 13M12 14.5L12 16M4.75 12C4.75 7.99593 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12Z", strokeLinejoin: "round" }) }); 9985 9986 // packages/icons/build-module/library/close-small.mjs 9987 var import_primitives3 = __toESM(require_primitives(), 1); 9988 var import_jsx_runtime17 = __toESM(require_jsx_runtime(), 1); 9989 var close_small_default = /* @__PURE__ */ (0, import_jsx_runtime17.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_runtime17.jsx)(import_primitives3.Path, { d: "M7.75 16.25L16.25 7.75M16.25 16.25L7.75 7.75" }) }); 9990 9991 // packages/icons/build-module/library/error.mjs 9992 var import_primitives4 = __toESM(require_primitives(), 1); 9993 var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1); 9994 var error_default = /* @__PURE__ */ (0, import_jsx_runtime18.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_runtime18.jsx)(import_primitives4.Path, { d: "M12 9L12 14M12 15.5V17M11.1284 5.04947L3.83827 18.0097C3.46331 18.6763 3.94502 19.5 4.70985 19.5H19.2902C20.055 19.5 20.5367 18.6763 20.1617 18.0097L12.8716 5.04947C12.4893 4.36982 11.5107 4.36982 11.1284 5.04947Z" }) }); 9995 9996 // packages/icons/build-module/library/info.mjs 9997 var import_primitives5 = __toESM(require_primitives(), 1); 9998 var import_jsx_runtime19 = __toESM(require_jsx_runtime(), 1); 9999 var info_default = /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives5.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives5.Path, { d: "M12 16V11M12 9.5V8M19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12C4.75 7.99594 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12Z", strokeLinejoin: "round" }) }); 10000 10001 // packages/icons/build-module/library/published.mjs 10002 var import_primitives6 = __toESM(require_primitives(), 1); 10003 var import_jsx_runtime20 = __toESM(require_jsx_runtime(), 1); 10004 var published_default = /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_primitives6.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: [ 10005 /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives6.Path, { d: "M12 19.25C16.0041 19.25 19.25 16.0041 19.25 12C19.25 7.99594 16.0041 4.75 12 4.75C7.99594 4.75 4.75 7.99594 4.75 12C4.75 16.0041 7.99594 19.25 12 19.25Z", strokeLinejoin: "round" }), 10006 /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives6.Path, { d: "M9 12L11 14L15 10" }) 10007 ] }); 10008 10009 // packages/icons/build-module/library/star-empty.mjs 10010 var import_primitives7 = __toESM(require_primitives(), 1); 10011 var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1); 10012 var star_empty_default = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives7.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_primitives7.Path, { d: "M12 5.71576L13.6106 8.97924C13.7563 9.27438 14.0379 9.47895 14.3636 9.52628L17.965 10.0496L15.359 12.5899C15.1233 12.8196 15.0157 13.1506 15.0714 13.475L15.6866 17.0619L12.4653 15.3684C12.174 15.2152 11.826 15.2152 11.5347 15.3684L8.31341 17.0619L8.92861 13.475C8.98425 13.1506 8.8767 12.8196 8.64102 12.5899L6.03497 10.0496L9.63644 9.52628C9.96215 9.47895 10.2437 9.27438 10.3894 8.97924L12 5.71576Z" }) }); 10013 10014 // packages/icons/build-module/library/star-filled.mjs 10015 var import_primitives8 = __toESM(require_primitives(), 1); 10016 var import_jsx_runtime22 = __toESM(require_jsx_runtime(), 1); 10017 var star_filled_default = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives8.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_primitives8.Path, { d: "M12 5.71576L13.6106 8.97924C13.7563 9.27438 14.0379 9.47895 14.3636 9.52628L17.965 10.0496L15.359 12.5899C15.1233 12.8196 15.0157 13.1506 15.0714 13.475L15.6866 17.0619L12.4653 15.3684C12.174 15.2152 11.826 15.2152 11.5347 15.3684L8.31341 17.0619L8.92861 13.475C8.98425 13.1506 8.8767 12.8196 8.64102 12.5899L6.03497 10.0496L9.63644 9.52628C9.96215 9.47895 10.2437 9.27438 10.3894 8.97924L12 5.71576Z", fill: "currentColor" }) }); 10018 10019 // packages/icons/build-module/library/star-half.mjs 10020 var import_primitives9 = __toESM(require_primitives(), 1); 10021 var import_jsx_runtime23 = __toESM(require_jsx_runtime(), 1); 10022 var star_half_default = /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_primitives9.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: [ 10023 /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives9.Path, { d: "M12 5.71576L13.6106 8.97924C13.7563 9.27438 14.0379 9.47895 14.3636 9.52628L17.965 10.0496L15.359 12.5899C15.1233 12.8196 15.0157 13.1506 15.0714 13.475L15.6866 17.0619L12.4653 15.3684C12.174 15.2152 11.826 15.2152 11.5347 15.3684L8.31341 17.0619L8.92861 13.475C8.98425 13.1506 8.8767 12.8196 8.64102 12.5899L6.03497 10.0496L9.63644 9.52628C9.96215 9.47895 10.2437 9.27438 10.3894 8.97924L12 5.71576Z" }), 10024 /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives9.Path, { d: "M11.4653 15.4048C11.7941 15.232 12 14.8912 12 14.5197V5.71576L10.3894 8.97924C10.2437 9.27438 9.96215 9.47895 9.63644 9.52628L6.03497 10.0496L8.64102 12.5899C8.8767 12.8196 8.98425 13.1506 8.92861 13.475L8.31341 17.0619L11.4653 15.4048Z", fill: "currentColor", stroke: "none" }) 10025 ] }); 10026 10027 // packages/icons/build-module/library/tip.mjs 10028 var import_primitives10 = __toESM(require_primitives(), 1); 10029 var import_jsx_runtime24 = __toESM(require_jsx_runtime(), 1); 10030 var tip_default = /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_primitives10.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_runtime24.jsx)(import_primitives10.Path, { d: "M8 18.25L16 18.25M10 21.25H14M18 9C18 12.3137 15.3137 15 12 15C8.68629 15 6 12.3137 6 9C6 5.68629 8.68629 3 12 3C15.3137 3 18 5.68629 18 9Z" }) }); 10031 10032 // packages/ui/build-module/utils/keyboard-shortcut.mjs 10033 var import_element18 = __toESM(require_element(), 1); 10034 var import_i18n3 = __toESM(require_i18n(), 1); 10035 10036 // packages/ui/build-module/visually-hidden/visually-hidden.mjs 10037 var import_element17 = __toESM(require_element(), 1); 10038 var STYLE_HASH_ATTRIBUTE5 = "data-wp-hash"; 10039 function getRuntime5() { 10040 const globalScope = globalThis; 10041 if (globalScope.__wpStyleRuntime) { 10042 return globalScope.__wpStyleRuntime; 10043 } 10044 globalScope.__wpStyleRuntime = { 10045 documents: /* @__PURE__ */ new Map(), 10046 styles: /* @__PURE__ */ new Map(), 10047 injectedStyles: /* @__PURE__ */ new WeakMap() 10048 }; 10049 if (typeof document !== "undefined") { 10050 registerDocument5(document); 10051 } 10052 return globalScope.__wpStyleRuntime; 10053 } 10054 function documentContainsStyleHash5(targetDocument, hash) { 10055 if (!targetDocument.head) { 10056 return false; 10057 } 10058 for (const style of targetDocument.head.querySelectorAll( 10059 `style[$STYLE_HASH_ATTRIBUTE5}]` 10060 )) { 10061 if (style.getAttribute(STYLE_HASH_ATTRIBUTE5) === hash) { 10062 return true; 10063 } 10064 } 10065 return false; 10066 } 10067 function injectStyle5(targetDocument, hash, css) { 10068 if (!targetDocument.head) { 10069 return; 10070 } 10071 const runtime = getRuntime5(); 10072 let injectedStyles = runtime.injectedStyles.get(targetDocument); 10073 if (!injectedStyles) { 10074 injectedStyles = /* @__PURE__ */ new Set(); 10075 runtime.injectedStyles.set(targetDocument, injectedStyles); 10076 } 10077 if (injectedStyles.has(hash)) { 10078 return; 10079 } 10080 if (documentContainsStyleHash5(targetDocument, hash)) { 10081 injectedStyles.add(hash); 10082 return; 10083 } 10084 const style = targetDocument.createElement("style"); 10085 style.setAttribute(STYLE_HASH_ATTRIBUTE5, hash); 10086 style.appendChild(targetDocument.createTextNode(css)); 10087 targetDocument.head.appendChild(style); 10088 injectedStyles.add(hash); 10089 } 10090 function registerDocument5(targetDocument) { 10091 const runtime = getRuntime5(); 10092 runtime.documents.set( 10093 targetDocument, 10094 (runtime.documents.get(targetDocument) ?? 0) + 1 10095 ); 10096 for (const [hash, css] of runtime.styles) { 10097 injectStyle5(targetDocument, hash, css); 10098 } 10099 return () => { 10100 const count = runtime.documents.get(targetDocument); 10101 if (count === void 0) { 10102 return; 10103 } 10104 if (count <= 1) { 10105 runtime.documents.delete(targetDocument); 10106 return; 10107 } 10108 runtime.documents.set(targetDocument, count - 1); 10109 }; 10110 } 10111 function registerStyle5(hash, css) { 10112 const runtime = getRuntime5(); 10113 runtime.styles.set(hash, css); 10114 for (const targetDocument of runtime.documents.keys()) { 10115 injectStyle5(targetDocument, hash, css); 10116 } 10117 } 10118 if (typeof process === "undefined" || true) { 10119 registerStyle5("7caae29f9e", ".e2c3cbe6ada7d785__visually-hidden{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;overflow-wrap:normal;padding:0;position:absolute;width:1px;word-break:normal}"); 10120 } 10121 var style_default5 = { "visually-hidden": "e2c3cbe6ada7d785__visually-hidden" }; 10122 var VisuallyHidden = (0, import_element17.forwardRef)( 10123 function UnforwardedVisuallyHidden({ render, ...restProps }, ref) { 10124 const element = useRender({ 10125 render, 10126 ref, 10127 props: mergeProps( 10128 { className: style_default5["visually-hidden"] }, 10129 restProps, 10130 { 10131 // @ts-expect-error Arbitrary data-* attributes aren't indexable on the typed div props. Kept hardcoded so consumers can't change or remove it. 10132 "data-visually-hidden": "" 10133 } 10134 ) 10135 }); 10136 return element; 10137 } 10138 ); 10139 10140 // packages/ui/build-module/utils/keyboard-shortcut.mjs 10141 var import_jsx_runtime25 = __toESM(require_jsx_runtime(), 1); 10142 function useKeyboardShortcutProps({ 10143 "aria-describedby": ariaDescribedBy, 10144 "aria-keyshortcuts": ariaKeyShortcuts, 10145 shortcut 10146 }) { 10147 const generatedDescriptionId = (0, import_element18.useId)(); 10148 const descriptionId = shortcut ? generatedDescriptionId : void 0; 10149 const describedBy = [ariaDescribedBy, descriptionId].filter(Boolean).join(" "); 10150 return { 10151 descriptionId, 10152 targetProps: { 10153 "aria-describedby": describedBy || void 0, 10154 "aria-keyshortcuts": shortcut?.ariaKeyShortcut ?? ariaKeyShortcuts 10155 } 10156 }; 10157 } 10158 var KeyboardShortcutDescription = (0, import_element18.forwardRef)(function UnforwardedKeyboardShortcutDescription({ descriptionId, shortcut }, ref) { 10159 return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)( 10160 VisuallyHidden, 10161 { 10162 id: descriptionId, 10163 "aria-hidden": "true", 10164 render: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { ref }), 10165 children: (0, import_i18n3.sprintf)( 10166 /* translators: %s: keyboard shortcut. */ 10167 (0, import_i18n3.__)("Keyboard shortcut: %s"), 10168 shortcut.label ?? shortcut.ariaKeyShortcut 10169 ) 10170 } 10171 ); 10172 }); 10173 var KeyboardShortcutDisplay = (0, import_element18.forwardRef)(function UnforwardedKeyboardShortcutDisplay({ className, shortcut }, ref) { 10174 return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { ref, "aria-hidden": "true", className, dir: "ltr", children: shortcut.displayShortcut }); 10175 }); 10176 10177 // packages/ui/build-module/utils/render-slot-with-children.mjs 10178 var import_element19 = __toESM(require_element(), 1); 10179 function renderSlotWithChildren(slot, defaultSlot, children) { 10180 return (0, import_element19.cloneElement)( 10181 slot ?? defaultSlot, 10182 { children } 10183 ); 10184 } 10185 10186 // packages/ui/build-module/utils/wp-compat-overlay-slot.mjs 10187 var STYLE_HASH_ATTRIBUTE6 = "data-wp-hash"; 10188 function getRuntime6() { 10189 const globalScope = globalThis; 10190 if (globalScope.__wpStyleRuntime) { 10191 return globalScope.__wpStyleRuntime; 10192 } 10193 globalScope.__wpStyleRuntime = { 10194 documents: /* @__PURE__ */ new Map(), 10195 styles: /* @__PURE__ */ new Map(), 10196 injectedStyles: /* @__PURE__ */ new WeakMap() 10197 }; 10198 if (typeof document !== "undefined") { 10199 registerDocument6(document); 10200 } 10201 return globalScope.__wpStyleRuntime; 10202 } 10203 function documentContainsStyleHash6(targetDocument, hash) { 10204 if (!targetDocument.head) { 10205 return false; 10206 } 10207 for (const style of targetDocument.head.querySelectorAll( 10208 `style[$STYLE_HASH_ATTRIBUTE6}]` 10209 )) { 10210 if (style.getAttribute(STYLE_HASH_ATTRIBUTE6) === hash) { 10211 return true; 10212 } 10213 } 10214 return false; 10215 } 10216 function injectStyle6(targetDocument, hash, css) { 10217 if (!targetDocument.head) { 10218 return; 10219 } 10220 const runtime = getRuntime6(); 10221 let injectedStyles = runtime.injectedStyles.get(targetDocument); 10222 if (!injectedStyles) { 10223 injectedStyles = /* @__PURE__ */ new Set(); 10224 runtime.injectedStyles.set(targetDocument, injectedStyles); 10225 } 10226 if (injectedStyles.has(hash)) { 10227 return; 10228 } 10229 if (documentContainsStyleHash6(targetDocument, hash)) { 10230 injectedStyles.add(hash); 10231 return; 10232 } 10233 const style = targetDocument.createElement("style"); 10234 style.setAttribute(STYLE_HASH_ATTRIBUTE6, hash); 10235 style.appendChild(targetDocument.createTextNode(css)); 10236 targetDocument.head.appendChild(style); 10237 injectedStyles.add(hash); 10238 } 10239 function registerDocument6(targetDocument) { 10240 const runtime = getRuntime6(); 10241 runtime.documents.set( 10242 targetDocument, 10243 (runtime.documents.get(targetDocument) ?? 0) + 1 10244 ); 10245 for (const [hash, css] of runtime.styles) { 10246 injectStyle6(targetDocument, hash, css); 10247 } 10248 return () => { 10249 const count = runtime.documents.get(targetDocument); 10250 if (count === void 0) { 10251 return; 10252 } 10253 if (count <= 1) { 10254 runtime.documents.delete(targetDocument); 10255 return; 10256 } 10257 runtime.documents.set(targetDocument, count - 1); 10258 }; 10259 } 10260 function registerStyle6(hash, css) { 10261 const runtime = getRuntime6(); 10262 runtime.styles.set(hash, css); 10263 for (const targetDocument of runtime.documents.keys()) { 10264 injectStyle6(targetDocument, hash, css); 10265 } 10266 } 10267 if (typeof process === "undefined" || true) { 10268 registerStyle6("40df669685", "._9e7887c25dedb459__slot{inset:0;isolation:isolate;pointer-events:none;position:fixed;z-index:1000000003}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._9e7887c25dedb459__slot>*{pointer-events:auto}}}"); 10269 } 10270 var wp_compat_overlay_slot_default = { "slot": "_9e7887c25dedb459__slot" }; 10271 var WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE = "data-wp-compat-overlay-slot"; 10272 function resolveOwnerDocument() { 10273 return typeof document === "undefined" ? null : document; 10274 } 10275 function isInWordPressEnvironment() { 10276 let topWp; 10277 try { 10278 topWp = window.top?.wp; 10279 } catch { 10280 } 10281 const wp = topWp ?? window.wp; 10282 return typeof wp?.components === "object" && wp.components !== null; 10283 } 10284 var cachedSlot = null; 10285 function ensureSlotIsAccessible(element) { 10286 element.setAttribute("aria-hidden", "false"); 10287 return element; 10288 } 10289 function createSlot(ownerDocument2) { 10290 const element = ownerDocument2.createElement("div"); 10291 element.setAttribute(WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE, ""); 10292 if (wp_compat_overlay_slot_default.slot) { 10293 element.classList.add(wp_compat_overlay_slot_default.slot); 10294 } 10295 ownerDocument2.body.appendChild(element); 10296 return element; 10297 } 10298 function getWpCompatOverlaySlot() { 10299 if (typeof window === "undefined") { 10300 return void 0; 10301 } 10302 if (!isInWordPressEnvironment() && window.__wpUiCompatOverlaySlotEnabled !== true) { 10303 return void 0; 10304 } 10305 const ownerDocument2 = resolveOwnerDocument(); 10306 if (!ownerDocument2 || !ownerDocument2.body) { 10307 return void 0; 10308 } 10309 if (cachedSlot && cachedSlot.ownerDocument === ownerDocument2 && cachedSlot.isConnected) { 10310 return ensureSlotIsAccessible(cachedSlot); 10311 } 10312 const existing = ownerDocument2.querySelector( 10313 `[$WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE}]` 10314 ); 10315 if (existing instanceof HTMLDivElement) { 10316 cachedSlot = ensureSlotIsAccessible(existing); 10317 return cachedSlot; 10318 } 10319 if (cachedSlot?.isConnected) { 10320 cachedSlot.remove(); 10321 } 10322 cachedSlot = ensureSlotIsAccessible(createSlot(ownerDocument2)); 10323 return cachedSlot; 10324 } 10325 10326 // packages/ui/build-module/utils/direction-provider.mjs 10327 var import_i18n4 = __toESM(require_i18n(), 1); 10328 var import_jsx_runtime26 = __toESM(require_jsx_runtime(), 1); 10329 function DirectionProvider3({ children }) { 10330 return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(DirectionProvider, { direction: (0, import_i18n4.isRTL)() ? "rtl" : "ltr", children }); 10331 } 10332 10333 // packages/ui/build-module/tooltip/index.mjs 10334 var tooltip_exports = {}; 10335 __export(tooltip_exports, { 10336 Popup: () => Popup, 10337 Portal: () => Portal, 10338 Positioner: () => Positioner, 10339 Provider: () => Provider, 10340 Root: () => Root, 10341 Trigger: () => Trigger 10342 }); 10343 10344 // packages/ui/build-module/tooltip/popup.mjs 10345 var import_element22 = __toESM(require_element(), 1); 10346 10347 // packages/ui/build-module/tooltip/portal.mjs 10348 var import_element20 = __toESM(require_element(), 1); 10349 var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1); 10350 var Portal = (0, import_element20.forwardRef)( 10351 function TooltipPortal3({ container, ...restProps }, ref) { 10352 return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)( 10353 index_parts_exports.Portal, 10354 { 10355 container: container === void 0 ? getWpCompatOverlaySlot() : container, 10356 ...restProps, 10357 ref 10358 } 10359 ); 10360 } 10361 ); 10362 10363 // packages/ui/build-module/tooltip/positioner.mjs 10364 var import_element21 = __toESM(require_element(), 1); 10365 var import_jsx_runtime28 = __toESM(require_jsx_runtime(), 1); 10366 var STYLE_HASH_ATTRIBUTE7 = "data-wp-hash"; 10367 function getRuntime7() { 10368 const globalScope = globalThis; 10369 if (globalScope.__wpStyleRuntime) { 10370 return globalScope.__wpStyleRuntime; 10371 } 10372 globalScope.__wpStyleRuntime = { 10373 documents: /* @__PURE__ */ new Map(), 10374 styles: /* @__PURE__ */ new Map(), 10375 injectedStyles: /* @__PURE__ */ new WeakMap() 10376 }; 10377 if (typeof document !== "undefined") { 10378 registerDocument7(document); 10379 } 10380 return globalScope.__wpStyleRuntime; 10381 } 10382 function documentContainsStyleHash7(targetDocument, hash) { 10383 if (!targetDocument.head) { 10384 return false; 10385 } 10386 for (const style of targetDocument.head.querySelectorAll( 10387 `style[$STYLE_HASH_ATTRIBUTE7}]` 10388 )) { 10389 if (style.getAttribute(STYLE_HASH_ATTRIBUTE7) === hash) { 10390 return true; 10391 } 10392 } 10393 return false; 10394 } 10395 function injectStyle7(targetDocument, hash, css) { 10396 if (!targetDocument.head) { 10397 return; 10398 } 10399 const runtime = getRuntime7(); 10400 let injectedStyles = runtime.injectedStyles.get(targetDocument); 10401 if (!injectedStyles) { 10402 injectedStyles = /* @__PURE__ */ new Set(); 10403 runtime.injectedStyles.set(targetDocument, injectedStyles); 10404 } 10405 if (injectedStyles.has(hash)) { 10406 return; 10407 } 10408 if (documentContainsStyleHash7(targetDocument, hash)) { 10409 injectedStyles.add(hash); 10410 return; 10411 } 10412 const style = targetDocument.createElement("style"); 10413 style.setAttribute(STYLE_HASH_ATTRIBUTE7, hash); 10414 style.appendChild(targetDocument.createTextNode(css)); 10415 targetDocument.head.appendChild(style); 10416 injectedStyles.add(hash); 10417 } 10418 function registerDocument7(targetDocument) { 10419 const runtime = getRuntime7(); 10420 runtime.documents.set( 10421 targetDocument, 10422 (runtime.documents.get(targetDocument) ?? 0) + 1 10423 ); 10424 for (const [hash, css] of runtime.styles) { 10425 injectStyle7(targetDocument, hash, css); 10426 } 10427 return () => { 10428 const count = runtime.documents.get(targetDocument); 10429 if (count === void 0) { 10430 return; 10431 } 10432 if (count <= 1) { 10433 runtime.documents.delete(targetDocument); 10434 return; 10435 } 10436 runtime.documents.set(targetDocument, count - 1); 10437 }; 10438 } 10439 function registerStyle7(hash, css) { 10440 const runtime = getRuntime7(); 10441 runtime.styles.set(hash, css); 10442 for (const targetDocument of runtime.documents.keys()) { 10443 injectStyle7(targetDocument, hash, css); 10444 } 10445 } 10446 if (typeof process === "undefined" || true) { 10447 registerStyle7("37477070fb", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{.ccc29f9575c4c758__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); 10448 } 10449 var resets_default2 = { "box-sizing": "ccc29f9575c4c758__box-sizing" }; 10450 if (typeof process === "undefined" || true) { 10451 registerStyle7("aaf79ac691", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.b9266862d9435660__positioner{z-index:var(--wp-ui-tooltip-z-index,initial)}._7bb3fd8a0810be6d__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}}}}'); 10452 } 10453 var style_default6 = { "positioner": "b9266862d9435660__positioner", "popup": "_7bb3fd8a0810be6d__popup" }; 10454 var Positioner = (0, import_element21.forwardRef)( 10455 function TooltipPositioner3({ align = "center", className, side = "top", sideOffset = 4, ...props }, ref) { 10456 return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)( 10457 index_parts_exports.Positioner, 10458 { 10459 ref, 10460 align, 10461 side, 10462 sideOffset, 10463 ...props, 10464 className: clsx_default( 10465 resets_default2["box-sizing"], 10466 style_default6.positioner, 10467 className 10468 ) 10469 } 10470 ); 10471 } 10472 ); 10473 10474 // packages/ui/build-module/utils/theme-provider.mjs 10475 var theme = __toESM(require_theme(), 1); 10476 10477 // packages/ui/build-module/lock-unlock.mjs 10478 var import_private_apis = __toESM(require_private_apis(), 1); 10479 var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( 10480 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", 10481 "@wordpress/ui" 10482 ); 10483 10484 // packages/ui/build-module/utils/theme-provider.mjs 10485 function getThemeProvider() { 10486 const themePackage = theme; 10487 if (themePackage.ThemeProvider) { 10488 return themePackage.ThemeProvider; 10489 } 10490 if (!themePackage.privateApis) { 10491 throw new Error( 10492 "@wordpress/ui: @wordpress/theme must expose `ThemeProvider` or `privateApis.ThemeProvider`." 10493 ); 10494 } 10495 return unlock( 10496 themePackage.privateApis 10497 ).ThemeProvider; 10498 } 10499 var ThemeProvider = getThemeProvider(); 10500 10501 // packages/ui/build-module/tooltip/popup.mjs 10502 var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1); 10503 var STYLE_HASH_ATTRIBUTE8 = "data-wp-hash"; 10504 function getRuntime8() { 10505 const globalScope = globalThis; 10506 if (globalScope.__wpStyleRuntime) { 10507 return globalScope.__wpStyleRuntime; 10508 } 10509 globalScope.__wpStyleRuntime = { 10510 documents: /* @__PURE__ */ new Map(), 10511 styles: /* @__PURE__ */ new Map(), 10512 injectedStyles: /* @__PURE__ */ new WeakMap() 10513 }; 10514 if (typeof document !== "undefined") { 10515 registerDocument8(document); 10516 } 10517 return globalScope.__wpStyleRuntime; 10518 } 10519 function documentContainsStyleHash8(targetDocument, hash) { 10520 if (!targetDocument.head) { 10521 return false; 10522 } 10523 for (const style of targetDocument.head.querySelectorAll( 10524 `style[$STYLE_HASH_ATTRIBUTE8}]` 10525 )) { 10526 if (style.getAttribute(STYLE_HASH_ATTRIBUTE8) === hash) { 10527 return true; 10528 } 10529 } 10530 return false; 10531 } 10532 function injectStyle8(targetDocument, hash, css) { 10533 if (!targetDocument.head) { 10534 return; 10535 } 10536 const runtime = getRuntime8(); 10537 let injectedStyles = runtime.injectedStyles.get(targetDocument); 10538 if (!injectedStyles) { 10539 injectedStyles = /* @__PURE__ */ new Set(); 10540 runtime.injectedStyles.set(targetDocument, injectedStyles); 10541 } 10542 if (injectedStyles.has(hash)) { 10543 return; 10544 } 10545 if (documentContainsStyleHash8(targetDocument, hash)) { 10546 injectedStyles.add(hash); 10547 return; 10548 } 10549 const style = targetDocument.createElement("style"); 10550 style.setAttribute(STYLE_HASH_ATTRIBUTE8, hash); 10551 style.appendChild(targetDocument.createTextNode(css)); 10552 targetDocument.head.appendChild(style); 10553 injectedStyles.add(hash); 10554 } 10555 function registerDocument8(targetDocument) { 10556 const runtime = getRuntime8(); 10557 runtime.documents.set( 10558 targetDocument, 10559 (runtime.documents.get(targetDocument) ?? 0) + 1 10560 ); 10561 for (const [hash, css] of runtime.styles) { 10562 injectStyle8(targetDocument, hash, css); 10563 } 10564 return () => { 10565 const count = runtime.documents.get(targetDocument); 10566 if (count === void 0) { 10567 return; 10568 } 10569 if (count <= 1) { 10570 runtime.documents.delete(targetDocument); 10571 return; 10572 } 10573 runtime.documents.set(targetDocument, count - 1); 10574 }; 10575 } 10576 function registerStyle8(hash, css) { 10577 const runtime = getRuntime8(); 10578 runtime.styles.set(hash, css); 10579 for (const targetDocument of runtime.documents.keys()) { 10580 injectStyle8(targetDocument, hash, css); 10581 } 10582 } 10583 if (typeof process === "undefined" || true) { 10584 registerStyle8("aaf79ac691", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.b9266862d9435660__positioner{z-index:var(--wp-ui-tooltip-z-index,initial)}._7bb3fd8a0810be6d__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}}}}'); 10585 } 10586 var style_default7 = { "positioner": "b9266862d9435660__positioner", "popup": "_7bb3fd8a0810be6d__popup" }; 10587 var POPUP_COLOR = { background: "#1e1e1e" }; 10588 var Popup = (0, import_element22.forwardRef)(function TooltipPopup3({ portal, positioner, children, className, ...props }, ref) { 10589 const popupContent = /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(ThemeProvider, { color: POPUP_COLOR, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)( 10590 index_parts_exports.Popup, 10591 { 10592 ref, 10593 className: clsx_default(style_default7.popup, className), 10594 ...props, 10595 children 10596 } 10597 ) }); 10598 const positionedPopup = renderSlotWithChildren( 10599 positioner, 10600 /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Positioner, {}), 10601 popupContent 10602 ); 10603 return renderSlotWithChildren(portal, /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Portal, {}), positionedPopup); 10604 }); 10605 10606 // packages/ui/build-module/tooltip/trigger.mjs 10607 var import_element23 = __toESM(require_element(), 1); 10608 var import_jsx_runtime30 = __toESM(require_jsx_runtime(), 1); 10609 var Trigger = (0, import_element23.forwardRef)( 10610 function TooltipTrigger3(props, ref) { 10611 return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(index_parts_exports.Trigger, { ref, ...props }); 10612 } 10613 ); 10614 10615 // packages/ui/build-module/tooltip/root.mjs 10616 var import_jsx_runtime31 = __toESM(require_jsx_runtime(), 1); 10617 function Root(props) { 10618 return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(DirectionProvider3, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(index_parts_exports.Root, { ...props }) }); 10619 } 10620 10621 // packages/ui/build-module/tooltip/provider.mjs 10622 var import_jsx_runtime32 = __toESM(require_jsx_runtime(), 1); 10623 function Provider({ ...props }) { 10624 return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(index_parts_exports.Provider, { ...props }); 10625 } 10626 10627 // packages/ui/build-module/link/link.mjs 10628 var import_element24 = __toESM(require_element(), 1); 10629 var import_i18n5 = __toESM(require_i18n(), 1); 10630 var import_jsx_runtime33 = __toESM(require_jsx_runtime(), 1); 10631 var STYLE_HASH_ATTRIBUTE9 = "data-wp-hash"; 10632 function getRuntime9() { 10633 const globalScope = globalThis; 10634 if (globalScope.__wpStyleRuntime) { 10635 return globalScope.__wpStyleRuntime; 10636 } 10637 globalScope.__wpStyleRuntime = { 10638 documents: /* @__PURE__ */ new Map(), 10639 styles: /* @__PURE__ */ new Map(), 10640 injectedStyles: /* @__PURE__ */ new WeakMap() 10641 }; 10642 if (typeof document !== "undefined") { 10643 registerDocument9(document); 10644 } 10645 return globalScope.__wpStyleRuntime; 10646 } 10647 function documentContainsStyleHash9(targetDocument, hash) { 10648 if (!targetDocument.head) { 10649 return false; 10650 } 10651 for (const style of targetDocument.head.querySelectorAll( 10652 `style[$STYLE_HASH_ATTRIBUTE9}]` 10653 )) { 10654 if (style.getAttribute(STYLE_HASH_ATTRIBUTE9) === hash) { 10655 return true; 10656 } 10657 } 10658 return false; 10659 } 10660 function injectStyle9(targetDocument, hash, css) { 10661 if (!targetDocument.head) { 10662 return; 10663 } 10664 const runtime = getRuntime9(); 10665 let injectedStyles = runtime.injectedStyles.get(targetDocument); 10666 if (!injectedStyles) { 10667 injectedStyles = /* @__PURE__ */ new Set(); 10668 runtime.injectedStyles.set(targetDocument, injectedStyles); 10669 } 10670 if (injectedStyles.has(hash)) { 10671 return; 10672 } 10673 if (documentContainsStyleHash9(targetDocument, hash)) { 10674 injectedStyles.add(hash); 10675 return; 10676 } 10677 const style = targetDocument.createElement("style"); 10678 style.setAttribute(STYLE_HASH_ATTRIBUTE9, hash); 10679 style.appendChild(targetDocument.createTextNode(css)); 10680 targetDocument.head.appendChild(style); 10681 injectedStyles.add(hash); 10682 } 10683 function registerDocument9(targetDocument) { 10684 const runtime = getRuntime9(); 10685 runtime.documents.set( 10686 targetDocument, 10687 (runtime.documents.get(targetDocument) ?? 0) + 1 10688 ); 10689 for (const [hash, css] of runtime.styles) { 10690 injectStyle9(targetDocument, hash, css); 10691 } 10692 return () => { 10693 const count = runtime.documents.get(targetDocument); 10694 if (count === void 0) { 10695 return; 10696 } 10697 if (count <= 1) { 10698 runtime.documents.delete(targetDocument); 10699 return; 10700 } 10701 runtime.documents.set(targetDocument, count - 1); 10702 }; 10703 } 10704 function registerStyle9(hash, css) { 10705 const runtime = getRuntime9(); 10706 runtime.styles.set(hash, css); 10707 for (const targetDocument of runtime.documents.keys()) { 10708 injectStyle9(targetDocument, hash, css); 10709 } 10710 } 10711 if (typeof process === "undefined" || true) { 10712 registerStyle9("37477070fb", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{.ccc29f9575c4c758__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); 10713 } 10714 var resets_default3 = { "box-sizing": "ccc29f9575c4c758__box-sizing" }; 10715 if (typeof process === "undefined" || true) { 10716 registerStyle9("c13e206e92", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._0f52be5f1d4ce686__outset-ring--focus-within:focus-within,._8f922cee854f2408__outset-ring--focus-visible:focus-visible,.accedd6ae8fd878e__outset-ring--focus:focus{--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}._3ad2c88c126f2bdd__outset-ring--focus-within-except-active:focus-within,.c20f61b115485a7f__outset-ring--focus-except-active:focus{outline:none}._3ad2c88c126f2bdd__outset-ring--focus-within-except-active:focus-within:not(:has(:active)),.c20f61b115485a7f__outset-ring--focus-except-active:focus:not(:active){--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}}}"); 10717 } 10718 var focus_module_default2 = { "outset-ring--focus": "accedd6ae8fd878e__outset-ring--focus", "outset-ring--focus-visible": "_8f922cee854f2408__outset-ring--focus-visible", "outset-ring--focus-within": "_0f52be5f1d4ce686__outset-ring--focus-within", "outset-ring--focus-except-active": "c20f61b115485a7f__outset-ring--focus-except-active", "outset-ring--focus-within-except-active": "_3ad2c88c126f2bdd__outset-ring--focus-within-except-active" }; 10719 if (typeof process === "undefined" || true) { 10720 registerStyle9("c87d91cdf7", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.a574f9f242212d58__link{--_gcd-a-border-radius:var(--wpds-border-radius-sm,2px);border-radius:var(--wpds-border-radius-sm,2px);text-decoration-thickness:from-font;text-underline-offset:.2em}._2d2f0506e717a46c__link-with-icon{text-decoration-line:none}._92b7b6a03fbb27ac__link-contents{text-decoration:inherit;text-decoration-line:underline}._69f40d9212adc58d__is-brand,._69f40d9212adc58d__is-brand:visited{--_gcd-a-color:var(--wpds-color-foreground-interactive-brand,var(--wp-admin-theme-color,#3858e9));color:var(--wpds-color-foreground-interactive-brand,var(--wp-admin-theme-color,#3858e9))}._69f40d9212adc58d__is-brand:active,._69f40d9212adc58d__is-brand:hover{--_gcd-a-color:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000));color:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000))}._9a9c54c6e67b4c3c__is-neutral,._9a9c54c6e67b4c3c__is-neutral:visited{--_gcd-a-color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);text-decoration-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d)}._9a9c54c6e67b4c3c__is-neutral:active,._9a9c54c6e67b4c3c__is-neutral:hover{--_gcd-a-color:var(--wpds-color-foreground-interactive-neutral-active,#1e1e1e);color:var(--wpds-color-foreground-interactive-neutral-active,#1e1e1e)}._93be0b747897baad__is-unstyled{--_gcd-a-border-radius:0;--_gcd-a-color:inherit;color:inherit;text-decoration:none}._9c39df40fdc09594__link-icon{font-weight:var(--wpds-typography-font-weight-default,400);line-height:1;margin-inline-start:var(--wpds-dimension-padding-xs,4px);text-decoration:none}._9c39df40fdc09594__link-icon:after{content:"\\2060\\2197"}._9c39df40fdc09594__link-icon:dir(rtl):after{content:"\\2060\\2196"}}}'); 10721 } 10722 var style_default8 = { "link": "a574f9f242212d58__link", "link-with-icon": "_2d2f0506e717a46c__link-with-icon", "link-contents": "_92b7b6a03fbb27ac__link-contents", "is-brand": "_69f40d9212adc58d__is-brand", "is-neutral": "_9a9c54c6e67b4c3c__is-neutral", "is-unstyled": "_93be0b747897baad__is-unstyled", "link-icon": "_9c39df40fdc09594__link-icon" }; 10723 if (typeof process === "undefined" || true) { 10724 registerStyle9("726f348f3f", "._78c10a0773e51a91__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}._5b33aa2d48624b4f__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-weak,#707070))}&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._980b3b4776ac8f81__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._43e478b4279a076c__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._698099e25b0fb1a6__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6)._326aee4184d261fd__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-emphasis,600));margin:var(--_gcd-heading-margin,0)}.e9576240835601ba__a,.e9576240835601ba__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}._3f05789653864a73__ol{list-style:var(--_gcd-ol-list-style,none);margin:var(--_gcd-ol-margin,0);padding-block:var(--_gcd-ol-padding-block,0);padding-inline:var(--_gcd-ol-padding-inline,0)}._3c72ff72abe57859__li{margin:var(--_gcd-li-margin,0)}[role=treeitem] span._79d16267c15d9eb2__span[aria-hidden]{display:var(--_gcd-span-display,inline);font-family:var(--_gcd-span-font-family,inherit);font-size:var(--_gcd-span-font-size,inherit);line-height:var(--_gcd-span-line-height,1);pointer-events:var(--_gcd-span-pointer-events,auto);position:var(--_gcd-span-position,static)}"); 10725 } 10726 var global_css_defense_default3 = { "button": "_78c10a0773e51a91__button", "input": "_5b33aa2d48624b4f__input", "textarea": "_980b3b4776ac8f81__textarea", "div": "_43e478b4279a076c__div", "p": "_698099e25b0fb1a6__p", "heading": "_326aee4184d261fd__heading", "a": "e9576240835601ba__a", "ol": "_3f05789653864a73__ol", "li": "_3c72ff72abe57859__li", "span": "_79d16267c15d9eb2__span" }; 10727 var Link = (0, import_element24.forwardRef)( 10728 function UnforwardedLink({ 10729 children, 10730 variant = "default", 10731 tone = "brand", 10732 openInNewTab = false, 10733 target, 10734 render, 10735 className, 10736 ...props 10737 }, ref) { 10738 const shouldShowNewTabIndicator = openInNewTab || /^_blank$/i.test(target ?? ""); 10739 const element = useRender({ 10740 render, 10741 defaultTagName: "a", 10742 ref, 10743 props: mergeProps(props, { 10744 className: clsx_default( 10745 global_css_defense_default3.a, 10746 resets_default3["box-sizing"], 10747 focus_module_default2["outset-ring--focus-except-active"], 10748 variant !== "unstyled" && style_default8.link, 10749 variant !== "unstyled" && shouldShowNewTabIndicator && style_default8["link-with-icon"], 10750 variant !== "unstyled" && style_default8[`is-$tone}`], 10751 variant === "unstyled" && style_default8["is-unstyled"], 10752 className 10753 ), 10754 target: target ?? (openInNewTab ? "_blank" : void 0), 10755 children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [ 10756 shouldShowNewTabIndicator && variant !== "unstyled" ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: style_default8["link-contents"], children }) : children, 10757 shouldShowNewTabIndicator && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)( 10758 "span", 10759 { 10760 className: style_default8["link-icon"], 10761 role: "img", 10762 "aria-label": ( 10763 /* translators: accessibility text appended to link text */ 10764 (0, import_i18n5.__)("(opens in a new tab)") 10765 ) 10766 } 10767 ) 10768 ] }) 10769 }) 10770 }); 10771 return element; 10772 } 10773 ); 10774 10775 // packages/ui/build-module/icon-button/icon-button.mjs 10776 var import_element25 = __toESM(require_element(), 1); 10777 var import_jsx_runtime34 = __toESM(require_jsx_runtime(), 1); 10778 var STYLE_HASH_ATTRIBUTE10 = "data-wp-hash"; 10779 function getRuntime10() { 10780 const globalScope = globalThis; 10781 if (globalScope.__wpStyleRuntime) { 10782 return globalScope.__wpStyleRuntime; 10783 } 10784 globalScope.__wpStyleRuntime = { 10785 documents: /* @__PURE__ */ new Map(), 10786 styles: /* @__PURE__ */ new Map(), 10787 injectedStyles: /* @__PURE__ */ new WeakMap() 10788 }; 10789 if (typeof document !== "undefined") { 10790 registerDocument10(document); 10791 } 10792 return globalScope.__wpStyleRuntime; 10793 } 10794 function documentContainsStyleHash10(targetDocument, hash) { 10795 if (!targetDocument.head) { 10796 return false; 10797 } 10798 for (const style of targetDocument.head.querySelectorAll( 10799 `style[$STYLE_HASH_ATTRIBUTE10}]` 10800 )) { 10801 if (style.getAttribute(STYLE_HASH_ATTRIBUTE10) === hash) { 10802 return true; 10803 } 10804 } 10805 return false; 10806 } 10807 function injectStyle10(targetDocument, hash, css) { 10808 if (!targetDocument.head) { 10809 return; 10810 } 10811 const runtime = getRuntime10(); 10812 let injectedStyles = runtime.injectedStyles.get(targetDocument); 10813 if (!injectedStyles) { 10814 injectedStyles = /* @__PURE__ */ new Set(); 10815 runtime.injectedStyles.set(targetDocument, injectedStyles); 10816 } 10817 if (injectedStyles.has(hash)) { 10818 return; 10819 } 10820 if (documentContainsStyleHash10(targetDocument, hash)) { 10821 injectedStyles.add(hash); 10822 return; 10823 } 10824 const style = targetDocument.createElement("style"); 10825 style.setAttribute(STYLE_HASH_ATTRIBUTE10, hash); 10826 style.appendChild(targetDocument.createTextNode(css)); 10827 targetDocument.head.appendChild(style); 10828 injectedStyles.add(hash); 10829 } 10830 function registerDocument10(targetDocument) { 10831 const runtime = getRuntime10(); 10832 runtime.documents.set( 10833 targetDocument, 10834 (runtime.documents.get(targetDocument) ?? 0) + 1 10835 ); 10836 for (const [hash, css] of runtime.styles) { 10837 injectStyle10(targetDocument, hash, css); 10838 } 10839 return () => { 10840 const count = runtime.documents.get(targetDocument); 10841 if (count === void 0) { 10842 return; 10843 } 10844 if (count <= 1) { 10845 runtime.documents.delete(targetDocument); 10846 return; 10847 } 10848 runtime.documents.set(targetDocument, count - 1); 10849 }; 10850 } 10851 function registerStyle10(hash, css) { 10852 const runtime = getRuntime10(); 10853 runtime.styles.set(hash, css); 10854 for (const targetDocument of runtime.documents.keys()) { 10855 injectStyle10(targetDocument, hash, css); 10856 } 10857 } 10858 if (typeof process === "undefined" || true) { 10859 registerStyle10("2a111665b3", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer compositions{._7f5dbf30e44a43dd__icon-button{--wp-ui-button-aspect-ratio:1;--wp-ui-button-padding-inline:0px;--wp-ui-button-min-width:unset}._1b3c0d159ecbf3d5__icon{margin:-1px}}}"); 10860 } 10861 var style_default9 = { "icon-button": "_7f5dbf30e44a43dd__icon-button", "icon": "_1b3c0d159ecbf3d5__icon" }; 10862 var IconButton = (0, import_element25.forwardRef)( 10863 function UnforwardedIconButton({ 10864 label, 10865 className, 10866 // Prevent accidental forwarding of `children` 10867 children: _children, 10868 disabled: disabled2, 10869 focusableWhenDisabled = true, 10870 icon, 10871 size: size4, 10872 shortcut, 10873 positioner, 10874 "aria-describedby": ariaDescribedBy, 10875 "aria-keyshortcuts": ariaKeyShortcuts, 10876 ...restProps 10877 }, ref) { 10878 const classes = clsx_default(style_default9["icon-button"], className); 10879 const { descriptionId, targetProps } = useKeyboardShortcutProps({ 10880 "aria-describedby": ariaDescribedBy, 10881 "aria-keyshortcuts": ariaKeyShortcuts, 10882 shortcut 10883 }); 10884 return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(Root, { children: [ 10885 /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)( 10886 Trigger, 10887 { 10888 ref, 10889 ...targetProps, 10890 disabled: disabled2 && !focusableWhenDisabled, 10891 render: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)( 10892 Button4, 10893 { 10894 ...restProps, 10895 size: size4, 10896 "aria-label": label, 10897 disabled: disabled2, 10898 focusableWhenDisabled 10899 } 10900 ), 10901 className: classes, 10902 children: [ 10903 /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Icon, { icon, size: 24, className: style_default9.icon }), 10904 shortcut && descriptionId && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)( 10905 KeyboardShortcutDescription, 10906 { 10907 descriptionId, 10908 shortcut 10909 } 10910 ) 10911 ] 10912 } 10913 ), 10914 /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(Popup, { positioner, children: [ 10915 label, 10916 shortcut && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_jsx_runtime34.Fragment, { children: [ 10917 " ", 10918 /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(KeyboardShortcutDisplay, { shortcut }) 10919 ] }) 10920 ] }) 10921 ] }); 10922 } 10923 ); 10924 10925 // packages/ui/build-module/notice/index.mjs 10926 var notice_exports = {}; 10927 __export(notice_exports, { 10928 ActionButton: () => ActionButton, 10929 ActionLink: () => ActionLink, 10930 Actions: () => Actions, 10931 CloseIconButton: () => CloseIconButton, 10932 Description: () => Description, 10933 Root: () => Root2, 10934 Title: () => Title 10935 }); 10936 10937 // packages/ui/build-module/notice/root.mjs 10938 var import_element26 = __toESM(require_element(), 1); 10939 var import_jsx_runtime35 = __toESM(require_jsx_runtime(), 1); 10940 var STYLE_HASH_ATTRIBUTE11 = "data-wp-hash"; 10941 function getRuntime11() { 10942 const globalScope = globalThis; 10943 if (globalScope.__wpStyleRuntime) { 10944 return globalScope.__wpStyleRuntime; 10945 } 10946 globalScope.__wpStyleRuntime = { 10947 documents: /* @__PURE__ */ new Map(), 10948 styles: /* @__PURE__ */ new Map(), 10949 injectedStyles: /* @__PURE__ */ new WeakMap() 10950 }; 10951 if (typeof document !== "undefined") { 10952 registerDocument11(document); 10953 } 10954 return globalScope.__wpStyleRuntime; 10955 } 10956 function documentContainsStyleHash11(targetDocument, hash) { 10957 if (!targetDocument.head) { 10958 return false; 10959 } 10960 for (const style of targetDocument.head.querySelectorAll( 10961 `style[$STYLE_HASH_ATTRIBUTE11}]` 10962 )) { 10963 if (style.getAttribute(STYLE_HASH_ATTRIBUTE11) === hash) { 10964 return true; 10965 } 10966 } 10967 return false; 10968 } 10969 function injectStyle11(targetDocument, hash, css) { 10970 if (!targetDocument.head) { 10971 return; 10972 } 10973 const runtime = getRuntime11(); 10974 let injectedStyles = runtime.injectedStyles.get(targetDocument); 10975 if (!injectedStyles) { 10976 injectedStyles = /* @__PURE__ */ new Set(); 10977 runtime.injectedStyles.set(targetDocument, injectedStyles); 10978 } 10979 if (injectedStyles.has(hash)) { 10980 return; 10981 } 10982 if (documentContainsStyleHash11(targetDocument, hash)) { 10983 injectedStyles.add(hash); 10984 return; 10985 } 10986 const style = targetDocument.createElement("style"); 10987 style.setAttribute(STYLE_HASH_ATTRIBUTE11, hash); 10988 style.appendChild(targetDocument.createTextNode(css)); 10989 targetDocument.head.appendChild(style); 10990 injectedStyles.add(hash); 10991 } 10992 function registerDocument11(targetDocument) { 10993 const runtime = getRuntime11(); 10994 runtime.documents.set( 10995 targetDocument, 10996 (runtime.documents.get(targetDocument) ?? 0) + 1 10997 ); 10998 for (const [hash, css] of runtime.styles) { 10999 injectStyle11(targetDocument, hash, css); 11000 } 11001 return () => { 11002 const count = runtime.documents.get(targetDocument); 11003 if (count === void 0) { 11004 return; 11005 } 11006 if (count <= 1) { 11007 runtime.documents.delete(targetDocument); 11008 return; 11009 } 11010 runtime.documents.set(targetDocument, count - 1); 11011 }; 11012 } 11013 function registerStyle11(hash, css) { 11014 const runtime = getRuntime11(); 11015 runtime.styles.set(hash, css); 11016 for (const targetDocument of runtime.documents.keys()) { 11017 injectStyle11(targetDocument, hash, css); 11018 } 11019 } 11020 if (typeof process === "undefined" || true) { 11021 registerStyle11("37477070fb", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{.ccc29f9575c4c758__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); 11022 } 11023 var resets_default4 = { "box-sizing": "ccc29f9575c4c758__box-sizing" }; 11024 if (typeof process === "undefined" || true) { 11025 registerStyle11("e57e872b6c", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._173ad03087dbb509__notice{--icon-height:var(--wpds-dimension-size-sm,24px);--text-vertical-padding:calc((var(--icon-height) - var(--wpds-typography-line-height-sm, 20px))/2);--wp-ui-notice-background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-neutral,#dbdbdb);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);align-items:start;background-color:var(--wp-ui-notice-background-color);border:1px solid var(--wp-ui-notice-border-color);border-radius:var(--wpds-border-radius-lg,8px);container-type:inline-size;display:grid;grid-template-columns:auto 1fr auto;isolation:isolate;padding:var(--wpds-dimension-padding-md,12px)}._86733bd626c7e048__icon{color:var(--wp-ui-notice-decorative-icon-color);grid-column:1;grid-row:1;margin-inline-end:var(--wpds-dimension-gap-xs,4px)}._6688caffadaf5a66__description{color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}._48b3142dec93ee87__actions{display:flex;flex-wrap:wrap;gap:var(--wpds-dimension-gap-md,12px);grid-column:2}._173ad03087dbb509__notice:has(._6688caffadaf5a66__description) ._48b3142dec93ee87__actions,._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._48b3142dec93ee87__actions{margin-block-start:var(--wpds-dimension-gap-sm,8px)}.adcfc74c7c481a8b__action-button{flex-shrink:0}.b0ce2ddf3e16f445__action-link{flex-shrink:0;&:not(:first-child){margin-inline-start:var(--wpds-dimension-gap-xs,4px)}&:not(:last-child){margin-inline-end:var(--wpds-dimension-gap-xs,4px)}}._234d6ae581e5eb29__close-icon{grid-column:3;grid-row:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px)}._4e822398b0e00dd5__is-info{--wp-ui-notice-background-color:var(--wpds-color-background-surface-info-weak,#f3f9ff);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-info,#adc6e2);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-info,#001b4f);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-info-weak,#006bd7)}._1ef9a1d966bd5220__is-warning{--wp-ui-notice-background-color:var(--wpds-color-background-surface-warning-weak,#fff7e1);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-warning,#e1bd7c);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-warning,#2e1900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-warning-weak,#936300)}.e98dc9c1e2c0bf3b__is-success{--wp-ui-notice-background-color:var(--wpds-color-background-surface-success-weak,#ebffed);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-success,#92d39d);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-success,#002900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-success-weak,#008030)}._673065a55bda7056__is-error{--wp-ui-notice-background-color:var(--wpds-color-background-surface-error-weak,#fff6f5);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-error,#e0afa7);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-error,#470000);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-error-weak,#cc1818)}@container (max-width: 320px){._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._48b3142dec93ee87__actions,._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._6688caffadaf5a66__description{grid-column:1/3}}}@layer compositions{._6d6c0651ee903d00__title{--_gcd-heading-color:var(--wp-ui-notice-text-color);color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}.b0ce2ddf3e16f445__action-link{margin-block:auto}._234d6ae581e5eb29__close-icon,.adcfc74c7c481a8b__action-button,.b0ce2ddf3e16f445__action-link{mix-blend-mode:luminosity;@media (forced-colors:active){mix-blend-mode:normal}}}}"); 11026 } 11027 var style_default10 = { "notice": "_173ad03087dbb509__notice", "icon": "_86733bd626c7e048__icon", "description": "_6688caffadaf5a66__description", "actions": "_48b3142dec93ee87__actions", "title": "_6d6c0651ee903d00__title", "action-button": "adcfc74c7c481a8b__action-button", "action-link": "b0ce2ddf3e16f445__action-link", "close-icon": "_234d6ae581e5eb29__close-icon", "is-info": "_4e822398b0e00dd5__is-info", "is-warning": "_1ef9a1d966bd5220__is-warning", "is-success": "e98dc9c1e2c0bf3b__is-success", "is-error": "_673065a55bda7056__is-error" }; 11028 var icons = { 11029 neutral: null, 11030 info: info_default, 11031 warning: caution_default, 11032 success: published_default, 11033 error: error_default 11034 }; 11035 var Root2 = (0, import_element26.forwardRef)(function Notice({ intent = "neutral", children, icon, render, ...restProps }, ref) { 11036 const iconElement = icon === null ? null : icon ?? icons[intent]; 11037 const mergedClassName = clsx_default( 11038 style_default10.notice, 11039 style_default10[`is-$intent}`], 11040 resets_default4["box-sizing"] 11041 ); 11042 const element = useRender({ 11043 defaultTagName: "div", 11044 render, 11045 ref, 11046 props: mergeProps( 11047 { 11048 className: mergedClassName, 11049 children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [ 11050 children, 11051 iconElement && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)( 11052 Icon, 11053 { 11054 className: style_default10.icon, 11055 icon: iconElement 11056 } 11057 ) 11058 ] }) 11059 }, 11060 restProps 11061 ) 11062 }); 11063 return element; 11064 }); 11065 11066 // packages/ui/build-module/notice/title.mjs 11067 var import_element27 = __toESM(require_element(), 1); 11068 var import_jsx_runtime36 = __toESM(require_jsx_runtime(), 1); 11069 var STYLE_HASH_ATTRIBUTE12 = "data-wp-hash"; 11070 function getRuntime12() { 11071 const globalScope = globalThis; 11072 if (globalScope.__wpStyleRuntime) { 11073 return globalScope.__wpStyleRuntime; 11074 } 11075 globalScope.__wpStyleRuntime = { 11076 documents: /* @__PURE__ */ new Map(), 11077 styles: /* @__PURE__ */ new Map(), 11078 injectedStyles: /* @__PURE__ */ new WeakMap() 11079 }; 11080 if (typeof document !== "undefined") { 11081 registerDocument12(document); 11082 } 11083 return globalScope.__wpStyleRuntime; 11084 } 11085 function documentContainsStyleHash12(targetDocument, hash) { 11086 if (!targetDocument.head) { 11087 return false; 11088 } 11089 for (const style of targetDocument.head.querySelectorAll( 11090 `style[$STYLE_HASH_ATTRIBUTE12}]` 11091 )) { 11092 if (style.getAttribute(STYLE_HASH_ATTRIBUTE12) === hash) { 11093 return true; 11094 } 11095 } 11096 return false; 11097 } 11098 function injectStyle12(targetDocument, hash, css) { 11099 if (!targetDocument.head) { 11100 return; 11101 } 11102 const runtime = getRuntime12(); 11103 let injectedStyles = runtime.injectedStyles.get(targetDocument); 11104 if (!injectedStyles) { 11105 injectedStyles = /* @__PURE__ */ new Set(); 11106 runtime.injectedStyles.set(targetDocument, injectedStyles); 11107 } 11108 if (injectedStyles.has(hash)) { 11109 return; 11110 } 11111 if (documentContainsStyleHash12(targetDocument, hash)) { 11112 injectedStyles.add(hash); 11113 return; 11114 } 11115 const style = targetDocument.createElement("style"); 11116 style.setAttribute(STYLE_HASH_ATTRIBUTE12, hash); 11117 style.appendChild(targetDocument.createTextNode(css)); 11118 targetDocument.head.appendChild(style); 11119 injectedStyles.add(hash); 11120 } 11121 function registerDocument12(targetDocument) { 11122 const runtime = getRuntime12(); 11123 runtime.documents.set( 11124 targetDocument, 11125 (runtime.documents.get(targetDocument) ?? 0) + 1 11126 ); 11127 for (const [hash, css] of runtime.styles) { 11128 injectStyle12(targetDocument, hash, css); 11129 } 11130 return () => { 11131 const count = runtime.documents.get(targetDocument); 11132 if (count === void 0) { 11133 return; 11134 } 11135 if (count <= 1) { 11136 runtime.documents.delete(targetDocument); 11137 return; 11138 } 11139 runtime.documents.set(targetDocument, count - 1); 11140 }; 11141 } 11142 function registerStyle12(hash, css) { 11143 const runtime = getRuntime12(); 11144 runtime.styles.set(hash, css); 11145 for (const targetDocument of runtime.documents.keys()) { 11146 injectStyle12(targetDocument, hash, css); 11147 } 11148 } 11149 if (typeof process === "undefined" || true) { 11150 registerStyle12("e57e872b6c", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._173ad03087dbb509__notice{--icon-height:var(--wpds-dimension-size-sm,24px);--text-vertical-padding:calc((var(--icon-height) - var(--wpds-typography-line-height-sm, 20px))/2);--wp-ui-notice-background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-neutral,#dbdbdb);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);align-items:start;background-color:var(--wp-ui-notice-background-color);border:1px solid var(--wp-ui-notice-border-color);border-radius:var(--wpds-border-radius-lg,8px);container-type:inline-size;display:grid;grid-template-columns:auto 1fr auto;isolation:isolate;padding:var(--wpds-dimension-padding-md,12px)}._86733bd626c7e048__icon{color:var(--wp-ui-notice-decorative-icon-color);grid-column:1;grid-row:1;margin-inline-end:var(--wpds-dimension-gap-xs,4px)}._6688caffadaf5a66__description{color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}._48b3142dec93ee87__actions{display:flex;flex-wrap:wrap;gap:var(--wpds-dimension-gap-md,12px);grid-column:2}._173ad03087dbb509__notice:has(._6688caffadaf5a66__description) ._48b3142dec93ee87__actions,._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._48b3142dec93ee87__actions{margin-block-start:var(--wpds-dimension-gap-sm,8px)}.adcfc74c7c481a8b__action-button{flex-shrink:0}.b0ce2ddf3e16f445__action-link{flex-shrink:0;&:not(:first-child){margin-inline-start:var(--wpds-dimension-gap-xs,4px)}&:not(:last-child){margin-inline-end:var(--wpds-dimension-gap-xs,4px)}}._234d6ae581e5eb29__close-icon{grid-column:3;grid-row:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px)}._4e822398b0e00dd5__is-info{--wp-ui-notice-background-color:var(--wpds-color-background-surface-info-weak,#f3f9ff);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-info,#adc6e2);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-info,#001b4f);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-info-weak,#006bd7)}._1ef9a1d966bd5220__is-warning{--wp-ui-notice-background-color:var(--wpds-color-background-surface-warning-weak,#fff7e1);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-warning,#e1bd7c);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-warning,#2e1900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-warning-weak,#936300)}.e98dc9c1e2c0bf3b__is-success{--wp-ui-notice-background-color:var(--wpds-color-background-surface-success-weak,#ebffed);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-success,#92d39d);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-success,#002900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-success-weak,#008030)}._673065a55bda7056__is-error{--wp-ui-notice-background-color:var(--wpds-color-background-surface-error-weak,#fff6f5);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-error,#e0afa7);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-error,#470000);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-error-weak,#cc1818)}@container (max-width: 320px){._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._48b3142dec93ee87__actions,._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._6688caffadaf5a66__description{grid-column:1/3}}}@layer compositions{._6d6c0651ee903d00__title{--_gcd-heading-color:var(--wp-ui-notice-text-color);color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}.b0ce2ddf3e16f445__action-link{margin-block:auto}._234d6ae581e5eb29__close-icon,.adcfc74c7c481a8b__action-button,.b0ce2ddf3e16f445__action-link{mix-blend-mode:luminosity;@media (forced-colors:active){mix-blend-mode:normal}}}}"); 11151 } 11152 var style_default11 = { "notice": "_173ad03087dbb509__notice", "icon": "_86733bd626c7e048__icon", "description": "_6688caffadaf5a66__description", "actions": "_48b3142dec93ee87__actions", "title": "_6d6c0651ee903d00__title", "action-button": "adcfc74c7c481a8b__action-button", "action-link": "b0ce2ddf3e16f445__action-link", "close-icon": "_234d6ae581e5eb29__close-icon", "is-info": "_4e822398b0e00dd5__is-info", "is-warning": "_1ef9a1d966bd5220__is-warning", "is-success": "e98dc9c1e2c0bf3b__is-success", "is-error": "_673065a55bda7056__is-error" }; 11153 var Title = (0, import_element27.forwardRef)( 11154 function NoticeTitle({ className, ...props }, ref) { 11155 return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)( 11156 Text, 11157 { 11158 ref, 11159 variant: "heading-md", 11160 className: clsx_default(style_default11.title, className), 11161 ...props 11162 } 11163 ); 11164 } 11165 ); 11166 11167 // packages/ui/build-module/notice/description.mjs 11168 var import_element28 = __toESM(require_element(), 1); 11169 var import_jsx_runtime37 = __toESM(require_jsx_runtime(), 1); 11170 var STYLE_HASH_ATTRIBUTE13 = "data-wp-hash"; 11171 function getRuntime13() { 11172 const globalScope = globalThis; 11173 if (globalScope.__wpStyleRuntime) { 11174 return globalScope.__wpStyleRuntime; 11175 } 11176 globalScope.__wpStyleRuntime = { 11177 documents: /* @__PURE__ */ new Map(), 11178 styles: /* @__PURE__ */ new Map(), 11179 injectedStyles: /* @__PURE__ */ new WeakMap() 11180 }; 11181 if (typeof document !== "undefined") { 11182 registerDocument13(document); 11183 } 11184 return globalScope.__wpStyleRuntime; 11185 } 11186 function documentContainsStyleHash13(targetDocument, hash) { 11187 if (!targetDocument.head) { 11188 return false; 11189 } 11190 for (const style of targetDocument.head.querySelectorAll( 11191 `style[$STYLE_HASH_ATTRIBUTE13}]` 11192 )) { 11193 if (style.getAttribute(STYLE_HASH_ATTRIBUTE13) === hash) { 11194 return true; 11195 } 11196 } 11197 return false; 11198 } 11199 function injectStyle13(targetDocument, hash, css) { 11200 if (!targetDocument.head) { 11201 return; 11202 } 11203 const runtime = getRuntime13(); 11204 let injectedStyles = runtime.injectedStyles.get(targetDocument); 11205 if (!injectedStyles) { 11206 injectedStyles = /* @__PURE__ */ new Set(); 11207 runtime.injectedStyles.set(targetDocument, injectedStyles); 11208 } 11209 if (injectedStyles.has(hash)) { 11210 return; 11211 } 11212 if (documentContainsStyleHash13(targetDocument, hash)) { 11213 injectedStyles.add(hash); 11214 return; 11215 } 11216 const style = targetDocument.createElement("style"); 11217 style.setAttribute(STYLE_HASH_ATTRIBUTE13, hash); 11218 style.appendChild(targetDocument.createTextNode(css)); 11219 targetDocument.head.appendChild(style); 11220 injectedStyles.add(hash); 11221 } 11222 function registerDocument13(targetDocument) { 11223 const runtime = getRuntime13(); 11224 runtime.documents.set( 11225 targetDocument, 11226 (runtime.documents.get(targetDocument) ?? 0) + 1 11227 ); 11228 for (const [hash, css] of runtime.styles) { 11229 injectStyle13(targetDocument, hash, css); 11230 } 11231 return () => { 11232 const count = runtime.documents.get(targetDocument); 11233 if (count === void 0) { 11234 return; 11235 } 11236 if (count <= 1) { 11237 runtime.documents.delete(targetDocument); 11238 return; 11239 } 11240 runtime.documents.set(targetDocument, count - 1); 11241 }; 11242 } 11243 function registerStyle13(hash, css) { 11244 const runtime = getRuntime13(); 11245 runtime.styles.set(hash, css); 11246 for (const targetDocument of runtime.documents.keys()) { 11247 injectStyle13(targetDocument, hash, css); 11248 } 11249 } 11250 if (typeof process === "undefined" || true) { 11251 registerStyle13("e57e872b6c", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._173ad03087dbb509__notice{--icon-height:var(--wpds-dimension-size-sm,24px);--text-vertical-padding:calc((var(--icon-height) - var(--wpds-typography-line-height-sm, 20px))/2);--wp-ui-notice-background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-neutral,#dbdbdb);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);align-items:start;background-color:var(--wp-ui-notice-background-color);border:1px solid var(--wp-ui-notice-border-color);border-radius:var(--wpds-border-radius-lg,8px);container-type:inline-size;display:grid;grid-template-columns:auto 1fr auto;isolation:isolate;padding:var(--wpds-dimension-padding-md,12px)}._86733bd626c7e048__icon{color:var(--wp-ui-notice-decorative-icon-color);grid-column:1;grid-row:1;margin-inline-end:var(--wpds-dimension-gap-xs,4px)}._6688caffadaf5a66__description{color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}._48b3142dec93ee87__actions{display:flex;flex-wrap:wrap;gap:var(--wpds-dimension-gap-md,12px);grid-column:2}._173ad03087dbb509__notice:has(._6688caffadaf5a66__description) ._48b3142dec93ee87__actions,._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._48b3142dec93ee87__actions{margin-block-start:var(--wpds-dimension-gap-sm,8px)}.adcfc74c7c481a8b__action-button{flex-shrink:0}.b0ce2ddf3e16f445__action-link{flex-shrink:0;&:not(:first-child){margin-inline-start:var(--wpds-dimension-gap-xs,4px)}&:not(:last-child){margin-inline-end:var(--wpds-dimension-gap-xs,4px)}}._234d6ae581e5eb29__close-icon{grid-column:3;grid-row:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px)}._4e822398b0e00dd5__is-info{--wp-ui-notice-background-color:var(--wpds-color-background-surface-info-weak,#f3f9ff);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-info,#adc6e2);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-info,#001b4f);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-info-weak,#006bd7)}._1ef9a1d966bd5220__is-warning{--wp-ui-notice-background-color:var(--wpds-color-background-surface-warning-weak,#fff7e1);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-warning,#e1bd7c);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-warning,#2e1900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-warning-weak,#936300)}.e98dc9c1e2c0bf3b__is-success{--wp-ui-notice-background-color:var(--wpds-color-background-surface-success-weak,#ebffed);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-success,#92d39d);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-success,#002900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-success-weak,#008030)}._673065a55bda7056__is-error{--wp-ui-notice-background-color:var(--wpds-color-background-surface-error-weak,#fff6f5);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-error,#e0afa7);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-error,#470000);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-error-weak,#cc1818)}@container (max-width: 320px){._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._48b3142dec93ee87__actions,._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._6688caffadaf5a66__description{grid-column:1/3}}}@layer compositions{._6d6c0651ee903d00__title{--_gcd-heading-color:var(--wp-ui-notice-text-color);color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}.b0ce2ddf3e16f445__action-link{margin-block:auto}._234d6ae581e5eb29__close-icon,.adcfc74c7c481a8b__action-button,.b0ce2ddf3e16f445__action-link{mix-blend-mode:luminosity;@media (forced-colors:active){mix-blend-mode:normal}}}}"); 11252 } 11253 var style_default12 = { "notice": "_173ad03087dbb509__notice", "icon": "_86733bd626c7e048__icon", "description": "_6688caffadaf5a66__description", "actions": "_48b3142dec93ee87__actions", "title": "_6d6c0651ee903d00__title", "action-button": "adcfc74c7c481a8b__action-button", "action-link": "b0ce2ddf3e16f445__action-link", "close-icon": "_234d6ae581e5eb29__close-icon", "is-info": "_4e822398b0e00dd5__is-info", "is-warning": "_1ef9a1d966bd5220__is-warning", "is-success": "e98dc9c1e2c0bf3b__is-success", "is-error": "_673065a55bda7056__is-error" }; 11254 var Description = (0, import_element28.forwardRef)( 11255 function NoticeDescription({ className, ...props }, ref) { 11256 return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)( 11257 Text, 11258 { 11259 ref, 11260 variant: "body-md", 11261 className: clsx_default(style_default12.description, className), 11262 ...props 11263 } 11264 ); 11265 } 11266 ); 11267 11268 // packages/ui/build-module/notice/actions.mjs 11269 var import_element29 = __toESM(require_element(), 1); 11270 var STYLE_HASH_ATTRIBUTE14 = "data-wp-hash"; 11271 function getRuntime14() { 11272 const globalScope = globalThis; 11273 if (globalScope.__wpStyleRuntime) { 11274 return globalScope.__wpStyleRuntime; 11275 } 11276 globalScope.__wpStyleRuntime = { 11277 documents: /* @__PURE__ */ new Map(), 11278 styles: /* @__PURE__ */ new Map(), 11279 injectedStyles: /* @__PURE__ */ new WeakMap() 11280 }; 11281 if (typeof document !== "undefined") { 11282 registerDocument14(document); 11283 } 11284 return globalScope.__wpStyleRuntime; 11285 } 11286 function documentContainsStyleHash14(targetDocument, hash) { 11287 if (!targetDocument.head) { 11288 return false; 11289 } 11290 for (const style of targetDocument.head.querySelectorAll( 11291 `style[$STYLE_HASH_ATTRIBUTE14}]` 11292 )) { 11293 if (style.getAttribute(STYLE_HASH_ATTRIBUTE14) === hash) { 11294 return true; 11295 } 11296 } 11297 return false; 11298 } 11299 function injectStyle14(targetDocument, hash, css) { 11300 if (!targetDocument.head) { 11301 return; 11302 } 11303 const runtime = getRuntime14(); 11304 let injectedStyles = runtime.injectedStyles.get(targetDocument); 11305 if (!injectedStyles) { 11306 injectedStyles = /* @__PURE__ */ new Set(); 11307 runtime.injectedStyles.set(targetDocument, injectedStyles); 11308 } 11309 if (injectedStyles.has(hash)) { 11310 return; 11311 } 11312 if (documentContainsStyleHash14(targetDocument, hash)) { 11313 injectedStyles.add(hash); 11314 return; 11315 } 11316 const style = targetDocument.createElement("style"); 11317 style.setAttribute(STYLE_HASH_ATTRIBUTE14, hash); 11318 style.appendChild(targetDocument.createTextNode(css)); 11319 targetDocument.head.appendChild(style); 11320 injectedStyles.add(hash); 11321 } 11322 function registerDocument14(targetDocument) { 11323 const runtime = getRuntime14(); 11324 runtime.documents.set( 11325 targetDocument, 11326 (runtime.documents.get(targetDocument) ?? 0) + 1 11327 ); 11328 for (const [hash, css] of runtime.styles) { 11329 injectStyle14(targetDocument, hash, css); 11330 } 11331 return () => { 11332 const count = runtime.documents.get(targetDocument); 11333 if (count === void 0) { 11334 return; 11335 } 11336 if (count <= 1) { 11337 runtime.documents.delete(targetDocument); 11338 return; 11339 } 11340 runtime.documents.set(targetDocument, count - 1); 11341 }; 11342 } 11343 function registerStyle14(hash, css) { 11344 const runtime = getRuntime14(); 11345 runtime.styles.set(hash, css); 11346 for (const targetDocument of runtime.documents.keys()) { 11347 injectStyle14(targetDocument, hash, css); 11348 } 11349 } 11350 if (typeof process === "undefined" || true) { 11351 registerStyle14("e57e872b6c", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._173ad03087dbb509__notice{--icon-height:var(--wpds-dimension-size-sm,24px);--text-vertical-padding:calc((var(--icon-height) - var(--wpds-typography-line-height-sm, 20px))/2);--wp-ui-notice-background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-neutral,#dbdbdb);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);align-items:start;background-color:var(--wp-ui-notice-background-color);border:1px solid var(--wp-ui-notice-border-color);border-radius:var(--wpds-border-radius-lg,8px);container-type:inline-size;display:grid;grid-template-columns:auto 1fr auto;isolation:isolate;padding:var(--wpds-dimension-padding-md,12px)}._86733bd626c7e048__icon{color:var(--wp-ui-notice-decorative-icon-color);grid-column:1;grid-row:1;margin-inline-end:var(--wpds-dimension-gap-xs,4px)}._6688caffadaf5a66__description{color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}._48b3142dec93ee87__actions{display:flex;flex-wrap:wrap;gap:var(--wpds-dimension-gap-md,12px);grid-column:2}._173ad03087dbb509__notice:has(._6688caffadaf5a66__description) ._48b3142dec93ee87__actions,._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._48b3142dec93ee87__actions{margin-block-start:var(--wpds-dimension-gap-sm,8px)}.adcfc74c7c481a8b__action-button{flex-shrink:0}.b0ce2ddf3e16f445__action-link{flex-shrink:0;&:not(:first-child){margin-inline-start:var(--wpds-dimension-gap-xs,4px)}&:not(:last-child){margin-inline-end:var(--wpds-dimension-gap-xs,4px)}}._234d6ae581e5eb29__close-icon{grid-column:3;grid-row:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px)}._4e822398b0e00dd5__is-info{--wp-ui-notice-background-color:var(--wpds-color-background-surface-info-weak,#f3f9ff);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-info,#adc6e2);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-info,#001b4f);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-info-weak,#006bd7)}._1ef9a1d966bd5220__is-warning{--wp-ui-notice-background-color:var(--wpds-color-background-surface-warning-weak,#fff7e1);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-warning,#e1bd7c);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-warning,#2e1900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-warning-weak,#936300)}.e98dc9c1e2c0bf3b__is-success{--wp-ui-notice-background-color:var(--wpds-color-background-surface-success-weak,#ebffed);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-success,#92d39d);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-success,#002900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-success-weak,#008030)}._673065a55bda7056__is-error{--wp-ui-notice-background-color:var(--wpds-color-background-surface-error-weak,#fff6f5);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-error,#e0afa7);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-error,#470000);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-error-weak,#cc1818)}@container (max-width: 320px){._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._48b3142dec93ee87__actions,._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._6688caffadaf5a66__description{grid-column:1/3}}}@layer compositions{._6d6c0651ee903d00__title{--_gcd-heading-color:var(--wp-ui-notice-text-color);color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}.b0ce2ddf3e16f445__action-link{margin-block:auto}._234d6ae581e5eb29__close-icon,.adcfc74c7c481a8b__action-button,.b0ce2ddf3e16f445__action-link{mix-blend-mode:luminosity;@media (forced-colors:active){mix-blend-mode:normal}}}}"); 11352 } 11353 var style_default13 = { "notice": "_173ad03087dbb509__notice", "icon": "_86733bd626c7e048__icon", "description": "_6688caffadaf5a66__description", "actions": "_48b3142dec93ee87__actions", "title": "_6d6c0651ee903d00__title", "action-button": "adcfc74c7c481a8b__action-button", "action-link": "b0ce2ddf3e16f445__action-link", "close-icon": "_234d6ae581e5eb29__close-icon", "is-info": "_4e822398b0e00dd5__is-info", "is-warning": "_1ef9a1d966bd5220__is-warning", "is-success": "e98dc9c1e2c0bf3b__is-success", "is-error": "_673065a55bda7056__is-error" }; 11354 var Actions = (0, import_element29.forwardRef)( 11355 function NoticeActions({ render, ...props }, ref) { 11356 const element = useRender({ 11357 defaultTagName: "div", 11358 render, 11359 ref, 11360 props: mergeProps( 11361 { 11362 className: style_default13.actions 11363 }, 11364 props 11365 ) 11366 }); 11367 return element; 11368 } 11369 ); 11370 11371 // packages/ui/build-module/notice/close-icon-button.mjs 11372 var import_element30 = __toESM(require_element(), 1); 11373 var import_i18n6 = __toESM(require_i18n(), 1); 11374 var import_jsx_runtime38 = __toESM(require_jsx_runtime(), 1); 11375 var STYLE_HASH_ATTRIBUTE15 = "data-wp-hash"; 11376 function getRuntime15() { 11377 const globalScope = globalThis; 11378 if (globalScope.__wpStyleRuntime) { 11379 return globalScope.__wpStyleRuntime; 11380 } 11381 globalScope.__wpStyleRuntime = { 11382 documents: /* @__PURE__ */ new Map(), 11383 styles: /* @__PURE__ */ new Map(), 11384 injectedStyles: /* @__PURE__ */ new WeakMap() 11385 }; 11386 if (typeof document !== "undefined") { 11387 registerDocument15(document); 11388 } 11389 return globalScope.__wpStyleRuntime; 11390 } 11391 function documentContainsStyleHash15(targetDocument, hash) { 11392 if (!targetDocument.head) { 11393 return false; 11394 } 11395 for (const style of targetDocument.head.querySelectorAll( 11396 `style[$STYLE_HASH_ATTRIBUTE15}]` 11397 )) { 11398 if (style.getAttribute(STYLE_HASH_ATTRIBUTE15) === hash) { 11399 return true; 11400 } 11401 } 11402 return false; 11403 } 11404 function injectStyle15(targetDocument, hash, css) { 11405 if (!targetDocument.head) { 11406 return; 11407 } 11408 const runtime = getRuntime15(); 11409 let injectedStyles = runtime.injectedStyles.get(targetDocument); 11410 if (!injectedStyles) { 11411 injectedStyles = /* @__PURE__ */ new Set(); 11412 runtime.injectedStyles.set(targetDocument, injectedStyles); 11413 } 11414 if (injectedStyles.has(hash)) { 11415 return; 11416 } 11417 if (documentContainsStyleHash15(targetDocument, hash)) { 11418 injectedStyles.add(hash); 11419 return; 11420 } 11421 const style = targetDocument.createElement("style"); 11422 style.setAttribute(STYLE_HASH_ATTRIBUTE15, hash); 11423 style.appendChild(targetDocument.createTextNode(css)); 11424 targetDocument.head.appendChild(style); 11425 injectedStyles.add(hash); 11426 } 11427 function registerDocument15(targetDocument) { 11428 const runtime = getRuntime15(); 11429 runtime.documents.set( 11430 targetDocument, 11431 (runtime.documents.get(targetDocument) ?? 0) + 1 11432 ); 11433 for (const [hash, css] of runtime.styles) { 11434 injectStyle15(targetDocument, hash, css); 11435 } 11436 return () => { 11437 const count = runtime.documents.get(targetDocument); 11438 if (count === void 0) { 11439 return; 11440 } 11441 if (count <= 1) { 11442 runtime.documents.delete(targetDocument); 11443 return; 11444 } 11445 runtime.documents.set(targetDocument, count - 1); 11446 }; 11447 } 11448 function registerStyle15(hash, css) { 11449 const runtime = getRuntime15(); 11450 runtime.styles.set(hash, css); 11451 for (const targetDocument of runtime.documents.keys()) { 11452 injectStyle15(targetDocument, hash, css); 11453 } 11454 } 11455 if (typeof process === "undefined" || true) { 11456 registerStyle15("e57e872b6c", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._173ad03087dbb509__notice{--icon-height:var(--wpds-dimension-size-sm,24px);--text-vertical-padding:calc((var(--icon-height) - var(--wpds-typography-line-height-sm, 20px))/2);--wp-ui-notice-background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-neutral,#dbdbdb);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);align-items:start;background-color:var(--wp-ui-notice-background-color);border:1px solid var(--wp-ui-notice-border-color);border-radius:var(--wpds-border-radius-lg,8px);container-type:inline-size;display:grid;grid-template-columns:auto 1fr auto;isolation:isolate;padding:var(--wpds-dimension-padding-md,12px)}._86733bd626c7e048__icon{color:var(--wp-ui-notice-decorative-icon-color);grid-column:1;grid-row:1;margin-inline-end:var(--wpds-dimension-gap-xs,4px)}._6688caffadaf5a66__description{color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}._48b3142dec93ee87__actions{display:flex;flex-wrap:wrap;gap:var(--wpds-dimension-gap-md,12px);grid-column:2}._173ad03087dbb509__notice:has(._6688caffadaf5a66__description) ._48b3142dec93ee87__actions,._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._48b3142dec93ee87__actions{margin-block-start:var(--wpds-dimension-gap-sm,8px)}.adcfc74c7c481a8b__action-button{flex-shrink:0}.b0ce2ddf3e16f445__action-link{flex-shrink:0;&:not(:first-child){margin-inline-start:var(--wpds-dimension-gap-xs,4px)}&:not(:last-child){margin-inline-end:var(--wpds-dimension-gap-xs,4px)}}._234d6ae581e5eb29__close-icon{grid-column:3;grid-row:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px)}._4e822398b0e00dd5__is-info{--wp-ui-notice-background-color:var(--wpds-color-background-surface-info-weak,#f3f9ff);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-info,#adc6e2);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-info,#001b4f);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-info-weak,#006bd7)}._1ef9a1d966bd5220__is-warning{--wp-ui-notice-background-color:var(--wpds-color-background-surface-warning-weak,#fff7e1);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-warning,#e1bd7c);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-warning,#2e1900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-warning-weak,#936300)}.e98dc9c1e2c0bf3b__is-success{--wp-ui-notice-background-color:var(--wpds-color-background-surface-success-weak,#ebffed);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-success,#92d39d);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-success,#002900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-success-weak,#008030)}._673065a55bda7056__is-error{--wp-ui-notice-background-color:var(--wpds-color-background-surface-error-weak,#fff6f5);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-error,#e0afa7);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-error,#470000);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-error-weak,#cc1818)}@container (max-width: 320px){._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._48b3142dec93ee87__actions,._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._6688caffadaf5a66__description{grid-column:1/3}}}@layer compositions{._6d6c0651ee903d00__title{--_gcd-heading-color:var(--wp-ui-notice-text-color);color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}.b0ce2ddf3e16f445__action-link{margin-block:auto}._234d6ae581e5eb29__close-icon,.adcfc74c7c481a8b__action-button,.b0ce2ddf3e16f445__action-link{mix-blend-mode:luminosity;@media (forced-colors:active){mix-blend-mode:normal}}}}"); 11457 } 11458 var style_default14 = { "notice": "_173ad03087dbb509__notice", "icon": "_86733bd626c7e048__icon", "description": "_6688caffadaf5a66__description", "actions": "_48b3142dec93ee87__actions", "title": "_6d6c0651ee903d00__title", "action-button": "adcfc74c7c481a8b__action-button", "action-link": "b0ce2ddf3e16f445__action-link", "close-icon": "_234d6ae581e5eb29__close-icon", "is-info": "_4e822398b0e00dd5__is-info", "is-warning": "_1ef9a1d966bd5220__is-warning", "is-success": "e98dc9c1e2c0bf3b__is-success", "is-error": "_673065a55bda7056__is-error" }; 11459 var CloseIconButton = (0, import_element30.forwardRef)(function NoticeCloseIconButton({ className, icon = close_small_default, label = (0, import_i18n6.__)("Dismiss"), ...props }, ref) { 11460 return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)( 11461 IconButton, 11462 { 11463 ...props, 11464 ref, 11465 className: clsx_default(style_default14["close-icon"], className), 11466 variant: "minimal", 11467 size: "small", 11468 tone: "neutral", 11469 icon, 11470 label 11471 } 11472 ); 11473 }); 11474 11475 // packages/ui/build-module/notice/action-button.mjs 11476 var import_element31 = __toESM(require_element(), 1); 11477 var import_jsx_runtime39 = __toESM(require_jsx_runtime(), 1); 11478 var STYLE_HASH_ATTRIBUTE16 = "data-wp-hash"; 11479 function getRuntime16() { 11480 const globalScope = globalThis; 11481 if (globalScope.__wpStyleRuntime) { 11482 return globalScope.__wpStyleRuntime; 11483 } 11484 globalScope.__wpStyleRuntime = { 11485 documents: /* @__PURE__ */ new Map(), 11486 styles: /* @__PURE__ */ new Map(), 11487 injectedStyles: /* @__PURE__ */ new WeakMap() 11488 }; 11489 if (typeof document !== "undefined") { 11490 registerDocument16(document); 11491 } 11492 return globalScope.__wpStyleRuntime; 11493 } 11494 function documentContainsStyleHash16(targetDocument, hash) { 11495 if (!targetDocument.head) { 11496 return false; 11497 } 11498 for (const style of targetDocument.head.querySelectorAll( 11499 `style[$STYLE_HASH_ATTRIBUTE16}]` 11500 )) { 11501 if (style.getAttribute(STYLE_HASH_ATTRIBUTE16) === hash) { 11502 return true; 11503 } 11504 } 11505 return false; 11506 } 11507 function injectStyle16(targetDocument, hash, css) { 11508 if (!targetDocument.head) { 11509 return; 11510 } 11511 const runtime = getRuntime16(); 11512 let injectedStyles = runtime.injectedStyles.get(targetDocument); 11513 if (!injectedStyles) { 11514 injectedStyles = /* @__PURE__ */ new Set(); 11515 runtime.injectedStyles.set(targetDocument, injectedStyles); 11516 } 11517 if (injectedStyles.has(hash)) { 11518 return; 11519 } 11520 if (documentContainsStyleHash16(targetDocument, hash)) { 11521 injectedStyles.add(hash); 11522 return; 11523 } 11524 const style = targetDocument.createElement("style"); 11525 style.setAttribute(STYLE_HASH_ATTRIBUTE16, hash); 11526 style.appendChild(targetDocument.createTextNode(css)); 11527 targetDocument.head.appendChild(style); 11528 injectedStyles.add(hash); 11529 } 11530 function registerDocument16(targetDocument) { 11531 const runtime = getRuntime16(); 11532 runtime.documents.set( 11533 targetDocument, 11534 (runtime.documents.get(targetDocument) ?? 0) + 1 11535 ); 11536 for (const [hash, css] of runtime.styles) { 11537 injectStyle16(targetDocument, hash, css); 11538 } 11539 return () => { 11540 const count = runtime.documents.get(targetDocument); 11541 if (count === void 0) { 11542 return; 11543 } 11544 if (count <= 1) { 11545 runtime.documents.delete(targetDocument); 11546 return; 11547 } 11548 runtime.documents.set(targetDocument, count - 1); 11549 }; 11550 } 11551 function registerStyle16(hash, css) { 11552 const runtime = getRuntime16(); 11553 runtime.styles.set(hash, css); 11554 for (const targetDocument of runtime.documents.keys()) { 11555 injectStyle16(targetDocument, hash, css); 11556 } 11557 } 11558 if (typeof process === "undefined" || true) { 11559 registerStyle16("e57e872b6c", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._173ad03087dbb509__notice{--icon-height:var(--wpds-dimension-size-sm,24px);--text-vertical-padding:calc((var(--icon-height) - var(--wpds-typography-line-height-sm, 20px))/2);--wp-ui-notice-background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-neutral,#dbdbdb);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);align-items:start;background-color:var(--wp-ui-notice-background-color);border:1px solid var(--wp-ui-notice-border-color);border-radius:var(--wpds-border-radius-lg,8px);container-type:inline-size;display:grid;grid-template-columns:auto 1fr auto;isolation:isolate;padding:var(--wpds-dimension-padding-md,12px)}._86733bd626c7e048__icon{color:var(--wp-ui-notice-decorative-icon-color);grid-column:1;grid-row:1;margin-inline-end:var(--wpds-dimension-gap-xs,4px)}._6688caffadaf5a66__description{color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}._48b3142dec93ee87__actions{display:flex;flex-wrap:wrap;gap:var(--wpds-dimension-gap-md,12px);grid-column:2}._173ad03087dbb509__notice:has(._6688caffadaf5a66__description) ._48b3142dec93ee87__actions,._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._48b3142dec93ee87__actions{margin-block-start:var(--wpds-dimension-gap-sm,8px)}.adcfc74c7c481a8b__action-button{flex-shrink:0}.b0ce2ddf3e16f445__action-link{flex-shrink:0;&:not(:first-child){margin-inline-start:var(--wpds-dimension-gap-xs,4px)}&:not(:last-child){margin-inline-end:var(--wpds-dimension-gap-xs,4px)}}._234d6ae581e5eb29__close-icon{grid-column:3;grid-row:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px)}._4e822398b0e00dd5__is-info{--wp-ui-notice-background-color:var(--wpds-color-background-surface-info-weak,#f3f9ff);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-info,#adc6e2);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-info,#001b4f);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-info-weak,#006bd7)}._1ef9a1d966bd5220__is-warning{--wp-ui-notice-background-color:var(--wpds-color-background-surface-warning-weak,#fff7e1);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-warning,#e1bd7c);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-warning,#2e1900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-warning-weak,#936300)}.e98dc9c1e2c0bf3b__is-success{--wp-ui-notice-background-color:var(--wpds-color-background-surface-success-weak,#ebffed);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-success,#92d39d);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-success,#002900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-success-weak,#008030)}._673065a55bda7056__is-error{--wp-ui-notice-background-color:var(--wpds-color-background-surface-error-weak,#fff6f5);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-error,#e0afa7);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-error,#470000);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-error-weak,#cc1818)}@container (max-width: 320px){._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._48b3142dec93ee87__actions,._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._6688caffadaf5a66__description{grid-column:1/3}}}@layer compositions{._6d6c0651ee903d00__title{--_gcd-heading-color:var(--wp-ui-notice-text-color);color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}.b0ce2ddf3e16f445__action-link{margin-block:auto}._234d6ae581e5eb29__close-icon,.adcfc74c7c481a8b__action-button,.b0ce2ddf3e16f445__action-link{mix-blend-mode:luminosity;@media (forced-colors:active){mix-blend-mode:normal}}}}"); 11560 } 11561 var style_default15 = { "notice": "_173ad03087dbb509__notice", "icon": "_86733bd626c7e048__icon", "description": "_6688caffadaf5a66__description", "actions": "_48b3142dec93ee87__actions", "title": "_6d6c0651ee903d00__title", "action-button": "adcfc74c7c481a8b__action-button", "action-link": "b0ce2ddf3e16f445__action-link", "close-icon": "_234d6ae581e5eb29__close-icon", "is-info": "_4e822398b0e00dd5__is-info", "is-warning": "_1ef9a1d966bd5220__is-warning", "is-success": "e98dc9c1e2c0bf3b__is-success", "is-error": "_673065a55bda7056__is-error" }; 11562 var ActionButton = (0, import_element31.forwardRef)( 11563 function NoticeActionButton({ className, loading, loadingAnnouncement, variant, ...props }, ref) { 11564 const loadingProps = loading !== void 0 ? { loading, loadingAnnouncement: loadingAnnouncement ?? "" } : {}; 11565 return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)( 11566 Button4, 11567 { 11568 ...props, 11569 ...loadingProps, 11570 ref, 11571 size: "compact", 11572 tone: "neutral", 11573 variant, 11574 className: clsx_default( 11575 style_default15["action-button"], 11576 style_default15[`is-action-button-$variant}`], 11577 className 11578 ) 11579 } 11580 ); 11581 } 11582 ); 11583 11584 // packages/ui/build-module/notice/action-link.mjs 11585 var import_element32 = __toESM(require_element(), 1); 11586 var import_jsx_runtime40 = __toESM(require_jsx_runtime(), 1); 11587 var STYLE_HASH_ATTRIBUTE17 = "data-wp-hash"; 11588 function getRuntime17() { 11589 const globalScope = globalThis; 11590 if (globalScope.__wpStyleRuntime) { 11591 return globalScope.__wpStyleRuntime; 11592 } 11593 globalScope.__wpStyleRuntime = { 11594 documents: /* @__PURE__ */ new Map(), 11595 styles: /* @__PURE__ */ new Map(), 11596 injectedStyles: /* @__PURE__ */ new WeakMap() 11597 }; 11598 if (typeof document !== "undefined") { 11599 registerDocument17(document); 11600 } 11601 return globalScope.__wpStyleRuntime; 11602 } 11603 function documentContainsStyleHash17(targetDocument, hash) { 11604 if (!targetDocument.head) { 11605 return false; 11606 } 11607 for (const style of targetDocument.head.querySelectorAll( 11608 `style[$STYLE_HASH_ATTRIBUTE17}]` 11609 )) { 11610 if (style.getAttribute(STYLE_HASH_ATTRIBUTE17) === hash) { 11611 return true; 11612 } 11613 } 11614 return false; 11615 } 11616 function injectStyle17(targetDocument, hash, css) { 11617 if (!targetDocument.head) { 11618 return; 11619 } 11620 const runtime = getRuntime17(); 11621 let injectedStyles = runtime.injectedStyles.get(targetDocument); 11622 if (!injectedStyles) { 11623 injectedStyles = /* @__PURE__ */ new Set(); 11624 runtime.injectedStyles.set(targetDocument, injectedStyles); 11625 } 11626 if (injectedStyles.has(hash)) { 11627 return; 11628 } 11629 if (documentContainsStyleHash17(targetDocument, hash)) { 11630 injectedStyles.add(hash); 11631 return; 11632 } 11633 const style = targetDocument.createElement("style"); 11634 style.setAttribute(STYLE_HASH_ATTRIBUTE17, hash); 11635 style.appendChild(targetDocument.createTextNode(css)); 11636 targetDocument.head.appendChild(style); 11637 injectedStyles.add(hash); 11638 } 11639 function registerDocument17(targetDocument) { 11640 const runtime = getRuntime17(); 11641 runtime.documents.set( 11642 targetDocument, 11643 (runtime.documents.get(targetDocument) ?? 0) + 1 11644 ); 11645 for (const [hash, css] of runtime.styles) { 11646 injectStyle17(targetDocument, hash, css); 11647 } 11648 return () => { 11649 const count = runtime.documents.get(targetDocument); 11650 if (count === void 0) { 11651 return; 11652 } 11653 if (count <= 1) { 11654 runtime.documents.delete(targetDocument); 11655 return; 11656 } 11657 runtime.documents.set(targetDocument, count - 1); 11658 }; 11659 } 11660 function registerStyle17(hash, css) { 11661 const runtime = getRuntime17(); 11662 runtime.styles.set(hash, css); 11663 for (const targetDocument of runtime.documents.keys()) { 11664 injectStyle17(targetDocument, hash, css); 11665 } 11666 } 11667 if (typeof process === "undefined" || true) { 11668 registerStyle17("e57e872b6c", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._173ad03087dbb509__notice{--icon-height:var(--wpds-dimension-size-sm,24px);--text-vertical-padding:calc((var(--icon-height) - var(--wpds-typography-line-height-sm, 20px))/2);--wp-ui-notice-background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-neutral,#dbdbdb);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-neutral,#1e1e1e);align-items:start;background-color:var(--wp-ui-notice-background-color);border:1px solid var(--wp-ui-notice-border-color);border-radius:var(--wpds-border-radius-lg,8px);container-type:inline-size;display:grid;grid-template-columns:auto 1fr auto;isolation:isolate;padding:var(--wpds-dimension-padding-md,12px)}._86733bd626c7e048__icon{color:var(--wp-ui-notice-decorative-icon-color);grid-column:1;grid-row:1;margin-inline-end:var(--wpds-dimension-gap-xs,4px)}._6688caffadaf5a66__description{color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}._48b3142dec93ee87__actions{display:flex;flex-wrap:wrap;gap:var(--wpds-dimension-gap-md,12px);grid-column:2}._173ad03087dbb509__notice:has(._6688caffadaf5a66__description) ._48b3142dec93ee87__actions,._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._48b3142dec93ee87__actions{margin-block-start:var(--wpds-dimension-gap-sm,8px)}.adcfc74c7c481a8b__action-button{flex-shrink:0}.b0ce2ddf3e16f445__action-link{flex-shrink:0;&:not(:first-child){margin-inline-start:var(--wpds-dimension-gap-xs,4px)}&:not(:last-child){margin-inline-end:var(--wpds-dimension-gap-xs,4px)}}._234d6ae581e5eb29__close-icon{grid-column:3;grid-row:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px)}._4e822398b0e00dd5__is-info{--wp-ui-notice-background-color:var(--wpds-color-background-surface-info-weak,#f3f9ff);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-info,#adc6e2);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-info,#001b4f);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-info-weak,#006bd7)}._1ef9a1d966bd5220__is-warning{--wp-ui-notice-background-color:var(--wpds-color-background-surface-warning-weak,#fff7e1);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-warning,#e1bd7c);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-warning,#2e1900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-warning-weak,#936300)}.e98dc9c1e2c0bf3b__is-success{--wp-ui-notice-background-color:var(--wpds-color-background-surface-success-weak,#ebffed);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-success,#92d39d);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-success,#002900);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-success-weak,#008030)}._673065a55bda7056__is-error{--wp-ui-notice-background-color:var(--wpds-color-background-surface-error-weak,#fff6f5);--wp-ui-notice-border-color:var(--wpds-color-stroke-surface-error,#e0afa7);--wp-ui-notice-text-color:var(--wpds-color-foreground-content-error,#470000);--wp-ui-notice-decorative-icon-color:var(--wpds-color-foreground-content-error-weak,#cc1818)}@container (max-width: 320px){._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._48b3142dec93ee87__actions,._173ad03087dbb509__notice:has(._6d6c0651ee903d00__title) ._6688caffadaf5a66__description{grid-column:1/3}}}@layer compositions{._6d6c0651ee903d00__title{--_gcd-heading-color:var(--wp-ui-notice-text-color);color:var(--wp-ui-notice-text-color);grid-column:2;padding-block:var(--text-vertical-padding)}.b0ce2ddf3e16f445__action-link{margin-block:auto}._234d6ae581e5eb29__close-icon,.adcfc74c7c481a8b__action-button,.b0ce2ddf3e16f445__action-link{mix-blend-mode:luminosity;@media (forced-colors:active){mix-blend-mode:normal}}}}"); 11669 } 11670 var style_default16 = { "notice": "_173ad03087dbb509__notice", "icon": "_86733bd626c7e048__icon", "description": "_6688caffadaf5a66__description", "actions": "_48b3142dec93ee87__actions", "title": "_6d6c0651ee903d00__title", "action-button": "adcfc74c7c481a8b__action-button", "action-link": "b0ce2ddf3e16f445__action-link", "close-icon": "_234d6ae581e5eb29__close-icon", "is-info": "_4e822398b0e00dd5__is-info", "is-warning": "_1ef9a1d966bd5220__is-warning", "is-success": "e98dc9c1e2c0bf3b__is-success", "is-error": "_673065a55bda7056__is-error" }; 11671 var ActionLink = (0, import_element32.forwardRef)( 11672 function NoticeActionLink({ className, render, ...props }, ref) { 11673 return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)( 11674 Text, 11675 { 11676 ref, 11677 className: clsx_default(style_default16["action-link"], className), 11678 ...props, 11679 variant: "body-md", 11680 render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Link, { tone: "neutral", variant: "default", render }) 11681 } 11682 ); 11683 } 11684 ); 11685 11686 // packages/block-directory/build-module/components/block-ratings/stars.mjs 11687 var import_i18n7 = __toESM(require_i18n(), 1); 11688 var import_jsx_runtime41 = __toESM(require_jsx_runtime(), 1); 11689 function Stars({ rating }) { 11690 const stars = Math.round(rating / 0.5) * 0.5; 11691 const fullStarCount = Math.floor(rating); 11692 const halfStarCount = Math.ceil(rating - fullStarCount); 11693 const emptyStarCount = 5 - (fullStarCount + halfStarCount); 11694 return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)( 11695 "span", 11696 { 11697 "aria-label": (0, import_i18n7.sprintf)( 11698 /* translators: %s: number of stars. */ 11699 (0, import_i18n7.__)("%s out of 5 stars"), 11700 stars 11701 ), 11702 children: [ 11703 Array.from({ length: fullStarCount }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( 11704 icon_default, 11705 { 11706 className: "block-directory-block-ratings__star-full", 11707 icon: star_filled_default, 11708 size: 16 11709 }, 11710 `full_stars_$i}` 11711 )), 11712 Array.from({ length: halfStarCount }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( 11713 icon_default, 11714 { 11715 className: "block-directory-block-ratings__star-half-full", 11716 icon: star_half_default, 11717 size: 16 11718 }, 11719 `half_stars_$i}` 11720 )), 11721 Array.from({ length: emptyStarCount }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)( 11722 icon_default, 11723 { 11724 className: "block-directory-block-ratings__star-empty", 11725 icon: star_empty_default, 11726 size: 16 11727 }, 11728 `empty_stars_$i}` 11729 )) 11730 ] 11731 } 11732 ); 11733 } 11734 var stars_default = Stars; 11735 11736 // packages/block-directory/build-module/components/block-ratings/index.mjs 11737 var import_jsx_runtime42 = __toESM(require_jsx_runtime(), 1); 11738 var BlockRatings = ({ rating }) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "block-directory-block-ratings", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(stars_default, { rating }) }); 11739 var block_ratings_default = BlockRatings; 11740 11741 // packages/block-directory/build-module/components/downloadable-block-icon/index.mjs 11742 var import_block_editor2 = __toESM(require_block_editor(), 1); 11743 var import_jsx_runtime43 = __toESM(require_jsx_runtime(), 1); 11744 function DownloadableBlockIcon({ icon }) { 11745 const className = "block-directory-downloadable-block-icon"; 11746 return icon.match(/\.(jpeg|jpg|gif|png|svg)(?:\?.*)?$/) !== null ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("img", { className, src: icon, alt: "" }) : /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_block_editor2.BlockIcon, { className, icon, showColors: true }); 11747 } 11748 var downloadable_block_icon_default = DownloadableBlockIcon; 11749 11750 // packages/block-directory/build-module/components/downloadable-block-notice/index.mjs 11751 var import_i18n8 = __toESM(require_i18n(), 1); 11752 var import_data5 = __toESM(require_data(), 1); 11753 var import_jsx_runtime44 = __toESM(require_jsx_runtime(), 1); 11754 var DownloadableBlockNotice = ({ block }) => { 11755 const errorNotice = (0, import_data5.useSelect)( 11756 (select) => select(store).getErrorNoticeForBlock(block.id), 11757 [block] 11758 ); 11759 if (!errorNotice) { 11760 return null; 11761 } 11762 return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "block-directory-downloadable-block-notice", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "block-directory-downloadable-block-notice__content", children: [ 11763 errorNotice.message, 11764 errorNotice.isFatal ? " " + (0, import_i18n8.__)("Try reloading the page.") : null 11765 ] }) }); 11766 }; 11767 var downloadable_block_notice_default = DownloadableBlockNotice; 11768 11769 // packages/block-directory/build-module/components/downloadable-block-list-item/index.mjs 11770 var import_jsx_runtime45 = __toESM(require_jsx_runtime(), 1); 11771 function getDownloadableBlockLabel({ title, rating, ratingCount }, { hasNotice, isInstalled, isInstalling: isInstalling2 }) { 11772 const stars = Math.round(rating / 0.5) * 0.5; 11773 if (!isInstalled && hasNotice) { 11774 return (0, import_i18n9.sprintf)( 11775 /* translators: %s: block title */ 11776 (0, import_i18n9.__)("Retry installing %s."), 11777 (0, import_html_entities.decodeEntities)(title) 11778 ); 11779 } 11780 if (isInstalled) { 11781 return (0, import_i18n9.sprintf)( 11782 /* translators: %s: block title */ 11783 (0, import_i18n9.__)("Add %s."), 11784 (0, import_html_entities.decodeEntities)(title) 11785 ); 11786 } 11787 if (isInstalling2) { 11788 return (0, import_i18n9.sprintf)( 11789 /* translators: %s: block title */ 11790 (0, import_i18n9.__)("Installing %s."), 11791 (0, import_html_entities.decodeEntities)(title) 11792 ); 11793 } 11794 if (ratingCount < 1) { 11795 return (0, import_i18n9.sprintf)( 11796 /* translators: %s: block title */ 11797 (0, import_i18n9.__)("Install %s."), 11798 (0, import_html_entities.decodeEntities)(title) 11799 ); 11800 } 11801 return (0, import_i18n9.sprintf)( 11802 /* translators: 1: block title, 2: average rating, 3: total ratings count. */ 11803 (0, import_i18n9._n)( 11804 "Install %1$s. %2$s stars with %3$s review.", 11805 "Install %1$s. %2$s stars with %3$s reviews.", 11806 ratingCount 11807 ), 11808 (0, import_html_entities.decodeEntities)(title), 11809 stars, 11810 ratingCount 11811 ); 11812 } 11813 function DownloadableBlockListItem({ item, onClick }) { 11814 const { author, description, icon, rating, title } = item; 11815 const isInstalled = !!(0, import_blocks3.getBlockType)(item.name); 11816 const { hasNotice, isInstalling: isInstalling2, isInstallable } = (0, import_data6.useSelect)( 11817 (select) => { 11818 const { getErrorNoticeForBlock: getErrorNoticeForBlock2, isInstalling: isBlockInstalling } = select(store); 11819 const notice = getErrorNoticeForBlock2(item.id); 11820 const hasFatal = notice && notice.isFatal; 11821 return { 11822 hasNotice: !!notice, 11823 isInstalling: isBlockInstalling(item.id), 11824 isInstallable: !hasFatal 11825 }; 11826 }, 11827 [item] 11828 ); 11829 let statusText = ""; 11830 if (isInstalled) { 11831 statusText = (0, import_i18n9.__)("Installed!"); 11832 } else if (isInstalling2) { 11833 statusText = (0, import_i18n9.__)("Installing\u2026"); 11834 } 11835 const itemLabel = getDownloadableBlockLabel(item, { 11836 hasNotice, 11837 isInstalled, 11838 isInstalling: isInstalling2 11839 }); 11840 return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(tooltip_exports.Root, { children: [ 11841 /* @__PURE__ */ (0, import_jsx_runtime45.jsx)( 11842 tooltip_exports.Trigger, 11843 { 11844 render: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)( 11845 import_components.Composite.Item, 11846 { 11847 className: clsx_default( 11848 "block-directory-downloadable-block-list-item", 11849 isInstalling2 && "is-installing" 11850 ), 11851 accessibleWhenDisabled: true, 11852 disabled: isInstalling2 || !isInstallable, 11853 onClick: (event) => { 11854 event.preventDefault(); 11855 onClick(); 11856 }, 11857 "aria-label": itemLabel, 11858 type: "button", 11859 role: "option", 11860 children: [ 11861 /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "block-directory-downloadable-block-list-item__icon", children: [ 11862 /* @__PURE__ */ (0, import_jsx_runtime45.jsx)( 11863 downloadable_block_icon_default, 11864 { 11865 icon, 11866 title 11867 } 11868 ), 11869 isInstalling2 ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "block-directory-downloadable-block-list-item__spinner", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_components.Spinner, {}) }) : /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(block_ratings_default, { rating }) 11870 ] }), 11871 /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("span", { className: "block-directory-downloadable-block-list-item__details", children: [ 11872 /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "block-directory-downloadable-block-list-item__title", children: (0, import_element33.createInterpolateElement)( 11873 (0, import_i18n9.sprintf)( 11874 /* translators: 1: block title. 2: author name. */ 11875 (0, import_i18n9.__)("%1$s <span>by %2$s</span>"), 11876 (0, import_html_entities.decodeEntities)(title), 11877 author 11878 ), 11879 { 11880 span: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "block-directory-downloadable-block-list-item__author" }) 11881 } 11882 ) }), 11883 hasNotice ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(downloadable_block_notice_default, { block: item }) : /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_jsx_runtime45.Fragment, { children: [ 11884 /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "block-directory-downloadable-block-list-item__desc", children: !!statusText ? statusText : (0, import_html_entities.decodeEntities)(description) }), 11885 isInstallable && !(isInstalled || isInstalling2) && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(VisuallyHidden, { children: (0, import_i18n9.__)("Install block") }) 11886 ] }) 11887 ] }) 11888 ] 11889 } 11890 ) 11891 } 11892 ), 11893 /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(tooltip_exports.Popup, { children: itemLabel }) 11894 ] }); 11895 } 11896 var downloadable_block_list_item_default = DownloadableBlockListItem; 11897 11898 // packages/block-directory/build-module/components/downloadable-blocks-list/index.mjs 11899 var import_jsx_runtime46 = __toESM(require_jsx_runtime(), 1); 11900 var noop4 = () => { 11901 }; 11902 function DownloadableBlocksList({ items, onHover = noop4, onSelect }) { 11903 const { installBlockType: installBlockType2 } = (0, import_data7.useDispatch)(store); 11904 if (!items.length) { 11905 return null; 11906 } 11907 return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( 11908 import_components2.Composite, 11909 { 11910 role: "listbox", 11911 className: "block-directory-downloadable-blocks-list", 11912 "aria-label": (0, import_i18n10.__)("Blocks available for install"), 11913 children: items.map((item) => { 11914 return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)( 11915 downloadable_block_list_item_default, 11916 { 11917 onClick: () => { 11918 if ((0, import_blocks4.getBlockType)(item.name)) { 11919 onSelect(item); 11920 } else { 11921 installBlockType2(item).then((success) => { 11922 if (success) { 11923 onSelect(item); 11924 } 11925 }); 11926 } 11927 onHover(null); 11928 }, 11929 onHover, 11930 item 11931 }, 11932 item.id 11933 ); 11934 }) 11935 } 11936 ); 11937 } 11938 var downloadable_blocks_list_default = DownloadableBlocksList; 11939 11940 // packages/block-directory/build-module/components/downloadable-blocks-panel/inserter-panel.mjs 11941 var import_i18n11 = __toESM(require_i18n(), 1); 11942 var import_element34 = __toESM(require_element(), 1); 11943 var import_a11y2 = __toESM(require_a11y(), 1); 11944 var import_jsx_runtime47 = __toESM(require_jsx_runtime(), 1); 11945 function DownloadableBlocksInserterPanel({ 11946 children, 11947 downloadableItems, 11948 hasLocalBlocks 11949 }) { 11950 const count = downloadableItems.length; 11951 (0, import_element34.useEffect)(() => { 11952 (0, import_a11y2.speak)( 11953 (0, import_i18n11.sprintf)( 11954 /* translators: %d: number of available blocks. */ 11955 (0, import_i18n11._n)( 11956 "%d additional block is available to install.", 11957 "%d additional blocks are available to install.", 11958 count 11959 ), 11960 count 11961 ) 11962 ); 11963 }, [count]); 11964 return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [ 11965 !hasLocalBlocks && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "block-directory-downloadable-blocks-panel__no-local", children: (0, import_i18n11.__)("No results available from your installed blocks.") }), 11966 /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "block-editor-inserter__quick-inserter-separator" }), 11967 /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "block-directory-downloadable-blocks-panel", children: [ 11968 /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "block-directory-downloadable-blocks-panel__header", children: [ 11969 /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("h2", { className: "block-directory-downloadable-blocks-panel__title", children: (0, import_i18n11.__)("Available to install") }), 11970 /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "block-directory-downloadable-blocks-panel__description", children: (0, import_i18n11.__)( 11971 "Select a block to install and add it to your post." 11972 ) }) 11973 ] }), 11974 children 11975 ] }) 11976 ] }); 11977 } 11978 var inserter_panel_default = DownloadableBlocksInserterPanel; 11979 11980 // packages/block-directory/build-module/components/downloadable-blocks-panel/no-results.mjs 11981 var import_i18n12 = __toESM(require_i18n(), 1); 11982 var import_jsx_runtime48 = __toESM(require_jsx_runtime(), 1); 11983 function DownloadableBlocksNoResults() { 11984 return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(import_jsx_runtime48.Fragment, { children: [ 11985 /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "block-editor-inserter__no-results", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", { children: (0, import_i18n12.__)("No results found.") }) }), 11986 /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "block-editor-inserter__tips", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(notice_exports.Root, { intent: "info", icon: tip_default, children: [ 11987 /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(notice_exports.Description, { children: (0, import_i18n12.__)("Interested in creating your own block?") }), 11988 /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(notice_exports.Actions, { children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)( 11989 notice_exports.ActionLink, 11990 { 11991 href: "https://developer.wordpress.org/block-editor/", 11992 openInNewTab: true, 11993 children: [ 11994 (0, import_i18n12.__)("Get started here"), 11995 "." 11996 ] 11997 } 11998 ) }) 11999 ] }) }) 12000 ] }); 12001 } 12002 var no_results_default = DownloadableBlocksNoResults; 12003 12004 // packages/block-directory/build-module/components/downloadable-blocks-panel/index.mjs 12005 var import_jsx_runtime49 = __toESM(require_jsx_runtime(), 1); 12006 var EMPTY_ARRAY3 = []; 12007 var useDownloadableBlocks = (filterValue) => (0, import_data8.useSelect)( 12008 (select) => { 12009 const { 12010 getDownloadableBlocks: getDownloadableBlocks3, 12011 isRequestingDownloadableBlocks: isRequestingDownloadableBlocks2, 12012 getInstalledBlockTypes: getInstalledBlockTypes2 12013 } = select(store); 12014 const hasPermission = select(import_core_data.store).canUser( 12015 "read", 12016 "block-directory/search" 12017 ); 12018 let downloadableBlocks2 = EMPTY_ARRAY3; 12019 if (hasPermission) { 12020 downloadableBlocks2 = getDownloadableBlocks3(filterValue); 12021 const installedBlockTypes = getInstalledBlockTypes2(); 12022 const installableBlocks = downloadableBlocks2.filter( 12023 ({ name }) => { 12024 const isJustInstalled = installedBlockTypes.some( 12025 (blockType) => blockType.name === name 12026 ); 12027 const isPreviouslyInstalled = (0, import_blocks5.getBlockType)(name); 12028 return isJustInstalled || !isPreviouslyInstalled; 12029 } 12030 ); 12031 if (installableBlocks.length !== downloadableBlocks2.length) { 12032 downloadableBlocks2 = installableBlocks; 12033 } 12034 if (downloadableBlocks2.length === 0) { 12035 downloadableBlocks2 = EMPTY_ARRAY3; 12036 } 12037 } 12038 return { 12039 hasPermission, 12040 downloadableBlocks: downloadableBlocks2, 12041 isLoading: isRequestingDownloadableBlocks2(filterValue) 12042 }; 12043 }, 12044 [filterValue] 12045 ); 12046 function DownloadableBlocksPanel({ 12047 onSelect, 12048 onHover, 12049 hasLocalBlocks, 12050 isTyping, 12051 filterValue 12052 }) { 12053 const { hasPermission, downloadableBlocks: downloadableBlocks2, isLoading } = useDownloadableBlocks(filterValue); 12054 if (hasPermission === void 0 || isLoading || isTyping) { 12055 return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(import_jsx_runtime49.Fragment, { children: [ 12056 hasPermission && !hasLocalBlocks && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(import_jsx_runtime49.Fragment, { children: [ 12057 /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "block-directory-downloadable-blocks-panel__no-local", children: (0, import_i18n13.__)( 12058 "No results available from your installed blocks." 12059 ) }), 12060 /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "block-editor-inserter__quick-inserter-separator" }) 12061 ] }), 12062 /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "block-directory-downloadable-blocks-panel has-blocks-loading", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_components3.Spinner, {}) }) 12063 ] }); 12064 } 12065 if (false === hasPermission) { 12066 if (!hasLocalBlocks) { 12067 return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(no_results_default, {}); 12068 } 12069 return null; 12070 } 12071 if (downloadableBlocks2.length === 0) { 12072 return hasLocalBlocks ? null : /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(no_results_default, {}); 12073 } 12074 return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( 12075 inserter_panel_default, 12076 { 12077 downloadableItems: downloadableBlocks2, 12078 hasLocalBlocks, 12079 children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)( 12080 downloadable_blocks_list_default, 12081 { 12082 items: downloadableBlocks2, 12083 onSelect, 12084 onHover 12085 } 12086 ) 12087 } 12088 ); 12089 } 12090 12091 // packages/block-directory/build-module/plugins/inserter-menu-downloadable-blocks-panel/index.mjs 12092 var import_jsx_runtime50 = __toESM(require_jsx_runtime(), 1); 12093 function InserterMenuDownloadableBlocksPanel() { 12094 const [debouncedFilterValue, setFilterValue] = (0, import_element35.useState)(""); 12095 const debouncedSetFilterValue = (0, import_compose.debounce)(setFilterValue, 400); 12096 return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_block_editor3.__unstableInserterMenuExtension, { children: ({ onSelect, onHover, filterValue, hasItems }) => { 12097 if (debouncedFilterValue !== filterValue) { 12098 debouncedSetFilterValue(filterValue); 12099 } 12100 if (!debouncedFilterValue) { 12101 return null; 12102 } 12103 return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)( 12104 DownloadableBlocksPanel, 12105 { 12106 onSelect, 12107 onHover, 12108 filterValue: debouncedFilterValue, 12109 hasLocalBlocks: hasItems, 12110 isTyping: filterValue !== debouncedFilterValue 12111 } 12112 ); 12113 } }); 12114 } 12115 var inserter_menu_downloadable_blocks_panel_default = InserterMenuDownloadableBlocksPanel; 12116 12117 // packages/block-directory/build-module/plugins/installed-blocks-pre-publish-panel/index.mjs 12118 var import_i18n15 = __toESM(require_i18n(), 1); 12119 var import_data9 = __toESM(require_data(), 1); 12120 var import_editor2 = __toESM(require_editor(), 1); 12121 12122 // packages/block-directory/build-module/components/compact-list/index.mjs 12123 var import_i18n14 = __toESM(require_i18n(), 1); 12124 var import_jsx_runtime51 = __toESM(require_jsx_runtime(), 1); 12125 function CompactList({ items }) { 12126 if (!items.length) { 12127 return null; 12128 } 12129 return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("ul", { className: "block-directory-compact-list", children: items.map(({ icon, id, title, author }) => /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("li", { className: "block-directory-compact-list__item", children: [ 12130 /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(downloadable_block_icon_default, { icon, title }), 12131 /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "block-directory-compact-list__item-details", children: [ 12132 /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "block-directory-compact-list__item-title", children: title }), 12133 /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "block-directory-compact-list__item-author", children: (0, import_i18n14.sprintf)( 12134 /* translators: %s: Name of the block author. */ 12135 (0, import_i18n14.__)("By %s"), 12136 author 12137 ) }) 12138 ] }) 12139 ] }, id)) }); 12140 } 12141 12142 // packages/block-directory/build-module/plugins/installed-blocks-pre-publish-panel/index.mjs 12143 var import_jsx_runtime52 = __toESM(require_jsx_runtime(), 1); 12144 function InstalledBlocksPrePublishPanel() { 12145 const newBlockTypes = (0, import_data9.useSelect)( 12146 (select) => select(store).getNewBlockTypes(), 12147 [] 12148 ); 12149 if (!newBlockTypes.length) { 12150 return null; 12151 } 12152 return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)( 12153 import_editor2.PluginPrePublishPanel, 12154 { 12155 title: (0, import_i18n15.sprintf)( 12156 // translators: %d: number of blocks (number). 12157 (0, import_i18n15._n)( 12158 "Added: %d block", 12159 "Added: %d blocks", 12160 newBlockTypes.length 12161 ), 12162 newBlockTypes.length 12163 ), 12164 initialOpen: true, 12165 children: [ 12166 /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("p", { className: "installed-blocks-pre-publish-panel__copy", children: (0, import_i18n15._n)( 12167 "The following block has been added to your site.", 12168 "The following blocks have been added to your site.", 12169 newBlockTypes.length 12170 ) }), 12171 /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(CompactList, { items: newBlockTypes }) 12172 ] 12173 } 12174 ); 12175 } 12176 12177 // packages/block-directory/build-module/plugins/get-install-missing/index.mjs 12178 var import_i18n17 = __toESM(require_i18n(), 1); 12179 var import_components5 = __toESM(require_components(), 1); 12180 var import_blocks7 = __toESM(require_blocks(), 1); 12181 var import_element36 = __toESM(require_element(), 1); 12182 var import_data11 = __toESM(require_data(), 1); 12183 var import_core_data2 = __toESM(require_core_data(), 1); 12184 var import_block_editor5 = __toESM(require_block_editor(), 1); 12185 12186 // packages/block-directory/build-module/plugins/get-install-missing/install-button.mjs 12187 var import_i18n16 = __toESM(require_i18n(), 1); 12188 var import_components4 = __toESM(require_components(), 1); 12189 var import_blocks6 = __toESM(require_blocks(), 1); 12190 var import_data10 = __toESM(require_data(), 1); 12191 var import_block_editor4 = __toESM(require_block_editor(), 1); 12192 var import_jsx_runtime53 = __toESM(require_jsx_runtime(), 1); 12193 function InstallButton({ attributes, block, clientId }) { 12194 const isInstallingBlock = (0, import_data10.useSelect)( 12195 (select) => select(store).isInstalling(block.id), 12196 [block.id] 12197 ); 12198 const { installBlockType: installBlockType2 } = (0, import_data10.useDispatch)(store); 12199 const { replaceBlock } = (0, import_data10.useDispatch)(import_block_editor4.store); 12200 return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)( 12201 import_components4.Button, 12202 { 12203 __next40pxDefaultSize: true, 12204 onClick: () => installBlockType2(block).then((success) => { 12205 if (success) { 12206 const blockType = (0, import_blocks6.getBlockType)(block.name); 12207 const [originalBlock] = (0, import_blocks6.parse)( 12208 attributes.originalContent 12209 ); 12210 if (originalBlock && blockType) { 12211 replaceBlock( 12212 clientId, 12213 (0, import_blocks6.createBlock)( 12214 blockType.name, 12215 originalBlock.attributes, 12216 originalBlock.innerBlocks 12217 ) 12218 ); 12219 } 12220 } 12221 }), 12222 accessibleWhenDisabled: true, 12223 disabled: isInstallingBlock, 12224 isBusy: isInstallingBlock, 12225 variant: "primary", 12226 children: (0, import_i18n16.sprintf)( 12227 /* translators: %s: block name */ 12228 (0, import_i18n16.__)("Install %s"), 12229 block.title 12230 ) 12231 } 12232 ); 12233 } 12234 12235 // packages/block-directory/build-module/plugins/get-install-missing/index.mjs 12236 var import_jsx_runtime54 = __toESM(require_jsx_runtime(), 1); 12237 var getInstallMissing = (OriginalComponent) => (props) => { 12238 const { originalName } = props.attributes; 12239 const { block, hasPermission } = (0, import_data11.useSelect)( 12240 (select) => { 12241 const { getDownloadableBlocks: getDownloadableBlocks3 } = select(store); 12242 const blocks = getDownloadableBlocks3( 12243 "block:" + originalName 12244 ).filter(({ name }) => originalName === name); 12245 return { 12246 hasPermission: select(import_core_data2.store).canUser( 12247 "read", 12248 "block-directory/search" 12249 ), 12250 block: blocks.length && blocks[0] 12251 }; 12252 }, 12253 [originalName] 12254 ); 12255 if (!hasPermission || !block) { 12256 return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(OriginalComponent, { ...props }); 12257 } 12258 return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(ModifiedWarning, { ...props, originalBlock: block }); 12259 }; 12260 var ModifiedWarning = ({ originalBlock, ...props }) => { 12261 const { originalName, originalUndelimitedContent, clientId } = props.attributes; 12262 const { replaceBlock } = (0, import_data11.useDispatch)(import_block_editor5.store); 12263 const convertToHTML = () => { 12264 replaceBlock( 12265 props.clientId, 12266 (0, import_blocks7.createBlock)("core/html", {}, [], [originalUndelimitedContent]) 12267 ); 12268 }; 12269 const hasContent = !!originalUndelimitedContent; 12270 const hasHTMLBlock = (0, import_data11.useSelect)( 12271 (select) => { 12272 const { canInsertBlockType, getBlockRootClientId } = select(import_block_editor5.store); 12273 return canInsertBlockType( 12274 "core/html", 12275 getBlockRootClientId(clientId) 12276 ); 12277 }, 12278 [clientId] 12279 ); 12280 let messageHTML = (0, import_i18n17.sprintf)( 12281 /* translators: %s: block name */ 12282 (0, import_i18n17.__)( 12283 "Your site doesn\u2019t include support for the %s block. You can try installing the block or remove it entirely." 12284 ), 12285 originalBlock.title || originalName 12286 ); 12287 const actions = [ 12288 /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( 12289 InstallButton, 12290 { 12291 block: originalBlock, 12292 attributes: props.attributes, 12293 clientId: props.clientId 12294 }, 12295 "install" 12296 ) 12297 ]; 12298 if (hasContent && hasHTMLBlock) { 12299 messageHTML = (0, import_i18n17.sprintf)( 12300 /* translators: %s: block name */ 12301 (0, import_i18n17.__)( 12302 "Your site doesn\u2019t include support for the %s block. You can try installing the block, convert it to a Custom HTML block, or remove it entirely." 12303 ), 12304 originalBlock.title || originalName 12305 ); 12306 actions.push( 12307 /* @__PURE__ */ (0, import_jsx_runtime54.jsx)( 12308 import_components5.Button, 12309 { 12310 __next40pxDefaultSize: true, 12311 onClick: convertToHTML, 12312 variant: "tertiary", 12313 children: (0, import_i18n17.__)("Keep as HTML") 12314 }, 12315 "convert" 12316 ) 12317 ); 12318 } 12319 return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { ...(0, import_block_editor5.useBlockProps)(), children: [ 12320 /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_block_editor5.Warning, { actions, children: messageHTML }), 12321 /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_element36.RawHTML, { children: originalUndelimitedContent }) 12322 ] }); 12323 }; 12324 var get_install_missing_default = getInstallMissing; 12325 12326 // packages/block-directory/build-module/plugins/index.mjs 12327 var import_jsx_runtime55 = __toESM(require_jsx_runtime(), 1); 12328 (0, import_plugins.registerPlugin)("block-directory", { 12329 // The icon is explicitly set to undefined to prevent PluginPrePublishPanel 12330 // from rendering the fallback icon pluginIcon. 12331 icon: void 0, 12332 render() { 12333 return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_jsx_runtime55.Fragment, { children: [ 12334 /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(AutoBlockUninstaller, {}), 12335 /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(inserter_menu_downloadable_blocks_panel_default, {}), 12336 /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(InstalledBlocksPrePublishPanel, {}) 12337 ] }); 12338 } 12339 }); 12340 (0, import_hooks.addFilter)( 12341 "blocks.registerBlockType", 12342 "block-directory/fallback", 12343 (settings, name) => { 12344 if (name !== "core/missing") { 12345 return settings; 12346 } 12347 settings.edit = get_install_missing_default(settings.edit); 12348 return settings; 12349 } 12350 ); 12351 return __toCommonJS(index_exports); 12352 })(); 12353 /*! Bundled license information: 12354 12355 use-sync-external-store/cjs/use-sync-external-store-shim.development.js: 12356 (** 12357 * @license React 12358 * use-sync-external-store-shim.development.js 12359 * 12360 * Copyright (c) Meta Platforms, Inc. and affiliates. 12361 * 12362 * This source code is licensed under the MIT license found in the 12363 * LICENSE file in the root directory of this source tree. 12364 *) 12365 12366 use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js: 12367 (** 12368 * @license React 12369 * use-sync-external-store-shim/with-selector.development.js 12370 * 12371 * Copyright (c) Meta Platforms, Inc. and affiliates. 12372 * 12373 * This source code is licensed under the MIT license found in the 12374 * LICENSE file in the root directory of this source tree. 12375 *) 12376 */ 12377 (window.wp ||= {}).blockDirectory = wp.blockDirectory; 12378 })();
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated : Fri Nov 6 08:20:37 2026 | Cross-referenced by PHPXref |