[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

/wp-includes/build/routes/pattern-list/ -> content.js (source)

   1  var __create = Object.create;
   2  var __defProp = Object.defineProperty;
   3  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
   4  var __getOwnPropNames = Object.getOwnPropertyNames;
   5  var __getProtoOf = Object.getPrototypeOf;
   6  var __hasOwnProp = Object.prototype.hasOwnProperty;
   7  var __commonJS = (cb, mod) => function __require() {
   8    return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
   9  };
  10  var __copyProps = (to, from, except, desc) => {
  11    if (from && typeof from === "object" || typeof from === "function") {
  12      for (let key of __getOwnPropNames(from))
  13        if (!__hasOwnProp.call(to, key) && key !== except)
  14          __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  15    }
  16    return to;
  17  };
  18  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
  19    // If the importer is in node compatibility mode or this is not an ESM
  20    // file that has been converted to a CommonJS file using a Babel-
  21    // compatible transform (i.e. "__esModule" has not been set), then set
  22    // "default" to the CommonJS "module.exports" for node compatibility.
  23    isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
  24    mod
  25  ));
  26  
  27  // package-external:@wordpress/element
  28  var require_element = __commonJS({
  29    "package-external:@wordpress/element"(exports, module) {
  30      module.exports = window.wp.element;
  31    }
  32  });
  33  
  34  // package-external:@wordpress/data
  35  var require_data = __commonJS({
  36    "package-external:@wordpress/data"(exports, module) {
  37      module.exports = window.wp.data;
  38    }
  39  });
  40  
  41  // package-external:@wordpress/preferences
  42  var require_preferences = __commonJS({
  43    "package-external:@wordpress/preferences"(exports, module) {
  44      module.exports = window.wp.preferences;
  45    }
  46  });
  47  
  48  // package-external:@wordpress/components
  49  var require_components = __commonJS({
  50    "package-external:@wordpress/components"(exports, module) {
  51      module.exports = window.wp.components;
  52    }
  53  });
  54  
  55  // package-external:@wordpress/compose
  56  var require_compose = __commonJS({
  57    "package-external:@wordpress/compose"(exports, module) {
  58      module.exports = window.wp.compose;
  59    }
  60  });
  61  
  62  // package-external:@wordpress/i18n
  63  var require_i18n = __commonJS({
  64    "package-external:@wordpress/i18n"(exports, module) {
  65      module.exports = window.wp.i18n;
  66    }
  67  });
  68  
  69  // package-external:@wordpress/primitives
  70  var require_primitives = __commonJS({
  71    "package-external:@wordpress/primitives"(exports, module) {
  72      module.exports = window.wp.primitives;
  73    }
  74  });
  75  
  76  // vendor-external:react/jsx-runtime
  77  var require_jsx_runtime = __commonJS({
  78    "vendor-external:react/jsx-runtime"(exports, module) {
  79      module.exports = window.ReactJSXRuntime;
  80    }
  81  });
  82  
  83  // package-external:@wordpress/keycodes
  84  var require_keycodes = __commonJS({
  85    "package-external:@wordpress/keycodes"(exports, module) {
  86      module.exports = window.wp.keycodes;
  87    }
  88  });
  89  
  90  // package-external:@wordpress/private-apis
  91  var require_private_apis = __commonJS({
  92    "package-external:@wordpress/private-apis"(exports, module) {
  93      module.exports = window.wp.privateApis;
  94    }
  95  });
  96  
  97  // vendor-external:react
  98  var require_react = __commonJS({
  99    "vendor-external:react"(exports, module) {
 100      module.exports = window.React;
 101    }
 102  });
 103  
 104  // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js
 105  var require_use_sync_external_store_shim_development = __commonJS({
 106    "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(exports) {
 107      "use strict";
 108      (function() {
 109        function is(x2, y2) {
 110          return x2 === y2 && (0 !== x2 || 1 / x2 === 1 / y2) || x2 !== x2 && y2 !== y2;
 111        }
 112        function useSyncExternalStore$2(subscribe2, getSnapshot) {
 113          didWarnOld18Alpha || void 0 === React5.startTransition || (didWarnOld18Alpha = true, console.error(
 114            "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."
 115          ));
 116          var value = getSnapshot();
 117          if (!didWarnUncachedGetSnapshot) {
 118            var cachedValue = getSnapshot();
 119            objectIs(value, cachedValue) || (console.error(
 120              "The result of getSnapshot should be cached to avoid an infinite loop"
 121            ), didWarnUncachedGetSnapshot = true);
 122          }
 123          cachedValue = useState23({
 124            inst: { value, getSnapshot }
 125          });
 126          var inst = cachedValue[0].inst, forceUpdate = cachedValue[1];
 127          useLayoutEffect2(
 128            function() {
 129              inst.value = value;
 130              inst.getSnapshot = getSnapshot;
 131              checkIfSnapshotChanged(inst) && forceUpdate({ inst });
 132            },
 133            [subscribe2, value, getSnapshot]
 134          );
 135          useEffect17(
 136            function() {
 137              checkIfSnapshotChanged(inst) && forceUpdate({ inst });
 138              return subscribe2(function() {
 139                checkIfSnapshotChanged(inst) && forceUpdate({ inst });
 140              });
 141            },
 142            [subscribe2]
 143          );
 144          useDebugValue(value);
 145          return value;
 146        }
 147        function checkIfSnapshotChanged(inst) {
 148          var latestGetSnapshot = inst.getSnapshot;
 149          inst = inst.value;
 150          try {
 151            var nextValue = latestGetSnapshot();
 152            return !objectIs(inst, nextValue);
 153          } catch (error) {
 154            return true;
 155          }
 156        }
 157        function useSyncExternalStore$1(subscribe2, getSnapshot) {
 158          return getSnapshot();
 159        }
 160        "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
 161        var React5 = require_react(), objectIs = "function" === typeof Object.is ? Object.is : is, useState23 = React5.useState, useEffect17 = React5.useEffect, useLayoutEffect2 = React5.useLayoutEffect, useDebugValue = React5.useDebugValue, didWarnOld18Alpha = false, didWarnUncachedGetSnapshot = false, shim = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2;
 162        exports.useSyncExternalStore = void 0 !== React5.useSyncExternalStore ? React5.useSyncExternalStore : shim;
 163        "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
 164      })();
 165    }
 166  });
 167  
 168  // node_modules/use-sync-external-store/shim/index.js
 169  var require_shim = __commonJS({
 170    "node_modules/use-sync-external-store/shim/index.js"(exports, module) {
 171      "use strict";
 172      if (false) {
 173        module.exports = null;
 174      } else {
 175        module.exports = require_use_sync_external_store_shim_development();
 176      }
 177    }
 178  });
 179  
 180  // vendor-external:react-dom
 181  var require_react_dom = __commonJS({
 182    "vendor-external:react-dom"(exports, module) {
 183      module.exports = window.ReactDOM;
 184    }
 185  });
 186  
 187  // node_modules/remove-accents/index.js
 188  var require_remove_accents = __commonJS({
 189    "node_modules/remove-accents/index.js"(exports, module) {
 190      var characterMap = {
 191        "\xC0": "A",
 192        "\xC1": "A",
 193        "\xC2": "A",
 194        "\xC3": "A",
 195        "\xC4": "A",
 196        "\xC5": "A",
 197        "\u1EA4": "A",
 198        "\u1EAE": "A",
 199        "\u1EB2": "A",
 200        "\u1EB4": "A",
 201        "\u1EB6": "A",
 202        "\xC6": "AE",
 203        "\u1EA6": "A",
 204        "\u1EB0": "A",
 205        "\u0202": "A",
 206        "\u1EA2": "A",
 207        "\u1EA0": "A",
 208        "\u1EA8": "A",
 209        "\u1EAA": "A",
 210        "\u1EAC": "A",
 211        "\xC7": "C",
 212        "\u1E08": "C",
 213        "\xC8": "E",
 214        "\xC9": "E",
 215        "\xCA": "E",
 216        "\xCB": "E",
 217        "\u1EBE": "E",
 218        "\u1E16": "E",
 219        "\u1EC0": "E",
 220        "\u1E14": "E",
 221        "\u1E1C": "E",
 222        "\u0206": "E",
 223        "\u1EBA": "E",
 224        "\u1EBC": "E",
 225        "\u1EB8": "E",
 226        "\u1EC2": "E",
 227        "\u1EC4": "E",
 228        "\u1EC6": "E",
 229        "\xCC": "I",
 230        "\xCD": "I",
 231        "\xCE": "I",
 232        "\xCF": "I",
 233        "\u1E2E": "I",
 234        "\u020A": "I",
 235        "\u1EC8": "I",
 236        "\u1ECA": "I",
 237        "\xD0": "D",
 238        "\xD1": "N",
 239        "\xD2": "O",
 240        "\xD3": "O",
 241        "\xD4": "O",
 242        "\xD5": "O",
 243        "\xD6": "O",
 244        "\xD8": "O",
 245        "\u1ED0": "O",
 246        "\u1E4C": "O",
 247        "\u1E52": "O",
 248        "\u020E": "O",
 249        "\u1ECE": "O",
 250        "\u1ECC": "O",
 251        "\u1ED4": "O",
 252        "\u1ED6": "O",
 253        "\u1ED8": "O",
 254        "\u1EDC": "O",
 255        "\u1EDE": "O",
 256        "\u1EE0": "O",
 257        "\u1EDA": "O",
 258        "\u1EE2": "O",
 259        "\xD9": "U",
 260        "\xDA": "U",
 261        "\xDB": "U",
 262        "\xDC": "U",
 263        "\u1EE6": "U",
 264        "\u1EE4": "U",
 265        "\u1EEC": "U",
 266        "\u1EEE": "U",
 267        "\u1EF0": "U",
 268        "\xDD": "Y",
 269        "\xE0": "a",
 270        "\xE1": "a",
 271        "\xE2": "a",
 272        "\xE3": "a",
 273        "\xE4": "a",
 274        "\xE5": "a",
 275        "\u1EA5": "a",
 276        "\u1EAF": "a",
 277        "\u1EB3": "a",
 278        "\u1EB5": "a",
 279        "\u1EB7": "a",
 280        "\xE6": "ae",
 281        "\u1EA7": "a",
 282        "\u1EB1": "a",
 283        "\u0203": "a",
 284        "\u1EA3": "a",
 285        "\u1EA1": "a",
 286        "\u1EA9": "a",
 287        "\u1EAB": "a",
 288        "\u1EAD": "a",
 289        "\xE7": "c",
 290        "\u1E09": "c",
 291        "\xE8": "e",
 292        "\xE9": "e",
 293        "\xEA": "e",
 294        "\xEB": "e",
 295        "\u1EBF": "e",
 296        "\u1E17": "e",
 297        "\u1EC1": "e",
 298        "\u1E15": "e",
 299        "\u1E1D": "e",
 300        "\u0207": "e",
 301        "\u1EBB": "e",
 302        "\u1EBD": "e",
 303        "\u1EB9": "e",
 304        "\u1EC3": "e",
 305        "\u1EC5": "e",
 306        "\u1EC7": "e",
 307        "\xEC": "i",
 308        "\xED": "i",
 309        "\xEE": "i",
 310        "\xEF": "i",
 311        "\u1E2F": "i",
 312        "\u020B": "i",
 313        "\u1EC9": "i",
 314        "\u1ECB": "i",
 315        "\xF0": "d",
 316        "\xF1": "n",
 317        "\xF2": "o",
 318        "\xF3": "o",
 319        "\xF4": "o",
 320        "\xF5": "o",
 321        "\xF6": "o",
 322        "\xF8": "o",
 323        "\u1ED1": "o",
 324        "\u1E4D": "o",
 325        "\u1E53": "o",
 326        "\u020F": "o",
 327        "\u1ECF": "o",
 328        "\u1ECD": "o",
 329        "\u1ED5": "o",
 330        "\u1ED7": "o",
 331        "\u1ED9": "o",
 332        "\u1EDD": "o",
 333        "\u1EDF": "o",
 334        "\u1EE1": "o",
 335        "\u1EDB": "o",
 336        "\u1EE3": "o",
 337        "\xF9": "u",
 338        "\xFA": "u",
 339        "\xFB": "u",
 340        "\xFC": "u",
 341        "\u1EE7": "u",
 342        "\u1EE5": "u",
 343        "\u1EED": "u",
 344        "\u1EEF": "u",
 345        "\u1EF1": "u",
 346        "\xFD": "y",
 347        "\xFF": "y",
 348        "\u0100": "A",
 349        "\u0101": "a",
 350        "\u0102": "A",
 351        "\u0103": "a",
 352        "\u0104": "A",
 353        "\u0105": "a",
 354        "\u0106": "C",
 355        "\u0107": "c",
 356        "\u0108": "C",
 357        "\u0109": "c",
 358        "\u010A": "C",
 359        "\u010B": "c",
 360        "\u010C": "C",
 361        "\u010D": "c",
 362        "C\u0306": "C",
 363        "c\u0306": "c",
 364        "\u010E": "D",
 365        "\u010F": "d",
 366        "\u0110": "D",
 367        "\u0111": "d",
 368        "\u0112": "E",
 369        "\u0113": "e",
 370        "\u0114": "E",
 371        "\u0115": "e",
 372        "\u0116": "E",
 373        "\u0117": "e",
 374        "\u0118": "E",
 375        "\u0119": "e",
 376        "\u011A": "E",
 377        "\u011B": "e",
 378        "\u011C": "G",
 379        "\u01F4": "G",
 380        "\u011D": "g",
 381        "\u01F5": "g",
 382        "\u011E": "G",
 383        "\u011F": "g",
 384        "\u0120": "G",
 385        "\u0121": "g",
 386        "\u0122": "G",
 387        "\u0123": "g",
 388        "\u0124": "H",
 389        "\u0125": "h",
 390        "\u0126": "H",
 391        "\u0127": "h",
 392        "\u1E2A": "H",
 393        "\u1E2B": "h",
 394        "\u0128": "I",
 395        "\u0129": "i",
 396        "\u012A": "I",
 397        "\u012B": "i",
 398        "\u012C": "I",
 399        "\u012D": "i",
 400        "\u012E": "I",
 401        "\u012F": "i",
 402        "\u0130": "I",
 403        "\u0131": "i",
 404        "\u0132": "IJ",
 405        "\u0133": "ij",
 406        "\u0134": "J",
 407        "\u0135": "j",
 408        "\u0136": "K",
 409        "\u0137": "k",
 410        "\u1E30": "K",
 411        "\u1E31": "k",
 412        "K\u0306": "K",
 413        "k\u0306": "k",
 414        "\u0139": "L",
 415        "\u013A": "l",
 416        "\u013B": "L",
 417        "\u013C": "l",
 418        "\u013D": "L",
 419        "\u013E": "l",
 420        "\u013F": "L",
 421        "\u0140": "l",
 422        "\u0141": "l",
 423        "\u0142": "l",
 424        "\u1E3E": "M",
 425        "\u1E3F": "m",
 426        "M\u0306": "M",
 427        "m\u0306": "m",
 428        "\u0143": "N",
 429        "\u0144": "n",
 430        "\u0145": "N",
 431        "\u0146": "n",
 432        "\u0147": "N",
 433        "\u0148": "n",
 434        "\u0149": "n",
 435        "N\u0306": "N",
 436        "n\u0306": "n",
 437        "\u014C": "O",
 438        "\u014D": "o",
 439        "\u014E": "O",
 440        "\u014F": "o",
 441        "\u0150": "O",
 442        "\u0151": "o",
 443        "\u0152": "OE",
 444        "\u0153": "oe",
 445        "P\u0306": "P",
 446        "p\u0306": "p",
 447        "\u0154": "R",
 448        "\u0155": "r",
 449        "\u0156": "R",
 450        "\u0157": "r",
 451        "\u0158": "R",
 452        "\u0159": "r",
 453        "R\u0306": "R",
 454        "r\u0306": "r",
 455        "\u0212": "R",
 456        "\u0213": "r",
 457        "\u015A": "S",
 458        "\u015B": "s",
 459        "\u015C": "S",
 460        "\u015D": "s",
 461        "\u015E": "S",
 462        "\u0218": "S",
 463        "\u0219": "s",
 464        "\u015F": "s",
 465        "\u0160": "S",
 466        "\u0161": "s",
 467        "\u0162": "T",
 468        "\u0163": "t",
 469        "\u021B": "t",
 470        "\u021A": "T",
 471        "\u0164": "T",
 472        "\u0165": "t",
 473        "\u0166": "T",
 474        "\u0167": "t",
 475        "T\u0306": "T",
 476        "t\u0306": "t",
 477        "\u0168": "U",
 478        "\u0169": "u",
 479        "\u016A": "U",
 480        "\u016B": "u",
 481        "\u016C": "U",
 482        "\u016D": "u",
 483        "\u016E": "U",
 484        "\u016F": "u",
 485        "\u0170": "U",
 486        "\u0171": "u",
 487        "\u0172": "U",
 488        "\u0173": "u",
 489        "\u0216": "U",
 490        "\u0217": "u",
 491        "V\u0306": "V",
 492        "v\u0306": "v",
 493        "\u0174": "W",
 494        "\u0175": "w",
 495        "\u1E82": "W",
 496        "\u1E83": "w",
 497        "X\u0306": "X",
 498        "x\u0306": "x",
 499        "\u0176": "Y",
 500        "\u0177": "y",
 501        "\u0178": "Y",
 502        "Y\u0306": "Y",
 503        "y\u0306": "y",
 504        "\u0179": "Z",
 505        "\u017A": "z",
 506        "\u017B": "Z",
 507        "\u017C": "z",
 508        "\u017D": "Z",
 509        "\u017E": "z",
 510        "\u017F": "s",
 511        "\u0192": "f",
 512        "\u01A0": "O",
 513        "\u01A1": "o",
 514        "\u01AF": "U",
 515        "\u01B0": "u",
 516        "\u01CD": "A",
 517        "\u01CE": "a",
 518        "\u01CF": "I",
 519        "\u01D0": "i",
 520        "\u01D1": "O",
 521        "\u01D2": "o",
 522        "\u01D3": "U",
 523        "\u01D4": "u",
 524        "\u01D5": "U",
 525        "\u01D6": "u",
 526        "\u01D7": "U",
 527        "\u01D8": "u",
 528        "\u01D9": "U",
 529        "\u01DA": "u",
 530        "\u01DB": "U",
 531        "\u01DC": "u",
 532        "\u1EE8": "U",
 533        "\u1EE9": "u",
 534        "\u1E78": "U",
 535        "\u1E79": "u",
 536        "\u01FA": "A",
 537        "\u01FB": "a",
 538        "\u01FC": "AE",
 539        "\u01FD": "ae",
 540        "\u01FE": "O",
 541        "\u01FF": "o",
 542        "\xDE": "TH",
 543        "\xFE": "th",
 544        "\u1E54": "P",
 545        "\u1E55": "p",
 546        "\u1E64": "S",
 547        "\u1E65": "s",
 548        "X\u0301": "X",
 549        "x\u0301": "x",
 550        "\u0403": "\u0413",
 551        "\u0453": "\u0433",
 552        "\u040C": "\u041A",
 553        "\u045C": "\u043A",
 554        "A\u030B": "A",
 555        "a\u030B": "a",
 556        "E\u030B": "E",
 557        "e\u030B": "e",
 558        "I\u030B": "I",
 559        "i\u030B": "i",
 560        "\u01F8": "N",
 561        "\u01F9": "n",
 562        "\u1ED2": "O",
 563        "\u1ED3": "o",
 564        "\u1E50": "O",
 565        "\u1E51": "o",
 566        "\u1EEA": "U",
 567        "\u1EEB": "u",
 568        "\u1E80": "W",
 569        "\u1E81": "w",
 570        "\u1EF2": "Y",
 571        "\u1EF3": "y",
 572        "\u0200": "A",
 573        "\u0201": "a",
 574        "\u0204": "E",
 575        "\u0205": "e",
 576        "\u0208": "I",
 577        "\u0209": "i",
 578        "\u020C": "O",
 579        "\u020D": "o",
 580        "\u0210": "R",
 581        "\u0211": "r",
 582        "\u0214": "U",
 583        "\u0215": "u",
 584        "B\u030C": "B",
 585        "b\u030C": "b",
 586        "\u010C\u0323": "C",
 587        "\u010D\u0323": "c",
 588        "\xCA\u030C": "E",
 589        "\xEA\u030C": "e",
 590        "F\u030C": "F",
 591        "f\u030C": "f",
 592        "\u01E6": "G",
 593        "\u01E7": "g",
 594        "\u021E": "H",
 595        "\u021F": "h",
 596        "J\u030C": "J",
 597        "\u01F0": "j",
 598        "\u01E8": "K",
 599        "\u01E9": "k",
 600        "M\u030C": "M",
 601        "m\u030C": "m",
 602        "P\u030C": "P",
 603        "p\u030C": "p",
 604        "Q\u030C": "Q",
 605        "q\u030C": "q",
 606        "\u0158\u0329": "R",
 607        "\u0159\u0329": "r",
 608        "\u1E66": "S",
 609        "\u1E67": "s",
 610        "V\u030C": "V",
 611        "v\u030C": "v",
 612        "W\u030C": "W",
 613        "w\u030C": "w",
 614        "X\u030C": "X",
 615        "x\u030C": "x",
 616        "Y\u030C": "Y",
 617        "y\u030C": "y",
 618        "A\u0327": "A",
 619        "a\u0327": "a",
 620        "B\u0327": "B",
 621        "b\u0327": "b",
 622        "\u1E10": "D",
 623        "\u1E11": "d",
 624        "\u0228": "E",
 625        "\u0229": "e",
 626        "\u0190\u0327": "E",
 627        "\u025B\u0327": "e",
 628        "\u1E28": "H",
 629        "\u1E29": "h",
 630        "I\u0327": "I",
 631        "i\u0327": "i",
 632        "\u0197\u0327": "I",
 633        "\u0268\u0327": "i",
 634        "M\u0327": "M",
 635        "m\u0327": "m",
 636        "O\u0327": "O",
 637        "o\u0327": "o",
 638        "Q\u0327": "Q",
 639        "q\u0327": "q",
 640        "U\u0327": "U",
 641        "u\u0327": "u",
 642        "X\u0327": "X",
 643        "x\u0327": "x",
 644        "Z\u0327": "Z",
 645        "z\u0327": "z",
 646        "\u0439": "\u0438",
 647        "\u0419": "\u0418",
 648        "\u0451": "\u0435",
 649        "\u0401": "\u0415"
 650      };
 651      var chars = Object.keys(characterMap).join("|");
 652      var allAccents = new RegExp(chars, "g");
 653      var firstAccent = new RegExp(chars, "");
 654      function matcher(match2) {
 655        return characterMap[match2];
 656      }
 657      var removeAccents3 = function(string) {
 658        return string.replace(allAccents, matcher);
 659      };
 660      var hasAccents = function(string) {
 661        return !!string.match(firstAccent);
 662      };
 663      module.exports = removeAccents3;
 664      module.exports.has = hasAccents;
 665      module.exports.remove = removeAccents3;
 666    }
 667  });
 668  
 669  // node_modules/fast-deep-equal/es6/index.js
 670  var require_es6 = __commonJS({
 671    "node_modules/fast-deep-equal/es6/index.js"(exports, module) {
 672      "use strict";
 673      module.exports = function equal(a2, b2) {
 674        if (a2 === b2) return true;
 675        if (a2 && b2 && typeof a2 == "object" && typeof b2 == "object") {
 676          if (a2.constructor !== b2.constructor) return false;
 677          var length, i2, keys;
 678          if (Array.isArray(a2)) {
 679            length = a2.length;
 680            if (length != b2.length) return false;
 681            for (i2 = length; i2-- !== 0; )
 682              if (!equal(a2[i2], b2[i2])) return false;
 683            return true;
 684          }
 685          if (a2 instanceof Map && b2 instanceof Map) {
 686            if (a2.size !== b2.size) return false;
 687            for (i2 of a2.entries())
 688              if (!b2.has(i2[0])) return false;
 689            for (i2 of a2.entries())
 690              if (!equal(i2[1], b2.get(i2[0]))) return false;
 691            return true;
 692          }
 693          if (a2 instanceof Set && b2 instanceof Set) {
 694            if (a2.size !== b2.size) return false;
 695            for (i2 of a2.entries())
 696              if (!b2.has(i2[0])) return false;
 697            return true;
 698          }
 699          if (ArrayBuffer.isView(a2) && ArrayBuffer.isView(b2)) {
 700            length = a2.length;
 701            if (length != b2.length) return false;
 702            for (i2 = length; i2-- !== 0; )
 703              if (a2[i2] !== b2[i2]) return false;
 704            return true;
 705          }
 706          if (a2.constructor === RegExp) return a2.source === b2.source && a2.flags === b2.flags;
 707          if (a2.valueOf !== Object.prototype.valueOf) return a2.valueOf() === b2.valueOf();
 708          if (a2.toString !== Object.prototype.toString) return a2.toString() === b2.toString();
 709          keys = Object.keys(a2);
 710          length = keys.length;
 711          if (length !== Object.keys(b2).length) return false;
 712          for (i2 = length; i2-- !== 0; )
 713            if (!Object.prototype.hasOwnProperty.call(b2, keys[i2])) return false;
 714          for (i2 = length; i2-- !== 0; ) {
 715            var key = keys[i2];
 716            if (!equal(a2[key], b2[key])) return false;
 717          }
 718          return true;
 719        }
 720        return a2 !== a2 && b2 !== b2;
 721      };
 722    }
 723  });
 724  
 725  // package-external:@wordpress/warning
 726  var require_warning = __commonJS({
 727    "package-external:@wordpress/warning"(exports, module) {
 728      module.exports = window.wp.warning;
 729    }
 730  });
 731  
 732  // package-external:@wordpress/date
 733  var require_date = __commonJS({
 734    "package-external:@wordpress/date"(exports, module) {
 735      module.exports = window.wp.date;
 736    }
 737  });
 738  
 739  // package-external:@wordpress/deprecated
 740  var require_deprecated = __commonJS({
 741    "package-external:@wordpress/deprecated"(exports, module) {
 742      module.exports = window.wp.deprecated;
 743    }
 744  });
 745  
 746  // package-external:@wordpress/core-data
 747  var require_core_data = __commonJS({
 748    "package-external:@wordpress/core-data"(exports, module) {
 749      module.exports = window.wp.coreData;
 750    }
 751  });
 752  
 753  // package-external:@wordpress/editor
 754  var require_editor = __commonJS({
 755    "package-external:@wordpress/editor"(exports, module) {
 756      module.exports = window.wp.editor;
 757    }
 758  });
 759  
 760  // package-external:@wordpress/patterns
 761  var require_patterns = __commonJS({
 762    "package-external:@wordpress/patterns"(exports, module) {
 763      module.exports = window.wp.patterns;
 764    }
 765  });
 766  
 767  // package-external:@wordpress/block-editor
 768  var require_block_editor = __commonJS({
 769    "package-external:@wordpress/block-editor"(exports, module) {
 770      module.exports = window.wp.blockEditor;
 771    }
 772  });
 773  
 774  // routes/pattern-list/stage.tsx
 775  import {
 776    useParams,
 777    useNavigate,
 778    useSearch,
 779    Link,
 780    useInvalidate
 781  } from "@wordpress/route";
 782  
 783  // node_modules/dequal/dist/index.mjs
 784  var has = Object.prototype.hasOwnProperty;
 785  function find(iter, tar, key) {
 786    for (key of iter.keys()) {
 787      if (dequal(key, tar)) return key;
 788    }
 789  }
 790  function dequal(foo, bar) {
 791    var ctor, len, tmp;
 792    if (foo === bar) return true;
 793    if (foo && bar && (ctor = foo.constructor) === bar.constructor) {
 794      if (ctor === Date) return foo.getTime() === bar.getTime();
 795      if (ctor === RegExp) return foo.toString() === bar.toString();
 796      if (ctor === Array) {
 797        if ((len = foo.length) === bar.length) {
 798          while (len-- && dequal(foo[len], bar[len])) ;
 799        }
 800        return len === -1;
 801      }
 802      if (ctor === Set) {
 803        if (foo.size !== bar.size) {
 804          return false;
 805        }
 806        for (len of foo) {
 807          tmp = len;
 808          if (tmp && typeof tmp === "object") {
 809            tmp = find(bar, tmp);
 810            if (!tmp) return false;
 811          }
 812          if (!bar.has(tmp)) return false;
 813        }
 814        return true;
 815      }
 816      if (ctor === Map) {
 817        if (foo.size !== bar.size) {
 818          return false;
 819        }
 820        for (len of foo) {
 821          tmp = len[0];
 822          if (tmp && typeof tmp === "object") {
 823            tmp = find(bar, tmp);
 824            if (!tmp) return false;
 825          }
 826          if (!dequal(len[1], bar.get(tmp))) {
 827            return false;
 828          }
 829        }
 830        return true;
 831      }
 832      if (ctor === ArrayBuffer) {
 833        foo = new Uint8Array(foo);
 834        bar = new Uint8Array(bar);
 835      } else if (ctor === DataView) {
 836        if ((len = foo.byteLength) === bar.byteLength) {
 837          while (len-- && foo.getInt8(len) === bar.getInt8(len)) ;
 838        }
 839        return len === -1;
 840      }
 841      if (ArrayBuffer.isView(foo)) {
 842        if ((len = foo.byteLength) === bar.byteLength) {
 843          while (len-- && foo[len] === bar[len]) ;
 844        }
 845        return len === -1;
 846      }
 847      if (!ctor || typeof foo === "object") {
 848        len = 0;
 849        for (ctor in foo) {
 850          if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;
 851          if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;
 852        }
 853        return Object.keys(bar).length === len;
 854      }
 855    }
 856    return foo !== foo && bar !== bar;
 857  }
 858  
 859  // packages/views/build-module/preference-keys.js
 860  function generatePreferenceKey(kind, name, slug) {
 861    return `dataviews-$kind}-$name}-$slug}`;
 862  }
 863  
 864  // packages/views/build-module/use-view.js
 865  var import_element = __toESM(require_element());
 866  var import_data = __toESM(require_data());
 867  var import_preferences = __toESM(require_preferences());
 868  function omit(obj, keys) {
 869    const result = { ...obj };
 870    for (const key of keys) {
 871      delete result[key];
 872    }
 873    return result;
 874  }
 875  function useView(config) {
 876    const { kind, name, slug, defaultView, queryParams, onChangeQueryParams } = config;
 877    const preferenceKey = generatePreferenceKey(kind, name, slug);
 878    const persistedView = (0, import_data.useSelect)(
 879      (select2) => {
 880        return select2(import_preferences.store).get(
 881          "core/views",
 882          preferenceKey
 883        );
 884      },
 885      [preferenceKey]
 886    );
 887    const { set } = (0, import_data.useDispatch)(import_preferences.store);
 888    const baseView = persistedView ?? defaultView;
 889    const page = Number(queryParams?.page ?? baseView.page ?? 1);
 890    const search = queryParams?.search ?? baseView.search ?? "";
 891    const view = (0, import_element.useMemo)(() => {
 892      return {
 893        ...baseView,
 894        page,
 895        search
 896      };
 897    }, [baseView, page, search]);
 898    const isModified = !!persistedView;
 899    const updateView = (0, import_element.useCallback)(
 900      (newView) => {
 901        const urlParams = {
 902          page: newView?.page,
 903          search: newView?.search
 904        };
 905        const preferenceView = omit(newView, ["page", "search"]);
 906        if (onChangeQueryParams && !dequal(urlParams, { page, search })) {
 907          onChangeQueryParams(urlParams);
 908        }
 909        if (!dequal(baseView, preferenceView)) {
 910          if (dequal(preferenceView, defaultView)) {
 911            set("core/views", preferenceKey, void 0);
 912          } else {
 913            set("core/views", preferenceKey, preferenceView);
 914          }
 915        }
 916      },
 917      [
 918        onChangeQueryParams,
 919        page,
 920        search,
 921        baseView,
 922        defaultView,
 923        set,
 924        preferenceKey
 925      ]
 926    );
 927    const resetToDefault = (0, import_element.useCallback)(() => {
 928      set("core/views", preferenceKey, void 0);
 929    }, [preferenceKey, set]);
 930    return {
 931      view,
 932      isModified,
 933      updateView,
 934      resetToDefault
 935    };
 936  }
 937  
 938  // packages/views/build-module/load-view.js
 939  var import_data2 = __toESM(require_data());
 940  var import_preferences2 = __toESM(require_preferences());
 941  
 942  // packages/dataviews/build-module/components/dataviews/index.js
 943  var import_components49 = __toESM(require_components());
 944  var import_element52 = __toESM(require_element());
 945  var import_compose11 = __toESM(require_compose());
 946  
 947  // packages/dataviews/build-module/components/dataviews-context/index.js
 948  var import_element2 = __toESM(require_element());
 949  
 950  // packages/dataviews/build-module/constants.js
 951  var import_i18n = __toESM(require_i18n());
 952  
 953  // packages/icons/build-module/library/arrow-down.js
 954  var import_primitives = __toESM(require_primitives());
 955  var import_jsx_runtime = __toESM(require_jsx_runtime());
 956  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" }) });
 957  
 958  // packages/icons/build-module/library/arrow-left.js
 959  var import_primitives2 = __toESM(require_primitives());
 960  var import_jsx_runtime2 = __toESM(require_jsx_runtime());
 961  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" }) });
 962  
 963  // packages/icons/build-module/library/arrow-right.js
 964  var import_primitives3 = __toESM(require_primitives());
 965  var import_jsx_runtime3 = __toESM(require_jsx_runtime());
 966  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" }) });
 967  
 968  // packages/icons/build-module/library/arrow-up.js
 969  var import_primitives4 = __toESM(require_primitives());
 970  var import_jsx_runtime4 = __toESM(require_jsx_runtime());
 971  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" }) });
 972  
 973  // packages/icons/build-module/library/block-table.js
 974  var import_primitives5 = __toESM(require_primitives());
 975  var import_jsx_runtime5 = __toESM(require_jsx_runtime());
 976  var block_table_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: "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" }) });
 977  
 978  // packages/icons/build-module/library/category.js
 979  var import_primitives6 = __toESM(require_primitives());
 980  var import_jsx_runtime6 = __toESM(require_jsx_runtime());
 981  var category_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)(
 982    import_primitives6.Path,
 983    {
 984      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",
 985      fillRule: "evenodd",
 986      clipRule: "evenodd"
 987    }
 988  ) });
 989  
 990  // packages/icons/build-module/library/check.js
 991  var import_primitives7 = __toESM(require_primitives());
 992  var import_jsx_runtime7 = __toESM(require_jsx_runtime());
 993  var check_default = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives7.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives7.Path, { d: "M16.5 7.5 10 13.9l-2.5-2.4-1 1 3.5 3.6 7.5-7.6z" }) });
 994  
 995  // packages/icons/build-module/library/close-small.js
 996  var import_primitives8 = __toESM(require_primitives());
 997  var import_jsx_runtime8 = __toESM(require_jsx_runtime());
 998  var close_small_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: "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" }) });
 999  
1000  // packages/icons/build-module/library/cog.js
1001  var import_primitives9 = __toESM(require_primitives());
1002  var import_jsx_runtime9 = __toESM(require_jsx_runtime());
1003  var cog_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)(
1004    import_primitives9.Path,
1005    {
1006      fillRule: "evenodd",
1007      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",
1008      clipRule: "evenodd"
1009    }
1010  ) });
1011  
1012  // packages/icons/build-module/library/envelope.js
1013  var import_primitives10 = __toESM(require_primitives());
1014  var import_jsx_runtime10 = __toESM(require_jsx_runtime());
1015  var envelope_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)(
1016    import_primitives10.Path,
1017    {
1018      fillRule: "evenodd",
1019      clipRule: "evenodd",
1020      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"
1021    }
1022  ) });
1023  
1024  // packages/icons/build-module/library/error.js
1025  var import_primitives11 = __toESM(require_primitives());
1026  var import_jsx_runtime11 = __toESM(require_jsx_runtime());
1027  var error_default = /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives11.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1028    import_primitives11.Path,
1029    {
1030      fillRule: "evenodd",
1031      clipRule: "evenodd",
1032      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"
1033    }
1034  ) });
1035  
1036  // packages/icons/build-module/library/format-list-bullets-rtl.js
1037  var import_primitives12 = __toESM(require_primitives());
1038  var import_jsx_runtime12 = __toESM(require_jsx_runtime());
1039  var format_list_bullets_rtl_default = /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.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" }) });
1040  
1041  // packages/icons/build-module/library/format-list-bullets.js
1042  var import_primitives13 = __toESM(require_primitives());
1043  var import_jsx_runtime13 = __toESM(require_jsx_runtime());
1044  var format_list_bullets_default = /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives13.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives13.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" }) });
1045  
1046  // packages/icons/build-module/library/funnel.js
1047  var import_primitives14 = __toESM(require_primitives());
1048  var import_jsx_runtime14 = __toESM(require_jsx_runtime());
1049  var funnel_default = /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives14.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives14.Path, { d: "M10 17.5H14V16H10V17.5ZM6 6V7.5H18V6H6ZM8 12.5H16V11H8V12.5Z" }) });
1050  
1051  // packages/icons/build-module/library/link.js
1052  var import_primitives15 = __toESM(require_primitives());
1053  var import_jsx_runtime15 = __toESM(require_jsx_runtime());
1054  var link_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: "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" }) });
1055  
1056  // packages/icons/build-module/library/mobile.js
1057  var import_primitives16 = __toESM(require_primitives());
1058  var import_jsx_runtime16 = __toESM(require_jsx_runtime());
1059  var mobile_default = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives16.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives16.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" }) });
1060  
1061  // packages/icons/build-module/library/more-vertical.js
1062  var import_primitives17 = __toESM(require_primitives());
1063  var import_jsx_runtime17 = __toESM(require_jsx_runtime());
1064  var more_vertical_default = /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives17.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives17.Path, { d: "M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z" }) });
1065  
1066  // packages/icons/build-module/library/next.js
1067  var import_primitives18 = __toESM(require_primitives());
1068  var import_jsx_runtime18 = __toESM(require_jsx_runtime());
1069  var next_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: "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" }) });
1070  
1071  // packages/icons/build-module/library/previous.js
1072  var import_primitives19 = __toESM(require_primitives());
1073  var import_jsx_runtime19 = __toESM(require_jsx_runtime());
1074  var previous_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: "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" }) });
1075  
1076  // packages/icons/build-module/library/scheduled.js
1077  var import_primitives20 = __toESM(require_primitives());
1078  var import_jsx_runtime20 = __toESM(require_jsx_runtime());
1079  var scheduled_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)(
1080    import_primitives20.Path,
1081    {
1082      fillRule: "evenodd",
1083      clipRule: "evenodd",
1084      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"
1085    }
1086  ) });
1087  
1088  // packages/icons/build-module/library/search.js
1089  var import_primitives21 = __toESM(require_primitives());
1090  var import_jsx_runtime21 = __toESM(require_jsx_runtime());
1091  var search_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: "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" }) });
1092  
1093  // packages/icons/build-module/library/seen.js
1094  var import_primitives22 = __toESM(require_primitives());
1095  var import_jsx_runtime22 = __toESM(require_jsx_runtime());
1096  var seen_default = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives22.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives22.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" }) });
1097  
1098  // packages/icons/build-module/library/unseen.js
1099  var import_primitives23 = __toESM(require_primitives());
1100  var import_jsx_runtime23 = __toESM(require_jsx_runtime());
1101  var unseen_default = /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives23.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives23.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" }) });
1102  
1103  // packages/dataviews/build-module/constants.js
1104  var OPERATOR_IS_ANY = "isAny";
1105  var OPERATOR_IS_NONE = "isNone";
1106  var OPERATOR_IS_ALL = "isAll";
1107  var OPERATOR_IS_NOT_ALL = "isNotAll";
1108  var OPERATOR_BETWEEN = "between";
1109  var OPERATOR_IN_THE_PAST = "inThePast";
1110  var OPERATOR_OVER = "over";
1111  var OPERATOR_IS = "is";
1112  var OPERATOR_IS_NOT = "isNot";
1113  var OPERATOR_LESS_THAN = "lessThan";
1114  var OPERATOR_GREATER_THAN = "greaterThan";
1115  var OPERATOR_LESS_THAN_OR_EQUAL = "lessThanOrEqual";
1116  var OPERATOR_GREATER_THAN_OR_EQUAL = "greaterThanOrEqual";
1117  var OPERATOR_BEFORE = "before";
1118  var OPERATOR_AFTER = "after";
1119  var OPERATOR_BEFORE_INC = "beforeInc";
1120  var OPERATOR_AFTER_INC = "afterInc";
1121  var OPERATOR_CONTAINS = "contains";
1122  var OPERATOR_NOT_CONTAINS = "notContains";
1123  var OPERATOR_STARTS_WITH = "startsWith";
1124  var OPERATOR_ON = "on";
1125  var OPERATOR_NOT_ON = "notOn";
1126  var SORTING_DIRECTIONS = ["asc", "desc"];
1127  var sortArrows = { asc: "\u2191", desc: "\u2193" };
1128  var sortValues = { asc: "ascending", desc: "descending" };
1129  var sortLabels = {
1130    asc: (0, import_i18n.__)("Sort ascending"),
1131    desc: (0, import_i18n.__)("Sort descending")
1132  };
1133  var sortIcons = {
1134    asc: arrow_up_default,
1135    desc: arrow_down_default
1136  };
1137  var LAYOUT_TABLE = "table";
1138  var LAYOUT_GRID = "grid";
1139  var LAYOUT_LIST = "list";
1140  var LAYOUT_ACTIVITY = "activity";
1141  var LAYOUT_PICKER_GRID = "pickerGrid";
1142  var LAYOUT_PICKER_TABLE = "pickerTable";
1143  
1144  // packages/dataviews/build-module/components/dataviews-context/index.js
1145  var DataViewsContext = (0, import_element2.createContext)({
1146    view: { type: LAYOUT_TABLE },
1147    onChangeView: () => {
1148    },
1149    fields: [],
1150    data: [],
1151    paginationInfo: {
1152      totalItems: 0,
1153      totalPages: 0
1154    },
1155    selection: [],
1156    onChangeSelection: () => {
1157    },
1158    setOpenedFilter: () => {
1159    },
1160    openedFilter: null,
1161    getItemId: (item) => item.id,
1162    isItemClickable: () => true,
1163    renderItemLink: void 0,
1164    containerWidth: 0,
1165    containerRef: (0, import_element2.createRef)(),
1166    resizeObserverRef: () => {
1167    },
1168    defaultLayouts: { list: {}, grid: {}, table: {} },
1169    filters: [],
1170    isShowingFilter: false,
1171    setIsShowingFilter: () => {
1172    },
1173    hasInfiniteScrollHandler: false,
1174    config: {
1175      perPageSizes: []
1176    }
1177  });
1178  DataViewsContext.displayName = "DataViewsContext";
1179  var dataviews_context_default = DataViewsContext;
1180  
1181  // packages/dataviews/build-module/dataviews-layouts/index.js
1182  var import_i18n20 = __toESM(require_i18n());
1183  
1184  // node_modules/clsx/dist/clsx.mjs
1185  function r(e2) {
1186    var t2, f2, n2 = "";
1187    if ("string" == typeof e2 || "number" == typeof e2) n2 += e2;
1188    else if ("object" == typeof e2) if (Array.isArray(e2)) {
1189      var o2 = e2.length;
1190      for (t2 = 0; t2 < o2; t2++) e2[t2] && (f2 = r(e2[t2])) && (n2 && (n2 += " "), n2 += f2);
1191    } else for (f2 in e2) e2[f2] && (n2 && (n2 += " "), n2 += f2);
1192    return n2;
1193  }
1194  function clsx() {
1195    for (var e2, t2, f2 = 0, n2 = "", o2 = arguments.length; f2 < o2; f2++) (e2 = arguments[f2]) && (t2 = r(e2)) && (n2 && (n2 += " "), n2 += t2);
1196    return n2;
1197  }
1198  var clsx_default = clsx;
1199  
1200  // packages/dataviews/build-module/dataviews-layouts/table/index.js
1201  var import_i18n8 = __toESM(require_i18n());
1202  var import_components7 = __toESM(require_components());
1203  var import_element9 = __toESM(require_element());
1204  var import_keycodes = __toESM(require_keycodes());
1205  
1206  // packages/dataviews/build-module/components/dataviews-selection-checkbox/index.js
1207  var import_components = __toESM(require_components());
1208  var import_i18n2 = __toESM(require_i18n());
1209  var import_jsx_runtime24 = __toESM(require_jsx_runtime());
1210  function DataViewsSelectionCheckbox({
1211    selection,
1212    onChangeSelection,
1213    item,
1214    getItemId,
1215    titleField,
1216    disabled,
1217    ...extraProps
1218  }) {
1219    const id = getItemId(item);
1220    const checked = !disabled && selection.includes(id);
1221    const selectionLabel = titleField?.getValue?.({ item }) || (0, import_i18n2.__)("(no title)");
1222    return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1223      import_components.CheckboxControl,
1224      {
1225        className: "dataviews-selection-checkbox",
1226        "aria-label": selectionLabel,
1227        "aria-disabled": disabled,
1228        checked,
1229        onChange: () => {
1230          if (disabled) {
1231            return;
1232          }
1233          onChangeSelection(
1234            selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id]
1235          );
1236        },
1237        ...extraProps
1238      }
1239    );
1240  }
1241  
1242  // packages/dataviews/build-module/components/dataviews-item-actions/index.js
1243  var import_components2 = __toESM(require_components());
1244  var import_i18n3 = __toESM(require_i18n());
1245  var import_element3 = __toESM(require_element());
1246  var import_data3 = __toESM(require_data());
1247  var import_compose = __toESM(require_compose());
1248  
1249  // packages/dataviews/build-module/lock-unlock.js
1250  var import_private_apis = __toESM(require_private_apis());
1251  var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(
1252    "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
1253    "@wordpress/dataviews"
1254  );
1255  
1256  // packages/dataviews/build-module/components/dataviews-item-actions/index.js
1257  var import_jsx_runtime25 = __toESM(require_jsx_runtime());
1258  var { Menu, kebabCase } = unlock(import_components2.privateApis);
1259  function ButtonTrigger({
1260    action,
1261    onClick,
1262    items,
1263    variant
1264  }) {
1265    const label = typeof action.label === "string" ? action.label : action.label(items);
1266    return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1267      import_components2.Button,
1268      {
1269        disabled: !!action.disabled,
1270        accessibleWhenDisabled: true,
1271        size: "compact",
1272        variant,
1273        onClick,
1274        children: label
1275      }
1276    );
1277  }
1278  function MenuItemTrigger({
1279    action,
1280    onClick,
1281    items
1282  }) {
1283    const label = typeof action.label === "string" ? action.label : action.label(items);
1284    return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Menu.Item, { disabled: action.disabled, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Menu.ItemLabel, { children: label }) });
1285  }
1286  function ActionModal({
1287    action,
1288    items,
1289    closeModal
1290  }) {
1291    const label = typeof action.label === "string" ? action.label : action.label(items);
1292    const modalHeader = typeof action.modalHeader === "function" ? action.modalHeader(items) : action.modalHeader;
1293    return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1294      import_components2.Modal,
1295      {
1296        title: modalHeader || label,
1297        __experimentalHideHeader: !!action.hideModalHeader,
1298        onRequestClose: closeModal,
1299        focusOnMount: action.modalFocusOnMount ?? true,
1300        size: action.modalSize || "medium",
1301        overlayClassName: `dataviews-action-modal dataviews-action-modal__$kebabCase(
1302          action.id
1303        )}`,
1304        children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(action.RenderModal, { items, closeModal })
1305      }
1306    );
1307  }
1308  function ActionsMenuGroup({
1309    actions,
1310    item,
1311    registry,
1312    setActiveModalAction
1313  }) {
1314    const { primaryActions, regularActions } = (0, import_element3.useMemo)(() => {
1315      return actions.reduce(
1316        (acc, action) => {
1317          (action.isPrimary ? acc.primaryActions : acc.regularActions).push(action);
1318          return acc;
1319        },
1320        {
1321          primaryActions: [],
1322          regularActions: []
1323        }
1324      );
1325    }, [actions]);
1326    const renderActionGroup = (actionList) => actionList.map((action) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1327      MenuItemTrigger,
1328      {
1329        action,
1330        onClick: () => {
1331          if ("RenderModal" in action) {
1332            setActiveModalAction(action);
1333            return;
1334          }
1335          action.callback([item], { registry });
1336        },
1337        items: [item]
1338      },
1339      action.id
1340    ));
1341    return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Menu.Group, { children: [
1342      renderActionGroup(primaryActions),
1343      primaryActions.length > 0 && regularActions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Menu.Separator, {}),
1344      renderActionGroup(regularActions)
1345    ] });
1346  }
1347  function ItemActions({
1348    item,
1349    actions,
1350    isCompact
1351  }) {
1352    const registry = (0, import_data3.useRegistry)();
1353    const { primaryActions, eligibleActions } = (0, import_element3.useMemo)(() => {
1354      const _eligibleActions = actions.filter(
1355        (action) => !action.isEligible || action.isEligible(item)
1356      );
1357      const _primaryActions = _eligibleActions.filter(
1358        (action) => action.isPrimary
1359      );
1360      return {
1361        primaryActions: _primaryActions,
1362        eligibleActions: _eligibleActions
1363      };
1364    }, [actions, item]);
1365    if (isCompact) {
1366      return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1367        CompactItemActions,
1368        {
1369          item,
1370          actions: eligibleActions,
1371          isSmall: true,
1372          registry
1373        }
1374      );
1375    }
1376    return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
1377      import_components2.__experimentalHStack,
1378      {
1379        spacing: 0,
1380        justify: "flex-end",
1381        className: "dataviews-item-actions",
1382        style: {
1383          flexShrink: 0,
1384          width: "auto"
1385        },
1386        children: [
1387          /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1388            PrimaryActions,
1389            {
1390              item,
1391              actions: primaryActions,
1392              registry
1393            }
1394          ),
1395          primaryActions.length < eligibleActions.length && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1396            CompactItemActions,
1397            {
1398              item,
1399              actions: eligibleActions,
1400              registry
1401            }
1402          )
1403        ]
1404      }
1405    );
1406  }
1407  function CompactItemActions({
1408    item,
1409    actions,
1410    isSmall,
1411    registry
1412  }) {
1413    const [activeModalAction, setActiveModalAction] = (0, import_element3.useState)(
1414      null
1415    );
1416    return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [
1417      /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Menu, { placement: "bottom-end", children: [
1418        /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1419          Menu.TriggerButton,
1420          {
1421            render: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1422              import_components2.Button,
1423              {
1424                size: isSmall ? "small" : "compact",
1425                icon: more_vertical_default,
1426                label: (0, import_i18n3.__)("Actions"),
1427                accessibleWhenDisabled: true,
1428                disabled: !actions.length,
1429                className: "dataviews-all-actions-button"
1430              }
1431            )
1432          }
1433        ),
1434        /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Menu.Popover, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1435          ActionsMenuGroup,
1436          {
1437            actions,
1438            item,
1439            registry,
1440            setActiveModalAction
1441          }
1442        ) })
1443      ] }),
1444      !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1445        ActionModal,
1446        {
1447          action: activeModalAction,
1448          items: [item],
1449          closeModal: () => setActiveModalAction(null)
1450        }
1451      )
1452    ] });
1453  }
1454  function PrimaryActions({
1455    item,
1456    actions,
1457    registry,
1458    buttonVariant
1459  }) {
1460    const [activeModalAction, setActiveModalAction] = (0, import_element3.useState)(null);
1461    const isMobileViewport = (0, import_compose.useViewportMatch)("medium", "<");
1462    if (isMobileViewport) {
1463      return null;
1464    }
1465    if (!Array.isArray(actions) || actions.length === 0) {
1466      return null;
1467    }
1468    return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [
1469      actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1470        ButtonTrigger,
1471        {
1472          action,
1473          onClick: () => {
1474            if ("RenderModal" in action) {
1475              setActiveModalAction(action);
1476              return;
1477            }
1478            action.callback([item], { registry });
1479          },
1480          items: [item],
1481          variant: buttonVariant
1482        },
1483        action.id
1484      )),
1485      !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1486        ActionModal,
1487        {
1488          action: activeModalAction,
1489          items: [item],
1490          closeModal: () => setActiveModalAction(null)
1491        }
1492      )
1493    ] });
1494  }
1495  
1496  // packages/dataviews/build-module/components/dataviews-bulk-actions/index.js
1497  var import_components3 = __toESM(require_components());
1498  var import_i18n4 = __toESM(require_i18n());
1499  var import_element4 = __toESM(require_element());
1500  var import_data4 = __toESM(require_data());
1501  var import_compose2 = __toESM(require_compose());
1502  var import_jsx_runtime26 = __toESM(require_jsx_runtime());
1503  function ActionWithModal({
1504    action,
1505    items,
1506    ActionTriggerComponent
1507  }) {
1508    const [isModalOpen, setIsModalOpen] = (0, import_element4.useState)(false);
1509    const actionTriggerProps = {
1510      action,
1511      onClick: () => {
1512        setIsModalOpen(true);
1513      },
1514      items
1515    };
1516    return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [
1517      /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ActionTriggerComponent, { ...actionTriggerProps }),
1518      isModalOpen && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1519        ActionModal,
1520        {
1521          action,
1522          items,
1523          closeModal: () => setIsModalOpen(false)
1524        }
1525      )
1526    ] });
1527  }
1528  function useHasAPossibleBulkAction(actions, item) {
1529    return (0, import_element4.useMemo)(() => {
1530      return actions.some((action) => {
1531        return action.supportsBulk && (!action.isEligible || action.isEligible(item));
1532      });
1533    }, [actions, item]);
1534  }
1535  function useSomeItemHasAPossibleBulkAction(actions, data) {
1536    return (0, import_element4.useMemo)(() => {
1537      return data.some((item) => {
1538        return actions.some((action) => {
1539          return action.supportsBulk && (!action.isEligible || action.isEligible(item));
1540        });
1541      });
1542    }, [actions, data]);
1543  }
1544  function BulkSelectionCheckbox({
1545    selection,
1546    onChangeSelection,
1547    data,
1548    actions,
1549    getItemId
1550  }) {
1551    const selectableItems = (0, import_element4.useMemo)(() => {
1552      return data.filter((item) => {
1553        return actions.some(
1554          (action) => action.supportsBulk && (!action.isEligible || action.isEligible(item))
1555        );
1556      });
1557    }, [data, actions]);
1558    const selectedItems = data.filter(
1559      (item) => selection.includes(getItemId(item)) && selectableItems.includes(item)
1560    );
1561    const areAllSelected = selectedItems.length === selectableItems.length;
1562    return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1563      import_components3.CheckboxControl,
1564      {
1565        className: "dataviews-view-table-selection-checkbox",
1566        checked: areAllSelected,
1567        indeterminate: !areAllSelected && !!selectedItems.length,
1568        onChange: () => {
1569          if (areAllSelected) {
1570            onChangeSelection([]);
1571          } else {
1572            onChangeSelection(
1573              selectableItems.map((item) => getItemId(item))
1574            );
1575          }
1576        },
1577        "aria-label": areAllSelected ? (0, import_i18n4.__)("Deselect all") : (0, import_i18n4.__)("Select all")
1578      }
1579    );
1580  }
1581  function ActionTrigger({
1582    action,
1583    onClick,
1584    isBusy,
1585    items
1586  }) {
1587    const label = typeof action.label === "string" ? action.label : action.label(items);
1588    const isMobile = (0, import_compose2.useViewportMatch)("medium", "<");
1589    if (isMobile) {
1590      return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1591        import_components3.Button,
1592        {
1593          disabled: isBusy,
1594          accessibleWhenDisabled: true,
1595          label,
1596          icon: action.icon,
1597          size: "compact",
1598          onClick,
1599          isBusy
1600        }
1601      );
1602    }
1603    return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1604      import_components3.Button,
1605      {
1606        disabled: isBusy,
1607        accessibleWhenDisabled: true,
1608        size: "compact",
1609        onClick,
1610        isBusy,
1611        children: label
1612      }
1613    );
1614  }
1615  var EMPTY_ARRAY = [];
1616  function ActionButton({
1617    action,
1618    selectedItems,
1619    actionInProgress,
1620    setActionInProgress
1621  }) {
1622    const registry = (0, import_data4.useRegistry)();
1623    const selectedEligibleItems = (0, import_element4.useMemo)(() => {
1624      return selectedItems.filter((item) => {
1625        return !action.isEligible || action.isEligible(item);
1626      });
1627    }, [action, selectedItems]);
1628    if ("RenderModal" in action) {
1629      return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1630        ActionWithModal,
1631        {
1632          action,
1633          items: selectedEligibleItems,
1634          ActionTriggerComponent: ActionTrigger
1635        },
1636        action.id
1637      );
1638    }
1639    return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1640      ActionTrigger,
1641      {
1642        action,
1643        onClick: async () => {
1644          setActionInProgress(action.id);
1645          await action.callback(selectedItems, {
1646            registry
1647          });
1648          setActionInProgress(null);
1649        },
1650        items: selectedEligibleItems,
1651        isBusy: actionInProgress === action.id
1652      },
1653      action.id
1654    );
1655  }
1656  function renderFooterContent(data, actions, getItemId, selection, actionsToShow, selectedItems, actionInProgress, setActionInProgress, onChangeSelection) {
1657    const message2 = selectedItems.length > 0 ? (0, import_i18n4.sprintf)(
1658      /* translators: %d: number of items. */
1659      (0, import_i18n4._n)(
1660        "%d Item selected",
1661        "%d Items selected",
1662        selectedItems.length
1663      ),
1664      selectedItems.length
1665    ) : (0, import_i18n4.sprintf)(
1666      /* translators: %d: number of items. */
1667      (0, import_i18n4._n)("%d Item", "%d Items", data.length),
1668      data.length
1669    );
1670    return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1671      import_components3.__experimentalHStack,
1672      {
1673        expanded: false,
1674        className: "dataviews-bulk-actions-footer__container",
1675        spacing: 3,
1676        children: [
1677          /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1678            BulkSelectionCheckbox,
1679            {
1680              selection,
1681              onChangeSelection,
1682              data,
1683              actions,
1684              getItemId
1685            }
1686          ),
1687          /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "dataviews-bulk-actions-footer__item-count", children: message2 }),
1688          /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1689            import_components3.__experimentalHStack,
1690            {
1691              className: "dataviews-bulk-actions-footer__action-buttons",
1692              expanded: false,
1693              spacing: 1,
1694              children: [
1695                actionsToShow.map((action) => {
1696                  return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1697                    ActionButton,
1698                    {
1699                      action,
1700                      selectedItems,
1701                      actionInProgress,
1702                      setActionInProgress
1703                    },
1704                    action.id
1705                  );
1706                }),
1707                selectedItems.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1708                  import_components3.Button,
1709                  {
1710                    icon: close_small_default,
1711                    showTooltip: true,
1712                    tooltipPosition: "top",
1713                    size: "compact",
1714                    label: (0, import_i18n4.__)("Cancel"),
1715                    disabled: !!actionInProgress,
1716                    accessibleWhenDisabled: false,
1717                    onClick: () => {
1718                      onChangeSelection(EMPTY_ARRAY);
1719                    }
1720                  }
1721                )
1722              ]
1723            }
1724          )
1725        ]
1726      }
1727    );
1728  }
1729  function FooterContent({
1730    selection,
1731    actions,
1732    onChangeSelection,
1733    data,
1734    getItemId
1735  }) {
1736    const [actionInProgress, setActionInProgress] = (0, import_element4.useState)(
1737      null
1738    );
1739    const footerContentRef = (0, import_element4.useRef)(null);
1740    const isMobile = (0, import_compose2.useViewportMatch)("medium", "<");
1741    const bulkActions = (0, import_element4.useMemo)(
1742      () => actions.filter((action) => action.supportsBulk),
1743      [actions]
1744    );
1745    const selectableItems = (0, import_element4.useMemo)(() => {
1746      return data.filter((item) => {
1747        return bulkActions.some(
1748          (action) => !action.isEligible || action.isEligible(item)
1749        );
1750      });
1751    }, [data, bulkActions]);
1752    const selectedItems = (0, import_element4.useMemo)(() => {
1753      return data.filter(
1754        (item) => selection.includes(getItemId(item)) && selectableItems.includes(item)
1755      );
1756    }, [selection, data, getItemId, selectableItems]);
1757    const actionsToShow = (0, import_element4.useMemo)(
1758      () => actions.filter((action) => {
1759        return action.supportsBulk && (!isMobile || action.icon) && selectedItems.some(
1760          (item) => !action.isEligible || action.isEligible(item)
1761        );
1762      }),
1763      [actions, selectedItems, isMobile]
1764    );
1765    if (!actionInProgress) {
1766      if (footerContentRef.current) {
1767        footerContentRef.current = null;
1768      }
1769      return renderFooterContent(
1770        data,
1771        actions,
1772        getItemId,
1773        selection,
1774        actionsToShow,
1775        selectedItems,
1776        actionInProgress,
1777        setActionInProgress,
1778        onChangeSelection
1779      );
1780    } else if (!footerContentRef.current) {
1781      footerContentRef.current = renderFooterContent(
1782        data,
1783        actions,
1784        getItemId,
1785        selection,
1786        actionsToShow,
1787        selectedItems,
1788        actionInProgress,
1789        setActionInProgress,
1790        onChangeSelection
1791      );
1792    }
1793    return footerContentRef.current;
1794  }
1795  function BulkActionsFooter() {
1796    const {
1797      data,
1798      selection,
1799      actions = EMPTY_ARRAY,
1800      onChangeSelection,
1801      getItemId
1802    } = (0, import_element4.useContext)(dataviews_context_default);
1803    return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1804      FooterContent,
1805      {
1806        selection,
1807        onChangeSelection,
1808        data,
1809        actions,
1810        getItemId
1811      }
1812    );
1813  }
1814  
1815  // packages/dataviews/build-module/dataviews-layouts/table/column-header-menu.js
1816  var import_i18n5 = __toESM(require_i18n());
1817  var import_components4 = __toESM(require_components());
1818  var import_element5 = __toESM(require_element());
1819  
1820  // packages/dataviews/build-module/utils/get-hideable-fields.js
1821  function getHideableFields(view, fields) {
1822    const togglableFields = [
1823      view?.titleField,
1824      view?.mediaField,
1825      view?.descriptionField
1826    ].filter(Boolean);
1827    return fields.filter(
1828      (f2) => !togglableFields.includes(f2.id) && f2.type !== "media" && f2.enableHiding !== false
1829    );
1830  }
1831  
1832  // packages/dataviews/build-module/dataviews-layouts/table/column-header-menu.js
1833  var import_jsx_runtime27 = __toESM(require_jsx_runtime());
1834  var { Menu: Menu2 } = unlock(import_components4.privateApis);
1835  function WithMenuSeparators({ children }) {
1836    return import_element5.Children.toArray(children).filter(Boolean).map((child, i2) => /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_element5.Fragment, { children: [
1837      i2 > 0 && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.Separator, {}),
1838      child
1839    ] }, i2));
1840  }
1841  var _HeaderMenu = (0, import_element5.forwardRef)(function HeaderMenu({
1842    fieldId,
1843    view,
1844    fields,
1845    onChangeView,
1846    onHide,
1847    setOpenedFilter,
1848    canMove = true,
1849    canInsertLeft = true,
1850    canInsertRight = true
1851  }, ref) {
1852    const visibleFieldIds = view.fields ?? [];
1853    const index = visibleFieldIds?.indexOf(fieldId);
1854    const isSorted = view.sort?.field === fieldId;
1855    let isHidable = false;
1856    let isSortable = false;
1857    let canAddFilter = false;
1858    let operators = [];
1859    const field = fields.find((f2) => f2.id === fieldId);
1860    const { setIsShowingFilter } = (0, import_element5.useContext)(dataviews_context_default);
1861    if (!field) {
1862      return null;
1863    }
1864    isHidable = field.enableHiding !== false;
1865    isSortable = field.enableSorting !== false;
1866    const header = field.header;
1867    operators = !!field.filterBy && field.filterBy?.operators || [];
1868    canAddFilter = !view.filters?.some((_filter) => fieldId === _filter.field) && !!(field.hasElements || field.Edit) && field.filterBy !== false && !field.filterBy?.isPrimary;
1869    if (!isSortable && !canMove && !isHidable && !canAddFilter) {
1870      return header;
1871    }
1872    const hiddenFields = getHideableFields(view, fields).filter(
1873      (f2) => !visibleFieldIds.includes(f2.id)
1874    );
1875    const canInsert = (canInsertLeft || canInsertRight) && !!hiddenFields.length;
1876    return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Menu2, { children: [
1877      /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
1878        Menu2.TriggerButton,
1879        {
1880          render: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1881            import_components4.Button,
1882            {
1883              size: "compact",
1884              className: "dataviews-view-table-header-button",
1885              ref,
1886              variant: "tertiary"
1887            }
1888          ),
1889          children: [
1890            header,
1891            view.sort && isSorted && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { "aria-hidden": "true", children: sortArrows[view.sort.direction] })
1892          ]
1893        }
1894      ),
1895      /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.Popover, { style: { minWidth: "240px" }, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(WithMenuSeparators, { children: [
1896        isSortable && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.Group, { children: SORTING_DIRECTIONS.map(
1897          (direction) => {
1898            const isChecked = view.sort && isSorted && view.sort.direction === direction;
1899            const value = `$fieldId}-$direction}`;
1900            return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1901              Menu2.RadioItem,
1902              {
1903                name: "view-table-sorting",
1904                value,
1905                checked: isChecked,
1906                onChange: () => {
1907                  onChangeView({
1908                    ...view,
1909                    sort: {
1910                      field: fieldId,
1911                      direction
1912                    },
1913                    showLevels: false
1914                  });
1915                },
1916                children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: sortLabels[direction] })
1917              },
1918              value
1919            );
1920          }
1921        ) }),
1922        canAddFilter && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1923          Menu2.Item,
1924          {
1925            prefix: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_components4.Icon, { icon: funnel_default }),
1926            onClick: () => {
1927              setOpenedFilter(fieldId);
1928              setIsShowingFilter(true);
1929              onChangeView({
1930                ...view,
1931                page: 1,
1932                filters: [
1933                  ...view.filters || [],
1934                  {
1935                    field: fieldId,
1936                    value: void 0,
1937                    operator: operators[0]
1938                  }
1939                ]
1940              });
1941            },
1942            children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: (0, import_i18n5.__)("Add filter") })
1943          }
1944        ) }),
1945        (canMove || isHidable || canInsert) && field && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Menu2.Group, { children: [
1946          canMove && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1947            Menu2.Item,
1948            {
1949              prefix: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_components4.Icon, { icon: arrow_left_default }),
1950              disabled: index < 1,
1951              onClick: () => {
1952                onChangeView({
1953                  ...view,
1954                  fields: [
1955                    ...visibleFieldIds.slice(
1956                      0,
1957                      index - 1
1958                    ) ?? [],
1959                    fieldId,
1960                    visibleFieldIds[index - 1],
1961                    ...visibleFieldIds.slice(
1962                      index + 1
1963                    )
1964                  ]
1965                });
1966              },
1967              children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: (0, import_i18n5.__)("Move left") })
1968            }
1969          ),
1970          canMove && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1971            Menu2.Item,
1972            {
1973              prefix: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_components4.Icon, { icon: arrow_right_default }),
1974              disabled: index >= visibleFieldIds.length - 1,
1975              onClick: () => {
1976                onChangeView({
1977                  ...view,
1978                  fields: [
1979                    ...visibleFieldIds.slice(
1980                      0,
1981                      index
1982                    ) ?? [],
1983                    visibleFieldIds[index + 1],
1984                    fieldId,
1985                    ...visibleFieldIds.slice(
1986                      index + 2
1987                    )
1988                  ]
1989                });
1990              },
1991              children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: (0, import_i18n5.__)("Move right") })
1992            }
1993          ),
1994          canInsertLeft && !!hiddenFields.length && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Menu2, { children: [
1995            /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.SubmenuTriggerItem, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: (0, import_i18n5.__)("Insert left") }) }),
1996            /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.Popover, { children: hiddenFields.map((hiddenField) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1997              Menu2.Item,
1998              {
1999                onClick: () => {
2000                  onChangeView({
2001                    ...view,
2002                    fields: [
2003                      ...visibleFieldIds.slice(
2004                        0,
2005                        index
2006                      ),
2007                      hiddenField.id,
2008                      ...visibleFieldIds.slice(
2009                        index
2010                      )
2011                    ]
2012                  });
2013                },
2014                children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: hiddenField.label })
2015              },
2016              hiddenField.id
2017            )) })
2018          ] }),
2019          canInsertRight && !!hiddenFields.length && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Menu2, { children: [
2020            /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.SubmenuTriggerItem, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: (0, import_i18n5.__)("Insert right") }) }),
2021            /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.Popover, { children: hiddenFields.map((hiddenField) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2022              Menu2.Item,
2023              {
2024                onClick: () => {
2025                  onChangeView({
2026                    ...view,
2027                    fields: [
2028                      ...visibleFieldIds.slice(
2029                        0,
2030                        index + 1
2031                      ),
2032                      hiddenField.id,
2033                      ...visibleFieldIds.slice(
2034                        index + 1
2035                      )
2036                    ]
2037                  });
2038                },
2039                children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: hiddenField.label })
2040              },
2041              hiddenField.id
2042            )) })
2043          ] }),
2044          isHidable && field && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2045            Menu2.Item,
2046            {
2047              prefix: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_components4.Icon, { icon: unseen_default }),
2048              onClick: () => {
2049                onHide(field);
2050                onChangeView({
2051                  ...view,
2052                  fields: visibleFieldIds.filter(
2053                    (id) => id !== fieldId
2054                  )
2055                });
2056              },
2057              children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Menu2.ItemLabel, { children: (0, import_i18n5.__)("Hide column") })
2058            }
2059          )
2060        ] })
2061      ] }) })
2062    ] });
2063  });
2064  var ColumnHeaderMenu = _HeaderMenu;
2065  var column_header_menu_default = ColumnHeaderMenu;
2066  
2067  // packages/dataviews/build-module/dataviews-layouts/table/column-primary.js
2068  var import_components5 = __toESM(require_components());
2069  
2070  // packages/dataviews/build-module/dataviews-layouts/utils/item-click-wrapper.js
2071  var import_element6 = __toESM(require_element());
2072  var import_jsx_runtime28 = __toESM(require_jsx_runtime());
2073  function getClickableItemProps({
2074    item,
2075    isItemClickable,
2076    onClickItem,
2077    className
2078  }) {
2079    if (!isItemClickable(item) || !onClickItem) {
2080      return { className };
2081    }
2082    return {
2083      className: className ? `$className} $className}--clickable` : void 0,
2084      role: "button",
2085      tabIndex: 0,
2086      onClick: (event) => {
2087        event.stopPropagation();
2088        onClickItem(item);
2089      },
2090      onKeyDown: (event) => {
2091        if (event.key === "Enter" || event.key === "" || event.key === " ") {
2092          event.stopPropagation();
2093          onClickItem(item);
2094        }
2095      }
2096    };
2097  }
2098  function ItemClickWrapper({
2099    item,
2100    isItemClickable,
2101    onClickItem,
2102    renderItemLink,
2103    className,
2104    children,
2105    ...extraProps
2106  }) {
2107    if (!isItemClickable(item)) {
2108      return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className, ...extraProps, children });
2109    }
2110    if (renderItemLink) {
2111      const renderedElement = renderItemLink({
2112        item,
2113        className: `$className} $className}--clickable`,
2114        ...extraProps,
2115        children
2116      });
2117      return (0, import_element6.cloneElement)(renderedElement, {
2118        onClick: (event) => {
2119          event.stopPropagation();
2120          if (renderedElement.props.onClick) {
2121            renderedElement.props.onClick(event);
2122          }
2123        },
2124        onKeyDown: (event) => {
2125          if (event.key === "Enter" || event.key === "" || event.key === " ") {
2126            event.stopPropagation();
2127            if (renderedElement.props.onKeyDown) {
2128              renderedElement.props.onKeyDown(event);
2129            }
2130          }
2131        }
2132      });
2133    }
2134    const clickProps = getClickableItemProps({
2135      item,
2136      isItemClickable,
2137      onClickItem,
2138      className
2139    });
2140    return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { ...clickProps, ...extraProps, children });
2141  }
2142  
2143  // packages/dataviews/build-module/dataviews-layouts/table/column-primary.js
2144  var import_jsx_runtime29 = __toESM(require_jsx_runtime());
2145  function ColumnPrimary({
2146    item,
2147    level,
2148    titleField,
2149    mediaField,
2150    descriptionField,
2151    onClickItem,
2152    renderItemLink,
2153    isItemClickable
2154  }) {
2155    return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_components5.__experimentalHStack, { spacing: 3, alignment: "flex-start", justify: "flex-start", children: [
2156      mediaField && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2157        ItemClickWrapper,
2158        {
2159          item,
2160          isItemClickable,
2161          onClickItem,
2162          renderItemLink,
2163          className: "dataviews-view-table__cell-content-wrapper dataviews-column-primary__media",
2164          "aria-label": isItemClickable(item) && (!!onClickItem || !!renderItemLink) && !!titleField ? titleField.getValue?.({ item }) : void 0,
2165          children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2166            mediaField.render,
2167            {
2168              item,
2169              field: mediaField,
2170              config: { sizes: "32px" }
2171            }
2172          )
2173        }
2174      ),
2175      /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
2176        import_components5.__experimentalVStack,
2177        {
2178          spacing: 0,
2179          alignment: "flex-start",
2180          className: "dataviews-view-table__primary-column-content",
2181          children: [
2182            titleField && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
2183              ItemClickWrapper,
2184              {
2185                item,
2186                isItemClickable,
2187                onClickItem,
2188                renderItemLink,
2189                className: "dataviews-view-table__cell-content-wrapper dataviews-title-field",
2190                children: [
2191                  level !== void 0 && level > 0 && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("span", { className: "dataviews-view-table__level", children: [
2192                    "\u2014".repeat(level),
2193                    "\xA0"
2194                  ] }),
2195                  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(titleField.render, { item, field: titleField })
2196                ]
2197              }
2198            ),
2199            descriptionField && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2200              descriptionField.render,
2201              {
2202                item,
2203                field: descriptionField
2204              }
2205            )
2206          ]
2207        }
2208      )
2209    ] });
2210  }
2211  var column_primary_default = ColumnPrimary;
2212  
2213  // packages/dataviews/build-module/dataviews-layouts/table/use-is-horizontal-scroll-end.js
2214  var import_compose3 = __toESM(require_compose());
2215  var import_element7 = __toESM(require_element());
2216  var import_i18n6 = __toESM(require_i18n());
2217  var isScrolledToEnd = (element) => {
2218    if ((0, import_i18n6.isRTL)()) {
2219      const scrollLeft = Math.abs(element.scrollLeft);
2220      return scrollLeft <= 1;
2221    }
2222    return element.scrollLeft + element.clientWidth >= element.scrollWidth - 1;
2223  };
2224  function useIsHorizontalScrollEnd({
2225    scrollContainerRef,
2226    enabled = false
2227  }) {
2228    const [isHorizontalScrollEnd, setIsHorizontalScrollEnd] = (0, import_element7.useState)(false);
2229    const handleIsHorizontalScrollEnd = (0, import_compose3.useDebounce)(
2230      (0, import_element7.useCallback)(() => {
2231        const scrollContainer = scrollContainerRef.current;
2232        if (scrollContainer) {
2233          setIsHorizontalScrollEnd(isScrolledToEnd(scrollContainer));
2234        }
2235      }, [scrollContainerRef, setIsHorizontalScrollEnd]),
2236      200
2237    );
2238    (0, import_element7.useEffect)(() => {
2239      if (typeof window === "undefined" || !enabled || !scrollContainerRef.current) {
2240        return () => {
2241        };
2242      }
2243      handleIsHorizontalScrollEnd();
2244      scrollContainerRef.current.addEventListener(
2245        "scroll",
2246        handleIsHorizontalScrollEnd
2247      );
2248      window.addEventListener("resize", handleIsHorizontalScrollEnd);
2249      return () => {
2250        scrollContainerRef.current?.removeEventListener(
2251          "scroll",
2252          handleIsHorizontalScrollEnd
2253        );
2254        window.removeEventListener("resize", handleIsHorizontalScrollEnd);
2255      };
2256    }, [scrollContainerRef, enabled]);
2257    return isHorizontalScrollEnd;
2258  }
2259  
2260  // packages/dataviews/build-module/dataviews-layouts/utils/get-data-by-group.js
2261  function getDataByGroup(data, groupByField) {
2262    return data.reduce((groups, item) => {
2263      const groupName = groupByField.getValue({ item });
2264      if (!groups.has(groupName)) {
2265        groups.set(groupName, []);
2266      }
2267      groups.get(groupName)?.push(item);
2268      return groups;
2269    }, /* @__PURE__ */ new Map());
2270  }
2271  
2272  // packages/dataviews/build-module/components/dataviews-view-config/properties-section.js
2273  var import_components6 = __toESM(require_components());
2274  var import_i18n7 = __toESM(require_i18n());
2275  var import_element8 = __toESM(require_element());
2276  var import_jsx_runtime30 = __toESM(require_jsx_runtime());
2277  function FieldItem({
2278    field,
2279    isVisible: isVisible2,
2280    onToggleVisibility
2281  }) {
2282    return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_components6.__experimentalItem, { onClick: field.enableHiding ? onToggleVisibility : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_components6.__experimentalHStack, { expanded: true, justify: "flex-start", alignment: "center", children: [
2283      /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { style: { height: 24, width: 24 }, children: isVisible2 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_components6.Icon, { icon: check_default }) }),
2284      /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "dataviews-view-config__label", children: field.label })
2285    ] }) });
2286  }
2287  function isDefined(item) {
2288    return !!item;
2289  }
2290  function PropertiesSection({
2291    showLabel = true
2292  }) {
2293    const { view, fields, onChangeView } = (0, import_element8.useContext)(dataviews_context_default);
2294    const regularFields = getHideableFields(view, fields);
2295    if (!regularFields?.length) {
2296      return null;
2297    }
2298    const titleField = fields.find((f2) => f2.id === view.titleField);
2299    const previewField2 = fields.find((f2) => f2.id === view.mediaField);
2300    const descriptionField = fields.find(
2301      (f2) => f2.id === view.descriptionField
2302    );
2303    const lockedFields = [
2304      {
2305        field: titleField,
2306        isVisibleFlag: "showTitle"
2307      },
2308      {
2309        field: previewField2,
2310        isVisibleFlag: "showMedia"
2311      },
2312      {
2313        field: descriptionField,
2314        isVisibleFlag: "showDescription"
2315      }
2316    ].filter(({ field }) => isDefined(field));
2317    const visibleFieldIds = view.fields ?? [];
2318    const visibleRegularFieldsCount = regularFields.filter(
2319      (f2) => visibleFieldIds.includes(f2.id)
2320    ).length;
2321    let visibleLockedFields = lockedFields.filter(
2322      ({ field, isVisibleFlag }) => (
2323        // @ts-expect-error
2324        isDefined(field) && (view[isVisibleFlag] ?? true)
2325      )
2326    );
2327    const totalVisibleFields = visibleLockedFields.length + visibleRegularFieldsCount;
2328    if (totalVisibleFields === 1) {
2329      if (visibleLockedFields.length === 1) {
2330        visibleLockedFields = visibleLockedFields.map((locked) => ({
2331          ...locked,
2332          field: { ...locked.field, enableHiding: false }
2333        }));
2334      }
2335    }
2336    const hiddenLockedFields = lockedFields.filter(
2337      ({ field, isVisibleFlag }) => (
2338        // @ts-expect-error
2339        isDefined(field) && !(view[isVisibleFlag] ?? true)
2340      )
2341    );
2342    return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_components6.__experimentalVStack, { className: "dataviews-field-control", spacing: 0, children: [
2343      showLabel && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_components6.BaseControl.VisualLabel, { children: (0, import_i18n7.__)("Properties") }),
2344      /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_components6.__experimentalVStack, { className: "dataviews-view-config__properties", spacing: 0, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_components6.__experimentalItemGroup, { isBordered: true, isSeparated: true, size: "medium", children: [
2345        visibleLockedFields.map(({ field, isVisibleFlag }) => {
2346          return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2347            FieldItem,
2348            {
2349              field,
2350              isVisible: true,
2351              onToggleVisibility: () => {
2352                onChangeView({
2353                  ...view,
2354                  [isVisibleFlag]: false
2355                });
2356              }
2357            },
2358            field.id
2359          );
2360        }),
2361        hiddenLockedFields.map(({ field, isVisibleFlag }) => {
2362          return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2363            FieldItem,
2364            {
2365              field,
2366              isVisible: false,
2367              onToggleVisibility: () => {
2368                onChangeView({
2369                  ...view,
2370                  [isVisibleFlag]: true
2371                });
2372              }
2373            },
2374            field.id
2375          );
2376        }),
2377        regularFields.map((field) => {
2378          const isVisible2 = visibleFieldIds.includes(field.id);
2379          const isLastVisible = totalVisibleFields === 1 && isVisible2;
2380          const fieldToRender = isLastVisible ? { ...field, enableHiding: false } : field;
2381          return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2382            FieldItem,
2383            {
2384              field: fieldToRender,
2385              isVisible: isVisible2,
2386              onToggleVisibility: () => {
2387                onChangeView({
2388                  ...view,
2389                  fields: isVisible2 ? visibleFieldIds.filter(
2390                    (fieldId) => fieldId !== field.id
2391                  ) : [...visibleFieldIds, field.id]
2392                });
2393              }
2394            },
2395            field.id
2396          );
2397        })
2398      ] }) })
2399    ] });
2400  }
2401  
2402  // packages/dataviews/build-module/dataviews-layouts/table/index.js
2403  var import_jsx_runtime31 = __toESM(require_jsx_runtime());
2404  function TableColumnField({
2405    item,
2406    fields,
2407    column,
2408    align
2409  }) {
2410    const field = fields.find((f2) => f2.id === column);
2411    if (!field) {
2412      return null;
2413    }
2414    const className = clsx_default("dataviews-view-table__cell-content-wrapper", {
2415      "dataviews-view-table__cell-align-end": align === "end",
2416      "dataviews-view-table__cell-align-center": align === "center"
2417    });
2418    return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(field.render, { item, field }) });
2419  }
2420  function TableRow({
2421    hasBulkActions,
2422    item,
2423    level,
2424    actions,
2425    fields,
2426    id,
2427    view,
2428    titleField,
2429    mediaField,
2430    descriptionField,
2431    selection,
2432    getItemId,
2433    isItemClickable,
2434    onClickItem,
2435    renderItemLink,
2436    onChangeSelection,
2437    isActionsColumnSticky,
2438    posinset
2439  }) {
2440    const { paginationInfo } = (0, import_element9.useContext)(dataviews_context_default);
2441    const hasPossibleBulkAction = useHasAPossibleBulkAction(actions, item);
2442    const isSelected2 = hasPossibleBulkAction && selection.includes(id);
2443    const {
2444      showTitle = true,
2445      showMedia = true,
2446      showDescription = true,
2447      infiniteScrollEnabled
2448    } = view;
2449    const isTouchDeviceRef = (0, import_element9.useRef)(false);
2450    const columns = view.fields ?? [];
2451    const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription;
2452    return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
2453      "tr",
2454      {
2455        className: clsx_default("dataviews-view-table__row", {
2456          "is-selected": hasPossibleBulkAction && isSelected2,
2457          "has-bulk-actions": hasPossibleBulkAction
2458        }),
2459        onTouchStart: () => {
2460          isTouchDeviceRef.current = true;
2461        },
2462        "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0,
2463        "aria-posinset": posinset,
2464        role: infiniteScrollEnabled ? "article" : void 0,
2465        onMouseDown: (event) => {
2466          const isMetaClick = (0, import_keycodes.isAppleOS)() ? event.metaKey : event.ctrlKey;
2467          if (event.button === 0 && isMetaClick && window.navigator.userAgent.toLowerCase().includes("firefox")) {
2468            event?.preventDefault();
2469          }
2470        },
2471        onClick: (event) => {
2472          if (!hasPossibleBulkAction) {
2473            return;
2474          }
2475          const isModifierKeyPressed = (0, import_keycodes.isAppleOS)() ? event.metaKey : event.ctrlKey;
2476          if (isModifierKeyPressed && !isTouchDeviceRef.current && document.getSelection()?.type !== "Range") {
2477            onChangeSelection(
2478              selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id]
2479            );
2480          }
2481        },
2482        children: [
2483          hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("td", { className: "dataviews-view-table__checkbox-column", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "dataviews-view-table__cell-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2484            DataViewsSelectionCheckbox,
2485            {
2486              item,
2487              selection,
2488              onChangeSelection,
2489              getItemId,
2490              titleField,
2491              disabled: !hasPossibleBulkAction
2492            }
2493          ) }) }),
2494          hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2495            column_primary_default,
2496            {
2497              item,
2498              level,
2499              titleField: showTitle ? titleField : void 0,
2500              mediaField: showMedia ? mediaField : void 0,
2501              descriptionField: showDescription ? descriptionField : void 0,
2502              isItemClickable,
2503              onClickItem,
2504              renderItemLink
2505            }
2506          ) }),
2507          columns.map((column) => {
2508            const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {};
2509            return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2510              "td",
2511              {
2512                style: {
2513                  width,
2514                  maxWidth,
2515                  minWidth
2516                },
2517                children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2518                  TableColumnField,
2519                  {
2520                    fields,
2521                    item,
2522                    column,
2523                    align
2524                  }
2525                )
2526              },
2527              column
2528            );
2529          }),
2530          !!actions?.length && // Disable reason: we are not making the element interactive,
2531          // but preventing any click events from bubbling up to the
2532          // table row. This allows us to add a click handler to the row
2533          // itself (to toggle row selection) without erroneously
2534          // intercepting click events from ItemActions.
2535          /* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */
2536          /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2537            "td",
2538            {
2539              className: clsx_default("dataviews-view-table__actions-column", {
2540                "dataviews-view-table__actions-column--sticky": true,
2541                "dataviews-view-table__actions-column--stuck": isActionsColumnSticky
2542              }),
2543              onClick: (e2) => e2.stopPropagation(),
2544              children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(ItemActions, { item, actions })
2545            }
2546          )
2547        ]
2548      }
2549    );
2550  }
2551  function ViewTable({
2552    actions,
2553    data,
2554    fields,
2555    getItemId,
2556    getItemLevel,
2557    isLoading = false,
2558    onChangeView,
2559    onChangeSelection,
2560    selection,
2561    setOpenedFilter,
2562    onClickItem,
2563    isItemClickable,
2564    renderItemLink,
2565    view,
2566    className,
2567    empty
2568  }) {
2569    const { containerRef } = (0, import_element9.useContext)(dataviews_context_default);
2570    const headerMenuRefs = (0, import_element9.useRef)(/* @__PURE__ */ new Map());
2571    const headerMenuToFocusRef = (0, import_element9.useRef)();
2572    const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, import_element9.useState)();
2573    const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data);
2574    const [contextMenuAnchor, setContextMenuAnchor] = (0, import_element9.useState)(null);
2575    (0, import_element9.useEffect)(() => {
2576      if (headerMenuToFocusRef.current) {
2577        headerMenuToFocusRef.current.focus();
2578        headerMenuToFocusRef.current = void 0;
2579      }
2580    });
2581    const tableNoticeId = (0, import_element9.useId)();
2582    const isHorizontalScrollEnd = useIsHorizontalScrollEnd({
2583      scrollContainerRef: containerRef,
2584      enabled: !!actions?.length
2585    });
2586    if (nextHeaderMenuToFocus) {
2587      headerMenuToFocusRef.current = nextHeaderMenuToFocus;
2588      setNextHeaderMenuToFocus(void 0);
2589      return;
2590    }
2591    const onHide = (field) => {
2592      const hidden = headerMenuRefs.current.get(field.id);
2593      const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : void 0;
2594      setNextHeaderMenuToFocus(fallback?.node);
2595    };
2596    const handleHeaderContextMenu = (event) => {
2597      event.preventDefault();
2598      event.stopPropagation();
2599      const virtualAnchor = {
2600        getBoundingClientRect: () => ({
2601          x: event.clientX,
2602          y: event.clientY,
2603          top: event.clientY,
2604          left: event.clientX,
2605          right: event.clientX,
2606          bottom: event.clientY,
2607          width: 0,
2608          height: 0,
2609          toJSON: () => ({})
2610        })
2611      };
2612      window.requestAnimationFrame(() => {
2613        setContextMenuAnchor(virtualAnchor);
2614      });
2615    };
2616    const hasData = !!data?.length;
2617    const titleField = fields.find((field) => field.id === view.titleField);
2618    const mediaField = fields.find((field) => field.id === view.mediaField);
2619    const descriptionField = fields.find(
2620      (field) => field.id === view.descriptionField
2621    );
2622    const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null;
2623    const dataByGroup = groupField ? getDataByGroup(data, groupField) : null;
2624    const { showTitle = true, showMedia = true, showDescription = true } = view;
2625    const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription;
2626    const columns = view.fields ?? [];
2627    const headerMenuRef = (column, index) => (node) => {
2628      if (node) {
2629        headerMenuRefs.current.set(column, {
2630          node,
2631          fallback: columns[index > 0 ? index - 1 : 1]
2632        });
2633      } else {
2634        headerMenuRefs.current.delete(column);
2635      }
2636    };
2637    const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup;
2638    return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_jsx_runtime31.Fragment, { children: [
2639      /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
2640        "table",
2641        {
2642          className: clsx_default("dataviews-view-table", className, {
2643            [`has-$view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes(
2644              view.layout.density
2645            ),
2646            "has-bulk-actions": hasBulkActions
2647          }),
2648          "aria-busy": isLoading,
2649          "aria-describedby": tableNoticeId,
2650          role: isInfiniteScroll ? "feed" : void 0,
2651          children: [
2652            /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("colgroup", { children: [
2653              hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("col", { className: "dataviews-view-table__col-checkbox" }),
2654              hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("col", { className: "dataviews-view-table__col-first-data" }),
2655              columns.map((column, index) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2656                "col",
2657                {
2658                  className: clsx_default(
2659                    `dataviews-view-table__col-$column}`,
2660                    {
2661                      "dataviews-view-table__col-first-data": !hasPrimaryColumn && index === 0
2662                    }
2663                  )
2664                },
2665                `col-$column}`
2666              )),
2667              !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("col", { className: "dataviews-view-table__col-actions" })
2668            ] }),
2669            contextMenuAnchor && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2670              import_components7.Popover,
2671              {
2672                anchor: contextMenuAnchor,
2673                onClose: () => setContextMenuAnchor(null),
2674                placement: "bottom-start",
2675                children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(PropertiesSection, { showLabel: false })
2676              }
2677            ),
2678            /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("thead", { onContextMenu: handleHeaderContextMenu, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("tr", { className: "dataviews-view-table__row", children: [
2679              hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2680                "th",
2681                {
2682                  className: "dataviews-view-table__checkbox-column",
2683                  scope: "col",
2684                  onContextMenu: handleHeaderContextMenu,
2685                  children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2686                    BulkSelectionCheckbox,
2687                    {
2688                      selection,
2689                      onChangeSelection,
2690                      data,
2691                      actions,
2692                      getItemId
2693                    }
2694                  )
2695                }
2696              ),
2697              hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("th", { scope: "col", children: titleField && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2698                column_header_menu_default,
2699                {
2700                  ref: headerMenuRef(
2701                    titleField.id,
2702                    0
2703                  ),
2704                  fieldId: titleField.id,
2705                  view,
2706                  fields,
2707                  onChangeView,
2708                  onHide,
2709                  setOpenedFilter,
2710                  canMove: false,
2711                  canInsertLeft: false,
2712                  canInsertRight: view.layout?.enableMoving ?? true
2713                }
2714              ) }),
2715              columns.map((column, index) => {
2716                const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {};
2717                const canInsertOrMove = view.layout?.enableMoving ?? true;
2718                return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2719                  "th",
2720                  {
2721                    style: {
2722                      width,
2723                      maxWidth,
2724                      minWidth,
2725                      textAlign: align
2726                    },
2727                    "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : void 0,
2728                    scope: "col",
2729                    children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2730                      column_header_menu_default,
2731                      {
2732                        ref: headerMenuRef(column, index),
2733                        fieldId: column,
2734                        view,
2735                        fields,
2736                        onChangeView,
2737                        onHide,
2738                        setOpenedFilter,
2739                        canMove: canInsertOrMove,
2740                        canInsertLeft: canInsertOrMove,
2741                        canInsertRight: canInsertOrMove
2742                      }
2743                    )
2744                  },
2745                  column
2746                );
2747              }),
2748              !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2749                "th",
2750                {
2751                  className: clsx_default(
2752                    "dataviews-view-table__actions-column",
2753                    {
2754                      "dataviews-view-table__actions-column--sticky": true,
2755                      "dataviews-view-table__actions-column--stuck": !isHorizontalScrollEnd
2756                    }
2757                  ),
2758                  children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "dataviews-view-table-header", children: (0, import_i18n8.__)("Actions") })
2759                }
2760              )
2761            ] }) }),
2762            hasData && groupField && dataByGroup ? Array.from(dataByGroup.entries()).map(
2763              ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("tbody", { children: [
2764                /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("tr", { className: "dataviews-view-table__group-header-row", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2765                  "td",
2766                  {
2767                    colSpan: columns.length + (hasPrimaryColumn ? 1 : 0) + (hasBulkActions ? 1 : 0) + (actions?.length ? 1 : 0),
2768                    className: "dataviews-view-table__group-header-cell",
2769                    children: (0, import_i18n8.sprintf)(
2770                      // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022".
2771                      (0, import_i18n8.__)("%1$s: %2$s"),
2772                      groupField.label,
2773                      groupName
2774                    )
2775                  }
2776                ) }),
2777                groupItems.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2778                  TableRow,
2779                  {
2780                    item,
2781                    level: view.showLevels && typeof getItemLevel === "function" ? getItemLevel(item) : void 0,
2782                    hasBulkActions,
2783                    actions,
2784                    fields,
2785                    id: getItemId(item) || index.toString(),
2786                    view,
2787                    titleField,
2788                    mediaField,
2789                    descriptionField,
2790                    selection,
2791                    getItemId,
2792                    onChangeSelection,
2793                    onClickItem,
2794                    renderItemLink,
2795                    isItemClickable,
2796                    isActionsColumnSticky: !isHorizontalScrollEnd
2797                  },
2798                  getItemId(item)
2799                ))
2800              ] }, `group-$groupName}`)
2801            ) : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("tbody", { children: hasData && data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2802              TableRow,
2803              {
2804                item,
2805                level: view.showLevels && typeof getItemLevel === "function" ? getItemLevel(item) : void 0,
2806                hasBulkActions,
2807                actions,
2808                fields,
2809                id: getItemId(item) || index.toString(),
2810                view,
2811                titleField,
2812                mediaField,
2813                descriptionField,
2814                selection,
2815                getItemId,
2816                onChangeSelection,
2817                onClickItem,
2818                renderItemLink,
2819                isItemClickable,
2820                isActionsColumnSticky: !isHorizontalScrollEnd,
2821                posinset: isInfiniteScroll ? index + 1 : void 0
2822              },
2823              getItemId(item)
2824            )) })
2825          ]
2826        }
2827      ),
2828      /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
2829        "div",
2830        {
2831          className: clsx_default({
2832            "dataviews-loading": isLoading,
2833            "dataviews-no-results": !hasData && !isLoading
2834          }),
2835          id: tableNoticeId,
2836          children: [
2837            !hasData && (isLoading ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_components7.Spinner, {}) }) : empty),
2838            hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_components7.Spinner, {}) })
2839          ]
2840        }
2841      )
2842    ] });
2843  }
2844  var table_default = ViewTable;
2845  
2846  // packages/dataviews/build-module/dataviews-layouts/grid/index.js
2847  var import_components10 = __toESM(require_components());
2848  var import_i18n11 = __toESM(require_i18n());
2849  
2850  // packages/dataviews/build-module/dataviews-layouts/grid/composite-grid.js
2851  var import_components9 = __toESM(require_components());
2852  var import_i18n10 = __toESM(require_i18n());
2853  var import_compose4 = __toESM(require_compose());
2854  var import_keycodes2 = __toESM(require_keycodes());
2855  var import_element11 = __toESM(require_element());
2856  
2857  // packages/dataviews/build-module/dataviews-layouts/grid/preview-size-picker.js
2858  var import_components8 = __toESM(require_components());
2859  var import_i18n9 = __toESM(require_i18n());
2860  var import_element10 = __toESM(require_element());
2861  var import_jsx_runtime32 = __toESM(require_jsx_runtime());
2862  var imageSizes = [
2863    {
2864      value: 120,
2865      breakpoint: 1
2866    },
2867    {
2868      value: 170,
2869      breakpoint: 1
2870    },
2871    {
2872      value: 230,
2873      breakpoint: 1
2874    },
2875    {
2876      value: 290,
2877      breakpoint: 1112
2878      // at minimum image width, 4 images display at this container size
2879    },
2880    {
2881      value: 350,
2882      breakpoint: 1636
2883      // at minimum image width, 6 images display at this container size
2884    },
2885    {
2886      value: 430,
2887      breakpoint: 588
2888      // at minimum image width, 2 images display at this container size
2889    }
2890  ];
2891  var DEFAULT_PREVIEW_SIZE = imageSizes[2].value;
2892  function useGridColumns() {
2893    const context = (0, import_element10.useContext)(dataviews_context_default);
2894    const view = context.view;
2895    return (0, import_element10.useMemo)(() => {
2896      const containerWidth = context.containerWidth;
2897      const gap = 32;
2898      const previewSize = view.layout?.previewSize ?? DEFAULT_PREVIEW_SIZE;
2899      const columns = Math.floor(
2900        (containerWidth + gap) / (previewSize + gap)
2901      );
2902      return Math.max(1, columns);
2903    }, [context.containerWidth, view.layout?.previewSize]);
2904  }
2905  
2906  // packages/dataviews/build-module/dataviews-layouts/grid/composite-grid.js
2907  var import_jsx_runtime33 = __toESM(require_jsx_runtime());
2908  var { Badge } = unlock(import_components9.privateApis);
2909  function chunk(array, size) {
2910    const chunks = [];
2911    for (let i2 = 0, j2 = array.length; i2 < j2; i2 += size) {
2912      chunks.push(array.slice(i2, i2 + size));
2913    }
2914    return chunks;
2915  }
2916  var GridItem = (0, import_element11.forwardRef)(function GridItem2({
2917    view,
2918    selection,
2919    onChangeSelection,
2920    onClickItem,
2921    isItemClickable,
2922    renderItemLink,
2923    getItemId,
2924    item,
2925    actions,
2926    mediaField,
2927    titleField,
2928    descriptionField,
2929    regularFields,
2930    badgeFields,
2931    hasBulkActions,
2932    config,
2933    ...props
2934  }, ref) {
2935    const { showTitle = true, showMedia = true, showDescription = true } = view;
2936    const hasBulkAction = useHasAPossibleBulkAction(actions, item);
2937    const id = getItemId(item);
2938    const instanceId = (0, import_compose4.useInstanceId)(GridItem2);
2939    const isSelected2 = selection.includes(id);
2940    const renderedMediaField = mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
2941      mediaField.render,
2942      {
2943        item,
2944        field: mediaField,
2945        config
2946      }
2947    ) : null;
2948    const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(titleField.render, { item, field: titleField }) : null;
2949    const shouldRenderMedia = showMedia && renderedMediaField;
2950    let mediaA11yProps;
2951    let titleA11yProps;
2952    if (isItemClickable(item) && onClickItem) {
2953      if (renderedTitleField) {
2954        mediaA11yProps = {
2955          "aria-labelledby": `dataviews-view-grid__title-field-$instanceId}`
2956        };
2957        titleA11yProps = {
2958          id: `dataviews-view-grid__title-field-$instanceId}`
2959        };
2960      } else {
2961        mediaA11yProps = {
2962          "aria-label": (0, import_i18n10.__)("Navigate to item")
2963        };
2964      }
2965    }
2966    return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
2967      import_components9.__experimentalVStack,
2968      {
2969        ...props,
2970        ref,
2971        spacing: 0,
2972        className: clsx_default(
2973          props.className,
2974          "dataviews-view-grid__row__gridcell",
2975          "dataviews-view-grid__card",
2976          {
2977            "is-selected": hasBulkAction && isSelected2
2978          }
2979        ),
2980        onClickCapture: (event) => {
2981          props.onClickCapture?.(event);
2982          if ((0, import_keycodes2.isAppleOS)() ? event.metaKey : event.ctrlKey) {
2983            event.stopPropagation();
2984            event.preventDefault();
2985            if (!hasBulkAction) {
2986              return;
2987            }
2988            onChangeSelection(
2989              selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id]
2990            );
2991          }
2992        },
2993        children: [
2994          shouldRenderMedia && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
2995            ItemClickWrapper,
2996            {
2997              item,
2998              isItemClickable,
2999              onClickItem,
3000              renderItemLink,
3001              className: "dataviews-view-grid__media",
3002              ...mediaA11yProps,
3003              children: renderedMediaField
3004            }
3005          ),
3006          hasBulkActions && shouldRenderMedia && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3007            DataViewsSelectionCheckbox,
3008            {
3009              item,
3010              selection,
3011              onChangeSelection,
3012              getItemId,
3013              titleField,
3014              disabled: !hasBulkAction
3015            }
3016          ),
3017          !showTitle && shouldRenderMedia && !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "dataviews-view-grid__media-actions", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(ItemActions, { item, actions, isCompact: true }) }),
3018          showTitle && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
3019            import_components9.__experimentalHStack,
3020            {
3021              justify: "space-between",
3022              className: "dataviews-view-grid__title-actions",
3023              children: [
3024                /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3025                  ItemClickWrapper,
3026                  {
3027                    item,
3028                    isItemClickable,
3029                    onClickItem,
3030                    renderItemLink,
3031                    className: "dataviews-view-grid__title-field dataviews-title-field",
3032                    ...titleA11yProps,
3033                    children: renderedTitleField
3034                  }
3035                ),
3036                !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3037                  ItemActions,
3038                  {
3039                    item,
3040                    actions,
3041                    isCompact: true
3042                  }
3043                )
3044              ]
3045            }
3046          ),
3047          /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_components9.__experimentalVStack, { spacing: 1, children: [
3048            showDescription && descriptionField?.render && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3049              descriptionField.render,
3050              {
3051                item,
3052                field: descriptionField
3053              }
3054            ),
3055            !!badgeFields?.length && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3056              import_components9.__experimentalHStack,
3057              {
3058                className: "dataviews-view-grid__badge-fields",
3059                spacing: 2,
3060                wrap: true,
3061                alignment: "top",
3062                justify: "flex-start",
3063                children: badgeFields.map((field) => {
3064                  return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3065                    Badge,
3066                    {
3067                      className: "dataviews-view-grid__field-value",
3068                      children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3069                        field.render,
3070                        {
3071                          item,
3072                          field
3073                        }
3074                      )
3075                    },
3076                    field.id
3077                  );
3078                })
3079              }
3080            ),
3081            !!regularFields?.length && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3082              import_components9.__experimentalVStack,
3083              {
3084                className: "dataviews-view-grid__fields",
3085                spacing: 1,
3086                children: regularFields.map((field) => {
3087                  return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3088                    import_components9.Flex,
3089                    {
3090                      className: "dataviews-view-grid__field",
3091                      gap: 1,
3092                      justify: "flex-start",
3093                      expanded: true,
3094                      style: { height: "auto" },
3095                      direction: "row",
3096                      children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [
3097                        /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components9.Tooltip, { text: field.label, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_components9.FlexItem, { className: "dataviews-view-grid__field-name", children: field.header }) }),
3098                        /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3099                          import_components9.FlexItem,
3100                          {
3101                            className: "dataviews-view-grid__field-value",
3102                            style: { maxHeight: "none" },
3103                            children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3104                              field.render,
3105                              {
3106                                item,
3107                                field
3108                              }
3109                            )
3110                          }
3111                        )
3112                      ] })
3113                    },
3114                    field.id
3115                  );
3116                })
3117              }
3118            )
3119          ] })
3120        ]
3121      }
3122    );
3123  });
3124  function CompositeGrid({
3125    data,
3126    isInfiniteScroll,
3127    className,
3128    isLoading,
3129    view,
3130    fields,
3131    selection,
3132    onChangeSelection,
3133    onClickItem,
3134    isItemClickable,
3135    renderItemLink,
3136    getItemId,
3137    actions
3138  }) {
3139    const { paginationInfo, resizeObserverRef } = (0, import_element11.useContext)(dataviews_context_default);
3140    const gridColumns = useGridColumns();
3141    const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data);
3142    const titleField = fields.find(
3143      (field) => field.id === view?.titleField
3144    );
3145    const mediaField = fields.find(
3146      (field) => field.id === view?.mediaField
3147    );
3148    const descriptionField = fields.find(
3149      (field) => field.id === view?.descriptionField
3150    );
3151    const otherFields = view.fields ?? [];
3152    const { regularFields, badgeFields } = otherFields.reduce(
3153      (accumulator, fieldId) => {
3154        const field = fields.find((f2) => f2.id === fieldId);
3155        if (!field) {
3156          return accumulator;
3157        }
3158        const key = view.layout?.badgeFields?.includes(fieldId) ? "badgeFields" : "regularFields";
3159        accumulator[key].push(field);
3160        return accumulator;
3161      },
3162      { regularFields: [], badgeFields: [] }
3163    );
3164    const size = "900px";
3165    const totalRows = Math.ceil(data.length / gridColumns);
3166    return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3167      import_components9.Composite,
3168      {
3169        role: isInfiniteScroll ? "feed" : "grid",
3170        className: clsx_default("dataviews-view-grid", className),
3171        focusWrap: true,
3172        "aria-busy": isLoading,
3173        "aria-rowcount": isInfiniteScroll ? void 0 : totalRows,
3174        ref: resizeObserverRef,
3175        children: chunk(data, gridColumns).map((row, i2) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3176          import_components9.Composite.Row,
3177          {
3178            render: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3179              "div",
3180              {
3181                role: "row",
3182                "aria-rowindex": i2 + 1,
3183                "aria-label": (0, import_i18n10.sprintf)(
3184                  /* translators: %d: The row number in the grid */
3185                  (0, import_i18n10.__)("Row %d"),
3186                  i2 + 1
3187                ),
3188                className: "dataviews-view-grid__row",
3189                style: {
3190                  gridTemplateColumns: `repeat( $gridColumns}, minmax(0, 1fr) )`
3191                }
3192              }
3193            ),
3194            children: row.map((item, indexInRow) => {
3195              const index = i2 * gridColumns + indexInRow;
3196              return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3197                import_components9.Composite.Item,
3198                {
3199                  render: (props) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3200                    GridItem,
3201                    {
3202                      ...props,
3203                      role: isInfiniteScroll ? "article" : "gridcell",
3204                      "aria-setsize": isInfiniteScroll ? paginationInfo.totalItems : void 0,
3205                      "aria-posinset": isInfiniteScroll ? index + 1 : void 0,
3206                      view,
3207                      selection,
3208                      onChangeSelection,
3209                      onClickItem,
3210                      isItemClickable,
3211                      renderItemLink,
3212                      getItemId,
3213                      item,
3214                      actions,
3215                      mediaField,
3216                      titleField,
3217                      descriptionField,
3218                      regularFields,
3219                      badgeFields,
3220                      hasBulkActions,
3221                      config: {
3222                        sizes: size
3223                      }
3224                    }
3225                  )
3226                },
3227                getItemId(item)
3228              );
3229            })
3230          },
3231          i2
3232        ))
3233      }
3234    );
3235  }
3236  
3237  // packages/dataviews/build-module/dataviews-layouts/grid/index.js
3238  var import_jsx_runtime34 = __toESM(require_jsx_runtime());
3239  function ViewGrid({
3240    actions,
3241    data,
3242    fields,
3243    getItemId,
3244    isLoading,
3245    onChangeSelection,
3246    onClickItem,
3247    isItemClickable,
3248    renderItemLink,
3249    selection,
3250    view,
3251    className,
3252    empty
3253  }) {
3254    const hasData = !!data?.length;
3255    const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null;
3256    const dataByGroup = groupField ? getDataByGroup(data, groupField) : null;
3257    const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup;
3258    const gridProps = {
3259      className,
3260      isLoading,
3261      view,
3262      fields,
3263      selection,
3264      onChangeSelection,
3265      onClickItem,
3266      isItemClickable,
3267      renderItemLink,
3268      getItemId,
3269      actions
3270    };
3271    return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_jsx_runtime34.Fragment, {
3272      // Render multiple groups.
3273      children: [
3274        hasData && groupField && dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components10.__experimentalVStack, { spacing: 4, children: Array.from(dataByGroup.entries()).map(
3275          ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_components10.__experimentalVStack, { spacing: 2, children: [
3276            /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("h3", { className: "dataviews-view-grid__group-header", children: (0, import_i18n11.sprintf)(
3277              // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022".
3278              (0, import_i18n11.__)("%1$s: %2$s"),
3279              groupField.label,
3280              groupName
3281            ) }),
3282            /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3283              CompositeGrid,
3284              {
3285                ...gridProps,
3286                data: groupItems,
3287                isInfiniteScroll: false
3288              }
3289            )
3290          ] }, groupName)
3291        ) }),
3292        // Render a single grid with all data.
3293        hasData && !dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3294          CompositeGrid,
3295          {
3296            ...gridProps,
3297            data,
3298            isInfiniteScroll: !!isInfiniteScroll
3299          }
3300        ),
3301        // Render empty state.
3302        !hasData && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3303          "div",
3304          {
3305            className: clsx_default({
3306              "dataviews-loading": isLoading,
3307              "dataviews-no-results": !isLoading
3308            }),
3309            children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components10.Spinner, {}) }) : empty
3310          }
3311        ),
3312        hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_components10.Spinner, {}) })
3313      ]
3314    });
3315  }
3316  var grid_default = ViewGrid;
3317  
3318  // packages/dataviews/build-module/dataviews-layouts/list/index.js
3319  var import_compose5 = __toESM(require_compose());
3320  var import_components11 = __toESM(require_components());
3321  var import_element12 = __toESM(require_element());
3322  var import_i18n12 = __toESM(require_i18n());
3323  var import_data5 = __toESM(require_data());
3324  var import_jsx_runtime35 = __toESM(require_jsx_runtime());
3325  var { Menu: Menu3 } = unlock(import_components11.privateApis);
3326  function generateItemWrapperCompositeId(idPrefix) {
3327    return `$idPrefix}-item-wrapper`;
3328  }
3329  function generatePrimaryActionCompositeId(idPrefix, primaryActionId) {
3330    return `$idPrefix}-primary-action-$primaryActionId}`;
3331  }
3332  function generateDropdownTriggerCompositeId(idPrefix) {
3333    return `$idPrefix}-dropdown`;
3334  }
3335  function PrimaryActionGridCell({
3336    idPrefix,
3337    primaryAction,
3338    item
3339  }) {
3340    const registry = (0, import_data5.useRegistry)();
3341    const [isModalOpen, setIsModalOpen] = (0, import_element12.useState)(false);
3342    const compositeItemId = generatePrimaryActionCompositeId(
3343      idPrefix,
3344      primaryAction.id
3345    );
3346    const label = typeof primaryAction.label === "string" ? primaryAction.label : primaryAction.label([item]);
3347    return "RenderModal" in primaryAction ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3348      import_components11.Composite.Item,
3349      {
3350        id: compositeItemId,
3351        render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3352          import_components11.Button,
3353          {
3354            disabled: !!primaryAction.disabled,
3355            accessibleWhenDisabled: true,
3356            text: label,
3357            size: "small",
3358            onClick: () => setIsModalOpen(true)
3359          }
3360        ),
3361        children: isModalOpen && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3362          ActionModal,
3363          {
3364            action: primaryAction,
3365            items: [item],
3366            closeModal: () => setIsModalOpen(false)
3367          }
3368        )
3369      }
3370    ) }, primaryAction.id) : /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3371      import_components11.Composite.Item,
3372      {
3373        id: compositeItemId,
3374        render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3375          import_components11.Button,
3376          {
3377            disabled: !!primaryAction.disabled,
3378            accessibleWhenDisabled: true,
3379            size: "small",
3380            onClick: () => {
3381              primaryAction.callback([item], { registry });
3382            },
3383            children: label
3384          }
3385        )
3386      }
3387    ) }, primaryAction.id);
3388  }
3389  function ListItem({
3390    view,
3391    actions,
3392    idPrefix,
3393    isSelected: isSelected2,
3394    item,
3395    titleField,
3396    mediaField,
3397    descriptionField,
3398    onSelect,
3399    otherFields,
3400    onDropdownTriggerKeyDown,
3401    posinset
3402  }) {
3403    const {
3404      showTitle = true,
3405      showMedia = true,
3406      showDescription = true,
3407      infiniteScrollEnabled
3408    } = view;
3409    const itemRef = (0, import_element12.useRef)(null);
3410    const labelId = `$idPrefix}-label`;
3411    const descriptionId = `$idPrefix}-description`;
3412    const registry = (0, import_data5.useRegistry)();
3413    const [isHovered, setIsHovered] = (0, import_element12.useState)(false);
3414    const [activeModalAction, setActiveModalAction] = (0, import_element12.useState)(
3415      null
3416    );
3417    const handleHover = ({ type }) => {
3418      const isHover = type === "mouseenter";
3419      setIsHovered(isHover);
3420    };
3421    const { paginationInfo } = (0, import_element12.useContext)(dataviews_context_default);
3422    (0, import_element12.useEffect)(() => {
3423      if (isSelected2) {
3424        itemRef.current?.scrollIntoView({
3425          behavior: "auto",
3426          block: "nearest",
3427          inline: "nearest"
3428        });
3429      }
3430    }, [isSelected2]);
3431    const { primaryAction, eligibleActions } = (0, import_element12.useMemo)(() => {
3432      const _eligibleActions = actions.filter(
3433        (action) => !action.isEligible || action.isEligible(item)
3434      );
3435      const _primaryActions = _eligibleActions.filter(
3436        (action) => action.isPrimary
3437      );
3438      return {
3439        primaryAction: _primaryActions[0],
3440        eligibleActions: _eligibleActions
3441      };
3442    }, [actions, item]);
3443    const hasOnlyOnePrimaryAction = primaryAction && actions.length === 1;
3444    const renderedMediaField = showMedia && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "dataviews-view-list__media-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3445      mediaField.render,
3446      {
3447        item,
3448        field: mediaField,
3449        config: { sizes: "52px" }
3450      }
3451    ) }) : null;
3452    const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(titleField.render, { item, field: titleField }) : null;
3453    const usedActions = eligibleActions?.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_components11.__experimentalHStack, { spacing: 3, className: "dataviews-view-list__item-actions", children: [
3454      primaryAction && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3455        PrimaryActionGridCell,
3456        {
3457          idPrefix,
3458          primaryAction,
3459          item
3460        }
3461      ),
3462      !hasOnlyOnePrimaryAction && /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { role: "gridcell", children: [
3463        /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(Menu3, { placement: "bottom-end", children: [
3464          /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3465            Menu3.TriggerButton,
3466            {
3467              render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3468                import_components11.Composite.Item,
3469                {
3470                  id: generateDropdownTriggerCompositeId(
3471                    idPrefix
3472                  ),
3473                  render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3474                    import_components11.Button,
3475                    {
3476                      size: "small",
3477                      icon: more_vertical_default,
3478                      label: (0, import_i18n12.__)("Actions"),
3479                      accessibleWhenDisabled: true,
3480                      disabled: !actions.length,
3481                      onKeyDown: onDropdownTriggerKeyDown
3482                    }
3483                  )
3484                }
3485              )
3486            }
3487          ),
3488          /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Menu3.Popover, { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3489            ActionsMenuGroup,
3490            {
3491              actions: eligibleActions,
3492              item,
3493              registry,
3494              setActiveModalAction
3495            }
3496          ) })
3497        ] }),
3498        !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3499          ActionModal,
3500          {
3501            action: activeModalAction,
3502            items: [item],
3503            closeModal: () => setActiveModalAction(null)
3504          }
3505        )
3506      ] })
3507    ] });
3508    return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3509      import_components11.Composite.Row,
3510      {
3511        ref: itemRef,
3512        render: (
3513          /* aria-posinset breaks Composite.Row if passed to it directly. */
3514          /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3515            "div",
3516            {
3517              "aria-posinset": posinset,
3518              "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0
3519            }
3520          )
3521        ),
3522        role: infiniteScrollEnabled ? "article" : "row",
3523        className: clsx_default({
3524          "is-selected": isSelected2,
3525          "is-hovered": isHovered
3526        }),
3527        onMouseEnter: handleHover,
3528        onMouseLeave: handleHover,
3529        children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_components11.__experimentalHStack, { className: "dataviews-view-list__item-wrapper", spacing: 0, children: [
3530          /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3531            import_components11.Composite.Item,
3532            {
3533              id: generateItemWrapperCompositeId(idPrefix),
3534              "aria-pressed": isSelected2,
3535              "aria-labelledby": labelId,
3536              "aria-describedby": descriptionId,
3537              className: "dataviews-view-list__item",
3538              onClick: () => onSelect(item)
3539            }
3540          ) }),
3541          /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_components11.__experimentalHStack, { spacing: 3, justify: "start", alignment: "flex-start", children: [
3542            renderedMediaField,
3543            /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
3544              import_components11.__experimentalVStack,
3545              {
3546                spacing: 1,
3547                className: "dataviews-view-list__field-wrapper",
3548                children: [
3549                  /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_components11.__experimentalHStack, { spacing: 0, children: [
3550                    /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3551                      "div",
3552                      {
3553                        className: "dataviews-title-field",
3554                        id: labelId,
3555                        children: renderedTitleField
3556                      }
3557                    ),
3558                    usedActions
3559                  ] }),
3560                  showDescription && descriptionField?.render && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "dataviews-view-list__field", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3561                    descriptionField.render,
3562                    {
3563                      item,
3564                      field: descriptionField
3565                    }
3566                  ) }),
3567                  /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3568                    "div",
3569                    {
3570                      className: "dataviews-view-list__fields",
3571                      id: descriptionId,
3572                      children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
3573                        "div",
3574                        {
3575                          className: "dataviews-view-list__field",
3576                          children: [
3577                            /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3578                              import_components11.VisuallyHidden,
3579                              {
3580                                as: "span",
3581                                className: "dataviews-view-list__field-label",
3582                                children: field.label
3583                              }
3584                            ),
3585                            /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "dataviews-view-list__field-value", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3586                              field.render,
3587                              {
3588                                item,
3589                                field
3590                              }
3591                            ) })
3592                          ]
3593                        },
3594                        field.id
3595                      ))
3596                    }
3597                  )
3598                ]
3599              }
3600            )
3601          ] })
3602        ] })
3603      }
3604    );
3605  }
3606  function isDefined2(item) {
3607    return !!item;
3608  }
3609  function ViewList(props) {
3610    const {
3611      actions,
3612      data,
3613      fields,
3614      getItemId,
3615      isLoading,
3616      onChangeSelection,
3617      selection,
3618      view,
3619      className,
3620      empty
3621    } = props;
3622    const baseId = (0, import_compose5.useInstanceId)(ViewList, "view-list");
3623    const selectedItem = data?.findLast(
3624      (item) => selection.includes(getItemId(item))
3625    );
3626    const titleField = fields.find((field) => field.id === view.titleField);
3627    const mediaField = fields.find((field) => field.id === view.mediaField);
3628    const descriptionField = fields.find(
3629      (field) => field.id === view.descriptionField
3630    );
3631    const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined2);
3632    const onSelect = (item) => onChangeSelection([getItemId(item)]);
3633    const generateCompositeItemIdPrefix = (0, import_element12.useCallback)(
3634      (item) => `$baseId}-$getItemId(item)}`,
3635      [baseId, getItemId]
3636    );
3637    const isActiveCompositeItem = (0, import_element12.useCallback)(
3638      (item, idToCheck) => {
3639        return idToCheck.startsWith(
3640          generateCompositeItemIdPrefix(item)
3641        );
3642      },
3643      [generateCompositeItemIdPrefix]
3644    );
3645    const [activeCompositeId, setActiveCompositeId] = (0, import_element12.useState)(void 0);
3646    (0, import_element12.useEffect)(() => {
3647      if (selectedItem) {
3648        setActiveCompositeId(
3649          generateItemWrapperCompositeId(
3650            generateCompositeItemIdPrefix(selectedItem)
3651          )
3652        );
3653      }
3654    }, [selectedItem, generateCompositeItemIdPrefix]);
3655    const activeItemIndex = data.findIndex(
3656      (item) => isActiveCompositeItem(item, activeCompositeId ?? "")
3657    );
3658    const previousActiveItemIndex = (0, import_compose5.usePrevious)(activeItemIndex);
3659    const isActiveIdInList = activeItemIndex !== -1;
3660    const selectCompositeItem = (0, import_element12.useCallback)(
3661      (targetIndex, generateCompositeId) => {
3662        const clampedIndex = Math.min(
3663          data.length - 1,
3664          Math.max(0, targetIndex)
3665        );
3666        if (!data[clampedIndex]) {
3667          return;
3668        }
3669        const itemIdPrefix = generateCompositeItemIdPrefix(
3670          data[clampedIndex]
3671        );
3672        const targetCompositeItemId = generateCompositeId(itemIdPrefix);
3673        setActiveCompositeId(targetCompositeItemId);
3674        document.getElementById(targetCompositeItemId)?.focus();
3675      },
3676      [data, generateCompositeItemIdPrefix]
3677    );
3678    (0, import_element12.useEffect)(() => {
3679      const wasActiveIdInList = previousActiveItemIndex !== void 0 && previousActiveItemIndex !== -1;
3680      if (!isActiveIdInList && wasActiveIdInList) {
3681        selectCompositeItem(
3682          previousActiveItemIndex,
3683          generateItemWrapperCompositeId
3684        );
3685      }
3686    }, [isActiveIdInList, selectCompositeItem, previousActiveItemIndex]);
3687    const onDropdownTriggerKeyDown = (0, import_element12.useCallback)(
3688      (event) => {
3689        if (event.key === "ArrowDown") {
3690          event.preventDefault();
3691          selectCompositeItem(
3692            activeItemIndex + 1,
3693            generateDropdownTriggerCompositeId
3694          );
3695        }
3696        if (event.key === "ArrowUp") {
3697          event.preventDefault();
3698          selectCompositeItem(
3699            activeItemIndex - 1,
3700            generateDropdownTriggerCompositeId
3701          );
3702        }
3703      },
3704      [selectCompositeItem, activeItemIndex]
3705    );
3706    const hasData = data?.length;
3707    if (!hasData) {
3708      return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3709        "div",
3710        {
3711          className: clsx_default({
3712            "dataviews-loading": isLoading,
3713            "dataviews-no-results": !hasData && !isLoading
3714          }),
3715          children: !hasData && (isLoading ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_components11.Spinner, {}) }) : empty)
3716        }
3717      );
3718    }
3719    const groupField = view.groupBy?.field ? fields.find((field) => field.id === view.groupBy?.field) : null;
3720    const dataByGroup = groupField ? getDataByGroup(data, groupField) : null;
3721    if (hasData && groupField && dataByGroup) {
3722      return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3723        import_components11.Composite,
3724        {
3725          id: `$baseId}`,
3726          render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", {}),
3727          className: "dataviews-view-list__group",
3728          role: "grid",
3729          activeId: activeCompositeId,
3730          setActiveId: setActiveCompositeId,
3731          children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3732            import_components11.__experimentalVStack,
3733            {
3734              spacing: 4,
3735              className: clsx_default("dataviews-view-list", className),
3736              children: Array.from(dataByGroup.entries()).map(
3737                ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_components11.__experimentalVStack, { spacing: 2, children: [
3738                  /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("h3", { className: "dataviews-view-list__group-header", children: (0, import_i18n12.sprintf)(
3739                    // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022".
3740                    (0, import_i18n12.__)("%1$s: %2$s"),
3741                    groupField.label,
3742                    groupName
3743                  ) }),
3744                  groupItems.map((item) => {
3745                    const id = generateCompositeItemIdPrefix(item);
3746                    return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3747                      ListItem,
3748                      {
3749                        view,
3750                        idPrefix: id,
3751                        actions,
3752                        item,
3753                        isSelected: item === selectedItem,
3754                        onSelect,
3755                        mediaField,
3756                        titleField,
3757                        descriptionField,
3758                        otherFields,
3759                        onDropdownTriggerKeyDown
3760                      },
3761                      id
3762                    );
3763                  })
3764                ] }, groupName)
3765              )
3766            }
3767          )
3768        }
3769      );
3770    }
3771    return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [
3772      /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3773        import_components11.Composite,
3774        {
3775          id: baseId,
3776          render: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", {}),
3777          className: clsx_default("dataviews-view-list", className),
3778          role: view.infiniteScrollEnabled ? "feed" : "grid",
3779          activeId: activeCompositeId,
3780          setActiveId: setActiveCompositeId,
3781          children: data.map((item, index) => {
3782            const id = generateCompositeItemIdPrefix(item);
3783            return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3784              ListItem,
3785              {
3786                view,
3787                idPrefix: id,
3788                actions,
3789                item,
3790                isSelected: item === selectedItem,
3791                onSelect,
3792                mediaField,
3793                titleField,
3794                descriptionField,
3795                otherFields,
3796                onDropdownTriggerKeyDown,
3797                posinset: view.infiniteScrollEnabled ? index + 1 : void 0
3798              },
3799              id
3800            );
3801          })
3802        }
3803      ),
3804      hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_components11.Spinner, {}) })
3805    ] });
3806  }
3807  
3808  // packages/dataviews/build-module/dataviews-layouts/activity/index.js
3809  var import_components14 = __toESM(require_components());
3810  
3811  // packages/dataviews/build-module/dataviews-layouts/activity/activity-group.js
3812  var import_components12 = __toESM(require_components());
3813  var import_i18n13 = __toESM(require_i18n());
3814  var import_element13 = __toESM(require_element());
3815  var import_jsx_runtime36 = __toESM(require_jsx_runtime());
3816  function ActivityGroup({
3817    groupName,
3818    groupData,
3819    groupField,
3820    children
3821  }) {
3822    const groupHeader = (0, import_element13.createInterpolateElement)(
3823      // translators: %s: The label of the field e.g. "Status".
3824      (0, import_i18n13.sprintf)((0, import_i18n13.__)("%s: <groupName />"), groupField.label).trim(),
3825      {
3826        groupName: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3827          groupField.render,
3828          {
3829            item: groupData[0],
3830            field: groupField
3831          }
3832        )
3833      }
3834    );
3835    return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
3836      import_components12.__experimentalVStack,
3837      {
3838        spacing: 0,
3839        className: "dataviews-view-activity__group",
3840        children: [
3841          /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("h3", { className: "dataviews-view-activity__group-header", children: groupHeader }),
3842          children
3843        ]
3844      },
3845      groupName
3846    );
3847  }
3848  
3849  // packages/dataviews/build-module/dataviews-layouts/activity/activity-item.js
3850  var import_components13 = __toESM(require_components());
3851  var import_element14 = __toESM(require_element());
3852  var import_data6 = __toESM(require_data());
3853  var import_jsx_runtime37 = __toESM(require_jsx_runtime());
3854  function ActivityItem(props) {
3855    const {
3856      view,
3857      actions,
3858      item,
3859      titleField,
3860      mediaField,
3861      descriptionField,
3862      otherFields,
3863      posinset,
3864      onClickItem,
3865      renderItemLink,
3866      isItemClickable
3867    } = props;
3868    const {
3869      showTitle = true,
3870      showMedia = true,
3871      showDescription = true,
3872      infiniteScrollEnabled
3873    } = view;
3874    const itemRef = (0, import_element14.useRef)(null);
3875    const registry = (0, import_data6.useRegistry)();
3876    const { paginationInfo } = (0, import_element14.useContext)(dataviews_context_default);
3877    const { primaryActions, eligibleActions } = (0, import_element14.useMemo)(() => {
3878      const _eligibleActions = actions.filter(
3879        (action) => !action.isEligible || action.isEligible(item)
3880      );
3881      const _primaryActions = _eligibleActions.filter(
3882        (action) => action.isPrimary
3883      );
3884      return {
3885        primaryActions: _primaryActions,
3886        eligibleActions: _eligibleActions
3887      };
3888    }, [actions, item]);
3889    const density = view.layout?.density ?? "balanced";
3890    const mediaContent = showMedia && density !== "compact" && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3891      mediaField.render,
3892      {
3893        item,
3894        field: mediaField,
3895        config: {
3896          sizes: density === "comfortable" ? "32px" : "24px"
3897        }
3898      }
3899    ) : null;
3900    const renderedMediaField = /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "dataviews-view-activity__item-type-icon", children: mediaContent || /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3901      "span",
3902      {
3903        className: "dataviews-view-activity__item-bullet",
3904        "aria-hidden": "true"
3905      }
3906    ) });
3907    const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(titleField.render, { item, field: titleField }) : null;
3908    const verticalSpacing = (0, import_element14.useMemo)(() => {
3909      switch (density) {
3910        case "comfortable":
3911          return "3";
3912        default:
3913          return "2";
3914      }
3915    }, [density]);
3916    return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3917      "div",
3918      {
3919        ref: itemRef,
3920        role: infiniteScrollEnabled ? "article" : void 0,
3921        "aria-posinset": posinset,
3922        "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0,
3923        className: clsx_default(
3924          "dataviews-view-activity__item",
3925          density === "compact" && "is-compact",
3926          density === "balanced" && "is-balanced",
3927          density === "comfortable" && "is-comfortable"
3928        ),
3929        children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_components13.__experimentalHStack, { spacing: 4, justify: "start", alignment: "flex-start", children: [
3930          /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3931            import_components13.__experimentalVStack,
3932            {
3933              spacing: 1,
3934              alignment: "center",
3935              className: "dataviews-view-activity__item-type",
3936              children: renderedMediaField
3937            }
3938          ),
3939          /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
3940            import_components13.__experimentalVStack,
3941            {
3942              spacing: verticalSpacing,
3943              alignment: "flex-start",
3944              className: "dataviews-view-activity__item-content",
3945              children: [
3946                renderedTitleField && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3947                  ItemClickWrapper,
3948                  {
3949                    item,
3950                    isItemClickable,
3951                    onClickItem,
3952                    renderItemLink,
3953                    className: "dataviews-view-activity__item-title",
3954                    children: renderedTitleField
3955                  }
3956                ),
3957                showDescription && descriptionField && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "dataviews-view-activity__item-description", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3958                  descriptionField.render,
3959                  {
3960                    item,
3961                    field: descriptionField
3962                  }
3963                ) }),
3964                /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "dataviews-view-activity__item-fields", children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
3965                  "div",
3966                  {
3967                    className: "dataviews-view-activity__item-field",
3968                    children: [
3969                      /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3970                        import_components13.VisuallyHidden,
3971                        {
3972                          as: "span",
3973                          className: "dataviews-view-activity__item-field-label",
3974                          children: field.label
3975                        }
3976                      ),
3977                      /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "dataviews-view-activity__item-field-value", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3978                        field.render,
3979                        {
3980                          item,
3981                          field
3982                        }
3983                      ) })
3984                    ]
3985                  },
3986                  field.id
3987                )) }),
3988                !!primaryActions?.length && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3989                  PrimaryActions,
3990                  {
3991                    item,
3992                    actions: primaryActions,
3993                    registry,
3994                    buttonVariant: "secondary"
3995                  }
3996                )
3997              ]
3998            }
3999          ),
4000          primaryActions.length < eligibleActions.length && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "dataviews-view-activity__item-actions", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
4001            ItemActions,
4002            {
4003              item,
4004              actions: eligibleActions,
4005              isCompact: true
4006            }
4007          ) })
4008        ] })
4009      }
4010    );
4011  }
4012  var activity_item_default = ActivityItem;
4013  
4014  // packages/dataviews/build-module/dataviews-layouts/activity/activity-items.js
4015  var import_react = __toESM(require_react());
4016  function isDefined3(item) {
4017    return !!item;
4018  }
4019  function ActivityItems(props) {
4020    const { data, fields, getItemId, view } = props;
4021    const titleField = fields.find((field) => field.id === view.titleField);
4022    const mediaField = fields.find((field) => field.id === view.mediaField);
4023    const descriptionField = fields.find(
4024      (field) => field.id === view.descriptionField
4025    );
4026    const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined3);
4027    return data.map((item, index) => {
4028      return /* @__PURE__ */ (0, import_react.createElement)(
4029        activity_item_default,
4030        {
4031          ...props,
4032          key: getItemId(item),
4033          item,
4034          mediaField,
4035          titleField,
4036          descriptionField,
4037          otherFields,
4038          posinset: view.infiniteScrollEnabled ? index + 1 : void 0
4039        }
4040      );
4041    });
4042  }
4043  
4044  // packages/dataviews/build-module/dataviews-layouts/activity/index.js
4045  var import_jsx_runtime38 = __toESM(require_jsx_runtime());
4046  function ViewActivity(props) {
4047    const { empty, data, fields, isLoading, view, className } = props;
4048    const hasData = data?.length;
4049    if (!hasData) {
4050      return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
4051        "div",
4052        {
4053          className: clsx_default({
4054            "dataviews-loading": isLoading,
4055            "dataviews-no-results": !hasData && !isLoading
4056          }),
4057          children: !hasData && (isLoading ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_components14.Spinner, {}) }) : empty)
4058        }
4059      );
4060    }
4061    const wrapperClassName = clsx_default("dataviews-view-activity", className);
4062    const groupField = view.groupBy?.field ? fields.find((field) => field.id === view.groupBy?.field) : null;
4063    const dataByGroup = groupField ? getDataByGroup(data, groupField) : null;
4064    const groupedEntries = dataByGroup ? Array.from(dataByGroup.entries()) : [];
4065    if (hasData && groupField && dataByGroup) {
4066      return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_components14.__experimentalVStack, { spacing: 2, className: wrapperClassName, children: groupedEntries.map(
4067        ([groupName, groupData]) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
4068          ActivityGroup,
4069          {
4070            groupName,
4071            groupData,
4072            groupField,
4073            children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
4074              ActivityItems,
4075              {
4076                ...props,
4077                data: groupData
4078              }
4079            )
4080          },
4081          groupName
4082        )
4083      ) });
4084    }
4085    return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
4086      /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
4087        "div",
4088        {
4089          className: wrapperClassName,
4090          role: view.infiniteScrollEnabled ? "feed" : void 0,
4091          children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ActivityItems, { ...props })
4092        }
4093      ),
4094      hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_components14.Spinner, {}) })
4095    ] });
4096  }
4097  
4098  // packages/dataviews/build-module/dataviews-layouts/picker-grid/index.js
4099  var import_components17 = __toESM(require_components());
4100  var import_i18n16 = __toESM(require_i18n());
4101  var import_compose6 = __toESM(require_compose());
4102  var import_element18 = __toESM(require_element());
4103  
4104  // packages/dataviews/build-module/components/dataviews-picker/footer.js
4105  var import_components16 = __toESM(require_components());
4106  var import_data7 = __toESM(require_data());
4107  var import_element16 = __toESM(require_element());
4108  var import_i18n15 = __toESM(require_i18n());
4109  
4110  // packages/dataviews/build-module/components/dataviews-pagination/index.js
4111  var import_components15 = __toESM(require_components());
4112  var import_element15 = __toESM(require_element());
4113  var import_i18n14 = __toESM(require_i18n());
4114  var import_jsx_runtime39 = __toESM(require_jsx_runtime());
4115  function DataViewsPagination() {
4116    const {
4117      view,
4118      onChangeView,
4119      paginationInfo: { totalItems = 0, totalPages }
4120    } = (0, import_element15.useContext)(dataviews_context_default);
4121    if (!totalItems || !totalPages || view.infiniteScrollEnabled) {
4122      return null;
4123    }
4124    const currentPage = view.page ?? 1;
4125    const pageSelectOptions = Array.from(Array(totalPages)).map(
4126      (_, i2) => {
4127        const page = i2 + 1;
4128        return {
4129          value: page.toString(),
4130          label: page.toString(),
4131          "aria-label": currentPage === page ? (0, import_i18n14.sprintf)(
4132            // translators: 1: current page number. 2: total number of pages.
4133            (0, import_i18n14.__)("Page %1$d of %2$d"),
4134            currentPage,
4135            totalPages
4136          ) : page.toString()
4137        };
4138      }
4139    );
4140    return !!totalItems && totalPages !== 1 && /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
4141      import_components15.__experimentalHStack,
4142      {
4143        expanded: false,
4144        className: "dataviews-pagination",
4145        justify: "end",
4146        spacing: 6,
4147        children: [
4148          /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
4149            import_components15.__experimentalHStack,
4150            {
4151              justify: "flex-start",
4152              expanded: false,
4153              spacing: 1,
4154              className: "dataviews-pagination__page-select",
4155              children: (0, import_element15.createInterpolateElement)(
4156                (0, import_i18n14.sprintf)(
4157                  // translators: 1: Current page number, 2: Total number of pages.
4158                  (0, import_i18n14._x)(
4159                    "<div>Page</div>%1$s<div>of %2$d</div>",
4160                    "paging"
4161                  ),
4162                  "<CurrentPage />",
4163                  totalPages
4164                ),
4165                {
4166                  div: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { "aria-hidden": true }),
4167                  CurrentPage: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
4168                    import_components15.SelectControl,
4169                    {
4170                      "aria-label": (0, import_i18n14.__)("Current page"),
4171                      value: currentPage.toString(),
4172                      options: pageSelectOptions,
4173                      onChange: (newValue) => {
4174                        onChangeView({
4175                          ...view,
4176                          page: +newValue
4177                        });
4178                      },
4179                      size: "small",
4180                      variant: "minimal"
4181                    }
4182                  )
4183                }
4184              )
4185            }
4186          ),
4187          /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_components15.__experimentalHStack, { expanded: false, spacing: 1, children: [
4188            /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
4189              import_components15.Button,
4190              {
4191                onClick: () => onChangeView({
4192                  ...view,
4193                  page: currentPage - 1
4194                }),
4195                disabled: currentPage === 1,
4196                accessibleWhenDisabled: true,
4197                label: (0, import_i18n14.__)("Previous page"),
4198                icon: (0, import_i18n14.isRTL)() ? next_default : previous_default,
4199                showTooltip: true,
4200                size: "compact",
4201                tooltipPosition: "top"
4202              }
4203            ),
4204            /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
4205              import_components15.Button,
4206              {
4207                onClick: () => onChangeView({ ...view, page: currentPage + 1 }),
4208                disabled: currentPage >= totalPages,
4209                accessibleWhenDisabled: true,
4210                label: (0, import_i18n14.__)("Next page"),
4211                icon: (0, import_i18n14.isRTL)() ? previous_default : next_default,
4212                showTooltip: true,
4213                size: "compact",
4214                tooltipPosition: "top"
4215              }
4216            )
4217          ] })
4218        ]
4219      }
4220    );
4221  }
4222  var dataviews_pagination_default = (0, import_element15.memo)(DataViewsPagination);
4223  
4224  // packages/dataviews/build-module/components/dataviews-picker/footer.js
4225  var import_jsx_runtime40 = __toESM(require_jsx_runtime());
4226  function useIsMultiselectPicker(actions) {
4227    return (0, import_element16.useMemo)(() => {
4228      return actions?.every((action) => action.supportsBulk);
4229    }, [actions]);
4230  }
4231  
4232  // packages/dataviews/build-module/dataviews-layouts/utils/grid-items.js
4233  var import_element17 = __toESM(require_element());
4234  var import_jsx_runtime41 = __toESM(require_jsx_runtime());
4235  var GridItems = (0, import_element17.forwardRef)(({ className, previewSize, ...props }, ref) => {
4236    return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
4237      "div",
4238      {
4239        ref,
4240        className: clsx_default("dataviews-view-grid-items", className),
4241        style: {
4242          gridTemplateColumns: previewSize && `repeat(auto-fill, minmax($previewSize}px, 1fr))`
4243        },
4244        ...props
4245      }
4246    );
4247  });
4248  
4249  // packages/dataviews/build-module/dataviews-layouts/picker-grid/index.js
4250  var import_jsx_runtime42 = __toESM(require_jsx_runtime());
4251  var { Badge: Badge2 } = unlock(import_components17.privateApis);
4252  function GridItem3({
4253    view,
4254    multiselect,
4255    selection,
4256    onChangeSelection,
4257    getItemId,
4258    item,
4259    mediaField,
4260    titleField,
4261    descriptionField,
4262    regularFields,
4263    badgeFields,
4264    config,
4265    posinset,
4266    setsize
4267  }) {
4268    const { showTitle = true, showMedia = true, showDescription = true } = view;
4269    const id = getItemId(item);
4270    const isSelected2 = selection.includes(id);
4271    const renderedMediaField = mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4272      mediaField.render,
4273      {
4274        item,
4275        field: mediaField,
4276        config
4277      }
4278    ) : null;
4279    const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(titleField.render, { item, field: titleField }) : null;
4280    return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
4281      import_components17.Composite.Item,
4282      {
4283        "aria-label": titleField ? titleField.getValue({ item }) || (0, import_i18n16.__)("(no title)") : void 0,
4284        render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_components17.__experimentalVStack, { spacing: 0, children, ...props }),
4285        role: "option",
4286        "aria-posinset": posinset,
4287        "aria-setsize": setsize,
4288        className: clsx_default("dataviews-view-picker-grid__card", {
4289          "is-selected": isSelected2
4290        }),
4291        "aria-selected": isSelected2,
4292        onClick: () => {
4293          if (isSelected2) {
4294            onChangeSelection(
4295              selection.filter((itemId) => id !== itemId)
4296            );
4297          } else {
4298            const newSelection = multiselect ? [...selection, id] : [id];
4299            onChangeSelection(newSelection);
4300          }
4301        },
4302        children: [
4303          showMedia && renderedMediaField && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "dataviews-view-picker-grid__media", children: renderedMediaField }),
4304          showMedia && renderedMediaField && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4305            DataViewsSelectionCheckbox,
4306            {
4307              item,
4308              selection,
4309              onChangeSelection,
4310              getItemId,
4311              titleField,
4312              disabled: false,
4313              "aria-hidden": true,
4314              tabIndex: -1
4315            }
4316          ),
4317          showTitle && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4318            import_components17.__experimentalHStack,
4319            {
4320              justify: "space-between",
4321              className: "dataviews-view-picker-grid__title-actions",
4322              children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "dataviews-view-picker-grid__title-field dataviews-title-field", children: renderedTitleField })
4323            }
4324          ),
4325          /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_components17.__experimentalVStack, { spacing: 1, children: [
4326            showDescription && descriptionField?.render && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4327              descriptionField.render,
4328              {
4329                item,
4330                field: descriptionField
4331              }
4332            ),
4333            !!badgeFields?.length && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4334              import_components17.__experimentalHStack,
4335              {
4336                className: "dataviews-view-picker-grid__badge-fields",
4337                spacing: 2,
4338                wrap: true,
4339                alignment: "top",
4340                justify: "flex-start",
4341                children: badgeFields.map((field) => {
4342                  return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4343                    Badge2,
4344                    {
4345                      className: "dataviews-view-picker-grid__field-value",
4346                      children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4347                        field.render,
4348                        {
4349                          item,
4350                          field
4351                        }
4352                      )
4353                    },
4354                    field.id
4355                  );
4356                })
4357              }
4358            ),
4359            !!regularFields?.length && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4360              import_components17.__experimentalVStack,
4361              {
4362                className: "dataviews-view-picker-grid__fields",
4363                spacing: 1,
4364                children: regularFields.map((field) => {
4365                  return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4366                    import_components17.Flex,
4367                    {
4368                      className: "dataviews-view-picker-grid__field",
4369                      gap: 1,
4370                      justify: "flex-start",
4371                      expanded: true,
4372                      style: { height: "auto" },
4373                      direction: "row",
4374                      children: /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [
4375                        /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_components17.FlexItem, { className: "dataviews-view-picker-grid__field-name", children: field.header }),
4376                        /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4377                          import_components17.FlexItem,
4378                          {
4379                            className: "dataviews-view-picker-grid__field-value",
4380                            style: { maxHeight: "none" },
4381                            children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4382                              field.render,
4383                              {
4384                                item,
4385                                field
4386                              }
4387                            )
4388                          }
4389                        )
4390                      ] })
4391                    },
4392                    field.id
4393                  );
4394                })
4395              }
4396            )
4397          ] })
4398        ]
4399      },
4400      id
4401    );
4402  }
4403  function GridGroup({
4404    groupName,
4405    groupField,
4406    children
4407  }) {
4408    const headerId = (0, import_compose6.useInstanceId)(
4409      GridGroup,
4410      "dataviews-view-picker-grid-group__header"
4411    );
4412    return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
4413      import_components17.__experimentalVStack,
4414      {
4415        spacing: 2,
4416        role: "group",
4417        "aria-labelledby": headerId,
4418        children: [
4419          /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4420            "h3",
4421            {
4422              className: "dataviews-view-picker-grid-group__header",
4423              id: headerId,
4424              children: (0, import_i18n16.sprintf)(
4425                // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022".
4426                (0, import_i18n16.__)("%1$s: %2$s"),
4427                groupField.label,
4428                groupName
4429              )
4430            }
4431          ),
4432          children
4433        ]
4434      },
4435      groupName
4436    );
4437  }
4438  function ViewPickerGrid({
4439    actions,
4440    data,
4441    fields,
4442    getItemId,
4443    isLoading,
4444    onChangeSelection,
4445    selection,
4446    view,
4447    className,
4448    empty
4449  }) {
4450    const { resizeObserverRef, paginationInfo, itemListLabel } = (0, import_element18.useContext)(dataviews_context_default);
4451    const titleField = fields.find(
4452      (field) => field.id === view?.titleField
4453    );
4454    const mediaField = fields.find(
4455      (field) => field.id === view?.mediaField
4456    );
4457    const descriptionField = fields.find(
4458      (field) => field.id === view?.descriptionField
4459    );
4460    const otherFields = view.fields ?? [];
4461    const { regularFields, badgeFields } = otherFields.reduce(
4462      (accumulator, fieldId) => {
4463        const field = fields.find((f2) => f2.id === fieldId);
4464        if (!field) {
4465          return accumulator;
4466        }
4467        const key = view.layout?.badgeFields?.includes(fieldId) ? "badgeFields" : "regularFields";
4468        accumulator[key].push(field);
4469        return accumulator;
4470      },
4471      { regularFields: [], badgeFields: [] }
4472    );
4473    const hasData = !!data?.length;
4474    const usedPreviewSize = view.layout?.previewSize;
4475    const isMultiselect = useIsMultiselectPicker(actions);
4476    const size = "900px";
4477    const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null;
4478    const dataByGroup = groupField ? getDataByGroup(data, groupField) : null;
4479    const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup;
4480    const currentPage = view?.page ?? 1;
4481    const perPage = view?.perPage ?? 0;
4482    const setSize = isInfiniteScroll ? paginationInfo?.totalItems : void 0;
4483    return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, {
4484      // Render multiple groups.
4485      children: [
4486        hasData && groupField && dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4487          import_components17.Composite,
4488          {
4489            virtualFocus: true,
4490            orientation: "horizontal",
4491            role: "listbox",
4492            "aria-multiselectable": isMultiselect,
4493            className: clsx_default(
4494              "dataviews-view-picker-grid",
4495              className
4496            ),
4497            "aria-label": itemListLabel,
4498            render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4499              import_components17.__experimentalVStack,
4500              {
4501                spacing: 4,
4502                children,
4503                ...props
4504              }
4505            ),
4506            children: Array.from(dataByGroup.entries()).map(
4507              ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4508                GridGroup,
4509                {
4510                  groupName,
4511                  groupField,
4512                  children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4513                    GridItems,
4514                    {
4515                      previewSize: usedPreviewSize,
4516                      style: {
4517                        gridTemplateColumns: usedPreviewSize && `repeat(auto-fill, minmax($usedPreviewSize}px, 1fr))`
4518                      },
4519                      "aria-busy": isLoading,
4520                      ref: resizeObserverRef,
4521                      children: groupItems.map((item) => {
4522                        const posInSet = (currentPage - 1) * perPage + data.indexOf(item) + 1;
4523                        return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4524                          GridItem3,
4525                          {
4526                            view,
4527                            multiselect: isMultiselect,
4528                            selection,
4529                            onChangeSelection,
4530                            getItemId,
4531                            item,
4532                            mediaField,
4533                            titleField,
4534                            descriptionField,
4535                            regularFields,
4536                            badgeFields,
4537                            config: {
4538                              sizes: size
4539                            },
4540                            posinset: posInSet,
4541                            setsize: setSize
4542                          },
4543                          getItemId(item)
4544                        );
4545                      })
4546                    }
4547                  )
4548                },
4549                groupName
4550              )
4551            )
4552          }
4553        ),
4554        // Render a single grid with all data.
4555        hasData && !dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4556          import_components17.Composite,
4557          {
4558            render: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4559              GridItems,
4560              {
4561                className: clsx_default(
4562                  "dataviews-view-picker-grid",
4563                  className
4564                ),
4565                previewSize: usedPreviewSize,
4566                "aria-busy": isLoading,
4567                ref: resizeObserverRef
4568              }
4569            ),
4570            virtualFocus: true,
4571            orientation: "horizontal",
4572            role: "listbox",
4573            "aria-multiselectable": isMultiselect,
4574            "aria-label": itemListLabel,
4575            children: data.map((item, index) => {
4576              let posinset = isInfiniteScroll ? index + 1 : void 0;
4577              if (!isInfiniteScroll) {
4578                posinset = (currentPage - 1) * perPage + index + 1;
4579              }
4580              return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4581                GridItem3,
4582                {
4583                  view,
4584                  multiselect: isMultiselect,
4585                  selection,
4586                  onChangeSelection,
4587                  getItemId,
4588                  item,
4589                  mediaField,
4590                  titleField,
4591                  descriptionField,
4592                  regularFields,
4593                  badgeFields,
4594                  config: {
4595                    sizes: size
4596                  },
4597                  posinset,
4598                  setsize: setSize
4599                },
4600                getItemId(item)
4601              );
4602            })
4603          }
4604        ),
4605        // Render empty state.
4606        !hasData && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4607          "div",
4608          {
4609            className: clsx_default({
4610              "dataviews-loading": isLoading,
4611              "dataviews-no-results": !isLoading
4612            }),
4613            children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_components17.Spinner, {}) }) : empty
4614          }
4615        ),
4616        hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_components17.Spinner, {}) })
4617      ]
4618    });
4619  }
4620  var picker_grid_default = ViewPickerGrid;
4621  
4622  // packages/dataviews/build-module/dataviews-layouts/picker-table/index.js
4623  var import_i18n17 = __toESM(require_i18n());
4624  var import_components18 = __toESM(require_components());
4625  var import_element19 = __toESM(require_element());
4626  var import_jsx_runtime43 = __toESM(require_jsx_runtime());
4627  function TableColumnField2({
4628    item,
4629    fields,
4630    column,
4631    align
4632  }) {
4633    const field = fields.find((f2) => f2.id === column);
4634    if (!field) {
4635      return null;
4636    }
4637    const className = clsx_default("dataviews-view-table__cell-content-wrapper", {
4638      "dataviews-view-table__cell-align-end": align === "end",
4639      "dataviews-view-table__cell-align-center": align === "center"
4640    });
4641    return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(field.render, { item, field }) });
4642  }
4643  function TableRow2({
4644    item,
4645    fields,
4646    id,
4647    view,
4648    titleField,
4649    mediaField,
4650    descriptionField,
4651    selection,
4652    getItemId,
4653    onChangeSelection,
4654    multiselect,
4655    posinset
4656  }) {
4657    const { paginationInfo } = (0, import_element19.useContext)(dataviews_context_default);
4658    const isSelected2 = selection.includes(id);
4659    const [isHovered, setIsHovered] = (0, import_element19.useState)(false);
4660    const {
4661      showTitle = true,
4662      showMedia = true,
4663      showDescription = true,
4664      infiniteScrollEnabled
4665    } = view;
4666    const handleMouseEnter = () => {
4667      setIsHovered(true);
4668    };
4669    const handleMouseLeave = () => {
4670      setIsHovered(false);
4671    };
4672    const columns = view.fields ?? [];
4673    const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription;
4674    return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
4675      import_components18.Composite.Item,
4676      {
4677        render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4678          "tr",
4679          {
4680            className: clsx_default("dataviews-view-table__row", {
4681              "is-selected": isSelected2,
4682              "is-hovered": isHovered
4683            }),
4684            onMouseEnter: handleMouseEnter,
4685            onMouseLeave: handleMouseLeave,
4686            children,
4687            ...props
4688          }
4689        ),
4690        "aria-selected": isSelected2,
4691        "aria-setsize": paginationInfo.totalItems || void 0,
4692        "aria-posinset": posinset,
4693        role: infiniteScrollEnabled ? "article" : "option",
4694        onClick: () => {
4695          if (isSelected2) {
4696            onChangeSelection(
4697              selection.filter((itemId) => id !== itemId)
4698            );
4699          } else {
4700            const newSelection = multiselect ? [...selection, id] : [id];
4701            onChangeSelection(newSelection);
4702          }
4703        },
4704        children: [
4705          /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4706            "td",
4707            {
4708              className: "dataviews-view-table__checkbox-column",
4709              role: "presentation",
4710              children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "dataviews-view-table__cell-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4711                DataViewsSelectionCheckbox,
4712                {
4713                  item,
4714                  selection,
4715                  onChangeSelection,
4716                  getItemId,
4717                  titleField,
4718                  disabled: false,
4719                  "aria-hidden": true,
4720                  tabIndex: -1
4721                }
4722              ) })
4723            }
4724          ),
4725          hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("td", { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4726            column_primary_default,
4727            {
4728              item,
4729              titleField: showTitle ? titleField : void 0,
4730              mediaField: showMedia ? mediaField : void 0,
4731              descriptionField: showDescription ? descriptionField : void 0,
4732              isItemClickable: () => false
4733            }
4734          ) }),
4735          columns.map((column) => {
4736            const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {};
4737            return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4738              "td",
4739              {
4740                style: {
4741                  width,
4742                  maxWidth,
4743                  minWidth
4744                },
4745                role: "presentation",
4746                children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4747                  TableColumnField2,
4748                  {
4749                    fields,
4750                    item,
4751                    column,
4752                    align
4753                  }
4754                )
4755              },
4756              column
4757            );
4758          })
4759        ]
4760      },
4761      id
4762    );
4763  }
4764  function ViewPickerTable({
4765    actions,
4766    data,
4767    fields,
4768    getItemId,
4769    isLoading = false,
4770    onChangeView,
4771    onChangeSelection,
4772    selection,
4773    setOpenedFilter,
4774    view,
4775    className,
4776    empty
4777  }) {
4778    const headerMenuRefs = (0, import_element19.useRef)(/* @__PURE__ */ new Map());
4779    const headerMenuToFocusRef = (0, import_element19.useRef)();
4780    const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, import_element19.useState)();
4781    const isMultiselect = useIsMultiselectPicker(actions) ?? false;
4782    (0, import_element19.useEffect)(() => {
4783      if (headerMenuToFocusRef.current) {
4784        headerMenuToFocusRef.current.focus();
4785        headerMenuToFocusRef.current = void 0;
4786      }
4787    });
4788    const tableNoticeId = (0, import_element19.useId)();
4789    if (nextHeaderMenuToFocus) {
4790      headerMenuToFocusRef.current = nextHeaderMenuToFocus;
4791      setNextHeaderMenuToFocus(void 0);
4792      return;
4793    }
4794    const onHide = (field) => {
4795      const hidden = headerMenuRefs.current.get(field.id);
4796      const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : void 0;
4797      setNextHeaderMenuToFocus(fallback?.node);
4798    };
4799    const hasData = !!data?.length;
4800    const titleField = fields.find((field) => field.id === view.titleField);
4801    const mediaField = fields.find((field) => field.id === view.mediaField);
4802    const descriptionField = fields.find(
4803      (field) => field.id === view.descriptionField
4804    );
4805    const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null;
4806    const dataByGroup = groupField ? getDataByGroup(data, groupField) : null;
4807    const { showTitle = true, showMedia = true, showDescription = true } = view;
4808    const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField && showDescription;
4809    const columns = view.fields ?? [];
4810    const headerMenuRef = (column, index) => (node) => {
4811      if (node) {
4812        headerMenuRefs.current.set(column, {
4813          node,
4814          fallback: columns[index > 0 ? index - 1 : 1]
4815        });
4816      } else {
4817        headerMenuRefs.current.delete(column);
4818      }
4819    };
4820    const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup;
4821    return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_jsx_runtime43.Fragment, { children: [
4822      /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
4823        "table",
4824        {
4825          className: clsx_default(
4826            "dataviews-view-table",
4827            "dataviews-view-picker-table",
4828            className,
4829            {
4830              [`has-$view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes(
4831                view.layout.density
4832              )
4833            }
4834          ),
4835          "aria-busy": isLoading,
4836          "aria-describedby": tableNoticeId,
4837          role: isInfiniteScroll ? "feed" : "listbox",
4838          children: [
4839            /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("thead", { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
4840              "tr",
4841              {
4842                className: "dataviews-view-table__row",
4843                role: "presentation",
4844                children: [
4845                  /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("th", { className: "dataviews-view-table__checkbox-column", children: isMultiselect && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4846                    BulkSelectionCheckbox,
4847                    {
4848                      selection,
4849                      onChangeSelection,
4850                      data,
4851                      actions,
4852                      getItemId
4853                    }
4854                  ) }),
4855                  hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("th", { children: titleField && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4856                    column_header_menu_default,
4857                    {
4858                      ref: headerMenuRef(
4859                        titleField.id,
4860                        0
4861                      ),
4862                      fieldId: titleField.id,
4863                      view,
4864                      fields,
4865                      onChangeView,
4866                      onHide,
4867                      setOpenedFilter,
4868                      canMove: false
4869                    }
4870                  ) }),
4871                  columns.map((column, index) => {
4872                    const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {};
4873                    return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4874                      "th",
4875                      {
4876                        style: {
4877                          width,
4878                          maxWidth,
4879                          minWidth,
4880                          textAlign: align
4881                        },
4882                        "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : void 0,
4883                        scope: "col",
4884                        children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4885                          column_header_menu_default,
4886                          {
4887                            ref: headerMenuRef(column, index),
4888                            fieldId: column,
4889                            view,
4890                            fields,
4891                            onChangeView,
4892                            onHide,
4893                            setOpenedFilter,
4894                            canMove: view.layout?.enableMoving ?? true
4895                          }
4896                        )
4897                      },
4898                      column
4899                    );
4900                  })
4901                ]
4902              }
4903            ) }),
4904            hasData && groupField && dataByGroup ? Array.from(dataByGroup.entries()).map(
4905              ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
4906                import_components18.Composite,
4907                {
4908                  virtualFocus: true,
4909                  orientation: "vertical",
4910                  render: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("tbody", { role: "group" }),
4911                  children: [
4912                    /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4913                      "tr",
4914                      {
4915                        className: "dataviews-view-table__group-header-row",
4916                        role: "presentation",
4917                        children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4918                          "td",
4919                          {
4920                            colSpan: columns.length + (hasPrimaryColumn ? 1 : 0) + 1,
4921                            className: "dataviews-view-table__group-header-cell",
4922                            role: "presentation",
4923                            children: (0, import_i18n17.sprintf)(
4924                              // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022".
4925                              (0, import_i18n17.__)("%1$s: %2$s"),
4926                              groupField.label,
4927                              groupName
4928                            )
4929                          }
4930                        )
4931                      }
4932                    ),
4933                    groupItems.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4934                      TableRow2,
4935                      {
4936                        item,
4937                        fields,
4938                        id: getItemId(item) || index.toString(),
4939                        view,
4940                        titleField,
4941                        mediaField,
4942                        descriptionField,
4943                        selection,
4944                        getItemId,
4945                        onChangeSelection,
4946                        multiselect: isMultiselect
4947                      },
4948                      getItemId(item)
4949                    ))
4950                  ]
4951                },
4952                `group-$groupName}`
4953              )
4954            ) : /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4955              import_components18.Composite,
4956              {
4957                render: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("tbody", { role: "presentation" }),
4958                virtualFocus: true,
4959                orientation: "vertical",
4960                children: hasData && data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4961                  TableRow2,
4962                  {
4963                    item,
4964                    fields,
4965                    id: getItemId(item) || index.toString(),
4966                    view,
4967                    titleField,
4968                    mediaField,
4969                    descriptionField,
4970                    selection,
4971                    getItemId,
4972                    onChangeSelection,
4973                    multiselect: isMultiselect,
4974                    posinset: index + 1
4975                  },
4976                  getItemId(item)
4977                ))
4978              }
4979            )
4980          ]
4981        }
4982      ),
4983      /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
4984        "div",
4985        {
4986          className: clsx_default({
4987            "dataviews-loading": isLoading,
4988            "dataviews-no-results": !hasData && !isLoading
4989          }),
4990          id: tableNoticeId,
4991          children: [
4992            !hasData && (isLoading ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_components18.Spinner, {}) }) : empty),
4993            hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_components18.Spinner, {}) })
4994          ]
4995        }
4996      )
4997    ] });
4998  }
4999  var picker_table_default = ViewPickerTable;
5000  
5001  // packages/dataviews/build-module/dataviews-layouts/utils/preview-size-picker.js
5002  var import_components19 = __toESM(require_components());
5003  var import_i18n18 = __toESM(require_i18n());
5004  var import_element20 = __toESM(require_element());
5005  var import_jsx_runtime44 = __toESM(require_jsx_runtime());
5006  var imageSizes2 = [
5007    {
5008      value: 120,
5009      breakpoint: 1
5010    },
5011    {
5012      value: 170,
5013      breakpoint: 1
5014    },
5015    {
5016      value: 230,
5017      breakpoint: 1
5018    },
5019    {
5020      value: 290,
5021      breakpoint: 1112
5022      // at minimum image width, 4 images display at this container size
5023    },
5024    {
5025      value: 350,
5026      breakpoint: 1636
5027      // at minimum image width, 6 images display at this container size
5028    },
5029    {
5030      value: 430,
5031      breakpoint: 588
5032      // at minimum image width, 2 images display at this container size
5033    }
5034  ];
5035  function PreviewSizePicker() {
5036    const context = (0, import_element20.useContext)(dataviews_context_default);
5037    const view = context.view;
5038    const breakValues = imageSizes2.filter((size) => {
5039      return context.containerWidth >= size.breakpoint;
5040    });
5041    const layoutPreviewSize = view.layout?.previewSize ?? 230;
5042    const previewSizeToUse = breakValues.map((size, index) => ({ ...size, index })).filter((size) => size.value <= layoutPreviewSize).sort((a2, b2) => b2.value - a2.value)[0]?.index ?? 0;
5043    const marks = breakValues.map((size, index) => {
5044      return {
5045        value: index
5046      };
5047    });
5048    return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
5049      import_components19.RangeControl,
5050      {
5051        __next40pxDefaultSize: true,
5052        showTooltip: false,
5053        label: (0, import_i18n18.__)("Preview size"),
5054        value: previewSizeToUse,
5055        min: 0,
5056        max: breakValues.length - 1,
5057        withInputField: false,
5058        onChange: (value = 0) => {
5059          context.onChangeView({
5060            ...view,
5061            layout: {
5062              ...view.layout,
5063              previewSize: breakValues[value].value
5064            }
5065          });
5066        },
5067        step: 1,
5068        marks
5069      }
5070    );
5071  }
5072  
5073  // packages/dataviews/build-module/dataviews-layouts/table/density-picker.js
5074  var import_components20 = __toESM(require_components());
5075  var import_i18n19 = __toESM(require_i18n());
5076  var import_element21 = __toESM(require_element());
5077  var import_jsx_runtime45 = __toESM(require_jsx_runtime());
5078  function DensityPicker() {
5079    const context = (0, import_element21.useContext)(dataviews_context_default);
5080    const view = context.view;
5081    return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
5082      import_components20.__experimentalToggleGroupControl,
5083      {
5084        size: "__unstable-large",
5085        label: (0, import_i18n19.__)("Density"),
5086        value: view.layout?.density || "balanced",
5087        onChange: (value) => {
5088          context.onChangeView({
5089            ...view,
5090            layout: {
5091              ...view.layout,
5092              density: value
5093            }
5094          });
5095        },
5096        isBlock: true,
5097        children: [
5098          /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
5099            import_components20.__experimentalToggleGroupControlOption,
5100            {
5101              value: "comfortable",
5102              label: (0, import_i18n19._x)(
5103                "Comfortable",
5104                "Density option for DataView layout"
5105              )
5106            },
5107            "comfortable"
5108          ),
5109          /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
5110            import_components20.__experimentalToggleGroupControlOption,
5111            {
5112              value: "balanced",
5113              label: (0, import_i18n19._x)("Balanced", "Density option for DataView layout")
5114            },
5115            "balanced"
5116          ),
5117          /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
5118            import_components20.__experimentalToggleGroupControlOption,
5119            {
5120              value: "compact",
5121              label: (0, import_i18n19._x)("Compact", "Density option for DataView layout")
5122            },
5123            "compact"
5124          )
5125        ]
5126      }
5127    );
5128  }
5129  
5130  // packages/dataviews/build-module/dataviews-layouts/index.js
5131  var VIEW_LAYOUTS = [
5132    {
5133      type: LAYOUT_TABLE,
5134      label: (0, import_i18n20.__)("Table"),
5135      component: table_default,
5136      icon: block_table_default,
5137      viewConfigOptions: DensityPicker
5138    },
5139    {
5140      type: LAYOUT_GRID,
5141      label: (0, import_i18n20.__)("Grid"),
5142      component: grid_default,
5143      icon: category_default,
5144      viewConfigOptions: PreviewSizePicker
5145    },
5146    {
5147      type: LAYOUT_LIST,
5148      label: (0, import_i18n20.__)("List"),
5149      component: ViewList,
5150      icon: (0, import_i18n20.isRTL)() ? format_list_bullets_rtl_default : format_list_bullets_default
5151    },
5152    {
5153      type: LAYOUT_ACTIVITY,
5154      label: (0, import_i18n20.__)("Activity"),
5155      component: ViewActivity,
5156      icon: scheduled_default,
5157      viewConfigOptions: DensityPicker
5158    },
5159    {
5160      type: LAYOUT_PICKER_GRID,
5161      label: (0, import_i18n20.__)("Grid"),
5162      component: picker_grid_default,
5163      icon: category_default,
5164      viewConfigOptions: PreviewSizePicker,
5165      isPicker: true
5166    },
5167    {
5168      type: LAYOUT_PICKER_TABLE,
5169      label: (0, import_i18n20.__)("Table"),
5170      component: picker_table_default,
5171      icon: block_table_default,
5172      viewConfigOptions: DensityPicker,
5173      isPicker: true
5174    }
5175  ];
5176  
5177  // packages/dataviews/build-module/components/dataviews-filters/filters.js
5178  var import_element29 = __toESM(require_element());
5179  var import_components26 = __toESM(require_components());
5180  
5181  // packages/dataviews/build-module/components/dataviews-filters/filter.js
5182  var import_components23 = __toESM(require_components());
5183  var import_i18n23 = __toESM(require_i18n());
5184  var import_element26 = __toESM(require_element());
5185  
5186  // node_modules/@ariakit/react-core/esm/__chunks/3YLGPPWQ.js
5187  var __defProp2 = Object.defineProperty;
5188  var __defProps = Object.defineProperties;
5189  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5190  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5191  var __hasOwnProp2 = Object.prototype.hasOwnProperty;
5192  var __propIsEnum = Object.prototype.propertyIsEnumerable;
5193  var __defNormalProp = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5194  var __spreadValues = (a2, b2) => {
5195    for (var prop in b2 || (b2 = {}))
5196      if (__hasOwnProp2.call(b2, prop))
5197        __defNormalProp(a2, prop, b2[prop]);
5198    if (__getOwnPropSymbols)
5199      for (var prop of __getOwnPropSymbols(b2)) {
5200        if (__propIsEnum.call(b2, prop))
5201          __defNormalProp(a2, prop, b2[prop]);
5202      }
5203    return a2;
5204  };
5205  var __spreadProps = (a2, b2) => __defProps(a2, __getOwnPropDescs(b2));
5206  var __objRest = (source, exclude) => {
5207    var target = {};
5208    for (var prop in source)
5209      if (__hasOwnProp2.call(source, prop) && exclude.indexOf(prop) < 0)
5210        target[prop] = source[prop];
5211    if (source != null && __getOwnPropSymbols)
5212      for (var prop of __getOwnPropSymbols(source)) {
5213        if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
5214          target[prop] = source[prop];
5215      }
5216    return target;
5217  };
5218  
5219  // node_modules/@ariakit/core/esm/__chunks/3YLGPPWQ.js
5220  var __defProp3 = Object.defineProperty;
5221  var __defProps2 = Object.defineProperties;
5222  var __getOwnPropDescs2 = Object.getOwnPropertyDescriptors;
5223  var __getOwnPropSymbols2 = Object.getOwnPropertySymbols;
5224  var __hasOwnProp3 = Object.prototype.hasOwnProperty;
5225  var __propIsEnum2 = Object.prototype.propertyIsEnumerable;
5226  var __defNormalProp2 = (obj, key, value) => key in obj ? __defProp3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5227  var __spreadValues2 = (a2, b2) => {
5228    for (var prop in b2 || (b2 = {}))
5229      if (__hasOwnProp3.call(b2, prop))
5230        __defNormalProp2(a2, prop, b2[prop]);
5231    if (__getOwnPropSymbols2)
5232      for (var prop of __getOwnPropSymbols2(b2)) {
5233        if (__propIsEnum2.call(b2, prop))
5234          __defNormalProp2(a2, prop, b2[prop]);
5235      }
5236    return a2;
5237  };
5238  var __spreadProps2 = (a2, b2) => __defProps2(a2, __getOwnPropDescs2(b2));
5239  var __objRest2 = (source, exclude) => {
5240    var target = {};
5241    for (var prop in source)
5242      if (__hasOwnProp3.call(source, prop) && exclude.indexOf(prop) < 0)
5243        target[prop] = source[prop];
5244    if (source != null && __getOwnPropSymbols2)
5245      for (var prop of __getOwnPropSymbols2(source)) {
5246        if (exclude.indexOf(prop) < 0 && __propIsEnum2.call(source, prop))
5247          target[prop] = source[prop];
5248      }
5249    return target;
5250  };
5251  
5252  // node_modules/@ariakit/core/esm/__chunks/PBFD2E7P.js
5253  function noop(..._) {
5254  }
5255  function applyState(argument, currentValue) {
5256    if (isUpdater(argument)) {
5257      const value = isLazyValue(currentValue) ? currentValue() : currentValue;
5258      return argument(value);
5259    }
5260    return argument;
5261  }
5262  function isUpdater(argument) {
5263    return typeof argument === "function";
5264  }
5265  function isLazyValue(value) {
5266    return typeof value === "function";
5267  }
5268  function hasOwnProperty(object, prop) {
5269    if (typeof Object.hasOwn === "function") {
5270      return Object.hasOwn(object, prop);
5271    }
5272    return Object.prototype.hasOwnProperty.call(object, prop);
5273  }
5274  function chain(...fns) {
5275    return (...args) => {
5276      for (const fn of fns) {
5277        if (typeof fn === "function") {
5278          fn(...args);
5279        }
5280      }
5281    };
5282  }
5283  function normalizeString(str) {
5284    return str.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
5285  }
5286  function omit2(object, keys) {
5287    const result = __spreadValues2({}, object);
5288    for (const key of keys) {
5289      if (hasOwnProperty(result, key)) {
5290        delete result[key];
5291      }
5292    }
5293    return result;
5294  }
5295  function pick(object, paths) {
5296    const result = {};
5297    for (const key of paths) {
5298      if (hasOwnProperty(object, key)) {
5299        result[key] = object[key];
5300      }
5301    }
5302    return result;
5303  }
5304  function identity(value) {
5305    return value;
5306  }
5307  function invariant(condition, message2) {
5308    if (condition) return;
5309    if (typeof message2 !== "string") throw new Error("Invariant failed");
5310    throw new Error(message2);
5311  }
5312  function getKeys(obj) {
5313    return Object.keys(obj);
5314  }
5315  function isFalsyBooleanCallback(booleanOrCallback, ...args) {
5316    const result = typeof booleanOrCallback === "function" ? booleanOrCallback(...args) : booleanOrCallback;
5317    if (result == null) return false;
5318    return !result;
5319  }
5320  function disabledFromProps(props) {
5321    return props.disabled || props["aria-disabled"] === true || props["aria-disabled"] === "true";
5322  }
5323  function removeUndefinedValues(obj) {
5324    const result = {};
5325    for (const key in obj) {
5326      if (obj[key] !== void 0) {
5327        result[key] = obj[key];
5328      }
5329    }
5330    return result;
5331  }
5332  function defaultValue(...values) {
5333    for (const value of values) {
5334      if (value !== void 0) return value;
5335    }
5336    return void 0;
5337  }
5338  
5339  // node_modules/@ariakit/react-core/esm/__chunks/SK3NAZA3.js
5340  var import_react2 = __toESM(require_react(), 1);
5341  function setRef(ref, value) {
5342    if (typeof ref === "function") {
5343      ref(value);
5344    } else if (ref) {
5345      ref.current = value;
5346    }
5347  }
5348  function isValidElementWithRef(element) {
5349    if (!element) return false;
5350    if (!(0, import_react2.isValidElement)(element)) return false;
5351    if ("ref" in element.props) return true;
5352    if ("ref" in element) return true;
5353    return false;
5354  }
5355  function getRefProperty(element) {
5356    if (!isValidElementWithRef(element)) return null;
5357    const props = __spreadValues({}, element.props);
5358    return props.ref || element.ref;
5359  }
5360  function mergeProps(base, overrides) {
5361    const props = __spreadValues({}, base);
5362    for (const key in overrides) {
5363      if (!hasOwnProperty(overrides, key)) continue;
5364      if (key === "className") {
5365        const prop = "className";
5366        props[prop] = base[prop] ? `$base[prop]} $overrides[prop]}` : overrides[prop];
5367        continue;
5368      }
5369      if (key === "style") {
5370        const prop = "style";
5371        props[prop] = base[prop] ? __spreadValues(__spreadValues({}, base[prop]), overrides[prop]) : overrides[prop];
5372        continue;
5373      }
5374      const overrideValue = overrides[key];
5375      if (typeof overrideValue === "function" && key.startsWith("on")) {
5376        const baseValue = base[key];
5377        if (typeof baseValue === "function") {
5378          props[key] = (...args) => {
5379            overrideValue(...args);
5380            baseValue(...args);
5381          };
5382          continue;
5383        }
5384      }
5385      props[key] = overrideValue;
5386    }
5387    return props;
5388  }
5389  
5390  // node_modules/@ariakit/core/esm/__chunks/DTR5TSDJ.js
5391  var canUseDOM = checkIsBrowser();
5392  function checkIsBrowser() {
5393    var _a;
5394    return typeof window !== "undefined" && !!((_a = window.document) == null ? void 0 : _a.createElement);
5395  }
5396  function getDocument(node) {
5397    if (!node) return document;
5398    if ("self" in node) return node.document;
5399    return node.ownerDocument || document;
5400  }
5401  function getActiveElement(node, activeDescendant = false) {
5402    const { activeElement } = getDocument(node);
5403    if (!(activeElement == null ? void 0 : activeElement.nodeName)) {
5404      return null;
5405    }
5406    if (isFrame(activeElement) && activeElement.contentDocument) {
5407      return getActiveElement(
5408        activeElement.contentDocument.body,
5409        activeDescendant
5410      );
5411    }
5412    if (activeDescendant) {
5413      const id = activeElement.getAttribute("aria-activedescendant");
5414      if (id) {
5415        const element = getDocument(activeElement).getElementById(id);
5416        if (element) {
5417          return element;
5418        }
5419      }
5420    }
5421    return activeElement;
5422  }
5423  function contains(parent, child) {
5424    return parent === child || parent.contains(child);
5425  }
5426  function isFrame(element) {
5427    return element.tagName === "IFRAME";
5428  }
5429  function isButton(element) {
5430    const tagName = element.tagName.toLowerCase();
5431    if (tagName === "button") return true;
5432    if (tagName === "input" && element.type) {
5433      return buttonInputTypes.indexOf(element.type) !== -1;
5434    }
5435    return false;
5436  }
5437  var buttonInputTypes = [
5438    "button",
5439    "color",
5440    "file",
5441    "image",
5442    "reset",
5443    "submit"
5444  ];
5445  function isVisible(element) {
5446    if (typeof element.checkVisibility === "function") {
5447      return element.checkVisibility();
5448    }
5449    const htmlElement = element;
5450    return htmlElement.offsetWidth > 0 || htmlElement.offsetHeight > 0 || element.getClientRects().length > 0;
5451  }
5452  function isTextField(element) {
5453    try {
5454      const isTextInput = element instanceof HTMLInputElement && element.selectionStart !== null;
5455      const isTextArea = element.tagName === "TEXTAREA";
5456      return isTextInput || isTextArea || false;
5457    } catch (error) {
5458      return false;
5459    }
5460  }
5461  function isTextbox(element) {
5462    return element.isContentEditable || isTextField(element);
5463  }
5464  function getTextboxValue(element) {
5465    if (isTextField(element)) {
5466      return element.value;
5467    }
5468    if (element.isContentEditable) {
5469      const range = getDocument(element).createRange();
5470      range.selectNodeContents(element);
5471      return range.toString();
5472    }
5473    return "";
5474  }
5475  function getTextboxSelection(element) {
5476    let start = 0;
5477    let end = 0;
5478    if (isTextField(element)) {
5479      start = element.selectionStart || 0;
5480      end = element.selectionEnd || 0;
5481    } else if (element.isContentEditable) {
5482      const selection = getDocument(element).getSelection();
5483      if ((selection == null ? void 0 : selection.rangeCount) && selection.anchorNode && contains(element, selection.anchorNode) && selection.focusNode && contains(element, selection.focusNode)) {
5484        const range = selection.getRangeAt(0);
5485        const nextRange = range.cloneRange();
5486        nextRange.selectNodeContents(element);
5487        nextRange.setEnd(range.startContainer, range.startOffset);
5488        start = nextRange.toString().length;
5489        nextRange.setEnd(range.endContainer, range.endOffset);
5490        end = nextRange.toString().length;
5491      }
5492    }
5493    return { start, end };
5494  }
5495  function getPopupRole(element, fallback) {
5496    const allowedPopupRoles = ["dialog", "menu", "listbox", "tree", "grid"];
5497    const role = element == null ? void 0 : element.getAttribute("role");
5498    if (role && allowedPopupRoles.indexOf(role) !== -1) {
5499      return role;
5500    }
5501    return fallback;
5502  }
5503  function getScrollingElement(element) {
5504    if (!element) return null;
5505    const isScrollableOverflow = (overflow) => {
5506      if (overflow === "auto") return true;
5507      if (overflow === "scroll") return true;
5508      return false;
5509    };
5510    if (element.clientHeight && element.scrollHeight > element.clientHeight) {
5511      const { overflowY } = getComputedStyle(element);
5512      if (isScrollableOverflow(overflowY)) return element;
5513    } else if (element.clientWidth && element.scrollWidth > element.clientWidth) {
5514      const { overflowX } = getComputedStyle(element);
5515      if (isScrollableOverflow(overflowX)) return element;
5516    }
5517    return getScrollingElement(element.parentElement) || document.scrollingElement || document.body;
5518  }
5519  function setSelectionRange(element, ...args) {
5520    if (/text|search|password|tel|url/i.test(element.type)) {
5521      element.setSelectionRange(...args);
5522    }
5523  }
5524  function sortBasedOnDOMPosition(items, getElement) {
5525    const pairs = items.map((item, index) => [index, item]);
5526    let isOrderDifferent = false;
5527    pairs.sort(([indexA, a2], [indexB, b2]) => {
5528      const elementA = getElement(a2);
5529      const elementB = getElement(b2);
5530      if (elementA === elementB) return 0;
5531      if (!elementA || !elementB) return 0;
5532      if (isElementPreceding(elementA, elementB)) {
5533        if (indexA > indexB) {
5534          isOrderDifferent = true;
5535        }
5536        return -1;
5537      }
5538      if (indexA < indexB) {
5539        isOrderDifferent = true;
5540      }
5541      return 1;
5542    });
5543    if (isOrderDifferent) {
5544      return pairs.map(([_, item]) => item);
5545    }
5546    return items;
5547  }
5548  function isElementPreceding(a2, b2) {
5549    return Boolean(
5550      b2.compareDocumentPosition(a2) & Node.DOCUMENT_POSITION_PRECEDING
5551    );
5552  }
5553  
5554  // node_modules/@ariakit/core/esm/__chunks/QAGXQEUG.js
5555  function isTouchDevice() {
5556    return canUseDOM && !!navigator.maxTouchPoints;
5557  }
5558  function isApple() {
5559    if (!canUseDOM) return false;
5560    return /mac|iphone|ipad|ipod/i.test(navigator.platform);
5561  }
5562  function isSafari() {
5563    return canUseDOM && isApple() && /apple/i.test(navigator.vendor);
5564  }
5565  function isFirefox() {
5566    return canUseDOM && /firefox\//i.test(navigator.userAgent);
5567  }
5568  
5569  // node_modules/@ariakit/core/esm/utils/events.js
5570  function isPortalEvent(event) {
5571    return Boolean(
5572      event.currentTarget && !contains(event.currentTarget, event.target)
5573    );
5574  }
5575  function isSelfTarget(event) {
5576    return event.target === event.currentTarget;
5577  }
5578  function isOpeningInNewTab(event) {
5579    const element = event.currentTarget;
5580    if (!element) return false;
5581    const isAppleDevice = isApple();
5582    if (isAppleDevice && !event.metaKey) return false;
5583    if (!isAppleDevice && !event.ctrlKey) return false;
5584    const tagName = element.tagName.toLowerCase();
5585    if (tagName === "a") return true;
5586    if (tagName === "button" && element.type === "submit") return true;
5587    if (tagName === "input" && element.type === "submit") return true;
5588    return false;
5589  }
5590  function isDownloading(event) {
5591    const element = event.currentTarget;
5592    if (!element) return false;
5593    const tagName = element.tagName.toLowerCase();
5594    if (!event.altKey) return false;
5595    if (tagName === "a") return true;
5596    if (tagName === "button" && element.type === "submit") return true;
5597    if (tagName === "input" && element.type === "submit") return true;
5598    return false;
5599  }
5600  function fireBlurEvent(element, eventInit) {
5601    const event = new FocusEvent("blur", eventInit);
5602    const defaultAllowed = element.dispatchEvent(event);
5603    const bubbleInit = __spreadProps2(__spreadValues2({}, eventInit), { bubbles: true });
5604    element.dispatchEvent(new FocusEvent("focusout", bubbleInit));
5605    return defaultAllowed;
5606  }
5607  function fireKeyboardEvent(element, type, eventInit) {
5608    const event = new KeyboardEvent(type, eventInit);
5609    return element.dispatchEvent(event);
5610  }
5611  function fireClickEvent(element, eventInit) {
5612    const event = new MouseEvent("click", eventInit);
5613    return element.dispatchEvent(event);
5614  }
5615  function isFocusEventOutside(event, container) {
5616    const containerElement = container || event.currentTarget;
5617    const relatedTarget = event.relatedTarget;
5618    return !relatedTarget || !contains(containerElement, relatedTarget);
5619  }
5620  function queueBeforeEvent(element, type, callback, timeout) {
5621    const createTimer = (callback2) => {
5622      if (timeout) {
5623        const timerId2 = setTimeout(callback2, timeout);
5624        return () => clearTimeout(timerId2);
5625      }
5626      const timerId = requestAnimationFrame(callback2);
5627      return () => cancelAnimationFrame(timerId);
5628    };
5629    const cancelTimer = createTimer(() => {
5630      element.removeEventListener(type, callSync, true);
5631      callback();
5632    });
5633    const callSync = () => {
5634      cancelTimer();
5635      callback();
5636    };
5637    element.addEventListener(type, callSync, { once: true, capture: true });
5638    return cancelTimer;
5639  }
5640  function addGlobalEventListener(type, listener, options, scope = window) {
5641    const children = [];
5642    try {
5643      scope.document.addEventListener(type, listener, options);
5644      for (const frame of Array.from(scope.frames)) {
5645        children.push(addGlobalEventListener(type, listener, options, frame));
5646      }
5647    } catch (e2) {
5648    }
5649    const removeEventListener = () => {
5650      try {
5651        scope.document.removeEventListener(type, listener, options);
5652      } catch (e2) {
5653      }
5654      for (const remove of children) {
5655        remove();
5656      }
5657    };
5658    return removeEventListener;
5659  }
5660  
5661  // node_modules/@ariakit/react-core/esm/__chunks/ABQUS43J.js
5662  var import_react3 = __toESM(require_react(), 1);
5663  var React2 = __toESM(require_react(), 1);
5664  var _React = __spreadValues({}, React2);
5665  var useReactId = _React.useId;
5666  var useReactDeferredValue = _React.useDeferredValue;
5667  var useReactInsertionEffect = _React.useInsertionEffect;
5668  var useSafeLayoutEffect = canUseDOM ? import_react3.useLayoutEffect : import_react3.useEffect;
5669  function useInitialValue(value) {
5670    const [initialValue] = (0, import_react3.useState)(value);
5671    return initialValue;
5672  }
5673  function useLiveRef(value) {
5674    const ref = (0, import_react3.useRef)(value);
5675    useSafeLayoutEffect(() => {
5676      ref.current = value;
5677    });
5678    return ref;
5679  }
5680  function useEvent(callback) {
5681    const ref = (0, import_react3.useRef)(() => {
5682      throw new Error("Cannot call an event handler while rendering.");
5683    });
5684    if (useReactInsertionEffect) {
5685      useReactInsertionEffect(() => {
5686        ref.current = callback;
5687      });
5688    } else {
5689      ref.current = callback;
5690    }
5691    return (0, import_react3.useCallback)((...args) => {
5692      var _a;
5693      return (_a = ref.current) == null ? void 0 : _a.call(ref, ...args);
5694    }, []);
5695  }
5696  function useTransactionState(callback) {
5697    const [state, setState] = (0, import_react3.useState)(null);
5698    useSafeLayoutEffect(() => {
5699      if (state == null) return;
5700      if (!callback) return;
5701      let prevState = null;
5702      callback((prev) => {
5703        prevState = prev;
5704        return state;
5705      });
5706      return () => {
5707        callback(prevState);
5708      };
5709    }, [state, callback]);
5710    return [state, setState];
5711  }
5712  function useMergeRefs(...refs) {
5713    return (0, import_react3.useMemo)(() => {
5714      if (!refs.some(Boolean)) return;
5715      return (value) => {
5716        for (const ref of refs) {
5717          setRef(ref, value);
5718        }
5719      };
5720    }, refs);
5721  }
5722  function useId3(defaultId) {
5723    if (useReactId) {
5724      const reactId = useReactId();
5725      if (defaultId) return defaultId;
5726      return reactId;
5727    }
5728    const [id, setId] = (0, import_react3.useState)(defaultId);
5729    useSafeLayoutEffect(() => {
5730      if (defaultId || id) return;
5731      const random = Math.random().toString(36).slice(2, 8);
5732      setId(`id-$random}`);
5733    }, [defaultId, id]);
5734    return defaultId || id;
5735  }
5736  function useTagName(refOrElement, type) {
5737    const stringOrUndefined = (type2) => {
5738      if (typeof type2 !== "string") return;
5739      return type2;
5740    };
5741    const [tagName, setTagName] = (0, import_react3.useState)(() => stringOrUndefined(type));
5742    useSafeLayoutEffect(() => {
5743      const element = refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement;
5744      setTagName((element == null ? void 0 : element.tagName.toLowerCase()) || stringOrUndefined(type));
5745    }, [refOrElement, type]);
5746    return tagName;
5747  }
5748  function useAttribute(refOrElement, attributeName, defaultValue2) {
5749    const initialValue = useInitialValue(defaultValue2);
5750    const [attribute, setAttribute] = (0, import_react3.useState)(initialValue);
5751    (0, import_react3.useEffect)(() => {
5752      const element = refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement;
5753      if (!element) return;
5754      const callback = () => {
5755        const value = element.getAttribute(attributeName);
5756        setAttribute(value == null ? initialValue : value);
5757      };
5758      const observer = new MutationObserver(callback);
5759      observer.observe(element, { attributeFilter: [attributeName] });
5760      callback();
5761      return () => observer.disconnect();
5762    }, [refOrElement, attributeName, initialValue]);
5763    return attribute;
5764  }
5765  function useUpdateEffect(effect, deps) {
5766    const mounted = (0, import_react3.useRef)(false);
5767    (0, import_react3.useEffect)(() => {
5768      if (mounted.current) {
5769        return effect();
5770      }
5771      mounted.current = true;
5772    }, deps);
5773    (0, import_react3.useEffect)(
5774      () => () => {
5775        mounted.current = false;
5776      },
5777      []
5778    );
5779  }
5780  function useUpdateLayoutEffect(effect, deps) {
5781    const mounted = (0, import_react3.useRef)(false);
5782    useSafeLayoutEffect(() => {
5783      if (mounted.current) {
5784        return effect();
5785      }
5786      mounted.current = true;
5787    }, deps);
5788    useSafeLayoutEffect(
5789      () => () => {
5790        mounted.current = false;
5791      },
5792      []
5793    );
5794  }
5795  function useForceUpdate() {
5796    return (0, import_react3.useReducer)(() => [], []);
5797  }
5798  function useBooleanEvent(booleanOrCallback) {
5799    return useEvent(
5800      typeof booleanOrCallback === "function" ? booleanOrCallback : () => booleanOrCallback
5801    );
5802  }
5803  function useWrapElement(props, callback, deps = []) {
5804    const wrapElement = (0, import_react3.useCallback)(
5805      (element) => {
5806        if (props.wrapElement) {
5807          element = props.wrapElement(element);
5808        }
5809        return callback(element);
5810      },
5811      [...deps, props.wrapElement]
5812    );
5813    return __spreadProps(__spreadValues({}, props), { wrapElement });
5814  }
5815  function useMetadataProps(props, key, value) {
5816    const parent = props.onLoadedMetadataCapture;
5817    const onLoadedMetadataCapture = (0, import_react3.useMemo)(() => {
5818      return Object.assign(() => {
5819      }, __spreadProps(__spreadValues({}, parent), { [key]: value }));
5820    }, [parent, key, value]);
5821    return [parent == null ? void 0 : parent[key], { onLoadedMetadataCapture }];
5822  }
5823  function useIsMouseMoving() {
5824    (0, import_react3.useEffect)(() => {
5825      addGlobalEventListener("mousemove", setMouseMoving, true);
5826      addGlobalEventListener("mousedown", resetMouseMoving, true);
5827      addGlobalEventListener("mouseup", resetMouseMoving, true);
5828      addGlobalEventListener("keydown", resetMouseMoving, true);
5829      addGlobalEventListener("scroll", resetMouseMoving, true);
5830    }, []);
5831    const isMouseMoving = useEvent(() => mouseMoving);
5832    return isMouseMoving;
5833  }
5834  var mouseMoving = false;
5835  var previousScreenX = 0;
5836  var previousScreenY = 0;
5837  function hasMouseMovement(event) {
5838    const movementX = event.movementX || event.screenX - previousScreenX;
5839    const movementY = event.movementY || event.screenY - previousScreenY;
5840    previousScreenX = event.screenX;
5841    previousScreenY = event.screenY;
5842    return movementX || movementY || false;
5843  }
5844  function setMouseMoving(event) {
5845    if (!hasMouseMovement(event)) return;
5846    mouseMoving = true;
5847  }
5848  function resetMouseMoving() {
5849    mouseMoving = false;
5850  }
5851  
5852  // node_modules/@ariakit/react-core/esm/__chunks/LMDWO4NN.js
5853  var React3 = __toESM(require_react(), 1);
5854  var import_jsx_runtime46 = __toESM(require_jsx_runtime(), 1);
5855  function forwardRef22(render4) {
5856    const Role = React3.forwardRef((props, ref) => render4(__spreadProps(__spreadValues({}, props), { ref })));
5857    Role.displayName = render4.displayName || render4.name;
5858    return Role;
5859  }
5860  function memo22(Component, propsAreEqual) {
5861    return React3.memo(Component, propsAreEqual);
5862  }
5863  function createElement2(Type, props) {
5864    const _a = props, { wrapElement, render: render4 } = _a, rest = __objRest(_a, ["wrapElement", "render"]);
5865    const mergedRef = useMergeRefs(props.ref, getRefProperty(render4));
5866    let element;
5867    if (React3.isValidElement(render4)) {
5868      const renderProps = __spreadProps(__spreadValues({}, render4.props), { ref: mergedRef });
5869      element = React3.cloneElement(render4, mergeProps(rest, renderProps));
5870    } else if (render4) {
5871      element = render4(rest);
5872    } else {
5873      element = /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Type, __spreadValues({}, rest));
5874    }
5875    if (wrapElement) {
5876      return wrapElement(element);
5877    }
5878    return element;
5879  }
5880  function createHook(useProps) {
5881    const useRole = (props = {}) => {
5882      return useProps(props);
5883    };
5884    useRole.displayName = useProps.name;
5885    return useRole;
5886  }
5887  function createStoreContext(providers = [], scopedProviders = []) {
5888    const context = React3.createContext(void 0);
5889    const scopedContext = React3.createContext(void 0);
5890    const useContext28 = () => React3.useContext(context);
5891    const useScopedContext = (onlyScoped = false) => {
5892      const scoped = React3.useContext(scopedContext);
5893      const store = useContext28();
5894      if (onlyScoped) return scoped;
5895      return scoped || store;
5896    };
5897    const useProviderContext = () => {
5898      const scoped = React3.useContext(scopedContext);
5899      const store = useContext28();
5900      if (scoped && scoped === store) return;
5901      return store;
5902    };
5903    const ContextProvider = (props) => {
5904      return providers.reduceRight(
5905        (children, Provider) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Provider, __spreadProps(__spreadValues({}, props), { children })),
5906        /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(context.Provider, __spreadValues({}, props))
5907      );
5908    };
5909    const ScopedContextProvider = (props) => {
5910      return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(ContextProvider, __spreadProps(__spreadValues({}, props), { children: scopedProviders.reduceRight(
5911        (children, Provider) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Provider, __spreadProps(__spreadValues({}, props), { children })),
5912        /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(scopedContext.Provider, __spreadValues({}, props))
5913      ) }));
5914    };
5915    return {
5916      context,
5917      scopedContext,
5918      useContext: useContext28,
5919      useScopedContext,
5920      useProviderContext,
5921      ContextProvider,
5922      ScopedContextProvider
5923    };
5924  }
5925  
5926  // node_modules/@ariakit/react-core/esm/__chunks/VDHZ5F7K.js
5927  var ctx = createStoreContext();
5928  var useCollectionContext = ctx.useContext;
5929  var useCollectionScopedContext = ctx.useScopedContext;
5930  var useCollectionProviderContext = ctx.useProviderContext;
5931  var CollectionContextProvider = ctx.ContextProvider;
5932  var CollectionScopedContextProvider = ctx.ScopedContextProvider;
5933  
5934  // node_modules/@ariakit/react-core/esm/__chunks/P7GR5CS5.js
5935  var import_react4 = __toESM(require_react(), 1);
5936  var ctx2 = createStoreContext(
5937    [CollectionContextProvider],
5938    [CollectionScopedContextProvider]
5939  );
5940  var useCompositeContext = ctx2.useContext;
5941  var useCompositeScopedContext = ctx2.useScopedContext;
5942  var useCompositeProviderContext = ctx2.useProviderContext;
5943  var CompositeContextProvider = ctx2.ContextProvider;
5944  var CompositeScopedContextProvider = ctx2.ScopedContextProvider;
5945  var CompositeItemContext = (0, import_react4.createContext)(
5946    void 0
5947  );
5948  var CompositeRowContext = (0, import_react4.createContext)(
5949    void 0
5950  );
5951  
5952  // node_modules/@ariakit/react-core/esm/__chunks/3XAVFTCA.js
5953  var import_react5 = __toESM(require_react(), 1);
5954  var TagValueContext = (0, import_react5.createContext)(null);
5955  var TagRemoveIdContext = (0, import_react5.createContext)(
5956    null
5957  );
5958  var ctx3 = createStoreContext(
5959    [CompositeContextProvider],
5960    [CompositeScopedContextProvider]
5961  );
5962  var useTagContext = ctx3.useContext;
5963  var useTagScopedContext = ctx3.useScopedContext;
5964  var useTagProviderContext = ctx3.useProviderContext;
5965  var TagContextProvider = ctx3.ContextProvider;
5966  var TagScopedContextProvider = ctx3.ScopedContextProvider;
5967  
5968  // node_modules/@ariakit/core/esm/__chunks/BCALMBPZ.js
5969  function getInternal(store, key) {
5970    const internals = store.__unstableInternals;
5971    invariant(internals, "Invalid store");
5972    return internals[key];
5973  }
5974  function createStore(initialState, ...stores) {
5975    let state = initialState;
5976    let prevStateBatch = state;
5977    let lastUpdate = Symbol();
5978    let destroy = noop;
5979    const instances = /* @__PURE__ */ new Set();
5980    const updatedKeys = /* @__PURE__ */ new Set();
5981    const setups = /* @__PURE__ */ new Set();
5982    const listeners = /* @__PURE__ */ new Set();
5983    const batchListeners = /* @__PURE__ */ new Set();
5984    const disposables = /* @__PURE__ */ new WeakMap();
5985    const listenerKeys = /* @__PURE__ */ new WeakMap();
5986    const storeSetup = (callback) => {
5987      setups.add(callback);
5988      return () => setups.delete(callback);
5989    };
5990    const storeInit = () => {
5991      const initialized = instances.size;
5992      const instance = Symbol();
5993      instances.add(instance);
5994      const maybeDestroy = () => {
5995        instances.delete(instance);
5996        if (instances.size) return;
5997        destroy();
5998      };
5999      if (initialized) return maybeDestroy;
6000      const desyncs = getKeys(state).map(
6001        (key) => chain(
6002          ...stores.map((store) => {
6003            var _a;
6004            const storeState = (_a = store == null ? void 0 : store.getState) == null ? void 0 : _a.call(store);
6005            if (!storeState) return;
6006            if (!hasOwnProperty(storeState, key)) return;
6007            return sync(store, [key], (state2) => {
6008              setState(
6009                key,
6010                state2[key],
6011                // @ts-expect-error - Not public API. This is just to prevent
6012                // infinite loops.
6013                true
6014              );
6015            });
6016          })
6017        )
6018      );
6019      const teardowns = [];
6020      for (const setup2 of setups) {
6021        teardowns.push(setup2());
6022      }
6023      const cleanups = stores.map(init);
6024      destroy = chain(...desyncs, ...teardowns, ...cleanups);
6025      return maybeDestroy;
6026    };
6027    const sub = (keys, listener, set = listeners) => {
6028      set.add(listener);
6029      listenerKeys.set(listener, keys);
6030      return () => {
6031        var _a;
6032        (_a = disposables.get(listener)) == null ? void 0 : _a();
6033        disposables.delete(listener);
6034        listenerKeys.delete(listener);
6035        set.delete(listener);
6036      };
6037    };
6038    const storeSubscribe = (keys, listener) => sub(keys, listener);
6039    const storeSync = (keys, listener) => {
6040      disposables.set(listener, listener(state, state));
6041      return sub(keys, listener);
6042    };
6043    const storeBatch = (keys, listener) => {
6044      disposables.set(listener, listener(state, prevStateBatch));
6045      return sub(keys, listener, batchListeners);
6046    };
6047    const storePick = (keys) => createStore(pick(state, keys), finalStore);
6048    const storeOmit = (keys) => createStore(omit2(state, keys), finalStore);
6049    const getState = () => state;
6050    const setState = (key, value, fromStores = false) => {
6051      var _a;
6052      if (!hasOwnProperty(state, key)) return;
6053      const nextValue = applyState(value, state[key]);
6054      if (nextValue === state[key]) return;
6055      if (!fromStores) {
6056        for (const store of stores) {
6057          (_a = store == null ? void 0 : store.setState) == null ? void 0 : _a.call(store, key, nextValue);
6058        }
6059      }
6060      const prevState = state;
6061      state = __spreadProps2(__spreadValues2({}, state), { [key]: nextValue });
6062      const thisUpdate = Symbol();
6063      lastUpdate = thisUpdate;
6064      updatedKeys.add(key);
6065      const run = (listener, prev, uKeys) => {
6066        var _a2;
6067        const keys = listenerKeys.get(listener);
6068        const updated = (k) => uKeys ? uKeys.has(k) : k === key;
6069        if (!keys || keys.some(updated)) {
6070          (_a2 = disposables.get(listener)) == null ? void 0 : _a2();
6071          disposables.set(listener, listener(state, prev));
6072        }
6073      };
6074      for (const listener of listeners) {
6075        run(listener, prevState);
6076      }
6077      queueMicrotask(() => {
6078        if (lastUpdate !== thisUpdate) return;
6079        const snapshot = state;
6080        for (const listener of batchListeners) {
6081          run(listener, prevStateBatch, updatedKeys);
6082        }
6083        prevStateBatch = snapshot;
6084        updatedKeys.clear();
6085      });
6086    };
6087    const finalStore = {
6088      getState,
6089      setState,
6090      __unstableInternals: {
6091        setup: storeSetup,
6092        init: storeInit,
6093        subscribe: storeSubscribe,
6094        sync: storeSync,
6095        batch: storeBatch,
6096        pick: storePick,
6097        omit: storeOmit
6098      }
6099    };
6100    return finalStore;
6101  }
6102  function setup(store, ...args) {
6103    if (!store) return;
6104    return getInternal(store, "setup")(...args);
6105  }
6106  function init(store, ...args) {
6107    if (!store) return;
6108    return getInternal(store, "init")(...args);
6109  }
6110  function subscribe(store, ...args) {
6111    if (!store) return;
6112    return getInternal(store, "subscribe")(...args);
6113  }
6114  function sync(store, ...args) {
6115    if (!store) return;
6116    return getInternal(store, "sync")(...args);
6117  }
6118  function batch(store, ...args) {
6119    if (!store) return;
6120    return getInternal(store, "batch")(...args);
6121  }
6122  function omit22(store, ...args) {
6123    if (!store) return;
6124    return getInternal(store, "omit")(...args);
6125  }
6126  function pick2(store, ...args) {
6127    if (!store) return;
6128    return getInternal(store, "pick")(...args);
6129  }
6130  function mergeStore(...stores) {
6131    const initialState = stores.reduce((state, store2) => {
6132      var _a;
6133      const nextState = (_a = store2 == null ? void 0 : store2.getState) == null ? void 0 : _a.call(store2);
6134      if (!nextState) return state;
6135      return Object.assign(state, nextState);
6136    }, {});
6137    const store = createStore(initialState, ...stores);
6138    return Object.assign({}, ...stores, store);
6139  }
6140  function throwOnConflictingProps(props, store) {
6141    if (false) return;
6142    if (!store) return;
6143    const defaultKeys = Object.entries(props).filter(([key, value]) => key.startsWith("default") && value !== void 0).map(([key]) => {
6144      var _a;
6145      const stateKey = key.replace("default", "");
6146      return `${((_a = stateKey[0]) == null ? void 0 : _a.toLowerCase()) || ""}$stateKey.slice(1)}`;
6147    });
6148    if (!defaultKeys.length) return;
6149    const storeState = store.getState();
6150    const conflictingProps = defaultKeys.filter(
6151      (key) => hasOwnProperty(storeState, key)
6152    );
6153    if (!conflictingProps.length) return;
6154    throw new Error(
6155      `Passing a store prop in conjunction with a default state is not supported.
6156  
6157  const store = useSelectStore();
6158  <SelectProvider store={store} defaultValue="Apple" />
6159                  ^             ^
6160  
6161  Instead, pass the default state to the topmost store:
6162  
6163  const store = useSelectStore({ defaultValue: "Apple" });
6164  <SelectProvider store={store} />
6165  
6166  See https://github.com/ariakit/ariakit/pull/2745 for more details.
6167  
6168  If there's a particular need for this, please submit a feature request at https://github.com/ariakit/ariakit
6169  `
6170    );
6171  }
6172  
6173  // node_modules/@ariakit/react-core/esm/__chunks/YV4JVR4I.js
6174  var React4 = __toESM(require_react(), 1);
6175  var import_shim = __toESM(require_shim(), 1);
6176  var { useSyncExternalStore } = import_shim.default;
6177  var noopSubscribe = () => () => {
6178  };
6179  function useStoreState(store, keyOrSelector = identity) {
6180    const storeSubscribe = React4.useCallback(
6181      (callback) => {
6182        if (!store) return noopSubscribe();
6183        return subscribe(store, null, callback);
6184      },
6185      [store]
6186    );
6187    const getSnapshot = () => {
6188      const key = typeof keyOrSelector === "string" ? keyOrSelector : null;
6189      const selector2 = typeof keyOrSelector === "function" ? keyOrSelector : null;
6190      const state = store == null ? void 0 : store.getState();
6191      if (selector2) return selector2(state);
6192      if (!state) return;
6193      if (!key) return;
6194      if (!hasOwnProperty(state, key)) return;
6195      return state[key];
6196    };
6197    return useSyncExternalStore(storeSubscribe, getSnapshot, getSnapshot);
6198  }
6199  function useStoreStateObject(store, object) {
6200    const objRef = React4.useRef(
6201      {}
6202    );
6203    const storeSubscribe = React4.useCallback(
6204      (callback) => {
6205        if (!store) return noopSubscribe();
6206        return subscribe(store, null, callback);
6207      },
6208      [store]
6209    );
6210    const getSnapshot = () => {
6211      const state = store == null ? void 0 : store.getState();
6212      let updated = false;
6213      const obj = objRef.current;
6214      for (const prop in object) {
6215        const keyOrSelector = object[prop];
6216        if (typeof keyOrSelector === "function") {
6217          const value = keyOrSelector(state);
6218          if (value !== obj[prop]) {
6219            obj[prop] = value;
6220            updated = true;
6221          }
6222        }
6223        if (typeof keyOrSelector === "string") {
6224          if (!state) continue;
6225          if (!hasOwnProperty(state, keyOrSelector)) continue;
6226          const value = state[keyOrSelector];
6227          if (value !== obj[prop]) {
6228            obj[prop] = value;
6229            updated = true;
6230          }
6231        }
6232      }
6233      if (updated) {
6234        objRef.current = __spreadValues({}, obj);
6235      }
6236      return objRef.current;
6237    };
6238    return useSyncExternalStore(storeSubscribe, getSnapshot, getSnapshot);
6239  }
6240  function useStoreProps(store, props, key, setKey) {
6241    const value = hasOwnProperty(props, key) ? props[key] : void 0;
6242    const setValue = setKey ? props[setKey] : void 0;
6243    const propsRef = useLiveRef({ value, setValue });
6244    useSafeLayoutEffect(() => {
6245      return sync(store, [key], (state, prev) => {
6246        const { value: value2, setValue: setValue2 } = propsRef.current;
6247        if (!setValue2) return;
6248        if (state[key] === prev[key]) return;
6249        if (state[key] === value2) return;
6250        setValue2(state[key]);
6251      });
6252    }, [store, key]);
6253    useSafeLayoutEffect(() => {
6254      if (value === void 0) return;
6255      store.setState(key, value);
6256      return batch(store, [key], () => {
6257        if (value === void 0) return;
6258        store.setState(key, value);
6259      });
6260    });
6261  }
6262  function useStore(createStore2, props) {
6263    const [store, setStore] = React4.useState(() => createStore2(props));
6264    useSafeLayoutEffect(() => init(store), [store]);
6265    const useState23 = React4.useCallback(
6266      (keyOrSelector) => useStoreState(store, keyOrSelector),
6267      [store]
6268    );
6269    const memoizedStore = React4.useMemo(
6270      () => __spreadProps(__spreadValues({}, store), { useState: useState23 }),
6271      [store, useState23]
6272    );
6273    const updateStore = useEvent(() => {
6274      setStore((store2) => createStore2(__spreadValues(__spreadValues({}, props), store2.getState())));
6275    });
6276    return [memoizedStore, updateStore];
6277  }
6278  
6279  // node_modules/@ariakit/core/esm/__chunks/CYQWQL4J.js
6280  function getCommonParent(items) {
6281    var _a;
6282    const firstItem = items.find((item) => !!item.element);
6283    const lastItem = [...items].reverse().find((item) => !!item.element);
6284    let parentElement = (_a = firstItem == null ? void 0 : firstItem.element) == null ? void 0 : _a.parentElement;
6285    while (parentElement && (lastItem == null ? void 0 : lastItem.element)) {
6286      const parent = parentElement;
6287      if (lastItem && parent.contains(lastItem.element)) {
6288        return parentElement;
6289      }
6290      parentElement = parentElement.parentElement;
6291    }
6292    return getDocument(parentElement).body;
6293  }
6294  function getPrivateStore(store) {
6295    return store == null ? void 0 : store.__unstablePrivateStore;
6296  }
6297  function createCollectionStore(props = {}) {
6298    var _a;
6299    throwOnConflictingProps(props, props.store);
6300    const syncState = (_a = props.store) == null ? void 0 : _a.getState();
6301    const items = defaultValue(
6302      props.items,
6303      syncState == null ? void 0 : syncState.items,
6304      props.defaultItems,
6305      []
6306    );
6307    const itemsMap = new Map(items.map((item) => [item.id, item]));
6308    const initialState = {
6309      items,
6310      renderedItems: defaultValue(syncState == null ? void 0 : syncState.renderedItems, [])
6311    };
6312    const syncPrivateStore = getPrivateStore(props.store);
6313    const privateStore = createStore(
6314      { items, renderedItems: initialState.renderedItems },
6315      syncPrivateStore
6316    );
6317    const collection = createStore(initialState, props.store);
6318    const sortItems = (renderedItems) => {
6319      const sortedItems = sortBasedOnDOMPosition(renderedItems, (i2) => i2.element);
6320      privateStore.setState("renderedItems", sortedItems);
6321      collection.setState("renderedItems", sortedItems);
6322    };
6323    setup(collection, () => init(privateStore));
6324    setup(privateStore, () => {
6325      return batch(privateStore, ["items"], (state) => {
6326        collection.setState("items", state.items);
6327      });
6328    });
6329    setup(privateStore, () => {
6330      return batch(privateStore, ["renderedItems"], (state) => {
6331        let firstRun = true;
6332        let raf = requestAnimationFrame(() => {
6333          const { renderedItems } = collection.getState();
6334          if (state.renderedItems === renderedItems) return;
6335          sortItems(state.renderedItems);
6336        });
6337        if (typeof IntersectionObserver !== "function") {
6338          return () => cancelAnimationFrame(raf);
6339        }
6340        const ioCallback = () => {
6341          if (firstRun) {
6342            firstRun = false;
6343            return;
6344          }
6345          cancelAnimationFrame(raf);
6346          raf = requestAnimationFrame(() => sortItems(state.renderedItems));
6347        };
6348        const root = getCommonParent(state.renderedItems);
6349        const observer = new IntersectionObserver(ioCallback, { root });
6350        for (const item of state.renderedItems) {
6351          if (!item.element) continue;
6352          observer.observe(item.element);
6353        }
6354        return () => {
6355          cancelAnimationFrame(raf);
6356          observer.disconnect();
6357        };
6358      });
6359    });
6360    const mergeItem = (item, setItems, canDeleteFromMap = false) => {
6361      let prevItem;
6362      setItems((items2) => {
6363        const index = items2.findIndex(({ id }) => id === item.id);
6364        const nextItems = items2.slice();
6365        if (index !== -1) {
6366          prevItem = items2[index];
6367          const nextItem = __spreadValues2(__spreadValues2({}, prevItem), item);
6368          nextItems[index] = nextItem;
6369          itemsMap.set(item.id, nextItem);
6370        } else {
6371          nextItems.push(item);
6372          itemsMap.set(item.id, item);
6373        }
6374        return nextItems;
6375      });
6376      const unmergeItem = () => {
6377        setItems((items2) => {
6378          if (!prevItem) {
6379            if (canDeleteFromMap) {
6380              itemsMap.delete(item.id);
6381            }
6382            return items2.filter(({ id }) => id !== item.id);
6383          }
6384          const index = items2.findIndex(({ id }) => id === item.id);
6385          if (index === -1) return items2;
6386          const nextItems = items2.slice();
6387          nextItems[index] = prevItem;
6388          itemsMap.set(item.id, prevItem);
6389          return nextItems;
6390        });
6391      };
6392      return unmergeItem;
6393    };
6394    const registerItem = (item) => mergeItem(
6395      item,
6396      (getItems) => privateStore.setState("items", getItems),
6397      true
6398    );
6399    return __spreadProps2(__spreadValues2({}, collection), {
6400      registerItem,
6401      renderItem: (item) => chain(
6402        registerItem(item),
6403        mergeItem(
6404          item,
6405          (getItems) => privateStore.setState("renderedItems", getItems)
6406        )
6407      ),
6408      item: (id) => {
6409        if (!id) return null;
6410        let item = itemsMap.get(id);
6411        if (!item) {
6412          const { items: items2 } = privateStore.getState();
6413          item = items2.find((item2) => item2.id === id);
6414          if (item) {
6415            itemsMap.set(id, item);
6416          }
6417        }
6418        return item || null;
6419      },
6420      // @ts-expect-error Internal
6421      __unstablePrivateStore: privateStore
6422    });
6423  }
6424  
6425  // node_modules/@ariakit/react-core/esm/__chunks/C3IKGW5T.js
6426  function useCollectionStoreProps(store, update, props) {
6427    useUpdateEffect(update, [props.store]);
6428    useStoreProps(store, props, "items", "setItems");
6429    return store;
6430  }
6431  
6432  // node_modules/@ariakit/core/esm/__chunks/7PRQYBBV.js
6433  function toArray(arg) {
6434    if (Array.isArray(arg)) {
6435      return arg;
6436    }
6437    return typeof arg !== "undefined" ? [arg] : [];
6438  }
6439  function flatten2DArray(array) {
6440    const flattened = [];
6441    for (const row of array) {
6442      flattened.push(...row);
6443    }
6444    return flattened;
6445  }
6446  function reverseArray(array) {
6447    return array.slice().reverse();
6448  }
6449  
6450  // node_modules/@ariakit/core/esm/__chunks/AJZ4BYF3.js
6451  var NULL_ITEM = { id: null };
6452  function findFirstEnabledItem(items, excludeId) {
6453    return items.find((item) => {
6454      if (excludeId) {
6455        return !item.disabled && item.id !== excludeId;
6456      }
6457      return !item.disabled;
6458    });
6459  }
6460  function getEnabledItems(items, excludeId) {
6461    return items.filter((item) => {
6462      if (excludeId) {
6463        return !item.disabled && item.id !== excludeId;
6464      }
6465      return !item.disabled;
6466    });
6467  }
6468  function getItemsInRow(items, rowId) {
6469    return items.filter((item) => item.rowId === rowId);
6470  }
6471  function flipItems(items, activeId, shouldInsertNullItem = false) {
6472    const index = items.findIndex((item) => item.id === activeId);
6473    return [
6474      ...items.slice(index + 1),
6475      ...shouldInsertNullItem ? [NULL_ITEM] : [],
6476      ...items.slice(0, index)
6477    ];
6478  }
6479  function groupItemsByRows(items) {
6480    const rows = [];
6481    for (const item of items) {
6482      const row = rows.find((currentRow) => {
6483        var _a;
6484        return ((_a = currentRow[0]) == null ? void 0 : _a.rowId) === item.rowId;
6485      });
6486      if (row) {
6487        row.push(item);
6488      } else {
6489        rows.push([item]);
6490      }
6491    }
6492    return rows;
6493  }
6494  function getMaxRowLength(array) {
6495    let maxLength = 0;
6496    for (const { length } of array) {
6497      if (length > maxLength) {
6498        maxLength = length;
6499      }
6500    }
6501    return maxLength;
6502  }
6503  function createEmptyItem(rowId) {
6504    return {
6505      id: "__EMPTY_ITEM__",
6506      disabled: true,
6507      rowId
6508    };
6509  }
6510  function normalizeRows(rows, activeId, focusShift) {
6511    const maxLength = getMaxRowLength(rows);
6512    for (const row of rows) {
6513      for (let i2 = 0; i2 < maxLength; i2 += 1) {
6514        const item = row[i2];
6515        if (!item || focusShift && item.disabled) {
6516          const isFirst = i2 === 0;
6517          const previousItem = isFirst && focusShift ? findFirstEnabledItem(row) : row[i2 - 1];
6518          row[i2] = previousItem && activeId !== previousItem.id && focusShift ? previousItem : createEmptyItem(previousItem == null ? void 0 : previousItem.rowId);
6519        }
6520      }
6521    }
6522    return rows;
6523  }
6524  function verticalizeItems(items) {
6525    const rows = groupItemsByRows(items);
6526    const maxLength = getMaxRowLength(rows);
6527    const verticalized = [];
6528    for (let i2 = 0; i2 < maxLength; i2 += 1) {
6529      for (const row of rows) {
6530        const item = row[i2];
6531        if (item) {
6532          verticalized.push(__spreadProps2(__spreadValues2({}, item), {
6533            // If there's no rowId, it means that it's not a grid composite, but
6534            // a single row instead. So, instead of verticalizing it, that is,
6535            // assigning a different rowId based on the column index, we keep it
6536            // undefined so they will be part of the same row. This is useful
6537            // when using up/down on one-dimensional composites.
6538            rowId: item.rowId ? `$i2}` : void 0
6539          }));
6540        }
6541      }
6542    }
6543    return verticalized;
6544  }
6545  function createCompositeStore(props = {}) {
6546    var _a;
6547    const syncState = (_a = props.store) == null ? void 0 : _a.getState();
6548    const collection = createCollectionStore(props);
6549    const activeId = defaultValue(
6550      props.activeId,
6551      syncState == null ? void 0 : syncState.activeId,
6552      props.defaultActiveId
6553    );
6554    const initialState = __spreadProps2(__spreadValues2({}, collection.getState()), {
6555      id: defaultValue(
6556        props.id,
6557        syncState == null ? void 0 : syncState.id,
6558        `id-$Math.random().toString(36).slice(2, 8)}`
6559      ),
6560      activeId,
6561      baseElement: defaultValue(syncState == null ? void 0 : syncState.baseElement, null),
6562      includesBaseElement: defaultValue(
6563        props.includesBaseElement,
6564        syncState == null ? void 0 : syncState.includesBaseElement,
6565        activeId === null
6566      ),
6567      moves: defaultValue(syncState == null ? void 0 : syncState.moves, 0),
6568      orientation: defaultValue(
6569        props.orientation,
6570        syncState == null ? void 0 : syncState.orientation,
6571        "both"
6572      ),
6573      rtl: defaultValue(props.rtl, syncState == null ? void 0 : syncState.rtl, false),
6574      virtualFocus: defaultValue(
6575        props.virtualFocus,
6576        syncState == null ? void 0 : syncState.virtualFocus,
6577        false
6578      ),
6579      focusLoop: defaultValue(props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, false),
6580      focusWrap: defaultValue(props.focusWrap, syncState == null ? void 0 : syncState.focusWrap, false),
6581      focusShift: defaultValue(props.focusShift, syncState == null ? void 0 : syncState.focusShift, false)
6582    });
6583    const composite = createStore(initialState, collection, props.store);
6584    setup(
6585      composite,
6586      () => sync(composite, ["renderedItems", "activeId"], (state) => {
6587        composite.setState("activeId", (activeId2) => {
6588          var _a2;
6589          if (activeId2 !== void 0) return activeId2;
6590          return (_a2 = findFirstEnabledItem(state.renderedItems)) == null ? void 0 : _a2.id;
6591        });
6592      })
6593    );
6594    const getNextId = (direction = "next", options = {}) => {
6595      var _a2, _b;
6596      const defaultState = composite.getState();
6597      const {
6598        skip = 0,
6599        activeId: activeId2 = defaultState.activeId,
6600        focusShift = defaultState.focusShift,
6601        focusLoop = defaultState.focusLoop,
6602        focusWrap = defaultState.focusWrap,
6603        includesBaseElement = defaultState.includesBaseElement,
6604        renderedItems = defaultState.renderedItems,
6605        rtl = defaultState.rtl
6606      } = options;
6607      const isVerticalDirection = direction === "up" || direction === "down";
6608      const isNextDirection = direction === "next" || direction === "down";
6609      const canReverse = isNextDirection ? rtl && !isVerticalDirection : !rtl || isVerticalDirection;
6610      const canShift = focusShift && !skip;
6611      let items = !isVerticalDirection ? renderedItems : flatten2DArray(
6612        normalizeRows(groupItemsByRows(renderedItems), activeId2, canShift)
6613      );
6614      items = canReverse ? reverseArray(items) : items;
6615      items = isVerticalDirection ? verticalizeItems(items) : items;
6616      if (activeId2 == null) {
6617        return (_a2 = findFirstEnabledItem(items)) == null ? void 0 : _a2.id;
6618      }
6619      const activeItem = items.find((item) => item.id === activeId2);
6620      if (!activeItem) {
6621        return (_b = findFirstEnabledItem(items)) == null ? void 0 : _b.id;
6622      }
6623      const isGrid2 = items.some((item) => item.rowId);
6624      const activeIndex = items.indexOf(activeItem);
6625      const nextItems = items.slice(activeIndex + 1);
6626      const nextItemsInRow = getItemsInRow(nextItems, activeItem.rowId);
6627      if (skip) {
6628        const nextEnabledItemsInRow = getEnabledItems(nextItemsInRow, activeId2);
6629        const nextItem2 = nextEnabledItemsInRow.slice(skip)[0] || // If we can't find an item, just return the last one.
6630        nextEnabledItemsInRow[nextEnabledItemsInRow.length - 1];
6631        return nextItem2 == null ? void 0 : nextItem2.id;
6632      }
6633      const canLoop = focusLoop && (isVerticalDirection ? focusLoop !== "horizontal" : focusLoop !== "vertical");
6634      const canWrap = isGrid2 && focusWrap && (isVerticalDirection ? focusWrap !== "horizontal" : focusWrap !== "vertical");
6635      const hasNullItem = isNextDirection ? (!isGrid2 || isVerticalDirection) && canLoop && includesBaseElement : isVerticalDirection ? includesBaseElement : false;
6636      if (canLoop) {
6637        const loopItems = canWrap && !hasNullItem ? items : getItemsInRow(items, activeItem.rowId);
6638        const sortedItems = flipItems(loopItems, activeId2, hasNullItem);
6639        const nextItem2 = findFirstEnabledItem(sortedItems, activeId2);
6640        return nextItem2 == null ? void 0 : nextItem2.id;
6641      }
6642      if (canWrap) {
6643        const nextItem2 = findFirstEnabledItem(
6644          // We can use nextItems, which contains all the next items, including
6645          // items from other rows, to wrap between rows. However, if there is a
6646          // null item (the composite container), we'll only use the next items in
6647          // the row. So moving next from the last item will focus on the
6648          // composite container. On grid composites, horizontal navigation never
6649          // focuses on the composite container, only vertical.
6650          hasNullItem ? nextItemsInRow : nextItems,
6651          activeId2
6652        );
6653        const nextId = hasNullItem ? (nextItem2 == null ? void 0 : nextItem2.id) || null : nextItem2 == null ? void 0 : nextItem2.id;
6654        return nextId;
6655      }
6656      const nextItem = findFirstEnabledItem(nextItemsInRow, activeId2);
6657      if (!nextItem && hasNullItem) {
6658        return null;
6659      }
6660      return nextItem == null ? void 0 : nextItem.id;
6661    };
6662    return __spreadProps2(__spreadValues2(__spreadValues2({}, collection), composite), {
6663      setBaseElement: (element) => composite.setState("baseElement", element),
6664      setActiveId: (id) => composite.setState("activeId", id),
6665      move: (id) => {
6666        if (id === void 0) return;
6667        composite.setState("activeId", id);
6668        composite.setState("moves", (moves) => moves + 1);
6669      },
6670      first: () => {
6671        var _a2;
6672        return (_a2 = findFirstEnabledItem(composite.getState().renderedItems)) == null ? void 0 : _a2.id;
6673      },
6674      last: () => {
6675        var _a2;
6676        return (_a2 = findFirstEnabledItem(reverseArray(composite.getState().renderedItems))) == null ? void 0 : _a2.id;
6677      },
6678      next: (options) => {
6679        if (options !== void 0 && typeof options === "number") {
6680          options = { skip: options };
6681        }
6682        return getNextId("next", options);
6683      },
6684      previous: (options) => {
6685        if (options !== void 0 && typeof options === "number") {
6686          options = { skip: options };
6687        }
6688        return getNextId("previous", options);
6689      },
6690      down: (options) => {
6691        if (options !== void 0 && typeof options === "number") {
6692          options = { skip: options };
6693        }
6694        return getNextId("down", options);
6695      },
6696      up: (options) => {
6697        if (options !== void 0 && typeof options === "number") {
6698          options = { skip: options };
6699        }
6700        return getNextId("up", options);
6701      }
6702    });
6703  }
6704  
6705  // node_modules/@ariakit/react-core/esm/__chunks/4CMBR7SL.js
6706  function useCompositeStoreOptions(props) {
6707    const id = useId3(props.id);
6708    return __spreadValues({ id }, props);
6709  }
6710  function useCompositeStoreProps(store, update, props) {
6711    store = useCollectionStoreProps(store, update, props);
6712    useStoreProps(store, props, "activeId", "setActiveId");
6713    useStoreProps(store, props, "includesBaseElement");
6714    useStoreProps(store, props, "virtualFocus");
6715    useStoreProps(store, props, "orientation");
6716    useStoreProps(store, props, "rtl");
6717    useStoreProps(store, props, "focusLoop");
6718    useStoreProps(store, props, "focusWrap");
6719    useStoreProps(store, props, "focusShift");
6720    return store;
6721  }
6722  
6723  // node_modules/@ariakit/core/esm/__chunks/RCQ5P4YE.js
6724  function createDisclosureStore(props = {}) {
6725    const store = mergeStore(
6726      props.store,
6727      omit22(props.disclosure, ["contentElement", "disclosureElement"])
6728    );
6729    throwOnConflictingProps(props, store);
6730    const syncState = store == null ? void 0 : store.getState();
6731    const open = defaultValue(
6732      props.open,
6733      syncState == null ? void 0 : syncState.open,
6734      props.defaultOpen,
6735      false
6736    );
6737    const animated = defaultValue(props.animated, syncState == null ? void 0 : syncState.animated, false);
6738    const initialState = {
6739      open,
6740      animated,
6741      animating: !!animated && open,
6742      mounted: open,
6743      contentElement: defaultValue(syncState == null ? void 0 : syncState.contentElement, null),
6744      disclosureElement: defaultValue(syncState == null ? void 0 : syncState.disclosureElement, null)
6745    };
6746    const disclosure = createStore(initialState, store);
6747    setup(
6748      disclosure,
6749      () => sync(disclosure, ["animated", "animating"], (state) => {
6750        if (state.animated) return;
6751        disclosure.setState("animating", false);
6752      })
6753    );
6754    setup(
6755      disclosure,
6756      () => subscribe(disclosure, ["open"], () => {
6757        if (!disclosure.getState().animated) return;
6758        disclosure.setState("animating", true);
6759      })
6760    );
6761    setup(
6762      disclosure,
6763      () => sync(disclosure, ["open", "animating"], (state) => {
6764        disclosure.setState("mounted", state.open || state.animating);
6765      })
6766    );
6767    return __spreadProps2(__spreadValues2({}, disclosure), {
6768      disclosure: props.disclosure,
6769      setOpen: (value) => disclosure.setState("open", value),
6770      show: () => disclosure.setState("open", true),
6771      hide: () => disclosure.setState("open", false),
6772      toggle: () => disclosure.setState("open", (open2) => !open2),
6773      stopAnimation: () => disclosure.setState("animating", false),
6774      setContentElement: (value) => disclosure.setState("contentElement", value),
6775      setDisclosureElement: (value) => disclosure.setState("disclosureElement", value)
6776    });
6777  }
6778  
6779  // node_modules/@ariakit/react-core/esm/__chunks/WYCIER3C.js
6780  function useDisclosureStoreProps(store, update, props) {
6781    useUpdateEffect(update, [props.store, props.disclosure]);
6782    useStoreProps(store, props, "open", "setOpen");
6783    useStoreProps(store, props, "mounted", "setMounted");
6784    useStoreProps(store, props, "animated");
6785    return Object.assign(store, { disclosure: props.disclosure });
6786  }
6787  
6788  // node_modules/@ariakit/core/esm/__chunks/FZZ2AVHF.js
6789  function createDialogStore(props = {}) {
6790    return createDisclosureStore(props);
6791  }
6792  
6793  // node_modules/@ariakit/react-core/esm/__chunks/BM6PGYQY.js
6794  function useDialogStoreProps(store, update, props) {
6795    return useDisclosureStoreProps(store, update, props);
6796  }
6797  
6798  // node_modules/@ariakit/core/esm/__chunks/ME2CUF3F.js
6799  function createPopoverStore(_a = {}) {
6800    var _b = _a, {
6801      popover: otherPopover
6802    } = _b, props = __objRest2(_b, [
6803      "popover"
6804    ]);
6805    const store = mergeStore(
6806      props.store,
6807      omit22(otherPopover, [
6808        "arrowElement",
6809        "anchorElement",
6810        "contentElement",
6811        "popoverElement",
6812        "disclosureElement"
6813      ])
6814    );
6815    throwOnConflictingProps(props, store);
6816    const syncState = store == null ? void 0 : store.getState();
6817    const dialog = createDialogStore(__spreadProps2(__spreadValues2({}, props), { store }));
6818    const placement = defaultValue(
6819      props.placement,
6820      syncState == null ? void 0 : syncState.placement,
6821      "bottom"
6822    );
6823    const initialState = __spreadProps2(__spreadValues2({}, dialog.getState()), {
6824      placement,
6825      currentPlacement: placement,
6826      anchorElement: defaultValue(syncState == null ? void 0 : syncState.anchorElement, null),
6827      popoverElement: defaultValue(syncState == null ? void 0 : syncState.popoverElement, null),
6828      arrowElement: defaultValue(syncState == null ? void 0 : syncState.arrowElement, null),
6829      rendered: Symbol("rendered")
6830    });
6831    const popover = createStore(initialState, dialog, store);
6832    return __spreadProps2(__spreadValues2(__spreadValues2({}, dialog), popover), {
6833      setAnchorElement: (element) => popover.setState("anchorElement", element),
6834      setPopoverElement: (element) => popover.setState("popoverElement", element),
6835      setArrowElement: (element) => popover.setState("arrowElement", element),
6836      render: () => popover.setState("rendered", Symbol("rendered"))
6837    });
6838  }
6839  
6840  // node_modules/@ariakit/react-core/esm/__chunks/O2PQ2652.js
6841  function usePopoverStoreProps(store, update, props) {
6842    useUpdateEffect(update, [props.popover]);
6843    useStoreProps(store, props, "placement");
6844    return useDialogStoreProps(store, update, props);
6845  }
6846  
6847  // node_modules/@ariakit/core/esm/combobox/combobox-store.js
6848  var isTouchSafari = isSafari() && isTouchDevice();
6849  function createComboboxStore(_a = {}) {
6850    var _b = _a, {
6851      tag
6852    } = _b, props = __objRest2(_b, [
6853      "tag"
6854    ]);
6855    const store = mergeStore(props.store, pick2(tag, ["value", "rtl"]));
6856    throwOnConflictingProps(props, store);
6857    const tagState = tag == null ? void 0 : tag.getState();
6858    const syncState = store == null ? void 0 : store.getState();
6859    const activeId = defaultValue(
6860      props.activeId,
6861      syncState == null ? void 0 : syncState.activeId,
6862      props.defaultActiveId,
6863      null
6864    );
6865    const composite = createCompositeStore(__spreadProps2(__spreadValues2({}, props), {
6866      activeId,
6867      includesBaseElement: defaultValue(
6868        props.includesBaseElement,
6869        syncState == null ? void 0 : syncState.includesBaseElement,
6870        true
6871      ),
6872      orientation: defaultValue(
6873        props.orientation,
6874        syncState == null ? void 0 : syncState.orientation,
6875        "vertical"
6876      ),
6877      focusLoop: defaultValue(props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, true),
6878      focusWrap: defaultValue(props.focusWrap, syncState == null ? void 0 : syncState.focusWrap, true),
6879      virtualFocus: defaultValue(
6880        props.virtualFocus,
6881        syncState == null ? void 0 : syncState.virtualFocus,
6882        true
6883      )
6884    }));
6885    const popover = createPopoverStore(__spreadProps2(__spreadValues2({}, props), {
6886      placement: defaultValue(
6887        props.placement,
6888        syncState == null ? void 0 : syncState.placement,
6889        "bottom-start"
6890      )
6891    }));
6892    const value = defaultValue(
6893      props.value,
6894      syncState == null ? void 0 : syncState.value,
6895      props.defaultValue,
6896      ""
6897    );
6898    const selectedValue = defaultValue(
6899      props.selectedValue,
6900      syncState == null ? void 0 : syncState.selectedValue,
6901      tagState == null ? void 0 : tagState.values,
6902      props.defaultSelectedValue,
6903      ""
6904    );
6905    const multiSelectable = Array.isArray(selectedValue);
6906    const initialState = __spreadProps2(__spreadValues2(__spreadValues2({}, composite.getState()), popover.getState()), {
6907      value,
6908      selectedValue,
6909      resetValueOnSelect: defaultValue(
6910        props.resetValueOnSelect,
6911        syncState == null ? void 0 : syncState.resetValueOnSelect,
6912        multiSelectable
6913      ),
6914      resetValueOnHide: defaultValue(
6915        props.resetValueOnHide,
6916        syncState == null ? void 0 : syncState.resetValueOnHide,
6917        multiSelectable && !tag
6918      ),
6919      activeValue: syncState == null ? void 0 : syncState.activeValue
6920    });
6921    const combobox = createStore(initialState, composite, popover, store);
6922    if (isTouchSafari) {
6923      setup(
6924        combobox,
6925        () => sync(combobox, ["virtualFocus"], () => {
6926          combobox.setState("virtualFocus", false);
6927        })
6928      );
6929    }
6930    setup(combobox, () => {
6931      if (!tag) return;
6932      return chain(
6933        sync(combobox, ["selectedValue"], (state) => {
6934          if (!Array.isArray(state.selectedValue)) return;
6935          tag.setValues(state.selectedValue);
6936        }),
6937        sync(tag, ["values"], (state) => {
6938          combobox.setState("selectedValue", state.values);
6939        })
6940      );
6941    });
6942    setup(
6943      combobox,
6944      () => sync(combobox, ["resetValueOnHide", "mounted"], (state) => {
6945        if (!state.resetValueOnHide) return;
6946        if (state.mounted) return;
6947        combobox.setState("value", value);
6948      })
6949    );
6950    setup(
6951      combobox,
6952      () => sync(combobox, ["open"], (state) => {
6953        if (state.open) return;
6954        combobox.setState("activeId", activeId);
6955        combobox.setState("moves", 0);
6956      })
6957    );
6958    setup(
6959      combobox,
6960      () => sync(combobox, ["moves", "activeId"], (state, prevState) => {
6961        if (state.moves === prevState.moves) {
6962          combobox.setState("activeValue", void 0);
6963        }
6964      })
6965    );
6966    setup(
6967      combobox,
6968      () => batch(combobox, ["moves", "renderedItems"], (state, prev) => {
6969        if (state.moves === prev.moves) return;
6970        const { activeId: activeId2 } = combobox.getState();
6971        const activeItem = composite.item(activeId2);
6972        combobox.setState("activeValue", activeItem == null ? void 0 : activeItem.value);
6973      })
6974    );
6975    return __spreadProps2(__spreadValues2(__spreadValues2(__spreadValues2({}, popover), composite), combobox), {
6976      tag,
6977      setValue: (value2) => combobox.setState("value", value2),
6978      resetValue: () => combobox.setState("value", initialState.value),
6979      setSelectedValue: (selectedValue2) => combobox.setState("selectedValue", selectedValue2)
6980    });
6981  }
6982  
6983  // node_modules/@ariakit/react-core/esm/__chunks/FEOFMWBY.js
6984  function useComboboxStoreOptions(props) {
6985    const tag = useTagContext();
6986    props = __spreadProps(__spreadValues({}, props), {
6987      tag: props.tag !== void 0 ? props.tag : tag
6988    });
6989    return useCompositeStoreOptions(props);
6990  }
6991  function useComboboxStoreProps(store, update, props) {
6992    useUpdateEffect(update, [props.tag]);
6993    useStoreProps(store, props, "value", "setValue");
6994    useStoreProps(store, props, "selectedValue", "setSelectedValue");
6995    useStoreProps(store, props, "resetValueOnHide");
6996    useStoreProps(store, props, "resetValueOnSelect");
6997    return Object.assign(
6998      useCompositeStoreProps(
6999        usePopoverStoreProps(store, update, props),
7000        update,
7001        props
7002      ),
7003      { tag: props.tag }
7004    );
7005  }
7006  function useComboboxStore(props = {}) {
7007    props = useComboboxStoreOptions(props);
7008    const [store, update] = useStore(createComboboxStore, props);
7009    return useComboboxStoreProps(store, update, props);
7010  }
7011  
7012  // node_modules/@ariakit/react-core/esm/__chunks/S6EF7IVO.js
7013  var ctx4 = createStoreContext();
7014  var useDisclosureContext = ctx4.useContext;
7015  var useDisclosureScopedContext = ctx4.useScopedContext;
7016  var useDisclosureProviderContext = ctx4.useProviderContext;
7017  var DisclosureContextProvider = ctx4.ContextProvider;
7018  var DisclosureScopedContextProvider = ctx4.ScopedContextProvider;
7019  
7020  // node_modules/@ariakit/react-core/esm/__chunks/RS7LB2H4.js
7021  var import_react6 = __toESM(require_react(), 1);
7022  var ctx5 = createStoreContext(
7023    [DisclosureContextProvider],
7024    [DisclosureScopedContextProvider]
7025  );
7026  var useDialogContext = ctx5.useContext;
7027  var useDialogScopedContext = ctx5.useScopedContext;
7028  var useDialogProviderContext = ctx5.useProviderContext;
7029  var DialogContextProvider = ctx5.ContextProvider;
7030  var DialogScopedContextProvider = ctx5.ScopedContextProvider;
7031  var DialogHeadingContext = (0, import_react6.createContext)(void 0);
7032  var DialogDescriptionContext = (0, import_react6.createContext)(void 0);
7033  
7034  // node_modules/@ariakit/react-core/esm/__chunks/MTZPJQMC.js
7035  var ctx6 = createStoreContext(
7036    [DialogContextProvider],
7037    [DialogScopedContextProvider]
7038  );
7039  var usePopoverContext = ctx6.useContext;
7040  var usePopoverScopedContext = ctx6.useScopedContext;
7041  var usePopoverProviderContext = ctx6.useProviderContext;
7042  var PopoverContextProvider = ctx6.ContextProvider;
7043  var PopoverScopedContextProvider = ctx6.ScopedContextProvider;
7044  
7045  // node_modules/@ariakit/react-core/esm/__chunks/VEVQD5MH.js
7046  var import_react7 = __toESM(require_react(), 1);
7047  var ComboboxListRoleContext = (0, import_react7.createContext)(
7048    void 0
7049  );
7050  var ctx7 = createStoreContext(
7051    [PopoverContextProvider, CompositeContextProvider],
7052    [PopoverScopedContextProvider, CompositeScopedContextProvider]
7053  );
7054  var useComboboxContext = ctx7.useContext;
7055  var useComboboxScopedContext = ctx7.useScopedContext;
7056  var useComboboxProviderContext = ctx7.useProviderContext;
7057  var ComboboxContextProvider = ctx7.ContextProvider;
7058  var ComboboxScopedContextProvider = ctx7.ScopedContextProvider;
7059  var ComboboxItemValueContext = (0, import_react7.createContext)(
7060    void 0
7061  );
7062  var ComboboxItemCheckedContext = (0, import_react7.createContext)(false);
7063  
7064  // node_modules/@ariakit/react-core/esm/__chunks/OMU7RWRV.js
7065  var TagName = "div";
7066  var usePopoverAnchor = createHook(
7067    function usePopoverAnchor2(_a) {
7068      var _b = _a, { store } = _b, props = __objRest(_b, ["store"]);
7069      const context = usePopoverProviderContext();
7070      store = store || context;
7071      props = __spreadProps(__spreadValues({}, props), {
7072        ref: useMergeRefs(store == null ? void 0 : store.setAnchorElement, props.ref)
7073      });
7074      return props;
7075    }
7076  );
7077  var PopoverAnchor = forwardRef22(function PopoverAnchor2(props) {
7078    const htmlProps = usePopoverAnchor(props);
7079    return createElement2(TagName, htmlProps);
7080  });
7081  
7082  // node_modules/@ariakit/react-core/esm/__chunks/5VQZOHHZ.js
7083  function findFirstEnabledItem2(items, excludeId) {
7084    return items.find((item) => {
7085      if (excludeId) {
7086        return !item.disabled && item.id !== excludeId;
7087      }
7088      return !item.disabled;
7089    });
7090  }
7091  function getEnabledItem(store, id) {
7092    if (!id) return null;
7093    return store.item(id) || null;
7094  }
7095  function groupItemsByRows2(items) {
7096    const rows = [];
7097    for (const item of items) {
7098      const row = rows.find((currentRow) => {
7099        var _a;
7100        return ((_a = currentRow[0]) == null ? void 0 : _a.rowId) === item.rowId;
7101      });
7102      if (row) {
7103        row.push(item);
7104      } else {
7105        rows.push([item]);
7106      }
7107    }
7108    return rows;
7109  }
7110  function selectTextField(element, collapseToEnd = false) {
7111    if (isTextField(element)) {
7112      element.setSelectionRange(
7113        collapseToEnd ? element.value.length : 0,
7114        element.value.length
7115      );
7116    } else if (element.isContentEditable) {
7117      const selection = getDocument(element).getSelection();
7118      selection == null ? void 0 : selection.selectAllChildren(element);
7119      if (collapseToEnd) {
7120        selection == null ? void 0 : selection.collapseToEnd();
7121      }
7122    }
7123  }
7124  var FOCUS_SILENTLY = Symbol("FOCUS_SILENTLY");
7125  function focusSilently(element) {
7126    element[FOCUS_SILENTLY] = true;
7127    element.focus({ preventScroll: true });
7128  }
7129  function silentlyFocused(element) {
7130    const isSilentlyFocused = element[FOCUS_SILENTLY];
7131    delete element[FOCUS_SILENTLY];
7132    return isSilentlyFocused;
7133  }
7134  function isItem(store, element, exclude) {
7135    if (!element) return false;
7136    if (element === exclude) return false;
7137    const item = store.item(element.id);
7138    if (!item) return false;
7139    if (exclude && item.element === exclude) return false;
7140    return true;
7141  }
7142  
7143  // node_modules/@ariakit/react-core/esm/__chunks/SWN3JYXT.js
7144  var import_react8 = __toESM(require_react(), 1);
7145  var FocusableContext = (0, import_react8.createContext)(true);
7146  
7147  // node_modules/@ariakit/core/esm/utils/focus.js
7148  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'])";
7149  function isFocusable(element) {
7150    if (!element.matches(selector)) return false;
7151    if (!isVisible(element)) return false;
7152    if (element.closest("[inert]")) return false;
7153    return true;
7154  }
7155  function getClosestFocusable(element) {
7156    while (element && !isFocusable(element)) {
7157      element = element.closest(selector);
7158    }
7159    return element || null;
7160  }
7161  function hasFocus(element) {
7162    const activeElement = getActiveElement(element);
7163    if (!activeElement) return false;
7164    if (activeElement === element) return true;
7165    const activeDescendant = activeElement.getAttribute("aria-activedescendant");
7166    if (!activeDescendant) return false;
7167    return activeDescendant === element.id;
7168  }
7169  function hasFocusWithin(element) {
7170    const activeElement = getActiveElement(element);
7171    if (!activeElement) return false;
7172    if (contains(element, activeElement)) return true;
7173    const activeDescendant = activeElement.getAttribute("aria-activedescendant");
7174    if (!activeDescendant) return false;
7175    if (!("id" in element)) return false;
7176    if (activeDescendant === element.id) return true;
7177    return !!element.querySelector(`#$CSS.escape(activeDescendant)}`);
7178  }
7179  function focusIfNeeded(element) {
7180    if (!hasFocusWithin(element) && isFocusable(element)) {
7181      element.focus();
7182    }
7183  }
7184  function focusIntoView(element, options) {
7185    if (!("scrollIntoView" in element)) {
7186      element.focus();
7187    } else {
7188      element.focus({ preventScroll: true });
7189      element.scrollIntoView(__spreadValues2({ block: "nearest", inline: "nearest" }, options));
7190    }
7191  }
7192  
7193  // node_modules/@ariakit/react-core/esm/__chunks/LVA2YJMS.js
7194  var import_react9 = __toESM(require_react(), 1);
7195  var TagName2 = "div";
7196  var isSafariBrowser = isSafari();
7197  var alwaysFocusVisibleInputTypes = [
7198    "text",
7199    "search",
7200    "url",
7201    "tel",
7202    "email",
7203    "password",
7204    "number",
7205    "date",
7206    "month",
7207    "week",
7208    "time",
7209    "datetime",
7210    "datetime-local"
7211  ];
7212  var safariFocusAncestorSymbol = Symbol("safariFocusAncestor");
7213  function markSafariFocusAncestor(element, value) {
7214    if (!element) return;
7215    element[safariFocusAncestorSymbol] = value;
7216  }
7217  function isAlwaysFocusVisible(element) {
7218    const { tagName, readOnly, type } = element;
7219    if (tagName === "TEXTAREA" && !readOnly) return true;
7220    if (tagName === "SELECT" && !readOnly) return true;
7221    if (tagName === "INPUT" && !readOnly) {
7222      return alwaysFocusVisibleInputTypes.includes(type);
7223    }
7224    if (element.isContentEditable) return true;
7225    const role = element.getAttribute("role");
7226    if (role === "combobox" && element.dataset.name) {
7227      return true;
7228    }
7229    return false;
7230  }
7231  function getLabels(element) {
7232    if ("labels" in element) {
7233      return element.labels;
7234    }
7235    return null;
7236  }
7237  function isNativeCheckboxOrRadio(element) {
7238    const tagName = element.tagName.toLowerCase();
7239    if (tagName === "input" && element.type) {
7240      return element.type === "radio" || element.type === "checkbox";
7241    }
7242    return false;
7243  }
7244  function isNativeTabbable(tagName) {
7245    if (!tagName) return true;
7246    return tagName === "button" || tagName === "summary" || tagName === "input" || tagName === "select" || tagName === "textarea" || tagName === "a";
7247  }
7248  function supportsDisabledAttribute(tagName) {
7249    if (!tagName) return true;
7250    return tagName === "button" || tagName === "input" || tagName === "select" || tagName === "textarea";
7251  }
7252  function getTabIndex(focusable, trulyDisabled, nativeTabbable, supportsDisabled, tabIndexProp) {
7253    if (!focusable) {
7254      return tabIndexProp;
7255    }
7256    if (trulyDisabled) {
7257      if (nativeTabbable && !supportsDisabled) {
7258        return -1;
7259      }
7260      return;
7261    }
7262    if (nativeTabbable) {
7263      return tabIndexProp;
7264    }
7265    return tabIndexProp || 0;
7266  }
7267  function useDisableEvent(onEvent, disabled) {
7268    return useEvent((event) => {
7269      onEvent == null ? void 0 : onEvent(event);
7270      if (event.defaultPrevented) return;
7271      if (disabled) {
7272        event.stopPropagation();
7273        event.preventDefault();
7274      }
7275    });
7276  }
7277  var isKeyboardModality = true;
7278  function onGlobalMouseDown(event) {
7279    const target = event.target;
7280    if (target && "hasAttribute" in target) {
7281      if (!target.hasAttribute("data-focus-visible")) {
7282        isKeyboardModality = false;
7283      }
7284    }
7285  }
7286  function onGlobalKeyDown(event) {
7287    if (event.metaKey) return;
7288    if (event.ctrlKey) return;
7289    if (event.altKey) return;
7290    isKeyboardModality = true;
7291  }
7292  var useFocusable = createHook(
7293    function useFocusable2(_a) {
7294      var _b = _a, {
7295        focusable = true,
7296        accessibleWhenDisabled,
7297        autoFocus,
7298        onFocusVisible
7299      } = _b, props = __objRest(_b, [
7300        "focusable",
7301        "accessibleWhenDisabled",
7302        "autoFocus",
7303        "onFocusVisible"
7304      ]);
7305      const ref = (0, import_react9.useRef)(null);
7306      (0, import_react9.useEffect)(() => {
7307        if (!focusable) return;
7308        addGlobalEventListener("mousedown", onGlobalMouseDown, true);
7309        addGlobalEventListener("keydown", onGlobalKeyDown, true);
7310      }, [focusable]);
7311      if (isSafariBrowser) {
7312        (0, import_react9.useEffect)(() => {
7313          if (!focusable) return;
7314          const element = ref.current;
7315          if (!element) return;
7316          if (!isNativeCheckboxOrRadio(element)) return;
7317          const labels = getLabels(element);
7318          if (!labels) return;
7319          const onMouseUp = () => queueMicrotask(() => element.focus());
7320          for (const label of labels) {
7321            label.addEventListener("mouseup", onMouseUp);
7322          }
7323          return () => {
7324            for (const label of labels) {
7325              label.removeEventListener("mouseup", onMouseUp);
7326            }
7327          };
7328        }, [focusable]);
7329      }
7330      const disabled = focusable && disabledFromProps(props);
7331      const trulyDisabled = !!disabled && !accessibleWhenDisabled;
7332      const [focusVisible, setFocusVisible] = (0, import_react9.useState)(false);
7333      (0, import_react9.useEffect)(() => {
7334        if (!focusable) return;
7335        if (trulyDisabled && focusVisible) {
7336          setFocusVisible(false);
7337        }
7338      }, [focusable, trulyDisabled, focusVisible]);
7339      (0, import_react9.useEffect)(() => {
7340        if (!focusable) return;
7341        if (!focusVisible) return;
7342        const element = ref.current;
7343        if (!element) return;
7344        if (typeof IntersectionObserver === "undefined") return;
7345        const observer = new IntersectionObserver(() => {
7346          if (!isFocusable(element)) {
7347            setFocusVisible(false);
7348          }
7349        });
7350        observer.observe(element);
7351        return () => observer.disconnect();
7352      }, [focusable, focusVisible]);
7353      const onKeyPressCapture = useDisableEvent(
7354        props.onKeyPressCapture,
7355        disabled
7356      );
7357      const onMouseDownCapture = useDisableEvent(
7358        props.onMouseDownCapture,
7359        disabled
7360      );
7361      const onClickCapture = useDisableEvent(props.onClickCapture, disabled);
7362      const onMouseDownProp = props.onMouseDown;
7363      const onMouseDown = useEvent((event) => {
7364        onMouseDownProp == null ? void 0 : onMouseDownProp(event);
7365        if (event.defaultPrevented) return;
7366        if (!focusable) return;
7367        const element = event.currentTarget;
7368        if (!isSafariBrowser) return;
7369        if (isPortalEvent(event)) return;
7370        if (!isButton(element) && !isNativeCheckboxOrRadio(element)) return;
7371        let receivedFocus = false;
7372        const onFocus = () => {
7373          receivedFocus = true;
7374        };
7375        const options = { capture: true, once: true };
7376        element.addEventListener("focusin", onFocus, options);
7377        const focusableContainer = getClosestFocusable(element.parentElement);
7378        markSafariFocusAncestor(focusableContainer, true);
7379        queueBeforeEvent(element, "mouseup", () => {
7380          element.removeEventListener("focusin", onFocus, true);
7381          markSafariFocusAncestor(focusableContainer, false);
7382          if (receivedFocus) return;
7383          focusIfNeeded(element);
7384        });
7385      });
7386      const handleFocusVisible = (event, currentTarget) => {
7387        if (currentTarget) {
7388          event.currentTarget = currentTarget;
7389        }
7390        if (!focusable) return;
7391        const element = event.currentTarget;
7392        if (!element) return;
7393        if (!hasFocus(element)) return;
7394        onFocusVisible == null ? void 0 : onFocusVisible(event);
7395        if (event.defaultPrevented) return;
7396        element.dataset.focusVisible = "true";
7397        setFocusVisible(true);
7398      };
7399      const onKeyDownCaptureProp = props.onKeyDownCapture;
7400      const onKeyDownCapture = useEvent((event) => {
7401        onKeyDownCaptureProp == null ? void 0 : onKeyDownCaptureProp(event);
7402        if (event.defaultPrevented) return;
7403        if (!focusable) return;
7404        if (focusVisible) return;
7405        if (event.metaKey) return;
7406        if (event.altKey) return;
7407        if (event.ctrlKey) return;
7408        if (!isSelfTarget(event)) return;
7409        const element = event.currentTarget;
7410        const applyFocusVisible = () => handleFocusVisible(event, element);
7411        queueBeforeEvent(element, "focusout", applyFocusVisible);
7412      });
7413      const onFocusCaptureProp = props.onFocusCapture;
7414      const onFocusCapture = useEvent((event) => {
7415        onFocusCaptureProp == null ? void 0 : onFocusCaptureProp(event);
7416        if (event.defaultPrevented) return;
7417        if (!focusable) return;
7418        if (!isSelfTarget(event)) {
7419          setFocusVisible(false);
7420          return;
7421        }
7422        const element = event.currentTarget;
7423        const applyFocusVisible = () => handleFocusVisible(event, element);
7424        if (isKeyboardModality || isAlwaysFocusVisible(event.target)) {
7425          queueBeforeEvent(event.target, "focusout", applyFocusVisible);
7426        } else {
7427          setFocusVisible(false);
7428        }
7429      });
7430      const onBlurProp = props.onBlur;
7431      const onBlur = useEvent((event) => {
7432        onBlurProp == null ? void 0 : onBlurProp(event);
7433        if (!focusable) return;
7434        if (!isFocusEventOutside(event)) return;
7435        setFocusVisible(false);
7436      });
7437      const autoFocusOnShow = (0, import_react9.useContext)(FocusableContext);
7438      const autoFocusRef = useEvent((element) => {
7439        if (!focusable) return;
7440        if (!autoFocus) return;
7441        if (!element) return;
7442        if (!autoFocusOnShow) return;
7443        queueMicrotask(() => {
7444          if (hasFocus(element)) return;
7445          if (!isFocusable(element)) return;
7446          element.focus();
7447        });
7448      });
7449      const tagName = useTagName(ref);
7450      const nativeTabbable = focusable && isNativeTabbable(tagName);
7451      const supportsDisabled = focusable && supportsDisabledAttribute(tagName);
7452      const styleProp = props.style;
7453      const style = (0, import_react9.useMemo)(() => {
7454        if (trulyDisabled) {
7455          return __spreadValues({ pointerEvents: "none" }, styleProp);
7456        }
7457        return styleProp;
7458      }, [trulyDisabled, styleProp]);
7459      props = __spreadProps(__spreadValues({
7460        "data-focus-visible": focusable && focusVisible || void 0,
7461        "data-autofocus": autoFocus || void 0,
7462        "aria-disabled": disabled || void 0
7463      }, props), {
7464        ref: useMergeRefs(ref, autoFocusRef, props.ref),
7465        style,
7466        tabIndex: getTabIndex(
7467          focusable,
7468          trulyDisabled,
7469          nativeTabbable,
7470          supportsDisabled,
7471          props.tabIndex
7472        ),
7473        disabled: supportsDisabled && trulyDisabled ? true : void 0,
7474        // TODO: Test Focusable contentEditable.
7475        contentEditable: disabled ? void 0 : props.contentEditable,
7476        onKeyPressCapture,
7477        onClickCapture,
7478        onMouseDownCapture,
7479        onMouseDown,
7480        onKeyDownCapture,
7481        onFocusCapture,
7482        onBlur
7483      });
7484      return removeUndefinedValues(props);
7485    }
7486  );
7487  var Focusable = forwardRef22(function Focusable2(props) {
7488    const htmlProps = useFocusable(props);
7489    return createElement2(TagName2, htmlProps);
7490  });
7491  
7492  // node_modules/@ariakit/react-core/esm/__chunks/ITI7HKP4.js
7493  var import_react10 = __toESM(require_react(), 1);
7494  var import_jsx_runtime47 = __toESM(require_jsx_runtime(), 1);
7495  var TagName3 = "div";
7496  function isGrid(items) {
7497    return items.some((item) => !!item.rowId);
7498  }
7499  function isPrintableKey(event) {
7500    const target = event.target;
7501    if (target && !isTextField(target)) return false;
7502    return event.key.length === 1 && !event.ctrlKey && !event.metaKey;
7503  }
7504  function isModifierKey(event) {
7505    return event.key === "Shift" || event.key === "Control" || event.key === "Alt" || event.key === "Meta";
7506  }
7507  function useKeyboardEventProxy(store, onKeyboardEvent, previousElementRef) {
7508    return useEvent((event) => {
7509      var _a;
7510      onKeyboardEvent == null ? void 0 : onKeyboardEvent(event);
7511      if (event.defaultPrevented) return;
7512      if (event.isPropagationStopped()) return;
7513      if (!isSelfTarget(event)) return;
7514      if (isModifierKey(event)) return;
7515      if (isPrintableKey(event)) return;
7516      const state = store.getState();
7517      const activeElement = (_a = getEnabledItem(store, state.activeId)) == null ? void 0 : _a.element;
7518      if (!activeElement) return;
7519      const _b = event, { view } = _b, eventInit = __objRest(_b, ["view"]);
7520      const previousElement = previousElementRef == null ? void 0 : previousElementRef.current;
7521      if (activeElement !== previousElement) {
7522        activeElement.focus();
7523      }
7524      if (!fireKeyboardEvent(activeElement, event.type, eventInit)) {
7525        event.preventDefault();
7526      }
7527      if (event.currentTarget.contains(activeElement)) {
7528        event.stopPropagation();
7529      }
7530    });
7531  }
7532  function findFirstEnabledItemInTheLastRow(items) {
7533    return findFirstEnabledItem2(
7534      flatten2DArray(reverseArray(groupItemsByRows2(items)))
7535    );
7536  }
7537  function useScheduleFocus(store) {
7538    const [scheduled, setScheduled] = (0, import_react10.useState)(false);
7539    const schedule = (0, import_react10.useCallback)(() => setScheduled(true), []);
7540    const activeItem = store.useState(
7541      (state) => getEnabledItem(store, state.activeId)
7542    );
7543    (0, import_react10.useEffect)(() => {
7544      const activeElement = activeItem == null ? void 0 : activeItem.element;
7545      if (!scheduled) return;
7546      if (!activeElement) return;
7547      setScheduled(false);
7548      activeElement.focus({ preventScroll: true });
7549    }, [activeItem, scheduled]);
7550    return schedule;
7551  }
7552  var useComposite = createHook(
7553    function useComposite2(_a) {
7554      var _b = _a, {
7555        store,
7556        composite = true,
7557        focusOnMove = composite,
7558        moveOnKeyPress = true
7559      } = _b, props = __objRest(_b, [
7560        "store",
7561        "composite",
7562        "focusOnMove",
7563        "moveOnKeyPress"
7564      ]);
7565      const context = useCompositeProviderContext();
7566      store = store || context;
7567      invariant(
7568        store,
7569        "Composite must receive a `store` prop or be wrapped in a CompositeProvider component."
7570      );
7571      const ref = (0, import_react10.useRef)(null);
7572      const previousElementRef = (0, import_react10.useRef)(null);
7573      const scheduleFocus = useScheduleFocus(store);
7574      const moves = store.useState("moves");
7575      const [, setBaseElement] = useTransactionState(
7576        composite ? store.setBaseElement : null
7577      );
7578      (0, import_react10.useEffect)(() => {
7579        var _a2;
7580        if (!store) return;
7581        if (!moves) return;
7582        if (!composite) return;
7583        if (!focusOnMove) return;
7584        const { activeId: activeId2 } = store.getState();
7585        const itemElement = (_a2 = getEnabledItem(store, activeId2)) == null ? void 0 : _a2.element;
7586        if (!itemElement) return;
7587        focusIntoView(itemElement);
7588      }, [store, moves, composite, focusOnMove]);
7589      useSafeLayoutEffect(() => {
7590        if (!store) return;
7591        if (!moves) return;
7592        if (!composite) return;
7593        const { baseElement, activeId: activeId2 } = store.getState();
7594        const isSelfAcive = activeId2 === null;
7595        if (!isSelfAcive) return;
7596        if (!baseElement) return;
7597        const previousElement = previousElementRef.current;
7598        previousElementRef.current = null;
7599        if (previousElement) {
7600          fireBlurEvent(previousElement, { relatedTarget: baseElement });
7601        }
7602        if (!hasFocus(baseElement)) {
7603          baseElement.focus();
7604        }
7605      }, [store, moves, composite]);
7606      const activeId = store.useState("activeId");
7607      const virtualFocus = store.useState("virtualFocus");
7608      useSafeLayoutEffect(() => {
7609        var _a2;
7610        if (!store) return;
7611        if (!composite) return;
7612        if (!virtualFocus) return;
7613        const previousElement = previousElementRef.current;
7614        previousElementRef.current = null;
7615        if (!previousElement) return;
7616        const activeElement = (_a2 = getEnabledItem(store, activeId)) == null ? void 0 : _a2.element;
7617        const relatedTarget = activeElement || getActiveElement(previousElement);
7618        if (relatedTarget === previousElement) return;
7619        fireBlurEvent(previousElement, { relatedTarget });
7620      }, [store, activeId, virtualFocus, composite]);
7621      const onKeyDownCapture = useKeyboardEventProxy(
7622        store,
7623        props.onKeyDownCapture,
7624        previousElementRef
7625      );
7626      const onKeyUpCapture = useKeyboardEventProxy(
7627        store,
7628        props.onKeyUpCapture,
7629        previousElementRef
7630      );
7631      const onFocusCaptureProp = props.onFocusCapture;
7632      const onFocusCapture = useEvent((event) => {
7633        onFocusCaptureProp == null ? void 0 : onFocusCaptureProp(event);
7634        if (event.defaultPrevented) return;
7635        if (!store) return;
7636        const { virtualFocus: virtualFocus2 } = store.getState();
7637        if (!virtualFocus2) return;
7638        const previousActiveElement = event.relatedTarget;
7639        const isSilentlyFocused = silentlyFocused(event.currentTarget);
7640        if (isSelfTarget(event) && isSilentlyFocused) {
7641          event.stopPropagation();
7642          previousElementRef.current = previousActiveElement;
7643        }
7644      });
7645      const onFocusProp = props.onFocus;
7646      const onFocus = useEvent((event) => {
7647        onFocusProp == null ? void 0 : onFocusProp(event);
7648        if (event.defaultPrevented) return;
7649        if (!composite) return;
7650        if (!store) return;
7651        const { relatedTarget } = event;
7652        const { virtualFocus: virtualFocus2 } = store.getState();
7653        if (virtualFocus2) {
7654          if (isSelfTarget(event) && !isItem(store, relatedTarget)) {
7655            queueMicrotask(scheduleFocus);
7656          }
7657        } else if (isSelfTarget(event)) {
7658          store.setActiveId(null);
7659        }
7660      });
7661      const onBlurCaptureProp = props.onBlurCapture;
7662      const onBlurCapture = useEvent((event) => {
7663        var _a2;
7664        onBlurCaptureProp == null ? void 0 : onBlurCaptureProp(event);
7665        if (event.defaultPrevented) return;
7666        if (!store) return;
7667        const { virtualFocus: virtualFocus2, activeId: activeId2 } = store.getState();
7668        if (!virtualFocus2) return;
7669        const activeElement = (_a2 = getEnabledItem(store, activeId2)) == null ? void 0 : _a2.element;
7670        const nextActiveElement = event.relatedTarget;
7671        const nextActiveElementIsItem = isItem(store, nextActiveElement);
7672        const previousElement = previousElementRef.current;
7673        previousElementRef.current = null;
7674        if (isSelfTarget(event) && nextActiveElementIsItem) {
7675          if (nextActiveElement === activeElement) {
7676            if (previousElement && previousElement !== nextActiveElement) {
7677              fireBlurEvent(previousElement, event);
7678            }
7679          } else if (activeElement) {
7680            fireBlurEvent(activeElement, event);
7681          } else if (previousElement) {
7682            fireBlurEvent(previousElement, event);
7683          }
7684          event.stopPropagation();
7685        } else {
7686          const targetIsItem = isItem(store, event.target);
7687          if (!targetIsItem && activeElement) {
7688            fireBlurEvent(activeElement, event);
7689          }
7690        }
7691      });
7692      const onKeyDownProp = props.onKeyDown;
7693      const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress);
7694      const onKeyDown = useEvent((event) => {
7695        var _a2;
7696        onKeyDownProp == null ? void 0 : onKeyDownProp(event);
7697        if (event.defaultPrevented) return;
7698        if (!store) return;
7699        if (!isSelfTarget(event)) return;
7700        const { orientation, renderedItems, activeId: activeId2 } = store.getState();
7701        const activeItem = getEnabledItem(store, activeId2);
7702        if ((_a2 = activeItem == null ? void 0 : activeItem.element) == null ? void 0 : _a2.isConnected) return;
7703        const isVertical = orientation !== "horizontal";
7704        const isHorizontal = orientation !== "vertical";
7705        const grid = isGrid(renderedItems);
7706        const isHorizontalKey = event.key === "ArrowLeft" || event.key === "ArrowRight" || event.key === "Home" || event.key === "End";
7707        if (isHorizontalKey && isTextField(event.currentTarget)) return;
7708        const up = () => {
7709          if (grid) {
7710            const item = findFirstEnabledItemInTheLastRow(renderedItems);
7711            return item == null ? void 0 : item.id;
7712          }
7713          return store == null ? void 0 : store.last();
7714        };
7715        const keyMap = {
7716          ArrowUp: (grid || isVertical) && up,
7717          ArrowRight: (grid || isHorizontal) && store.first,
7718          ArrowDown: (grid || isVertical) && store.first,
7719          ArrowLeft: (grid || isHorizontal) && store.last,
7720          Home: store.first,
7721          End: store.last,
7722          PageUp: store.first,
7723          PageDown: store.last
7724        };
7725        const action = keyMap[event.key];
7726        if (action) {
7727          const id = action();
7728          if (id !== void 0) {
7729            if (!moveOnKeyPressProp(event)) return;
7730            event.preventDefault();
7731            store.move(id);
7732          }
7733        }
7734      });
7735      props = useWrapElement(
7736        props,
7737        (element) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(CompositeContextProvider, { value: store, children: element }),
7738        [store]
7739      );
7740      const activeDescendant = store.useState((state) => {
7741        var _a2;
7742        if (!store) return;
7743        if (!composite) return;
7744        if (!state.virtualFocus) return;
7745        return (_a2 = getEnabledItem(store, state.activeId)) == null ? void 0 : _a2.id;
7746      });
7747      props = __spreadProps(__spreadValues({
7748        "aria-activedescendant": activeDescendant
7749      }, props), {
7750        ref: useMergeRefs(ref, setBaseElement, props.ref),
7751        onKeyDownCapture,
7752        onKeyUpCapture,
7753        onFocusCapture,
7754        onFocus,
7755        onBlurCapture,
7756        onKeyDown
7757      });
7758      const focusable = store.useState(
7759        (state) => composite && (state.virtualFocus || state.activeId === null)
7760      );
7761      props = useFocusable(__spreadValues({ focusable }, props));
7762      return props;
7763    }
7764  );
7765  var Composite5 = forwardRef22(function Composite22(props) {
7766    const htmlProps = useComposite(props);
7767    return createElement2(TagName3, htmlProps);
7768  });
7769  
7770  // node_modules/@ariakit/react-core/esm/combobox/combobox.js
7771  var import_react11 = __toESM(require_react(), 1);
7772  var TagName4 = "input";
7773  function isFirstItemAutoSelected(items, activeValue, autoSelect) {
7774    if (!autoSelect) return false;
7775    const firstItem = items.find((item) => !item.disabled && item.value);
7776    return (firstItem == null ? void 0 : firstItem.value) === activeValue;
7777  }
7778  function hasCompletionString(value, activeValue) {
7779    if (!activeValue) return false;
7780    if (value == null) return false;
7781    value = normalizeString(value);
7782    return activeValue.length > value.length && activeValue.toLowerCase().indexOf(value.toLowerCase()) === 0;
7783  }
7784  function isInputEvent(event) {
7785    return event.type === "input";
7786  }
7787  function isAriaAutoCompleteValue(value) {
7788    return value === "inline" || value === "list" || value === "both" || value === "none";
7789  }
7790  function getDefaultAutoSelectId(items) {
7791    const item = items.find((item2) => {
7792      var _a;
7793      if (item2.disabled) return false;
7794      return ((_a = item2.element) == null ? void 0 : _a.getAttribute("role")) !== "tab";
7795    });
7796    return item == null ? void 0 : item.id;
7797  }
7798  var useCombobox = createHook(
7799    function useCombobox2(_a) {
7800      var _b = _a, {
7801        store,
7802        focusable = true,
7803        autoSelect: autoSelectProp = false,
7804        getAutoSelectId,
7805        setValueOnChange,
7806        showMinLength = 0,
7807        showOnChange,
7808        showOnMouseDown,
7809        showOnClick = showOnMouseDown,
7810        showOnKeyDown,
7811        showOnKeyPress = showOnKeyDown,
7812        blurActiveItemOnClick,
7813        setValueOnClick = true,
7814        moveOnKeyPress = true,
7815        autoComplete = "list"
7816      } = _b, props = __objRest(_b, [
7817        "store",
7818        "focusable",
7819        "autoSelect",
7820        "getAutoSelectId",
7821        "setValueOnChange",
7822        "showMinLength",
7823        "showOnChange",
7824        "showOnMouseDown",
7825        "showOnClick",
7826        "showOnKeyDown",
7827        "showOnKeyPress",
7828        "blurActiveItemOnClick",
7829        "setValueOnClick",
7830        "moveOnKeyPress",
7831        "autoComplete"
7832      ]);
7833      const context = useComboboxProviderContext();
7834      store = store || context;
7835      invariant(
7836        store,
7837        "Combobox must receive a `store` prop or be wrapped in a ComboboxProvider component."
7838      );
7839      const ref = (0, import_react11.useRef)(null);
7840      const [valueUpdated, forceValueUpdate] = useForceUpdate();
7841      const canAutoSelectRef = (0, import_react11.useRef)(false);
7842      const composingRef = (0, import_react11.useRef)(false);
7843      const autoSelect = store.useState(
7844        (state) => state.virtualFocus && autoSelectProp
7845      );
7846      const inline = autoComplete === "inline" || autoComplete === "both";
7847      const [canInline, setCanInline] = (0, import_react11.useState)(inline);
7848      useUpdateLayoutEffect(() => {
7849        if (!inline) return;
7850        setCanInline(true);
7851      }, [inline]);
7852      const storeValue = store.useState("value");
7853      const prevSelectedValueRef = (0, import_react11.useRef)();
7854      (0, import_react11.useEffect)(() => {
7855        return sync(store, ["selectedValue", "activeId"], (_, prev) => {
7856          prevSelectedValueRef.current = prev.selectedValue;
7857        });
7858      }, []);
7859      const inlineActiveValue = store.useState((state) => {
7860        var _a2;
7861        if (!inline) return;
7862        if (!canInline) return;
7863        if (state.activeValue && Array.isArray(state.selectedValue)) {
7864          if (state.selectedValue.includes(state.activeValue)) return;
7865          if ((_a2 = prevSelectedValueRef.current) == null ? void 0 : _a2.includes(state.activeValue)) return;
7866        }
7867        return state.activeValue;
7868      });
7869      const items = store.useState("renderedItems");
7870      const open = store.useState("open");
7871      const contentElement = store.useState("contentElement");
7872      const value = (0, import_react11.useMemo)(() => {
7873        if (!inline) return storeValue;
7874        if (!canInline) return storeValue;
7875        const firstItemAutoSelected = isFirstItemAutoSelected(
7876          items,
7877          inlineActiveValue,
7878          autoSelect
7879        );
7880        if (firstItemAutoSelected) {
7881          if (hasCompletionString(storeValue, inlineActiveValue)) {
7882            const slice = (inlineActiveValue == null ? void 0 : inlineActiveValue.slice(storeValue.length)) || "";
7883            return storeValue + slice;
7884          }
7885          return storeValue;
7886        }
7887        return inlineActiveValue || storeValue;
7888      }, [inline, canInline, items, inlineActiveValue, autoSelect, storeValue]);
7889      (0, import_react11.useEffect)(() => {
7890        const element = ref.current;
7891        if (!element) return;
7892        const onCompositeItemMove = () => setCanInline(true);
7893        element.addEventListener("combobox-item-move", onCompositeItemMove);
7894        return () => {
7895          element.removeEventListener("combobox-item-move", onCompositeItemMove);
7896        };
7897      }, []);
7898      (0, import_react11.useEffect)(() => {
7899        if (!inline) return;
7900        if (!canInline) return;
7901        if (!inlineActiveValue) return;
7902        const firstItemAutoSelected = isFirstItemAutoSelected(
7903          items,
7904          inlineActiveValue,
7905          autoSelect
7906        );
7907        if (!firstItemAutoSelected) return;
7908        if (!hasCompletionString(storeValue, inlineActiveValue)) return;
7909        let cleanup = noop;
7910        queueMicrotask(() => {
7911          const element = ref.current;
7912          if (!element) return;
7913          const { start: prevStart, end: prevEnd } = getTextboxSelection(element);
7914          const nextStart = storeValue.length;
7915          const nextEnd = inlineActiveValue.length;
7916          setSelectionRange(element, nextStart, nextEnd);
7917          cleanup = () => {
7918            if (!hasFocus(element)) return;
7919            const { start, end } = getTextboxSelection(element);
7920            if (start !== nextStart) return;
7921            if (end !== nextEnd) return;
7922            setSelectionRange(element, prevStart, prevEnd);
7923          };
7924        });
7925        return () => cleanup();
7926      }, [
7927        valueUpdated,
7928        inline,
7929        canInline,
7930        inlineActiveValue,
7931        items,
7932        autoSelect,
7933        storeValue
7934      ]);
7935      const scrollingElementRef = (0, import_react11.useRef)(null);
7936      const getAutoSelectIdProp = useEvent(getAutoSelectId);
7937      const autoSelectIdRef = (0, import_react11.useRef)(null);
7938      (0, import_react11.useEffect)(() => {
7939        if (!open) return;
7940        if (!contentElement) return;
7941        const scrollingElement = getScrollingElement(contentElement);
7942        if (!scrollingElement) return;
7943        scrollingElementRef.current = scrollingElement;
7944        const onUserScroll = () => {
7945          canAutoSelectRef.current = false;
7946        };
7947        const onScroll = () => {
7948          if (!store) return;
7949          if (!canAutoSelectRef.current) return;
7950          const { activeId } = store.getState();
7951          if (activeId === null) return;
7952          if (activeId === autoSelectIdRef.current) return;
7953          canAutoSelectRef.current = false;
7954        };
7955        const options = { passive: true, capture: true };
7956        scrollingElement.addEventListener("wheel", onUserScroll, options);
7957        scrollingElement.addEventListener("touchmove", onUserScroll, options);
7958        scrollingElement.addEventListener("scroll", onScroll, options);
7959        return () => {
7960          scrollingElement.removeEventListener("wheel", onUserScroll, true);
7961          scrollingElement.removeEventListener("touchmove", onUserScroll, true);
7962          scrollingElement.removeEventListener("scroll", onScroll, true);
7963        };
7964      }, [open, contentElement, store]);
7965      useSafeLayoutEffect(() => {
7966        if (!storeValue) return;
7967        if (composingRef.current) return;
7968        canAutoSelectRef.current = true;
7969      }, [storeValue]);
7970      useSafeLayoutEffect(() => {
7971        if (autoSelect !== "always" && open) return;
7972        canAutoSelectRef.current = open;
7973      }, [autoSelect, open]);
7974      const resetValueOnSelect = store.useState("resetValueOnSelect");
7975      useUpdateEffect(() => {
7976        var _a2, _b2;
7977        const canAutoSelect = canAutoSelectRef.current;
7978        if (!store) return;
7979        if (!open) return;
7980        if (!canAutoSelect && !resetValueOnSelect) return;
7981        const { baseElement, contentElement: contentElement2, activeId } = store.getState();
7982        if (baseElement && !hasFocus(baseElement)) return;
7983        if (contentElement2 == null ? void 0 : contentElement2.hasAttribute("data-placing")) {
7984          const observer = new MutationObserver(forceValueUpdate);
7985          observer.observe(contentElement2, { attributeFilter: ["data-placing"] });
7986          return () => observer.disconnect();
7987        }
7988        if (autoSelect && canAutoSelect) {
7989          const userAutoSelectId = getAutoSelectIdProp(items);
7990          const autoSelectId = userAutoSelectId !== void 0 ? userAutoSelectId : (_a2 = getDefaultAutoSelectId(items)) != null ? _a2 : store.first();
7991          autoSelectIdRef.current = autoSelectId;
7992          store.move(autoSelectId != null ? autoSelectId : null);
7993        } else {
7994          const element = (_b2 = store.item(activeId || store.first())) == null ? void 0 : _b2.element;
7995          if (element && "scrollIntoView" in element) {
7996            element.scrollIntoView({ block: "nearest", inline: "nearest" });
7997          }
7998        }
7999        return;
8000      }, [
8001        store,
8002        open,
8003        valueUpdated,
8004        storeValue,
8005        autoSelect,
8006        resetValueOnSelect,
8007        getAutoSelectIdProp,
8008        items
8009      ]);
8010      (0, import_react11.useEffect)(() => {
8011        if (!inline) return;
8012        const combobox = ref.current;
8013        if (!combobox) return;
8014        const elements = [combobox, contentElement].filter(
8015          (value2) => !!value2
8016        );
8017        const onBlur2 = (event) => {
8018          if (elements.every((el) => isFocusEventOutside(event, el))) {
8019            store == null ? void 0 : store.setValue(value);
8020          }
8021        };
8022        for (const element of elements) {
8023          element.addEventListener("focusout", onBlur2);
8024        }
8025        return () => {
8026          for (const element of elements) {
8027            element.removeEventListener("focusout", onBlur2);
8028          }
8029        };
8030      }, [inline, contentElement, store, value]);
8031      const canShow = (event) => {
8032        const currentTarget = event.currentTarget;
8033        return currentTarget.value.length >= showMinLength;
8034      };
8035      const onChangeProp = props.onChange;
8036      const showOnChangeProp = useBooleanEvent(showOnChange != null ? showOnChange : canShow);
8037      const setValueOnChangeProp = useBooleanEvent(
8038        // If the combobox is combined with tags, the value will be set by the tag
8039        // input component.
8040        setValueOnChange != null ? setValueOnChange : !store.tag
8041      );
8042      const onChange = useEvent((event) => {
8043        onChangeProp == null ? void 0 : onChangeProp(event);
8044        if (event.defaultPrevented) return;
8045        if (!store) return;
8046        const currentTarget = event.currentTarget;
8047        const { value: value2, selectionStart, selectionEnd } = currentTarget;
8048        const nativeEvent = event.nativeEvent;
8049        canAutoSelectRef.current = true;
8050        if (isInputEvent(nativeEvent)) {
8051          if (nativeEvent.isComposing) {
8052            canAutoSelectRef.current = false;
8053            composingRef.current = true;
8054          }
8055          if (inline) {
8056            const textInserted = nativeEvent.inputType === "insertText" || nativeEvent.inputType === "insertCompositionText";
8057            const caretAtEnd = selectionStart === value2.length;
8058            setCanInline(textInserted && caretAtEnd);
8059          }
8060        }
8061        if (setValueOnChangeProp(event)) {
8062          const isSameValue = value2 === store.getState().value;
8063          store.setValue(value2);
8064          queueMicrotask(() => {
8065            setSelectionRange(currentTarget, selectionStart, selectionEnd);
8066          });
8067          if (inline && autoSelect && isSameValue) {
8068            forceValueUpdate();
8069          }
8070        }
8071        if (showOnChangeProp(event)) {
8072          store.show();
8073        }
8074        if (!autoSelect || !canAutoSelectRef.current) {
8075          store.setActiveId(null);
8076        }
8077      });
8078      const onCompositionEndProp = props.onCompositionEnd;
8079      const onCompositionEnd = useEvent((event) => {
8080        canAutoSelectRef.current = true;
8081        composingRef.current = false;
8082        onCompositionEndProp == null ? void 0 : onCompositionEndProp(event);
8083        if (event.defaultPrevented) return;
8084        if (!autoSelect) return;
8085        forceValueUpdate();
8086      });
8087      const onMouseDownProp = props.onMouseDown;
8088      const blurActiveItemOnClickProp = useBooleanEvent(
8089        blurActiveItemOnClick != null ? blurActiveItemOnClick : () => !!(store == null ? void 0 : store.getState().includesBaseElement)
8090      );
8091      const setValueOnClickProp = useBooleanEvent(setValueOnClick);
8092      const showOnClickProp = useBooleanEvent(showOnClick != null ? showOnClick : canShow);
8093      const onMouseDown = useEvent((event) => {
8094        onMouseDownProp == null ? void 0 : onMouseDownProp(event);
8095        if (event.defaultPrevented) return;
8096        if (event.button) return;
8097        if (event.ctrlKey) return;
8098        if (!store) return;
8099        if (blurActiveItemOnClickProp(event)) {
8100          store.setActiveId(null);
8101        }
8102        if (setValueOnClickProp(event)) {
8103          store.setValue(value);
8104        }
8105        if (showOnClickProp(event)) {
8106          queueBeforeEvent(event.currentTarget, "mouseup", store.show);
8107        }
8108      });
8109      const onKeyDownProp = props.onKeyDown;
8110      const showOnKeyPressProp = useBooleanEvent(showOnKeyPress != null ? showOnKeyPress : canShow);
8111      const onKeyDown = useEvent((event) => {
8112        onKeyDownProp == null ? void 0 : onKeyDownProp(event);
8113        if (!event.repeat) {
8114          canAutoSelectRef.current = false;
8115        }
8116        if (event.defaultPrevented) return;
8117        if (event.ctrlKey) return;
8118        if (event.altKey) return;
8119        if (event.shiftKey) return;
8120        if (event.metaKey) return;
8121        if (!store) return;
8122        const { open: open2 } = store.getState();
8123        if (open2) return;
8124        if (event.key === "ArrowUp" || event.key === "ArrowDown") {
8125          if (showOnKeyPressProp(event)) {
8126            event.preventDefault();
8127            store.show();
8128          }
8129        }
8130      });
8131      const onBlurProp = props.onBlur;
8132      const onBlur = useEvent((event) => {
8133        canAutoSelectRef.current = false;
8134        onBlurProp == null ? void 0 : onBlurProp(event);
8135        if (event.defaultPrevented) return;
8136      });
8137      const id = useId3(props.id);
8138      const ariaAutoComplete = isAriaAutoCompleteValue(autoComplete) ? autoComplete : void 0;
8139      const isActiveItem = store.useState((state) => state.activeId === null);
8140      props = __spreadProps(__spreadValues({
8141        id,
8142        role: "combobox",
8143        "aria-autocomplete": ariaAutoComplete,
8144        "aria-haspopup": getPopupRole(contentElement, "listbox"),
8145        "aria-expanded": open,
8146        "aria-controls": contentElement == null ? void 0 : contentElement.id,
8147        "data-active-item": isActiveItem || void 0,
8148        value
8149      }, props), {
8150        ref: useMergeRefs(ref, props.ref),
8151        onChange,
8152        onCompositionEnd,
8153        onMouseDown,
8154        onKeyDown,
8155        onBlur
8156      });
8157      props = useComposite(__spreadProps(__spreadValues({
8158        store,
8159        focusable
8160      }, props), {
8161        // Enable inline autocomplete when the user moves from the combobox input
8162        // to an item.
8163        moveOnKeyPress: (event) => {
8164          if (isFalsyBooleanCallback(moveOnKeyPress, event)) return false;
8165          if (inline) setCanInline(true);
8166          return true;
8167        }
8168      }));
8169      props = usePopoverAnchor(__spreadValues({ store }, props));
8170      return __spreadValues({ autoComplete: "off" }, props);
8171    }
8172  );
8173  var Combobox = forwardRef22(function Combobox2(props) {
8174    const htmlProps = useCombobox(props);
8175    return createElement2(TagName4, htmlProps);
8176  });
8177  
8178  // node_modules/@ariakit/react-core/esm/combobox/combobox-provider.js
8179  var import_jsx_runtime48 = __toESM(require_jsx_runtime(), 1);
8180  function ComboboxProvider(props = {}) {
8181    const store = useComboboxStore(props);
8182    return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(ComboboxContextProvider, { value: store, children: props.children });
8183  }
8184  
8185  // node_modules/@ariakit/react-core/esm/__chunks/KUU7WJ55.js
8186  var import_react12 = __toESM(require_react(), 1);
8187  var TagName5 = "button";
8188  function isNativeClick(event) {
8189    if (!event.isTrusted) return false;
8190    const element = event.currentTarget;
8191    if (event.key === "Enter") {
8192      return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "A";
8193    }
8194    if (event.key === " ") {
8195      return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "INPUT" || element.tagName === "SELECT";
8196    }
8197    return false;
8198  }
8199  var symbol = Symbol("command");
8200  var useCommand = createHook(
8201    function useCommand2(_a) {
8202      var _b = _a, { clickOnEnter = true, clickOnSpace = true } = _b, props = __objRest(_b, ["clickOnEnter", "clickOnSpace"]);
8203      const ref = (0, import_react12.useRef)(null);
8204      const [isNativeButton, setIsNativeButton] = (0, import_react12.useState)(false);
8205      (0, import_react12.useEffect)(() => {
8206        if (!ref.current) return;
8207        setIsNativeButton(isButton(ref.current));
8208      }, []);
8209      const [active, setActive] = (0, import_react12.useState)(false);
8210      const activeRef = (0, import_react12.useRef)(false);
8211      const disabled = disabledFromProps(props);
8212      const [isDuplicate, metadataProps] = useMetadataProps(props, symbol, true);
8213      const onKeyDownProp = props.onKeyDown;
8214      const onKeyDown = useEvent((event) => {
8215        onKeyDownProp == null ? void 0 : onKeyDownProp(event);
8216        const element = event.currentTarget;
8217        if (event.defaultPrevented) return;
8218        if (isDuplicate) return;
8219        if (disabled) return;
8220        if (!isSelfTarget(event)) return;
8221        if (isTextField(element)) return;
8222        if (element.isContentEditable) return;
8223        const isEnter = clickOnEnter && event.key === "Enter";
8224        const isSpace = clickOnSpace && event.key === " ";
8225        const shouldPreventEnter = event.key === "Enter" && !clickOnEnter;
8226        const shouldPreventSpace = event.key === " " && !clickOnSpace;
8227        if (shouldPreventEnter || shouldPreventSpace) {
8228          event.preventDefault();
8229          return;
8230        }
8231        if (isEnter || isSpace) {
8232          const nativeClick = isNativeClick(event);
8233          if (isEnter) {
8234            if (!nativeClick) {
8235              event.preventDefault();
8236              const _a2 = event, { view } = _a2, eventInit = __objRest(_a2, ["view"]);
8237              const click = () => fireClickEvent(element, eventInit);
8238              if (isFirefox()) {
8239                queueBeforeEvent(element, "keyup", click);
8240              } else {
8241                queueMicrotask(click);
8242              }
8243            }
8244          } else if (isSpace) {
8245            activeRef.current = true;
8246            if (!nativeClick) {
8247              event.preventDefault();
8248              setActive(true);
8249            }
8250          }
8251        }
8252      });
8253      const onKeyUpProp = props.onKeyUp;
8254      const onKeyUp = useEvent((event) => {
8255        onKeyUpProp == null ? void 0 : onKeyUpProp(event);
8256        if (event.defaultPrevented) return;
8257        if (isDuplicate) return;
8258        if (disabled) return;
8259        if (event.metaKey) return;
8260        const isSpace = clickOnSpace && event.key === " ";
8261        if (activeRef.current && isSpace) {
8262          activeRef.current = false;
8263          if (!isNativeClick(event)) {
8264            event.preventDefault();
8265            setActive(false);
8266            const element = event.currentTarget;
8267            const _a2 = event, { view } = _a2, eventInit = __objRest(_a2, ["view"]);
8268            queueMicrotask(() => fireClickEvent(element, eventInit));
8269          }
8270        }
8271      });
8272      props = __spreadProps(__spreadValues(__spreadValues({
8273        "data-active": active || void 0,
8274        type: isNativeButton ? "button" : void 0
8275      }, metadataProps), props), {
8276        ref: useMergeRefs(ref, props.ref),
8277        onKeyDown,
8278        onKeyUp
8279      });
8280      props = useFocusable(props);
8281      return props;
8282    }
8283  );
8284  var Command = forwardRef22(function Command2(props) {
8285    const htmlProps = useCommand(props);
8286    return createElement2(TagName5, htmlProps);
8287  });
8288  
8289  // node_modules/@ariakit/react-core/esm/combobox/combobox-item-value.js
8290  var import_react13 = __toESM(require_react(), 1);
8291  var import_jsx_runtime49 = __toESM(require_jsx_runtime(), 1);
8292  var TagName6 = "span";
8293  function normalizeValue(value) {
8294    return normalizeString(value).toLowerCase();
8295  }
8296  function getOffsets(string, values) {
8297    const offsets = [];
8298    for (const value of values) {
8299      let pos = 0;
8300      const length = value.length;
8301      while (string.indexOf(value, pos) !== -1) {
8302        const index = string.indexOf(value, pos);
8303        if (index !== -1) {
8304          offsets.push([index, length]);
8305        }
8306        pos = index + 1;
8307      }
8308    }
8309    return offsets;
8310  }
8311  function filterOverlappingOffsets(offsets) {
8312    return offsets.filter(([offset, length], i2, arr) => {
8313      return !arr.some(
8314        ([o2, l2], j2) => j2 !== i2 && o2 <= offset && o2 + l2 >= offset + length
8315      );
8316    });
8317  }
8318  function sortOffsets(offsets) {
8319    return offsets.sort(([a2], [b2]) => a2 - b2);
8320  }
8321  function splitValue(itemValue, userValue) {
8322    if (!itemValue) return itemValue;
8323    if (!userValue) return itemValue;
8324    const userValues = toArray(userValue).filter(Boolean).map(normalizeValue);
8325    const parts = [];
8326    const span = (value, autocomplete = false) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
8327      "span",
8328      {
8329        "data-autocomplete-value": autocomplete ? "" : void 0,
8330        "data-user-value": autocomplete ? void 0 : "",
8331        children: value
8332      },
8333      parts.length
8334    );
8335    const offsets = sortOffsets(
8336      filterOverlappingOffsets(
8337        // Convert userValues into a set to avoid duplicates
8338        getOffsets(normalizeValue(itemValue), new Set(userValues))
8339      )
8340    );
8341    if (!offsets.length) {
8342      parts.push(span(itemValue, true));
8343      return parts;
8344    }
8345    const [firstOffset] = offsets[0];
8346    const values = [
8347      itemValue.slice(0, firstOffset),
8348      ...offsets.flatMap(([offset, length], i2) => {
8349        var _a;
8350        const value = itemValue.slice(offset, offset + length);
8351        const nextOffset = (_a = offsets[i2 + 1]) == null ? void 0 : _a[0];
8352        const nextValue = itemValue.slice(offset + length, nextOffset);
8353        return [value, nextValue];
8354      })
8355    ];
8356    values.forEach((value, i2) => {
8357      if (!value) return;
8358      parts.push(span(value, i2 % 2 === 0));
8359    });
8360    return parts;
8361  }
8362  var useComboboxItemValue = createHook(function useComboboxItemValue2(_a) {
8363    var _b = _a, { store, value, userValue } = _b, props = __objRest(_b, ["store", "value", "userValue"]);
8364    const context = useComboboxScopedContext();
8365    store = store || context;
8366    const itemContext = (0, import_react13.useContext)(ComboboxItemValueContext);
8367    const itemValue = value != null ? value : itemContext;
8368    const inputValue = useStoreState(store, (state) => userValue != null ? userValue : state == null ? void 0 : state.value);
8369    const children = (0, import_react13.useMemo)(() => {
8370      if (!itemValue) return;
8371      if (!inputValue) return itemValue;
8372      return splitValue(itemValue, inputValue);
8373    }, [itemValue, inputValue]);
8374    props = __spreadValues({
8375      children
8376    }, props);
8377    return removeUndefinedValues(props);
8378  });
8379  var ComboboxItemValue = forwardRef22(function ComboboxItemValue2(props) {
8380    const htmlProps = useComboboxItemValue(props);
8381    return createElement2(TagName6, htmlProps);
8382  });
8383  
8384  // node_modules/@ariakit/react-core/esm/__chunks/UQQRIHDV.js
8385  var import_react14 = __toESM(require_react(), 1);
8386  var TagName7 = "div";
8387  function getMouseDestination(event) {
8388    const relatedTarget = event.relatedTarget;
8389    if ((relatedTarget == null ? void 0 : relatedTarget.nodeType) === Node.ELEMENT_NODE) {
8390      return relatedTarget;
8391    }
8392    return null;
8393  }
8394  function hoveringInside(event) {
8395    const nextElement = getMouseDestination(event);
8396    if (!nextElement) return false;
8397    return contains(event.currentTarget, nextElement);
8398  }
8399  var symbol2 = Symbol("composite-hover");
8400  function movingToAnotherItem(event) {
8401    let dest = getMouseDestination(event);
8402    if (!dest) return false;
8403    do {
8404      if (hasOwnProperty(dest, symbol2) && dest[symbol2]) return true;
8405      dest = dest.parentElement;
8406    } while (dest);
8407    return false;
8408  }
8409  var useCompositeHover = createHook(
8410    function useCompositeHover2(_a) {
8411      var _b = _a, {
8412        store,
8413        focusOnHover = true,
8414        blurOnHoverEnd = !!focusOnHover
8415      } = _b, props = __objRest(_b, [
8416        "store",
8417        "focusOnHover",
8418        "blurOnHoverEnd"
8419      ]);
8420      const context = useCompositeContext();
8421      store = store || context;
8422      invariant(
8423        store,
8424        "CompositeHover must be wrapped in a Composite component."
8425      );
8426      const isMouseMoving = useIsMouseMoving();
8427      const onMouseMoveProp = props.onMouseMove;
8428      const focusOnHoverProp = useBooleanEvent(focusOnHover);
8429      const onMouseMove = useEvent((event) => {
8430        onMouseMoveProp == null ? void 0 : onMouseMoveProp(event);
8431        if (event.defaultPrevented) return;
8432        if (!isMouseMoving()) return;
8433        if (!focusOnHoverProp(event)) return;
8434        if (!hasFocusWithin(event.currentTarget)) {
8435          const baseElement = store == null ? void 0 : store.getState().baseElement;
8436          if (baseElement && !hasFocus(baseElement)) {
8437            baseElement.focus();
8438          }
8439        }
8440        store == null ? void 0 : store.setActiveId(event.currentTarget.id);
8441      });
8442      const onMouseLeaveProp = props.onMouseLeave;
8443      const blurOnHoverEndProp = useBooleanEvent(blurOnHoverEnd);
8444      const onMouseLeave = useEvent((event) => {
8445        var _a2;
8446        onMouseLeaveProp == null ? void 0 : onMouseLeaveProp(event);
8447        if (event.defaultPrevented) return;
8448        if (!isMouseMoving()) return;
8449        if (hoveringInside(event)) return;
8450        if (movingToAnotherItem(event)) return;
8451        if (!focusOnHoverProp(event)) return;
8452        if (!blurOnHoverEndProp(event)) return;
8453        store == null ? void 0 : store.setActiveId(null);
8454        (_a2 = store == null ? void 0 : store.getState().baseElement) == null ? void 0 : _a2.focus();
8455      });
8456      const ref = (0, import_react14.useCallback)((element) => {
8457        if (!element) return;
8458        element[symbol2] = true;
8459      }, []);
8460      props = __spreadProps(__spreadValues({}, props), {
8461        ref: useMergeRefs(ref, props.ref),
8462        onMouseMove,
8463        onMouseLeave
8464      });
8465      return removeUndefinedValues(props);
8466    }
8467  );
8468  var CompositeHover = memo22(
8469    forwardRef22(function CompositeHover2(props) {
8470      const htmlProps = useCompositeHover(props);
8471      return createElement2(TagName7, htmlProps);
8472    })
8473  );
8474  
8475  // node_modules/@ariakit/react-core/esm/__chunks/RZ4GPYOB.js
8476  var import_react15 = __toESM(require_react(), 1);
8477  var TagName8 = "div";
8478  var useCollectionItem = createHook(
8479    function useCollectionItem2(_a) {
8480      var _b = _a, {
8481        store,
8482        shouldRegisterItem = true,
8483        getItem = identity,
8484        element
8485      } = _b, props = __objRest(_b, [
8486        "store",
8487        "shouldRegisterItem",
8488        "getItem",
8489        // @ts-expect-error This prop may come from a collection renderer.
8490        "element"
8491      ]);
8492      const context = useCollectionContext();
8493      store = store || context;
8494      const id = useId3(props.id);
8495      const ref = (0, import_react15.useRef)(element);
8496      (0, import_react15.useEffect)(() => {
8497        const element2 = ref.current;
8498        if (!id) return;
8499        if (!element2) return;
8500        if (!shouldRegisterItem) return;
8501        const item = getItem({ id, element: element2 });
8502        return store == null ? void 0 : store.renderItem(item);
8503      }, [id, shouldRegisterItem, getItem, store]);
8504      props = __spreadProps(__spreadValues({}, props), {
8505        ref: useMergeRefs(ref, props.ref)
8506      });
8507      return removeUndefinedValues(props);
8508    }
8509  );
8510  var CollectionItem = forwardRef22(function CollectionItem2(props) {
8511    const htmlProps = useCollectionItem(props);
8512    return createElement2(TagName8, htmlProps);
8513  });
8514  
8515  // node_modules/@ariakit/react-core/esm/__chunks/P2CTZE2T.js
8516  var import_react16 = __toESM(require_react(), 1);
8517  var import_jsx_runtime50 = __toESM(require_jsx_runtime(), 1);
8518  var TagName9 = "button";
8519  function isEditableElement(element) {
8520    if (isTextbox(element)) return true;
8521    return element.tagName === "INPUT" && !isButton(element);
8522  }
8523  function getNextPageOffset(scrollingElement, pageUp = false) {
8524    const height = scrollingElement.clientHeight;
8525    const { top } = scrollingElement.getBoundingClientRect();
8526    const pageSize = Math.max(height * 0.875, height - 40) * 1.5;
8527    const pageOffset = pageUp ? height - pageSize + top : pageSize + top;
8528    if (scrollingElement.tagName === "HTML") {
8529      return pageOffset + scrollingElement.scrollTop;
8530    }
8531    return pageOffset;
8532  }
8533  function getItemOffset(itemElement, pageUp = false) {
8534    const { top } = itemElement.getBoundingClientRect();
8535    if (pageUp) {
8536      return top + itemElement.clientHeight;
8537    }
8538    return top;
8539  }
8540  function findNextPageItemId(element, store, next, pageUp = false) {
8541    var _a;
8542    if (!store) return;
8543    if (!next) return;
8544    const { renderedItems } = store.getState();
8545    const scrollingElement = getScrollingElement(element);
8546    if (!scrollingElement) return;
8547    const nextPageOffset = getNextPageOffset(scrollingElement, pageUp);
8548    let id;
8549    let prevDifference;
8550    for (let i2 = 0; i2 < renderedItems.length; i2 += 1) {
8551      const previousId = id;
8552      id = next(i2);
8553      if (!id) break;
8554      if (id === previousId) continue;
8555      const itemElement = (_a = getEnabledItem(store, id)) == null ? void 0 : _a.element;
8556      if (!itemElement) continue;
8557      const itemOffset = getItemOffset(itemElement, pageUp);
8558      const difference = itemOffset - nextPageOffset;
8559      const absDifference = Math.abs(difference);
8560      if (pageUp && difference <= 0 || !pageUp && difference >= 0) {
8561        if (prevDifference !== void 0 && prevDifference < absDifference) {
8562          id = previousId;
8563        }
8564        break;
8565      }
8566      prevDifference = absDifference;
8567    }
8568    return id;
8569  }
8570  function targetIsAnotherItem(event, store) {
8571    if (isSelfTarget(event)) return false;
8572    return isItem(store, event.target);
8573  }
8574  var useCompositeItem = createHook(
8575    function useCompositeItem2(_a) {
8576      var _b = _a, {
8577        store,
8578        rowId: rowIdProp,
8579        preventScrollOnKeyDown = false,
8580        moveOnKeyPress = true,
8581        tabbable = false,
8582        getItem: getItemProp,
8583        "aria-setsize": ariaSetSizeProp,
8584        "aria-posinset": ariaPosInSetProp
8585      } = _b, props = __objRest(_b, [
8586        "store",
8587        "rowId",
8588        "preventScrollOnKeyDown",
8589        "moveOnKeyPress",
8590        "tabbable",
8591        "getItem",
8592        "aria-setsize",
8593        "aria-posinset"
8594      ]);
8595      const context = useCompositeContext();
8596      store = store || context;
8597      const id = useId3(props.id);
8598      const ref = (0, import_react16.useRef)(null);
8599      const row = (0, import_react16.useContext)(CompositeRowContext);
8600      const disabled = disabledFromProps(props);
8601      const trulyDisabled = disabled && !props.accessibleWhenDisabled;
8602      const {
8603        rowId,
8604        baseElement,
8605        isActiveItem,
8606        ariaSetSize,
8607        ariaPosInSet,
8608        isTabbable
8609      } = useStoreStateObject(store, {
8610        rowId(state) {
8611          if (rowIdProp) return rowIdProp;
8612          if (!state) return;
8613          if (!(row == null ? void 0 : row.baseElement)) return;
8614          if (row.baseElement !== state.baseElement) return;
8615          return row.id;
8616        },
8617        baseElement(state) {
8618          return (state == null ? void 0 : state.baseElement) || void 0;
8619        },
8620        isActiveItem(state) {
8621          return !!state && state.activeId === id;
8622        },
8623        ariaSetSize(state) {
8624          if (ariaSetSizeProp != null) return ariaSetSizeProp;
8625          if (!state) return;
8626          if (!(row == null ? void 0 : row.ariaSetSize)) return;
8627          if (row.baseElement !== state.baseElement) return;
8628          return row.ariaSetSize;
8629        },
8630        ariaPosInSet(state) {
8631          if (ariaPosInSetProp != null) return ariaPosInSetProp;
8632          if (!state) return;
8633          if (!(row == null ? void 0 : row.ariaPosInSet)) return;
8634          if (row.baseElement !== state.baseElement) return;
8635          const itemsInRow = state.renderedItems.filter(
8636            (item) => item.rowId === rowId
8637          );
8638          return row.ariaPosInSet + itemsInRow.findIndex((item) => item.id === id);
8639        },
8640        isTabbable(state) {
8641          if (!(state == null ? void 0 : state.renderedItems.length)) return true;
8642          if (state.virtualFocus) return false;
8643          if (tabbable) return true;
8644          if (state.activeId === null) return false;
8645          const item = store == null ? void 0 : store.item(state.activeId);
8646          if (item == null ? void 0 : item.disabled) return true;
8647          if (!(item == null ? void 0 : item.element)) return true;
8648          return state.activeId === id;
8649        }
8650      });
8651      const getItem = (0, import_react16.useCallback)(
8652        (item) => {
8653          var _a2;
8654          const nextItem = __spreadProps(__spreadValues({}, item), {
8655            id: id || item.id,
8656            rowId,
8657            disabled: !!trulyDisabled,
8658            children: (_a2 = item.element) == null ? void 0 : _a2.textContent
8659          });
8660          if (getItemProp) {
8661            return getItemProp(nextItem);
8662          }
8663          return nextItem;
8664        },
8665        [id, rowId, trulyDisabled, getItemProp]
8666      );
8667      const onFocusProp = props.onFocus;
8668      const hasFocusedComposite = (0, import_react16.useRef)(false);
8669      const onFocus = useEvent((event) => {
8670        onFocusProp == null ? void 0 : onFocusProp(event);
8671        if (event.defaultPrevented) return;
8672        if (isPortalEvent(event)) return;
8673        if (!id) return;
8674        if (!store) return;
8675        if (targetIsAnotherItem(event, store)) return;
8676        const { virtualFocus, baseElement: baseElement2 } = store.getState();
8677        store.setActiveId(id);
8678        if (isTextbox(event.currentTarget)) {
8679          selectTextField(event.currentTarget);
8680        }
8681        if (!virtualFocus) return;
8682        if (!isSelfTarget(event)) return;
8683        if (isEditableElement(event.currentTarget)) return;
8684        if (!(baseElement2 == null ? void 0 : baseElement2.isConnected)) return;
8685        if (isSafari() && event.currentTarget.hasAttribute("data-autofocus")) {
8686          event.currentTarget.scrollIntoView({
8687            block: "nearest",
8688            inline: "nearest"
8689          });
8690        }
8691        hasFocusedComposite.current = true;
8692        const fromComposite = event.relatedTarget === baseElement2 || isItem(store, event.relatedTarget);
8693        if (fromComposite) {
8694          focusSilently(baseElement2);
8695        } else {
8696          baseElement2.focus();
8697        }
8698      });
8699      const onBlurCaptureProp = props.onBlurCapture;
8700      const onBlurCapture = useEvent((event) => {
8701        onBlurCaptureProp == null ? void 0 : onBlurCaptureProp(event);
8702        if (event.defaultPrevented) return;
8703        const state = store == null ? void 0 : store.getState();
8704        if ((state == null ? void 0 : state.virtualFocus) && hasFocusedComposite.current) {
8705          hasFocusedComposite.current = false;
8706          event.preventDefault();
8707          event.stopPropagation();
8708        }
8709      });
8710      const onKeyDownProp = props.onKeyDown;
8711      const preventScrollOnKeyDownProp = useBooleanEvent(preventScrollOnKeyDown);
8712      const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress);
8713      const onKeyDown = useEvent((event) => {
8714        onKeyDownProp == null ? void 0 : onKeyDownProp(event);
8715        if (event.defaultPrevented) return;
8716        if (!isSelfTarget(event)) return;
8717        if (!store) return;
8718        const { currentTarget } = event;
8719        const state = store.getState();
8720        const item = store.item(id);
8721        const isGrid2 = !!(item == null ? void 0 : item.rowId);
8722        const isVertical = state.orientation !== "horizontal";
8723        const isHorizontal = state.orientation !== "vertical";
8724        const canHomeEnd = () => {
8725          if (isGrid2) return true;
8726          if (isHorizontal) return true;
8727          if (!state.baseElement) return true;
8728          if (!isTextField(state.baseElement)) return true;
8729          return false;
8730        };
8731        const keyMap = {
8732          ArrowUp: (isGrid2 || isVertical) && store.up,
8733          ArrowRight: (isGrid2 || isHorizontal) && store.next,
8734          ArrowDown: (isGrid2 || isVertical) && store.down,
8735          ArrowLeft: (isGrid2 || isHorizontal) && store.previous,
8736          Home: () => {
8737            if (!canHomeEnd()) return;
8738            if (!isGrid2 || event.ctrlKey) {
8739              return store == null ? void 0 : store.first();
8740            }
8741            return store == null ? void 0 : store.previous(-1);
8742          },
8743          End: () => {
8744            if (!canHomeEnd()) return;
8745            if (!isGrid2 || event.ctrlKey) {
8746              return store == null ? void 0 : store.last();
8747            }
8748            return store == null ? void 0 : store.next(-1);
8749          },
8750          PageUp: () => {
8751            return findNextPageItemId(currentTarget, store, store == null ? void 0 : store.up, true);
8752          },
8753          PageDown: () => {
8754            return findNextPageItemId(currentTarget, store, store == null ? void 0 : store.down);
8755          }
8756        };
8757        const action = keyMap[event.key];
8758        if (action) {
8759          if (isTextbox(currentTarget)) {
8760            const selection = getTextboxSelection(currentTarget);
8761            const isLeft = isHorizontal && event.key === "ArrowLeft";
8762            const isRight = isHorizontal && event.key === "ArrowRight";
8763            const isUp = isVertical && event.key === "ArrowUp";
8764            const isDown = isVertical && event.key === "ArrowDown";
8765            if (isRight || isDown) {
8766              const { length: valueLength } = getTextboxValue(currentTarget);
8767              if (selection.end !== valueLength) return;
8768            } else if ((isLeft || isUp) && selection.start !== 0) return;
8769          }
8770          const nextId = action();
8771          if (preventScrollOnKeyDownProp(event) || nextId !== void 0) {
8772            if (!moveOnKeyPressProp(event)) return;
8773            event.preventDefault();
8774            store.move(nextId);
8775          }
8776        }
8777      });
8778      const providerValue = (0, import_react16.useMemo)(
8779        () => ({ id, baseElement }),
8780        [id, baseElement]
8781      );
8782      props = useWrapElement(
8783        props,
8784        (element) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(CompositeItemContext.Provider, { value: providerValue, children: element }),
8785        [providerValue]
8786      );
8787      props = __spreadProps(__spreadValues({
8788        id,
8789        "data-active-item": isActiveItem || void 0
8790      }, props), {
8791        ref: useMergeRefs(ref, props.ref),
8792        tabIndex: isTabbable ? props.tabIndex : -1,
8793        onFocus,
8794        onBlurCapture,
8795        onKeyDown
8796      });
8797      props = useCommand(props);
8798      props = useCollectionItem(__spreadProps(__spreadValues({
8799        store
8800      }, props), {
8801        getItem,
8802        shouldRegisterItem: id ? props.shouldRegisterItem : false
8803      }));
8804      return removeUndefinedValues(__spreadProps(__spreadValues({}, props), {
8805        "aria-setsize": ariaSetSize,
8806        "aria-posinset": ariaPosInSet
8807      }));
8808    }
8809  );
8810  var CompositeItem = memo22(
8811    forwardRef22(function CompositeItem2(props) {
8812      const htmlProps = useCompositeItem(props);
8813      return createElement2(TagName9, htmlProps);
8814    })
8815  );
8816  
8817  // node_modules/@ariakit/react-core/esm/__chunks/ZTDSJLD6.js
8818  var import_react17 = __toESM(require_react(), 1);
8819  var import_jsx_runtime51 = __toESM(require_jsx_runtime(), 1);
8820  var TagName10 = "div";
8821  function isSelected(storeValue, itemValue) {
8822    if (itemValue == null) return;
8823    if (storeValue == null) return false;
8824    if (Array.isArray(storeValue)) {
8825      return storeValue.includes(itemValue);
8826    }
8827    return storeValue === itemValue;
8828  }
8829  function getItemRole(popupRole) {
8830    var _a;
8831    const itemRoleByPopupRole = {
8832      menu: "menuitem",
8833      listbox: "option",
8834      tree: "treeitem"
8835    };
8836    const key = popupRole;
8837    return (_a = itemRoleByPopupRole[key]) != null ? _a : "option";
8838  }
8839  var useComboboxItem = createHook(
8840    function useComboboxItem2(_a) {
8841      var _b = _a, {
8842        store,
8843        value,
8844        hideOnClick,
8845        setValueOnClick,
8846        selectValueOnClick = true,
8847        resetValueOnSelect,
8848        focusOnHover = false,
8849        moveOnKeyPress = true,
8850        getItem: getItemProp
8851      } = _b, props = __objRest(_b, [
8852        "store",
8853        "value",
8854        "hideOnClick",
8855        "setValueOnClick",
8856        "selectValueOnClick",
8857        "resetValueOnSelect",
8858        "focusOnHover",
8859        "moveOnKeyPress",
8860        "getItem"
8861      ]);
8862      var _a2;
8863      const context = useComboboxScopedContext();
8864      store = store || context;
8865      invariant(
8866        store,
8867        "ComboboxItem must be wrapped in a ComboboxList or ComboboxPopover component."
8868      );
8869      const { resetValueOnSelectState, multiSelectable, selected } = useStoreStateObject(store, {
8870        resetValueOnSelectState: "resetValueOnSelect",
8871        multiSelectable(state) {
8872          return Array.isArray(state.selectedValue);
8873        },
8874        selected(state) {
8875          return isSelected(state.selectedValue, value);
8876        }
8877      });
8878      const getItem = (0, import_react17.useCallback)(
8879        (item) => {
8880          const nextItem = __spreadProps(__spreadValues({}, item), { value });
8881          if (getItemProp) {
8882            return getItemProp(nextItem);
8883          }
8884          return nextItem;
8885        },
8886        [value, getItemProp]
8887      );
8888      setValueOnClick = setValueOnClick != null ? setValueOnClick : !multiSelectable;
8889      hideOnClick = hideOnClick != null ? hideOnClick : value != null && !multiSelectable;
8890      const onClickProp = props.onClick;
8891      const setValueOnClickProp = useBooleanEvent(setValueOnClick);
8892      const selectValueOnClickProp = useBooleanEvent(selectValueOnClick);
8893      const resetValueOnSelectProp = useBooleanEvent(
8894        (_a2 = resetValueOnSelect != null ? resetValueOnSelect : resetValueOnSelectState) != null ? _a2 : multiSelectable
8895      );
8896      const hideOnClickProp = useBooleanEvent(hideOnClick);
8897      const onClick = useEvent((event) => {
8898        onClickProp == null ? void 0 : onClickProp(event);
8899        if (event.defaultPrevented) return;
8900        if (isDownloading(event)) return;
8901        if (isOpeningInNewTab(event)) return;
8902        if (value != null) {
8903          if (selectValueOnClickProp(event)) {
8904            if (resetValueOnSelectProp(event)) {
8905              store == null ? void 0 : store.resetValue();
8906            }
8907            store == null ? void 0 : store.setSelectedValue((prevValue) => {
8908              if (!Array.isArray(prevValue)) return value;
8909              if (prevValue.includes(value)) {
8910                return prevValue.filter((v2) => v2 !== value);
8911              }
8912              return [...prevValue, value];
8913            });
8914          }
8915          if (setValueOnClickProp(event)) {
8916            store == null ? void 0 : store.setValue(value);
8917          }
8918        }
8919        if (hideOnClickProp(event)) {
8920          store == null ? void 0 : store.hide();
8921        }
8922      });
8923      const onKeyDownProp = props.onKeyDown;
8924      const onKeyDown = useEvent((event) => {
8925        onKeyDownProp == null ? void 0 : onKeyDownProp(event);
8926        if (event.defaultPrevented) return;
8927        const baseElement = store == null ? void 0 : store.getState().baseElement;
8928        if (!baseElement) return;
8929        if (hasFocus(baseElement)) return;
8930        const printable = event.key.length === 1;
8931        if (printable || event.key === "Backspace" || event.key === "Delete") {
8932          queueMicrotask(() => baseElement.focus());
8933          if (isTextField(baseElement)) {
8934            store == null ? void 0 : store.setValue(baseElement.value);
8935          }
8936        }
8937      });
8938      if (multiSelectable && selected != null) {
8939        props = __spreadValues({
8940          "aria-selected": selected
8941        }, props);
8942      }
8943      props = useWrapElement(
8944        props,
8945        (element) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(ComboboxItemValueContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(ComboboxItemCheckedContext.Provider, { value: selected != null ? selected : false, children: element }) }),
8946        [value, selected]
8947      );
8948      const popupRole = (0, import_react17.useContext)(ComboboxListRoleContext);
8949      props = __spreadProps(__spreadValues({
8950        role: getItemRole(popupRole),
8951        children: value
8952      }, props), {
8953        onClick,
8954        onKeyDown
8955      });
8956      const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress);
8957      props = useCompositeItem(__spreadProps(__spreadValues({
8958        store
8959      }, props), {
8960        getItem,
8961        // Dispatch a custom event on the combobox input when moving to an item
8962        // with the keyboard so the Combobox component can enable inline
8963        // autocompletion.
8964        moveOnKeyPress: (event) => {
8965          if (!moveOnKeyPressProp(event)) return false;
8966          const moveEvent = new Event("combobox-item-move");
8967          const baseElement = store == null ? void 0 : store.getState().baseElement;
8968          baseElement == null ? void 0 : baseElement.dispatchEvent(moveEvent);
8969          return true;
8970        }
8971      }));
8972      props = useCompositeHover(__spreadValues({ store, focusOnHover }, props));
8973      return props;
8974    }
8975  );
8976  var ComboboxItem = memo22(
8977    forwardRef22(function ComboboxItem2(props) {
8978      const htmlProps = useComboboxItem(props);
8979      return createElement2(TagName10, htmlProps);
8980    })
8981  );
8982  
8983  // node_modules/@ariakit/react-core/esm/combobox/combobox-label.js
8984  var TagName11 = "label";
8985  var useComboboxLabel = createHook(
8986    function useComboboxLabel2(_a) {
8987      var _b = _a, { store } = _b, props = __objRest(_b, ["store"]);
8988      const context = useComboboxProviderContext();
8989      store = store || context;
8990      invariant(
8991        store,
8992        "ComboboxLabel must receive a `store` prop or be wrapped in a ComboboxProvider component."
8993      );
8994      const comboboxId = store.useState((state) => {
8995        var _a2;
8996        return (_a2 = state.baseElement) == null ? void 0 : _a2.id;
8997      });
8998      props = __spreadValues({
8999        htmlFor: comboboxId
9000      }, props);
9001      return removeUndefinedValues(props);
9002    }
9003  );
9004  var ComboboxLabel = memo22(
9005    forwardRef22(function ComboboxLabel2(props) {
9006      const htmlProps = useComboboxLabel(props);
9007      return createElement2(TagName11, htmlProps);
9008    })
9009  );
9010  
9011  // node_modules/@ariakit/react-core/esm/__chunks/VGCJ63VH.js
9012  var import_react18 = __toESM(require_react(), 1);
9013  var import_react_dom = __toESM(require_react_dom(), 1);
9014  var import_jsx_runtime52 = __toESM(require_jsx_runtime(), 1);
9015  var TagName12 = "div";
9016  function afterTimeout(timeoutMs, cb) {
9017    const timeoutId = setTimeout(cb, timeoutMs);
9018    return () => clearTimeout(timeoutId);
9019  }
9020  function afterPaint2(cb) {
9021    let raf = requestAnimationFrame(() => {
9022      raf = requestAnimationFrame(cb);
9023    });
9024    return () => cancelAnimationFrame(raf);
9025  }
9026  function parseCSSTime(...times) {
9027    return times.join(", ").split(", ").reduce((longestTime, currentTimeString) => {
9028      const multiplier = currentTimeString.endsWith("ms") ? 1 : 1e3;
9029      const currentTime = Number.parseFloat(currentTimeString || "0s") * multiplier;
9030      if (currentTime > longestTime) return currentTime;
9031      return longestTime;
9032    }, 0);
9033  }
9034  function isHidden(mounted, hidden, alwaysVisible) {
9035    return !alwaysVisible && hidden !== false && (!mounted || !!hidden);
9036  }
9037  var useDisclosureContent = createHook(function useDisclosureContent2(_a) {
9038    var _b = _a, { store, alwaysVisible } = _b, props = __objRest(_b, ["store", "alwaysVisible"]);
9039    const context = useDisclosureProviderContext();
9040    store = store || context;
9041    invariant(
9042      store,
9043      "DisclosureContent must receive a `store` prop or be wrapped in a DisclosureProvider component."
9044    );
9045    const ref = (0, import_react18.useRef)(null);
9046    const id = useId3(props.id);
9047    const [transition, setTransition] = (0, import_react18.useState)(null);
9048    const open = store.useState("open");
9049    const mounted = store.useState("mounted");
9050    const animated = store.useState("animated");
9051    const contentElement = store.useState("contentElement");
9052    const otherElement = useStoreState(store.disclosure, "contentElement");
9053    useSafeLayoutEffect(() => {
9054      if (!ref.current) return;
9055      store == null ? void 0 : store.setContentElement(ref.current);
9056    }, [store]);
9057    useSafeLayoutEffect(() => {
9058      let previousAnimated;
9059      store == null ? void 0 : store.setState("animated", (animated2) => {
9060        previousAnimated = animated2;
9061        return true;
9062      });
9063      return () => {
9064        if (previousAnimated === void 0) return;
9065        store == null ? void 0 : store.setState("animated", previousAnimated);
9066      };
9067    }, [store]);
9068    useSafeLayoutEffect(() => {
9069      if (!animated) return;
9070      if (!(contentElement == null ? void 0 : contentElement.isConnected)) {
9071        setTransition(null);
9072        return;
9073      }
9074      return afterPaint2(() => {
9075        setTransition(open ? "enter" : mounted ? "leave" : null);
9076      });
9077    }, [animated, contentElement, open, mounted]);
9078    useSafeLayoutEffect(() => {
9079      if (!store) return;
9080      if (!animated) return;
9081      if (!transition) return;
9082      if (!contentElement) return;
9083      const stopAnimation = () => store == null ? void 0 : store.setState("animating", false);
9084      const stopAnimationSync = () => (0, import_react_dom.flushSync)(stopAnimation);
9085      if (transition === "leave" && open) return;
9086      if (transition === "enter" && !open) return;
9087      if (typeof animated === "number") {
9088        const timeout2 = animated;
9089        return afterTimeout(timeout2, stopAnimationSync);
9090      }
9091      const {
9092        transitionDuration,
9093        animationDuration,
9094        transitionDelay,
9095        animationDelay
9096      } = getComputedStyle(contentElement);
9097      const {
9098        transitionDuration: transitionDuration2 = "0",
9099        animationDuration: animationDuration2 = "0",
9100        transitionDelay: transitionDelay2 = "0",
9101        animationDelay: animationDelay2 = "0"
9102      } = otherElement ? getComputedStyle(otherElement) : {};
9103      const delay = parseCSSTime(
9104        transitionDelay,
9105        animationDelay,
9106        transitionDelay2,
9107        animationDelay2
9108      );
9109      const duration = parseCSSTime(
9110        transitionDuration,
9111        animationDuration,
9112        transitionDuration2,
9113        animationDuration2
9114      );
9115      const timeout = delay + duration;
9116      if (!timeout) {
9117        if (transition === "enter") {
9118          store.setState("animated", false);
9119        }
9120        stopAnimation();
9121        return;
9122      }
9123      const frameRate = 1e3 / 60;
9124      const maxTimeout = Math.max(timeout - frameRate, 0);
9125      return afterTimeout(maxTimeout, stopAnimationSync);
9126    }, [store, animated, contentElement, otherElement, open, transition]);
9127    props = useWrapElement(
9128      props,
9129      (element) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(DialogScopedContextProvider, { value: store, children: element }),
9130      [store]
9131    );
9132    const hidden = isHidden(mounted, props.hidden, alwaysVisible);
9133    const styleProp = props.style;
9134    const style = (0, import_react18.useMemo)(() => {
9135      if (hidden) {
9136        return __spreadProps(__spreadValues({}, styleProp), { display: "none" });
9137      }
9138      return styleProp;
9139    }, [hidden, styleProp]);
9140    props = __spreadProps(__spreadValues({
9141      id,
9142      "data-open": open || void 0,
9143      "data-enter": transition === "enter" || void 0,
9144      "data-leave": transition === "leave" || void 0,
9145      hidden
9146    }, props), {
9147      ref: useMergeRefs(id ? store.setContentElement : null, ref, props.ref),
9148      style
9149    });
9150    return removeUndefinedValues(props);
9151  });
9152  var DisclosureContentImpl = forwardRef22(function DisclosureContentImpl2(props) {
9153    const htmlProps = useDisclosureContent(props);
9154    return createElement2(TagName12, htmlProps);
9155  });
9156  var DisclosureContent = forwardRef22(function DisclosureContent2(_a) {
9157    var _b = _a, {
9158      unmountOnHide
9159    } = _b, props = __objRest(_b, [
9160      "unmountOnHide"
9161    ]);
9162    const context = useDisclosureProviderContext();
9163    const store = props.store || context;
9164    const mounted = useStoreState(
9165      store,
9166      (state) => !unmountOnHide || (state == null ? void 0 : state.mounted)
9167    );
9168    if (mounted === false) return null;
9169    return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(DisclosureContentImpl, __spreadValues({}, props));
9170  });
9171  
9172  // node_modules/@ariakit/react-core/esm/__chunks/HUWAI7RB.js
9173  var import_react19 = __toESM(require_react(), 1);
9174  var import_jsx_runtime53 = __toESM(require_jsx_runtime(), 1);
9175  var TagName13 = "div";
9176  var useComboboxList = createHook(
9177    function useComboboxList2(_a) {
9178      var _b = _a, { store, alwaysVisible } = _b, props = __objRest(_b, ["store", "alwaysVisible"]);
9179      const scopedContext = useComboboxScopedContext(true);
9180      const context = useComboboxContext();
9181      store = store || context;
9182      const scopedContextSameStore = !!store && store === scopedContext;
9183      invariant(
9184        store,
9185        "ComboboxList must receive a `store` prop or be wrapped in a ComboboxProvider component."
9186      );
9187      const ref = (0, import_react19.useRef)(null);
9188      const id = useId3(props.id);
9189      const mounted = store.useState("mounted");
9190      const hidden = isHidden(mounted, props.hidden, alwaysVisible);
9191      const style = hidden ? __spreadProps(__spreadValues({}, props.style), { display: "none" }) : props.style;
9192      const multiSelectable = store.useState(
9193        (state) => Array.isArray(state.selectedValue)
9194      );
9195      const role = useAttribute(ref, "role", props.role);
9196      const isCompositeRole = role === "listbox" || role === "tree" || role === "grid";
9197      const ariaMultiSelectable = isCompositeRole ? multiSelectable || void 0 : void 0;
9198      const [hasListboxInside, setHasListboxInside] = (0, import_react19.useState)(false);
9199      const contentElement = store.useState("contentElement");
9200      useSafeLayoutEffect(() => {
9201        if (!mounted) return;
9202        const element = ref.current;
9203        if (!element) return;
9204        if (contentElement !== element) return;
9205        const callback = () => {
9206          setHasListboxInside(!!element.querySelector("[role='listbox']"));
9207        };
9208        const observer = new MutationObserver(callback);
9209        observer.observe(element, {
9210          subtree: true,
9211          childList: true,
9212          attributeFilter: ["role"]
9213        });
9214        callback();
9215        return () => observer.disconnect();
9216      }, [mounted, contentElement]);
9217      if (!hasListboxInside) {
9218        props = __spreadValues({
9219          role: "listbox",
9220          "aria-multiselectable": ariaMultiSelectable
9221        }, props);
9222      }
9223      props = useWrapElement(
9224        props,
9225        (element) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(ComboboxScopedContextProvider, { value: store, children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(ComboboxListRoleContext.Provider, { value: role, children: element }) }),
9226        [store, role]
9227      );
9228      const setContentElement = id && (!scopedContext || !scopedContextSameStore) ? store.setContentElement : null;
9229      props = __spreadProps(__spreadValues({
9230        id,
9231        hidden
9232      }, props), {
9233        ref: useMergeRefs(setContentElement, ref, props.ref),
9234        style
9235      });
9236      return removeUndefinedValues(props);
9237    }
9238  );
9239  var ComboboxList = forwardRef22(function ComboboxList2(props) {
9240    const htmlProps = useComboboxList(props);
9241    return createElement2(TagName13, htmlProps);
9242  });
9243  
9244  // packages/dataviews/build-module/components/dataviews-filters/search-widget.js
9245  var import_remove_accents = __toESM(require_remove_accents());
9246  var import_compose7 = __toESM(require_compose());
9247  var import_i18n21 = __toESM(require_i18n());
9248  var import_element23 = __toESM(require_element());
9249  var import_components21 = __toESM(require_components());
9250  
9251  // packages/dataviews/build-module/components/dataviews-filters/utils.js
9252  var EMPTY_ARRAY2 = [];
9253  var getCurrentValue = (filterDefinition, currentFilter) => {
9254    if (filterDefinition.singleSelection) {
9255      return currentFilter?.value;
9256    }
9257    if (Array.isArray(currentFilter?.value)) {
9258      return currentFilter.value;
9259    }
9260    if (!Array.isArray(currentFilter?.value) && !!currentFilter?.value) {
9261      return [currentFilter.value];
9262    }
9263    return EMPTY_ARRAY2;
9264  };
9265  
9266  // packages/dataviews/build-module/hooks/use-elements.js
9267  var import_element22 = __toESM(require_element());
9268  var EMPTY_ARRAY3 = [];
9269  function useElements({
9270    elements,
9271    getElements
9272  }) {
9273    const staticElements = Array.isArray(elements) && elements.length > 0 ? elements : EMPTY_ARRAY3;
9274    const [records, setRecords] = (0, import_element22.useState)(staticElements);
9275    const [isLoading, setIsLoading] = (0, import_element22.useState)(false);
9276    (0, import_element22.useEffect)(() => {
9277      if (!getElements) {
9278        setRecords(staticElements);
9279        return;
9280      }
9281      let cancelled = false;
9282      setIsLoading(true);
9283      getElements().then((fetchedElements) => {
9284        if (!cancelled) {
9285          const dynamicElements = Array.isArray(fetchedElements) && fetchedElements.length > 0 ? fetchedElements : staticElements;
9286          setRecords(dynamicElements);
9287        }
9288      }).catch(() => {
9289        if (!cancelled) {
9290          setRecords(staticElements);
9291        }
9292      }).finally(() => {
9293        if (!cancelled) {
9294          setIsLoading(false);
9295        }
9296      });
9297      return () => {
9298        cancelled = true;
9299      };
9300    }, [getElements, staticElements]);
9301    return {
9302      elements: records,
9303      isLoading
9304    };
9305  }
9306  
9307  // packages/dataviews/build-module/components/dataviews-filters/search-widget.js
9308  var import_jsx_runtime54 = __toESM(require_jsx_runtime());
9309  function normalizeSearchInput(input = "") {
9310    return (0, import_remove_accents.default)(input.trim().toLowerCase());
9311  }
9312  var getNewValue = (filterDefinition, currentFilter, value) => {
9313    if (filterDefinition.singleSelection) {
9314      return value;
9315    }
9316    if (Array.isArray(currentFilter?.value)) {
9317      return currentFilter.value.includes(value) ? currentFilter.value.filter((v2) => v2 !== value) : [...currentFilter.value, value];
9318    }
9319    return [value];
9320  };
9321  function generateFilterElementCompositeItemId(prefix, filterElementValue) {
9322    return `$prefix}-$filterElementValue}`;
9323  }
9324  var MultiSelectionOption = ({ selected }) => {
9325    return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9326      "span",
9327      {
9328        className: clsx_default(
9329          "dataviews-filters__search-widget-listitem-multi-selection",
9330          { "is-selected": selected }
9331        ),
9332        children: selected && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_components21.Icon, { icon: check_default })
9333      }
9334    );
9335  };
9336  var SingleSelectionOption = ({ selected }) => {
9337    return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9338      "span",
9339      {
9340        className: clsx_default(
9341          "dataviews-filters__search-widget-listitem-single-selection",
9342          { "is-selected": selected }
9343        )
9344      }
9345    );
9346  };
9347  function ListBox({ view, filter, onChangeView }) {
9348    const baseId = (0, import_compose7.useInstanceId)(ListBox, "dataviews-filter-list-box");
9349    const [activeCompositeId, setActiveCompositeId] = (0, import_element23.useState)(
9350      // When there are one or less operators, the first item is set as active
9351      // (by setting the initial `activeId` to `undefined`).
9352      // With 2 or more operators, the focus is moved on the operators control
9353      // (by setting the initial `activeId` to `null`), meaning that there won't
9354      // be an active item initially. Focus is then managed via the
9355      // `onFocusVisible` callback.
9356      filter.operators?.length === 1 ? void 0 : null
9357    );
9358    const currentFilter = view.filters?.find(
9359      (f2) => f2.field === filter.field
9360    );
9361    const currentValue = getCurrentValue(filter, currentFilter);
9362    return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9363      import_components21.Composite,
9364      {
9365        virtualFocus: true,
9366        focusLoop: true,
9367        activeId: activeCompositeId,
9368        setActiveId: setActiveCompositeId,
9369        role: "listbox",
9370        className: "dataviews-filters__search-widget-listbox",
9371        "aria-label": (0, import_i18n21.sprintf)(
9372          /* translators: List of items for a filter. 1: Filter name. e.g.: "List of: Author". */
9373          (0, import_i18n21.__)("List of: %1$s"),
9374          filter.name
9375        ),
9376        onFocusVisible: () => {
9377          if (!activeCompositeId && filter.elements.length) {
9378            setActiveCompositeId(
9379              generateFilterElementCompositeItemId(
9380                baseId,
9381                filter.elements[0].value
9382              )
9383            );
9384          }
9385        },
9386        render: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_components21.Composite.Typeahead, {}),
9387        children: filter.elements.map((element) => /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
9388          import_components21.Composite.Hover,
9389          {
9390            render: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9391              import_components21.Composite.Item,
9392              {
9393                id: generateFilterElementCompositeItemId(
9394                  baseId,
9395                  element.value
9396                ),
9397                render: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9398                  "div",
9399                  {
9400                    "aria-label": element.label,
9401                    role: "option",
9402                    className: "dataviews-filters__search-widget-listitem"
9403                  }
9404                ),
9405                onClick: () => {
9406                  const newFilters = currentFilter ? [
9407                    ...(view.filters ?? []).map(
9408                      (_filter) => {
9409                        if (_filter.field === filter.field) {
9410                          return {
9411                            ..._filter,
9412                            operator: currentFilter.operator || filter.operators[0],
9413                            value: getNewValue(
9414                              filter,
9415                              currentFilter,
9416                              element.value
9417                            )
9418                          };
9419                        }
9420                        return _filter;
9421                      }
9422                    )
9423                  ] : [
9424                    ...view.filters ?? [],
9425                    {
9426                      field: filter.field,
9427                      operator: filter.operators[0],
9428                      value: getNewValue(
9429                        filter,
9430                        currentFilter,
9431                        element.value
9432                      )
9433                    }
9434                  ];
9435                  onChangeView({
9436                    ...view,
9437                    page: 1,
9438                    filters: newFilters
9439                  });
9440                }
9441              }
9442            ),
9443            children: [
9444              filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9445                SingleSelectionOption,
9446                {
9447                  selected: currentValue === element.value
9448                }
9449              ),
9450              !filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9451                MultiSelectionOption,
9452                {
9453                  selected: currentValue.includes(element.value)
9454                }
9455              ),
9456              /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { children: element.label })
9457            ]
9458          },
9459          element.value
9460        ))
9461      }
9462    );
9463  }
9464  function ComboboxList22({ view, filter, onChangeView }) {
9465    const [searchValue, setSearchValue] = (0, import_element23.useState)("");
9466    const deferredSearchValue = (0, import_element23.useDeferredValue)(searchValue);
9467    const currentFilter = view.filters?.find(
9468      (_filter) => _filter.field === filter.field
9469    );
9470    const currentValue = getCurrentValue(filter, currentFilter);
9471    const matches = (0, import_element23.useMemo)(() => {
9472      const normalizedSearch = normalizeSearchInput(deferredSearchValue);
9473      return filter.elements.filter(
9474        (item) => normalizeSearchInput(item.label).includes(normalizedSearch)
9475      );
9476    }, [filter.elements, deferredSearchValue]);
9477    return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
9478      ComboboxProvider,
9479      {
9480        selectedValue: currentValue,
9481        setSelectedValue: (value) => {
9482          const newFilters = currentFilter ? [
9483            ...(view.filters ?? []).map((_filter) => {
9484              if (_filter.field === filter.field) {
9485                return {
9486                  ..._filter,
9487                  operator: currentFilter.operator || filter.operators[0],
9488                  value
9489                };
9490              }
9491              return _filter;
9492            })
9493          ] : [
9494            ...view.filters ?? [],
9495            {
9496              field: filter.field,
9497              operator: filter.operators[0],
9498              value
9499            }
9500          ];
9501          onChangeView({
9502            ...view,
9503            page: 1,
9504            filters: newFilters
9505          });
9506        },
9507        setValue: setSearchValue,
9508        children: [
9509          /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "dataviews-filters__search-widget-filter-combobox__wrapper", children: [
9510            /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9511              ComboboxLabel,
9512              {
9513                render: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_components21.VisuallyHidden, { children: (0, import_i18n21.__)("Search items") }),
9514                children: (0, import_i18n21.__)("Search items")
9515              }
9516            ),
9517            /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9518              Combobox,
9519              {
9520                autoSelect: "always",
9521                placeholder: (0, import_i18n21.__)("Search"),
9522                className: "dataviews-filters__search-widget-filter-combobox__input"
9523              }
9524            ),
9525            /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "dataviews-filters__search-widget-filter-combobox__icon", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_components21.Icon, { icon: search_default }) })
9526          ] }),
9527          /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
9528            ComboboxList,
9529            {
9530              className: "dataviews-filters__search-widget-filter-combobox-list",
9531              alwaysVisible: true,
9532              children: [
9533                matches.map((element) => {
9534                  return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
9535                    ComboboxItem,
9536                    {
9537                      resetValueOnSelect: false,
9538                      value: element.value,
9539                      className: "dataviews-filters__search-widget-listitem",
9540                      hideOnClick: false,
9541                      setValueOnClick: false,
9542                      focusOnHover: true,
9543                      children: [
9544                        filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9545                          SingleSelectionOption,
9546                          {
9547                            selected: currentValue === element.value
9548                          }
9549                        ),
9550                        !filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9551                          MultiSelectionOption,
9552                          {
9553                            selected: currentValue.includes(
9554                              element.value
9555                            )
9556                          }
9557                        ),
9558                        /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("span", { children: [
9559                          /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
9560                            ComboboxItemValue,
9561                            {
9562                              className: "dataviews-filters__search-widget-filter-combobox-item-value",
9563                              value: element.label
9564                            }
9565                          ),
9566                          !!element.description && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "dataviews-filters__search-widget-listitem-description", children: element.description })
9567                        ] })
9568                      ]
9569                    },
9570                    element.value
9571                  );
9572                }),
9573                !matches.length && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { children: (0, import_i18n21.__)("No results found") })
9574              ]
9575            }
9576          )
9577        ]
9578      }
9579    );
9580  }
9581  function SearchWidget(props) {
9582    const { elements, isLoading } = useElements({
9583      elements: props.filter.elements,
9584      getElements: props.filter.getElements
9585    });
9586    if (isLoading) {
9587      return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "dataviews-filters__search-widget-no-elements", children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_components21.Spinner, {}) });
9588    }
9589    if (elements.length === 0) {
9590      return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "dataviews-filters__search-widget-no-elements", children: (0, import_i18n21.__)("No elements found") });
9591    }
9592    const Widget = elements.length > 10 ? ComboboxList22 : ListBox;
9593    return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Widget, { ...props, filter: { ...props.filter, elements } });
9594  }
9595  
9596  // packages/dataviews/build-module/components/dataviews-filters/input-widget.js
9597  var import_es6 = __toESM(require_es6());
9598  var import_compose8 = __toESM(require_compose());
9599  var import_element24 = __toESM(require_element());
9600  var import_components22 = __toESM(require_components());
9601  var import_jsx_runtime55 = __toESM(require_jsx_runtime());
9602  function InputWidget({
9603    filter,
9604    view,
9605    onChangeView,
9606    fields
9607  }) {
9608    const currentFilter = view.filters?.find(
9609      (f2) => f2.field === filter.field
9610    );
9611    const currentValue = getCurrentValue(filter, currentFilter);
9612    const field = (0, import_element24.useMemo)(() => {
9613      const currentField = fields.find((f2) => f2.id === filter.field);
9614      if (currentField) {
9615        return {
9616          ...currentField,
9617          // Deactivate validation for filters.
9618          isValid: {},
9619          // Configure getValue/setValue as if Item was a plain object.
9620          getValue: ({ item }) => item[currentField.id],
9621          setValue: ({ value }) => ({
9622            [currentField.id]: value
9623          })
9624        };
9625      }
9626      return currentField;
9627    }, [fields, filter.field]);
9628    const data = (0, import_element24.useMemo)(() => {
9629      return (view.filters ?? []).reduce(
9630        (acc, activeFilter) => {
9631          acc[activeFilter.field] = activeFilter.value;
9632          return acc;
9633        },
9634        {}
9635      );
9636    }, [view.filters]);
9637    const handleChange = (0, import_compose8.useEvent)((updatedData) => {
9638      if (!field || !currentFilter) {
9639        return;
9640      }
9641      const nextValue = field.getValue({ item: updatedData });
9642      if ((0, import_es6.default)(nextValue, currentValue)) {
9643        return;
9644      }
9645      onChangeView({
9646        ...view,
9647        filters: (view.filters ?? []).map(
9648          (_filter) => _filter.field === filter.field ? {
9649            ..._filter,
9650            operator: currentFilter.operator || filter.operators[0],
9651            // Consider empty strings as undefined:
9652            //
9653            // - undefined as value means the filter is unset: the filter widget displays no value and the search returns all records
9654            // - empty string as value means "search empty string": returns only the records that have an empty string as value
9655            //
9656            // In practice, this means the filter will not be able to find an empty string as the value.
9657            value: nextValue === "" ? void 0 : nextValue
9658          } : _filter
9659        )
9660      });
9661    });
9662    if (!field || !field.Edit || !currentFilter) {
9663      return null;
9664    }
9665    return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
9666      import_components22.Flex,
9667      {
9668        className: "dataviews-filters__user-input-widget",
9669        gap: 2.5,
9670        direction: "column",
9671        children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
9672          field.Edit,
9673          {
9674            hideLabelFromVision: true,
9675            data,
9676            field,
9677            operator: currentFilter.operator,
9678            onChange: handleChange
9679          }
9680        )
9681      }
9682    );
9683  }
9684  
9685  // packages/dataviews/build-module/utils/operators.js
9686  var import_i18n22 = __toESM(require_i18n());
9687  var import_element25 = __toESM(require_element());
9688  var import_jsx_runtime56 = __toESM(require_jsx_runtime());
9689  var filterTextWrappers = {
9690    Name: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "dataviews-filters__summary-filter-text-name" }),
9691    Value: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "dataviews-filters__summary-filter-text-value" })
9692  };
9693  var OPERATORS = [
9694    {
9695      name: OPERATOR_IS_ANY,
9696      /* translators: DataViews operator name */
9697      label: (0, import_i18n22.__)("Includes"),
9698      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
9699        (0, import_i18n22.sprintf)(
9700          /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is any: Admin, Editor". */
9701          (0, import_i18n22.__)("<Name>%1$s includes: </Name><Value>%2$s</Value>"),
9702          filter.name,
9703          activeElements.map((element) => element.label).join(", ")
9704        ),
9705        filterTextWrappers
9706      ),
9707      selection: "multi"
9708    },
9709    {
9710      name: OPERATOR_IS_NONE,
9711      /* translators: DataViews operator name */
9712      label: (0, import_i18n22.__)("Is none of"),
9713      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
9714        (0, import_i18n22.sprintf)(
9715          /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is none of: Admin, Editor". */
9716          (0, import_i18n22.__)("<Name>%1$s is none of: </Name><Value>%2$s</Value>"),
9717          filter.name,
9718          activeElements.map((element) => element.label).join(", ")
9719        ),
9720        filterTextWrappers
9721      ),
9722      selection: "multi"
9723    },
9724    {
9725      name: OPERATOR_IS_ALL,
9726      /* translators: DataViews operator name */
9727      label: (0, import_i18n22.__)("Includes all"),
9728      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
9729        (0, import_i18n22.sprintf)(
9730          /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author includes all: Admin, Editor". */
9731          (0, import_i18n22.__)("<Name>%1$s includes all: </Name><Value>%2$s</Value>"),
9732          filter.name,
9733          activeElements.map((element) => element.label).join(", ")
9734        ),
9735        filterTextWrappers
9736      ),
9737      selection: "multi"
9738    },
9739    {
9740      name: OPERATOR_IS_NOT_ALL,
9741      /* translators: DataViews operator name */
9742      label: (0, import_i18n22.__)("Is none of"),
9743      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
9744        (0, import_i18n22.sprintf)(
9745          /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is none of: Admin, Editor". */
9746          (0, import_i18n22.__)("<Name>%1$s is none of: </Name><Value>%2$s</Value>"),
9747          filter.name,
9748          activeElements.map((element) => element.label).join(", ")
9749        ),
9750        filterTextWrappers
9751      ),
9752      selection: "multi"
9753    },
9754    {
9755      name: OPERATOR_BETWEEN,
9756      /* translators: DataViews operator name */
9757      label: (0, import_i18n22.__)("Between (inc)"),
9758      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
9759        (0, import_i18n22.sprintf)(
9760          /* 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". */
9761          (0, import_i18n22.__)(
9762            "<Name>%1$s between (inc): </Name><Value>%2$s and %3$s</Value>"
9763          ),
9764          filter.name,
9765          activeElements[0].label[0],
9766          activeElements[0].label[1]
9767        ),
9768        filterTextWrappers
9769      ),
9770      selection: "custom"
9771    },
9772    {
9773      name: OPERATOR_IN_THE_PAST,
9774      /* translators: DataViews operator name */
9775      label: (0, import_i18n22.__)("In the past"),
9776      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
9777        (0, import_i18n22.sprintf)(
9778          /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is in the past: 7 days". */
9779          (0, import_i18n22.__)(
9780            "<Name>%1$s is in the past: </Name><Value>%2$s</Value>"
9781          ),
9782          filter.name,
9783          `$activeElements[0].value.value} $activeElements[0].value.unit}`
9784        ),
9785        filterTextWrappers
9786      ),
9787      selection: "custom"
9788    },
9789    {
9790      name: OPERATOR_OVER,
9791      /* translators: DataViews operator name */
9792      label: (0, import_i18n22.__)("Over"),
9793      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
9794        (0, import_i18n22.sprintf)(
9795          /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is over: 7 days". */
9796          (0, import_i18n22.__)("<Name>%1$s is over: </Name><Value>%2$s</Value>"),
9797          filter.name,
9798          `$activeElements[0].value.value} $activeElements[0].value.unit}`
9799        ),
9800        filterTextWrappers
9801      ),
9802      selection: "custom"
9803    },
9804    {
9805      name: OPERATOR_IS,
9806      /* translators: DataViews operator name */
9807      label: (0, import_i18n22.__)("Is"),
9808      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
9809        (0, import_i18n22.sprintf)(
9810          /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is: Admin". */
9811          (0, import_i18n22.__)("<Name>%1$s is: </Name><Value>%2$s</Value>"),
9812          filter.name,
9813          activeElements[0].label
9814        ),
9815        filterTextWrappers
9816      ),
9817      selection: "single"
9818    },
9819    {
9820      name: OPERATOR_IS_NOT,
9821      /* translators: DataViews operator name */
9822      label: (0, import_i18n22.__)("Is not"),
9823      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
9824        (0, import_i18n22.sprintf)(
9825          /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is not: Admin". */
9826          (0, import_i18n22.__)("<Name>%1$s is not: </Name><Value>%2$s</Value>"),
9827          filter.name,
9828          activeElements[0].label
9829        ),
9830        filterTextWrappers
9831      ),
9832      selection: "single"
9833    },
9834    {
9835      name: OPERATOR_LESS_THAN,
9836      /* translators: DataViews operator name */
9837      label: (0, import_i18n22.__)("Less than"),
9838      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
9839        (0, import_i18n22.sprintf)(
9840          /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than: 10". */
9841          (0, import_i18n22.__)("<Name>%1$s is less than: </Name><Value>%2$s</Value>"),
9842          filter.name,
9843          activeElements[0].label
9844        ),
9845        filterTextWrappers
9846      ),
9847      selection: "single"
9848    },
9849    {
9850      name: OPERATOR_GREATER_THAN,
9851      /* translators: DataViews operator name */
9852      label: (0, import_i18n22.__)("Greater than"),
9853      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
9854        (0, import_i18n22.sprintf)(
9855          /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than: 10". */
9856          (0, import_i18n22.__)(
9857            "<Name>%1$s is greater than: </Name><Value>%2$s</Value>"
9858          ),
9859          filter.name,
9860          activeElements[0].label
9861        ),
9862        filterTextWrappers
9863      ),
9864      selection: "single"
9865    },
9866    {
9867      name: OPERATOR_LESS_THAN_OR_EQUAL,
9868      /* translators: DataViews operator name */
9869      label: (0, import_i18n22.__)("Less than or equal"),
9870      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
9871        (0, import_i18n22.sprintf)(
9872          /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than or equal to: 10". */
9873          (0, import_i18n22.__)(
9874            "<Name>%1$s is less than or equal to: </Name><Value>%2$s</Value>"
9875          ),
9876          filter.name,
9877          activeElements[0].label
9878        ),
9879        filterTextWrappers
9880      ),
9881      selection: "single"
9882    },
9883    {
9884      name: OPERATOR_GREATER_THAN_OR_EQUAL,
9885      /* translators: DataViews operator name */
9886      label: (0, import_i18n22.__)("Greater than or equal"),
9887      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
9888        (0, import_i18n22.sprintf)(
9889          /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than or equal to: 10". */
9890          (0, import_i18n22.__)(
9891            "<Name>%1$s is greater than or equal to: </Name><Value>%2$s</Value>"
9892          ),
9893          filter.name,
9894          activeElements[0].label
9895        ),
9896        filterTextWrappers
9897      ),
9898      selection: "single"
9899    },
9900    {
9901      name: OPERATOR_BEFORE,
9902      /* translators: DataViews operator name */
9903      label: (0, import_i18n22.__)("Before"),
9904      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
9905        (0, import_i18n22.sprintf)(
9906          /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is before: 2024-01-01". */
9907          (0, import_i18n22.__)("<Name>%1$s is before: </Name><Value>%2$s</Value>"),
9908          filter.name,
9909          activeElements[0].label
9910        ),
9911        filterTextWrappers
9912      ),
9913      selection: "single"
9914    },
9915    {
9916      name: OPERATOR_AFTER,
9917      /* translators: DataViews operator name */
9918      label: (0, import_i18n22.__)("After"),
9919      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
9920        (0, import_i18n22.sprintf)(
9921          /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is after: 2024-01-01". */
9922          (0, import_i18n22.__)("<Name>%1$s is after: </Name><Value>%2$s</Value>"),
9923          filter.name,
9924          activeElements[0].label
9925        ),
9926        filterTextWrappers
9927      ),
9928      selection: "single"
9929    },
9930    {
9931      name: OPERATOR_BEFORE_INC,
9932      /* translators: DataViews operator name */
9933      label: (0, import_i18n22.__)("Before (inc)"),
9934      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
9935        (0, import_i18n22.sprintf)(
9936          /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or before: 2024-01-01". */
9937          (0, import_i18n22.__)(
9938            "<Name>%1$s is on or before: </Name><Value>%2$s</Value>"
9939          ),
9940          filter.name,
9941          activeElements[0].label
9942        ),
9943        filterTextWrappers
9944      ),
9945      selection: "single"
9946    },
9947    {
9948      name: OPERATOR_AFTER_INC,
9949      /* translators: DataViews operator name */
9950      label: (0, import_i18n22.__)("After (inc)"),
9951      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
9952        (0, import_i18n22.sprintf)(
9953          /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or after: 2024-01-01". */
9954          (0, import_i18n22.__)(
9955            "<Name>%1$s is on or after: </Name><Value>%2$s</Value>"
9956          ),
9957          filter.name,
9958          activeElements[0].label
9959        ),
9960        filterTextWrappers
9961      ),
9962      selection: "single"
9963    },
9964    {
9965      name: OPERATOR_CONTAINS,
9966      /* translators: DataViews operator name */
9967      label: (0, import_i18n22.__)("Contains"),
9968      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
9969        (0, import_i18n22.sprintf)(
9970          /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title contains: Hello". */
9971          (0, import_i18n22.__)("<Name>%1$s contains: </Name><Value>%2$s</Value>"),
9972          filter.name,
9973          activeElements[0].label
9974        ),
9975        filterTextWrappers
9976      ),
9977      selection: "single"
9978    },
9979    {
9980      name: OPERATOR_NOT_CONTAINS,
9981      /* translators: DataViews operator name */
9982      label: (0, import_i18n22.__)("Doesn't contain"),
9983      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
9984        (0, import_i18n22.sprintf)(
9985          /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title doesn't contain: Hello". */
9986          (0, import_i18n22.__)(
9987            "<Name>%1$s doesn't contain: </Name><Value>%2$s</Value>"
9988          ),
9989          filter.name,
9990          activeElements[0].label
9991        ),
9992        filterTextWrappers
9993      ),
9994      selection: "single"
9995    },
9996    {
9997      name: OPERATOR_STARTS_WITH,
9998      /* translators: DataViews operator name */
9999      label: (0, import_i18n22.__)("Starts with"),
10000      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10001        (0, import_i18n22.sprintf)(
10002          /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title starts with: Hello". */
10003          (0, import_i18n22.__)("<Name>%1$s starts with: </Name><Value>%2$s</Value>"),
10004          filter.name,
10005          activeElements[0].label
10006        ),
10007        filterTextWrappers
10008      ),
10009      selection: "single"
10010    },
10011    {
10012      name: OPERATOR_ON,
10013      /* translators: DataViews operator name */
10014      label: (0, import_i18n22.__)("On"),
10015      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10016        (0, import_i18n22.sprintf)(
10017          /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is: 2024-01-01". */
10018          (0, import_i18n22.__)("<Name>%1$s is: </Name><Value>%2$s</Value>"),
10019          filter.name,
10020          activeElements[0].label
10021        ),
10022        filterTextWrappers
10023      ),
10024      selection: "single"
10025    },
10026    {
10027      name: OPERATOR_NOT_ON,
10028      /* translators: DataViews operator name */
10029      label: (0, import_i18n22.__)("Not on"),
10030      filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10031        (0, import_i18n22.sprintf)(
10032          /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is not: 2024-01-01". */
10033          (0, import_i18n22.__)("<Name>%1$s is not: </Name><Value>%2$s</Value>"),
10034          filter.name,
10035          activeElements[0].label
10036        ),
10037        filterTextWrappers
10038      ),
10039      selection: "single"
10040    }
10041  ];
10042  var getOperatorByName = (name) => OPERATORS.find((op) => op.name === name);
10043  var getAllOperatorNames = () => OPERATORS.map((op) => op.name);
10044  var isSingleSelectionOperator = (name) => OPERATORS.filter((op) => op.selection === "single").some(
10045    (op) => op.name === name
10046  );
10047  var isRegisteredOperator = (name) => OPERATORS.some((op) => op.name === name);
10048  
10049  // packages/dataviews/build-module/components/dataviews-filters/filter.js
10050  var import_jsx_runtime57 = __toESM(require_jsx_runtime());
10051  var ENTER = "Enter";
10052  var SPACE = " ";
10053  var FilterText = ({
10054    activeElements,
10055    filterInView,
10056    filter
10057  }) => {
10058    if (activeElements === void 0 || activeElements.length === 0) {
10059      return filter.name;
10060    }
10061    const operator = getOperatorByName(filterInView?.operator);
10062    if (operator !== void 0) {
10063      return operator.filterText(filter, activeElements);
10064    }
10065    return (0, import_i18n23.sprintf)(
10066      /* translators: 1: Filter name e.g.: "Unknown status for Author". */
10067      (0, import_i18n23.__)("Unknown status for %1$s"),
10068      filter.name
10069    );
10070  };
10071  function OperatorSelector({
10072    filter,
10073    view,
10074    onChangeView
10075  }) {
10076    const operatorOptions = filter.operators?.map((operator) => ({
10077      value: operator,
10078      label: getOperatorByName(operator)?.label || operator
10079    }));
10080    const currentFilter = view.filters?.find(
10081      (_filter) => _filter.field === filter.field
10082    );
10083    const value = currentFilter?.operator || filter.operators[0];
10084    return operatorOptions.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
10085      import_components23.__experimentalHStack,
10086      {
10087        spacing: 2,
10088        justify: "flex-start",
10089        className: "dataviews-filters__summary-operators-container",
10090        children: [
10091          /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_components23.FlexItem, { className: "dataviews-filters__summary-operators-filter-name", children: filter.name }),
10092          /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10093            import_components23.SelectControl,
10094            {
10095              className: "dataviews-filters__summary-operators-filter-select",
10096              label: (0, import_i18n23.__)("Conditions"),
10097              value,
10098              options: operatorOptions,
10099              onChange: (newValue) => {
10100                const newOperator = newValue;
10101                const currentOperator = currentFilter?.operator;
10102                const newFilters = currentFilter ? [
10103                  ...(view.filters ?? []).map(
10104                    (_filter) => {
10105                      if (_filter.field === filter.field) {
10106                        const currentOpSelectionModel = getOperatorByName(
10107                          currentOperator
10108                        )?.selection;
10109                        const newOpSelectionModel = getOperatorByName(
10110                          newOperator
10111                        )?.selection;
10112                        const shouldResetValue = currentOpSelectionModel !== newOpSelectionModel || [
10113                          currentOpSelectionModel,
10114                          newOpSelectionModel
10115                        ].includes("custom");
10116                        return {
10117                          ..._filter,
10118                          value: shouldResetValue ? void 0 : _filter.value,
10119                          operator: newOperator
10120                        };
10121                      }
10122                      return _filter;
10123                    }
10124                  )
10125                ] : [
10126                  ...view.filters ?? [],
10127                  {
10128                    field: filter.field,
10129                    operator: newOperator,
10130                    value: void 0
10131                  }
10132                ];
10133                onChangeView({
10134                  ...view,
10135                  page: 1,
10136                  filters: newFilters
10137                });
10138              },
10139              size: "small",
10140              variant: "minimal",
10141              hideLabelFromVision: true
10142            }
10143          )
10144        ]
10145      }
10146    );
10147  }
10148  function Filter({
10149    addFilterRef,
10150    openedFilter,
10151    fields,
10152    ...commonProps
10153  }) {
10154    const toggleRef = (0, import_element26.useRef)(null);
10155    const { filter, view, onChangeView } = commonProps;
10156    const filterInView = view.filters?.find(
10157      (f2) => f2.field === filter.field
10158    );
10159    let activeElements = [];
10160    const field = (0, import_element26.useMemo)(() => {
10161      const currentField = fields.find((f2) => f2.id === filter.field);
10162      if (currentField) {
10163        return {
10164          ...currentField,
10165          // Configure getValue as if Item was a plain object.
10166          // See related input-widget.tsx
10167          getValue: ({ item }) => item[currentField.id]
10168        };
10169      }
10170      return currentField;
10171    }, [fields, filter.field]);
10172    const { elements } = useElements({
10173      elements: filter.elements,
10174      getElements: filter.getElements
10175    });
10176    if (elements.length > 0) {
10177      activeElements = elements.filter((element) => {
10178        if (filter.singleSelection) {
10179          return element.value === filterInView?.value;
10180        }
10181        return filterInView?.value?.includes(element.value);
10182      });
10183    } else if (Array.isArray(filterInView?.value)) {
10184      const label = filterInView.value.map((v2) => {
10185        const formattedValue = field?.getValueFormatted({
10186          item: { [field.id]: v2 },
10187          field
10188        });
10189        return formattedValue || String(v2);
10190      });
10191      activeElements = [
10192        {
10193          value: filterInView.value,
10194          // @ts-ignore
10195          label
10196        }
10197      ];
10198    } else if (typeof filterInView?.value === "object") {
10199      activeElements = [
10200        { value: filterInView.value, label: filterInView.value }
10201      ];
10202    } else if (filterInView?.value !== void 0) {
10203      const label = field !== void 0 ? field.getValueFormatted({
10204        item: { [field.id]: filterInView.value },
10205        field
10206      }) : String(filterInView.value);
10207      activeElements = [
10208        {
10209          value: filterInView.value,
10210          label
10211        }
10212      ];
10213    }
10214    const isPrimary = filter.isPrimary;
10215    const isLocked = filterInView?.isLocked;
10216    const hasValues = !isLocked && filterInView?.value !== void 0;
10217    const canResetOrRemove = !isLocked && (!isPrimary || hasValues);
10218    return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10219      import_components23.Dropdown,
10220      {
10221        defaultOpen: openedFilter === filter.field,
10222        contentClassName: "dataviews-filters__summary-popover",
10223        popoverProps: { placement: "bottom-start", role: "dialog" },
10224        onClose: () => {
10225          toggleRef.current?.focus();
10226        },
10227        renderToggle: ({ isOpen, onToggle }) => /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("div", { className: "dataviews-filters__summary-chip-container", children: [
10228          /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10229            import_components23.Tooltip,
10230            {
10231              text: (0, import_i18n23.sprintf)(
10232                /* translators: 1: Filter name. */
10233                (0, import_i18n23.__)("Filter by: %1$s"),
10234                filter.name.toLowerCase()
10235              ),
10236              placement: "top",
10237              children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10238                "div",
10239                {
10240                  className: clsx_default(
10241                    "dataviews-filters__summary-chip",
10242                    {
10243                      "has-reset": canResetOrRemove,
10244                      "has-values": hasValues,
10245                      "is-not-clickable": isLocked
10246                    }
10247                  ),
10248                  role: "button",
10249                  tabIndex: isLocked ? -1 : 0,
10250                  onClick: () => {
10251                    if (!isLocked) {
10252                      onToggle();
10253                    }
10254                  },
10255                  onKeyDown: (event) => {
10256                    if (!isLocked && [ENTER, SPACE].includes(event.key)) {
10257                      onToggle();
10258                      event.preventDefault();
10259                    }
10260                  },
10261                  "aria-disabled": isLocked,
10262                  "aria-pressed": isOpen,
10263                  "aria-expanded": isOpen,
10264                  ref: toggleRef,
10265                  children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10266                    FilterText,
10267                    {
10268                      activeElements,
10269                      filterInView,
10270                      filter
10271                    }
10272                  )
10273                }
10274              )
10275            }
10276          ),
10277          canResetOrRemove && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10278            import_components23.Tooltip,
10279            {
10280              text: isPrimary ? (0, import_i18n23.__)("Reset") : (0, import_i18n23.__)("Remove"),
10281              placement: "top",
10282              children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10283                "button",
10284                {
10285                  className: clsx_default(
10286                    "dataviews-filters__summary-chip-remove",
10287                    { "has-values": hasValues }
10288                  ),
10289                  onClick: () => {
10290                    onChangeView({
10291                      ...view,
10292                      page: 1,
10293                      filters: view.filters?.filter(
10294                        (_filter) => _filter.field !== filter.field
10295                      )
10296                    });
10297                    if (!isPrimary) {
10298                      addFilterRef.current?.focus();
10299                    } else {
10300                      toggleRef.current?.focus();
10301                    }
10302                  },
10303                  children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_components23.Icon, { icon: close_small_default })
10304                }
10305              )
10306            }
10307          )
10308        ] }),
10309        renderContent: () => {
10310          return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_components23.__experimentalVStack, { spacing: 0, justify: "flex-start", children: [
10311            /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(OperatorSelector, { ...commonProps }),
10312            commonProps.filter.hasElements ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
10313              SearchWidget,
10314              {
10315                ...commonProps,
10316                filter: {
10317                  ...commonProps.filter,
10318                  elements
10319                }
10320              }
10321            ) : /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(InputWidget, { ...commonProps, fields })
10322          ] });
10323        }
10324      }
10325    );
10326  }
10327  
10328  // packages/dataviews/build-module/components/dataviews-filters/add-filter.js
10329  var import_components24 = __toESM(require_components());
10330  var import_i18n24 = __toESM(require_i18n());
10331  var import_element27 = __toESM(require_element());
10332  var import_jsx_runtime58 = __toESM(require_jsx_runtime());
10333  var { Menu: Menu4 } = unlock(import_components24.privateApis);
10334  function AddFilterMenu({
10335    filters,
10336    view,
10337    onChangeView,
10338    setOpenedFilter,
10339    triggerProps
10340  }) {
10341    const inactiveFilters = filters.filter((filter) => !filter.isVisible);
10342    return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(Menu4, { children: [
10343      /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Menu4.TriggerButton, { ...triggerProps }),
10344      /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Menu4.Popover, { children: inactiveFilters.map((filter) => {
10345        return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10346          Menu4.Item,
10347          {
10348            onClick: () => {
10349              setOpenedFilter(filter.field);
10350              onChangeView({
10351                ...view,
10352                page: 1,
10353                filters: [
10354                  ...view.filters || [],
10355                  {
10356                    field: filter.field,
10357                    value: void 0,
10358                    operator: filter.operators[0]
10359                  }
10360                ]
10361              });
10362            },
10363            children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Menu4.ItemLabel, { children: filter.name })
10364          },
10365          filter.field
10366        );
10367      }) })
10368    ] });
10369  }
10370  function AddFilter({ filters, view, onChangeView, setOpenedFilter }, ref) {
10371    if (!filters.length || filters.every(({ isPrimary }) => isPrimary)) {
10372      return null;
10373    }
10374    const inactiveFilters = filters.filter((filter) => !filter.isVisible);
10375    return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10376      AddFilterMenu,
10377      {
10378        triggerProps: {
10379          render: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
10380            import_components24.Button,
10381            {
10382              accessibleWhenDisabled: true,
10383              size: "compact",
10384              className: "dataviews-filters-button",
10385              variant: "tertiary",
10386              disabled: !inactiveFilters.length,
10387              ref
10388            }
10389          ),
10390          children: (0, import_i18n24.__)("Add filter")
10391        },
10392        ...{ filters, view, onChangeView, setOpenedFilter }
10393      }
10394    );
10395  }
10396  var add_filter_default = (0, import_element27.forwardRef)(AddFilter);
10397  
10398  // packages/dataviews/build-module/components/dataviews-filters/reset-filters.js
10399  var import_components25 = __toESM(require_components());
10400  var import_i18n25 = __toESM(require_i18n());
10401  var import_jsx_runtime59 = __toESM(require_jsx_runtime());
10402  function ResetFilter({
10403    filters,
10404    view,
10405    onChangeView
10406  }) {
10407    const isPrimary = (field) => filters.some(
10408      (_filter) => _filter.field === field && _filter.isPrimary
10409    );
10410    const isDisabled = !view.search && !view.filters?.some(
10411      (_filter) => !_filter.isLocked && (_filter.value !== void 0 || !isPrimary(_filter.field))
10412    );
10413    return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
10414      import_components25.Button,
10415      {
10416        disabled: isDisabled,
10417        accessibleWhenDisabled: true,
10418        size: "compact",
10419        variant: "tertiary",
10420        className: "dataviews-filters__reset-button",
10421        onClick: () => {
10422          onChangeView({
10423            ...view,
10424            page: 1,
10425            search: "",
10426            filters: view.filters?.filter((f2) => !!f2.isLocked) || []
10427          });
10428        },
10429        children: (0, import_i18n25.__)("Reset")
10430      }
10431    );
10432  }
10433  
10434  // packages/dataviews/build-module/components/dataviews-filters/use-filters.js
10435  var import_element28 = __toESM(require_element());
10436  function useFilters(fields, view) {
10437    return (0, import_element28.useMemo)(() => {
10438      const filters = [];
10439      fields.forEach((field) => {
10440        if (field.filterBy === false || !field.hasElements && !field.Edit) {
10441          return;
10442        }
10443        const operators = field.filterBy.operators;
10444        const isPrimary = !!field.filterBy?.isPrimary;
10445        const isLocked = view.filters?.some(
10446          (f2) => f2.field === field.id && !!f2.isLocked
10447        ) ?? false;
10448        filters.push({
10449          field: field.id,
10450          name: field.label,
10451          elements: field.elements,
10452          getElements: field.getElements,
10453          hasElements: field.hasElements,
10454          singleSelection: operators.some(
10455            (op) => isSingleSelectionOperator(op)
10456          ),
10457          operators,
10458          isVisible: isLocked || isPrimary || !!view.filters?.some(
10459            (f2) => f2.field === field.id && isRegisteredOperator(f2.operator)
10460          ),
10461          isPrimary,
10462          isLocked
10463        });
10464      });
10465      filters.sort((a2, b2) => {
10466        if (a2.isLocked && !b2.isLocked) {
10467          return -1;
10468        }
10469        if (!a2.isLocked && b2.isLocked) {
10470          return 1;
10471        }
10472        if (a2.isPrimary && !b2.isPrimary) {
10473          return -1;
10474        }
10475        if (!a2.isPrimary && b2.isPrimary) {
10476          return 1;
10477        }
10478        return a2.name.localeCompare(b2.name);
10479      });
10480      return filters;
10481    }, [fields, view]);
10482  }
10483  var use_filters_default = useFilters;
10484  
10485  // packages/dataviews/build-module/components/dataviews-filters/filters.js
10486  var import_jsx_runtime60 = __toESM(require_jsx_runtime());
10487  function Filters({ className }) {
10488    const { fields, view, onChangeView, openedFilter, setOpenedFilter } = (0, import_element29.useContext)(dataviews_context_default);
10489    const addFilterRef = (0, import_element29.useRef)(null);
10490    const filters = use_filters_default(fields, view);
10491    const addFilter = /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
10492      add_filter_default,
10493      {
10494        filters,
10495        view,
10496        onChangeView,
10497        ref: addFilterRef,
10498        setOpenedFilter
10499      },
10500      "add-filter"
10501    );
10502    const visibleFilters = filters.filter((filter) => filter.isVisible);
10503    if (visibleFilters.length === 0) {
10504      return null;
10505    }
10506    const filterComponents = [
10507      ...visibleFilters.map((filter) => {
10508        return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
10509          Filter,
10510          {
10511            filter,
10512            view,
10513            fields,
10514            onChangeView,
10515            addFilterRef,
10516            openedFilter
10517          },
10518          filter.field
10519        );
10520      }),
10521      addFilter
10522    ];
10523    filterComponents.push(
10524      /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
10525        ResetFilter,
10526        {
10527          filters,
10528          view,
10529          onChangeView
10530        },
10531        "reset-filters"
10532      )
10533    );
10534    return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
10535      import_components26.__experimentalHStack,
10536      {
10537        justify: "flex-start",
10538        style: { width: "fit-content" },
10539        wrap: true,
10540        className,
10541        children: filterComponents
10542      }
10543    );
10544  }
10545  var filters_default = (0, import_element29.memo)(Filters);
10546  
10547  // packages/dataviews/build-module/components/dataviews-filters/toggle.js
10548  var import_element30 = __toESM(require_element());
10549  var import_components27 = __toESM(require_components());
10550  var import_i18n26 = __toESM(require_i18n());
10551  var import_jsx_runtime61 = __toESM(require_jsx_runtime());
10552  function FiltersToggle() {
10553    const {
10554      filters,
10555      view,
10556      onChangeView,
10557      setOpenedFilter,
10558      isShowingFilter,
10559      setIsShowingFilter
10560    } = (0, import_element30.useContext)(dataviews_context_default);
10561    const buttonRef = (0, import_element30.useRef)(null);
10562    const onChangeViewWithFilterVisibility = (0, import_element30.useCallback)(
10563      (_view) => {
10564        onChangeView(_view);
10565        setIsShowingFilter(true);
10566      },
10567      [onChangeView, setIsShowingFilter]
10568    );
10569    const visibleFilters = filters.filter((filter) => filter.isVisible);
10570    const hasVisibleFilters = !!visibleFilters.length;
10571    if (filters.length === 0) {
10572      return null;
10573    }
10574    const addFilterButtonProps = {
10575      label: (0, import_i18n26.__)("Add filter"),
10576      "aria-expanded": false,
10577      isPressed: false
10578    };
10579    const toggleFiltersButtonProps = {
10580      label: (0, import_i18n26._x)("Filter", "verb"),
10581      "aria-expanded": isShowingFilter,
10582      isPressed: isShowingFilter,
10583      onClick: () => {
10584        if (!isShowingFilter) {
10585          setOpenedFilter(null);
10586        }
10587        setIsShowingFilter(!isShowingFilter);
10588      }
10589    };
10590    const buttonComponent = /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
10591      import_components27.Button,
10592      {
10593        ref: buttonRef,
10594        className: "dataviews-filters__visibility-toggle",
10595        size: "compact",
10596        icon: funnel_default,
10597        ...hasVisibleFilters ? toggleFiltersButtonProps : addFilterButtonProps
10598      }
10599    );
10600    return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "dataviews-filters__container-visibility-toggle", children: !hasVisibleFilters ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
10601      AddFilterMenu,
10602      {
10603        filters,
10604        view,
10605        onChangeView: onChangeViewWithFilterVisibility,
10606        setOpenedFilter,
10607        triggerProps: { render: buttonComponent }
10608      }
10609    ) : /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
10610      FilterVisibilityToggle,
10611      {
10612        buttonRef,
10613        filtersCount: view.filters?.length,
10614        children: buttonComponent
10615      }
10616    ) });
10617  }
10618  function FilterVisibilityToggle({
10619    buttonRef,
10620    filtersCount,
10621    children
10622  }) {
10623    (0, import_element30.useEffect)(
10624      () => () => {
10625        buttonRef.current?.focus();
10626      },
10627      [buttonRef]
10628    );
10629    return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
10630      children,
10631      !!filtersCount && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "dataviews-filters-toggle__count", children: filtersCount })
10632    ] });
10633  }
10634  var toggle_default = FiltersToggle;
10635  
10636  // packages/dataviews/build-module/components/dataviews-filters/filters-toggled.js
10637  var import_element31 = __toESM(require_element());
10638  var import_jsx_runtime62 = __toESM(require_jsx_runtime());
10639  function FiltersToggled(props) {
10640    const { isShowingFilter } = (0, import_element31.useContext)(dataviews_context_default);
10641    if (!isShowingFilter) {
10642      return null;
10643    }
10644    return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(filters_default, { ...props });
10645  }
10646  var filters_toggled_default = FiltersToggled;
10647  
10648  // packages/dataviews/build-module/components/dataviews-layout/index.js
10649  var import_element32 = __toESM(require_element());
10650  var import_i18n27 = __toESM(require_i18n());
10651  var import_jsx_runtime63 = __toESM(require_jsx_runtime());
10652  function DataViewsLayout({ className }) {
10653    const {
10654      actions = [],
10655      data,
10656      fields,
10657      getItemId,
10658      getItemLevel,
10659      isLoading,
10660      view,
10661      onChangeView,
10662      selection,
10663      onChangeSelection,
10664      setOpenedFilter,
10665      onClickItem,
10666      isItemClickable,
10667      renderItemLink,
10668      defaultLayouts,
10669      empty = /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { children: (0, import_i18n27.__)("No results") })
10670    } = (0, import_element32.useContext)(dataviews_context_default);
10671    const ViewComponent = VIEW_LAYOUTS.find(
10672      (v2) => v2.type === view.type && defaultLayouts[v2.type]
10673    )?.component;
10674    return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
10675      ViewComponent,
10676      {
10677        className,
10678        actions,
10679        data,
10680        fields,
10681        getItemId,
10682        getItemLevel,
10683        isLoading,
10684        onChangeView,
10685        onChangeSelection,
10686        selection,
10687        setOpenedFilter,
10688        onClickItem,
10689        renderItemLink,
10690        isItemClickable,
10691        view,
10692        empty
10693      }
10694    );
10695  }
10696  
10697  // packages/dataviews/build-module/components/dataviews-footer/index.js
10698  var import_components28 = __toESM(require_components());
10699  var import_element33 = __toESM(require_element());
10700  var import_jsx_runtime64 = __toESM(require_jsx_runtime());
10701  var EMPTY_ARRAY4 = [];
10702  function DataViewsFooter() {
10703    const {
10704      view,
10705      paginationInfo: { totalItems = 0, totalPages },
10706      data,
10707      actions = EMPTY_ARRAY4
10708    } = (0, import_element33.useContext)(dataviews_context_default);
10709    const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data) && [LAYOUT_TABLE, LAYOUT_GRID].includes(view.type);
10710    if (!totalItems || !totalPages || totalPages <= 1 && !hasBulkActions) {
10711      return null;
10712    }
10713    return !!totalItems && /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(
10714      import_components28.__experimentalHStack,
10715      {
10716        expanded: false,
10717        justify: "end",
10718        className: "dataviews-footer",
10719        children: [
10720          hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(BulkActionsFooter, {}),
10721          /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(dataviews_pagination_default, {})
10722        ]
10723      }
10724    );
10725  }
10726  
10727  // packages/dataviews/build-module/components/dataviews-search/index.js
10728  var import_i18n28 = __toESM(require_i18n());
10729  var import_element34 = __toESM(require_element());
10730  var import_components29 = __toESM(require_components());
10731  var import_compose9 = __toESM(require_compose());
10732  var import_jsx_runtime65 = __toESM(require_jsx_runtime());
10733  var DataViewsSearch = (0, import_element34.memo)(function Search({ label }) {
10734    const { view, onChangeView } = (0, import_element34.useContext)(dataviews_context_default);
10735    const [search, setSearch, debouncedSearch] = (0, import_compose9.useDebouncedInput)(
10736      view.search
10737    );
10738    (0, import_element34.useEffect)(() => {
10739      setSearch(view.search ?? "");
10740    }, [view.search, setSearch]);
10741    const onChangeViewRef = (0, import_element34.useRef)(onChangeView);
10742    const viewRef = (0, import_element34.useRef)(view);
10743    (0, import_element34.useEffect)(() => {
10744      onChangeViewRef.current = onChangeView;
10745      viewRef.current = view;
10746    }, [onChangeView, view]);
10747    (0, import_element34.useEffect)(() => {
10748      if (debouncedSearch !== viewRef.current?.search) {
10749        onChangeViewRef.current({
10750          ...viewRef.current,
10751          page: 1,
10752          search: debouncedSearch
10753        });
10754      }
10755    }, [debouncedSearch]);
10756    const searchLabel = label || (0, import_i18n28.__)("Search");
10757    return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
10758      import_components29.SearchControl,
10759      {
10760        className: "dataviews-search",
10761        onChange: setSearch,
10762        value: search,
10763        label: searchLabel,
10764        placeholder: searchLabel,
10765        size: "compact"
10766      }
10767    );
10768  });
10769  var dataviews_search_default = DataViewsSearch;
10770  
10771  // packages/dataviews/build-module/components/dataviews-view-config/index.js
10772  var import_components31 = __toESM(require_components());
10773  var import_i18n30 = __toESM(require_i18n());
10774  var import_element36 = __toESM(require_element());
10775  var import_warning = __toESM(require_warning());
10776  var import_compose10 = __toESM(require_compose());
10777  
10778  // packages/dataviews/build-module/components/dataviews-view-config/infinite-scroll-toggle.js
10779  var import_components30 = __toESM(require_components());
10780  var import_i18n29 = __toESM(require_i18n());
10781  var import_element35 = __toESM(require_element());
10782  var import_jsx_runtime66 = __toESM(require_jsx_runtime());
10783  function InfiniteScrollToggle() {
10784    const context = (0, import_element35.useContext)(dataviews_context_default);
10785    const { view, onChangeView } = context;
10786    const infiniteScrollEnabled = view.infiniteScrollEnabled ?? false;
10787    if (!context.hasInfiniteScrollHandler) {
10788      return null;
10789    }
10790    return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
10791      import_components30.ToggleControl,
10792      {
10793        label: (0, import_i18n29.__)("Enable infinite scroll"),
10794        help: (0, import_i18n29.__)(
10795          "Automatically load more content as you scroll, instead of showing pagination links."
10796        ),
10797        checked: infiniteScrollEnabled,
10798        onChange: (newValue) => {
10799          onChangeView({
10800            ...view,
10801            infiniteScrollEnabled: newValue
10802          });
10803        }
10804      }
10805    );
10806  }
10807  
10808  // packages/dataviews/build-module/components/dataviews-view-config/index.js
10809  var import_jsx_runtime67 = __toESM(require_jsx_runtime());
10810  var { Menu: Menu5 } = unlock(import_components31.privateApis);
10811  var DATAVIEWS_CONFIG_POPOVER_PROPS = {
10812    className: "dataviews-config__popover",
10813    placement: "bottom-end",
10814    offset: 9
10815  };
10816  function ViewTypeMenu() {
10817    const { view, onChangeView, defaultLayouts } = (0, import_element36.useContext)(dataviews_context_default);
10818    const availableLayouts = Object.keys(defaultLayouts);
10819    if (availableLayouts.length <= 1) {
10820      return null;
10821    }
10822    const activeView = VIEW_LAYOUTS.find((v2) => view.type === v2.type);
10823    return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(Menu5, { children: [
10824      /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
10825        Menu5.TriggerButton,
10826        {
10827          render: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
10828            import_components31.Button,
10829            {
10830              size: "compact",
10831              icon: activeView?.icon,
10832              label: (0, import_i18n30.__)("Layout")
10833            }
10834          )
10835        }
10836      ),
10837      /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Menu5.Popover, { children: availableLayouts.map((layout) => {
10838        const config = VIEW_LAYOUTS.find(
10839          (v2) => v2.type === layout
10840        );
10841        if (!config) {
10842          return null;
10843        }
10844        return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
10845          Menu5.RadioItem,
10846          {
10847            value: layout,
10848            name: "view-actions-available-view",
10849            checked: layout === view.type,
10850            hideOnClick: true,
10851            onChange: (e2) => {
10852              switch (e2.target.value) {
10853                case "list":
10854                case "grid":
10855                case "table":
10856                case "pickerGrid":
10857                case "pickerTable":
10858                case "activity":
10859                  const viewWithoutLayout = { ...view };
10860                  if ("layout" in viewWithoutLayout) {
10861                    delete viewWithoutLayout.layout;
10862                  }
10863                  return onChangeView({
10864                    ...viewWithoutLayout,
10865                    type: e2.target.value,
10866                    ...defaultLayouts[e2.target.value]
10867                  });
10868              }
10869              (0, import_warning.default)("Invalid dataview");
10870            },
10871            children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(Menu5.ItemLabel, { children: config.label })
10872          },
10873          layout
10874        );
10875      }) })
10876    ] });
10877  }
10878  function SortFieldControl() {
10879    const { view, fields, onChangeView } = (0, import_element36.useContext)(dataviews_context_default);
10880    const orderOptions = (0, import_element36.useMemo)(() => {
10881      const sortableFields = fields.filter(
10882        (field) => field.enableSorting !== false
10883      );
10884      return sortableFields.map((field) => {
10885        return {
10886          label: field.label,
10887          value: field.id
10888        };
10889      });
10890    }, [fields]);
10891    return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
10892      import_components31.SelectControl,
10893      {
10894        __next40pxDefaultSize: true,
10895        label: (0, import_i18n30.__)("Sort by"),
10896        value: view.sort?.field,
10897        options: orderOptions,
10898        onChange: (value) => {
10899          onChangeView({
10900            ...view,
10901            sort: {
10902              direction: view?.sort?.direction || "desc",
10903              field: value
10904            },
10905            showLevels: false
10906          });
10907        }
10908      }
10909    );
10910  }
10911  function SortDirectionControl() {
10912    const { view, fields, onChangeView } = (0, import_element36.useContext)(dataviews_context_default);
10913    const sortableFields = fields.filter(
10914      (field) => field.enableSorting !== false
10915    );
10916    if (sortableFields.length === 0) {
10917      return null;
10918    }
10919    let value = view.sort?.direction;
10920    if (!value && view.sort?.field) {
10921      value = "desc";
10922    }
10923    return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
10924      import_components31.__experimentalToggleGroupControl,
10925      {
10926        className: "dataviews-view-config__sort-direction",
10927        __next40pxDefaultSize: true,
10928        isBlock: true,
10929        label: (0, import_i18n30.__)("Order"),
10930        value,
10931        onChange: (newDirection) => {
10932          if (newDirection === "asc" || newDirection === "desc") {
10933            onChangeView({
10934              ...view,
10935              sort: {
10936                direction: newDirection,
10937                field: view.sort?.field || // If there is no field assigned as the sorting field assign the first sortable field.
10938                fields.find(
10939                  (field) => field.enableSorting !== false
10940                )?.id || ""
10941              },
10942              showLevels: false
10943            });
10944            return;
10945          }
10946          (0, import_warning.default)("Invalid direction");
10947        },
10948        children: SORTING_DIRECTIONS.map((direction) => {
10949          return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
10950            import_components31.__experimentalToggleGroupControlOptionIcon,
10951            {
10952              value: direction,
10953              icon: sortIcons[direction],
10954              label: sortLabels[direction]
10955            },
10956            direction
10957          );
10958        })
10959      }
10960    );
10961  }
10962  function ItemsPerPageControl() {
10963    const { view, config, onChangeView } = (0, import_element36.useContext)(dataviews_context_default);
10964    const { infiniteScrollEnabled } = view;
10965    if (!config || !config.perPageSizes || config.perPageSizes.length < 2 || config.perPageSizes.length > 6 || infiniteScrollEnabled) {
10966      return null;
10967    }
10968    return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
10969      import_components31.__experimentalToggleGroupControl,
10970      {
10971        __next40pxDefaultSize: true,
10972        isBlock: true,
10973        label: (0, import_i18n30.__)("Items per page"),
10974        value: view.perPage || 10,
10975        disabled: !view?.sort?.field,
10976        onChange: (newItemsPerPage) => {
10977          const newItemsPerPageNumber = typeof newItemsPerPage === "number" || newItemsPerPage === void 0 ? newItemsPerPage : parseInt(newItemsPerPage, 10);
10978          onChangeView({
10979            ...view,
10980            perPage: newItemsPerPageNumber,
10981            page: 1
10982          });
10983        },
10984        children: config.perPageSizes.map((value) => {
10985          return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
10986            import_components31.__experimentalToggleGroupControlOption,
10987            {
10988              value,
10989              label: value.toString()
10990            },
10991            value
10992          );
10993        })
10994      }
10995    );
10996  }
10997  function SettingsSection({
10998    title,
10999    description,
11000    children
11001  }) {
11002    return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_components31.__experimentalGrid, { columns: 12, className: "dataviews-settings-section", gap: 4, children: [
11003      /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "dataviews-settings-section__sidebar", children: [
11004        /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
11005          import_components31.__experimentalHeading,
11006          {
11007            level: 2,
11008            className: "dataviews-settings-section__title",
11009            children: title
11010          }
11011        ),
11012        description && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
11013          import_components31.__experimentalText,
11014          {
11015            variant: "muted",
11016            className: "dataviews-settings-section__description",
11017            children: description
11018          }
11019        )
11020      ] }),
11021      /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
11022        import_components31.__experimentalGrid,
11023        {
11024          columns: 8,
11025          gap: 4,
11026          className: "dataviews-settings-section__content",
11027          children
11028        }
11029      )
11030    ] });
11031  }
11032  function DataviewsViewConfigDropdown() {
11033    const { view } = (0, import_element36.useContext)(dataviews_context_default);
11034    const popoverId = (0, import_compose10.useInstanceId)(
11035      _DataViewsViewConfig,
11036      "dataviews-view-config-dropdown"
11037    );
11038    const activeLayout = VIEW_LAYOUTS.find(
11039      (layout) => layout.type === view.type
11040    );
11041    return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
11042      import_components31.Dropdown,
11043      {
11044        expandOnMobile: true,
11045        popoverProps: {
11046          ...DATAVIEWS_CONFIG_POPOVER_PROPS,
11047          id: popoverId
11048        },
11049        renderToggle: ({ onToggle, isOpen }) => {
11050          return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
11051            import_components31.Button,
11052            {
11053              size: "compact",
11054              icon: cog_default,
11055              label: (0, import_i18n30._x)("View options", "View is used as a noun"),
11056              onClick: onToggle,
11057              "aria-expanded": isOpen ? "true" : "false",
11058              "aria-controls": popoverId
11059            }
11060          );
11061        },
11062        renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
11063          import_components31.__experimentalDropdownContentWrapper,
11064          {
11065            paddingSize: "medium",
11066            className: "dataviews-config__popover-content-wrapper",
11067            children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(import_components31.__experimentalVStack, { className: "dataviews-view-config", spacing: 6, children: /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(SettingsSection, { title: (0, import_i18n30.__)("Appearance"), children: [
11068              /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_components31.__experimentalHStack, { expanded: true, className: "is-divided-in-two", children: [
11069                /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(SortFieldControl, {}),
11070                /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(SortDirectionControl, {})
11071              ] }),
11072              !!activeLayout?.viewConfigOptions && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(activeLayout.viewConfigOptions, {}),
11073              /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(InfiniteScrollToggle, {}),
11074              /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(ItemsPerPageControl, {}),
11075              /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(PropertiesSection, {})
11076            ] }) })
11077          }
11078        )
11079      }
11080    );
11081  }
11082  function _DataViewsViewConfig() {
11083    return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
11084      /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(ViewTypeMenu, {}),
11085      /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(DataviewsViewConfigDropdown, {})
11086    ] });
11087  }
11088  var DataViewsViewConfig = (0, import_element36.memo)(_DataViewsViewConfig);
11089  var dataviews_view_config_default = DataViewsViewConfig;
11090  
11091  // packages/dataviews/build-module/dataform-controls/checkbox.js
11092  var import_components32 = __toESM(require_components());
11093  var import_element37 = __toESM(require_element());
11094  
11095  // packages/dataviews/build-module/dataform-controls/utils/get-custom-validity.js
11096  function getCustomValidity(isValid2, validity) {
11097    let customValidity;
11098    if (isValid2?.required && validity?.required) {
11099      customValidity = validity?.required?.message ? validity.required : void 0;
11100    } else if (isValid2?.pattern && validity?.pattern) {
11101      customValidity = validity.pattern;
11102    } else if (isValid2?.min && validity?.min) {
11103      customValidity = validity.min;
11104    } else if (isValid2?.max && validity?.max) {
11105      customValidity = validity.max;
11106    } else if (isValid2?.minLength && validity?.minLength) {
11107      customValidity = validity.minLength;
11108    } else if (isValid2?.maxLength && validity?.maxLength) {
11109      customValidity = validity.maxLength;
11110    } else if (isValid2?.elements && validity?.elements) {
11111      customValidity = validity.elements;
11112    } else if (validity?.custom) {
11113      customValidity = validity.custom;
11114    }
11115    return customValidity;
11116  }
11117  
11118  // packages/dataviews/build-module/dataform-controls/checkbox.js
11119  var import_jsx_runtime68 = __toESM(require_jsx_runtime());
11120  var { ValidatedCheckboxControl } = unlock(import_components32.privateApis);
11121  function Checkbox({
11122    field,
11123    onChange,
11124    data,
11125    hideLabelFromVision,
11126    validity
11127  }) {
11128    const { getValue, setValue, label, description, isValid: isValid2 } = field;
11129    const onChangeControl = (0, import_element37.useCallback)(() => {
11130      onChange(
11131        setValue({ item: data, value: !getValue({ item: data }) })
11132      );
11133    }, [data, getValue, onChange, setValue]);
11134    return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
11135      ValidatedCheckboxControl,
11136      {
11137        required: !!field.isValid?.required,
11138        customValidity: getCustomValidity(isValid2, validity),
11139        hidden: hideLabelFromVision,
11140        label,
11141        help: description,
11142        checked: getValue({ item: data }),
11143        onChange: onChangeControl
11144      }
11145    );
11146  }
11147  
11148  // packages/dataviews/node_modules/date-fns/constants.js
11149  var daysInYear = 365.2425;
11150  var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1e3;
11151  var minTime = -maxTime;
11152  var millisecondsInWeek = 6048e5;
11153  var millisecondsInDay = 864e5;
11154  var secondsInHour = 3600;
11155  var secondsInDay = secondsInHour * 24;
11156  var secondsInWeek = secondsInDay * 7;
11157  var secondsInYear = secondsInDay * daysInYear;
11158  var secondsInMonth = secondsInYear / 12;
11159  var secondsInQuarter = secondsInMonth * 3;
11160  var constructFromSymbol = Symbol.for("constructDateFrom");
11161  
11162  // packages/dataviews/node_modules/date-fns/constructFrom.js
11163  function constructFrom(date, value) {
11164    if (typeof date === "function") return date(value);
11165    if (date && typeof date === "object" && constructFromSymbol in date)
11166      return date[constructFromSymbol](value);
11167    if (date instanceof Date) return new date.constructor(value);
11168    return new Date(value);
11169  }
11170  
11171  // packages/dataviews/node_modules/date-fns/toDate.js
11172  function toDate(argument, context) {
11173    return constructFrom(context || argument, argument);
11174  }
11175  
11176  // packages/dataviews/node_modules/date-fns/addDays.js
11177  function addDays(date, amount, options) {
11178    const _date = toDate(date, options?.in);
11179    if (isNaN(amount)) return constructFrom(options?.in || date, NaN);
11180    if (!amount) return _date;
11181    _date.setDate(_date.getDate() + amount);
11182    return _date;
11183  }
11184  
11185  // packages/dataviews/node_modules/date-fns/addMonths.js
11186  function addMonths(date, amount, options) {
11187    const _date = toDate(date, options?.in);
11188    if (isNaN(amount)) return constructFrom(options?.in || date, NaN);
11189    if (!amount) {
11190      return _date;
11191    }
11192    const dayOfMonth = _date.getDate();
11193    const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime());
11194    endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);
11195    const daysInMonth = endOfDesiredMonth.getDate();
11196    if (dayOfMonth >= daysInMonth) {
11197      return endOfDesiredMonth;
11198    } else {
11199      _date.setFullYear(
11200        endOfDesiredMonth.getFullYear(),
11201        endOfDesiredMonth.getMonth(),
11202        dayOfMonth
11203      );
11204      return _date;
11205    }
11206  }
11207  
11208  // packages/dataviews/node_modules/date-fns/_lib/defaultOptions.js
11209  var defaultOptions = {};
11210  function getDefaultOptions() {
11211    return defaultOptions;
11212  }
11213  
11214  // packages/dataviews/node_modules/date-fns/startOfWeek.js
11215  function startOfWeek(date, options) {
11216    const defaultOptions2 = getDefaultOptions();
11217    const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0;
11218    const _date = toDate(date, options?.in);
11219    const day = _date.getDay();
11220    const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;
11221    _date.setDate(_date.getDate() - diff);
11222    _date.setHours(0, 0, 0, 0);
11223    return _date;
11224  }
11225  
11226  // packages/dataviews/node_modules/date-fns/startOfISOWeek.js
11227  function startOfISOWeek(date, options) {
11228    return startOfWeek(date, { ...options, weekStartsOn: 1 });
11229  }
11230  
11231  // packages/dataviews/node_modules/date-fns/getISOWeekYear.js
11232  function getISOWeekYear(date, options) {
11233    const _date = toDate(date, options?.in);
11234    const year = _date.getFullYear();
11235    const fourthOfJanuaryOfNextYear = constructFrom(_date, 0);
11236    fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);
11237    fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);
11238    const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);
11239    const fourthOfJanuaryOfThisYear = constructFrom(_date, 0);
11240    fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);
11241    fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);
11242    const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);
11243    if (_date.getTime() >= startOfNextYear.getTime()) {
11244      return year + 1;
11245    } else if (_date.getTime() >= startOfThisYear.getTime()) {
11246      return year;
11247    } else {
11248      return year - 1;
11249    }
11250  }
11251  
11252  // packages/dataviews/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js
11253  function getTimezoneOffsetInMilliseconds(date) {
11254    const _date = toDate(date);
11255    const utcDate = new Date(
11256      Date.UTC(
11257        _date.getFullYear(),
11258        _date.getMonth(),
11259        _date.getDate(),
11260        _date.getHours(),
11261        _date.getMinutes(),
11262        _date.getSeconds(),
11263        _date.getMilliseconds()
11264      )
11265    );
11266    utcDate.setUTCFullYear(_date.getFullYear());
11267    return +date - +utcDate;
11268  }
11269  
11270  // packages/dataviews/node_modules/date-fns/_lib/normalizeDates.js
11271  function normalizeDates(context, ...dates) {
11272    const normalize = constructFrom.bind(
11273      null,
11274      context || dates.find((date) => typeof date === "object")
11275    );
11276    return dates.map(normalize);
11277  }
11278  
11279  // packages/dataviews/node_modules/date-fns/startOfDay.js
11280  function startOfDay(date, options) {
11281    const _date = toDate(date, options?.in);
11282    _date.setHours(0, 0, 0, 0);
11283    return _date;
11284  }
11285  
11286  // packages/dataviews/node_modules/date-fns/differenceInCalendarDays.js
11287  function differenceInCalendarDays(laterDate, earlierDate, options) {
11288    const [laterDate_, earlierDate_] = normalizeDates(
11289      options?.in,
11290      laterDate,
11291      earlierDate
11292    );
11293    const laterStartOfDay = startOfDay(laterDate_);
11294    const earlierStartOfDay = startOfDay(earlierDate_);
11295    const laterTimestamp = +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay);
11296    const earlierTimestamp = +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay);
11297    return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay);
11298  }
11299  
11300  // packages/dataviews/node_modules/date-fns/startOfISOWeekYear.js
11301  function startOfISOWeekYear(date, options) {
11302    const year = getISOWeekYear(date, options);
11303    const fourthOfJanuary = constructFrom(options?.in || date, 0);
11304    fourthOfJanuary.setFullYear(year, 0, 4);
11305    fourthOfJanuary.setHours(0, 0, 0, 0);
11306    return startOfISOWeek(fourthOfJanuary);
11307  }
11308  
11309  // packages/dataviews/node_modules/date-fns/addWeeks.js
11310  function addWeeks(date, amount, options) {
11311    return addDays(date, amount * 7, options);
11312  }
11313  
11314  // packages/dataviews/node_modules/date-fns/addYears.js
11315  function addYears(date, amount, options) {
11316    return addMonths(date, amount * 12, options);
11317  }
11318  
11319  // packages/dataviews/node_modules/date-fns/isDate.js
11320  function isDate(value) {
11321    return value instanceof Date || typeof value === "object" && Object.prototype.toString.call(value) === "[object Date]";
11322  }
11323  
11324  // packages/dataviews/node_modules/date-fns/isValid.js
11325  function isValid(date) {
11326    return !(!isDate(date) && typeof date !== "number" || isNaN(+toDate(date)));
11327  }
11328  
11329  // packages/dataviews/node_modules/date-fns/startOfMonth.js
11330  function startOfMonth(date, options) {
11331    const _date = toDate(date, options?.in);
11332    _date.setDate(1);
11333    _date.setHours(0, 0, 0, 0);
11334    return _date;
11335  }
11336  
11337  // packages/dataviews/node_modules/date-fns/startOfYear.js
11338  function startOfYear(date, options) {
11339    const date_ = toDate(date, options?.in);
11340    date_.setFullYear(date_.getFullYear(), 0, 1);
11341    date_.setHours(0, 0, 0, 0);
11342    return date_;
11343  }
11344  
11345  // packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatDistance.js
11346  var formatDistanceLocale = {
11347    lessThanXSeconds: {
11348      one: "less than a second",
11349      other: "less than {{count}} seconds"
11350    },
11351    xSeconds: {
11352      one: "1 second",
11353      other: "{{count}} seconds"
11354    },
11355    halfAMinute: "half a minute",
11356    lessThanXMinutes: {
11357      one: "less than a minute",
11358      other: "less than {{count}} minutes"
11359    },
11360    xMinutes: {
11361      one: "1 minute",
11362      other: "{{count}} minutes"
11363    },
11364    aboutXHours: {
11365      one: "about 1 hour",
11366      other: "about {{count}} hours"
11367    },
11368    xHours: {
11369      one: "1 hour",
11370      other: "{{count}} hours"
11371    },
11372    xDays: {
11373      one: "1 day",
11374      other: "{{count}} days"
11375    },
11376    aboutXWeeks: {
11377      one: "about 1 week",
11378      other: "about {{count}} weeks"
11379    },
11380    xWeeks: {
11381      one: "1 week",
11382      other: "{{count}} weeks"
11383    },
11384    aboutXMonths: {
11385      one: "about 1 month",
11386      other: "about {{count}} months"
11387    },
11388    xMonths: {
11389      one: "1 month",
11390      other: "{{count}} months"
11391    },
11392    aboutXYears: {
11393      one: "about 1 year",
11394      other: "about {{count}} years"
11395    },
11396    xYears: {
11397      one: "1 year",
11398      other: "{{count}} years"
11399    },
11400    overXYears: {
11401      one: "over 1 year",
11402      other: "over {{count}} years"
11403    },
11404    almostXYears: {
11405      one: "almost 1 year",
11406      other: "almost {{count}} years"
11407    }
11408  };
11409  var formatDistance = (token, count, options) => {
11410    let result;
11411    const tokenValue = formatDistanceLocale[token];
11412    if (typeof tokenValue === "string") {
11413      result = tokenValue;
11414    } else if (count === 1) {
11415      result = tokenValue.one;
11416    } else {
11417      result = tokenValue.other.replace("{{count}}", count.toString());
11418    }
11419    if (options?.addSuffix) {
11420      if (options.comparison && options.comparison > 0) {
11421        return "in " + result;
11422      } else {
11423        return result + " ago";
11424      }
11425    }
11426    return result;
11427  };
11428  
11429  // packages/dataviews/node_modules/date-fns/locale/_lib/buildFormatLongFn.js
11430  function buildFormatLongFn(args) {
11431    return (options = {}) => {
11432      const width = options.width ? String(options.width) : args.defaultWidth;
11433      const format6 = args.formats[width] || args.formats[args.defaultWidth];
11434      return format6;
11435    };
11436  }
11437  
11438  // packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatLong.js
11439  var dateFormats = {
11440    full: "EEEE, MMMM do, y",
11441    long: "MMMM do, y",
11442    medium: "MMM d, y",
11443    short: "MM/dd/yyyy"
11444  };
11445  var timeFormats = {
11446    full: "h:mm:ss a zzzz",
11447    long: "h:mm:ss a z",
11448    medium: "h:mm:ss a",
11449    short: "h:mm a"
11450  };
11451  var dateTimeFormats = {
11452    full: "{{date}} 'at' {{time}}",
11453    long: "{{date}} 'at' {{time}}",
11454    medium: "{{date}}, {{time}}",
11455    short: "{{date}}, {{time}}"
11456  };
11457  var formatLong = {
11458    date: buildFormatLongFn({
11459      formats: dateFormats,
11460      defaultWidth: "full"
11461    }),
11462    time: buildFormatLongFn({
11463      formats: timeFormats,
11464      defaultWidth: "full"
11465    }),
11466    dateTime: buildFormatLongFn({
11467      formats: dateTimeFormats,
11468      defaultWidth: "full"
11469    })
11470  };
11471  
11472  // packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatRelative.js
11473  var formatRelativeLocale = {
11474    lastWeek: "'last' eeee 'at' p",
11475    yesterday: "'yesterday at' p",
11476    today: "'today at' p",
11477    tomorrow: "'tomorrow at' p",
11478    nextWeek: "eeee 'at' p",
11479    other: "P"
11480  };
11481  var formatRelative = (token, _date, _baseDate, _options) => formatRelativeLocale[token];
11482  
11483  // packages/dataviews/node_modules/date-fns/locale/_lib/buildLocalizeFn.js
11484  function buildLocalizeFn(args) {
11485    return (value, options) => {
11486      const context = options?.context ? String(options.context) : "standalone";
11487      let valuesArray;
11488      if (context === "formatting" && args.formattingValues) {
11489        const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;
11490        const width = options?.width ? String(options.width) : defaultWidth;
11491        valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];
11492      } else {
11493        const defaultWidth = args.defaultWidth;
11494        const width = options?.width ? String(options.width) : args.defaultWidth;
11495        valuesArray = args.values[width] || args.values[defaultWidth];
11496      }
11497      const index = args.argumentCallback ? args.argumentCallback(value) : value;
11498      return valuesArray[index];
11499    };
11500  }
11501  
11502  // packages/dataviews/node_modules/date-fns/locale/en-US/_lib/localize.js
11503  var eraValues = {
11504    narrow: ["B", "A"],
11505    abbreviated: ["BC", "AD"],
11506    wide: ["Before Christ", "Anno Domini"]
11507  };
11508  var quarterValues = {
11509    narrow: ["1", "2", "3", "4"],
11510    abbreviated: ["Q1", "Q2", "Q3", "Q4"],
11511    wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"]
11512  };
11513  var monthValues = {
11514    narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"],
11515    abbreviated: [
11516      "Jan",
11517      "Feb",
11518      "Mar",
11519      "Apr",
11520      "May",
11521      "Jun",
11522      "Jul",
11523      "Aug",
11524      "Sep",
11525      "Oct",
11526      "Nov",
11527      "Dec"
11528    ],
11529    wide: [
11530      "January",
11531      "February",
11532      "March",
11533      "April",
11534      "May",
11535      "June",
11536      "July",
11537      "August",
11538      "September",
11539      "October",
11540      "November",
11541      "December"
11542    ]
11543  };
11544  var dayValues = {
11545    narrow: ["S", "M", "T", "W", "T", "F", "S"],
11546    short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
11547    abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
11548    wide: [
11549      "Sunday",
11550      "Monday",
11551      "Tuesday",
11552      "Wednesday",
11553      "Thursday",
11554      "Friday",
11555      "Saturday"
11556    ]
11557  };
11558  var dayPeriodValues = {
11559    narrow: {
11560      am: "a",
11561      pm: "p",
11562      midnight: "mi",
11563      noon: "n",
11564      morning: "morning",
11565      afternoon: "afternoon",
11566      evening: "evening",
11567      night: "night"
11568    },
11569    abbreviated: {
11570      am: "AM",
11571      pm: "PM",
11572      midnight: "midnight",
11573      noon: "noon",
11574      morning: "morning",
11575      afternoon: "afternoon",
11576      evening: "evening",
11577      night: "night"
11578    },
11579    wide: {
11580      am: "a.m.",
11581      pm: "p.m.",
11582      midnight: "midnight",
11583      noon: "noon",
11584      morning: "morning",
11585      afternoon: "afternoon",
11586      evening: "evening",
11587      night: "night"
11588    }
11589  };
11590  var formattingDayPeriodValues = {
11591    narrow: {
11592      am: "a",
11593      pm: "p",
11594      midnight: "mi",
11595      noon: "n",
11596      morning: "in the morning",
11597      afternoon: "in the afternoon",
11598      evening: "in the evening",
11599      night: "at night"
11600    },
11601    abbreviated: {
11602      am: "AM",
11603      pm: "PM",
11604      midnight: "midnight",
11605      noon: "noon",
11606      morning: "in the morning",
11607      afternoon: "in the afternoon",
11608      evening: "in the evening",
11609      night: "at night"
11610    },
11611    wide: {
11612      am: "a.m.",
11613      pm: "p.m.",
11614      midnight: "midnight",
11615      noon: "noon",
11616      morning: "in the morning",
11617      afternoon: "in the afternoon",
11618      evening: "in the evening",
11619      night: "at night"
11620    }
11621  };
11622  var ordinalNumber = (dirtyNumber, _options) => {
11623    const number = Number(dirtyNumber);
11624    const rem100 = number % 100;
11625    if (rem100 > 20 || rem100 < 10) {
11626      switch (rem100 % 10) {
11627        case 1:
11628          return number + "st";
11629        case 2:
11630          return number + "nd";
11631        case 3:
11632          return number + "rd";
11633      }
11634    }
11635    return number + "th";
11636  };
11637  var localize = {
11638    ordinalNumber,
11639    era: buildLocalizeFn({
11640      values: eraValues,
11641      defaultWidth: "wide"
11642    }),
11643    quarter: buildLocalizeFn({
11644      values: quarterValues,
11645      defaultWidth: "wide",
11646      argumentCallback: (quarter) => quarter - 1
11647    }),
11648    month: buildLocalizeFn({
11649      values: monthValues,
11650      defaultWidth: "wide"
11651    }),
11652    day: buildLocalizeFn({
11653      values: dayValues,
11654      defaultWidth: "wide"
11655    }),
11656    dayPeriod: buildLocalizeFn({
11657      values: dayPeriodValues,
11658      defaultWidth: "wide",
11659      formattingValues: formattingDayPeriodValues,
11660      defaultFormattingWidth: "wide"
11661    })
11662  };
11663  
11664  // packages/dataviews/node_modules/date-fns/locale/_lib/buildMatchFn.js
11665  function buildMatchFn(args) {
11666    return (string, options = {}) => {
11667      const width = options.width;
11668      const matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];
11669      const matchResult = string.match(matchPattern);
11670      if (!matchResult) {
11671        return null;
11672      }
11673      const matchedString = matchResult[0];
11674      const parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];
11675      const key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString)) : (
11676        // [TODO] -- I challenge you to fix the type
11677        findKey(parsePatterns, (pattern) => pattern.test(matchedString))
11678      );
11679      let value;
11680      value = args.valueCallback ? args.valueCallback(key) : key;
11681      value = options.valueCallback ? (
11682        // [TODO] -- I challenge you to fix the type
11683        options.valueCallback(value)
11684      ) : value;
11685      const rest = string.slice(matchedString.length);
11686      return { value, rest };
11687    };
11688  }
11689  function findKey(object, predicate) {
11690    for (const key in object) {
11691      if (Object.prototype.hasOwnProperty.call(object, key) && predicate(object[key])) {
11692        return key;
11693      }
11694    }
11695    return void 0;
11696  }
11697  function findIndex(array, predicate) {
11698    for (let key = 0; key < array.length; key++) {
11699      if (predicate(array[key])) {
11700        return key;
11701      }
11702    }
11703    return void 0;
11704  }
11705  
11706  // packages/dataviews/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js
11707  function buildMatchPatternFn(args) {
11708    return (string, options = {}) => {
11709      const matchResult = string.match(args.matchPattern);
11710      if (!matchResult) return null;
11711      const matchedString = matchResult[0];
11712      const parseResult = string.match(args.parsePattern);
11713      if (!parseResult) return null;
11714      let value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];
11715      value = options.valueCallback ? options.valueCallback(value) : value;
11716      const rest = string.slice(matchedString.length);
11717      return { value, rest };
11718    };
11719  }
11720  
11721  // packages/dataviews/node_modules/date-fns/locale/en-US/_lib/match.js
11722  var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i;
11723  var parseOrdinalNumberPattern = /\d+/i;
11724  var matchEraPatterns = {
11725    narrow: /^(b|a)/i,
11726    abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,
11727    wide: /^(before christ|before common era|anno domini|common era)/i
11728  };
11729  var parseEraPatterns = {
11730    any: [/^b/i, /^(a|c)/i]
11731  };
11732  var matchQuarterPatterns = {
11733    narrow: /^[1234]/i,
11734    abbreviated: /^q[1234]/i,
11735    wide: /^[1234](th|st|nd|rd)? quarter/i
11736  };
11737  var parseQuarterPatterns = {
11738    any: [/1/i, /2/i, /3/i, /4/i]
11739  };
11740  var matchMonthPatterns = {
11741    narrow: /^[jfmasond]/i,
11742    abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,
11743    wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i
11744  };
11745  var parseMonthPatterns = {
11746    narrow: [
11747      /^j/i,
11748      /^f/i,
11749      /^m/i,
11750      /^a/i,
11751      /^m/i,
11752      /^j/i,
11753      /^j/i,
11754      /^a/i,
11755      /^s/i,
11756      /^o/i,
11757      /^n/i,
11758      /^d/i
11759    ],
11760    any: [
11761      /^ja/i,
11762      /^f/i,
11763      /^mar/i,
11764      /^ap/i,
11765      /^may/i,
11766      /^jun/i,
11767      /^jul/i,
11768      /^au/i,
11769      /^s/i,
11770      /^o/i,
11771      /^n/i,
11772      /^d/i
11773    ]
11774  };
11775  var matchDayPatterns = {
11776    narrow: /^[smtwf]/i,
11777    short: /^(su|mo|tu|we|th|fr|sa)/i,
11778    abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,
11779    wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i
11780  };
11781  var parseDayPatterns = {
11782    narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],
11783    any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]
11784  };
11785  var matchDayPeriodPatterns = {
11786    narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,
11787    any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i
11788  };
11789  var parseDayPeriodPatterns = {
11790    any: {
11791      am: /^a/i,
11792      pm: /^p/i,
11793      midnight: /^mi/i,
11794      noon: /^no/i,
11795      morning: /morning/i,
11796      afternoon: /afternoon/i,
11797      evening: /evening/i,
11798      night: /night/i
11799    }
11800  };
11801  var match = {
11802    ordinalNumber: buildMatchPatternFn({
11803      matchPattern: matchOrdinalNumberPattern,
11804      parsePattern: parseOrdinalNumberPattern,
11805      valueCallback: (value) => parseInt(value, 10)
11806    }),
11807    era: buildMatchFn({
11808      matchPatterns: matchEraPatterns,
11809      defaultMatchWidth: "wide",
11810      parsePatterns: parseEraPatterns,
11811      defaultParseWidth: "any"
11812    }),
11813    quarter: buildMatchFn({
11814      matchPatterns: matchQuarterPatterns,
11815      defaultMatchWidth: "wide",
11816      parsePatterns: parseQuarterPatterns,
11817      defaultParseWidth: "any",
11818      valueCallback: (index) => index + 1
11819    }),
11820    month: buildMatchFn({
11821      matchPatterns: matchMonthPatterns,
11822      defaultMatchWidth: "wide",
11823      parsePatterns: parseMonthPatterns,
11824      defaultParseWidth: "any"
11825    }),
11826    day: buildMatchFn({
11827      matchPatterns: matchDayPatterns,
11828      defaultMatchWidth: "wide",
11829      parsePatterns: parseDayPatterns,
11830      defaultParseWidth: "any"
11831    }),
11832    dayPeriod: buildMatchFn({
11833      matchPatterns: matchDayPeriodPatterns,
11834      defaultMatchWidth: "any",
11835      parsePatterns: parseDayPeriodPatterns,
11836      defaultParseWidth: "any"
11837    })
11838  };
11839  
11840  // packages/dataviews/node_modules/date-fns/locale/en-US.js
11841  var enUS = {
11842    code: "en-US",
11843    formatDistance,
11844    formatLong,
11845    formatRelative,
11846    localize,
11847    match,
11848    options: {
11849      weekStartsOn: 0,
11850      firstWeekContainsDate: 1
11851    }
11852  };
11853  
11854  // packages/dataviews/node_modules/date-fns/getDayOfYear.js
11855  function getDayOfYear(date, options) {
11856    const _date = toDate(date, options?.in);
11857    const diff = differenceInCalendarDays(_date, startOfYear(_date));
11858    const dayOfYear = diff + 1;
11859    return dayOfYear;
11860  }
11861  
11862  // packages/dataviews/node_modules/date-fns/getISOWeek.js
11863  function getISOWeek(date, options) {
11864    const _date = toDate(date, options?.in);
11865    const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);
11866    return Math.round(diff / millisecondsInWeek) + 1;
11867  }
11868  
11869  // packages/dataviews/node_modules/date-fns/getWeekYear.js
11870  function getWeekYear(date, options) {
11871    const _date = toDate(date, options?.in);
11872    const year = _date.getFullYear();
11873    const defaultOptions2 = getDefaultOptions();
11874    const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1;
11875    const firstWeekOfNextYear = constructFrom(options?.in || date, 0);
11876    firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);
11877    firstWeekOfNextYear.setHours(0, 0, 0, 0);
11878    const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);
11879    const firstWeekOfThisYear = constructFrom(options?.in || date, 0);
11880    firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);
11881    firstWeekOfThisYear.setHours(0, 0, 0, 0);
11882    const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);
11883    if (+_date >= +startOfNextYear) {
11884      return year + 1;
11885    } else if (+_date >= +startOfThisYear) {
11886      return year;
11887    } else {
11888      return year - 1;
11889    }
11890  }
11891  
11892  // packages/dataviews/node_modules/date-fns/startOfWeekYear.js
11893  function startOfWeekYear(date, options) {
11894    const defaultOptions2 = getDefaultOptions();
11895    const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1;
11896    const year = getWeekYear(date, options);
11897    const firstWeek = constructFrom(options?.in || date, 0);
11898    firstWeek.setFullYear(year, 0, firstWeekContainsDate);
11899    firstWeek.setHours(0, 0, 0, 0);
11900    const _date = startOfWeek(firstWeek, options);
11901    return _date;
11902  }
11903  
11904  // packages/dataviews/node_modules/date-fns/getWeek.js
11905  function getWeek(date, options) {
11906    const _date = toDate(date, options?.in);
11907    const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);
11908    return Math.round(diff / millisecondsInWeek) + 1;
11909  }
11910  
11911  // packages/dataviews/node_modules/date-fns/_lib/addLeadingZeros.js
11912  function addLeadingZeros(number, targetLength) {
11913    const sign = number < 0 ? "-" : "";
11914    const output = Math.abs(number).toString().padStart(targetLength, "0");
11915    return sign + output;
11916  }
11917  
11918  // packages/dataviews/node_modules/date-fns/_lib/format/lightFormatters.js
11919  var lightFormatters = {
11920    // Year
11921    y(date, token) {
11922      const signedYear = date.getFullYear();
11923      const year = signedYear > 0 ? signedYear : 1 - signedYear;
11924      return addLeadingZeros(token === "yy" ? year % 100 : year, token.length);
11925    },
11926    // Month
11927    M(date, token) {
11928      const month = date.getMonth();
11929      return token === "M" ? String(month + 1) : addLeadingZeros(month + 1, 2);
11930    },
11931    // Day of the month
11932    d(date, token) {
11933      return addLeadingZeros(date.getDate(), token.length);
11934    },
11935    // AM or PM
11936    a(date, token) {
11937      const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? "pm" : "am";
11938      switch (token) {
11939        case "a":
11940        case "aa":
11941          return dayPeriodEnumValue.toUpperCase();
11942        case "aaa":
11943          return dayPeriodEnumValue;
11944        case "aaaaa":
11945          return dayPeriodEnumValue[0];
11946        case "aaaa":
11947        default:
11948          return dayPeriodEnumValue === "am" ? "a.m." : "p.m.";
11949      }
11950    },
11951    // Hour [1-12]
11952    h(date, token) {
11953      return addLeadingZeros(date.getHours() % 12 || 12, token.length);
11954    },
11955    // Hour [0-23]
11956    H(date, token) {
11957      return addLeadingZeros(date.getHours(), token.length);
11958    },
11959    // Minute
11960    m(date, token) {
11961      return addLeadingZeros(date.getMinutes(), token.length);
11962    },
11963    // Second
11964    s(date, token) {
11965      return addLeadingZeros(date.getSeconds(), token.length);
11966    },
11967    // Fraction of second
11968    S(date, token) {
11969      const numberOfDigits = token.length;
11970      const milliseconds = date.getMilliseconds();
11971      const fractionalSeconds = Math.trunc(
11972        milliseconds * Math.pow(10, numberOfDigits - 3)
11973      );
11974      return addLeadingZeros(fractionalSeconds, token.length);
11975    }
11976  };
11977  
11978  // packages/dataviews/node_modules/date-fns/_lib/format/formatters.js
11979  var dayPeriodEnum = {
11980    am: "am",
11981    pm: "pm",
11982    midnight: "midnight",
11983    noon: "noon",
11984    morning: "morning",
11985    afternoon: "afternoon",
11986    evening: "evening",
11987    night: "night"
11988  };
11989  var formatters = {
11990    // Era
11991    G: function(date, token, localize2) {
11992      const era = date.getFullYear() > 0 ? 1 : 0;
11993      switch (token) {
11994        // AD, BC
11995        case "G":
11996        case "GG":
11997        case "GGG":
11998          return localize2.era(era, { width: "abbreviated" });
11999        // A, B
12000        case "GGGGG":
12001          return localize2.era(era, { width: "narrow" });
12002        // Anno Domini, Before Christ
12003        case "GGGG":
12004        default:
12005          return localize2.era(era, { width: "wide" });
12006      }
12007    },
12008    // Year
12009    y: function(date, token, localize2) {
12010      if (token === "yo") {
12011        const signedYear = date.getFullYear();
12012        const year = signedYear > 0 ? signedYear : 1 - signedYear;
12013        return localize2.ordinalNumber(year, { unit: "year" });
12014      }
12015      return lightFormatters.y(date, token);
12016    },
12017    // Local week-numbering year
12018    Y: function(date, token, localize2, options) {
12019      const signedWeekYear = getWeekYear(date, options);
12020      const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;
12021      if (token === "YY") {
12022        const twoDigitYear = weekYear % 100;
12023        return addLeadingZeros(twoDigitYear, 2);
12024      }
12025      if (token === "Yo") {
12026        return localize2.ordinalNumber(weekYear, { unit: "year" });
12027      }
12028      return addLeadingZeros(weekYear, token.length);
12029    },
12030    // ISO week-numbering year
12031    R: function(date, token) {
12032      const isoWeekYear = getISOWeekYear(date);
12033      return addLeadingZeros(isoWeekYear, token.length);
12034    },
12035    // Extended year. This is a single number designating the year of this calendar system.
12036    // The main difference between `y` and `u` localizers are B.C. years:
12037    // | Year | `y` | `u` |
12038    // |------|-----|-----|
12039    // | AC 1 |   1 |   1 |
12040    // | BC 1 |   1 |   0 |
12041    // | BC 2 |   2 |  -1 |
12042    // Also `yy` always returns the last two digits of a year,
12043    // while `uu` pads single digit years to 2 characters and returns other years unchanged.
12044    u: function(date, token) {
12045      const year = date.getFullYear();
12046      return addLeadingZeros(year, token.length);
12047    },
12048    // Quarter
12049    Q: function(date, token, localize2) {
12050      const quarter = Math.ceil((date.getMonth() + 1) / 3);
12051      switch (token) {
12052        // 1, 2, 3, 4
12053        case "Q":
12054          return String(quarter);
12055        // 01, 02, 03, 04
12056        case "QQ":
12057          return addLeadingZeros(quarter, 2);
12058        // 1st, 2nd, 3rd, 4th
12059        case "Qo":
12060          return localize2.ordinalNumber(quarter, { unit: "quarter" });
12061        // Q1, Q2, Q3, Q4
12062        case "QQQ":
12063          return localize2.quarter(quarter, {
12064            width: "abbreviated",
12065            context: "formatting"
12066          });
12067        // 1, 2, 3, 4 (narrow quarter; could be not numerical)
12068        case "QQQQQ":
12069          return localize2.quarter(quarter, {
12070            width: "narrow",
12071            context: "formatting"
12072          });
12073        // 1st quarter, 2nd quarter, ...
12074        case "QQQQ":
12075        default:
12076          return localize2.quarter(quarter, {
12077            width: "wide",
12078            context: "formatting"
12079          });
12080      }
12081    },
12082    // Stand-alone quarter
12083    q: function(date, token, localize2) {
12084      const quarter = Math.ceil((date.getMonth() + 1) / 3);
12085      switch (token) {
12086        // 1, 2, 3, 4
12087        case "q":
12088          return String(quarter);
12089        // 01, 02, 03, 04
12090        case "qq":
12091          return addLeadingZeros(quarter, 2);
12092        // 1st, 2nd, 3rd, 4th
12093        case "qo":
12094          return localize2.ordinalNumber(quarter, { unit: "quarter" });
12095        // Q1, Q2, Q3, Q4
12096        case "qqq":
12097          return localize2.quarter(quarter, {
12098            width: "abbreviated",
12099            context: "standalone"
12100          });
12101        // 1, 2, 3, 4 (narrow quarter; could be not numerical)
12102        case "qqqqq":
12103          return localize2.quarter(quarter, {
12104            width: "narrow",
12105            context: "standalone"
12106          });
12107        // 1st quarter, 2nd quarter, ...
12108        case "qqqq":
12109        default:
12110          return localize2.quarter(quarter, {
12111            width: "wide",
12112            context: "standalone"
12113          });
12114      }
12115    },
12116    // Month
12117    M: function(date, token, localize2) {
12118      const month = date.getMonth();
12119      switch (token) {
12120        case "M":
12121        case "MM":
12122          return lightFormatters.M(date, token);
12123        // 1st, 2nd, ..., 12th
12124        case "Mo":
12125          return localize2.ordinalNumber(month + 1, { unit: "month" });
12126        // Jan, Feb, ..., Dec
12127        case "MMM":
12128          return localize2.month(month, {
12129            width: "abbreviated",
12130            context: "formatting"
12131          });
12132        // J, F, ..., D
12133        case "MMMMM":
12134          return localize2.month(month, {
12135            width: "narrow",
12136            context: "formatting"
12137          });
12138        // January, February, ..., December
12139        case "MMMM":
12140        default:
12141          return localize2.month(month, { width: "wide", context: "formatting" });
12142      }
12143    },
12144    // Stand-alone month
12145    L: function(date, token, localize2) {
12146      const month = date.getMonth();
12147      switch (token) {
12148        // 1, 2, ..., 12
12149        case "L":
12150          return String(month + 1);
12151        // 01, 02, ..., 12
12152        case "LL":
12153          return addLeadingZeros(month + 1, 2);
12154        // 1st, 2nd, ..., 12th
12155        case "Lo":
12156          return localize2.ordinalNumber(month + 1, { unit: "month" });
12157        // Jan, Feb, ..., Dec
12158        case "LLL":
12159          return localize2.month(month, {
12160            width: "abbreviated",
12161            context: "standalone"
12162          });
12163        // J, F, ..., D
12164        case "LLLLL":
12165          return localize2.month(month, {
12166            width: "narrow",
12167            context: "standalone"
12168          });
12169        // January, February, ..., December
12170        case "LLLL":
12171        default:
12172          return localize2.month(month, { width: "wide", context: "standalone" });
12173      }
12174    },
12175    // Local week of year
12176    w: function(date, token, localize2, options) {
12177      const week = getWeek(date, options);
12178      if (token === "wo") {
12179        return localize2.ordinalNumber(week, { unit: "week" });
12180      }
12181      return addLeadingZeros(week, token.length);
12182    },
12183    // ISO week of year
12184    I: function(date, token, localize2) {
12185      const isoWeek = getISOWeek(date);
12186      if (token === "Io") {
12187        return localize2.ordinalNumber(isoWeek, { unit: "week" });
12188      }
12189      return addLeadingZeros(isoWeek, token.length);
12190    },
12191    // Day of the month
12192    d: function(date, token, localize2) {
12193      if (token === "do") {
12194        return localize2.ordinalNumber(date.getDate(), { unit: "date" });
12195      }
12196      return lightFormatters.d(date, token);
12197    },
12198    // Day of year
12199    D: function(date, token, localize2) {
12200      const dayOfYear = getDayOfYear(date);
12201      if (token === "Do") {
12202        return localize2.ordinalNumber(dayOfYear, { unit: "dayOfYear" });
12203      }
12204      return addLeadingZeros(dayOfYear, token.length);
12205    },
12206    // Day of week
12207    E: function(date, token, localize2) {
12208      const dayOfWeek = date.getDay();
12209      switch (token) {
12210        // Tue
12211        case "E":
12212        case "EE":
12213        case "EEE":
12214          return localize2.day(dayOfWeek, {
12215            width: "abbreviated",
12216            context: "formatting"
12217          });
12218        // T
12219        case "EEEEE":
12220          return localize2.day(dayOfWeek, {
12221            width: "narrow",
12222            context: "formatting"
12223          });
12224        // Tu
12225        case "EEEEEE":
12226          return localize2.day(dayOfWeek, {
12227            width: "short",
12228            context: "formatting"
12229          });
12230        // Tuesday
12231        case "EEEE":
12232        default:
12233          return localize2.day(dayOfWeek, {
12234            width: "wide",
12235            context: "formatting"
12236          });
12237      }
12238    },
12239    // Local day of week
12240    e: function(date, token, localize2, options) {
12241      const dayOfWeek = date.getDay();
12242      const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;
12243      switch (token) {
12244        // Numerical value (Nth day of week with current locale or weekStartsOn)
12245        case "e":
12246          return String(localDayOfWeek);
12247        // Padded numerical value
12248        case "ee":
12249          return addLeadingZeros(localDayOfWeek, 2);
12250        // 1st, 2nd, ..., 7th
12251        case "eo":
12252          return localize2.ordinalNumber(localDayOfWeek, { unit: "day" });
12253        case "eee":
12254          return localize2.day(dayOfWeek, {
12255            width: "abbreviated",
12256            context: "formatting"
12257          });
12258        // T
12259        case "eeeee":
12260          return localize2.day(dayOfWeek, {
12261            width: "narrow",
12262            context: "formatting"
12263          });
12264        // Tu
12265        case "eeeeee":
12266          return localize2.day(dayOfWeek, {
12267            width: "short",
12268            context: "formatting"
12269          });
12270        // Tuesday
12271        case "eeee":
12272        default:
12273          return localize2.day(dayOfWeek, {
12274            width: "wide",
12275            context: "formatting"
12276          });
12277      }
12278    },
12279    // Stand-alone local day of week
12280    c: function(date, token, localize2, options) {
12281      const dayOfWeek = date.getDay();
12282      const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;
12283      switch (token) {
12284        // Numerical value (same as in `e`)
12285        case "c":
12286          return String(localDayOfWeek);
12287        // Padded numerical value
12288        case "cc":
12289          return addLeadingZeros(localDayOfWeek, token.length);
12290        // 1st, 2nd, ..., 7th
12291        case "co":
12292          return localize2.ordinalNumber(localDayOfWeek, { unit: "day" });
12293        case "ccc":
12294          return localize2.day(dayOfWeek, {
12295            width: "abbreviated",
12296            context: "standalone"
12297          });
12298        // T
12299        case "ccccc":
12300          return localize2.day(dayOfWeek, {
12301            width: "narrow",
12302            context: "standalone"
12303          });
12304        // Tu
12305        case "cccccc":
12306          return localize2.day(dayOfWeek, {
12307            width: "short",
12308            context: "standalone"
12309          });
12310        // Tuesday
12311        case "cccc":
12312        default:
12313          return localize2.day(dayOfWeek, {
12314            width: "wide",
12315            context: "standalone"
12316          });
12317      }
12318    },
12319    // ISO day of week
12320    i: function(date, token, localize2) {
12321      const dayOfWeek = date.getDay();
12322      const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;
12323      switch (token) {
12324        // 2
12325        case "i":
12326          return String(isoDayOfWeek);
12327        // 02
12328        case "ii":
12329          return addLeadingZeros(isoDayOfWeek, token.length);
12330        // 2nd
12331        case "io":
12332          return localize2.ordinalNumber(isoDayOfWeek, { unit: "day" });
12333        // Tue
12334        case "iii":
12335          return localize2.day(dayOfWeek, {
12336            width: "abbreviated",
12337            context: "formatting"
12338          });
12339        // T
12340        case "iiiii":
12341          return localize2.day(dayOfWeek, {
12342            width: "narrow",
12343            context: "formatting"
12344          });
12345        // Tu
12346        case "iiiiii":
12347          return localize2.day(dayOfWeek, {
12348            width: "short",
12349            context: "formatting"
12350          });
12351        // Tuesday
12352        case "iiii":
12353        default:
12354          return localize2.day(dayOfWeek, {
12355            width: "wide",
12356            context: "formatting"
12357          });
12358      }
12359    },
12360    // AM or PM
12361    a: function(date, token, localize2) {
12362      const hours = date.getHours();
12363      const dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am";
12364      switch (token) {
12365        case "a":
12366        case "aa":
12367          return localize2.dayPeriod(dayPeriodEnumValue, {
12368            width: "abbreviated",
12369            context: "formatting"
12370          });
12371        case "aaa":
12372          return localize2.dayPeriod(dayPeriodEnumValue, {
12373            width: "abbreviated",
12374            context: "formatting"
12375          }).toLowerCase();
12376        case "aaaaa":
12377          return localize2.dayPeriod(dayPeriodEnumValue, {
12378            width: "narrow",
12379            context: "formatting"
12380          });
12381        case "aaaa":
12382        default:
12383          return localize2.dayPeriod(dayPeriodEnumValue, {
12384            width: "wide",
12385            context: "formatting"
12386          });
12387      }
12388    },
12389    // AM, PM, midnight, noon
12390    b: function(date, token, localize2) {
12391      const hours = date.getHours();
12392      let dayPeriodEnumValue;
12393      if (hours === 12) {
12394        dayPeriodEnumValue = dayPeriodEnum.noon;
12395      } else if (hours === 0) {
12396        dayPeriodEnumValue = dayPeriodEnum.midnight;
12397      } else {
12398        dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am";
12399      }
12400      switch (token) {
12401        case "b":
12402        case "bb":
12403          return localize2.dayPeriod(dayPeriodEnumValue, {
12404            width: "abbreviated",
12405            context: "formatting"
12406          });
12407        case "bbb":
12408          return localize2.dayPeriod(dayPeriodEnumValue, {
12409            width: "abbreviated",
12410            context: "formatting"
12411          }).toLowerCase();
12412        case "bbbbb":
12413          return localize2.dayPeriod(dayPeriodEnumValue, {
12414            width: "narrow",
12415            context: "formatting"
12416          });
12417        case "bbbb":
12418        default:
12419          return localize2.dayPeriod(dayPeriodEnumValue, {
12420            width: "wide",
12421            context: "formatting"
12422          });
12423      }
12424    },
12425    // in the morning, in the afternoon, in the evening, at night
12426    B: function(date, token, localize2) {
12427      const hours = date.getHours();
12428      let dayPeriodEnumValue;
12429      if (hours >= 17) {
12430        dayPeriodEnumValue = dayPeriodEnum.evening;
12431      } else if (hours >= 12) {
12432        dayPeriodEnumValue = dayPeriodEnum.afternoon;
12433      } else if (hours >= 4) {
12434        dayPeriodEnumValue = dayPeriodEnum.morning;
12435      } else {
12436        dayPeriodEnumValue = dayPeriodEnum.night;
12437      }
12438      switch (token) {
12439        case "B":
12440        case "BB":
12441        case "BBB":
12442          return localize2.dayPeriod(dayPeriodEnumValue, {
12443            width: "abbreviated",
12444            context: "formatting"
12445          });
12446        case "BBBBB":
12447          return localize2.dayPeriod(dayPeriodEnumValue, {
12448            width: "narrow",
12449            context: "formatting"
12450          });
12451        case "BBBB":
12452        default:
12453          return localize2.dayPeriod(dayPeriodEnumValue, {
12454            width: "wide",
12455            context: "formatting"
12456          });
12457      }
12458    },
12459    // Hour [1-12]
12460    h: function(date, token, localize2) {
12461      if (token === "ho") {
12462        let hours = date.getHours() % 12;
12463        if (hours === 0) hours = 12;
12464        return localize2.ordinalNumber(hours, { unit: "hour" });
12465      }
12466      return lightFormatters.h(date, token);
12467    },
12468    // Hour [0-23]
12469    H: function(date, token, localize2) {
12470      if (token === "Ho") {
12471        return localize2.ordinalNumber(date.getHours(), { unit: "hour" });
12472      }
12473      return lightFormatters.H(date, token);
12474    },
12475    // Hour [0-11]
12476    K: function(date, token, localize2) {
12477      const hours = date.getHours() % 12;
12478      if (token === "Ko") {
12479        return localize2.ordinalNumber(hours, { unit: "hour" });
12480      }
12481      return addLeadingZeros(hours, token.length);
12482    },
12483    // Hour [1-24]
12484    k: function(date, token, localize2) {
12485      let hours = date.getHours();
12486      if (hours === 0) hours = 24;
12487      if (token === "ko") {
12488        return localize2.ordinalNumber(hours, { unit: "hour" });
12489      }
12490      return addLeadingZeros(hours, token.length);
12491    },
12492    // Minute
12493    m: function(date, token, localize2) {
12494      if (token === "mo") {
12495        return localize2.ordinalNumber(date.getMinutes(), { unit: "minute" });
12496      }
12497      return lightFormatters.m(date, token);
12498    },
12499    // Second
12500    s: function(date, token, localize2) {
12501      if (token === "so") {
12502        return localize2.ordinalNumber(date.getSeconds(), { unit: "second" });
12503      }
12504      return lightFormatters.s(date, token);
12505    },
12506    // Fraction of second
12507    S: function(date, token) {
12508      return lightFormatters.S(date, token);
12509    },
12510    // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)
12511    X: function(date, token, _localize) {
12512      const timezoneOffset = date.getTimezoneOffset();
12513      if (timezoneOffset === 0) {
12514        return "Z";
12515      }
12516      switch (token) {
12517        // Hours and optional minutes
12518        case "X":
12519          return formatTimezoneWithOptionalMinutes(timezoneOffset);
12520        // Hours, minutes and optional seconds without `:` delimiter
12521        // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
12522        // so this token always has the same output as `XX`
12523        case "XXXX":
12524        case "XX":
12525          return formatTimezone(timezoneOffset);
12526        // Hours, minutes and optional seconds with `:` delimiter
12527        // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
12528        // so this token always has the same output as `XXX`
12529        case "XXXXX":
12530        case "XXX":
12531        // Hours and minutes with `:` delimiter
12532        default:
12533          return formatTimezone(timezoneOffset, ":");
12534      }
12535    },
12536    // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)
12537    x: function(date, token, _localize) {
12538      const timezoneOffset = date.getTimezoneOffset();
12539      switch (token) {
12540        // Hours and optional minutes
12541        case "x":
12542          return formatTimezoneWithOptionalMinutes(timezoneOffset);
12543        // Hours, minutes and optional seconds without `:` delimiter
12544        // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
12545        // so this token always has the same output as `xx`
12546        case "xxxx":
12547        case "xx":
12548          return formatTimezone(timezoneOffset);
12549        // Hours, minutes and optional seconds with `:` delimiter
12550        // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
12551        // so this token always has the same output as `xxx`
12552        case "xxxxx":
12553        case "xxx":
12554        // Hours and minutes with `:` delimiter
12555        default:
12556          return formatTimezone(timezoneOffset, ":");
12557      }
12558    },
12559    // Timezone (GMT)
12560    O: function(date, token, _localize) {
12561      const timezoneOffset = date.getTimezoneOffset();
12562      switch (token) {
12563        // Short
12564        case "O":
12565        case "OO":
12566        case "OOO":
12567          return "GMT" + formatTimezoneShort(timezoneOffset, ":");
12568        // Long
12569        case "OOOO":
12570        default:
12571          return "GMT" + formatTimezone(timezoneOffset, ":");
12572      }
12573    },
12574    // Timezone (specific non-location)
12575    z: function(date, token, _localize) {
12576      const timezoneOffset = date.getTimezoneOffset();
12577      switch (token) {
12578        // Short
12579        case "z":
12580        case "zz":
12581        case "zzz":
12582          return "GMT" + formatTimezoneShort(timezoneOffset, ":");
12583        // Long
12584        case "zzzz":
12585        default:
12586          return "GMT" + formatTimezone(timezoneOffset, ":");
12587      }
12588    },
12589    // Seconds timestamp
12590    t: function(date, token, _localize) {
12591      const timestamp = Math.trunc(+date / 1e3);
12592      return addLeadingZeros(timestamp, token.length);
12593    },
12594    // Milliseconds timestamp
12595    T: function(date, token, _localize) {
12596      return addLeadingZeros(+date, token.length);
12597    }
12598  };
12599  function formatTimezoneShort(offset, delimiter = "") {
12600    const sign = offset > 0 ? "-" : "+";
12601    const absOffset = Math.abs(offset);
12602    const hours = Math.trunc(absOffset / 60);
12603    const minutes = absOffset % 60;
12604    if (minutes === 0) {
12605      return sign + String(hours);
12606    }
12607    return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);
12608  }
12609  function formatTimezoneWithOptionalMinutes(offset, delimiter) {
12610    if (offset % 60 === 0) {
12611      const sign = offset > 0 ? "-" : "+";
12612      return sign + addLeadingZeros(Math.abs(offset) / 60, 2);
12613    }
12614    return formatTimezone(offset, delimiter);
12615  }
12616  function formatTimezone(offset, delimiter = "") {
12617    const sign = offset > 0 ? "-" : "+";
12618    const absOffset = Math.abs(offset);
12619    const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);
12620    const minutes = addLeadingZeros(absOffset % 60, 2);
12621    return sign + hours + delimiter + minutes;
12622  }
12623  
12624  // packages/dataviews/node_modules/date-fns/_lib/format/longFormatters.js
12625  var dateLongFormatter = (pattern, formatLong2) => {
12626    switch (pattern) {
12627      case "P":
12628        return formatLong2.date({ width: "short" });
12629      case "PP":
12630        return formatLong2.date({ width: "medium" });
12631      case "PPP":
12632        return formatLong2.date({ width: "long" });
12633      case "PPPP":
12634      default:
12635        return formatLong2.date({ width: "full" });
12636    }
12637  };
12638  var timeLongFormatter = (pattern, formatLong2) => {
12639    switch (pattern) {
12640      case "p":
12641        return formatLong2.time({ width: "short" });
12642      case "pp":
12643        return formatLong2.time({ width: "medium" });
12644      case "ppp":
12645        return formatLong2.time({ width: "long" });
12646      case "pppp":
12647      default:
12648        return formatLong2.time({ width: "full" });
12649    }
12650  };
12651  var dateTimeLongFormatter = (pattern, formatLong2) => {
12652    const matchResult = pattern.match(/(P+)(p+)?/) || [];
12653    const datePattern = matchResult[1];
12654    const timePattern = matchResult[2];
12655    if (!timePattern) {
12656      return dateLongFormatter(pattern, formatLong2);
12657    }
12658    let dateTimeFormat;
12659    switch (datePattern) {
12660      case "P":
12661        dateTimeFormat = formatLong2.dateTime({ width: "short" });
12662        break;
12663      case "PP":
12664        dateTimeFormat = formatLong2.dateTime({ width: "medium" });
12665        break;
12666      case "PPP":
12667        dateTimeFormat = formatLong2.dateTime({ width: "long" });
12668        break;
12669      case "PPPP":
12670      default:
12671        dateTimeFormat = formatLong2.dateTime({ width: "full" });
12672        break;
12673    }
12674    return dateTimeFormat.replace("{{date}}", dateLongFormatter(datePattern, formatLong2)).replace("{{time}}", timeLongFormatter(timePattern, formatLong2));
12675  };
12676  var longFormatters = {
12677    p: timeLongFormatter,
12678    P: dateTimeLongFormatter
12679  };
12680  
12681  // packages/dataviews/node_modules/date-fns/_lib/protectedTokens.js
12682  var dayOfYearTokenRE = /^D+$/;
12683  var weekYearTokenRE = /^Y+$/;
12684  var throwTokens = ["D", "DD", "YY", "YYYY"];
12685  function isProtectedDayOfYearToken(token) {
12686    return dayOfYearTokenRE.test(token);
12687  }
12688  function isProtectedWeekYearToken(token) {
12689    return weekYearTokenRE.test(token);
12690  }
12691  function warnOrThrowProtectedError(token, format6, input) {
12692    const _message = message(token, format6, input);
12693    console.warn(_message);
12694    if (throwTokens.includes(token)) throw new RangeError(_message);
12695  }
12696  function message(token, format6, input) {
12697    const subject = token[0] === "Y" ? "years" : "days of the month";
12698    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`;
12699  }
12700  
12701  // packages/dataviews/node_modules/date-fns/format.js
12702  var formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g;
12703  var longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;
12704  var escapedStringRegExp = /^'([^]*?)'?$/;
12705  var doubleQuoteRegExp = /''/g;
12706  var unescapedLatinCharacterRegExp = /[a-zA-Z]/;
12707  function format(date, formatStr, options) {
12708    const defaultOptions2 = getDefaultOptions();
12709    const locale = options?.locale ?? defaultOptions2.locale ?? enUS;
12710    const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1;
12711    const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0;
12712    const originalDate = toDate(date, options?.in);
12713    if (!isValid(originalDate)) {
12714      throw new RangeError("Invalid time value");
12715    }
12716    let parts = formatStr.match(longFormattingTokensRegExp).map((substring) => {
12717      const firstCharacter = substring[0];
12718      if (firstCharacter === "p" || firstCharacter === "P") {
12719        const longFormatter = longFormatters[firstCharacter];
12720        return longFormatter(substring, locale.formatLong);
12721      }
12722      return substring;
12723    }).join("").match(formattingTokensRegExp).map((substring) => {
12724      if (substring === "''") {
12725        return { isToken: false, value: "'" };
12726      }
12727      const firstCharacter = substring[0];
12728      if (firstCharacter === "'") {
12729        return { isToken: false, value: cleanEscapedString(substring) };
12730      }
12731      if (formatters[firstCharacter]) {
12732        return { isToken: true, value: substring };
12733      }
12734      if (firstCharacter.match(unescapedLatinCharacterRegExp)) {
12735        throw new RangeError(
12736          "Format string contains an unescaped latin alphabet character `" + firstCharacter + "`"
12737        );
12738      }
12739      return { isToken: false, value: substring };
12740    });
12741    if (locale.localize.preprocessor) {
12742      parts = locale.localize.preprocessor(originalDate, parts);
12743    }
12744    const formatterOptions = {
12745      firstWeekContainsDate,
12746      weekStartsOn,
12747      locale
12748    };
12749    return parts.map((part) => {
12750      if (!part.isToken) return part.value;
12751      const token = part.value;
12752      if (!options?.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token) || !options?.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) {
12753        warnOrThrowProtectedError(token, formatStr, String(date));
12754      }
12755      const formatter = formatters[token[0]];
12756      return formatter(originalDate, token, locale.localize, formatterOptions);
12757    }).join("");
12758  }
12759  function cleanEscapedString(input) {
12760    const matched = input.match(escapedStringRegExp);
12761    if (!matched) {
12762      return input;
12763    }
12764    return matched[1].replace(doubleQuoteRegExp, "'");
12765  }
12766  
12767  // packages/dataviews/node_modules/date-fns/subDays.js
12768  function subDays(date, amount, options) {
12769    return addDays(date, -amount, options);
12770  }
12771  
12772  // packages/dataviews/node_modules/date-fns/subMonths.js
12773  function subMonths(date, amount, options) {
12774    return addMonths(date, -amount, options);
12775  }
12776  
12777  // packages/dataviews/node_modules/date-fns/subWeeks.js
12778  function subWeeks(date, amount, options) {
12779    return addWeeks(date, -amount, options);
12780  }
12781  
12782  // packages/dataviews/node_modules/date-fns/subYears.js
12783  function subYears(date, amount, options) {
12784    return addYears(date, -amount, options);
12785  }
12786  
12787  // packages/dataviews/build-module/dataform-controls/datetime.js
12788  var import_components34 = __toESM(require_components());
12789  var import_element39 = __toESM(require_element());
12790  var import_i18n32 = __toESM(require_i18n());
12791  var import_date2 = __toESM(require_date());
12792  
12793  // packages/dataviews/build-module/dataform-controls/utils/relative-date-control.js
12794  var import_components33 = __toESM(require_components());
12795  var import_element38 = __toESM(require_element());
12796  var import_i18n31 = __toESM(require_i18n());
12797  var import_jsx_runtime69 = __toESM(require_jsx_runtime());
12798  var TIME_UNITS_OPTIONS = {
12799    [OPERATOR_IN_THE_PAST]: [
12800      { value: "days", label: (0, import_i18n31.__)("Days") },
12801      { value: "weeks", label: (0, import_i18n31.__)("Weeks") },
12802      { value: "months", label: (0, import_i18n31.__)("Months") },
12803      { value: "years", label: (0, import_i18n31.__)("Years") }
12804    ],
12805    [OPERATOR_OVER]: [
12806      { value: "days", label: (0, import_i18n31.__)("Days ago") },
12807      { value: "weeks", label: (0, import_i18n31.__)("Weeks ago") },
12808      { value: "months", label: (0, import_i18n31.__)("Months ago") },
12809      { value: "years", label: (0, import_i18n31.__)("Years ago") }
12810    ]
12811  };
12812  function RelativeDateControl({
12813    className,
12814    data,
12815    field,
12816    onChange,
12817    hideLabelFromVision,
12818    operator
12819  }) {
12820    const options = TIME_UNITS_OPTIONS[operator === OPERATOR_IN_THE_PAST ? "inThePast" : "over"];
12821    const { id, label, getValue, setValue } = field;
12822    const fieldValue = getValue({ item: data });
12823    const { value: relValue = "", unit = options[0].value } = fieldValue && typeof fieldValue === "object" ? fieldValue : {};
12824    const onChangeValue = (0, import_element38.useCallback)(
12825      (newValue) => onChange(
12826        setValue({
12827          item: data,
12828          value: { value: Number(newValue), unit }
12829        })
12830      ),
12831      [onChange, setValue, data, unit]
12832    );
12833    const onChangeUnit = (0, import_element38.useCallback)(
12834      (newUnit) => onChange(
12835        setValue({
12836          item: data,
12837          value: { value: relValue, unit: newUnit }
12838        })
12839      ),
12840      [onChange, setValue, data, relValue]
12841    );
12842    return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12843      import_components33.BaseControl,
12844      {
12845        id,
12846        className: clsx_default(className, "dataviews-controls__relative-date"),
12847        label,
12848        hideLabelFromVision,
12849        children: /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(import_components33.__experimentalHStack, { spacing: 2.5, children: [
12850          /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12851            import_components33.__experimentalNumberControl,
12852            {
12853              __next40pxDefaultSize: true,
12854              className: "dataviews-controls__relative-date-number",
12855              spinControls: "none",
12856              min: 1,
12857              step: 1,
12858              value: relValue,
12859              onChange: onChangeValue
12860            }
12861          ),
12862          /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
12863            import_components33.SelectControl,
12864            {
12865              className: "dataviews-controls__relative-date-unit",
12866              __next40pxDefaultSize: true,
12867              label: (0, import_i18n31.__)("Unit"),
12868              value: unit,
12869              options,
12870              onChange: onChangeUnit,
12871              hideLabelFromVision: true
12872            }
12873          )
12874        ] })
12875      }
12876    );
12877  }
12878  
12879  // packages/dataviews/build-module/field-types/utils/parse-date-time.js
12880  var import_date = __toESM(require_date());
12881  function parseDateTime(dateTimeString) {
12882    if (!dateTimeString) {
12883      return null;
12884    }
12885    const parsed = (0, import_date.getDate)(dateTimeString);
12886    return parsed && isValid(parsed) ? parsed : null;
12887  }
12888  
12889  // packages/dataviews/build-module/dataform-controls/datetime.js
12890  var import_jsx_runtime70 = __toESM(require_jsx_runtime());
12891  var { DateCalendar, ValidatedInputControl } = unlock(import_components34.privateApis);
12892  var formatDateTime = (date) => {
12893    if (!date) {
12894      return "";
12895    }
12896    if (typeof date === "string") {
12897      return date;
12898    }
12899    return format(date, "yyyy-MM-dd'T'HH:mm");
12900  };
12901  function CalendarDateTimeControl({
12902    data,
12903    field,
12904    onChange,
12905    hideLabelFromVision,
12906    validity
12907  }) {
12908    const { id, label, description, setValue, getValue, isValid: isValid2 } = field;
12909    const fieldValue = getValue({ item: data });
12910    const value = typeof fieldValue === "string" ? fieldValue : void 0;
12911    const [calendarMonth, setCalendarMonth] = (0, import_element39.useState)(() => {
12912      const parsedDate = parseDateTime(value);
12913      return parsedDate || /* @__PURE__ */ new Date();
12914    });
12915    const inputControlRef = (0, import_element39.useRef)(null);
12916    const validationTimeoutRef = (0, import_element39.useRef)();
12917    const previousFocusRef = (0, import_element39.useRef)(null);
12918    const onChangeCallback = (0, import_element39.useCallback)(
12919      (newValue) => onChange(setValue({ item: data, value: newValue })),
12920      [data, onChange, setValue]
12921    );
12922    (0, import_element39.useEffect)(() => {
12923      return () => {
12924        if (validationTimeoutRef.current) {
12925          clearTimeout(validationTimeoutRef.current);
12926        }
12927      };
12928    }, []);
12929    const onSelectDate = (0, import_element39.useCallback)(
12930      (newDate) => {
12931        let dateTimeValue;
12932        if (newDate) {
12933          let finalDateTime = newDate;
12934          if (value) {
12935            const currentDateTime = parseDateTime(value);
12936            if (currentDateTime) {
12937              finalDateTime = new Date(newDate);
12938              finalDateTime.setHours(currentDateTime.getHours());
12939              finalDateTime.setMinutes(
12940                currentDateTime.getMinutes()
12941              );
12942            }
12943          }
12944          dateTimeValue = finalDateTime.toISOString();
12945          onChangeCallback(dateTimeValue);
12946          if (validationTimeoutRef.current) {
12947            clearTimeout(validationTimeoutRef.current);
12948          }
12949        } else {
12950          onChangeCallback(void 0);
12951        }
12952        previousFocusRef.current = inputControlRef.current && inputControlRef.current.ownerDocument.activeElement;
12953        validationTimeoutRef.current = setTimeout(() => {
12954          if (inputControlRef.current) {
12955            inputControlRef.current.focus();
12956            inputControlRef.current.blur();
12957            onChangeCallback(dateTimeValue);
12958            if (previousFocusRef.current && previousFocusRef.current instanceof HTMLElement) {
12959              previousFocusRef.current.focus();
12960            }
12961          }
12962        }, 0);
12963      },
12964      [onChangeCallback, value]
12965    );
12966    const handleManualDateTimeChange = (0, import_element39.useCallback)(
12967      (newValue) => {
12968        if (newValue) {
12969          const dateTime = new Date(newValue);
12970          onChangeCallback(dateTime.toISOString());
12971          const parsedDate = parseDateTime(dateTime.toISOString());
12972          if (parsedDate) {
12973            setCalendarMonth(parsedDate);
12974          }
12975        } else {
12976          onChangeCallback(void 0);
12977        }
12978      },
12979      [onChangeCallback]
12980    );
12981    const { format: fieldFormat } = field;
12982    const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date2.getSettings)().l10n.startOfWeek;
12983    const {
12984      timezone: { string: timezoneString }
12985    } = (0, import_date2.getSettings)();
12986    const displayLabel = isValid2?.required && !hideLabelFromVision ? `$label} (${(0, import_i18n32.__)("Required")})` : label;
12987    return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
12988      import_components34.BaseControl,
12989      {
12990        id,
12991        label: displayLabel,
12992        help: description,
12993        hideLabelFromVision,
12994        children: /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(import_components34.__experimentalVStack, { spacing: 4, children: [
12995          /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
12996            DateCalendar,
12997            {
12998              style: { width: "100%" },
12999              selected: value ? parseDateTime(value) || void 0 : void 0,
13000              onSelect: onSelectDate,
13001              month: calendarMonth,
13002              onMonthChange: setCalendarMonth,
13003              timeZone: timezoneString || void 0,
13004              weekStartsOn
13005            }
13006          ),
13007          /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
13008            ValidatedInputControl,
13009            {
13010              ref: inputControlRef,
13011              __next40pxDefaultSize: true,
13012              required: !!isValid2?.required,
13013              customValidity: getCustomValidity(isValid2, validity),
13014              type: "datetime-local",
13015              label: (0, import_i18n32.__)("Date time"),
13016              hideLabelFromVision: true,
13017              value: value ? formatDateTime(
13018                parseDateTime(value) || void 0
13019              ) : "",
13020              onChange: handleManualDateTimeChange
13021            }
13022          )
13023        ] })
13024      }
13025    );
13026  }
13027  function DateTime({
13028    data,
13029    field,
13030    onChange,
13031    hideLabelFromVision,
13032    operator,
13033    validity
13034  }) {
13035    if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) {
13036      return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
13037        RelativeDateControl,
13038        {
13039          className: "dataviews-controls__datetime",
13040          data,
13041          field,
13042          onChange,
13043          hideLabelFromVision,
13044          operator
13045        }
13046      );
13047    }
13048    return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
13049      CalendarDateTimeControl,
13050      {
13051        data,
13052        field,
13053        onChange,
13054        hideLabelFromVision,
13055        validity
13056      }
13057    );
13058  }
13059  
13060  // packages/dataviews/build-module/dataform-controls/date.js
13061  var import_components35 = __toESM(require_components());
13062  var import_element40 = __toESM(require_element());
13063  var import_i18n33 = __toESM(require_i18n());
13064  var import_date3 = __toESM(require_date());
13065  var import_jsx_runtime71 = __toESM(require_jsx_runtime());
13066  var { DateCalendar: DateCalendar2, DateRangeCalendar } = unlock(import_components35.privateApis);
13067  var DATE_PRESETS = [
13068    {
13069      id: "today",
13070      label: (0, import_i18n33.__)("Today"),
13071      getValue: () => (0, import_date3.getDate)(null)
13072    },
13073    {
13074      id: "yesterday",
13075      label: (0, import_i18n33.__)("Yesterday"),
13076      getValue: () => {
13077        const today = (0, import_date3.getDate)(null);
13078        return subDays(today, 1);
13079      }
13080    },
13081    {
13082      id: "past-week",
13083      label: (0, import_i18n33.__)("Past week"),
13084      getValue: () => {
13085        const today = (0, import_date3.getDate)(null);
13086        return subDays(today, 7);
13087      }
13088    },
13089    {
13090      id: "past-month",
13091      label: (0, import_i18n33.__)("Past month"),
13092      getValue: () => {
13093        const today = (0, import_date3.getDate)(null);
13094        return subMonths(today, 1);
13095      }
13096    }
13097  ];
13098  var DATE_RANGE_PRESETS = [
13099    {
13100      id: "last-7-days",
13101      label: (0, import_i18n33.__)("Last 7 days"),
13102      getValue: () => {
13103        const today = (0, import_date3.getDate)(null);
13104        return [subDays(today, 7), today];
13105      }
13106    },
13107    {
13108      id: "last-30-days",
13109      label: (0, import_i18n33.__)("Last 30 days"),
13110      getValue: () => {
13111        const today = (0, import_date3.getDate)(null);
13112        return [subDays(today, 30), today];
13113      }
13114    },
13115    {
13116      id: "month-to-date",
13117      label: (0, import_i18n33.__)("Month to date"),
13118      getValue: () => {
13119        const today = (0, import_date3.getDate)(null);
13120        return [startOfMonth(today), today];
13121      }
13122    },
13123    {
13124      id: "last-year",
13125      label: (0, import_i18n33.__)("Last year"),
13126      getValue: () => {
13127        const today = (0, import_date3.getDate)(null);
13128        return [subYears(today, 1), today];
13129      }
13130    },
13131    {
13132      id: "year-to-date",
13133      label: (0, import_i18n33.__)("Year to date"),
13134      getValue: () => {
13135        const today = (0, import_date3.getDate)(null);
13136        return [startOfYear(today), today];
13137      }
13138    }
13139  ];
13140  var parseDate = (dateString) => {
13141    if (!dateString) {
13142      return null;
13143    }
13144    const parsed = (0, import_date3.getDate)(dateString);
13145    return parsed && isValid(parsed) ? parsed : null;
13146  };
13147  var formatDate = (date) => {
13148    if (!date) {
13149      return "";
13150    }
13151    return typeof date === "string" ? date : format(date, "yyyy-MM-dd");
13152  };
13153  function ValidatedDateControl({
13154    field,
13155    validity,
13156    inputRefs,
13157    isTouched,
13158    setIsTouched,
13159    children
13160  }) {
13161    const { isValid: isValid2 } = field;
13162    const [customValidity, setCustomValidity] = (0, import_element40.useState)(void 0);
13163    const validateRefs = (0, import_element40.useCallback)(() => {
13164      const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs];
13165      for (const ref of refs) {
13166        const input = ref.current;
13167        if (input && !input.validity.valid) {
13168          setCustomValidity({
13169            type: "invalid",
13170            message: input.validationMessage
13171          });
13172          return;
13173        }
13174      }
13175      setCustomValidity(void 0);
13176    }, [inputRefs]);
13177    (0, import_element40.useEffect)(() => {
13178      if (isTouched) {
13179        const timeoutId = setTimeout(() => {
13180          if (validity) {
13181            setCustomValidity(getCustomValidity(isValid2, validity));
13182          } else {
13183            validateRefs();
13184          }
13185        }, 0);
13186        return () => clearTimeout(timeoutId);
13187      }
13188      return void 0;
13189    }, [isTouched, isValid2, validity, validateRefs]);
13190    const onBlur = (event) => {
13191      if (isTouched) {
13192        return;
13193      }
13194      if (!event.relatedTarget || !event.currentTarget.contains(event.relatedTarget)) {
13195        setIsTouched(true);
13196      }
13197    };
13198    return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { onBlur, children: [
13199      children,
13200      /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("div", { "aria-live": "polite", children: customValidity && /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(
13201        "p",
13202        {
13203          className: clsx_default(
13204            "components-validated-control__indicator",
13205            customValidity.type === "invalid" ? "is-invalid" : void 0,
13206            customValidity.type === "valid" ? "is-valid" : void 0
13207          ),
13208          children: [
13209            /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
13210              import_components35.Icon,
13211              {
13212                className: "components-validated-control__indicator-icon",
13213                icon: error_default,
13214                size: 16,
13215                fill: "currentColor"
13216              }
13217            ),
13218            customValidity.message
13219          ]
13220        }
13221      ) })
13222    ] });
13223  }
13224  function CalendarDateControl({
13225    data,
13226    field,
13227    onChange,
13228    hideLabelFromVision,
13229    validity
13230  }) {
13231    const {
13232      id,
13233      label,
13234      setValue,
13235      getValue,
13236      isValid: isValid2,
13237      format: fieldFormat
13238    } = field;
13239    const [selectedPresetId, setSelectedPresetId] = (0, import_element40.useState)(
13240      null
13241    );
13242    const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date3.getSettings)().l10n.startOfWeek;
13243    const fieldValue = getValue({ item: data });
13244    const value = typeof fieldValue === "string" ? fieldValue : void 0;
13245    const [calendarMonth, setCalendarMonth] = (0, import_element40.useState)(() => {
13246      const parsedDate = parseDate(value);
13247      return parsedDate || /* @__PURE__ */ new Date();
13248    });
13249    const [isTouched, setIsTouched] = (0, import_element40.useState)(false);
13250    const validityTargetRef = (0, import_element40.useRef)(null);
13251    const onChangeCallback = (0, import_element40.useCallback)(
13252      (newValue) => onChange(setValue({ item: data, value: newValue })),
13253      [data, onChange, setValue]
13254    );
13255    const onSelectDate = (0, import_element40.useCallback)(
13256      (newDate) => {
13257        const dateValue = newDate ? format(newDate, "yyyy-MM-dd") : void 0;
13258        onChangeCallback(dateValue);
13259        setSelectedPresetId(null);
13260        setIsTouched(true);
13261      },
13262      [onChangeCallback]
13263    );
13264    const handlePresetClick = (0, import_element40.useCallback)(
13265      (preset) => {
13266        const presetDate = preset.getValue();
13267        const dateValue = formatDate(presetDate);
13268        setCalendarMonth(presetDate);
13269        onChangeCallback(dateValue);
13270        setSelectedPresetId(preset.id);
13271        setIsTouched(true);
13272      },
13273      [onChangeCallback]
13274    );
13275    const handleManualDateChange = (0, import_element40.useCallback)(
13276      (newValue) => {
13277        onChangeCallback(newValue);
13278        if (newValue) {
13279          const parsedDate = parseDate(newValue);
13280          if (parsedDate) {
13281            setCalendarMonth(parsedDate);
13282          }
13283        }
13284        setSelectedPresetId(null);
13285        setIsTouched(true);
13286      },
13287      [onChangeCallback]
13288    );
13289    const {
13290      timezone: { string: timezoneString }
13291    } = (0, import_date3.getSettings)();
13292    const displayLabel = isValid2?.required ? `$label} (${(0, import_i18n33.__)("Required")})` : label;
13293    return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
13294      ValidatedDateControl,
13295      {
13296        field,
13297        validity,
13298        inputRefs: validityTargetRef,
13299        isTouched,
13300        setIsTouched,
13301        children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
13302          import_components35.BaseControl,
13303          {
13304            id,
13305            className: "dataviews-controls__date",
13306            label: displayLabel,
13307            hideLabelFromVision,
13308            children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_components35.__experimentalVStack, { spacing: 4, children: [
13309              /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_components35.__experimentalHStack, { spacing: 2, wrap: true, justify: "flex-start", children: [
13310                DATE_PRESETS.map((preset) => {
13311                  const isSelected2 = selectedPresetId === preset.id;
13312                  return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
13313                    import_components35.Button,
13314                    {
13315                      className: "dataviews-controls__date-preset",
13316                      variant: "tertiary",
13317                      isPressed: isSelected2,
13318                      size: "small",
13319                      onClick: () => handlePresetClick(preset),
13320                      children: preset.label
13321                    },
13322                    preset.id
13323                  );
13324                }),
13325                /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
13326                  import_components35.Button,
13327                  {
13328                    className: "dataviews-controls__date-preset",
13329                    variant: "tertiary",
13330                    isPressed: !selectedPresetId,
13331                    size: "small",
13332                    disabled: !!selectedPresetId,
13333                    accessibleWhenDisabled: false,
13334                    children: (0, import_i18n33.__)("Custom")
13335                  }
13336                )
13337              ] }),
13338              /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
13339                import_components35.__experimentalInputControl,
13340                {
13341                  __next40pxDefaultSize: true,
13342                  ref: validityTargetRef,
13343                  type: "date",
13344                  label: (0, import_i18n33.__)("Date"),
13345                  hideLabelFromVision: true,
13346                  value,
13347                  onChange: handleManualDateChange,
13348                  required: !!field.isValid?.required
13349                }
13350              ),
13351              /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
13352                DateCalendar2,
13353                {
13354                  style: { width: "100%" },
13355                  selected: value ? parseDate(value) || void 0 : void 0,
13356                  onSelect: onSelectDate,
13357                  month: calendarMonth,
13358                  onMonthChange: setCalendarMonth,
13359                  timeZone: timezoneString || void 0,
13360                  weekStartsOn
13361                }
13362              )
13363            ] })
13364          }
13365        )
13366      }
13367    );
13368  }
13369  function CalendarDateRangeControl({
13370    data,
13371    field,
13372    onChange,
13373    hideLabelFromVision,
13374    validity
13375  }) {
13376    const { id, label, getValue, setValue, format: fieldFormat } = field;
13377    let value;
13378    const fieldValue = getValue({ item: data });
13379    if (Array.isArray(fieldValue) && fieldValue.length === 2 && fieldValue.every((date) => typeof date === "string")) {
13380      value = fieldValue;
13381    }
13382    const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date3.getSettings)().l10n.startOfWeek;
13383    const onChangeCallback = (0, import_element40.useCallback)(
13384      (newValue) => {
13385        onChange(
13386          setValue({
13387            item: data,
13388            value: newValue
13389          })
13390        );
13391      },
13392      [data, onChange, setValue]
13393    );
13394    const [selectedPresetId, setSelectedPresetId] = (0, import_element40.useState)(
13395      null
13396    );
13397    const selectedRange = (0, import_element40.useMemo)(() => {
13398      if (!value) {
13399        return { from: void 0, to: void 0 };
13400      }
13401      const [from, to] = value;
13402      return {
13403        from: parseDate(from) || void 0,
13404        to: parseDate(to) || void 0
13405      };
13406    }, [value]);
13407    const [calendarMonth, setCalendarMonth] = (0, import_element40.useState)(() => {
13408      return selectedRange.from || /* @__PURE__ */ new Date();
13409    });
13410    const [isTouched, setIsTouched] = (0, import_element40.useState)(false);
13411    const fromInputRef = (0, import_element40.useRef)(null);
13412    const toInputRef = (0, import_element40.useRef)(null);
13413    const updateDateRange = (0, import_element40.useCallback)(
13414      (fromDate, toDate2) => {
13415        if (fromDate && toDate2) {
13416          onChangeCallback([
13417            formatDate(fromDate),
13418            formatDate(toDate2)
13419          ]);
13420        } else if (!fromDate && !toDate2) {
13421          onChangeCallback(void 0);
13422        }
13423      },
13424      [onChangeCallback]
13425    );
13426    const onSelectCalendarRange = (0, import_element40.useCallback)(
13427      (newRange) => {
13428        updateDateRange(newRange?.from, newRange?.to);
13429        setSelectedPresetId(null);
13430        setIsTouched(true);
13431      },
13432      [updateDateRange]
13433    );
13434    const handlePresetClick = (0, import_element40.useCallback)(
13435      (preset) => {
13436        const [startDate, endDate] = preset.getValue();
13437        setCalendarMonth(startDate);
13438        updateDateRange(startDate, endDate);
13439        setSelectedPresetId(preset.id);
13440        setIsTouched(true);
13441      },
13442      [updateDateRange]
13443    );
13444    const handleManualDateChange = (0, import_element40.useCallback)(
13445      (fromOrTo, newValue) => {
13446        const [currentFrom, currentTo] = value || [
13447          void 0,
13448          void 0
13449        ];
13450        const updatedFrom = fromOrTo === "from" ? newValue : currentFrom;
13451        const updatedTo = fromOrTo === "to" ? newValue : currentTo;
13452        updateDateRange(updatedFrom, updatedTo);
13453        if (newValue) {
13454          const parsedDate = parseDate(newValue);
13455          if (parsedDate) {
13456            setCalendarMonth(parsedDate);
13457          }
13458        }
13459        setSelectedPresetId(null);
13460        setIsTouched(true);
13461      },
13462      [value, updateDateRange]
13463    );
13464    const { timezone } = (0, import_date3.getSettings)();
13465    const displayLabel = field.isValid?.required ? `$label} (${(0, import_i18n33.__)("Required")})` : label;
13466    return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
13467      ValidatedDateControl,
13468      {
13469        field,
13470        validity,
13471        inputRefs: [fromInputRef, toInputRef],
13472        isTouched,
13473        setIsTouched,
13474        children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
13475          import_components35.BaseControl,
13476          {
13477            id,
13478            className: "dataviews-controls__date",
13479            label: displayLabel,
13480            hideLabelFromVision,
13481            children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_components35.__experimentalVStack, { spacing: 4, children: [
13482              /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_components35.__experimentalHStack, { spacing: 2, wrap: true, justify: "flex-start", children: [
13483                DATE_RANGE_PRESETS.map((preset) => {
13484                  const isSelected2 = selectedPresetId === preset.id;
13485                  return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
13486                    import_components35.Button,
13487                    {
13488                      className: "dataviews-controls__date-preset",
13489                      variant: "tertiary",
13490                      isPressed: isSelected2,
13491                      size: "small",
13492                      onClick: () => handlePresetClick(preset),
13493                      children: preset.label
13494                    },
13495                    preset.id
13496                  );
13497                }),
13498                /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
13499                  import_components35.Button,
13500                  {
13501                    className: "dataviews-controls__date-preset",
13502                    variant: "tertiary",
13503                    isPressed: !selectedPresetId,
13504                    size: "small",
13505                    accessibleWhenDisabled: false,
13506                    disabled: !!selectedPresetId,
13507                    children: (0, import_i18n33.__)("Custom")
13508                  }
13509                )
13510              ] }),
13511              /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(import_components35.__experimentalHStack, { spacing: 2, children: [
13512                /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
13513                  import_components35.__experimentalInputControl,
13514                  {
13515                    __next40pxDefaultSize: true,
13516                    ref: fromInputRef,
13517                    type: "date",
13518                    label: (0, import_i18n33.__)("From"),
13519                    hideLabelFromVision: true,
13520                    value: value?.[0],
13521                    onChange: (newValue) => handleManualDateChange("from", newValue),
13522                    required: !!field.isValid?.required
13523                  }
13524                ),
13525                /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
13526                  import_components35.__experimentalInputControl,
13527                  {
13528                    __next40pxDefaultSize: true,
13529                    ref: toInputRef,
13530                    type: "date",
13531                    label: (0, import_i18n33.__)("To"),
13532                    hideLabelFromVision: true,
13533                    value: value?.[1],
13534                    onChange: (newValue) => handleManualDateChange("to", newValue),
13535                    required: !!field.isValid?.required
13536                  }
13537                )
13538              ] }),
13539              /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
13540                DateRangeCalendar,
13541                {
13542                  style: { width: "100%" },
13543                  selected: selectedRange,
13544                  onSelect: onSelectCalendarRange,
13545                  month: calendarMonth,
13546                  onMonthChange: setCalendarMonth,
13547                  timeZone: timezone.string || void 0,
13548                  weekStartsOn
13549                }
13550              )
13551            ] })
13552          }
13553        )
13554      }
13555    );
13556  }
13557  function DateControl({
13558    data,
13559    field,
13560    onChange,
13561    hideLabelFromVision,
13562    operator,
13563    validity
13564  }) {
13565    if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) {
13566      return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
13567        RelativeDateControl,
13568        {
13569          className: "dataviews-controls__date",
13570          data,
13571          field,
13572          onChange,
13573          hideLabelFromVision,
13574          operator
13575        }
13576      );
13577    }
13578    if (operator === OPERATOR_BETWEEN) {
13579      return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
13580        CalendarDateRangeControl,
13581        {
13582          data,
13583          field,
13584          onChange,
13585          hideLabelFromVision,
13586          validity
13587        }
13588      );
13589    }
13590    return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
13591      CalendarDateControl,
13592      {
13593        data,
13594        field,
13595        onChange,
13596        hideLabelFromVision,
13597        validity
13598      }
13599    );
13600  }
13601  
13602  // packages/dataviews/build-module/dataform-controls/email.js
13603  var import_components37 = __toESM(require_components());
13604  
13605  // packages/dataviews/build-module/dataform-controls/utils/validated-input.js
13606  var import_components36 = __toESM(require_components());
13607  var import_element41 = __toESM(require_element());
13608  var import_jsx_runtime72 = __toESM(require_jsx_runtime());
13609  var { ValidatedInputControl: ValidatedInputControl2 } = unlock(import_components36.privateApis);
13610  function ValidatedText({
13611    data,
13612    field,
13613    onChange,
13614    hideLabelFromVision,
13615    type,
13616    prefix,
13617    suffix,
13618    validity
13619  }) {
13620    const { label, placeholder, description, getValue, setValue, isValid: isValid2 } = field;
13621    const value = getValue({ item: data });
13622    const onChangeControl = (0, import_element41.useCallback)(
13623      (newValue) => onChange(
13624        setValue({
13625          item: data,
13626          value: newValue
13627        })
13628      ),
13629      [data, setValue, onChange]
13630    );
13631    return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
13632      ValidatedInputControl2,
13633      {
13634        required: !!isValid2.required,
13635        customValidity: getCustomValidity(isValid2, validity),
13636        label,
13637        placeholder,
13638        value: value ?? "",
13639        help: description,
13640        onChange: onChangeControl,
13641        hideLabelFromVision,
13642        type,
13643        prefix,
13644        suffix,
13645        pattern: isValid2.pattern ? isValid2.pattern.constraint : void 0,
13646        minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0,
13647        maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0,
13648        __next40pxDefaultSize: true
13649      }
13650    );
13651  }
13652  
13653  // packages/dataviews/build-module/dataform-controls/email.js
13654  var import_jsx_runtime73 = __toESM(require_jsx_runtime());
13655  function Email({
13656    data,
13657    field,
13658    onChange,
13659    hideLabelFromVision,
13660    validity
13661  }) {
13662    return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13663      ValidatedText,
13664      {
13665        ...{
13666          data,
13667          field,
13668          onChange,
13669          hideLabelFromVision,
13670          validity,
13671          type: "email",
13672          prefix: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(import_components37.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(import_components37.Icon, { icon: envelope_default }) })
13673        }
13674      }
13675    );
13676  }
13677  
13678  // packages/dataviews/build-module/dataform-controls/telephone.js
13679  var import_components38 = __toESM(require_components());
13680  var import_jsx_runtime74 = __toESM(require_jsx_runtime());
13681  function Telephone({
13682    data,
13683    field,
13684    onChange,
13685    hideLabelFromVision,
13686    validity
13687  }) {
13688    return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
13689      ValidatedText,
13690      {
13691        ...{
13692          data,
13693          field,
13694          onChange,
13695          hideLabelFromVision,
13696          validity,
13697          type: "tel",
13698          prefix: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_components38.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(import_components38.Icon, { icon: mobile_default }) })
13699        }
13700      }
13701    );
13702  }
13703  
13704  // packages/dataviews/build-module/dataform-controls/url.js
13705  var import_components39 = __toESM(require_components());
13706  var import_jsx_runtime75 = __toESM(require_jsx_runtime());
13707  function Url({
13708    data,
13709    field,
13710    onChange,
13711    hideLabelFromVision,
13712    validity
13713  }) {
13714    return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
13715      ValidatedText,
13716      {
13717        ...{
13718          data,
13719          field,
13720          onChange,
13721          hideLabelFromVision,
13722          validity,
13723          type: "url",
13724          prefix: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_components39.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(import_components39.Icon, { icon: link_default }) })
13725        }
13726      }
13727    );
13728  }
13729  
13730  // packages/dataviews/build-module/dataform-controls/utils/validated-number.js
13731  var import_components40 = __toESM(require_components());
13732  var import_element42 = __toESM(require_element());
13733  var import_i18n34 = __toESM(require_i18n());
13734  var import_jsx_runtime76 = __toESM(require_jsx_runtime());
13735  var { ValidatedNumberControl } = unlock(import_components40.privateApis);
13736  function toNumberOrEmpty(value) {
13737    if (value === "" || value === void 0) {
13738      return "";
13739    }
13740    const number = Number(value);
13741    return Number.isFinite(number) ? number : "";
13742  }
13743  function BetweenControls({
13744    value,
13745    onChange,
13746    hideLabelFromVision,
13747    step
13748  }) {
13749    const [min = "", max = ""] = value;
13750    const onChangeMin = (0, import_element42.useCallback)(
13751      (newValue) => onChange([toNumberOrEmpty(newValue), max]),
13752      [onChange, max]
13753    );
13754    const onChangeMax = (0, import_element42.useCallback)(
13755      (newValue) => onChange([min, toNumberOrEmpty(newValue)]),
13756      [onChange, min]
13757    );
13758    return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
13759      import_components40.BaseControl,
13760      {
13761        help: (0, import_i18n34.__)("The max. value must be greater than the min. value."),
13762        children: /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(import_components40.Flex, { direction: "row", gap: 4, children: [
13763          /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
13764            import_components40.__experimentalNumberControl,
13765            {
13766              label: (0, import_i18n34.__)("Min."),
13767              value: min,
13768              max: max ? Number(max) - step : void 0,
13769              onChange: onChangeMin,
13770              __next40pxDefaultSize: true,
13771              hideLabelFromVision,
13772              step
13773            }
13774          ),
13775          /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
13776            import_components40.__experimentalNumberControl,
13777            {
13778              label: (0, import_i18n34.__)("Max."),
13779              value: max,
13780              min: min ? Number(min) + step : void 0,
13781              onChange: onChangeMax,
13782              __next40pxDefaultSize: true,
13783              hideLabelFromVision,
13784              step
13785            }
13786          )
13787        ] })
13788      }
13789    );
13790  }
13791  function ValidatedNumber({
13792    data,
13793    field,
13794    onChange,
13795    hideLabelFromVision,
13796    operator,
13797    validity
13798  }) {
13799    const decimals = field.format?.decimals ?? 0;
13800    const step = Math.pow(10, Math.abs(decimals) * -1);
13801    const { label, description, getValue, setValue, isValid: isValid2 } = field;
13802    const value = getValue({ item: data }) ?? "";
13803    const onChangeControl = (0, import_element42.useCallback)(
13804      (newValue) => {
13805        onChange(
13806          setValue({
13807            item: data,
13808            // Do not convert an empty string or undefined to a number,
13809            // otherwise there's a mismatch between the UI control (empty)
13810            // and the data relied by onChange (0).
13811            value: ["", void 0].includes(newValue) ? void 0 : Number(newValue)
13812          })
13813        );
13814      },
13815      [data, onChange, setValue]
13816    );
13817    const onChangeBetweenControls = (0, import_element42.useCallback)(
13818      (newValue) => {
13819        onChange(
13820          setValue({
13821            item: data,
13822            value: newValue
13823          })
13824        );
13825      },
13826      [data, onChange, setValue]
13827    );
13828    if (operator === OPERATOR_BETWEEN) {
13829      let valueBetween = ["", ""];
13830      if (Array.isArray(value) && value.length === 2 && value.every(
13831        (element) => typeof element === "number" || element === ""
13832      )) {
13833        valueBetween = value;
13834      }
13835      return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
13836        BetweenControls,
13837        {
13838          value: valueBetween,
13839          onChange: onChangeBetweenControls,
13840          hideLabelFromVision,
13841          step
13842        }
13843      );
13844    }
13845    return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
13846      ValidatedNumberControl,
13847      {
13848        required: !!isValid2.required,
13849        customValidity: getCustomValidity(isValid2, validity),
13850        label,
13851        help: description,
13852        value,
13853        onChange: onChangeControl,
13854        __next40pxDefaultSize: true,
13855        hideLabelFromVision,
13856        step,
13857        min: isValid2.min ? isValid2.min.constraint : void 0,
13858        max: isValid2.max ? isValid2.max.constraint : void 0
13859      }
13860    );
13861  }
13862  
13863  // packages/dataviews/build-module/dataform-controls/integer.js
13864  var import_jsx_runtime77 = __toESM(require_jsx_runtime());
13865  function Integer(props) {
13866    return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(ValidatedNumber, { ...props });
13867  }
13868  
13869  // packages/dataviews/build-module/dataform-controls/number.js
13870  var import_jsx_runtime78 = __toESM(require_jsx_runtime());
13871  function Number2(props) {
13872    return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(ValidatedNumber, { ...props });
13873  }
13874  
13875  // packages/dataviews/build-module/dataform-controls/radio.js
13876  var import_components41 = __toESM(require_components());
13877  var import_element43 = __toESM(require_element());
13878  var import_jsx_runtime79 = __toESM(require_jsx_runtime());
13879  var { ValidatedRadioControl } = unlock(import_components41.privateApis);
13880  function Radio({
13881    data,
13882    field,
13883    onChange,
13884    hideLabelFromVision,
13885    validity
13886  }) {
13887    const { label, description, getValue, setValue, isValid: isValid2 } = field;
13888    const { elements, isLoading } = useElements({
13889      elements: field.elements,
13890      getElements: field.getElements
13891    });
13892    const value = getValue({ item: data });
13893    const onChangeControl = (0, import_element43.useCallback)(
13894      (newValue) => onChange(setValue({ item: data, value: newValue })),
13895      [data, onChange, setValue]
13896    );
13897    if (isLoading) {
13898      return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_components41.Spinner, {});
13899    }
13900    return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
13901      ValidatedRadioControl,
13902      {
13903        required: !!field.isValid?.required,
13904        customValidity: getCustomValidity(isValid2, validity),
13905        label,
13906        help: description,
13907        onChange: onChangeControl,
13908        options: elements,
13909        selected: value,
13910        hideLabelFromVision
13911      }
13912    );
13913  }
13914  
13915  // packages/dataviews/build-module/dataform-controls/select.js
13916  var import_components42 = __toESM(require_components());
13917  var import_element44 = __toESM(require_element());
13918  var import_jsx_runtime80 = __toESM(require_jsx_runtime());
13919  var { ValidatedSelectControl } = unlock(import_components42.privateApis);
13920  function Select({
13921    data,
13922    field,
13923    onChange,
13924    hideLabelFromVision,
13925    validity
13926  }) {
13927    const { type, label, description, getValue, setValue, isValid: isValid2 } = field;
13928    const isMultiple = type === "array";
13929    const value = getValue({ item: data }) ?? (isMultiple ? [] : "");
13930    const onChangeControl = (0, import_element44.useCallback)(
13931      (newValue) => onChange(setValue({ item: data, value: newValue })),
13932      [data, onChange, setValue]
13933    );
13934    const { elements, isLoading } = useElements({
13935      elements: field.elements,
13936      getElements: field.getElements
13937    });
13938    if (isLoading) {
13939      return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_components42.Spinner, {});
13940    }
13941    return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
13942      ValidatedSelectControl,
13943      {
13944        required: !!field.isValid?.required,
13945        customValidity: getCustomValidity(isValid2, validity),
13946        label,
13947        value,
13948        help: description,
13949        options: elements,
13950        onChange: onChangeControl,
13951        __next40pxDefaultSize: true,
13952        hideLabelFromVision,
13953        multiple: isMultiple
13954      }
13955    );
13956  }
13957  
13958  // packages/dataviews/build-module/dataform-controls/text.js
13959  var import_element45 = __toESM(require_element());
13960  var import_jsx_runtime81 = __toESM(require_jsx_runtime());
13961  function Text2({
13962    data,
13963    field,
13964    onChange,
13965    hideLabelFromVision,
13966    config,
13967    validity
13968  }) {
13969    const { prefix, suffix } = config || {};
13970    return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
13971      ValidatedText,
13972      {
13973        ...{
13974          data,
13975          field,
13976          onChange,
13977          hideLabelFromVision,
13978          validity,
13979          prefix: prefix ? (0, import_element45.createElement)(prefix) : void 0,
13980          suffix: suffix ? (0, import_element45.createElement)(suffix) : void 0
13981        }
13982      }
13983    );
13984  }
13985  
13986  // packages/dataviews/build-module/dataform-controls/toggle.js
13987  var import_components43 = __toESM(require_components());
13988  var import_element46 = __toESM(require_element());
13989  var import_jsx_runtime82 = __toESM(require_jsx_runtime());
13990  var { ValidatedToggleControl } = unlock(import_components43.privateApis);
13991  function Toggle({
13992    field,
13993    onChange,
13994    data,
13995    hideLabelFromVision,
13996    validity
13997  }) {
13998    const { label, description, getValue, setValue, isValid: isValid2 } = field;
13999    const onChangeControl = (0, import_element46.useCallback)(() => {
14000      onChange(
14001        setValue({ item: data, value: !getValue({ item: data }) })
14002      );
14003    }, [onChange, setValue, data, getValue]);
14004    return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
14005      ValidatedToggleControl,
14006      {
14007        required: !!isValid2.required,
14008        customValidity: getCustomValidity(isValid2, validity),
14009        hidden: hideLabelFromVision,
14010        label,
14011        help: description,
14012        checked: getValue({ item: data }),
14013        onChange: onChangeControl
14014      }
14015    );
14016  }
14017  
14018  // packages/dataviews/build-module/dataform-controls/textarea.js
14019  var import_components44 = __toESM(require_components());
14020  var import_element47 = __toESM(require_element());
14021  var import_jsx_runtime83 = __toESM(require_jsx_runtime());
14022  var { ValidatedTextareaControl } = unlock(import_components44.privateApis);
14023  function Textarea({
14024    data,
14025    field,
14026    onChange,
14027    hideLabelFromVision,
14028    config,
14029    validity
14030  }) {
14031    const { rows = 4 } = config || {};
14032    const { label, placeholder, description, setValue, isValid: isValid2 } = field;
14033    const value = field.getValue({ item: data });
14034    const onChangeControl = (0, import_element47.useCallback)(
14035      (newValue) => onChange(setValue({ item: data, value: newValue })),
14036      [data, onChange, setValue]
14037    );
14038    return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
14039      ValidatedTextareaControl,
14040      {
14041        required: !!isValid2.required,
14042        customValidity: getCustomValidity(isValid2, validity),
14043        label,
14044        placeholder,
14045        value: value ?? "",
14046        help: description,
14047        onChange: onChangeControl,
14048        rows,
14049        minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0,
14050        maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0,
14051        __next40pxDefaultSize: true,
14052        hideLabelFromVision
14053      }
14054    );
14055  }
14056  
14057  // packages/dataviews/build-module/dataform-controls/toggle-group.js
14058  var import_components45 = __toESM(require_components());
14059  var import_element48 = __toESM(require_element());
14060  var import_jsx_runtime84 = __toESM(require_jsx_runtime());
14061  var { ValidatedToggleGroupControl } = unlock(import_components45.privateApis);
14062  function ToggleGroup({
14063    data,
14064    field,
14065    onChange,
14066    hideLabelFromVision,
14067    validity
14068  }) {
14069    const { getValue, setValue, isValid: isValid2 } = field;
14070    const value = getValue({ item: data });
14071    const onChangeControl = (0, import_element48.useCallback)(
14072      (newValue) => onChange(setValue({ item: data, value: newValue })),
14073      [data, onChange, setValue]
14074    );
14075    const { elements, isLoading } = useElements({
14076      elements: field.elements,
14077      getElements: field.getElements
14078    });
14079    if (isLoading) {
14080      return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(import_components45.Spinner, {});
14081    }
14082    if (elements.length === 0) {
14083      return null;
14084    }
14085    const selectedOption = elements.find((el) => el.value === value);
14086    return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
14087      ValidatedToggleGroupControl,
14088      {
14089        required: !!field.isValid?.required,
14090        customValidity: getCustomValidity(isValid2, validity),
14091        __next40pxDefaultSize: true,
14092        isBlock: true,
14093        label: field.label,
14094        help: selectedOption?.description || field.description,
14095        onChange: onChangeControl,
14096        value,
14097        hideLabelFromVision,
14098        children: elements.map((el) => /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
14099          import_components45.__experimentalToggleGroupControlOption,
14100          {
14101            label: el.label,
14102            value: el.value
14103          },
14104          el.value
14105        ))
14106      }
14107    );
14108  }
14109  
14110  // packages/dataviews/build-module/dataform-controls/array.js
14111  var import_components46 = __toESM(require_components());
14112  var import_element49 = __toESM(require_element());
14113  var import_jsx_runtime85 = __toESM(require_jsx_runtime());
14114  var { ValidatedFormTokenField } = unlock(import_components46.privateApis);
14115  function ArrayControl({
14116    data,
14117    field,
14118    onChange,
14119    hideLabelFromVision,
14120    validity
14121  }) {
14122    const { label, placeholder, getValue, setValue, isValid: isValid2 } = field;
14123    const value = getValue({ item: data });
14124    const { elements, isLoading } = useElements({
14125      elements: field.elements,
14126      getElements: field.getElements
14127    });
14128    const arrayValueAsElements = (0, import_element49.useMemo)(
14129      () => Array.isArray(value) ? value.map((token) => {
14130        const element = elements?.find(
14131          (suggestion) => suggestion.value === token
14132        );
14133        return element || { value: token, label: token };
14134      }) : [],
14135      [value, elements]
14136    );
14137    const onChangeControl = (0, import_element49.useCallback)(
14138      (tokens) => {
14139        const valueTokens = tokens.map((token) => {
14140          if (typeof token === "object" && "value" in token) {
14141            return token.value;
14142          }
14143          return token;
14144        });
14145        onChange(setValue({ item: data, value: valueTokens }));
14146      },
14147      [onChange, setValue, data]
14148    );
14149    if (isLoading) {
14150      return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(import_components46.Spinner, {});
14151    }
14152    return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
14153      ValidatedFormTokenField,
14154      {
14155        required: !!isValid2?.required,
14156        customValidity: getCustomValidity(isValid2, validity),
14157        label: hideLabelFromVision ? void 0 : label,
14158        value: arrayValueAsElements,
14159        onChange: onChangeControl,
14160        placeholder,
14161        suggestions: elements?.map((element) => element.value),
14162        __experimentalValidateInput: (token) => {
14163          if (field.isValid?.elements && elements) {
14164            return elements.some(
14165              (element) => element.value === token || element.label === token
14166            );
14167          }
14168          return true;
14169        },
14170        __experimentalExpandOnFocus: elements && elements.length > 0,
14171        __experimentalShowHowTo: !field.isValid?.elements,
14172        displayTransform: (token) => {
14173          if (typeof token === "object" && "label" in token) {
14174            return token.label;
14175          }
14176          if (typeof token === "string" && elements) {
14177            const element = elements.find(
14178              (el) => el.value === token
14179            );
14180            return element?.label || token;
14181          }
14182          return token;
14183        },
14184        __experimentalRenderItem: ({ item }) => {
14185          if (typeof item === "string" && elements) {
14186            const element = elements.find(
14187              (el) => el.value === item
14188            );
14189            return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { children: element?.label || item });
14190          }
14191          return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { children: item });
14192        }
14193      }
14194    );
14195  }
14196  
14197  // node_modules/colord/index.mjs
14198  var r2 = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) };
14199  var t = function(r3) {
14200    return "string" == typeof r3 ? r3.length > 0 : "number" == typeof r3;
14201  };
14202  var n = function(r3, t2, n2) {
14203    return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = Math.pow(10, t2)), Math.round(n2 * r3) / n2 + 0;
14204  };
14205  var e = function(r3, t2, n2) {
14206    return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = 1), r3 > n2 ? n2 : r3 > t2 ? r3 : t2;
14207  };
14208  var u = function(r3) {
14209    return (r3 = isFinite(r3) ? r3 % 360 : 0) > 0 ? r3 : r3 + 360;
14210  };
14211  var a = function(r3) {
14212    return { r: e(r3.r, 0, 255), g: e(r3.g, 0, 255), b: e(r3.b, 0, 255), a: e(r3.a) };
14213  };
14214  var o = function(r3) {
14215    return { r: n(r3.r), g: n(r3.g), b: n(r3.b), a: n(r3.a, 3) };
14216  };
14217  var i = /^#([0-9a-f]{3,8})$/i;
14218  var s = function(r3) {
14219    var t2 = r3.toString(16);
14220    return t2.length < 2 ? "0" + t2 : t2;
14221  };
14222  var h = function(r3) {
14223    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;
14224    return { h: 60 * (i2 < 0 ? i2 + 6 : i2), s: a2 ? o2 / a2 * 100 : 0, v: a2 / 255 * 100, a: u2 };
14225  };
14226  var b = function(r3) {
14227    var t2 = r3.h, n2 = r3.s, e2 = r3.v, u2 = r3.a;
14228    t2 = t2 / 360 * 6, n2 /= 100, e2 /= 100;
14229    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;
14230    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 };
14231  };
14232  var g = function(r3) {
14233    return { h: u(r3.h), s: e(r3.s, 0, 100), l: e(r3.l, 0, 100), a: e(r3.a) };
14234  };
14235  var d = function(r3) {
14236    return { h: n(r3.h), s: n(r3.s), l: n(r3.l), a: n(r3.a, 3) };
14237  };
14238  var f = function(r3) {
14239    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 }));
14240    var t2, n2, e2;
14241  };
14242  var c = function(r3) {
14243    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 };
14244    var t2, n2, e2, u2;
14245  };
14246  var l = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i;
14247  var p = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i;
14248  var v = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i;
14249  var m = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i;
14250  var y = { string: [[function(r3) {
14251    var t2 = i.exec(r3);
14252    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;
14253  }, "hex"], [function(r3) {
14254    var t2 = v.exec(r3) || m.exec(r3);
14255    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;
14256  }, "rgb"], [function(t2) {
14257    var n2 = l.exec(t2) || p.exec(t2);
14258    if (!n2) return null;
14259    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) });
14260    return f(a2);
14261  }, "hsl"]], object: [[function(r3) {
14262    var n2 = r3.r, e2 = r3.g, u2 = r3.b, o2 = r3.a, i2 = void 0 === o2 ? 1 : o2;
14263    return t(n2) && t(e2) && t(u2) ? a({ r: Number(n2), g: Number(e2), b: Number(u2), a: Number(i2) }) : null;
14264  }, "rgb"], [function(r3) {
14265    var n2 = r3.h, e2 = r3.s, u2 = r3.l, a2 = r3.a, o2 = void 0 === a2 ? 1 : a2;
14266    if (!t(n2) || !t(e2) || !t(u2)) return null;
14267    var i2 = g({ h: Number(n2), s: Number(e2), l: Number(u2), a: Number(o2) });
14268    return f(i2);
14269  }, "hsl"], [function(r3) {
14270    var n2 = r3.h, a2 = r3.s, o2 = r3.v, i2 = r3.a, s2 = void 0 === i2 ? 1 : i2;
14271    if (!t(n2) || !t(a2) || !t(o2)) return null;
14272    var h2 = (function(r4) {
14273      return { h: u(r4.h), s: e(r4.s, 0, 100), v: e(r4.v, 0, 100), a: e(r4.a) };
14274    })({ h: Number(n2), s: Number(a2), v: Number(o2), a: Number(s2) });
14275    return b(h2);
14276  }, "hsv"]] };
14277  var N = function(r3, t2) {
14278    for (var n2 = 0; n2 < t2.length; n2++) {
14279      var e2 = t2[n2][0](r3);
14280      if (e2) return [e2, t2[n2][1]];
14281    }
14282    return [null, void 0];
14283  };
14284  var x = function(r3) {
14285    return "string" == typeof r3 ? N(r3.trim(), y.string) : "object" == typeof r3 && null !== r3 ? N(r3, y.object) : [null, void 0];
14286  };
14287  var M = function(r3, t2) {
14288    var n2 = c(r3);
14289    return { h: n2.h, s: e(n2.s + 100 * t2, 0, 100), l: n2.l, a: n2.a };
14290  };
14291  var H = function(r3) {
14292    return (299 * r3.r + 587 * r3.g + 114 * r3.b) / 1e3 / 255;
14293  };
14294  var $ = function(r3, t2) {
14295    var n2 = c(r3);
14296    return { h: n2.h, s: n2.s, l: e(n2.l + 100 * t2, 0, 100), a: n2.a };
14297  };
14298  var j = (function() {
14299    function r3(r4) {
14300      this.parsed = x(r4)[0], this.rgba = this.parsed || { r: 0, g: 0, b: 0, a: 1 };
14301    }
14302    return r3.prototype.isValid = function() {
14303      return null !== this.parsed;
14304    }, r3.prototype.brightness = function() {
14305      return n(H(this.rgba), 2);
14306    }, r3.prototype.isDark = function() {
14307      return H(this.rgba) < 0.5;
14308    }, r3.prototype.isLight = function() {
14309      return H(this.rgba) >= 0.5;
14310    }, r3.prototype.toHex = function() {
14311      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;
14312      var r4, t2, e2, u2, a2, i2;
14313    }, r3.prototype.toRgb = function() {
14314      return o(this.rgba);
14315    }, r3.prototype.toRgbString = function() {
14316      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 + ")";
14317      var r4, t2, n2, e2, u2;
14318    }, r3.prototype.toHsl = function() {
14319      return d(c(this.rgba));
14320    }, r3.prototype.toHslString = function() {
14321      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 + "%)";
14322      var r4, t2, n2, e2, u2;
14323    }, r3.prototype.toHsv = function() {
14324      return r4 = h(this.rgba), { h: n(r4.h), s: n(r4.s), v: n(r4.v), a: n(r4.a, 3) };
14325      var r4;
14326    }, r3.prototype.invert = function() {
14327      return w({ r: 255 - (r4 = this.rgba).r, g: 255 - r4.g, b: 255 - r4.b, a: r4.a });
14328      var r4;
14329    }, r3.prototype.saturate = function(r4) {
14330      return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, r4));
14331    }, r3.prototype.desaturate = function(r4) {
14332      return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, -r4));
14333    }, r3.prototype.grayscale = function() {
14334      return w(M(this.rgba, -1));
14335    }, r3.prototype.lighten = function(r4) {
14336      return void 0 === r4 && (r4 = 0.1), w($(this.rgba, r4));
14337    }, r3.prototype.darken = function(r4) {
14338      return void 0 === r4 && (r4 = 0.1), w($(this.rgba, -r4));
14339    }, r3.prototype.rotate = function(r4) {
14340      return void 0 === r4 && (r4 = 15), this.hue(this.hue() + r4);
14341    }, r3.prototype.alpha = function(r4) {
14342      return "number" == typeof r4 ? w({ r: (t2 = this.rgba).r, g: t2.g, b: t2.b, a: r4 }) : n(this.rgba.a, 3);
14343      var t2;
14344    }, r3.prototype.hue = function(r4) {
14345      var t2 = c(this.rgba);
14346      return "number" == typeof r4 ? w({ h: r4, s: t2.s, l: t2.l, a: t2.a }) : n(t2.h);
14347    }, r3.prototype.isEqual = function(r4) {
14348      return this.toHex() === w(r4).toHex();
14349    }, r3;
14350  })();
14351  var w = function(r3) {
14352    return r3 instanceof j ? r3 : new j(r3);
14353  };
14354  
14355  // packages/dataviews/build-module/dataform-controls/color.js
14356  var import_components47 = __toESM(require_components());
14357  var import_element50 = __toESM(require_element());
14358  var import_jsx_runtime86 = __toESM(require_jsx_runtime());
14359  var { ValidatedInputControl: ValidatedInputControl3, Picker } = unlock(import_components47.privateApis);
14360  var ColorPicker = ({
14361    color,
14362    onColorChange
14363  }) => {
14364    const validColor = color && w(color).isValid() ? color : "#ffffff";
14365    return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
14366      import_components47.Dropdown,
14367      {
14368        renderToggle: ({ onToggle, isOpen }) => /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(import_components47.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
14369          "button",
14370          {
14371            type: "button",
14372            onClick: onToggle,
14373            style: {
14374              width: "24px",
14375              height: "24px",
14376              borderRadius: "50%",
14377              backgroundColor: validColor,
14378              border: "1px solid #ddd",
14379              cursor: "pointer",
14380              outline: isOpen ? "2px solid #007cba" : "none",
14381              outlineOffset: "2px",
14382              display: "flex",
14383              alignItems: "center",
14384              justifyContent: "center",
14385              padding: 0,
14386              margin: 0
14387            },
14388            "aria-label": "Open color picker"
14389          }
14390        ) }),
14391        renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { style: { padding: "16px" }, children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
14392          Picker,
14393          {
14394            color: w(validColor),
14395            onChange: onColorChange,
14396            enableAlpha: true
14397          }
14398        ) })
14399      }
14400    );
14401  };
14402  function Color({
14403    data,
14404    field,
14405    onChange,
14406    hideLabelFromVision,
14407    validity
14408  }) {
14409    const { label, placeholder, description, setValue, isValid: isValid2 } = field;
14410    const value = field.getValue({ item: data }) || "";
14411    const handleColorChange = (0, import_element50.useCallback)(
14412      (colorObject) => {
14413        onChange(setValue({ item: data, value: colorObject.toHex() }));
14414      },
14415      [data, onChange, setValue]
14416    );
14417    const handleInputChange = (0, import_element50.useCallback)(
14418      (newValue) => {
14419        onChange(setValue({ item: data, value: newValue || "" }));
14420      },
14421      [data, onChange, setValue]
14422    );
14423    return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
14424      ValidatedInputControl3,
14425      {
14426        required: !!field.isValid?.required,
14427        customValidity: getCustomValidity(isValid2, validity),
14428        label,
14429        placeholder,
14430        value,
14431        help: description,
14432        onChange: handleInputChange,
14433        hideLabelFromVision,
14434        type: "text",
14435        prefix: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
14436          ColorPicker,
14437          {
14438            color: value,
14439            onColorChange: handleColorChange
14440          }
14441        )
14442      }
14443    );
14444  }
14445  
14446  // packages/dataviews/build-module/dataform-controls/password.js
14447  var import_components48 = __toESM(require_components());
14448  var import_element51 = __toESM(require_element());
14449  var import_i18n35 = __toESM(require_i18n());
14450  var import_jsx_runtime87 = __toESM(require_jsx_runtime());
14451  function Password({
14452    data,
14453    field,
14454    onChange,
14455    hideLabelFromVision,
14456    validity
14457  }) {
14458    const [isVisible2, setIsVisible] = (0, import_element51.useState)(false);
14459    const toggleVisibility = (0, import_element51.useCallback)(() => {
14460      setIsVisible((prev) => !prev);
14461    }, []);
14462    return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
14463      ValidatedText,
14464      {
14465        ...{
14466          data,
14467          field,
14468          onChange,
14469          hideLabelFromVision,
14470          validity,
14471          type: isVisible2 ? "text" : "password",
14472          suffix: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(import_components48.__experimentalInputControlSuffixWrapper, { variant: "control", children: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
14473            import_components48.Button,
14474            {
14475              icon: isVisible2 ? unseen_default : seen_default,
14476              onClick: toggleVisibility,
14477              size: "small",
14478              label: isVisible2 ? (0, import_i18n35.__)("Hide password") : (0, import_i18n35.__)("Show password")
14479            }
14480          ) })
14481        }
14482      }
14483    );
14484  }
14485  
14486  // packages/dataviews/build-module/field-types/utils/has-elements.js
14487  function hasElements(field) {
14488    return Array.isArray(field.elements) && field.elements.length > 0 || typeof field.getElements === "function";
14489  }
14490  
14491  // packages/dataviews/build-module/dataform-controls/index.js
14492  var import_jsx_runtime88 = __toESM(require_jsx_runtime());
14493  var FORM_CONTROLS = {
14494    array: ArrayControl,
14495    checkbox: Checkbox,
14496    color: Color,
14497    datetime: DateTime,
14498    date: DateControl,
14499    email: Email,
14500    telephone: Telephone,
14501    url: Url,
14502    integer: Integer,
14503    number: Number2,
14504    password: Password,
14505    radio: Radio,
14506    select: Select,
14507    text: Text2,
14508    toggle: Toggle,
14509    textarea: Textarea,
14510    toggleGroup: ToggleGroup
14511  };
14512  function isEditConfig(value) {
14513    return value && typeof value === "object" && typeof value.control === "string";
14514  }
14515  function createConfiguredControl(config) {
14516    const { control, ...controlConfig } = config;
14517    const BaseControlType = getControlByType(control);
14518    if (BaseControlType === null) {
14519      return null;
14520    }
14521    return function ConfiguredControl(props) {
14522      return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(BaseControlType, { ...props, config: controlConfig });
14523    };
14524  }
14525  function getControl(field, fallback) {
14526    if (typeof field.Edit === "function") {
14527      return field.Edit;
14528    }
14529    if (typeof field.Edit === "string") {
14530      return getControlByType(field.Edit);
14531    }
14532    if (isEditConfig(field.Edit)) {
14533      return createConfiguredControl(field.Edit);
14534    }
14535    if (hasElements(field) && field.type !== "array") {
14536      return getControlByType("select");
14537    }
14538    if (fallback === null) {
14539      return null;
14540    }
14541    return getControlByType(fallback);
14542  }
14543  function getControlByType(type) {
14544    if (Object.keys(FORM_CONTROLS).includes(type)) {
14545      return FORM_CONTROLS[type];
14546    }
14547    return null;
14548  }
14549  
14550  // packages/dataviews/build-module/field-types/utils/get-filter-by.js
14551  function getFilterBy(field, defaultOperators, validOperators) {
14552    if (field.filterBy === false) {
14553      return false;
14554    }
14555    const operators = field.filterBy?.operators?.filter(
14556      (op) => validOperators.includes(op)
14557    ) ?? defaultOperators;
14558    if (operators.length === 0) {
14559      return false;
14560    }
14561    return {
14562      isPrimary: !!field.filterBy?.isPrimary,
14563      operators
14564    };
14565  }
14566  var get_filter_by_default = getFilterBy;
14567  
14568  // packages/dataviews/build-module/field-types/utils/get-value-from-id.js
14569  var getValueFromId = (id) => ({ item }) => {
14570    const path = id.split(".");
14571    let value = item;
14572    for (const segment of path) {
14573      if (value.hasOwnProperty(segment)) {
14574        value = value[segment];
14575      } else {
14576        value = void 0;
14577      }
14578    }
14579    return value;
14580  };
14581  var get_value_from_id_default = getValueFromId;
14582  
14583  // packages/dataviews/build-module/field-types/utils/set-value-from-id.js
14584  var setValueFromId = (id) => ({ value }) => {
14585    const path = id.split(".");
14586    const result = {};
14587    let current = result;
14588    for (const segment of path.slice(0, -1)) {
14589      current[segment] = {};
14590      current = current[segment];
14591    }
14592    current[path.at(-1)] = value;
14593    return result;
14594  };
14595  var set_value_from_id_default = setValueFromId;
14596  
14597  // packages/dataviews/build-module/field-types/email.js
14598  var import_i18n36 = __toESM(require_i18n());
14599  
14600  // packages/dataviews/build-module/field-types/utils/render-from-elements.js
14601  function RenderFromElements({
14602    item,
14603    field
14604  }) {
14605    const { elements, isLoading } = useElements({
14606      elements: field.elements,
14607      getElements: field.getElements
14608    });
14609    const value = field.getValue({ item });
14610    if (isLoading) {
14611      return value;
14612    }
14613    if (elements.length === 0) {
14614      return value;
14615    }
14616    return elements?.find((element) => element.value === value)?.label || field.getValue({ item });
14617  }
14618  
14619  // packages/dataviews/build-module/field-types/utils/render-default.js
14620  var import_jsx_runtime89 = __toESM(require_jsx_runtime());
14621  function render({
14622    item,
14623    field
14624  }) {
14625    if (field.hasElements) {
14626      return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(RenderFromElements, { item, field });
14627    }
14628    return field.getValueFormatted({ item, field });
14629  }
14630  
14631  // packages/dataviews/build-module/field-types/utils/sort-text.js
14632  var sort_text_default = (a2, b2, direction) => {
14633    return direction === "asc" ? a2.localeCompare(b2) : b2.localeCompare(a2);
14634  };
14635  
14636  // packages/dataviews/build-module/field-types/utils/is-valid-required.js
14637  function isValidRequired(item, field) {
14638    const value = field.getValue({ item });
14639    return ![void 0, "", null].includes(value);
14640  }
14641  
14642  // packages/dataviews/build-module/field-types/utils/is-valid-min-length.js
14643  function isValidMinLength(item, field) {
14644    if (typeof field.isValid.minLength?.constraint !== "number") {
14645      return false;
14646    }
14647    const value = field.getValue({ item });
14648    if ([void 0, "", null].includes(value)) {
14649      return true;
14650    }
14651    return String(value).length >= field.isValid.minLength.constraint;
14652  }
14653  
14654  // packages/dataviews/build-module/field-types/utils/is-valid-max-length.js
14655  function isValidMaxLength(item, field) {
14656    if (typeof field.isValid.maxLength?.constraint !== "number") {
14657      return false;
14658    }
14659    const value = field.getValue({ item });
14660    if ([void 0, "", null].includes(value)) {
14661      return true;
14662    }
14663    return String(value).length <= field.isValid.maxLength.constraint;
14664  }
14665  
14666  // packages/dataviews/build-module/field-types/utils/is-valid-pattern.js
14667  function isValidPattern(item, field) {
14668    if (field.isValid.pattern?.constraint === void 0) {
14669      return true;
14670    }
14671    try {
14672      const regexp = new RegExp(field.isValid.pattern.constraint);
14673      const value = field.getValue({ item });
14674      if ([void 0, "", null].includes(value)) {
14675        return true;
14676      }
14677      return regexp.test(String(value));
14678    } catch {
14679      return false;
14680    }
14681  }
14682  
14683  // packages/dataviews/build-module/field-types/utils/is-valid-elements.js
14684  function isValidElements(item, field) {
14685    const elements = field.elements ?? [];
14686    const validValues = elements.map((el) => el.value);
14687    if (validValues.length === 0) {
14688      return true;
14689    }
14690    const value = field.getValue({ item });
14691    return [].concat(value).every((v2) => validValues.includes(v2));
14692  }
14693  
14694  // packages/dataviews/build-module/field-types/utils/get-value-formatted-default.js
14695  function getValueFormatted({
14696    item,
14697    field
14698  }) {
14699    return field.getValue({ item });
14700  }
14701  var get_value_formatted_default_default = getValueFormatted;
14702  
14703  // packages/dataviews/build-module/field-types/email.js
14704  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])?)*$/;
14705  function isValidCustom(item, field) {
14706    const value = field.getValue({ item });
14707    if (![void 0, "", null].includes(value) && !emailRegex.test(value)) {
14708      return (0, import_i18n36.__)("Value must be a valid email address.");
14709    }
14710    return null;
14711  }
14712  var email_default = {
14713    type: "email",
14714    render,
14715    Edit: "email",
14716    sort: sort_text_default,
14717    enableSorting: true,
14718    enableGlobalSearch: false,
14719    defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
14720    validOperators: [
14721      OPERATOR_IS,
14722      OPERATOR_IS_NOT,
14723      OPERATOR_CONTAINS,
14724      OPERATOR_NOT_CONTAINS,
14725      OPERATOR_STARTS_WITH,
14726      // Multiple selection
14727      OPERATOR_IS_ANY,
14728      OPERATOR_IS_NONE,
14729      OPERATOR_IS_ALL,
14730      OPERATOR_IS_NOT_ALL
14731    ],
14732    format: {},
14733    getValueFormatted: get_value_formatted_default_default,
14734    validate: {
14735      required: isValidRequired,
14736      pattern: isValidPattern,
14737      minLength: isValidMinLength,
14738      maxLength: isValidMaxLength,
14739      elements: isValidElements,
14740      custom: isValidCustom
14741    }
14742  };
14743  
14744  // packages/dataviews/build-module/field-types/integer.js
14745  var import_i18n37 = __toESM(require_i18n());
14746  
14747  // packages/dataviews/build-module/field-types/utils/sort-number.js
14748  var sort_number_default = (a2, b2, direction) => {
14749    return direction === "asc" ? a2 - b2 : b2 - a2;
14750  };
14751  
14752  // packages/dataviews/build-module/field-types/utils/is-valid-min.js
14753  function isValidMin(item, field) {
14754    if (typeof field.isValid.min?.constraint !== "number") {
14755      return false;
14756    }
14757    const value = field.getValue({ item });
14758    if ([void 0, "", null].includes(value)) {
14759      return true;
14760    }
14761    return Number(value) >= field.isValid.min.constraint;
14762  }
14763  
14764  // packages/dataviews/build-module/field-types/utils/is-valid-max.js
14765  function isValidMax(item, field) {
14766    if (typeof field.isValid.max?.constraint !== "number") {
14767      return false;
14768    }
14769    const value = field.getValue({ item });
14770    if ([void 0, "", null].includes(value)) {
14771      return true;
14772    }
14773    return Number(value) <= field.isValid.max.constraint;
14774  }
14775  
14776  // packages/dataviews/build-module/field-types/integer.js
14777  var format2 = {
14778    separatorThousand: ","
14779  };
14780  function getValueFormatted2({
14781    item,
14782    field
14783  }) {
14784    let value = field.getValue({ item });
14785    if (value === null || value === void 0) {
14786      return "";
14787    }
14788    value = Number(value);
14789    if (!Number.isFinite(value)) {
14790      return String(value);
14791    }
14792    let formatInteger;
14793    if (field.type !== "integer") {
14794      formatInteger = format2;
14795    } else {
14796      formatInteger = field.format;
14797    }
14798    const { separatorThousand } = formatInteger;
14799    const integerValue = Math.trunc(value);
14800    if (!separatorThousand) {
14801      return String(integerValue);
14802    }
14803    return String(integerValue).replace(
14804      /\B(?=(\d{3})+(?!\d))/g,
14805      separatorThousand
14806    );
14807  }
14808  function isValidCustom2(item, field) {
14809    const value = field.getValue({ item });
14810    if (![void 0, "", null].includes(value) && !Number.isInteger(value)) {
14811      return (0, import_i18n37.__)("Value must be an integer.");
14812    }
14813    return null;
14814  }
14815  var integer_default = {
14816    type: "integer",
14817    render,
14818    Edit: "integer",
14819    sort: sort_number_default,
14820    enableSorting: true,
14821    enableGlobalSearch: false,
14822    defaultOperators: [
14823      OPERATOR_IS,
14824      OPERATOR_IS_NOT,
14825      OPERATOR_LESS_THAN,
14826      OPERATOR_GREATER_THAN,
14827      OPERATOR_LESS_THAN_OR_EQUAL,
14828      OPERATOR_GREATER_THAN_OR_EQUAL,
14829      OPERATOR_BETWEEN
14830    ],
14831    validOperators: [
14832      // Single-selection
14833      OPERATOR_IS,
14834      OPERATOR_IS_NOT,
14835      OPERATOR_LESS_THAN,
14836      OPERATOR_GREATER_THAN,
14837      OPERATOR_LESS_THAN_OR_EQUAL,
14838      OPERATOR_GREATER_THAN_OR_EQUAL,
14839      OPERATOR_BETWEEN,
14840      // Multiple-selection
14841      OPERATOR_IS_ANY,
14842      OPERATOR_IS_NONE,
14843      OPERATOR_IS_ALL,
14844      OPERATOR_IS_NOT_ALL
14845    ],
14846    format: format2,
14847    getValueFormatted: getValueFormatted2,
14848    validate: {
14849      required: isValidRequired,
14850      min: isValidMin,
14851      max: isValidMax,
14852      elements: isValidElements,
14853      custom: isValidCustom2
14854    }
14855  };
14856  
14857  // packages/dataviews/build-module/field-types/number.js
14858  var import_i18n38 = __toESM(require_i18n());
14859  var format3 = {
14860    separatorThousand: ",",
14861    separatorDecimal: ".",
14862    decimals: 2
14863  };
14864  function getValueFormatted3({
14865    item,
14866    field
14867  }) {
14868    let value = field.getValue({ item });
14869    if (value === null || value === void 0) {
14870      return "";
14871    }
14872    value = Number(value);
14873    if (!Number.isFinite(value)) {
14874      return String(value);
14875    }
14876    let formatNumber;
14877    if (field.type !== "number") {
14878      formatNumber = format3;
14879    } else {
14880      formatNumber = field.format;
14881    }
14882    const { separatorThousand, separatorDecimal, decimals } = formatNumber;
14883    const fixedValue = value.toFixed(decimals);
14884    const [integerPart, decimalPart] = fixedValue.split(".");
14885    const formattedInteger = separatorThousand ? integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, separatorThousand) : integerPart;
14886    return decimals === 0 ? formattedInteger : formattedInteger + separatorDecimal + decimalPart;
14887  }
14888  function isEmpty2(value) {
14889    return value === "" || value === void 0 || value === null;
14890  }
14891  function isValidCustom3(item, field) {
14892    const value = field.getValue({ item });
14893    if (!isEmpty2(value) && !Number.isFinite(value)) {
14894      return (0, import_i18n38.__)("Value must be a number.");
14895    }
14896    return null;
14897  }
14898  var number_default = {
14899    type: "number",
14900    render,
14901    Edit: "number",
14902    sort: sort_number_default,
14903    enableSorting: true,
14904    enableGlobalSearch: false,
14905    defaultOperators: [
14906      OPERATOR_IS,
14907      OPERATOR_IS_NOT,
14908      OPERATOR_LESS_THAN,
14909      OPERATOR_GREATER_THAN,
14910      OPERATOR_LESS_THAN_OR_EQUAL,
14911      OPERATOR_GREATER_THAN_OR_EQUAL,
14912      OPERATOR_BETWEEN
14913    ],
14914    validOperators: [
14915      // Single-selection
14916      OPERATOR_IS,
14917      OPERATOR_IS_NOT,
14918      OPERATOR_LESS_THAN,
14919      OPERATOR_GREATER_THAN,
14920      OPERATOR_LESS_THAN_OR_EQUAL,
14921      OPERATOR_GREATER_THAN_OR_EQUAL,
14922      OPERATOR_BETWEEN,
14923      // Multiple-selection
14924      OPERATOR_IS_ANY,
14925      OPERATOR_IS_NONE,
14926      OPERATOR_IS_ALL,
14927      OPERATOR_IS_NOT_ALL
14928    ],
14929    format: format3,
14930    getValueFormatted: getValueFormatted3,
14931    validate: {
14932      required: isValidRequired,
14933      min: isValidMin,
14934      max: isValidMax,
14935      elements: isValidElements,
14936      custom: isValidCustom3
14937    }
14938  };
14939  
14940  // packages/dataviews/build-module/field-types/text.js
14941  var text_default = {
14942    type: "text",
14943    render,
14944    Edit: "text",
14945    sort: sort_text_default,
14946    enableSorting: true,
14947    enableGlobalSearch: false,
14948    defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
14949    validOperators: [
14950      // Single selection
14951      OPERATOR_IS,
14952      OPERATOR_IS_NOT,
14953      OPERATOR_CONTAINS,
14954      OPERATOR_NOT_CONTAINS,
14955      OPERATOR_STARTS_WITH,
14956      // Multiple selection
14957      OPERATOR_IS_ANY,
14958      OPERATOR_IS_NONE,
14959      OPERATOR_IS_ALL,
14960      OPERATOR_IS_NOT_ALL
14961    ],
14962    format: {},
14963    getValueFormatted: get_value_formatted_default_default,
14964    validate: {
14965      required: isValidRequired,
14966      pattern: isValidPattern,
14967      minLength: isValidMinLength,
14968      maxLength: isValidMaxLength,
14969      elements: isValidElements
14970    }
14971  };
14972  
14973  // packages/dataviews/build-module/field-types/datetime.js
14974  var import_date5 = __toESM(require_date());
14975  var format4 = {
14976    datetime: (0, import_date5.getSettings)().formats.datetime,
14977    weekStartsOn: (0, import_date5.getSettings)().l10n.startOfWeek
14978  };
14979  function getValueFormatted4({
14980    item,
14981    field
14982  }) {
14983    const value = field.getValue({ item });
14984    if (["", void 0, null].includes(value)) {
14985      return "";
14986    }
14987    let formatDatetime;
14988    if (field.type !== "datetime") {
14989      formatDatetime = format4;
14990    } else {
14991      formatDatetime = field.format;
14992    }
14993    return (0, import_date5.dateI18n)(formatDatetime.datetime, (0, import_date5.getDate)(value));
14994  }
14995  var sort = (a2, b2, direction) => {
14996    const timeA = new Date(a2).getTime();
14997    const timeB = new Date(b2).getTime();
14998    return direction === "asc" ? timeA - timeB : timeB - timeA;
14999  };
15000  var datetime_default = {
15001    type: "datetime",
15002    render,
15003    Edit: "datetime",
15004    sort,
15005    enableSorting: true,
15006    enableGlobalSearch: false,
15007    defaultOperators: [
15008      OPERATOR_ON,
15009      OPERATOR_NOT_ON,
15010      OPERATOR_BEFORE,
15011      OPERATOR_AFTER,
15012      OPERATOR_BEFORE_INC,
15013      OPERATOR_AFTER_INC,
15014      OPERATOR_IN_THE_PAST,
15015      OPERATOR_OVER
15016    ],
15017    validOperators: [
15018      OPERATOR_ON,
15019      OPERATOR_NOT_ON,
15020      OPERATOR_BEFORE,
15021      OPERATOR_AFTER,
15022      OPERATOR_BEFORE_INC,
15023      OPERATOR_AFTER_INC,
15024      OPERATOR_IN_THE_PAST,
15025      OPERATOR_OVER
15026    ],
15027    format: format4,
15028    getValueFormatted: getValueFormatted4,
15029    validate: {
15030      required: isValidRequired,
15031      elements: isValidElements
15032    }
15033  };
15034  
15035  // packages/dataviews/build-module/field-types/date.js
15036  var import_date6 = __toESM(require_date());
15037  var format5 = {
15038    date: (0, import_date6.getSettings)().formats.date,
15039    weekStartsOn: (0, import_date6.getSettings)().l10n.startOfWeek
15040  };
15041  function getValueFormatted5({
15042    item,
15043    field
15044  }) {
15045    const value = field.getValue({ item });
15046    if (["", void 0, null].includes(value)) {
15047      return "";
15048    }
15049    let formatDate2;
15050    if (field.type !== "date") {
15051      formatDate2 = format5;
15052    } else {
15053      formatDate2 = field.format;
15054    }
15055    return (0, import_date6.dateI18n)(formatDate2.date, (0, import_date6.getDate)(value));
15056  }
15057  var sort2 = (a2, b2, direction) => {
15058    const timeA = new Date(a2).getTime();
15059    const timeB = new Date(b2).getTime();
15060    return direction === "asc" ? timeA - timeB : timeB - timeA;
15061  };
15062  var date_default = {
15063    type: "date",
15064    render,
15065    Edit: "date",
15066    sort: sort2,
15067    enableSorting: true,
15068    enableGlobalSearch: false,
15069    defaultOperators: [
15070      OPERATOR_ON,
15071      OPERATOR_NOT_ON,
15072      OPERATOR_BEFORE,
15073      OPERATOR_AFTER,
15074      OPERATOR_BEFORE_INC,
15075      OPERATOR_AFTER_INC,
15076      OPERATOR_IN_THE_PAST,
15077      OPERATOR_OVER,
15078      OPERATOR_BETWEEN
15079    ],
15080    validOperators: [
15081      OPERATOR_ON,
15082      OPERATOR_NOT_ON,
15083      OPERATOR_BEFORE,
15084      OPERATOR_AFTER,
15085      OPERATOR_BEFORE_INC,
15086      OPERATOR_AFTER_INC,
15087      OPERATOR_IN_THE_PAST,
15088      OPERATOR_OVER,
15089      OPERATOR_BETWEEN
15090    ],
15091    format: format5,
15092    getValueFormatted: getValueFormatted5,
15093    validate: {
15094      required: isValidRequired,
15095      elements: isValidElements
15096    }
15097  };
15098  
15099  // packages/dataviews/build-module/field-types/boolean.js
15100  var import_i18n39 = __toESM(require_i18n());
15101  
15102  // packages/dataviews/build-module/field-types/utils/is-valid-required-for-bool.js
15103  function isValidRequiredForBool(item, field) {
15104    const value = field.getValue({ item });
15105    return value === true;
15106  }
15107  
15108  // packages/dataviews/build-module/field-types/boolean.js
15109  function getValueFormatted6({
15110    item,
15111    field
15112  }) {
15113    const value = field.getValue({ item });
15114    if (value === true) {
15115      return (0, import_i18n39.__)("True");
15116    }
15117    if (value === false) {
15118      return (0, import_i18n39.__)("False");
15119    }
15120    return "";
15121  }
15122  function isValidCustom4(item, field) {
15123    const value = field.getValue({ item });
15124    if (![void 0, "", null].includes(value) && ![true, false].includes(value)) {
15125      return (0, import_i18n39.__)("Value must be true, false, or undefined");
15126    }
15127    return null;
15128  }
15129  var sort3 = (a2, b2, direction) => {
15130    const boolA = Boolean(a2);
15131    const boolB = Boolean(b2);
15132    if (boolA === boolB) {
15133      return 0;
15134    }
15135    if (direction === "asc") {
15136      return boolA ? 1 : -1;
15137    }
15138    return boolA ? -1 : 1;
15139  };
15140  var boolean_default = {
15141    type: "boolean",
15142    render,
15143    Edit: "checkbox",
15144    sort: sort3,
15145    validate: {
15146      required: isValidRequiredForBool,
15147      elements: isValidElements,
15148      custom: isValidCustom4
15149    },
15150    enableSorting: true,
15151    enableGlobalSearch: false,
15152    defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT],
15153    validOperators: [OPERATOR_IS, OPERATOR_IS_NOT],
15154    format: {},
15155    getValueFormatted: getValueFormatted6
15156  };
15157  
15158  // packages/dataviews/build-module/field-types/media.js
15159  var media_default = {
15160    type: "media",
15161    render: () => null,
15162    Edit: null,
15163    sort: () => 0,
15164    enableSorting: false,
15165    enableGlobalSearch: false,
15166    defaultOperators: [],
15167    validOperators: [],
15168    format: {},
15169    getValueFormatted: get_value_formatted_default_default,
15170    // cannot validate any constraint, so
15171    // the only available validation for the field author
15172    // would be providing a custom validator.
15173    validate: {}
15174  };
15175  
15176  // packages/dataviews/build-module/field-types/array.js
15177  var import_i18n40 = __toESM(require_i18n());
15178  
15179  // packages/dataviews/build-module/field-types/utils/is-valid-required-for-array.js
15180  function isValidRequiredForArray(item, field) {
15181    const value = field.getValue({ item });
15182    return Array.isArray(value) && value.length > 0 && value.every(
15183      (element) => ![void 0, "", null].includes(element)
15184    );
15185  }
15186  
15187  // packages/dataviews/build-module/field-types/array.js
15188  function getValueFormatted7({
15189    item,
15190    field
15191  }) {
15192    const value = field.getValue({ item });
15193    const arr = Array.isArray(value) ? value : [];
15194    return arr.join(", ");
15195  }
15196  function render2({ item, field }) {
15197    return getValueFormatted7({ item, field });
15198  }
15199  function isValidCustom5(item, field) {
15200    const value = field.getValue({ item });
15201    if (![void 0, "", null].includes(value) && !Array.isArray(value)) {
15202      return (0, import_i18n40.__)("Value must be an array.");
15203    }
15204    if (!value.every((v2) => typeof v2 === "string")) {
15205      return (0, import_i18n40.__)("Every value must be a string.");
15206    }
15207    return null;
15208  }
15209  var sort4 = (a2, b2, direction) => {
15210    const arrA = Array.isArray(a2) ? a2 : [];
15211    const arrB = Array.isArray(b2) ? b2 : [];
15212    if (arrA.length !== arrB.length) {
15213      return direction === "asc" ? arrA.length - arrB.length : arrB.length - arrA.length;
15214    }
15215    const joinedA = arrA.join(",");
15216    const joinedB = arrB.join(",");
15217    return direction === "asc" ? joinedA.localeCompare(joinedB) : joinedB.localeCompare(joinedA);
15218  };
15219  var array_default = {
15220    type: "array",
15221    render: render2,
15222    Edit: "array",
15223    sort: sort4,
15224    enableSorting: true,
15225    enableGlobalSearch: false,
15226    defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
15227    validOperators: [
15228      OPERATOR_IS_ANY,
15229      OPERATOR_IS_NONE,
15230      OPERATOR_IS_ALL,
15231      OPERATOR_IS_NOT_ALL
15232    ],
15233    format: {},
15234    getValueFormatted: getValueFormatted7,
15235    validate: {
15236      required: isValidRequiredForArray,
15237      elements: isValidElements,
15238      custom: isValidCustom5
15239    }
15240  };
15241  
15242  // packages/dataviews/build-module/field-types/password.js
15243  function getValueFormatted8({
15244    item,
15245    field
15246  }) {
15247    return field.getValue({ item }) ? "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" : "";
15248  }
15249  var password_default = {
15250    type: "password",
15251    render,
15252    Edit: "password",
15253    sort: () => 0,
15254    // Passwords should not be sortable for security reasons
15255    enableSorting: false,
15256    enableGlobalSearch: false,
15257    defaultOperators: [],
15258    validOperators: [],
15259    format: {},
15260    getValueFormatted: getValueFormatted8,
15261    validate: {
15262      required: isValidRequired,
15263      pattern: isValidPattern,
15264      minLength: isValidMinLength,
15265      maxLength: isValidMaxLength,
15266      elements: isValidElements
15267    }
15268  };
15269  
15270  // packages/dataviews/build-module/field-types/telephone.js
15271  var telephone_default = {
15272    type: "telephone",
15273    render,
15274    Edit: "telephone",
15275    sort: sort_text_default,
15276    enableSorting: true,
15277    enableGlobalSearch: false,
15278    defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
15279    validOperators: [
15280      OPERATOR_IS,
15281      OPERATOR_IS_NOT,
15282      OPERATOR_CONTAINS,
15283      OPERATOR_NOT_CONTAINS,
15284      OPERATOR_STARTS_WITH,
15285      // Multiple selection
15286      OPERATOR_IS_ANY,
15287      OPERATOR_IS_NONE,
15288      OPERATOR_IS_ALL,
15289      OPERATOR_IS_NOT_ALL
15290    ],
15291    format: {},
15292    getValueFormatted: get_value_formatted_default_default,
15293    validate: {
15294      required: isValidRequired,
15295      pattern: isValidPattern,
15296      minLength: isValidMinLength,
15297      maxLength: isValidMaxLength,
15298      elements: isValidElements
15299    }
15300  };
15301  
15302  // packages/dataviews/build-module/field-types/color.js
15303  var import_i18n41 = __toESM(require_i18n());
15304  var import_jsx_runtime90 = __toESM(require_jsx_runtime());
15305  function render3({ item, field }) {
15306    if (field.hasElements) {
15307      return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(RenderFromElements, { item, field });
15308    }
15309    const value = get_value_formatted_default_default({ item, field });
15310    if (!value || !w(value).isValid()) {
15311      return value;
15312    }
15313    return /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [
15314      /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
15315        "div",
15316        {
15317          style: {
15318            width: "16px",
15319            height: "16px",
15320            borderRadius: "50%",
15321            backgroundColor: value,
15322            border: "1px solid #ddd",
15323            flexShrink: 0
15324          }
15325        }
15326      ),
15327      /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("span", { children: value })
15328    ] });
15329  }
15330  function isValidCustom6(item, field) {
15331    const value = field.getValue({ item });
15332    if (![void 0, "", null].includes(value) && !w(value).isValid()) {
15333      return (0, import_i18n41.__)("Value must be a valid color.");
15334    }
15335    return null;
15336  }
15337  var sort5 = (a2, b2, direction) => {
15338    const colorA = w(a2);
15339    const colorB = w(b2);
15340    if (!colorA.isValid() && !colorB.isValid()) {
15341      return 0;
15342    }
15343    if (!colorA.isValid()) {
15344      return direction === "asc" ? 1 : -1;
15345    }
15346    if (!colorB.isValid()) {
15347      return direction === "asc" ? -1 : 1;
15348    }
15349    const hslA = colorA.toHsl();
15350    const hslB = colorB.toHsl();
15351    if (hslA.h !== hslB.h) {
15352      return direction === "asc" ? hslA.h - hslB.h : hslB.h - hslA.h;
15353    }
15354    if (hslA.s !== hslB.s) {
15355      return direction === "asc" ? hslA.s - hslB.s : hslB.s - hslA.s;
15356    }
15357    return direction === "asc" ? hslA.l - hslB.l : hslB.l - hslA.l;
15358  };
15359  var color_default = {
15360    type: "color",
15361    render: render3,
15362    Edit: "color",
15363    sort: sort5,
15364    enableSorting: true,
15365    enableGlobalSearch: false,
15366    defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
15367    validOperators: [
15368      OPERATOR_IS,
15369      OPERATOR_IS_NOT,
15370      OPERATOR_IS_ANY,
15371      OPERATOR_IS_NONE
15372    ],
15373    format: {},
15374    getValueFormatted: get_value_formatted_default_default,
15375    validate: {
15376      required: isValidRequired,
15377      elements: isValidElements,
15378      custom: isValidCustom6
15379    }
15380  };
15381  
15382  // packages/dataviews/build-module/field-types/url.js
15383  var url_default = {
15384    type: "url",
15385    render,
15386    Edit: "url",
15387    sort: sort_text_default,
15388    enableSorting: true,
15389    enableGlobalSearch: false,
15390    defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
15391    validOperators: [
15392      OPERATOR_IS,
15393      OPERATOR_IS_NOT,
15394      OPERATOR_CONTAINS,
15395      OPERATOR_NOT_CONTAINS,
15396      OPERATOR_STARTS_WITH,
15397      // Multiple selection
15398      OPERATOR_IS_ANY,
15399      OPERATOR_IS_NONE,
15400      OPERATOR_IS_ALL,
15401      OPERATOR_IS_NOT_ALL
15402    ],
15403    format: {},
15404    getValueFormatted: get_value_formatted_default_default,
15405    validate: {
15406      required: isValidRequired,
15407      pattern: isValidPattern,
15408      minLength: isValidMinLength,
15409      maxLength: isValidMaxLength,
15410      elements: isValidElements
15411    }
15412  };
15413  
15414  // packages/dataviews/build-module/field-types/no-type.js
15415  var sort6 = (a2, b2, direction) => {
15416    if (typeof a2 === "number" && typeof b2 === "number") {
15417      return sort_number_default(a2, b2, direction);
15418    }
15419    return sort_text_default(a2, b2, direction);
15420  };
15421  var no_type_default = {
15422    // type: no type for this one
15423    render,
15424    Edit: null,
15425    sort: sort6,
15426    enableSorting: true,
15427    enableGlobalSearch: false,
15428    defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT],
15429    validOperators: getAllOperatorNames(),
15430    format: {},
15431    getValueFormatted: get_value_formatted_default_default,
15432    validate: {
15433      required: isValidRequired,
15434      elements: isValidElements
15435    }
15436  };
15437  
15438  // packages/dataviews/build-module/field-types/utils/get-is-valid.js
15439  function getIsValid(field, fieldType) {
15440    let required;
15441    if (field.isValid?.required === true && fieldType.validate.required !== void 0) {
15442      required = {
15443        constraint: true,
15444        validate: fieldType.validate.required
15445      };
15446    }
15447    let elements;
15448    if ((field.isValid?.elements === true || // elements is enabled unless the field opts-out
15449    field.isValid?.elements === void 0 && (!!field.elements || !!field.getElements)) && fieldType.validate.elements !== void 0) {
15450      elements = {
15451        constraint: true,
15452        validate: fieldType.validate.elements
15453      };
15454    }
15455    let min;
15456    if (typeof field.isValid?.min === "number" && fieldType.validate.min !== void 0) {
15457      min = {
15458        constraint: field.isValid.min,
15459        validate: fieldType.validate.min
15460      };
15461    }
15462    let max;
15463    if (typeof field.isValid?.max === "number" && fieldType.validate.max !== void 0) {
15464      max = {
15465        constraint: field.isValid.max,
15466        validate: fieldType.validate.max
15467      };
15468    }
15469    let minLength;
15470    if (typeof field.isValid?.minLength === "number" && fieldType.validate.minLength !== void 0) {
15471      minLength = {
15472        constraint: field.isValid.minLength,
15473        validate: fieldType.validate.minLength
15474      };
15475    }
15476    let maxLength;
15477    if (typeof field.isValid?.maxLength === "number" && fieldType.validate.maxLength !== void 0) {
15478      maxLength = {
15479        constraint: field.isValid.maxLength,
15480        validate: fieldType.validate.maxLength
15481      };
15482    }
15483    let pattern;
15484    if (field.isValid?.pattern !== void 0 && fieldType.validate.pattern !== void 0) {
15485      pattern = {
15486        constraint: field.isValid?.pattern,
15487        validate: fieldType.validate.pattern
15488      };
15489    }
15490    const custom = field.isValid?.custom ?? fieldType.validate.custom;
15491    return {
15492      required,
15493      elements,
15494      min,
15495      max,
15496      minLength,
15497      maxLength,
15498      pattern,
15499      custom
15500    };
15501  }
15502  
15503  // packages/dataviews/build-module/field-types/utils/get-format.js
15504  function getFormat(field, fieldType) {
15505    return {
15506      ...fieldType.format,
15507      ...field.format
15508    };
15509  }
15510  var get_format_default = getFormat;
15511  
15512  // packages/dataviews/build-module/field-types/index.js
15513  function getFieldTypeByName(type) {
15514    const found = [
15515      email_default,
15516      integer_default,
15517      number_default,
15518      text_default,
15519      datetime_default,
15520      date_default,
15521      boolean_default,
15522      media_default,
15523      array_default,
15524      password_default,
15525      telephone_default,
15526      color_default,
15527      url_default
15528    ].find((fieldType) => fieldType?.type === type);
15529    if (!!found) {
15530      return found;
15531    }
15532    return no_type_default;
15533  }
15534  function normalizeFields(fields) {
15535    return fields.map((field) => {
15536      const fieldType = getFieldTypeByName(field.type);
15537      const getValue = field.getValue || get_value_from_id_default(field.id);
15538      const sort7 = function(a2, b2, direction) {
15539        const aValue = getValue({ item: a2 });
15540        const bValue = getValue({ item: b2 });
15541        return field.sort ? field.sort(aValue, bValue, direction) : fieldType.sort(aValue, bValue, direction);
15542      };
15543      return {
15544        id: field.id,
15545        label: field.label || field.id,
15546        header: field.header || field.label || field.id,
15547        description: field.description,
15548        placeholder: field.placeholder,
15549        getValue,
15550        setValue: field.setValue || set_value_from_id_default(field.id),
15551        elements: field.elements,
15552        getElements: field.getElements,
15553        hasElements: hasElements(field),
15554        isVisible: field.isVisible,
15555        enableHiding: field.enableHiding ?? true,
15556        readOnly: field.readOnly ?? false,
15557        // The type provides defaults for the following props
15558        type: fieldType.type,
15559        render: field.render ?? fieldType.render,
15560        Edit: getControl(field, fieldType.Edit),
15561        sort: sort7,
15562        enableSorting: field.enableSorting ?? fieldType.enableSorting,
15563        enableGlobalSearch: field.enableGlobalSearch ?? fieldType.enableGlobalSearch,
15564        isValid: getIsValid(field, fieldType),
15565        filterBy: get_filter_by_default(
15566          field,
15567          fieldType.defaultOperators,
15568          fieldType.validOperators
15569        ),
15570        format: get_format_default(field, fieldType),
15571        getValueFormatted: field.getValueFormatted ?? fieldType.getValueFormatted
15572      };
15573    });
15574  }
15575  
15576  // packages/dataviews/build-module/components/dataviews/index.js
15577  var import_jsx_runtime91 = __toESM(require_jsx_runtime());
15578  var defaultGetItemId = (item) => item.id;
15579  var defaultIsItemClickable = () => true;
15580  var EMPTY_ARRAY5 = [];
15581  var dataViewsLayouts = VIEW_LAYOUTS.filter(
15582    (viewLayout) => !viewLayout.isPicker
15583  );
15584  function DefaultUI({
15585    header,
15586    search = true,
15587    searchLabel = void 0
15588  }) {
15589    return /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)(import_jsx_runtime91.Fragment, { children: [
15590      /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)(
15591        import_components49.__experimentalHStack,
15592        {
15593          alignment: "top",
15594          justify: "space-between",
15595          className: "dataviews__view-actions",
15596          spacing: 1,
15597          children: [
15598            /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)(
15599              import_components49.__experimentalHStack,
15600              {
15601                justify: "start",
15602                expanded: false,
15603                className: "dataviews__search",
15604                children: [
15605                  search && /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(dataviews_search_default, { label: searchLabel }),
15606                  /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(toggle_default, {})
15607                ]
15608              }
15609            ),
15610            /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)(
15611              import_components49.__experimentalHStack,
15612              {
15613                spacing: 1,
15614                expanded: false,
15615                style: { flexShrink: 0 },
15616                children: [
15617                  /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(dataviews_view_config_default, {}),
15618                  header
15619                ]
15620              }
15621            )
15622          ]
15623        }
15624      ),
15625      /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(filters_toggled_default, { className: "dataviews-filters__container" }),
15626      /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(DataViewsLayout, {}),
15627      /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(DataViewsFooter, {})
15628    ] });
15629  }
15630  function DataViews({
15631    view,
15632    onChangeView,
15633    fields,
15634    search = true,
15635    searchLabel = void 0,
15636    actions = EMPTY_ARRAY5,
15637    data,
15638    getItemId = defaultGetItemId,
15639    getItemLevel,
15640    isLoading = false,
15641    paginationInfo,
15642    defaultLayouts: defaultLayoutsProperty,
15643    selection: selectionProperty,
15644    onChangeSelection,
15645    onClickItem,
15646    renderItemLink,
15647    isItemClickable = defaultIsItemClickable,
15648    header,
15649    children,
15650    config = { perPageSizes: [10, 20, 50, 100] },
15651    empty
15652  }) {
15653    const { infiniteScrollHandler } = paginationInfo;
15654    const containerRef = (0, import_element52.useRef)(null);
15655    const [containerWidth, setContainerWidth] = (0, import_element52.useState)(0);
15656    const resizeObserverRef = (0, import_compose11.useResizeObserver)(
15657      (resizeObserverEntries) => {
15658        setContainerWidth(
15659          resizeObserverEntries[0].borderBoxSize[0].inlineSize
15660        );
15661      },
15662      { box: "border-box" }
15663    );
15664    const [selectionState, setSelectionState] = (0, import_element52.useState)([]);
15665    const isUncontrolled = selectionProperty === void 0 || onChangeSelection === void 0;
15666    const selection = isUncontrolled ? selectionState : selectionProperty;
15667    const [openedFilter, setOpenedFilter] = (0, import_element52.useState)(null);
15668    function setSelectionWithChange(value) {
15669      const newValue = typeof value === "function" ? value(selection) : value;
15670      if (isUncontrolled) {
15671        setSelectionState(newValue);
15672      }
15673      if (onChangeSelection) {
15674        onChangeSelection(newValue);
15675      }
15676    }
15677    const _fields = (0, import_element52.useMemo)(() => normalizeFields(fields), [fields]);
15678    const _selection = (0, import_element52.useMemo)(() => {
15679      return selection.filter(
15680        (id) => data.some((item) => getItemId(item) === id)
15681      );
15682    }, [selection, data, getItemId]);
15683    const filters = use_filters_default(_fields, view);
15684    const hasPrimaryOrLockedFilters = (0, import_element52.useMemo)(
15685      () => (filters || []).some(
15686        (filter) => filter.isPrimary || filter.isLocked
15687      ),
15688      [filters]
15689    );
15690    const [isShowingFilter, setIsShowingFilter] = (0, import_element52.useState)(
15691      hasPrimaryOrLockedFilters
15692    );
15693    (0, import_element52.useEffect)(() => {
15694      if (hasPrimaryOrLockedFilters && !isShowingFilter) {
15695        setIsShowingFilter(true);
15696      }
15697    }, [hasPrimaryOrLockedFilters, isShowingFilter]);
15698    (0, import_element52.useEffect)(() => {
15699      if (!view.infiniteScrollEnabled || !containerRef.current) {
15700        return;
15701      }
15702      const handleScroll = (0, import_compose11.throttle)((event) => {
15703        const target = event.target;
15704        const scrollTop = target.scrollTop;
15705        const scrollHeight = target.scrollHeight;
15706        const clientHeight = target.clientHeight;
15707        if (scrollTop + clientHeight >= scrollHeight - 100) {
15708          infiniteScrollHandler?.();
15709        }
15710      }, 100);
15711      const container = containerRef.current;
15712      container.addEventListener("scroll", handleScroll);
15713      return () => {
15714        container.removeEventListener("scroll", handleScroll);
15715        handleScroll.cancel();
15716      };
15717    }, [infiniteScrollHandler, view.infiniteScrollEnabled]);
15718    const defaultLayouts = (0, import_element52.useMemo)(
15719      () => Object.fromEntries(
15720        Object.entries(defaultLayoutsProperty).filter(
15721          ([layoutType]) => {
15722            return dataViewsLayouts.some(
15723              (viewLayout) => viewLayout.type === layoutType
15724            );
15725          }
15726        )
15727      ),
15728      [defaultLayoutsProperty]
15729    );
15730    if (!defaultLayouts[view.type]) {
15731      return null;
15732    }
15733    return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
15734      dataviews_context_default.Provider,
15735      {
15736        value: {
15737          view,
15738          onChangeView,
15739          fields: _fields,
15740          actions,
15741          data,
15742          isLoading,
15743          paginationInfo,
15744          selection: _selection,
15745          onChangeSelection: setSelectionWithChange,
15746          openedFilter,
15747          setOpenedFilter,
15748          getItemId,
15749          getItemLevel,
15750          isItemClickable,
15751          onClickItem,
15752          renderItemLink,
15753          containerWidth,
15754          containerRef,
15755          resizeObserverRef,
15756          defaultLayouts,
15757          filters,
15758          isShowingFilter,
15759          setIsShowingFilter,
15760          config,
15761          empty,
15762          hasInfiniteScrollHandler: !!infiniteScrollHandler
15763        },
15764        children: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("div", { className: "dataviews-wrapper", ref: containerRef, children: children ?? /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
15765          DefaultUI,
15766          {
15767            header,
15768            search,
15769            searchLabel
15770          }
15771        ) })
15772      }
15773    );
15774  }
15775  var DataViewsSubComponents = DataViews;
15776  DataViewsSubComponents.BulkActionToolbar = BulkActionsFooter;
15777  DataViewsSubComponents.Filters = filters_default;
15778  DataViewsSubComponents.FiltersToggled = filters_toggled_default;
15779  DataViewsSubComponents.FiltersToggle = toggle_default;
15780  DataViewsSubComponents.Layout = DataViewsLayout;
15781  DataViewsSubComponents.LayoutSwitcher = ViewTypeMenu;
15782  DataViewsSubComponents.Pagination = DataViewsPagination;
15783  DataViewsSubComponents.Search = dataviews_search_default;
15784  DataViewsSubComponents.ViewConfig = DataviewsViewConfigDropdown;
15785  DataViewsSubComponents.Footer = DataViewsFooter;
15786  var dataviews_default = DataViewsSubComponents;
15787  
15788  // packages/dataviews/build-module/utils/filter-sort-and-paginate.js
15789  var import_remove_accents2 = __toESM(require_remove_accents());
15790  var import_deprecated = __toESM(require_deprecated());
15791  var import_date8 = __toESM(require_date());
15792  function normalizeSearchInput2(input = "") {
15793    return (0, import_remove_accents2.default)(input.trim().toLowerCase());
15794  }
15795  var EMPTY_ARRAY6 = [];
15796  function getRelativeDate(value, unit) {
15797    switch (unit) {
15798      case "days":
15799        return subDays(/* @__PURE__ */ new Date(), value);
15800      case "weeks":
15801        return subWeeks(/* @__PURE__ */ new Date(), value);
15802      case "months":
15803        return subMonths(/* @__PURE__ */ new Date(), value);
15804      case "years":
15805        return subYears(/* @__PURE__ */ new Date(), value);
15806      default:
15807        return /* @__PURE__ */ new Date();
15808    }
15809  }
15810  function filterSortAndPaginate(data, view, fields) {
15811    if (!data) {
15812      return {
15813        data: EMPTY_ARRAY6,
15814        paginationInfo: { totalItems: 0, totalPages: 0 }
15815      };
15816    }
15817    const _fields = normalizeFields(fields);
15818    let filteredData = [...data];
15819    if (view.search) {
15820      const normalizedSearch = normalizeSearchInput2(view.search);
15821      filteredData = filteredData.filter((item) => {
15822        return _fields.filter((field) => field.enableGlobalSearch).some((field) => {
15823          const fieldValue = field.getValue({ item });
15824          const values = Array.isArray(fieldValue) ? fieldValue : [fieldValue];
15825          return values.some(
15826            (value) => normalizeSearchInput2(String(value)).includes(
15827              normalizedSearch
15828            )
15829          );
15830        });
15831      });
15832    }
15833    if (view.filters && view.filters?.length > 0) {
15834      view.filters.forEach((filter) => {
15835        const field = _fields.find(
15836          (_field) => _field.id === filter.field
15837        );
15838        if (field) {
15839          if (filter.operator === OPERATOR_IS_ANY && filter?.value?.length > 0) {
15840            filteredData = filteredData.filter((item) => {
15841              const fieldValue = field.getValue({ item });
15842              if (Array.isArray(fieldValue)) {
15843                return filter.value.some(
15844                  (filterValue) => fieldValue.includes(filterValue)
15845                );
15846              } else if (typeof fieldValue === "string") {
15847                return filter.value.includes(fieldValue);
15848              }
15849              return false;
15850            });
15851          } else if (filter.operator === OPERATOR_IS_NONE && filter?.value?.length > 0) {
15852            filteredData = filteredData.filter((item) => {
15853              const fieldValue = field.getValue({ item });
15854              if (Array.isArray(fieldValue)) {
15855                return !filter.value.some(
15856                  (filterValue) => fieldValue.includes(filterValue)
15857                );
15858              } else if (typeof fieldValue === "string") {
15859                return !filter.value.includes(fieldValue);
15860              }
15861              return false;
15862            });
15863          } else if (filter.operator === OPERATOR_IS_ALL && filter?.value?.length > 0) {
15864            filteredData = filteredData.filter((item) => {
15865              return filter.value.every((value) => {
15866                return field.getValue({ item })?.includes(value);
15867              });
15868            });
15869          } else if (filter.operator === OPERATOR_IS_NOT_ALL && filter?.value?.length > 0) {
15870            (0, import_deprecated.default)("The 'isNotAll' filter operator", {
15871              since: "7.0",
15872              alternative: "'isNone'"
15873            });
15874            filteredData = filteredData.filter((item) => {
15875              return filter.value.every((value) => {
15876                return !field.getValue({ item })?.includes(value);
15877              });
15878            });
15879          } else if (filter.operator === OPERATOR_IS) {
15880            filteredData = filteredData.filter((item) => {
15881              return filter.value === field.getValue({ item }) || filter.value === void 0;
15882            });
15883          } else if (filter.operator === OPERATOR_IS_NOT) {
15884            filteredData = filteredData.filter((item) => {
15885              return filter.value !== field.getValue({ item });
15886            });
15887          } else if (filter.operator === OPERATOR_ON && filter.value !== void 0) {
15888            const filterDate = (0, import_date8.getDate)(filter.value);
15889            filteredData = filteredData.filter((item) => {
15890              const fieldDate = (0, import_date8.getDate)(field.getValue({ item }));
15891              return filterDate.getTime() === fieldDate.getTime();
15892            });
15893          } else if (filter.operator === OPERATOR_NOT_ON && filter.value !== void 0) {
15894            const filterDate = (0, import_date8.getDate)(filter.value);
15895            filteredData = filteredData.filter((item) => {
15896              const fieldDate = (0, import_date8.getDate)(field.getValue({ item }));
15897              return filterDate.getTime() !== fieldDate.getTime();
15898            });
15899          } else if (filter.operator === OPERATOR_LESS_THAN && filter.value !== void 0) {
15900            filteredData = filteredData.filter((item) => {
15901              const fieldValue = field.getValue({ item });
15902              return fieldValue < filter.value;
15903            });
15904          } else if (filter.operator === OPERATOR_GREATER_THAN && filter.value !== void 0) {
15905            filteredData = filteredData.filter((item) => {
15906              const fieldValue = field.getValue({ item });
15907              return fieldValue > filter.value;
15908            });
15909          } else if (filter.operator === OPERATOR_LESS_THAN_OR_EQUAL && filter.value !== void 0) {
15910            filteredData = filteredData.filter((item) => {
15911              const fieldValue = field.getValue({ item });
15912              return fieldValue <= filter.value;
15913            });
15914          } else if (filter.operator === OPERATOR_GREATER_THAN_OR_EQUAL && filter.value !== void 0) {
15915            filteredData = filteredData.filter((item) => {
15916              const fieldValue = field.getValue({ item });
15917              return fieldValue >= filter.value;
15918            });
15919          } else if (filter.operator === OPERATOR_CONTAINS && filter?.value !== void 0) {
15920            filteredData = filteredData.filter((item) => {
15921              const fieldValue = field.getValue({ item });
15922              return typeof fieldValue === "string" && filter.value && fieldValue.toLowerCase().includes(
15923                String(filter.value).toLowerCase()
15924              );
15925            });
15926          } else if (filter.operator === OPERATOR_NOT_CONTAINS && filter?.value !== void 0) {
15927            filteredData = filteredData.filter((item) => {
15928              const fieldValue = field.getValue({ item });
15929              return typeof fieldValue === "string" && filter.value && !fieldValue.toLowerCase().includes(
15930                String(filter.value).toLowerCase()
15931              );
15932            });
15933          } else if (filter.operator === OPERATOR_STARTS_WITH && filter?.value !== void 0) {
15934            filteredData = filteredData.filter((item) => {
15935              const fieldValue = field.getValue({ item });
15936              return typeof fieldValue === "string" && filter.value && fieldValue.toLowerCase().startsWith(
15937                String(filter.value).toLowerCase()
15938              );
15939            });
15940          } else if (filter.operator === OPERATOR_BEFORE && filter.value !== void 0) {
15941            const filterValue = (0, import_date8.getDate)(filter.value);
15942            filteredData = filteredData.filter((item) => {
15943              const fieldValue = (0, import_date8.getDate)(
15944                field.getValue({ item })
15945              );
15946              return fieldValue < filterValue;
15947            });
15948          } else if (filter.operator === OPERATOR_AFTER && filter.value !== void 0) {
15949            const filterValue = (0, import_date8.getDate)(filter.value);
15950            filteredData = filteredData.filter((item) => {
15951              const fieldValue = (0, import_date8.getDate)(
15952                field.getValue({ item })
15953              );
15954              return fieldValue > filterValue;
15955            });
15956          } else if (filter.operator === OPERATOR_BEFORE_INC && filter.value !== void 0) {
15957            const filterValue = (0, import_date8.getDate)(filter.value);
15958            filteredData = filteredData.filter((item) => {
15959              const fieldValue = (0, import_date8.getDate)(
15960                field.getValue({ item })
15961              );
15962              return fieldValue <= filterValue;
15963            });
15964          } else if (filter.operator === OPERATOR_AFTER_INC && filter.value !== void 0) {
15965            const filterValue = (0, import_date8.getDate)(filter.value);
15966            filteredData = filteredData.filter((item) => {
15967              const fieldValue = (0, import_date8.getDate)(
15968                field.getValue({ item })
15969              );
15970              return fieldValue >= filterValue;
15971            });
15972          } else if (filter.operator === OPERATOR_BETWEEN && Array.isArray(filter.value) && filter.value.length === 2 && filter.value[0] !== void 0 && filter.value[1] !== void 0) {
15973            filteredData = filteredData.filter((item) => {
15974              const fieldValue = field.getValue({ item });
15975              if (typeof fieldValue === "number" || fieldValue instanceof Date || typeof fieldValue === "string") {
15976                return fieldValue >= filter.value[0] && fieldValue <= filter.value[1];
15977              }
15978              return false;
15979            });
15980          } else if (filter.operator === OPERATOR_IN_THE_PAST && filter.value?.value !== void 0 && filter.value?.unit !== void 0) {
15981            const targetDate = getRelativeDate(
15982              filter.value.value,
15983              filter.value.unit
15984            );
15985            filteredData = filteredData.filter((item) => {
15986              const fieldValue = (0, import_date8.getDate)(
15987                field.getValue({ item })
15988              );
15989              return fieldValue >= targetDate && fieldValue <= /* @__PURE__ */ new Date();
15990            });
15991          } else if (filter.operator === OPERATOR_OVER && filter.value?.value !== void 0 && filter.value?.unit !== void 0) {
15992            const targetDate = getRelativeDate(
15993              filter.value.value,
15994              filter.value.unit
15995            );
15996            filteredData = filteredData.filter((item) => {
15997              const fieldValue = (0, import_date8.getDate)(
15998                field.getValue({ item })
15999              );
16000              return fieldValue < targetDate;
16001            });
16002          }
16003        }
16004      });
16005    }
16006    const sortByField = view.sort?.field ? _fields.find((field) => {
16007      return field.enableSorting !== false && field.id === view.sort?.field;
16008    }) : null;
16009    const groupByField = view.groupBy?.field ? _fields.find((field) => {
16010      return field.enableSorting !== false && field.id === view.groupBy?.field;
16011    }) : null;
16012    if (sortByField || groupByField) {
16013      filteredData.sort((a2, b2) => {
16014        if (groupByField) {
16015          const groupCompare = groupByField.sort(
16016            a2,
16017            b2,
16018            view.groupBy?.direction ?? "asc"
16019          );
16020          if (groupCompare !== 0) {
16021            return groupCompare;
16022          }
16023        }
16024        if (sortByField) {
16025          return sortByField.sort(a2, b2, view.sort?.direction ?? "desc");
16026        }
16027        return 0;
16028      });
16029    }
16030    let totalItems = filteredData.length;
16031    let totalPages = 1;
16032    if (view.page !== void 0 && view.perPage !== void 0) {
16033      const start = (view.page - 1) * view.perPage;
16034      totalItems = filteredData?.length || 0;
16035      totalPages = Math.ceil(totalItems / view.perPage);
16036      filteredData = filteredData?.slice(start, start + view.perPage);
16037    }
16038    return {
16039      data: filteredData,
16040      paginationInfo: {
16041        totalItems,
16042        totalPages
16043      }
16044    };
16045  }
16046  
16047  // packages/admin-ui/build-module/navigable-region/index.js
16048  var import_element53 = __toESM(require_element());
16049  var import_jsx_runtime92 = __toESM(require_jsx_runtime());
16050  var NavigableRegion = (0, import_element53.forwardRef)(
16051    ({ children, className, ariaLabel, as: Tag = "div", ...props }, ref) => {
16052      return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
16053        Tag,
16054        {
16055          ref,
16056          className: clsx_default("admin-ui-navigable-region", className),
16057          "aria-label": ariaLabel,
16058          role: "region",
16059          tabIndex: "-1",
16060          ...props,
16061          children
16062        }
16063      );
16064    }
16065  );
16066  NavigableRegion.displayName = "NavigableRegion";
16067  var navigable_region_default = NavigableRegion;
16068  
16069  // packages/admin-ui/build-module/page/header.js
16070  var import_components51 = __toESM(require_components());
16071  
16072  // packages/admin-ui/build-module/page/sidebar-toggle-slot.js
16073  var import_components50 = __toESM(require_components());
16074  var { Fill: SidebarToggleFill, Slot: SidebarToggleSlot } = (0, import_components50.createSlotFill)("SidebarToggle");
16075  
16076  // packages/admin-ui/build-module/page/header.js
16077  var import_jsx_runtime93 = __toESM(require_jsx_runtime());
16078  function Header({
16079    breadcrumbs,
16080    badges,
16081    title,
16082    subTitle,
16083    actions,
16084    showSidebarToggle = true
16085  }) {
16086    return /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)(import_components51.__experimentalVStack, { className: "admin-ui-page__header", as: "header", children: [
16087      /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)(import_components51.__experimentalHStack, { justify: "space-between", spacing: 2, children: [
16088        /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)(import_components51.__experimentalHStack, { spacing: 2, justify: "left", children: [
16089          showSidebarToggle && /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
16090            SidebarToggleSlot,
16091            {
16092              bubblesVirtually: true,
16093              className: "admin-ui-page__sidebar-toggle-slot"
16094            }
16095          ),
16096          title && /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(import_components51.__experimentalHeading, { as: "h2", level: 3, weight: 500, truncate: true, children: title }),
16097          breadcrumbs,
16098          badges
16099        ] }),
16100        /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
16101          import_components51.__experimentalHStack,
16102          {
16103            style: { width: "auto", flexShrink: 0 },
16104            spacing: 2,
16105            className: "admin-ui-page__header-actions",
16106            children: actions
16107          }
16108        )
16109      ] }),
16110      subTitle && /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("p", { className: "admin-ui-page__header-subtitle", children: subTitle })
16111    ] });
16112  }
16113  
16114  // packages/admin-ui/build-module/page/index.js
16115  var import_jsx_runtime94 = __toESM(require_jsx_runtime());
16116  function Page({
16117    breadcrumbs,
16118    badges,
16119    title,
16120    subTitle,
16121    children,
16122    className,
16123    actions,
16124    hasPadding = false,
16125    showSidebarToggle = true
16126  }) {
16127    const classes = clsx_default("admin-ui-page", className);
16128    return /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)(navigable_region_default, { className: classes, ariaLabel: title, children: [
16129      (title || breadcrumbs || badges) && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
16130        Header,
16131        {
16132          breadcrumbs,
16133          badges,
16134          title,
16135          subTitle,
16136          actions,
16137          showSidebarToggle
16138        }
16139      ),
16140      hasPadding ? /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("div", { className: "admin-ui-page__content has-padding", children }) : children
16141    ] });
16142  }
16143  Page.SidebarToggleFill = SidebarToggleFill;
16144  var page_default = Page;
16145  
16146  // routes/pattern-list/stage.tsx
16147  var import_core_data3 = __toESM(require_core_data());
16148  var import_components52 = __toESM(require_components());
16149  var import_data10 = __toESM(require_data());
16150  var import_element56 = __toESM(require_element());
16151  var import_editor = __toESM(require_editor());
16152  var import_patterns3 = __toESM(require_patterns());
16153  var import_i18n46 = __toESM(require_i18n());
16154  
16155  // routes/lock-unlock.ts
16156  var import_private_apis2 = __toESM(require_private_apis());
16157  var { lock: lock2, unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(
16158    "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
16159    "@wordpress/routes"
16160  );
16161  
16162  // routes/pattern-list/view-utils.ts
16163  var import_i18n42 = __toESM(require_i18n());
16164  var LAYOUT_GRID2 = "grid";
16165  var LAYOUT_TABLE2 = "table";
16166  var DEFAULT_VIEW = {
16167    type: LAYOUT_GRID2,
16168    perPage: 20,
16169    sort: {
16170      field: "title",
16171      direction: "asc"
16172    },
16173    filters: [],
16174    fields: ["sync-status"],
16175    layout: {
16176      badgeFields: ["sync-status"]
16177    },
16178    titleField: "title",
16179    mediaField: "preview"
16180  };
16181  var DEFAULT_VIEWS = [
16182    {
16183      slug: "all",
16184      label: (0, import_i18n42.__)("All patterns")
16185    },
16186    {
16187      slug: "my-patterns",
16188      label: (0, import_i18n42.__)("My patterns")
16189    },
16190    {
16191      slug: "registered",
16192      label: (0, import_i18n42.__)("Registered")
16193    }
16194  ];
16195  var DEFAULT_LAYOUTS = {
16196    [LAYOUT_TABLE2]: {},
16197    [LAYOUT_GRID2]: {
16198      layout: {
16199        badgeFields: ["sync-status"]
16200      }
16201    }
16202  };
16203  
16204  // routes/pattern-list/fields/preview.tsx
16205  var import_i18n43 = __toESM(require_i18n());
16206  import { Preview } from "@wordpress/lazy-editor";
16207  function PreviewField({ item }) {
16208    return /* @__PURE__ */ React.createElement(
16209      Preview,
16210      {
16211        blocks: item.blocks,
16212        content: item.content,
16213        description: item.description
16214      }
16215    );
16216  }
16217  var previewField = {
16218    label: (0, import_i18n43.__)("Preview"),
16219    id: "preview",
16220    render: PreviewField,
16221    enableSorting: false
16222  };
16223  
16224  // routes/pattern-list/fields/sync-status.tsx
16225  var import_i18n44 = __toESM(require_i18n());
16226  var import_patterns = __toESM(require_patterns());
16227  var { PATTERN_SYNC_TYPES } = unlock2(import_patterns.privateApis);
16228  var OPERATOR_IS2 = "is";
16229  var SYNC_FILTERS = [
16230    {
16231      value: PATTERN_SYNC_TYPES.full,
16232      label: (0, import_i18n44._x)("Synced", "pattern (singular)"),
16233      description: (0, import_i18n44.__)("Patterns that are kept in sync across the site.")
16234    },
16235    {
16236      value: PATTERN_SYNC_TYPES.unsynced,
16237      label: (0, import_i18n44._x)("Not synced", "pattern (singular)"),
16238      description: (0, import_i18n44.__)(
16239        "Patterns that can be changed freely without affecting the site."
16240      )
16241    }
16242  ];
16243  var patternStatusField = {
16244    label: (0, import_i18n44.__)("Sync status"),
16245    id: "sync-status",
16246    render: ({ item }) => {
16247      const syncStatus = item.syncStatus;
16248      return /* @__PURE__ */ React.createElement(
16249        "span",
16250        {
16251          className: `routes-pattern-list__field-sync-status-$syncStatus}`
16252        },
16253        SYNC_FILTERS.find(({ value }) => value === syncStatus)?.label
16254      );
16255    },
16256    elements: SYNC_FILTERS,
16257    filterBy: {
16258      operators: [OPERATOR_IS2],
16259      isPrimary: true
16260    },
16261    enableSorting: false
16262  };
16263  
16264  // routes/pattern-list/fields/category.tsx
16265  var import_i18n45 = __toESM(require_i18n());
16266  var import_data8 = __toESM(require_data());
16267  var import_core_data = __toESM(require_core_data());
16268  var import_element54 = __toESM(require_element());
16269  var OPERATOR_IS3 = "is";
16270  function CategoryField({ item }) {
16271    const blockPatternCategories = (0, import_data8.useSelect)(
16272      (select2) => select2(import_core_data.store).getBlockPatternCategories(),
16273      []
16274    );
16275    const categoryLabels = (0, import_element54.useMemo)(() => {
16276      if (!item.categories || !Array.isArray(item.categories)) {
16277        return [];
16278      }
16279      return item.categories.map((catSlug) => {
16280        const category = blockPatternCategories?.find(
16281          (cat) => cat.name === catSlug
16282        );
16283        return category ? category.label || category.name : null;
16284      }).filter(Boolean);
16285    }, [item.categories, blockPatternCategories]);
16286    if (categoryLabels.length === 0) {
16287      return /* @__PURE__ */ React.createElement("span", { className: "pattern-category-field__empty" }, "\u2014");
16288    }
16289    return /* @__PURE__ */ React.createElement("span", { className: "pattern-category-field" }, categoryLabels.join(", "));
16290  }
16291  function usePatternCategories() {
16292    const userPatternCategories = (0, import_data8.useSelect)(
16293      (select2) => select2(import_core_data.store).getUserPatternCategories(),
16294      []
16295    );
16296    const blockPatternCategories = (0, import_data8.useSelect)(
16297      (select2) => select2(import_core_data.store).getBlockPatternCategories(),
16298      []
16299    );
16300    return (0, import_element54.useMemo)(() => {
16301      const categoryMap = /* @__PURE__ */ new Map();
16302      userPatternCategories?.forEach((cat) => {
16303        if (!categoryMap.has(cat.name)) {
16304          categoryMap.set(cat.name, {
16305            value: cat.name,
16306            label: cat.label || cat.name
16307          });
16308        }
16309      });
16310      blockPatternCategories?.forEach((cat) => {
16311        if (!categoryMap.has(cat.name)) {
16312          categoryMap.set(cat.name, {
16313            value: cat.name,
16314            label: cat.label || cat.name
16315          });
16316        }
16317      });
16318      return Array.from(categoryMap.values()).sort(
16319        (a2, b2) => a2.label.localeCompare(b2.label)
16320      );
16321    }, [userPatternCategories, blockPatternCategories]);
16322  }
16323  function usePatternCategoryField() {
16324    const categories = usePatternCategories();
16325    return {
16326      label: (0, import_i18n45.__)("Category"),
16327      id: "category",
16328      render: CategoryField,
16329      elements: categories,
16330      getValue: ({ item }) => {
16331        return item.categories;
16332      },
16333      filterBy: {
16334        operators: [OPERATOR_IS3],
16335        isPrimary: true
16336      },
16337      enableSorting: false
16338    };
16339  }
16340  
16341  // routes/pattern-list/use-patterns.ts
16342  var import_data9 = __toESM(require_data());
16343  var import_core_data2 = __toESM(require_core_data());
16344  var import_element55 = __toESM(require_element());
16345  var import_patterns2 = __toESM(require_patterns());
16346  var import_block_editor = __toESM(require_block_editor());
16347  
16348  // routes/pattern-list/utils.ts
16349  var filterOutDuplicatesByName = (currentItem, index, items) => index === items.findIndex((item) => currentItem.name === item.name);
16350  
16351  // routes/pattern-list/use-patterns.ts
16352  var {
16353    PATTERN_TYPES,
16354    PATTERN_SYNC_TYPES: PATTERN_SYNC_TYPES2,
16355    EXCLUDED_PATTERN_SOURCES,
16356    PATTERN_DEFAULT_CATEGORY
16357  } = unlock2(import_patterns2.privateApis);
16358  var { extractWords, getNormalizedSearchTerms, normalizeString: normalizeString2 } = unlock2(
16359    import_block_editor.privateApis
16360  );
16361  function normalizeThemePattern(pattern) {
16362    return {
16363      id: pattern.name,
16364      title: pattern.title,
16365      content: pattern.content,
16366      keywords: pattern.keywords || [],
16367      type: PATTERN_TYPES.theme,
16368      // Normalize categories to always be an array of slugs
16369      categories: pattern.categories || [],
16370      // Theme patterns are always unsynced
16371      syncStatus: PATTERN_SYNC_TYPES2.unsynced,
16372      description: pattern.description || ""
16373    };
16374  }
16375  function normalizeUserPattern(pattern, userPatternCategories) {
16376    const categories = [];
16377    if (pattern.wp_pattern_category && Array.isArray(pattern.wp_pattern_category)) {
16378      pattern.wp_pattern_category.forEach((catId) => {
16379        const category = userPatternCategories?.find(
16380          (cat) => cat.id === catId
16381        );
16382        if (category) {
16383          categories.push(category.name);
16384        }
16385      });
16386    }
16387    const numericId = pattern.id;
16388    return {
16389      id: pattern.name || pattern.id.toString(),
16390      _recordId: numericId,
16391      // Keep numeric ID for permissions lookup
16392      keywords: [],
16393      type: PATTERN_TYPES.user,
16394      // Normalize categories to always be an array of slugs
16395      categories,
16396      // Normalize sync status
16397      syncStatus: pattern.wp_pattern_sync_status || PATTERN_SYNC_TYPES2.full,
16398      title: typeof pattern.title === "string" ? pattern.title : pattern.title.raw,
16399      content: typeof pattern.content === "string" ? pattern.content : pattern.content.raw,
16400      description: pattern.excerpt?.raw || "",
16401      blocks: pattern.blocks
16402    };
16403  }
16404  var removeMatchingTerms = (unmatchedTerms, unprocessedTerms) => {
16405    return unmatchedTerms.filter(
16406      (term) => !getNormalizedSearchTerms(unprocessedTerms).some(
16407        (unprocessedTerm) => unprocessedTerm.includes(term)
16408      )
16409    );
16410  };
16411  function getItemSearchRank(item, searchTerm, config) {
16412    const { categoryId, hasCategory, onlyFilterByCategory } = config;
16413    let rank = categoryId === PATTERN_DEFAULT_CATEGORY || categoryId === "my-patterns" && item.type === PATTERN_TYPES.user || hasCategory && hasCategory(item, categoryId || "") ? 1 : 0;
16414    if (!rank || onlyFilterByCategory) {
16415      return rank;
16416    }
16417    const normalizedSearchInput = normalizeString2(searchTerm);
16418    const normalizedTitle = normalizeString2(item.title);
16419    if (normalizedSearchInput === normalizedTitle) {
16420      rank += 30;
16421    } else if (normalizedTitle.startsWith(normalizedSearchInput)) {
16422      rank += 20;
16423    } else {
16424      const terms = [
16425        item.id,
16426        item.title,
16427        item.description,
16428        ...item.keywords
16429      ].join(" ");
16430      const normalizedSearchTerms = extractWords(normalizedSearchInput);
16431      const unmatchedTerms = removeMatchingTerms(
16432        normalizedSearchTerms,
16433        terms
16434      );
16435      if (unmatchedTerms.length === 0) {
16436        rank += 10;
16437      }
16438    }
16439    return rank;
16440  }
16441  function searchItems(items = [], searchInput = "", config = {}) {
16442    const normalizedSearchTerms = getNormalizedSearchTerms(searchInput);
16443    const onlyFilterByCategory = config.categoryId !== PATTERN_DEFAULT_CATEGORY && !normalizedSearchTerms.length;
16444    const searchRankConfig = { ...config, onlyFilterByCategory };
16445    const threshold = onlyFilterByCategory ? 0 : 1;
16446    const rankedItems = items.map((item) => {
16447      return [
16448        item,
16449        getItemSearchRank(item, searchInput, searchRankConfig)
16450      ];
16451    }).filter(([, rank]) => rank > threshold);
16452    if (normalizedSearchTerms.length === 0) {
16453      return rankedItems.map(([item]) => item);
16454    }
16455    rankedItems.sort(([, rank1], [, rank2]) => rank2 - rank1);
16456    return rankedItems.map(([item]) => item);
16457  }
16458  var selectThemePatterns = (0, import_data9.createSelector)(
16459    (select2) => {
16460      const { getBlockPatterns } = select2(import_core_data2.store);
16461      const { isResolving: isResolvingSelector } = select2(import_core_data2.store);
16462      const restBlockPatterns = getBlockPatterns();
16463      const patterns = (restBlockPatterns || []).filter(
16464        (pattern) => !EXCLUDED_PATTERN_SOURCES.includes(pattern.source)
16465      ).filter(filterOutDuplicatesByName).filter((pattern) => pattern.inserter !== false).map(normalizeThemePattern);
16466      return {
16467        patterns,
16468        isResolving: isResolvingSelector("getBlockPatterns")
16469      };
16470    },
16471    (select2) => [
16472      select2(import_core_data2.store).getBlockPatterns(),
16473      select2(import_core_data2.store).isResolving("getBlockPatterns")
16474    ]
16475  );
16476  var selectUserPatterns = (0, import_data9.createSelector)(
16477    (select2, syncStatus = void 0, search = "") => {
16478      const {
16479        getEntityRecords,
16480        isResolving: isResolvingSelector,
16481        getUserPatternCategories
16482      } = select2(import_core_data2.store);
16483      const query = { per_page: -1 };
16484      const patternPosts = getEntityRecords(
16485        "postType",
16486        PATTERN_TYPES.user,
16487        query
16488      );
16489      const userPatternCategories = getUserPatternCategories();
16490      let patterns = (patternPosts ?? []).map(
16491        (pattern) => normalizeUserPattern(pattern, userPatternCategories)
16492      );
16493      const isResolving = isResolvingSelector("getEntityRecords", [
16494        "postType",
16495        PATTERN_TYPES.user,
16496        query
16497      ]);
16498      if (syncStatus) {
16499        patterns = patterns.filter(
16500          (pattern) => pattern.syncStatus === syncStatus
16501        );
16502      }
16503      patterns = searchItems(patterns, search, {
16504        // We exit user pattern retrieval early if we aren't in the
16505        // catch-all category for user created patterns, so it has
16506        // to be in the category.
16507        categoryId: PATTERN_DEFAULT_CATEGORY,
16508        hasCategory: () => true
16509      });
16510      return {
16511        patterns,
16512        isResolving,
16513        categories: userPatternCategories
16514      };
16515    },
16516    (select2) => [
16517      select2(import_core_data2.store).getEntityRecords("postType", PATTERN_TYPES.user, {
16518        per_page: -1
16519      }),
16520      select2(import_core_data2.store).isResolving("getEntityRecords", [
16521        "postType",
16522        PATTERN_TYPES.user,
16523        { per_page: -1 }
16524      ]),
16525      select2(import_core_data2.store).getUserPatternCategories()
16526    ]
16527  );
16528  var selectPatterns = (0, import_data9.createSelector)(
16529    (select2, categoryId, syncStatus, search = "") => {
16530      const {
16531        patterns: themePatterns,
16532        isResolving: isResolvingThemePatterns
16533      } = selectThemePatterns(select2);
16534      const { patterns: userPatterns, isResolving: isResolvingUserPatterns } = selectUserPatterns(select2);
16535      let patterns = [
16536        ...themePatterns || [],
16537        ...userPatterns || []
16538      ];
16539      if (syncStatus) {
16540        patterns = patterns.filter(
16541          (pattern) => pattern.syncStatus === syncStatus
16542        );
16543      }
16544      if (categoryId && categoryId !== PATTERN_DEFAULT_CATEGORY) {
16545        patterns = searchItems(patterns, search, {
16546          categoryId,
16547          hasCategory: (item, currentCategory) => {
16548            return item.categories?.includes(currentCategory);
16549          }
16550        });
16551      } else {
16552        patterns = searchItems(patterns, search, {
16553          categoryId: PATTERN_DEFAULT_CATEGORY,
16554          hasCategory: () => true
16555        });
16556      }
16557      return {
16558        patterns,
16559        isResolving: isResolvingThemePatterns || isResolvingUserPatterns
16560      };
16561    },
16562    (select2) => [
16563      selectThemePatterns(select2),
16564      selectUserPatterns(select2)
16565    ]
16566  );
16567  function useAugmentPatternsWithPermissions(patterns) {
16568    const idsAndTypes = (0, import_element55.useMemo)(
16569      () => patterns?.filter((record) => record.type !== PATTERN_TYPES.theme).map((record) => [
16570        record.type,
16571        record._recordId,
16572        record.id
16573      ]) ?? [],
16574      [patterns]
16575    );
16576    const permissions = (0, import_data9.useSelect)(
16577      (select2) => {
16578        const { getEntityRecordPermissions } = unlock2(
16579          select2(import_core_data2.store)
16580        );
16581        return idsAndTypes.reduce(
16582          (acc, [type, numericId, stringId]) => {
16583            acc[stringId] = getEntityRecordPermissions(
16584              "postType",
16585              type,
16586              numericId
16587            );
16588            return acc;
16589          },
16590          {}
16591        );
16592      },
16593      [idsAndTypes]
16594    );
16595    return (0, import_element55.useMemo)(
16596      () => patterns?.map((record) => ({
16597        ...record,
16598        permissions: permissions?.[record.id] ?? {}
16599      })) ?? [],
16600      [patterns, permissions]
16601    );
16602  }
16603  var usePatterns = (postType, categoryId, { search = "", syncStatus } = {}) => {
16604    return (0, import_data9.useSelect)(
16605      (select2) => {
16606        if (postType === PATTERN_TYPES.user) {
16607          const result = selectUserPatterns(select2, syncStatus, search);
16608          let { patterns } = result;
16609          if (categoryId && categoryId !== PATTERN_DEFAULT_CATEGORY) {
16610            patterns = patterns.filter(
16611              (pattern) => pattern.categories.includes(categoryId)
16612            );
16613          }
16614          return {
16615            patterns,
16616            isResolving: result.isResolving
16617          };
16618        } else if (postType === PATTERN_TYPES.theme) {
16619          const result = selectThemePatterns(select2);
16620          let { patterns } = result;
16621          if (categoryId && categoryId !== PATTERN_DEFAULT_CATEGORY) {
16622            patterns = patterns.filter(
16623              (pattern) => pattern.categories.includes(categoryId)
16624            );
16625          }
16626          patterns = searchItems(patterns, search, {
16627            categoryId: categoryId || PATTERN_DEFAULT_CATEGORY,
16628            hasCategory: () => true
16629          });
16630          return {
16631            patterns,
16632            isResolving: result.isResolving
16633          };
16634        }
16635        return selectPatterns(select2, categoryId, syncStatus, search);
16636      },
16637      [categoryId, postType, search, syncStatus]
16638    );
16639  };
16640  var use_patterns_default = usePatterns;
16641  
16642  // routes/pattern-list/style.scss
16643  var css = `/**
16644   * SCSS Variables.
16645   *
16646   * Please use variables from this sheet to ensure consistency across the UI.
16647   * Don't add to this sheet unless you're pretty sure the value will be reused in many places.
16648   * For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
16649   */
16650  /**
16651   * Colors
16652   */
16653  /**
16654   * Fonts & basic variables.
16655   */
16656  /**
16657   * Typography
16658   */
16659  /**
16660   * Grid System.
16661   * https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
16662   */
16663  /**
16664   * Radius scale.
16665   */
16666  /**
16667   * Elevation scale.
16668   */
16669  /**
16670   * Dimensions.
16671   */
16672  /**
16673   * Mobile specific styles
16674   */
16675  /**
16676   * Editor styles.
16677   */
16678  /**
16679   * Block & Editor UI.
16680   */
16681  /**
16682   * Block paddings.
16683   */
16684  /**
16685   * React Native specific.
16686   * These variables do not appear to be used anywhere else.
16687   */
16688  /**
16689   * Typography
16690   */
16691  /**
16692   * SCSS Variables.
16693   *
16694   * Please use variables from this sheet to ensure consistency across the UI.
16695   * Don't add to this sheet unless you're pretty sure the value will be reused in many places.
16696   * For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
16697   */
16698  /**
16699   * Colors
16700   */
16701  /**
16702   * Fonts & basic variables.
16703   */
16704  /**
16705   * Typography
16706   */
16707  /**
16708   * Grid System.
16709   * https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
16710   */
16711  /**
16712   * Radius scale.
16713   */
16714  /**
16715   * Elevation scale.
16716   */
16717  /**
16718   * Dimensions.
16719   */
16720  /**
16721   * Mobile specific styles
16722   */
16723  /**
16724   * Editor styles.
16725   */
16726  /**
16727   * Block & Editor UI.
16728   */
16729  /**
16730   * Block paddings.
16731   */
16732  /**
16733   * React Native specific.
16734   * These variables do not appear to be used anywhere else.
16735   */
16736  /**
16737   * Breakpoints & Media Queries
16738   */
16739  /**
16740  *  Converts a hex value into the rgb equivalent.
16741  *
16742  * @param {string} hex - the hexadecimal value to convert
16743  * @return {string} comma separated rgb values
16744  */
16745  /**
16746   * Long content fade mixin
16747   *
16748   * Creates a fading overlay to signify that the content is longer
16749   * than the space allows.
16750   */
16751  /**
16752   * Breakpoint mixins
16753   */
16754  /**
16755   * Focus styles.
16756   */
16757  /**
16758   * Applies editor left position to the selector passed as argument
16759   */
16760  /**
16761   * Styles that are reused verbatim in a few places
16762   */
16763  /**
16764   * Allows users to opt-out of animations via OS-level preferences.
16765   */
16766  /**
16767   * Reset default styles for JavaScript UI based pages.
16768   * This is a WP-admin agnostic reset
16769   */
16770  /**
16771   * Reset the WP Admin page styles for Gutenberg-like pages.
16772   */
16773  :root {
16774    --wp-block-synced-color: #7a00df;
16775    --wp-block-synced-color--rgb: 122, 0, 223;
16776    --wp-bound-block-color: var(--wp-block-synced-color);
16777    --wp-editor-canvas-background: #ddd;
16778    --wp-admin-theme-color: #007cba;
16779    --wp-admin-theme-color--rgb: 0, 124, 186;
16780    --wp-admin-theme-color-darker-10: rgb(0, 107, 160.5);
16781    --wp-admin-theme-color-darker-10--rgb: 0, 107, 160.5;
16782    --wp-admin-theme-color-darker-20: #005a87;
16783    --wp-admin-theme-color-darker-20--rgb: 0, 90, 135;
16784    --wp-admin-border-width-focus: 2px;
16785  }
16786  
16787  @media (min-resolution: 192dpi) {
16788    :root {
16789      --wp-admin-border-width-focus: 1.5px;
16790    }
16791  }
16792  .patterns-menu-items__convert-modal {
16793    z-index: 1000001;
16794  }
16795  
16796  .patterns-menu-items__convert-modal [role=dialog] > [role=document] {
16797    width: 350px;
16798  }
16799  
16800  .patterns-menu-items__convert-modal .patterns-menu-items__convert-modal-categories {
16801    position: relative;
16802  }
16803  
16804  .patterns-menu-items__convert-modal .components-form-token-field__suggestions-list:not(:empty) {
16805    position: absolute;
16806    border: 1px solid var(--wp-admin-theme-color);
16807    border-bottom-left-radius: 2px;
16808    border-bottom-right-radius: 2px;
16809    box-shadow: 0 0 0.5px 0.5px var(--wp-admin-theme-color);
16810    box-sizing: border-box;
16811    z-index: 1;
16812    background-color: #fff;
16813    width: calc(100% + 2px);
16814    left: -1px;
16815    min-width: initial;
16816    max-height: 96px;
16817  }
16818  
16819  .patterns-create-modal__name-input input[type=text] {
16820    margin: 0;
16821  }
16822  
16823  .patterns-rename-pattern-category-modal__validation-message {
16824    color: #cc1818;
16825  }
16826  
16827  @media (min-width: 782px) {
16828    .patterns-rename-pattern-category-modal__validation-message {
16829      width: 320px;
16830    }
16831  }
16832  .pattern-overrides-control__allow-overrides-button {
16833    width: 100%;
16834    justify-content: center;
16835  }
16836  
16837  .routes-pattern-list__tabs-wrapper {
16838    border-bottom: 1px solid #f0f0f0;
16839    padding: 0 24px;
16840  }
16841  
16842  .dataviews-view-grid__badge-fields .dataviews-view-grid__field-value:has(.routes-pattern-list__field-sync-status-fully) {
16843    background: rgba(var(--wp-block-synced-color--rgb), 0.04);
16844    color: var(--wp-block-synced-color);
16845  }`;
16846  document.head.appendChild(document.createElement("style")).appendChild(document.createTextNode(css));
16847  
16848  // routes/pattern-list/stage.tsx
16849  var { usePostActions, patternTitleField } = unlock2(import_editor.privateApis);
16850  var { Tabs } = unlock2(import_components52.privateApis);
16851  var { PATTERN_TYPES: PATTERN_TYPES2, CreatePatternModal } = unlock2(import_patterns3.privateApis);
16852  function PatternList() {
16853    const invalidate = useInvalidate();
16854    const { type = "all" } = useParams({
16855      from: "/patterns/list/$type"
16856    });
16857    const navigate = useNavigate();
16858    const searchParams = useSearch({ from: "/patterns/list/$type" });
16859    const postTypeObject = (0, import_data10.useSelect)(
16860      (select2) => select2(import_core_data3.store).getPostType("wp_block"),
16861      []
16862    );
16863    const labels = postTypeObject?.labels;
16864    const canCreateRecord = (0, import_data10.useSelect)(
16865      (select2) => select2(import_core_data3.store).canUser("create", {
16866        kind: "postType",
16867        name: "wp_block"
16868      }),
16869      []
16870    );
16871    const [showPatternModal, setShowPatternModal] = (0, import_element56.useState)(false);
16872    const handleQueryParamsChange = (0, import_element56.useCallback)(
16873      (params) => {
16874        navigate({
16875          search: {
16876            ...searchParams,
16877            ...params
16878          }
16879        });
16880      },
16881      [searchParams, navigate]
16882    );
16883    const { view, isModified, updateView, resetToDefault } = useView({
16884      kind: "postType",
16885      name: "wp_block",
16886      slug: type,
16887      defaultView: DEFAULT_VIEW,
16888      queryParams: searchParams,
16889      onChangeQueryParams: handleQueryParamsChange
16890    });
16891    const onReset = () => {
16892      resetToDefault();
16893      invalidate();
16894    };
16895    const onChangeView = (newView) => {
16896      updateView(newView);
16897      if (newView.type !== view.type) {
16898        invalidate();
16899      }
16900    };
16901    const categoryFilter = (0, import_element56.useMemo)(() => {
16902      const filter = view.filters?.find((f2) => f2.field === "category");
16903      return filter?.value || "all-patterns";
16904    }, [view.filters]);
16905    const syncStatusFilter = (0, import_element56.useMemo)(() => {
16906      const filter = view.filters?.find((f2) => f2.field === "sync-status");
16907      return filter?.value;
16908    }, [view.filters]);
16909    const patternType = (0, import_element56.useMemo)(() => {
16910      if (type === "my-patterns") {
16911        return PATTERN_TYPES2.user;
16912      } else if (type === "registered") {
16913        return PATTERN_TYPES2.theme;
16914      }
16915      return null;
16916    }, [type]);
16917    const { patterns, isResolving } = use_patterns_default(
16918      patternType,
16919      categoryFilter,
16920      {
16921        search: view.search,
16922        syncStatus: syncStatusFilter
16923      }
16924    );
16925    const patternsWithPermissions = useAugmentPatternsWithPermissions(patterns);
16926    const patternCategoryField = usePatternCategoryField();
16927    const fields = (0, import_element56.useMemo)(() => {
16928      const patternFields = [
16929        previewField,
16930        patternTitleField,
16931        patternCategoryField
16932      ];
16933      if (type === "my-patterns" || type === "all") {
16934        patternFields.push(patternStatusField);
16935      }
16936      return patternFields;
16937    }, [type, patternCategoryField]);
16938    const { data: posts, paginationInfo } = (0, import_element56.useMemo)(() => {
16939      const viewWithoutFilters = { ...view };
16940      delete viewWithoutFilters.search;
16941      viewWithoutFilters.filters = [];
16942      return filterSortAndPaginate(
16943        patternsWithPermissions,
16944        viewWithoutFilters,
16945        fields
16946      );
16947    }, [patternsWithPermissions, view, fields]);
16948    const { totalItems, totalPages } = paginationInfo;
16949    const cleanupDeletedPostIdsFromUrl = (0, import_element56.useCallback)(
16950      (deletedItems) => {
16951        const deletedIds = deletedItems.map((item) => item.id);
16952        const currentPostIds = searchParams.postIds || [];
16953        const remainingPostIds = currentPostIds.filter(
16954          (id) => !deletedIds.includes(id)
16955        );
16956        if (remainingPostIds.length !== currentPostIds.length) {
16957          navigate({
16958            search: {
16959              ...searchParams,
16960              postIds: remainingPostIds.length > 0 ? remainingPostIds : void 0
16961            }
16962          });
16963        } else {
16964          invalidate();
16965        }
16966      },
16967      [invalidate, searchParams, navigate]
16968    );
16969    const postTypeActions = usePostActions({
16970      postType: "wp_block",
16971      context: "list",
16972      onActionPerformed: (actionId, items) => {
16973        if (actionId === "move-to-trash" || actionId === "permanently-delete") {
16974          cleanupDeletedPostIdsFromUrl(items);
16975        }
16976      }
16977    });
16978    const actions = (0, import_element56.useMemo)(() => {
16979      return [
16980        ...postTypeActions?.flatMap((action) => {
16981          if (action.id === "view-post-revisions") {
16982            return [];
16983          }
16984          return [action];
16985        })
16986      ];
16987    }, [postTypeActions]);
16988    const handleTabChange = (0, import_element56.useCallback)(
16989      (typeSlug) => {
16990        navigate({
16991          to: `/patterns/list/$typeSlug}`
16992        });
16993      },
16994      [navigate]
16995    );
16996    if (!postTypeObject) {
16997      return null;
16998    }
16999    const selection = searchParams.postIds ?? [];
17000    if (view.type === "list" && selection.length === 0 && posts?.length > 0) {
17001      selection.push(posts[0].id);
17002    }
17003    if (view.type === "list") {
17004      selection.splice(1);
17005    }
17006    return /* @__PURE__ */ React.createElement(
17007      page_default,
17008      {
17009        title: (0, import_i18n46.__)("Patterns"),
17010        subTitle: (0, import_i18n46.__)(
17011          "Reusable design elements for your site. Create once, use everywhere."
17012        ),
17013        className: "pattern-page",
17014        actions: /* @__PURE__ */ React.createElement(React.Fragment, null, isModified && /* @__PURE__ */ React.createElement(
17015          import_components52.Button,
17016          {
17017            variant: "tertiary",
17018            size: "compact",
17019            onClick: onReset
17020          },
17021          (0, import_i18n46.__)("Reset view")
17022        ), labels?.add_new_item && canCreateRecord && /* @__PURE__ */ React.createElement(
17023          import_components52.Button,
17024          {
17025            variant: "primary",
17026            onClick: () => setShowPatternModal(true),
17027            size: "compact"
17028          },
17029          labels.add_new_item
17030        )),
17031        hasPadding: false
17032      },
17033      DEFAULT_VIEWS.length > 1 && /* @__PURE__ */ React.createElement("div", { className: "routes-pattern-list__tabs-wrapper" }, /* @__PURE__ */ React.createElement(
17034        Tabs,
17035        {
17036          onSelect: handleTabChange,
17037          selectedTabId: type ?? "all"
17038        },
17039        /* @__PURE__ */ React.createElement(Tabs.TabList, null, DEFAULT_VIEWS.map(
17040          (filter) => /* @__PURE__ */ React.createElement(
17041            Tabs.Tab,
17042            {
17043              tabId: filter.slug,
17044              key: filter.slug
17045            },
17046            filter.label
17047          )
17048        ))
17049      )),
17050      /* @__PURE__ */ React.createElement(
17051        dataviews_default,
17052        {
17053          data: posts,
17054          fields,
17055          view,
17056          onChangeView,
17057          actions,
17058          isLoading: isResolving,
17059          paginationInfo: {
17060            totalItems,
17061            totalPages
17062          },
17063          defaultLayouts: DEFAULT_LAYOUTS,
17064          selection,
17065          onChangeSelection: (items) => {
17066            navigate({
17067              search: {
17068                ...searchParams,
17069                postIds: items.length > 0 ? items : void 0,
17070                edit: items.length === 0 ? void 0 : searchParams.edit
17071              }
17072            });
17073          },
17074          isItemClickable: (item) => item.type !== PATTERN_TYPES2.theme,
17075          renderItemLink: ({
17076            item,
17077            ...props
17078          }) => /* @__PURE__ */ React.createElement(
17079            Link,
17080            {
17081              to: `/types/wp_block/edit/$encodeURIComponent(
17082                item.id
17083              )}`,
17084              ...props,
17085              onClick: (event) => {
17086                event.stopPropagation();
17087              }
17088            }
17089          )
17090        }
17091      ),
17092      showPatternModal && /* @__PURE__ */ React.createElement(
17093        CreatePatternModal,
17094        {
17095          onClose: () => setShowPatternModal(false),
17096          onSuccess: ({
17097            pattern
17098          }) => {
17099            setShowPatternModal(false);
17100            navigate({
17101              to: `/types/wp_block/edit/$encodeURIComponent(
17102                pattern.id
17103              )}`
17104            });
17105          },
17106          content: []
17107        }
17108      )
17109    );
17110  }
17111  var stage = PatternList;
17112  export {
17113    stage
17114  };
17115  /*! Bundled license information:
17116  
17117  use-sync-external-store/cjs/use-sync-external-store-shim.development.js:
17118    (**
17119     * @license React
17120     * use-sync-external-store-shim.development.js
17121     *
17122     * Copyright (c) Meta Platforms, Inc. and affiliates.
17123     *
17124     * This source code is licensed under the MIT license found in the
17125     * LICENSE file in the root directory of this source tree.
17126     *)
17127  */


Generated : Wed Apr 15 08:20:10 2026 Cross-referenced by PHPXref