[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

/wp-includes/js/dist/ -> block-directory.js (source)

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


Generated : Sat Oct 17 08:20:33 2026 Cross-referenced by PHPXref