[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

/wp-includes/js/dist/ -> media-utils.js (source)

   1  "use strict";
   2  var wp;
   3  (wp ||= {}).mediaUtils = (() => {
   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/element
  36    var require_element = __commonJS({
  37      "package-external:@wordpress/element"(exports, module) {
  38        module.exports = window.wp.element;
  39      }
  40    });
  41  
  42    // package-external:@wordpress/i18n
  43    var require_i18n = __commonJS({
  44      "package-external:@wordpress/i18n"(exports, module) {
  45        module.exports = window.wp.i18n;
  46      }
  47    });
  48  
  49    // package-external:@wordpress/blob
  50    var require_blob = __commonJS({
  51      "package-external:@wordpress/blob"(exports, module) {
  52        module.exports = window.wp.blob;
  53      }
  54    });
  55  
  56    // package-external:@wordpress/api-fetch
  57    var require_api_fetch = __commonJS({
  58      "package-external:@wordpress/api-fetch"(exports, module) {
  59        module.exports = window.wp.apiFetch;
  60      }
  61    });
  62  
  63    // package-external:@wordpress/core-data
  64    var require_core_data = __commonJS({
  65      "package-external:@wordpress/core-data"(exports, module) {
  66        module.exports = window.wp.coreData;
  67      }
  68    });
  69  
  70    // package-external:@wordpress/data
  71    var require_data = __commonJS({
  72      "package-external:@wordpress/data"(exports, module) {
  73        module.exports = window.wp.data;
  74      }
  75    });
  76  
  77    // package-external:@wordpress/components
  78    var require_components = __commonJS({
  79      "package-external:@wordpress/components"(exports, module) {
  80        module.exports = window.wp.components;
  81      }
  82    });
  83  
  84    // package-external:@wordpress/primitives
  85    var require_primitives = __commonJS({
  86      "package-external:@wordpress/primitives"(exports, module) {
  87        module.exports = window.wp.primitives;
  88      }
  89    });
  90  
  91    // vendor-external:react/jsx-runtime
  92    var require_jsx_runtime = __commonJS({
  93      "vendor-external:react/jsx-runtime"(exports, module) {
  94        module.exports = window.ReactJSXRuntime;
  95      }
  96    });
  97  
  98    // package-external:@wordpress/compose
  99    var require_compose = __commonJS({
 100      "package-external:@wordpress/compose"(exports, module) {
 101        module.exports = window.wp.compose;
 102      }
 103    });
 104  
 105    // package-external:@wordpress/keycodes
 106    var require_keycodes = __commonJS({
 107      "package-external:@wordpress/keycodes"(exports, module) {
 108        module.exports = window.wp.keycodes;
 109      }
 110    });
 111  
 112    // package-external:@wordpress/private-apis
 113    var require_private_apis = __commonJS({
 114      "package-external:@wordpress/private-apis"(exports, module) {
 115        module.exports = window.wp.privateApis;
 116      }
 117    });
 118  
 119    // vendor-external:react
 120    var require_react = __commonJS({
 121      "vendor-external:react"(exports, module) {
 122        module.exports = window.React;
 123      }
 124    });
 125  
 126    // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js
 127    var require_use_sync_external_store_shim_development = __commonJS({
 128      "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(exports) {
 129        "use strict";
 130        (function() {
 131          function is(x2, y2) {
 132            return x2 === y2 && (0 !== x2 || 1 / x2 === 1 / y2) || x2 !== x2 && y2 !== y2;
 133          }
 134          function useSyncExternalStore$2(subscribe2, getSnapshot) {
 135            didWarnOld18Alpha || void 0 === React4.startTransition || (didWarnOld18Alpha = true, console.error(
 136              "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."
 137            ));
 138            var value = getSnapshot();
 139            if (!didWarnUncachedGetSnapshot) {
 140              var cachedValue = getSnapshot();
 141              objectIs(value, cachedValue) || (console.error(
 142                "The result of getSnapshot should be cached to avoid an infinite loop"
 143              ), didWarnUncachedGetSnapshot = true);
 144            }
 145            cachedValue = useState24({
 146              inst: { value, getSnapshot }
 147            });
 148            var inst = cachedValue[0].inst, forceUpdate = cachedValue[1];
 149            useLayoutEffect2(
 150              function() {
 151                inst.value = value;
 152                inst.getSnapshot = getSnapshot;
 153                checkIfSnapshotChanged(inst) && forceUpdate({ inst });
 154              },
 155              [subscribe2, value, getSnapshot]
 156            );
 157            useEffect17(
 158              function() {
 159                checkIfSnapshotChanged(inst) && forceUpdate({ inst });
 160                return subscribe2(function() {
 161                  checkIfSnapshotChanged(inst) && forceUpdate({ inst });
 162                });
 163              },
 164              [subscribe2]
 165            );
 166            useDebugValue(value);
 167            return value;
 168          }
 169          function checkIfSnapshotChanged(inst) {
 170            var latestGetSnapshot = inst.getSnapshot;
 171            inst = inst.value;
 172            try {
 173              var nextValue = latestGetSnapshot();
 174              return !objectIs(inst, nextValue);
 175            } catch (error) {
 176              return true;
 177            }
 178          }
 179          function useSyncExternalStore$1(subscribe2, getSnapshot) {
 180            return getSnapshot();
 181          }
 182          "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
 183          var React4 = require_react(), objectIs = "function" === typeof Object.is ? Object.is : is, useState24 = React4.useState, useEffect17 = React4.useEffect, useLayoutEffect2 = React4.useLayoutEffect, useDebugValue = React4.useDebugValue, didWarnOld18Alpha = false, didWarnUncachedGetSnapshot = false, shim = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2;
 184          exports.useSyncExternalStore = void 0 !== React4.useSyncExternalStore ? React4.useSyncExternalStore : shim;
 185          "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
 186        })();
 187      }
 188    });
 189  
 190    // node_modules/use-sync-external-store/shim/index.js
 191    var require_shim = __commonJS({
 192      "node_modules/use-sync-external-store/shim/index.js"(exports, module) {
 193        "use strict";
 194        if (false) {
 195          module.exports = null;
 196        } else {
 197          module.exports = require_use_sync_external_store_shim_development();
 198        }
 199      }
 200    });
 201  
 202    // vendor-external:react-dom
 203    var require_react_dom = __commonJS({
 204      "vendor-external:react-dom"(exports, module) {
 205        module.exports = window.ReactDOM;
 206      }
 207    });
 208  
 209    // node_modules/remove-accents/index.js
 210    var require_remove_accents = __commonJS({
 211      "node_modules/remove-accents/index.js"(exports, module) {
 212        var characterMap = {
 213          "\xC0": "A",
 214          "\xC1": "A",
 215          "\xC2": "A",
 216          "\xC3": "A",
 217          "\xC4": "A",
 218          "\xC5": "A",
 219          "\u1EA4": "A",
 220          "\u1EAE": "A",
 221          "\u1EB2": "A",
 222          "\u1EB4": "A",
 223          "\u1EB6": "A",
 224          "\xC6": "AE",
 225          "\u1EA6": "A",
 226          "\u1EB0": "A",
 227          "\u0202": "A",
 228          "\u1EA2": "A",
 229          "\u1EA0": "A",
 230          "\u1EA8": "A",
 231          "\u1EAA": "A",
 232          "\u1EAC": "A",
 233          "\xC7": "C",
 234          "\u1E08": "C",
 235          "\xC8": "E",
 236          "\xC9": "E",
 237          "\xCA": "E",
 238          "\xCB": "E",
 239          "\u1EBE": "E",
 240          "\u1E16": "E",
 241          "\u1EC0": "E",
 242          "\u1E14": "E",
 243          "\u1E1C": "E",
 244          "\u0206": "E",
 245          "\u1EBA": "E",
 246          "\u1EBC": "E",
 247          "\u1EB8": "E",
 248          "\u1EC2": "E",
 249          "\u1EC4": "E",
 250          "\u1EC6": "E",
 251          "\xCC": "I",
 252          "\xCD": "I",
 253          "\xCE": "I",
 254          "\xCF": "I",
 255          "\u1E2E": "I",
 256          "\u020A": "I",
 257          "\u1EC8": "I",
 258          "\u1ECA": "I",
 259          "\xD0": "D",
 260          "\xD1": "N",
 261          "\xD2": "O",
 262          "\xD3": "O",
 263          "\xD4": "O",
 264          "\xD5": "O",
 265          "\xD6": "O",
 266          "\xD8": "O",
 267          "\u1ED0": "O",
 268          "\u1E4C": "O",
 269          "\u1E52": "O",
 270          "\u020E": "O",
 271          "\u1ECE": "O",
 272          "\u1ECC": "O",
 273          "\u1ED4": "O",
 274          "\u1ED6": "O",
 275          "\u1ED8": "O",
 276          "\u1EDC": "O",
 277          "\u1EDE": "O",
 278          "\u1EE0": "O",
 279          "\u1EDA": "O",
 280          "\u1EE2": "O",
 281          "\xD9": "U",
 282          "\xDA": "U",
 283          "\xDB": "U",
 284          "\xDC": "U",
 285          "\u1EE6": "U",
 286          "\u1EE4": "U",
 287          "\u1EEC": "U",
 288          "\u1EEE": "U",
 289          "\u1EF0": "U",
 290          "\xDD": "Y",
 291          "\xE0": "a",
 292          "\xE1": "a",
 293          "\xE2": "a",
 294          "\xE3": "a",
 295          "\xE4": "a",
 296          "\xE5": "a",
 297          "\u1EA5": "a",
 298          "\u1EAF": "a",
 299          "\u1EB3": "a",
 300          "\u1EB5": "a",
 301          "\u1EB7": "a",
 302          "\xE6": "ae",
 303          "\u1EA7": "a",
 304          "\u1EB1": "a",
 305          "\u0203": "a",
 306          "\u1EA3": "a",
 307          "\u1EA1": "a",
 308          "\u1EA9": "a",
 309          "\u1EAB": "a",
 310          "\u1EAD": "a",
 311          "\xE7": "c",
 312          "\u1E09": "c",
 313          "\xE8": "e",
 314          "\xE9": "e",
 315          "\xEA": "e",
 316          "\xEB": "e",
 317          "\u1EBF": "e",
 318          "\u1E17": "e",
 319          "\u1EC1": "e",
 320          "\u1E15": "e",
 321          "\u1E1D": "e",
 322          "\u0207": "e",
 323          "\u1EBB": "e",
 324          "\u1EBD": "e",
 325          "\u1EB9": "e",
 326          "\u1EC3": "e",
 327          "\u1EC5": "e",
 328          "\u1EC7": "e",
 329          "\xEC": "i",
 330          "\xED": "i",
 331          "\xEE": "i",
 332          "\xEF": "i",
 333          "\u1E2F": "i",
 334          "\u020B": "i",
 335          "\u1EC9": "i",
 336          "\u1ECB": "i",
 337          "\xF0": "d",
 338          "\xF1": "n",
 339          "\xF2": "o",
 340          "\xF3": "o",
 341          "\xF4": "o",
 342          "\xF5": "o",
 343          "\xF6": "o",
 344          "\xF8": "o",
 345          "\u1ED1": "o",
 346          "\u1E4D": "o",
 347          "\u1E53": "o",
 348          "\u020F": "o",
 349          "\u1ECF": "o",
 350          "\u1ECD": "o",
 351          "\u1ED5": "o",
 352          "\u1ED7": "o",
 353          "\u1ED9": "o",
 354          "\u1EDD": "o",
 355          "\u1EDF": "o",
 356          "\u1EE1": "o",
 357          "\u1EDB": "o",
 358          "\u1EE3": "o",
 359          "\xF9": "u",
 360          "\xFA": "u",
 361          "\xFB": "u",
 362          "\xFC": "u",
 363          "\u1EE7": "u",
 364          "\u1EE5": "u",
 365          "\u1EED": "u",
 366          "\u1EEF": "u",
 367          "\u1EF1": "u",
 368          "\xFD": "y",
 369          "\xFF": "y",
 370          "\u0100": "A",
 371          "\u0101": "a",
 372          "\u0102": "A",
 373          "\u0103": "a",
 374          "\u0104": "A",
 375          "\u0105": "a",
 376          "\u0106": "C",
 377          "\u0107": "c",
 378          "\u0108": "C",
 379          "\u0109": "c",
 380          "\u010A": "C",
 381          "\u010B": "c",
 382          "\u010C": "C",
 383          "\u010D": "c",
 384          "C\u0306": "C",
 385          "c\u0306": "c",
 386          "\u010E": "D",
 387          "\u010F": "d",
 388          "\u0110": "D",
 389          "\u0111": "d",
 390          "\u0112": "E",
 391          "\u0113": "e",
 392          "\u0114": "E",
 393          "\u0115": "e",
 394          "\u0116": "E",
 395          "\u0117": "e",
 396          "\u0118": "E",
 397          "\u0119": "e",
 398          "\u011A": "E",
 399          "\u011B": "e",
 400          "\u011C": "G",
 401          "\u01F4": "G",
 402          "\u011D": "g",
 403          "\u01F5": "g",
 404          "\u011E": "G",
 405          "\u011F": "g",
 406          "\u0120": "G",
 407          "\u0121": "g",
 408          "\u0122": "G",
 409          "\u0123": "g",
 410          "\u0124": "H",
 411          "\u0125": "h",
 412          "\u0126": "H",
 413          "\u0127": "h",
 414          "\u1E2A": "H",
 415          "\u1E2B": "h",
 416          "\u0128": "I",
 417          "\u0129": "i",
 418          "\u012A": "I",
 419          "\u012B": "i",
 420          "\u012C": "I",
 421          "\u012D": "i",
 422          "\u012E": "I",
 423          "\u012F": "i",
 424          "\u0130": "I",
 425          "\u0131": "i",
 426          "\u0132": "IJ",
 427          "\u0133": "ij",
 428          "\u0134": "J",
 429          "\u0135": "j",
 430          "\u0136": "K",
 431          "\u0137": "k",
 432          "\u1E30": "K",
 433          "\u1E31": "k",
 434          "K\u0306": "K",
 435          "k\u0306": "k",
 436          "\u0139": "L",
 437          "\u013A": "l",
 438          "\u013B": "L",
 439          "\u013C": "l",
 440          "\u013D": "L",
 441          "\u013E": "l",
 442          "\u013F": "L",
 443          "\u0140": "l",
 444          "\u0141": "l",
 445          "\u0142": "l",
 446          "\u1E3E": "M",
 447          "\u1E3F": "m",
 448          "M\u0306": "M",
 449          "m\u0306": "m",
 450          "\u0143": "N",
 451          "\u0144": "n",
 452          "\u0145": "N",
 453          "\u0146": "n",
 454          "\u0147": "N",
 455          "\u0148": "n",
 456          "\u0149": "n",
 457          "N\u0306": "N",
 458          "n\u0306": "n",
 459          "\u014C": "O",
 460          "\u014D": "o",
 461          "\u014E": "O",
 462          "\u014F": "o",
 463          "\u0150": "O",
 464          "\u0151": "o",
 465          "\u0152": "OE",
 466          "\u0153": "oe",
 467          "P\u0306": "P",
 468          "p\u0306": "p",
 469          "\u0154": "R",
 470          "\u0155": "r",
 471          "\u0156": "R",
 472          "\u0157": "r",
 473          "\u0158": "R",
 474          "\u0159": "r",
 475          "R\u0306": "R",
 476          "r\u0306": "r",
 477          "\u0212": "R",
 478          "\u0213": "r",
 479          "\u015A": "S",
 480          "\u015B": "s",
 481          "\u015C": "S",
 482          "\u015D": "s",
 483          "\u015E": "S",
 484          "\u0218": "S",
 485          "\u0219": "s",
 486          "\u015F": "s",
 487          "\u0160": "S",
 488          "\u0161": "s",
 489          "\u0162": "T",
 490          "\u0163": "t",
 491          "\u021B": "t",
 492          "\u021A": "T",
 493          "\u0164": "T",
 494          "\u0165": "t",
 495          "\u0166": "T",
 496          "\u0167": "t",
 497          "T\u0306": "T",
 498          "t\u0306": "t",
 499          "\u0168": "U",
 500          "\u0169": "u",
 501          "\u016A": "U",
 502          "\u016B": "u",
 503          "\u016C": "U",
 504          "\u016D": "u",
 505          "\u016E": "U",
 506          "\u016F": "u",
 507          "\u0170": "U",
 508          "\u0171": "u",
 509          "\u0172": "U",
 510          "\u0173": "u",
 511          "\u0216": "U",
 512          "\u0217": "u",
 513          "V\u0306": "V",
 514          "v\u0306": "v",
 515          "\u0174": "W",
 516          "\u0175": "w",
 517          "\u1E82": "W",
 518          "\u1E83": "w",
 519          "X\u0306": "X",
 520          "x\u0306": "x",
 521          "\u0176": "Y",
 522          "\u0177": "y",
 523          "\u0178": "Y",
 524          "Y\u0306": "Y",
 525          "y\u0306": "y",
 526          "\u0179": "Z",
 527          "\u017A": "z",
 528          "\u017B": "Z",
 529          "\u017C": "z",
 530          "\u017D": "Z",
 531          "\u017E": "z",
 532          "\u017F": "s",
 533          "\u0192": "f",
 534          "\u01A0": "O",
 535          "\u01A1": "o",
 536          "\u01AF": "U",
 537          "\u01B0": "u",
 538          "\u01CD": "A",
 539          "\u01CE": "a",
 540          "\u01CF": "I",
 541          "\u01D0": "i",
 542          "\u01D1": "O",
 543          "\u01D2": "o",
 544          "\u01D3": "U",
 545          "\u01D4": "u",
 546          "\u01D5": "U",
 547          "\u01D6": "u",
 548          "\u01D7": "U",
 549          "\u01D8": "u",
 550          "\u01D9": "U",
 551          "\u01DA": "u",
 552          "\u01DB": "U",
 553          "\u01DC": "u",
 554          "\u1EE8": "U",
 555          "\u1EE9": "u",
 556          "\u1E78": "U",
 557          "\u1E79": "u",
 558          "\u01FA": "A",
 559          "\u01FB": "a",
 560          "\u01FC": "AE",
 561          "\u01FD": "ae",
 562          "\u01FE": "O",
 563          "\u01FF": "o",
 564          "\xDE": "TH",
 565          "\xFE": "th",
 566          "\u1E54": "P",
 567          "\u1E55": "p",
 568          "\u1E64": "S",
 569          "\u1E65": "s",
 570          "X\u0301": "X",
 571          "x\u0301": "x",
 572          "\u0403": "\u0413",
 573          "\u0453": "\u0433",
 574          "\u040C": "\u041A",
 575          "\u045C": "\u043A",
 576          "A\u030B": "A",
 577          "a\u030B": "a",
 578          "E\u030B": "E",
 579          "e\u030B": "e",
 580          "I\u030B": "I",
 581          "i\u030B": "i",
 582          "\u01F8": "N",
 583          "\u01F9": "n",
 584          "\u1ED2": "O",
 585          "\u1ED3": "o",
 586          "\u1E50": "O",
 587          "\u1E51": "o",
 588          "\u1EEA": "U",
 589          "\u1EEB": "u",
 590          "\u1E80": "W",
 591          "\u1E81": "w",
 592          "\u1EF2": "Y",
 593          "\u1EF3": "y",
 594          "\u0200": "A",
 595          "\u0201": "a",
 596          "\u0204": "E",
 597          "\u0205": "e",
 598          "\u0208": "I",
 599          "\u0209": "i",
 600          "\u020C": "O",
 601          "\u020D": "o",
 602          "\u0210": "R",
 603          "\u0211": "r",
 604          "\u0214": "U",
 605          "\u0215": "u",
 606          "B\u030C": "B",
 607          "b\u030C": "b",
 608          "\u010C\u0323": "C",
 609          "\u010D\u0323": "c",
 610          "\xCA\u030C": "E",
 611          "\xEA\u030C": "e",
 612          "F\u030C": "F",
 613          "f\u030C": "f",
 614          "\u01E6": "G",
 615          "\u01E7": "g",
 616          "\u021E": "H",
 617          "\u021F": "h",
 618          "J\u030C": "J",
 619          "\u01F0": "j",
 620          "\u01E8": "K",
 621          "\u01E9": "k",
 622          "M\u030C": "M",
 623          "m\u030C": "m",
 624          "P\u030C": "P",
 625          "p\u030C": "p",
 626          "Q\u030C": "Q",
 627          "q\u030C": "q",
 628          "\u0158\u0329": "R",
 629          "\u0159\u0329": "r",
 630          "\u1E66": "S",
 631          "\u1E67": "s",
 632          "V\u030C": "V",
 633          "v\u030C": "v",
 634          "W\u030C": "W",
 635          "w\u030C": "w",
 636          "X\u030C": "X",
 637          "x\u030C": "x",
 638          "Y\u030C": "Y",
 639          "y\u030C": "y",
 640          "A\u0327": "A",
 641          "a\u0327": "a",
 642          "B\u0327": "B",
 643          "b\u0327": "b",
 644          "\u1E10": "D",
 645          "\u1E11": "d",
 646          "\u0228": "E",
 647          "\u0229": "e",
 648          "\u0190\u0327": "E",
 649          "\u025B\u0327": "e",
 650          "\u1E28": "H",
 651          "\u1E29": "h",
 652          "I\u0327": "I",
 653          "i\u0327": "i",
 654          "\u0197\u0327": "I",
 655          "\u0268\u0327": "i",
 656          "M\u0327": "M",
 657          "m\u0327": "m",
 658          "O\u0327": "O",
 659          "o\u0327": "o",
 660          "Q\u0327": "Q",
 661          "q\u0327": "q",
 662          "U\u0327": "U",
 663          "u\u0327": "u",
 664          "X\u0327": "X",
 665          "x\u0327": "x",
 666          "Z\u0327": "Z",
 667          "z\u0327": "z",
 668          "\u0439": "\u0438",
 669          "\u0419": "\u0418",
 670          "\u0451": "\u0435",
 671          "\u0401": "\u0415"
 672        };
 673        var chars = Object.keys(characterMap).join("|");
 674        var allAccents = new RegExp(chars, "g");
 675        var firstAccent = new RegExp(chars, "");
 676        function matcher(match2) {
 677          return characterMap[match2];
 678        }
 679        var removeAccents2 = function(string) {
 680          return string.replace(allAccents, matcher);
 681        };
 682        var hasAccents = function(string) {
 683          return !!string.match(firstAccent);
 684        };
 685        module.exports = removeAccents2;
 686        module.exports.has = hasAccents;
 687        module.exports.remove = removeAccents2;
 688      }
 689    });
 690  
 691    // node_modules/fast-deep-equal/es6/index.js
 692    var require_es6 = __commonJS({
 693      "node_modules/fast-deep-equal/es6/index.js"(exports, module) {
 694        "use strict";
 695        module.exports = function equal(a2, b2) {
 696          if (a2 === b2) return true;
 697          if (a2 && b2 && typeof a2 == "object" && typeof b2 == "object") {
 698            if (a2.constructor !== b2.constructor) return false;
 699            var length, i2, keys;
 700            if (Array.isArray(a2)) {
 701              length = a2.length;
 702              if (length != b2.length) return false;
 703              for (i2 = length; i2-- !== 0; )
 704                if (!equal(a2[i2], b2[i2])) return false;
 705              return true;
 706            }
 707            if (a2 instanceof Map && b2 instanceof Map) {
 708              if (a2.size !== b2.size) return false;
 709              for (i2 of a2.entries())
 710                if (!b2.has(i2[0])) return false;
 711              for (i2 of a2.entries())
 712                if (!equal(i2[1], b2.get(i2[0]))) return false;
 713              return true;
 714            }
 715            if (a2 instanceof Set && b2 instanceof Set) {
 716              if (a2.size !== b2.size) return false;
 717              for (i2 of a2.entries())
 718                if (!b2.has(i2[0])) return false;
 719              return true;
 720            }
 721            if (ArrayBuffer.isView(a2) && ArrayBuffer.isView(b2)) {
 722              length = a2.length;
 723              if (length != b2.length) return false;
 724              for (i2 = length; i2-- !== 0; )
 725                if (a2[i2] !== b2[i2]) return false;
 726              return true;
 727            }
 728            if (a2.constructor === RegExp) return a2.source === b2.source && a2.flags === b2.flags;
 729            if (a2.valueOf !== Object.prototype.valueOf) return a2.valueOf() === b2.valueOf();
 730            if (a2.toString !== Object.prototype.toString) return a2.toString() === b2.toString();
 731            keys = Object.keys(a2);
 732            length = keys.length;
 733            if (length !== Object.keys(b2).length) return false;
 734            for (i2 = length; i2-- !== 0; )
 735              if (!Object.prototype.hasOwnProperty.call(b2, keys[i2])) return false;
 736            for (i2 = length; i2-- !== 0; ) {
 737              var key = keys[i2];
 738              if (!equal(a2[key], b2[key])) return false;
 739            }
 740            return true;
 741          }
 742          return a2 !== a2 && b2 !== b2;
 743        };
 744      }
 745    });
 746  
 747    // package-external:@wordpress/warning
 748    var require_warning = __commonJS({
 749      "package-external:@wordpress/warning"(exports, module) {
 750        module.exports = window.wp.warning;
 751      }
 752    });
 753  
 754    // package-external:@wordpress/date
 755    var require_date = __commonJS({
 756      "package-external:@wordpress/date"(exports, module) {
 757        module.exports = window.wp.date;
 758      }
 759    });
 760  
 761    // package-external:@wordpress/url
 762    var require_url = __commonJS({
 763      "package-external:@wordpress/url"(exports, module) {
 764        module.exports = window.wp.url;
 765      }
 766    });
 767  
 768    // packages/media-utils/build-module/index.js
 769    var index_exports = {};
 770    __export(index_exports, {
 771      MediaUpload: () => media_upload_default,
 772      privateApis: () => privateApis11,
 773      transformAttachment: () => transformAttachment,
 774      uploadMedia: () => uploadMedia,
 775      validateFileSize: () => validateFileSize,
 776      validateMimeType: () => validateMimeType,
 777      validateMimeTypeForUser: () => validateMimeTypeForUser
 778    });
 779  
 780    // packages/media-utils/build-module/components/media-upload/index.js
 781    var import_element = __toESM(require_element());
 782    var import_i18n = __toESM(require_i18n());
 783    var DEFAULT_EMPTY_GALLERY = [];
 784    var getFeaturedImageMediaFrame = () => {
 785      const { wp } = window;
 786      return wp.media.view.MediaFrame.Select.extend({
 787        /**
 788         * Enables the Set Featured Image Button.
 789         *
 790         * @param {Object} toolbar toolbar for featured image state
 791         * @return {void}
 792         */
 793        featuredImageToolbar(toolbar) {
 794          this.createSelectToolbar(toolbar, {
 795            text: wp.media.view.l10n.setFeaturedImage,
 796            state: this.options.state
 797          });
 798        },
 799        /**
 800         * Handle the edit state requirements of selected media item.
 801         *
 802         * @return {void}
 803         */
 804        editState() {
 805          const selection = this.state("featured-image").get("selection");
 806          const view = new wp.media.view.EditImage({
 807            model: selection.single(),
 808            controller: this
 809          }).render();
 810          this.content.set(view);
 811          view.loadEditor();
 812        },
 813        /**
 814         * Create the default states.
 815         *
 816         * @return {void}
 817         */
 818        createStates: function createStates() {
 819          this.on(
 820            "toolbar:create:featured-image",
 821            this.featuredImageToolbar,
 822            this
 823          );
 824          this.on("content:render:edit-image", this.editState, this);
 825          this.states.add([
 826            new wp.media.controller.FeaturedImage(),
 827            new wp.media.controller.EditImage({
 828              model: this.options.editImage
 829            })
 830          ]);
 831        }
 832      });
 833    };
 834    var getSingleMediaFrame = () => {
 835      const { wp } = window;
 836      return wp.media.view.MediaFrame.Select.extend({
 837        /**
 838         * Create the default states on the frame.
 839         */
 840        createStates() {
 841          const options = this.options;
 842          if (this.options.states) {
 843            return;
 844          }
 845          this.states.add([
 846            // Main states.
 847            new wp.media.controller.Library({
 848              library: wp.media.query(options.library),
 849              multiple: options.multiple,
 850              title: options.title,
 851              priority: 20,
 852              filterable: "uploaded"
 853              // Allow filtering by uploaded images.
 854            }),
 855            new wp.media.controller.EditImage({
 856              model: options.editImage
 857            })
 858          ]);
 859        }
 860      });
 861    };
 862    var getGalleryDetailsMediaFrame = () => {
 863      const { wp } = window;
 864      return wp.media.view.MediaFrame.Post.extend({
 865        /**
 866         * Set up gallery toolbar.
 867         *
 868         * @return {void}
 869         */
 870        galleryToolbar() {
 871          const editing = this.state().get("editing");
 872          this.toolbar.set(
 873            new wp.media.view.Toolbar({
 874              controller: this,
 875              items: {
 876                insert: {
 877                  style: "primary",
 878                  text: editing ? wp.media.view.l10n.updateGallery : wp.media.view.l10n.insertGallery,
 879                  priority: 80,
 880                  requires: { library: true },
 881                  /**
 882                   * @fires wp.media.controller.State#update
 883                   */
 884                  click() {
 885                    const controller = this.controller, state = controller.state();
 886                    controller.close();
 887                    state.trigger(
 888                      "update",
 889                      state.get("library")
 890                    );
 891                    controller.setState(controller.options.state);
 892                    controller.reset();
 893                  }
 894                }
 895              }
 896            })
 897          );
 898        },
 899        /**
 900         * Handle the edit state requirements of selected media item.
 901         *
 902         * @return {void}
 903         */
 904        editState() {
 905          const selection = this.state("gallery").get("selection");
 906          const view = new wp.media.view.EditImage({
 907            model: selection.single(),
 908            controller: this
 909          }).render();
 910          this.content.set(view);
 911          view.loadEditor();
 912        },
 913        /**
 914         * Create the default states.
 915         *
 916         * @return {void}
 917         */
 918        createStates: function createStates() {
 919          this.on("toolbar:create:main-gallery", this.galleryToolbar, this);
 920          this.on("content:render:edit-image", this.editState, this);
 921          this.states.add([
 922            new wp.media.controller.Library({
 923              id: "gallery",
 924              title: wp.media.view.l10n.createGalleryTitle,
 925              priority: 40,
 926              toolbar: "main-gallery",
 927              filterable: "uploaded",
 928              multiple: "add",
 929              editable: false,
 930              library: wp.media.query({
 931                type: "image",
 932                ...this.options.library
 933              })
 934            }),
 935            new wp.media.controller.EditImage({
 936              model: this.options.editImage
 937            }),
 938            new wp.media.controller.GalleryEdit({
 939              library: this.options.selection,
 940              editing: this.options.editing,
 941              menu: "gallery",
 942              displaySettings: false,
 943              multiple: true
 944            }),
 945            new wp.media.controller.GalleryAdd()
 946          ]);
 947        }
 948      });
 949    };
 950    var slimImageObject = (img) => {
 951      const attrSet = [
 952        "sizes",
 953        "mime",
 954        "type",
 955        "subtype",
 956        "id",
 957        "url",
 958        "alt",
 959        "link",
 960        "caption"
 961      ];
 962      return attrSet.reduce((result, key) => {
 963        if (img?.hasOwnProperty(key)) {
 964          result[key] = img[key];
 965        }
 966        return result;
 967      }, {});
 968    };
 969    var getAttachmentsCollection = (ids) => {
 970      const { wp } = window;
 971      return wp.media.query({
 972        order: "ASC",
 973        orderby: "post__in",
 974        post__in: ids,
 975        posts_per_page: -1,
 976        query: true,
 977        type: "image"
 978      });
 979    };
 980    var MediaUpload = class extends import_element.Component {
 981      constructor() {
 982        super(...arguments);
 983        this.openModal = this.openModal.bind(this);
 984        this.onOpen = this.onOpen.bind(this);
 985        this.onSelect = this.onSelect.bind(this);
 986        this.onUpdate = this.onUpdate.bind(this);
 987        this.onClose = this.onClose.bind(this);
 988      }
 989      initializeListeners() {
 990        this.frame.on("select", this.onSelect);
 991        this.frame.on("update", this.onUpdate);
 992        this.frame.on("open", this.onOpen);
 993        this.frame.on("close", this.onClose);
 994      }
 995      /**
 996       * Sets the Gallery frame and initializes listeners.
 997       *
 998       * @return {void}
 999       */
1000      buildAndSetGalleryFrame() {
1001        const {
1002          addToGallery = false,
1003          allowedTypes,
1004          multiple = false,
1005          value = DEFAULT_EMPTY_GALLERY
1006        } = this.props;
1007        if (value === this.lastGalleryValue) {
1008          return;
1009        }
1010        const { wp } = window;
1011        this.lastGalleryValue = value;
1012        if (this.frame) {
1013          this.frame.remove();
1014        }
1015        let currentState;
1016        if (addToGallery) {
1017          currentState = "gallery-library";
1018        } else {
1019          currentState = value && value.length ? "gallery-edit" : "gallery";
1020        }
1021        if (!this.GalleryDetailsMediaFrame) {
1022          this.GalleryDetailsMediaFrame = getGalleryDetailsMediaFrame();
1023        }
1024        const attachments = getAttachmentsCollection(value);
1025        const selection = new wp.media.model.Selection(attachments.models, {
1026          props: attachments.props.toJSON(),
1027          multiple
1028        });
1029        this.frame = new this.GalleryDetailsMediaFrame({
1030          mimeType: allowedTypes,
1031          state: currentState,
1032          multiple,
1033          selection,
1034          editing: !!value?.length
1035        });
1036        wp.media.frame = this.frame;
1037        this.initializeListeners();
1038      }
1039      /**
1040       * Initializes the Media Library requirements for the featured image flow.
1041       *
1042       * @return {void}
1043       */
1044      buildAndSetFeatureImageFrame() {
1045        const { wp } = window;
1046        const { value: featuredImageId, multiple, allowedTypes } = this.props;
1047        const featuredImageFrame = getFeaturedImageMediaFrame();
1048        const attachments = getAttachmentsCollection(featuredImageId);
1049        const selection = new wp.media.model.Selection(attachments.models, {
1050          props: attachments.props.toJSON()
1051        });
1052        this.frame = new featuredImageFrame({
1053          mimeType: allowedTypes,
1054          state: "featured-image",
1055          multiple,
1056          selection,
1057          editing: featuredImageId
1058        });
1059        wp.media.frame = this.frame;
1060        wp.media.view.settings.post = {
1061          ...wp.media.view.settings.post,
1062          featuredImageId: featuredImageId || -1
1063        };
1064      }
1065      /**
1066       * Initializes the Media Library requirements for the single image flow.
1067       *
1068       * @return {void}
1069       */
1070      buildAndSetSingleMediaFrame() {
1071        const { wp } = window;
1072        const {
1073          allowedTypes,
1074          multiple = false,
1075          title = (0, import_i18n.__)("Select or Upload Media"),
1076          value
1077        } = this.props;
1078        const frameConfig = {
1079          title,
1080          multiple
1081        };
1082        if (!!allowedTypes) {
1083          frameConfig.library = { type: allowedTypes };
1084        }
1085        if (this.frame) {
1086          this.frame.remove();
1087        }
1088        const singleImageFrame = getSingleMediaFrame();
1089        const attachments = getAttachmentsCollection(value);
1090        const selection = new wp.media.model.Selection(attachments.models, {
1091          props: attachments.props.toJSON()
1092        });
1093        this.frame = new singleImageFrame({
1094          mimeType: allowedTypes,
1095          multiple,
1096          selection,
1097          ...frameConfig
1098        });
1099        wp.media.frame = this.frame;
1100      }
1101      componentWillUnmount() {
1102        this.frame?.remove();
1103      }
1104      onUpdate(selections) {
1105        const { onSelect, multiple = false } = this.props;
1106        const state = this.frame.state();
1107        const selectedImages = selections || state.get("selection");
1108        if (!selectedImages || !selectedImages.models.length) {
1109          return;
1110        }
1111        if (multiple) {
1112          onSelect(
1113            selectedImages.models.map(
1114              (model) => slimImageObject(model.toJSON())
1115            )
1116          );
1117        } else {
1118          onSelect(slimImageObject(selectedImages.models[0].toJSON()));
1119        }
1120      }
1121      onSelect() {
1122        const { onSelect, multiple = false } = this.props;
1123        const attachment = this.frame.state().get("selection").toJSON();
1124        onSelect(multiple ? attachment : attachment[0]);
1125      }
1126      onOpen() {
1127        const { wp } = window;
1128        const { value } = this.props;
1129        this.updateCollection();
1130        if (this.props.mode) {
1131          this.frame.content.mode(this.props.mode);
1132        }
1133        const hasMedia = Array.isArray(value) ? !!value?.length : !!value;
1134        if (!hasMedia) {
1135          return;
1136        }
1137        const isGallery = this.props.gallery;
1138        const selection = this.frame.state().get("selection");
1139        const valueArray = Array.isArray(value) ? value : [value];
1140        if (!isGallery) {
1141          valueArray.forEach((id) => {
1142            selection.add(wp.media.attachment(id));
1143          });
1144        }
1145        const attachments = getAttachmentsCollection(valueArray);
1146        attachments.more().done(function() {
1147          if (isGallery && attachments?.models?.length) {
1148            selection.add(attachments.models);
1149          }
1150        });
1151      }
1152      onClose() {
1153        const { onClose } = this.props;
1154        if (onClose) {
1155          onClose();
1156        }
1157        this.frame.detach();
1158      }
1159      updateCollection() {
1160        const frameContent = this.frame.content.get();
1161        if (frameContent && frameContent.collection) {
1162          const collection = frameContent.collection;
1163          collection.toArray().forEach((model) => model.trigger("destroy", model));
1164          collection.mirroring._hasMore = true;
1165          collection.more();
1166        }
1167      }
1168      openModal() {
1169        const {
1170          gallery = false,
1171          unstableFeaturedImageFlow = false,
1172          modalClass
1173        } = this.props;
1174        if (gallery) {
1175          this.buildAndSetGalleryFrame();
1176        } else {
1177          this.buildAndSetSingleMediaFrame();
1178        }
1179        if (modalClass) {
1180          this.frame.$el.addClass(modalClass);
1181        }
1182        if (unstableFeaturedImageFlow) {
1183          this.buildAndSetFeatureImageFrame();
1184        }
1185        this.initializeListeners();
1186        this.frame.open();
1187      }
1188      render() {
1189        return this.props.render({ open: this.openModal });
1190      }
1191    };
1192    var media_upload_default = MediaUpload;
1193  
1194    // packages/media-utils/build-module/utils/upload-media.js
1195    var import_i18n5 = __toESM(require_i18n());
1196    var import_blob = __toESM(require_blob());
1197  
1198    // packages/media-utils/build-module/utils/upload-to-server.js
1199    var import_api_fetch = __toESM(require_api_fetch());
1200  
1201    // packages/media-utils/build-module/utils/flatten-form-data.js
1202    function isPlainObject(data) {
1203      return data !== null && typeof data === "object" && Object.getPrototypeOf(data) === Object.prototype;
1204    }
1205    function flattenFormData(formData, key, data) {
1206      if (isPlainObject(data)) {
1207        for (const [name, value] of Object.entries(data)) {
1208          flattenFormData(formData, `$key}[$name}]`, value);
1209        }
1210      } else if (data !== void 0) {
1211        formData.append(key, String(data));
1212      }
1213    }
1214  
1215    // packages/media-utils/build-module/utils/transform-attachment.js
1216    function transformAttachment(attachment) {
1217      const { alt_text, source_url, ...savedMediaProps } = attachment;
1218      return {
1219        ...savedMediaProps,
1220        alt: attachment.alt_text,
1221        caption: attachment.caption?.raw ?? "",
1222        title: attachment.title.raw,
1223        url: attachment.source_url,
1224        poster: attachment._embedded?.["wp:featuredmedia"]?.[0]?.source_url || void 0
1225      };
1226    }
1227  
1228    // packages/media-utils/build-module/utils/upload-to-server.js
1229    async function uploadToServer(file, additionalData = {}, signal) {
1230      const data = new FormData();
1231      data.append("file", file, file.name || file.type.replace("/", "."));
1232      for (const [key, value] of Object.entries(additionalData)) {
1233        flattenFormData(
1234          data,
1235          key,
1236          value
1237        );
1238      }
1239      return transformAttachment(
1240        await (0, import_api_fetch.default)({
1241          // This allows the video block to directly get a video's poster image.
1242          path: "/wp/v2/media?_embed=wp:featuredmedia",
1243          body: data,
1244          method: "POST",
1245          signal
1246        })
1247      );
1248    }
1249  
1250    // packages/media-utils/build-module/utils/validate-mime-type.js
1251    var import_i18n2 = __toESM(require_i18n());
1252  
1253    // packages/media-utils/build-module/utils/upload-error.js
1254    var UploadError = class extends Error {
1255      code;
1256      file;
1257      constructor({ code, message: message2, file, cause }) {
1258        super(message2, { cause });
1259        Object.setPrototypeOf(this, new.target.prototype);
1260        this.code = code;
1261        this.file = file;
1262      }
1263    };
1264  
1265    // packages/media-utils/build-module/utils/validate-mime-type.js
1266    function validateMimeType(file, allowedTypes) {
1267      if (!allowedTypes) {
1268        return;
1269      }
1270      const isAllowedType = allowedTypes.some((allowedType) => {
1271        if (allowedType.includes("/")) {
1272          return allowedType === file.type;
1273        }
1274        return file.type.startsWith(`$allowedType}/`);
1275      });
1276      if (file.type && !isAllowedType) {
1277        throw new UploadError({
1278          code: "MIME_TYPE_NOT_SUPPORTED",
1279          message: (0, import_i18n2.sprintf)(
1280            // translators: %s: file name.
1281            (0, import_i18n2.__)("%s: Sorry, this file type is not supported here."),
1282            file.name
1283          ),
1284          file
1285        });
1286      }
1287    }
1288  
1289    // packages/media-utils/build-module/utils/validate-mime-type-for-user.js
1290    var import_i18n3 = __toESM(require_i18n());
1291  
1292    // packages/media-utils/build-module/utils/get-mime-types-array.js
1293    function getMimeTypesArray(wpMimeTypesObject) {
1294      if (!wpMimeTypesObject) {
1295        return null;
1296      }
1297      return Object.entries(wpMimeTypesObject).flatMap(
1298        ([extensionsString, mime]) => {
1299          const [type] = mime.split("/");
1300          const extensions = extensionsString.split("|");
1301          return [
1302            mime,
1303            ...extensions.map(
1304              (extension) => `$type}/$extension}`
1305            )
1306          ];
1307        }
1308      );
1309    }
1310  
1311    // packages/media-utils/build-module/utils/validate-mime-type-for-user.js
1312    function validateMimeTypeForUser(file, wpAllowedMimeTypes) {
1313      const allowedMimeTypesForUser = getMimeTypesArray(wpAllowedMimeTypes);
1314      if (!allowedMimeTypesForUser) {
1315        return;
1316      }
1317      const isAllowedMimeTypeForUser = allowedMimeTypesForUser.includes(
1318        file.type
1319      );
1320      if (file.type && !isAllowedMimeTypeForUser) {
1321        throw new UploadError({
1322          code: "MIME_TYPE_NOT_ALLOWED_FOR_USER",
1323          message: (0, import_i18n3.sprintf)(
1324            // translators: %s: file name.
1325            (0, import_i18n3.__)(
1326              "%s: Sorry, you are not allowed to upload this file type."
1327            ),
1328            file.name
1329          ),
1330          file
1331        });
1332      }
1333    }
1334  
1335    // packages/media-utils/build-module/utils/validate-file-size.js
1336    var import_i18n4 = __toESM(require_i18n());
1337    function validateFileSize(file, maxUploadFileSize) {
1338      if (file.size <= 0) {
1339        throw new UploadError({
1340          code: "EMPTY_FILE",
1341          message: (0, import_i18n4.sprintf)(
1342            // translators: %s: file name.
1343            (0, import_i18n4.__)("%s: This file is empty."),
1344            file.name
1345          ),
1346          file
1347        });
1348      }
1349      if (maxUploadFileSize && file.size > maxUploadFileSize) {
1350        throw new UploadError({
1351          code: "SIZE_ABOVE_LIMIT",
1352          message: (0, import_i18n4.sprintf)(
1353            // translators: %s: file name.
1354            (0, import_i18n4.__)(
1355              "%s: This file exceeds the maximum upload size for this site."
1356            ),
1357            file.name
1358          ),
1359          file
1360        });
1361      }
1362    }
1363  
1364    // packages/media-utils/build-module/utils/upload-media.js
1365    function uploadMedia({
1366      wpAllowedMimeTypes,
1367      allowedTypes,
1368      additionalData = {},
1369      filesList,
1370      maxUploadFileSize,
1371      onError,
1372      onFileChange,
1373      signal,
1374      multiple = true
1375    }) {
1376      if (!multiple && filesList.length > 1) {
1377        onError?.(new Error((0, import_i18n5.__)("Only one file can be used here.")));
1378        return;
1379      }
1380      const validFiles = [];
1381      const filesSet = [];
1382      const setAndUpdateFiles = (index, value) => {
1383        if (!window.__experimentalMediaProcessing) {
1384          if (filesSet[index]?.url) {
1385            (0, import_blob.revokeBlobURL)(filesSet[index].url);
1386          }
1387        }
1388        filesSet[index] = value;
1389        onFileChange?.(
1390          filesSet.filter((attachment) => attachment !== null)
1391        );
1392      };
1393      for (const mediaFile of filesList) {
1394        try {
1395          validateMimeTypeForUser(mediaFile, wpAllowedMimeTypes);
1396        } catch (error) {
1397          onError?.(error);
1398          continue;
1399        }
1400        try {
1401          validateMimeType(mediaFile, allowedTypes);
1402        } catch (error) {
1403          onError?.(error);
1404          continue;
1405        }
1406        try {
1407          validateFileSize(mediaFile, maxUploadFileSize);
1408        } catch (error) {
1409          onError?.(error);
1410          continue;
1411        }
1412        validFiles.push(mediaFile);
1413        if (!window.__experimentalMediaProcessing) {
1414          filesSet.push({ url: (0, import_blob.createBlobURL)(mediaFile) });
1415          onFileChange?.(filesSet);
1416        }
1417      }
1418      validFiles.map(async (file, index) => {
1419        try {
1420          const attachment = await uploadToServer(
1421            file,
1422            additionalData,
1423            signal
1424          );
1425          setAndUpdateFiles(index, attachment);
1426        } catch (error) {
1427          setAndUpdateFiles(index, null);
1428          let message2;
1429          if (typeof error === "object" && error !== null && "message" in error) {
1430            message2 = typeof error.message === "string" ? error.message : String(error.message);
1431          } else {
1432            message2 = (0, import_i18n5.sprintf)(
1433              // translators: %s: file name
1434              (0, import_i18n5.__)("Error while uploading file %s to the media library."),
1435              file.name
1436            );
1437          }
1438          onError?.(
1439            new UploadError({
1440              code: "GENERAL",
1441              message: message2,
1442              file,
1443              cause: error instanceof Error ? error : void 0
1444            })
1445          );
1446        }
1447      });
1448    }
1449  
1450    // packages/media-utils/build-module/utils/sideload-media.js
1451    var import_i18n6 = __toESM(require_i18n());
1452  
1453    // packages/media-utils/build-module/utils/sideload-to-server.js
1454    var import_api_fetch2 = __toESM(require_api_fetch());
1455    async function sideloadToServer(file, attachmentId, additionalData = {}, signal) {
1456      const data = new FormData();
1457      data.append("file", file, file.name || file.type.replace("/", "."));
1458      for (const [key, value] of Object.entries(additionalData)) {
1459        flattenFormData(
1460          data,
1461          key,
1462          value
1463        );
1464      }
1465      return transformAttachment(
1466        await (0, import_api_fetch2.default)({
1467          path: `/wp/v2/media/$attachmentId}/sideload`,
1468          body: data,
1469          method: "POST",
1470          signal
1471        })
1472      );
1473    }
1474  
1475    // packages/media-utils/build-module/utils/sideload-media.js
1476    var noop = () => {
1477    };
1478    async function sideloadMedia({
1479      file,
1480      attachmentId,
1481      additionalData = {},
1482      signal,
1483      onFileChange,
1484      onError = noop
1485    }) {
1486      try {
1487        const attachment = await sideloadToServer(
1488          file,
1489          attachmentId,
1490          additionalData,
1491          signal
1492        );
1493        onFileChange?.([attachment]);
1494      } catch (error) {
1495        let message2;
1496        if (error instanceof Error) {
1497          message2 = error.message;
1498        } else {
1499          message2 = (0, import_i18n6.sprintf)(
1500            // translators: %s: file name
1501            (0, import_i18n6.__)("Error while sideloading file %s to the server."),
1502            file.name
1503          );
1504        }
1505        onError(
1506          new UploadError({
1507            code: "GENERAL",
1508            message: message2,
1509            file,
1510            cause: error instanceof Error ? error : void 0
1511          })
1512        );
1513      }
1514    }
1515  
1516    // packages/media-utils/build-module/components/media-upload-modal/index.js
1517    var import_element54 = __toESM(require_element());
1518    var import_i18n57 = __toESM(require_i18n());
1519    var import_core_data2 = __toESM(require_core_data());
1520    var import_data7 = __toESM(require_data());
1521    var import_components54 = __toESM(require_components());
1522  
1523    // packages/icons/build-module/library/arrow-down.js
1524    var import_primitives = __toESM(require_primitives());
1525    var import_jsx_runtime = __toESM(require_jsx_runtime());
1526    var arrow_down_default = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.Path, { d: "m16.5 13.5-3.7 3.7V4h-1.5v13.2l-3.8-3.7-1 1 5.5 5.6 5.5-5.6z" }) });
1527  
1528    // packages/icons/build-module/library/arrow-left.js
1529    var import_primitives2 = __toESM(require_primitives());
1530    var import_jsx_runtime2 = __toESM(require_jsx_runtime());
1531    var arrow_left_default = /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.Path, { d: "M20 11.2H6.8l3.7-3.7-1-1L3.9 12l5.6 5.5 1-1-3.7-3.7H20z" }) });
1532  
1533    // packages/icons/build-module/library/arrow-right.js
1534    var import_primitives3 = __toESM(require_primitives());
1535    var import_jsx_runtime3 = __toESM(require_jsx_runtime());
1536    var arrow_right_default = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.Path, { d: "m14.5 6.5-1 1 3.7 3.7H4v1.6h13.2l-3.7 3.7 1 1 5.6-5.5z" }) });
1537  
1538    // packages/icons/build-module/library/arrow-up.js
1539    var import_primitives4 = __toESM(require_primitives());
1540    var import_jsx_runtime4 = __toESM(require_jsx_runtime());
1541    var arrow_up_default = /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives4.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives4.Path, { d: "M12 3.9 6.5 9.5l1 1 3.8-3.7V20h1.5V6.8l3.7 3.7 1-1z" }) });
1542  
1543    // packages/icons/build-module/library/audio.js
1544    var import_primitives5 = __toESM(require_primitives());
1545    var import_jsx_runtime5 = __toESM(require_jsx_runtime());
1546    var audio_default = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives5.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives5.Path, { d: "M17.7 4.3c-1.2 0-2.8 0-3.8 1-.6.6-.9 1.5-.9 2.6V14c-.6-.6-1.5-1-2.5-1C8.6 13 7 14.6 7 16.5S8.6 20 10.5 20c1.5 0 2.8-1 3.3-2.3.5-.8.7-1.8.7-2.5V7.9c0-.7.2-1.2.5-1.6.6-.6 1.8-.6 2.8-.6h.3V4.3h-.4z" }) });
1547  
1548    // packages/icons/build-module/library/block-table.js
1549    var import_primitives6 = __toESM(require_primitives());
1550    var import_jsx_runtime6 = __toESM(require_jsx_runtime());
1551    var block_table_default = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives6.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives6.Path, { d: "M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM5 4.5h14c.3 0 .5.2.5.5v3.5h-15V5c0-.3.2-.5.5-.5zm8 5.5h6.5v3.5H13V10zm-1.5 3.5h-7V10h7v3.5zm-7 5.5v-4h7v4.5H5c-.3 0-.5-.2-.5-.5zm14.5.5h-6V15h6.5v4c0 .3-.2.5-.5.5z" }) });
1552  
1553    // packages/icons/build-module/library/category.js
1554    var import_primitives7 = __toESM(require_primitives());
1555    var import_jsx_runtime7 = __toESM(require_jsx_runtime());
1556    var category_default = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives7.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1557      import_primitives7.Path,
1558      {
1559        d: "M6 5.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H6a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM4 6a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2H6a2 2 0 01-2-2V6zm11-.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5h-3a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM13 6a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2h-3a2 2 0 01-2-2V6zm5 8.5h-3a.5.5 0 00-.5.5v3a.5.5 0 00.5.5h3a.5.5 0 00.5-.5v-3a.5.5 0 00-.5-.5zM15 13a2 2 0 00-2 2v3a2 2 0 002 2h3a2 2 0 002-2v-3a2 2 0 00-2-2h-3zm-9 1.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H6a.5.5 0 01-.5-.5v-3a.5.5 0 01.5-.5zM4 15a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2H6a2 2 0 01-2-2v-3z",
1560        fillRule: "evenodd",
1561        clipRule: "evenodd"
1562      }
1563    ) });
1564  
1565    // packages/icons/build-module/library/check.js
1566    var import_primitives8 = __toESM(require_primitives());
1567    var import_jsx_runtime8 = __toESM(require_jsx_runtime());
1568    var check_default = /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives8.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives8.Path, { d: "M16.5 7.5 10 13.9l-2.5-2.4-1 1 3.5 3.6 7.5-7.6z" }) });
1569  
1570    // packages/icons/build-module/library/close-small.js
1571    var import_primitives9 = __toESM(require_primitives());
1572    var import_jsx_runtime9 = __toESM(require_jsx_runtime());
1573    var close_small_default = /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives9.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives9.Path, { d: "M12 13.06l3.712 3.713 1.061-1.06L13.061 12l3.712-3.712-1.06-1.06L12 10.938 8.288 7.227l-1.061 1.06L10.939 12l-3.712 3.712 1.06 1.061L12 13.061z" }) });
1574  
1575    // packages/icons/build-module/library/cog.js
1576    var import_primitives10 = __toESM(require_primitives());
1577    var import_jsx_runtime10 = __toESM(require_jsx_runtime());
1578    var cog_default = /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_primitives10.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1579      import_primitives10.Path,
1580      {
1581        fillRule: "evenodd",
1582        d: "M10.289 4.836A1 1 0 0111.275 4h1.306a1 1 0 01.987.836l.244 1.466c.787.26 1.503.679 2.108 1.218l1.393-.522a1 1 0 011.216.437l.653 1.13a1 1 0 01-.23 1.273l-1.148.944a6.025 6.025 0 010 2.435l1.149.946a1 1 0 01.23 1.272l-.653 1.13a1 1 0 01-1.216.437l-1.394-.522c-.605.54-1.32.958-2.108 1.218l-.244 1.466a1 1 0 01-.987.836h-1.306a1 1 0 01-.986-.836l-.244-1.466a5.995 5.995 0 01-2.108-1.218l-1.394.522a1 1 0 01-1.217-.436l-.653-1.131a1 1 0 01.23-1.272l1.149-.946a6.026 6.026 0 010-2.435l-1.148-.944a1 1 0 01-.23-1.272l.653-1.131a1 1 0 011.217-.437l1.393.522a5.994 5.994 0 012.108-1.218l.244-1.466zM14.929 12a3 3 0 11-6 0 3 3 0 016 0z",
1583        clipRule: "evenodd"
1584      }
1585    ) });
1586  
1587    // packages/icons/build-module/library/envelope.js
1588    var import_primitives11 = __toESM(require_primitives());
1589    var import_jsx_runtime11 = __toESM(require_jsx_runtime());
1590    var envelope_default = /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives11.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1591      import_primitives11.Path,
1592      {
1593        fillRule: "evenodd",
1594        clipRule: "evenodd",
1595        d: "M3 7c0-1.1.9-2 2-2h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7Zm2-.5h14c.3 0 .5.2.5.5v1L12 13.5 4.5 7.9V7c0-.3.2-.5.5-.5Zm-.5 3.3V17c0 .3.2.5.5.5h14c.3 0 .5-.2.5-.5V9.8L12 15.4 4.5 9.8Z"
1596      }
1597    ) });
1598  
1599    // packages/icons/build-module/library/error.js
1600    var import_primitives12 = __toESM(require_primitives());
1601    var import_jsx_runtime12 = __toESM(require_jsx_runtime());
1602    var error_default = /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1603      import_primitives12.Path,
1604      {
1605        fillRule: "evenodd",
1606        clipRule: "evenodd",
1607        d: "M12.218 5.377a.25.25 0 0 0-.436 0l-7.29 12.96a.25.25 0 0 0 .218.373h14.58a.25.25 0 0 0 .218-.372l-7.29-12.96Zm-1.743-.735c.669-1.19 2.381-1.19 3.05 0l7.29 12.96a1.75 1.75 0 0 1-1.525 2.608H4.71a1.75 1.75 0 0 1-1.525-2.608l7.29-12.96ZM12.75 17.46h-1.5v-1.5h1.5v1.5Zm-1.5-3h1.5v-5h-1.5v5Z"
1608      }
1609    ) });
1610  
1611    // packages/icons/build-module/library/file.js
1612    var import_primitives13 = __toESM(require_primitives());
1613    var import_jsx_runtime13 = __toESM(require_jsx_runtime());
1614    var file_default = /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives13.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1615      import_primitives13.Path,
1616      {
1617        fillRule: "evenodd",
1618        clipRule: "evenodd",
1619        d: "M12.848 8a1 1 0 0 1-.914-.594l-.723-1.63a.5.5 0 0 0-.447-.276H5a.5.5 0 0 0-.5.5v11.5a.5.5 0 0 0 .5.5h14a.5.5 0 0 0 .5-.5v-9A.5.5 0 0 0 19 8h-6.152Zm.612-1.5a.5.5 0 0 1-.462-.31l-.445-1.084A2 2 0 0 0 10.763 4H5a2 2 0 0 0-2 2v11.5a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-9a2 2 0 0 0-2-2h-5.54Z"
1620      }
1621    ) });
1622  
1623    // packages/icons/build-module/library/format-list-bullets-rtl.js
1624    var import_primitives14 = __toESM(require_primitives());
1625    var import_jsx_runtime14 = __toESM(require_jsx_runtime());
1626    var format_list_bullets_rtl_default = /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives14.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives14.Path, { d: "M4 8.8h8.9V7.2H4v1.6zm0 7h8.9v-1.5H4v1.5zM18 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z" }) });
1627  
1628    // packages/icons/build-module/library/format-list-bullets.js
1629    var import_primitives15 = __toESM(require_primitives());
1630    var import_jsx_runtime15 = __toESM(require_jsx_runtime());
1631    var format_list_bullets_default = /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives15.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives15.Path, { d: "M11.1 15.8H20v-1.5h-8.9v1.5zm0-8.6v1.5H20V7.2h-8.9zM6 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-7c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z" }) });
1632  
1633    // packages/icons/build-module/library/funnel.js
1634    var import_primitives16 = __toESM(require_primitives());
1635    var import_jsx_runtime16 = __toESM(require_jsx_runtime());
1636    var funnel_default = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives16.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives16.Path, { d: "M10 17.5H14V16H10V17.5ZM6 6V7.5H18V6H6ZM8 12.5H16V11H8V12.5Z" }) });
1637  
1638    // packages/icons/build-module/library/image.js
1639    var import_primitives17 = __toESM(require_primitives());
1640    var import_jsx_runtime17 = __toESM(require_jsx_runtime());
1641    var image_default = /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives17.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives17.Path, { d: "M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM5 4.5h14c.3 0 .5.2.5.5v8.4l-3-2.9c-.3-.3-.8-.3-1 0L11.9 14 9 12c-.3-.2-.6-.2-.8 0l-3.6 2.6V5c-.1-.3.1-.5.4-.5zm14 15H5c-.3 0-.5-.2-.5-.5v-2.4l4.1-3 3 1.9c.3.2.7.2.9-.1L16 12l3.5 3.4V19c0 .3-.2.5-.5.5z" }) });
1642  
1643    // packages/icons/build-module/library/link.js
1644    var import_primitives18 = __toESM(require_primitives());
1645    var import_jsx_runtime18 = __toESM(require_jsx_runtime());
1646    var link_default = /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives18.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives18.Path, { d: "M10 17.389H8.444A5.194 5.194 0 1 1 8.444 7H10v1.5H8.444a3.694 3.694 0 0 0 0 7.389H10v1.5ZM14 7h1.556a5.194 5.194 0 0 1 0 10.39H14v-1.5h1.556a3.694 3.694 0 0 0 0-7.39H14V7Zm-4.5 6h5v-1.5h-5V13Z" }) });
1647  
1648    // packages/icons/build-module/library/mobile.js
1649    var import_primitives19 = __toESM(require_primitives());
1650    var import_jsx_runtime19 = __toESM(require_jsx_runtime());
1651    var mobile_default = /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives19.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives19.Path, { d: "M15 4H9c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h6c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm.5 14c0 .3-.2.5-.5.5H9c-.3 0-.5-.2-.5-.5V6c0-.3.2-.5.5-.5h6c.3 0 .5.2.5.5v12zm-4.5-.5h2V16h-2v1.5z" }) });
1652  
1653    // packages/icons/build-module/library/more-vertical.js
1654    var import_primitives20 = __toESM(require_primitives());
1655    var import_jsx_runtime20 = __toESM(require_jsx_runtime());
1656    var more_vertical_default = /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives20.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives20.Path, { d: "M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z" }) });
1657  
1658    // packages/icons/build-module/library/next.js
1659    var import_primitives21 = __toESM(require_primitives());
1660    var import_jsx_runtime21 = __toESM(require_jsx_runtime());
1661    var next_default = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives21.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives21.Path, { d: "M6.6 6L5.4 7l4.5 5-4.5 5 1.1 1 5.5-6-5.4-6zm6 0l-1.1 1 4.5 5-4.5 5 1.1 1 5.5-6-5.5-6z" }) });
1662  
1663    // packages/icons/build-module/library/previous.js
1664    var import_primitives22 = __toESM(require_primitives());
1665    var import_jsx_runtime22 = __toESM(require_jsx_runtime());
1666    var previous_default = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives22.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives22.Path, { d: "M11.6 7l-1.1-1L5 12l5.5 6 1.1-1L7 12l4.6-5zm6 0l-1.1-1-5.5 6 5.5 6 1.1-1-4.6-5 4.6-5z" }) });
1667  
1668    // packages/icons/build-module/library/scheduled.js
1669    var import_primitives23 = __toESM(require_primitives());
1670    var import_jsx_runtime23 = __toESM(require_jsx_runtime());
1671    var scheduled_default = /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives23.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1672      import_primitives23.Path,
1673      {
1674        fillRule: "evenodd",
1675        clipRule: "evenodd",
1676        d: "M12 18.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm9 1V8h-1.5v3.5h-2V13H13Z"
1677      }
1678    ) });
1679  
1680    // packages/icons/build-module/library/search.js
1681    var import_primitives24 = __toESM(require_primitives());
1682    var import_jsx_runtime24 = __toESM(require_jsx_runtime());
1683    var search_default = /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_primitives24.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_primitives24.Path, { d: "M13 5c-3.3 0-6 2.7-6 6 0 1.4.5 2.7 1.3 3.7l-3.8 3.8 1.1 1.1 3.8-3.8c1 .8 2.3 1.3 3.7 1.3 3.3 0 6-2.7 6-6S16.3 5 13 5zm0 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z" }) });
1684  
1685    // packages/icons/build-module/library/seen.js
1686    var import_primitives25 = __toESM(require_primitives());
1687    var import_jsx_runtime25 = __toESM(require_jsx_runtime());
1688    var seen_default = /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_primitives25.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_primitives25.Path, { d: "M3.99961 13C4.67043 13.3354 4.6703 13.3357 4.67017 13.3359L4.67298 13.3305C4.67621 13.3242 4.68184 13.3135 4.68988 13.2985C4.70595 13.2686 4.7316 13.2218 4.76695 13.1608C4.8377 13.0385 4.94692 12.8592 5.09541 12.6419C5.39312 12.2062 5.84436 11.624 6.45435 11.0431C7.67308 9.88241 9.49719 8.75 11.9996 8.75C14.502 8.75 16.3261 9.88241 17.5449 11.0431C18.1549 11.624 18.6061 12.2062 18.9038 12.6419C19.0523 12.8592 19.1615 13.0385 19.2323 13.1608C19.2676 13.2218 19.2933 13.2686 19.3093 13.2985C19.3174 13.3135 19.323 13.3242 19.3262 13.3305L19.3291 13.3359C19.3289 13.3357 19.3288 13.3354 19.9996 13C20.6704 12.6646 20.6703 12.6643 20.6701 12.664L20.6697 12.6632L20.6688 12.6614L20.6662 12.6563L20.6583 12.6408C20.6517 12.6282 20.6427 12.6108 20.631 12.5892C20.6078 12.5459 20.5744 12.4852 20.5306 12.4096C20.4432 12.2584 20.3141 12.0471 20.1423 11.7956C19.7994 11.2938 19.2819 10.626 18.5794 9.9569C17.1731 8.61759 14.9972 7.25 11.9996 7.25C9.00203 7.25 6.82614 8.61759 5.41987 9.9569C4.71736 10.626 4.19984 11.2938 3.85694 11.7956C3.68511 12.0471 3.55605 12.2584 3.4686 12.4096C3.42484 12.4852 3.39142 12.5459 3.36818 12.5892C3.35656 12.6108 3.34748 12.6282 3.34092 12.6408L3.33297 12.6563L3.33041 12.6614L3.32948 12.6632L3.32911 12.664C3.32894 12.6643 3.32879 12.6646 3.99961 13ZM11.9996 16C13.9326 16 15.4996 14.433 15.4996 12.5C15.4996 10.567 13.9326 9 11.9996 9C10.0666 9 8.49961 10.567 8.49961 12.5C8.49961 14.433 10.0666 16 11.9996 16Z" }) });
1689  
1690    // packages/icons/build-module/library/unseen.js
1691    var import_primitives26 = __toESM(require_primitives());
1692    var import_jsx_runtime26 = __toESM(require_jsx_runtime());
1693    var unseen_default = /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_primitives26.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_primitives26.Path, { d: "M20.7 12.7s0-.1-.1-.2c0-.2-.2-.4-.4-.6-.3-.5-.9-1.2-1.6-1.8-.7-.6-1.5-1.3-2.6-1.8l-.6 1.4c.9.4 1.6 1 2.1 1.5.6.6 1.1 1.2 1.4 1.6.1.2.3.4.3.5v.1l.7-.3.7-.3Zm-5.2-9.3-1.8 4c-.5-.1-1.1-.2-1.7-.2-3 0-5.2 1.4-6.6 2.7-.7.7-1.2 1.3-1.6 1.8-.2.3-.3.5-.4.6 0 0 0 .1-.1.2s0 0 .7.3l.7.3V13c0-.1.2-.3.3-.5.3-.4.7-1 1.4-1.6 1.2-1.2 3-2.3 5.5-2.3H13v.3c-.4 0-.8-.1-1.1-.1-1.9 0-3.5 1.6-3.5 3.5s.6 2.3 1.6 2.9l-2 4.4.9.4 7.6-16.2-.9-.4Zm-3 12.6c1.7-.2 3-1.7 3-3.5s-.2-1.4-.6-1.9L12.4 16Z" }) });
1694  
1695    // packages/icons/build-module/library/upload.js
1696    var import_primitives27 = __toESM(require_primitives());
1697    var import_jsx_runtime27 = __toESM(require_jsx_runtime());
1698    var upload_default = /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_primitives27.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_primitives27.Path, { d: "M18.5 15v3.5H13V6.7l4.5 4.1 1-1.1-6.2-5.8-5.8 5.8 1 1.1 4-4v11.7h-6V15H4v5h16v-5z" }) });
1699  
1700    // packages/icons/build-module/library/video.js
1701    var import_primitives28 = __toESM(require_primitives());
1702    var import_jsx_runtime28 = __toESM(require_jsx_runtime());
1703    var video_default = /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_primitives28.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_primitives28.Path, { d: "M18.7 3H5.3C4 3 3 4 3 5.3v13.4C3 20 4 21 5.3 21h13.4c1.3 0 2.3-1 2.3-2.3V5.3C21 4 20 3 18.7 3zm.8 15.7c0 .4-.4.8-.8.8H5.3c-.4 0-.8-.4-.8-.8V5.3c0-.4.4-.8.8-.8h13.4c.4 0 .8.4.8.8v13.4zM10 15l5-3-5-3v6z" }) });
1704  
1705    // packages/dataviews/build-module/components/dataviews-context/index.js
1706    var import_element2 = __toESM(require_element());
1707  
1708    // packages/dataviews/build-module/constants.js
1709    var import_i18n7 = __toESM(require_i18n());
1710    var OPERATOR_IS_ANY = "isAny";
1711    var OPERATOR_IS_NONE = "isNone";
1712    var OPERATOR_IS_ALL = "isAll";
1713    var OPERATOR_IS_NOT_ALL = "isNotAll";
1714    var OPERATOR_BETWEEN = "between";
1715    var OPERATOR_IN_THE_PAST = "inThePast";
1716    var OPERATOR_OVER = "over";
1717    var OPERATOR_IS = "is";
1718    var OPERATOR_IS_NOT = "isNot";
1719    var OPERATOR_LESS_THAN = "lessThan";
1720    var OPERATOR_GREATER_THAN = "greaterThan";
1721    var OPERATOR_LESS_THAN_OR_EQUAL = "lessThanOrEqual";
1722    var OPERATOR_GREATER_THAN_OR_EQUAL = "greaterThanOrEqual";
1723    var OPERATOR_BEFORE = "before";
1724    var OPERATOR_AFTER = "after";
1725    var OPERATOR_BEFORE_INC = "beforeInc";
1726    var OPERATOR_AFTER_INC = "afterInc";
1727    var OPERATOR_CONTAINS = "contains";
1728    var OPERATOR_NOT_CONTAINS = "notContains";
1729    var OPERATOR_STARTS_WITH = "startsWith";
1730    var OPERATOR_ON = "on";
1731    var OPERATOR_NOT_ON = "notOn";
1732    var SORTING_DIRECTIONS = ["asc", "desc"];
1733    var sortArrows = { asc: "\u2191", desc: "\u2193" };
1734    var sortValues = { asc: "ascending", desc: "descending" };
1735    var sortLabels = {
1736      asc: (0, import_i18n7.__)("Sort ascending"),
1737      desc: (0, import_i18n7.__)("Sort descending")
1738    };
1739    var sortIcons = {
1740      asc: arrow_up_default,
1741      desc: arrow_down_default
1742    };
1743    var LAYOUT_TABLE = "table";
1744    var LAYOUT_GRID = "grid";
1745    var LAYOUT_LIST = "list";
1746    var LAYOUT_ACTIVITY = "activity";
1747    var LAYOUT_PICKER_GRID = "pickerGrid";
1748    var LAYOUT_PICKER_TABLE = "pickerTable";
1749  
1750    // packages/dataviews/build-module/components/dataviews-context/index.js
1751    var DataViewsContext = (0, import_element2.createContext)({
1752      view: { type: LAYOUT_TABLE },
1753      onChangeView: () => {
1754      },
1755      fields: [],
1756      data: [],
1757      paginationInfo: {
1758        totalItems: 0,
1759        totalPages: 0
1760      },
1761      selection: [],
1762      onChangeSelection: () => {
1763      },
1764      setOpenedFilter: () => {
1765      },
1766      openedFilter: null,
1767      getItemId: (item) => item.id,
1768      isItemClickable: () => true,
1769      renderItemLink: void 0,
1770      containerWidth: 0,
1771      containerRef: (0, import_element2.createRef)(),
1772      resizeObserverRef: () => {
1773      },
1774      defaultLayouts: { list: {}, grid: {}, table: {} },
1775      filters: [],
1776      isShowingFilter: false,
1777      setIsShowingFilter: () => {
1778      },
1779      hasInfiniteScrollHandler: false,
1780      config: {
1781        perPageSizes: []
1782      }
1783    });
1784    DataViewsContext.displayName = "DataViewsContext";
1785    var dataviews_context_default = DataViewsContext;
1786  
1787    // packages/dataviews/build-module/dataviews-layouts/index.js
1788    var import_i18n26 = __toESM(require_i18n());
1789  
1790    // node_modules/clsx/dist/clsx.mjs
1791    function r(e2) {
1792      var t2, f2, n2 = "";
1793      if ("string" == typeof e2 || "number" == typeof e2) n2 += e2;
1794      else if ("object" == typeof e2) if (Array.isArray(e2)) {
1795        var o2 = e2.length;
1796        for (t2 = 0; t2 < o2; t2++) e2[t2] && (f2 = r(e2[t2])) && (n2 && (n2 += " "), n2 += f2);
1797      } else for (f2 in e2) e2[f2] && (n2 && (n2 += " "), n2 += f2);
1798      return n2;
1799    }
1800    function clsx() {
1801      for (var e2, t2, f2 = 0, n2 = "", o2 = arguments.length; f2 < o2; f2++) (e2 = arguments[f2]) && (t2 = r(e2)) && (n2 && (n2 += " "), n2 += t2);
1802      return n2;
1803    }
1804    var clsx_default = clsx;
1805  
1806    // packages/dataviews/build-module/dataviews-layouts/table/index.js
1807    var import_i18n14 = __toESM(require_i18n());
1808    var import_components7 = __toESM(require_components());
1809    var import_element9 = __toESM(require_element());
1810    var import_keycodes = __toESM(require_keycodes());
1811  
1812    // packages/dataviews/build-module/components/dataviews-selection-checkbox/index.js
1813    var import_components = __toESM(require_components());
1814    var import_i18n8 = __toESM(require_i18n());
1815    var import_jsx_runtime29 = __toESM(require_jsx_runtime());
1816    function DataViewsSelectionCheckbox({
1817      selection,
1818      onChangeSelection,
1819      item,
1820      getItemId,
1821      titleField,
1822      disabled,
1823      ...extraProps
1824    }) {
1825      const id = getItemId(item);
1826      const checked = !disabled && selection.includes(id);
1827      const selectionLabel = titleField?.getValue?.({ item }) || (0, import_i18n8.__)("(no title)");
1828      return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1829        import_components.CheckboxControl,
1830        {
1831          className: "dataviews-selection-checkbox",
1832          "aria-label": selectionLabel,
1833          "aria-disabled": disabled,
1834          checked,
1835          onChange: () => {
1836            if (disabled) {
1837              return;
1838            }
1839            onChangeSelection(
1840              selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id]
1841            );
1842          },
1843          ...extraProps
1844        }
1845      );
1846    }
1847  
1848    // packages/dataviews/build-module/components/dataviews-item-actions/index.js
1849    var import_components2 = __toESM(require_components());
1850    var import_i18n9 = __toESM(require_i18n());
1851    var import_element3 = __toESM(require_element());
1852    var import_data = __toESM(require_data());
1853    var import_compose = __toESM(require_compose());
1854  
1855    // packages/dataviews/build-module/lock-unlock.js
1856    var import_private_apis = __toESM(require_private_apis());
1857    var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(
1858      "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
1859      "@wordpress/dataviews"
1860    );
1861  
1862    // packages/dataviews/build-module/components/dataviews-item-actions/index.js
1863    var import_jsx_runtime30 = __toESM(require_jsx_runtime());
1864    var { Menu, kebabCase } = unlock(import_components2.privateApis);
1865    function ButtonTrigger({
1866      action,
1867      onClick,
1868      items,
1869      variant
1870    }) {
1871      const label = typeof action.label === "string" ? action.label : action.label(items);
1872      return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1873        import_components2.Button,
1874        {
1875          disabled: !!action.disabled,
1876          accessibleWhenDisabled: true,
1877          size: "compact",
1878          variant,
1879          onClick,
1880          children: label
1881        }
1882      );
1883    }
1884    function MenuItemTrigger({
1885      action,
1886      onClick,
1887      items
1888    }) {
1889      const label = typeof action.label === "string" ? action.label : action.label(items);
1890      return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Menu.Item, { disabled: action.disabled, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Menu.ItemLabel, { children: label }) });
1891    }
1892    function ActionModal({
1893      action,
1894      items,
1895      closeModal
1896    }) {
1897      const label = typeof action.label === "string" ? action.label : action.label(items);
1898      const modalHeader = typeof action.modalHeader === "function" ? action.modalHeader(items) : action.modalHeader;
1899      return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1900        import_components2.Modal,
1901        {
1902          title: modalHeader || label,
1903          __experimentalHideHeader: !!action.hideModalHeader,
1904          onRequestClose: closeModal,
1905          focusOnMount: action.modalFocusOnMount ?? true,
1906          size: action.modalSize || "medium",
1907          overlayClassName: `dataviews-action-modal dataviews-action-modal__$kebabCase(
1908            action.id
1909          )}`,
1910          children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(action.RenderModal, { items, closeModal })
1911        }
1912      );
1913    }
1914    function ActionsMenuGroup({
1915      actions,
1916      item,
1917      registry,
1918      setActiveModalAction
1919    }) {
1920      const { primaryActions, regularActions } = (0, import_element3.useMemo)(() => {
1921        return actions.reduce(
1922          (acc, action) => {
1923            (action.isPrimary ? acc.primaryActions : acc.regularActions).push(action);
1924            return acc;
1925          },
1926          {
1927            primaryActions: [],
1928            regularActions: []
1929          }
1930        );
1931      }, [actions]);
1932      const renderActionGroup = (actionList) => actionList.map((action) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1933        MenuItemTrigger,
1934        {
1935          action,
1936          onClick: () => {
1937            if ("RenderModal" in action) {
1938              setActiveModalAction(action);
1939              return;
1940            }
1941            action.callback([item], { registry });
1942          },
1943          items: [item]
1944        },
1945        action.id
1946      ));
1947      return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Menu.Group, { children: [
1948        renderActionGroup(primaryActions),
1949        primaryActions.length > 0 && regularActions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Menu.Separator, {}),
1950        renderActionGroup(regularActions)
1951      ] });
1952    }
1953    function ItemActions({
1954      item,
1955      actions,
1956      isCompact
1957    }) {
1958      const registry = (0, import_data.useRegistry)();
1959      const { primaryActions, eligibleActions } = (0, import_element3.useMemo)(() => {
1960        const _eligibleActions = actions.filter(
1961          (action) => !action.isEligible || action.isEligible(item)
1962        );
1963        const _primaryActions = _eligibleActions.filter(
1964          (action) => action.isPrimary
1965        );
1966        return {
1967          primaryActions: _primaryActions,
1968          eligibleActions: _eligibleActions
1969        };
1970      }, [actions, item]);
1971      if (isCompact) {
1972        return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1973          CompactItemActions,
1974          {
1975            item,
1976            actions: eligibleActions,
1977            isSmall: true,
1978            registry
1979          }
1980        );
1981      }
1982      return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
1983        import_components2.__experimentalHStack,
1984        {
1985          spacing: 0,
1986          justify: "flex-end",
1987          className: "dataviews-item-actions",
1988          style: {
1989            flexShrink: 0,
1990            width: "auto"
1991          },
1992          children: [
1993            /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1994              PrimaryActions,
1995              {
1996                item,
1997                actions: primaryActions,
1998                registry
1999              }
2000            ),
2001            primaryActions.length < eligibleActions.length && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2002              CompactItemActions,
2003              {
2004                item,
2005                actions: eligibleActions,
2006                registry
2007              }
2008            )
2009          ]
2010        }
2011      );
2012    }
2013    function CompactItemActions({
2014      item,
2015      actions,
2016      isSmall,
2017      registry
2018    }) {
2019      const [activeModalAction, setActiveModalAction] = (0, import_element3.useState)(
2020        null
2021      );
2022      return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [
2023        /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Menu, { placement: "bottom-end", children: [
2024          /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2025            Menu.TriggerButton,
2026            {
2027              render: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2028                import_components2.Button,
2029                {
2030                  size: isSmall ? "small" : "compact",
2031                  icon: more_vertical_default,
2032                  label: (0, import_i18n9.__)("Actions"),
2033                  accessibleWhenDisabled: true,
2034                  disabled: !actions.length,
2035                  className: "dataviews-all-actions-button"
2036                }
2037              )
2038            }
2039          ),
2040          /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Menu.Popover, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2041            ActionsMenuGroup,
2042            {
2043              actions,
2044              item,
2045              registry,
2046              setActiveModalAction
2047            }
2048          ) })
2049        ] }),
2050        !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2051          ActionModal,
2052          {
2053            action: activeModalAction,
2054            items: [item],
2055            closeModal: () => setActiveModalAction(null)
2056          }
2057        )
2058      ] });
2059    }
2060    function PrimaryActions({
2061      item,
2062      actions,
2063      registry,
2064      buttonVariant
2065    }) {
2066      const [activeModalAction, setActiveModalAction] = (0, import_element3.useState)(null);
2067      const isMobileViewport = (0, import_compose.useViewportMatch)("medium", "<");
2068      if (isMobileViewport) {
2069        return null;
2070      }
2071      if (!Array.isArray(actions) || actions.length === 0) {
2072        return null;
2073      }
2074      return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [
2075        actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2076          ButtonTrigger,
2077          {
2078            action,
2079            onClick: () => {
2080              if ("RenderModal" in action) {
2081                setActiveModalAction(action);
2082                return;
2083              }
2084              action.callback([item], { registry });
2085            },
2086            items: [item],
2087            variant: buttonVariant
2088          },
2089          action.id
2090        )),
2091        !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2092          ActionModal,
2093          {
2094            action: activeModalAction,
2095            items: [item],
2096            closeModal: () => setActiveModalAction(null)
2097          }
2098        )
2099      ] });
2100    }
2101  
2102    // packages/dataviews/build-module/components/dataviews-bulk-actions/index.js
2103    var import_components3 = __toESM(require_components());
2104    var import_i18n10 = __toESM(require_i18n());
2105    var import_element4 = __toESM(require_element());
2106    var import_data2 = __toESM(require_data());
2107    var import_compose2 = __toESM(require_compose());
2108    var import_jsx_runtime31 = __toESM(require_jsx_runtime());
2109    function useHasAPossibleBulkAction(actions, item) {
2110      return (0, import_element4.useMemo)(() => {
2111        return actions.some((action) => {
2112          return action.supportsBulk && (!action.isEligible || action.isEligible(item));
2113        });
2114      }, [actions, item]);
2115    }
2116    function useSomeItemHasAPossibleBulkAction(actions, data) {
2117      return (0, import_element4.useMemo)(() => {
2118        return data.some((item) => {
2119          return actions.some((action) => {
2120            return action.supportsBulk && (!action.isEligible || action.isEligible(item));
2121          });
2122        });
2123      }, [actions, data]);
2124    }
2125    function BulkSelectionCheckbox({
2126      selection,
2127      onChangeSelection,
2128      data,
2129      actions,
2130      getItemId
2131    }) {
2132      const selectableItems = (0, import_element4.useMemo)(() => {
2133        return data.filter((item) => {
2134          return actions.some(
2135            (action) => action.supportsBulk && (!action.isEligible || action.isEligible(item))
2136          );
2137        });
2138      }, [data, actions]);
2139      const selectedItems = data.filter(
2140        (item) => selection.includes(getItemId(item)) && selectableItems.includes(item)
2141      );
2142      const areAllSelected = selectedItems.length === selectableItems.length;
2143      return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2144        import_components3.CheckboxControl,
2145        {
2146          className: "dataviews-view-table-selection-checkbox",
2147          checked: areAllSelected,
2148          indeterminate: !areAllSelected && !!selectedItems.length,
2149          onChange: () => {
2150            if (areAllSelected) {
2151              onChangeSelection([]);
2152            } else {
2153              onChangeSelection(
2154                selectableItems.map((item) => getItemId(item))
2155              );
2156            }
2157          },
2158          "aria-label": areAllSelected ? (0, import_i18n10.__)("Deselect all") : (0, import_i18n10.__)("Select all")
2159        }
2160      );
2161    }
2162  
2163    // packages/dataviews/build-module/dataviews-layouts/table/column-header-menu.js
2164    var import_i18n11 = __toESM(require_i18n());
2165    var import_components4 = __toESM(require_components());
2166    var import_element5 = __toESM(require_element());
2167  
2168    // packages/dataviews/build-module/utils/get-hideable-fields.js
2169    function getHideableFields(view, fields) {
2170      const togglableFields = [
2171        view?.titleField,
2172        view?.mediaField,
2173        view?.descriptionField
2174      ].filter(Boolean);
2175      return fields.filter(
2176        (f2) => !togglableFields.includes(f2.id) && f2.type !== "media" && f2.enableHiding !== false
2177      );
2178    }
2179  
2180    // packages/dataviews/build-module/dataviews-layouts/table/column-header-menu.js
2181    var import_jsx_runtime32 = __toESM(require_jsx_runtime());
2182    var { Menu: Menu2 } = unlock(import_components4.privateApis);
2183    function WithMenuSeparators({ children }) {
2184      return import_element5.Children.toArray(children).filter(Boolean).map((child, i2) => /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_element5.Fragment, { children: [
2185        i2 > 0 && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.Separator, {}),
2186        child
2187      ] }, i2));
2188    }
2189    var _HeaderMenu = (0, import_element5.forwardRef)(function HeaderMenu({
2190      fieldId,
2191      view,
2192      fields,
2193      onChangeView,
2194      onHide,
2195      setOpenedFilter,
2196      canMove = true,
2197      canInsertLeft = true,
2198      canInsertRight = true
2199    }, ref) {
2200      const visibleFieldIds = view.fields ?? [];
2201      const index = visibleFieldIds?.indexOf(fieldId);
2202      const isSorted = view.sort?.field === fieldId;
2203      let isHidable = false;
2204      let isSortable = false;
2205      let canAddFilter = false;
2206      let operators = [];
2207      const field = fields.find((f2) => f2.id === fieldId);
2208      const { setIsShowingFilter } = (0, import_element5.useContext)(dataviews_context_default);
2209      if (!field) {
2210        return null;
2211      }
2212      isHidable = field.enableHiding !== false;
2213      isSortable = field.enableSorting !== false;
2214      const header = field.header;
2215      operators = !!field.filterBy && field.filterBy?.operators || [];
2216      canAddFilter = !view.filters?.some((_filter) => fieldId === _filter.field) && !!(field.hasElements || field.Edit) && field.filterBy !== false && !field.filterBy?.isPrimary;
2217      if (!isSortable && !canMove && !isHidable && !canAddFilter) {
2218        return header;
2219      }
2220      const hiddenFields = getHideableFields(view, fields).filter(
2221        (f2) => !visibleFieldIds.includes(f2.id)
2222      );
2223      const canInsert = (canInsertLeft || canInsertRight) && !!hiddenFields.length;
2224      return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Menu2, { children: [
2225        /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
2226          Menu2.TriggerButton,
2227          {
2228            render: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2229              import_components4.Button,
2230              {
2231                size: "compact",
2232                className: "dataviews-view-table-header-button",
2233                ref,
2234                variant: "tertiary"
2235              }
2236            ),
2237            children: [
2238              header,
2239              view.sort && isSorted && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { "aria-hidden": "true", children: sortArrows[view.sort.direction] })
2240            ]
2241          }
2242        ),
2243        /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.Popover, { style: { minWidth: "240px" }, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(WithMenuSeparators, { children: [
2244          isSortable && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.Group, { children: SORTING_DIRECTIONS.map(
2245            (direction) => {
2246              const isChecked = view.sort && isSorted && view.sort.direction === direction;
2247              const value = `$fieldId}-$direction}`;
2248              return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2249                Menu2.RadioItem,
2250                {
2251                  name: "view-table-sorting",
2252                  value,
2253                  checked: isChecked,
2254                  onChange: () => {
2255                    onChangeView({
2256                      ...view,
2257                      sort: {
2258                        field: fieldId,
2259                        direction
2260                      },
2261                      showLevels: false
2262                    });
2263                  },
2264                  children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: sortLabels[direction] })
2265                },
2266                value
2267              );
2268            }
2269          ) }),
2270          canAddFilter && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2271            Menu2.Item,
2272            {
2273              prefix: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_components4.Icon, { icon: funnel_default }),
2274              onClick: () => {
2275                setOpenedFilter(fieldId);
2276                setIsShowingFilter(true);
2277                onChangeView({
2278                  ...view,
2279                  page: 1,
2280                  filters: [
2281                    ...view.filters || [],
2282                    {
2283                      field: fieldId,
2284                      value: void 0,
2285                      operator: operators[0]
2286                    }
2287                  ]
2288                });
2289              },
2290              children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: (0, import_i18n11.__)("Add filter") })
2291            }
2292          ) }),
2293          (canMove || isHidable || canInsert) && field && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Menu2.Group, { children: [
2294            canMove && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2295              Menu2.Item,
2296              {
2297                prefix: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_components4.Icon, { icon: arrow_left_default }),
2298                disabled: index < 1,
2299                onClick: () => {
2300                  onChangeView({
2301                    ...view,
2302                    fields: [
2303                      ...visibleFieldIds.slice(
2304                        0,
2305                        index - 1
2306                      ) ?? [],
2307                      fieldId,
2308                      visibleFieldIds[index - 1],
2309                      ...visibleFieldIds.slice(
2310                        index + 1
2311                      )
2312                    ]
2313                  });
2314                },
2315                children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: (0, import_i18n11.__)("Move left") })
2316              }
2317            ),
2318            canMove && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2319              Menu2.Item,
2320              {
2321                prefix: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_components4.Icon, { icon: arrow_right_default }),
2322                disabled: index >= visibleFieldIds.length - 1,
2323                onClick: () => {
2324                  onChangeView({
2325                    ...view,
2326                    fields: [
2327                      ...visibleFieldIds.slice(
2328                        0,
2329                        index
2330                      ) ?? [],
2331                      visibleFieldIds[index + 1],
2332                      fieldId,
2333                      ...visibleFieldIds.slice(
2334                        index + 2
2335                      )
2336                    ]
2337                  });
2338                },
2339                children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: (0, import_i18n11.__)("Move right") })
2340              }
2341            ),
2342            canInsertLeft && !!hiddenFields.length && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Menu2, { children: [
2343              /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.SubmenuTriggerItem, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: (0, import_i18n11.__)("Insert left") }) }),
2344              /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.Popover, { children: hiddenFields.map((hiddenField) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2345                Menu2.Item,
2346                {
2347                  onClick: () => {
2348                    onChangeView({
2349                      ...view,
2350                      fields: [
2351                        ...visibleFieldIds.slice(
2352                          0,
2353                          index
2354                        ),
2355                        hiddenField.id,
2356                        ...visibleFieldIds.slice(
2357                          index
2358                        )
2359                      ]
2360                    });
2361                  },
2362                  children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: hiddenField.label })
2363                },
2364                hiddenField.id
2365              )) })
2366            ] }),
2367            canInsertRight && !!hiddenFields.length && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Menu2, { children: [
2368              /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.SubmenuTriggerItem, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: (0, import_i18n11.__)("Insert right") }) }),
2369              /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.Popover, { children: hiddenFields.map((hiddenField) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2370                Menu2.Item,
2371                {
2372                  onClick: () => {
2373                    onChangeView({
2374                      ...view,
2375                      fields: [
2376                        ...visibleFieldIds.slice(
2377                          0,
2378                          index + 1
2379                        ),
2380                        hiddenField.id,
2381                        ...visibleFieldIds.slice(
2382                          index + 1
2383                        )
2384                      ]
2385                    });
2386                  },
2387                  children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: hiddenField.label })
2388                },
2389                hiddenField.id
2390              )) })
2391            ] }),
2392            isHidable && field && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2393              Menu2.Item,
2394              {
2395                prefix: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_components4.Icon, { icon: unseen_default }),
2396                onClick: () => {
2397                  onHide(field);
2398                  onChangeView({
2399                    ...view,
2400                    fields: visibleFieldIds.filter(
2401                      (id) => id !== fieldId
2402                    )
2403                  });
2404                },
2405                children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: (0, import_i18n11.__)("Hide column") })
2406              }
2407            )
2408          ] })
2409        ] }) })
2410      ] });
2411    });
2412    var ColumnHeaderMenu = _HeaderMenu;
2413    var column_header_menu_default = ColumnHeaderMenu;
2414  
2415    // packages/dataviews/build-module/dataviews-layouts/table/column-primary.js
2416    var import_components5 = __toESM(require_components());
2417  
2418    // packages/dataviews/build-module/dataviews-layouts/utils/item-click-wrapper.js
2419    var import_element6 = __toESM(require_element());
2420    var import_jsx_runtime33 = __toESM(require_jsx_runtime());
2421    function getClickableItemProps({
2422      item,
2423      isItemClickable: isItemClickable2,
2424      onClickItem,
2425      className
2426    }) {
2427      if (!isItemClickable2(item) || !onClickItem) {
2428        return { className };
2429      }
2430      return {
2431        className: className ? `$className} $className}--clickable` : void 0,
2432        role: "button",
2433        tabIndex: 0,
2434        onClick: (event) => {
2435          event.stopPropagation();
2436          onClickItem(item);
2437        },
2438        onKeyDown: (event) => {
2439          if (event.key === "Enter" || event.key === "" || event.key === " ") {
2440            event.stopPropagation();
2441            onClickItem(item);
2442          }
2443        }
2444      };
2445    }
2446    function ItemClickWrapper({
2447      item,
2448      isItemClickable: isItemClickable2,
2449      onClickItem,
2450      renderItemLink,
2451      className,
2452      children,
2453      ...extraProps
2454    }) {
2455      if (!isItemClickable2(item)) {
2456        return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className, ...extraProps, children });
2457      }
2458      if (renderItemLink) {
2459        const renderedElement = renderItemLink({
2460          item,
2461          className: `$className} $className}--clickable`,
2462          ...extraProps,
2463          children
2464        });
2465        return (0, import_element6.cloneElement)(renderedElement, {
2466          onClick: (event) => {
2467            event.stopPropagation();
2468            if (renderedElement.props.onClick) {
2469              renderedElement.props.onClick(event);
2470            }
2471          },
2472          onKeyDown: (event) => {
2473            if (event.key === "Enter" || event.key === "" || event.key === " ") {
2474              event.stopPropagation();
2475              if (renderedElement.props.onKeyDown) {
2476                renderedElement.props.onKeyDown(event);
2477              }
2478            }
2479          }
2480        });
2481      }
2482      const clickProps = getClickableItemProps({
2483        item,
2484        isItemClickable: isItemClickable2,
2485        onClickItem,
2486        className
2487      });
2488      return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { ...clickProps, ...extraProps, children });
2489    }
2490  
2491    // packages/dataviews/build-module/dataviews-layouts/table/column-primary.js
2492    var import_jsx_runtime34 = __toESM(require_jsx_runtime());
2493    function ColumnPrimary({
2494      item,
2495      level,
2496      titleField,
2497      mediaField,
2498      descriptionField: descriptionField2,
2499      onClickItem,
2500      renderItemLink,
2501      isItemClickable: isItemClickable2
2502    }) {
2503      return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_components5.__experimentalHStack, { spacing: 3, alignment: "flex-start", justify: "flex-start", children: [
2504        mediaField && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2505          ItemClickWrapper,
2506          {
2507            item,
2508            isItemClickable: isItemClickable2,
2509            onClickItem,
2510            renderItemLink,
2511            className: "dataviews-view-table__cell-content-wrapper dataviews-column-primary__media",
2512            "aria-label": isItemClickable2(item) && (!!onClickItem || !!renderItemLink) && !!titleField ? titleField.getValue?.({ item }) : void 0,
2513            children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2514              mediaField.render,
2515              {
2516                item,
2517                field: mediaField,
2518                config: { sizes: "32px" }
2519              }
2520            )
2521          }
2522        ),
2523        /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
2524          import_components5.__experimentalVStack,
2525          {
2526            spacing: 0,
2527            alignment: "flex-start",
2528            className: "dataviews-view-table__primary-column-content",
2529            children: [
2530              titleField && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
2531                ItemClickWrapper,
2532                {
2533                  item,
2534                  isItemClickable: isItemClickable2,
2535                  onClickItem,
2536                  renderItemLink,
2537                  className: "dataviews-view-table__cell-content-wrapper dataviews-title-field",
2538                  children: [
2539                    level !== void 0 && level > 0 && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: "dataviews-view-table__level", children: [
2540                      "\u2014".repeat(level),
2541                      "\xA0"
2542                    ] }),
2543                    /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(titleField.render, { item, field: titleField })
2544                  ]
2545                }
2546              ),
2547              descriptionField2 && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2548                descriptionField2.render,
2549                {
2550                  item,
2551                  field: descriptionField2
2552                }
2553              )
2554            ]
2555          }
2556        )
2557      ] });
2558    }
2559    var column_primary_default = ColumnPrimary;
2560  
2561    // packages/dataviews/build-module/dataviews-layouts/table/use-is-horizontal-scroll-end.js
2562    var import_compose3 = __toESM(require_compose());
2563    var import_element7 = __toESM(require_element());
2564    var import_i18n12 = __toESM(require_i18n());
2565    var isScrolledToEnd = (element) => {
2566      if ((0, import_i18n12.isRTL)()) {
2567        const scrollLeft = Math.abs(element.scrollLeft);
2568        return scrollLeft <= 1;
2569      }
2570      return element.scrollLeft + element.clientWidth >= element.scrollWidth - 1;
2571    };
2572    function useIsHorizontalScrollEnd({
2573      scrollContainerRef,
2574      enabled = false
2575    }) {
2576      const [isHorizontalScrollEnd, setIsHorizontalScrollEnd] = (0, import_element7.useState)(false);
2577      const handleIsHorizontalScrollEnd = (0, import_compose3.useDebounce)(
2578        (0, import_element7.useCallback)(() => {
2579          const scrollContainer = scrollContainerRef.current;
2580          if (scrollContainer) {
2581            setIsHorizontalScrollEnd(isScrolledToEnd(scrollContainer));
2582          }
2583        }, [scrollContainerRef, setIsHorizontalScrollEnd]),
2584        200
2585      );
2586      (0, import_element7.useEffect)(() => {
2587        if (typeof window === "undefined" || !enabled || !scrollContainerRef.current) {
2588          return () => {
2589          };
2590        }
2591        handleIsHorizontalScrollEnd();
2592        scrollContainerRef.current.addEventListener(
2593          "scroll",
2594          handleIsHorizontalScrollEnd
2595        );
2596        window.addEventListener("resize", handleIsHorizontalScrollEnd);
2597        return () => {
2598          scrollContainerRef.current?.removeEventListener(
2599            "scroll",
2600            handleIsHorizontalScrollEnd
2601          );
2602          window.removeEventListener("resize", handleIsHorizontalScrollEnd);
2603        };
2604      }, [scrollContainerRef, enabled]);
2605      return isHorizontalScrollEnd;
2606    }
2607  
2608    // packages/dataviews/build-module/dataviews-layouts/utils/get-data-by-group.js
2609    function getDataByGroup(data, groupByField) {
2610      return data.reduce((groups, item) => {
2611        const groupName = groupByField.getValue({ item });
2612        if (!groups.has(groupName)) {
2613          groups.set(groupName, []);
2614        }
2615        groups.get(groupName)?.push(item);
2616        return groups;
2617      }, /* @__PURE__ */ new Map());
2618    }
2619  
2620    // packages/dataviews/build-module/components/dataviews-view-config/properties-section.js
2621    var import_components6 = __toESM(require_components());
2622    var import_i18n13 = __toESM(require_i18n());
2623    var import_element8 = __toESM(require_element());
2624    var import_jsx_runtime35 = __toESM(require_jsx_runtime());
2625    function FieldItem({
2626      field,
2627      isVisible: isVisible2,
2628      onToggleVisibility
2629    }) {
2630      return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_components6.__experimentalItem, { onClick: field.enableHiding ? onToggleVisibility : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_components6.__experimentalHStack, { expanded: true, justify: "flex-start", alignment: "center", children: [
2631        /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { style: { height: 24, width: 24 }, children: isVisible2 && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_components6.Icon, { icon: check_default }) }),
2632        /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "dataviews-view-config__label", children: field.label })
2633      ] }) });
2634    }
2635    function isDefined(item) {
2636      return !!item;
2637    }
2638    function PropertiesSection({
2639      showLabel = true
2640    }) {
2641      const { view, fields, onChangeView } = (0, import_element8.useContext)(dataviews_context_default);
2642      const regularFields = getHideableFields(view, fields);
2643      if (!regularFields?.length) {
2644        return null;
2645      }
2646      const titleField = fields.find((f2) => f2.id === view.titleField);
2647      const previewField = fields.find((f2) => f2.id === view.mediaField);
2648      const descriptionField2 = fields.find(
2649        (f2) => f2.id === view.descriptionField
2650      );
2651      const lockedFields = [
2652        {
2653          field: titleField,
2654          isVisibleFlag: "showTitle"
2655        },
2656        {
2657          field: previewField,
2658          isVisibleFlag: "showMedia"
2659        },
2660        {
2661          field: descriptionField2,
2662          isVisibleFlag: "showDescription"
2663        }
2664      ].filter(({ field }) => isDefined(field));
2665      const visibleFieldIds = view.fields ?? [];
2666      const visibleRegularFieldsCount = regularFields.filter(
2667        (f2) => visibleFieldIds.includes(f2.id)
2668      ).length;
2669      let visibleLockedFields = lockedFields.filter(
2670        ({ field, isVisibleFlag }) => (
2671          // @ts-expect-error
2672          isDefined(field) && (view[isVisibleFlag] ?? true)
2673        )
2674      );
2675      const totalVisibleFields = visibleLockedFields.length + visibleRegularFieldsCount;
2676      if (totalVisibleFields === 1) {
2677        if (visibleLockedFields.length === 1) {
2678          visibleLockedFields = visibleLockedFields.map((locked) => ({
2679            ...locked,
2680            field: { ...locked.field, enableHiding: false }
2681          }));
2682        }
2683      }
2684      const hiddenLockedFields = lockedFields.filter(
2685        ({ field, isVisibleFlag }) => (
2686          // @ts-expect-error
2687          isDefined(field) && !(view[isVisibleFlag] ?? true)
2688        )
2689      );
2690      return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_components6.__experimentalVStack, { className: "dataviews-field-control", spacing: 0, children: [
2691        showLabel && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_components6.BaseControl.VisualLabel, { children: (0, import_i18n13.__)("Properties") }),
2692        /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_components6.__experimentalVStack, { className: "dataviews-view-config__properties", spacing: 0, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_components6.__experimentalItemGroup, { isBordered: true, isSeparated: true, size: "medium", children: [
2693          visibleLockedFields.map(({ field, isVisibleFlag }) => {
2694            return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2695              FieldItem,
2696              {
2697                field,
2698                isVisible: true,
2699                onToggleVisibility: () => {
2700                  onChangeView({
2701                    ...view,
2702                    [isVisibleFlag]: false
2703                  });
2704                }
2705              },
2706              field.id
2707            );
2708          }),
2709          hiddenLockedFields.map(({ field, isVisibleFlag }) => {
2710            return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2711              FieldItem,
2712              {
2713                field,
2714                isVisible: false,
2715                onToggleVisibility: () => {
2716                  onChangeView({
2717                    ...view,
2718                    [isVisibleFlag]: true
2719                  });
2720                }
2721              },
2722              field.id
2723            );
2724          }),
2725          regularFields.map((field) => {
2726            const isVisible2 = visibleFieldIds.includes(field.id);
2727            const isLastVisible = totalVisibleFields === 1 && isVisible2;
2728            const fieldToRender = isLastVisible ? { ...field, enableHiding: false } : field;
2729            return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2730              FieldItem,
2731              {
2732                field: fieldToRender,
2733                isVisible: isVisible2,
2734                onToggleVisibility: () => {
2735                  onChangeView({
2736                    ...view,
2737                    fields: isVisible2 ? visibleFieldIds.filter(
2738                      (fieldId) => fieldId !== field.id
2739                    ) : [...visibleFieldIds, field.id]
2740                  });
2741                }
2742              },
2743              field.id
2744            );
2745          })
2746        ] }) })
2747      ] });
2748    }
2749  
2750    // packages/dataviews/build-module/dataviews-layouts/table/index.js
2751    var import_jsx_runtime36 = __toESM(require_jsx_runtime());
2752    function TableColumnField({
2753      item,
2754      fields,
2755      column,
2756      align
2757    }) {
2758      const field = fields.find((f2) => f2.id === column);
2759      if (!field) {
2760        return null;
2761      }
2762      const className = clsx_default("dataviews-view-table__cell-content-wrapper", {
2763        "dataviews-view-table__cell-align-end": align === "end",
2764        "dataviews-view-table__cell-align-center": align === "center"
2765      });
2766      return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(field.render, { item, field }) });
2767    }
2768    function TableRow({
2769      hasBulkActions,
2770      item,
2771      level,
2772      actions,
2773      fields,
2774      id,
2775      view,
2776      titleField,
2777      mediaField,
2778      descriptionField: descriptionField2,
2779      selection,
2780      getItemId,
2781      isItemClickable: isItemClickable2,
2782      onClickItem,
2783      renderItemLink,
2784      onChangeSelection,
2785      isActionsColumnSticky,
2786      posinset
2787    }) {
2788      const { paginationInfo } = (0, import_element9.useContext)(dataviews_context_default);
2789      const hasPossibleBulkAction = useHasAPossibleBulkAction(actions, item);
2790      const isSelected2 = hasPossibleBulkAction && selection.includes(id);
2791      const {
2792        showTitle = true,
2793        showMedia = true,
2794        showDescription = true,
2795        infiniteScrollEnabled
2796      } = view;
2797      const isTouchDeviceRef = (0, import_element9.useRef)(false);
2798      const columns = view.fields ?? [];
2799      const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField2 && showDescription;
2800      return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
2801        "tr",
2802        {
2803          className: clsx_default("dataviews-view-table__row", {
2804            "is-selected": hasPossibleBulkAction && isSelected2,
2805            "has-bulk-actions": hasPossibleBulkAction
2806          }),
2807          onTouchStart: () => {
2808            isTouchDeviceRef.current = true;
2809          },
2810          "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0,
2811          "aria-posinset": posinset,
2812          role: infiniteScrollEnabled ? "article" : void 0,
2813          onMouseDown: (event) => {
2814            const isMetaClick = (0, import_keycodes.isAppleOS)() ? event.metaKey : event.ctrlKey;
2815            if (event.button === 0 && isMetaClick && window.navigator.userAgent.toLowerCase().includes("firefox")) {
2816              event?.preventDefault();
2817            }
2818          },
2819          onClick: (event) => {
2820            if (!hasPossibleBulkAction) {
2821              return;
2822            }
2823            const isModifierKeyPressed = (0, import_keycodes.isAppleOS)() ? event.metaKey : event.ctrlKey;
2824            if (isModifierKeyPressed && !isTouchDeviceRef.current && document.getSelection()?.type !== "Range") {
2825              onChangeSelection(
2826                selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id]
2827              );
2828            }
2829          },
2830          children: [
2831            hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("td", { className: "dataviews-view-table__checkbox-column", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "dataviews-view-table__cell-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2832              DataViewsSelectionCheckbox,
2833              {
2834                item,
2835                selection,
2836                onChangeSelection,
2837                getItemId,
2838                titleField,
2839                disabled: !hasPossibleBulkAction
2840              }
2841            ) }) }),
2842            hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2843              column_primary_default,
2844              {
2845                item,
2846                level,
2847                titleField: showTitle ? titleField : void 0,
2848                mediaField: showMedia ? mediaField : void 0,
2849                descriptionField: showDescription ? descriptionField2 : void 0,
2850                isItemClickable: isItemClickable2,
2851                onClickItem,
2852                renderItemLink
2853              }
2854            ) }),
2855            columns.map((column) => {
2856              const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {};
2857              return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2858                "td",
2859                {
2860                  style: {
2861                    width,
2862                    maxWidth,
2863                    minWidth
2864                  },
2865                  children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2866                    TableColumnField,
2867                    {
2868                      fields,
2869                      item,
2870                      column,
2871                      align
2872                    }
2873                  )
2874                },
2875                column
2876              );
2877            }),
2878            !!actions?.length && // Disable reason: we are not making the element interactive,
2879            // but preventing any click events from bubbling up to the
2880            // table row. This allows us to add a click handler to the row
2881            // itself (to toggle row selection) without erroneously
2882            // intercepting click events from ItemActions.
2883            /* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */
2884            /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2885              "td",
2886              {
2887                className: clsx_default("dataviews-view-table__actions-column", {
2888                  "dataviews-view-table__actions-column--sticky": true,
2889                  "dataviews-view-table__actions-column--stuck": isActionsColumnSticky
2890                }),
2891                onClick: (e2) => e2.stopPropagation(),
2892                children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ItemActions, { item, actions })
2893              }
2894            )
2895          ]
2896        }
2897      );
2898    }
2899    function ViewTable({
2900      actions,
2901      data,
2902      fields,
2903      getItemId,
2904      getItemLevel,
2905      isLoading = false,
2906      onChangeView,
2907      onChangeSelection,
2908      selection,
2909      setOpenedFilter,
2910      onClickItem,
2911      isItemClickable: isItemClickable2,
2912      renderItemLink,
2913      view,
2914      className,
2915      empty
2916    }) {
2917      const { containerRef } = (0, import_element9.useContext)(dataviews_context_default);
2918      const headerMenuRefs = (0, import_element9.useRef)(/* @__PURE__ */ new Map());
2919      const headerMenuToFocusRef = (0, import_element9.useRef)();
2920      const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, import_element9.useState)();
2921      const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data);
2922      const [contextMenuAnchor, setContextMenuAnchor] = (0, import_element9.useState)(null);
2923      (0, import_element9.useEffect)(() => {
2924        if (headerMenuToFocusRef.current) {
2925          headerMenuToFocusRef.current.focus();
2926          headerMenuToFocusRef.current = void 0;
2927        }
2928      });
2929      const tableNoticeId = (0, import_element9.useId)();
2930      const isHorizontalScrollEnd = useIsHorizontalScrollEnd({
2931        scrollContainerRef: containerRef,
2932        enabled: !!actions?.length
2933      });
2934      if (nextHeaderMenuToFocus) {
2935        headerMenuToFocusRef.current = nextHeaderMenuToFocus;
2936        setNextHeaderMenuToFocus(void 0);
2937        return;
2938      }
2939      const onHide = (field) => {
2940        const hidden = headerMenuRefs.current.get(field.id);
2941        const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : void 0;
2942        setNextHeaderMenuToFocus(fallback?.node);
2943      };
2944      const handleHeaderContextMenu = (event) => {
2945        event.preventDefault();
2946        event.stopPropagation();
2947        const virtualAnchor = {
2948          getBoundingClientRect: () => ({
2949            x: event.clientX,
2950            y: event.clientY,
2951            top: event.clientY,
2952            left: event.clientX,
2953            right: event.clientX,
2954            bottom: event.clientY,
2955            width: 0,
2956            height: 0,
2957            toJSON: () => ({})
2958          })
2959        };
2960        window.requestAnimationFrame(() => {
2961          setContextMenuAnchor(virtualAnchor);
2962        });
2963      };
2964      const hasData = !!data?.length;
2965      const titleField = fields.find((field) => field.id === view.titleField);
2966      const mediaField = fields.find((field) => field.id === view.mediaField);
2967      const descriptionField2 = fields.find(
2968        (field) => field.id === view.descriptionField
2969      );
2970      const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null;
2971      const dataByGroup = groupField ? getDataByGroup(data, groupField) : null;
2972      const { showTitle = true, showMedia = true, showDescription = true } = view;
2973      const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField2 && showDescription;
2974      const columns = view.fields ?? [];
2975      const headerMenuRef = (column, index) => (node) => {
2976        if (node) {
2977          headerMenuRefs.current.set(column, {
2978            node,
2979            fallback: columns[index > 0 ? index - 1 : 1]
2980          });
2981        } else {
2982          headerMenuRefs.current.delete(column);
2983        }
2984      };
2985      const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup;
2986      return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [
2987        /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
2988          "table",
2989          {
2990            className: clsx_default("dataviews-view-table", className, {
2991              [`has-$view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes(
2992                view.layout.density
2993              ),
2994              "has-bulk-actions": hasBulkActions
2995            }),
2996            "aria-busy": isLoading,
2997            "aria-describedby": tableNoticeId,
2998            role: isInfiniteScroll ? "feed" : void 0,
2999            children: [
3000              /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("colgroup", { children: [
3001                hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("col", { className: "dataviews-view-table__col-checkbox" }),
3002                hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("col", { className: "dataviews-view-table__col-first-data" }),
3003                columns.map((column, index) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3004                  "col",
3005                  {
3006                    className: clsx_default(
3007                      `dataviews-view-table__col-$column}`,
3008                      {
3009                        "dataviews-view-table__col-first-data": !hasPrimaryColumn && index === 0
3010                      }
3011                    )
3012                  },
3013                  `col-$column}`
3014                )),
3015                !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("col", { className: "dataviews-view-table__col-actions" })
3016              ] }),
3017              contextMenuAnchor && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3018                import_components7.Popover,
3019                {
3020                  anchor: contextMenuAnchor,
3021                  onClose: () => setContextMenuAnchor(null),
3022                  placement: "bottom-start",
3023                  children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(PropertiesSection, { showLabel: false })
3024                }
3025              ),
3026              /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("thead", { onContextMenu: handleHeaderContextMenu, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("tr", { className: "dataviews-view-table__row", children: [
3027                hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3028                  "th",
3029                  {
3030                    className: "dataviews-view-table__checkbox-column",
3031                    scope: "col",
3032                    onContextMenu: handleHeaderContextMenu,
3033                    children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3034                      BulkSelectionCheckbox,
3035                      {
3036                        selection,
3037                        onChangeSelection,
3038                        data,
3039                        actions,
3040                        getItemId
3041                      }
3042                    )
3043                  }
3044                ),
3045                hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("th", { scope: "col", children: titleField && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3046                  column_header_menu_default,
3047                  {
3048                    ref: headerMenuRef(
3049                      titleField.id,
3050                      0
3051                    ),
3052                    fieldId: titleField.id,
3053                    view,
3054                    fields,
3055                    onChangeView,
3056                    onHide,
3057                    setOpenedFilter,
3058                    canMove: false,
3059                    canInsertLeft: false,
3060                    canInsertRight: view.layout?.enableMoving ?? true
3061                  }
3062                ) }),
3063                columns.map((column, index) => {
3064                  const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {};
3065                  const canInsertOrMove = view.layout?.enableMoving ?? true;
3066                  return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3067                    "th",
3068                    {
3069                      style: {
3070                        width,
3071                        maxWidth,
3072                        minWidth,
3073                        textAlign: align
3074                      },
3075                      "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : void 0,
3076                      scope: "col",
3077                      children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3078                        column_header_menu_default,
3079                        {
3080                          ref: headerMenuRef(column, index),
3081                          fieldId: column,
3082                          view,
3083                          fields,
3084                          onChangeView,
3085                          onHide,
3086                          setOpenedFilter,
3087                          canMove: canInsertOrMove,
3088                          canInsertLeft: canInsertOrMove,
3089                          canInsertRight: canInsertOrMove
3090                        }
3091                      )
3092                    },
3093                    column
3094                  );
3095                }),
3096                !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3097                  "th",
3098                  {
3099                    className: clsx_default(
3100                      "dataviews-view-table__actions-column",
3101                      {
3102                        "dataviews-view-table__actions-column--sticky": true,
3103                        "dataviews-view-table__actions-column--stuck": !isHorizontalScrollEnd
3104                      }
3105                    ),
3106                    children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "dataviews-view-table-header", children: (0, import_i18n14.__)("Actions") })
3107                  }
3108                )
3109              ] }) }),
3110              hasData && groupField && dataByGroup ? Array.from(dataByGroup.entries()).map(
3111                ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("tbody", { children: [
3112                  /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("tr", { className: "dataviews-view-table__group-header-row", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3113                    "td",
3114                    {
3115                      colSpan: columns.length + (hasPrimaryColumn ? 1 : 0) + (hasBulkActions ? 1 : 0) + (actions?.length ? 1 : 0),
3116                      className: "dataviews-view-table__group-header-cell",
3117                      children: (0, import_i18n14.sprintf)(
3118                        // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022".
3119                        (0, import_i18n14.__)("%1$s: %2$s"),
3120                        groupField.label,
3121                        groupName
3122                      )
3123                    }
3124                  ) }),
3125                  groupItems.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3126                    TableRow,
3127                    {
3128                      item,
3129                      level: view.showLevels && typeof getItemLevel === "function" ? getItemLevel(item) : void 0,
3130                      hasBulkActions,
3131                      actions,
3132                      fields,
3133                      id: getItemId(item) || index.toString(),
3134                      view,
3135                      titleField,
3136                      mediaField,
3137                      descriptionField: descriptionField2,
3138                      selection,
3139                      getItemId,
3140                      onChangeSelection,
3141                      onClickItem,
3142                      renderItemLink,
3143                      isItemClickable: isItemClickable2,
3144                      isActionsColumnSticky: !isHorizontalScrollEnd
3145                    },
3146                    getItemId(item)
3147                  ))
3148                ] }, `group-$groupName}`)
3149              ) : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("tbody", { children: hasData && data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3150                TableRow,
3151                {
3152                  item,
3153                  level: view.showLevels && typeof getItemLevel === "function" ? getItemLevel(item) : void 0,
3154                  hasBulkActions,
3155                  actions,
3156                  fields,
3157                  id: getItemId(item) || index.toString(),
3158                  view,
3159                  titleField,
3160                  mediaField,
3161                  descriptionField: descriptionField2,
3162                  selection,
3163                  getItemId,
3164                  onChangeSelection,
3165                  onClickItem,
3166                  renderItemLink,
3167                  isItemClickable: isItemClickable2,
3168                  isActionsColumnSticky: !isHorizontalScrollEnd,
3169                  posinset: isInfiniteScroll ? index + 1 : void 0
3170                },
3171                getItemId(item)
3172              )) })
3173            ]
3174          }
3175        ),
3176        /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
3177          "div",
3178          {
3179            className: clsx_default({
3180              "dataviews-loading": isLoading,
3181              "dataviews-no-results": !hasData && !isLoading
3182            }),
3183            id: tableNoticeId,
3184            children: [
3185              !hasData && (isLoading ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components7.Spinner, {}) }) : empty),
3186              hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components7.Spinner, {}) })
3187            ]
3188          }
3189        )
3190      ] });
3191    }
3192    var table_default = ViewTable;
3193  
3194    // packages/dataviews/build-module/dataviews-layouts/grid/index.js
3195    var import_components10 = __toESM(require_components());
3196    var import_i18n17 = __toESM(require_i18n());
3197  
3198    // packages/dataviews/build-module/dataviews-layouts/grid/composite-grid.js
3199    var import_components9 = __toESM(require_components());
3200    var import_i18n16 = __toESM(require_i18n());
3201    var import_compose4 = __toESM(require_compose());
3202    var import_keycodes2 = __toESM(require_keycodes());
3203    var import_element11 = __toESM(require_element());
3204  
3205    // packages/dataviews/build-module/dataviews-layouts/grid/preview-size-picker.js
3206    var import_components8 = __toESM(require_components());
3207    var import_i18n15 = __toESM(require_i18n());
3208    var import_element10 = __toESM(require_element());
3209    var import_jsx_runtime37 = __toESM(require_jsx_runtime());
3210    var imageSizes = [
3211      {
3212        value: 120,
3213        breakpoint: 1
3214      },
3215      {
3216        value: 170,
3217        breakpoint: 1
3218      },
3219      {
3220        value: 230,
3221        breakpoint: 1
3222      },
3223      {
3224        value: 290,
3225        breakpoint: 1112
3226        // at minimum image width, 4 images display at this container size
3227      },
3228      {
3229        value: 350,
3230        breakpoint: 1636
3231        // at minimum image width, 6 images display at this container size
3232      },
3233      {
3234        value: 430,
3235        breakpoint: 588
3236        // at minimum image width, 2 images display at this container size
3237      }
3238    ];
3239    var DEFAULT_PREVIEW_SIZE = imageSizes[2].value;
3240    function useGridColumns() {
3241      const context = (0, import_element10.useContext)(dataviews_context_default);
3242      const view = context.view;
3243      return (0, import_element10.useMemo)(() => {
3244        const containerWidth = context.containerWidth;
3245        const gap = 32;
3246        const previewSize = view.layout?.previewSize ?? DEFAULT_PREVIEW_SIZE;
3247        const columns = Math.floor(
3248          (containerWidth + gap) / (previewSize + gap)
3249        );
3250        return Math.max(1, columns);
3251      }, [context.containerWidth, view.layout?.previewSize]);
3252    }
3253  
3254    // packages/dataviews/build-module/dataviews-layouts/grid/composite-grid.js
3255    var import_jsx_runtime38 = __toESM(require_jsx_runtime());
3256    var { Badge } = unlock(import_components9.privateApis);
3257    function chunk(array, size) {
3258      const chunks = [];
3259      for (let i2 = 0, j2 = array.length; i2 < j2; i2 += size) {
3260        chunks.push(array.slice(i2, i2 + size));
3261      }
3262      return chunks;
3263    }
3264    var GridItem = (0, import_element11.forwardRef)(function GridItem2({
3265      view,
3266      selection,
3267      onChangeSelection,
3268      onClickItem,
3269      isItemClickable: isItemClickable2,
3270      renderItemLink,
3271      getItemId,
3272      item,
3273      actions,
3274      mediaField,
3275      titleField,
3276      descriptionField: descriptionField2,
3277      regularFields,
3278      badgeFields,
3279      hasBulkActions,
3280      config,
3281      ...props
3282    }, ref) {
3283      const { showTitle = true, showMedia = true, showDescription = true } = view;
3284      const hasBulkAction = useHasAPossibleBulkAction(actions, item);
3285      const id = getItemId(item);
3286      const instanceId = (0, import_compose4.useInstanceId)(GridItem2);
3287      const isSelected2 = selection.includes(id);
3288      const renderedMediaField = mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3289        mediaField.render,
3290        {
3291          item,
3292          field: mediaField,
3293          config
3294        }
3295      ) : null;
3296      const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(titleField.render, { item, field: titleField }) : null;
3297      const shouldRenderMedia = showMedia && renderedMediaField;
3298      let mediaA11yProps;
3299      let titleA11yProps;
3300      if (isItemClickable2(item) && onClickItem) {
3301        if (renderedTitleField) {
3302          mediaA11yProps = {
3303            "aria-labelledby": `dataviews-view-grid__title-field-$instanceId}`
3304          };
3305          titleA11yProps = {
3306            id: `dataviews-view-grid__title-field-$instanceId}`
3307          };
3308        } else {
3309          mediaA11yProps = {
3310            "aria-label": (0, import_i18n16.__)("Navigate to item")
3311          };
3312        }
3313      }
3314      return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
3315        import_components9.__experimentalVStack,
3316        {
3317          ...props,
3318          ref,
3319          spacing: 0,
3320          className: clsx_default(
3321            props.className,
3322            "dataviews-view-grid__row__gridcell",
3323            "dataviews-view-grid__card",
3324            {
3325              "is-selected": hasBulkAction && isSelected2
3326            }
3327          ),
3328          onClickCapture: (event) => {
3329            props.onClickCapture?.(event);
3330            if ((0, import_keycodes2.isAppleOS)() ? event.metaKey : event.ctrlKey) {
3331              event.stopPropagation();
3332              event.preventDefault();
3333              if (!hasBulkAction) {
3334                return;
3335              }
3336              onChangeSelection(
3337                selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id]
3338              );
3339            }
3340          },
3341          children: [
3342            shouldRenderMedia && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3343              ItemClickWrapper,
3344              {
3345                item,
3346                isItemClickable: isItemClickable2,
3347                onClickItem,
3348                renderItemLink,
3349                className: "dataviews-view-grid__media",
3350                ...mediaA11yProps,
3351                children: renderedMediaField
3352              }
3353            ),
3354            hasBulkActions && shouldRenderMedia && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3355              DataViewsSelectionCheckbox,
3356              {
3357                item,
3358                selection,
3359                onChangeSelection,
3360                getItemId,
3361                titleField,
3362                disabled: !hasBulkAction
3363              }
3364            ),
3365            !showTitle && shouldRenderMedia && !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "dataviews-view-grid__media-actions", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ItemActions, { item, actions, isCompact: true }) }),
3366            showTitle && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
3367              import_components9.__experimentalHStack,
3368              {
3369                justify: "space-between",
3370                className: "dataviews-view-grid__title-actions",
3371                children: [
3372                  /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3373                    ItemClickWrapper,
3374                    {
3375                      item,
3376                      isItemClickable: isItemClickable2,
3377                      onClickItem,
3378                      renderItemLink,
3379                      className: "dataviews-view-grid__title-field dataviews-title-field",
3380                      ...titleA11yProps,
3381                      children: renderedTitleField
3382                    }
3383                  ),
3384                  !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3385                    ItemActions,
3386                    {
3387                      item,
3388                      actions,
3389                      isCompact: true
3390                    }
3391                  )
3392                ]
3393              }
3394            ),
3395            /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_components9.__experimentalVStack, { spacing: 1, children: [
3396              showDescription && descriptionField2?.render && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3397                descriptionField2.render,
3398                {
3399                  item,
3400                  field: descriptionField2
3401                }
3402              ),
3403              !!badgeFields?.length && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3404                import_components9.__experimentalHStack,
3405                {
3406                  className: "dataviews-view-grid__badge-fields",
3407                  spacing: 2,
3408                  wrap: true,
3409                  alignment: "top",
3410                  justify: "flex-start",
3411                  children: badgeFields.map((field) => {
3412                    return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3413                      Badge,
3414                      {
3415                        className: "dataviews-view-grid__field-value",
3416                        children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3417                          field.render,
3418                          {
3419                            item,
3420                            field
3421                          }
3422                        )
3423                      },
3424                      field.id
3425                    );
3426                  })
3427                }
3428              ),
3429              !!regularFields?.length && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3430                import_components9.__experimentalVStack,
3431                {
3432                  className: "dataviews-view-grid__fields",
3433                  spacing: 1,
3434                  children: regularFields.map((field) => {
3435                    return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3436                      import_components9.Flex,
3437                      {
3438                        className: "dataviews-view-grid__field",
3439                        gap: 1,
3440                        justify: "flex-start",
3441                        expanded: true,
3442                        style: { height: "auto" },
3443                        direction: "row",
3444                        children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
3445                          /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_components9.Tooltip, { text: field.label, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_components9.FlexItem, { className: "dataviews-view-grid__field-name", children: field.header }) }),
3446                          /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3447                            import_components9.FlexItem,
3448                            {
3449                              className: "dataviews-view-grid__field-value",
3450                              style: { maxHeight: "none" },
3451                              children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3452                                field.render,
3453                                {
3454                                  item,
3455                                  field
3456                                }
3457                              )
3458                            }
3459                          )
3460                        ] })
3461                      },
3462                      field.id
3463                    );
3464                  })
3465                }
3466              )
3467            ] })
3468          ]
3469        }
3470      );
3471    });
3472    function CompositeGrid({
3473      data,
3474      isInfiniteScroll,
3475      className,
3476      isLoading,
3477      view,
3478      fields,
3479      selection,
3480      onChangeSelection,
3481      onClickItem,
3482      isItemClickable: isItemClickable2,
3483      renderItemLink,
3484      getItemId,
3485      actions
3486    }) {
3487      const { paginationInfo, resizeObserverRef } = (0, import_element11.useContext)(dataviews_context_default);
3488      const gridColumns = useGridColumns();
3489      const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data);
3490      const titleField = fields.find(
3491        (field) => field.id === view?.titleField
3492      );
3493      const mediaField = fields.find(
3494        (field) => field.id === view?.mediaField
3495      );
3496      const descriptionField2 = fields.find(
3497        (field) => field.id === view?.descriptionField
3498      );
3499      const otherFields = view.fields ?? [];
3500      const { regularFields, badgeFields } = otherFields.reduce(
3501        (accumulator, fieldId) => {
3502          const field = fields.find((f2) => f2.id === fieldId);
3503          if (!field) {
3504            return accumulator;
3505          }
3506          const key = view.layout?.badgeFields?.includes(fieldId) ? "badgeFields" : "regularFields";
3507          accumulator[key].push(field);
3508          return accumulator;
3509        },
3510        { regularFields: [], badgeFields: [] }
3511      );
3512      const size = "900px";
3513      const totalRows = Math.ceil(data.length / gridColumns);
3514      return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3515        import_components9.Composite,
3516        {
3517          role: isInfiniteScroll ? "feed" : "grid",
3518          className: clsx_default("dataviews-view-grid", className),
3519          focusWrap: true,
3520          "aria-busy": isLoading,
3521          "aria-rowcount": isInfiniteScroll ? void 0 : totalRows,
3522          ref: resizeObserverRef,
3523          children: chunk(data, gridColumns).map((row, i2) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3524            import_components9.Composite.Row,
3525            {
3526              render: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3527                "div",
3528                {
3529                  role: "row",
3530                  "aria-rowindex": i2 + 1,
3531                  "aria-label": (0, import_i18n16.sprintf)(
3532                    /* translators: %d: The row number in the grid */
3533                    (0, import_i18n16.__)("Row %d"),
3534                    i2 + 1
3535                  ),
3536                  className: "dataviews-view-grid__row",
3537                  style: {
3538                    gridTemplateColumns: `repeat( $gridColumns}, minmax(0, 1fr) )`
3539                  }
3540                }
3541              ),
3542              children: row.map((item, indexInRow) => {
3543                const index = i2 * gridColumns + indexInRow;
3544                return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3545                  import_components9.Composite.Item,
3546                  {
3547                    render: (props) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3548                      GridItem,
3549                      {
3550                        ...props,
3551                        role: isInfiniteScroll ? "article" : "gridcell",
3552                        "aria-setsize": isInfiniteScroll ? paginationInfo.totalItems : void 0,
3553                        "aria-posinset": isInfiniteScroll ? index + 1 : void 0,
3554                        view,
3555                        selection,
3556                        onChangeSelection,
3557                        onClickItem,
3558                        isItemClickable: isItemClickable2,
3559                        renderItemLink,
3560                        getItemId,
3561                        item,
3562                        actions,
3563                        mediaField,
3564                        titleField,
3565                        descriptionField: descriptionField2,
3566                        regularFields,
3567                        badgeFields,
3568                        hasBulkActions,
3569                        config: {
3570                          sizes: size
3571                        }
3572                      }
3573                    )
3574                  },
3575                  getItemId(item)
3576                );
3577              })
3578            },
3579            i2
3580          ))
3581        }
3582      );
3583    }
3584  
3585    // packages/dataviews/build-module/dataviews-layouts/grid/index.js
3586    var import_jsx_runtime39 = __toESM(require_jsx_runtime());
3587    function ViewGrid({
3588      actions,
3589      data,
3590      fields,
3591      getItemId,
3592      isLoading,
3593      onChangeSelection,
3594      onClickItem,
3595      isItemClickable: isItemClickable2,
3596      renderItemLink,
3597      selection,
3598      view,
3599      className,
3600      empty
3601    }) {
3602      const hasData = !!data?.length;
3603      const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null;
3604      const dataByGroup = groupField ? getDataByGroup(data, groupField) : null;
3605      const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup;
3606      const gridProps = {
3607        className,
3608        isLoading,
3609        view,
3610        fields,
3611        selection,
3612        onChangeSelection,
3613        onClickItem,
3614        isItemClickable: isItemClickable2,
3615        renderItemLink,
3616        getItemId,
3617        actions
3618      };
3619      return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment, {
3620        // Render multiple groups.
3621        children: [
3622          hasData && groupField && dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_components10.__experimentalVStack, { spacing: 4, children: Array.from(dataByGroup.entries()).map(
3623            ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_components10.__experimentalVStack, { spacing: 2, children: [
3624              /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("h3", { className: "dataviews-view-grid__group-header", children: (0, import_i18n17.sprintf)(
3625                // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022".
3626                (0, import_i18n17.__)("%1$s: %2$s"),
3627                groupField.label,
3628                groupName
3629              ) }),
3630              /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3631                CompositeGrid,
3632                {
3633                  ...gridProps,
3634                  data: groupItems,
3635                  isInfiniteScroll: false
3636                }
3637              )
3638            ] }, groupName)
3639          ) }),
3640          // Render a single grid with all data.
3641          hasData && !dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3642            CompositeGrid,
3643            {
3644              ...gridProps,
3645              data,
3646              isInfiniteScroll: !!isInfiniteScroll
3647            }
3648          ),
3649          // Render empty state.
3650          !hasData && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3651            "div",
3652            {
3653              className: clsx_default({
3654                "dataviews-loading": isLoading,
3655                "dataviews-no-results": !isLoading
3656              }),
3657              children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_components10.Spinner, {}) }) : empty
3658            }
3659          ),
3660          hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_components10.Spinner, {}) })
3661        ]
3662      });
3663    }
3664    var grid_default = ViewGrid;
3665  
3666    // packages/dataviews/build-module/dataviews-layouts/list/index.js
3667    var import_compose5 = __toESM(require_compose());
3668    var import_components11 = __toESM(require_components());
3669    var import_element12 = __toESM(require_element());
3670    var import_i18n18 = __toESM(require_i18n());
3671    var import_data3 = __toESM(require_data());
3672    var import_jsx_runtime40 = __toESM(require_jsx_runtime());
3673    var { Menu: Menu3 } = unlock(import_components11.privateApis);
3674    function generateItemWrapperCompositeId(idPrefix) {
3675      return `$idPrefix}-item-wrapper`;
3676    }
3677    function generatePrimaryActionCompositeId(idPrefix, primaryActionId) {
3678      return `$idPrefix}-primary-action-$primaryActionId}`;
3679    }
3680    function generateDropdownTriggerCompositeId(idPrefix) {
3681      return `$idPrefix}-dropdown`;
3682    }
3683    function PrimaryActionGridCell({
3684      idPrefix,
3685      primaryAction,
3686      item
3687    }) {
3688      const registry = (0, import_data3.useRegistry)();
3689      const [isModalOpen, setIsModalOpen] = (0, import_element12.useState)(false);
3690      const compositeItemId = generatePrimaryActionCompositeId(
3691        idPrefix,
3692        primaryAction.id
3693      );
3694      const label = typeof primaryAction.label === "string" ? primaryAction.label : primaryAction.label([item]);
3695      return "RenderModal" in primaryAction ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3696        import_components11.Composite.Item,
3697        {
3698          id: compositeItemId,
3699          render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3700            import_components11.Button,
3701            {
3702              disabled: !!primaryAction.disabled,
3703              accessibleWhenDisabled: true,
3704              text: label,
3705              size: "small",
3706              onClick: () => setIsModalOpen(true)
3707            }
3708          ),
3709          children: isModalOpen && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3710            ActionModal,
3711            {
3712              action: primaryAction,
3713              items: [item],
3714              closeModal: () => setIsModalOpen(false)
3715            }
3716          )
3717        }
3718      ) }, primaryAction.id) : /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3719        import_components11.Composite.Item,
3720        {
3721          id: compositeItemId,
3722          render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3723            import_components11.Button,
3724            {
3725              disabled: !!primaryAction.disabled,
3726              accessibleWhenDisabled: true,
3727              size: "small",
3728              onClick: () => {
3729                primaryAction.callback([item], { registry });
3730              },
3731              children: label
3732            }
3733          )
3734        }
3735      ) }, primaryAction.id);
3736    }
3737    function ListItem({
3738      view,
3739      actions,
3740      idPrefix,
3741      isSelected: isSelected2,
3742      item,
3743      titleField,
3744      mediaField,
3745      descriptionField: descriptionField2,
3746      onSelect,
3747      otherFields,
3748      onDropdownTriggerKeyDown,
3749      posinset
3750    }) {
3751      const {
3752        showTitle = true,
3753        showMedia = true,
3754        showDescription = true,
3755        infiniteScrollEnabled
3756      } = view;
3757      const itemRef = (0, import_element12.useRef)(null);
3758      const labelId = `$idPrefix}-label`;
3759      const descriptionId = `$idPrefix}-description`;
3760      const registry = (0, import_data3.useRegistry)();
3761      const [isHovered, setIsHovered] = (0, import_element12.useState)(false);
3762      const [activeModalAction, setActiveModalAction] = (0, import_element12.useState)(
3763        null
3764      );
3765      const handleHover = ({ type }) => {
3766        const isHover = type === "mouseenter";
3767        setIsHovered(isHover);
3768      };
3769      const { paginationInfo } = (0, import_element12.useContext)(dataviews_context_default);
3770      (0, import_element12.useEffect)(() => {
3771        if (isSelected2) {
3772          itemRef.current?.scrollIntoView({
3773            behavior: "auto",
3774            block: "nearest",
3775            inline: "nearest"
3776          });
3777        }
3778      }, [isSelected2]);
3779      const { primaryAction, eligibleActions } = (0, import_element12.useMemo)(() => {
3780        const _eligibleActions = actions.filter(
3781          (action) => !action.isEligible || action.isEligible(item)
3782        );
3783        const _primaryActions = _eligibleActions.filter(
3784          (action) => action.isPrimary
3785        );
3786        return {
3787          primaryAction: _primaryActions[0],
3788          eligibleActions: _eligibleActions
3789        };
3790      }, [actions, item]);
3791      const hasOnlyOnePrimaryAction = primaryAction && actions.length === 1;
3792      const renderedMediaField = showMedia && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "dataviews-view-list__media-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3793        mediaField.render,
3794        {
3795          item,
3796          field: mediaField,
3797          config: { sizes: "52px" }
3798        }
3799      ) }) : null;
3800      const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(titleField.render, { item, field: titleField }) : null;
3801      const usedActions = eligibleActions?.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_components11.__experimentalHStack, { spacing: 3, className: "dataviews-view-list__item-actions", children: [
3802        primaryAction && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3803          PrimaryActionGridCell,
3804          {
3805            idPrefix,
3806            primaryAction,
3807            item
3808          }
3809        ),
3810        !hasOnlyOnePrimaryAction && /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { role: "gridcell", children: [
3811          /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(Menu3, { placement: "bottom-end", children: [
3812            /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3813              Menu3.TriggerButton,
3814              {
3815                render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3816                  import_components11.Composite.Item,
3817                  {
3818                    id: generateDropdownTriggerCompositeId(
3819                      idPrefix
3820                    ),
3821                    render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3822                      import_components11.Button,
3823                      {
3824                        size: "small",
3825                        icon: more_vertical_default,
3826                        label: (0, import_i18n18.__)("Actions"),
3827                        accessibleWhenDisabled: true,
3828                        disabled: !actions.length,
3829                        onKeyDown: onDropdownTriggerKeyDown
3830                      }
3831                    )
3832                  }
3833                )
3834              }
3835            ),
3836            /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Menu3.Popover, { children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3837              ActionsMenuGroup,
3838              {
3839                actions: eligibleActions,
3840                item,
3841                registry,
3842                setActiveModalAction
3843              }
3844            ) })
3845          ] }),
3846          !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3847            ActionModal,
3848            {
3849              action: activeModalAction,
3850              items: [item],
3851              closeModal: () => setActiveModalAction(null)
3852            }
3853          )
3854        ] })
3855      ] });
3856      return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3857        import_components11.Composite.Row,
3858        {
3859          ref: itemRef,
3860          render: (
3861            /* aria-posinset breaks Composite.Row if passed to it directly. */
3862            /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3863              "div",
3864              {
3865                "aria-posinset": posinset,
3866                "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0
3867              }
3868            )
3869          ),
3870          role: infiniteScrollEnabled ? "article" : "row",
3871          className: clsx_default({
3872            "is-selected": isSelected2,
3873            "is-hovered": isHovered
3874          }),
3875          onMouseEnter: handleHover,
3876          onMouseLeave: handleHover,
3877          children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_components11.__experimentalHStack, { className: "dataviews-view-list__item-wrapper", spacing: 0, children: [
3878            /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3879              import_components11.Composite.Item,
3880              {
3881                id: generateItemWrapperCompositeId(idPrefix),
3882                "aria-pressed": isSelected2,
3883                "aria-labelledby": labelId,
3884                "aria-describedby": descriptionId,
3885                className: "dataviews-view-list__item",
3886                onClick: () => onSelect(item)
3887              }
3888            ) }),
3889            /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_components11.__experimentalHStack, { spacing: 3, justify: "start", alignment: "flex-start", children: [
3890              renderedMediaField,
3891              /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
3892                import_components11.__experimentalVStack,
3893                {
3894                  spacing: 1,
3895                  className: "dataviews-view-list__field-wrapper",
3896                  children: [
3897                    /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_components11.__experimentalHStack, { spacing: 0, children: [
3898                      /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3899                        "div",
3900                        {
3901                          className: "dataviews-title-field",
3902                          id: labelId,
3903                          children: renderedTitleField
3904                        }
3905                      ),
3906                      usedActions
3907                    ] }),
3908                    showDescription && descriptionField2?.render && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "dataviews-view-list__field", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3909                      descriptionField2.render,
3910                      {
3911                        item,
3912                        field: descriptionField2
3913                      }
3914                    ) }),
3915                    /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3916                      "div",
3917                      {
3918                        className: "dataviews-view-list__fields",
3919                        id: descriptionId,
3920                        children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
3921                          "div",
3922                          {
3923                            className: "dataviews-view-list__field",
3924                            children: [
3925                              /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3926                                import_components11.VisuallyHidden,
3927                                {
3928                                  as: "span",
3929                                  className: "dataviews-view-list__field-label",
3930                                  children: field.label
3931                                }
3932                              ),
3933                              /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "dataviews-view-list__field-value", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3934                                field.render,
3935                                {
3936                                  item,
3937                                  field
3938                                }
3939                              ) })
3940                            ]
3941                          },
3942                          field.id
3943                        ))
3944                      }
3945                    )
3946                  ]
3947                }
3948              )
3949            ] })
3950          ] })
3951        }
3952      );
3953    }
3954    function isDefined2(item) {
3955      return !!item;
3956    }
3957    function ViewList(props) {
3958      const {
3959        actions,
3960        data,
3961        fields,
3962        getItemId,
3963        isLoading,
3964        onChangeSelection,
3965        selection,
3966        view,
3967        className,
3968        empty
3969      } = props;
3970      const baseId = (0, import_compose5.useInstanceId)(ViewList, "view-list");
3971      const selectedItem = data?.findLast(
3972        (item) => selection.includes(getItemId(item))
3973      );
3974      const titleField = fields.find((field) => field.id === view.titleField);
3975      const mediaField = fields.find((field) => field.id === view.mediaField);
3976      const descriptionField2 = fields.find(
3977        (field) => field.id === view.descriptionField
3978      );
3979      const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined2);
3980      const onSelect = (item) => onChangeSelection([getItemId(item)]);
3981      const generateCompositeItemIdPrefix = (0, import_element12.useCallback)(
3982        (item) => `$baseId}-$getItemId(item)}`,
3983        [baseId, getItemId]
3984      );
3985      const isActiveCompositeItem = (0, import_element12.useCallback)(
3986        (item, idToCheck) => {
3987          return idToCheck.startsWith(
3988            generateCompositeItemIdPrefix(item)
3989          );
3990        },
3991        [generateCompositeItemIdPrefix]
3992      );
3993      const [activeCompositeId, setActiveCompositeId] = (0, import_element12.useState)(void 0);
3994      (0, import_element12.useEffect)(() => {
3995        if (selectedItem) {
3996          setActiveCompositeId(
3997            generateItemWrapperCompositeId(
3998              generateCompositeItemIdPrefix(selectedItem)
3999            )
4000          );
4001        }
4002      }, [selectedItem, generateCompositeItemIdPrefix]);
4003      const activeItemIndex = data.findIndex(
4004        (item) => isActiveCompositeItem(item, activeCompositeId ?? "")
4005      );
4006      const previousActiveItemIndex = (0, import_compose5.usePrevious)(activeItemIndex);
4007      const isActiveIdInList = activeItemIndex !== -1;
4008      const selectCompositeItem = (0, import_element12.useCallback)(
4009        (targetIndex, generateCompositeId) => {
4010          const clampedIndex = Math.min(
4011            data.length - 1,
4012            Math.max(0, targetIndex)
4013          );
4014          if (!data[clampedIndex]) {
4015            return;
4016          }
4017          const itemIdPrefix = generateCompositeItemIdPrefix(
4018            data[clampedIndex]
4019          );
4020          const targetCompositeItemId = generateCompositeId(itemIdPrefix);
4021          setActiveCompositeId(targetCompositeItemId);
4022          document.getElementById(targetCompositeItemId)?.focus();
4023        },
4024        [data, generateCompositeItemIdPrefix]
4025      );
4026      (0, import_element12.useEffect)(() => {
4027        const wasActiveIdInList = previousActiveItemIndex !== void 0 && previousActiveItemIndex !== -1;
4028        if (!isActiveIdInList && wasActiveIdInList) {
4029          selectCompositeItem(
4030            previousActiveItemIndex,
4031            generateItemWrapperCompositeId
4032          );
4033        }
4034      }, [isActiveIdInList, selectCompositeItem, previousActiveItemIndex]);
4035      const onDropdownTriggerKeyDown = (0, import_element12.useCallback)(
4036        (event) => {
4037          if (event.key === "ArrowDown") {
4038            event.preventDefault();
4039            selectCompositeItem(
4040              activeItemIndex + 1,
4041              generateDropdownTriggerCompositeId
4042            );
4043          }
4044          if (event.key === "ArrowUp") {
4045            event.preventDefault();
4046            selectCompositeItem(
4047              activeItemIndex - 1,
4048              generateDropdownTriggerCompositeId
4049            );
4050          }
4051        },
4052        [selectCompositeItem, activeItemIndex]
4053      );
4054      const hasData = data?.length;
4055      if (!hasData) {
4056        return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4057          "div",
4058          {
4059            className: clsx_default({
4060              "dataviews-loading": isLoading,
4061              "dataviews-no-results": !hasData && !isLoading
4062            }),
4063            children: !hasData && (isLoading ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_components11.Spinner, {}) }) : empty)
4064          }
4065        );
4066      }
4067      const groupField = view.groupBy?.field ? fields.find((field) => field.id === view.groupBy?.field) : null;
4068      const dataByGroup = groupField ? getDataByGroup(data, groupField) : null;
4069      if (hasData && groupField && dataByGroup) {
4070        return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4071          import_components11.Composite,
4072          {
4073            id: `$baseId}`,
4074            render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", {}),
4075            className: "dataviews-view-list__group",
4076            role: "grid",
4077            activeId: activeCompositeId,
4078            setActiveId: setActiveCompositeId,
4079            children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4080              import_components11.__experimentalVStack,
4081              {
4082                spacing: 4,
4083                className: clsx_default("dataviews-view-list", className),
4084                children: Array.from(dataByGroup.entries()).map(
4085                  ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_components11.__experimentalVStack, { spacing: 2, children: [
4086                    /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("h3", { className: "dataviews-view-list__group-header", children: (0, import_i18n18.sprintf)(
4087                      // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022".
4088                      (0, import_i18n18.__)("%1$s: %2$s"),
4089                      groupField.label,
4090                      groupName
4091                    ) }),
4092                    groupItems.map((item) => {
4093                      const id = generateCompositeItemIdPrefix(item);
4094                      return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4095                        ListItem,
4096                        {
4097                          view,
4098                          idPrefix: id,
4099                          actions,
4100                          item,
4101                          isSelected: item === selectedItem,
4102                          onSelect,
4103                          mediaField,
4104                          titleField,
4105                          descriptionField: descriptionField2,
4106                          otherFields,
4107                          onDropdownTriggerKeyDown
4108                        },
4109                        id
4110                      );
4111                    })
4112                  ] }, groupName)
4113                )
4114              }
4115            )
4116          }
4117        );
4118      }
4119      return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_jsx_runtime40.Fragment, { children: [
4120        /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4121          import_components11.Composite,
4122          {
4123            id: baseId,
4124            render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", {}),
4125            className: clsx_default("dataviews-view-list", className),
4126            role: view.infiniteScrollEnabled ? "feed" : "grid",
4127            activeId: activeCompositeId,
4128            setActiveId: setActiveCompositeId,
4129            children: data.map((item, index) => {
4130              const id = generateCompositeItemIdPrefix(item);
4131              return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4132                ListItem,
4133                {
4134                  view,
4135                  idPrefix: id,
4136                  actions,
4137                  item,
4138                  isSelected: item === selectedItem,
4139                  onSelect,
4140                  mediaField,
4141                  titleField,
4142                  descriptionField: descriptionField2,
4143                  otherFields,
4144                  onDropdownTriggerKeyDown,
4145                  posinset: view.infiniteScrollEnabled ? index + 1 : void 0
4146                },
4147                id
4148              );
4149            })
4150          }
4151        ),
4152        hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_components11.Spinner, {}) })
4153      ] });
4154    }
4155  
4156    // packages/dataviews/build-module/dataviews-layouts/activity/index.js
4157    var import_components14 = __toESM(require_components());
4158  
4159    // packages/dataviews/build-module/dataviews-layouts/activity/activity-group.js
4160    var import_components12 = __toESM(require_components());
4161    var import_i18n19 = __toESM(require_i18n());
4162    var import_element13 = __toESM(require_element());
4163    var import_jsx_runtime41 = __toESM(require_jsx_runtime());
4164    function ActivityGroup({
4165      groupName,
4166      groupData,
4167      groupField,
4168      children
4169    }) {
4170      const groupHeader = (0, import_element13.createInterpolateElement)(
4171        // translators: %s: The label of the field e.g. "Status".
4172        (0, import_i18n19.sprintf)((0, import_i18n19.__)("%s: <groupName />"), groupField.label).trim(),
4173        {
4174          groupName: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
4175            groupField.render,
4176            {
4177              item: groupData[0],
4178              field: groupField
4179            }
4180          )
4181        }
4182      );
4183      return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
4184        import_components12.__experimentalVStack,
4185        {
4186          spacing: 0,
4187          className: "dataviews-view-activity__group",
4188          children: [
4189            /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("h3", { className: "dataviews-view-activity__group-header", children: groupHeader }),
4190            children
4191          ]
4192        },
4193        groupName
4194      );
4195    }
4196  
4197    // packages/dataviews/build-module/dataviews-layouts/activity/activity-item.js
4198    var import_components13 = __toESM(require_components());
4199    var import_element14 = __toESM(require_element());
4200    var import_data4 = __toESM(require_data());
4201    var import_jsx_runtime42 = __toESM(require_jsx_runtime());
4202    function ActivityItem(props) {
4203      const {
4204        view,
4205        actions,
4206        item,
4207        titleField,
4208        mediaField,
4209        descriptionField: descriptionField2,
4210        otherFields,
4211        posinset,
4212        onClickItem,
4213        renderItemLink,
4214        isItemClickable: isItemClickable2
4215      } = props;
4216      const {
4217        showTitle = true,
4218        showMedia = true,
4219        showDescription = true,
4220        infiniteScrollEnabled
4221      } = view;
4222      const itemRef = (0, import_element14.useRef)(null);
4223      const registry = (0, import_data4.useRegistry)();
4224      const { paginationInfo } = (0, import_element14.useContext)(dataviews_context_default);
4225      const { primaryActions, eligibleActions } = (0, import_element14.useMemo)(() => {
4226        const _eligibleActions = actions.filter(
4227          (action) => !action.isEligible || action.isEligible(item)
4228        );
4229        const _primaryActions = _eligibleActions.filter(
4230          (action) => action.isPrimary
4231        );
4232        return {
4233          primaryActions: _primaryActions,
4234          eligibleActions: _eligibleActions
4235        };
4236      }, [actions, item]);
4237      const density = view.layout?.density ?? "balanced";
4238      const mediaContent = showMedia && density !== "compact" && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4239        mediaField.render,
4240        {
4241          item,
4242          field: mediaField,
4243          config: {
4244            sizes: density === "comfortable" ? "32px" : "24px"
4245          }
4246        }
4247      ) : null;
4248      const renderedMediaField = /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "dataviews-view-activity__item-type-icon", children: mediaContent || /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4249        "span",
4250        {
4251          className: "dataviews-view-activity__item-bullet",
4252          "aria-hidden": "true"
4253        }
4254      ) });
4255      const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(titleField.render, { item, field: titleField }) : null;
4256      const verticalSpacing = (0, import_element14.useMemo)(() => {
4257        switch (density) {
4258          case "comfortable":
4259            return "3";
4260          default:
4261            return "2";
4262        }
4263      }, [density]);
4264      return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4265        "div",
4266        {
4267          ref: itemRef,
4268          role: infiniteScrollEnabled ? "article" : void 0,
4269          "aria-posinset": posinset,
4270          "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0,
4271          className: clsx_default(
4272            "dataviews-view-activity__item",
4273            density === "compact" && "is-compact",
4274            density === "balanced" && "is-balanced",
4275            density === "comfortable" && "is-comfortable"
4276          ),
4277          children: /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_components13.__experimentalHStack, { spacing: 4, justify: "start", alignment: "flex-start", children: [
4278            /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4279              import_components13.__experimentalVStack,
4280              {
4281                spacing: 1,
4282                alignment: "center",
4283                className: "dataviews-view-activity__item-type",
4284                children: renderedMediaField
4285              }
4286            ),
4287            /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
4288              import_components13.__experimentalVStack,
4289              {
4290                spacing: verticalSpacing,
4291                alignment: "flex-start",
4292                className: "dataviews-view-activity__item-content",
4293                children: [
4294                  renderedTitleField && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4295                    ItemClickWrapper,
4296                    {
4297                      item,
4298                      isItemClickable: isItemClickable2,
4299                      onClickItem,
4300                      renderItemLink,
4301                      className: "dataviews-view-activity__item-title",
4302                      children: renderedTitleField
4303                    }
4304                  ),
4305                  showDescription && descriptionField2 && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "dataviews-view-activity__item-description", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4306                    descriptionField2.render,
4307                    {
4308                      item,
4309                      field: descriptionField2
4310                    }
4311                  ) }),
4312                  /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "dataviews-view-activity__item-fields", children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
4313                    "div",
4314                    {
4315                      className: "dataviews-view-activity__item-field",
4316                      children: [
4317                        /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4318                          import_components13.VisuallyHidden,
4319                          {
4320                            as: "span",
4321                            className: "dataviews-view-activity__item-field-label",
4322                            children: field.label
4323                          }
4324                        ),
4325                        /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "dataviews-view-activity__item-field-value", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4326                          field.render,
4327                          {
4328                            item,
4329                            field
4330                          }
4331                        ) })
4332                      ]
4333                    },
4334                    field.id
4335                  )) }),
4336                  !!primaryActions?.length && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4337                    PrimaryActions,
4338                    {
4339                      item,
4340                      actions: primaryActions,
4341                      registry,
4342                      buttonVariant: "secondary"
4343                    }
4344                  )
4345                ]
4346              }
4347            ),
4348            primaryActions.length < eligibleActions.length && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "dataviews-view-activity__item-actions", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4349              ItemActions,
4350              {
4351                item,
4352                actions: eligibleActions,
4353                isCompact: true
4354              }
4355            ) })
4356          ] })
4357        }
4358      );
4359    }
4360    var activity_item_default = ActivityItem;
4361  
4362    // packages/dataviews/build-module/dataviews-layouts/activity/activity-items.js
4363    var import_react = __toESM(require_react());
4364    function isDefined3(item) {
4365      return !!item;
4366    }
4367    function ActivityItems(props) {
4368      const { data, fields, getItemId, view } = props;
4369      const titleField = fields.find((field) => field.id === view.titleField);
4370      const mediaField = fields.find((field) => field.id === view.mediaField);
4371      const descriptionField2 = fields.find(
4372        (field) => field.id === view.descriptionField
4373      );
4374      const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined3);
4375      return data.map((item, index) => {
4376        return /* @__PURE__ */ (0, import_react.createElement)(
4377          activity_item_default,
4378          {
4379            ...props,
4380            key: getItemId(item),
4381            item,
4382            mediaField,
4383            titleField,
4384            descriptionField: descriptionField2,
4385            otherFields,
4386            posinset: view.infiniteScrollEnabled ? index + 1 : void 0
4387          }
4388        );
4389      });
4390    }
4391  
4392    // packages/dataviews/build-module/dataviews-layouts/activity/index.js
4393    var import_jsx_runtime43 = __toESM(require_jsx_runtime());
4394    function ViewActivity(props) {
4395      const { empty, data, fields, isLoading, view, className } = props;
4396      const hasData = data?.length;
4397      if (!hasData) {
4398        return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4399          "div",
4400          {
4401            className: clsx_default({
4402              "dataviews-loading": isLoading,
4403              "dataviews-no-results": !hasData && !isLoading
4404            }),
4405            children: !hasData && (isLoading ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_components14.Spinner, {}) }) : empty)
4406          }
4407        );
4408      }
4409      const wrapperClassName = clsx_default("dataviews-view-activity", className);
4410      const groupField = view.groupBy?.field ? fields.find((field) => field.id === view.groupBy?.field) : null;
4411      const dataByGroup = groupField ? getDataByGroup(data, groupField) : null;
4412      const groupedEntries = dataByGroup ? Array.from(dataByGroup.entries()) : [];
4413      if (hasData && groupField && dataByGroup) {
4414        return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_components14.__experimentalVStack, { spacing: 2, className: wrapperClassName, children: groupedEntries.map(
4415          ([groupName, groupData]) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4416            ActivityGroup,
4417            {
4418              groupName,
4419              groupData,
4420              groupField,
4421              children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4422                ActivityItems,
4423                {
4424                  ...props,
4425                  data: groupData
4426                }
4427              )
4428            },
4429            groupName
4430          )
4431        ) });
4432      }
4433      return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_jsx_runtime43.Fragment, { children: [
4434        /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4435          "div",
4436          {
4437            className: wrapperClassName,
4438            role: view.infiniteScrollEnabled ? "feed" : void 0,
4439            children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(ActivityItems, { ...props })
4440          }
4441        ),
4442        hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_components14.Spinner, {}) })
4443      ] });
4444    }
4445  
4446    // packages/dataviews/build-module/dataviews-layouts/picker-grid/index.js
4447    var import_components17 = __toESM(require_components());
4448    var import_i18n22 = __toESM(require_i18n());
4449    var import_compose6 = __toESM(require_compose());
4450    var import_element18 = __toESM(require_element());
4451  
4452    // packages/dataviews/build-module/components/dataviews-picker/footer.js
4453    var import_components16 = __toESM(require_components());
4454    var import_data5 = __toESM(require_data());
4455    var import_element16 = __toESM(require_element());
4456    var import_i18n21 = __toESM(require_i18n());
4457  
4458    // packages/dataviews/build-module/components/dataviews-pagination/index.js
4459    var import_components15 = __toESM(require_components());
4460    var import_element15 = __toESM(require_element());
4461    var import_i18n20 = __toESM(require_i18n());
4462    var import_jsx_runtime44 = __toESM(require_jsx_runtime());
4463    function DataViewsPagination() {
4464      const {
4465        view,
4466        onChangeView,
4467        paginationInfo: { totalItems = 0, totalPages }
4468      } = (0, import_element15.useContext)(dataviews_context_default);
4469      if (!totalItems || !totalPages || view.infiniteScrollEnabled) {
4470        return null;
4471      }
4472      const currentPage = view.page ?? 1;
4473      const pageSelectOptions = Array.from(Array(totalPages)).map(
4474        (_, i2) => {
4475          const page = i2 + 1;
4476          return {
4477            value: page.toString(),
4478            label: page.toString(),
4479            "aria-label": currentPage === page ? (0, import_i18n20.sprintf)(
4480              // translators: 1: current page number. 2: total number of pages.
4481              (0, import_i18n20.__)("Page %1$d of %2$d"),
4482              currentPage,
4483              totalPages
4484            ) : page.toString()
4485          };
4486        }
4487      );
4488      return !!totalItems && totalPages !== 1 && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
4489        import_components15.__experimentalHStack,
4490        {
4491          expanded: false,
4492          className: "dataviews-pagination",
4493          justify: "end",
4494          spacing: 6,
4495          children: [
4496            /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
4497              import_components15.__experimentalHStack,
4498              {
4499                justify: "flex-start",
4500                expanded: false,
4501                spacing: 1,
4502                className: "dataviews-pagination__page-select",
4503                children: (0, import_element15.createInterpolateElement)(
4504                  (0, import_i18n20.sprintf)(
4505                    // translators: 1: Current page number, 2: Total number of pages.
4506                    (0, import_i18n20._x)(
4507                      "<div>Page</div>%1$s<div>of %2$d</div>",
4508                      "paging"
4509                    ),
4510                    "<CurrentPage />",
4511                    totalPages
4512                  ),
4513                  {
4514                    div: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { "aria-hidden": true }),
4515                    CurrentPage: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
4516                      import_components15.SelectControl,
4517                      {
4518                        "aria-label": (0, import_i18n20.__)("Current page"),
4519                        value: currentPage.toString(),
4520                        options: pageSelectOptions,
4521                        onChange: (newValue) => {
4522                          onChangeView({
4523                            ...view,
4524                            page: +newValue
4525                          });
4526                        },
4527                        size: "small",
4528                        variant: "minimal"
4529                      }
4530                    )
4531                  }
4532                )
4533              }
4534            ),
4535            /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_components15.__experimentalHStack, { expanded: false, spacing: 1, children: [
4536              /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
4537                import_components15.Button,
4538                {
4539                  onClick: () => onChangeView({
4540                    ...view,
4541                    page: currentPage - 1
4542                  }),
4543                  disabled: currentPage === 1,
4544                  accessibleWhenDisabled: true,
4545                  label: (0, import_i18n20.__)("Previous page"),
4546                  icon: (0, import_i18n20.isRTL)() ? next_default : previous_default,
4547                  showTooltip: true,
4548                  size: "compact",
4549                  tooltipPosition: "top"
4550                }
4551              ),
4552              /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
4553                import_components15.Button,
4554                {
4555                  onClick: () => onChangeView({ ...view, page: currentPage + 1 }),
4556                  disabled: currentPage >= totalPages,
4557                  accessibleWhenDisabled: true,
4558                  label: (0, import_i18n20.__)("Next page"),
4559                  icon: (0, import_i18n20.isRTL)() ? previous_default : next_default,
4560                  showTooltip: true,
4561                  size: "compact",
4562                  tooltipPosition: "top"
4563                }
4564              )
4565            ] })
4566          ]
4567        }
4568      );
4569    }
4570    var dataviews_pagination_default = (0, import_element15.memo)(DataViewsPagination);
4571  
4572    // packages/dataviews/build-module/components/dataviews-picker/footer.js
4573    var import_jsx_runtime45 = __toESM(require_jsx_runtime());
4574    var EMPTY_ARRAY = [];
4575    function useIsMultiselectPicker(actions) {
4576      return (0, import_element16.useMemo)(() => {
4577        return actions?.every((action) => action.supportsBulk);
4578      }, [actions]);
4579    }
4580    function BulkSelectionCheckbox2({
4581      selection,
4582      selectedItems,
4583      onChangeSelection,
4584      data,
4585      getItemId
4586    }) {
4587      const areAllSelected = selectedItems.length === data.length;
4588      return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
4589        import_components16.CheckboxControl,
4590        {
4591          className: "dataviews-view-table-selection-checkbox",
4592          checked: areAllSelected,
4593          indeterminate: !areAllSelected && !!selectedItems.length,
4594          onChange: () => {
4595            if (areAllSelected) {
4596              onChangeSelection(
4597                selection.filter(
4598                  (id) => !data.some(
4599                    (item) => id === getItemId(item)
4600                  )
4601                )
4602              );
4603            } else {
4604              const selectionSet = /* @__PURE__ */ new Set([
4605                ...selection,
4606                ...data.map((item) => getItemId(item))
4607              ]);
4608              onChangeSelection(Array.from(selectionSet));
4609            }
4610          },
4611          "aria-label": areAllSelected ? (0, import_i18n21.__)("Deselect all") : (0, import_i18n21.__)("Select all")
4612        }
4613      );
4614    }
4615    function ActionButtons({
4616      actions,
4617      items,
4618      selection
4619    }) {
4620      const registry = (0, import_data5.useRegistry)();
4621      const [actionInProgress, setActionInProgress] = (0, import_element16.useState)(
4622        null
4623      );
4624      return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_components16.__experimentalHStack, { expanded: false, spacing: 1, children: actions.map((action) => {
4625        if (!("callback" in action)) {
4626          return null;
4627        }
4628        const { id, label, icon, isPrimary, callback } = action;
4629        const _label = typeof label === "string" ? label : label(items);
4630        const variant = isPrimary ? "primary" : "tertiary";
4631        const isInProgress = id === actionInProgress;
4632        return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
4633          import_components16.Button,
4634          {
4635            accessibleWhenDisabled: true,
4636            icon,
4637            disabled: isInProgress || !selection?.length,
4638            isBusy: isInProgress,
4639            onClick: async () => {
4640              setActionInProgress(id);
4641              await callback(items, {
4642                registry
4643              });
4644              setActionInProgress(null);
4645            },
4646            size: "compact",
4647            variant,
4648            children: _label
4649          },
4650          id
4651        );
4652      }) });
4653    }
4654    function DataViewsPickerFooter() {
4655      const {
4656        data,
4657        selection,
4658        onChangeSelection,
4659        getItemId,
4660        actions = EMPTY_ARRAY
4661      } = (0, import_element16.useContext)(dataviews_context_default);
4662      const selectionCount = selection.length;
4663      const isMultiselect = useIsMultiselectPicker(actions);
4664      const message2 = selectionCount > 0 ? (0, import_i18n21.sprintf)(
4665        /* translators: %d: number of items. */
4666        (0, import_i18n21._n)(
4667          "%d Item selected",
4668          "%d Items selected",
4669          selectionCount
4670        ),
4671        selectionCount
4672      ) : (0, import_i18n21.sprintf)(
4673        /* translators: %d: number of items. */
4674        (0, import_i18n21._n)("%d Item", "%d Items", data.length),
4675        data.length
4676      );
4677      const selectedItems = (0, import_element16.useMemo)(
4678        () => data.filter((item) => selection.includes(getItemId(item))),
4679        [selection, getItemId, data]
4680      );
4681      return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
4682        import_components16.__experimentalHStack,
4683        {
4684          expanded: false,
4685          justify: "space-between",
4686          className: "dataviews-footer",
4687          children: [
4688            /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
4689              import_components16.__experimentalHStack,
4690              {
4691                className: "dataviews-picker-footer__bulk-selection",
4692                expanded: false,
4693                spacing: 3,
4694                children: [
4695                  isMultiselect && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
4696                    BulkSelectionCheckbox2,
4697                    {
4698                      selection,
4699                      selectedItems,
4700                      onChangeSelection,
4701                      data,
4702                      getItemId
4703                    }
4704                  ),
4705                  /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "dataviews-bulk-actions-footer__item-count", children: message2 })
4706                ]
4707              }
4708            ),
4709            /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(dataviews_pagination_default, {}),
4710            Boolean(actions?.length) && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "dataviews-picker-footer__actions", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
4711              ActionButtons,
4712              {
4713                actions,
4714                items: selectedItems,
4715                selection
4716              }
4717            ) })
4718          ]
4719        }
4720      );
4721    }
4722  
4723    // packages/dataviews/build-module/dataviews-layouts/utils/grid-items.js
4724    var import_element17 = __toESM(require_element());
4725    var import_jsx_runtime46 = __toESM(require_jsx_runtime());
4726    var GridItems = (0, import_element17.forwardRef)(({ className, previewSize, ...props }, ref) => {
4727      return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4728        "div",
4729        {
4730          ref,
4731          className: clsx_default("dataviews-view-grid-items", className),
4732          style: {
4733            gridTemplateColumns: previewSize && `repeat(auto-fill, minmax($previewSize}px, 1fr))`
4734          },
4735          ...props
4736        }
4737      );
4738    });
4739  
4740    // packages/dataviews/build-module/dataviews-layouts/picker-grid/index.js
4741    var import_jsx_runtime47 = __toESM(require_jsx_runtime());
4742    var { Badge: Badge2 } = unlock(import_components17.privateApis);
4743    function GridItem3({
4744      view,
4745      multiselect,
4746      selection,
4747      onChangeSelection,
4748      getItemId,
4749      item,
4750      mediaField,
4751      titleField,
4752      descriptionField: descriptionField2,
4753      regularFields,
4754      badgeFields,
4755      config,
4756      posinset,
4757      setsize
4758    }) {
4759      const { showTitle = true, showMedia = true, showDescription = true } = view;
4760      const id = getItemId(item);
4761      const isSelected2 = selection.includes(id);
4762      const renderedMediaField = mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4763        mediaField.render,
4764        {
4765          item,
4766          field: mediaField,
4767          config
4768        }
4769      ) : null;
4770      const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(titleField.render, { item, field: titleField }) : null;
4771      return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
4772        import_components17.Composite.Item,
4773        {
4774          "aria-label": titleField ? titleField.getValue({ item }) || (0, import_i18n22.__)("(no title)") : void 0,
4775          render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_components17.__experimentalVStack, { spacing: 0, children, ...props }),
4776          role: "option",
4777          "aria-posinset": posinset,
4778          "aria-setsize": setsize,
4779          className: clsx_default("dataviews-view-picker-grid__card", {
4780            "is-selected": isSelected2
4781          }),
4782          "aria-selected": isSelected2,
4783          onClick: () => {
4784            if (isSelected2) {
4785              onChangeSelection(
4786                selection.filter((itemId) => id !== itemId)
4787              );
4788            } else {
4789              const newSelection = multiselect ? [...selection, id] : [id];
4790              onChangeSelection(newSelection);
4791            }
4792          },
4793          children: [
4794            showMedia && renderedMediaField && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "dataviews-view-picker-grid__media", children: renderedMediaField }),
4795            showMedia && renderedMediaField && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4796              DataViewsSelectionCheckbox,
4797              {
4798                item,
4799                selection,
4800                onChangeSelection,
4801                getItemId,
4802                titleField,
4803                disabled: false,
4804                "aria-hidden": true,
4805                tabIndex: -1
4806              }
4807            ),
4808            showTitle && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4809              import_components17.__experimentalHStack,
4810              {
4811                justify: "space-between",
4812                className: "dataviews-view-picker-grid__title-actions",
4813                children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "dataviews-view-picker-grid__title-field dataviews-title-field", children: renderedTitleField })
4814              }
4815            ),
4816            /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_components17.__experimentalVStack, { spacing: 1, children: [
4817              showDescription && descriptionField2?.render && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4818                descriptionField2.render,
4819                {
4820                  item,
4821                  field: descriptionField2
4822                }
4823              ),
4824              !!badgeFields?.length && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4825                import_components17.__experimentalHStack,
4826                {
4827                  className: "dataviews-view-picker-grid__badge-fields",
4828                  spacing: 2,
4829                  wrap: true,
4830                  alignment: "top",
4831                  justify: "flex-start",
4832                  children: badgeFields.map((field) => {
4833                    return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4834                      Badge2,
4835                      {
4836                        className: "dataviews-view-picker-grid__field-value",
4837                        children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4838                          field.render,
4839                          {
4840                            item,
4841                            field
4842                          }
4843                        )
4844                      },
4845                      field.id
4846                    );
4847                  })
4848                }
4849              ),
4850              !!regularFields?.length && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4851                import_components17.__experimentalVStack,
4852                {
4853                  className: "dataviews-view-picker-grid__fields",
4854                  spacing: 1,
4855                  children: regularFields.map((field) => {
4856                    return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4857                      import_components17.Flex,
4858                      {
4859                        className: "dataviews-view-picker-grid__field",
4860                        gap: 1,
4861                        justify: "flex-start",
4862                        expanded: true,
4863                        style: { height: "auto" },
4864                        direction: "row",
4865                        children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [
4866                          /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_components17.FlexItem, { className: "dataviews-view-picker-grid__field-name", children: field.header }),
4867                          /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4868                            import_components17.FlexItem,
4869                            {
4870                              className: "dataviews-view-picker-grid__field-value",
4871                              style: { maxHeight: "none" },
4872                              children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4873                                field.render,
4874                                {
4875                                  item,
4876                                  field
4877                                }
4878                              )
4879                            }
4880                          )
4881                        ] })
4882                      },
4883                      field.id
4884                    );
4885                  })
4886                }
4887              )
4888            ] })
4889          ]
4890        },
4891        id
4892      );
4893    }
4894    function GridGroup({
4895      groupName,
4896      groupField,
4897      children
4898    }) {
4899      const headerId = (0, import_compose6.useInstanceId)(
4900        GridGroup,
4901        "dataviews-view-picker-grid-group__header"
4902      );
4903      return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
4904        import_components17.__experimentalVStack,
4905        {
4906          spacing: 2,
4907          role: "group",
4908          "aria-labelledby": headerId,
4909          children: [
4910            /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4911              "h3",
4912              {
4913                className: "dataviews-view-picker-grid-group__header",
4914                id: headerId,
4915                children: (0, import_i18n22.sprintf)(
4916                  // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022".
4917                  (0, import_i18n22.__)("%1$s: %2$s"),
4918                  groupField.label,
4919                  groupName
4920                )
4921              }
4922            ),
4923            children
4924          ]
4925        },
4926        groupName
4927      );
4928    }
4929    function ViewPickerGrid({
4930      actions,
4931      data,
4932      fields,
4933      getItemId,
4934      isLoading,
4935      onChangeSelection,
4936      selection,
4937      view,
4938      className,
4939      empty
4940    }) {
4941      const { resizeObserverRef, paginationInfo, itemListLabel } = (0, import_element18.useContext)(dataviews_context_default);
4942      const titleField = fields.find(
4943        (field) => field.id === view?.titleField
4944      );
4945      const mediaField = fields.find(
4946        (field) => field.id === view?.mediaField
4947      );
4948      const descriptionField2 = fields.find(
4949        (field) => field.id === view?.descriptionField
4950      );
4951      const otherFields = view.fields ?? [];
4952      const { regularFields, badgeFields } = otherFields.reduce(
4953        (accumulator, fieldId) => {
4954          const field = fields.find((f2) => f2.id === fieldId);
4955          if (!field) {
4956            return accumulator;
4957          }
4958          const key = view.layout?.badgeFields?.includes(fieldId) ? "badgeFields" : "regularFields";
4959          accumulator[key].push(field);
4960          return accumulator;
4961        },
4962        { regularFields: [], badgeFields: [] }
4963      );
4964      const hasData = !!data?.length;
4965      const usedPreviewSize = view.layout?.previewSize;
4966      const isMultiselect = useIsMultiselectPicker(actions);
4967      const size = "900px";
4968      const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null;
4969      const dataByGroup = groupField ? getDataByGroup(data, groupField) : null;
4970      const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup;
4971      const currentPage = view?.page ?? 1;
4972      const perPage = view?.perPage ?? 0;
4973      const setSize = isInfiniteScroll ? paginationInfo?.totalItems : void 0;
4974      return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, {
4975        // Render multiple groups.
4976        children: [
4977          hasData && groupField && dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4978            import_components17.Composite,
4979            {
4980              virtualFocus: true,
4981              orientation: "horizontal",
4982              role: "listbox",
4983              "aria-multiselectable": isMultiselect,
4984              className: clsx_default(
4985                "dataviews-view-picker-grid",
4986                className
4987              ),
4988              "aria-label": itemListLabel,
4989              render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4990                import_components17.__experimentalVStack,
4991                {
4992                  spacing: 4,
4993                  children,
4994                  ...props
4995                }
4996              ),
4997              children: Array.from(dataByGroup.entries()).map(
4998                ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4999                  GridGroup,
5000                  {
5001                    groupName,
5002                    groupField,
5003                    children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
5004                      GridItems,
5005                      {
5006                        previewSize: usedPreviewSize,
5007                        style: {
5008                          gridTemplateColumns: usedPreviewSize && `repeat(auto-fill, minmax($usedPreviewSize}px, 1fr))`
5009                        },
5010                        "aria-busy": isLoading,
5011                        ref: resizeObserverRef,
5012                        children: groupItems.map((item) => {
5013                          const posInSet = (currentPage - 1) * perPage + data.indexOf(item) + 1;
5014                          return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
5015                            GridItem3,
5016                            {
5017                              view,
5018                              multiselect: isMultiselect,
5019                              selection,
5020                              onChangeSelection,
5021                              getItemId,
5022                              item,
5023                              mediaField,
5024                              titleField,
5025                              descriptionField: descriptionField2,
5026                              regularFields,
5027                              badgeFields,
5028                              config: {
5029                                sizes: size
5030                              },
5031                              posinset: posInSet,
5032                              setsize: setSize
5033                            },
5034                            getItemId(item)
5035                          );
5036                        })
5037                      }
5038                    )
5039                  },
5040                  groupName
5041                )
5042              )
5043            }
5044          ),
5045          // Render a single grid with all data.
5046          hasData && !dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
5047            import_components17.Composite,
5048            {
5049              render: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
5050                GridItems,
5051                {
5052                  className: clsx_default(
5053                    "dataviews-view-picker-grid",
5054                    className
5055                  ),
5056                  previewSize: usedPreviewSize,
5057                  "aria-busy": isLoading,
5058                  ref: resizeObserverRef
5059                }
5060              ),
5061              virtualFocus: true,
5062              orientation: "horizontal",
5063              role: "listbox",
5064              "aria-multiselectable": isMultiselect,
5065              "aria-label": itemListLabel,
5066              children: data.map((item, index) => {
5067                let posinset = isInfiniteScroll ? index + 1 : void 0;
5068                if (!isInfiniteScroll) {
5069                  posinset = (currentPage - 1) * perPage + index + 1;
5070                }
5071                return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
5072                  GridItem3,
5073                  {
5074                    view,
5075                    multiselect: isMultiselect,
5076                    selection,
5077                    onChangeSelection,
5078                    getItemId,
5079                    item,
5080                    mediaField,
5081                    titleField,
5082                    descriptionField: descriptionField2,
5083                    regularFields,
5084                    badgeFields,
5085                    config: {
5086                      sizes: size
5087                    },
5088                    posinset,
5089                    setsize: setSize
5090                  },
5091                  getItemId(item)
5092                );
5093              })
5094            }
5095          ),
5096          // Render empty state.
5097          !hasData && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
5098            "div",
5099            {
5100              className: clsx_default({
5101                "dataviews-loading": isLoading,
5102                "dataviews-no-results": !isLoading
5103              }),
5104              children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_components17.Spinner, {}) }) : empty
5105            }
5106          ),
5107          hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_components17.Spinner, {}) })
5108        ]
5109      });
5110    }
5111    var picker_grid_default = ViewPickerGrid;
5112  
5113    // packages/dataviews/build-module/dataviews-layouts/picker-table/index.js
5114    var import_i18n23 = __toESM(require_i18n());
5115    var import_components18 = __toESM(require_components());
5116    var import_element19 = __toESM(require_element());
5117    var import_jsx_runtime48 = __toESM(require_jsx_runtime());
5118    function TableColumnField2({
5119      item,
5120      fields,
5121      column,
5122      align
5123    }) {
5124      const field = fields.find((f2) => f2.id === column);
5125      if (!field) {
5126        return null;
5127      }
5128      const className = clsx_default("dataviews-view-table__cell-content-wrapper", {
5129        "dataviews-view-table__cell-align-end": align === "end",
5130        "dataviews-view-table__cell-align-center": align === "center"
5131      });
5132      return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(field.render, { item, field }) });
5133    }
5134    function TableRow2({
5135      item,
5136      fields,
5137      id,
5138      view,
5139      titleField,
5140      mediaField,
5141      descriptionField: descriptionField2,
5142      selection,
5143      getItemId,
5144      onChangeSelection,
5145      multiselect,
5146      posinset
5147    }) {
5148      const { paginationInfo } = (0, import_element19.useContext)(dataviews_context_default);
5149      const isSelected2 = selection.includes(id);
5150      const [isHovered, setIsHovered] = (0, import_element19.useState)(false);
5151      const {
5152        showTitle = true,
5153        showMedia = true,
5154        showDescription = true,
5155        infiniteScrollEnabled
5156      } = view;
5157      const handleMouseEnter = () => {
5158        setIsHovered(true);
5159      };
5160      const handleMouseLeave = () => {
5161        setIsHovered(false);
5162      };
5163      const columns = view.fields ?? [];
5164      const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField2 && showDescription;
5165      return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
5166        import_components18.Composite.Item,
5167        {
5168          render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5169            "tr",
5170            {
5171              className: clsx_default("dataviews-view-table__row", {
5172                "is-selected": isSelected2,
5173                "is-hovered": isHovered
5174              }),
5175              onMouseEnter: handleMouseEnter,
5176              onMouseLeave: handleMouseLeave,
5177              children,
5178              ...props
5179            }
5180          ),
5181          "aria-selected": isSelected2,
5182          "aria-setsize": paginationInfo.totalItems || void 0,
5183          "aria-posinset": posinset,
5184          role: infiniteScrollEnabled ? "article" : "option",
5185          onClick: () => {
5186            if (isSelected2) {
5187              onChangeSelection(
5188                selection.filter((itemId) => id !== itemId)
5189              );
5190            } else {
5191              const newSelection = multiselect ? [...selection, id] : [id];
5192              onChangeSelection(newSelection);
5193            }
5194          },
5195          children: [
5196            /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5197              "td",
5198              {
5199                className: "dataviews-view-table__checkbox-column",
5200                role: "presentation",
5201                children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "dataviews-view-table__cell-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5202                  DataViewsSelectionCheckbox,
5203                  {
5204                    item,
5205                    selection,
5206                    onChangeSelection,
5207                    getItemId,
5208                    titleField,
5209                    disabled: false,
5210                    "aria-hidden": true,
5211                    tabIndex: -1
5212                  }
5213                ) })
5214              }
5215            ),
5216            hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("td", { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5217              column_primary_default,
5218              {
5219                item,
5220                titleField: showTitle ? titleField : void 0,
5221                mediaField: showMedia ? mediaField : void 0,
5222                descriptionField: showDescription ? descriptionField2 : void 0,
5223                isItemClickable: () => false
5224              }
5225            ) }),
5226            columns.map((column) => {
5227              const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {};
5228              return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5229                "td",
5230                {
5231                  style: {
5232                    width,
5233                    maxWidth,
5234                    minWidth
5235                  },
5236                  role: "presentation",
5237                  children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5238                    TableColumnField2,
5239                    {
5240                      fields,
5241                      item,
5242                      column,
5243                      align
5244                    }
5245                  )
5246                },
5247                column
5248              );
5249            })
5250          ]
5251        },
5252        id
5253      );
5254    }
5255    function ViewPickerTable({
5256      actions,
5257      data,
5258      fields,
5259      getItemId,
5260      isLoading = false,
5261      onChangeView,
5262      onChangeSelection,
5263      selection,
5264      setOpenedFilter,
5265      view,
5266      className,
5267      empty
5268    }) {
5269      const headerMenuRefs = (0, import_element19.useRef)(/* @__PURE__ */ new Map());
5270      const headerMenuToFocusRef = (0, import_element19.useRef)();
5271      const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, import_element19.useState)();
5272      const isMultiselect = useIsMultiselectPicker(actions) ?? false;
5273      (0, import_element19.useEffect)(() => {
5274        if (headerMenuToFocusRef.current) {
5275          headerMenuToFocusRef.current.focus();
5276          headerMenuToFocusRef.current = void 0;
5277        }
5278      });
5279      const tableNoticeId = (0, import_element19.useId)();
5280      if (nextHeaderMenuToFocus) {
5281        headerMenuToFocusRef.current = nextHeaderMenuToFocus;
5282        setNextHeaderMenuToFocus(void 0);
5283        return;
5284      }
5285      const onHide = (field) => {
5286        const hidden = headerMenuRefs.current.get(field.id);
5287        const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : void 0;
5288        setNextHeaderMenuToFocus(fallback?.node);
5289      };
5290      const hasData = !!data?.length;
5291      const titleField = fields.find((field) => field.id === view.titleField);
5292      const mediaField = fields.find((field) => field.id === view.mediaField);
5293      const descriptionField2 = fields.find(
5294        (field) => field.id === view.descriptionField
5295      );
5296      const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null;
5297      const dataByGroup = groupField ? getDataByGroup(data, groupField) : null;
5298      const { showTitle = true, showMedia = true, showDescription = true } = view;
5299      const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField2 && showDescription;
5300      const columns = view.fields ?? [];
5301      const headerMenuRef = (column, index) => (node) => {
5302        if (node) {
5303          headerMenuRefs.current.set(column, {
5304            node,
5305            fallback: columns[index > 0 ? index - 1 : 1]
5306          });
5307        } else {
5308          headerMenuRefs.current.delete(column);
5309        }
5310      };
5311      const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup;
5312      return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(import_jsx_runtime48.Fragment, { children: [
5313        /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
5314          "table",
5315          {
5316            className: clsx_default(
5317              "dataviews-view-table",
5318              "dataviews-view-picker-table",
5319              className,
5320              {
5321                [`has-$view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes(
5322                  view.layout.density
5323                )
5324              }
5325            ),
5326            "aria-busy": isLoading,
5327            "aria-describedby": tableNoticeId,
5328            role: isInfiniteScroll ? "feed" : "listbox",
5329            children: [
5330              /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("thead", { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
5331                "tr",
5332                {
5333                  className: "dataviews-view-table__row",
5334                  role: "presentation",
5335                  children: [
5336                    /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("th", { className: "dataviews-view-table__checkbox-column", children: isMultiselect && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5337                      BulkSelectionCheckbox,
5338                      {
5339                        selection,
5340                        onChangeSelection,
5341                        data,
5342                        actions,
5343                        getItemId
5344                      }
5345                    ) }),
5346                    hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("th", { children: titleField && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5347                      column_header_menu_default,
5348                      {
5349                        ref: headerMenuRef(
5350                          titleField.id,
5351                          0
5352                        ),
5353                        fieldId: titleField.id,
5354                        view,
5355                        fields,
5356                        onChangeView,
5357                        onHide,
5358                        setOpenedFilter,
5359                        canMove: false
5360                      }
5361                    ) }),
5362                    columns.map((column, index) => {
5363                      const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {};
5364                      return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5365                        "th",
5366                        {
5367                          style: {
5368                            width,
5369                            maxWidth,
5370                            minWidth,
5371                            textAlign: align
5372                          },
5373                          "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : void 0,
5374                          scope: "col",
5375                          children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5376                            column_header_menu_default,
5377                            {
5378                              ref: headerMenuRef(column, index),
5379                              fieldId: column,
5380                              view,
5381                              fields,
5382                              onChangeView,
5383                              onHide,
5384                              setOpenedFilter,
5385                              canMove: view.layout?.enableMoving ?? true
5386                            }
5387                          )
5388                        },
5389                        column
5390                      );
5391                    })
5392                  ]
5393                }
5394              ) }),
5395              hasData && groupField && dataByGroup ? Array.from(dataByGroup.entries()).map(
5396                ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
5397                  import_components18.Composite,
5398                  {
5399                    virtualFocus: true,
5400                    orientation: "vertical",
5401                    render: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("tbody", { role: "group" }),
5402                    children: [
5403                      /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5404                        "tr",
5405                        {
5406                          className: "dataviews-view-table__group-header-row",
5407                          role: "presentation",
5408                          children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5409                            "td",
5410                            {
5411                              colSpan: columns.length + (hasPrimaryColumn ? 1 : 0) + 1,
5412                              className: "dataviews-view-table__group-header-cell",
5413                              role: "presentation",
5414                              children: (0, import_i18n23.sprintf)(
5415                                // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022".
5416                                (0, import_i18n23.__)("%1$s: %2$s"),
5417                                groupField.label,
5418                                groupName
5419                              )
5420                            }
5421                          )
5422                        }
5423                      ),
5424                      groupItems.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5425                        TableRow2,
5426                        {
5427                          item,
5428                          fields,
5429                          id: getItemId(item) || index.toString(),
5430                          view,
5431                          titleField,
5432                          mediaField,
5433                          descriptionField: descriptionField2,
5434                          selection,
5435                          getItemId,
5436                          onChangeSelection,
5437                          multiselect: isMultiselect
5438                        },
5439                        getItemId(item)
5440                      ))
5441                    ]
5442                  },
5443                  `group-$groupName}`
5444                )
5445              ) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5446                import_components18.Composite,
5447                {
5448                  render: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("tbody", { role: "presentation" }),
5449                  virtualFocus: true,
5450                  orientation: "vertical",
5451                  children: hasData && data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5452                    TableRow2,
5453                    {
5454                      item,
5455                      fields,
5456                      id: getItemId(item) || index.toString(),
5457                      view,
5458                      titleField,
5459                      mediaField,
5460                      descriptionField: descriptionField2,
5461                      selection,
5462                      getItemId,
5463                      onChangeSelection,
5464                      multiselect: isMultiselect,
5465                      posinset: index + 1
5466                    },
5467                    getItemId(item)
5468                  ))
5469                }
5470              )
5471            ]
5472          }
5473        ),
5474        /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
5475          "div",
5476          {
5477            className: clsx_default({
5478              "dataviews-loading": isLoading,
5479              "dataviews-no-results": !hasData && !isLoading
5480            }),
5481            id: tableNoticeId,
5482            children: [
5483              !hasData && (isLoading ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_components18.Spinner, {}) }) : empty),
5484              hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_components18.Spinner, {}) })
5485            ]
5486          }
5487        )
5488      ] });
5489    }
5490    var picker_table_default = ViewPickerTable;
5491  
5492    // packages/dataviews/build-module/dataviews-layouts/utils/preview-size-picker.js
5493    var import_components19 = __toESM(require_components());
5494    var import_i18n24 = __toESM(require_i18n());
5495    var import_element20 = __toESM(require_element());
5496    var import_jsx_runtime49 = __toESM(require_jsx_runtime());
5497    var imageSizes2 = [
5498      {
5499        value: 120,
5500        breakpoint: 1
5501      },
5502      {
5503        value: 170,
5504        breakpoint: 1
5505      },
5506      {
5507        value: 230,
5508        breakpoint: 1
5509      },
5510      {
5511        value: 290,
5512        breakpoint: 1112
5513        // at minimum image width, 4 images display at this container size
5514      },
5515      {
5516        value: 350,
5517        breakpoint: 1636
5518        // at minimum image width, 6 images display at this container size
5519      },
5520      {
5521        value: 430,
5522        breakpoint: 588
5523        // at minimum image width, 2 images display at this container size
5524      }
5525    ];
5526    function PreviewSizePicker() {
5527      const context = (0, import_element20.useContext)(dataviews_context_default);
5528      const view = context.view;
5529      const breakValues = imageSizes2.filter((size) => {
5530        return context.containerWidth >= size.breakpoint;
5531      });
5532      const layoutPreviewSize = view.layout?.previewSize ?? 230;
5533      const previewSizeToUse = breakValues.map((size, index) => ({ ...size, index })).filter((size) => size.value <= layoutPreviewSize).sort((a2, b2) => b2.value - a2.value)[0]?.index ?? 0;
5534      const marks = breakValues.map((size, index) => {
5535        return {
5536          value: index
5537        };
5538      });
5539      return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
5540        import_components19.RangeControl,
5541        {
5542          __next40pxDefaultSize: true,
5543          showTooltip: false,
5544          label: (0, import_i18n24.__)("Preview size"),
5545          value: previewSizeToUse,
5546          min: 0,
5547          max: breakValues.length - 1,
5548          withInputField: false,
5549          onChange: (value = 0) => {
5550            context.onChangeView({
5551              ...view,
5552              layout: {
5553                ...view.layout,
5554                previewSize: breakValues[value].value
5555              }
5556            });
5557          },
5558          step: 1,
5559          marks
5560        }
5561      );
5562    }
5563  
5564    // packages/dataviews/build-module/dataviews-layouts/table/density-picker.js
5565    var import_components20 = __toESM(require_components());
5566    var import_i18n25 = __toESM(require_i18n());
5567    var import_element21 = __toESM(require_element());
5568    var import_jsx_runtime50 = __toESM(require_jsx_runtime());
5569    function DensityPicker() {
5570      const context = (0, import_element21.useContext)(dataviews_context_default);
5571      const view = context.view;
5572      return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
5573        import_components20.__experimentalToggleGroupControl,
5574        {
5575          size: "__unstable-large",
5576          label: (0, import_i18n25.__)("Density"),
5577          value: view.layout?.density || "balanced",
5578          onChange: (value) => {
5579            context.onChangeView({
5580              ...view,
5581              layout: {
5582                ...view.layout,
5583                density: value
5584              }
5585            });
5586          },
5587          isBlock: true,
5588          children: [
5589            /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
5590              import_components20.__experimentalToggleGroupControlOption,
5591              {
5592                value: "comfortable",
5593                label: (0, import_i18n25._x)(
5594                  "Comfortable",
5595                  "Density option for DataView layout"
5596                )
5597              },
5598              "comfortable"
5599            ),
5600            /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
5601              import_components20.__experimentalToggleGroupControlOption,
5602              {
5603                value: "balanced",
5604                label: (0, import_i18n25._x)("Balanced", "Density option for DataView layout")
5605              },
5606              "balanced"
5607            ),
5608            /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
5609              import_components20.__experimentalToggleGroupControlOption,
5610              {
5611                value: "compact",
5612                label: (0, import_i18n25._x)("Compact", "Density option for DataView layout")
5613              },
5614              "compact"
5615            )
5616          ]
5617        }
5618      );
5619    }
5620  
5621    // packages/dataviews/build-module/dataviews-layouts/index.js
5622    var VIEW_LAYOUTS = [
5623      {
5624        type: LAYOUT_TABLE,
5625        label: (0, import_i18n26.__)("Table"),
5626        component: table_default,
5627        icon: block_table_default,
5628        viewConfigOptions: DensityPicker
5629      },
5630      {
5631        type: LAYOUT_GRID,
5632        label: (0, import_i18n26.__)("Grid"),
5633        component: grid_default,
5634        icon: category_default,
5635        viewConfigOptions: PreviewSizePicker
5636      },
5637      {
5638        type: LAYOUT_LIST,
5639        label: (0, import_i18n26.__)("List"),
5640        component: ViewList,
5641        icon: (0, import_i18n26.isRTL)() ? format_list_bullets_rtl_default : format_list_bullets_default
5642      },
5643      {
5644        type: LAYOUT_ACTIVITY,
5645        label: (0, import_i18n26.__)("Activity"),
5646        component: ViewActivity,
5647        icon: scheduled_default,
5648        viewConfigOptions: DensityPicker
5649      },
5650      {
5651        type: LAYOUT_PICKER_GRID,
5652        label: (0, import_i18n26.__)("Grid"),
5653        component: picker_grid_default,
5654        icon: category_default,
5655        viewConfigOptions: PreviewSizePicker,
5656        isPicker: true
5657      },
5658      {
5659        type: LAYOUT_PICKER_TABLE,
5660        label: (0, import_i18n26.__)("Table"),
5661        component: picker_table_default,
5662        icon: block_table_default,
5663        viewConfigOptions: DensityPicker,
5664        isPicker: true
5665      }
5666    ];
5667  
5668    // packages/dataviews/build-module/components/dataviews-filters/filters.js
5669    var import_element29 = __toESM(require_element());
5670    var import_components26 = __toESM(require_components());
5671  
5672    // packages/dataviews/build-module/components/dataviews-filters/filter.js
5673    var import_components23 = __toESM(require_components());
5674    var import_i18n29 = __toESM(require_i18n());
5675    var import_element26 = __toESM(require_element());
5676  
5677    // node_modules/@ariakit/react-core/esm/__chunks/3YLGPPWQ.js
5678    var __defProp2 = Object.defineProperty;
5679    var __defProps = Object.defineProperties;
5680    var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5681    var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5682    var __hasOwnProp2 = Object.prototype.hasOwnProperty;
5683    var __propIsEnum = Object.prototype.propertyIsEnumerable;
5684    var __defNormalProp = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5685    var __spreadValues = (a2, b2) => {
5686      for (var prop in b2 || (b2 = {}))
5687        if (__hasOwnProp2.call(b2, prop))
5688          __defNormalProp(a2, prop, b2[prop]);
5689      if (__getOwnPropSymbols)
5690        for (var prop of __getOwnPropSymbols(b2)) {
5691          if (__propIsEnum.call(b2, prop))
5692            __defNormalProp(a2, prop, b2[prop]);
5693        }
5694      return a2;
5695    };
5696    var __spreadProps = (a2, b2) => __defProps(a2, __getOwnPropDescs(b2));
5697    var __objRest = (source, exclude) => {
5698      var target = {};
5699      for (var prop in source)
5700        if (__hasOwnProp2.call(source, prop) && exclude.indexOf(prop) < 0)
5701          target[prop] = source[prop];
5702      if (source != null && __getOwnPropSymbols)
5703        for (var prop of __getOwnPropSymbols(source)) {
5704          if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
5705            target[prop] = source[prop];
5706        }
5707      return target;
5708    };
5709  
5710    // node_modules/@ariakit/core/esm/__chunks/3YLGPPWQ.js
5711    var __defProp3 = Object.defineProperty;
5712    var __defProps2 = Object.defineProperties;
5713    var __getOwnPropDescs2 = Object.getOwnPropertyDescriptors;
5714    var __getOwnPropSymbols2 = Object.getOwnPropertySymbols;
5715    var __hasOwnProp3 = Object.prototype.hasOwnProperty;
5716    var __propIsEnum2 = Object.prototype.propertyIsEnumerable;
5717    var __defNormalProp2 = (obj, key, value) => key in obj ? __defProp3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5718    var __spreadValues2 = (a2, b2) => {
5719      for (var prop in b2 || (b2 = {}))
5720        if (__hasOwnProp3.call(b2, prop))
5721          __defNormalProp2(a2, prop, b2[prop]);
5722      if (__getOwnPropSymbols2)
5723        for (var prop of __getOwnPropSymbols2(b2)) {
5724          if (__propIsEnum2.call(b2, prop))
5725            __defNormalProp2(a2, prop, b2[prop]);
5726        }
5727      return a2;
5728    };
5729    var __spreadProps2 = (a2, b2) => __defProps2(a2, __getOwnPropDescs2(b2));
5730    var __objRest2 = (source, exclude) => {
5731      var target = {};
5732      for (var prop in source)
5733        if (__hasOwnProp3.call(source, prop) && exclude.indexOf(prop) < 0)
5734          target[prop] = source[prop];
5735      if (source != null && __getOwnPropSymbols2)
5736        for (var prop of __getOwnPropSymbols2(source)) {
5737          if (exclude.indexOf(prop) < 0 && __propIsEnum2.call(source, prop))
5738            target[prop] = source[prop];
5739        }
5740      return target;
5741    };
5742  
5743    // node_modules/@ariakit/core/esm/__chunks/PBFD2E7P.js
5744    function noop2(..._) {
5745    }
5746    function applyState(argument, currentValue) {
5747      if (isUpdater(argument)) {
5748        const value = isLazyValue(currentValue) ? currentValue() : currentValue;
5749        return argument(value);
5750      }
5751      return argument;
5752    }
5753    function isUpdater(argument) {
5754      return typeof argument === "function";
5755    }
5756    function isLazyValue(value) {
5757      return typeof value === "function";
5758    }
5759    function hasOwnProperty(object, prop) {
5760      if (typeof Object.hasOwn === "function") {
5761        return Object.hasOwn(object, prop);
5762      }
5763      return Object.prototype.hasOwnProperty.call(object, prop);
5764    }
5765    function chain(...fns) {
5766      return (...args) => {
5767        for (const fn of fns) {
5768          if (typeof fn === "function") {
5769            fn(...args);
5770          }
5771        }
5772      };
5773    }
5774    function normalizeString(str) {
5775      return str.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
5776    }
5777    function omit(object, keys) {
5778      const result = __spreadValues2({}, object);
5779      for (const key of keys) {
5780        if (hasOwnProperty(result, key)) {
5781          delete result[key];
5782        }
5783      }
5784      return result;
5785    }
5786    function pick(object, paths) {
5787      const result = {};
5788      for (const key of paths) {
5789        if (hasOwnProperty(object, key)) {
5790          result[key] = object[key];
5791        }
5792      }
5793      return result;
5794    }
5795    function identity(value) {
5796      return value;
5797    }
5798    function invariant(condition, message2) {
5799      if (condition) return;
5800      if (typeof message2 !== "string") throw new Error("Invariant failed");
5801      throw new Error(message2);
5802    }
5803    function getKeys(obj) {
5804      return Object.keys(obj);
5805    }
5806    function isFalsyBooleanCallback(booleanOrCallback, ...args) {
5807      const result = typeof booleanOrCallback === "function" ? booleanOrCallback(...args) : booleanOrCallback;
5808      if (result == null) return false;
5809      return !result;
5810    }
5811    function disabledFromProps(props) {
5812      return props.disabled || props["aria-disabled"] === true || props["aria-disabled"] === "true";
5813    }
5814    function removeUndefinedValues(obj) {
5815      const result = {};
5816      for (const key in obj) {
5817        if (obj[key] !== void 0) {
5818          result[key] = obj[key];
5819        }
5820      }
5821      return result;
5822    }
5823    function defaultValue(...values) {
5824      for (const value of values) {
5825        if (value !== void 0) return value;
5826      }
5827      return void 0;
5828    }
5829  
5830    // node_modules/@ariakit/react-core/esm/__chunks/SK3NAZA3.js
5831    var import_react2 = __toESM(require_react(), 1);
5832    function setRef(ref, value) {
5833      if (typeof ref === "function") {
5834        ref(value);
5835      } else if (ref) {
5836        ref.current = value;
5837      }
5838    }
5839    function isValidElementWithRef(element) {
5840      if (!element) return false;
5841      if (!(0, import_react2.isValidElement)(element)) return false;
5842      if ("ref" in element.props) return true;
5843      if ("ref" in element) return true;
5844      return false;
5845    }
5846    function getRefProperty(element) {
5847      if (!isValidElementWithRef(element)) return null;
5848      const props = __spreadValues({}, element.props);
5849      return props.ref || element.ref;
5850    }
5851    function mergeProps(base, overrides) {
5852      const props = __spreadValues({}, base);
5853      for (const key in overrides) {
5854        if (!hasOwnProperty(overrides, key)) continue;
5855        if (key === "className") {
5856          const prop = "className";
5857          props[prop] = base[prop] ? `$base[prop]} $overrides[prop]}` : overrides[prop];
5858          continue;
5859        }
5860        if (key === "style") {
5861          const prop = "style";
5862          props[prop] = base[prop] ? __spreadValues(__spreadValues({}, base[prop]), overrides[prop]) : overrides[prop];
5863          continue;
5864        }
5865        const overrideValue = overrides[key];
5866        if (typeof overrideValue === "function" && key.startsWith("on")) {
5867          const baseValue = base[key];
5868          if (typeof baseValue === "function") {
5869            props[key] = (...args) => {
5870              overrideValue(...args);
5871              baseValue(...args);
5872            };
5873            continue;
5874          }
5875        }
5876        props[key] = overrideValue;
5877      }
5878      return props;
5879    }
5880  
5881    // node_modules/@ariakit/core/esm/__chunks/DTR5TSDJ.js
5882    var canUseDOM = checkIsBrowser();
5883    function checkIsBrowser() {
5884      var _a;
5885      return typeof window !== "undefined" && !!((_a = window.document) == null ? void 0 : _a.createElement);
5886    }
5887    function getDocument(node) {
5888      if (!node) return document;
5889      if ("self" in node) return node.document;
5890      return node.ownerDocument || document;
5891    }
5892    function getActiveElement(node, activeDescendant = false) {
5893      const { activeElement } = getDocument(node);
5894      if (!(activeElement == null ? void 0 : activeElement.nodeName)) {
5895        return null;
5896      }
5897      if (isFrame(activeElement) && activeElement.contentDocument) {
5898        return getActiveElement(
5899          activeElement.contentDocument.body,
5900          activeDescendant
5901        );
5902      }
5903      if (activeDescendant) {
5904        const id = activeElement.getAttribute("aria-activedescendant");
5905        if (id) {
5906          const element = getDocument(activeElement).getElementById(id);
5907          if (element) {
5908            return element;
5909          }
5910        }
5911      }
5912      return activeElement;
5913    }
5914    function contains(parent, child) {
5915      return parent === child || parent.contains(child);
5916    }
5917    function isFrame(element) {
5918      return element.tagName === "IFRAME";
5919    }
5920    function isButton(element) {
5921      const tagName = element.tagName.toLowerCase();
5922      if (tagName === "button") return true;
5923      if (tagName === "input" && element.type) {
5924        return buttonInputTypes.indexOf(element.type) !== -1;
5925      }
5926      return false;
5927    }
5928    var buttonInputTypes = [
5929      "button",
5930      "color",
5931      "file",
5932      "image",
5933      "reset",
5934      "submit"
5935    ];
5936    function isVisible(element) {
5937      if (typeof element.checkVisibility === "function") {
5938        return element.checkVisibility();
5939      }
5940      const htmlElement = element;
5941      return htmlElement.offsetWidth > 0 || htmlElement.offsetHeight > 0 || element.getClientRects().length > 0;
5942    }
5943    function isTextField(element) {
5944      try {
5945        const isTextInput = element instanceof HTMLInputElement && element.selectionStart !== null;
5946        const isTextArea = element.tagName === "TEXTAREA";
5947        return isTextInput || isTextArea || false;
5948      } catch (error) {
5949        return false;
5950      }
5951    }
5952    function isTextbox(element) {
5953      return element.isContentEditable || isTextField(element);
5954    }
5955    function getTextboxValue(element) {
5956      if (isTextField(element)) {
5957        return element.value;
5958      }
5959      if (element.isContentEditable) {
5960        const range = getDocument(element).createRange();
5961        range.selectNodeContents(element);
5962        return range.toString();
5963      }
5964      return "";
5965    }
5966    function getTextboxSelection(element) {
5967      let start = 0;
5968      let end = 0;
5969      if (isTextField(element)) {
5970        start = element.selectionStart || 0;
5971        end = element.selectionEnd || 0;
5972      } else if (element.isContentEditable) {
5973        const selection = getDocument(element).getSelection();
5974        if ((selection == null ? void 0 : selection.rangeCount) && selection.anchorNode && contains(element, selection.anchorNode) && selection.focusNode && contains(element, selection.focusNode)) {
5975          const range = selection.getRangeAt(0);
5976          const nextRange = range.cloneRange();
5977          nextRange.selectNodeContents(element);
5978          nextRange.setEnd(range.startContainer, range.startOffset);
5979          start = nextRange.toString().length;
5980          nextRange.setEnd(range.endContainer, range.endOffset);
5981          end = nextRange.toString().length;
5982        }
5983      }
5984      return { start, end };
5985    }
5986    function getPopupRole(element, fallback) {
5987      const allowedPopupRoles = ["dialog", "menu", "listbox", "tree", "grid"];
5988      const role = element == null ? void 0 : element.getAttribute("role");
5989      if (role && allowedPopupRoles.indexOf(role) !== -1) {
5990        return role;
5991      }
5992      return fallback;
5993    }
5994    function getScrollingElement(element) {
5995      if (!element) return null;
5996      const isScrollableOverflow = (overflow) => {
5997        if (overflow === "auto") return true;
5998        if (overflow === "scroll") return true;
5999        return false;
6000      };
6001      if (element.clientHeight && element.scrollHeight > element.clientHeight) {
6002        const { overflowY } = getComputedStyle(element);
6003        if (isScrollableOverflow(overflowY)) return element;
6004      } else if (element.clientWidth && element.scrollWidth > element.clientWidth) {
6005        const { overflowX } = getComputedStyle(element);
6006        if (isScrollableOverflow(overflowX)) return element;
6007      }
6008      return getScrollingElement(element.parentElement) || document.scrollingElement || document.body;
6009    }
6010    function setSelectionRange(element, ...args) {
6011      if (/text|search|password|tel|url/i.test(element.type)) {
6012        element.setSelectionRange(...args);
6013      }
6014    }
6015    function sortBasedOnDOMPosition(items, getElement) {
6016      const pairs = items.map((item, index) => [index, item]);
6017      let isOrderDifferent = false;
6018      pairs.sort(([indexA, a2], [indexB, b2]) => {
6019        const elementA = getElement(a2);
6020        const elementB = getElement(b2);
6021        if (elementA === elementB) return 0;
6022        if (!elementA || !elementB) return 0;
6023        if (isElementPreceding(elementA, elementB)) {
6024          if (indexA > indexB) {
6025            isOrderDifferent = true;
6026          }
6027          return -1;
6028        }
6029        if (indexA < indexB) {
6030          isOrderDifferent = true;
6031        }
6032        return 1;
6033      });
6034      if (isOrderDifferent) {
6035        return pairs.map(([_, item]) => item);
6036      }
6037      return items;
6038    }
6039    function isElementPreceding(a2, b2) {
6040      return Boolean(
6041        b2.compareDocumentPosition(a2) & Node.DOCUMENT_POSITION_PRECEDING
6042      );
6043    }
6044  
6045    // node_modules/@ariakit/core/esm/__chunks/QAGXQEUG.js
6046    function isTouchDevice() {
6047      return canUseDOM && !!navigator.maxTouchPoints;
6048    }
6049    function isApple() {
6050      if (!canUseDOM) return false;
6051      return /mac|iphone|ipad|ipod/i.test(navigator.platform);
6052    }
6053    function isSafari() {
6054      return canUseDOM && isApple() && /apple/i.test(navigator.vendor);
6055    }
6056    function isFirefox() {
6057      return canUseDOM && /firefox\//i.test(navigator.userAgent);
6058    }
6059  
6060    // node_modules/@ariakit/core/esm/utils/events.js
6061    function isPortalEvent(event) {
6062      return Boolean(
6063        event.currentTarget && !contains(event.currentTarget, event.target)
6064      );
6065    }
6066    function isSelfTarget(event) {
6067      return event.target === event.currentTarget;
6068    }
6069    function isOpeningInNewTab(event) {
6070      const element = event.currentTarget;
6071      if (!element) return false;
6072      const isAppleDevice = isApple();
6073      if (isAppleDevice && !event.metaKey) return false;
6074      if (!isAppleDevice && !event.ctrlKey) return false;
6075      const tagName = element.tagName.toLowerCase();
6076      if (tagName === "a") return true;
6077      if (tagName === "button" && element.type === "submit") return true;
6078      if (tagName === "input" && element.type === "submit") return true;
6079      return false;
6080    }
6081    function isDownloading(event) {
6082      const element = event.currentTarget;
6083      if (!element) return false;
6084      const tagName = element.tagName.toLowerCase();
6085      if (!event.altKey) return false;
6086      if (tagName === "a") return true;
6087      if (tagName === "button" && element.type === "submit") return true;
6088      if (tagName === "input" && element.type === "submit") return true;
6089      return false;
6090    }
6091    function fireBlurEvent(element, eventInit) {
6092      const event = new FocusEvent("blur", eventInit);
6093      const defaultAllowed = element.dispatchEvent(event);
6094      const bubbleInit = __spreadProps2(__spreadValues2({}, eventInit), { bubbles: true });
6095      element.dispatchEvent(new FocusEvent("focusout", bubbleInit));
6096      return defaultAllowed;
6097    }
6098    function fireKeyboardEvent(element, type, eventInit) {
6099      const event = new KeyboardEvent(type, eventInit);
6100      return element.dispatchEvent(event);
6101    }
6102    function fireClickEvent(element, eventInit) {
6103      const event = new MouseEvent("click", eventInit);
6104      return element.dispatchEvent(event);
6105    }
6106    function isFocusEventOutside(event, container) {
6107      const containerElement = container || event.currentTarget;
6108      const relatedTarget = event.relatedTarget;
6109      return !relatedTarget || !contains(containerElement, relatedTarget);
6110    }
6111    function queueBeforeEvent(element, type, callback, timeout) {
6112      const createTimer = (callback2) => {
6113        if (timeout) {
6114          const timerId2 = setTimeout(callback2, timeout);
6115          return () => clearTimeout(timerId2);
6116        }
6117        const timerId = requestAnimationFrame(callback2);
6118        return () => cancelAnimationFrame(timerId);
6119      };
6120      const cancelTimer = createTimer(() => {
6121        element.removeEventListener(type, callSync, true);
6122        callback();
6123      });
6124      const callSync = () => {
6125        cancelTimer();
6126        callback();
6127      };
6128      element.addEventListener(type, callSync, { once: true, capture: true });
6129      return cancelTimer;
6130    }
6131    function addGlobalEventListener(type, listener, options, scope = window) {
6132      const children = [];
6133      try {
6134        scope.document.addEventListener(type, listener, options);
6135        for (const frame of Array.from(scope.frames)) {
6136          children.push(addGlobalEventListener(type, listener, options, frame));
6137        }
6138      } catch (e2) {
6139      }
6140      const removeEventListener = () => {
6141        try {
6142          scope.document.removeEventListener(type, listener, options);
6143        } catch (e2) {
6144        }
6145        for (const remove of children) {
6146          remove();
6147        }
6148      };
6149      return removeEventListener;
6150    }
6151  
6152    // node_modules/@ariakit/react-core/esm/__chunks/ABQUS43J.js
6153    var import_react3 = __toESM(require_react(), 1);
6154    var React = __toESM(require_react(), 1);
6155    var _React = __spreadValues({}, React);
6156    var useReactId = _React.useId;
6157    var useReactDeferredValue = _React.useDeferredValue;
6158    var useReactInsertionEffect = _React.useInsertionEffect;
6159    var useSafeLayoutEffect = canUseDOM ? import_react3.useLayoutEffect : import_react3.useEffect;
6160    function useInitialValue(value) {
6161      const [initialValue] = (0, import_react3.useState)(value);
6162      return initialValue;
6163    }
6164    function useLiveRef(value) {
6165      const ref = (0, import_react3.useRef)(value);
6166      useSafeLayoutEffect(() => {
6167        ref.current = value;
6168      });
6169      return ref;
6170    }
6171    function useEvent(callback) {
6172      const ref = (0, import_react3.useRef)(() => {
6173        throw new Error("Cannot call an event handler while rendering.");
6174      });
6175      if (useReactInsertionEffect) {
6176        useReactInsertionEffect(() => {
6177          ref.current = callback;
6178        });
6179      } else {
6180        ref.current = callback;
6181      }
6182      return (0, import_react3.useCallback)((...args) => {
6183        var _a;
6184        return (_a = ref.current) == null ? void 0 : _a.call(ref, ...args);
6185      }, []);
6186    }
6187    function useTransactionState(callback) {
6188      const [state, setState] = (0, import_react3.useState)(null);
6189      useSafeLayoutEffect(() => {
6190        if (state == null) return;
6191        if (!callback) return;
6192        let prevState = null;
6193        callback((prev) => {
6194          prevState = prev;
6195          return state;
6196        });
6197        return () => {
6198          callback(prevState);
6199        };
6200      }, [state, callback]);
6201      return [state, setState];
6202    }
6203    function useMergeRefs(...refs) {
6204      return (0, import_react3.useMemo)(() => {
6205        if (!refs.some(Boolean)) return;
6206        return (value) => {
6207          for (const ref of refs) {
6208            setRef(ref, value);
6209          }
6210        };
6211      }, refs);
6212    }
6213    function useId3(defaultId) {
6214      if (useReactId) {
6215        const reactId = useReactId();
6216        if (defaultId) return defaultId;
6217        return reactId;
6218      }
6219      const [id, setId] = (0, import_react3.useState)(defaultId);
6220      useSafeLayoutEffect(() => {
6221        if (defaultId || id) return;
6222        const random = Math.random().toString(36).slice(2, 8);
6223        setId(`id-$random}`);
6224      }, [defaultId, id]);
6225      return defaultId || id;
6226    }
6227    function useTagName(refOrElement, type) {
6228      const stringOrUndefined = (type2) => {
6229        if (typeof type2 !== "string") return;
6230        return type2;
6231      };
6232      const [tagName, setTagName] = (0, import_react3.useState)(() => stringOrUndefined(type));
6233      useSafeLayoutEffect(() => {
6234        const element = refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement;
6235        setTagName((element == null ? void 0 : element.tagName.toLowerCase()) || stringOrUndefined(type));
6236      }, [refOrElement, type]);
6237      return tagName;
6238    }
6239    function useAttribute(refOrElement, attributeName, defaultValue2) {
6240      const initialValue = useInitialValue(defaultValue2);
6241      const [attribute, setAttribute] = (0, import_react3.useState)(initialValue);
6242      (0, import_react3.useEffect)(() => {
6243        const element = refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement;
6244        if (!element) return;
6245        const callback = () => {
6246          const value = element.getAttribute(attributeName);
6247          setAttribute(value == null ? initialValue : value);
6248        };
6249        const observer = new MutationObserver(callback);
6250        observer.observe(element, { attributeFilter: [attributeName] });
6251        callback();
6252        return () => observer.disconnect();
6253      }, [refOrElement, attributeName, initialValue]);
6254      return attribute;
6255    }
6256    function useUpdateEffect(effect, deps) {
6257      const mounted = (0, import_react3.useRef)(false);
6258      (0, import_react3.useEffect)(() => {
6259        if (mounted.current) {
6260          return effect();
6261        }
6262        mounted.current = true;
6263      }, deps);
6264      (0, import_react3.useEffect)(
6265        () => () => {
6266          mounted.current = false;
6267        },
6268        []
6269      );
6270    }
6271    function useUpdateLayoutEffect(effect, deps) {
6272      const mounted = (0, import_react3.useRef)(false);
6273      useSafeLayoutEffect(() => {
6274        if (mounted.current) {
6275          return effect();
6276        }
6277        mounted.current = true;
6278      }, deps);
6279      useSafeLayoutEffect(
6280        () => () => {
6281          mounted.current = false;
6282        },
6283        []
6284      );
6285    }
6286    function useForceUpdate() {
6287      return (0, import_react3.useReducer)(() => [], []);
6288    }
6289    function useBooleanEvent(booleanOrCallback) {
6290      return useEvent(
6291        typeof booleanOrCallback === "function" ? booleanOrCallback : () => booleanOrCallback
6292      );
6293    }
6294    function useWrapElement(props, callback, deps = []) {
6295      const wrapElement = (0, import_react3.useCallback)(
6296        (element) => {
6297          if (props.wrapElement) {
6298            element = props.wrapElement(element);
6299          }
6300          return callback(element);
6301        },
6302        [...deps, props.wrapElement]
6303      );
6304      return __spreadProps(__spreadValues({}, props), { wrapElement });
6305    }
6306    function useMetadataProps(props, key, value) {
6307      const parent = props.onLoadedMetadataCapture;
6308      const onLoadedMetadataCapture = (0, import_react3.useMemo)(() => {
6309        return Object.assign(() => {
6310        }, __spreadProps(__spreadValues({}, parent), { [key]: value }));
6311      }, [parent, key, value]);
6312      return [parent == null ? void 0 : parent[key], { onLoadedMetadataCapture }];
6313    }
6314    function useIsMouseMoving() {
6315      (0, import_react3.useEffect)(() => {
6316        addGlobalEventListener("mousemove", setMouseMoving, true);
6317        addGlobalEventListener("mousedown", resetMouseMoving, true);
6318        addGlobalEventListener("mouseup", resetMouseMoving, true);
6319        addGlobalEventListener("keydown", resetMouseMoving, true);
6320        addGlobalEventListener("scroll", resetMouseMoving, true);
6321      }, []);
6322      const isMouseMoving = useEvent(() => mouseMoving);
6323      return isMouseMoving;
6324    }
6325    var mouseMoving = false;
6326    var previousScreenX = 0;
6327    var previousScreenY = 0;
6328    function hasMouseMovement(event) {
6329      const movementX = event.movementX || event.screenX - previousScreenX;
6330      const movementY = event.movementY || event.screenY - previousScreenY;
6331      previousScreenX = event.screenX;
6332      previousScreenY = event.screenY;
6333      return movementX || movementY || false;
6334    }
6335    function setMouseMoving(event) {
6336      if (!hasMouseMovement(event)) return;
6337      mouseMoving = true;
6338    }
6339    function resetMouseMoving() {
6340      mouseMoving = false;
6341    }
6342  
6343    // node_modules/@ariakit/react-core/esm/__chunks/LMDWO4NN.js
6344    var React2 = __toESM(require_react(), 1);
6345    var import_jsx_runtime51 = __toESM(require_jsx_runtime(), 1);
6346    function forwardRef22(render4) {
6347      const Role = React2.forwardRef((props, ref) => render4(__spreadProps(__spreadValues({}, props), { ref })));
6348      Role.displayName = render4.displayName || render4.name;
6349      return Role;
6350    }
6351    function memo22(Component2, propsAreEqual) {
6352      return React2.memo(Component2, propsAreEqual);
6353    }
6354    function createElement2(Type, props) {
6355      const _a = props, { wrapElement, render: render4 } = _a, rest = __objRest(_a, ["wrapElement", "render"]);
6356      const mergedRef = useMergeRefs(props.ref, getRefProperty(render4));
6357      let element;
6358      if (React2.isValidElement(render4)) {
6359        const renderProps = __spreadProps(__spreadValues({}, render4.props), { ref: mergedRef });
6360        element = React2.cloneElement(render4, mergeProps(rest, renderProps));
6361      } else if (render4) {
6362        element = render4(rest);
6363      } else {
6364        element = /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Type, __spreadValues({}, rest));
6365      }
6366      if (wrapElement) {
6367        return wrapElement(element);
6368      }
6369      return element;
6370    }
6371    function createHook(useProps) {
6372      const useRole = (props = {}) => {
6373        return useProps(props);
6374      };
6375      useRole.displayName = useProps.name;
6376      return useRole;
6377    }
6378    function createStoreContext(providers = [], scopedProviders = []) {
6379      const context = React2.createContext(void 0);
6380      const scopedContext = React2.createContext(void 0);
6381      const useContext27 = () => React2.useContext(context);
6382      const useScopedContext = (onlyScoped = false) => {
6383        const scoped = React2.useContext(scopedContext);
6384        const store = useContext27();
6385        if (onlyScoped) return scoped;
6386        return scoped || store;
6387      };
6388      const useProviderContext = () => {
6389        const scoped = React2.useContext(scopedContext);
6390        const store = useContext27();
6391        if (scoped && scoped === store) return;
6392        return store;
6393      };
6394      const ContextProvider = (props) => {
6395        return providers.reduceRight(
6396          (children, Provider) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Provider, __spreadProps(__spreadValues({}, props), { children })),
6397          /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(context.Provider, __spreadValues({}, props))
6398        );
6399      };
6400      const ScopedContextProvider = (props) => {
6401        return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(ContextProvider, __spreadProps(__spreadValues({}, props), { children: scopedProviders.reduceRight(
6402          (children, Provider) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Provider, __spreadProps(__spreadValues({}, props), { children })),
6403          /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(scopedContext.Provider, __spreadValues({}, props))
6404        ) }));
6405      };
6406      return {
6407        context,
6408        scopedContext,
6409        useContext: useContext27,
6410        useScopedContext,
6411        useProviderContext,
6412        ContextProvider,
6413        ScopedContextProvider
6414      };
6415    }
6416  
6417    // node_modules/@ariakit/react-core/esm/__chunks/VDHZ5F7K.js
6418    var ctx = createStoreContext();
6419    var useCollectionContext = ctx.useContext;
6420    var useCollectionScopedContext = ctx.useScopedContext;
6421    var useCollectionProviderContext = ctx.useProviderContext;
6422    var CollectionContextProvider = ctx.ContextProvider;
6423    var CollectionScopedContextProvider = ctx.ScopedContextProvider;
6424  
6425    // node_modules/@ariakit/react-core/esm/__chunks/P7GR5CS5.js
6426    var import_react4 = __toESM(require_react(), 1);
6427    var ctx2 = createStoreContext(
6428      [CollectionContextProvider],
6429      [CollectionScopedContextProvider]
6430    );
6431    var useCompositeContext = ctx2.useContext;
6432    var useCompositeScopedContext = ctx2.useScopedContext;
6433    var useCompositeProviderContext = ctx2.useProviderContext;
6434    var CompositeContextProvider = ctx2.ContextProvider;
6435    var CompositeScopedContextProvider = ctx2.ScopedContextProvider;
6436    var CompositeItemContext = (0, import_react4.createContext)(
6437      void 0
6438    );
6439    var CompositeRowContext = (0, import_react4.createContext)(
6440      void 0
6441    );
6442  
6443    // node_modules/@ariakit/react-core/esm/__chunks/3XAVFTCA.js
6444    var import_react5 = __toESM(require_react(), 1);
6445    var TagValueContext = (0, import_react5.createContext)(null);
6446    var TagRemoveIdContext = (0, import_react5.createContext)(
6447      null
6448    );
6449    var ctx3 = createStoreContext(
6450      [CompositeContextProvider],
6451      [CompositeScopedContextProvider]
6452    );
6453    var useTagContext = ctx3.useContext;
6454    var useTagScopedContext = ctx3.useScopedContext;
6455    var useTagProviderContext = ctx3.useProviderContext;
6456    var TagContextProvider = ctx3.ContextProvider;
6457    var TagScopedContextProvider = ctx3.ScopedContextProvider;
6458  
6459    // node_modules/@ariakit/core/esm/__chunks/BCALMBPZ.js
6460    function getInternal(store, key) {
6461      const internals = store.__unstableInternals;
6462      invariant(internals, "Invalid store");
6463      return internals[key];
6464    }
6465    function createStore(initialState, ...stores) {
6466      let state = initialState;
6467      let prevStateBatch = state;
6468      let lastUpdate = Symbol();
6469      let destroy = noop2;
6470      const instances = /* @__PURE__ */ new Set();
6471      const updatedKeys = /* @__PURE__ */ new Set();
6472      const setups = /* @__PURE__ */ new Set();
6473      const listeners = /* @__PURE__ */ new Set();
6474      const batchListeners = /* @__PURE__ */ new Set();
6475      const disposables = /* @__PURE__ */ new WeakMap();
6476      const listenerKeys = /* @__PURE__ */ new WeakMap();
6477      const storeSetup = (callback) => {
6478        setups.add(callback);
6479        return () => setups.delete(callback);
6480      };
6481      const storeInit = () => {
6482        const initialized = instances.size;
6483        const instance = Symbol();
6484        instances.add(instance);
6485        const maybeDestroy = () => {
6486          instances.delete(instance);
6487          if (instances.size) return;
6488          destroy();
6489        };
6490        if (initialized) return maybeDestroy;
6491        const desyncs = getKeys(state).map(
6492          (key) => chain(
6493            ...stores.map((store) => {
6494              var _a;
6495              const storeState = (_a = store == null ? void 0 : store.getState) == null ? void 0 : _a.call(store);
6496              if (!storeState) return;
6497              if (!hasOwnProperty(storeState, key)) return;
6498              return sync(store, [key], (state2) => {
6499                setState(
6500                  key,
6501                  state2[key],
6502                  // @ts-expect-error - Not public API. This is just to prevent
6503                  // infinite loops.
6504                  true
6505                );
6506              });
6507            })
6508          )
6509        );
6510        const teardowns = [];
6511        for (const setup2 of setups) {
6512          teardowns.push(setup2());
6513        }
6514        const cleanups = stores.map(init);
6515        destroy = chain(...desyncs, ...teardowns, ...cleanups);
6516        return maybeDestroy;
6517      };
6518      const sub = (keys, listener, set = listeners) => {
6519        set.add(listener);
6520        listenerKeys.set(listener, keys);
6521        return () => {
6522          var _a;
6523          (_a = disposables.get(listener)) == null ? void 0 : _a();
6524          disposables.delete(listener);
6525          listenerKeys.delete(listener);
6526          set.delete(listener);
6527        };
6528      };
6529      const storeSubscribe = (keys, listener) => sub(keys, listener);
6530      const storeSync = (keys, listener) => {
6531        disposables.set(listener, listener(state, state));
6532        return sub(keys, listener);
6533      };
6534      const storeBatch = (keys, listener) => {
6535        disposables.set(listener, listener(state, prevStateBatch));
6536        return sub(keys, listener, batchListeners);
6537      };
6538      const storePick = (keys) => createStore(pick(state, keys), finalStore);
6539      const storeOmit = (keys) => createStore(omit(state, keys), finalStore);
6540      const getState = () => state;
6541      const setState = (key, value, fromStores = false) => {
6542        var _a;
6543        if (!hasOwnProperty(state, key)) return;
6544        const nextValue = applyState(value, state[key]);
6545        if (nextValue === state[key]) return;
6546        if (!fromStores) {
6547          for (const store of stores) {
6548            (_a = store == null ? void 0 : store.setState) == null ? void 0 : _a.call(store, key, nextValue);
6549          }
6550        }
6551        const prevState = state;
6552        state = __spreadProps2(__spreadValues2({}, state), { [key]: nextValue });
6553        const thisUpdate = Symbol();
6554        lastUpdate = thisUpdate;
6555        updatedKeys.add(key);
6556        const run = (listener, prev, uKeys) => {
6557          var _a2;
6558          const keys = listenerKeys.get(listener);
6559          const updated = (k) => uKeys ? uKeys.has(k) : k === key;
6560          if (!keys || keys.some(updated)) {
6561            (_a2 = disposables.get(listener)) == null ? void 0 : _a2();
6562            disposables.set(listener, listener(state, prev));
6563          }
6564        };
6565        for (const listener of listeners) {
6566          run(listener, prevState);
6567        }
6568        queueMicrotask(() => {
6569          if (lastUpdate !== thisUpdate) return;
6570          const snapshot = state;
6571          for (const listener of batchListeners) {
6572            run(listener, prevStateBatch, updatedKeys);
6573          }
6574          prevStateBatch = snapshot;
6575          updatedKeys.clear();
6576        });
6577      };
6578      const finalStore = {
6579        getState,
6580        setState,
6581        __unstableInternals: {
6582          setup: storeSetup,
6583          init: storeInit,
6584          subscribe: storeSubscribe,
6585          sync: storeSync,
6586          batch: storeBatch,
6587          pick: storePick,
6588          omit: storeOmit
6589        }
6590      };
6591      return finalStore;
6592    }
6593    function setup(store, ...args) {
6594      if (!store) return;
6595      return getInternal(store, "setup")(...args);
6596    }
6597    function init(store, ...args) {
6598      if (!store) return;
6599      return getInternal(store, "init")(...args);
6600    }
6601    function subscribe(store, ...args) {
6602      if (!store) return;
6603      return getInternal(store, "subscribe")(...args);
6604    }
6605    function sync(store, ...args) {
6606      if (!store) return;
6607      return getInternal(store, "sync")(...args);
6608    }
6609    function batch(store, ...args) {
6610      if (!store) return;
6611      return getInternal(store, "batch")(...args);
6612    }
6613    function omit2(store, ...args) {
6614      if (!store) return;
6615      return getInternal(store, "omit")(...args);
6616    }
6617    function pick2(store, ...args) {
6618      if (!store) return;
6619      return getInternal(store, "pick")(...args);
6620    }
6621    function mergeStore(...stores) {
6622      const initialState = stores.reduce((state, store2) => {
6623        var _a;
6624        const nextState = (_a = store2 == null ? void 0 : store2.getState) == null ? void 0 : _a.call(store2);
6625        if (!nextState) return state;
6626        return Object.assign(state, nextState);
6627      }, {});
6628      const store = createStore(initialState, ...stores);
6629      return Object.assign({}, ...stores, store);
6630    }
6631    function throwOnConflictingProps(props, store) {
6632      if (false) return;
6633      if (!store) return;
6634      const defaultKeys = Object.entries(props).filter(([key, value]) => key.startsWith("default") && value !== void 0).map(([key]) => {
6635        var _a;
6636        const stateKey = key.replace("default", "");
6637        return `${((_a = stateKey[0]) == null ? void 0 : _a.toLowerCase()) || ""}$stateKey.slice(1)}`;
6638      });
6639      if (!defaultKeys.length) return;
6640      const storeState = store.getState();
6641      const conflictingProps = defaultKeys.filter(
6642        (key) => hasOwnProperty(storeState, key)
6643      );
6644      if (!conflictingProps.length) return;
6645      throw new Error(
6646        `Passing a store prop in conjunction with a default state is not supported.
6647  
6648  const store = useSelectStore();
6649  <SelectProvider store={store} defaultValue="Apple" />
6650                  ^             ^
6651  
6652  Instead, pass the default state to the topmost store:
6653  
6654  const store = useSelectStore({ defaultValue: "Apple" });
6655  <SelectProvider store={store} />
6656  
6657  See https://github.com/ariakit/ariakit/pull/2745 for more details.
6658  
6659  If there's a particular need for this, please submit a feature request at https://github.com/ariakit/ariakit
6660  `
6661      );
6662    }
6663  
6664    // node_modules/@ariakit/react-core/esm/__chunks/YV4JVR4I.js
6665    var React3 = __toESM(require_react(), 1);
6666    var import_shim = __toESM(require_shim(), 1);
6667    var { useSyncExternalStore } = import_shim.default;
6668    var noopSubscribe = () => () => {
6669    };
6670    function useStoreState(store, keyOrSelector = identity) {
6671      const storeSubscribe = React3.useCallback(
6672        (callback) => {
6673          if (!store) return noopSubscribe();
6674          return subscribe(store, null, callback);
6675        },
6676        [store]
6677      );
6678      const getSnapshot = () => {
6679        const key = typeof keyOrSelector === "string" ? keyOrSelector : null;
6680        const selector2 = typeof keyOrSelector === "function" ? keyOrSelector : null;
6681        const state = store == null ? void 0 : store.getState();
6682        if (selector2) return selector2(state);
6683        if (!state) return;
6684        if (!key) return;
6685        if (!hasOwnProperty(state, key)) return;
6686        return state[key];
6687      };
6688      return useSyncExternalStore(storeSubscribe, getSnapshot, getSnapshot);
6689    }
6690    function useStoreStateObject(store, object) {
6691      const objRef = React3.useRef(
6692        {}
6693      );
6694      const storeSubscribe = React3.useCallback(
6695        (callback) => {
6696          if (!store) return noopSubscribe();
6697          return subscribe(store, null, callback);
6698        },
6699        [store]
6700      );
6701      const getSnapshot = () => {
6702        const state = store == null ? void 0 : store.getState();
6703        let updated = false;
6704        const obj = objRef.current;
6705        for (const prop in object) {
6706          const keyOrSelector = object[prop];
6707          if (typeof keyOrSelector === "function") {
6708            const value = keyOrSelector(state);
6709            if (value !== obj[prop]) {
6710              obj[prop] = value;
6711              updated = true;
6712            }
6713          }
6714          if (typeof keyOrSelector === "string") {
6715            if (!state) continue;
6716            if (!hasOwnProperty(state, keyOrSelector)) continue;
6717            const value = state[keyOrSelector];
6718            if (value !== obj[prop]) {
6719              obj[prop] = value;
6720              updated = true;
6721            }
6722          }
6723        }
6724        if (updated) {
6725          objRef.current = __spreadValues({}, obj);
6726        }
6727        return objRef.current;
6728      };
6729      return useSyncExternalStore(storeSubscribe, getSnapshot, getSnapshot);
6730    }
6731    function useStoreProps(store, props, key, setKey) {
6732      const value = hasOwnProperty(props, key) ? props[key] : void 0;
6733      const setValue = setKey ? props[setKey] : void 0;
6734      const propsRef = useLiveRef({ value, setValue });
6735      useSafeLayoutEffect(() => {
6736        return sync(store, [key], (state, prev) => {
6737          const { value: value2, setValue: setValue2 } = propsRef.current;
6738          if (!setValue2) return;
6739          if (state[key] === prev[key]) return;
6740          if (state[key] === value2) return;
6741          setValue2(state[key]);
6742        });
6743      }, [store, key]);
6744      useSafeLayoutEffect(() => {
6745        if (value === void 0) return;
6746        store.setState(key, value);
6747        return batch(store, [key], () => {
6748          if (value === void 0) return;
6749          store.setState(key, value);
6750        });
6751      });
6752    }
6753    function useStore(createStore2, props) {
6754      const [store, setStore] = React3.useState(() => createStore2(props));
6755      useSafeLayoutEffect(() => init(store), [store]);
6756      const useState24 = React3.useCallback(
6757        (keyOrSelector) => useStoreState(store, keyOrSelector),
6758        [store]
6759      );
6760      const memoizedStore = React3.useMemo(
6761        () => __spreadProps(__spreadValues({}, store), { useState: useState24 }),
6762        [store, useState24]
6763      );
6764      const updateStore = useEvent(() => {
6765        setStore((store2) => createStore2(__spreadValues(__spreadValues({}, props), store2.getState())));
6766      });
6767      return [memoizedStore, updateStore];
6768    }
6769  
6770    // node_modules/@ariakit/core/esm/__chunks/CYQWQL4J.js
6771    function getCommonParent(items) {
6772      var _a;
6773      const firstItem = items.find((item) => !!item.element);
6774      const lastItem = [...items].reverse().find((item) => !!item.element);
6775      let parentElement = (_a = firstItem == null ? void 0 : firstItem.element) == null ? void 0 : _a.parentElement;
6776      while (parentElement && (lastItem == null ? void 0 : lastItem.element)) {
6777        const parent = parentElement;
6778        if (lastItem && parent.contains(lastItem.element)) {
6779          return parentElement;
6780        }
6781        parentElement = parentElement.parentElement;
6782      }
6783      return getDocument(parentElement).body;
6784    }
6785    function getPrivateStore(store) {
6786      return store == null ? void 0 : store.__unstablePrivateStore;
6787    }
6788    function createCollectionStore(props = {}) {
6789      var _a;
6790      throwOnConflictingProps(props, props.store);
6791      const syncState = (_a = props.store) == null ? void 0 : _a.getState();
6792      const items = defaultValue(
6793        props.items,
6794        syncState == null ? void 0 : syncState.items,
6795        props.defaultItems,
6796        []
6797      );
6798      const itemsMap = new Map(items.map((item) => [item.id, item]));
6799      const initialState = {
6800        items,
6801        renderedItems: defaultValue(syncState == null ? void 0 : syncState.renderedItems, [])
6802      };
6803      const syncPrivateStore = getPrivateStore(props.store);
6804      const privateStore = createStore(
6805        { items, renderedItems: initialState.renderedItems },
6806        syncPrivateStore
6807      );
6808      const collection = createStore(initialState, props.store);
6809      const sortItems = (renderedItems) => {
6810        const sortedItems = sortBasedOnDOMPosition(renderedItems, (i2) => i2.element);
6811        privateStore.setState("renderedItems", sortedItems);
6812        collection.setState("renderedItems", sortedItems);
6813      };
6814      setup(collection, () => init(privateStore));
6815      setup(privateStore, () => {
6816        return batch(privateStore, ["items"], (state) => {
6817          collection.setState("items", state.items);
6818        });
6819      });
6820      setup(privateStore, () => {
6821        return batch(privateStore, ["renderedItems"], (state) => {
6822          let firstRun = true;
6823          let raf = requestAnimationFrame(() => {
6824            const { renderedItems } = collection.getState();
6825            if (state.renderedItems === renderedItems) return;
6826            sortItems(state.renderedItems);
6827          });
6828          if (typeof IntersectionObserver !== "function") {
6829            return () => cancelAnimationFrame(raf);
6830          }
6831          const ioCallback = () => {
6832            if (firstRun) {
6833              firstRun = false;
6834              return;
6835            }
6836            cancelAnimationFrame(raf);
6837            raf = requestAnimationFrame(() => sortItems(state.renderedItems));
6838          };
6839          const root = getCommonParent(state.renderedItems);
6840          const observer = new IntersectionObserver(ioCallback, { root });
6841          for (const item of state.renderedItems) {
6842            if (!item.element) continue;
6843            observer.observe(item.element);
6844          }
6845          return () => {
6846            cancelAnimationFrame(raf);
6847            observer.disconnect();
6848          };
6849        });
6850      });
6851      const mergeItem = (item, setItems, canDeleteFromMap = false) => {
6852        let prevItem;
6853        setItems((items2) => {
6854          const index = items2.findIndex(({ id }) => id === item.id);
6855          const nextItems = items2.slice();
6856          if (index !== -1) {
6857            prevItem = items2[index];
6858            const nextItem = __spreadValues2(__spreadValues2({}, prevItem), item);
6859            nextItems[index] = nextItem;
6860            itemsMap.set(item.id, nextItem);
6861          } else {
6862            nextItems.push(item);
6863            itemsMap.set(item.id, item);
6864          }
6865          return nextItems;
6866        });
6867        const unmergeItem = () => {
6868          setItems((items2) => {
6869            if (!prevItem) {
6870              if (canDeleteFromMap) {
6871                itemsMap.delete(item.id);
6872              }
6873              return items2.filter(({ id }) => id !== item.id);
6874            }
6875            const index = items2.findIndex(({ id }) => id === item.id);
6876            if (index === -1) return items2;
6877            const nextItems = items2.slice();
6878            nextItems[index] = prevItem;
6879            itemsMap.set(item.id, prevItem);
6880            return nextItems;
6881          });
6882        };
6883        return unmergeItem;
6884      };
6885      const registerItem = (item) => mergeItem(
6886        item,
6887        (getItems) => privateStore.setState("items", getItems),
6888        true
6889      );
6890      return __spreadProps2(__spreadValues2({}, collection), {
6891        registerItem,
6892        renderItem: (item) => chain(
6893          registerItem(item),
6894          mergeItem(
6895            item,
6896            (getItems) => privateStore.setState("renderedItems", getItems)
6897          )
6898        ),
6899        item: (id) => {
6900          if (!id) return null;
6901          let item = itemsMap.get(id);
6902          if (!item) {
6903            const { items: items2 } = privateStore.getState();
6904            item = items2.find((item2) => item2.id === id);
6905            if (item) {
6906              itemsMap.set(id, item);
6907            }
6908          }
6909          return item || null;
6910        },
6911        // @ts-expect-error Internal
6912        __unstablePrivateStore: privateStore
6913      });
6914    }
6915  
6916    // node_modules/@ariakit/react-core/esm/__chunks/C3IKGW5T.js
6917    function useCollectionStoreProps(store, update, props) {
6918      useUpdateEffect(update, [props.store]);
6919      useStoreProps(store, props, "items", "setItems");
6920      return store;
6921    }
6922  
6923    // node_modules/@ariakit/core/esm/__chunks/7PRQYBBV.js
6924    function toArray(arg) {
6925      if (Array.isArray(arg)) {
6926        return arg;
6927      }
6928      return typeof arg !== "undefined" ? [arg] : [];
6929    }
6930    function flatten2DArray(array) {
6931      const flattened = [];
6932      for (const row of array) {
6933        flattened.push(...row);
6934      }
6935      return flattened;
6936    }
6937    function reverseArray(array) {
6938      return array.slice().reverse();
6939    }
6940  
6941    // node_modules/@ariakit/core/esm/__chunks/AJZ4BYF3.js
6942    var NULL_ITEM = { id: null };
6943    function findFirstEnabledItem(items, excludeId) {
6944      return items.find((item) => {
6945        if (excludeId) {
6946          return !item.disabled && item.id !== excludeId;
6947        }
6948        return !item.disabled;
6949      });
6950    }
6951    function getEnabledItems(items, excludeId) {
6952      return items.filter((item) => {
6953        if (excludeId) {
6954          return !item.disabled && item.id !== excludeId;
6955        }
6956        return !item.disabled;
6957      });
6958    }
6959    function getItemsInRow(items, rowId) {
6960      return items.filter((item) => item.rowId === rowId);
6961    }
6962    function flipItems(items, activeId, shouldInsertNullItem = false) {
6963      const index = items.findIndex((item) => item.id === activeId);
6964      return [
6965        ...items.slice(index + 1),
6966        ...shouldInsertNullItem ? [NULL_ITEM] : [],
6967        ...items.slice(0, index)
6968      ];
6969    }
6970    function groupItemsByRows(items) {
6971      const rows = [];
6972      for (const item of items) {
6973        const row = rows.find((currentRow) => {
6974          var _a;
6975          return ((_a = currentRow[0]) == null ? void 0 : _a.rowId) === item.rowId;
6976        });
6977        if (row) {
6978          row.push(item);
6979        } else {
6980          rows.push([item]);
6981        }
6982      }
6983      return rows;
6984    }
6985    function getMaxRowLength(array) {
6986      let maxLength = 0;
6987      for (const { length } of array) {
6988        if (length > maxLength) {
6989          maxLength = length;
6990        }
6991      }
6992      return maxLength;
6993    }
6994    function createEmptyItem(rowId) {
6995      return {
6996        id: "__EMPTY_ITEM__",
6997        disabled: true,
6998        rowId
6999      };
7000    }
7001    function normalizeRows(rows, activeId, focusShift) {
7002      const maxLength = getMaxRowLength(rows);
7003      for (const row of rows) {
7004        for (let i2 = 0; i2 < maxLength; i2 += 1) {
7005          const item = row[i2];
7006          if (!item || focusShift && item.disabled) {
7007            const isFirst = i2 === 0;
7008            const previousItem = isFirst && focusShift ? findFirstEnabledItem(row) : row[i2 - 1];
7009            row[i2] = previousItem && activeId !== previousItem.id && focusShift ? previousItem : createEmptyItem(previousItem == null ? void 0 : previousItem.rowId);
7010          }
7011        }
7012      }
7013      return rows;
7014    }
7015    function verticalizeItems(items) {
7016      const rows = groupItemsByRows(items);
7017      const maxLength = getMaxRowLength(rows);
7018      const verticalized = [];
7019      for (let i2 = 0; i2 < maxLength; i2 += 1) {
7020        for (const row of rows) {
7021          const item = row[i2];
7022          if (item) {
7023            verticalized.push(__spreadProps2(__spreadValues2({}, item), {
7024              // If there's no rowId, it means that it's not a grid composite, but
7025              // a single row instead. So, instead of verticalizing it, that is,
7026              // assigning a different rowId based on the column index, we keep it
7027              // undefined so they will be part of the same row. This is useful
7028              // when using up/down on one-dimensional composites.
7029              rowId: item.rowId ? `$i2}` : void 0
7030            }));
7031          }
7032        }
7033      }
7034      return verticalized;
7035    }
7036    function createCompositeStore(props = {}) {
7037      var _a;
7038      const syncState = (_a = props.store) == null ? void 0 : _a.getState();
7039      const collection = createCollectionStore(props);
7040      const activeId = defaultValue(
7041        props.activeId,
7042        syncState == null ? void 0 : syncState.activeId,
7043        props.defaultActiveId
7044      );
7045      const initialState = __spreadProps2(__spreadValues2({}, collection.getState()), {
7046        id: defaultValue(
7047          props.id,
7048          syncState == null ? void 0 : syncState.id,
7049          `id-$Math.random().toString(36).slice(2, 8)}`
7050        ),
7051        activeId,
7052        baseElement: defaultValue(syncState == null ? void 0 : syncState.baseElement, null),
7053        includesBaseElement: defaultValue(
7054          props.includesBaseElement,
7055          syncState == null ? void 0 : syncState.includesBaseElement,
7056          activeId === null
7057        ),
7058        moves: defaultValue(syncState == null ? void 0 : syncState.moves, 0),
7059        orientation: defaultValue(
7060          props.orientation,
7061          syncState == null ? void 0 : syncState.orientation,
7062          "both"
7063        ),
7064        rtl: defaultValue(props.rtl, syncState == null ? void 0 : syncState.rtl, false),
7065        virtualFocus: defaultValue(
7066          props.virtualFocus,
7067          syncState == null ? void 0 : syncState.virtualFocus,
7068          false
7069        ),
7070        focusLoop: defaultValue(props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, false),
7071        focusWrap: defaultValue(props.focusWrap, syncState == null ? void 0 : syncState.focusWrap, false),
7072        focusShift: defaultValue(props.focusShift, syncState == null ? void 0 : syncState.focusShift, false)
7073      });
7074      const composite = createStore(initialState, collection, props.store);
7075      setup(
7076        composite,
7077        () => sync(composite, ["renderedItems", "activeId"], (state) => {
7078          composite.setState("activeId", (activeId2) => {
7079            var _a2;
7080            if (activeId2 !== void 0) return activeId2;
7081            return (_a2 = findFirstEnabledItem(state.renderedItems)) == null ? void 0 : _a2.id;
7082          });
7083        })
7084      );
7085      const getNextId = (direction = "next", options = {}) => {
7086        var _a2, _b;
7087        const defaultState = composite.getState();
7088        const {
7089          skip = 0,
7090          activeId: activeId2 = defaultState.activeId,
7091          focusShift = defaultState.focusShift,
7092          focusLoop = defaultState.focusLoop,
7093          focusWrap = defaultState.focusWrap,
7094          includesBaseElement = defaultState.includesBaseElement,
7095          renderedItems = defaultState.renderedItems,
7096          rtl = defaultState.rtl
7097        } = options;
7098        const isVerticalDirection = direction === "up" || direction === "down";
7099        const isNextDirection = direction === "next" || direction === "down";
7100        const canReverse = isNextDirection ? rtl && !isVerticalDirection : !rtl || isVerticalDirection;
7101        const canShift = focusShift && !skip;
7102        let items = !isVerticalDirection ? renderedItems : flatten2DArray(
7103          normalizeRows(groupItemsByRows(renderedItems), activeId2, canShift)
7104        );
7105        items = canReverse ? reverseArray(items) : items;
7106        items = isVerticalDirection ? verticalizeItems(items) : items;
7107        if (activeId2 == null) {
7108          return (_a2 = findFirstEnabledItem(items)) == null ? void 0 : _a2.id;
7109        }
7110        const activeItem = items.find((item) => item.id === activeId2);
7111        if (!activeItem) {
7112          return (_b = findFirstEnabledItem(items)) == null ? void 0 : _b.id;
7113        }
7114        const isGrid2 = items.some((item) => item.rowId);
7115        const activeIndex = items.indexOf(activeItem);
7116        const nextItems = items.slice(activeIndex + 1);
7117        const nextItemsInRow = getItemsInRow(nextItems, activeItem.rowId);
7118        if (skip) {
7119          const nextEnabledItemsInRow = getEnabledItems(nextItemsInRow, activeId2);
7120          const nextItem2 = nextEnabledItemsInRow.slice(skip)[0] || // If we can't find an item, just return the last one.
7121          nextEnabledItemsInRow[nextEnabledItemsInRow.length - 1];
7122          return nextItem2 == null ? void 0 : nextItem2.id;
7123        }
7124        const canLoop = focusLoop && (isVerticalDirection ? focusLoop !== "horizontal" : focusLoop !== "vertical");
7125        const canWrap = isGrid2 && focusWrap && (isVerticalDirection ? focusWrap !== "horizontal" : focusWrap !== "vertical");
7126        const hasNullItem = isNextDirection ? (!isGrid2 || isVerticalDirection) && canLoop && includesBaseElement : isVerticalDirection ? includesBaseElement : false;
7127        if (canLoop) {
7128          const loopItems = canWrap && !hasNullItem ? items : getItemsInRow(items, activeItem.rowId);
7129          const sortedItems = flipItems(loopItems, activeId2, hasNullItem);
7130          const nextItem2 = findFirstEnabledItem(sortedItems, activeId2);
7131          return nextItem2 == null ? void 0 : nextItem2.id;
7132        }
7133        if (canWrap) {
7134          const nextItem2 = findFirstEnabledItem(
7135            // We can use nextItems, which contains all the next items, including
7136            // items from other rows, to wrap between rows. However, if there is a
7137            // null item (the composite container), we'll only use the next items in
7138            // the row. So moving next from the last item will focus on the
7139            // composite container. On grid composites, horizontal navigation never
7140            // focuses on the composite container, only vertical.
7141            hasNullItem ? nextItemsInRow : nextItems,
7142            activeId2
7143          );
7144          const nextId = hasNullItem ? (nextItem2 == null ? void 0 : nextItem2.id) || null : nextItem2 == null ? void 0 : nextItem2.id;
7145          return nextId;
7146        }
7147        const nextItem = findFirstEnabledItem(nextItemsInRow, activeId2);
7148        if (!nextItem && hasNullItem) {
7149          return null;
7150        }
7151        return nextItem == null ? void 0 : nextItem.id;
7152      };
7153      return __spreadProps2(__spreadValues2(__spreadValues2({}, collection), composite), {
7154        setBaseElement: (element) => composite.setState("baseElement", element),
7155        setActiveId: (id) => composite.setState("activeId", id),
7156        move: (id) => {
7157          if (id === void 0) return;
7158          composite.setState("activeId", id);
7159          composite.setState("moves", (moves) => moves + 1);
7160        },
7161        first: () => {
7162          var _a2;
7163          return (_a2 = findFirstEnabledItem(composite.getState().renderedItems)) == null ? void 0 : _a2.id;
7164        },
7165        last: () => {
7166          var _a2;
7167          return (_a2 = findFirstEnabledItem(reverseArray(composite.getState().renderedItems))) == null ? void 0 : _a2.id;
7168        },
7169        next: (options) => {
7170          if (options !== void 0 && typeof options === "number") {
7171            options = { skip: options };
7172          }
7173          return getNextId("next", options);
7174        },
7175        previous: (options) => {
7176          if (options !== void 0 && typeof options === "number") {
7177            options = { skip: options };
7178          }
7179          return getNextId("previous", options);
7180        },
7181        down: (options) => {
7182          if (options !== void 0 && typeof options === "number") {
7183            options = { skip: options };
7184          }
7185          return getNextId("down", options);
7186        },
7187        up: (options) => {
7188          if (options !== void 0 && typeof options === "number") {
7189            options = { skip: options };
7190          }
7191          return getNextId("up", options);
7192        }
7193      });
7194    }
7195  
7196    // node_modules/@ariakit/react-core/esm/__chunks/4CMBR7SL.js
7197    function useCompositeStoreOptions(props) {
7198      const id = useId3(props.id);
7199      return __spreadValues({ id }, props);
7200    }
7201    function useCompositeStoreProps(store, update, props) {
7202      store = useCollectionStoreProps(store, update, props);
7203      useStoreProps(store, props, "activeId", "setActiveId");
7204      useStoreProps(store, props, "includesBaseElement");
7205      useStoreProps(store, props, "virtualFocus");
7206      useStoreProps(store, props, "orientation");
7207      useStoreProps(store, props, "rtl");
7208      useStoreProps(store, props, "focusLoop");
7209      useStoreProps(store, props, "focusWrap");
7210      useStoreProps(store, props, "focusShift");
7211      return store;
7212    }
7213  
7214    // node_modules/@ariakit/core/esm/__chunks/RCQ5P4YE.js
7215    function createDisclosureStore(props = {}) {
7216      const store = mergeStore(
7217        props.store,
7218        omit2(props.disclosure, ["contentElement", "disclosureElement"])
7219      );
7220      throwOnConflictingProps(props, store);
7221      const syncState = store == null ? void 0 : store.getState();
7222      const open = defaultValue(
7223        props.open,
7224        syncState == null ? void 0 : syncState.open,
7225        props.defaultOpen,
7226        false
7227      );
7228      const animated = defaultValue(props.animated, syncState == null ? void 0 : syncState.animated, false);
7229      const initialState = {
7230        open,
7231        animated,
7232        animating: !!animated && open,
7233        mounted: open,
7234        contentElement: defaultValue(syncState == null ? void 0 : syncState.contentElement, null),
7235        disclosureElement: defaultValue(syncState == null ? void 0 : syncState.disclosureElement, null)
7236      };
7237      const disclosure = createStore(initialState, store);
7238      setup(
7239        disclosure,
7240        () => sync(disclosure, ["animated", "animating"], (state) => {
7241          if (state.animated) return;
7242          disclosure.setState("animating", false);
7243        })
7244      );
7245      setup(
7246        disclosure,
7247        () => subscribe(disclosure, ["open"], () => {
7248          if (!disclosure.getState().animated) return;
7249          disclosure.setState("animating", true);
7250        })
7251      );
7252      setup(
7253        disclosure,
7254        () => sync(disclosure, ["open", "animating"], (state) => {
7255          disclosure.setState("mounted", state.open || state.animating);
7256        })
7257      );
7258      return __spreadProps2(__spreadValues2({}, disclosure), {
7259        disclosure: props.disclosure,
7260        setOpen: (value) => disclosure.setState("open", value),
7261        show: () => disclosure.setState("open", true),
7262        hide: () => disclosure.setState("open", false),
7263        toggle: () => disclosure.setState("open", (open2) => !open2),
7264        stopAnimation: () => disclosure.setState("animating", false),
7265        setContentElement: (value) => disclosure.setState("contentElement", value),
7266        setDisclosureElement: (value) => disclosure.setState("disclosureElement", value)
7267      });
7268    }
7269  
7270    // node_modules/@ariakit/react-core/esm/__chunks/WYCIER3C.js
7271    function useDisclosureStoreProps(store, update, props) {
7272      useUpdateEffect(update, [props.store, props.disclosure]);
7273      useStoreProps(store, props, "open", "setOpen");
7274      useStoreProps(store, props, "mounted", "setMounted");
7275      useStoreProps(store, props, "animated");
7276      return Object.assign(store, { disclosure: props.disclosure });
7277    }
7278  
7279    // node_modules/@ariakit/core/esm/__chunks/FZZ2AVHF.js
7280    function createDialogStore(props = {}) {
7281      return createDisclosureStore(props);
7282    }
7283  
7284    // node_modules/@ariakit/react-core/esm/__chunks/BM6PGYQY.js
7285    function useDialogStoreProps(store, update, props) {
7286      return useDisclosureStoreProps(store, update, props);
7287    }
7288  
7289    // node_modules/@ariakit/core/esm/__chunks/ME2CUF3F.js
7290    function createPopoverStore(_a = {}) {
7291      var _b = _a, {
7292        popover: otherPopover
7293      } = _b, props = __objRest2(_b, [
7294        "popover"
7295      ]);
7296      const store = mergeStore(
7297        props.store,
7298        omit2(otherPopover, [
7299          "arrowElement",
7300          "anchorElement",
7301          "contentElement",
7302          "popoverElement",
7303          "disclosureElement"
7304        ])
7305      );
7306      throwOnConflictingProps(props, store);
7307      const syncState = store == null ? void 0 : store.getState();
7308      const dialog = createDialogStore(__spreadProps2(__spreadValues2({}, props), { store }));
7309      const placement = defaultValue(
7310        props.placement,
7311        syncState == null ? void 0 : syncState.placement,
7312        "bottom"
7313      );
7314      const initialState = __spreadProps2(__spreadValues2({}, dialog.getState()), {
7315        placement,
7316        currentPlacement: placement,
7317        anchorElement: defaultValue(syncState == null ? void 0 : syncState.anchorElement, null),
7318        popoverElement: defaultValue(syncState == null ? void 0 : syncState.popoverElement, null),
7319        arrowElement: defaultValue(syncState == null ? void 0 : syncState.arrowElement, null),
7320        rendered: Symbol("rendered")
7321      });
7322      const popover = createStore(initialState, dialog, store);
7323      return __spreadProps2(__spreadValues2(__spreadValues2({}, dialog), popover), {
7324        setAnchorElement: (element) => popover.setState("anchorElement", element),
7325        setPopoverElement: (element) => popover.setState("popoverElement", element),
7326        setArrowElement: (element) => popover.setState("arrowElement", element),
7327        render: () => popover.setState("rendered", Symbol("rendered"))
7328      });
7329    }
7330  
7331    // node_modules/@ariakit/react-core/esm/__chunks/O2PQ2652.js
7332    function usePopoverStoreProps(store, update, props) {
7333      useUpdateEffect(update, [props.popover]);
7334      useStoreProps(store, props, "placement");
7335      return useDialogStoreProps(store, update, props);
7336    }
7337  
7338    // node_modules/@ariakit/core/esm/combobox/combobox-store.js
7339    var isTouchSafari = isSafari() && isTouchDevice();
7340    function createComboboxStore(_a = {}) {
7341      var _b = _a, {
7342        tag
7343      } = _b, props = __objRest2(_b, [
7344        "tag"
7345      ]);
7346      const store = mergeStore(props.store, pick2(tag, ["value", "rtl"]));
7347      throwOnConflictingProps(props, store);
7348      const tagState = tag == null ? void 0 : tag.getState();
7349      const syncState = store == null ? void 0 : store.getState();
7350      const activeId = defaultValue(
7351        props.activeId,
7352        syncState == null ? void 0 : syncState.activeId,
7353        props.defaultActiveId,
7354        null
7355      );
7356      const composite = createCompositeStore(__spreadProps2(__spreadValues2({}, props), {
7357        activeId,
7358        includesBaseElement: defaultValue(
7359          props.includesBaseElement,
7360          syncState == null ? void 0 : syncState.includesBaseElement,
7361          true
7362        ),
7363        orientation: defaultValue(
7364          props.orientation,
7365          syncState == null ? void 0 : syncState.orientation,
7366          "vertical"
7367        ),
7368        focusLoop: defaultValue(props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, true),
7369        focusWrap: defaultValue(props.focusWrap, syncState == null ? void 0 : syncState.focusWrap, true),
7370        virtualFocus: defaultValue(
7371          props.virtualFocus,
7372          syncState == null ? void 0 : syncState.virtualFocus,
7373          true
7374        )
7375      }));
7376      const popover = createPopoverStore(__spreadProps2(__spreadValues2({}, props), {
7377        placement: defaultValue(
7378          props.placement,
7379          syncState == null ? void 0 : syncState.placement,
7380          "bottom-start"
7381        )
7382      }));
7383      const value = defaultValue(
7384        props.value,
7385        syncState == null ? void 0 : syncState.value,
7386        props.defaultValue,
7387        ""
7388      );
7389      const selectedValue = defaultValue(
7390        props.selectedValue,
7391        syncState == null ? void 0 : syncState.selectedValue,
7392        tagState == null ? void 0 : tagState.values,
7393        props.defaultSelectedValue,
7394        ""
7395      );
7396      const multiSelectable = Array.isArray(selectedValue);
7397      const initialState = __spreadProps2(__spreadValues2(__spreadValues2({}, composite.getState()), popover.getState()), {
7398        value,
7399        selectedValue,
7400        resetValueOnSelect: defaultValue(
7401          props.resetValueOnSelect,
7402          syncState == null ? void 0 : syncState.resetValueOnSelect,
7403          multiSelectable
7404        ),
7405        resetValueOnHide: defaultValue(
7406          props.resetValueOnHide,
7407          syncState == null ? void 0 : syncState.resetValueOnHide,
7408          multiSelectable && !tag
7409        ),
7410        activeValue: syncState == null ? void 0 : syncState.activeValue
7411      });
7412      const combobox = createStore(initialState, composite, popover, store);
7413      if (isTouchSafari) {
7414        setup(
7415          combobox,
7416          () => sync(combobox, ["virtualFocus"], () => {
7417            combobox.setState("virtualFocus", false);
7418          })
7419        );
7420      }
7421      setup(combobox, () => {
7422        if (!tag) return;
7423        return chain(
7424          sync(combobox, ["selectedValue"], (state) => {
7425            if (!Array.isArray(state.selectedValue)) return;
7426            tag.setValues(state.selectedValue);
7427          }),
7428          sync(tag, ["values"], (state) => {
7429            combobox.setState("selectedValue", state.values);
7430          })
7431        );
7432      });
7433      setup(
7434        combobox,
7435        () => sync(combobox, ["resetValueOnHide", "mounted"], (state) => {
7436          if (!state.resetValueOnHide) return;
7437          if (state.mounted) return;
7438          combobox.setState("value", value);
7439        })
7440      );
7441      setup(
7442        combobox,
7443        () => sync(combobox, ["open"], (state) => {
7444          if (state.open) return;
7445          combobox.setState("activeId", activeId);
7446          combobox.setState("moves", 0);
7447        })
7448      );
7449      setup(
7450        combobox,
7451        () => sync(combobox, ["moves", "activeId"], (state, prevState) => {
7452          if (state.moves === prevState.moves) {
7453            combobox.setState("activeValue", void 0);
7454          }
7455        })
7456      );
7457      setup(
7458        combobox,
7459        () => batch(combobox, ["moves", "renderedItems"], (state, prev) => {
7460          if (state.moves === prev.moves) return;
7461          const { activeId: activeId2 } = combobox.getState();
7462          const activeItem = composite.item(activeId2);
7463          combobox.setState("activeValue", activeItem == null ? void 0 : activeItem.value);
7464        })
7465      );
7466      return __spreadProps2(__spreadValues2(__spreadValues2(__spreadValues2({}, popover), composite), combobox), {
7467        tag,
7468        setValue: (value2) => combobox.setState("value", value2),
7469        resetValue: () => combobox.setState("value", initialState.value),
7470        setSelectedValue: (selectedValue2) => combobox.setState("selectedValue", selectedValue2)
7471      });
7472    }
7473  
7474    // node_modules/@ariakit/react-core/esm/__chunks/FEOFMWBY.js
7475    function useComboboxStoreOptions(props) {
7476      const tag = useTagContext();
7477      props = __spreadProps(__spreadValues({}, props), {
7478        tag: props.tag !== void 0 ? props.tag : tag
7479      });
7480      return useCompositeStoreOptions(props);
7481    }
7482    function useComboboxStoreProps(store, update, props) {
7483      useUpdateEffect(update, [props.tag]);
7484      useStoreProps(store, props, "value", "setValue");
7485      useStoreProps(store, props, "selectedValue", "setSelectedValue");
7486      useStoreProps(store, props, "resetValueOnHide");
7487      useStoreProps(store, props, "resetValueOnSelect");
7488      return Object.assign(
7489        useCompositeStoreProps(
7490          usePopoverStoreProps(store, update, props),
7491          update,
7492          props
7493        ),
7494        { tag: props.tag }
7495      );
7496    }
7497    function useComboboxStore(props = {}) {
7498      props = useComboboxStoreOptions(props);
7499      const [store, update] = useStore(createComboboxStore, props);
7500      return useComboboxStoreProps(store, update, props);
7501    }
7502  
7503    // node_modules/@ariakit/react-core/esm/__chunks/S6EF7IVO.js
7504    var ctx4 = createStoreContext();
7505    var useDisclosureContext = ctx4.useContext;
7506    var useDisclosureScopedContext = ctx4.useScopedContext;
7507    var useDisclosureProviderContext = ctx4.useProviderContext;
7508    var DisclosureContextProvider = ctx4.ContextProvider;
7509    var DisclosureScopedContextProvider = ctx4.ScopedContextProvider;
7510  
7511    // node_modules/@ariakit/react-core/esm/__chunks/RS7LB2H4.js
7512    var import_react6 = __toESM(require_react(), 1);
7513    var ctx5 = createStoreContext(
7514      [DisclosureContextProvider],
7515      [DisclosureScopedContextProvider]
7516    );
7517    var useDialogContext = ctx5.useContext;
7518    var useDialogScopedContext = ctx5.useScopedContext;
7519    var useDialogProviderContext = ctx5.useProviderContext;
7520    var DialogContextProvider = ctx5.ContextProvider;
7521    var DialogScopedContextProvider = ctx5.ScopedContextProvider;
7522    var DialogHeadingContext = (0, import_react6.createContext)(void 0);
7523    var DialogDescriptionContext = (0, import_react6.createContext)(void 0);
7524  
7525    // node_modules/@ariakit/react-core/esm/__chunks/MTZPJQMC.js
7526    var ctx6 = createStoreContext(
7527      [DialogContextProvider],
7528      [DialogScopedContextProvider]
7529    );
7530    var usePopoverContext = ctx6.useContext;
7531    var usePopoverScopedContext = ctx6.useScopedContext;
7532    var usePopoverProviderContext = ctx6.useProviderContext;
7533    var PopoverContextProvider = ctx6.ContextProvider;
7534    var PopoverScopedContextProvider = ctx6.ScopedContextProvider;
7535  
7536    // node_modules/@ariakit/react-core/esm/__chunks/VEVQD5MH.js
7537    var import_react7 = __toESM(require_react(), 1);
7538    var ComboboxListRoleContext = (0, import_react7.createContext)(
7539      void 0
7540    );
7541    var ctx7 = createStoreContext(
7542      [PopoverContextProvider, CompositeContextProvider],
7543      [PopoverScopedContextProvider, CompositeScopedContextProvider]
7544    );
7545    var useComboboxContext = ctx7.useContext;
7546    var useComboboxScopedContext = ctx7.useScopedContext;
7547    var useComboboxProviderContext = ctx7.useProviderContext;
7548    var ComboboxContextProvider = ctx7.ContextProvider;
7549    var ComboboxScopedContextProvider = ctx7.ScopedContextProvider;
7550    var ComboboxItemValueContext = (0, import_react7.createContext)(
7551      void 0
7552    );
7553    var ComboboxItemCheckedContext = (0, import_react7.createContext)(false);
7554  
7555    // node_modules/@ariakit/react-core/esm/__chunks/OMU7RWRV.js
7556    var TagName = "div";
7557    var usePopoverAnchor = createHook(
7558      function usePopoverAnchor2(_a) {
7559        var _b = _a, { store } = _b, props = __objRest(_b, ["store"]);
7560        const context = usePopoverProviderContext();
7561        store = store || context;
7562        props = __spreadProps(__spreadValues({}, props), {
7563          ref: useMergeRefs(store == null ? void 0 : store.setAnchorElement, props.ref)
7564        });
7565        return props;
7566      }
7567    );
7568    var PopoverAnchor = forwardRef22(function PopoverAnchor2(props) {
7569      const htmlProps = usePopoverAnchor(props);
7570      return createElement2(TagName, htmlProps);
7571    });
7572  
7573    // node_modules/@ariakit/react-core/esm/__chunks/5VQZOHHZ.js
7574    function findFirstEnabledItem2(items, excludeId) {
7575      return items.find((item) => {
7576        if (excludeId) {
7577          return !item.disabled && item.id !== excludeId;
7578        }
7579        return !item.disabled;
7580      });
7581    }
7582    function getEnabledItem(store, id) {
7583      if (!id) return null;
7584      return store.item(id) || null;
7585    }
7586    function groupItemsByRows2(items) {
7587      const rows = [];
7588      for (const item of items) {
7589        const row = rows.find((currentRow) => {
7590          var _a;
7591          return ((_a = currentRow[0]) == null ? void 0 : _a.rowId) === item.rowId;
7592        });
7593        if (row) {
7594          row.push(item);
7595        } else {
7596          rows.push([item]);
7597        }
7598      }
7599      return rows;
7600    }
7601    function selectTextField(element, collapseToEnd = false) {
7602      if (isTextField(element)) {
7603        element.setSelectionRange(
7604          collapseToEnd ? element.value.length : 0,
7605          element.value.length
7606        );
7607      } else if (element.isContentEditable) {
7608        const selection = getDocument(element).getSelection();
7609        selection == null ? void 0 : selection.selectAllChildren(element);
7610        if (collapseToEnd) {
7611          selection == null ? void 0 : selection.collapseToEnd();
7612        }
7613      }
7614    }
7615    var FOCUS_SILENTLY = Symbol("FOCUS_SILENTLY");
7616    function focusSilently(element) {
7617      element[FOCUS_SILENTLY] = true;
7618      element.focus({ preventScroll: true });
7619    }
7620    function silentlyFocused(element) {
7621      const isSilentlyFocused = element[FOCUS_SILENTLY];
7622      delete element[FOCUS_SILENTLY];
7623      return isSilentlyFocused;
7624    }
7625    function isItem(store, element, exclude) {
7626      if (!element) return false;
7627      if (element === exclude) return false;
7628      const item = store.item(element.id);
7629      if (!item) return false;
7630      if (exclude && item.element === exclude) return false;
7631      return true;
7632    }
7633  
7634    // node_modules/@ariakit/react-core/esm/__chunks/SWN3JYXT.js
7635    var import_react8 = __toESM(require_react(), 1);
7636    var FocusableContext = (0, import_react8.createContext)(true);
7637  
7638    // node_modules/@ariakit/core/esm/utils/focus.js
7639    var selector = "input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], summary, iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])";
7640    function isFocusable(element) {
7641      if (!element.matches(selector)) return false;
7642      if (!isVisible(element)) return false;
7643      if (element.closest("[inert]")) return false;
7644      return true;
7645    }
7646    function getClosestFocusable(element) {
7647      while (element && !isFocusable(element)) {
7648        element = element.closest(selector);
7649      }
7650      return element || null;
7651    }
7652    function hasFocus(element) {
7653      const activeElement = getActiveElement(element);
7654      if (!activeElement) return false;
7655      if (activeElement === element) return true;
7656      const activeDescendant = activeElement.getAttribute("aria-activedescendant");
7657      if (!activeDescendant) return false;
7658      return activeDescendant === element.id;
7659    }
7660    function hasFocusWithin(element) {
7661      const activeElement = getActiveElement(element);
7662      if (!activeElement) return false;
7663      if (contains(element, activeElement)) return true;
7664      const activeDescendant = activeElement.getAttribute("aria-activedescendant");
7665      if (!activeDescendant) return false;
7666      if (!("id" in element)) return false;
7667      if (activeDescendant === element.id) return true;
7668      return !!element.querySelector(`#$CSS.escape(activeDescendant)}`);
7669    }
7670    function focusIfNeeded(element) {
7671      if (!hasFocusWithin(element) && isFocusable(element)) {
7672        element.focus();
7673      }
7674    }
7675    function focusIntoView(element, options) {
7676      if (!("scrollIntoView" in element)) {
7677        element.focus();
7678      } else {
7679        element.focus({ preventScroll: true });
7680        element.scrollIntoView(__spreadValues2({ block: "nearest", inline: "nearest" }, options));
7681      }
7682    }
7683  
7684    // node_modules/@ariakit/react-core/esm/__chunks/LVA2YJMS.js
7685    var import_react9 = __toESM(require_react(), 1);
7686    var TagName2 = "div";
7687    var isSafariBrowser = isSafari();
7688    var alwaysFocusVisibleInputTypes = [
7689      "text",
7690      "search",
7691      "url",
7692      "tel",
7693      "email",
7694      "password",
7695      "number",
7696      "date",
7697      "month",
7698      "week",
7699      "time",
7700      "datetime",
7701      "datetime-local"
7702    ];
7703    var safariFocusAncestorSymbol = Symbol("safariFocusAncestor");
7704    function markSafariFocusAncestor(element, value) {
7705      if (!element) return;
7706      element[safariFocusAncestorSymbol] = value;
7707    }
7708    function isAlwaysFocusVisible(element) {
7709      const { tagName, readOnly, type } = element;
7710      if (tagName === "TEXTAREA" && !readOnly) return true;
7711      if (tagName === "SELECT" && !readOnly) return true;
7712      if (tagName === "INPUT" && !readOnly) {
7713        return alwaysFocusVisibleInputTypes.includes(type);
7714      }
7715      if (element.isContentEditable) return true;
7716      const role = element.getAttribute("role");
7717      if (role === "combobox" && element.dataset.name) {
7718        return true;
7719      }
7720      return false;
7721    }
7722    function getLabels(element) {
7723      if ("labels" in element) {
7724        return element.labels;
7725      }
7726      return null;
7727    }
7728    function isNativeCheckboxOrRadio(element) {
7729      const tagName = element.tagName.toLowerCase();
7730      if (tagName === "input" && element.type) {
7731        return element.type === "radio" || element.type === "checkbox";
7732      }
7733      return false;
7734    }
7735    function isNativeTabbable(tagName) {
7736      if (!tagName) return true;
7737      return tagName === "button" || tagName === "summary" || tagName === "input" || tagName === "select" || tagName === "textarea" || tagName === "a";
7738    }
7739    function supportsDisabledAttribute(tagName) {
7740      if (!tagName) return true;
7741      return tagName === "button" || tagName === "input" || tagName === "select" || tagName === "textarea";
7742    }
7743    function getTabIndex(focusable, trulyDisabled, nativeTabbable, supportsDisabled, tabIndexProp) {
7744      if (!focusable) {
7745        return tabIndexProp;
7746      }
7747      if (trulyDisabled) {
7748        if (nativeTabbable && !supportsDisabled) {
7749          return -1;
7750        }
7751        return;
7752      }
7753      if (nativeTabbable) {
7754        return tabIndexProp;
7755      }
7756      return tabIndexProp || 0;
7757    }
7758    function useDisableEvent(onEvent, disabled) {
7759      return useEvent((event) => {
7760        onEvent == null ? void 0 : onEvent(event);
7761        if (event.defaultPrevented) return;
7762        if (disabled) {
7763          event.stopPropagation();
7764          event.preventDefault();
7765        }
7766      });
7767    }
7768    var isKeyboardModality = true;
7769    function onGlobalMouseDown(event) {
7770      const target = event.target;
7771      if (target && "hasAttribute" in target) {
7772        if (!target.hasAttribute("data-focus-visible")) {
7773          isKeyboardModality = false;
7774        }
7775      }
7776    }
7777    function onGlobalKeyDown(event) {
7778      if (event.metaKey) return;
7779      if (event.ctrlKey) return;
7780      if (event.altKey) return;
7781      isKeyboardModality = true;
7782    }
7783    var useFocusable = createHook(
7784      function useFocusable2(_a) {
7785        var _b = _a, {
7786          focusable = true,
7787          accessibleWhenDisabled,
7788          autoFocus,
7789          onFocusVisible
7790        } = _b, props = __objRest(_b, [
7791          "focusable",
7792          "accessibleWhenDisabled",
7793          "autoFocus",
7794          "onFocusVisible"
7795        ]);
7796        const ref = (0, import_react9.useRef)(null);
7797        (0, import_react9.useEffect)(() => {
7798          if (!focusable) return;
7799          addGlobalEventListener("mousedown", onGlobalMouseDown, true);
7800          addGlobalEventListener("keydown", onGlobalKeyDown, true);
7801        }, [focusable]);
7802        if (isSafariBrowser) {
7803          (0, import_react9.useEffect)(() => {
7804            if (!focusable) return;
7805            const element = ref.current;
7806            if (!element) return;
7807            if (!isNativeCheckboxOrRadio(element)) return;
7808            const labels = getLabels(element);
7809            if (!labels) return;
7810            const onMouseUp = () => queueMicrotask(() => element.focus());
7811            for (const label of labels) {
7812              label.addEventListener("mouseup", onMouseUp);
7813            }
7814            return () => {
7815              for (const label of labels) {
7816                label.removeEventListener("mouseup", onMouseUp);
7817              }
7818            };
7819          }, [focusable]);
7820        }
7821        const disabled = focusable && disabledFromProps(props);
7822        const trulyDisabled = !!disabled && !accessibleWhenDisabled;
7823        const [focusVisible, setFocusVisible] = (0, import_react9.useState)(false);
7824        (0, import_react9.useEffect)(() => {
7825          if (!focusable) return;
7826          if (trulyDisabled && focusVisible) {
7827            setFocusVisible(false);
7828          }
7829        }, [focusable, trulyDisabled, focusVisible]);
7830        (0, import_react9.useEffect)(() => {
7831          if (!focusable) return;
7832          if (!focusVisible) return;
7833          const element = ref.current;
7834          if (!element) return;
7835          if (typeof IntersectionObserver === "undefined") return;
7836          const observer = new IntersectionObserver(() => {
7837            if (!isFocusable(element)) {
7838              setFocusVisible(false);
7839            }
7840          });
7841          observer.observe(element);
7842          return () => observer.disconnect();
7843        }, [focusable, focusVisible]);
7844        const onKeyPressCapture = useDisableEvent(
7845          props.onKeyPressCapture,
7846          disabled
7847        );
7848        const onMouseDownCapture = useDisableEvent(
7849          props.onMouseDownCapture,
7850          disabled
7851        );
7852        const onClickCapture = useDisableEvent(props.onClickCapture, disabled);
7853        const onMouseDownProp = props.onMouseDown;
7854        const onMouseDown = useEvent((event) => {
7855          onMouseDownProp == null ? void 0 : onMouseDownProp(event);
7856          if (event.defaultPrevented) return;
7857          if (!focusable) return;
7858          const element = event.currentTarget;
7859          if (!isSafariBrowser) return;
7860          if (isPortalEvent(event)) return;
7861          if (!isButton(element) && !isNativeCheckboxOrRadio(element)) return;
7862          let receivedFocus = false;
7863          const onFocus = () => {
7864            receivedFocus = true;
7865          };
7866          const options = { capture: true, once: true };
7867          element.addEventListener("focusin", onFocus, options);
7868          const focusableContainer = getClosestFocusable(element.parentElement);
7869          markSafariFocusAncestor(focusableContainer, true);
7870          queueBeforeEvent(element, "mouseup", () => {
7871            element.removeEventListener("focusin", onFocus, true);
7872            markSafariFocusAncestor(focusableContainer, false);
7873            if (receivedFocus) return;
7874            focusIfNeeded(element);
7875          });
7876        });
7877        const handleFocusVisible = (event, currentTarget) => {
7878          if (currentTarget) {
7879            event.currentTarget = currentTarget;
7880          }
7881          if (!focusable) return;
7882          const element = event.currentTarget;
7883          if (!element) return;
7884          if (!hasFocus(element)) return;
7885          onFocusVisible == null ? void 0 : onFocusVisible(event);
7886          if (event.defaultPrevented) return;
7887          element.dataset.focusVisible = "true";
7888          setFocusVisible(true);
7889        };
7890        const onKeyDownCaptureProp = props.onKeyDownCapture;
7891        const onKeyDownCapture = useEvent((event) => {
7892          onKeyDownCaptureProp == null ? void 0 : onKeyDownCaptureProp(event);
7893          if (event.defaultPrevented) return;
7894          if (!focusable) return;
7895          if (focusVisible) return;
7896          if (event.metaKey) return;
7897          if (event.altKey) return;
7898          if (event.ctrlKey) return;
7899          if (!isSelfTarget(event)) return;
7900          const element = event.currentTarget;
7901          const applyFocusVisible = () => handleFocusVisible(event, element);
7902          queueBeforeEvent(element, "focusout", applyFocusVisible);
7903        });
7904        const onFocusCaptureProp = props.onFocusCapture;
7905        const onFocusCapture = useEvent((event) => {
7906          onFocusCaptureProp == null ? void 0 : onFocusCaptureProp(event);
7907          if (event.defaultPrevented) return;
7908          if (!focusable) return;
7909          if (!isSelfTarget(event)) {
7910            setFocusVisible(false);
7911            return;
7912          }
7913          const element = event.currentTarget;
7914          const applyFocusVisible = () => handleFocusVisible(event, element);
7915          if (isKeyboardModality || isAlwaysFocusVisible(event.target)) {
7916            queueBeforeEvent(event.target, "focusout", applyFocusVisible);
7917          } else {
7918            setFocusVisible(false);
7919          }
7920        });
7921        const onBlurProp = props.onBlur;
7922        const onBlur = useEvent((event) => {
7923          onBlurProp == null ? void 0 : onBlurProp(event);
7924          if (!focusable) return;
7925          if (!isFocusEventOutside(event)) return;
7926          setFocusVisible(false);
7927        });
7928        const autoFocusOnShow = (0, import_react9.useContext)(FocusableContext);
7929        const autoFocusRef = useEvent((element) => {
7930          if (!focusable) return;
7931          if (!autoFocus) return;
7932          if (!element) return;
7933          if (!autoFocusOnShow) return;
7934          queueMicrotask(() => {
7935            if (hasFocus(element)) return;
7936            if (!isFocusable(element)) return;
7937            element.focus();
7938          });
7939        });
7940        const tagName = useTagName(ref);
7941        const nativeTabbable = focusable && isNativeTabbable(tagName);
7942        const supportsDisabled = focusable && supportsDisabledAttribute(tagName);
7943        const styleProp = props.style;
7944        const style = (0, import_react9.useMemo)(() => {
7945          if (trulyDisabled) {
7946            return __spreadValues({ pointerEvents: "none" }, styleProp);
7947          }
7948          return styleProp;
7949        }, [trulyDisabled, styleProp]);
7950        props = __spreadProps(__spreadValues({
7951          "data-focus-visible": focusable && focusVisible || void 0,
7952          "data-autofocus": autoFocus || void 0,
7953          "aria-disabled": disabled || void 0
7954        }, props), {
7955          ref: useMergeRefs(ref, autoFocusRef, props.ref),
7956          style,
7957          tabIndex: getTabIndex(
7958            focusable,
7959            trulyDisabled,
7960            nativeTabbable,
7961            supportsDisabled,
7962            props.tabIndex
7963          ),
7964          disabled: supportsDisabled && trulyDisabled ? true : void 0,
7965          // TODO: Test Focusable contentEditable.
7966          contentEditable: disabled ? void 0 : props.contentEditable,
7967          onKeyPressCapture,
7968          onClickCapture,
7969          onMouseDownCapture,
7970          onMouseDown,
7971          onKeyDownCapture,
7972          onFocusCapture,
7973          onBlur
7974        });
7975        return removeUndefinedValues(props);
7976      }
7977    );
7978    var Focusable = forwardRef22(function Focusable2(props) {
7979      const htmlProps = useFocusable(props);
7980      return createElement2(TagName2, htmlProps);
7981    });
7982  
7983    // node_modules/@ariakit/react-core/esm/__chunks/ITI7HKP4.js
7984    var import_react10 = __toESM(require_react(), 1);
7985    var import_jsx_runtime52 = __toESM(require_jsx_runtime(), 1);
7986    var TagName3 = "div";
7987    function isGrid(items) {
7988      return items.some((item) => !!item.rowId);
7989    }
7990    function isPrintableKey(event) {
7991      const target = event.target;
7992      if (target && !isTextField(target)) return false;
7993      return event.key.length === 1 && !event.ctrlKey && !event.metaKey;
7994    }
7995    function isModifierKey(event) {
7996      return event.key === "Shift" || event.key === "Control" || event.key === "Alt" || event.key === "Meta";
7997    }
7998    function useKeyboardEventProxy(store, onKeyboardEvent, previousElementRef) {
7999      return useEvent((event) => {
8000        var _a;
8001        onKeyboardEvent == null ? void 0 : onKeyboardEvent(event);
8002        if (event.defaultPrevented) return;
8003        if (event.isPropagationStopped()) return;
8004        if (!isSelfTarget(event)) return;
8005        if (isModifierKey(event)) return;
8006        if (isPrintableKey(event)) return;
8007        const state = store.getState();
8008        const activeElement = (_a = getEnabledItem(store, state.activeId)) == null ? void 0 : _a.element;
8009        if (!activeElement) return;
8010        const _b = event, { view } = _b, eventInit = __objRest(_b, ["view"]);
8011        const previousElement = previousElementRef == null ? void 0 : previousElementRef.current;
8012        if (activeElement !== previousElement) {
8013          activeElement.focus();
8014        }
8015        if (!fireKeyboardEvent(activeElement, event.type, eventInit)) {
8016          event.preventDefault();
8017        }
8018        if (event.currentTarget.contains(activeElement)) {
8019          event.stopPropagation();
8020        }
8021      });
8022    }
8023    function findFirstEnabledItemInTheLastRow(items) {
8024      return findFirstEnabledItem2(
8025        flatten2DArray(reverseArray(groupItemsByRows2(items)))
8026      );
8027    }
8028    function useScheduleFocus(store) {
8029      const [scheduled, setScheduled] = (0, import_react10.useState)(false);
8030      const schedule = (0, import_react10.useCallback)(() => setScheduled(true), []);
8031      const activeItem = store.useState(
8032        (state) => getEnabledItem(store, state.activeId)
8033      );
8034      (0, import_react10.useEffect)(() => {
8035        const activeElement = activeItem == null ? void 0 : activeItem.element;
8036        if (!scheduled) return;
8037        if (!activeElement) return;
8038        setScheduled(false);
8039        activeElement.focus({ preventScroll: true });
8040      }, [activeItem, scheduled]);
8041      return schedule;
8042    }
8043    var useComposite = createHook(
8044      function useComposite2(_a) {
8045        var _b = _a, {
8046          store,
8047          composite = true,
8048          focusOnMove = composite,
8049          moveOnKeyPress = true
8050        } = _b, props = __objRest(_b, [
8051          "store",
8052          "composite",
8053          "focusOnMove",
8054          "moveOnKeyPress"
8055        ]);
8056        const context = useCompositeProviderContext();
8057        store = store || context;
8058        invariant(
8059          store,
8060          "Composite must receive a `store` prop or be wrapped in a CompositeProvider component."
8061        );
8062        const ref = (0, import_react10.useRef)(null);
8063        const previousElementRef = (0, import_react10.useRef)(null);
8064        const scheduleFocus = useScheduleFocus(store);
8065        const moves = store.useState("moves");
8066        const [, setBaseElement] = useTransactionState(
8067          composite ? store.setBaseElement : null
8068        );
8069        (0, import_react10.useEffect)(() => {
8070          var _a2;
8071          if (!store) return;
8072          if (!moves) return;
8073          if (!composite) return;
8074          if (!focusOnMove) return;
8075          const { activeId: activeId2 } = store.getState();
8076          const itemElement = (_a2 = getEnabledItem(store, activeId2)) == null ? void 0 : _a2.element;
8077          if (!itemElement) return;
8078          focusIntoView(itemElement);
8079        }, [store, moves, composite, focusOnMove]);
8080        useSafeLayoutEffect(() => {
8081          if (!store) return;
8082          if (!moves) return;
8083          if (!composite) return;
8084          const { baseElement, activeId: activeId2 } = store.getState();
8085          const isSelfAcive = activeId2 === null;
8086          if (!isSelfAcive) return;
8087          if (!baseElement) return;
8088          const previousElement = previousElementRef.current;
8089          previousElementRef.current = null;
8090          if (previousElement) {
8091            fireBlurEvent(previousElement, { relatedTarget: baseElement });
8092          }
8093          if (!hasFocus(baseElement)) {
8094            baseElement.focus();
8095          }
8096        }, [store, moves, composite]);
8097        const activeId = store.useState("activeId");
8098        const virtualFocus = store.useState("virtualFocus");
8099        useSafeLayoutEffect(() => {
8100          var _a2;
8101          if (!store) return;
8102          if (!composite) return;
8103          if (!virtualFocus) return;
8104          const previousElement = previousElementRef.current;
8105          previousElementRef.current = null;
8106          if (!previousElement) return;
8107          const activeElement = (_a2 = getEnabledItem(store, activeId)) == null ? void 0 : _a2.element;
8108          const relatedTarget = activeElement || getActiveElement(previousElement);
8109          if (relatedTarget === previousElement) return;
8110          fireBlurEvent(previousElement, { relatedTarget });
8111        }, [store, activeId, virtualFocus, composite]);
8112        const onKeyDownCapture = useKeyboardEventProxy(
8113          store,
8114          props.onKeyDownCapture,
8115          previousElementRef
8116        );
8117        const onKeyUpCapture = useKeyboardEventProxy(
8118          store,
8119          props.onKeyUpCapture,
8120          previousElementRef
8121        );
8122        const onFocusCaptureProp = props.onFocusCapture;
8123        const onFocusCapture = useEvent((event) => {
8124          onFocusCaptureProp == null ? void 0 : onFocusCaptureProp(event);
8125          if (event.defaultPrevented) return;
8126          if (!store) return;
8127          const { virtualFocus: virtualFocus2 } = store.getState();
8128          if (!virtualFocus2) return;
8129          const previousActiveElement = event.relatedTarget;
8130          const isSilentlyFocused = silentlyFocused(event.currentTarget);
8131          if (isSelfTarget(event) && isSilentlyFocused) {
8132            event.stopPropagation();
8133            previousElementRef.current = previousActiveElement;
8134          }
8135        });
8136        const onFocusProp = props.onFocus;
8137        const onFocus = useEvent((event) => {
8138          onFocusProp == null ? void 0 : onFocusProp(event);
8139          if (event.defaultPrevented) return;
8140          if (!composite) return;
8141          if (!store) return;
8142          const { relatedTarget } = event;
8143          const { virtualFocus: virtualFocus2 } = store.getState();
8144          if (virtualFocus2) {
8145            if (isSelfTarget(event) && !isItem(store, relatedTarget)) {
8146              queueMicrotask(scheduleFocus);
8147            }
8148          } else if (isSelfTarget(event)) {
8149            store.setActiveId(null);
8150          }
8151        });
8152        const onBlurCaptureProp = props.onBlurCapture;
8153        const onBlurCapture = useEvent((event) => {
8154          var _a2;
8155          onBlurCaptureProp == null ? void 0 : onBlurCaptureProp(event);
8156          if (event.defaultPrevented) return;
8157          if (!store) return;
8158          const { virtualFocus: virtualFocus2, activeId: activeId2 } = store.getState();
8159          if (!virtualFocus2) return;
8160          const activeElement = (_a2 = getEnabledItem(store, activeId2)) == null ? void 0 : _a2.element;
8161          const nextActiveElement = event.relatedTarget;
8162          const nextActiveElementIsItem = isItem(store, nextActiveElement);
8163          const previousElement = previousElementRef.current;
8164          previousElementRef.current = null;
8165          if (isSelfTarget(event) && nextActiveElementIsItem) {
8166            if (nextActiveElement === activeElement) {
8167              if (previousElement && previousElement !== nextActiveElement) {
8168                fireBlurEvent(previousElement, event);
8169              }
8170            } else if (activeElement) {
8171              fireBlurEvent(activeElement, event);
8172            } else if (previousElement) {
8173              fireBlurEvent(previousElement, event);
8174            }
8175            event.stopPropagation();
8176          } else {
8177            const targetIsItem = isItem(store, event.target);
8178            if (!targetIsItem && activeElement) {
8179              fireBlurEvent(activeElement, event);
8180            }
8181          }
8182        });
8183        const onKeyDownProp = props.onKeyDown;
8184        const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress);
8185        const onKeyDown = useEvent((event) => {
8186          var _a2;
8187          onKeyDownProp == null ? void 0 : onKeyDownProp(event);
8188          if (event.defaultPrevented) return;
8189          if (!store) return;
8190          if (!isSelfTarget(event)) return;
8191          const { orientation, renderedItems, activeId: activeId2 } = store.getState();
8192          const activeItem = getEnabledItem(store, activeId2);
8193          if ((_a2 = activeItem == null ? void 0 : activeItem.element) == null ? void 0 : _a2.isConnected) return;
8194          const isVertical = orientation !== "horizontal";
8195          const isHorizontal = orientation !== "vertical";
8196          const grid = isGrid(renderedItems);
8197          const isHorizontalKey = event.key === "ArrowLeft" || event.key === "ArrowRight" || event.key === "Home" || event.key === "End";
8198          if (isHorizontalKey && isTextField(event.currentTarget)) return;
8199          const up = () => {
8200            if (grid) {
8201              const item = findFirstEnabledItemInTheLastRow(renderedItems);
8202              return item == null ? void 0 : item.id;
8203            }
8204            return store == null ? void 0 : store.last();
8205          };
8206          const keyMap = {
8207            ArrowUp: (grid || isVertical) && up,
8208            ArrowRight: (grid || isHorizontal) && store.first,
8209            ArrowDown: (grid || isVertical) && store.first,
8210            ArrowLeft: (grid || isHorizontal) && store.last,
8211            Home: store.first,
8212            End: store.last,
8213            PageUp: store.first,
8214            PageDown: store.last
8215          };
8216          const action = keyMap[event.key];
8217          if (action) {
8218            const id = action();
8219            if (id !== void 0) {
8220              if (!moveOnKeyPressProp(event)) return;
8221              event.preventDefault();
8222              store.move(id);
8223            }
8224          }
8225        });
8226        props = useWrapElement(
8227          props,
8228          (element) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(CompositeContextProvider, { value: store, children: element }),
8229          [store]
8230        );
8231        const activeDescendant = store.useState((state) => {
8232          var _a2;
8233          if (!store) return;
8234          if (!composite) return;
8235          if (!state.virtualFocus) return;
8236          return (_a2 = getEnabledItem(store, state.activeId)) == null ? void 0 : _a2.id;
8237        });
8238        props = __spreadProps(__spreadValues({
8239          "aria-activedescendant": activeDescendant
8240        }, props), {
8241          ref: useMergeRefs(ref, setBaseElement, props.ref),
8242          onKeyDownCapture,
8243          onKeyUpCapture,
8244          onFocusCapture,
8245          onFocus,
8246          onBlurCapture,
8247          onKeyDown
8248        });
8249        const focusable = store.useState(
8250          (state) => composite && (state.virtualFocus || state.activeId === null)
8251        );
8252        props = useFocusable(__spreadValues({ focusable }, props));
8253        return props;
8254      }
8255    );
8256    var Composite5 = forwardRef22(function Composite22(props) {
8257      const htmlProps = useComposite(props);
8258      return createElement2(TagName3, htmlProps);
8259    });
8260  
8261    // node_modules/@ariakit/react-core/esm/combobox/combobox.js
8262    var import_react11 = __toESM(require_react(), 1);
8263    var TagName4 = "input";
8264    function isFirstItemAutoSelected(items, activeValue, autoSelect) {
8265      if (!autoSelect) return false;
8266      const firstItem = items.find((item) => !item.disabled && item.value);
8267      return (firstItem == null ? void 0 : firstItem.value) === activeValue;
8268    }
8269    function hasCompletionString(value, activeValue) {
8270      if (!activeValue) return false;
8271      if (value == null) return false;
8272      value = normalizeString(value);
8273      return activeValue.length > value.length && activeValue.toLowerCase().indexOf(value.toLowerCase()) === 0;
8274    }
8275    function isInputEvent(event) {
8276      return event.type === "input";
8277    }
8278    function isAriaAutoCompleteValue(value) {
8279      return value === "inline" || value === "list" || value === "both" || value === "none";
8280    }
8281    function getDefaultAutoSelectId(items) {
8282      const item = items.find((item2) => {
8283        var _a;
8284        if (item2.disabled) return false;
8285        return ((_a = item2.element) == null ? void 0 : _a.getAttribute("role")) !== "tab";
8286      });
8287      return item == null ? void 0 : item.id;
8288    }
8289    var useCombobox = createHook(
8290      function useCombobox2(_a) {
8291        var _b = _a, {
8292          store,
8293          focusable = true,
8294          autoSelect: autoSelectProp = false,
8295          getAutoSelectId,
8296          setValueOnChange,
8297          showMinLength = 0,
8298          showOnChange,
8299          showOnMouseDown,
8300          showOnClick = showOnMouseDown,
8301          showOnKeyDown,
8302          showOnKeyPress = showOnKeyDown,
8303          blurActiveItemOnClick,
8304          setValueOnClick = true,
8305          moveOnKeyPress = true,
8306          autoComplete = "list"
8307        } = _b, props = __objRest(_b, [
8308          "store",
8309          "focusable",
8310          "autoSelect",
8311          "getAutoSelectId",
8312          "setValueOnChange",
8313          "showMinLength",
8314          "showOnChange",
8315          "showOnMouseDown",
8316          "showOnClick",
8317          "showOnKeyDown",
8318          "showOnKeyPress",
8319          "blurActiveItemOnClick",
8320          "setValueOnClick",
8321          "moveOnKeyPress",
8322          "autoComplete"
8323        ]);
8324        const context = useComboboxProviderContext();
8325        store = store || context;
8326        invariant(
8327          store,
8328          "Combobox must receive a `store` prop or be wrapped in a ComboboxProvider component."
8329        );
8330        const ref = (0, import_react11.useRef)(null);
8331        const [valueUpdated, forceValueUpdate] = useForceUpdate();
8332        const canAutoSelectRef = (0, import_react11.useRef)(false);
8333        const composingRef = (0, import_react11.useRef)(false);
8334        const autoSelect = store.useState(
8335          (state) => state.virtualFocus && autoSelectProp
8336        );
8337        const inline = autoComplete === "inline" || autoComplete === "both";
8338        const [canInline, setCanInline] = (0, import_react11.useState)(inline);
8339        useUpdateLayoutEffect(() => {
8340          if (!inline) return;
8341          setCanInline(true);
8342        }, [inline]);
8343        const storeValue = store.useState("value");
8344        const prevSelectedValueRef = (0, import_react11.useRef)();
8345        (0, import_react11.useEffect)(() => {
8346          return sync(store, ["selectedValue", "activeId"], (_, prev) => {
8347            prevSelectedValueRef.current = prev.selectedValue;
8348          });
8349        }, []);
8350        const inlineActiveValue = store.useState((state) => {
8351          var _a2;
8352          if (!inline) return;
8353          if (!canInline) return;
8354          if (state.activeValue && Array.isArray(state.selectedValue)) {
8355            if (state.selectedValue.includes(state.activeValue)) return;
8356            if ((_a2 = prevSelectedValueRef.current) == null ? void 0 : _a2.includes(state.activeValue)) return;
8357          }
8358          return state.activeValue;
8359        });
8360        const items = store.useState("renderedItems");
8361        const open = store.useState("open");
8362        const contentElement = store.useState("contentElement");
8363        const value = (0, import_react11.useMemo)(() => {
8364          if (!inline) return storeValue;
8365          if (!canInline) return storeValue;
8366          const firstItemAutoSelected = isFirstItemAutoSelected(
8367            items,
8368            inlineActiveValue,
8369            autoSelect
8370          );
8371          if (firstItemAutoSelected) {
8372            if (hasCompletionString(storeValue, inlineActiveValue)) {
8373              const slice = (inlineActiveValue == null ? void 0 : inlineActiveValue.slice(storeValue.length)) || "";
8374              return storeValue + slice;
8375            }
8376            return storeValue;
8377          }
8378          return inlineActiveValue || storeValue;
8379        }, [inline, canInline, items, inlineActiveValue, autoSelect, storeValue]);
8380        (0, import_react11.useEffect)(() => {
8381          const element = ref.current;
8382          if (!element) return;
8383          const onCompositeItemMove = () => setCanInline(true);
8384          element.addEventListener("combobox-item-move", onCompositeItemMove);
8385          return () => {
8386            element.removeEventListener("combobox-item-move", onCompositeItemMove);
8387          };
8388        }, []);
8389        (0, import_react11.useEffect)(() => {
8390          if (!inline) return;
8391          if (!canInline) return;
8392          if (!inlineActiveValue) return;
8393          const firstItemAutoSelected = isFirstItemAutoSelected(
8394            items,
8395            inlineActiveValue,
8396            autoSelect
8397          );
8398          if (!firstItemAutoSelected) return;
8399          if (!hasCompletionString(storeValue, inlineActiveValue)) return;
8400          let cleanup = noop2;
8401          queueMicrotask(() => {
8402            const element = ref.current;
8403            if (!element) return;
8404            const { start: prevStart, end: prevEnd } = getTextboxSelection(element);
8405            const nextStart = storeValue.length;
8406            const nextEnd = inlineActiveValue.length;
8407            setSelectionRange(element, nextStart, nextEnd);
8408            cleanup = () => {
8409              if (!hasFocus(element)) return;
8410              const { start, end } = getTextboxSelection(element);
8411              if (start !== nextStart) return;
8412              if (end !== nextEnd) return;
8413              setSelectionRange(element, prevStart, prevEnd);
8414            };
8415          });
8416          return () => cleanup();
8417        }, [
8418          valueUpdated,
8419          inline,
8420          canInline,
8421          inlineActiveValue,
8422          items,
8423          autoSelect,
8424          storeValue
8425        ]);
8426        const scrollingElementRef = (0, import_react11.useRef)(null);
8427        const getAutoSelectIdProp = useEvent(getAutoSelectId);
8428        const autoSelectIdRef = (0, import_react11.useRef)(null);
8429        (0, import_react11.useEffect)(() => {
8430          if (!open) return;
8431          if (!contentElement) return;
8432          const scrollingElement = getScrollingElement(contentElement);
8433          if (!scrollingElement) return;
8434          scrollingElementRef.current = scrollingElement;
8435          const onUserScroll = () => {
8436            canAutoSelectRef.current = false;
8437          };
8438          const onScroll = () => {
8439            if (!store) return;
8440            if (!canAutoSelectRef.current) return;
8441            const { activeId } = store.getState();
8442            if (activeId === null) return;
8443            if (activeId === autoSelectIdRef.current) return;
8444            canAutoSelectRef.current = false;
8445          };
8446          const options = { passive: true, capture: true };
8447          scrollingElement.addEventListener("wheel", onUserScroll, options);
8448          scrollingElement.addEventListener("touchmove", onUserScroll, options);
8449          scrollingElement.addEventListener("scroll", onScroll, options);
8450          return () => {
8451            scrollingElement.removeEventListener("wheel", onUserScroll, true);
8452            scrollingElement.removeEventListener("touchmove", onUserScroll, true);
8453            scrollingElement.removeEventListener("scroll", onScroll, true);
8454          };
8455        }, [open, contentElement, store]);
8456        useSafeLayoutEffect(() => {
8457          if (!storeValue) return;
8458          if (composingRef.current) return;
8459          canAutoSelectRef.current = true;
8460        }, [storeValue]);
8461        useSafeLayoutEffect(() => {
8462          if (autoSelect !== "always" && open) return;
8463          canAutoSelectRef.current = open;
8464        }, [autoSelect, open]);
8465        const resetValueOnSelect = store.useState("resetValueOnSelect");
8466        useUpdateEffect(() => {
8467          var _a2, _b2;
8468          const canAutoSelect = canAutoSelectRef.current;
8469          if (!store) return;
8470          if (!open) return;
8471          if (!canAutoSelect && !resetValueOnSelect) return;
8472          const { baseElement, contentElement: contentElement2, activeId } = store.getState();
8473          if (baseElement && !hasFocus(baseElement)) return;
8474          if (contentElement2 == null ? void 0 : contentElement2.hasAttribute("data-placing")) {
8475            const observer = new MutationObserver(forceValueUpdate);
8476            observer.observe(contentElement2, { attributeFilter: ["data-placing"] });
8477            return () => observer.disconnect();
8478          }
8479          if (autoSelect && canAutoSelect) {
8480            const userAutoSelectId = getAutoSelectIdProp(items);
8481            const autoSelectId = userAutoSelectId !== void 0 ? userAutoSelectId : (_a2 = getDefaultAutoSelectId(items)) != null ? _a2 : store.first();
8482            autoSelectIdRef.current = autoSelectId;
8483            store.move(autoSelectId != null ? autoSelectId : null);
8484          } else {
8485            const element = (_b2 = store.item(activeId || store.first())) == null ? void 0 : _b2.element;
8486            if (element && "scrollIntoView" in element) {
8487              element.scrollIntoView({ block: "nearest", inline: "nearest" });
8488            }
8489          }
8490          return;
8491        }, [
8492          store,
8493          open,
8494          valueUpdated,
8495          storeValue,
8496          autoSelect,
8497          resetValueOnSelect,
8498          getAutoSelectIdProp,
8499          items
8500        ]);
8501        (0, import_react11.useEffect)(() => {
8502          if (!inline) return;
8503          const combobox = ref.current;
8504          if (!combobox) return;
8505          const elements = [combobox, contentElement].filter(
8506            (value2) => !!value2
8507          );
8508          const onBlur2 = (event) => {
8509            if (elements.every((el) => isFocusEventOutside(event, el))) {
8510              store == null ? void 0 : store.setValue(value);
8511            }
8512          };
8513          for (const element of elements) {
8514            element.addEventListener("focusout", onBlur2);
8515          }
8516          return () => {
8517            for (const element of elements) {
8518              element.removeEventListener("focusout", onBlur2);
8519            }
8520          };
8521        }, [inline, contentElement, store, value]);
8522        const canShow = (event) => {
8523          const currentTarget = event.currentTarget;
8524          return currentTarget.value.length >= showMinLength;
8525        };
8526        const onChangeProp = props.onChange;
8527        const showOnChangeProp = useBooleanEvent(showOnChange != null ? showOnChange : canShow);
8528        const setValueOnChangeProp = useBooleanEvent(
8529          // If the combobox is combined with tags, the value will be set by the tag
8530          // input component.
8531          setValueOnChange != null ? setValueOnChange : !store.tag
8532        );
8533        const onChange = useEvent((event) => {
8534          onChangeProp == null ? void 0 : onChangeProp(event);
8535          if (event.defaultPrevented) return;
8536          if (!store) return;
8537          const currentTarget = event.currentTarget;
8538          const { value: value2, selectionStart, selectionEnd } = currentTarget;
8539          const nativeEvent = event.nativeEvent;
8540          canAutoSelectRef.current = true;
8541          if (isInputEvent(nativeEvent)) {
8542            if (nativeEvent.isComposing) {
8543              canAutoSelectRef.current = false;
8544              composingRef.current = true;
8545            }
8546            if (inline) {
8547              const textInserted = nativeEvent.inputType === "insertText" || nativeEvent.inputType === "insertCompositionText";
8548              const caretAtEnd = selectionStart === value2.length;
8549              setCanInline(textInserted && caretAtEnd);
8550            }
8551          }
8552          if (setValueOnChangeProp(event)) {
8553            const isSameValue = value2 === store.getState().value;
8554            store.setValue(value2);
8555            queueMicrotask(() => {
8556              setSelectionRange(currentTarget, selectionStart, selectionEnd);
8557            });
8558            if (inline && autoSelect && isSameValue) {
8559              forceValueUpdate();
8560            }
8561          }
8562          if (showOnChangeProp(event)) {
8563            store.show();
8564          }
8565          if (!autoSelect || !canAutoSelectRef.current) {
8566            store.setActiveId(null);
8567          }
8568        });
8569        const onCompositionEndProp = props.onCompositionEnd;
8570        const onCompositionEnd = useEvent((event) => {
8571          canAutoSelectRef.current = true;
8572          composingRef.current = false;
8573          onCompositionEndProp == null ? void 0 : onCompositionEndProp(event);
8574          if (event.defaultPrevented) return;
8575          if (!autoSelect) return;
8576          forceValueUpdate();
8577        });
8578        const onMouseDownProp = props.onMouseDown;
8579        const blurActiveItemOnClickProp = useBooleanEvent(
8580          blurActiveItemOnClick != null ? blurActiveItemOnClick : () => !!(store == null ? void 0 : store.getState().includesBaseElement)
8581        );
8582        const setValueOnClickProp = useBooleanEvent(setValueOnClick);
8583        const showOnClickProp = useBooleanEvent(showOnClick != null ? showOnClick : canShow);
8584        const onMouseDown = useEvent((event) => {
8585          onMouseDownProp == null ? void 0 : onMouseDownProp(event);
8586          if (event.defaultPrevented) return;
8587          if (event.button) return;
8588          if (event.ctrlKey) return;
8589          if (!store) return;
8590          if (blurActiveItemOnClickProp(event)) {
8591            store.setActiveId(null);
8592          }
8593          if (setValueOnClickProp(event)) {
8594            store.setValue(value);
8595          }
8596          if (showOnClickProp(event)) {
8597            queueBeforeEvent(event.currentTarget, "mouseup", store.show);
8598          }
8599        });
8600        const onKeyDownProp = props.onKeyDown;
8601        const showOnKeyPressProp = useBooleanEvent(showOnKeyPress != null ? showOnKeyPress : canShow);
8602        const onKeyDown = useEvent((event) => {
8603          onKeyDownProp == null ? void 0 : onKeyDownProp(event);
8604          if (!event.repeat) {
8605            canAutoSelectRef.current = false;
8606          }
8607          if (event.defaultPrevented) return;
8608          if (event.ctrlKey) return;
8609          if (event.altKey) return;
8610          if (event.shiftKey) return;
8611          if (event.metaKey) return;
8612          if (!store) return;
8613          const { open: open2 } = store.getState();
8614          if (open2) return;
8615          if (event.key === "ArrowUp" || event.key === "ArrowDown") {
8616            if (showOnKeyPressProp(event)) {
8617              event.preventDefault();
8618              store.show();
8619            }
8620          }
8621        });
8622        const onBlurProp = props.onBlur;
8623        const onBlur = useEvent((event) => {
8624          canAutoSelectRef.current = false;
8625          onBlurProp == null ? void 0 : onBlurProp(event);
8626          if (event.defaultPrevented) return;
8627        });
8628        const id = useId3(props.id);
8629        const ariaAutoComplete = isAriaAutoCompleteValue(autoComplete) ? autoComplete : void 0;
8630        const isActiveItem = store.useState((state) => state.activeId === null);
8631        props = __spreadProps(__spreadValues({
8632          id,
8633          role: "combobox",
8634          "aria-autocomplete": ariaAutoComplete,
8635          "aria-haspopup": getPopupRole(contentElement, "listbox"),
8636          "aria-expanded": open,
8637          "aria-controls": contentElement == null ? void 0 : contentElement.id,
8638          "data-active-item": isActiveItem || void 0,
8639          value
8640        }, props), {
8641          ref: useMergeRefs(ref, props.ref),
8642          onChange,
8643          onCompositionEnd,
8644          onMouseDown,
8645          onKeyDown,
8646          onBlur
8647        });
8648        props = useComposite(__spreadProps(__spreadValues({
8649          store,
8650          focusable
8651        }, props), {
8652          // Enable inline autocomplete when the user moves from the combobox input
8653          // to an item.
8654          moveOnKeyPress: (event) => {
8655            if (isFalsyBooleanCallback(moveOnKeyPress, event)) return false;
8656            if (inline) setCanInline(true);
8657            return true;
8658          }
8659        }));
8660        props = usePopoverAnchor(__spreadValues({ store }, props));
8661        return __spreadValues({ autoComplete: "off" }, props);
8662      }
8663    );
8664    var Combobox = forwardRef22(function Combobox2(props) {
8665      const htmlProps = useCombobox(props);
8666      return createElement2(TagName4, htmlProps);
8667    });
8668  
8669    // node_modules/@ariakit/react-core/esm/combobox/combobox-provider.js
8670    var import_jsx_runtime53 = __toESM(require_jsx_runtime(), 1);
8671    function ComboboxProvider(props = {}) {
8672      const store = useComboboxStore(props);
8673      return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(ComboboxContextProvider, { value: store, children: props.children });
8674    }
8675  
8676    // node_modules/@ariakit/react-core/esm/__chunks/KUU7WJ55.js
8677    var import_react12 = __toESM(require_react(), 1);
8678    var TagName5 = "button";
8679    function isNativeClick(event) {
8680      if (!event.isTrusted) return false;
8681      const element = event.currentTarget;
8682      if (event.key === "Enter") {
8683        return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "A";
8684      }
8685      if (event.key === " ") {
8686        return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "INPUT" || element.tagName === "SELECT";
8687      }
8688      return false;
8689    }
8690    var symbol = Symbol("command");
8691    var useCommand = createHook(
8692      function useCommand2(_a) {
8693        var _b = _a, { clickOnEnter = true, clickOnSpace = true } = _b, props = __objRest(_b, ["clickOnEnter", "clickOnSpace"]);
8694        const ref = (0, import_react12.useRef)(null);
8695        const [isNativeButton, setIsNativeButton] = (0, import_react12.useState)(false);
8696        (0, import_react12.useEffect)(() => {
8697          if (!ref.current) return;
8698          setIsNativeButton(isButton(ref.current));
8699        }, []);
8700        const [active, setActive] = (0, import_react12.useState)(false);
8701        const activeRef = (0, import_react12.useRef)(false);
8702        const disabled = disabledFromProps(props);
8703        const [isDuplicate, metadataProps] = useMetadataProps(props, symbol, true);
8704        const onKeyDownProp = props.onKeyDown;
8705        const onKeyDown = useEvent((event) => {
8706          onKeyDownProp == null ? void 0 : onKeyDownProp(event);
8707          const element = event.currentTarget;
8708          if (event.defaultPrevented) return;
8709          if (isDuplicate) return;
8710          if (disabled) return;
8711          if (!isSelfTarget(event)) return;
8712          if (isTextField(element)) return;
8713          if (element.isContentEditable) return;
8714          const isEnter = clickOnEnter && event.key === "Enter";
8715          const isSpace = clickOnSpace && event.key === " ";
8716          const shouldPreventEnter = event.key === "Enter" && !clickOnEnter;
8717          const shouldPreventSpace = event.key === " " && !clickOnSpace;
8718          if (shouldPreventEnter || shouldPreventSpace) {
8719            event.preventDefault();
8720            return;
8721          }
8722          if (isEnter || isSpace) {
8723            const nativeClick = isNativeClick(event);
8724            if (isEnter) {
8725              if (!nativeClick) {
8726                event.preventDefault();
8727                const _a2 = event, { view } = _a2, eventInit = __objRest(_a2, ["view"]);
8728                const click = () => fireClickEvent(element, eventInit);
8729                if (isFirefox()) {
8730                  queueBeforeEvent(element, "keyup", click);
8731                } else {
8732                  queueMicrotask(click);
8733                }
8734              }
8735            } else if (isSpace) {
8736              activeRef.current = true;
8737              if (!nativeClick) {
8738                event.preventDefault();
8739                setActive(true);
8740              }
8741            }
8742          }
8743        });
8744        const onKeyUpProp = props.onKeyUp;
8745        const onKeyUp = useEvent((event) => {
8746          onKeyUpProp == null ? void 0 : onKeyUpProp(event);
8747          if (event.defaultPrevented) return;
8748          if (isDuplicate) return;
8749          if (disabled) return;
8750          if (event.metaKey) return;
8751          const isSpace = clickOnSpace && event.key === " ";
8752          if (activeRef.current && isSpace) {
8753            activeRef.current = false;
8754            if (!isNativeClick(event)) {
8755              event.preventDefault();
8756              setActive(false);
8757              const element = event.currentTarget;
8758              const _a2 = event, { view } = _a2, eventInit = __objRest(_a2, ["view"]);
8759              queueMicrotask(() => fireClickEvent(element, eventInit));
8760            }
8761          }
8762        });
8763        props = __spreadProps(__spreadValues(__spreadValues({
8764          "data-active": active || void 0,
8765          type: isNativeButton ? "button" : void 0
8766        }, metadataProps), props), {
8767          ref: useMergeRefs(ref, props.ref),
8768          onKeyDown,
8769          onKeyUp
8770        });
8771        props = useFocusable(props);
8772        return props;
8773      }
8774    );
8775    var Command = forwardRef22(function Command2(props) {
8776      const htmlProps = useCommand(props);
8777      return createElement2(TagName5, htmlProps);
8778    });
8779  
8780    // node_modules/@ariakit/react-core/esm/combobox/combobox-item-value.js
8781    var import_react13 = __toESM(require_react(), 1);
8782    var import_jsx_runtime54 = __toESM(require_jsx_runtime(), 1);
8783    var TagName6 = "span";
8784    function normalizeValue(value) {
8785      return normalizeString(value).toLowerCase();
8786    }
8787    function getOffsets(string, values) {
8788      const offsets = [];
8789      for (const value of values) {
8790        let pos = 0;
8791        const length = value.length;
8792        while (string.indexOf(value, pos) !== -1) {
8793          const index = string.indexOf(value, pos);
8794          if (index !== -1) {
8795            offsets.push([index, length]);
8796          }
8797          pos = index + 1;
8798        }
8799      }
8800      return offsets;
8801    }
8802    function filterOverlappingOffsets(offsets) {
8803      return offsets.filter(([offset, length], i2, arr) => {
8804        return !arr.some(
8805          ([o2, l2], j2) => j2 !== i2 && o2 <= offset && o2 + l2 >= offset + length
8806        );
8807      });
8808    }
8809    function sortOffsets(offsets) {
8810      return offsets.sort(([a2], [b2]) => a2 - b2);
8811    }
8812    function splitValue(itemValue, userValue) {
8813      if (!itemValue) return itemValue;
8814      if (!userValue) return itemValue;
8815      const userValues = toArray(userValue).filter(Boolean).map(normalizeValue);
8816      const parts = [];
8817      const span = (value, autocomplete = false) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
8818        "span",
8819        {
8820          "data-autocomplete-value": autocomplete ? "" : void 0,
8821          "data-user-value": autocomplete ? void 0 : "",
8822          children: value
8823        },
8824        parts.length
8825      );
8826      const offsets = sortOffsets(
8827        filterOverlappingOffsets(
8828          // Convert userValues into a set to avoid duplicates
8829          getOffsets(normalizeValue(itemValue), new Set(userValues))
8830        )
8831      );
8832      if (!offsets.length) {
8833        parts.push(span(itemValue, true));
8834        return parts;
8835      }
8836      const [firstOffset] = offsets[0];
8837      const values = [
8838        itemValue.slice(0, firstOffset),
8839        ...offsets.flatMap(([offset, length], i2) => {
8840          var _a;
8841          const value = itemValue.slice(offset, offset + length);
8842          const nextOffset = (_a = offsets[i2 + 1]) == null ? void 0 : _a[0];
8843          const nextValue = itemValue.slice(offset + length, nextOffset);
8844          return [value, nextValue];
8845        })
8846      ];
8847      values.forEach((value, i2) => {
8848        if (!value) return;
8849        parts.push(span(value, i2 % 2 === 0));
8850      });
8851      return parts;
8852    }
8853    var useComboboxItemValue = createHook(function useComboboxItemValue2(_a) {
8854      var _b = _a, { store, value, userValue } = _b, props = __objRest(_b, ["store", "value", "userValue"]);
8855      const context = useComboboxScopedContext();
8856      store = store || context;
8857      const itemContext = (0, import_react13.useContext)(ComboboxItemValueContext);
8858      const itemValue = value != null ? value : itemContext;
8859      const inputValue = useStoreState(store, (state) => userValue != null ? userValue : state == null ? void 0 : state.value);
8860      const children = (0, import_react13.useMemo)(() => {
8861        if (!itemValue) return;
8862        if (!inputValue) return itemValue;
8863        return splitValue(itemValue, inputValue);
8864      }, [itemValue, inputValue]);
8865      props = __spreadValues({
8866        children
8867      }, props);
8868      return removeUndefinedValues(props);
8869    });
8870    var ComboboxItemValue = forwardRef22(function ComboboxItemValue2(props) {
8871      const htmlProps = useComboboxItemValue(props);
8872      return createElement2(TagName6, htmlProps);
8873    });
8874  
8875    // node_modules/@ariakit/react-core/esm/__chunks/UQQRIHDV.js
8876    var import_react14 = __toESM(require_react(), 1);
8877    var TagName7 = "div";
8878    function getMouseDestination(event) {
8879      const relatedTarget = event.relatedTarget;
8880      if ((relatedTarget == null ? void 0 : relatedTarget.nodeType) === Node.ELEMENT_NODE) {
8881        return relatedTarget;
8882      }
8883      return null;
8884    }
8885    function hoveringInside(event) {
8886      const nextElement = getMouseDestination(event);
8887      if (!nextElement) return false;
8888      return contains(event.currentTarget, nextElement);
8889    }
8890    var symbol2 = Symbol("composite-hover");
8891    function movingToAnotherItem(event) {
8892      let dest = getMouseDestination(event);
8893      if (!dest) return false;
8894      do {
8895        if (hasOwnProperty(dest, symbol2) && dest[symbol2]) return true;
8896        dest = dest.parentElement;
8897      } while (dest);
8898      return false;
8899    }
8900    var useCompositeHover = createHook(
8901      function useCompositeHover2(_a) {
8902        var _b = _a, {
8903          store,
8904          focusOnHover = true,
8905          blurOnHoverEnd = !!focusOnHover
8906        } = _b, props = __objRest(_b, [
8907          "store",
8908          "focusOnHover",
8909          "blurOnHoverEnd"
8910        ]);
8911        const context = useCompositeContext();
8912        store = store || context;
8913        invariant(
8914          store,
8915          "CompositeHover must be wrapped in a Composite component."
8916        );
8917        const isMouseMoving = useIsMouseMoving();
8918        const onMouseMoveProp = props.onMouseMove;
8919        const focusOnHoverProp = useBooleanEvent(focusOnHover);
8920        const onMouseMove = useEvent((event) => {
8921          onMouseMoveProp == null ? void 0 : onMouseMoveProp(event);
8922          if (event.defaultPrevented) return;
8923          if (!isMouseMoving()) return;
8924          if (!focusOnHoverProp(event)) return;
8925          if (!hasFocusWithin(event.currentTarget)) {
8926            const baseElement = store == null ? void 0 : store.getState().baseElement;
8927            if (baseElement && !hasFocus(baseElement)) {
8928              baseElement.focus();
8929            }
8930          }
8931          store == null ? void 0 : store.setActiveId(event.currentTarget.id);
8932        });
8933        const onMouseLeaveProp = props.onMouseLeave;
8934        const blurOnHoverEndProp = useBooleanEvent(blurOnHoverEnd);
8935        const onMouseLeave = useEvent((event) => {
8936          var _a2;
8937          onMouseLeaveProp == null ? void 0 : onMouseLeaveProp(event);
8938          if (event.defaultPrevented) return;
8939          if (!isMouseMoving()) return;
8940          if (hoveringInside(event)) return;
8941          if (movingToAnotherItem(event)) return;
8942          if (!focusOnHoverProp(event)) return;
8943          if (!blurOnHoverEndProp(event)) return;
8944          store == null ? void 0 : store.setActiveId(null);
8945          (_a2 = store == null ? void 0 : store.getState().baseElement) == null ? void 0 : _a2.focus();
8946        });
8947        const ref = (0, import_react14.useCallback)((element) => {
8948          if (!element) return;
8949          element[symbol2] = true;
8950        }, []);
8951        props = __spreadProps(__spreadValues({}, props), {
8952          ref: useMergeRefs(ref, props.ref),
8953          onMouseMove,
8954          onMouseLeave
8955        });
8956        return removeUndefinedValues(props);
8957      }
8958    );
8959    var CompositeHover = memo22(
8960      forwardRef22(function CompositeHover2(props) {
8961        const htmlProps = useCompositeHover(props);
8962        return createElement2(TagName7, htmlProps);
8963      })
8964    );
8965  
8966    // node_modules/@ariakit/react-core/esm/__chunks/RZ4GPYOB.js
8967    var import_react15 = __toESM(require_react(), 1);
8968    var TagName8 = "div";
8969    var useCollectionItem = createHook(
8970      function useCollectionItem2(_a) {
8971        var _b = _a, {
8972          store,
8973          shouldRegisterItem = true,
8974          getItem = identity,
8975          element
8976        } = _b, props = __objRest(_b, [
8977          "store",
8978          "shouldRegisterItem",
8979          "getItem",
8980          // @ts-expect-error This prop may come from a collection renderer.
8981          "element"
8982        ]);
8983        const context = useCollectionContext();
8984        store = store || context;
8985        const id = useId3(props.id);
8986        const ref = (0, import_react15.useRef)(element);
8987        (0, import_react15.useEffect)(() => {
8988          const element2 = ref.current;
8989          if (!id) return;
8990          if (!element2) return;
8991          if (!shouldRegisterItem) return;
8992          const item = getItem({ id, element: element2 });
8993          return store == null ? void 0 : store.renderItem(item);
8994        }, [id, shouldRegisterItem, getItem, store]);
8995        props = __spreadProps(__spreadValues({}, props), {
8996          ref: useMergeRefs(ref, props.ref)
8997        });
8998        return removeUndefinedValues(props);
8999      }
9000    );
9001    var CollectionItem = forwardRef22(function CollectionItem2(props) {
9002      const htmlProps = useCollectionItem(props);
9003      return createElement2(TagName8, htmlProps);
9004    });
9005  
9006    // node_modules/@ariakit/react-core/esm/__chunks/P2CTZE2T.js
9007    var import_react16 = __toESM(require_react(), 1);
9008    var import_jsx_runtime55 = __toESM(require_jsx_runtime(), 1);
9009    var TagName9 = "button";
9010    function isEditableElement(element) {
9011      if (isTextbox(element)) return true;
9012      return element.tagName === "INPUT" && !isButton(element);
9013    }
9014    function getNextPageOffset(scrollingElement, pageUp = false) {
9015      const height = scrollingElement.clientHeight;
9016      const { top } = scrollingElement.getBoundingClientRect();
9017      const pageSize = Math.max(height * 0.875, height - 40) * 1.5;
9018      const pageOffset = pageUp ? height - pageSize + top : pageSize + top;
9019      if (scrollingElement.tagName === "HTML") {
9020        return pageOffset + scrollingElement.scrollTop;
9021      }
9022      return pageOffset;
9023    }
9024    function getItemOffset(itemElement, pageUp = false) {
9025      const { top } = itemElement.getBoundingClientRect();
9026      if (pageUp) {
9027        return top + itemElement.clientHeight;
9028      }
9029      return top;
9030    }
9031    function findNextPageItemId(element, store, next, pageUp = false) {
9032      var _a;
9033      if (!store) return;
9034      if (!next) return;
9035      const { renderedItems } = store.getState();
9036      const scrollingElement = getScrollingElement(element);
9037      if (!scrollingElement) return;
9038      const nextPageOffset = getNextPageOffset(scrollingElement, pageUp);
9039      let id;
9040      let prevDifference;
9041      for (let i2 = 0; i2 < renderedItems.length; i2 += 1) {
9042        const previousId = id;
9043        id = next(i2);
9044        if (!id) break;
9045        if (id === previousId) continue;
9046        const itemElement = (_a = getEnabledItem(store, id)) == null ? void 0 : _a.element;
9047        if (!itemElement) continue;
9048        const itemOffset = getItemOffset(itemElement, pageUp);
9049        const difference = itemOffset - nextPageOffset;
9050        const absDifference = Math.abs(difference);
9051        if (pageUp && difference <= 0 || !pageUp && difference >= 0) {
9052          if (prevDifference !== void 0 && prevDifference < absDifference) {
9053            id = previousId;
9054          }
9055          break;
9056        }
9057        prevDifference = absDifference;
9058      }
9059      return id;
9060    }
9061    function targetIsAnotherItem(event, store) {
9062      if (isSelfTarget(event)) return false;
9063      return isItem(store, event.target);
9064    }
9065    var useCompositeItem = createHook(
9066      function useCompositeItem2(_a) {
9067        var _b = _a, {
9068          store,
9069          rowId: rowIdProp,
9070          preventScrollOnKeyDown = false,
9071          moveOnKeyPress = true,
9072          tabbable = false,
9073          getItem: getItemProp,
9074          "aria-setsize": ariaSetSizeProp,
9075          "aria-posinset": ariaPosInSetProp
9076        } = _b, props = __objRest(_b, [
9077          "store",
9078          "rowId",
9079          "preventScrollOnKeyDown",
9080          "moveOnKeyPress",
9081          "tabbable",
9082          "getItem",
9083          "aria-setsize",
9084          "aria-posinset"
9085        ]);
9086        const context = useCompositeContext();
9087        store = store || context;
9088        const id = useId3(props.id);
9089        const ref = (0, import_react16.useRef)(null);
9090        const row = (0, import_react16.useContext)(CompositeRowContext);
9091        const disabled = disabledFromProps(props);
9092        const trulyDisabled = disabled && !props.accessibleWhenDisabled;
9093        const {
9094          rowId,
9095          baseElement,
9096          isActiveItem,
9097          ariaSetSize,
9098          ariaPosInSet,
9099          isTabbable
9100        } = useStoreStateObject(store, {
9101          rowId(state) {
9102            if (rowIdProp) return rowIdProp;
9103            if (!state) return;
9104            if (!(row == null ? void 0 : row.baseElement)) return;
9105            if (row.baseElement !== state.baseElement) return;
9106            return row.id;
9107          },
9108          baseElement(state) {
9109            return (state == null ? void 0 : state.baseElement) || void 0;
9110          },
9111          isActiveItem(state) {
9112            return !!state && state.activeId === id;
9113          },
9114          ariaSetSize(state) {
9115            if (ariaSetSizeProp != null) return ariaSetSizeProp;
9116            if (!state) return;
9117            if (!(row == null ? void 0 : row.ariaSetSize)) return;
9118            if (row.baseElement !== state.baseElement) return;
9119            return row.ariaSetSize;
9120          },
9121          ariaPosInSet(state) {
9122            if (ariaPosInSetProp != null) return ariaPosInSetProp;
9123            if (!state) return;
9124            if (!(row == null ? void 0 : row.ariaPosInSet)) return;
9125            if (row.baseElement !== state.baseElement) return;
9126            const itemsInRow = state.renderedItems.filter(
9127              (item) => item.rowId === rowId
9128            );
9129            return row.ariaPosInSet + itemsInRow.findIndex((item) => item.id === id);
9130          },
9131          isTabbable(state) {
9132            if (!(state == null ? void 0 : state.renderedItems.length)) return true;
9133            if (state.virtualFocus) return false;
9134            if (tabbable) return true;
9135            if (state.activeId === null) return false;
9136            const item = store == null ? void 0 : store.item(state.activeId);
9137            if (item == null ? void 0 : item.disabled) return true;
9138            if (!(item == null ? void 0 : item.element)) return true;
9139            return state.activeId === id;
9140          }
9141        });
9142        const getItem = (0, import_react16.useCallback)(
9143          (item) => {
9144            var _a2;
9145            const nextItem = __spreadProps(__spreadValues({}, item), {
9146              id: id || item.id,
9147              rowId,
9148              disabled: !!trulyDisabled,
9149              children: (_a2 = item.element) == null ? void 0 : _a2.textContent
9150            });
9151            if (getItemProp) {
9152              return getItemProp(nextItem);
9153            }
9154            return nextItem;
9155          },
9156          [id, rowId, trulyDisabled, getItemProp]
9157        );
9158        const onFocusProp = props.onFocus;
9159        const hasFocusedComposite = (0, import_react16.useRef)(false);
9160        const onFocus = useEvent((event) => {
9161          onFocusProp == null ? void 0 : onFocusProp(event);
9162          if (event.defaultPrevented) return;
9163          if (isPortalEvent(event)) return;
9164          if (!id) return;
9165          if (!store) return;
9166          if (targetIsAnotherItem(event, store)) return;
9167          const { virtualFocus, baseElement: baseElement2 } = store.getState();
9168          store.setActiveId(id);
9169          if (isTextbox(event.currentTarget)) {
9170            selectTextField(event.currentTarget);
9171          }
9172          if (!virtualFocus) return;
9173          if (!isSelfTarget(event)) return;
9174          if (isEditableElement(event.currentTarget)) return;
9175          if (!(baseElement2 == null ? void 0 : baseElement2.isConnected)) return;
9176          if (isSafari() && event.currentTarget.hasAttribute("data-autofocus")) {
9177            event.currentTarget.scrollIntoView({
9178              block: "nearest",
9179              inline: "nearest"
9180            });
9181          }
9182          hasFocusedComposite.current = true;
9183          const fromComposite = event.relatedTarget === baseElement2 || isItem(store, event.relatedTarget);
9184          if (fromComposite) {
9185            focusSilently(baseElement2);
9186          } else {
9187            baseElement2.focus();
9188          }
9189        });
9190        const onBlurCaptureProp = props.onBlurCapture;
9191        const onBlurCapture = useEvent((event) => {
9192          onBlurCaptureProp == null ? void 0 : onBlurCaptureProp(event);
9193          if (event.defaultPrevented) return;
9194          const state = store == null ? void 0 : store.getState();
9195          if ((state == null ? void 0 : state.virtualFocus) && hasFocusedComposite.current) {
9196            hasFocusedComposite.current = false;
9197            event.preventDefault();
9198            event.stopPropagation();
9199          }
9200        });
9201        const onKeyDownProp = props.onKeyDown;
9202        const preventScrollOnKeyDownProp = useBooleanEvent(preventScrollOnKeyDown);
9203        const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress);
9204        const onKeyDown = useEvent((event) => {
9205          onKeyDownProp == null ? void 0 : onKeyDownProp(event);
9206          if (event.defaultPrevented) return;
9207          if (!isSelfTarget(event)) return;
9208          if (!store) return;
9209          const { currentTarget } = event;
9210          const state = store.getState();
9211          const item = store.item(id);
9212          const isGrid2 = !!(item == null ? void 0 : item.rowId);
9213          const isVertical = state.orientation !== "horizontal";
9214          const isHorizontal = state.orientation !== "vertical";
9215          const canHomeEnd = () => {
9216            if (isGrid2) return true;
9217            if (isHorizontal) return true;
9218            if (!state.baseElement) return true;
9219            if (!isTextField(state.baseElement)) return true;
9220            return false;
9221          };
9222          const keyMap = {
9223            ArrowUp: (isGrid2 || isVertical) && store.up,
9224            ArrowRight: (isGrid2 || isHorizontal) && store.next,
9225            ArrowDown: (isGrid2 || isVertical) && store.down,
9226            ArrowLeft: (isGrid2 || isHorizontal) && store.previous,
9227            Home: () => {
9228              if (!canHomeEnd()) return;
9229              if (!isGrid2 || event.ctrlKey) {
9230                return store == null ? void 0 : store.first();
9231              }
9232              return store == null ? void 0 : store.previous(-1);
9233            },
9234            End: () => {
9235              if (!canHomeEnd()) return;
9236              if (!isGrid2 || event.ctrlKey) {
9237                return store == null ? void 0 : store.last();
9238              }
9239              return store == null ? void 0 : store.next(-1);
9240            },
9241            PageUp: () => {
9242              return findNextPageItemId(currentTarget, store, store == null ? void 0 : store.up, true);
9243            },
9244            PageDown: () => {
9245              return findNextPageItemId(currentTarget, store, store == null ? void 0 : store.down);
9246            }
9247          };
9248          const action = keyMap[event.key];
9249          if (action) {
9250            if (isTextbox(currentTarget)) {
9251              const selection = getTextboxSelection(currentTarget);
9252              const isLeft = isHorizontal && event.key === "ArrowLeft";
9253              const isRight = isHorizontal && event.key === "ArrowRight";
9254              const isUp = isVertical && event.key === "ArrowUp";
9255              const isDown = isVertical && event.key === "ArrowDown";
9256              if (isRight || isDown) {
9257                const { length: valueLength } = getTextboxValue(currentTarget);
9258                if (selection.end !== valueLength) return;
9259              } else if ((isLeft || isUp) && selection.start !== 0) return;
9260            }
9261            const nextId = action();
9262            if (preventScrollOnKeyDownProp(event) || nextId !== void 0) {
9263              if (!moveOnKeyPressProp(event)) return;
9264              event.preventDefault();
9265              store.move(nextId);
9266            }
9267          }
9268        });
9269        const providerValue = (0, import_react16.useMemo)(
9270          () => ({ id, baseElement }),
9271          [id, baseElement]
9272        );
9273        props = useWrapElement(
9274          props,
9275          (element) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(CompositeItemContext.Provider, { value: providerValue, children: element }),
9276          [providerValue]
9277        );
9278        props = __spreadProps(__spreadValues({
9279          id,
9280          "data-active-item": isActiveItem || void 0
9281        }, props), {
9282          ref: useMergeRefs(ref, props.ref),
9283          tabIndex: isTabbable ? props.tabIndex : -1,
9284          onFocus,
9285          onBlurCapture,
9286          onKeyDown
9287        });
9288        props = useCommand(props);
9289        props = useCollectionItem(__spreadProps(__spreadValues({
9290          store
9291        }, props), {
9292          getItem,
9293          shouldRegisterItem: id ? props.shouldRegisterItem : false
9294        }));
9295        return removeUndefinedValues(__spreadProps(__spreadValues({}, props), {
9296          "aria-setsize": ariaSetSize,
9297          "aria-posinset": ariaPosInSet
9298        }));
9299      }
9300    );
9301    var CompositeItem = memo22(
9302      forwardRef22(function CompositeItem2(props) {
9303        const htmlProps = useCompositeItem(props);
9304        return createElement2(TagName9, htmlProps);
9305      })
9306    );
9307  
9308    // node_modules/@ariakit/react-core/esm/__chunks/ZTDSJLD6.js
9309    var import_react17 = __toESM(require_react(), 1);
9310    var import_jsx_runtime56 = __toESM(require_jsx_runtime(), 1);
9311    var TagName10 = "div";
9312    function isSelected(storeValue, itemValue) {
9313      if (itemValue == null) return;
9314      if (storeValue == null) return false;
9315      if (Array.isArray(storeValue)) {
9316        return storeValue.includes(itemValue);
9317      }
9318      return storeValue === itemValue;
9319    }
9320    function getItemRole(popupRole) {
9321      var _a;
9322      const itemRoleByPopupRole = {
9323        menu: "menuitem",
9324        listbox: "option",
9325        tree: "treeitem"
9326      };
9327      const key = popupRole;
9328      return (_a = itemRoleByPopupRole[key]) != null ? _a : "option";
9329    }
9330    var useComboboxItem = createHook(
9331      function useComboboxItem2(_a) {
9332        var _b = _a, {
9333          store,
9334          value,
9335          hideOnClick,
9336          setValueOnClick,
9337          selectValueOnClick = true,
9338          resetValueOnSelect,
9339          focusOnHover = false,
9340          moveOnKeyPress = true,
9341          getItem: getItemProp
9342        } = _b, props = __objRest(_b, [
9343          "store",
9344          "value",
9345          "hideOnClick",
9346          "setValueOnClick",
9347          "selectValueOnClick",
9348          "resetValueOnSelect",
9349          "focusOnHover",
9350          "moveOnKeyPress",
9351          "getItem"
9352        ]);
9353        var _a2;
9354        const context = useComboboxScopedContext();
9355        store = store || context;
9356        invariant(
9357          store,
9358          "ComboboxItem must be wrapped in a ComboboxList or ComboboxPopover component."
9359        );
9360        const { resetValueOnSelectState, multiSelectable, selected } = useStoreStateObject(store, {
9361          resetValueOnSelectState: "resetValueOnSelect",
9362          multiSelectable(state) {
9363            return Array.isArray(state.selectedValue);
9364          },
9365          selected(state) {
9366            return isSelected(state.selectedValue, value);
9367          }
9368        });
9369        const getItem = (0, import_react17.useCallback)(
9370          (item) => {
9371            const nextItem = __spreadProps(__spreadValues({}, item), { value });
9372            if (getItemProp) {
9373              return getItemProp(nextItem);
9374            }
9375            return nextItem;
9376          },
9377          [value, getItemProp]
9378        );
9379        setValueOnClick = setValueOnClick != null ? setValueOnClick : !multiSelectable;
9380        hideOnClick = hideOnClick != null ? hideOnClick : value != null && !multiSelectable;
9381        const onClickProp = props.onClick;
9382        const setValueOnClickProp = useBooleanEvent(setValueOnClick);
9383        const selectValueOnClickProp = useBooleanEvent(selectValueOnClick);
9384        const resetValueOnSelectProp = useBooleanEvent(
9385          (_a2 = resetValueOnSelect != null ? resetValueOnSelect : resetValueOnSelectState) != null ? _a2 : multiSelectable
9386        );
9387        const hideOnClickProp = useBooleanEvent(hideOnClick);
9388        const onClick = useEvent((event) => {
9389          onClickProp == null ? void 0 : onClickProp(event);
9390          if (event.defaultPrevented) return;
9391          if (isDownloading(event)) return;
9392          if (isOpeningInNewTab(event)) return;
9393          if (value != null) {
9394            if (selectValueOnClickProp(event)) {
9395              if (resetValueOnSelectProp(event)) {
9396                store == null ? void 0 : store.resetValue();
9397              }
9398              store == null ? void 0 : store.setSelectedValue((prevValue) => {
9399                if (!Array.isArray(prevValue)) return value;
9400                if (prevValue.includes(value)) {
9401                  return prevValue.filter((v2) => v2 !== value);
9402                }
9403                return [...prevValue, value];
9404              });
9405            }
9406            if (setValueOnClickProp(event)) {
9407              store == null ? void 0 : store.setValue(value);
9408            }
9409          }
9410          if (hideOnClickProp(event)) {
9411            store == null ? void 0 : store.hide();
9412          }
9413        });
9414        const onKeyDownProp = props.onKeyDown;
9415        const onKeyDown = useEvent((event) => {
9416          onKeyDownProp == null ? void 0 : onKeyDownProp(event);
9417          if (event.defaultPrevented) return;
9418          const baseElement = store == null ? void 0 : store.getState().baseElement;
9419          if (!baseElement) return;
9420          if (hasFocus(baseElement)) return;
9421          const printable = event.key.length === 1;
9422          if (printable || event.key === "Backspace" || event.key === "Delete") {
9423            queueMicrotask(() => baseElement.focus());
9424            if (isTextField(baseElement)) {
9425              store == null ? void 0 : store.setValue(baseElement.value);
9426            }
9427          }
9428        });
9429        if (multiSelectable && selected != null) {
9430          props = __spreadValues({
9431            "aria-selected": selected
9432          }, props);
9433        }
9434        props = useWrapElement(
9435          props,
9436          (element) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(ComboboxItemValueContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(ComboboxItemCheckedContext.Provider, { value: selected != null ? selected : false, children: element }) }),
9437          [value, selected]
9438        );
9439        const popupRole = (0, import_react17.useContext)(ComboboxListRoleContext);
9440        props = __spreadProps(__spreadValues({
9441          role: getItemRole(popupRole),
9442          children: value
9443        }, props), {
9444          onClick,
9445          onKeyDown
9446        });
9447        const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress);
9448        props = useCompositeItem(__spreadProps(__spreadValues({
9449          store
9450        }, props), {
9451          getItem,
9452          // Dispatch a custom event on the combobox input when moving to an item
9453          // with the keyboard so the Combobox component can enable inline
9454          // autocompletion.
9455          moveOnKeyPress: (event) => {
9456            if (!moveOnKeyPressProp(event)) return false;
9457            const moveEvent = new Event("combobox-item-move");
9458            const baseElement = store == null ? void 0 : store.getState().baseElement;
9459            baseElement == null ? void 0 : baseElement.dispatchEvent(moveEvent);
9460            return true;
9461          }
9462        }));
9463        props = useCompositeHover(__spreadValues({ store, focusOnHover }, props));
9464        return props;
9465      }
9466    );
9467    var ComboboxItem = memo22(
9468      forwardRef22(function ComboboxItem2(props) {
9469        const htmlProps = useComboboxItem(props);
9470        return createElement2(TagName10, htmlProps);
9471      })
9472    );
9473  
9474    // node_modules/@ariakit/react-core/esm/combobox/combobox-label.js
9475    var TagName11 = "label";
9476    var useComboboxLabel = createHook(
9477      function useComboboxLabel2(_a) {
9478        var _b = _a, { store } = _b, props = __objRest(_b, ["store"]);
9479        const context = useComboboxProviderContext();
9480        store = store || context;
9481        invariant(
9482          store,
9483          "ComboboxLabel must receive a `store` prop or be wrapped in a ComboboxProvider component."
9484        );
9485        const comboboxId = store.useState((state) => {
9486          var _a2;
9487          return (_a2 = state.baseElement) == null ? void 0 : _a2.id;
9488        });
9489        props = __spreadValues({
9490          htmlFor: comboboxId
9491        }, props);
9492        return removeUndefinedValues(props);
9493      }
9494    );
9495    var ComboboxLabel = memo22(
9496      forwardRef22(function ComboboxLabel2(props) {
9497        const htmlProps = useComboboxLabel(props);
9498        return createElement2(TagName11, htmlProps);
9499      })
9500    );
9501  
9502    // node_modules/@ariakit/react-core/esm/__chunks/VGCJ63VH.js
9503    var import_react18 = __toESM(require_react(), 1);
9504    var import_react_dom = __toESM(require_react_dom(), 1);
9505    var import_jsx_runtime57 = __toESM(require_jsx_runtime(), 1);
9506    var TagName12 = "div";
9507    function afterTimeout(timeoutMs, cb) {
9508      const timeoutId = setTimeout(cb, timeoutMs);
9509      return () => clearTimeout(timeoutId);
9510    }
9511    function afterPaint2(cb) {
9512      let raf = requestAnimationFrame(() => {
9513        raf = requestAnimationFrame(cb);
9514      });
9515      return () => cancelAnimationFrame(raf);
9516    }
9517    function parseCSSTime(...times) {
9518      return times.join(", ").split(", ").reduce((longestTime, currentTimeString) => {
9519        const multiplier = currentTimeString.endsWith("ms") ? 1 : 1e3;
9520        const currentTime = Number.parseFloat(currentTimeString || "0s") * multiplier;
9521        if (currentTime > longestTime) return currentTime;
9522        return longestTime;
9523      }, 0);
9524    }
9525    function isHidden(mounted, hidden, alwaysVisible) {
9526      return !alwaysVisible && hidden !== false && (!mounted || !!hidden);
9527    }
9528    var useDisclosureContent = createHook(function useDisclosureContent2(_a) {
9529      var _b = _a, { store, alwaysVisible } = _b, props = __objRest(_b, ["store", "alwaysVisible"]);
9530      const context = useDisclosureProviderContext();
9531      store = store || context;
9532      invariant(
9533        store,
9534        "DisclosureContent must receive a `store` prop or be wrapped in a DisclosureProvider component."
9535      );
9536      const ref = (0, import_react18.useRef)(null);
9537      const id = useId3(props.id);
9538      const [transition, setTransition] = (0, import_react18.useState)(null);
9539      const open = store.useState("open");
9540      const mounted = store.useState("mounted");
9541      const animated = store.useState("animated");
9542      const contentElement = store.useState("contentElement");
9543      const otherElement = useStoreState(store.disclosure, "contentElement");
9544      useSafeLayoutEffect(() => {
9545        if (!ref.current) return;
9546        store == null ? void 0 : store.setContentElement(ref.current);
9547      }, [store]);
9548      useSafeLayoutEffect(() => {
9549        let previousAnimated;
9550        store == null ? void 0 : store.setState("animated", (animated2) => {
9551          previousAnimated = animated2;
9552          return true;
9553        });
9554        return () => {
9555          if (previousAnimated === void 0) return;
9556          store == null ? void 0 : store.setState("animated", previousAnimated);
9557        };
9558      }, [store]);
9559      useSafeLayoutEffect(() => {
9560        if (!animated) return;
9561        if (!(contentElement == null ? void 0 : contentElement.isConnected)) {
9562          setTransition(null);
9563          return;
9564        }
9565        return afterPaint2(() => {
9566          setTransition(open ? "enter" : mounted ? "leave" : null);
9567        });
9568      }, [animated, contentElement, open, mounted]);
9569      useSafeLayoutEffect(() => {
9570        if (!store) return;
9571        if (!animated) return;
9572        if (!transition) return;
9573        if (!contentElement) return;
9574        const stopAnimation = () => store == null ? void 0 : store.setState("animating", false);
9575        const stopAnimationSync = () => (0, import_react_dom.flushSync)(stopAnimation);
9576        if (transition === "leave" && open) return;
9577        if (transition === "enter" && !open) return;
9578        if (typeof animated === "number") {
9579          const timeout2 = animated;
9580          return afterTimeout(timeout2, stopAnimationSync);
9581        }
9582        const {
9583          transitionDuration,
9584          animationDuration,
9585          transitionDelay,
9586          animationDelay
9587        } = getComputedStyle(contentElement);
9588        const {
9589          transitionDuration: transitionDuration2 = "0",
9590          animationDuration: animationDuration2 = "0",
9591          transitionDelay: transitionDelay2 = "0",
9592          animationDelay: animationDelay2 = "0"
9593        } = otherElement ? getComputedStyle(otherElement) : {};
9594        const delay = parseCSSTime(
9595          transitionDelay,
9596          animationDelay,
9597          transitionDelay2,
9598          animationDelay2
9599        );
9600        const duration = parseCSSTime(
9601          transitionDuration,
9602          animationDuration,
9603          transitionDuration2,
9604          animationDuration2
9605        );
9606        const timeout = delay + duration;
9607        if (!timeout) {
9608          if (transition === "enter") {
9609            store.setState("animated", false);
9610          }
9611          stopAnimation();
9612          return;
9613        }
9614        const frameRate = 1e3 / 60;
9615        const maxTimeout = Math.max(timeout - frameRate, 0);
9616        return afterTimeout(maxTimeout, stopAnimationSync);
9617      }, [store, animated, contentElement, otherElement, open, transition]);
9618      props = useWrapElement(
9619        props,
9620        (element) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(DialogScopedContextProvider, { value: store, children: element }),
9621        [store]
9622      );
9623      const hidden = isHidden(mounted, props.hidden, alwaysVisible);
9624      const styleProp = props.style;
9625      const style = (0, import_react18.useMemo)(() => {
9626        if (hidden) {
9627          return __spreadProps(__spreadValues({}, styleProp), { display: "none" });
9628        }
9629        return styleProp;
9630      }, [hidden, styleProp]);
9631      props = __spreadProps(__spreadValues({
9632        id,
9633        "data-open": open || void 0,
9634        "data-enter": transition === "enter" || void 0,
9635        "data-leave": transition === "leave" || void 0,
9636        hidden
9637      }, props), {
9638        ref: useMergeRefs(id ? store.setContentElement : null, ref, props.ref),
9639        style
9640      });
9641      return removeUndefinedValues(props);
9642    });
9643    var DisclosureContentImpl = forwardRef22(function DisclosureContentImpl2(props) {
9644      const htmlProps = useDisclosureContent(props);
9645      return createElement2(TagName12, htmlProps);
9646    });
9647    var DisclosureContent = forwardRef22(function DisclosureContent2(_a) {
9648      var _b = _a, {
9649        unmountOnHide
9650      } = _b, props = __objRest(_b, [
9651        "unmountOnHide"
9652      ]);
9653      const context = useDisclosureProviderContext();
9654      const store = props.store || context;
9655      const mounted = useStoreState(
9656        store,
9657        (state) => !unmountOnHide || (state == null ? void 0 : state.mounted)
9658      );
9659      if (mounted === false) return null;
9660      return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(DisclosureContentImpl, __spreadValues({}, props));
9661    });
9662  
9663    // node_modules/@ariakit/react-core/esm/__chunks/HUWAI7RB.js
9664    var import_react19 = __toESM(require_react(), 1);
9665    var import_jsx_runtime58 = __toESM(require_jsx_runtime(), 1);
9666    var TagName13 = "div";
9667    var useComboboxList = createHook(
9668      function useComboboxList2(_a) {
9669        var _b = _a, { store, alwaysVisible } = _b, props = __objRest(_b, ["store", "alwaysVisible"]);
9670        const scopedContext = useComboboxScopedContext(true);
9671        const context = useComboboxContext();
9672        store = store || context;
9673        const scopedContextSameStore = !!store && store === scopedContext;
9674        invariant(
9675          store,
9676          "ComboboxList must receive a `store` prop or be wrapped in a ComboboxProvider component."
9677        );
9678        const ref = (0, import_react19.useRef)(null);
9679        const id = useId3(props.id);
9680        const mounted = store.useState("mounted");
9681        const hidden = isHidden(mounted, props.hidden, alwaysVisible);
9682        const style = hidden ? __spreadProps(__spreadValues({}, props.style), { display: "none" }) : props.style;
9683        const multiSelectable = store.useState(
9684          (state) => Array.isArray(state.selectedValue)
9685        );
9686        const role = useAttribute(ref, "role", props.role);
9687        const isCompositeRole = role === "listbox" || role === "tree" || role === "grid";
9688        const ariaMultiSelectable = isCompositeRole ? multiSelectable || void 0 : void 0;
9689        const [hasListboxInside, setHasListboxInside] = (0, import_react19.useState)(false);
9690        const contentElement = store.useState("contentElement");
9691        useSafeLayoutEffect(() => {
9692          if (!mounted) return;
9693          const element = ref.current;
9694          if (!element) return;
9695          if (contentElement !== element) return;
9696          const callback = () => {
9697            setHasListboxInside(!!element.querySelector("[role='listbox']"));
9698          };
9699          const observer = new MutationObserver(callback);
9700          observer.observe(element, {
9701            subtree: true,
9702            childList: true,
9703            attributeFilter: ["role"]
9704          });
9705          callback();
9706          return () => observer.disconnect();
9707        }, [mounted, contentElement]);
9708        if (!hasListboxInside) {
9709          props = __spreadValues({
9710            role: "listbox",
9711            "aria-multiselectable": ariaMultiSelectable
9712          }, props);
9713        }
9714        props = useWrapElement(
9715          props,
9716          (element) => /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(ComboboxScopedContextProvider, { value: store, children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(ComboboxListRoleContext.Provider, { value: role, children: element }) }),
9717          [store, role]
9718        );
9719        const setContentElement = id && (!scopedContext || !scopedContextSameStore) ? store.setContentElement : null;
9720        props = __spreadProps(__spreadValues({
9721          id,
9722          hidden
9723        }, props), {
9724          ref: useMergeRefs(setContentElement, ref, props.ref),
9725          style
9726        });
9727        return removeUndefinedValues(props);
9728      }
9729    );
9730    var ComboboxList = forwardRef22(function ComboboxList2(props) {
9731      const htmlProps = useComboboxList(props);
9732      return createElement2(TagName13, htmlProps);
9733    });
9734  
9735    // packages/dataviews/build-module/components/dataviews-filters/search-widget.js
9736    var import_remove_accents = __toESM(require_remove_accents());
9737    var import_compose7 = __toESM(require_compose());
9738    var import_i18n27 = __toESM(require_i18n());
9739    var import_element23 = __toESM(require_element());
9740    var import_components21 = __toESM(require_components());
9741  
9742    // packages/dataviews/build-module/components/dataviews-filters/utils.js
9743    var EMPTY_ARRAY2 = [];
9744    var getCurrentValue = (filterDefinition, currentFilter) => {
9745      if (filterDefinition.singleSelection) {
9746        return currentFilter?.value;
9747      }
9748      if (Array.isArray(currentFilter?.value)) {
9749        return currentFilter.value;
9750      }
9751      if (!Array.isArray(currentFilter?.value) && !!currentFilter?.value) {
9752        return [currentFilter.value];
9753      }
9754      return EMPTY_ARRAY2;
9755    };
9756  
9757    // packages/dataviews/build-module/hooks/use-elements.js
9758    var import_element22 = __toESM(require_element());
9759    var EMPTY_ARRAY3 = [];
9760    function useElements({
9761      elements,
9762      getElements
9763    }) {
9764      const staticElements = Array.isArray(elements) && elements.length > 0 ? elements : EMPTY_ARRAY3;
9765      const [records, setRecords] = (0, import_element22.useState)(staticElements);
9766      const [isLoading, setIsLoading] = (0, import_element22.useState)(false);
9767      (0, import_element22.useEffect)(() => {
9768        if (!getElements) {
9769          setRecords(staticElements);
9770          return;
9771        }
9772        let cancelled = false;
9773        setIsLoading(true);
9774        getElements().then((fetchedElements) => {
9775          if (!cancelled) {
9776            const dynamicElements = Array.isArray(fetchedElements) && fetchedElements.length > 0 ? fetchedElements : staticElements;
9777            setRecords(dynamicElements);
9778          }
9779        }).catch(() => {
9780          if (!cancelled) {
9781            setRecords(staticElements);
9782          }
9783        }).finally(() => {
9784          if (!cancelled) {
9785            setIsLoading(false);
9786          }
9787        });
9788        return () => {
9789          cancelled = true;
9790        };
9791      }, [getElements, staticElements]);
9792      return {
9793        elements: records,
9794        isLoading
9795      };
9796    }
9797  
9798    // packages/dataviews/build-module/components/dataviews-filters/search-widget.js
9799    var import_jsx_runtime59 = __toESM(require_jsx_runtime());
9800    function normalizeSearchInput(input = "") {
9801      return (0, import_remove_accents.default)(input.trim().toLowerCase());
9802    }
9803    var getNewValue = (filterDefinition, currentFilter, value) => {
9804      if (filterDefinition.singleSelection) {
9805        return value;
9806      }
9807      if (Array.isArray(currentFilter?.value)) {
9808        return currentFilter.value.includes(value) ? currentFilter.value.filter((v2) => v2 !== value) : [...currentFilter.value, value];
9809      }
9810      return [value];
9811    };
9812    function generateFilterElementCompositeItemId(prefix, filterElementValue) {
9813      return `$prefix}-$filterElementValue}`;
9814    }
9815    var MultiSelectionOption = ({ selected }) => {
9816      return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
9817        "span",
9818        {
9819          className: clsx_default(
9820            "dataviews-filters__search-widget-listitem-multi-selection",
9821            { "is-selected": selected }
9822          ),
9823          children: selected && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_components21.Icon, { icon: check_default })
9824        }
9825      );
9826    };
9827    var SingleSelectionOption = ({ selected }) => {
9828      return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
9829        "span",
9830        {
9831          className: clsx_default(
9832            "dataviews-filters__search-widget-listitem-single-selection",
9833            { "is-selected": selected }
9834          )
9835        }
9836      );
9837    };
9838    function ListBox({ view, filter, onChangeView }) {
9839      const baseId = (0, import_compose7.useInstanceId)(ListBox, "dataviews-filter-list-box");
9840      const [activeCompositeId, setActiveCompositeId] = (0, import_element23.useState)(
9841        // When there are one or less operators, the first item is set as active
9842        // (by setting the initial `activeId` to `undefined`).
9843        // With 2 or more operators, the focus is moved on the operators control
9844        // (by setting the initial `activeId` to `null`), meaning that there won't
9845        // be an active item initially. Focus is then managed via the
9846        // `onFocusVisible` callback.
9847        filter.operators?.length === 1 ? void 0 : null
9848      );
9849      const currentFilter = view.filters?.find(
9850        (f2) => f2.field === filter.field
9851      );
9852      const currentValue = getCurrentValue(filter, currentFilter);
9853      return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
9854        import_components21.Composite,
9855        {
9856          virtualFocus: true,
9857          focusLoop: true,
9858          activeId: activeCompositeId,
9859          setActiveId: setActiveCompositeId,
9860          role: "listbox",
9861          className: "dataviews-filters__search-widget-listbox",
9862          "aria-label": (0, import_i18n27.sprintf)(
9863            /* translators: List of items for a filter. 1: Filter name. e.g.: "List of: Author". */
9864            (0, import_i18n27.__)("List of: %1$s"),
9865            filter.name
9866          ),
9867          onFocusVisible: () => {
9868            if (!activeCompositeId && filter.elements.length) {
9869              setActiveCompositeId(
9870                generateFilterElementCompositeItemId(
9871                  baseId,
9872                  filter.elements[0].value
9873                )
9874              );
9875            }
9876          },
9877          render: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_components21.Composite.Typeahead, {}),
9878          children: filter.elements.map((element) => /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(
9879            import_components21.Composite.Hover,
9880            {
9881              render: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
9882                import_components21.Composite.Item,
9883                {
9884                  id: generateFilterElementCompositeItemId(
9885                    baseId,
9886                    element.value
9887                  ),
9888                  render: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
9889                    "div",
9890                    {
9891                      "aria-label": element.label,
9892                      role: "option",
9893                      className: "dataviews-filters__search-widget-listitem"
9894                    }
9895                  ),
9896                  onClick: () => {
9897                    const newFilters = currentFilter ? [
9898                      ...(view.filters ?? []).map(
9899                        (_filter) => {
9900                          if (_filter.field === filter.field) {
9901                            return {
9902                              ..._filter,
9903                              operator: currentFilter.operator || filter.operators[0],
9904                              value: getNewValue(
9905                                filter,
9906                                currentFilter,
9907                                element.value
9908                              )
9909                            };
9910                          }
9911                          return _filter;
9912                        }
9913                      )
9914                    ] : [
9915                      ...view.filters ?? [],
9916                      {
9917                        field: filter.field,
9918                        operator: filter.operators[0],
9919                        value: getNewValue(
9920                          filter,
9921                          currentFilter,
9922                          element.value
9923                        )
9924                      }
9925                    ];
9926                    onChangeView({
9927                      ...view,
9928                      page: 1,
9929                      filters: newFilters
9930                    });
9931                  }
9932                }
9933              ),
9934              children: [
9935                filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
9936                  SingleSelectionOption,
9937                  {
9938                    selected: currentValue === element.value
9939                  }
9940                ),
9941                !filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
9942                  MultiSelectionOption,
9943                  {
9944                    selected: currentValue.includes(element.value)
9945                  }
9946                ),
9947                /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { children: element.label })
9948              ]
9949            },
9950            element.value
9951          ))
9952        }
9953      );
9954    }
9955    function ComboboxList22({ view, filter, onChangeView }) {
9956      const [searchValue, setSearchValue] = (0, import_element23.useState)("");
9957      const deferredSearchValue = (0, import_element23.useDeferredValue)(searchValue);
9958      const currentFilter = view.filters?.find(
9959        (_filter) => _filter.field === filter.field
9960      );
9961      const currentValue = getCurrentValue(filter, currentFilter);
9962      const matches = (0, import_element23.useMemo)(() => {
9963        const normalizedSearch = normalizeSearchInput(deferredSearchValue);
9964        return filter.elements.filter(
9965          (item) => normalizeSearchInput(item.label).includes(normalizedSearch)
9966        );
9967      }, [filter.elements, deferredSearchValue]);
9968      return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(
9969        ComboboxProvider,
9970        {
9971          selectedValue: currentValue,
9972          setSelectedValue: (value) => {
9973            const newFilters = currentFilter ? [
9974              ...(view.filters ?? []).map((_filter) => {
9975                if (_filter.field === filter.field) {
9976                  return {
9977                    ..._filter,
9978                    operator: currentFilter.operator || filter.operators[0],
9979                    value
9980                  };
9981                }
9982                return _filter;
9983              })
9984            ] : [
9985              ...view.filters ?? [],
9986              {
9987                field: filter.field,
9988                operator: filter.operators[0],
9989                value
9990              }
9991            ];
9992            onChangeView({
9993              ...view,
9994              page: 1,
9995              filters: newFilters
9996            });
9997          },
9998          setValue: setSearchValue,
9999          children: [
10000            /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "dataviews-filters__search-widget-filter-combobox__wrapper", children: [
10001              /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
10002                ComboboxLabel,
10003                {
10004                  render: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_components21.VisuallyHidden, { children: (0, import_i18n27.__)("Search items") }),
10005                  children: (0, import_i18n27.__)("Search items")
10006                }
10007              ),
10008              /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
10009                Combobox,
10010                {
10011                  autoSelect: "always",
10012                  placeholder: (0, import_i18n27.__)("Search"),
10013                  className: "dataviews-filters__search-widget-filter-combobox__input"
10014                }
10015              ),
10016              /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "dataviews-filters__search-widget-filter-combobox__icon", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_components21.Icon, { icon: search_default }) })
10017            ] }),
10018            /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(
10019              ComboboxList,
10020              {
10021                className: "dataviews-filters__search-widget-filter-combobox-list",
10022                alwaysVisible: true,
10023                children: [
10024                  matches.map((element) => {
10025                    return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(
10026                      ComboboxItem,
10027                      {
10028                        resetValueOnSelect: false,
10029                        value: element.value,
10030                        className: "dataviews-filters__search-widget-listitem",
10031                        hideOnClick: false,
10032                        setValueOnClick: false,
10033                        focusOnHover: true,
10034                        children: [
10035                          filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
10036                            SingleSelectionOption,
10037                            {
10038                              selected: currentValue === element.value
10039                            }
10040                          ),
10041                          !filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
10042                            MultiSelectionOption,
10043                            {
10044                              selected: currentValue.includes(
10045                                element.value
10046                              )
10047                            }
10048                          ),
10049                          /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("span", { children: [
10050                            /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
10051                              ComboboxItemValue,
10052                              {
10053                                className: "dataviews-filters__search-widget-filter-combobox-item-value",
10054                                value: element.label
10055                              }
10056                            ),
10057                            !!element.description && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "dataviews-filters__search-widget-listitem-description", children: element.description })
10058                          ] })
10059                        ]
10060                      },
10061                      element.value
10062                    );
10063                  }),
10064                  !matches.length && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { children: (0, import_i18n27.__)("No results found") })
10065                ]
10066              }
10067            )
10068          ]
10069        }
10070      );
10071    }
10072    function SearchWidget(props) {
10073      const { elements, isLoading } = useElements({
10074        elements: props.filter.elements,
10075        getElements: props.filter.getElements
10076      });
10077      if (isLoading) {
10078        return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "dataviews-filters__search-widget-no-elements", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_components21.Spinner, {}) });
10079      }
10080      if (elements.length === 0) {
10081        return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "dataviews-filters__search-widget-no-elements", children: (0, import_i18n27.__)("No elements found") });
10082      }
10083      const Widget = elements.length > 10 ? ComboboxList22 : ListBox;
10084      return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Widget, { ...props, filter: { ...props.filter, elements } });
10085    }
10086  
10087    // packages/dataviews/build-module/components/dataviews-filters/input-widget.js
10088    var import_es6 = __toESM(require_es6());
10089    var import_compose8 = __toESM(require_compose());
10090    var import_element24 = __toESM(require_element());
10091    var import_components22 = __toESM(require_components());
10092    var import_jsx_runtime60 = __toESM(require_jsx_runtime());
10093    function InputWidget({
10094      filter,
10095      view,
10096      onChangeView,
10097      fields
10098    }) {
10099      const currentFilter = view.filters?.find(
10100        (f2) => f2.field === filter.field
10101      );
10102      const currentValue = getCurrentValue(filter, currentFilter);
10103      const field = (0, import_element24.useMemo)(() => {
10104        const currentField = fields.find((f2) => f2.id === filter.field);
10105        if (currentField) {
10106          return {
10107            ...currentField,
10108            // Deactivate validation for filters.
10109            isValid: {},
10110            // Configure getValue/setValue as if Item was a plain object.
10111            getValue: ({ item }) => item[currentField.id],
10112            setValue: ({ value }) => ({
10113              [currentField.id]: value
10114            })
10115          };
10116        }
10117        return currentField;
10118      }, [fields, filter.field]);
10119      const data = (0, import_element24.useMemo)(() => {
10120        return (view.filters ?? []).reduce(
10121          (acc, activeFilter) => {
10122            acc[activeFilter.field] = activeFilter.value;
10123            return acc;
10124          },
10125          {}
10126        );
10127      }, [view.filters]);
10128      const handleChange = (0, import_compose8.useEvent)((updatedData) => {
10129        if (!field || !currentFilter) {
10130          return;
10131        }
10132        const nextValue = field.getValue({ item: updatedData });
10133        if ((0, import_es6.default)(nextValue, currentValue)) {
10134          return;
10135        }
10136        onChangeView({
10137          ...view,
10138          filters: (view.filters ?? []).map(
10139            (_filter) => _filter.field === filter.field ? {
10140              ..._filter,
10141              operator: currentFilter.operator || filter.operators[0],
10142              // Consider empty strings as undefined:
10143              //
10144              // - undefined as value means the filter is unset: the filter widget displays no value and the search returns all records
10145              // - empty string as value means "search empty string": returns only the records that have an empty string as value
10146              //
10147              // In practice, this means the filter will not be able to find an empty string as the value.
10148              value: nextValue === "" ? void 0 : nextValue
10149            } : _filter
10150          )
10151        });
10152      });
10153      if (!field || !field.Edit || !currentFilter) {
10154        return null;
10155      }
10156      return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
10157        import_components22.Flex,
10158        {
10159          className: "dataviews-filters__user-input-widget",
10160          gap: 2.5,
10161          direction: "column",
10162          children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
10163            field.Edit,
10164            {
10165              hideLabelFromVision: true,
10166              data,
10167              field,
10168              operator: currentFilter.operator,
10169              onChange: handleChange
10170            }
10171          )
10172        }
10173      );
10174    }
10175  
10176    // packages/dataviews/build-module/utils/operators.js
10177    var import_i18n28 = __toESM(require_i18n());
10178    var import_element25 = __toESM(require_element());
10179    var import_jsx_runtime61 = __toESM(require_jsx_runtime());
10180    var filterTextWrappers = {
10181      Name: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "dataviews-filters__summary-filter-text-name" }),
10182      Value: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "dataviews-filters__summary-filter-text-value" })
10183    };
10184    var OPERATORS = [
10185      {
10186        name: OPERATOR_IS_ANY,
10187        /* translators: DataViews operator name */
10188        label: (0, import_i18n28.__)("Includes"),
10189        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10190          (0, import_i18n28.sprintf)(
10191            /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is any: Admin, Editor". */
10192            (0, import_i18n28.__)("<Name>%1$s includes: </Name><Value>%2$s</Value>"),
10193            filter.name,
10194            activeElements.map((element) => element.label).join(", ")
10195          ),
10196          filterTextWrappers
10197        ),
10198        selection: "multi"
10199      },
10200      {
10201        name: OPERATOR_IS_NONE,
10202        /* translators: DataViews operator name */
10203        label: (0, import_i18n28.__)("Is none of"),
10204        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10205          (0, import_i18n28.sprintf)(
10206            /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is none of: Admin, Editor". */
10207            (0, import_i18n28.__)("<Name>%1$s is none of: </Name><Value>%2$s</Value>"),
10208            filter.name,
10209            activeElements.map((element) => element.label).join(", ")
10210          ),
10211          filterTextWrappers
10212        ),
10213        selection: "multi"
10214      },
10215      {
10216        name: OPERATOR_IS_ALL,
10217        /* translators: DataViews operator name */
10218        label: (0, import_i18n28.__)("Includes all"),
10219        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10220          (0, import_i18n28.sprintf)(
10221            /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author includes all: Admin, Editor". */
10222            (0, import_i18n28.__)("<Name>%1$s includes all: </Name><Value>%2$s</Value>"),
10223            filter.name,
10224            activeElements.map((element) => element.label).join(", ")
10225          ),
10226          filterTextWrappers
10227        ),
10228        selection: "multi"
10229      },
10230      {
10231        name: OPERATOR_IS_NOT_ALL,
10232        /* translators: DataViews operator name */
10233        label: (0, import_i18n28.__)("Is none of"),
10234        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10235          (0, import_i18n28.sprintf)(
10236            /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is none of: Admin, Editor". */
10237            (0, import_i18n28.__)("<Name>%1$s is none of: </Name><Value>%2$s</Value>"),
10238            filter.name,
10239            activeElements.map((element) => element.label).join(", ")
10240          ),
10241          filterTextWrappers
10242        ),
10243        selection: "multi"
10244      },
10245      {
10246        name: OPERATOR_BETWEEN,
10247        /* translators: DataViews operator name */
10248        label: (0, import_i18n28.__)("Between (inc)"),
10249        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10250          (0, import_i18n28.sprintf)(
10251            /* translators: 1: Filter name (e.g. "Item count"). 2: Filter value min. 3: Filter value max. e.g.: "Item count between (inc): 10 and 180". */
10252            (0, import_i18n28.__)(
10253              "<Name>%1$s between (inc): </Name><Value>%2$s and %3$s</Value>"
10254            ),
10255            filter.name,
10256            activeElements[0].label[0],
10257            activeElements[0].label[1]
10258          ),
10259          filterTextWrappers
10260        ),
10261        selection: "custom"
10262      },
10263      {
10264        name: OPERATOR_IN_THE_PAST,
10265        /* translators: DataViews operator name */
10266        label: (0, import_i18n28.__)("In the past"),
10267        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10268          (0, import_i18n28.sprintf)(
10269            /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is in the past: 7 days". */
10270            (0, import_i18n28.__)(
10271              "<Name>%1$s is in the past: </Name><Value>%2$s</Value>"
10272            ),
10273            filter.name,
10274            `$activeElements[0].value.value} $activeElements[0].value.unit}`
10275          ),
10276          filterTextWrappers
10277        ),
10278        selection: "custom"
10279      },
10280      {
10281        name: OPERATOR_OVER,
10282        /* translators: DataViews operator name */
10283        label: (0, import_i18n28.__)("Over"),
10284        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10285          (0, import_i18n28.sprintf)(
10286            /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is over: 7 days". */
10287            (0, import_i18n28.__)("<Name>%1$s is over: </Name><Value>%2$s</Value>"),
10288            filter.name,
10289            `$activeElements[0].value.value} $activeElements[0].value.unit}`
10290          ),
10291          filterTextWrappers
10292        ),
10293        selection: "custom"
10294      },
10295      {
10296        name: OPERATOR_IS,
10297        /* translators: DataViews operator name */
10298        label: (0, import_i18n28.__)("Is"),
10299        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10300          (0, import_i18n28.sprintf)(
10301            /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is: Admin". */
10302            (0, import_i18n28.__)("<Name>%1$s is: </Name><Value>%2$s</Value>"),
10303            filter.name,
10304            activeElements[0].label
10305          ),
10306          filterTextWrappers
10307        ),
10308        selection: "single"
10309      },
10310      {
10311        name: OPERATOR_IS_NOT,
10312        /* translators: DataViews operator name */
10313        label: (0, import_i18n28.__)("Is not"),
10314        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10315          (0, import_i18n28.sprintf)(
10316            /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is not: Admin". */
10317            (0, import_i18n28.__)("<Name>%1$s is not: </Name><Value>%2$s</Value>"),
10318            filter.name,
10319            activeElements[0].label
10320          ),
10321          filterTextWrappers
10322        ),
10323        selection: "single"
10324      },
10325      {
10326        name: OPERATOR_LESS_THAN,
10327        /* translators: DataViews operator name */
10328        label: (0, import_i18n28.__)("Less than"),
10329        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10330          (0, import_i18n28.sprintf)(
10331            /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than: 10". */
10332            (0, import_i18n28.__)("<Name>%1$s is less than: </Name><Value>%2$s</Value>"),
10333            filter.name,
10334            activeElements[0].label
10335          ),
10336          filterTextWrappers
10337        ),
10338        selection: "single"
10339      },
10340      {
10341        name: OPERATOR_GREATER_THAN,
10342        /* translators: DataViews operator name */
10343        label: (0, import_i18n28.__)("Greater than"),
10344        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10345          (0, import_i18n28.sprintf)(
10346            /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than: 10". */
10347            (0, import_i18n28.__)(
10348              "<Name>%1$s is greater than: </Name><Value>%2$s</Value>"
10349            ),
10350            filter.name,
10351            activeElements[0].label
10352          ),
10353          filterTextWrappers
10354        ),
10355        selection: "single"
10356      },
10357      {
10358        name: OPERATOR_LESS_THAN_OR_EQUAL,
10359        /* translators: DataViews operator name */
10360        label: (0, import_i18n28.__)("Less than or equal"),
10361        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10362          (0, import_i18n28.sprintf)(
10363            /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than or equal to: 10". */
10364            (0, import_i18n28.__)(
10365              "<Name>%1$s is less than or equal to: </Name><Value>%2$s</Value>"
10366            ),
10367            filter.name,
10368            activeElements[0].label
10369          ),
10370          filterTextWrappers
10371        ),
10372        selection: "single"
10373      },
10374      {
10375        name: OPERATOR_GREATER_THAN_OR_EQUAL,
10376        /* translators: DataViews operator name */
10377        label: (0, import_i18n28.__)("Greater than or equal"),
10378        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10379          (0, import_i18n28.sprintf)(
10380            /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than or equal to: 10". */
10381            (0, import_i18n28.__)(
10382              "<Name>%1$s is greater than or equal to: </Name><Value>%2$s</Value>"
10383            ),
10384            filter.name,
10385            activeElements[0].label
10386          ),
10387          filterTextWrappers
10388        ),
10389        selection: "single"
10390      },
10391      {
10392        name: OPERATOR_BEFORE,
10393        /* translators: DataViews operator name */
10394        label: (0, import_i18n28.__)("Before"),
10395        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10396          (0, import_i18n28.sprintf)(
10397            /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is before: 2024-01-01". */
10398            (0, import_i18n28.__)("<Name>%1$s is before: </Name><Value>%2$s</Value>"),
10399            filter.name,
10400            activeElements[0].label
10401          ),
10402          filterTextWrappers
10403        ),
10404        selection: "single"
10405      },
10406      {
10407        name: OPERATOR_AFTER,
10408        /* translators: DataViews operator name */
10409        label: (0, import_i18n28.__)("After"),
10410        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10411          (0, import_i18n28.sprintf)(
10412            /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is after: 2024-01-01". */
10413            (0, import_i18n28.__)("<Name>%1$s is after: </Name><Value>%2$s</Value>"),
10414            filter.name,
10415            activeElements[0].label
10416          ),
10417          filterTextWrappers
10418        ),
10419        selection: "single"
10420      },
10421      {
10422        name: OPERATOR_BEFORE_INC,
10423        /* translators: DataViews operator name */
10424        label: (0, import_i18n28.__)("Before (inc)"),
10425        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10426          (0, import_i18n28.sprintf)(
10427            /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or before: 2024-01-01". */
10428            (0, import_i18n28.__)(
10429              "<Name>%1$s is on or before: </Name><Value>%2$s</Value>"
10430            ),
10431            filter.name,
10432            activeElements[0].label
10433          ),
10434          filterTextWrappers
10435        ),
10436        selection: "single"
10437      },
10438      {
10439        name: OPERATOR_AFTER_INC,
10440        /* translators: DataViews operator name */
10441        label: (0, import_i18n28.__)("After (inc)"),
10442        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10443          (0, import_i18n28.sprintf)(
10444            /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or after: 2024-01-01". */
10445            (0, import_i18n28.__)(
10446              "<Name>%1$s is on or after: </Name><Value>%2$s</Value>"
10447            ),
10448            filter.name,
10449            activeElements[0].label
10450          ),
10451          filterTextWrappers
10452        ),
10453        selection: "single"
10454      },
10455      {
10456        name: OPERATOR_CONTAINS,
10457        /* translators: DataViews operator name */
10458        label: (0, import_i18n28.__)("Contains"),
10459        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10460          (0, import_i18n28.sprintf)(
10461            /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title contains: Hello". */
10462            (0, import_i18n28.__)("<Name>%1$s contains: </Name><Value>%2$s</Value>"),
10463            filter.name,
10464            activeElements[0].label
10465          ),
10466          filterTextWrappers
10467        ),
10468        selection: "single"
10469      },
10470      {
10471        name: OPERATOR_NOT_CONTAINS,
10472        /* translators: DataViews operator name */
10473        label: (0, import_i18n28.__)("Doesn't contain"),
10474        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10475          (0, import_i18n28.sprintf)(
10476            /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title doesn't contain: Hello". */
10477            (0, import_i18n28.__)(
10478              "<Name>%1$s doesn't contain: </Name><Value>%2$s</Value>"
10479            ),
10480            filter.name,
10481            activeElements[0].label
10482          ),
10483          filterTextWrappers
10484        ),
10485        selection: "single"
10486      },
10487      {
10488        name: OPERATOR_STARTS_WITH,
10489        /* translators: DataViews operator name */
10490        label: (0, import_i18n28.__)("Starts with"),
10491        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10492          (0, import_i18n28.sprintf)(
10493            /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title starts with: Hello". */
10494            (0, import_i18n28.__)("<Name>%1$s starts with: </Name><Value>%2$s</Value>"),
10495            filter.name,
10496            activeElements[0].label
10497          ),
10498          filterTextWrappers
10499        ),
10500        selection: "single"
10501      },
10502      {
10503        name: OPERATOR_ON,
10504        /* translators: DataViews operator name */
10505        label: (0, import_i18n28.__)("On"),
10506        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10507          (0, import_i18n28.sprintf)(
10508            /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is: 2024-01-01". */
10509            (0, import_i18n28.__)("<Name>%1$s is: </Name><Value>%2$s</Value>"),
10510            filter.name,
10511            activeElements[0].label
10512          ),
10513          filterTextWrappers
10514        ),
10515        selection: "single"
10516      },
10517      {
10518        name: OPERATOR_NOT_ON,
10519        /* translators: DataViews operator name */
10520        label: (0, import_i18n28.__)("Not on"),
10521        filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10522          (0, import_i18n28.sprintf)(
10523            /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is not: 2024-01-01". */
10524            (0, import_i18n28.__)("<Name>%1$s is not: </Name><Value>%2$s</Value>"),
10525            filter.name,
10526            activeElements[0].label
10527          ),
10528          filterTextWrappers
10529        ),
10530        selection: "single"
10531      }
10532    ];
10533    var getOperatorByName = (name) => OPERATORS.find((op) => op.name === name);
10534    var getAllOperatorNames = () => OPERATORS.map((op) => op.name);
10535    var isSingleSelectionOperator = (name) => OPERATORS.filter((op) => op.selection === "single").some(
10536      (op) => op.name === name
10537    );
10538    var isRegisteredOperator = (name) => OPERATORS.some((op) => op.name === name);
10539  
10540    // packages/dataviews/build-module/components/dataviews-filters/filter.js
10541    var import_jsx_runtime62 = __toESM(require_jsx_runtime());
10542    var ENTER = "Enter";
10543    var SPACE = " ";
10544    var FilterText = ({
10545      activeElements,
10546      filterInView,
10547      filter
10548    }) => {
10549      if (activeElements === void 0 || activeElements.length === 0) {
10550        return filter.name;
10551      }
10552      const operator = getOperatorByName(filterInView?.operator);
10553      if (operator !== void 0) {
10554        return operator.filterText(filter, activeElements);
10555      }
10556      return (0, import_i18n29.sprintf)(
10557        /* translators: 1: Filter name e.g.: "Unknown status for Author". */
10558        (0, import_i18n29.__)("Unknown status for %1$s"),
10559        filter.name
10560      );
10561    };
10562    function OperatorSelector({
10563      filter,
10564      view,
10565      onChangeView
10566    }) {
10567      const operatorOptions = filter.operators?.map((operator) => ({
10568        value: operator,
10569        label: getOperatorByName(operator)?.label || operator
10570      }));
10571      const currentFilter = view.filters?.find(
10572        (_filter) => _filter.field === filter.field
10573      );
10574      const value = currentFilter?.operator || filter.operators[0];
10575      return operatorOptions.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
10576        import_components23.__experimentalHStack,
10577        {
10578          spacing: 2,
10579          justify: "flex-start",
10580          className: "dataviews-filters__summary-operators-container",
10581          children: [
10582            /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_components23.FlexItem, { className: "dataviews-filters__summary-operators-filter-name", children: filter.name }),
10583            /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
10584              import_components23.SelectControl,
10585              {
10586                className: "dataviews-filters__summary-operators-filter-select",
10587                label: (0, import_i18n29.__)("Conditions"),
10588                value,
10589                options: operatorOptions,
10590                onChange: (newValue) => {
10591                  const newOperator = newValue;
10592                  const currentOperator = currentFilter?.operator;
10593                  const newFilters = currentFilter ? [
10594                    ...(view.filters ?? []).map(
10595                      (_filter) => {
10596                        if (_filter.field === filter.field) {
10597                          const currentOpSelectionModel = getOperatorByName(
10598                            currentOperator
10599                          )?.selection;
10600                          const newOpSelectionModel = getOperatorByName(
10601                            newOperator
10602                          )?.selection;
10603                          const shouldResetValue = currentOpSelectionModel !== newOpSelectionModel || [
10604                            currentOpSelectionModel,
10605                            newOpSelectionModel
10606                          ].includes("custom");
10607                          return {
10608                            ..._filter,
10609                            value: shouldResetValue ? void 0 : _filter.value,
10610                            operator: newOperator
10611                          };
10612                        }
10613                        return _filter;
10614                      }
10615                    )
10616                  ] : [
10617                    ...view.filters ?? [],
10618                    {
10619                      field: filter.field,
10620                      operator: newOperator,
10621                      value: void 0
10622                    }
10623                  ];
10624                  onChangeView({
10625                    ...view,
10626                    page: 1,
10627                    filters: newFilters
10628                  });
10629                },
10630                size: "small",
10631                variant: "minimal",
10632                hideLabelFromVision: true
10633              }
10634            )
10635          ]
10636        }
10637      );
10638    }
10639    function Filter({
10640      addFilterRef,
10641      openedFilter,
10642      fields,
10643      ...commonProps
10644    }) {
10645      const toggleRef = (0, import_element26.useRef)(null);
10646      const { filter, view, onChangeView } = commonProps;
10647      const filterInView = view.filters?.find(
10648        (f2) => f2.field === filter.field
10649      );
10650      let activeElements = [];
10651      const field = (0, import_element26.useMemo)(() => {
10652        const currentField = fields.find((f2) => f2.id === filter.field);
10653        if (currentField) {
10654          return {
10655            ...currentField,
10656            // Configure getValue as if Item was a plain object.
10657            // See related input-widget.tsx
10658            getValue: ({ item }) => item[currentField.id]
10659          };
10660        }
10661        return currentField;
10662      }, [fields, filter.field]);
10663      const { elements } = useElements({
10664        elements: filter.elements,
10665        getElements: filter.getElements
10666      });
10667      if (elements.length > 0) {
10668        activeElements = elements.filter((element) => {
10669          if (filter.singleSelection) {
10670            return element.value === filterInView?.value;
10671          }
10672          return filterInView?.value?.includes(element.value);
10673        });
10674      } else if (Array.isArray(filterInView?.value)) {
10675        const label = filterInView.value.map((v2) => {
10676          const formattedValue = field?.getValueFormatted({
10677            item: { [field.id]: v2 },
10678            field
10679          });
10680          return formattedValue || String(v2);
10681        });
10682        activeElements = [
10683          {
10684            value: filterInView.value,
10685            // @ts-ignore
10686            label
10687          }
10688        ];
10689      } else if (typeof filterInView?.value === "object") {
10690        activeElements = [
10691          { value: filterInView.value, label: filterInView.value }
10692        ];
10693      } else if (filterInView?.value !== void 0) {
10694        const label = field !== void 0 ? field.getValueFormatted({
10695          item: { [field.id]: filterInView.value },
10696          field
10697        }) : String(filterInView.value);
10698        activeElements = [
10699          {
10700            value: filterInView.value,
10701            label
10702          }
10703        ];
10704      }
10705      const isPrimary = filter.isPrimary;
10706      const isLocked = filterInView?.isLocked;
10707      const hasValues = !isLocked && filterInView?.value !== void 0;
10708      const canResetOrRemove = !isLocked && (!isPrimary || hasValues);
10709      return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
10710        import_components23.Dropdown,
10711        {
10712          defaultOpen: openedFilter === filter.field,
10713          contentClassName: "dataviews-filters__summary-popover",
10714          popoverProps: { placement: "bottom-start", role: "dialog" },
10715          onClose: () => {
10716            toggleRef.current?.focus();
10717          },
10718          renderToggle: ({ isOpen, onToggle }) => /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "dataviews-filters__summary-chip-container", children: [
10719            /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
10720              import_components23.Tooltip,
10721              {
10722                text: (0, import_i18n29.sprintf)(
10723                  /* translators: 1: Filter name. */
10724                  (0, import_i18n29.__)("Filter by: %1$s"),
10725                  filter.name.toLowerCase()
10726                ),
10727                placement: "top",
10728                children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
10729                  "div",
10730                  {
10731                    className: clsx_default(
10732                      "dataviews-filters__summary-chip",
10733                      {
10734                        "has-reset": canResetOrRemove,
10735                        "has-values": hasValues,
10736                        "is-not-clickable": isLocked
10737                      }
10738                    ),
10739                    role: "button",
10740                    tabIndex: isLocked ? -1 : 0,
10741                    onClick: () => {
10742                      if (!isLocked) {
10743                        onToggle();
10744                      }
10745                    },
10746                    onKeyDown: (event) => {
10747                      if (!isLocked && [ENTER, SPACE].includes(event.key)) {
10748                        onToggle();
10749                        event.preventDefault();
10750                      }
10751                    },
10752                    "aria-disabled": isLocked,
10753                    "aria-pressed": isOpen,
10754                    "aria-expanded": isOpen,
10755                    ref: toggleRef,
10756                    children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
10757                      FilterText,
10758                      {
10759                        activeElements,
10760                        filterInView,
10761                        filter
10762                      }
10763                    )
10764                  }
10765                )
10766              }
10767            ),
10768            canResetOrRemove && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
10769              import_components23.Tooltip,
10770              {
10771                text: isPrimary ? (0, import_i18n29.__)("Reset") : (0, import_i18n29.__)("Remove"),
10772                placement: "top",
10773                children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
10774                  "button",
10775                  {
10776                    className: clsx_default(
10777                      "dataviews-filters__summary-chip-remove",
10778                      { "has-values": hasValues }
10779                    ),
10780                    onClick: () => {
10781                      onChangeView({
10782                        ...view,
10783                        page: 1,
10784                        filters: view.filters?.filter(
10785                          (_filter) => _filter.field !== filter.field
10786                        )
10787                      });
10788                      if (!isPrimary) {
10789                        addFilterRef.current?.focus();
10790                      } else {
10791                        toggleRef.current?.focus();
10792                      }
10793                    },
10794                    children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_components23.Icon, { icon: close_small_default })
10795                  }
10796                )
10797              }
10798            )
10799          ] }),
10800          renderContent: () => {
10801            return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_components23.__experimentalVStack, { spacing: 0, justify: "flex-start", children: [
10802              /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(OperatorSelector, { ...commonProps }),
10803              commonProps.filter.hasElements ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
10804                SearchWidget,
10805                {
10806                  ...commonProps,
10807                  filter: {
10808                    ...commonProps.filter,
10809                    elements
10810                  }
10811                }
10812              ) : /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(InputWidget, { ...commonProps, fields })
10813            ] });
10814          }
10815        }
10816      );
10817    }
10818  
10819    // packages/dataviews/build-module/components/dataviews-filters/add-filter.js
10820    var import_components24 = __toESM(require_components());
10821    var import_i18n30 = __toESM(require_i18n());
10822    var import_element27 = __toESM(require_element());
10823    var import_jsx_runtime63 = __toESM(require_jsx_runtime());
10824    var { Menu: Menu4 } = unlock(import_components24.privateApis);
10825    function AddFilterMenu({
10826      filters,
10827      view,
10828      onChangeView,
10829      setOpenedFilter,
10830      triggerProps
10831    }) {
10832      const inactiveFilters = filters.filter((filter) => !filter.isVisible);
10833      return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(Menu4, { children: [
10834        /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Menu4.TriggerButton, { ...triggerProps }),
10835        /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Menu4.Popover, { children: inactiveFilters.map((filter) => {
10836          return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
10837            Menu4.Item,
10838            {
10839              onClick: () => {
10840                setOpenedFilter(filter.field);
10841                onChangeView({
10842                  ...view,
10843                  page: 1,
10844                  filters: [
10845                    ...view.filters || [],
10846                    {
10847                      field: filter.field,
10848                      value: void 0,
10849                      operator: filter.operators[0]
10850                    }
10851                  ]
10852                });
10853              },
10854              children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Menu4.ItemLabel, { children: filter.name })
10855            },
10856            filter.field
10857          );
10858        }) })
10859      ] });
10860    }
10861    function AddFilter({ filters, view, onChangeView, setOpenedFilter }, ref) {
10862      if (!filters.length || filters.every(({ isPrimary }) => isPrimary)) {
10863        return null;
10864      }
10865      const inactiveFilters = filters.filter((filter) => !filter.isVisible);
10866      return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
10867        AddFilterMenu,
10868        {
10869          triggerProps: {
10870            render: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
10871              import_components24.Button,
10872              {
10873                accessibleWhenDisabled: true,
10874                size: "compact",
10875                className: "dataviews-filters-button",
10876                variant: "tertiary",
10877                disabled: !inactiveFilters.length,
10878                ref
10879              }
10880            ),
10881            children: (0, import_i18n30.__)("Add filter")
10882          },
10883          ...{ filters, view, onChangeView, setOpenedFilter }
10884        }
10885      );
10886    }
10887    var add_filter_default = (0, import_element27.forwardRef)(AddFilter);
10888  
10889    // packages/dataviews/build-module/components/dataviews-filters/reset-filters.js
10890    var import_components25 = __toESM(require_components());
10891    var import_i18n31 = __toESM(require_i18n());
10892    var import_jsx_runtime64 = __toESM(require_jsx_runtime());
10893    function ResetFilter({
10894      filters,
10895      view,
10896      onChangeView
10897    }) {
10898      const isPrimary = (field) => filters.some(
10899        (_filter) => _filter.field === field && _filter.isPrimary
10900      );
10901      const isDisabled = !view.search && !view.filters?.some(
10902        (_filter) => !_filter.isLocked && (_filter.value !== void 0 || !isPrimary(_filter.field))
10903      );
10904      return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
10905        import_components25.Button,
10906        {
10907          disabled: isDisabled,
10908          accessibleWhenDisabled: true,
10909          size: "compact",
10910          variant: "tertiary",
10911          className: "dataviews-filters__reset-button",
10912          onClick: () => {
10913            onChangeView({
10914              ...view,
10915              page: 1,
10916              search: "",
10917              filters: view.filters?.filter((f2) => !!f2.isLocked) || []
10918            });
10919          },
10920          children: (0, import_i18n31.__)("Reset")
10921        }
10922      );
10923    }
10924  
10925    // packages/dataviews/build-module/components/dataviews-filters/use-filters.js
10926    var import_element28 = __toESM(require_element());
10927    function useFilters(fields, view) {
10928      return (0, import_element28.useMemo)(() => {
10929        const filters = [];
10930        fields.forEach((field) => {
10931          if (field.filterBy === false || !field.hasElements && !field.Edit) {
10932            return;
10933          }
10934          const operators = field.filterBy.operators;
10935          const isPrimary = !!field.filterBy?.isPrimary;
10936          const isLocked = view.filters?.some(
10937            (f2) => f2.field === field.id && !!f2.isLocked
10938          ) ?? false;
10939          filters.push({
10940            field: field.id,
10941            name: field.label,
10942            elements: field.elements,
10943            getElements: field.getElements,
10944            hasElements: field.hasElements,
10945            singleSelection: operators.some(
10946              (op) => isSingleSelectionOperator(op)
10947            ),
10948            operators,
10949            isVisible: isLocked || isPrimary || !!view.filters?.some(
10950              (f2) => f2.field === field.id && isRegisteredOperator(f2.operator)
10951            ),
10952            isPrimary,
10953            isLocked
10954          });
10955        });
10956        filters.sort((a2, b2) => {
10957          if (a2.isLocked && !b2.isLocked) {
10958            return -1;
10959          }
10960          if (!a2.isLocked && b2.isLocked) {
10961            return 1;
10962          }
10963          if (a2.isPrimary && !b2.isPrimary) {
10964            return -1;
10965          }
10966          if (!a2.isPrimary && b2.isPrimary) {
10967            return 1;
10968          }
10969          return a2.name.localeCompare(b2.name);
10970        });
10971        return filters;
10972      }, [fields, view]);
10973    }
10974    var use_filters_default = useFilters;
10975  
10976    // packages/dataviews/build-module/components/dataviews-filters/filters.js
10977    var import_jsx_runtime65 = __toESM(require_jsx_runtime());
10978    function Filters({ className }) {
10979      const { fields, view, onChangeView, openedFilter, setOpenedFilter } = (0, import_element29.useContext)(dataviews_context_default);
10980      const addFilterRef = (0, import_element29.useRef)(null);
10981      const filters = use_filters_default(fields, view);
10982      const addFilter = /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
10983        add_filter_default,
10984        {
10985          filters,
10986          view,
10987          onChangeView,
10988          ref: addFilterRef,
10989          setOpenedFilter
10990        },
10991        "add-filter"
10992      );
10993      const visibleFilters = filters.filter((filter) => filter.isVisible);
10994      if (visibleFilters.length === 0) {
10995        return null;
10996      }
10997      const filterComponents = [
10998        ...visibleFilters.map((filter) => {
10999          return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11000            Filter,
11001            {
11002              filter,
11003              view,
11004              fields,
11005              onChangeView,
11006              addFilterRef,
11007              openedFilter
11008            },
11009            filter.field
11010          );
11011        }),
11012        addFilter
11013      ];
11014      filterComponents.push(
11015        /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11016          ResetFilter,
11017          {
11018            filters,
11019            view,
11020            onChangeView
11021          },
11022          "reset-filters"
11023        )
11024      );
11025      return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
11026        import_components26.__experimentalHStack,
11027        {
11028          justify: "flex-start",
11029          style: { width: "fit-content" },
11030          wrap: true,
11031          className,
11032          children: filterComponents
11033        }
11034      );
11035    }
11036    var filters_default = (0, import_element29.memo)(Filters);
11037  
11038    // packages/dataviews/build-module/components/dataviews-filters/toggle.js
11039    var import_element30 = __toESM(require_element());
11040    var import_components27 = __toESM(require_components());
11041    var import_i18n32 = __toESM(require_i18n());
11042    var import_jsx_runtime66 = __toESM(require_jsx_runtime());
11043    function FiltersToggle() {
11044      const {
11045        filters,
11046        view,
11047        onChangeView,
11048        setOpenedFilter,
11049        isShowingFilter,
11050        setIsShowingFilter
11051      } = (0, import_element30.useContext)(dataviews_context_default);
11052      const buttonRef = (0, import_element30.useRef)(null);
11053      const onChangeViewWithFilterVisibility = (0, import_element30.useCallback)(
11054        (_view) => {
11055          onChangeView(_view);
11056          setIsShowingFilter(true);
11057        },
11058        [onChangeView, setIsShowingFilter]
11059      );
11060      const visibleFilters = filters.filter((filter) => filter.isVisible);
11061      const hasVisibleFilters = !!visibleFilters.length;
11062      if (filters.length === 0) {
11063        return null;
11064      }
11065      const addFilterButtonProps = {
11066        label: (0, import_i18n32.__)("Add filter"),
11067        "aria-expanded": false,
11068        isPressed: false
11069      };
11070      const toggleFiltersButtonProps = {
11071        label: (0, import_i18n32._x)("Filter", "verb"),
11072        "aria-expanded": isShowingFilter,
11073        isPressed: isShowingFilter,
11074        onClick: () => {
11075          if (!isShowingFilter) {
11076            setOpenedFilter(null);
11077          }
11078          setIsShowingFilter(!isShowingFilter);
11079        }
11080      };
11081      const buttonComponent = /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
11082        import_components27.Button,
11083        {
11084          ref: buttonRef,
11085          className: "dataviews-filters__visibility-toggle",
11086          size: "compact",
11087          icon: funnel_default,
11088          ...hasVisibleFilters ? toggleFiltersButtonProps : addFilterButtonProps
11089        }
11090      );
11091      return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "dataviews-filters__container-visibility-toggle", children: !hasVisibleFilters ? /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
11092        AddFilterMenu,
11093        {
11094          filters,
11095          view,
11096          onChangeView: onChangeViewWithFilterVisibility,
11097          setOpenedFilter,
11098          triggerProps: { render: buttonComponent }
11099        }
11100      ) : /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
11101        FilterVisibilityToggle,
11102        {
11103          buttonRef,
11104          filtersCount: view.filters?.length,
11105          children: buttonComponent
11106        }
11107      ) });
11108    }
11109    function FilterVisibilityToggle({
11110      buttonRef,
11111      filtersCount,
11112      children
11113    }) {
11114      (0, import_element30.useEffect)(
11115        () => () => {
11116          buttonRef.current?.focus();
11117        },
11118        [buttonRef]
11119      );
11120      return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_jsx_runtime66.Fragment, { children: [
11121        children,
11122        !!filtersCount && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "dataviews-filters-toggle__count", children: filtersCount })
11123      ] });
11124    }
11125    var toggle_default = FiltersToggle;
11126  
11127    // packages/dataviews/build-module/components/dataviews-filters/filters-toggled.js
11128    var import_element31 = __toESM(require_element());
11129    var import_jsx_runtime67 = __toESM(require_jsx_runtime());
11130    function FiltersToggled(props) {
11131      const { isShowingFilter } = (0, import_element31.useContext)(dataviews_context_default);
11132      if (!isShowingFilter) {
11133        return null;
11134      }
11135      return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(filters_default, { ...props });
11136    }
11137    var filters_toggled_default = FiltersToggled;
11138  
11139    // packages/dataviews/build-module/components/dataviews-layout/index.js
11140    var import_element32 = __toESM(require_element());
11141    var import_i18n33 = __toESM(require_i18n());
11142    var import_jsx_runtime68 = __toESM(require_jsx_runtime());
11143    function DataViewsLayout({ className }) {
11144      const {
11145        actions = [],
11146        data,
11147        fields,
11148        getItemId,
11149        getItemLevel,
11150        isLoading,
11151        view,
11152        onChangeView,
11153        selection,
11154        onChangeSelection,
11155        setOpenedFilter,
11156        onClickItem,
11157        isItemClickable: isItemClickable2,
11158        renderItemLink,
11159        defaultLayouts,
11160        empty = /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("p", { children: (0, import_i18n33.__)("No results") })
11161      } = (0, import_element32.useContext)(dataviews_context_default);
11162      const ViewComponent = VIEW_LAYOUTS.find(
11163        (v2) => v2.type === view.type && defaultLayouts[v2.type]
11164      )?.component;
11165      return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
11166        ViewComponent,
11167        {
11168          className,
11169          actions,
11170          data,
11171          fields,
11172          getItemId,
11173          getItemLevel,
11174          isLoading,
11175          onChangeView,
11176          onChangeSelection,
11177          selection,
11178          setOpenedFilter,
11179          onClickItem,
11180          renderItemLink,
11181          isItemClickable: isItemClickable2,
11182          view,
11183          empty
11184        }
11185      );
11186    }
11187  
11188    // packages/dataviews/build-module/components/dataviews-search/index.js
11189    var import_i18n34 = __toESM(require_i18n());
11190    var import_element33 = __toESM(require_element());
11191    var import_components28 = __toESM(require_components());
11192    var import_compose9 = __toESM(require_compose());
11193    var import_jsx_runtime69 = __toESM(require_jsx_runtime());
11194    var DataViewsSearch = (0, import_element33.memo)(function Search({ label }) {
11195      const { view, onChangeView } = (0, import_element33.useContext)(dataviews_context_default);
11196      const [search, setSearch, debouncedSearch] = (0, import_compose9.useDebouncedInput)(
11197        view.search
11198      );
11199      (0, import_element33.useEffect)(() => {
11200        setSearch(view.search ?? "");
11201      }, [view.search, setSearch]);
11202      const onChangeViewRef = (0, import_element33.useRef)(onChangeView);
11203      const viewRef = (0, import_element33.useRef)(view);
11204      (0, import_element33.useEffect)(() => {
11205        onChangeViewRef.current = onChangeView;
11206        viewRef.current = view;
11207      }, [onChangeView, view]);
11208      (0, import_element33.useEffect)(() => {
11209        if (debouncedSearch !== viewRef.current?.search) {
11210          onChangeViewRef.current({
11211            ...viewRef.current,
11212            page: 1,
11213            search: debouncedSearch
11214          });
11215        }
11216      }, [debouncedSearch]);
11217      const searchLabel = label || (0, import_i18n34.__)("Search");
11218      return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
11219        import_components28.SearchControl,
11220        {
11221          className: "dataviews-search",
11222          onChange: setSearch,
11223          value: search,
11224          label: searchLabel,
11225          placeholder: searchLabel,
11226          size: "compact"
11227        }
11228      );
11229    });
11230    var dataviews_search_default = DataViewsSearch;
11231  
11232    // packages/dataviews/build-module/components/dataviews-view-config/index.js
11233    var import_components30 = __toESM(require_components());
11234    var import_i18n36 = __toESM(require_i18n());
11235    var import_element35 = __toESM(require_element());
11236    var import_warning = __toESM(require_warning());
11237    var import_compose10 = __toESM(require_compose());
11238  
11239    // packages/dataviews/build-module/components/dataviews-view-config/infinite-scroll-toggle.js
11240    var import_components29 = __toESM(require_components());
11241    var import_i18n35 = __toESM(require_i18n());
11242    var import_element34 = __toESM(require_element());
11243    var import_jsx_runtime70 = __toESM(require_jsx_runtime());
11244    function InfiniteScrollToggle() {
11245      const context = (0, import_element34.useContext)(dataviews_context_default);
11246      const { view, onChangeView } = context;
11247      const infiniteScrollEnabled = view.infiniteScrollEnabled ?? false;
11248      if (!context.hasInfiniteScrollHandler) {
11249        return null;
11250      }
11251      return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
11252        import_components29.ToggleControl,
11253        {
11254          label: (0, import_i18n35.__)("Enable infinite scroll"),
11255          help: (0, import_i18n35.__)(
11256            "Automatically load more content as you scroll, instead of showing pagination links."
11257          ),
11258          checked: infiniteScrollEnabled,
11259          onChange: (newValue) => {
11260            onChangeView({
11261              ...view,
11262              infiniteScrollEnabled: newValue
11263            });
11264          }
11265        }
11266      );
11267    }
11268  
11269    // packages/dataviews/build-module/components/dataviews-view-config/index.js
11270    var import_jsx_runtime71 = __toESM(require_jsx_runtime());
11271    var { Menu: Menu5 } = unlock(import_components30.privateApis);
11272    var DATAVIEWS_CONFIG_POPOVER_PROPS = {
11273      className: "dataviews-config__popover",
11274      placement: "bottom-end",
11275      offset: 9
11276    };
11277    function ViewTypeMenu() {
11278      const { view, onChangeView, defaultLayouts } = (0, import_element35.useContext)(dataviews_context_default);
11279      const availableLayouts = Object.keys(defaultLayouts);
11280      if (availableLayouts.length <= 1) {
11281        return null;
11282      }
11283      const activeView = VIEW_LAYOUTS.find((v2) => view.type === v2.type);
11284      return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(Menu5, { children: [
11285        /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
11286          Menu5.TriggerButton,
11287          {
11288            render: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
11289              import_components30.Button,
11290              {
11291                size: "compact",
11292                icon: activeView?.icon,
11293                label: (0, import_i18n36.__)("Layout")
11294              }
11295            )
11296          }
11297        ),
11298        /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Menu5.Popover, { children: availableLayouts.map((layout) => {
11299          const config = VIEW_LAYOUTS.find(
11300            (v2) => v2.type === layout
11301          );
11302          if (!config) {
11303            return null;
11304          }
11305          return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
11306            Menu5.RadioItem,
11307            {
11308              value: layout,
11309              name: "view-actions-available-view",
11310              checked: layout === view.type,
11311              hideOnClick: true,
11312              onChange: (e2) => {
11313                switch (e2.target.value) {
11314                  case "list":
11315                  case "grid":
11316                  case "table":
11317                  case "pickerGrid":
11318                  case "pickerTable":
11319                  case "activity":
11320                    const viewWithoutLayout = { ...view };
11321                    if ("layout" in viewWithoutLayout) {
11322                      delete viewWithoutLayout.layout;
11323                    }
11324                    return onChangeView({
11325                      ...viewWithoutLayout,
11326                      type: e2.target.value,
11327                      ...defaultLayouts[e2.target.value]
11328                    });
11329                }
11330                (0, import_warning.default)("Invalid dataview");
11331              },
11332              children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(Menu5.ItemLabel, { children: config.label })
11333            },
11334            layout
11335          );
11336        }) })
11337      ] });
11338    }
11339    function SortFieldControl() {
11340      const { view, fields, onChangeView } = (0, import_element35.useContext)(dataviews_context_default);
11341      const orderOptions = (0, import_element35.useMemo)(() => {
11342        const sortableFields = fields.filter(
11343          (field) => field.enableSorting !== false
11344        );
11345        return sortableFields.map((field) => {
11346          return {
11347            label: field.label,
11348            value: field.id
11349          };
11350        });
11351      }, [fields]);
11352      return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
11353        import_components30.SelectControl,
11354        {
11355          __next40pxDefaultSize: true,
11356          label: (0, import_i18n36.__)("Sort by"),
11357          value: view.sort?.field,
11358          options: orderOptions,
11359          onChange: (value) => {
11360            onChangeView({
11361              ...view,
11362              sort: {
11363                direction: view?.sort?.direction || "desc",
11364                field: value
11365              },
11366              showLevels: false
11367            });
11368          }
11369        }
11370      );
11371    }
11372    function SortDirectionControl() {
11373      const { view, fields, onChangeView } = (0, import_element35.useContext)(dataviews_context_default);
11374      const sortableFields = fields.filter(
11375        (field) => field.enableSorting !== false
11376      );
11377      if (sortableFields.length === 0) {
11378        return null;
11379      }
11380      let value = view.sort?.direction;
11381      if (!value && view.sort?.field) {
11382        value = "desc";
11383      }
11384      return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
11385        import_components30.__experimentalToggleGroupControl,
11386        {
11387          className: "dataviews-view-config__sort-direction",
11388          __next40pxDefaultSize: true,
11389          isBlock: true,
11390          label: (0, import_i18n36.__)("Order"),
11391          value,
11392          onChange: (newDirection) => {
11393            if (newDirection === "asc" || newDirection === "desc") {
11394              onChangeView({
11395                ...view,
11396                sort: {
11397                  direction: newDirection,
11398                  field: view.sort?.field || // If there is no field assigned as the sorting field assign the first sortable field.
11399                  fields.find(
11400                    (field) => field.enableSorting !== false
11401                  )?.id || ""
11402                },
11403                showLevels: false
11404              });
11405              return;
11406            }
11407            (0, import_warning.default)("Invalid direction");
11408          },
11409          children: SORTING_DIRECTIONS.map((direction) => {
11410            return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
11411              import_components30.__experimentalToggleGroupControlOptionIcon,
11412              {
11413                value: direction,
11414                icon: sortIcons[direction],
11415                label: sortLabels[direction]
11416              },
11417              direction
11418            );
11419          })
11420        }
11421      );
11422    }
11423    function ItemsPerPageControl() {
11424      const { view, config, onChangeView } = (0, import_element35.useContext)(dataviews_context_default);
11425      const { infiniteScrollEnabled } = view;
11426      if (!config || !config.perPageSizes || config.perPageSizes.length < 2 || config.perPageSizes.length > 6 || infiniteScrollEnabled) {
11427        return null;
11428      }
11429      return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
11430        import_components30.__experimentalToggleGroupControl,
11431        {
11432          __next40pxDefaultSize: true,
11433          isBlock: true,
11434          label: (0, import_i18n36.__)("Items per page"),
11435          value: view.perPage || 10,
11436          disabled: !view?.sort?.field,
11437          onChange: (newItemsPerPage) => {
11438            const newItemsPerPageNumber = typeof newItemsPerPage === "number" || newItemsPerPage === void 0 ? newItemsPerPage : parseInt(newItemsPerPage, 10);
11439            onChangeView({
11440              ...view,
11441              perPage: newItemsPerPageNumber,
11442              page: 1
11443            });
11444          },
11445          children: config.perPageSizes.map((value) => {
11446            return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
11447              import_components30.__experimentalToggleGroupControlOption,
11448              {
11449                value,
11450                label: value.toString()
11451              },
11452              value
11453            );
11454          })
11455        }
11456      );
11457    }
11458    function SettingsSection({
11459      title,
11460      description,
11461      children
11462    }) {
11463      return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_components30.__experimentalGrid, { columns: 12, className: "dataviews-settings-section", gap: 4, children: [
11464        /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "dataviews-settings-section__sidebar", children: [
11465          /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
11466            import_components30.__experimentalHeading,
11467            {
11468              level: 2,
11469              className: "dataviews-settings-section__title",
11470              children: title
11471            }
11472          ),
11473          description && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
11474            import_components30.__experimentalText,
11475            {
11476              variant: "muted",
11477              className: "dataviews-settings-section__description",
11478              children: description
11479            }
11480          )
11481        ] }),
11482        /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
11483          import_components30.__experimentalGrid,
11484          {
11485            columns: 8,
11486            gap: 4,
11487            className: "dataviews-settings-section__content",
11488            children
11489          }
11490        )
11491      ] });
11492    }
11493    function DataviewsViewConfigDropdown() {
11494      const { view } = (0, import_element35.useContext)(dataviews_context_default);
11495      const popoverId = (0, import_compose10.useInstanceId)(
11496        _DataViewsViewConfig,
11497        "dataviews-view-config-dropdown"
11498      );
11499      const activeLayout = VIEW_LAYOUTS.find(
11500        (layout) => layout.type === view.type
11501      );
11502      return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
11503        import_components30.Dropdown,
11504        {
11505          expandOnMobile: true,
11506          popoverProps: {
11507            ...DATAVIEWS_CONFIG_POPOVER_PROPS,
11508            id: popoverId
11509          },
11510          renderToggle: ({ onToggle, isOpen }) => {
11511            return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
11512              import_components30.Button,
11513              {
11514                size: "compact",
11515                icon: cog_default,
11516                label: (0, import_i18n36._x)("View options", "View is used as a noun"),
11517                onClick: onToggle,
11518                "aria-expanded": isOpen ? "true" : "false",
11519                "aria-controls": popoverId
11520              }
11521            );
11522          },
11523          renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
11524            import_components30.__experimentalDropdownContentWrapper,
11525            {
11526              paddingSize: "medium",
11527              className: "dataviews-config__popover-content-wrapper",
11528              children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(import_components30.__experimentalVStack, { className: "dataviews-view-config", spacing: 6, children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(SettingsSection, { title: (0, import_i18n36.__)("Appearance"), children: [
11529                /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_components30.__experimentalHStack, { expanded: true, className: "is-divided-in-two", children: [
11530                  /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(SortFieldControl, {}),
11531                  /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(SortDirectionControl, {})
11532                ] }),
11533                !!activeLayout?.viewConfigOptions && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(activeLayout.viewConfigOptions, {}),
11534                /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(InfiniteScrollToggle, {}),
11535                /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(ItemsPerPageControl, {}),
11536                /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(PropertiesSection, {})
11537              ] }) })
11538            }
11539          )
11540        }
11541      );
11542    }
11543    function _DataViewsViewConfig() {
11544      return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_jsx_runtime71.Fragment, { children: [
11545        /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(ViewTypeMenu, {}),
11546        /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(DataviewsViewConfigDropdown, {})
11547      ] });
11548    }
11549    var DataViewsViewConfig = (0, import_element35.memo)(_DataViewsViewConfig);
11550    var dataviews_view_config_default = DataViewsViewConfig;
11551  
11552    // packages/dataviews/build-module/dataform-controls/checkbox.js
11553    var import_components31 = __toESM(require_components());
11554    var import_element36 = __toESM(require_element());
11555  
11556    // packages/dataviews/build-module/dataform-controls/utils/get-custom-validity.js
11557    function getCustomValidity(isValid2, validity) {
11558      let customValidity;
11559      if (isValid2?.required && validity?.required) {
11560        customValidity = validity?.required?.message ? validity.required : void 0;
11561      } else if (isValid2?.pattern && validity?.pattern) {
11562        customValidity = validity.pattern;
11563      } else if (isValid2?.min && validity?.min) {
11564        customValidity = validity.min;
11565      } else if (isValid2?.max && validity?.max) {
11566        customValidity = validity.max;
11567      } else if (isValid2?.minLength && validity?.minLength) {
11568        customValidity = validity.minLength;
11569      } else if (isValid2?.maxLength && validity?.maxLength) {
11570        customValidity = validity.maxLength;
11571      } else if (isValid2?.elements && validity?.elements) {
11572        customValidity = validity.elements;
11573      } else if (validity?.custom) {
11574        customValidity = validity.custom;
11575      }
11576      return customValidity;
11577    }
11578  
11579    // packages/dataviews/build-module/dataform-controls/checkbox.js
11580    var import_jsx_runtime72 = __toESM(require_jsx_runtime());
11581    var { ValidatedCheckboxControl } = unlock(import_components31.privateApis);
11582    function Checkbox({
11583      field,
11584      onChange,
11585      data,
11586      hideLabelFromVision,
11587      validity
11588    }) {
11589      const { getValue, setValue, label, description, isValid: isValid2 } = field;
11590      const onChangeControl = (0, import_element36.useCallback)(() => {
11591        onChange(
11592          setValue({ item: data, value: !getValue({ item: data }) })
11593        );
11594      }, [data, getValue, onChange, setValue]);
11595      return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
11596        ValidatedCheckboxControl,
11597        {
11598          required: !!field.isValid?.required,
11599          customValidity: getCustomValidity(isValid2, validity),
11600          hidden: hideLabelFromVision,
11601          label,
11602          help: description,
11603          checked: getValue({ item: data }),
11604          onChange: onChangeControl
11605        }
11606      );
11607    }
11608  
11609    // packages/dataviews/node_modules/date-fns/constants.js
11610    var daysInYear = 365.2425;
11611    var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1e3;
11612    var minTime = -maxTime;
11613    var millisecondsInWeek = 6048e5;
11614    var millisecondsInDay = 864e5;
11615    var secondsInHour = 3600;
11616    var secondsInDay = secondsInHour * 24;
11617    var secondsInWeek = secondsInDay * 7;
11618    var secondsInYear = secondsInDay * daysInYear;
11619    var secondsInMonth = secondsInYear / 12;
11620    var secondsInQuarter = secondsInMonth * 3;
11621    var constructFromSymbol = Symbol.for("constructDateFrom");
11622  
11623    // packages/dataviews/node_modules/date-fns/constructFrom.js
11624    function constructFrom(date, value) {
11625      if (typeof date === "function") return date(value);
11626      if (date && typeof date === "object" && constructFromSymbol in date)
11627        return date[constructFromSymbol](value);
11628      if (date instanceof Date) return new date.constructor(value);
11629      return new Date(value);
11630    }
11631  
11632    // packages/dataviews/node_modules/date-fns/toDate.js
11633    function toDate(argument, context) {
11634      return constructFrom(context || argument, argument);
11635    }
11636  
11637    // packages/dataviews/node_modules/date-fns/addDays.js
11638    function addDays(date, amount, options) {
11639      const _date = toDate(date, options?.in);
11640      if (isNaN(amount)) return constructFrom(options?.in || date, NaN);
11641      if (!amount) return _date;
11642      _date.setDate(_date.getDate() + amount);
11643      return _date;
11644    }
11645  
11646    // packages/dataviews/node_modules/date-fns/addMonths.js
11647    function addMonths(date, amount, options) {
11648      const _date = toDate(date, options?.in);
11649      if (isNaN(amount)) return constructFrom(options?.in || date, NaN);
11650      if (!amount) {
11651        return _date;
11652      }
11653      const dayOfMonth = _date.getDate();
11654      const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime());
11655      endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);
11656      const daysInMonth = endOfDesiredMonth.getDate();
11657      if (dayOfMonth >= daysInMonth) {
11658        return endOfDesiredMonth;
11659      } else {
11660        _date.setFullYear(
11661          endOfDesiredMonth.getFullYear(),
11662          endOfDesiredMonth.getMonth(),
11663          dayOfMonth
11664        );
11665        return _date;
11666      }
11667    }
11668  
11669    // packages/dataviews/node_modules/date-fns/_lib/defaultOptions.js
11670    var defaultOptions = {};
11671    function getDefaultOptions() {
11672      return defaultOptions;
11673    }
11674  
11675    // packages/dataviews/node_modules/date-fns/startOfWeek.js
11676    function startOfWeek(date, options) {
11677      const defaultOptions2 = getDefaultOptions();
11678      const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0;
11679      const _date = toDate(date, options?.in);
11680      const day = _date.getDay();
11681      const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;
11682      _date.setDate(_date.getDate() - diff);
11683      _date.setHours(0, 0, 0, 0);
11684      return _date;
11685    }
11686  
11687    // packages/dataviews/node_modules/date-fns/startOfISOWeek.js
11688    function startOfISOWeek(date, options) {
11689      return startOfWeek(date, { ...options, weekStartsOn: 1 });
11690    }
11691  
11692    // packages/dataviews/node_modules/date-fns/getISOWeekYear.js
11693    function getISOWeekYear(date, options) {
11694      const _date = toDate(date, options?.in);
11695      const year = _date.getFullYear();
11696      const fourthOfJanuaryOfNextYear = constructFrom(_date, 0);
11697      fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);
11698      fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);
11699      const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);
11700      const fourthOfJanuaryOfThisYear = constructFrom(_date, 0);
11701      fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);
11702      fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);
11703      const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);
11704      if (_date.getTime() >= startOfNextYear.getTime()) {
11705        return year + 1;
11706      } else if (_date.getTime() >= startOfThisYear.getTime()) {
11707        return year;
11708      } else {
11709        return year - 1;
11710      }
11711    }
11712  
11713    // packages/dataviews/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js
11714    function getTimezoneOffsetInMilliseconds(date) {
11715      const _date = toDate(date);
11716      const utcDate = new Date(
11717        Date.UTC(
11718          _date.getFullYear(),
11719          _date.getMonth(),
11720          _date.getDate(),
11721          _date.getHours(),
11722          _date.getMinutes(),
11723          _date.getSeconds(),
11724          _date.getMilliseconds()
11725        )
11726      );
11727      utcDate.setUTCFullYear(_date.getFullYear());
11728      return +date - +utcDate;
11729    }
11730  
11731    // packages/dataviews/node_modules/date-fns/_lib/normalizeDates.js
11732    function normalizeDates(context, ...dates) {
11733      const normalize = constructFrom.bind(
11734        null,
11735        context || dates.find((date) => typeof date === "object")
11736      );
11737      return dates.map(normalize);
11738    }
11739  
11740    // packages/dataviews/node_modules/date-fns/startOfDay.js
11741    function startOfDay(date, options) {
11742      const _date = toDate(date, options?.in);
11743      _date.setHours(0, 0, 0, 0);
11744      return _date;
11745    }
11746  
11747    // packages/dataviews/node_modules/date-fns/differenceInCalendarDays.js
11748    function differenceInCalendarDays(laterDate, earlierDate, options) {
11749      const [laterDate_, earlierDate_] = normalizeDates(
11750        options?.in,
11751        laterDate,
11752        earlierDate
11753      );
11754      const laterStartOfDay = startOfDay(laterDate_);
11755      const earlierStartOfDay = startOfDay(earlierDate_);
11756      const laterTimestamp = +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay);
11757      const earlierTimestamp = +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay);
11758      return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay);
11759    }
11760  
11761    // packages/dataviews/node_modules/date-fns/startOfISOWeekYear.js
11762    function startOfISOWeekYear(date, options) {
11763      const year = getISOWeekYear(date, options);
11764      const fourthOfJanuary = constructFrom(options?.in || date, 0);
11765      fourthOfJanuary.setFullYear(year, 0, 4);
11766      fourthOfJanuary.setHours(0, 0, 0, 0);
11767      return startOfISOWeek(fourthOfJanuary);
11768    }
11769  
11770    // packages/dataviews/node_modules/date-fns/addYears.js
11771    function addYears(date, amount, options) {
11772      return addMonths(date, amount * 12, options);
11773    }
11774  
11775    // packages/dataviews/node_modules/date-fns/isDate.js
11776    function isDate(value) {
11777      return value instanceof Date || typeof value === "object" && Object.prototype.toString.call(value) === "[object Date]";
11778    }
11779  
11780    // packages/dataviews/node_modules/date-fns/isValid.js
11781    function isValid(date) {
11782      return !(!isDate(date) && typeof date !== "number" || isNaN(+toDate(date)));
11783    }
11784  
11785    // packages/dataviews/node_modules/date-fns/startOfMonth.js
11786    function startOfMonth(date, options) {
11787      const _date = toDate(date, options?.in);
11788      _date.setDate(1);
11789      _date.setHours(0, 0, 0, 0);
11790      return _date;
11791    }
11792  
11793    // packages/dataviews/node_modules/date-fns/startOfYear.js
11794    function startOfYear(date, options) {
11795      const date_ = toDate(date, options?.in);
11796      date_.setFullYear(date_.getFullYear(), 0, 1);
11797      date_.setHours(0, 0, 0, 0);
11798      return date_;
11799    }
11800  
11801    // packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatDistance.js
11802    var formatDistanceLocale = {
11803      lessThanXSeconds: {
11804        one: "less than a second",
11805        other: "less than {{count}} seconds"
11806      },
11807      xSeconds: {
11808        one: "1 second",
11809        other: "{{count}} seconds"
11810      },
11811      halfAMinute: "half a minute",
11812      lessThanXMinutes: {
11813        one: "less than a minute",
11814        other: "less than {{count}} minutes"
11815      },
11816      xMinutes: {
11817        one: "1 minute",
11818        other: "{{count}} minutes"
11819      },
11820      aboutXHours: {
11821        one: "about 1 hour",
11822        other: "about {{count}} hours"
11823      },
11824      xHours: {
11825        one: "1 hour",
11826        other: "{{count}} hours"
11827      },
11828      xDays: {
11829        one: "1 day",
11830        other: "{{count}} days"
11831      },
11832      aboutXWeeks: {
11833        one: "about 1 week",
11834        other: "about {{count}} weeks"
11835      },
11836      xWeeks: {
11837        one: "1 week",
11838        other: "{{count}} weeks"
11839      },
11840      aboutXMonths: {
11841        one: "about 1 month",
11842        other: "about {{count}} months"
11843      },
11844      xMonths: {
11845        one: "1 month",
11846        other: "{{count}} months"
11847      },
11848      aboutXYears: {
11849        one: "about 1 year",
11850        other: "about {{count}} years"
11851      },
11852      xYears: {
11853        one: "1 year",
11854        other: "{{count}} years"
11855      },
11856      overXYears: {
11857        one: "over 1 year",
11858        other: "over {{count}} years"
11859      },
11860      almostXYears: {
11861        one: "almost 1 year",
11862        other: "almost {{count}} years"
11863      }
11864    };
11865    var formatDistance = (token, count, options) => {
11866      let result;
11867      const tokenValue = formatDistanceLocale[token];
11868      if (typeof tokenValue === "string") {
11869        result = tokenValue;
11870      } else if (count === 1) {
11871        result = tokenValue.one;
11872      } else {
11873        result = tokenValue.other.replace("{{count}}", count.toString());
11874      }
11875      if (options?.addSuffix) {
11876        if (options.comparison && options.comparison > 0) {
11877          return "in " + result;
11878        } else {
11879          return result + " ago";
11880        }
11881      }
11882      return result;
11883    };
11884  
11885    // packages/dataviews/node_modules/date-fns/locale/_lib/buildFormatLongFn.js
11886    function buildFormatLongFn(args) {
11887      return (options = {}) => {
11888        const width = options.width ? String(options.width) : args.defaultWidth;
11889        const format6 = args.formats[width] || args.formats[args.defaultWidth];
11890        return format6;
11891      };
11892    }
11893  
11894    // packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatLong.js
11895    var dateFormats = {
11896      full: "EEEE, MMMM do, y",
11897      long: "MMMM do, y",
11898      medium: "MMM d, y",
11899      short: "MM/dd/yyyy"
11900    };
11901    var timeFormats = {
11902      full: "h:mm:ss a zzzz",
11903      long: "h:mm:ss a z",
11904      medium: "h:mm:ss a",
11905      short: "h:mm a"
11906    };
11907    var dateTimeFormats = {
11908      full: "{{date}} 'at' {{time}}",
11909      long: "{{date}} 'at' {{time}}",
11910      medium: "{{date}}, {{time}}",
11911      short: "{{date}}, {{time}}"
11912    };
11913    var formatLong = {
11914      date: buildFormatLongFn({
11915        formats: dateFormats,
11916        defaultWidth: "full"
11917      }),
11918      time: buildFormatLongFn({
11919        formats: timeFormats,
11920        defaultWidth: "full"
11921      }),
11922      dateTime: buildFormatLongFn({
11923        formats: dateTimeFormats,
11924        defaultWidth: "full"
11925      })
11926    };
11927  
11928    // packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatRelative.js
11929    var formatRelativeLocale = {
11930      lastWeek: "'last' eeee 'at' p",
11931      yesterday: "'yesterday at' p",
11932      today: "'today at' p",
11933      tomorrow: "'tomorrow at' p",
11934      nextWeek: "eeee 'at' p",
11935      other: "P"
11936    };
11937    var formatRelative = (token, _date, _baseDate, _options) => formatRelativeLocale[token];
11938  
11939    // packages/dataviews/node_modules/date-fns/locale/_lib/buildLocalizeFn.js
11940    function buildLocalizeFn(args) {
11941      return (value, options) => {
11942        const context = options?.context ? String(options.context) : "standalone";
11943        let valuesArray;
11944        if (context === "formatting" && args.formattingValues) {
11945          const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;
11946          const width = options?.width ? String(options.width) : defaultWidth;
11947          valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];
11948        } else {
11949          const defaultWidth = args.defaultWidth;
11950          const width = options?.width ? String(options.width) : args.defaultWidth;
11951          valuesArray = args.values[width] || args.values[defaultWidth];
11952        }
11953        const index = args.argumentCallback ? args.argumentCallback(value) : value;
11954        return valuesArray[index];
11955      };
11956    }
11957  
11958    // packages/dataviews/node_modules/date-fns/locale/en-US/_lib/localize.js
11959    var eraValues = {
11960      narrow: ["B", "A"],
11961      abbreviated: ["BC", "AD"],
11962      wide: ["Before Christ", "Anno Domini"]
11963    };
11964    var quarterValues = {
11965      narrow: ["1", "2", "3", "4"],
11966      abbreviated: ["Q1", "Q2", "Q3", "Q4"],
11967      wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"]
11968    };
11969    var monthValues = {
11970      narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"],
11971      abbreviated: [
11972        "Jan",
11973        "Feb",
11974        "Mar",
11975        "Apr",
11976        "May",
11977        "Jun",
11978        "Jul",
11979        "Aug",
11980        "Sep",
11981        "Oct",
11982        "Nov",
11983        "Dec"
11984      ],
11985      wide: [
11986        "January",
11987        "February",
11988        "March",
11989        "April",
11990        "May",
11991        "June",
11992        "July",
11993        "August",
11994        "September",
11995        "October",
11996        "November",
11997        "December"
11998      ]
11999    };
12000    var dayValues = {
12001      narrow: ["S", "M", "T", "W", "T", "F", "S"],
12002      short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
12003      abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
12004      wide: [
12005        "Sunday",
12006        "Monday",
12007        "Tuesday",
12008        "Wednesday",
12009        "Thursday",
12010        "Friday",
12011        "Saturday"
12012      ]
12013    };
12014    var dayPeriodValues = {
12015      narrow: {
12016        am: "a",
12017        pm: "p",
12018        midnight: "mi",
12019        noon: "n",
12020        morning: "morning",
12021        afternoon: "afternoon",
12022        evening: "evening",
12023        night: "night"
12024      },
12025      abbreviated: {
12026        am: "AM",
12027        pm: "PM",
12028        midnight: "midnight",
12029        noon: "noon",
12030        morning: "morning",
12031        afternoon: "afternoon",
12032        evening: "evening",
12033        night: "night"
12034      },
12035      wide: {
12036        am: "a.m.",
12037        pm: "p.m.",
12038        midnight: "midnight",
12039        noon: "noon",
12040        morning: "morning",
12041        afternoon: "afternoon",
12042        evening: "evening",
12043        night: "night"
12044      }
12045    };
12046    var formattingDayPeriodValues = {
12047      narrow: {
12048        am: "a",
12049        pm: "p",
12050        midnight: "mi",
12051        noon: "n",
12052        morning: "in the morning",
12053        afternoon: "in the afternoon",
12054        evening: "in the evening",
12055        night: "at night"
12056      },
12057      abbreviated: {
12058        am: "AM",
12059        pm: "PM",
12060        midnight: "midnight",
12061        noon: "noon",
12062        morning: "in the morning",
12063        afternoon: "in the afternoon",
12064        evening: "in the evening",
12065        night: "at night"
12066      },
12067      wide: {
12068        am: "a.m.",
12069        pm: "p.m.",
12070        midnight: "midnight",
12071        noon: "noon",
12072        morning: "in the morning",
12073        afternoon: "in the afternoon",
12074        evening: "in the evening",
12075        night: "at night"
12076      }
12077    };
12078    var ordinalNumber = (dirtyNumber, _options) => {
12079      const number = Number(dirtyNumber);
12080      const rem100 = number % 100;
12081      if (rem100 > 20 || rem100 < 10) {
12082        switch (rem100 % 10) {
12083          case 1:
12084            return number + "st";
12085          case 2:
12086            return number + "nd";
12087          case 3:
12088            return number + "rd";
12089        }
12090      }
12091      return number + "th";
12092    };
12093    var localize = {
12094      ordinalNumber,
12095      era: buildLocalizeFn({
12096        values: eraValues,
12097        defaultWidth: "wide"
12098      }),
12099      quarter: buildLocalizeFn({
12100        values: quarterValues,
12101        defaultWidth: "wide",
12102        argumentCallback: (quarter) => quarter - 1
12103      }),
12104      month: buildLocalizeFn({
12105        values: monthValues,
12106        defaultWidth: "wide"
12107      }),
12108      day: buildLocalizeFn({
12109        values: dayValues,
12110        defaultWidth: "wide"
12111      }),
12112      dayPeriod: buildLocalizeFn({
12113        values: dayPeriodValues,
12114        defaultWidth: "wide",
12115        formattingValues: formattingDayPeriodValues,
12116        defaultFormattingWidth: "wide"
12117      })
12118    };
12119  
12120    // packages/dataviews/node_modules/date-fns/locale/_lib/buildMatchFn.js
12121    function buildMatchFn(args) {
12122      return (string, options = {}) => {
12123        const width = options.width;
12124        const matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];
12125        const matchResult = string.match(matchPattern);
12126        if (!matchResult) {
12127          return null;
12128        }
12129        const matchedString = matchResult[0];
12130        const parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];
12131        const key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString)) : (
12132          // [TODO] -- I challenge you to fix the type
12133          findKey(parsePatterns, (pattern) => pattern.test(matchedString))
12134        );
12135        let value;
12136        value = args.valueCallback ? args.valueCallback(key) : key;
12137        value = options.valueCallback ? (
12138          // [TODO] -- I challenge you to fix the type
12139          options.valueCallback(value)
12140        ) : value;
12141        const rest = string.slice(matchedString.length);
12142        return { value, rest };
12143      };
12144    }
12145    function findKey(object, predicate) {
12146      for (const key in object) {
12147        if (Object.prototype.hasOwnProperty.call(object, key) && predicate(object[key])) {
12148          return key;
12149        }
12150      }
12151      return void 0;
12152    }
12153    function findIndex(array, predicate) {
12154      for (let key = 0; key < array.length; key++) {
12155        if (predicate(array[key])) {
12156          return key;
12157        }
12158      }
12159      return void 0;
12160    }
12161  
12162    // packages/dataviews/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js
12163    function buildMatchPatternFn(args) {
12164      return (string, options = {}) => {
12165        const matchResult = string.match(args.matchPattern);
12166        if (!matchResult) return null;
12167        const matchedString = matchResult[0];
12168        const parseResult = string.match(args.parsePattern);
12169        if (!parseResult) return null;
12170        let value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];
12171        value = options.valueCallback ? options.valueCallback(value) : value;
12172        const rest = string.slice(matchedString.length);
12173        return { value, rest };
12174      };
12175    }
12176  
12177    // packages/dataviews/node_modules/date-fns/locale/en-US/_lib/match.js
12178    var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i;
12179    var parseOrdinalNumberPattern = /\d+/i;
12180    var matchEraPatterns = {
12181      narrow: /^(b|a)/i,
12182      abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,
12183      wide: /^(before christ|before common era|anno domini|common era)/i
12184    };
12185    var parseEraPatterns = {
12186      any: [/^b/i, /^(a|c)/i]
12187    };
12188    var matchQuarterPatterns = {
12189      narrow: /^[1234]/i,
12190      abbreviated: /^q[1234]/i,
12191      wide: /^[1234](th|st|nd|rd)? quarter/i
12192    };
12193    var parseQuarterPatterns = {
12194      any: [/1/i, /2/i, /3/i, /4/i]
12195    };
12196    var matchMonthPatterns = {
12197      narrow: /^[jfmasond]/i,
12198      abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,
12199      wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i
12200    };
12201    var parseMonthPatterns = {
12202      narrow: [
12203        /^j/i,
12204        /^f/i,
12205        /^m/i,
12206        /^a/i,
12207        /^m/i,
12208        /^j/i,
12209        /^j/i,
12210        /^a/i,
12211        /^s/i,
12212        /^o/i,
12213        /^n/i,
12214        /^d/i
12215      ],
12216      any: [
12217        /^ja/i,
12218        /^f/i,
12219        /^mar/i,
12220        /^ap/i,
12221        /^may/i,
12222        /^jun/i,
12223        /^jul/i,
12224        /^au/i,
12225        /^s/i,
12226        /^o/i,
12227        /^n/i,
12228        /^d/i
12229      ]
12230    };
12231    var matchDayPatterns = {
12232      narrow: /^[smtwf]/i,
12233      short: /^(su|mo|tu|we|th|fr|sa)/i,
12234      abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,
12235      wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i
12236    };
12237    var parseDayPatterns = {
12238      narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],
12239      any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]
12240    };
12241    var matchDayPeriodPatterns = {
12242      narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,
12243      any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i
12244    };
12245    var parseDayPeriodPatterns = {
12246      any: {
12247        am: /^a/i,
12248        pm: /^p/i,
12249        midnight: /^mi/i,
12250        noon: /^no/i,
12251        morning: /morning/i,
12252        afternoon: /afternoon/i,
12253        evening: /evening/i,
12254        night: /night/i
12255      }
12256    };
12257    var match = {
12258      ordinalNumber: buildMatchPatternFn({
12259        matchPattern: matchOrdinalNumberPattern,
12260        parsePattern: parseOrdinalNumberPattern,
12261        valueCallback: (value) => parseInt(value, 10)
12262      }),
12263      era: buildMatchFn({
12264        matchPatterns: matchEraPatterns,
12265        defaultMatchWidth: "wide",
12266        parsePatterns: parseEraPatterns,
12267        defaultParseWidth: "any"
12268      }),
12269      quarter: buildMatchFn({
12270        matchPatterns: matchQuarterPatterns,
12271        defaultMatchWidth: "wide",
12272        parsePatterns: parseQuarterPatterns,
12273        defaultParseWidth: "any",
12274        valueCallback: (index) => index + 1
12275      }),
12276      month: buildMatchFn({
12277        matchPatterns: matchMonthPatterns,
12278        defaultMatchWidth: "wide",
12279        parsePatterns: parseMonthPatterns,
12280        defaultParseWidth: "any"
12281      }),
12282      day: buildMatchFn({
12283        matchPatterns: matchDayPatterns,
12284        defaultMatchWidth: "wide",
12285        parsePatterns: parseDayPatterns,
12286        defaultParseWidth: "any"
12287      }),
12288      dayPeriod: buildMatchFn({
12289        matchPatterns: matchDayPeriodPatterns,
12290        defaultMatchWidth: "any",
12291        parsePatterns: parseDayPeriodPatterns,
12292        defaultParseWidth: "any"
12293      })
12294    };
12295  
12296    // packages/dataviews/node_modules/date-fns/locale/en-US.js
12297    var enUS = {
12298      code: "en-US",
12299      formatDistance,
12300      formatLong,
12301      formatRelative,
12302      localize,
12303      match,
12304      options: {
12305        weekStartsOn: 0,
12306        firstWeekContainsDate: 1
12307      }
12308    };
12309  
12310    // packages/dataviews/node_modules/date-fns/getDayOfYear.js
12311    function getDayOfYear(date, options) {
12312      const _date = toDate(date, options?.in);
12313      const diff = differenceInCalendarDays(_date, startOfYear(_date));
12314      const dayOfYear = diff + 1;
12315      return dayOfYear;
12316    }
12317  
12318    // packages/dataviews/node_modules/date-fns/getISOWeek.js
12319    function getISOWeek(date, options) {
12320      const _date = toDate(date, options?.in);
12321      const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);
12322      return Math.round(diff / millisecondsInWeek) + 1;
12323    }
12324  
12325    // packages/dataviews/node_modules/date-fns/getWeekYear.js
12326    function getWeekYear(date, options) {
12327      const _date = toDate(date, options?.in);
12328      const year = _date.getFullYear();
12329      const defaultOptions2 = getDefaultOptions();
12330      const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1;
12331      const firstWeekOfNextYear = constructFrom(options?.in || date, 0);
12332      firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);
12333      firstWeekOfNextYear.setHours(0, 0, 0, 0);
12334      const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);
12335      const firstWeekOfThisYear = constructFrom(options?.in || date, 0);
12336      firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);
12337      firstWeekOfThisYear.setHours(0, 0, 0, 0);
12338      const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);
12339      if (+_date >= +startOfNextYear) {
12340        return year + 1;
12341      } else if (+_date >= +startOfThisYear) {
12342        return year;
12343      } else {
12344        return year - 1;
12345      }
12346    }
12347  
12348    // packages/dataviews/node_modules/date-fns/startOfWeekYear.js
12349    function startOfWeekYear(date, options) {
12350      const defaultOptions2 = getDefaultOptions();
12351      const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1;
12352      const year = getWeekYear(date, options);
12353      const firstWeek = constructFrom(options?.in || date, 0);
12354      firstWeek.setFullYear(year, 0, firstWeekContainsDate);
12355      firstWeek.setHours(0, 0, 0, 0);
12356      const _date = startOfWeek(firstWeek, options);
12357      return _date;
12358    }
12359  
12360    // packages/dataviews/node_modules/date-fns/getWeek.js
12361    function getWeek(date, options) {
12362      const _date = toDate(date, options?.in);
12363      const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);
12364      return Math.round(diff / millisecondsInWeek) + 1;
12365    }
12366  
12367    // packages/dataviews/node_modules/date-fns/_lib/addLeadingZeros.js
12368    function addLeadingZeros(number, targetLength) {
12369      const sign = number < 0 ? "-" : "";
12370      const output = Math.abs(number).toString().padStart(targetLength, "0");
12371      return sign + output;
12372    }
12373  
12374    // packages/dataviews/node_modules/date-fns/_lib/format/lightFormatters.js
12375    var lightFormatters = {
12376      // Year
12377      y(date, token) {
12378        const signedYear = date.getFullYear();
12379        const year = signedYear > 0 ? signedYear : 1 - signedYear;
12380        return addLeadingZeros(token === "yy" ? year % 100 : year, token.length);
12381      },
12382      // Month
12383      M(date, token) {
12384        const month = date.getMonth();
12385        return token === "M" ? String(month + 1) : addLeadingZeros(month + 1, 2);
12386      },
12387      // Day of the month
12388      d(date, token) {
12389        return addLeadingZeros(date.getDate(), token.length);
12390      },
12391      // AM or PM
12392      a(date, token) {
12393        const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? "pm" : "am";
12394        switch (token) {
12395          case "a":
12396          case "aa":
12397            return dayPeriodEnumValue.toUpperCase();
12398          case "aaa":
12399            return dayPeriodEnumValue;
12400          case "aaaaa":
12401            return dayPeriodEnumValue[0];
12402          case "aaaa":
12403          default:
12404            return dayPeriodEnumValue === "am" ? "a.m." : "p.m.";
12405        }
12406      },
12407      // Hour [1-12]
12408      h(date, token) {
12409        return addLeadingZeros(date.getHours() % 12 || 12, token.length);
12410      },
12411      // Hour [0-23]
12412      H(date, token) {
12413        return addLeadingZeros(date.getHours(), token.length);
12414      },
12415      // Minute
12416      m(date, token) {
12417        return addLeadingZeros(date.getMinutes(), token.length);
12418      },
12419      // Second
12420      s(date, token) {
12421        return addLeadingZeros(date.getSeconds(), token.length);
12422      },
12423      // Fraction of second
12424      S(date, token) {
12425        const numberOfDigits = token.length;
12426        const milliseconds = date.getMilliseconds();
12427        const fractionalSeconds = Math.trunc(
12428          milliseconds * Math.pow(10, numberOfDigits - 3)
12429        );
12430        return addLeadingZeros(fractionalSeconds, token.length);
12431      }
12432    };
12433  
12434    // packages/dataviews/node_modules/date-fns/_lib/format/formatters.js
12435    var dayPeriodEnum = {
12436      am: "am",
12437      pm: "pm",
12438      midnight: "midnight",
12439      noon: "noon",
12440      morning: "morning",
12441      afternoon: "afternoon",
12442      evening: "evening",
12443      night: "night"
12444    };
12445    var formatters = {
12446      // Era
12447      G: function(date, token, localize2) {
12448        const era = date.getFullYear() > 0 ? 1 : 0;
12449        switch (token) {
12450          // AD, BC
12451          case "G":
12452          case "GG":
12453          case "GGG":
12454            return localize2.era(era, { width: "abbreviated" });
12455          // A, B
12456          case "GGGGG":
12457            return localize2.era(era, { width: "narrow" });
12458          // Anno Domini, Before Christ
12459          case "GGGG":
12460          default:
12461            return localize2.era(era, { width: "wide" });
12462        }
12463      },
12464      // Year
12465      y: function(date, token, localize2) {
12466        if (token === "yo") {
12467          const signedYear = date.getFullYear();
12468          const year = signedYear > 0 ? signedYear : 1 - signedYear;
12469          return localize2.ordinalNumber(year, { unit: "year" });
12470        }
12471        return lightFormatters.y(date, token);
12472      },
12473      // Local week-numbering year
12474      Y: function(date, token, localize2, options) {
12475        const signedWeekYear = getWeekYear(date, options);
12476        const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;
12477        if (token === "YY") {
12478          const twoDigitYear = weekYear % 100;
12479          return addLeadingZeros(twoDigitYear, 2);
12480        }
12481        if (token === "Yo") {
12482          return localize2.ordinalNumber(weekYear, { unit: "year" });
12483        }
12484        return addLeadingZeros(weekYear, token.length);
12485      },
12486      // ISO week-numbering year
12487      R: function(date, token) {
12488        const isoWeekYear = getISOWeekYear(date);
12489        return addLeadingZeros(isoWeekYear, token.length);
12490      },
12491      // Extended year. This is a single number designating the year of this calendar system.
12492      // The main difference between `y` and `u` localizers are B.C. years:
12493      // | Year | `y` | `u` |
12494      // |------|-----|-----|
12495      // | AC 1 |   1 |   1 |
12496      // | BC 1 |   1 |   0 |
12497      // | BC 2 |   2 |  -1 |
12498      // Also `yy` always returns the last two digits of a year,
12499      // while `uu` pads single digit years to 2 characters and returns other years unchanged.
12500      u: function(date, token) {
12501        const year = date.getFullYear();
12502        return addLeadingZeros(year, token.length);
12503      },
12504      // Quarter
12505      Q: function(date, token, localize2) {
12506        const quarter = Math.ceil((date.getMonth() + 1) / 3);
12507        switch (token) {
12508          // 1, 2, 3, 4
12509          case "Q":
12510            return String(quarter);
12511          // 01, 02, 03, 04
12512          case "QQ":
12513            return addLeadingZeros(quarter, 2);
12514          // 1st, 2nd, 3rd, 4th
12515          case "Qo":
12516            return localize2.ordinalNumber(quarter, { unit: "quarter" });
12517          // Q1, Q2, Q3, Q4
12518          case "QQQ":
12519            return localize2.quarter(quarter, {
12520              width: "abbreviated",
12521              context: "formatting"
12522            });
12523          // 1, 2, 3, 4 (narrow quarter; could be not numerical)
12524          case "QQQQQ":
12525            return localize2.quarter(quarter, {
12526              width: "narrow",
12527              context: "formatting"
12528            });
12529          // 1st quarter, 2nd quarter, ...
12530          case "QQQQ":
12531          default:
12532            return localize2.quarter(quarter, {
12533              width: "wide",
12534              context: "formatting"
12535            });
12536        }
12537      },
12538      // Stand-alone quarter
12539      q: function(date, token, localize2) {
12540        const quarter = Math.ceil((date.getMonth() + 1) / 3);
12541        switch (token) {
12542          // 1, 2, 3, 4
12543          case "q":
12544            return String(quarter);
12545          // 01, 02, 03, 04
12546          case "qq":
12547            return addLeadingZeros(quarter, 2);
12548          // 1st, 2nd, 3rd, 4th
12549          case "qo":
12550            return localize2.ordinalNumber(quarter, { unit: "quarter" });
12551          // Q1, Q2, Q3, Q4
12552          case "qqq":
12553            return localize2.quarter(quarter, {
12554              width: "abbreviated",
12555              context: "standalone"
12556            });
12557          // 1, 2, 3, 4 (narrow quarter; could be not numerical)
12558          case "qqqqq":
12559            return localize2.quarter(quarter, {
12560              width: "narrow",
12561              context: "standalone"
12562            });
12563          // 1st quarter, 2nd quarter, ...
12564          case "qqqq":
12565          default:
12566            return localize2.quarter(quarter, {
12567              width: "wide",
12568              context: "standalone"
12569            });
12570        }
12571      },
12572      // Month
12573      M: function(date, token, localize2) {
12574        const month = date.getMonth();
12575        switch (token) {
12576          case "M":
12577          case "MM":
12578            return lightFormatters.M(date, token);
12579          // 1st, 2nd, ..., 12th
12580          case "Mo":
12581            return localize2.ordinalNumber(month + 1, { unit: "month" });
12582          // Jan, Feb, ..., Dec
12583          case "MMM":
12584            return localize2.month(month, {
12585              width: "abbreviated",
12586              context: "formatting"
12587            });
12588          // J, F, ..., D
12589          case "MMMMM":
12590            return localize2.month(month, {
12591              width: "narrow",
12592              context: "formatting"
12593            });
12594          // January, February, ..., December
12595          case "MMMM":
12596          default:
12597            return localize2.month(month, { width: "wide", context: "formatting" });
12598        }
12599      },
12600      // Stand-alone month
12601      L: function(date, token, localize2) {
12602        const month = date.getMonth();
12603        switch (token) {
12604          // 1, 2, ..., 12
12605          case "L":
12606            return String(month + 1);
12607          // 01, 02, ..., 12
12608          case "LL":
12609            return addLeadingZeros(month + 1, 2);
12610          // 1st, 2nd, ..., 12th
12611          case "Lo":
12612            return localize2.ordinalNumber(month + 1, { unit: "month" });
12613          // Jan, Feb, ..., Dec
12614          case "LLL":
12615            return localize2.month(month, {
12616              width: "abbreviated",
12617              context: "standalone"
12618            });
12619          // J, F, ..., D
12620          case "LLLLL":
12621            return localize2.month(month, {
12622              width: "narrow",
12623              context: "standalone"
12624            });
12625          // January, February, ..., December
12626          case "LLLL":
12627          default:
12628            return localize2.month(month, { width: "wide", context: "standalone" });
12629        }
12630      },
12631      // Local week of year
12632      w: function(date, token, localize2, options) {
12633        const week = getWeek(date, options);
12634        if (token === "wo") {
12635          return localize2.ordinalNumber(week, { unit: "week" });
12636        }
12637        return addLeadingZeros(week, token.length);
12638      },
12639      // ISO week of year
12640      I: function(date, token, localize2) {
12641        const isoWeek = getISOWeek(date);
12642        if (token === "Io") {
12643          return localize2.ordinalNumber(isoWeek, { unit: "week" });
12644        }
12645        return addLeadingZeros(isoWeek, token.length);
12646      },
12647      // Day of the month
12648      d: function(date, token, localize2) {
12649        if (token === "do") {
12650          return localize2.ordinalNumber(date.getDate(), { unit: "date" });
12651        }
12652        return lightFormatters.d(date, token);
12653      },
12654      // Day of year
12655      D: function(date, token, localize2) {
12656        const dayOfYear = getDayOfYear(date);
12657        if (token === "Do") {
12658          return localize2.ordinalNumber(dayOfYear, { unit: "dayOfYear" });
12659        }
12660        return addLeadingZeros(dayOfYear, token.length);
12661      },
12662      // Day of week
12663      E: function(date, token, localize2) {
12664        const dayOfWeek = date.getDay();
12665        switch (token) {
12666          // Tue
12667          case "E":
12668          case "EE":
12669          case "EEE":
12670            return localize2.day(dayOfWeek, {
12671              width: "abbreviated",
12672              context: "formatting"
12673            });
12674          // T
12675          case "EEEEE":
12676            return localize2.day(dayOfWeek, {
12677              width: "narrow",
12678              context: "formatting"
12679            });
12680          // Tu
12681          case "EEEEEE":
12682            return localize2.day(dayOfWeek, {
12683              width: "short",
12684              context: "formatting"
12685            });
12686          // Tuesday
12687          case "EEEE":
12688          default:
12689            return localize2.day(dayOfWeek, {
12690              width: "wide",
12691              context: "formatting"
12692            });
12693        }
12694      },
12695      // Local day of week
12696      e: function(date, token, localize2, options) {
12697        const dayOfWeek = date.getDay();
12698        const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;
12699        switch (token) {
12700          // Numerical value (Nth day of week with current locale or weekStartsOn)
12701          case "e":
12702            return String(localDayOfWeek);
12703          // Padded numerical value
12704          case "ee":
12705            return addLeadingZeros(localDayOfWeek, 2);
12706          // 1st, 2nd, ..., 7th
12707          case "eo":
12708            return localize2.ordinalNumber(localDayOfWeek, { unit: "day" });
12709          case "eee":
12710            return localize2.day(dayOfWeek, {
12711              width: "abbreviated",
12712              context: "formatting"
12713            });
12714          // T
12715          case "eeeee":
12716            return localize2.day(dayOfWeek, {
12717              width: "narrow",
12718              context: "formatting"
12719            });
12720          // Tu
12721          case "eeeeee":
12722            return localize2.day(dayOfWeek, {
12723              width: "short",
12724              context: "formatting"
12725            });
12726          // Tuesday
12727          case "eeee":
12728          default:
12729            return localize2.day(dayOfWeek, {
12730              width: "wide",
12731              context: "formatting"
12732            });
12733        }
12734      },
12735      // Stand-alone local day of week
12736      c: function(date, token, localize2, options) {
12737        const dayOfWeek = date.getDay();
12738        const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;
12739        switch (token) {
12740          // Numerical value (same as in `e`)
12741          case "c":
12742            return String(localDayOfWeek);
12743          // Padded numerical value
12744          case "cc":
12745            return addLeadingZeros(localDayOfWeek, token.length);
12746          // 1st, 2nd, ..., 7th
12747          case "co":
12748            return localize2.ordinalNumber(localDayOfWeek, { unit: "day" });
12749          case "ccc":
12750            return localize2.day(dayOfWeek, {
12751              width: "abbreviated",
12752              context: "standalone"
12753            });
12754          // T
12755          case "ccccc":
12756            return localize2.day(dayOfWeek, {
12757              width: "narrow",
12758              context: "standalone"
12759            });
12760          // Tu
12761          case "cccccc":
12762            return localize2.day(dayOfWeek, {
12763              width: "short",
12764              context: "standalone"
12765            });
12766          // Tuesday
12767          case "cccc":
12768          default:
12769            return localize2.day(dayOfWeek, {
12770              width: "wide",
12771              context: "standalone"
12772            });
12773        }
12774      },
12775      // ISO day of week
12776      i: function(date, token, localize2) {
12777        const dayOfWeek = date.getDay();
12778        const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;
12779        switch (token) {
12780          // 2
12781          case "i":
12782            return String(isoDayOfWeek);
12783          // 02
12784          case "ii":
12785            return addLeadingZeros(isoDayOfWeek, token.length);
12786          // 2nd
12787          case "io":
12788            return localize2.ordinalNumber(isoDayOfWeek, { unit: "day" });
12789          // Tue
12790          case "iii":
12791            return localize2.day(dayOfWeek, {
12792              width: "abbreviated",
12793              context: "formatting"
12794            });
12795          // T
12796          case "iiiii":
12797            return localize2.day(dayOfWeek, {
12798              width: "narrow",
12799              context: "formatting"
12800            });
12801          // Tu
12802          case "iiiiii":
12803            return localize2.day(dayOfWeek, {
12804              width: "short",
12805              context: "formatting"
12806            });
12807          // Tuesday
12808          case "iiii":
12809          default:
12810            return localize2.day(dayOfWeek, {
12811              width: "wide",
12812              context: "formatting"
12813            });
12814        }
12815      },
12816      // AM or PM
12817      a: function(date, token, localize2) {
12818        const hours = date.getHours();
12819        const dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am";
12820        switch (token) {
12821          case "a":
12822          case "aa":
12823            return localize2.dayPeriod(dayPeriodEnumValue, {
12824              width: "abbreviated",
12825              context: "formatting"
12826            });
12827          case "aaa":
12828            return localize2.dayPeriod(dayPeriodEnumValue, {
12829              width: "abbreviated",
12830              context: "formatting"
12831            }).toLowerCase();
12832          case "aaaaa":
12833            return localize2.dayPeriod(dayPeriodEnumValue, {
12834              width: "narrow",
12835              context: "formatting"
12836            });
12837          case "aaaa":
12838          default:
12839            return localize2.dayPeriod(dayPeriodEnumValue, {
12840              width: "wide",
12841              context: "formatting"
12842            });
12843        }
12844      },
12845      // AM, PM, midnight, noon
12846      b: function(date, token, localize2) {
12847        const hours = date.getHours();
12848        let dayPeriodEnumValue;
12849        if (hours === 12) {
12850          dayPeriodEnumValue = dayPeriodEnum.noon;
12851        } else if (hours === 0) {
12852          dayPeriodEnumValue = dayPeriodEnum.midnight;
12853        } else {
12854          dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am";
12855        }
12856        switch (token) {
12857          case "b":
12858          case "bb":
12859            return localize2.dayPeriod(dayPeriodEnumValue, {
12860              width: "abbreviated",
12861              context: "formatting"
12862            });
12863          case "bbb":
12864            return localize2.dayPeriod(dayPeriodEnumValue, {
12865              width: "abbreviated",
12866              context: "formatting"
12867            }).toLowerCase();
12868          case "bbbbb":
12869            return localize2.dayPeriod(dayPeriodEnumValue, {
12870              width: "narrow",
12871              context: "formatting"
12872            });
12873          case "bbbb":
12874          default:
12875            return localize2.dayPeriod(dayPeriodEnumValue, {
12876              width: "wide",
12877              context: "formatting"
12878            });
12879        }
12880      },
12881      // in the morning, in the afternoon, in the evening, at night
12882      B: function(date, token, localize2) {
12883        const hours = date.getHours();
12884        let dayPeriodEnumValue;
12885        if (hours >= 17) {
12886          dayPeriodEnumValue = dayPeriodEnum.evening;
12887        } else if (hours >= 12) {
12888          dayPeriodEnumValue = dayPeriodEnum.afternoon;
12889        } else if (hours >= 4) {
12890          dayPeriodEnumValue = dayPeriodEnum.morning;
12891        } else {
12892          dayPeriodEnumValue = dayPeriodEnum.night;
12893        }
12894        switch (token) {
12895          case "B":
12896          case "BB":
12897          case "BBB":
12898            return localize2.dayPeriod(dayPeriodEnumValue, {
12899              width: "abbreviated",
12900              context: "formatting"
12901            });
12902          case "BBBBB":
12903            return localize2.dayPeriod(dayPeriodEnumValue, {
12904              width: "narrow",
12905              context: "formatting"
12906            });
12907          case "BBBB":
12908          default:
12909            return localize2.dayPeriod(dayPeriodEnumValue, {
12910              width: "wide",
12911              context: "formatting"
12912            });
12913        }
12914      },
12915      // Hour [1-12]
12916      h: function(date, token, localize2) {
12917        if (token === "ho") {
12918          let hours = date.getHours() % 12;
12919          if (hours === 0) hours = 12;
12920          return localize2.ordinalNumber(hours, { unit: "hour" });
12921        }
12922        return lightFormatters.h(date, token);
12923      },
12924      // Hour [0-23]
12925      H: function(date, token, localize2) {
12926        if (token === "Ho") {
12927          return localize2.ordinalNumber(date.getHours(), { unit: "hour" });
12928        }
12929        return lightFormatters.H(date, token);
12930      },
12931      // Hour [0-11]
12932      K: function(date, token, localize2) {
12933        const hours = date.getHours() % 12;
12934        if (token === "Ko") {
12935          return localize2.ordinalNumber(hours, { unit: "hour" });
12936        }
12937        return addLeadingZeros(hours, token.length);
12938      },
12939      // Hour [1-24]
12940      k: function(date, token, localize2) {
12941        let hours = date.getHours();
12942        if (hours === 0) hours = 24;
12943        if (token === "ko") {
12944          return localize2.ordinalNumber(hours, { unit: "hour" });
12945        }
12946        return addLeadingZeros(hours, token.length);
12947      },
12948      // Minute
12949      m: function(date, token, localize2) {
12950        if (token === "mo") {
12951          return localize2.ordinalNumber(date.getMinutes(), { unit: "minute" });
12952        }
12953        return lightFormatters.m(date, token);
12954      },
12955      // Second
12956      s: function(date, token, localize2) {
12957        if (token === "so") {
12958          return localize2.ordinalNumber(date.getSeconds(), { unit: "second" });
12959        }
12960        return lightFormatters.s(date, token);
12961      },
12962      // Fraction of second
12963      S: function(date, token) {
12964        return lightFormatters.S(date, token);
12965      },
12966      // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)
12967      X: function(date, token, _localize) {
12968        const timezoneOffset = date.getTimezoneOffset();
12969        if (timezoneOffset === 0) {
12970          return "Z";
12971        }
12972        switch (token) {
12973          // Hours and optional minutes
12974          case "X":
12975            return formatTimezoneWithOptionalMinutes(timezoneOffset);
12976          // Hours, minutes and optional seconds without `:` delimiter
12977          // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
12978          // so this token always has the same output as `XX`
12979          case "XXXX":
12980          case "XX":
12981            return formatTimezone(timezoneOffset);
12982          // Hours, minutes and optional seconds with `:` delimiter
12983          // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
12984          // so this token always has the same output as `XXX`
12985          case "XXXXX":
12986          case "XXX":
12987          // Hours and minutes with `:` delimiter
12988          default:
12989            return formatTimezone(timezoneOffset, ":");
12990        }
12991      },
12992      // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)
12993      x: function(date, token, _localize) {
12994        const timezoneOffset = date.getTimezoneOffset();
12995        switch (token) {
12996          // Hours and optional minutes
12997          case "x":
12998            return formatTimezoneWithOptionalMinutes(timezoneOffset);
12999          // Hours, minutes and optional seconds without `:` delimiter
13000          // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
13001          // so this token always has the same output as `xx`
13002          case "xxxx":
13003          case "xx":
13004            return formatTimezone(timezoneOffset);
13005          // Hours, minutes and optional seconds with `:` delimiter
13006          // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
13007          // so this token always has the same output as `xxx`
13008          case "xxxxx":
13009          case "xxx":
13010          // Hours and minutes with `:` delimiter
13011          default:
13012            return formatTimezone(timezoneOffset, ":");
13013        }
13014      },
13015      // Timezone (GMT)
13016      O: function(date, token, _localize) {
13017        const timezoneOffset = date.getTimezoneOffset();
13018        switch (token) {
13019          // Short
13020          case "O":
13021          case "OO":
13022          case "OOO":
13023            return "GMT" + formatTimezoneShort(timezoneOffset, ":");
13024          // Long
13025          case "OOOO":
13026          default:
13027            return "GMT" + formatTimezone(timezoneOffset, ":");
13028        }
13029      },
13030      // Timezone (specific non-location)
13031      z: function(date, token, _localize) {
13032        const timezoneOffset = date.getTimezoneOffset();
13033        switch (token) {
13034          // Short
13035          case "z":
13036          case "zz":
13037          case "zzz":
13038            return "GMT" + formatTimezoneShort(timezoneOffset, ":");
13039          // Long
13040          case "zzzz":
13041          default:
13042            return "GMT" + formatTimezone(timezoneOffset, ":");
13043        }
13044      },
13045      // Seconds timestamp
13046      t: function(date, token, _localize) {
13047        const timestamp = Math.trunc(+date / 1e3);
13048        return addLeadingZeros(timestamp, token.length);
13049      },
13050      // Milliseconds timestamp
13051      T: function(date, token, _localize) {
13052        return addLeadingZeros(+date, token.length);
13053      }
13054    };
13055    function formatTimezoneShort(offset, delimiter = "") {
13056      const sign = offset > 0 ? "-" : "+";
13057      const absOffset = Math.abs(offset);
13058      const hours = Math.trunc(absOffset / 60);
13059      const minutes = absOffset % 60;
13060      if (minutes === 0) {
13061        return sign + String(hours);
13062      }
13063      return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);
13064    }
13065    function formatTimezoneWithOptionalMinutes(offset, delimiter) {
13066      if (offset % 60 === 0) {
13067        const sign = offset > 0 ? "-" : "+";
13068        return sign + addLeadingZeros(Math.abs(offset) / 60, 2);
13069      }
13070      return formatTimezone(offset, delimiter);
13071    }
13072    function formatTimezone(offset, delimiter = "") {
13073      const sign = offset > 0 ? "-" : "+";
13074      const absOffset = Math.abs(offset);
13075      const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);
13076      const minutes = addLeadingZeros(absOffset % 60, 2);
13077      return sign + hours + delimiter + minutes;
13078    }
13079  
13080    // packages/dataviews/node_modules/date-fns/_lib/format/longFormatters.js
13081    var dateLongFormatter = (pattern, formatLong2) => {
13082      switch (pattern) {
13083        case "P":
13084          return formatLong2.date({ width: "short" });
13085        case "PP":
13086          return formatLong2.date({ width: "medium" });
13087        case "PPP":
13088          return formatLong2.date({ width: "long" });
13089        case "PPPP":
13090        default:
13091          return formatLong2.date({ width: "full" });
13092      }
13093    };
13094    var timeLongFormatter = (pattern, formatLong2) => {
13095      switch (pattern) {
13096        case "p":
13097          return formatLong2.time({ width: "short" });
13098        case "pp":
13099          return formatLong2.time({ width: "medium" });
13100        case "ppp":
13101          return formatLong2.time({ width: "long" });
13102        case "pppp":
13103        default:
13104          return formatLong2.time({ width: "full" });
13105      }
13106    };
13107    var dateTimeLongFormatter = (pattern, formatLong2) => {
13108      const matchResult = pattern.match(/(P+)(p+)?/) || [];
13109      const datePattern = matchResult[1];
13110      const timePattern = matchResult[2];
13111      if (!timePattern) {
13112        return dateLongFormatter(pattern, formatLong2);
13113      }
13114      let dateTimeFormat;
13115      switch (datePattern) {
13116        case "P":
13117          dateTimeFormat = formatLong2.dateTime({ width: "short" });
13118          break;
13119        case "PP":
13120          dateTimeFormat = formatLong2.dateTime({ width: "medium" });
13121          break;
13122        case "PPP":
13123          dateTimeFormat = formatLong2.dateTime({ width: "long" });
13124          break;
13125        case "PPPP":
13126        default:
13127          dateTimeFormat = formatLong2.dateTime({ width: "full" });
13128          break;
13129      }
13130      return dateTimeFormat.replace("{{date}}", dateLongFormatter(datePattern, formatLong2)).replace("{{time}}", timeLongFormatter(timePattern, formatLong2));
13131    };
13132    var longFormatters = {
13133      p: timeLongFormatter,
13134      P: dateTimeLongFormatter
13135    };
13136  
13137    // packages/dataviews/node_modules/date-fns/_lib/protectedTokens.js
13138    var dayOfYearTokenRE = /^D+$/;
13139    var weekYearTokenRE = /^Y+$/;
13140    var throwTokens = ["D", "DD", "YY", "YYYY"];
13141    function isProtectedDayOfYearToken(token) {
13142      return dayOfYearTokenRE.test(token);
13143    }
13144    function isProtectedWeekYearToken(token) {
13145      return weekYearTokenRE.test(token);
13146    }
13147    function warnOrThrowProtectedError(token, format6, input) {
13148      const _message = message(token, format6, input);
13149      console.warn(_message);
13150      if (throwTokens.includes(token)) throw new RangeError(_message);
13151    }
13152    function message(token, format6, input) {
13153      const subject = token[0] === "Y" ? "years" : "days of the month";
13154      return `Use \`$token.toLowerCase()}\` instead of \`$token}\` (in \`$format6}\`) for formatting $subject} to the input \`$input}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;
13155    }
13156  
13157    // packages/dataviews/node_modules/date-fns/format.js
13158    var formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g;
13159    var longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;
13160    var escapedStringRegExp = /^'([^]*?)'?$/;
13161    var doubleQuoteRegExp = /''/g;
13162    var unescapedLatinCharacterRegExp = /[a-zA-Z]/;
13163    function format(date, formatStr, options) {
13164      const defaultOptions2 = getDefaultOptions();
13165      const locale = options?.locale ?? defaultOptions2.locale ?? enUS;
13166      const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1;
13167      const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0;
13168      const originalDate = toDate(date, options?.in);
13169      if (!isValid(originalDate)) {
13170        throw new RangeError("Invalid time value");
13171      }
13172      let parts = formatStr.match(longFormattingTokensRegExp).map((substring) => {
13173        const firstCharacter = substring[0];
13174        if (firstCharacter === "p" || firstCharacter === "P") {
13175          const longFormatter = longFormatters[firstCharacter];
13176          return longFormatter(substring, locale.formatLong);
13177        }
13178        return substring;
13179      }).join("").match(formattingTokensRegExp).map((substring) => {
13180        if (substring === "''") {
13181          return { isToken: false, value: "'" };
13182        }
13183        const firstCharacter = substring[0];
13184        if (firstCharacter === "'") {
13185          return { isToken: false, value: cleanEscapedString(substring) };
13186        }
13187        if (formatters[firstCharacter]) {
13188          return { isToken: true, value: substring };
13189        }
13190        if (firstCharacter.match(unescapedLatinCharacterRegExp)) {
13191          throw new RangeError(
13192            "Format string contains an unescaped latin alphabet character `" + firstCharacter + "`"
13193          );
13194        }
13195        return { isToken: false, value: substring };
13196      });
13197      if (locale.localize.preprocessor) {
13198        parts = locale.localize.preprocessor(originalDate, parts);
13199      }
13200      const formatterOptions = {
13201        firstWeekContainsDate,
13202        weekStartsOn,
13203        locale
13204      };
13205      return parts.map((part) => {
13206        if (!part.isToken) return part.value;
13207        const token = part.value;
13208        if (!options?.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token) || !options?.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) {
13209          warnOrThrowProtectedError(token, formatStr, String(date));
13210        }
13211        const formatter = formatters[token[0]];
13212        return formatter(originalDate, token, locale.localize, formatterOptions);
13213      }).join("");
13214    }
13215    function cleanEscapedString(input) {
13216      const matched = input.match(escapedStringRegExp);
13217      if (!matched) {
13218        return input;
13219      }
13220      return matched[1].replace(doubleQuoteRegExp, "'");
13221    }
13222  
13223    // packages/dataviews/node_modules/date-fns/subDays.js
13224    function subDays(date, amount, options) {
13225      return addDays(date, -amount, options);
13226    }
13227  
13228    // packages/dataviews/node_modules/date-fns/subMonths.js
13229    function subMonths(date, amount, options) {
13230      return addMonths(date, -amount, options);
13231    }
13232  
13233    // packages/dataviews/node_modules/date-fns/subYears.js
13234    function subYears(date, amount, options) {
13235      return addYears(date, -amount, options);
13236    }
13237  
13238    // packages/dataviews/build-module/dataform-controls/datetime.js
13239    var import_components33 = __toESM(require_components());
13240    var import_element38 = __toESM(require_element());
13241    var import_i18n38 = __toESM(require_i18n());
13242    var import_date2 = __toESM(require_date());
13243  
13244    // packages/dataviews/build-module/dataform-controls/utils/relative-date-control.js
13245    var import_components32 = __toESM(require_components());
13246    var import_element37 = __toESM(require_element());
13247    var import_i18n37 = __toESM(require_i18n());
13248    var import_jsx_runtime73 = __toESM(require_jsx_runtime());
13249    var TIME_UNITS_OPTIONS = {
13250      [OPERATOR_IN_THE_PAST]: [
13251        { value: "days", label: (0, import_i18n37.__)("Days") },
13252        { value: "weeks", label: (0, import_i18n37.__)("Weeks") },
13253        { value: "months", label: (0, import_i18n37.__)("Months") },
13254        { value: "years", label: (0, import_i18n37.__)("Years") }
13255      ],
13256      [OPERATOR_OVER]: [
13257        { value: "days", label: (0, import_i18n37.__)("Days ago") },
13258        { value: "weeks", label: (0, import_i18n37.__)("Weeks ago") },
13259        { value: "months", label: (0, import_i18n37.__)("Months ago") },
13260        { value: "years", label: (0, import_i18n37.__)("Years ago") }
13261      ]
13262    };
13263    function RelativeDateControl({
13264      className,
13265      data,
13266      field,
13267      onChange,
13268      hideLabelFromVision,
13269      operator
13270    }) {
13271      const options = TIME_UNITS_OPTIONS[operator === OPERATOR_IN_THE_PAST ? "inThePast" : "over"];
13272      const { id, label, getValue, setValue } = field;
13273      const fieldValue = getValue({ item: data });
13274      const { value: relValue = "", unit = options[0].value } = fieldValue && typeof fieldValue === "object" ? fieldValue : {};
13275      const onChangeValue = (0, import_element37.useCallback)(
13276        (newValue) => onChange(
13277          setValue({
13278            item: data,
13279            value: { value: Number(newValue), unit }
13280          })
13281        ),
13282        [onChange, setValue, data, unit]
13283      );
13284      const onChangeUnit = (0, import_element37.useCallback)(
13285        (newUnit) => onChange(
13286          setValue({
13287            item: data,
13288            value: { value: relValue, unit: newUnit }
13289          })
13290        ),
13291        [onChange, setValue, data, relValue]
13292      );
13293      return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13294        import_components32.BaseControl,
13295        {
13296          id,
13297          className: clsx_default(className, "dataviews-controls__relative-date"),
13298          label,
13299          hideLabelFromVision,
13300          children: /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(import_components32.__experimentalHStack, { spacing: 2.5, children: [
13301            /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13302              import_components32.__experimentalNumberControl,
13303              {
13304                __next40pxDefaultSize: true,
13305                className: "dataviews-controls__relative-date-number",
13306                spinControls: "none",
13307                min: 1,
13308                step: 1,
13309                value: relValue,
13310                onChange: onChangeValue
13311              }
13312            ),
13313            /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13314              import_components32.SelectControl,
13315              {
13316                className: "dataviews-controls__relative-date-unit",
13317                __next40pxDefaultSize: true,
13318                label: (0, import_i18n37.__)("Unit"),
13319                value: unit,
13320                options,
13321                onChange: onChangeUnit,
13322                hideLabelFromVision: true
13323              }
13324            )
13325          ] })
13326        }
13327      );
13328    }
13329  
13330    // packages/dataviews/build-module/field-types/utils/parse-date-time.js
13331    var import_date = __toESM(require_date());
13332    function parseDateTime(dateTimeString) {
13333      if (!dateTimeString) {
13334        return null;
13335      }
13336      const parsed = (0, import_date.getDate)(dateTimeString);
13337      return parsed && isValid(parsed) ? parsed : null;
13338    }
13339  
13340    // packages/dataviews/build-module/dataform-controls/datetime.js
13341    var import_jsx_runtime74 = __toESM(require_jsx_runtime());
13342    var { DateCalendar, ValidatedInputControl } = unlock(import_components33.privateApis);
13343    var formatDateTime = (date) => {
13344      if (!date) {
13345        return "";
13346      }
13347      if (typeof date === "string") {
13348        return date;
13349      }
13350      return format(date, "yyyy-MM-dd'T'HH:mm");
13351    };
13352    function CalendarDateTimeControl({
13353      data,
13354      field,
13355      onChange,
13356      hideLabelFromVision,
13357      validity
13358    }) {
13359      const { id, label, description, setValue, getValue, isValid: isValid2 } = field;
13360      const fieldValue = getValue({ item: data });
13361      const value = typeof fieldValue === "string" ? fieldValue : void 0;
13362      const [calendarMonth, setCalendarMonth] = (0, import_element38.useState)(() => {
13363        const parsedDate = parseDateTime(value);
13364        return parsedDate || /* @__PURE__ */ new Date();
13365      });
13366      const inputControlRef = (0, import_element38.useRef)(null);
13367      const validationTimeoutRef = (0, import_element38.useRef)();
13368      const previousFocusRef = (0, import_element38.useRef)(null);
13369      const onChangeCallback = (0, import_element38.useCallback)(
13370        (newValue) => onChange(setValue({ item: data, value: newValue })),
13371        [data, onChange, setValue]
13372      );
13373      (0, import_element38.useEffect)(() => {
13374        return () => {
13375          if (validationTimeoutRef.current) {
13376            clearTimeout(validationTimeoutRef.current);
13377          }
13378        };
13379      }, []);
13380      const onSelectDate = (0, import_element38.useCallback)(
13381        (newDate) => {
13382          let dateTimeValue;
13383          if (newDate) {
13384            let finalDateTime = newDate;
13385            if (value) {
13386              const currentDateTime = parseDateTime(value);
13387              if (currentDateTime) {
13388                finalDateTime = new Date(newDate);
13389                finalDateTime.setHours(currentDateTime.getHours());
13390                finalDateTime.setMinutes(
13391                  currentDateTime.getMinutes()
13392                );
13393              }
13394            }
13395            dateTimeValue = finalDateTime.toISOString();
13396            onChangeCallback(dateTimeValue);
13397            if (validationTimeoutRef.current) {
13398              clearTimeout(validationTimeoutRef.current);
13399            }
13400          } else {
13401            onChangeCallback(void 0);
13402          }
13403          previousFocusRef.current = inputControlRef.current && inputControlRef.current.ownerDocument.activeElement;
13404          validationTimeoutRef.current = setTimeout(() => {
13405            if (inputControlRef.current) {
13406              inputControlRef.current.focus();
13407              inputControlRef.current.blur();
13408              onChangeCallback(dateTimeValue);
13409              if (previousFocusRef.current && previousFocusRef.current instanceof HTMLElement) {
13410                previousFocusRef.current.focus();
13411              }
13412            }
13413          }, 0);
13414        },
13415        [onChangeCallback, value]
13416      );
13417      const handleManualDateTimeChange = (0, import_element38.useCallback)(
13418        (newValue) => {
13419          if (newValue) {
13420            const dateTime = new Date(newValue);
13421            onChangeCallback(dateTime.toISOString());
13422            const parsedDate = parseDateTime(dateTime.toISOString());
13423            if (parsedDate) {
13424              setCalendarMonth(parsedDate);
13425            }
13426          } else {
13427            onChangeCallback(void 0);
13428          }
13429        },
13430        [onChangeCallback]
13431      );
13432      const { format: fieldFormat } = field;
13433      const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date2.getSettings)().l10n.startOfWeek;
13434      const {
13435        timezone: { string: timezoneString }
13436      } = (0, import_date2.getSettings)();
13437      const displayLabel = isValid2?.required && !hideLabelFromVision ? `$label} (${(0, import_i18n38.__)("Required")})` : label;
13438      return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
13439        import_components33.BaseControl,
13440        {
13441          id,
13442          label: displayLabel,
13443          help: description,
13444          hideLabelFromVision,
13445          children: /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(import_components33.__experimentalVStack, { spacing: 4, children: [
13446            /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
13447              DateCalendar,
13448              {
13449                style: { width: "100%" },
13450                selected: value ? parseDateTime(value) || void 0 : void 0,
13451                onSelect: onSelectDate,
13452                month: calendarMonth,
13453                onMonthChange: setCalendarMonth,
13454                timeZone: timezoneString || void 0,
13455                weekStartsOn
13456              }
13457            ),
13458            /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
13459              ValidatedInputControl,
13460              {
13461                ref: inputControlRef,
13462                __next40pxDefaultSize: true,
13463                required: !!isValid2?.required,
13464                customValidity: getCustomValidity(isValid2, validity),
13465                type: "datetime-local",
13466                label: (0, import_i18n38.__)("Date time"),
13467                hideLabelFromVision: true,
13468                value: value ? formatDateTime(
13469                  parseDateTime(value) || void 0
13470                ) : "",
13471                onChange: handleManualDateTimeChange
13472              }
13473            )
13474          ] })
13475        }
13476      );
13477    }
13478    function DateTime({
13479      data,
13480      field,
13481      onChange,
13482      hideLabelFromVision,
13483      operator,
13484      validity
13485    }) {
13486      if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) {
13487        return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
13488          RelativeDateControl,
13489          {
13490            className: "dataviews-controls__datetime",
13491            data,
13492            field,
13493            onChange,
13494            hideLabelFromVision,
13495            operator
13496          }
13497        );
13498      }
13499      return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
13500        CalendarDateTimeControl,
13501        {
13502          data,
13503          field,
13504          onChange,
13505          hideLabelFromVision,
13506          validity
13507        }
13508      );
13509    }
13510  
13511    // packages/dataviews/build-module/dataform-controls/date.js
13512    var import_components34 = __toESM(require_components());
13513    var import_element39 = __toESM(require_element());
13514    var import_i18n39 = __toESM(require_i18n());
13515    var import_date3 = __toESM(require_date());
13516    var import_jsx_runtime75 = __toESM(require_jsx_runtime());
13517    var { DateCalendar: DateCalendar2, DateRangeCalendar } = unlock(import_components34.privateApis);
13518    var DATE_PRESETS = [
13519      {
13520        id: "today",
13521        label: (0, import_i18n39.__)("Today"),
13522        getValue: () => (0, import_date3.getDate)(null)
13523      },
13524      {
13525        id: "yesterday",
13526        label: (0, import_i18n39.__)("Yesterday"),
13527        getValue: () => {
13528          const today = (0, import_date3.getDate)(null);
13529          return subDays(today, 1);
13530        }
13531      },
13532      {
13533        id: "past-week",
13534        label: (0, import_i18n39.__)("Past week"),
13535        getValue: () => {
13536          const today = (0, import_date3.getDate)(null);
13537          return subDays(today, 7);
13538        }
13539      },
13540      {
13541        id: "past-month",
13542        label: (0, import_i18n39.__)("Past month"),
13543        getValue: () => {
13544          const today = (0, import_date3.getDate)(null);
13545          return subMonths(today, 1);
13546        }
13547      }
13548    ];
13549    var DATE_RANGE_PRESETS = [
13550      {
13551        id: "last-7-days",
13552        label: (0, import_i18n39.__)("Last 7 days"),
13553        getValue: () => {
13554          const today = (0, import_date3.getDate)(null);
13555          return [subDays(today, 7), today];
13556        }
13557      },
13558      {
13559        id: "last-30-days",
13560        label: (0, import_i18n39.__)("Last 30 days"),
13561        getValue: () => {
13562          const today = (0, import_date3.getDate)(null);
13563          return [subDays(today, 30), today];
13564        }
13565      },
13566      {
13567        id: "month-to-date",
13568        label: (0, import_i18n39.__)("Month to date"),
13569        getValue: () => {
13570          const today = (0, import_date3.getDate)(null);
13571          return [startOfMonth(today), today];
13572        }
13573      },
13574      {
13575        id: "last-year",
13576        label: (0, import_i18n39.__)("Last year"),
13577        getValue: () => {
13578          const today = (0, import_date3.getDate)(null);
13579          return [subYears(today, 1), today];
13580        }
13581      },
13582      {
13583        id: "year-to-date",
13584        label: (0, import_i18n39.__)("Year to date"),
13585        getValue: () => {
13586          const today = (0, import_date3.getDate)(null);
13587          return [startOfYear(today), today];
13588        }
13589      }
13590    ];
13591    var parseDate = (dateString) => {
13592      if (!dateString) {
13593        return null;
13594      }
13595      const parsed = (0, import_date3.getDate)(dateString);
13596      return parsed && isValid(parsed) ? parsed : null;
13597    };
13598    var formatDate = (date) => {
13599      if (!date) {
13600        return "";
13601      }
13602      return typeof date === "string" ? date : format(date, "yyyy-MM-dd");
13603    };
13604    function ValidatedDateControl({
13605      field,
13606      validity,
13607      inputRefs,
13608      isTouched,
13609      setIsTouched,
13610      children
13611    }) {
13612      const { isValid: isValid2 } = field;
13613      const [customValidity, setCustomValidity] = (0, import_element39.useState)(void 0);
13614      const validateRefs = (0, import_element39.useCallback)(() => {
13615        const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs];
13616        for (const ref of refs) {
13617          const input = ref.current;
13618          if (input && !input.validity.valid) {
13619            setCustomValidity({
13620              type: "invalid",
13621              message: input.validationMessage
13622            });
13623            return;
13624          }
13625        }
13626        setCustomValidity(void 0);
13627      }, [inputRefs]);
13628      (0, import_element39.useEffect)(() => {
13629        if (isTouched) {
13630          const timeoutId = setTimeout(() => {
13631            if (validity) {
13632              setCustomValidity(getCustomValidity(isValid2, validity));
13633            } else {
13634              validateRefs();
13635            }
13636          }, 0);
13637          return () => clearTimeout(timeoutId);
13638        }
13639        return void 0;
13640      }, [isTouched, isValid2, validity, validateRefs]);
13641      const onBlur = (event) => {
13642        if (isTouched) {
13643          return;
13644        }
13645        if (!event.relatedTarget || !event.currentTarget.contains(event.relatedTarget)) {
13646          setIsTouched(true);
13647        }
13648      };
13649      return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { onBlur, children: [
13650        children,
13651        /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("div", { "aria-live": "polite", children: customValidity && /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(
13652          "p",
13653          {
13654            className: clsx_default(
13655              "components-validated-control__indicator",
13656              customValidity.type === "invalid" ? "is-invalid" : void 0,
13657              customValidity.type === "valid" ? "is-valid" : void 0
13658            ),
13659            children: [
13660              /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
13661                import_components34.Icon,
13662                {
13663                  className: "components-validated-control__indicator-icon",
13664                  icon: error_default,
13665                  size: 16,
13666                  fill: "currentColor"
13667                }
13668              ),
13669              customValidity.message
13670            ]
13671          }
13672        ) })
13673      ] });
13674    }
13675    function CalendarDateControl({
13676      data,
13677      field,
13678      onChange,
13679      hideLabelFromVision,
13680      validity
13681    }) {
13682      const {
13683        id,
13684        label,
13685        setValue,
13686        getValue,
13687        isValid: isValid2,
13688        format: fieldFormat
13689      } = field;
13690      const [selectedPresetId, setSelectedPresetId] = (0, import_element39.useState)(
13691        null
13692      );
13693      const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date3.getSettings)().l10n.startOfWeek;
13694      const fieldValue = getValue({ item: data });
13695      const value = typeof fieldValue === "string" ? fieldValue : void 0;
13696      const [calendarMonth, setCalendarMonth] = (0, import_element39.useState)(() => {
13697        const parsedDate = parseDate(value);
13698        return parsedDate || /* @__PURE__ */ new Date();
13699      });
13700      const [isTouched, setIsTouched] = (0, import_element39.useState)(false);
13701      const validityTargetRef = (0, import_element39.useRef)(null);
13702      const onChangeCallback = (0, import_element39.useCallback)(
13703        (newValue) => onChange(setValue({ item: data, value: newValue })),
13704        [data, onChange, setValue]
13705      );
13706      const onSelectDate = (0, import_element39.useCallback)(
13707        (newDate) => {
13708          const dateValue = newDate ? format(newDate, "yyyy-MM-dd") : void 0;
13709          onChangeCallback(dateValue);
13710          setSelectedPresetId(null);
13711          setIsTouched(true);
13712        },
13713        [onChangeCallback]
13714      );
13715      const handlePresetClick = (0, import_element39.useCallback)(
13716        (preset) => {
13717          const presetDate = preset.getValue();
13718          const dateValue = formatDate(presetDate);
13719          setCalendarMonth(presetDate);
13720          onChangeCallback(dateValue);
13721          setSelectedPresetId(preset.id);
13722          setIsTouched(true);
13723        },
13724        [onChangeCallback]
13725      );
13726      const handleManualDateChange = (0, import_element39.useCallback)(
13727        (newValue) => {
13728          onChangeCallback(newValue);
13729          if (newValue) {
13730            const parsedDate = parseDate(newValue);
13731            if (parsedDate) {
13732              setCalendarMonth(parsedDate);
13733            }
13734          }
13735          setSelectedPresetId(null);
13736          setIsTouched(true);
13737        },
13738        [onChangeCallback]
13739      );
13740      const {
13741        timezone: { string: timezoneString }
13742      } = (0, import_date3.getSettings)();
13743      const displayLabel = isValid2?.required ? `$label} (${(0, import_i18n39.__)("Required")})` : label;
13744      return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
13745        ValidatedDateControl,
13746        {
13747          field,
13748          validity,
13749          inputRefs: validityTargetRef,
13750          isTouched,
13751          setIsTouched,
13752          children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
13753            import_components34.BaseControl,
13754            {
13755              id,
13756              className: "dataviews-controls__date",
13757              label: displayLabel,
13758              hideLabelFromVision,
13759              children: /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(import_components34.__experimentalVStack, { spacing: 4, children: [
13760                /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(import_components34.__experimentalHStack, { spacing: 2, wrap: true, justify: "flex-start", children: [
13761                  DATE_PRESETS.map((preset) => {
13762                    const isSelected2 = selectedPresetId === preset.id;
13763                    return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
13764                      import_components34.Button,
13765                      {
13766                        className: "dataviews-controls__date-preset",
13767                        variant: "tertiary",
13768                        isPressed: isSelected2,
13769                        size: "small",
13770                        onClick: () => handlePresetClick(preset),
13771                        children: preset.label
13772                      },
13773                      preset.id
13774                    );
13775                  }),
13776                  /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
13777                    import_components34.Button,
13778                    {
13779                      className: "dataviews-controls__date-preset",
13780                      variant: "tertiary",
13781                      isPressed: !selectedPresetId,
13782                      size: "small",
13783                      disabled: !!selectedPresetId,
13784                      accessibleWhenDisabled: false,
13785                      children: (0, import_i18n39.__)("Custom")
13786                    }
13787                  )
13788                ] }),
13789                /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
13790                  import_components34.__experimentalInputControl,
13791                  {
13792                    __next40pxDefaultSize: true,
13793                    ref: validityTargetRef,
13794                    type: "date",
13795                    label: (0, import_i18n39.__)("Date"),
13796                    hideLabelFromVision: true,
13797                    value,
13798                    onChange: handleManualDateChange,
13799                    required: !!field.isValid?.required
13800                  }
13801                ),
13802                /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
13803                  DateCalendar2,
13804                  {
13805                    style: { width: "100%" },
13806                    selected: value ? parseDate(value) || void 0 : void 0,
13807                    onSelect: onSelectDate,
13808                    month: calendarMonth,
13809                    onMonthChange: setCalendarMonth,
13810                    timeZone: timezoneString || void 0,
13811                    weekStartsOn
13812                  }
13813                )
13814              ] })
13815            }
13816          )
13817        }
13818      );
13819    }
13820    function CalendarDateRangeControl({
13821      data,
13822      field,
13823      onChange,
13824      hideLabelFromVision,
13825      validity
13826    }) {
13827      const { id, label, getValue, setValue, format: fieldFormat } = field;
13828      let value;
13829      const fieldValue = getValue({ item: data });
13830      if (Array.isArray(fieldValue) && fieldValue.length === 2 && fieldValue.every((date) => typeof date === "string")) {
13831        value = fieldValue;
13832      }
13833      const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date3.getSettings)().l10n.startOfWeek;
13834      const onChangeCallback = (0, import_element39.useCallback)(
13835        (newValue) => {
13836          onChange(
13837            setValue({
13838              item: data,
13839              value: newValue
13840            })
13841          );
13842        },
13843        [data, onChange, setValue]
13844      );
13845      const [selectedPresetId, setSelectedPresetId] = (0, import_element39.useState)(
13846        null
13847      );
13848      const selectedRange = (0, import_element39.useMemo)(() => {
13849        if (!value) {
13850          return { from: void 0, to: void 0 };
13851        }
13852        const [from, to] = value;
13853        return {
13854          from: parseDate(from) || void 0,
13855          to: parseDate(to) || void 0
13856        };
13857      }, [value]);
13858      const [calendarMonth, setCalendarMonth] = (0, import_element39.useState)(() => {
13859        return selectedRange.from || /* @__PURE__ */ new Date();
13860      });
13861      const [isTouched, setIsTouched] = (0, import_element39.useState)(false);
13862      const fromInputRef = (0, import_element39.useRef)(null);
13863      const toInputRef = (0, import_element39.useRef)(null);
13864      const updateDateRange = (0, import_element39.useCallback)(
13865        (fromDate, toDate2) => {
13866          if (fromDate && toDate2) {
13867            onChangeCallback([
13868              formatDate(fromDate),
13869              formatDate(toDate2)
13870            ]);
13871          } else if (!fromDate && !toDate2) {
13872            onChangeCallback(void 0);
13873          }
13874        },
13875        [onChangeCallback]
13876      );
13877      const onSelectCalendarRange = (0, import_element39.useCallback)(
13878        (newRange) => {
13879          updateDateRange(newRange?.from, newRange?.to);
13880          setSelectedPresetId(null);
13881          setIsTouched(true);
13882        },
13883        [updateDateRange]
13884      );
13885      const handlePresetClick = (0, import_element39.useCallback)(
13886        (preset) => {
13887          const [startDate, endDate] = preset.getValue();
13888          setCalendarMonth(startDate);
13889          updateDateRange(startDate, endDate);
13890          setSelectedPresetId(preset.id);
13891          setIsTouched(true);
13892        },
13893        [updateDateRange]
13894      );
13895      const handleManualDateChange = (0, import_element39.useCallback)(
13896        (fromOrTo, newValue) => {
13897          const [currentFrom, currentTo] = value || [
13898            void 0,
13899            void 0
13900          ];
13901          const updatedFrom = fromOrTo === "from" ? newValue : currentFrom;
13902          const updatedTo = fromOrTo === "to" ? newValue : currentTo;
13903          updateDateRange(updatedFrom, updatedTo);
13904          if (newValue) {
13905            const parsedDate = parseDate(newValue);
13906            if (parsedDate) {
13907              setCalendarMonth(parsedDate);
13908            }
13909          }
13910          setSelectedPresetId(null);
13911          setIsTouched(true);
13912        },
13913        [value, updateDateRange]
13914      );
13915      const { timezone } = (0, import_date3.getSettings)();
13916      const displayLabel = field.isValid?.required ? `$label} (${(0, import_i18n39.__)("Required")})` : label;
13917      return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
13918        ValidatedDateControl,
13919        {
13920          field,
13921          validity,
13922          inputRefs: [fromInputRef, toInputRef],
13923          isTouched,
13924          setIsTouched,
13925          children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
13926            import_components34.BaseControl,
13927            {
13928              id,
13929              className: "dataviews-controls__date",
13930              label: displayLabel,
13931              hideLabelFromVision,
13932              children: /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(import_components34.__experimentalVStack, { spacing: 4, children: [
13933                /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(import_components34.__experimentalHStack, { spacing: 2, wrap: true, justify: "flex-start", children: [
13934                  DATE_RANGE_PRESETS.map((preset) => {
13935                    const isSelected2 = selectedPresetId === preset.id;
13936                    return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
13937                      import_components34.Button,
13938                      {
13939                        className: "dataviews-controls__date-preset",
13940                        variant: "tertiary",
13941                        isPressed: isSelected2,
13942                        size: "small",
13943                        onClick: () => handlePresetClick(preset),
13944                        children: preset.label
13945                      },
13946                      preset.id
13947                    );
13948                  }),
13949                  /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
13950                    import_components34.Button,
13951                    {
13952                      className: "dataviews-controls__date-preset",
13953                      variant: "tertiary",
13954                      isPressed: !selectedPresetId,
13955                      size: "small",
13956                      accessibleWhenDisabled: false,
13957                      disabled: !!selectedPresetId,
13958                      children: (0, import_i18n39.__)("Custom")
13959                    }
13960                  )
13961                ] }),
13962                /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(import_components34.__experimentalHStack, { spacing: 2, children: [
13963                  /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
13964                    import_components34.__experimentalInputControl,
13965                    {
13966                      __next40pxDefaultSize: true,
13967                      ref: fromInputRef,
13968                      type: "date",
13969                      label: (0, import_i18n39.__)("From"),
13970                      hideLabelFromVision: true,
13971                      value: value?.[0],
13972                      onChange: (newValue) => handleManualDateChange("from", newValue),
13973                      required: !!field.isValid?.required
13974                    }
13975                  ),
13976                  /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
13977                    import_components34.__experimentalInputControl,
13978                    {
13979                      __next40pxDefaultSize: true,
13980                      ref: toInputRef,
13981                      type: "date",
13982                      label: (0, import_i18n39.__)("To"),
13983                      hideLabelFromVision: true,
13984                      value: value?.[1],
13985                      onChange: (newValue) => handleManualDateChange("to", newValue),
13986                      required: !!field.isValid?.required
13987                    }
13988                  )
13989                ] }),
13990                /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
13991                  DateRangeCalendar,
13992                  {
13993                    style: { width: "100%" },
13994                    selected: selectedRange,
13995                    onSelect: onSelectCalendarRange,
13996                    month: calendarMonth,
13997                    onMonthChange: setCalendarMonth,
13998                    timeZone: timezone.string || void 0,
13999                    weekStartsOn
14000                  }
14001                )
14002              ] })
14003            }
14004          )
14005        }
14006      );
14007    }
14008    function DateControl({
14009      data,
14010      field,
14011      onChange,
14012      hideLabelFromVision,
14013      operator,
14014      validity
14015    }) {
14016      if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) {
14017        return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
14018          RelativeDateControl,
14019          {
14020            className: "dataviews-controls__date",
14021            data,
14022            field,
14023            onChange,
14024            hideLabelFromVision,
14025            operator
14026          }
14027        );
14028      }
14029      if (operator === OPERATOR_BETWEEN) {
14030        return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
14031          CalendarDateRangeControl,
14032          {
14033            data,
14034            field,
14035            onChange,
14036            hideLabelFromVision,
14037            validity
14038          }
14039        );
14040      }
14041      return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
14042        CalendarDateControl,
14043        {
14044          data,
14045          field,
14046          onChange,
14047          hideLabelFromVision,
14048          validity
14049        }
14050      );
14051    }
14052  
14053    // packages/dataviews/build-module/dataform-controls/email.js
14054    var import_components36 = __toESM(require_components());
14055  
14056    // packages/dataviews/build-module/dataform-controls/utils/validated-input.js
14057    var import_components35 = __toESM(require_components());
14058    var import_element40 = __toESM(require_element());
14059    var import_jsx_runtime76 = __toESM(require_jsx_runtime());
14060    var { ValidatedInputControl: ValidatedInputControl2 } = unlock(import_components35.privateApis);
14061    function ValidatedText({
14062      data,
14063      field,
14064      onChange,
14065      hideLabelFromVision,
14066      type,
14067      prefix,
14068      suffix,
14069      validity
14070    }) {
14071      const { label, placeholder, description, getValue, setValue, isValid: isValid2 } = field;
14072      const value = getValue({ item: data });
14073      const onChangeControl = (0, import_element40.useCallback)(
14074        (newValue) => onChange(
14075          setValue({
14076            item: data,
14077            value: newValue
14078          })
14079        ),
14080        [data, setValue, onChange]
14081      );
14082      return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
14083        ValidatedInputControl2,
14084        {
14085          required: !!isValid2.required,
14086          customValidity: getCustomValidity(isValid2, validity),
14087          label,
14088          placeholder,
14089          value: value ?? "",
14090          help: description,
14091          onChange: onChangeControl,
14092          hideLabelFromVision,
14093          type,
14094          prefix,
14095          suffix,
14096          pattern: isValid2.pattern ? isValid2.pattern.constraint : void 0,
14097          minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0,
14098          maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0,
14099          __next40pxDefaultSize: true
14100        }
14101      );
14102    }
14103  
14104    // packages/dataviews/build-module/dataform-controls/email.js
14105    var import_jsx_runtime77 = __toESM(require_jsx_runtime());
14106    function Email({
14107      data,
14108      field,
14109      onChange,
14110      hideLabelFromVision,
14111      validity
14112    }) {
14113      return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14114        ValidatedText,
14115        {
14116          ...{
14117            data,
14118            field,
14119            onChange,
14120            hideLabelFromVision,
14121            validity,
14122            type: "email",
14123            prefix: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_components36.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(import_components36.Icon, { icon: envelope_default }) })
14124          }
14125        }
14126      );
14127    }
14128  
14129    // packages/dataviews/build-module/dataform-controls/telephone.js
14130    var import_components37 = __toESM(require_components());
14131    var import_jsx_runtime78 = __toESM(require_jsx_runtime());
14132    function Telephone({
14133      data,
14134      field,
14135      onChange,
14136      hideLabelFromVision,
14137      validity
14138    }) {
14139      return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
14140        ValidatedText,
14141        {
14142          ...{
14143            data,
14144            field,
14145            onChange,
14146            hideLabelFromVision,
14147            validity,
14148            type: "tel",
14149            prefix: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_components37.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_components37.Icon, { icon: mobile_default }) })
14150          }
14151        }
14152      );
14153    }
14154  
14155    // packages/dataviews/build-module/dataform-controls/url.js
14156    var import_components38 = __toESM(require_components());
14157    var import_jsx_runtime79 = __toESM(require_jsx_runtime());
14158    function Url({
14159      data,
14160      field,
14161      onChange,
14162      hideLabelFromVision,
14163      validity
14164    }) {
14165      return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
14166        ValidatedText,
14167        {
14168          ...{
14169            data,
14170            field,
14171            onChange,
14172            hideLabelFromVision,
14173            validity,
14174            type: "url",
14175            prefix: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_components38.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_components38.Icon, { icon: link_default }) })
14176          }
14177        }
14178      );
14179    }
14180  
14181    // packages/dataviews/build-module/dataform-controls/utils/validated-number.js
14182    var import_components39 = __toESM(require_components());
14183    var import_element41 = __toESM(require_element());
14184    var import_i18n40 = __toESM(require_i18n());
14185    var import_jsx_runtime80 = __toESM(require_jsx_runtime());
14186    var { ValidatedNumberControl } = unlock(import_components39.privateApis);
14187    function toNumberOrEmpty(value) {
14188      if (value === "" || value === void 0) {
14189        return "";
14190      }
14191      const number = Number(value);
14192      return Number.isFinite(number) ? number : "";
14193    }
14194    function BetweenControls({
14195      value,
14196      onChange,
14197      hideLabelFromVision,
14198      step
14199    }) {
14200      const [min = "", max = ""] = value;
14201      const onChangeMin = (0, import_element41.useCallback)(
14202        (newValue) => onChange([toNumberOrEmpty(newValue), max]),
14203        [onChange, max]
14204      );
14205      const onChangeMax = (0, import_element41.useCallback)(
14206        (newValue) => onChange([min, toNumberOrEmpty(newValue)]),
14207        [onChange, min]
14208      );
14209      return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
14210        import_components39.BaseControl,
14211        {
14212          help: (0, import_i18n40.__)("The max. value must be greater than the min. value."),
14213          children: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(import_components39.Flex, { direction: "row", gap: 4, children: [
14214            /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
14215              import_components39.__experimentalNumberControl,
14216              {
14217                label: (0, import_i18n40.__)("Min."),
14218                value: min,
14219                max: max ? Number(max) - step : void 0,
14220                onChange: onChangeMin,
14221                __next40pxDefaultSize: true,
14222                hideLabelFromVision,
14223                step
14224              }
14225            ),
14226            /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
14227              import_components39.__experimentalNumberControl,
14228              {
14229                label: (0, import_i18n40.__)("Max."),
14230                value: max,
14231                min: min ? Number(min) + step : void 0,
14232                onChange: onChangeMax,
14233                __next40pxDefaultSize: true,
14234                hideLabelFromVision,
14235                step
14236              }
14237            )
14238          ] })
14239        }
14240      );
14241    }
14242    function ValidatedNumber({
14243      data,
14244      field,
14245      onChange,
14246      hideLabelFromVision,
14247      operator,
14248      validity
14249    }) {
14250      const decimals = field.format?.decimals ?? 0;
14251      const step = Math.pow(10, Math.abs(decimals) * -1);
14252      const { label, description, getValue, setValue, isValid: isValid2 } = field;
14253      const value = getValue({ item: data }) ?? "";
14254      const onChangeControl = (0, import_element41.useCallback)(
14255        (newValue) => {
14256          onChange(
14257            setValue({
14258              item: data,
14259              // Do not convert an empty string or undefined to a number,
14260              // otherwise there's a mismatch between the UI control (empty)
14261              // and the data relied by onChange (0).
14262              value: ["", void 0].includes(newValue) ? void 0 : Number(newValue)
14263            })
14264          );
14265        },
14266        [data, onChange, setValue]
14267      );
14268      const onChangeBetweenControls = (0, import_element41.useCallback)(
14269        (newValue) => {
14270          onChange(
14271            setValue({
14272              item: data,
14273              value: newValue
14274            })
14275          );
14276        },
14277        [data, onChange, setValue]
14278      );
14279      if (operator === OPERATOR_BETWEEN) {
14280        let valueBetween = ["", ""];
14281        if (Array.isArray(value) && value.length === 2 && value.every(
14282          (element) => typeof element === "number" || element === ""
14283        )) {
14284          valueBetween = value;
14285        }
14286        return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
14287          BetweenControls,
14288          {
14289            value: valueBetween,
14290            onChange: onChangeBetweenControls,
14291            hideLabelFromVision,
14292            step
14293          }
14294        );
14295      }
14296      return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
14297        ValidatedNumberControl,
14298        {
14299          required: !!isValid2.required,
14300          customValidity: getCustomValidity(isValid2, validity),
14301          label,
14302          help: description,
14303          value,
14304          onChange: onChangeControl,
14305          __next40pxDefaultSize: true,
14306          hideLabelFromVision,
14307          step,
14308          min: isValid2.min ? isValid2.min.constraint : void 0,
14309          max: isValid2.max ? isValid2.max.constraint : void 0
14310        }
14311      );
14312    }
14313  
14314    // packages/dataviews/build-module/dataform-controls/integer.js
14315    var import_jsx_runtime81 = __toESM(require_jsx_runtime());
14316    function Integer(props) {
14317      return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ValidatedNumber, { ...props });
14318    }
14319  
14320    // packages/dataviews/build-module/dataform-controls/number.js
14321    var import_jsx_runtime82 = __toESM(require_jsx_runtime());
14322    function Number2(props) {
14323      return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(ValidatedNumber, { ...props });
14324    }
14325  
14326    // packages/dataviews/build-module/dataform-controls/radio.js
14327    var import_components40 = __toESM(require_components());
14328    var import_element42 = __toESM(require_element());
14329    var import_jsx_runtime83 = __toESM(require_jsx_runtime());
14330    var { ValidatedRadioControl } = unlock(import_components40.privateApis);
14331    function Radio({
14332      data,
14333      field,
14334      onChange,
14335      hideLabelFromVision,
14336      validity
14337    }) {
14338      const { label, description, getValue, setValue, isValid: isValid2 } = field;
14339      const { elements, isLoading } = useElements({
14340        elements: field.elements,
14341        getElements: field.getElements
14342      });
14343      const value = getValue({ item: data });
14344      const onChangeControl = (0, import_element42.useCallback)(
14345        (newValue) => onChange(setValue({ item: data, value: newValue })),
14346        [data, onChange, setValue]
14347      );
14348      if (isLoading) {
14349        return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(import_components40.Spinner, {});
14350      }
14351      return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
14352        ValidatedRadioControl,
14353        {
14354          required: !!field.isValid?.required,
14355          customValidity: getCustomValidity(isValid2, validity),
14356          label,
14357          help: description,
14358          onChange: onChangeControl,
14359          options: elements,
14360          selected: value,
14361          hideLabelFromVision
14362        }
14363      );
14364    }
14365  
14366    // packages/dataviews/build-module/dataform-controls/select.js
14367    var import_components41 = __toESM(require_components());
14368    var import_element43 = __toESM(require_element());
14369    var import_jsx_runtime84 = __toESM(require_jsx_runtime());
14370    var { ValidatedSelectControl } = unlock(import_components41.privateApis);
14371    function Select({
14372      data,
14373      field,
14374      onChange,
14375      hideLabelFromVision,
14376      validity
14377    }) {
14378      const { type, label, description, getValue, setValue, isValid: isValid2 } = field;
14379      const isMultiple = type === "array";
14380      const value = getValue({ item: data }) ?? (isMultiple ? [] : "");
14381      const onChangeControl = (0, import_element43.useCallback)(
14382        (newValue) => onChange(setValue({ item: data, value: newValue })),
14383        [data, onChange, setValue]
14384      );
14385      const { elements, isLoading } = useElements({
14386        elements: field.elements,
14387        getElements: field.getElements
14388      });
14389      if (isLoading) {
14390        return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(import_components41.Spinner, {});
14391      }
14392      return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
14393        ValidatedSelectControl,
14394        {
14395          required: !!field.isValid?.required,
14396          customValidity: getCustomValidity(isValid2, validity),
14397          label,
14398          value,
14399          help: description,
14400          options: elements,
14401          onChange: onChangeControl,
14402          __next40pxDefaultSize: true,
14403          hideLabelFromVision,
14404          multiple: isMultiple
14405        }
14406      );
14407    }
14408  
14409    // packages/dataviews/build-module/dataform-controls/text.js
14410    var import_element44 = __toESM(require_element());
14411    var import_jsx_runtime85 = __toESM(require_jsx_runtime());
14412    function Text2({
14413      data,
14414      field,
14415      onChange,
14416      hideLabelFromVision,
14417      config,
14418      validity
14419    }) {
14420      const { prefix, suffix } = config || {};
14421      return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
14422        ValidatedText,
14423        {
14424          ...{
14425            data,
14426            field,
14427            onChange,
14428            hideLabelFromVision,
14429            validity,
14430            prefix: prefix ? (0, import_element44.createElement)(prefix) : void 0,
14431            suffix: suffix ? (0, import_element44.createElement)(suffix) : void 0
14432          }
14433        }
14434      );
14435    }
14436  
14437    // packages/dataviews/build-module/dataform-controls/toggle.js
14438    var import_components42 = __toESM(require_components());
14439    var import_element45 = __toESM(require_element());
14440    var import_jsx_runtime86 = __toESM(require_jsx_runtime());
14441    var { ValidatedToggleControl } = unlock(import_components42.privateApis);
14442    function Toggle({
14443      field,
14444      onChange,
14445      data,
14446      hideLabelFromVision,
14447      validity
14448    }) {
14449      const { label, description, getValue, setValue, isValid: isValid2 } = field;
14450      const onChangeControl = (0, import_element45.useCallback)(() => {
14451        onChange(
14452          setValue({ item: data, value: !getValue({ item: data }) })
14453        );
14454      }, [onChange, setValue, data, getValue]);
14455      return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
14456        ValidatedToggleControl,
14457        {
14458          required: !!isValid2.required,
14459          customValidity: getCustomValidity(isValid2, validity),
14460          hidden: hideLabelFromVision,
14461          label,
14462          help: description,
14463          checked: getValue({ item: data }),
14464          onChange: onChangeControl
14465        }
14466      );
14467    }
14468  
14469    // packages/dataviews/build-module/dataform-controls/textarea.js
14470    var import_components43 = __toESM(require_components());
14471    var import_element46 = __toESM(require_element());
14472    var import_jsx_runtime87 = __toESM(require_jsx_runtime());
14473    var { ValidatedTextareaControl } = unlock(import_components43.privateApis);
14474    function Textarea({
14475      data,
14476      field,
14477      onChange,
14478      hideLabelFromVision,
14479      config,
14480      validity
14481    }) {
14482      const { rows = 4 } = config || {};
14483      const { label, placeholder, description, setValue, isValid: isValid2 } = field;
14484      const value = field.getValue({ item: data });
14485      const onChangeControl = (0, import_element46.useCallback)(
14486        (newValue) => onChange(setValue({ item: data, value: newValue })),
14487        [data, onChange, setValue]
14488      );
14489      return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
14490        ValidatedTextareaControl,
14491        {
14492          required: !!isValid2.required,
14493          customValidity: getCustomValidity(isValid2, validity),
14494          label,
14495          placeholder,
14496          value: value ?? "",
14497          help: description,
14498          onChange: onChangeControl,
14499          rows,
14500          minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0,
14501          maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0,
14502          __next40pxDefaultSize: true,
14503          hideLabelFromVision
14504        }
14505      );
14506    }
14507  
14508    // packages/dataviews/build-module/dataform-controls/toggle-group.js
14509    var import_components44 = __toESM(require_components());
14510    var import_element47 = __toESM(require_element());
14511    var import_jsx_runtime88 = __toESM(require_jsx_runtime());
14512    var { ValidatedToggleGroupControl } = unlock(import_components44.privateApis);
14513    function ToggleGroup({
14514      data,
14515      field,
14516      onChange,
14517      hideLabelFromVision,
14518      validity
14519    }) {
14520      const { getValue, setValue, isValid: isValid2 } = field;
14521      const value = getValue({ item: data });
14522      const onChangeControl = (0, import_element47.useCallback)(
14523        (newValue) => onChange(setValue({ item: data, value: newValue })),
14524        [data, onChange, setValue]
14525      );
14526      const { elements, isLoading } = useElements({
14527        elements: field.elements,
14528        getElements: field.getElements
14529      });
14530      if (isLoading) {
14531        return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_components44.Spinner, {});
14532      }
14533      if (elements.length === 0) {
14534        return null;
14535      }
14536      const selectedOption = elements.find((el) => el.value === value);
14537      return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
14538        ValidatedToggleGroupControl,
14539        {
14540          required: !!field.isValid?.required,
14541          customValidity: getCustomValidity(isValid2, validity),
14542          __next40pxDefaultSize: true,
14543          isBlock: true,
14544          label: field.label,
14545          help: selectedOption?.description || field.description,
14546          onChange: onChangeControl,
14547          value,
14548          hideLabelFromVision,
14549          children: elements.map((el) => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
14550            import_components44.__experimentalToggleGroupControlOption,
14551            {
14552              label: el.label,
14553              value: el.value
14554            },
14555            el.value
14556          ))
14557        }
14558      );
14559    }
14560  
14561    // packages/dataviews/build-module/dataform-controls/array.js
14562    var import_components45 = __toESM(require_components());
14563    var import_element48 = __toESM(require_element());
14564    var import_jsx_runtime89 = __toESM(require_jsx_runtime());
14565    var { ValidatedFormTokenField } = unlock(import_components45.privateApis);
14566    function ArrayControl({
14567      data,
14568      field,
14569      onChange,
14570      hideLabelFromVision,
14571      validity
14572    }) {
14573      const { label, placeholder, getValue, setValue, isValid: isValid2 } = field;
14574      const value = getValue({ item: data });
14575      const { elements, isLoading } = useElements({
14576        elements: field.elements,
14577        getElements: field.getElements
14578      });
14579      const arrayValueAsElements = (0, import_element48.useMemo)(
14580        () => Array.isArray(value) ? value.map((token) => {
14581          const element = elements?.find(
14582            (suggestion) => suggestion.value === token
14583          );
14584          return element || { value: token, label: token };
14585        }) : [],
14586        [value, elements]
14587      );
14588      const onChangeControl = (0, import_element48.useCallback)(
14589        (tokens) => {
14590          const valueTokens = tokens.map((token) => {
14591            if (typeof token === "object" && "value" in token) {
14592              return token.value;
14593            }
14594            return token;
14595          });
14596          onChange(setValue({ item: data, value: valueTokens }));
14597        },
14598        [onChange, setValue, data]
14599      );
14600      if (isLoading) {
14601        return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(import_components45.Spinner, {});
14602      }
14603      return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
14604        ValidatedFormTokenField,
14605        {
14606          required: !!isValid2?.required,
14607          customValidity: getCustomValidity(isValid2, validity),
14608          label: hideLabelFromVision ? void 0 : label,
14609          value: arrayValueAsElements,
14610          onChange: onChangeControl,
14611          placeholder,
14612          suggestions: elements?.map((element) => element.value),
14613          __experimentalValidateInput: (token) => {
14614            if (field.isValid?.elements && elements) {
14615              return elements.some(
14616                (element) => element.value === token || element.label === token
14617              );
14618            }
14619            return true;
14620          },
14621          __experimentalExpandOnFocus: elements && elements.length > 0,
14622          __experimentalShowHowTo: !field.isValid?.elements,
14623          displayTransform: (token) => {
14624            if (typeof token === "object" && "label" in token) {
14625              return token.label;
14626            }
14627            if (typeof token === "string" && elements) {
14628              const element = elements.find(
14629                (el) => el.value === token
14630              );
14631              return element?.label || token;
14632            }
14633            return token;
14634          },
14635          __experimentalRenderItem: ({ item }) => {
14636            if (typeof item === "string" && elements) {
14637              const element = elements.find(
14638                (el) => el.value === item
14639              );
14640              return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("span", { children: element?.label || item });
14641            }
14642            return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("span", { children: item });
14643          }
14644        }
14645      );
14646    }
14647  
14648    // node_modules/colord/index.mjs
14649    var r2 = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) };
14650    var t = function(r3) {
14651      return "string" == typeof r3 ? r3.length > 0 : "number" == typeof r3;
14652    };
14653    var n = function(r3, t2, n2) {
14654      return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = Math.pow(10, t2)), Math.round(n2 * r3) / n2 + 0;
14655    };
14656    var e = function(r3, t2, n2) {
14657      return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = 1), r3 > n2 ? n2 : r3 > t2 ? r3 : t2;
14658    };
14659    var u = function(r3) {
14660      return (r3 = isFinite(r3) ? r3 % 360 : 0) > 0 ? r3 : r3 + 360;
14661    };
14662    var a = function(r3) {
14663      return { r: e(r3.r, 0, 255), g: e(r3.g, 0, 255), b: e(r3.b, 0, 255), a: e(r3.a) };
14664    };
14665    var o = function(r3) {
14666      return { r: n(r3.r), g: n(r3.g), b: n(r3.b), a: n(r3.a, 3) };
14667    };
14668    var i = /^#([0-9a-f]{3,8})$/i;
14669    var s = function(r3) {
14670      var t2 = r3.toString(16);
14671      return t2.length < 2 ? "0" + t2 : t2;
14672    };
14673    var h = function(r3) {
14674      var t2 = r3.r, n2 = r3.g, e2 = r3.b, u2 = r3.a, a2 = Math.max(t2, n2, e2), o2 = a2 - Math.min(t2, n2, e2), i2 = o2 ? a2 === t2 ? (n2 - e2) / o2 : a2 === n2 ? 2 + (e2 - t2) / o2 : 4 + (t2 - n2) / o2 : 0;
14675      return { h: 60 * (i2 < 0 ? i2 + 6 : i2), s: a2 ? o2 / a2 * 100 : 0, v: a2 / 255 * 100, a: u2 };
14676    };
14677    var b = function(r3) {
14678      var t2 = r3.h, n2 = r3.s, e2 = r3.v, u2 = r3.a;
14679      t2 = t2 / 360 * 6, n2 /= 100, e2 /= 100;
14680      var a2 = Math.floor(t2), o2 = e2 * (1 - n2), i2 = e2 * (1 - (t2 - a2) * n2), s2 = e2 * (1 - (1 - t2 + a2) * n2), h2 = a2 % 6;
14681      return { r: 255 * [e2, i2, o2, o2, s2, e2][h2], g: 255 * [s2, e2, e2, i2, o2, o2][h2], b: 255 * [o2, o2, s2, e2, e2, i2][h2], a: u2 };
14682    };
14683    var g = function(r3) {
14684      return { h: u(r3.h), s: e(r3.s, 0, 100), l: e(r3.l, 0, 100), a: e(r3.a) };
14685    };
14686    var d = function(r3) {
14687      return { h: n(r3.h), s: n(r3.s), l: n(r3.l), a: n(r3.a, 3) };
14688    };
14689    var f = function(r3) {
14690      return b((n2 = (t2 = r3).s, { h: t2.h, s: (n2 *= ((e2 = t2.l) < 50 ? e2 : 100 - e2) / 100) > 0 ? 2 * n2 / (e2 + n2) * 100 : 0, v: e2 + n2, a: t2.a }));
14691      var t2, n2, e2;
14692    };
14693    var c = function(r3) {
14694      return { h: (t2 = h(r3)).h, s: (u2 = (200 - (n2 = t2.s)) * (e2 = t2.v) / 100) > 0 && u2 < 200 ? n2 * e2 / 100 / (u2 <= 100 ? u2 : 200 - u2) * 100 : 0, l: u2 / 2, a: t2.a };
14695      var t2, n2, e2, u2;
14696    };
14697    var l = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i;
14698    var p = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i;
14699    var v = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i;
14700    var m = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i;
14701    var y = { string: [[function(r3) {
14702      var t2 = i.exec(r3);
14703      return t2 ? (r3 = t2[1]).length <= 4 ? { r: parseInt(r3[0] + r3[0], 16), g: parseInt(r3[1] + r3[1], 16), b: parseInt(r3[2] + r3[2], 16), a: 4 === r3.length ? n(parseInt(r3[3] + r3[3], 16) / 255, 2) : 1 } : 6 === r3.length || 8 === r3.length ? { r: parseInt(r3.substr(0, 2), 16), g: parseInt(r3.substr(2, 2), 16), b: parseInt(r3.substr(4, 2), 16), a: 8 === r3.length ? n(parseInt(r3.substr(6, 2), 16) / 255, 2) : 1 } : null : null;
14704    }, "hex"], [function(r3) {
14705      var t2 = v.exec(r3) || m.exec(r3);
14706      return t2 ? t2[2] !== t2[4] || t2[4] !== t2[6] ? null : a({ r: Number(t2[1]) / (t2[2] ? 100 / 255 : 1), g: Number(t2[3]) / (t2[4] ? 100 / 255 : 1), b: Number(t2[5]) / (t2[6] ? 100 / 255 : 1), a: void 0 === t2[7] ? 1 : Number(t2[7]) / (t2[8] ? 100 : 1) }) : null;
14707    }, "rgb"], [function(t2) {
14708      var n2 = l.exec(t2) || p.exec(t2);
14709      if (!n2) return null;
14710      var e2, u2, a2 = g({ h: (e2 = n2[1], u2 = n2[2], void 0 === u2 && (u2 = "deg"), Number(e2) * (r2[u2] || 1)), s: Number(n2[3]), l: Number(n2[4]), a: void 0 === n2[5] ? 1 : Number(n2[5]) / (n2[6] ? 100 : 1) });
14711      return f(a2);
14712    }, "hsl"]], object: [[function(r3) {
14713      var n2 = r3.r, e2 = r3.g, u2 = r3.b, o2 = r3.a, i2 = void 0 === o2 ? 1 : o2;
14714      return t(n2) && t(e2) && t(u2) ? a({ r: Number(n2), g: Number(e2), b: Number(u2), a: Number(i2) }) : null;
14715    }, "rgb"], [function(r3) {
14716      var n2 = r3.h, e2 = r3.s, u2 = r3.l, a2 = r3.a, o2 = void 0 === a2 ? 1 : a2;
14717      if (!t(n2) || !t(e2) || !t(u2)) return null;
14718      var i2 = g({ h: Number(n2), s: Number(e2), l: Number(u2), a: Number(o2) });
14719      return f(i2);
14720    }, "hsl"], [function(r3) {
14721      var n2 = r3.h, a2 = r3.s, o2 = r3.v, i2 = r3.a, s2 = void 0 === i2 ? 1 : i2;
14722      if (!t(n2) || !t(a2) || !t(o2)) return null;
14723      var h2 = (function(r4) {
14724        return { h: u(r4.h), s: e(r4.s, 0, 100), v: e(r4.v, 0, 100), a: e(r4.a) };
14725      })({ h: Number(n2), s: Number(a2), v: Number(o2), a: Number(s2) });
14726      return b(h2);
14727    }, "hsv"]] };
14728    var N = function(r3, t2) {
14729      for (var n2 = 0; n2 < t2.length; n2++) {
14730        var e2 = t2[n2][0](r3);
14731        if (e2) return [e2, t2[n2][1]];
14732      }
14733      return [null, void 0];
14734    };
14735    var x = function(r3) {
14736      return "string" == typeof r3 ? N(r3.trim(), y.string) : "object" == typeof r3 && null !== r3 ? N(r3, y.object) : [null, void 0];
14737    };
14738    var M = function(r3, t2) {
14739      var n2 = c(r3);
14740      return { h: n2.h, s: e(n2.s + 100 * t2, 0, 100), l: n2.l, a: n2.a };
14741    };
14742    var H = function(r3) {
14743      return (299 * r3.r + 587 * r3.g + 114 * r3.b) / 1e3 / 255;
14744    };
14745    var $ = function(r3, t2) {
14746      var n2 = c(r3);
14747      return { h: n2.h, s: n2.s, l: e(n2.l + 100 * t2, 0, 100), a: n2.a };
14748    };
14749    var j = (function() {
14750      function r3(r4) {
14751        this.parsed = x(r4)[0], this.rgba = this.parsed || { r: 0, g: 0, b: 0, a: 1 };
14752      }
14753      return r3.prototype.isValid = function() {
14754        return null !== this.parsed;
14755      }, r3.prototype.brightness = function() {
14756        return n(H(this.rgba), 2);
14757      }, r3.prototype.isDark = function() {
14758        return H(this.rgba) < 0.5;
14759      }, r3.prototype.isLight = function() {
14760        return H(this.rgba) >= 0.5;
14761      }, r3.prototype.toHex = function() {
14762        return r4 = o(this.rgba), t2 = r4.r, e2 = r4.g, u2 = r4.b, i2 = (a2 = r4.a) < 1 ? s(n(255 * a2)) : "", "#" + s(t2) + s(e2) + s(u2) + i2;
14763        var r4, t2, e2, u2, a2, i2;
14764      }, r3.prototype.toRgb = function() {
14765        return o(this.rgba);
14766      }, r3.prototype.toRgbString = function() {
14767        return r4 = o(this.rgba), t2 = r4.r, n2 = r4.g, e2 = r4.b, (u2 = r4.a) < 1 ? "rgba(" + t2 + ", " + n2 + ", " + e2 + ", " + u2 + ")" : "rgb(" + t2 + ", " + n2 + ", " + e2 + ")";
14768        var r4, t2, n2, e2, u2;
14769      }, r3.prototype.toHsl = function() {
14770        return d(c(this.rgba));
14771      }, r3.prototype.toHslString = function() {
14772        return r4 = d(c(this.rgba)), t2 = r4.h, n2 = r4.s, e2 = r4.l, (u2 = r4.a) < 1 ? "hsla(" + t2 + ", " + n2 + "%, " + e2 + "%, " + u2 + ")" : "hsl(" + t2 + ", " + n2 + "%, " + e2 + "%)";
14773        var r4, t2, n2, e2, u2;
14774      }, r3.prototype.toHsv = function() {
14775        return r4 = h(this.rgba), { h: n(r4.h), s: n(r4.s), v: n(r4.v), a: n(r4.a, 3) };
14776        var r4;
14777      }, r3.prototype.invert = function() {
14778        return w({ r: 255 - (r4 = this.rgba).r, g: 255 - r4.g, b: 255 - r4.b, a: r4.a });
14779        var r4;
14780      }, r3.prototype.saturate = function(r4) {
14781        return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, r4));
14782      }, r3.prototype.desaturate = function(r4) {
14783        return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, -r4));
14784      }, r3.prototype.grayscale = function() {
14785        return w(M(this.rgba, -1));
14786      }, r3.prototype.lighten = function(r4) {
14787        return void 0 === r4 && (r4 = 0.1), w($(this.rgba, r4));
14788      }, r3.prototype.darken = function(r4) {
14789        return void 0 === r4 && (r4 = 0.1), w($(this.rgba, -r4));
14790      }, r3.prototype.rotate = function(r4) {
14791        return void 0 === r4 && (r4 = 15), this.hue(this.hue() + r4);
14792      }, r3.prototype.alpha = function(r4) {
14793        return "number" == typeof r4 ? w({ r: (t2 = this.rgba).r, g: t2.g, b: t2.b, a: r4 }) : n(this.rgba.a, 3);
14794        var t2;
14795      }, r3.prototype.hue = function(r4) {
14796        var t2 = c(this.rgba);
14797        return "number" == typeof r4 ? w({ h: r4, s: t2.s, l: t2.l, a: t2.a }) : n(t2.h);
14798      }, r3.prototype.isEqual = function(r4) {
14799        return this.toHex() === w(r4).toHex();
14800      }, r3;
14801    })();
14802    var w = function(r3) {
14803      return r3 instanceof j ? r3 : new j(r3);
14804    };
14805  
14806    // packages/dataviews/build-module/dataform-controls/color.js
14807    var import_components46 = __toESM(require_components());
14808    var import_element49 = __toESM(require_element());
14809    var import_jsx_runtime90 = __toESM(require_jsx_runtime());
14810    var { ValidatedInputControl: ValidatedInputControl3, Picker } = unlock(import_components46.privateApis);
14811    var ColorPicker = ({
14812      color,
14813      onColorChange
14814    }) => {
14815      const validColor = color && w(color).isValid() ? color : "#ffffff";
14816      return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
14817        import_components46.Dropdown,
14818        {
14819          renderToggle: ({ onToggle, isOpen }) => /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(import_components46.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
14820            "button",
14821            {
14822              type: "button",
14823              onClick: onToggle,
14824              style: {
14825                width: "24px",
14826                height: "24px",
14827                borderRadius: "50%",
14828                backgroundColor: validColor,
14829                border: "1px solid #ddd",
14830                cursor: "pointer",
14831                outline: isOpen ? "2px solid #007cba" : "none",
14832                outlineOffset: "2px",
14833                display: "flex",
14834                alignItems: "center",
14835                justifyContent: "center",
14836                padding: 0,
14837                margin: 0
14838              },
14839              "aria-label": "Open color picker"
14840            }
14841          ) }),
14842          renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("div", { style: { padding: "16px" }, children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
14843            Picker,
14844            {
14845              color: w(validColor),
14846              onChange: onColorChange,
14847              enableAlpha: true
14848            }
14849          ) })
14850        }
14851      );
14852    };
14853    function Color({
14854      data,
14855      field,
14856      onChange,
14857      hideLabelFromVision,
14858      validity
14859    }) {
14860      const { label, placeholder, description, setValue, isValid: isValid2 } = field;
14861      const value = field.getValue({ item: data }) || "";
14862      const handleColorChange = (0, import_element49.useCallback)(
14863        (colorObject) => {
14864          onChange(setValue({ item: data, value: colorObject.toHex() }));
14865        },
14866        [data, onChange, setValue]
14867      );
14868      const handleInputChange = (0, import_element49.useCallback)(
14869        (newValue) => {
14870          onChange(setValue({ item: data, value: newValue || "" }));
14871        },
14872        [data, onChange, setValue]
14873      );
14874      return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
14875        ValidatedInputControl3,
14876        {
14877          required: !!field.isValid?.required,
14878          customValidity: getCustomValidity(isValid2, validity),
14879          label,
14880          placeholder,
14881          value,
14882          help: description,
14883          onChange: handleInputChange,
14884          hideLabelFromVision,
14885          type: "text",
14886          prefix: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
14887            ColorPicker,
14888            {
14889              color: value,
14890              onColorChange: handleColorChange
14891            }
14892          )
14893        }
14894      );
14895    }
14896  
14897    // packages/dataviews/build-module/dataform-controls/password.js
14898    var import_components47 = __toESM(require_components());
14899    var import_element50 = __toESM(require_element());
14900    var import_i18n41 = __toESM(require_i18n());
14901    var import_jsx_runtime91 = __toESM(require_jsx_runtime());
14902    function Password({
14903      data,
14904      field,
14905      onChange,
14906      hideLabelFromVision,
14907      validity
14908    }) {
14909      const [isVisible2, setIsVisible] = (0, import_element50.useState)(false);
14910      const toggleVisibility = (0, import_element50.useCallback)(() => {
14911        setIsVisible((prev) => !prev);
14912      }, []);
14913      return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
14914        ValidatedText,
14915        {
14916          ...{
14917            data,
14918            field,
14919            onChange,
14920            hideLabelFromVision,
14921            validity,
14922            type: isVisible2 ? "text" : "password",
14923            suffix: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(import_components47.__experimentalInputControlSuffixWrapper, { variant: "control", children: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
14924              import_components47.Button,
14925              {
14926                icon: isVisible2 ? unseen_default : seen_default,
14927                onClick: toggleVisibility,
14928                size: "small",
14929                label: isVisible2 ? (0, import_i18n41.__)("Hide password") : (0, import_i18n41.__)("Show password")
14930              }
14931            ) })
14932          }
14933        }
14934      );
14935    }
14936  
14937    // packages/dataviews/build-module/field-types/utils/has-elements.js
14938    function hasElements(field) {
14939      return Array.isArray(field.elements) && field.elements.length > 0 || typeof field.getElements === "function";
14940    }
14941  
14942    // packages/dataviews/build-module/dataform-controls/index.js
14943    var import_jsx_runtime92 = __toESM(require_jsx_runtime());
14944    var FORM_CONTROLS = {
14945      array: ArrayControl,
14946      checkbox: Checkbox,
14947      color: Color,
14948      datetime: DateTime,
14949      date: DateControl,
14950      email: Email,
14951      telephone: Telephone,
14952      url: Url,
14953      integer: Integer,
14954      number: Number2,
14955      password: Password,
14956      radio: Radio,
14957      select: Select,
14958      text: Text2,
14959      toggle: Toggle,
14960      textarea: Textarea,
14961      toggleGroup: ToggleGroup
14962    };
14963    function isEditConfig(value) {
14964      return value && typeof value === "object" && typeof value.control === "string";
14965    }
14966    function createConfiguredControl(config) {
14967      const { control, ...controlConfig } = config;
14968      const BaseControlType = getControlByType(control);
14969      if (BaseControlType === null) {
14970        return null;
14971      }
14972      return function ConfiguredControl(props) {
14973        return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(BaseControlType, { ...props, config: controlConfig });
14974      };
14975    }
14976    function getControl(field, fallback) {
14977      if (typeof field.Edit === "function") {
14978        return field.Edit;
14979      }
14980      if (typeof field.Edit === "string") {
14981        return getControlByType(field.Edit);
14982      }
14983      if (isEditConfig(field.Edit)) {
14984        return createConfiguredControl(field.Edit);
14985      }
14986      if (hasElements(field) && field.type !== "array") {
14987        return getControlByType("select");
14988      }
14989      if (fallback === null) {
14990        return null;
14991      }
14992      return getControlByType(fallback);
14993    }
14994    function getControlByType(type) {
14995      if (Object.keys(FORM_CONTROLS).includes(type)) {
14996        return FORM_CONTROLS[type];
14997      }
14998      return null;
14999    }
15000  
15001    // packages/dataviews/build-module/field-types/utils/get-filter-by.js
15002    function getFilterBy(field, defaultOperators, validOperators) {
15003      if (field.filterBy === false) {
15004        return false;
15005      }
15006      const operators = field.filterBy?.operators?.filter(
15007        (op) => validOperators.includes(op)
15008      ) ?? defaultOperators;
15009      if (operators.length === 0) {
15010        return false;
15011      }
15012      return {
15013        isPrimary: !!field.filterBy?.isPrimary,
15014        operators
15015      };
15016    }
15017    var get_filter_by_default = getFilterBy;
15018  
15019    // packages/dataviews/build-module/field-types/utils/get-value-from-id.js
15020    var getValueFromId = (id) => ({ item }) => {
15021      const path = id.split(".");
15022      let value = item;
15023      for (const segment of path) {
15024        if (value.hasOwnProperty(segment)) {
15025          value = value[segment];
15026        } else {
15027          value = void 0;
15028        }
15029      }
15030      return value;
15031    };
15032    var get_value_from_id_default = getValueFromId;
15033  
15034    // packages/dataviews/build-module/field-types/utils/set-value-from-id.js
15035    var setValueFromId = (id) => ({ value }) => {
15036      const path = id.split(".");
15037      const result = {};
15038      let current = result;
15039      for (const segment of path.slice(0, -1)) {
15040        current[segment] = {};
15041        current = current[segment];
15042      }
15043      current[path.at(-1)] = value;
15044      return result;
15045    };
15046    var set_value_from_id_default = setValueFromId;
15047  
15048    // packages/dataviews/build-module/field-types/email.js
15049    var import_i18n42 = __toESM(require_i18n());
15050  
15051    // packages/dataviews/build-module/field-types/utils/render-from-elements.js
15052    function RenderFromElements({
15053      item,
15054      field
15055    }) {
15056      const { elements, isLoading } = useElements({
15057        elements: field.elements,
15058        getElements: field.getElements
15059      });
15060      const value = field.getValue({ item });
15061      if (isLoading) {
15062        return value;
15063      }
15064      if (elements.length === 0) {
15065        return value;
15066      }
15067      return elements?.find((element) => element.value === value)?.label || field.getValue({ item });
15068    }
15069  
15070    // packages/dataviews/build-module/field-types/utils/render-default.js
15071    var import_jsx_runtime93 = __toESM(require_jsx_runtime());
15072    function render({
15073      item,
15074      field
15075    }) {
15076      if (field.hasElements) {
15077        return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(RenderFromElements, { item, field });
15078      }
15079      return field.getValueFormatted({ item, field });
15080    }
15081  
15082    // packages/dataviews/build-module/field-types/utils/sort-text.js
15083    var sort_text_default = (a2, b2, direction) => {
15084      return direction === "asc" ? a2.localeCompare(b2) : b2.localeCompare(a2);
15085    };
15086  
15087    // packages/dataviews/build-module/field-types/utils/is-valid-required.js
15088    function isValidRequired(item, field) {
15089      const value = field.getValue({ item });
15090      return ![void 0, "", null].includes(value);
15091    }
15092  
15093    // packages/dataviews/build-module/field-types/utils/is-valid-min-length.js
15094    function isValidMinLength(item, field) {
15095      if (typeof field.isValid.minLength?.constraint !== "number") {
15096        return false;
15097      }
15098      const value = field.getValue({ item });
15099      if ([void 0, "", null].includes(value)) {
15100        return true;
15101      }
15102      return String(value).length >= field.isValid.minLength.constraint;
15103    }
15104  
15105    // packages/dataviews/build-module/field-types/utils/is-valid-max-length.js
15106    function isValidMaxLength(item, field) {
15107      if (typeof field.isValid.maxLength?.constraint !== "number") {
15108        return false;
15109      }
15110      const value = field.getValue({ item });
15111      if ([void 0, "", null].includes(value)) {
15112        return true;
15113      }
15114      return String(value).length <= field.isValid.maxLength.constraint;
15115    }
15116  
15117    // packages/dataviews/build-module/field-types/utils/is-valid-pattern.js
15118    function isValidPattern(item, field) {
15119      if (field.isValid.pattern?.constraint === void 0) {
15120        return true;
15121      }
15122      try {
15123        const regexp = new RegExp(field.isValid.pattern.constraint);
15124        const value = field.getValue({ item });
15125        if ([void 0, "", null].includes(value)) {
15126          return true;
15127        }
15128        return regexp.test(String(value));
15129      } catch {
15130        return false;
15131      }
15132    }
15133  
15134    // packages/dataviews/build-module/field-types/utils/is-valid-elements.js
15135    function isValidElements(item, field) {
15136      const elements = field.elements ?? [];
15137      const validValues = elements.map((el) => el.value);
15138      if (validValues.length === 0) {
15139        return true;
15140      }
15141      const value = field.getValue({ item });
15142      return [].concat(value).every((v2) => validValues.includes(v2));
15143    }
15144  
15145    // packages/dataviews/build-module/field-types/utils/get-value-formatted-default.js
15146    function getValueFormatted({
15147      item,
15148      field
15149    }) {
15150      return field.getValue({ item });
15151    }
15152    var get_value_formatted_default_default = getValueFormatted;
15153  
15154    // packages/dataviews/build-module/field-types/email.js
15155    var emailRegex = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
15156    function isValidCustom(item, field) {
15157      const value = field.getValue({ item });
15158      if (![void 0, "", null].includes(value) && !emailRegex.test(value)) {
15159        return (0, import_i18n42.__)("Value must be a valid email address.");
15160      }
15161      return null;
15162    }
15163    var email_default = {
15164      type: "email",
15165      render,
15166      Edit: "email",
15167      sort: sort_text_default,
15168      enableSorting: true,
15169      enableGlobalSearch: false,
15170      defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
15171      validOperators: [
15172        OPERATOR_IS,
15173        OPERATOR_IS_NOT,
15174        OPERATOR_CONTAINS,
15175        OPERATOR_NOT_CONTAINS,
15176        OPERATOR_STARTS_WITH,
15177        // Multiple selection
15178        OPERATOR_IS_ANY,
15179        OPERATOR_IS_NONE,
15180        OPERATOR_IS_ALL,
15181        OPERATOR_IS_NOT_ALL
15182      ],
15183      format: {},
15184      getValueFormatted: get_value_formatted_default_default,
15185      validate: {
15186        required: isValidRequired,
15187        pattern: isValidPattern,
15188        minLength: isValidMinLength,
15189        maxLength: isValidMaxLength,
15190        elements: isValidElements,
15191        custom: isValidCustom
15192      }
15193    };
15194  
15195    // packages/dataviews/build-module/field-types/integer.js
15196    var import_i18n43 = __toESM(require_i18n());
15197  
15198    // packages/dataviews/build-module/field-types/utils/sort-number.js
15199    var sort_number_default = (a2, b2, direction) => {
15200      return direction === "asc" ? a2 - b2 : b2 - a2;
15201    };
15202  
15203    // packages/dataviews/build-module/field-types/utils/is-valid-min.js
15204    function isValidMin(item, field) {
15205      if (typeof field.isValid.min?.constraint !== "number") {
15206        return false;
15207      }
15208      const value = field.getValue({ item });
15209      if ([void 0, "", null].includes(value)) {
15210        return true;
15211      }
15212      return Number(value) >= field.isValid.min.constraint;
15213    }
15214  
15215    // packages/dataviews/build-module/field-types/utils/is-valid-max.js
15216    function isValidMax(item, field) {
15217      if (typeof field.isValid.max?.constraint !== "number") {
15218        return false;
15219      }
15220      const value = field.getValue({ item });
15221      if ([void 0, "", null].includes(value)) {
15222        return true;
15223      }
15224      return Number(value) <= field.isValid.max.constraint;
15225    }
15226  
15227    // packages/dataviews/build-module/field-types/integer.js
15228    var format2 = {
15229      separatorThousand: ","
15230    };
15231    function getValueFormatted2({
15232      item,
15233      field
15234    }) {
15235      let value = field.getValue({ item });
15236      if (value === null || value === void 0) {
15237        return "";
15238      }
15239      value = Number(value);
15240      if (!Number.isFinite(value)) {
15241        return String(value);
15242      }
15243      let formatInteger;
15244      if (field.type !== "integer") {
15245        formatInteger = format2;
15246      } else {
15247        formatInteger = field.format;
15248      }
15249      const { separatorThousand } = formatInteger;
15250      const integerValue = Math.trunc(value);
15251      if (!separatorThousand) {
15252        return String(integerValue);
15253      }
15254      return String(integerValue).replace(
15255        /\B(?=(\d{3})+(?!\d))/g,
15256        separatorThousand
15257      );
15258    }
15259    function isValidCustom2(item, field) {
15260      const value = field.getValue({ item });
15261      if (![void 0, "", null].includes(value) && !Number.isInteger(value)) {
15262        return (0, import_i18n43.__)("Value must be an integer.");
15263      }
15264      return null;
15265    }
15266    var integer_default = {
15267      type: "integer",
15268      render,
15269      Edit: "integer",
15270      sort: sort_number_default,
15271      enableSorting: true,
15272      enableGlobalSearch: false,
15273      defaultOperators: [
15274        OPERATOR_IS,
15275        OPERATOR_IS_NOT,
15276        OPERATOR_LESS_THAN,
15277        OPERATOR_GREATER_THAN,
15278        OPERATOR_LESS_THAN_OR_EQUAL,
15279        OPERATOR_GREATER_THAN_OR_EQUAL,
15280        OPERATOR_BETWEEN
15281      ],
15282      validOperators: [
15283        // Single-selection
15284        OPERATOR_IS,
15285        OPERATOR_IS_NOT,
15286        OPERATOR_LESS_THAN,
15287        OPERATOR_GREATER_THAN,
15288        OPERATOR_LESS_THAN_OR_EQUAL,
15289        OPERATOR_GREATER_THAN_OR_EQUAL,
15290        OPERATOR_BETWEEN,
15291        // Multiple-selection
15292        OPERATOR_IS_ANY,
15293        OPERATOR_IS_NONE,
15294        OPERATOR_IS_ALL,
15295        OPERATOR_IS_NOT_ALL
15296      ],
15297      format: format2,
15298      getValueFormatted: getValueFormatted2,
15299      validate: {
15300        required: isValidRequired,
15301        min: isValidMin,
15302        max: isValidMax,
15303        elements: isValidElements,
15304        custom: isValidCustom2
15305      }
15306    };
15307  
15308    // packages/dataviews/build-module/field-types/number.js
15309    var import_i18n44 = __toESM(require_i18n());
15310    var format3 = {
15311      separatorThousand: ",",
15312      separatorDecimal: ".",
15313      decimals: 2
15314    };
15315    function getValueFormatted3({
15316      item,
15317      field
15318    }) {
15319      let value = field.getValue({ item });
15320      if (value === null || value === void 0) {
15321        return "";
15322      }
15323      value = Number(value);
15324      if (!Number.isFinite(value)) {
15325        return String(value);
15326      }
15327      let formatNumber;
15328      if (field.type !== "number") {
15329        formatNumber = format3;
15330      } else {
15331        formatNumber = field.format;
15332      }
15333      const { separatorThousand, separatorDecimal, decimals } = formatNumber;
15334      const fixedValue = value.toFixed(decimals);
15335      const [integerPart, decimalPart] = fixedValue.split(".");
15336      const formattedInteger = separatorThousand ? integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, separatorThousand) : integerPart;
15337      return decimals === 0 ? formattedInteger : formattedInteger + separatorDecimal + decimalPart;
15338    }
15339    function isEmpty2(value) {
15340      return value === "" || value === void 0 || value === null;
15341    }
15342    function isValidCustom3(item, field) {
15343      const value = field.getValue({ item });
15344      if (!isEmpty2(value) && !Number.isFinite(value)) {
15345        return (0, import_i18n44.__)("Value must be a number.");
15346      }
15347      return null;
15348    }
15349    var number_default = {
15350      type: "number",
15351      render,
15352      Edit: "number",
15353      sort: sort_number_default,
15354      enableSorting: true,
15355      enableGlobalSearch: false,
15356      defaultOperators: [
15357        OPERATOR_IS,
15358        OPERATOR_IS_NOT,
15359        OPERATOR_LESS_THAN,
15360        OPERATOR_GREATER_THAN,
15361        OPERATOR_LESS_THAN_OR_EQUAL,
15362        OPERATOR_GREATER_THAN_OR_EQUAL,
15363        OPERATOR_BETWEEN
15364      ],
15365      validOperators: [
15366        // Single-selection
15367        OPERATOR_IS,
15368        OPERATOR_IS_NOT,
15369        OPERATOR_LESS_THAN,
15370        OPERATOR_GREATER_THAN,
15371        OPERATOR_LESS_THAN_OR_EQUAL,
15372        OPERATOR_GREATER_THAN_OR_EQUAL,
15373        OPERATOR_BETWEEN,
15374        // Multiple-selection
15375        OPERATOR_IS_ANY,
15376        OPERATOR_IS_NONE,
15377        OPERATOR_IS_ALL,
15378        OPERATOR_IS_NOT_ALL
15379      ],
15380      format: format3,
15381      getValueFormatted: getValueFormatted3,
15382      validate: {
15383        required: isValidRequired,
15384        min: isValidMin,
15385        max: isValidMax,
15386        elements: isValidElements,
15387        custom: isValidCustom3
15388      }
15389    };
15390  
15391    // packages/dataviews/build-module/field-types/text.js
15392    var text_default = {
15393      type: "text",
15394      render,
15395      Edit: "text",
15396      sort: sort_text_default,
15397      enableSorting: true,
15398      enableGlobalSearch: false,
15399      defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
15400      validOperators: [
15401        // Single selection
15402        OPERATOR_IS,
15403        OPERATOR_IS_NOT,
15404        OPERATOR_CONTAINS,
15405        OPERATOR_NOT_CONTAINS,
15406        OPERATOR_STARTS_WITH,
15407        // Multiple selection
15408        OPERATOR_IS_ANY,
15409        OPERATOR_IS_NONE,
15410        OPERATOR_IS_ALL,
15411        OPERATOR_IS_NOT_ALL
15412      ],
15413      format: {},
15414      getValueFormatted: get_value_formatted_default_default,
15415      validate: {
15416        required: isValidRequired,
15417        pattern: isValidPattern,
15418        minLength: isValidMinLength,
15419        maxLength: isValidMaxLength,
15420        elements: isValidElements
15421      }
15422    };
15423  
15424    // packages/dataviews/build-module/field-types/datetime.js
15425    var import_date5 = __toESM(require_date());
15426    var format4 = {
15427      datetime: (0, import_date5.getSettings)().formats.datetime,
15428      weekStartsOn: (0, import_date5.getSettings)().l10n.startOfWeek
15429    };
15430    function getValueFormatted4({
15431      item,
15432      field
15433    }) {
15434      const value = field.getValue({ item });
15435      if (["", void 0, null].includes(value)) {
15436        return "";
15437      }
15438      let formatDatetime;
15439      if (field.type !== "datetime") {
15440        formatDatetime = format4;
15441      } else {
15442        formatDatetime = field.format;
15443      }
15444      return (0, import_date5.dateI18n)(formatDatetime.datetime, (0, import_date5.getDate)(value));
15445    }
15446    var sort = (a2, b2, direction) => {
15447      const timeA = new Date(a2).getTime();
15448      const timeB = new Date(b2).getTime();
15449      return direction === "asc" ? timeA - timeB : timeB - timeA;
15450    };
15451    var datetime_default = {
15452      type: "datetime",
15453      render,
15454      Edit: "datetime",
15455      sort,
15456      enableSorting: true,
15457      enableGlobalSearch: false,
15458      defaultOperators: [
15459        OPERATOR_ON,
15460        OPERATOR_NOT_ON,
15461        OPERATOR_BEFORE,
15462        OPERATOR_AFTER,
15463        OPERATOR_BEFORE_INC,
15464        OPERATOR_AFTER_INC,
15465        OPERATOR_IN_THE_PAST,
15466        OPERATOR_OVER
15467      ],
15468      validOperators: [
15469        OPERATOR_ON,
15470        OPERATOR_NOT_ON,
15471        OPERATOR_BEFORE,
15472        OPERATOR_AFTER,
15473        OPERATOR_BEFORE_INC,
15474        OPERATOR_AFTER_INC,
15475        OPERATOR_IN_THE_PAST,
15476        OPERATOR_OVER
15477      ],
15478      format: format4,
15479      getValueFormatted: getValueFormatted4,
15480      validate: {
15481        required: isValidRequired,
15482        elements: isValidElements
15483      }
15484    };
15485  
15486    // packages/dataviews/build-module/field-types/date.js
15487    var import_date6 = __toESM(require_date());
15488    var format5 = {
15489      date: (0, import_date6.getSettings)().formats.date,
15490      weekStartsOn: (0, import_date6.getSettings)().l10n.startOfWeek
15491    };
15492    function getValueFormatted5({
15493      item,
15494      field
15495    }) {
15496      const value = field.getValue({ item });
15497      if (["", void 0, null].includes(value)) {
15498        return "";
15499      }
15500      let formatDate2;
15501      if (field.type !== "date") {
15502        formatDate2 = format5;
15503      } else {
15504        formatDate2 = field.format;
15505      }
15506      return (0, import_date6.dateI18n)(formatDate2.date, (0, import_date6.getDate)(value));
15507    }
15508    var sort2 = (a2, b2, direction) => {
15509      const timeA = new Date(a2).getTime();
15510      const timeB = new Date(b2).getTime();
15511      return direction === "asc" ? timeA - timeB : timeB - timeA;
15512    };
15513    var date_default = {
15514      type: "date",
15515      render,
15516      Edit: "date",
15517      sort: sort2,
15518      enableSorting: true,
15519      enableGlobalSearch: false,
15520      defaultOperators: [
15521        OPERATOR_ON,
15522        OPERATOR_NOT_ON,
15523        OPERATOR_BEFORE,
15524        OPERATOR_AFTER,
15525        OPERATOR_BEFORE_INC,
15526        OPERATOR_AFTER_INC,
15527        OPERATOR_IN_THE_PAST,
15528        OPERATOR_OVER,
15529        OPERATOR_BETWEEN
15530      ],
15531      validOperators: [
15532        OPERATOR_ON,
15533        OPERATOR_NOT_ON,
15534        OPERATOR_BEFORE,
15535        OPERATOR_AFTER,
15536        OPERATOR_BEFORE_INC,
15537        OPERATOR_AFTER_INC,
15538        OPERATOR_IN_THE_PAST,
15539        OPERATOR_OVER,
15540        OPERATOR_BETWEEN
15541      ],
15542      format: format5,
15543      getValueFormatted: getValueFormatted5,
15544      validate: {
15545        required: isValidRequired,
15546        elements: isValidElements
15547      }
15548    };
15549  
15550    // packages/dataviews/build-module/field-types/boolean.js
15551    var import_i18n45 = __toESM(require_i18n());
15552  
15553    // packages/dataviews/build-module/field-types/utils/is-valid-required-for-bool.js
15554    function isValidRequiredForBool(item, field) {
15555      const value = field.getValue({ item });
15556      return value === true;
15557    }
15558  
15559    // packages/dataviews/build-module/field-types/boolean.js
15560    function getValueFormatted6({
15561      item,
15562      field
15563    }) {
15564      const value = field.getValue({ item });
15565      if (value === true) {
15566        return (0, import_i18n45.__)("True");
15567      }
15568      if (value === false) {
15569        return (0, import_i18n45.__)("False");
15570      }
15571      return "";
15572    }
15573    function isValidCustom4(item, field) {
15574      const value = field.getValue({ item });
15575      if (![void 0, "", null].includes(value) && ![true, false].includes(value)) {
15576        return (0, import_i18n45.__)("Value must be true, false, or undefined");
15577      }
15578      return null;
15579    }
15580    var sort3 = (a2, b2, direction) => {
15581      const boolA = Boolean(a2);
15582      const boolB = Boolean(b2);
15583      if (boolA === boolB) {
15584        return 0;
15585      }
15586      if (direction === "asc") {
15587        return boolA ? 1 : -1;
15588      }
15589      return boolA ? -1 : 1;
15590    };
15591    var boolean_default = {
15592      type: "boolean",
15593      render,
15594      Edit: "checkbox",
15595      sort: sort3,
15596      validate: {
15597        required: isValidRequiredForBool,
15598        elements: isValidElements,
15599        custom: isValidCustom4
15600      },
15601      enableSorting: true,
15602      enableGlobalSearch: false,
15603      defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT],
15604      validOperators: [OPERATOR_IS, OPERATOR_IS_NOT],
15605      format: {},
15606      getValueFormatted: getValueFormatted6
15607    };
15608  
15609    // packages/dataviews/build-module/field-types/media.js
15610    var media_default = {
15611      type: "media",
15612      render: () => null,
15613      Edit: null,
15614      sort: () => 0,
15615      enableSorting: false,
15616      enableGlobalSearch: false,
15617      defaultOperators: [],
15618      validOperators: [],
15619      format: {},
15620      getValueFormatted: get_value_formatted_default_default,
15621      // cannot validate any constraint, so
15622      // the only available validation for the field author
15623      // would be providing a custom validator.
15624      validate: {}
15625    };
15626  
15627    // packages/dataviews/build-module/field-types/array.js
15628    var import_i18n46 = __toESM(require_i18n());
15629  
15630    // packages/dataviews/build-module/field-types/utils/is-valid-required-for-array.js
15631    function isValidRequiredForArray(item, field) {
15632      const value = field.getValue({ item });
15633      return Array.isArray(value) && value.length > 0 && value.every(
15634        (element) => ![void 0, "", null].includes(element)
15635      );
15636    }
15637  
15638    // packages/dataviews/build-module/field-types/array.js
15639    function getValueFormatted7({
15640      item,
15641      field
15642    }) {
15643      const value = field.getValue({ item });
15644      const arr = Array.isArray(value) ? value : [];
15645      return arr.join(", ");
15646    }
15647    function render2({ item, field }) {
15648      return getValueFormatted7({ item, field });
15649    }
15650    function isValidCustom5(item, field) {
15651      const value = field.getValue({ item });
15652      if (![void 0, "", null].includes(value) && !Array.isArray(value)) {
15653        return (0, import_i18n46.__)("Value must be an array.");
15654      }
15655      if (!value.every((v2) => typeof v2 === "string")) {
15656        return (0, import_i18n46.__)("Every value must be a string.");
15657      }
15658      return null;
15659    }
15660    var sort4 = (a2, b2, direction) => {
15661      const arrA = Array.isArray(a2) ? a2 : [];
15662      const arrB = Array.isArray(b2) ? b2 : [];
15663      if (arrA.length !== arrB.length) {
15664        return direction === "asc" ? arrA.length - arrB.length : arrB.length - arrA.length;
15665      }
15666      const joinedA = arrA.join(",");
15667      const joinedB = arrB.join(",");
15668      return direction === "asc" ? joinedA.localeCompare(joinedB) : joinedB.localeCompare(joinedA);
15669    };
15670    var array_default = {
15671      type: "array",
15672      render: render2,
15673      Edit: "array",
15674      sort: sort4,
15675      enableSorting: true,
15676      enableGlobalSearch: false,
15677      defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
15678      validOperators: [
15679        OPERATOR_IS_ANY,
15680        OPERATOR_IS_NONE,
15681        OPERATOR_IS_ALL,
15682        OPERATOR_IS_NOT_ALL
15683      ],
15684      format: {},
15685      getValueFormatted: getValueFormatted7,
15686      validate: {
15687        required: isValidRequiredForArray,
15688        elements: isValidElements,
15689        custom: isValidCustom5
15690      }
15691    };
15692  
15693    // packages/dataviews/build-module/field-types/password.js
15694    function getValueFormatted8({
15695      item,
15696      field
15697    }) {
15698      return field.getValue({ item }) ? "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" : "";
15699    }
15700    var password_default = {
15701      type: "password",
15702      render,
15703      Edit: "password",
15704      sort: () => 0,
15705      // Passwords should not be sortable for security reasons
15706      enableSorting: false,
15707      enableGlobalSearch: false,
15708      defaultOperators: [],
15709      validOperators: [],
15710      format: {},
15711      getValueFormatted: getValueFormatted8,
15712      validate: {
15713        required: isValidRequired,
15714        pattern: isValidPattern,
15715        minLength: isValidMinLength,
15716        maxLength: isValidMaxLength,
15717        elements: isValidElements
15718      }
15719    };
15720  
15721    // packages/dataviews/build-module/field-types/telephone.js
15722    var telephone_default = {
15723      type: "telephone",
15724      render,
15725      Edit: "telephone",
15726      sort: sort_text_default,
15727      enableSorting: true,
15728      enableGlobalSearch: false,
15729      defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
15730      validOperators: [
15731        OPERATOR_IS,
15732        OPERATOR_IS_NOT,
15733        OPERATOR_CONTAINS,
15734        OPERATOR_NOT_CONTAINS,
15735        OPERATOR_STARTS_WITH,
15736        // Multiple selection
15737        OPERATOR_IS_ANY,
15738        OPERATOR_IS_NONE,
15739        OPERATOR_IS_ALL,
15740        OPERATOR_IS_NOT_ALL
15741      ],
15742      format: {},
15743      getValueFormatted: get_value_formatted_default_default,
15744      validate: {
15745        required: isValidRequired,
15746        pattern: isValidPattern,
15747        minLength: isValidMinLength,
15748        maxLength: isValidMaxLength,
15749        elements: isValidElements
15750      }
15751    };
15752  
15753    // packages/dataviews/build-module/field-types/color.js
15754    var import_i18n47 = __toESM(require_i18n());
15755    var import_jsx_runtime94 = __toESM(require_jsx_runtime());
15756    function render3({ item, field }) {
15757      if (field.hasElements) {
15758        return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(RenderFromElements, { item, field });
15759      }
15760      const value = get_value_formatted_default_default({ item, field });
15761      if (!value || !w(value).isValid()) {
15762        return value;
15763      }
15764      return /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [
15765        /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
15766          "div",
15767          {
15768            style: {
15769              width: "16px",
15770              height: "16px",
15771              borderRadius: "50%",
15772              backgroundColor: value,
15773              border: "1px solid #ddd",
15774              flexShrink: 0
15775            }
15776          }
15777        ),
15778        /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("span", { children: value })
15779      ] });
15780    }
15781    function isValidCustom6(item, field) {
15782      const value = field.getValue({ item });
15783      if (![void 0, "", null].includes(value) && !w(value).isValid()) {
15784        return (0, import_i18n47.__)("Value must be a valid color.");
15785      }
15786      return null;
15787    }
15788    var sort5 = (a2, b2, direction) => {
15789      const colorA = w(a2);
15790      const colorB = w(b2);
15791      if (!colorA.isValid() && !colorB.isValid()) {
15792        return 0;
15793      }
15794      if (!colorA.isValid()) {
15795        return direction === "asc" ? 1 : -1;
15796      }
15797      if (!colorB.isValid()) {
15798        return direction === "asc" ? -1 : 1;
15799      }
15800      const hslA = colorA.toHsl();
15801      const hslB = colorB.toHsl();
15802      if (hslA.h !== hslB.h) {
15803        return direction === "asc" ? hslA.h - hslB.h : hslB.h - hslA.h;
15804      }
15805      if (hslA.s !== hslB.s) {
15806        return direction === "asc" ? hslA.s - hslB.s : hslB.s - hslA.s;
15807      }
15808      return direction === "asc" ? hslA.l - hslB.l : hslB.l - hslA.l;
15809    };
15810    var color_default = {
15811      type: "color",
15812      render: render3,
15813      Edit: "color",
15814      sort: sort5,
15815      enableSorting: true,
15816      enableGlobalSearch: false,
15817      defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
15818      validOperators: [
15819        OPERATOR_IS,
15820        OPERATOR_IS_NOT,
15821        OPERATOR_IS_ANY,
15822        OPERATOR_IS_NONE
15823      ],
15824      format: {},
15825      getValueFormatted: get_value_formatted_default_default,
15826      validate: {
15827        required: isValidRequired,
15828        elements: isValidElements,
15829        custom: isValidCustom6
15830      }
15831    };
15832  
15833    // packages/dataviews/build-module/field-types/url.js
15834    var url_default = {
15835      type: "url",
15836      render,
15837      Edit: "url",
15838      sort: sort_text_default,
15839      enableSorting: true,
15840      enableGlobalSearch: false,
15841      defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
15842      validOperators: [
15843        OPERATOR_IS,
15844        OPERATOR_IS_NOT,
15845        OPERATOR_CONTAINS,
15846        OPERATOR_NOT_CONTAINS,
15847        OPERATOR_STARTS_WITH,
15848        // Multiple selection
15849        OPERATOR_IS_ANY,
15850        OPERATOR_IS_NONE,
15851        OPERATOR_IS_ALL,
15852        OPERATOR_IS_NOT_ALL
15853      ],
15854      format: {},
15855      getValueFormatted: get_value_formatted_default_default,
15856      validate: {
15857        required: isValidRequired,
15858        pattern: isValidPattern,
15859        minLength: isValidMinLength,
15860        maxLength: isValidMaxLength,
15861        elements: isValidElements
15862      }
15863    };
15864  
15865    // packages/dataviews/build-module/field-types/no-type.js
15866    var sort6 = (a2, b2, direction) => {
15867      if (typeof a2 === "number" && typeof b2 === "number") {
15868        return sort_number_default(a2, b2, direction);
15869      }
15870      return sort_text_default(a2, b2, direction);
15871    };
15872    var no_type_default = {
15873      // type: no type for this one
15874      render,
15875      Edit: null,
15876      sort: sort6,
15877      enableSorting: true,
15878      enableGlobalSearch: false,
15879      defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT],
15880      validOperators: getAllOperatorNames(),
15881      format: {},
15882      getValueFormatted: get_value_formatted_default_default,
15883      validate: {
15884        required: isValidRequired,
15885        elements: isValidElements
15886      }
15887    };
15888  
15889    // packages/dataviews/build-module/field-types/utils/get-is-valid.js
15890    function getIsValid(field, fieldType) {
15891      let required;
15892      if (field.isValid?.required === true && fieldType.validate.required !== void 0) {
15893        required = {
15894          constraint: true,
15895          validate: fieldType.validate.required
15896        };
15897      }
15898      let elements;
15899      if ((field.isValid?.elements === true || // elements is enabled unless the field opts-out
15900      field.isValid?.elements === void 0 && (!!field.elements || !!field.getElements)) && fieldType.validate.elements !== void 0) {
15901        elements = {
15902          constraint: true,
15903          validate: fieldType.validate.elements
15904        };
15905      }
15906      let min;
15907      if (typeof field.isValid?.min === "number" && fieldType.validate.min !== void 0) {
15908        min = {
15909          constraint: field.isValid.min,
15910          validate: fieldType.validate.min
15911        };
15912      }
15913      let max;
15914      if (typeof field.isValid?.max === "number" && fieldType.validate.max !== void 0) {
15915        max = {
15916          constraint: field.isValid.max,
15917          validate: fieldType.validate.max
15918        };
15919      }
15920      let minLength;
15921      if (typeof field.isValid?.minLength === "number" && fieldType.validate.minLength !== void 0) {
15922        minLength = {
15923          constraint: field.isValid.minLength,
15924          validate: fieldType.validate.minLength
15925        };
15926      }
15927      let maxLength;
15928      if (typeof field.isValid?.maxLength === "number" && fieldType.validate.maxLength !== void 0) {
15929        maxLength = {
15930          constraint: field.isValid.maxLength,
15931          validate: fieldType.validate.maxLength
15932        };
15933      }
15934      let pattern;
15935      if (field.isValid?.pattern !== void 0 && fieldType.validate.pattern !== void 0) {
15936        pattern = {
15937          constraint: field.isValid?.pattern,
15938          validate: fieldType.validate.pattern
15939        };
15940      }
15941      const custom = field.isValid?.custom ?? fieldType.validate.custom;
15942      return {
15943        required,
15944        elements,
15945        min,
15946        max,
15947        minLength,
15948        maxLength,
15949        pattern,
15950        custom
15951      };
15952    }
15953  
15954    // packages/dataviews/build-module/field-types/utils/get-format.js
15955    function getFormat(field, fieldType) {
15956      return {
15957        ...fieldType.format,
15958        ...field.format
15959      };
15960    }
15961    var get_format_default = getFormat;
15962  
15963    // packages/dataviews/build-module/field-types/index.js
15964    function getFieldTypeByName(type) {
15965      const found = [
15966        email_default,
15967        integer_default,
15968        number_default,
15969        text_default,
15970        datetime_default,
15971        date_default,
15972        boolean_default,
15973        media_default,
15974        array_default,
15975        password_default,
15976        telephone_default,
15977        color_default,
15978        url_default
15979      ].find((fieldType) => fieldType?.type === type);
15980      if (!!found) {
15981        return found;
15982      }
15983      return no_type_default;
15984    }
15985    function normalizeFields(fields) {
15986      return fields.map((field) => {
15987        const fieldType = getFieldTypeByName(field.type);
15988        const getValue = field.getValue || get_value_from_id_default(field.id);
15989        const sort7 = function(a2, b2, direction) {
15990          const aValue = getValue({ item: a2 });
15991          const bValue = getValue({ item: b2 });
15992          return field.sort ? field.sort(aValue, bValue, direction) : fieldType.sort(aValue, bValue, direction);
15993        };
15994        return {
15995          id: field.id,
15996          label: field.label || field.id,
15997          header: field.header || field.label || field.id,
15998          description: field.description,
15999          placeholder: field.placeholder,
16000          getValue,
16001          setValue: field.setValue || set_value_from_id_default(field.id),
16002          elements: field.elements,
16003          getElements: field.getElements,
16004          hasElements: hasElements(field),
16005          isVisible: field.isVisible,
16006          enableHiding: field.enableHiding ?? true,
16007          readOnly: field.readOnly ?? false,
16008          // The type provides defaults for the following props
16009          type: fieldType.type,
16010          render: field.render ?? fieldType.render,
16011          Edit: getControl(field, fieldType.Edit),
16012          sort: sort7,
16013          enableSorting: field.enableSorting ?? fieldType.enableSorting,
16014          enableGlobalSearch: field.enableGlobalSearch ?? fieldType.enableGlobalSearch,
16015          isValid: getIsValid(field, fieldType),
16016          filterBy: get_filter_by_default(
16017            field,
16018            fieldType.defaultOperators,
16019            fieldType.validOperators
16020          ),
16021          format: get_format_default(field, fieldType),
16022          getValueFormatted: field.getValueFormatted ?? fieldType.getValueFormatted
16023        };
16024      });
16025    }
16026  
16027    // packages/dataviews/build-module/components/dataviews-picker/index.js
16028    var import_components48 = __toESM(require_components());
16029    var import_element51 = __toESM(require_element());
16030    var import_compose11 = __toESM(require_compose());
16031    var import_jsx_runtime95 = __toESM(require_jsx_runtime());
16032    var isItemClickable = () => false;
16033    var dataViewsPickerLayouts = VIEW_LAYOUTS.filter(
16034      (viewLayout) => viewLayout.isPicker
16035    );
16036    var defaultGetItemId = (item) => item.id;
16037    var EMPTY_ARRAY4 = [];
16038    function DefaultUI({
16039      search = true,
16040      searchLabel = void 0
16041    }) {
16042      return /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(import_jsx_runtime95.Fragment, { children: [
16043        /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(
16044          import_components48.__experimentalHStack,
16045          {
16046            alignment: "top",
16047            justify: "space-between",
16048            className: "dataviews__view-actions",
16049            spacing: 1,
16050            children: [
16051              /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(
16052                import_components48.__experimentalHStack,
16053                {
16054                  justify: "start",
16055                  expanded: false,
16056                  className: "dataviews__search",
16057                  children: [
16058                    search && /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(dataviews_search_default, { label: searchLabel }),
16059                    /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(toggle_default, {})
16060                  ]
16061                }
16062              ),
16063              /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
16064                import_components48.__experimentalHStack,
16065                {
16066                  spacing: 1,
16067                  expanded: false,
16068                  style: { flexShrink: 0 },
16069                  children: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(dataviews_view_config_default, {})
16070                }
16071              )
16072            ]
16073          }
16074        ),
16075        /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(filters_toggled_default, { className: "dataviews-filters__container" }),
16076        /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(DataViewsLayout, {}),
16077        /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(DataViewsPickerFooter, {})
16078      ] });
16079    }
16080    function DataViewsPicker({
16081      view,
16082      onChangeView,
16083      fields,
16084      search = true,
16085      searchLabel = void 0,
16086      actions = EMPTY_ARRAY4,
16087      data,
16088      getItemId = defaultGetItemId,
16089      isLoading = false,
16090      paginationInfo,
16091      defaultLayouts: defaultLayoutsProperty,
16092      selection,
16093      onChangeSelection,
16094      children,
16095      config = { perPageSizes: [10, 20, 50, 100] },
16096      itemListLabel,
16097      empty
16098    }) {
16099      const { infiniteScrollHandler } = paginationInfo;
16100      const containerRef = (0, import_element51.useRef)(null);
16101      const [containerWidth, setContainerWidth] = (0, import_element51.useState)(0);
16102      const resizeObserverRef = (0, import_compose11.useResizeObserver)(
16103        (resizeObserverEntries) => {
16104          setContainerWidth(
16105            resizeObserverEntries[0].borderBoxSize[0].inlineSize
16106          );
16107        },
16108        { box: "border-box" }
16109      );
16110      const [openedFilter, setOpenedFilter] = (0, import_element51.useState)(null);
16111      function setSelectionWithChange(value) {
16112        const newValue = typeof value === "function" ? value(selection) : value;
16113        if (onChangeSelection) {
16114          onChangeSelection(newValue);
16115        }
16116      }
16117      const _fields = (0, import_element51.useMemo)(() => normalizeFields(fields), [fields]);
16118      const filters = use_filters_default(_fields, view);
16119      const hasPrimaryOrLockedFilters = (0, import_element51.useMemo)(
16120        () => (filters || []).some(
16121          (filter) => filter.isPrimary || filter.isLocked
16122        ),
16123        [filters]
16124      );
16125      const [isShowingFilter, setIsShowingFilter] = (0, import_element51.useState)(
16126        hasPrimaryOrLockedFilters
16127      );
16128      (0, import_element51.useEffect)(() => {
16129        if (hasPrimaryOrLockedFilters && !isShowingFilter) {
16130          setIsShowingFilter(true);
16131        }
16132      }, [hasPrimaryOrLockedFilters, isShowingFilter]);
16133      (0, import_element51.useEffect)(() => {
16134        if (!view.infiniteScrollEnabled || !containerRef.current) {
16135          return;
16136        }
16137        const handleScroll = (0, import_compose11.throttle)((event) => {
16138          const target = event.target;
16139          const scrollTop = target.scrollTop;
16140          const scrollHeight = target.scrollHeight;
16141          const clientHeight = target.clientHeight;
16142          if (scrollTop + clientHeight >= scrollHeight - 100) {
16143            infiniteScrollHandler?.();
16144          }
16145        }, 100);
16146        const container = containerRef.current;
16147        container.addEventListener("scroll", handleScroll);
16148        return () => {
16149          container.removeEventListener("scroll", handleScroll);
16150          handleScroll.cancel();
16151        };
16152      }, [infiniteScrollHandler, view.infiniteScrollEnabled]);
16153      const defaultLayouts = (0, import_element51.useMemo)(
16154        () => Object.fromEntries(
16155          Object.entries(defaultLayoutsProperty).filter(
16156            ([layoutType]) => {
16157              return dataViewsPickerLayouts.some(
16158                (viewLayout) => viewLayout.type === layoutType
16159              );
16160            }
16161          )
16162        ),
16163        [defaultLayoutsProperty]
16164      );
16165      if (!defaultLayouts[view.type]) {
16166        return null;
16167      }
16168      return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(
16169        dataviews_context_default.Provider,
16170        {
16171          value: {
16172            view,
16173            onChangeView,
16174            fields: _fields,
16175            actions,
16176            data,
16177            isLoading,
16178            paginationInfo,
16179            isItemClickable,
16180            selection,
16181            onChangeSelection: setSelectionWithChange,
16182            openedFilter,
16183            setOpenedFilter,
16184            getItemId,
16185            containerWidth,
16186            containerRef,
16187            resizeObserverRef,
16188            defaultLayouts,
16189            filters,
16190            isShowingFilter,
16191            setIsShowingFilter,
16192            config,
16193            itemListLabel,
16194            empty,
16195            hasInfiniteScrollHandler: !!infiniteScrollHandler
16196          },
16197          children: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("div", { className: "dataviews-picker-wrapper", ref: containerRef, children: children ?? /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(DefaultUI, { search, searchLabel }) })
16198        }
16199      );
16200    }
16201    var DataViewsPickerSubComponents = DataViewsPicker;
16202    DataViewsPickerSubComponents.BulkActionToolbar = DataViewsPickerFooter;
16203    DataViewsPickerSubComponents.Filters = filters_default;
16204    DataViewsPickerSubComponents.FiltersToggled = filters_toggled_default;
16205    DataViewsPickerSubComponents.FiltersToggle = toggle_default;
16206    DataViewsPickerSubComponents.Layout = DataViewsLayout;
16207    DataViewsPickerSubComponents.LayoutSwitcher = ViewTypeMenu;
16208    DataViewsPickerSubComponents.Pagination = DataViewsPagination;
16209    DataViewsPickerSubComponents.Search = dataviews_search_default;
16210    DataViewsPickerSubComponents.ViewConfig = DataviewsViewConfigDropdown;
16211    var dataviews_picker_default = DataViewsPickerSubComponents;
16212  
16213    // packages/media-fields/build-module/alt_text/index.js
16214    var import_i18n48 = __toESM(require_i18n());
16215    var import_components49 = __toESM(require_components());
16216    var import_jsx_runtime96 = __toESM(require_jsx_runtime());
16217    var altTextField = {
16218      id: "alt_text",
16219      type: "text",
16220      label: (0, import_i18n48.__)("Alt text"),
16221      isVisible: (item) => item?.media_type === "image",
16222      render: ({ item }) => item?.alt_text || "-",
16223      Edit: ({ field, onChange, data }) => {
16224        return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
16225          import_components49.TextareaControl,
16226          {
16227            label: field.label,
16228            value: data.alt_text || "",
16229            onChange: (value) => onChange({ alt_text: value }),
16230            rows: 2
16231          }
16232        );
16233      },
16234      enableSorting: false,
16235      filterBy: false
16236    };
16237    var alt_text_default = altTextField;
16238  
16239    // packages/media-fields/build-module/caption/index.js
16240    var import_i18n49 = __toESM(require_i18n());
16241    var import_components50 = __toESM(require_components());
16242  
16243    // packages/media-fields/build-module/utils/get-raw-content.js
16244    function getRawContent(content) {
16245      if (!content) {
16246        return "";
16247      }
16248      if (typeof content === "string") {
16249        return content;
16250      }
16251      if (typeof content === "object" && "raw" in content) {
16252        return content.raw || "";
16253      }
16254      return "";
16255    }
16256  
16257    // packages/media-fields/build-module/caption/index.js
16258    var import_jsx_runtime97 = __toESM(require_jsx_runtime());
16259    var captionField = {
16260      id: "caption",
16261      type: "text",
16262      label: (0, import_i18n49.__)("Caption"),
16263      getValue: ({ item }) => getRawContent(item?.caption),
16264      render: ({ item }) => getRawContent(item?.caption) || "-",
16265      Edit: ({ field, onChange, data }) => {
16266        return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
16267          import_components50.TextareaControl,
16268          {
16269            label: field.label,
16270            value: getRawContent(data.caption) || "",
16271            onChange: (value) => onChange({ caption: value }),
16272            rows: 2
16273          }
16274        );
16275      },
16276      enableSorting: false,
16277      filterBy: false
16278    };
16279    var caption_default = captionField;
16280  
16281    // packages/media-fields/build-module/description/index.js
16282    var import_i18n50 = __toESM(require_i18n());
16283    var import_components51 = __toESM(require_components());
16284    var import_jsx_runtime98 = __toESM(require_jsx_runtime());
16285    var descriptionField = {
16286      id: "description",
16287      type: "text",
16288      label: (0, import_i18n50.__)("Description"),
16289      getValue: ({ item }) => getRawContent(item?.description),
16290      render: ({ item }) => /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("div", { children: getRawContent(item?.description) || "-" }),
16291      Edit: ({ field, onChange, data }) => {
16292        return /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
16293          import_components51.TextareaControl,
16294          {
16295            label: field.label,
16296            value: getRawContent(data.description) || "",
16297            onChange: (value) => onChange({ description: value }),
16298            rows: 5
16299          }
16300        );
16301      },
16302      enableSorting: false,
16303      filterBy: false
16304    };
16305    var description_default = descriptionField;
16306  
16307    // packages/media-fields/build-module/filename/index.js
16308    var import_i18n51 = __toESM(require_i18n());
16309    var import_url4 = __toESM(require_url());
16310  
16311    // packages/media-fields/build-module/filename/view.js
16312    var import_components52 = __toESM(require_components());
16313    var import_element52 = __toESM(require_element());
16314    var import_url3 = __toESM(require_url());
16315    var import_jsx_runtime99 = __toESM(require_jsx_runtime());
16316    var TRUNCATE_LENGTH = 15;
16317    function FileNameView({
16318      item
16319    }) {
16320      const fileName = (0, import_element52.useMemo)(
16321        () => item?.source_url ? (0, import_url3.getFilename)(item.source_url) : null,
16322        [item?.source_url]
16323      );
16324      if (!fileName) {
16325        return "";
16326      }
16327      return fileName.length > TRUNCATE_LENGTH ? /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_components52.Tooltip, { text: fileName, children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_components52.__experimentalTruncate, { children: fileName }) }) : /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(import_jsx_runtime99.Fragment, { children: fileName });
16328    }
16329  
16330    // packages/media-fields/build-module/filename/index.js
16331    var filenameField = {
16332      id: "filename",
16333      type: "text",
16334      label: (0, import_i18n51.__)("File name"),
16335      getValue: ({ item }) => (0, import_url4.getFilename)(item?.source_url || ""),
16336      render: FileNameView,
16337      enableSorting: false,
16338      filterBy: false,
16339      readOnly: true
16340    };
16341    var filename_default = filenameField;
16342  
16343    // packages/media-fields/build-module/filesize/index.js
16344    var import_i18n52 = __toESM(require_i18n());
16345    var KB_IN_BYTES = 1024;
16346    var MB_IN_BYTES = 1024 * KB_IN_BYTES;
16347    var GB_IN_BYTES = 1024 * MB_IN_BYTES;
16348    var TB_IN_BYTES = 1024 * GB_IN_BYTES;
16349    var PB_IN_BYTES = 1024 * TB_IN_BYTES;
16350    var EB_IN_BYTES = 1024 * PB_IN_BYTES;
16351    var ZB_IN_BYTES = 1024 * EB_IN_BYTES;
16352    var YB_IN_BYTES = 1024 * ZB_IN_BYTES;
16353    function getBytesString(bytes, unitSymbol, decimals = 2) {
16354      return (0, import_i18n52.sprintf)(
16355        // translators: 1: Actual bytes of a file. 2: The unit symbol (e.g. MB).
16356        (0, import_i18n52._x)("%1$s %2$s", "file size"),
16357        bytes.toLocaleString(void 0, {
16358          minimumFractionDigits: 0,
16359          maximumFractionDigits: decimals
16360        }),
16361        unitSymbol
16362      );
16363    }
16364    function formatFileSize(bytes, decimals = 2) {
16365      if (bytes === 0) {
16366        return getBytesString(0, (0, import_i18n52._x)("B", "unit symbol"), decimals);
16367      }
16368      const quant = {
16369        /* translators: Unit symbol for yottabyte. */
16370        [(0, import_i18n52._x)("YB", "unit symbol")]: YB_IN_BYTES,
16371        /* translators: Unit symbol for zettabyte. */
16372        [(0, import_i18n52._x)("ZB", "unit symbol")]: ZB_IN_BYTES,
16373        /* translators: Unit symbol for exabyte. */
16374        [(0, import_i18n52._x)("EB", "unit symbol")]: EB_IN_BYTES,
16375        /* translators: Unit symbol for petabyte. */
16376        [(0, import_i18n52._x)("PB", "unit symbol")]: PB_IN_BYTES,
16377        /* translators: Unit symbol for terabyte. */
16378        [(0, import_i18n52._x)("TB", "unit symbol")]: TB_IN_BYTES,
16379        /* translators: Unit symbol for gigabyte. */
16380        [(0, import_i18n52._x)("GB", "unit symbol")]: GB_IN_BYTES,
16381        /* translators: Unit symbol for megabyte. */
16382        [(0, import_i18n52._x)("MB", "unit symbol")]: MB_IN_BYTES,
16383        /* translators: Unit symbol for kilobyte. */
16384        [(0, import_i18n52._x)("KB", "unit symbol")]: KB_IN_BYTES,
16385        /* translators: Unit symbol for byte. */
16386        [(0, import_i18n52._x)("B", "unit symbol")]: 1
16387      };
16388      for (const [unit, mag] of Object.entries(quant)) {
16389        if (bytes >= mag) {
16390          return getBytesString(bytes / mag, unit, decimals);
16391        }
16392      }
16393      return "";
16394    }
16395    var filesizeField = {
16396      id: "filesize",
16397      type: "text",
16398      label: (0, import_i18n52.__)("File size"),
16399      getValue: ({ item }) => item?.media_details?.filesize ? formatFileSize(item?.media_details?.filesize) : "",
16400      isVisible: (item) => {
16401        return !!item?.media_details?.filesize;
16402      },
16403      enableSorting: false,
16404      filterBy: false,
16405      readOnly: true
16406    };
16407    var filesize_default = filesizeField;
16408  
16409    // packages/media-fields/build-module/media_dimensions/index.js
16410    var import_i18n53 = __toESM(require_i18n());
16411    var mediaDimensionsField = {
16412      id: "media_dimensions",
16413      type: "text",
16414      label: (0, import_i18n53.__)("Dimensions"),
16415      getValue: ({ item }) => item?.media_details?.width && item?.media_details?.height ? (0, import_i18n53.sprintf)(
16416        // translators: 1: Width. 2: Height.
16417        (0, import_i18n53._x)("%1$s \xD7 %2$s", "image dimensions"),
16418        item?.media_details?.width?.toString(),
16419        item?.media_details?.height?.toString()
16420      ) : "",
16421      isVisible: (item) => {
16422        return !!(item?.media_details?.width && item?.media_details?.height);
16423      },
16424      enableSorting: false,
16425      filterBy: false,
16426      readOnly: true
16427    };
16428    var media_dimensions_default = mediaDimensionsField;
16429  
16430    // packages/media-fields/build-module/media_thumbnail/index.js
16431    var import_i18n55 = __toESM(require_i18n());
16432  
16433    // packages/media-fields/build-module/media_thumbnail/view.js
16434    var import_data6 = __toESM(require_data());
16435    var import_core_data = __toESM(require_core_data());
16436    var import_components53 = __toESM(require_components());
16437    var import_element53 = __toESM(require_element());
16438    var import_url5 = __toESM(require_url());
16439  
16440    // packages/media-fields/build-module/utils/get-media-type-from-mime-type.js
16441    var import_i18n54 = __toESM(require_i18n());
16442    function getMediaTypeFromMimeType(mimeType) {
16443      if (mimeType.startsWith("image/")) {
16444        return {
16445          type: "image",
16446          label: (0, import_i18n54.__)("Image"),
16447          icon: image_default
16448        };
16449      }
16450      if (mimeType.startsWith("video/")) {
16451        return {
16452          type: "video",
16453          label: (0, import_i18n54.__)("Video"),
16454          icon: video_default
16455        };
16456      }
16457      if (mimeType.startsWith("audio/")) {
16458        return {
16459          type: "audio",
16460          label: (0, import_i18n54.__)("Audio"),
16461          icon: audio_default
16462        };
16463      }
16464      return {
16465        type: "application",
16466        label: (0, import_i18n54.__)("Application"),
16467        icon: file_default
16468      };
16469    }
16470  
16471    // packages/media-fields/build-module/media_thumbnail/view.js
16472    var import_jsx_runtime100 = __toESM(require_jsx_runtime());
16473    function FallbackView({
16474      item,
16475      filename
16476    }) {
16477      return /* @__PURE__ */ (0, import_jsx_runtime100.jsx)("div", { className: "dataviews-media-field__media-thumbnail", children: /* @__PURE__ */ (0, import_jsx_runtime100.jsxs)(
16478        import_components53.__experimentalVStack,
16479        {
16480          justify: "center",
16481          alignment: "center",
16482          className: "dataviews-media-field__media-thumbnail__stack",
16483          spacing: 0,
16484          children: [
16485            /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(
16486              import_components53.Icon,
16487              {
16488                className: "dataviews-media-field__media-thumbnail--icon",
16489                icon: getMediaTypeFromMimeType(item.mime_type).icon,
16490                size: 24
16491              }
16492            ),
16493            !!filename && /* @__PURE__ */ (0, import_jsx_runtime100.jsx)("div", { className: "dataviews-media-field__media-thumbnail__filename", children: /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(import_components53.__experimentalTruncate, { className: "dataviews-media-field__media-thumbnail__filename__truncate", children: filename }) })
16494          ]
16495        }
16496      ) });
16497    }
16498    function MediaThumbnailView({
16499      item,
16500      config
16501    }) {
16502      const [imageError, setImageError] = (0, import_element53.useState)(false);
16503      const _featuredMedia = (0, import_data6.useSelect)(
16504        (select) => {
16505          if (!item.featured_media) {
16506            return;
16507          }
16508          return select(import_core_data.store).getEntityRecord(
16509            "postType",
16510            "attachment",
16511            item.featured_media
16512          );
16513        },
16514        [item.featured_media]
16515      );
16516      const featuredMedia = item.featured_media ? _featuredMedia : item;
16517      if (!featuredMedia) {
16518        return null;
16519      }
16520      const filename = (0, import_url5.getFilename)(featuredMedia.source_url || "");
16521      if (imageError || getMediaTypeFromMimeType(featuredMedia.mime_type).type !== "image") {
16522        return /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(FallbackView, { item: featuredMedia, filename: filename || "" });
16523      }
16524      return /* @__PURE__ */ (0, import_jsx_runtime100.jsx)("div", { className: "dataviews-media-field__media-thumbnail", children: /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(
16525        "img",
16526        {
16527          className: "dataviews-media-field__media-thumbnail--image",
16528          src: featuredMedia.source_url,
16529          srcSet: featuredMedia?.media_details?.sizes ? Object.values(
16530            featuredMedia.media_details.sizes
16531          ).map(
16532            (size) => `$size.source_url} $size.width}w`
16533          ).join(", ") : void 0,
16534          sizes: config?.sizes || "100vw",
16535          alt: featuredMedia.alt_text || featuredMedia.title.raw,
16536          onError: () => setImageError(true)
16537        }
16538      ) });
16539    }
16540  
16541    // packages/media-fields/build-module/media_thumbnail/index.js
16542    var mediaThumbnailField = {
16543      id: "media_thumbnail",
16544      type: "media",
16545      label: (0, import_i18n55.__)("Thumbnail"),
16546      render: MediaThumbnailView,
16547      enableSorting: false,
16548      filterBy: false
16549    };
16550    var media_thumbnail_default = mediaThumbnailField;
16551  
16552    // packages/media-fields/build-module/mime_type/index.js
16553    var import_i18n56 = __toESM(require_i18n());
16554    var mimeTypeField = {
16555      id: "mime_type",
16556      type: "text",
16557      label: (0, import_i18n56.__)("File type"),
16558      getValue: ({ item }) => item?.mime_type || "",
16559      render: ({ item }) => item?.mime_type || "-",
16560      enableSorting: true,
16561      filterBy: false,
16562      readOnly: true
16563    };
16564    var mime_type_default = mimeTypeField;
16565  
16566    // packages/media-utils/build-module/lock-unlock.js
16567    var import_private_apis2 = __toESM(require_private_apis());
16568    var { lock: lock2, unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(
16569      "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
16570      "@wordpress/media-utils"
16571    );
16572  
16573    // packages/media-utils/build-module/components/media-upload-modal/index.js
16574    var import_jsx_runtime101 = __toESM(require_jsx_runtime());
16575    var { useEntityRecordsWithPermissions } = unlock2(import_core_data2.privateApis);
16576    var LAYOUT_PICKER_GRID2 = "pickerGrid";
16577    var LAYOUT_PICKER_TABLE2 = "pickerTable";
16578    function MediaUploadModal({
16579      allowedTypes = ["image"],
16580      multiple = false,
16581      value,
16582      onSelect,
16583      onClose,
16584      onUpload,
16585      title = (0, import_i18n57.__)("Select Media"),
16586      isOpen,
16587      isDismissible = true,
16588      modalClass,
16589      search = true,
16590      searchLabel = (0, import_i18n57.__)("Search media")
16591    }) {
16592      const [selection, setSelection] = (0, import_element54.useState)(() => {
16593        if (!value) {
16594          return [];
16595        }
16596        return Array.isArray(value) ? value.map(String) : [String(value)];
16597      });
16598      const [view, setView] = (0, import_element54.useState)(() => ({
16599        type: LAYOUT_PICKER_GRID2,
16600        fields: [],
16601        showTitle: false,
16602        titleField: "title",
16603        mediaField: "media_thumbnail",
16604        search: "",
16605        page: 1,
16606        perPage: 20,
16607        filters: []
16608      }));
16609      const queryArgs = (0, import_element54.useMemo)(() => {
16610        const filters = {};
16611        view.filters?.forEach((filter) => {
16612          if (filter.field === "media_type") {
16613            filters.media_type = filter.value;
16614          }
16615          if (filter.field === "author") {
16616            filters.author = filter.value;
16617          }
16618          if (filter.field === "date") {
16619            filters.after = filter.value?.after;
16620            filters.before = filter.value?.before;
16621          }
16622          if (filter.field === "mime_type") {
16623            filters.mime_type = filter.value;
16624          }
16625        });
16626        if (!filters.media_type) {
16627          filters.media_type = allowedTypes.includes("*") ? void 0 : allowedTypes;
16628        }
16629        return {
16630          per_page: view.perPage || 20,
16631          page: view.page || 1,
16632          status: "inherit",
16633          order: view.sort?.direction,
16634          orderby: view.sort?.field,
16635          search: view.search,
16636          ...filters
16637        };
16638      }, [view, allowedTypes]);
16639      const {
16640        records: mediaRecords,
16641        isResolving: isLoading,
16642        totalItems,
16643        totalPages
16644      } = useEntityRecordsWithPermissions("postType", "attachment", queryArgs);
16645      const fields = (0, import_element54.useMemo)(
16646        () => [
16647          {
16648            id: "title",
16649            type: "text",
16650            label: (0, import_i18n57.__)("Title"),
16651            getValue: ({ item }) => {
16652              const titleValue = item.title.raw || item.title.rendered;
16653              return titleValue || (0, import_i18n57.__)("(no title)");
16654            }
16655          },
16656          // Media field definitions from @wordpress/media-fields
16657          // Cast is safe because RestAttachment has the same properties as Attachment
16658          media_thumbnail_default,
16659          alt_text_default,
16660          caption_default,
16661          description_default,
16662          filename_default,
16663          filesize_default,
16664          media_dimensions_default,
16665          mime_type_default
16666        ],
16667        []
16668      );
16669      const actions = (0, import_element54.useMemo)(
16670        () => [
16671          {
16672            id: "select",
16673            label: multiple ? (0, import_i18n57.__)("Select") : (0, import_i18n57.__)("Select"),
16674            isPrimary: true,
16675            supportsBulk: multiple,
16676            async callback() {
16677              if (selection.length === 0) {
16678                return;
16679              }
16680              const selectedPostsQuery = {
16681                include: selection,
16682                per_page: -1
16683              };
16684              const selectedPosts = await (0, import_data7.resolveSelect)(
16685                import_core_data2.store
16686              ).getEntityRecords(
16687                "postType",
16688                "attachment",
16689                selectedPostsQuery
16690              );
16691              const transformedPosts = selectedPosts?.map(transformAttachment);
16692              const selectedItems = multiple ? transformedPosts : transformedPosts?.[0];
16693              onSelect(selectedItems);
16694            }
16695          }
16696        ],
16697        [multiple, onSelect, selection]
16698      );
16699      const handleModalClose = (0, import_element54.useCallback)(() => {
16700        onClose?.();
16701      }, [onClose]);
16702      const handleUpload = onUpload || uploadMedia;
16703      const handleFileSelect = (0, import_element54.useCallback)(
16704        (event) => {
16705          const files = event.target.files;
16706          if (files && files.length > 0) {
16707            const filesArray = Array.from(files);
16708            handleUpload({
16709              allowedTypes,
16710              filesList: filesArray
16711            });
16712          }
16713        },
16714        [allowedTypes, handleUpload]
16715      );
16716      const paginationInfo = (0, import_element54.useMemo)(
16717        () => ({
16718          totalItems,
16719          totalPages
16720        }),
16721        [totalItems, totalPages]
16722      );
16723      const defaultLayouts = (0, import_element54.useMemo)(
16724        () => ({
16725          [LAYOUT_PICKER_GRID2]: {
16726            fields: [],
16727            showTitle: false
16728          },
16729          [LAYOUT_PICKER_TABLE2]: {
16730            fields: ["filename", "filesize", "media_dimensions"],
16731            showTitle: true
16732          }
16733        }),
16734        []
16735      );
16736      const acceptTypes = (0, import_element54.useMemo)(() => {
16737        if (allowedTypes.includes("*")) {
16738          return void 0;
16739        }
16740        return allowedTypes.join(",");
16741      }, [allowedTypes]);
16742      if (!isOpen) {
16743        return null;
16744      }
16745      return /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)(
16746        import_components54.Modal,
16747        {
16748          title,
16749          onRequestClose: handleModalClose,
16750          isDismissible,
16751          className: modalClass,
16752          size: "fill",
16753          headerActions: /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
16754            import_components54.FormFileUpload,
16755            {
16756              accept: acceptTypes,
16757              multiple: true,
16758              onChange: handleFileSelect,
16759              __next40pxDefaultSize: true,
16760              render: ({ openFileDialog }) => /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
16761                import_components54.Button,
16762                {
16763                  onClick: openFileDialog,
16764                  icon: upload_default,
16765                  __next40pxDefaultSize: true,
16766                  children: (0, import_i18n57.__)("Upload media")
16767                }
16768              )
16769            }
16770          ),
16771          children: [
16772            /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
16773              import_components54.DropZone,
16774              {
16775                onFilesDrop: (files) => {
16776                  let filteredFiles = files;
16777                  if (allowedTypes && !allowedTypes.includes("*")) {
16778                    filteredFiles = files.filter(
16779                      (file) => allowedTypes.some((allowedType) => {
16780                        return file.type === allowedType || file.type.startsWith(
16781                          allowedType.replace("*", "")
16782                        );
16783                      })
16784                    );
16785                  }
16786                  if (filteredFiles.length > 0) {
16787                    handleUpload({
16788                      allowedTypes,
16789                      filesList: filteredFiles
16790                    });
16791                  }
16792                },
16793                label: (0, import_i18n57.__)("Drop files to upload")
16794              }
16795            ),
16796            /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
16797              dataviews_picker_default,
16798              {
16799                data: mediaRecords || [],
16800                fields,
16801                view,
16802                onChangeView: setView,
16803                actions,
16804                selection,
16805                onChangeSelection: setSelection,
16806                isLoading,
16807                paginationInfo,
16808                defaultLayouts,
16809                getItemId: (item) => String(item.id),
16810                search,
16811                searchLabel,
16812                itemListLabel: (0, import_i18n57.__)("Media items")
16813              }
16814            )
16815          ]
16816        }
16817      );
16818    }
16819  
16820    // packages/media-utils/build-module/private-apis.js
16821    var privateApis11 = {};
16822    lock2(privateApis11, {
16823      sideloadMedia,
16824      MediaUploadModal
16825    });
16826    return __toCommonJS(index_exports);
16827  })();
16828  /*! Bundled license information:
16829  
16830  use-sync-external-store/cjs/use-sync-external-store-shim.development.js:
16831    (**
16832     * @license React
16833     * use-sync-external-store-shim.development.js
16834     *
16835     * Copyright (c) Meta Platforms, Inc. and affiliates.
16836     *
16837     * This source code is licensed under the MIT license found in the
16838     * LICENSE file in the root directory of this source tree.
16839     *)
16840  */


Generated : Sun Apr 19 08:20:11 2026 Cross-referenced by PHPXref