| [ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
1 (function() { 2 "use strict"; 3 var wp; 4 (wp ||= {}).mediaUtils = (() => { 5 var __create = Object.create; 6 var __defProp = Object.defineProperty; 7 var __getOwnPropDesc = Object.getOwnPropertyDescriptor; 8 var __getOwnPropNames = Object.getOwnPropertyNames; 9 var __getProtoOf = Object.getPrototypeOf; 10 var __hasOwnProp = Object.prototype.hasOwnProperty; 11 var __commonJS = (cb, mod) => function __require() { 12 return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; 13 }; 14 var __export = (target, all) => { 15 for (var name in all) 16 __defProp(target, name, { get: all[name], enumerable: true }); 17 }; 18 var __copyProps = (to, from, except, desc) => { 19 if (from && typeof from === "object" || typeof from === "function") { 20 for (let key of __getOwnPropNames(from)) 21 if (!__hasOwnProp.call(to, key) && key !== except) 22 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 23 } 24 return to; 25 }; 26 var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( 27 // If the importer is in node compatibility mode or this is not an ESM 28 // file that has been converted to a CommonJS file using a Babel- 29 // compatible transform (i.e. "__esModule" has not been set), then set 30 // "default" to the CommonJS "module.exports" for node compatibility. 31 isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, 32 mod 33 )); 34 var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); 35 36 // package-external:@wordpress/element 37 var require_element = __commonJS({ 38 "package-external:@wordpress/element"(exports, module) { 39 module.exports = window.wp.element; 40 } 41 }); 42 43 // package-external:@wordpress/i18n 44 var require_i18n = __commonJS({ 45 "package-external:@wordpress/i18n"(exports, module) { 46 module.exports = window.wp.i18n; 47 } 48 }); 49 50 // package-external:@wordpress/data 51 var require_data = __commonJS({ 52 "package-external:@wordpress/data"(exports, module) { 53 module.exports = window.wp.data; 54 } 55 }); 56 57 // package-external:@wordpress/core-data 58 var require_core_data = __commonJS({ 59 "package-external:@wordpress/core-data"(exports, module) { 60 module.exports = window.wp.coreData; 61 } 62 }); 63 64 // package-external:@wordpress/blob 65 var require_blob = __commonJS({ 66 "package-external:@wordpress/blob"(exports, module) { 67 module.exports = window.wp.blob; 68 } 69 }); 70 71 // package-external:@wordpress/api-fetch 72 var require_api_fetch = __commonJS({ 73 "package-external:@wordpress/api-fetch"(exports, module) { 74 module.exports = window.wp.apiFetch; 75 } 76 }); 77 78 // package-external:@wordpress/components 79 var require_components = __commonJS({ 80 "package-external:@wordpress/components"(exports, module) { 81 module.exports = window.wp.components; 82 } 83 }); 84 85 // package-external:@wordpress/primitives 86 var require_primitives = __commonJS({ 87 "package-external:@wordpress/primitives"(exports, module) { 88 module.exports = window.wp.primitives; 89 } 90 }); 91 92 // vendor-external:react/jsx-runtime 93 var require_jsx_runtime = __commonJS({ 94 "vendor-external:react/jsx-runtime"(exports, module) { 95 module.exports = window.ReactJSXRuntime; 96 } 97 }); 98 99 // package-external:@wordpress/compose 100 var require_compose = __commonJS({ 101 "package-external:@wordpress/compose"(exports, module) { 102 module.exports = window.wp.compose; 103 } 104 }); 105 106 // vendor-external:react 107 var require_react = __commonJS({ 108 "vendor-external:react"(exports, module) { 109 module.exports = window.React; 110 } 111 }); 112 113 // vendor-external:react-dom 114 var require_react_dom = __commonJS({ 115 "vendor-external:react-dom"(exports, module) { 116 module.exports = window.ReactDOM; 117 } 118 }); 119 120 // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js 121 var require_use_sync_external_store_shim_development = __commonJS({ 122 "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(exports) { 123 "use strict"; 124 (function() { 125 function is(x2, y2) { 126 return x2 === y2 && (0 !== x2 || 1 / x2 === 1 / y2) || x2 !== x2 && y2 !== y2; 127 } 128 function useSyncExternalStore$2(subscribe2, getSnapshot) { 129 didWarnOld18Alpha || void 0 === React147.startTransition || (didWarnOld18Alpha = true, console.error( 130 "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." 131 )); 132 var value = getSnapshot(); 133 if (!didWarnUncachedGetSnapshot) { 134 var cachedValue = getSnapshot(); 135 objectIs(value, cachedValue) || (console.error( 136 "The result of getSnapshot should be cached to avoid an infinite loop" 137 ), didWarnUncachedGetSnapshot = true); 138 } 139 cachedValue = useState58({ 140 inst: { value, getSnapshot } 141 }); 142 var inst = cachedValue[0].inst, forceUpdate = cachedValue[1]; 143 useLayoutEffect7( 144 function() { 145 inst.value = value; 146 inst.getSnapshot = getSnapshot; 147 checkIfSnapshotChanged(inst) && forceUpdate({ inst }); 148 }, 149 [subscribe2, value, getSnapshot] 150 ); 151 useEffect53( 152 function() { 153 checkIfSnapshotChanged(inst) && forceUpdate({ inst }); 154 return subscribe2(function() { 155 checkIfSnapshotChanged(inst) && forceUpdate({ inst }); 156 }); 157 }, 158 [subscribe2] 159 ); 160 useDebugValue2(value); 161 return value; 162 } 163 function checkIfSnapshotChanged(inst) { 164 var latestGetSnapshot = inst.getSnapshot; 165 inst = inst.value; 166 try { 167 var nextValue = latestGetSnapshot(); 168 return !objectIs(inst, nextValue); 169 } catch (error2) { 170 return true; 171 } 172 } 173 function useSyncExternalStore$1(subscribe2, getSnapshot) { 174 return getSnapshot(); 175 } 176 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); 177 var React147 = require_react(), objectIs = "function" === typeof Object.is ? Object.is : is, useState58 = React147.useState, useEffect53 = React147.useEffect, useLayoutEffect7 = React147.useLayoutEffect, useDebugValue2 = React147.useDebugValue, didWarnOld18Alpha = false, didWarnUncachedGetSnapshot = false, shim = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2; 178 exports.useSyncExternalStore = void 0 !== React147.useSyncExternalStore ? React147.useSyncExternalStore : shim; 179 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); 180 })(); 181 } 182 }); 183 184 // node_modules/use-sync-external-store/shim/index.js 185 var require_shim = __commonJS({ 186 "node_modules/use-sync-external-store/shim/index.js"(exports, module) { 187 "use strict"; 188 if (false) { 189 module.exports = null; 190 } else { 191 module.exports = require_use_sync_external_store_shim_development(); 192 } 193 } 194 }); 195 196 // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js 197 var require_with_selector_development = __commonJS({ 198 "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js"(exports) { 199 "use strict"; 200 (function() { 201 function is(x2, y2) { 202 return x2 === y2 && (0 !== x2 || 1 / x2 === 1 / y2) || x2 !== x2 && y2 !== y2; 203 } 204 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); 205 var React147 = require_react(), shim = require_shim(), objectIs = "function" === typeof Object.is ? Object.is : is, useSyncExternalStore4 = shim.useSyncExternalStore, useRef93 = React147.useRef, useEffect53 = React147.useEffect, useMemo70 = React147.useMemo, useDebugValue2 = React147.useDebugValue; 206 exports.useSyncExternalStoreWithSelector = function(subscribe2, getSnapshot, getServerSnapshot, selector2, isEqual) { 207 var instRef = useRef93(null); 208 if (null === instRef.current) { 209 var inst = { hasValue: false, value: null }; 210 instRef.current = inst; 211 } else inst = instRef.current; 212 instRef = useMemo70( 213 function() { 214 function memoizedSelector(nextSnapshot) { 215 if (!hasMemo) { 216 hasMemo = true; 217 memoizedSnapshot = nextSnapshot; 218 nextSnapshot = selector2(nextSnapshot); 219 if (void 0 !== isEqual && inst.hasValue) { 220 var currentSelection = inst.value; 221 if (isEqual(currentSelection, nextSnapshot)) 222 return memoizedSelection = currentSelection; 223 } 224 return memoizedSelection = nextSnapshot; 225 } 226 currentSelection = memoizedSelection; 227 if (objectIs(memoizedSnapshot, nextSnapshot)) 228 return currentSelection; 229 var nextSelection = selector2(nextSnapshot); 230 if (void 0 !== isEqual && isEqual(currentSelection, nextSelection)) 231 return memoizedSnapshot = nextSnapshot, currentSelection; 232 memoizedSnapshot = nextSnapshot; 233 return memoizedSelection = nextSelection; 234 } 235 var hasMemo = false, memoizedSnapshot, memoizedSelection, maybeGetServerSnapshot = void 0 === getServerSnapshot ? null : getServerSnapshot; 236 return [ 237 function() { 238 return memoizedSelector(getSnapshot()); 239 }, 240 null === maybeGetServerSnapshot ? void 0 : function() { 241 return memoizedSelector(maybeGetServerSnapshot()); 242 } 243 ]; 244 }, 245 [getSnapshot, getServerSnapshot, selector2, isEqual] 246 ); 247 var value = useSyncExternalStore4(subscribe2, instRef[0], instRef[1]); 248 useEffect53( 249 function() { 250 inst.hasValue = true; 251 inst.value = value; 252 }, 253 [value] 254 ); 255 useDebugValue2(value); 256 return value; 257 }; 258 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); 259 })(); 260 } 261 }); 262 263 // node_modules/use-sync-external-store/shim/with-selector.js 264 var require_with_selector = __commonJS({ 265 "node_modules/use-sync-external-store/shim/with-selector.js"(exports, module) { 266 "use strict"; 267 if (false) { 268 module.exports = null; 269 } else { 270 module.exports = require_with_selector_development(); 271 } 272 } 273 }); 274 275 // package-external:@wordpress/theme 276 var require_theme = __commonJS({ 277 "package-external:@wordpress/theme"(exports, module) { 278 module.exports = window.wp.theme; 279 } 280 }); 281 282 // package-external:@wordpress/private-apis 283 var require_private_apis = __commonJS({ 284 "package-external:@wordpress/private-apis"(exports, module) { 285 module.exports = window.wp.privateApis; 286 } 287 }); 288 289 // package-external:@wordpress/a11y 290 var require_a11y = __commonJS({ 291 "package-external:@wordpress/a11y"(exports, module) { 292 module.exports = window.wp.a11y; 293 } 294 }); 295 296 // package-external:@wordpress/warning 297 var require_warning = __commonJS({ 298 "package-external:@wordpress/warning"(exports, module) { 299 module.exports = window.wp.warning; 300 } 301 }); 302 303 // package-external:@wordpress/keycodes 304 var require_keycodes = __commonJS({ 305 "package-external:@wordpress/keycodes"(exports, module) { 306 module.exports = window.wp.keycodes; 307 } 308 }); 309 310 // node_modules/remove-accents/index.js 311 var require_remove_accents = __commonJS({ 312 "node_modules/remove-accents/index.js"(exports, module) { 313 var characterMap = { 314 "\xC0": "A", 315 "\xC1": "A", 316 "\xC2": "A", 317 "\xC3": "A", 318 "\xC4": "A", 319 "\xC5": "A", 320 "\u1EA4": "A", 321 "\u1EAE": "A", 322 "\u1EB2": "A", 323 "\u1EB4": "A", 324 "\u1EB6": "A", 325 "\xC6": "AE", 326 "\u1EA6": "A", 327 "\u1EB0": "A", 328 "\u0202": "A", 329 "\u1EA2": "A", 330 "\u1EA0": "A", 331 "\u1EA8": "A", 332 "\u1EAA": "A", 333 "\u1EAC": "A", 334 "\xC7": "C", 335 "\u1E08": "C", 336 "\xC8": "E", 337 "\xC9": "E", 338 "\xCA": "E", 339 "\xCB": "E", 340 "\u1EBE": "E", 341 "\u1E16": "E", 342 "\u1EC0": "E", 343 "\u1E14": "E", 344 "\u1E1C": "E", 345 "\u0206": "E", 346 "\u1EBA": "E", 347 "\u1EBC": "E", 348 "\u1EB8": "E", 349 "\u1EC2": "E", 350 "\u1EC4": "E", 351 "\u1EC6": "E", 352 "\xCC": "I", 353 "\xCD": "I", 354 "\xCE": "I", 355 "\xCF": "I", 356 "\u1E2E": "I", 357 "\u020A": "I", 358 "\u1EC8": "I", 359 "\u1ECA": "I", 360 "\xD0": "D", 361 "\xD1": "N", 362 "\xD2": "O", 363 "\xD3": "O", 364 "\xD4": "O", 365 "\xD5": "O", 366 "\xD6": "O", 367 "\xD8": "O", 368 "\u1ED0": "O", 369 "\u1E4C": "O", 370 "\u1E52": "O", 371 "\u020E": "O", 372 "\u1ECE": "O", 373 "\u1ECC": "O", 374 "\u1ED4": "O", 375 "\u1ED6": "O", 376 "\u1ED8": "O", 377 "\u1EDC": "O", 378 "\u1EDE": "O", 379 "\u1EE0": "O", 380 "\u1EDA": "O", 381 "\u1EE2": "O", 382 "\xD9": "U", 383 "\xDA": "U", 384 "\xDB": "U", 385 "\xDC": "U", 386 "\u1EE6": "U", 387 "\u1EE4": "U", 388 "\u1EEC": "U", 389 "\u1EEE": "U", 390 "\u1EF0": "U", 391 "\xDD": "Y", 392 "\xE0": "a", 393 "\xE1": "a", 394 "\xE2": "a", 395 "\xE3": "a", 396 "\xE4": "a", 397 "\xE5": "a", 398 "\u1EA5": "a", 399 "\u1EAF": "a", 400 "\u1EB3": "a", 401 "\u1EB5": "a", 402 "\u1EB7": "a", 403 "\xE6": "ae", 404 "\u1EA7": "a", 405 "\u1EB1": "a", 406 "\u0203": "a", 407 "\u1EA3": "a", 408 "\u1EA1": "a", 409 "\u1EA9": "a", 410 "\u1EAB": "a", 411 "\u1EAD": "a", 412 "\xE7": "c", 413 "\u1E09": "c", 414 "\xE8": "e", 415 "\xE9": "e", 416 "\xEA": "e", 417 "\xEB": "e", 418 "\u1EBF": "e", 419 "\u1E17": "e", 420 "\u1EC1": "e", 421 "\u1E15": "e", 422 "\u1E1D": "e", 423 "\u0207": "e", 424 "\u1EBB": "e", 425 "\u1EBD": "e", 426 "\u1EB9": "e", 427 "\u1EC3": "e", 428 "\u1EC5": "e", 429 "\u1EC7": "e", 430 "\xEC": "i", 431 "\xED": "i", 432 "\xEE": "i", 433 "\xEF": "i", 434 "\u1E2F": "i", 435 "\u020B": "i", 436 "\u1EC9": "i", 437 "\u1ECB": "i", 438 "\xF0": "d", 439 "\xF1": "n", 440 "\xF2": "o", 441 "\xF3": "o", 442 "\xF4": "o", 443 "\xF5": "o", 444 "\xF6": "o", 445 "\xF8": "o", 446 "\u1ED1": "o", 447 "\u1E4D": "o", 448 "\u1E53": "o", 449 "\u020F": "o", 450 "\u1ECF": "o", 451 "\u1ECD": "o", 452 "\u1ED5": "o", 453 "\u1ED7": "o", 454 "\u1ED9": "o", 455 "\u1EDD": "o", 456 "\u1EDF": "o", 457 "\u1EE1": "o", 458 "\u1EDB": "o", 459 "\u1EE3": "o", 460 "\xF9": "u", 461 "\xFA": "u", 462 "\xFB": "u", 463 "\xFC": "u", 464 "\u1EE7": "u", 465 "\u1EE5": "u", 466 "\u1EED": "u", 467 "\u1EEF": "u", 468 "\u1EF1": "u", 469 "\xFD": "y", 470 "\xFF": "y", 471 "\u0100": "A", 472 "\u0101": "a", 473 "\u0102": "A", 474 "\u0103": "a", 475 "\u0104": "A", 476 "\u0105": "a", 477 "\u0106": "C", 478 "\u0107": "c", 479 "\u0108": "C", 480 "\u0109": "c", 481 "\u010A": "C", 482 "\u010B": "c", 483 "\u010C": "C", 484 "\u010D": "c", 485 "C\u0306": "C", 486 "c\u0306": "c", 487 "\u010E": "D", 488 "\u010F": "d", 489 "\u0110": "D", 490 "\u0111": "d", 491 "\u0112": "E", 492 "\u0113": "e", 493 "\u0114": "E", 494 "\u0115": "e", 495 "\u0116": "E", 496 "\u0117": "e", 497 "\u0118": "E", 498 "\u0119": "e", 499 "\u011A": "E", 500 "\u011B": "e", 501 "\u011C": "G", 502 "\u01F4": "G", 503 "\u011D": "g", 504 "\u01F5": "g", 505 "\u011E": "G", 506 "\u011F": "g", 507 "\u0120": "G", 508 "\u0121": "g", 509 "\u0122": "G", 510 "\u0123": "g", 511 "\u0124": "H", 512 "\u0125": "h", 513 "\u0126": "H", 514 "\u0127": "h", 515 "\u1E2A": "H", 516 "\u1E2B": "h", 517 "\u0128": "I", 518 "\u0129": "i", 519 "\u012A": "I", 520 "\u012B": "i", 521 "\u012C": "I", 522 "\u012D": "i", 523 "\u012E": "I", 524 "\u012F": "i", 525 "\u0130": "I", 526 "\u0131": "i", 527 "\u0132": "IJ", 528 "\u0133": "ij", 529 "\u0134": "J", 530 "\u0135": "j", 531 "\u0136": "K", 532 "\u0137": "k", 533 "\u1E30": "K", 534 "\u1E31": "k", 535 "K\u0306": "K", 536 "k\u0306": "k", 537 "\u0139": "L", 538 "\u013A": "l", 539 "\u013B": "L", 540 "\u013C": "l", 541 "\u013D": "L", 542 "\u013E": "l", 543 "\u013F": "L", 544 "\u0140": "l", 545 "\u0141": "l", 546 "\u0142": "l", 547 "\u1E3E": "M", 548 "\u1E3F": "m", 549 "M\u0306": "M", 550 "m\u0306": "m", 551 "\u0143": "N", 552 "\u0144": "n", 553 "\u0145": "N", 554 "\u0146": "n", 555 "\u0147": "N", 556 "\u0148": "n", 557 "\u0149": "n", 558 "N\u0306": "N", 559 "n\u0306": "n", 560 "\u014C": "O", 561 "\u014D": "o", 562 "\u014E": "O", 563 "\u014F": "o", 564 "\u0150": "O", 565 "\u0151": "o", 566 "\u0152": "OE", 567 "\u0153": "oe", 568 "P\u0306": "P", 569 "p\u0306": "p", 570 "\u0154": "R", 571 "\u0155": "r", 572 "\u0156": "R", 573 "\u0157": "r", 574 "\u0158": "R", 575 "\u0159": "r", 576 "R\u0306": "R", 577 "r\u0306": "r", 578 "\u0212": "R", 579 "\u0213": "r", 580 "\u015A": "S", 581 "\u015B": "s", 582 "\u015C": "S", 583 "\u015D": "s", 584 "\u015E": "S", 585 "\u0218": "S", 586 "\u0219": "s", 587 "\u015F": "s", 588 "\u0160": "S", 589 "\u0161": "s", 590 "\u0162": "T", 591 "\u0163": "t", 592 "\u021B": "t", 593 "\u021A": "T", 594 "\u0164": "T", 595 "\u0165": "t", 596 "\u0166": "T", 597 "\u0167": "t", 598 "T\u0306": "T", 599 "t\u0306": "t", 600 "\u0168": "U", 601 "\u0169": "u", 602 "\u016A": "U", 603 "\u016B": "u", 604 "\u016C": "U", 605 "\u016D": "u", 606 "\u016E": "U", 607 "\u016F": "u", 608 "\u0170": "U", 609 "\u0171": "u", 610 "\u0172": "U", 611 "\u0173": "u", 612 "\u0216": "U", 613 "\u0217": "u", 614 "V\u0306": "V", 615 "v\u0306": "v", 616 "\u0174": "W", 617 "\u0175": "w", 618 "\u1E82": "W", 619 "\u1E83": "w", 620 "X\u0306": "X", 621 "x\u0306": "x", 622 "\u0176": "Y", 623 "\u0177": "y", 624 "\u0178": "Y", 625 "Y\u0306": "Y", 626 "y\u0306": "y", 627 "\u0179": "Z", 628 "\u017A": "z", 629 "\u017B": "Z", 630 "\u017C": "z", 631 "\u017D": "Z", 632 "\u017E": "z", 633 "\u017F": "s", 634 "\u0192": "f", 635 "\u01A0": "O", 636 "\u01A1": "o", 637 "\u01AF": "U", 638 "\u01B0": "u", 639 "\u01CD": "A", 640 "\u01CE": "a", 641 "\u01CF": "I", 642 "\u01D0": "i", 643 "\u01D1": "O", 644 "\u01D2": "o", 645 "\u01D3": "U", 646 "\u01D4": "u", 647 "\u01D5": "U", 648 "\u01D6": "u", 649 "\u01D7": "U", 650 "\u01D8": "u", 651 "\u01D9": "U", 652 "\u01DA": "u", 653 "\u01DB": "U", 654 "\u01DC": "u", 655 "\u1EE8": "U", 656 "\u1EE9": "u", 657 "\u1E78": "U", 658 "\u1E79": "u", 659 "\u01FA": "A", 660 "\u01FB": "a", 661 "\u01FC": "AE", 662 "\u01FD": "ae", 663 "\u01FE": "O", 664 "\u01FF": "o", 665 "\xDE": "TH", 666 "\xFE": "th", 667 "\u1E54": "P", 668 "\u1E55": "p", 669 "\u1E64": "S", 670 "\u1E65": "s", 671 "X\u0301": "X", 672 "x\u0301": "x", 673 "\u0403": "\u0413", 674 "\u0453": "\u0433", 675 "\u040C": "\u041A", 676 "\u045C": "\u043A", 677 "A\u030B": "A", 678 "a\u030B": "a", 679 "E\u030B": "E", 680 "e\u030B": "e", 681 "I\u030B": "I", 682 "i\u030B": "i", 683 "\u01F8": "N", 684 "\u01F9": "n", 685 "\u1ED2": "O", 686 "\u1ED3": "o", 687 "\u1E50": "O", 688 "\u1E51": "o", 689 "\u1EEA": "U", 690 "\u1EEB": "u", 691 "\u1E80": "W", 692 "\u1E81": "w", 693 "\u1EF2": "Y", 694 "\u1EF3": "y", 695 "\u0200": "A", 696 "\u0201": "a", 697 "\u0204": "E", 698 "\u0205": "e", 699 "\u0208": "I", 700 "\u0209": "i", 701 "\u020C": "O", 702 "\u020D": "o", 703 "\u0210": "R", 704 "\u0211": "r", 705 "\u0214": "U", 706 "\u0215": "u", 707 "B\u030C": "B", 708 "b\u030C": "b", 709 "\u010C\u0323": "C", 710 "\u010D\u0323": "c", 711 "\xCA\u030C": "E", 712 "\xEA\u030C": "e", 713 "F\u030C": "F", 714 "f\u030C": "f", 715 "\u01E6": "G", 716 "\u01E7": "g", 717 "\u021E": "H", 718 "\u021F": "h", 719 "J\u030C": "J", 720 "\u01F0": "j", 721 "\u01E8": "K", 722 "\u01E9": "k", 723 "M\u030C": "M", 724 "m\u030C": "m", 725 "P\u030C": "P", 726 "p\u030C": "p", 727 "Q\u030C": "Q", 728 "q\u030C": "q", 729 "\u0158\u0329": "R", 730 "\u0159\u0329": "r", 731 "\u1E66": "S", 732 "\u1E67": "s", 733 "V\u030C": "V", 734 "v\u030C": "v", 735 "W\u030C": "W", 736 "w\u030C": "w", 737 "X\u030C": "X", 738 "x\u030C": "x", 739 "Y\u030C": "Y", 740 "y\u030C": "y", 741 "A\u0327": "A", 742 "a\u0327": "a", 743 "B\u0327": "B", 744 "b\u0327": "b", 745 "\u1E10": "D", 746 "\u1E11": "d", 747 "\u0228": "E", 748 "\u0229": "e", 749 "\u0190\u0327": "E", 750 "\u025B\u0327": "e", 751 "\u1E28": "H", 752 "\u1E29": "h", 753 "I\u0327": "I", 754 "i\u0327": "i", 755 "\u0197\u0327": "I", 756 "\u0268\u0327": "i", 757 "M\u0327": "M", 758 "m\u0327": "m", 759 "O\u0327": "O", 760 "o\u0327": "o", 761 "Q\u0327": "Q", 762 "q\u0327": "q", 763 "U\u0327": "U", 764 "u\u0327": "u", 765 "X\u0327": "X", 766 "x\u0327": "x", 767 "Z\u0327": "Z", 768 "z\u0327": "z", 769 "\u0439": "\u0438", 770 "\u0419": "\u0418", 771 "\u0451": "\u0435", 772 "\u0401": "\u0415" 773 }; 774 var chars = Object.keys(characterMap).join("|"); 775 var allAccents = new RegExp(chars, "g"); 776 var firstAccent = new RegExp(chars, ""); 777 function matcher(match2) { 778 return characterMap[match2]; 779 } 780 var removeAccents2 = function(string) { 781 return string.replace(allAccents, matcher); 782 }; 783 var hasAccents = function(string) { 784 return !!string.match(firstAccent); 785 }; 786 module.exports = removeAccents2; 787 module.exports.has = hasAccents; 788 module.exports.remove = removeAccents2; 789 } 790 }); 791 792 // node_modules/fast-deep-equal/es6/index.js 793 var require_es6 = __commonJS({ 794 "node_modules/fast-deep-equal/es6/index.js"(exports, module) { 795 "use strict"; 796 module.exports = function equal(a2, b2) { 797 if (a2 === b2) return true; 798 if (a2 && b2 && typeof a2 == "object" && typeof b2 == "object") { 799 if (a2.constructor !== b2.constructor) return false; 800 var length, i2, keys; 801 if (Array.isArray(a2)) { 802 length = a2.length; 803 if (length != b2.length) return false; 804 for (i2 = length; i2-- !== 0; ) 805 if (!equal(a2[i2], b2[i2])) return false; 806 return true; 807 } 808 if (a2 instanceof Map && b2 instanceof Map) { 809 if (a2.size !== b2.size) return false; 810 for (i2 of a2.entries()) 811 if (!b2.has(i2[0])) return false; 812 for (i2 of a2.entries()) 813 if (!equal(i2[1], b2.get(i2[0]))) return false; 814 return true; 815 } 816 if (a2 instanceof Set && b2 instanceof Set) { 817 if (a2.size !== b2.size) return false; 818 for (i2 of a2.entries()) 819 if (!b2.has(i2[0])) return false; 820 return true; 821 } 822 if (ArrayBuffer.isView(a2) && ArrayBuffer.isView(b2)) { 823 length = a2.length; 824 if (length != b2.length) return false; 825 for (i2 = length; i2-- !== 0; ) 826 if (a2[i2] !== b2[i2]) return false; 827 return true; 828 } 829 if (a2.constructor === RegExp) return a2.source === b2.source && a2.flags === b2.flags; 830 if (a2.valueOf !== Object.prototype.valueOf) return a2.valueOf() === b2.valueOf(); 831 if (a2.toString !== Object.prototype.toString) return a2.toString() === b2.toString(); 832 keys = Object.keys(a2); 833 length = keys.length; 834 if (length !== Object.keys(b2).length) return false; 835 for (i2 = length; i2-- !== 0; ) 836 if (!Object.prototype.hasOwnProperty.call(b2, keys[i2])) return false; 837 for (i2 = length; i2-- !== 0; ) { 838 var key = keys[i2]; 839 if (!equal(a2[key], b2[key])) return false; 840 } 841 return true; 842 } 843 return a2 !== a2 && b2 !== b2; 844 }; 845 } 846 }); 847 848 // package-external:@wordpress/date 849 var require_date = __commonJS({ 850 "package-external:@wordpress/date"(exports, module) { 851 module.exports = window.wp.date; 852 } 853 }); 854 855 // package-external:@wordpress/preferences 856 var require_preferences = __commonJS({ 857 "package-external:@wordpress/preferences"(exports, module) { 858 module.exports = window.wp.preferences; 859 } 860 }); 861 862 // package-external:@wordpress/url 863 var require_url = __commonJS({ 864 "package-external:@wordpress/url"(exports, module) { 865 module.exports = window.wp.url; 866 } 867 }); 868 869 // package-external:@wordpress/notices 870 var require_notices = __commonJS({ 871 "package-external:@wordpress/notices"(exports, module) { 872 module.exports = window.wp.notices; 873 } 874 }); 875 876 // packages/media-utils/build-module/index.mjs 877 var index_exports = {}; 878 __export(index_exports, { 879 MediaUpload: () => media_upload_default, 880 privateApis: () => privateApis, 881 transformAttachment: () => transformAttachment, 882 uploadMedia: () => uploadMedia, 883 validateFileSize: () => validateFileSize, 884 validateMimeType: () => validateMimeType, 885 validateMimeTypeForUser: () => validateMimeTypeForUser 886 }); 887 888 // packages/media-utils/build-module/components/media-upload/index.mjs 889 var import_element = __toESM(require_element(), 1); 890 var import_i18n = __toESM(require_i18n(), 1); 891 var import_data = __toESM(require_data(), 1); 892 893 // packages/media-utils/build-module/utils/invalidate-attachment-resolutions.mjs 894 var import_core_data = __toESM(require_core_data(), 1); 895 function invalidateAttachmentResolutions(registry) { 896 const resolvers = registry.select(import_core_data.store).getCachedResolvers(); 897 const entityRecordResolutions = resolvers.getEntityRecords; 898 entityRecordResolutions?.forEach((_value, args) => { 899 if (args[0] === "postType" && args[1] === "attachment") { 900 registry.dispatch(import_core_data.store).invalidateResolution("getEntityRecords", args); 901 } 902 }); 903 } 904 905 // packages/media-utils/build-module/components/media-upload/index.mjs 906 var DEFAULT_EMPTY_GALLERY = []; 907 var getFeaturedImageMediaFrame = () => { 908 const { wp } = window; 909 return wp.media.view.MediaFrame.Select.extend({ 910 /** 911 * Enables the Set Featured Image Button. 912 * 913 * @param {Object} toolbar toolbar for featured image state 914 * @return {void} 915 */ 916 featuredImageToolbar(toolbar) { 917 this.createSelectToolbar(toolbar, { 918 text: wp.media.view.l10n.setFeaturedImage, 919 state: this.options.state 920 }); 921 }, 922 /** 923 * Handle the edit state requirements of selected media item. 924 * 925 * @return {void} 926 */ 927 editState() { 928 const selection = this.state("featured-image").get("selection"); 929 const view = new wp.media.view.EditImage({ 930 model: selection.single(), 931 controller: this 932 }).render(); 933 this.content.set(view); 934 view.loadEditor(); 935 }, 936 /** 937 * Create the default states. 938 * 939 * @return {void} 940 */ 941 createStates: function createStates() { 942 this.on( 943 "toolbar:create:featured-image", 944 this.featuredImageToolbar, 945 this 946 ); 947 this.on("content:render:edit-image", this.editState, this); 948 this.states.add([ 949 new wp.media.controller.FeaturedImage(), 950 new wp.media.controller.EditImage({ 951 model: this.options.editImage 952 }) 953 ]); 954 } 955 }); 956 }; 957 var getSingleMediaFrame = () => { 958 const { wp } = window; 959 return wp.media.view.MediaFrame.Select.extend({ 960 /** 961 * Create the default states on the frame. 962 */ 963 createStates() { 964 const options = this.options; 965 if (this.options.states) { 966 return; 967 } 968 this.states.add([ 969 // Main states. 970 new wp.media.controller.Library({ 971 library: wp.media.query(options.library), 972 multiple: options.multiple, 973 title: options.title, 974 priority: 20, 975 filterable: "uploaded" 976 // Allow filtering by uploaded images. 977 }), 978 new wp.media.controller.EditImage({ 979 model: options.editImage 980 }) 981 ]); 982 } 983 }); 984 }; 985 var getGalleryDetailsMediaFrame = () => { 986 const { wp } = window; 987 return wp.media.view.MediaFrame.Post.extend({ 988 /** 989 * Set up gallery toolbar. 990 * 991 * @return {void} 992 */ 993 galleryToolbar() { 994 const editing = this.state().get("editing"); 995 this.toolbar.set( 996 new wp.media.view.Toolbar({ 997 controller: this, 998 items: { 999 insert: { 1000 style: "primary", 1001 text: editing ? wp.media.view.l10n.updateGallery : wp.media.view.l10n.insertGallery, 1002 priority: 80, 1003 requires: { library: true }, 1004 /** 1005 * @fires wp.media.controller.State#update 1006 */ 1007 click() { 1008 const controller = this.controller, state = controller.state(); 1009 controller.close(); 1010 state.trigger( 1011 "update", 1012 state.get("library") 1013 ); 1014 controller.setState(controller.options.state); 1015 controller.reset(); 1016 } 1017 } 1018 } 1019 }) 1020 ); 1021 }, 1022 /** 1023 * Handle the edit state requirements of selected media item. 1024 * 1025 * @return {void} 1026 */ 1027 editState() { 1028 const selection = this.state("gallery").get("selection"); 1029 const view = new wp.media.view.EditImage({ 1030 model: selection.single(), 1031 controller: this 1032 }).render(); 1033 this.content.set(view); 1034 view.loadEditor(); 1035 }, 1036 /** 1037 * Create the default states. 1038 * 1039 * @return {void} 1040 */ 1041 createStates: function createStates() { 1042 this.on("toolbar:create:main-gallery", this.galleryToolbar, this); 1043 this.on("content:render:edit-image", this.editState, this); 1044 this.states.add([ 1045 new wp.media.controller.Library({ 1046 id: "gallery", 1047 title: wp.media.view.l10n.createGalleryTitle, 1048 priority: 40, 1049 toolbar: "main-gallery", 1050 filterable: "uploaded", 1051 multiple: "add", 1052 editable: false, 1053 library: wp.media.query({ 1054 type: "image", 1055 ...this.options.library 1056 }) 1057 }), 1058 new wp.media.controller.EditImage({ 1059 model: this.options.editImage 1060 }), 1061 new wp.media.controller.GalleryEdit({ 1062 library: this.options.selection, 1063 editing: this.options.editing, 1064 menu: "gallery", 1065 displaySettings: false, 1066 multiple: true 1067 }), 1068 new wp.media.controller.GalleryAdd() 1069 ]); 1070 } 1071 }); 1072 }; 1073 var slimImageObject = (img) => { 1074 const attrSet = [ 1075 "sizes", 1076 "mime", 1077 "type", 1078 "subtype", 1079 "id", 1080 "url", 1081 "alt", 1082 "link", 1083 "caption" 1084 ]; 1085 return attrSet.reduce((result, key) => { 1086 if (img?.hasOwnProperty(key)) { 1087 result[key] = img[key]; 1088 } 1089 return result; 1090 }, {}); 1091 }; 1092 var getAttachmentsCollection = (ids) => { 1093 const { wp } = window; 1094 return wp.media.query({ 1095 order: "ASC", 1096 orderby: "post__in", 1097 post__in: ids, 1098 posts_per_page: -1, 1099 query: true, 1100 type: "image" 1101 }); 1102 }; 1103 var MediaUpload = class extends import_element.Component { 1104 constructor() { 1105 super(...arguments); 1106 this.openModal = this.openModal.bind(this); 1107 this.onOpen = this.onOpen.bind(this); 1108 this.onSelect = this.onSelect.bind(this); 1109 this.onUpdate = this.onUpdate.bind(this); 1110 this.onClose = this.onClose.bind(this); 1111 this.stopUndoRedoPropagation = this.stopUndoRedoPropagation.bind(this); 1112 } 1113 stopUndoRedoPropagation(event) { 1114 if (!event.metaKey && !event.ctrlKey) { 1115 return; 1116 } 1117 const character = event.key?.toLowerCase(); 1118 if (character !== "z" && character !== "y") { 1119 return; 1120 } 1121 event.stopPropagation(); 1122 } 1123 initializeListeners() { 1124 this.frame.on("select", this.onSelect); 1125 this.frame.on("update", this.onUpdate); 1126 this.frame.on("open", this.onOpen); 1127 this.frame.on("close", this.onClose); 1128 } 1129 /** 1130 * Sets the Gallery frame and initializes listeners. 1131 * 1132 * @return {void} 1133 */ 1134 buildAndSetGalleryFrame() { 1135 const { 1136 addToGallery = false, 1137 allowedTypes, 1138 multiple = false, 1139 value = DEFAULT_EMPTY_GALLERY 1140 } = this.props; 1141 if (value === this.lastGalleryValue) { 1142 return; 1143 } 1144 const { wp } = window; 1145 this.lastGalleryValue = value; 1146 if (this.frame) { 1147 this.frame.remove(); 1148 } 1149 let currentState; 1150 if (addToGallery) { 1151 currentState = "gallery-library"; 1152 } else { 1153 currentState = value && value.length ? "gallery-edit" : "gallery"; 1154 } 1155 if (!this.GalleryDetailsMediaFrame) { 1156 this.GalleryDetailsMediaFrame = getGalleryDetailsMediaFrame(); 1157 } 1158 const attachments = getAttachmentsCollection(value); 1159 const selection = new wp.media.model.Selection(attachments.models, { 1160 props: attachments.props.toJSON(), 1161 multiple 1162 }); 1163 this.frame = new this.GalleryDetailsMediaFrame({ 1164 mimeType: allowedTypes, 1165 state: currentState, 1166 multiple, 1167 selection, 1168 editing: !!value?.length 1169 }); 1170 wp.media.frame = this.frame; 1171 this.initializeListeners(); 1172 } 1173 /** 1174 * Initializes the Media Library requirements for the featured image flow. 1175 * 1176 * @return {void} 1177 */ 1178 buildAndSetFeatureImageFrame() { 1179 const { wp } = window; 1180 const { value: featuredImageId, multiple, allowedTypes } = this.props; 1181 const featuredImageFrame = getFeaturedImageMediaFrame(); 1182 const attachments = getAttachmentsCollection(featuredImageId); 1183 const selection = new wp.media.model.Selection(attachments.models, { 1184 props: attachments.props.toJSON() 1185 }); 1186 this.frame = new featuredImageFrame({ 1187 mimeType: allowedTypes, 1188 state: "featured-image", 1189 multiple, 1190 selection, 1191 editing: featuredImageId 1192 }); 1193 wp.media.frame = this.frame; 1194 wp.media.view.settings.post = { 1195 ...wp.media.view.settings.post, 1196 featuredImageId: featuredImageId || -1 1197 }; 1198 } 1199 /** 1200 * Initializes the Media Library requirements for the single image flow. 1201 * 1202 * @return {void} 1203 */ 1204 buildAndSetSingleMediaFrame() { 1205 const { wp } = window; 1206 const { 1207 allowedTypes, 1208 multiple = false, 1209 title = (0, import_i18n.__)("Select or Upload Media"), 1210 value 1211 } = this.props; 1212 const frameConfig = { 1213 title, 1214 multiple 1215 }; 1216 if (!!allowedTypes) { 1217 frameConfig.library = { type: allowedTypes }; 1218 } 1219 if (this.frame) { 1220 this.frame.remove(); 1221 } 1222 const singleImageFrame = getSingleMediaFrame(); 1223 const attachments = getAttachmentsCollection(value); 1224 const selection = new wp.media.model.Selection(attachments.models, { 1225 props: attachments.props.toJSON() 1226 }); 1227 this.frame = new singleImageFrame({ 1228 mimeType: allowedTypes, 1229 multiple, 1230 selection, 1231 ...frameConfig 1232 }); 1233 wp.media.frame = this.frame; 1234 } 1235 componentWillUnmount() { 1236 this.detachUndoRedoGuard(); 1237 this.frame?.close(); 1238 this.frame?.modal?.remove(); 1239 this.frame?.remove(); 1240 } 1241 detachUndoRedoGuard() { 1242 if (this.frame?.modal?.el) { 1243 this.frame.modal.el.removeEventListener( 1244 "keydown", 1245 this.stopUndoRedoPropagation, 1246 true 1247 ); 1248 } 1249 } 1250 onUpdate(selections) { 1251 const { onSelect, multiple = false } = this.props; 1252 const state = this.frame.state(); 1253 const selectedImages = selections || state.get("selection"); 1254 if (!selectedImages || !selectedImages.models.length) { 1255 return; 1256 } 1257 if (multiple) { 1258 onSelect( 1259 selectedImages.models.map( 1260 (model) => slimImageObject(model.toJSON()) 1261 ) 1262 ); 1263 } else { 1264 onSelect(slimImageObject(selectedImages.models[0].toJSON())); 1265 } 1266 } 1267 onSelect() { 1268 const { onSelect, multiple = false } = this.props; 1269 const attachment = this.frame.state().get("selection").toJSON(); 1270 onSelect(multiple ? attachment : attachment[0]); 1271 } 1272 onOpen() { 1273 const { wp } = window; 1274 const { value } = this.props; 1275 this.updateCollection(); 1276 if (this.frame?.modal?.el) { 1277 this.frame.modal.el.addEventListener( 1278 "keydown", 1279 this.stopUndoRedoPropagation, 1280 true 1281 ); 1282 } 1283 if (this.props.mode) { 1284 this.frame.content.mode(this.props.mode); 1285 } 1286 const hasMedia = Array.isArray(value) ? !!value?.length : !!value; 1287 if (!hasMedia) { 1288 return; 1289 } 1290 const isGallery = this.props.gallery; 1291 const selection = this.frame.state().get("selection"); 1292 const valueArray = Array.isArray(value) ? value : [value]; 1293 if (!isGallery) { 1294 valueArray.forEach((id) => { 1295 selection.add(wp.media.attachment(id)); 1296 }); 1297 } 1298 const attachments = getAttachmentsCollection(valueArray); 1299 attachments.more().done(function() { 1300 if (isGallery && attachments?.models?.length) { 1301 selection.add(attachments.models); 1302 } 1303 }); 1304 } 1305 onClose() { 1306 const { onClose } = this.props; 1307 this.detachUndoRedoGuard(); 1308 if (onClose) { 1309 onClose(); 1310 } 1311 invalidateAttachmentResolutions({ select: import_data.select, dispatch: import_data.dispatch }); 1312 this.frame.detach(); 1313 } 1314 updateCollection() { 1315 const frameContent = this.frame.content.get(); 1316 if (frameContent && frameContent.collection) { 1317 const collection = frameContent.collection; 1318 collection.toArray().forEach((model) => model.trigger("destroy", model)); 1319 collection.mirroring._hasMore = true; 1320 collection.more(); 1321 } 1322 } 1323 openModal() { 1324 const { 1325 gallery = false, 1326 unstableFeaturedImageFlow = false, 1327 modalClass 1328 } = this.props; 1329 if (gallery) { 1330 this.buildAndSetGalleryFrame(); 1331 } else { 1332 this.buildAndSetSingleMediaFrame(); 1333 } 1334 if (modalClass) { 1335 this.frame.$el.addClass(modalClass); 1336 } 1337 if (unstableFeaturedImageFlow) { 1338 this.buildAndSetFeatureImageFrame(); 1339 } 1340 this.initializeListeners(); 1341 this.frame.open(); 1342 } 1343 render() { 1344 return this.props.render({ open: this.openModal }); 1345 } 1346 }; 1347 var media_upload_default = MediaUpload; 1348 1349 // packages/media-utils/build-module/utils/upload-media.mjs 1350 var import_i18n6 = __toESM(require_i18n(), 1); 1351 var import_blob = __toESM(require_blob(), 1); 1352 1353 // packages/media-utils/build-module/utils/upload-to-server.mjs 1354 var import_api_fetch = __toESM(require_api_fetch(), 1); 1355 1356 // packages/media-utils/build-module/utils/flatten-form-data.mjs 1357 function isPlainObject(data) { 1358 return data !== null && typeof data === "object" && Object.getPrototypeOf(data) === Object.prototype; 1359 } 1360 function flattenFormData(formData, key, data) { 1361 if (Array.isArray(data) || isPlainObject(data)) { 1362 for (const [name, value] of Object.entries(data)) { 1363 flattenFormData(formData, `$key}[$name}]`, value); 1364 } 1365 } else if (data !== void 0) { 1366 formData.append(key, String(data)); 1367 } 1368 } 1369 1370 // packages/media-utils/build-module/utils/transform-attachment.mjs 1371 function transformAttachment(attachment) { 1372 const { alt_text, source_url, ...savedMediaProps } = attachment; 1373 return { 1374 ...savedMediaProps, 1375 alt: attachment.alt_text, 1376 caption: attachment.caption?.raw ?? "", 1377 title: attachment.title.raw, 1378 url: attachment.source_url, 1379 poster: attachment._embedded?.["wp:featuredmedia"]?.[0]?.source_url || void 0 1380 }; 1381 } 1382 1383 // packages/media-utils/build-module/utils/upload-to-server.mjs 1384 async function uploadToServer(file, additionalData = {}, signal) { 1385 const data = new FormData(); 1386 data.append("file", file, file.name || file.type.replace("/", ".")); 1387 for (const [key, value] of Object.entries(additionalData)) { 1388 flattenFormData(data, key, value); 1389 } 1390 return transformAttachment( 1391 await (0, import_api_fetch.default)({ 1392 // This allows the video block to directly get a video's poster image. 1393 path: "/wp/v2/media?_embed=wp:featuredmedia", 1394 body: data, 1395 method: "POST", 1396 signal 1397 }) 1398 ); 1399 } 1400 1401 // packages/media-utils/build-module/utils/validate-mime-type.mjs 1402 var import_i18n2 = __toESM(require_i18n(), 1); 1403 1404 // packages/media-utils/build-module/utils/upload-error.mjs 1405 var UploadError = class extends Error { 1406 code; 1407 file; 1408 constructor({ code, message: message2, file, cause }) { 1409 super(message2, { cause }); 1410 Object.setPrototypeOf(this, new.target.prototype); 1411 this.code = code; 1412 this.file = file; 1413 } 1414 }; 1415 1416 // packages/media-utils/build-module/utils/validate-mime-type.mjs 1417 function validateMimeType(file, allowedTypes) { 1418 if (!allowedTypes || allowedTypes.includes("*")) { 1419 return; 1420 } 1421 const isAllowedType = allowedTypes.some((allowedType) => { 1422 if (allowedType.includes("/")) { 1423 return allowedType === file.type; 1424 } 1425 return file.type.startsWith(`$allowedType}/`); 1426 }); 1427 if (file.type && !isAllowedType) { 1428 throw new UploadError({ 1429 code: "MIME_TYPE_NOT_SUPPORTED", 1430 message: (0, import_i18n2.sprintf)( 1431 // translators: %s: file name. 1432 (0, import_i18n2.__)("%s: Sorry, this file type is not supported here."), 1433 file.name 1434 ), 1435 file 1436 }); 1437 } 1438 } 1439 1440 // packages/media-utils/build-module/utils/validate-mime-type-for-user.mjs 1441 var import_i18n3 = __toESM(require_i18n(), 1); 1442 1443 // packages/media-utils/build-module/utils/get-mime-types-array.mjs 1444 function getMimeTypesArray(wpMimeTypesObject) { 1445 if (!wpMimeTypesObject) { 1446 return null; 1447 } 1448 return Object.entries(wpMimeTypesObject).flatMap( 1449 ([extensionsString, mime]) => { 1450 const [type] = mime.split("/"); 1451 const extensions = extensionsString.split("|"); 1452 return [ 1453 mime, 1454 ...extensions.map( 1455 (extension) => `$type}/$extension}` 1456 ) 1457 ]; 1458 } 1459 ); 1460 } 1461 1462 // packages/media-utils/build-module/utils/validate-mime-type-for-user.mjs 1463 function validateMimeTypeForUser(file, wpAllowedMimeTypes) { 1464 const allowedMimeTypesForUser = getMimeTypesArray(wpAllowedMimeTypes); 1465 if (!allowedMimeTypesForUser) { 1466 return; 1467 } 1468 const isAllowedMimeTypeForUser = allowedMimeTypesForUser.includes( 1469 file.type 1470 ); 1471 if (file.type && !isAllowedMimeTypeForUser) { 1472 throw new UploadError({ 1473 code: "MIME_TYPE_NOT_ALLOWED_FOR_USER", 1474 message: (0, import_i18n3.sprintf)( 1475 // translators: %s: file name. 1476 (0, import_i18n3.__)( 1477 "%s: Sorry, you are not allowed to upload this file type." 1478 ), 1479 file.name 1480 ), 1481 file 1482 }); 1483 } 1484 } 1485 1486 // packages/media-utils/build-module/utils/validate-file-size.mjs 1487 var import_i18n4 = __toESM(require_i18n(), 1); 1488 function validateFileSize(file, maxUploadFileSize) { 1489 if (file.size <= 0) { 1490 throw new UploadError({ 1491 code: "EMPTY_FILE", 1492 message: (0, import_i18n4.sprintf)( 1493 // translators: %s: file name. 1494 (0, import_i18n4.__)("%s: This file is empty."), 1495 file.name 1496 ), 1497 file 1498 }); 1499 } 1500 if (maxUploadFileSize && file.size > maxUploadFileSize) { 1501 throw new UploadError({ 1502 code: "SIZE_ABOVE_LIMIT", 1503 message: (0, import_i18n4.sprintf)( 1504 // translators: %s: file name. 1505 (0, import_i18n4.__)( 1506 "%s: This file exceeds the maximum upload size for this site." 1507 ), 1508 file.name 1509 ), 1510 file 1511 }); 1512 } 1513 } 1514 1515 // packages/media-utils/build-module/utils/get-upload-error-message.mjs 1516 var import_i18n5 = __toESM(require_i18n(), 1); 1517 var OPAQUE_ERROR_CODES = ["invalid_json", "unknown_error"]; 1518 function getUploadErrorMessage(error2, fileName) { 1519 const serverError = (0, import_i18n5.sprintf)( 1520 /* translators: %s: file name */ 1521 (0, import_i18n5.__)('Failed to upload "%s". Please try again.'), 1522 fileName 1523 ); 1524 if (typeof error2 === "string") { 1525 return error2 || serverError; 1526 } 1527 const { code, message: message2 } = error2 ?? {}; 1528 if (typeof code === "string" && OPAQUE_ERROR_CODES.includes(code)) { 1529 return serverError; 1530 } 1531 return typeof message2 === "string" && message2 ? message2 : serverError; 1532 } 1533 1534 // packages/media-utils/build-module/utils/upload-media.mjs 1535 function uploadMedia({ 1536 wpAllowedMimeTypes, 1537 allowedTypes, 1538 additionalData = {}, 1539 filesList, 1540 maxUploadFileSize, 1541 onError, 1542 onFileChange, 1543 signal, 1544 multiple = true 1545 }) { 1546 if (!multiple && filesList.length > 1) { 1547 onError?.(new Error((0, import_i18n6.__)("Only one file can be used here."))); 1548 return; 1549 } 1550 const validFiles = []; 1551 const filesSet = []; 1552 const setAndUpdateFiles = (index2, value) => { 1553 if (!window.__clientSideMediaProcessing) { 1554 if (filesSet[index2]?.url) { 1555 (0, import_blob.revokeBlobURL)(filesSet[index2].url); 1556 } 1557 } 1558 filesSet[index2] = value; 1559 onFileChange?.( 1560 filesSet.filter((attachment) => attachment !== null) 1561 ); 1562 }; 1563 for (const mediaFile of filesList) { 1564 try { 1565 validateMimeTypeForUser(mediaFile, wpAllowedMimeTypes); 1566 } catch (error2) { 1567 onError?.(error2); 1568 continue; 1569 } 1570 try { 1571 validateMimeType(mediaFile, allowedTypes); 1572 } catch (error2) { 1573 onError?.(error2); 1574 continue; 1575 } 1576 try { 1577 validateFileSize(mediaFile, maxUploadFileSize); 1578 } catch (error2) { 1579 onError?.(error2); 1580 continue; 1581 } 1582 validFiles.push(mediaFile); 1583 if (!window.__clientSideMediaProcessing) { 1584 filesSet.push({ url: (0, import_blob.createBlobURL)(mediaFile) }); 1585 onFileChange?.(filesSet); 1586 } 1587 } 1588 validFiles.map(async (file, index2) => { 1589 try { 1590 const attachment = await uploadToServer( 1591 file, 1592 additionalData, 1593 signal 1594 ); 1595 setAndUpdateFiles(index2, attachment); 1596 } catch (error2) { 1597 setAndUpdateFiles(index2, null); 1598 onError?.( 1599 new UploadError({ 1600 code: "GENERAL", 1601 message: getUploadErrorMessage(error2, file.name), 1602 file, 1603 cause: error2 instanceof Error ? error2 : void 0 1604 }) 1605 ); 1606 } 1607 }); 1608 } 1609 1610 // packages/media-utils/build-module/utils/sideload-to-server.mjs 1611 var import_api_fetch2 = __toESM(require_api_fetch(), 1); 1612 async function sideloadToServer(file, attachmentId, additionalData = {}, signal) { 1613 const data = new FormData(); 1614 data.append("file", file, file.name || file.type.replace("/", ".")); 1615 for (const [key, value] of Object.entries(additionalData)) { 1616 flattenFormData(data, key, value); 1617 } 1618 return (0, import_api_fetch2.default)({ 1619 path: `/wp/v2/media/$attachmentId}/sideload`, 1620 body: data, 1621 method: "POST", 1622 signal 1623 }); 1624 } 1625 1626 // packages/media-utils/build-module/utils/sideload-media.mjs 1627 var noop = () => { 1628 }; 1629 async function sideloadMedia({ 1630 file, 1631 attachmentId, 1632 additionalData = {}, 1633 signal, 1634 onSuccess, 1635 onError = noop 1636 }) { 1637 try { 1638 const subSizeData = await sideloadToServer( 1639 file, 1640 attachmentId, 1641 additionalData, 1642 signal 1643 ); 1644 onSuccess?.(subSizeData); 1645 } catch (error2) { 1646 onError( 1647 new UploadError({ 1648 code: "GENERAL", 1649 message: getUploadErrorMessage(error2, file.name), 1650 file, 1651 cause: error2 instanceof Error ? error2 : void 0 1652 }) 1653 ); 1654 } 1655 } 1656 1657 // node_modules/clsx/dist/clsx.mjs 1658 function r(e2) { 1659 var t2, f2, n2 = ""; 1660 if ("string" == typeof e2 || "number" == typeof e2) n2 += e2; 1661 else if ("object" == typeof e2) if (Array.isArray(e2)) { 1662 var o2 = e2.length; 1663 for (t2 = 0; t2 < o2; t2++) e2[t2] && (f2 = r(e2[t2])) && (n2 && (n2 += " "), n2 += f2); 1664 } else for (f2 in e2) e2[f2] && (n2 && (n2 += " "), n2 += f2); 1665 return n2; 1666 } 1667 function clsx() { 1668 for (var e2, t2, f2 = 0, n2 = "", o2 = arguments.length; f2 < o2; f2++) (e2 = arguments[f2]) && (t2 = r(e2)) && (n2 && (n2 += " "), n2 += t2); 1669 return n2; 1670 } 1671 var clsx_default = clsx; 1672 1673 // packages/media-utils/build-module/components/media-upload-modal/index.mjs 1674 var import_element149 = __toESM(require_element(), 1); 1675 var import_i18n79 = __toESM(require_i18n(), 1); 1676 var import_core_data6 = __toESM(require_core_data(), 1); 1677 var import_data14 = __toESM(require_data(), 1); 1678 var import_components54 = __toESM(require_components(), 1); 1679 1680 // packages/icons/build-module/library/arrow-down.mjs 1681 var import_primitives = __toESM(require_primitives(), 1); 1682 var import_jsx_runtime = __toESM(require_jsx_runtime(), 1); 1683 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", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.Path, { d: "M12 4V19M7 14L12 19L17 14", vectorEffect: "non-scaling-stroke" }) }); 1684 1685 // packages/icons/build-module/library/arrow-left.mjs 1686 var import_primitives2 = __toESM(require_primitives(), 1); 1687 var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1); 1688 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", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.Path, { d: "M20 12L5 12M10 7L5 12L10 17", vectorEffect: "non-scaling-stroke" }) }); 1689 1690 // packages/icons/build-module/library/arrow-right.mjs 1691 var import_primitives3 = __toESM(require_primitives(), 1); 1692 var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1); 1693 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", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.Path, { d: "M4 12L19 12M14 17L19 12L14 7", vectorEffect: "non-scaling-stroke" }) }); 1694 1695 // packages/icons/build-module/library/arrow-up.mjs 1696 var import_primitives4 = __toESM(require_primitives(), 1); 1697 var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1); 1698 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", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives4.Path, { d: "M12 20L12 5M17 10L12 5L7 10", vectorEffect: "non-scaling-stroke" }) }); 1699 1700 // packages/icons/build-module/library/audio.mjs 1701 var import_primitives5 = __toESM(require_primitives(), 1); 1702 var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1); 1703 var audio_default = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives5.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives5.Path, { d: "M17.7 4.3c-1.2 0-2.8 0-3.8 1-.6.6-.9 1.5-.9 2.6V14c-.6-.6-1.5-1-2.5-1C8.6 13 7 14.6 7 16.5S8.6 20 10.5 20c1.5 0 2.8-1 3.3-2.3.5-.8.7-1.8.7-2.5V7.9c0-.7.2-1.2.5-1.6.6-.6 1.8-.6 2.8-.6h.3V4.3h-.4z" }) }); 1704 1705 // packages/icons/build-module/library/block-table.mjs 1706 var import_primitives6 = __toESM(require_primitives(), 1); 1707 var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1); 1708 var block_table_default = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives6.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives6.Path, { d: "M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM5 4.5h14c.3 0 .5.2.5.5v3.5h-15V5c0-.3.2-.5.5-.5zm8 5.5h6.5v3.5H13V10zm-1.5 3.5h-7V10h7v3.5zm-7 5.5v-4h7v4.5H5c-.3 0-.5-.2-.5-.5zm14.5.5h-6V15h6.5v4c0 .3-.2.5-.5.5z" }) }); 1709 1710 // packages/icons/build-module/library/category.mjs 1711 var import_primitives7 = __toESM(require_primitives(), 1); 1712 var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1); 1713 var category_default = /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_primitives7.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: [ 1714 /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives7.Path, { d: "M4.75 6C4.75 5.30964 5.30964 4.75 6 4.75H9C9.69036 4.75 10.25 5.30964 10.25 6V9C10.25 9.69036 9.69036 10.25 9 10.25H6C5.30964 10.25 4.75 9.69036 4.75 9V6Z", vectorEffect: "non-scaling-stroke" }), 1715 /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives7.Path, { d: "M4.75 15C4.75 14.3096 5.30964 13.75 6 13.75H9C9.69036 13.75 10.25 14.3096 10.25 15V18C10.25 18.6904 9.69036 19.25 9 19.25H6C5.30964 19.25 4.75 18.6904 4.75 18V15Z", vectorEffect: "non-scaling-stroke" }), 1716 /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives7.Path, { d: "M13.75 6C13.75 5.30964 14.3096 4.75 15 4.75H18C18.6904 4.75 19.25 5.30964 19.25 6V9C19.25 9.69036 18.6904 10.25 18 10.25H15C14.3096 10.25 13.75 9.69036 13.75 9V6Z", vectorEffect: "non-scaling-stroke" }), 1717 /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives7.Path, { d: "M13.75 15C13.75 14.3096 14.3096 13.75 15 13.75H18C18.6904 13.75 19.25 14.3096 19.25 15V18C19.25 18.6904 18.6904 19.25 18 19.25H15C14.3096 19.25 13.75 18.6904 13.75 18V15Z", vectorEffect: "non-scaling-stroke" }) 1718 ] }); 1719 1720 // packages/icons/build-module/library/check.mjs 1721 var import_primitives8 = __toESM(require_primitives(), 1); 1722 var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1); 1723 var check_default = /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives8.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives8.Path, { d: "M7 12L10 15L17 8", vectorEffect: "non-scaling-stroke" }) }); 1724 1725 // packages/icons/build-module/library/chevron-down.mjs 1726 var import_primitives9 = __toESM(require_primitives(), 1); 1727 var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1); 1728 var chevron_down_default = /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives9.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives9.Path, { d: "M7 11L12 15L17 11", vectorEffect: "non-scaling-stroke" }) }); 1729 1730 // packages/icons/build-module/library/chevron-left.mjs 1731 var import_primitives10 = __toESM(require_primitives(), 1); 1732 var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1); 1733 var chevron_left_default = /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_primitives10.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_primitives10.Path, { d: "M14 6.5L9 12L14 17.5", vectorEffect: "non-scaling-stroke" }) }); 1734 1735 // packages/icons/build-module/library/chevron-right-small.mjs 1736 var import_primitives11 = __toESM(require_primitives(), 1); 1737 var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1); 1738 var chevron_right_small_default = /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives11.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives11.Path, { d: "M10.5 8.5L13.5 12L10.5 15.5", vectorEffect: "non-scaling-stroke" }) }); 1739 1740 // packages/icons/build-module/library/chevron-right.mjs 1741 var import_primitives12 = __toESM(require_primitives(), 1); 1742 var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1); 1743 var chevron_right_default = /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.Path, { d: "M10 6.5L15 12L10 17.5", vectorEffect: "non-scaling-stroke" }) }); 1744 1745 // packages/icons/build-module/library/close-small.mjs 1746 var import_primitives13 = __toESM(require_primitives(), 1); 1747 var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1); 1748 var close_small_default = /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives13.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives13.Path, { d: "M7.75 16.25L16.25 7.75M16.25 16.25L7.75 7.75", vectorEffect: "non-scaling-stroke" }) }); 1749 1750 // packages/icons/build-module/library/cog.mjs 1751 var import_primitives14 = __toESM(require_primitives(), 1); 1752 var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1); 1753 var cog_default = /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives14.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives14.Path, { fillRule: "evenodd", clipRule: "evenodd", 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" }) }); 1754 1755 // packages/icons/build-module/library/comment-author-avatar.mjs 1756 var import_primitives15 = __toESM(require_primitives(), 1); 1757 var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1); 1758 var comment_author_avatar_default = /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_primitives15.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: [ 1759 /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives15.Path, { d: "M13.25 10C13.25 10.6904 12.6904 11.25 12 11.25C11.3096 11.25 10.75 10.6904 10.75 10C10.75 9.30964 11.3096 8.75 12 8.75C12.6904 8.75 13.25 9.30964 13.25 10Z", fill: "currentColor", stroke: "none" }), 1760 /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives15.Path, { d: "M8 18.0476V16C8 14.8954 8.89543 14 10 14H14C15.1046 14 16 14.8954 16 16V18.0476M13.25 10C13.25 10.6904 12.6904 11.25 12 11.25C11.3096 11.25 10.75 10.6904 10.75 10C10.75 9.30964 11.3096 8.75 12 8.75C12.6904 8.75 13.25 9.30964 13.25 10Z", vectorEffect: "non-scaling-stroke" }), 1761 /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives15.Path, { d: "M12 4.75C7.99594 4.75 4.75 7.99593 4.75 12C4.75 16.0041 7.99593 19.25 12 19.25C16.0041 19.25 19.25 16.0041 19.25 12C19.25 7.99594 16.0041 4.75 12 4.75Z", strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" }) 1762 ] }); 1763 1764 // packages/icons/build-module/library/envelope.mjs 1765 var import_primitives16 = __toESM(require_primitives(), 1); 1766 var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1); 1767 var envelope_default = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives16.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives16.Path, { fillRule: "evenodd", clipRule: "evenodd", 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" }) }); 1768 1769 // packages/icons/build-module/library/error.mjs 1770 var import_primitives17 = __toESM(require_primitives(), 1); 1771 var import_jsx_runtime17 = __toESM(require_jsx_runtime(), 1); 1772 var error_default = /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives17.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives17.Path, { fillRule: "evenodd", clipRule: "evenodd", 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" }) }); 1773 1774 // packages/icons/build-module/library/file.mjs 1775 var import_primitives18 = __toESM(require_primitives(), 1); 1776 var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1); 1777 var file_default = /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives18.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives18.Path, { fillRule: "evenodd", clipRule: "evenodd", d: "M12.848 8a1 1 0 0 1-.914-.594l-.723-1.63a.5.5 0 0 0-.447-.276H5a.5.5 0 0 0-.5.5v11.5a.5.5 0 0 0 .5.5h14a.5.5 0 0 0 .5-.5v-9A.5.5 0 0 0 19 8h-6.152Zm.612-1.5a.5.5 0 0 1-.462-.31l-.445-1.084A2 2 0 0 0 10.763 4H5a2 2 0 0 0-2 2v11.5a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-9a2 2 0 0 0-2-2h-5.54Z" }) }); 1778 1779 // packages/icons/build-module/library/format-list-bullets-rtl.mjs 1780 var import_primitives19 = __toESM(require_primitives(), 1); 1781 var import_jsx_runtime19 = __toESM(require_jsx_runtime(), 1); 1782 var format_list_bullets_rtl_default = /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives19.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives19.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" }) }); 1783 1784 // packages/icons/build-module/library/format-list-bullets.mjs 1785 var import_primitives20 = __toESM(require_primitives(), 1); 1786 var import_jsx_runtime20 = __toESM(require_jsx_runtime(), 1); 1787 var format_list_bullets_default = /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives20.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives20.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" }) }); 1788 1789 // packages/icons/build-module/library/funnel.mjs 1790 var import_primitives21 = __toESM(require_primitives(), 1); 1791 var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1); 1792 var funnel_default = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives21.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives21.Path, { d: "M10 17.5H14V16H10V17.5ZM6 6V7.5H18V6H6ZM8 12.5H16V11H8V12.5Z" }) }); 1793 1794 // packages/icons/build-module/library/image.mjs 1795 var import_primitives22 = __toESM(require_primitives(), 1); 1796 var import_jsx_runtime22 = __toESM(require_jsx_runtime(), 1); 1797 var image_default = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives22.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives22.Path, { d: "M3.75 16.2031L8.6 12.7L12 15L16 11L20.25 15.2517M5 20.25H19C19.6904 20.25 20.25 19.6904 20.25 19V5C20.25 4.30964 19.6904 3.75 19 3.75H5C4.30964 3.75 3.75 4.30964 3.75 5V19C3.75 19.6904 4.30964 20.25 5 20.25Z", strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" }) }); 1798 1799 // packages/icons/build-module/library/link.mjs 1800 var import_primitives23 = __toESM(require_primitives(), 1); 1801 var import_jsx_runtime23 = __toESM(require_jsx_runtime(), 1); 1802 var link_default = /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives23.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives23.Path, { d: "M9.5 12L14.5 12M10 7.75H8.25C5.90279 7.75 4 9.65279 4 12C4 14.3472 5.90279 16.25 8.25 16.25H10M14 16.25H15.75C18.0972 16.25 20 14.3472 20 12C20 9.65279 18.0972 7.75 15.75 7.75L14 7.75", vectorEffect: "non-scaling-stroke" }) }); 1803 1804 // packages/icons/build-module/library/mobile.mjs 1805 var import_primitives24 = __toESM(require_primitives(), 1); 1806 var import_jsx_runtime24 = __toESM(require_jsx_runtime(), 1); 1807 var mobile_default = /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_primitives24.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_primitives24.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" }) }); 1808 1809 // packages/icons/build-module/library/more-vertical.mjs 1810 var import_primitives25 = __toESM(require_primitives(), 1); 1811 var import_jsx_runtime25 = __toESM(require_jsx_runtime(), 1); 1812 var more_vertical_default = /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_primitives25.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_primitives25.Path, { d: "M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z" }) }); 1813 1814 // packages/icons/build-module/library/next.mjs 1815 var import_primitives26 = __toESM(require_primitives(), 1); 1816 var import_jsx_runtime26 = __toESM(require_jsx_runtime(), 1); 1817 var next_default = /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_primitives26.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_primitives26.Path, { d: "M7 17.5L12 12L7 6.5M13 17.5L18 12L13 6.5", vectorEffect: "non-scaling-stroke" }) }); 1818 1819 // packages/icons/build-module/library/previous.mjs 1820 var import_primitives27 = __toESM(require_primitives(), 1); 1821 var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1); 1822 var previous_default = /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_primitives27.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_primitives27.Path, { d: "M17 6.5L12 12L17 17.5M11 6.5L6 12L11 17.5", vectorEffect: "non-scaling-stroke" }) }); 1823 1824 // packages/icons/build-module/library/published.mjs 1825 var import_primitives28 = __toESM(require_primitives(), 1); 1826 var import_jsx_runtime28 = __toESM(require_jsx_runtime(), 1); 1827 var published_default = /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_primitives28.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: [ 1828 /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_primitives28.Path, { d: "M12 19.25C16.0041 19.25 19.25 16.0041 19.25 12C19.25 7.99594 16.0041 4.75 12 4.75C7.99594 4.75 4.75 7.99594 4.75 12C4.75 16.0041 7.99594 19.25 12 19.25Z", strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" }), 1829 /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_primitives28.Path, { d: "M9 12L11 14L15 10", vectorEffect: "non-scaling-stroke" }) 1830 ] }); 1831 1832 // packages/icons/build-module/library/scheduled.mjs 1833 var import_primitives29 = __toESM(require_primitives(), 1); 1834 var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1); 1835 var scheduled_default = /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_primitives29.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: [ 1836 /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_primitives29.Path, { d: "M12 19.25C16.0041 19.25 19.25 16.0041 19.25 12C19.25 7.99594 16.0041 4.75 12 4.75C7.99594 4.75 4.75 7.99594 4.75 12C4.75 16.0041 7.99594 19.25 12 19.25Z", strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" }), 1837 /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_primitives29.Path, { d: "M9.5 12.25H12.25V8", vectorEffect: "non-scaling-stroke" }) 1838 ] }); 1839 1840 // packages/icons/build-module/library/search.mjs 1841 var import_primitives30 = __toESM(require_primitives(), 1); 1842 var import_jsx_runtime30 = __toESM(require_jsx_runtime(), 1); 1843 var search_default = /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_primitives30.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_primitives30.Path, { d: "M5 19L9.28769 14.7123M18.25 11C18.25 13.8995 15.8995 16.25 13 16.25C10.1005 16.25 7.75 13.8995 7.75 11C7.75 8.10051 10.1005 5.75 13 5.75C15.8995 5.75 18.25 8.10051 18.25 11Z", vectorEffect: "non-scaling-stroke" }) }); 1844 1845 // packages/icons/build-module/library/seen.mjs 1846 var import_primitives31 = __toESM(require_primitives(), 1); 1847 var import_jsx_runtime31 = __toESM(require_jsx_runtime(), 1); 1848 var seen_default = /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_primitives31.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_primitives31.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" }) }); 1849 1850 // packages/icons/build-module/library/unseen.mjs 1851 var import_primitives32 = __toESM(require_primitives(), 1); 1852 var import_jsx_runtime32 = __toESM(require_jsx_runtime(), 1); 1853 var unseen_default = /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_primitives32.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_primitives32.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" }) }); 1854 1855 // packages/icons/build-module/library/upload.mjs 1856 var import_primitives33 = __toESM(require_primitives(), 1); 1857 var import_jsx_runtime33 = __toESM(require_jsx_runtime(), 1); 1858 var upload_default = /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_primitives33.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_primitives33.Path, { d: "M4.75 15V19.25H12M12 19.25V4.5M12 19.25H19.25V15M17.5 10L12 4.5L6.5 10", vectorEffect: "non-scaling-stroke" }) }); 1859 1860 // packages/icons/build-module/library/video.mjs 1861 var import_primitives34 = __toESM(require_primitives(), 1); 1862 var import_jsx_runtime34 = __toESM(require_jsx_runtime(), 1); 1863 var video_default = /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_primitives34.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_primitives34.Path, { d: "M18.7 3H5.3C4 3 3 4 3 5.3v13.4C3 20 4 21 5.3 21h13.4c1.3 0 2.3-1 2.3-2.3V5.3C21 4 20 3 18.7 3zm.8 15.7c0 .4-.4.8-.8.8H5.3c-.4 0-.8-.4-.8-.8V5.3c0-.4.4-.8.8-.8h13.4c.4 0 .8.4.8.8v13.4zM10 15l5-3-5-3v6z" }) }); 1864 1865 // packages/ui/build-module/badge/badge.mjs 1866 var import_element16 = __toESM(require_element(), 1); 1867 1868 // node_modules/@base-ui/utils/useControlled.mjs 1869 var React = __toESM(require_react(), 1); 1870 1871 // node_modules/@base-ui/utils/error.mjs 1872 var set; 1873 if (true) { 1874 set = /* @__PURE__ */ new Set(); 1875 } 1876 function error(...messages) { 1877 if (true) { 1878 const messageKey = messages.join(" "); 1879 if (!set.has(messageKey)) { 1880 set.add(messageKey); 1881 console.error(`Base UI: $messageKey}`); 1882 } 1883 } 1884 } 1885 1886 // node_modules/@base-ui/utils/useControlled.mjs 1887 function useControlled({ 1888 controlled, 1889 default: defaultProp, 1890 name, 1891 state = "value" 1892 }) { 1893 const { 1894 current: isControlled 1895 } = React.useRef(controlled !== void 0); 1896 const [valueState, setValue] = React.useState(defaultProp); 1897 const value = isControlled ? controlled : valueState; 1898 if (true) { 1899 React.useEffect(() => { 1900 if (isControlled !== (controlled !== void 0)) { 1901 error([`A component is changing the $isControlled ? "" : "un"}controlled $state} state of $name} to be $isControlled ? "un" : ""}controlled.`, "Elements should not switch from uncontrolled to controlled (or vice versa).", `Decide between using a controlled or uncontrolled $name} element for the lifetime of the component.`, "The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.", "More info: https://fb.me/react-controlled-components"].join("\n")); 1902 } 1903 }, [state, name, controlled]); 1904 const { 1905 current: defaultValue2 1906 } = React.useRef(defaultProp); 1907 React.useEffect(() => { 1908 if (!isControlled && serializeToDevModeString(defaultValue2) !== serializeToDevModeString(defaultProp)) { 1909 error([`A component is changing the default $state} state of an uncontrolled $name} after being initialized. To suppress this warning opt to use a controlled $name}.`].join("\n")); 1910 } 1911 }, [defaultProp]); 1912 } 1913 const setValueIfUncontrolled = React.useCallback((newValue) => { 1914 if (!isControlled) { 1915 setValue(newValue); 1916 } 1917 }, []); 1918 return [value, setValueIfUncontrolled]; 1919 } 1920 function serializeToDevModeString(input) { 1921 let nextId = 0; 1922 const seen = /* @__PURE__ */ new WeakMap(); 1923 try { 1924 const result = JSON.stringify(input, function replacer(key, value) { 1925 if (key === "_owner" && this != null && typeof this === "object" && "$$typeof" in this) { 1926 return void 0; 1927 } 1928 if (typeof value === "bigint") { 1929 return `__bigint__:$value}`; 1930 } 1931 if (value !== null && typeof value === "object") { 1932 const id = seen.get(value); 1933 if (id !== void 0) { 1934 return `__object__:$id}`; 1935 } 1936 seen.set(value, nextId); 1937 nextId += 1; 1938 } 1939 return value; 1940 }); 1941 return result ?? `__top__:$typeof input}`; 1942 } catch { 1943 return "__unserializable__"; 1944 } 1945 } 1946 1947 // node_modules/@base-ui/utils/safeReact.mjs 1948 var React2 = __toESM(require_react(), 1); 1949 var SafeReact = { 1950 ...React2 1951 }; 1952 1953 // node_modules/@base-ui/utils/useRefWithInit.mjs 1954 var React3 = __toESM(require_react(), 1); 1955 var UNINITIALIZED = {}; 1956 function useRefWithInit(init2, initArg) { 1957 const ref = React3.useRef(UNINITIALIZED); 1958 if (ref.current === UNINITIALIZED) { 1959 ref.current = init2(initArg); 1960 } 1961 return ref; 1962 } 1963 1964 // node_modules/@base-ui/utils/useStableCallback.mjs 1965 var useInsertionEffect = SafeReact.useInsertionEffect; 1966 var useSafeInsertionEffect = ( 1967 // React 17 doesn't have useInsertionEffect. 1968 useInsertionEffect && // Preact replaces useInsertionEffect with useLayoutEffect and fires too late. 1969 useInsertionEffect !== SafeReact.useLayoutEffect ? useInsertionEffect : (fn) => fn() 1970 ); 1971 function useStableCallback(callback) { 1972 const stable = useRefWithInit(createStableCallback).current; 1973 stable.next = callback; 1974 useSafeInsertionEffect(stable.effect); 1975 return stable.trampoline; 1976 } 1977 function createStableCallback() { 1978 const stable = { 1979 next: void 0, 1980 callback: assertNotCalled, 1981 trampoline: (...args) => stable.callback?.(...args), 1982 effect: () => { 1983 stable.callback = stable.next; 1984 } 1985 }; 1986 return stable; 1987 } 1988 function assertNotCalled() { 1989 if (true) { 1990 throw ( 1991 /* minify-error-disabled */ 1992 new Error("Base UI: Cannot call an event handler while rendering.") 1993 ); 1994 } 1995 } 1996 1997 // node_modules/@base-ui/utils/warn.mjs 1998 var set2; 1999 if (true) { 2000 set2 = /* @__PURE__ */ new Set(); 2001 } 2002 function warn(...messages) { 2003 if (true) { 2004 const messageKey = messages.join(" "); 2005 if (!set2.has(messageKey)) { 2006 set2.add(messageKey); 2007 console.warn(`Base UI: $messageKey}`); 2008 } 2009 } 2010 } 2011 2012 // node_modules/@base-ui/react/internals/composite/list/CompositeList.mjs 2013 var React6 = __toESM(require_react(), 1); 2014 2015 // node_modules/@base-ui/utils/useIsoLayoutEffect.mjs 2016 var React4 = __toESM(require_react(), 1); 2017 var noop2 = () => { 2018 }; 2019 var useIsoLayoutEffect = typeof document !== "undefined" ? React4.useLayoutEffect : noop2; 2020 2021 // node_modules/@base-ui/react/internals/composite/list/CompositeListContext.mjs 2022 var React5 = __toESM(require_react(), 1); 2023 var CompositeListContext = /* @__PURE__ */ React5.createContext({ 2024 register: () => { 2025 }, 2026 unregister: () => { 2027 }, 2028 subscribeMapChange: () => () => { 2029 }, 2030 nextIndexRef: { 2031 current: 0 2032 } 2033 }); 2034 if (true) CompositeListContext.displayName = "CompositeListContext"; 2035 function useCompositeListContext() { 2036 return React5.useContext(CompositeListContext); 2037 } 2038 2039 // node_modules/@base-ui/react/internals/composite/list/CompositeList.mjs 2040 var import_jsx_runtime35 = __toESM(require_jsx_runtime(), 1); 2041 function CompositeList(props) { 2042 const { 2043 children, 2044 elementsRef, 2045 labelsRef, 2046 onMapChange: onMapChangeProp 2047 } = props; 2048 const onMapChange = useStableCallback(onMapChangeProp); 2049 const [, setMapTick] = React6.useState(false); 2050 const listeners = useRefWithInit(createListeners).current; 2051 const map = useRefWithInit(createMap).current; 2052 const nextIndexRef = React6.useRef(0); 2053 const isDirtyRef = React6.useRef(true); 2054 const itemsRef = React6.useRef([]); 2055 const mutationObserverRef = React6.useRef(null); 2056 const scheduleMapUpdate = useStableCallback(() => { 2057 if (isDirtyRef.current) { 2058 return; 2059 } 2060 isDirtyRef.current = true; 2061 setMapTick((tick) => !tick); 2062 }); 2063 const register2 = useStableCallback((node, registration) => { 2064 map.set(node, registration); 2065 scheduleMapUpdate(); 2066 }); 2067 const unregister = useStableCallback((node) => { 2068 map.delete(node); 2069 scheduleMapUpdate(); 2070 }); 2071 const syncRefs = useStableCallback((items) => { 2072 const nextMap = /* @__PURE__ */ new Map(); 2073 elementsRef.current.length = 0; 2074 if (labelsRef) { 2075 labelsRef.current.length = 0; 2076 } 2077 items.forEach((item) => { 2078 nextMap.set(item.element, { 2079 ...item.registration.metadata ?? {}, 2080 index: item.index 2081 }); 2082 elementsRef.current[item.index] = item.element; 2083 if (labelsRef) { 2084 labelsRef.current[item.index] = item.registration.label !== void 0 ? item.registration.label : item.registration.textRef?.current?.textContent ?? item.element.textContent; 2085 } 2086 }); 2087 nextIndexRef.current = elementsRef.current.length; 2088 return nextMap; 2089 }); 2090 function observe(sortedNodes) { 2091 mutationObserverRef.current?.disconnect(); 2092 mutationObserverRef.current = null; 2093 if (typeof MutationObserver !== "function" || sortedNodes.length < 2) { 2094 return; 2095 } 2096 const mutationObserver = new MutationObserver((entries) => { 2097 if (!hasMovedNode(entries)) { 2098 return; 2099 } 2100 let previousConnectedNode = null; 2101 for (const node of sortedNodes) { 2102 if (!node.isConnected) { 2103 continue; 2104 } 2105 if (previousConnectedNode && sortByDocumentPosition(previousConnectedNode, node) > 0) { 2106 mutationObserver.disconnect(); 2107 scheduleMapUpdate(); 2108 return; 2109 } 2110 previousConnectedNode = node; 2111 } 2112 }); 2113 mutationObserverRef.current = mutationObserver; 2114 const roots = /* @__PURE__ */ new Set(); 2115 for (let i2 = 1; i2 < sortedNodes.length; i2 += 1) { 2116 const root = getCommonAncestor(sortedNodes[i2 - 1], sortedNodes[i2]); 2117 if (root) { 2118 roots.add(root); 2119 } 2120 } 2121 roots.forEach((root) => mutationObserver.observe(root, { 2122 childList: true 2123 })); 2124 } 2125 const flush = useStableCallback(() => { 2126 const [items, automaticNodes] = getCompositeListSnapshot(map); 2127 const nextMap = syncRefs(items); 2128 observe(automaticNodes); 2129 itemsRef.current = items; 2130 isDirtyRef.current = false; 2131 listeners.forEach((listener) => listener(nextMap)); 2132 onMapChange(nextMap); 2133 }); 2134 useIsoLayoutEffect(() => { 2135 if (!isDirtyRef.current) { 2136 syncRefs(itemsRef.current); 2137 } 2138 return () => { 2139 elementsRef.current = []; 2140 if (labelsRef) { 2141 labelsRef.current = []; 2142 } 2143 }; 2144 }, [elementsRef, labelsRef, syncRefs]); 2145 useIsoLayoutEffect(() => { 2146 if (isDirtyRef.current) { 2147 flush(); 2148 } 2149 }); 2150 useIsoLayoutEffect(() => { 2151 return () => { 2152 mutationObserverRef.current?.disconnect(); 2153 isDirtyRef.current = true; 2154 }; 2155 }, []); 2156 const subscribeMapChange = useStableCallback((fn) => { 2157 listeners.add(fn); 2158 return () => { 2159 listeners.delete(fn); 2160 }; 2161 }); 2162 const contextValue = React6.useMemo(() => ({ 2163 register: register2, 2164 unregister, 2165 subscribeMapChange, 2166 nextIndexRef 2167 }), [register2, unregister, subscribeMapChange, nextIndexRef]); 2168 return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(CompositeListContext.Provider, { 2169 value: contextValue, 2170 children 2171 }); 2172 } 2173 function createMap() { 2174 return /* @__PURE__ */ new Map(); 2175 } 2176 function createListeners() { 2177 return /* @__PURE__ */ new Set(); 2178 } 2179 function getCompositeListSnapshot(map) { 2180 const reservedIndices = /* @__PURE__ */ new Set(); 2181 const items = []; 2182 const automaticItems = []; 2183 map.forEach((registration, node) => { 2184 if (!node.isConnected) { 2185 return; 2186 } 2187 const index2 = registration.index; 2188 const item = { 2189 index: index2 ?? -1, 2190 element: node, 2191 registration 2192 }; 2193 if (index2 === null) { 2194 automaticItems.push(item); 2195 } else if (index2 >= 0) { 2196 reservedIndices.add(index2); 2197 items.push(item); 2198 } 2199 }); 2200 let nextAutomaticIndex = 0; 2201 automaticItems.sort((a2, b2) => sortByDocumentPosition(a2.element, b2.element)); 2202 automaticItems.forEach((item) => { 2203 while (reservedIndices.has(nextAutomaticIndex)) { 2204 nextAutomaticIndex += 1; 2205 } 2206 item.index = nextAutomaticIndex; 2207 items.push(item); 2208 nextAutomaticIndex += 1; 2209 }); 2210 if (reservedIndices.size > 0) { 2211 items.sort((a2, b2) => a2.index - b2.index); 2212 } 2213 return [items, automaticItems.map((item) => item.element)]; 2214 } 2215 function getCommonAncestor(firstNode, lastNode) { 2216 let ancestor = firstNode.parentElement; 2217 while (ancestor && !ancestor.contains(lastNode)) { 2218 ancestor = ancestor.parentElement; 2219 } 2220 return ancestor; 2221 } 2222 function hasMovedNode(entries) { 2223 for (const entry of entries) { 2224 for (let i2 = 0; i2 < entry.removedNodes.length; i2 += 1) { 2225 if (entry.removedNodes[i2].isConnected) { 2226 return true; 2227 } 2228 } 2229 } 2230 return false; 2231 } 2232 function sortByDocumentPosition(a2, b2) { 2233 return a2.compareDocumentPosition(b2) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1; 2234 } 2235 2236 // node_modules/@base-ui/react/internals/useRenderElement.mjs 2237 var React9 = __toESM(require_react(), 1); 2238 2239 // node_modules/@base-ui/utils/useMergedRefs.mjs 2240 function useMergedRefs(a2, b2, c2, d2) { 2241 const forkRef = useRefWithInit(createForkRef).current; 2242 if (didChange(forkRef, a2, b2, c2, d2)) { 2243 update(forkRef, [a2, b2, c2, d2]); 2244 } 2245 return forkRef.callback; 2246 } 2247 function useMergedRefsN(refs) { 2248 const forkRef = useRefWithInit(createForkRef).current; 2249 if (didChangeN(forkRef, refs)) { 2250 update(forkRef, refs); 2251 } 2252 return forkRef.callback; 2253 } 2254 function createForkRef() { 2255 return { 2256 callback: null, 2257 cleanup: null, 2258 refs: [] 2259 }; 2260 } 2261 function didChange(forkRef, a2, b2, c2, d2) { 2262 return forkRef.refs[0] !== a2 || forkRef.refs[1] !== b2 || forkRef.refs[2] !== c2 || forkRef.refs[3] !== d2; 2263 } 2264 function didChangeN(forkRef, newRefs) { 2265 return forkRef.refs.length !== newRefs.length || forkRef.refs.some((ref, index2) => ref !== newRefs[index2]); 2266 } 2267 function update(forkRef, refs) { 2268 forkRef.refs = refs; 2269 if (refs.every((ref) => ref == null)) { 2270 forkRef.callback = null; 2271 return; 2272 } 2273 forkRef.callback = (instance) => { 2274 if (forkRef.cleanup) { 2275 forkRef.cleanup(); 2276 forkRef.cleanup = null; 2277 } 2278 if (instance != null) { 2279 const cleanupCallbacks = Array(refs.length).fill(null); 2280 for (let i2 = 0; i2 < refs.length; i2 += 1) { 2281 const ref = refs[i2]; 2282 if (ref == null) { 2283 continue; 2284 } 2285 switch (typeof ref) { 2286 case "function": { 2287 const refCleanup = ref(instance); 2288 if (typeof refCleanup === "function") { 2289 cleanupCallbacks[i2] = refCleanup; 2290 } 2291 break; 2292 } 2293 case "object": { 2294 ref.current = instance; 2295 break; 2296 } 2297 default: 2298 } 2299 } 2300 forkRef.cleanup = () => { 2301 for (let i2 = 0; i2 < refs.length; i2 += 1) { 2302 const ref = refs[i2]; 2303 if (ref == null) { 2304 continue; 2305 } 2306 switch (typeof ref) { 2307 case "function": { 2308 const cleanupCallback = cleanupCallbacks[i2]; 2309 if (typeof cleanupCallback === "function") { 2310 cleanupCallback(); 2311 } else { 2312 void ref(null); 2313 } 2314 break; 2315 } 2316 case "object": { 2317 ref.current = null; 2318 break; 2319 } 2320 default: 2321 } 2322 } 2323 }; 2324 } 2325 }; 2326 } 2327 2328 // node_modules/@base-ui/utils/getReactElementRef.mjs 2329 var React8 = __toESM(require_react(), 1); 2330 2331 // node_modules/@base-ui/utils/reactVersion.mjs 2332 var React7 = __toESM(require_react(), 1); 2333 var majorVersion = parseInt(React7.version, 10); 2334 function isReactVersionAtLeast(reactVersionToCheck) { 2335 return majorVersion >= reactVersionToCheck; 2336 } 2337 2338 // node_modules/@base-ui/utils/getReactElementRef.mjs 2339 function getReactElementRef(element) { 2340 if (!/* @__PURE__ */ React8.isValidElement(element)) { 2341 return null; 2342 } 2343 const reactElement = element; 2344 const propsWithRef = reactElement.props; 2345 return (isReactVersionAtLeast(19) ? propsWithRef?.ref : reactElement.ref) ?? null; 2346 } 2347 2348 // node_modules/@base-ui/utils/mergeObjects.mjs 2349 function mergeObjects(a2, b2) { 2350 if (a2 && !b2) { 2351 return a2; 2352 } 2353 if (!a2 && b2) { 2354 return b2; 2355 } 2356 if (a2 || b2) { 2357 return { 2358 ...a2, 2359 ...b2 2360 }; 2361 } 2362 return void 0; 2363 } 2364 2365 // node_modules/@base-ui/utils/empty.mjs 2366 function NOOP() { 2367 } 2368 var EMPTY_ARRAY = Object.freeze([]); 2369 var EMPTY_OBJECT = Object.freeze({}); 2370 2371 // node_modules/@base-ui/react/internals/getStateAttributesProps.mjs 2372 function getStateAttributesProps(state, customMapping) { 2373 const props = {}; 2374 for (const key in state) { 2375 const value = state[key]; 2376 if (customMapping?.hasOwnProperty(key)) { 2377 const customProps = customMapping[key](value); 2378 if (customProps != null) { 2379 Object.assign(props, customProps); 2380 } 2381 continue; 2382 } 2383 if (value === true) { 2384 props[`data-$key.toLowerCase()}`] = ""; 2385 } else if (value) { 2386 props[`data-$key.toLowerCase()}`] = value.toString(); 2387 } 2388 } 2389 return props; 2390 } 2391 2392 // node_modules/@base-ui/react/utils/resolveClassName.mjs 2393 function resolveClassName(className, state) { 2394 return typeof className === "function" ? className(state) : className; 2395 } 2396 2397 // node_modules/@base-ui/react/utils/resolveStyle.mjs 2398 function resolveStyle(style, state) { 2399 return typeof style === "function" ? style(state) : style; 2400 } 2401 2402 // node_modules/@base-ui/react/merge-props/mergeProps.mjs 2403 var EMPTY_PROPS = {}; 2404 function mergeProps(a2, b2, c2, d2, e2) { 2405 if (!c2 && !d2 && !e2 && !a2) { 2406 return createInitialMergedProps(b2); 2407 } 2408 let merged = createInitialMergedProps(a2); 2409 if (b2) { 2410 merged = mergeInto(merged, b2); 2411 } 2412 if (c2) { 2413 merged = mergeInto(merged, c2); 2414 } 2415 if (d2) { 2416 merged = mergeInto(merged, d2); 2417 } 2418 if (e2) { 2419 merged = mergeInto(merged, e2); 2420 } 2421 return merged; 2422 } 2423 function mergePropsN(props) { 2424 if (props.length === 0) { 2425 return EMPTY_PROPS; 2426 } 2427 if (props.length === 1) { 2428 return createInitialMergedProps(props[0]); 2429 } 2430 let merged = createInitialMergedProps(props[0]); 2431 for (let i2 = 1; i2 < props.length; i2 += 1) { 2432 merged = mergeInto(merged, props[i2]); 2433 } 2434 return merged; 2435 } 2436 function createInitialMergedProps(inputProps) { 2437 if (isPropsGetter(inputProps)) { 2438 return { 2439 ...resolvePropsGetter(inputProps, EMPTY_PROPS) 2440 }; 2441 } 2442 return copyInitialProps(inputProps); 2443 } 2444 function mergeInto(merged, inputProps) { 2445 if (isPropsGetter(inputProps)) { 2446 return resolvePropsGetter(inputProps, merged); 2447 } 2448 return mutablyMergeInto(merged, inputProps); 2449 } 2450 function copyInitialProps(inputProps) { 2451 const copiedProps = { 2452 ...inputProps 2453 }; 2454 for (const propName in copiedProps) { 2455 const propValue = copiedProps[propName]; 2456 if (isEventHandler(propName, propValue)) { 2457 copiedProps[propName] = wrapEventHandler(propValue); 2458 } 2459 } 2460 return copiedProps; 2461 } 2462 function mutablyMergeInto(mergedProps, externalProps) { 2463 if (!externalProps) { 2464 return mergedProps; 2465 } 2466 for (const propName in externalProps) { 2467 const externalPropValue = externalProps[propName]; 2468 switch (propName) { 2469 case "style": { 2470 mergedProps[propName] = mergeObjects(mergedProps.style, externalPropValue); 2471 break; 2472 } 2473 case "className": { 2474 mergedProps[propName] = mergeClassNames(mergedProps.className, externalPropValue); 2475 break; 2476 } 2477 default: { 2478 if (isEventHandler(propName, externalPropValue)) { 2479 mergedProps[propName] = mergeEventHandlers(mergedProps[propName], externalPropValue); 2480 } else { 2481 mergedProps[propName] = externalPropValue; 2482 } 2483 } 2484 } 2485 } 2486 return mergedProps; 2487 } 2488 function isEventHandler(key, value) { 2489 const code0 = key.charCodeAt(0); 2490 const code1 = key.charCodeAt(1); 2491 const code2 = key.charCodeAt(2); 2492 return code0 === 111 && code1 === 110 && code2 >= 65 && code2 <= 90 && (typeof value === "function" || typeof value === "undefined"); 2493 } 2494 function isPropsGetter(inputProps) { 2495 return typeof inputProps === "function"; 2496 } 2497 function resolvePropsGetter(inputProps, previousProps) { 2498 if (isPropsGetter(inputProps)) { 2499 return inputProps(previousProps); 2500 } 2501 return inputProps ?? EMPTY_PROPS; 2502 } 2503 function mergeEventHandlers(ourHandler, theirHandler) { 2504 if (!theirHandler) { 2505 return ourHandler; 2506 } 2507 if (!ourHandler) { 2508 return wrapEventHandler(theirHandler); 2509 } 2510 return (...args) => { 2511 const event = args[0]; 2512 if (isSyntheticEvent(event)) { 2513 const baseUIEvent = event; 2514 makeEventPreventable(baseUIEvent); 2515 const result2 = theirHandler(...args); 2516 if (!baseUIEvent.baseUIHandlerPrevented) { 2517 ourHandler?.(...args); 2518 } 2519 return result2; 2520 } 2521 const result = theirHandler(...args); 2522 ourHandler?.(...args); 2523 return result; 2524 }; 2525 } 2526 function wrapEventHandler(handler) { 2527 if (!handler) { 2528 return handler; 2529 } 2530 return (...args) => { 2531 const event = args[0]; 2532 if (isSyntheticEvent(event)) { 2533 makeEventPreventable(event); 2534 } 2535 return handler(...args); 2536 }; 2537 } 2538 function makeEventPreventable(event) { 2539 event.preventBaseUIHandler = () => { 2540 event.baseUIHandlerPrevented = true; 2541 }; 2542 return event; 2543 } 2544 function mergeClassNames(ourClassName, theirClassName) { 2545 if (theirClassName) { 2546 if (ourClassName) { 2547 return theirClassName + " " + ourClassName; 2548 } 2549 return theirClassName; 2550 } 2551 return ourClassName; 2552 } 2553 function isSyntheticEvent(event) { 2554 return event != null && typeof event === "object" && "nativeEvent" in event; 2555 } 2556 2557 // node_modules/@base-ui/react/internals/useRenderElement.mjs 2558 var import_react = __toESM(require_react(), 1); 2559 function useRenderElement(element, componentProps, params = {}) { 2560 const renderProp = componentProps.render; 2561 const outProps = useRenderElementProps(componentProps, params); 2562 if (params.enabled === false) { 2563 return null; 2564 } 2565 const state = params.state ?? EMPTY_OBJECT; 2566 return evaluateRenderProp(element, renderProp, outProps, state); 2567 } 2568 function useRenderElementProps(componentProps, params = {}) { 2569 const { 2570 className: classNameProp, 2571 style: styleProp, 2572 render: renderProp 2573 } = componentProps; 2574 const { 2575 state = EMPTY_OBJECT, 2576 ref, 2577 props, 2578 stateAttributesMapping: stateAttributesMapping2, 2579 enabled = true 2580 } = params; 2581 const className = enabled ? resolveClassName(classNameProp, state) : void 0; 2582 const style = enabled ? resolveStyle(styleProp, state) : void 0; 2583 const stateProps = enabled ? getStateAttributesProps(state, stateAttributesMapping2) : EMPTY_OBJECT; 2584 const resolvedProps = enabled && props ? resolveRenderFunctionProps(props) : void 0; 2585 const outProps = enabled ? mergeObjects(stateProps, resolvedProps) ?? {} : EMPTY_OBJECT; 2586 if (typeof document !== "undefined") { 2587 if (!enabled) { 2588 void useMergedRefs(null, null); 2589 } else if (Array.isArray(ref)) { 2590 outProps.ref = useMergedRefsN([outProps.ref, getReactElementRef(renderProp), ...ref]); 2591 } else { 2592 outProps.ref = useMergedRefs(outProps.ref, getReactElementRef(renderProp), ref); 2593 } 2594 } 2595 if (!enabled) { 2596 return EMPTY_OBJECT; 2597 } 2598 if (className !== void 0) { 2599 outProps.className = mergeClassNames(outProps.className, className); 2600 } 2601 if (style !== void 0) { 2602 outProps.style = mergeObjects(outProps.style, style); 2603 } 2604 return outProps; 2605 } 2606 function resolveRenderFunctionProps(props) { 2607 if (Array.isArray(props)) { 2608 return mergePropsN(props); 2609 } 2610 return mergeProps(void 0, props); 2611 } 2612 var REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for("react.lazy"); 2613 var COMPONENT_IDENTIFIER_PATTERN = /^[A-Z][A-Za-z0-9$]*$/; 2614 var LOWERCASE_CHARACTER_PATTERN = /[a-z]/; 2615 function evaluateRenderProp(element, render4, props, state) { 2616 if (render4) { 2617 if (typeof render4 === "function") { 2618 if (true) { 2619 warnIfRenderPropLooksLikeComponent(render4); 2620 } 2621 return render4(props, state); 2622 } 2623 const mergedProps = mergeProps(props, render4.props); 2624 mergedProps.ref = props.ref; 2625 let newElement = render4; 2626 if (newElement?.$$typeof === REACT_LAZY_TYPE) { 2627 const children = React9.Children.toArray(render4); 2628 newElement = children[0]; 2629 } 2630 if (true) { 2631 if (!/* @__PURE__ */ React9.isValidElement(newElement)) { 2632 throw new Error(["Base UI: The `render` prop was provided an invalid React element as `React.isValidElement(render)` is `false`.", "A valid React element must be provided to the `render` prop because it is cloned with props to replace the default element.", "https://base-ui.com/r/invalid-render-prop"].join("\n")); 2633 } 2634 } 2635 return /* @__PURE__ */ React9.cloneElement(newElement, mergedProps); 2636 } 2637 if (element) { 2638 if (typeof element === "string") { 2639 return renderTag(element, props); 2640 } 2641 } 2642 throw new Error(true ? "Base UI: Render element or function are not defined." : formatErrorMessage_default(8)); 2643 } 2644 function warnIfRenderPropLooksLikeComponent(renderFn) { 2645 const functionName = renderFn.name; 2646 if (functionName.length === 0) { 2647 return; 2648 } 2649 if (!COMPONENT_IDENTIFIER_PATTERN.test(functionName)) { 2650 return; 2651 } 2652 if (!LOWERCASE_CHARACTER_PATTERN.test(functionName)) { 2653 return; 2654 } 2655 warn(`The \`render\` prop received a function named \`$functionName}\` that starts with an uppercase letter.`, "This usually means a React component was passed directly as `render={Component}`.", "Base UI calls `render` as a plain function, which can break the Rules of Hooks during reconciliation.", "If this is an intentional render callback, rename it to start with a lowercase letter.", "Use `render={<Component />}` or `render={(props) => <Component {...props} />}` instead.", "https://base-ui.com/r/invalid-render-prop"); 2656 } 2657 function renderTag(Tag, props) { 2658 if (Tag === "button") { 2659 return /* @__PURE__ */ (0, import_react.createElement)("button", { 2660 type: "button", 2661 ...props, 2662 key: props.key 2663 }); 2664 } 2665 if (Tag === "img") { 2666 return /* @__PURE__ */ (0, import_react.createElement)("img", { 2667 alt: "", 2668 ...props, 2669 key: props.key 2670 }); 2671 } 2672 return /* @__PURE__ */ React9.createElement(Tag, props); 2673 } 2674 2675 // node_modules/@base-ui/utils/useId.mjs 2676 var React10 = __toESM(require_react(), 1); 2677 var globalId = 0; 2678 function useGlobalId(idOverride, prefix = "mui") { 2679 const [defaultId, setDefaultId] = React10.useState(idOverride); 2680 const id = idOverride || defaultId; 2681 React10.useEffect(() => { 2682 if (defaultId == null) { 2683 globalId += 1; 2684 setDefaultId(`$prefix}-$globalId}`); 2685 } 2686 }, [defaultId, prefix]); 2687 return id; 2688 } 2689 var maybeReactUseId = SafeReact.useId; 2690 function useId(idOverride, prefix) { 2691 if (maybeReactUseId !== void 0) { 2692 const reactId = maybeReactUseId(); 2693 return idOverride ?? (prefix ? `$prefix}-$reactId}` : reactId); 2694 } 2695 return useGlobalId(idOverride, prefix); 2696 } 2697 2698 // node_modules/@base-ui/react/internals/useBaseUiId.mjs 2699 function useBaseUiId(idOverride) { 2700 return useId(idOverride, "base-ui"); 2701 } 2702 2703 // node_modules/@base-ui/react/internals/reason-parts.mjs 2704 var reason_parts_exports = {}; 2705 __export(reason_parts_exports, { 2706 cancelOpen: () => cancelOpen, 2707 chipRemovePress: () => chipRemovePress, 2708 clearPress: () => clearPress, 2709 closePress: () => closePress, 2710 closeWatcher: () => closeWatcher, 2711 decrementPress: () => decrementPress, 2712 disabled: () => disabled, 2713 drag: () => drag, 2714 escapeKey: () => escapeKey, 2715 focusOut: () => focusOut, 2716 imperativeAction: () => imperativeAction, 2717 incrementPress: () => incrementPress, 2718 initial: () => initial, 2719 inputBlur: () => inputBlur, 2720 inputChange: () => inputChange, 2721 inputClear: () => inputClear, 2722 inputPaste: () => inputPaste, 2723 inputPress: () => inputPress, 2724 itemPress: () => itemPress, 2725 keyboard: () => keyboard, 2726 linkPress: () => linkPress, 2727 listNavigation: () => listNavigation, 2728 missing: () => missing, 2729 none: () => none, 2730 outsidePress: () => outsidePress, 2731 pointer: () => pointer, 2732 scrub: () => scrub, 2733 siblingOpen: () => siblingOpen, 2734 swipe: () => swipe, 2735 trackPress: () => trackPress, 2736 triggerFocus: () => triggerFocus, 2737 triggerHover: () => triggerHover, 2738 triggerPress: () => triggerPress, 2739 wheel: () => wheel, 2740 windowResize: () => windowResize 2741 }); 2742 var none = "none"; 2743 var triggerPress = "trigger-press"; 2744 var triggerHover = "trigger-hover"; 2745 var triggerFocus = "trigger-focus"; 2746 var outsidePress = "outside-press"; 2747 var itemPress = "item-press"; 2748 var closePress = "close-press"; 2749 var linkPress = "link-press"; 2750 var clearPress = "clear-press"; 2751 var chipRemovePress = "chip-remove-press"; 2752 var trackPress = "track-press"; 2753 var incrementPress = "increment-press"; 2754 var decrementPress = "decrement-press"; 2755 var inputChange = "input-change"; 2756 var inputClear = "input-clear"; 2757 var inputBlur = "input-blur"; 2758 var inputPaste = "input-paste"; 2759 var inputPress = "input-press"; 2760 var focusOut = "focus-out"; 2761 var escapeKey = "escape-key"; 2762 var closeWatcher = "close-watcher"; 2763 var listNavigation = "list-navigation"; 2764 var keyboard = "keyboard"; 2765 var pointer = "pointer"; 2766 var drag = "drag"; 2767 var wheel = "wheel"; 2768 var scrub = "scrub"; 2769 var cancelOpen = "cancel-open"; 2770 var siblingOpen = "sibling-open"; 2771 var disabled = "disabled"; 2772 var missing = "missing"; 2773 var initial = "initial"; 2774 var imperativeAction = "imperative-action"; 2775 var swipe = "swipe"; 2776 var windowResize = "window-resize"; 2777 2778 // node_modules/@base-ui/react/internals/createBaseUIEventDetails.mjs 2779 function createChangeEventDetails(reason, event, trigger, customProperties) { 2780 let canceled = false; 2781 let allowPropagation = false; 2782 const custom = customProperties ?? EMPTY_OBJECT; 2783 const details = { 2784 reason, 2785 event: event ?? new Event("base-ui"), 2786 cancel() { 2787 canceled = true; 2788 }, 2789 allowPropagation() { 2790 allowPropagation = true; 2791 }, 2792 get isCanceled() { 2793 return canceled; 2794 }, 2795 get isPropagationAllowed() { 2796 return allowPropagation; 2797 }, 2798 trigger, 2799 ...custom 2800 }; 2801 return details; 2802 } 2803 2804 // node_modules/@base-ui/react/internals/useTransitionStatus.mjs 2805 var React12 = __toESM(require_react(), 1); 2806 2807 // node_modules/@base-ui/utils/useOnMount.mjs 2808 var React11 = __toESM(require_react(), 1); 2809 function useOnMount(fn) { 2810 React11.useEffect(fn, EMPTY_ARRAY); 2811 } 2812 2813 // node_modules/@base-ui/utils/useAnimationFrame.mjs 2814 var EMPTY = null; 2815 var LAST_RAF = globalThis.requestAnimationFrame; 2816 var Scheduler = class { 2817 /* This implementation uses an array as a backing data-structure for frame callbacks. 2818 * It allows `O(1)` callback cancelling by inserting a `null` in the array, though it 2819 * never calls the native `cancelAnimationFrame` if there are no frames left. This can 2820 * be much more efficient if there is a call pattern that alterns as 2821 * "request-cancel-request-cancel-…". 2822 * But in the case of "request-request-…-cancel-cancel-…", it leaves the final animation 2823 * frame to run anyway. We turn that frame into a `O(1)` no-op via `callbacksCount`. */ 2824 callbacks = []; 2825 callbacksCount = 0; 2826 nextId = 1; 2827 startId = 1; 2828 isScheduled = false; 2829 tick = (timestamp) => { 2830 this.isScheduled = false; 2831 const currentCallbacks = this.callbacks; 2832 const currentCallbacksCount = this.callbacksCount; 2833 this.callbacks = []; 2834 this.callbacksCount = 0; 2835 this.startId = this.nextId; 2836 if (currentCallbacksCount > 0) { 2837 for (let i2 = 0; i2 < currentCallbacks.length; i2 += 1) { 2838 currentCallbacks[i2]?.(timestamp); 2839 } 2840 } 2841 }; 2842 request(fn) { 2843 const id = this.nextId; 2844 this.nextId += 1; 2845 this.callbacks.push(fn); 2846 this.callbacksCount += 1; 2847 const didRAFChange = LAST_RAF !== requestAnimationFrame && (LAST_RAF = requestAnimationFrame, true); 2848 if (!this.isScheduled || didRAFChange) { 2849 requestAnimationFrame(this.tick); 2850 this.isScheduled = true; 2851 } 2852 return id; 2853 } 2854 cancel(id) { 2855 const index2 = id - this.startId; 2856 if (index2 < 0 || index2 >= this.callbacks.length) { 2857 return; 2858 } 2859 this.callbacks[index2] = null; 2860 this.callbacksCount -= 1; 2861 } 2862 }; 2863 var scheduler = new Scheduler(); 2864 var AnimationFrame = class _AnimationFrame { 2865 static create() { 2866 return new _AnimationFrame(); 2867 } 2868 static request(fn) { 2869 return scheduler.request(fn); 2870 } 2871 static cancel(id) { 2872 return scheduler.cancel(id); 2873 } 2874 currentId = EMPTY; 2875 /** 2876 * Executes `fn` after `delay`, clearing any previously scheduled call. 2877 */ 2878 request(fn) { 2879 this.cancel(); 2880 this.currentId = scheduler.request(() => { 2881 this.currentId = EMPTY; 2882 fn(); 2883 }); 2884 } 2885 cancel = () => { 2886 if (this.currentId !== EMPTY) { 2887 scheduler.cancel(this.currentId); 2888 this.currentId = EMPTY; 2889 } 2890 }; 2891 disposeEffect = () => { 2892 return this.cancel; 2893 }; 2894 }; 2895 function useAnimationFrame() { 2896 const timeout = useRefWithInit(AnimationFrame.create).current; 2897 useOnMount(timeout.disposeEffect); 2898 return timeout; 2899 } 2900 2901 // node_modules/@base-ui/react/internals/useTransitionStatus.mjs 2902 function useTransitionStatus(open, enableIdleState = false, deferEndingState = false) { 2903 const [transitionStatus, setTransitionStatus] = React12.useState(open && enableIdleState ? "idle" : void 0); 2904 const [mounted, setMounted] = React12.useState(open); 2905 if (open && !mounted) { 2906 setMounted(true); 2907 setTransitionStatus("starting"); 2908 } 2909 if (!open && mounted && transitionStatus !== "ending" && !deferEndingState) { 2910 setTransitionStatus("ending"); 2911 } 2912 if (!open && !mounted && transitionStatus === "ending") { 2913 setTransitionStatus(void 0); 2914 } 2915 useIsoLayoutEffect(() => { 2916 if (!open && mounted && transitionStatus !== "ending" && deferEndingState) { 2917 const frame = AnimationFrame.request(() => { 2918 setTransitionStatus("ending"); 2919 }); 2920 return () => { 2921 AnimationFrame.cancel(frame); 2922 }; 2923 } 2924 return void 0; 2925 }, [open, mounted, transitionStatus, deferEndingState]); 2926 useIsoLayoutEffect(() => { 2927 if (!open || enableIdleState) { 2928 return void 0; 2929 } 2930 const frame = AnimationFrame.request(() => { 2931 setTransitionStatus(void 0); 2932 }); 2933 return () => { 2934 AnimationFrame.cancel(frame); 2935 }; 2936 }, [enableIdleState, open]); 2937 useIsoLayoutEffect(() => { 2938 if (!open || !enableIdleState) { 2939 return void 0; 2940 } 2941 if (open && mounted && transitionStatus !== "idle") { 2942 setTransitionStatus("starting"); 2943 } 2944 const frame = AnimationFrame.request(() => { 2945 setTransitionStatus("idle"); 2946 }); 2947 return () => { 2948 AnimationFrame.cancel(frame); 2949 }; 2950 }, [enableIdleState, open, mounted, transitionStatus]); 2951 return { 2952 mounted, 2953 setMounted, 2954 transitionStatus 2955 }; 2956 } 2957 2958 // node_modules/@base-ui/react/internals/composite/list/useCompositeListItem.mjs 2959 var React13 = __toESM(require_react(), 1); 2960 function useCompositeListItem(params = {}) { 2961 const { 2962 guess, 2963 label, 2964 metadata, 2965 textRef, 2966 index: externalIndex 2967 } = params; 2968 const { 2969 register: register2, 2970 unregister, 2971 subscribeMapChange, 2972 nextIndexRef 2973 } = useCompositeListContext(); 2974 const indexRef = React13.useRef(-1); 2975 const [internalIndex, setInternalIndex] = React13.useState(externalIndex == null && guess ? () => { 2976 if (indexRef.current === -1) { 2977 const newIndex = nextIndexRef.current; 2978 nextIndexRef.current += 1; 2979 indexRef.current = newIndex; 2980 } 2981 return indexRef.current; 2982 } : -1); 2983 const index2 = externalIndex ?? internalIndex; 2984 const componentRef = React13.useRef(null); 2985 const ref = React13.useCallback((node) => { 2986 const previousNode = componentRef.current; 2987 if (previousNode) { 2988 unregister(previousNode); 2989 } 2990 componentRef.current = node; 2991 if (node) { 2992 register2(node, { 2993 metadata: metadata ?? null, 2994 index: externalIndex ?? null, 2995 label, 2996 textRef 2997 }); 2998 } 2999 }, [externalIndex, register2, unregister, metadata, label, textRef]); 3000 useIsoLayoutEffect(() => { 3001 if (externalIndex != null) { 3002 return void 0; 3003 } 3004 return subscribeMapChange((map) => { 3005 const i2 = componentRef.current ? map.get(componentRef.current)?.index : null; 3006 if (i2 != null) { 3007 setInternalIndex(i2); 3008 } 3009 }); 3010 }, [externalIndex, subscribeMapChange]); 3011 return { 3012 ref, 3013 index: index2 3014 }; 3015 } 3016 3017 // node_modules/@base-ui/react/internals/stateAttributesMapping.mjs 3018 var TransitionStatusDataAttributes = /* @__PURE__ */ (function(TransitionStatusDataAttributes2) { 3019 TransitionStatusDataAttributes2["startingStyle"] = "data-starting-style"; 3020 TransitionStatusDataAttributes2["endingStyle"] = "data-ending-style"; 3021 return TransitionStatusDataAttributes2; 3022 })({}); 3023 var STARTING_HOOK = { 3024 "data-starting-style": "" 3025 }; 3026 var ENDING_HOOK = { 3027 "data-ending-style": "" 3028 }; 3029 var transitionStatusMapping = { 3030 transitionStatus(value) { 3031 if (value === "starting") { 3032 return STARTING_HOOK; 3033 } 3034 if (value === "ending") { 3035 return ENDING_HOOK; 3036 } 3037 return null; 3038 } 3039 }; 3040 3041 // node_modules/@base-ui/react/internals/use-button/useButton.mjs 3042 var React16 = __toESM(require_react(), 1); 3043 3044 // node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs 3045 function hasWindow() { 3046 return typeof window !== "undefined"; 3047 } 3048 function getNodeName(node) { 3049 if (isNode(node)) { 3050 return (node.nodeName || "").toLowerCase(); 3051 } 3052 return "#document"; 3053 } 3054 function getWindow(node) { 3055 var _node$ownerDocument; 3056 return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window; 3057 } 3058 function getDocumentElement(node) { 3059 var _ref; 3060 return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement; 3061 } 3062 function isNode(value) { 3063 if (!hasWindow()) { 3064 return false; 3065 } 3066 return value instanceof Node || value instanceof getWindow(value).Node; 3067 } 3068 function isElement(value) { 3069 if (!hasWindow()) { 3070 return false; 3071 } 3072 return value instanceof Element || value instanceof getWindow(value).Element; 3073 } 3074 function isHTMLElement(value) { 3075 if (!hasWindow()) { 3076 return false; 3077 } 3078 return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement; 3079 } 3080 function isShadowRoot(value) { 3081 if (!hasWindow() || typeof ShadowRoot === "undefined") { 3082 return false; 3083 } 3084 return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot; 3085 } 3086 function isOverflowElement(element) { 3087 const { 3088 overflow, 3089 overflowX, 3090 overflowY, 3091 display 3092 } = getComputedStyle2(element); 3093 return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== "inline" && display !== "contents"; 3094 } 3095 function isTableElement(element) { 3096 return /^(table|td|th)$/.test(getNodeName(element)); 3097 } 3098 function isTopLayer(element) { 3099 try { 3100 if (element.matches(":popover-open")) { 3101 return true; 3102 } 3103 } catch (_e) { 3104 } 3105 try { 3106 return element.matches(":modal"); 3107 } catch (_e) { 3108 return false; 3109 } 3110 } 3111 var willChangeRe = /transform|translate|scale|rotate|perspective|filter/; 3112 var containRe = /paint|layout|strict|content/; 3113 var isNotNone = (value) => !!value && value !== "none"; 3114 var isWebKitValue; 3115 function isContainingBlock(elementOrCss) { 3116 const css = isElement(elementOrCss) ? getComputedStyle2(elementOrCss) : elementOrCss; 3117 return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || "") || containRe.test(css.contain || ""); 3118 } 3119 function getContainingBlock(element) { 3120 let currentNode = getParentNode(element); 3121 while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) { 3122 if (isContainingBlock(currentNode)) { 3123 return currentNode; 3124 } else if (isTopLayer(currentNode)) { 3125 return null; 3126 } 3127 currentNode = getParentNode(currentNode); 3128 } 3129 return null; 3130 } 3131 function isWebKit() { 3132 if (isWebKitValue == null) { 3133 isWebKitValue = typeof CSS !== "undefined" && CSS.supports && CSS.supports("-webkit-backdrop-filter", "none"); 3134 } 3135 return isWebKitValue; 3136 } 3137 function isLastTraversableNode(node) { 3138 return /^(html|body|#document)$/.test(getNodeName(node)); 3139 } 3140 function getComputedStyle2(element) { 3141 return getWindow(element).getComputedStyle(element); 3142 } 3143 function getNodeScroll(element) { 3144 if (isElement(element)) { 3145 return { 3146 scrollLeft: element.scrollLeft, 3147 scrollTop: element.scrollTop 3148 }; 3149 } 3150 return { 3151 scrollLeft: element.scrollX, 3152 scrollTop: element.scrollY 3153 }; 3154 } 3155 function getParentNode(node) { 3156 if (getNodeName(node) === "html") { 3157 return node; 3158 } 3159 const result = ( 3160 // Step into the shadow DOM of the parent of a slotted node. 3161 node.assignedSlot || // DOM Element detected. 3162 node.parentNode || // ShadowRoot detected. 3163 isShadowRoot(node) && node.host || // Fallback. 3164 getDocumentElement(node) 3165 ); 3166 return isShadowRoot(result) ? result.host : result; 3167 } 3168 function getNearestOverflowAncestor(node) { 3169 const parentNode = getParentNode(node); 3170 if (isLastTraversableNode(parentNode)) { 3171 return (node.ownerDocument || node).body; 3172 } 3173 if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) { 3174 return parentNode; 3175 } 3176 return getNearestOverflowAncestor(parentNode); 3177 } 3178 function getOverflowAncestors(node, list, traverseIframes) { 3179 var _node$ownerDocument2; 3180 if (list === void 0) { 3181 list = []; 3182 } 3183 if (traverseIframes === void 0) { 3184 traverseIframes = true; 3185 } 3186 const scrollableAncestor = getNearestOverflowAncestor(node); 3187 const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body); 3188 const win = getWindow(scrollableAncestor); 3189 if (isBody) { 3190 const frameElement = getFrameElement(win); 3191 return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []); 3192 } else { 3193 return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes)); 3194 } 3195 } 3196 function getFrameElement(win) { 3197 return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null; 3198 } 3199 3200 // node_modules/@base-ui/react/internals/composite/root/CompositeRootContext.mjs 3201 var React14 = __toESM(require_react(), 1); 3202 var CompositeRootContext = /* @__PURE__ */ React14.createContext(void 0); 3203 if (true) CompositeRootContext.displayName = "CompositeRootContext"; 3204 function useCompositeRootContext(optional = false) { 3205 const context = React14.useContext(CompositeRootContext); 3206 if (context === void 0 && !optional) { 3207 throw new Error(true ? "Base UI: CompositeRootContext is missing. Composite parts must be placed within <Composite.Root>." : formatErrorMessage_default(16)); 3208 } 3209 return context; 3210 } 3211 3212 // node_modules/@base-ui/react/utils/useFocusableWhenDisabled.mjs 3213 var React15 = __toESM(require_react(), 1); 3214 function useFocusableWhenDisabled(parameters) { 3215 const { 3216 focusableWhenDisabled, 3217 disabled: disabled2, 3218 composite = false, 3219 tabIndex: tabIndexProp = 0, 3220 isNativeButton 3221 } = parameters; 3222 const isFocusableComposite = composite && focusableWhenDisabled !== false; 3223 const isNonFocusableComposite = composite && focusableWhenDisabled === false; 3224 const props = React15.useMemo(() => { 3225 const additionalProps = { 3226 // allow Tabbing away from focusableWhenDisabled elements 3227 onKeyDown(event) { 3228 if (disabled2 && focusableWhenDisabled && event.key !== "Tab") { 3229 event.preventDefault(); 3230 } 3231 } 3232 }; 3233 if (!composite) { 3234 additionalProps.tabIndex = tabIndexProp; 3235 if (!isNativeButton && disabled2) { 3236 additionalProps.tabIndex = focusableWhenDisabled ? tabIndexProp : -1; 3237 } 3238 } 3239 if (isNativeButton && (focusableWhenDisabled || isFocusableComposite) || !isNativeButton && disabled2) { 3240 additionalProps["aria-disabled"] = disabled2; 3241 } 3242 if (isNativeButton && (!focusableWhenDisabled || isNonFocusableComposite)) { 3243 additionalProps.disabled = disabled2; 3244 } 3245 return additionalProps; 3246 }, [composite, disabled2, focusableWhenDisabled, isFocusableComposite, isNonFocusableComposite, isNativeButton, tabIndexProp]); 3247 return { 3248 props 3249 }; 3250 } 3251 3252 // node_modules/@base-ui/utils/owner.mjs 3253 function ownerDocument(node) { 3254 return node?.ownerDocument || document; 3255 } 3256 3257 // node_modules/@base-ui/react/utils/dispatchClickWithModifiers.mjs 3258 function dispatchClickWithModifiers(target, sourceEvent, { 3259 detail = 0 3260 } = {}) { 3261 target.dispatchEvent(new (getWindow(target)).PointerEvent("click", { 3262 bubbles: true, 3263 cancelable: true, 3264 composed: true, 3265 detail, 3266 shiftKey: sourceEvent.shiftKey, 3267 ctrlKey: sourceEvent.ctrlKey, 3268 altKey: sourceEvent.altKey, 3269 metaKey: sourceEvent.metaKey 3270 })); 3271 } 3272 3273 // node_modules/@base-ui/react/internals/use-button/useButton.mjs 3274 function useButton(parameters = {}) { 3275 const { 3276 disabled: disabled2 = false, 3277 focusableWhenDisabled, 3278 tabIndex = 0, 3279 native: isNativeButton = true, 3280 composite: compositeProp 3281 } = parameters; 3282 const elementRef = React16.useRef(null); 3283 const compositeRootContext = useCompositeRootContext(true); 3284 const isCompositeItem = compositeProp ?? compositeRootContext !== void 0; 3285 const { 3286 props: focusableWhenDisabledProps 3287 } = useFocusableWhenDisabled({ 3288 focusableWhenDisabled, 3289 disabled: disabled2, 3290 composite: isCompositeItem, 3291 tabIndex, 3292 isNativeButton 3293 }); 3294 if (true) { 3295 React16.useEffect(() => { 3296 if (!elementRef.current) { 3297 return; 3298 } 3299 const isButtonTag = isButtonElement(elementRef.current); 3300 if (isNativeButton) { 3301 if (!isButtonTag) { 3302 const ownerStackMessage = SafeReact.captureOwnerStack?.() || ""; 3303 const message2 = "A component that acts as a button expected a native <button> because the `nativeButton` prop is true. Rendering a non-<button> removes native button semantics, which can impact forms and accessibility. Use a real <button> in the `render` prop, or set `nativeButton` to `false`."; 3304 error(`$message2}$ownerStackMessage}`); 3305 } 3306 } else if (isButtonTag) { 3307 const ownerStackMessage = SafeReact.captureOwnerStack?.() || ""; 3308 const message2 = "A component that acts as a button expected a non-<button> because the `nativeButton` prop is false. Rendering a <button> keeps native behavior while Base UI applies non-native attributes and handlers, which can add unintended extra attributes (such as `role` or `aria-disabled`). Use a non-<button> in the `render` prop, or set `nativeButton` to `true`."; 3309 error(`$message2}$ownerStackMessage}`); 3310 } 3311 }, [isNativeButton]); 3312 } 3313 const updateDisabled = React16.useCallback(() => { 3314 const element = elementRef.current; 3315 if (!isButtonElement(element)) { 3316 return; 3317 } 3318 if (isCompositeItem && disabled2 && focusableWhenDisabledProps.disabled === void 0 && element.disabled) { 3319 element.disabled = false; 3320 } 3321 }, [disabled2, focusableWhenDisabledProps.disabled, isCompositeItem]); 3322 useIsoLayoutEffect(updateDisabled, [updateDisabled]); 3323 const getButtonProps = React16.useCallback((externalProps = {}) => { 3324 const { 3325 onClick: externalOnClick, 3326 onMouseDown: externalOnMouseDown, 3327 onKeyUp: externalOnKeyUp, 3328 onKeyDown: externalOnKeyDown, 3329 onPointerDown: externalOnPointerDown, 3330 ...otherExternalProps 3331 } = externalProps; 3332 return mergeProps({ 3333 onClick(event) { 3334 if (disabled2) { 3335 event.preventDefault(); 3336 return; 3337 } 3338 externalOnClick?.(event); 3339 }, 3340 onMouseDown(event) { 3341 if (!disabled2) { 3342 externalOnMouseDown?.(event); 3343 } 3344 }, 3345 onKeyDown(event) { 3346 if (disabled2) { 3347 return; 3348 } 3349 makeEventPreventable(event); 3350 externalOnKeyDown?.(event); 3351 if (event.baseUIHandlerPrevented) { 3352 return; 3353 } 3354 const isCurrentTarget = event.target === event.currentTarget; 3355 const currentTarget = event.currentTarget; 3356 const isButton2 = isButtonElement(currentTarget); 3357 const isLink = !isNativeButton && isValidLinkElement(currentTarget); 3358 const shouldClick = isCurrentTarget && (isNativeButton ? isButton2 : !isLink); 3359 const isEnterKey = event.key === "Enter"; 3360 const isSpaceKey = event.key === " "; 3361 const role = currentTarget.getAttribute("role"); 3362 const isTextNavigationRole = role?.startsWith("menuitem") || role === "option" || role === "gridcell"; 3363 if (isCurrentTarget && isCompositeItem && isSpaceKey) { 3364 if (event.defaultPrevented && isTextNavigationRole) { 3365 return; 3366 } 3367 event.preventDefault(); 3368 if (!isNativeButton || isButton2) { 3369 event.preventBaseUIHandler(); 3370 dispatchClickWithModifiers(currentTarget, event); 3371 } 3372 return; 3373 } 3374 if (!shouldClick || isNativeButton || !isSpaceKey && !isEnterKey) { 3375 if (isCurrentTarget && isLink && isSpaceKey) { 3376 event.preventDefault(); 3377 } 3378 return; 3379 } 3380 if (event.defaultPrevented) { 3381 return; 3382 } 3383 event.preventDefault(); 3384 if (isEnterKey) { 3385 event.preventBaseUIHandler(); 3386 dispatchClickWithModifiers(currentTarget, event); 3387 } 3388 }, 3389 onKeyUp(event) { 3390 if (disabled2) { 3391 return; 3392 } 3393 makeEventPreventable(event); 3394 externalOnKeyUp?.(event); 3395 if (event.target === event.currentTarget && isNativeButton && isCompositeItem && isButtonElement(event.currentTarget) && event.key === " ") { 3396 event.preventDefault(); 3397 return; 3398 } 3399 if (event.baseUIHandlerPrevented) { 3400 return; 3401 } 3402 if (event.target === event.currentTarget && !isNativeButton && !isCompositeItem && !event.defaultPrevented && event.key === " ") { 3403 event.preventBaseUIHandler(); 3404 dispatchClickWithModifiers(event.currentTarget, event); 3405 } 3406 }, 3407 onPointerDown(event) { 3408 if (disabled2) { 3409 event.preventDefault(); 3410 return; 3411 } 3412 externalOnPointerDown?.(event); 3413 } 3414 }, isNativeButton ? { 3415 type: "button" 3416 } : { 3417 role: "button" 3418 }, focusableWhenDisabledProps, otherExternalProps); 3419 }, [disabled2, focusableWhenDisabledProps, isCompositeItem, isNativeButton]); 3420 const buttonRef = useStableCallback((element) => { 3421 elementRef.current = element; 3422 updateDisabled(); 3423 }); 3424 return { 3425 getButtonProps, 3426 buttonRef 3427 }; 3428 } 3429 function isButtonElement(elem) { 3430 return isHTMLElement(elem) && elem.tagName === "BUTTON"; 3431 } 3432 function isValidLinkElement(elem) { 3433 return isHTMLElement(elem) && elem.tagName === "A" && Boolean(elem.href); 3434 } 3435 3436 // node_modules/@base-ui/utils/addEventListener.mjs 3437 function addEventListener(target, type, listener, options) { 3438 target.addEventListener(type, listener, options); 3439 return () => { 3440 target.removeEventListener(type, listener, options); 3441 }; 3442 } 3443 3444 // node_modules/@base-ui/utils/useValueAsRef.mjs 3445 function useValueAsRef(value) { 3446 const latest = useRefWithInit(createLatestRef, value).current; 3447 latest.next = value; 3448 useIsoLayoutEffect(latest.effect); 3449 return latest; 3450 } 3451 function createLatestRef(value) { 3452 const latest = { 3453 current: value, 3454 next: value, 3455 effect: () => { 3456 latest.current = latest.next; 3457 } 3458 }; 3459 return latest; 3460 } 3461 3462 // node_modules/@base-ui/react/internals/useOpenChangeComplete.mjs 3463 var React17 = __toESM(require_react(), 1); 3464 3465 // node_modules/@base-ui/react/internals/useAnimationsFinished.mjs 3466 var ReactDOM = __toESM(require_react_dom(), 1); 3467 3468 // node_modules/@base-ui/react/utils/resolveRef.mjs 3469 function resolveRef(maybeRef) { 3470 if (maybeRef == null) { 3471 return maybeRef; 3472 } 3473 return "current" in maybeRef ? maybeRef.current : maybeRef; 3474 } 3475 3476 // node_modules/@base-ui/react/internals/useAnimationsFinished.mjs 3477 function useAnimationsFinished(elementOrRef, waitForStartingStyleRemoved = false) { 3478 const frame = useAnimationFrame(); 3479 return useStableCallback((fnToExecute, signal = null) => { 3480 frame.cancel(); 3481 const element = resolveRef(elementOrRef); 3482 if (element == null) { 3483 return; 3484 } 3485 const resolvedElement = element; 3486 const done = () => { 3487 ReactDOM.flushSync(fnToExecute); 3488 }; 3489 if (typeof resolvedElement.getAnimations !== "function" || globalThis.BASE_UI_ANIMATIONS_DISABLED) { 3490 fnToExecute(); 3491 return; 3492 } 3493 function exec() { 3494 Promise.all(resolvedElement.getAnimations().map((animation) => animation.finished)).then(() => { 3495 if (!signal?.aborted) { 3496 done(); 3497 } 3498 }, () => { 3499 if (signal?.aborted) { 3500 return; 3501 } 3502 const currentAnimations = resolvedElement.getAnimations(); 3503 if (currentAnimations.some((animation) => animation.pending || animation.playState !== "finished")) { 3504 exec(); 3505 return; 3506 } 3507 done(); 3508 }); 3509 } 3510 if (waitForStartingStyleRemoved) { 3511 const startingStyleAttribute = "data-starting-style"; 3512 if (!resolvedElement.hasAttribute(startingStyleAttribute)) { 3513 frame.request(exec); 3514 return; 3515 } 3516 const attributeObserver = new MutationObserver(() => { 3517 if (!resolvedElement.hasAttribute(startingStyleAttribute)) { 3518 attributeObserver.disconnect(); 3519 exec(); 3520 } 3521 }); 3522 attributeObserver.observe(resolvedElement, { 3523 attributes: true, 3524 attributeFilter: [startingStyleAttribute] 3525 }); 3526 signal?.addEventListener("abort", () => attributeObserver.disconnect(), { 3527 once: true 3528 }); 3529 return; 3530 } 3531 frame.request(exec); 3532 }); 3533 } 3534 3535 // node_modules/@base-ui/react/internals/useOpenChangeComplete.mjs 3536 function useOpenChangeComplete(parameters) { 3537 const { 3538 enabled = true, 3539 open, 3540 ref, 3541 onComplete: onCompleteParam 3542 } = parameters; 3543 const onComplete = useStableCallback(onCompleteParam); 3544 const runOnceAnimationsFinish = useAnimationsFinished(ref, open); 3545 React17.useEffect(() => { 3546 if (!enabled) { 3547 return void 0; 3548 } 3549 const abortController = new AbortController(); 3550 runOnceAnimationsFinish(onComplete, abortController.signal); 3551 return () => { 3552 abortController.abort(); 3553 }; 3554 }, [enabled, open, onComplete, runOnceAnimationsFinish]); 3555 } 3556 3557 // node_modules/@base-ui/utils/platform/parts.mjs 3558 var parts_exports = {}; 3559 __export(parts_exports, { 3560 engine: () => engine_exports, 3561 env: () => env_exports, 3562 os: () => os_exports, 3563 screenReader: () => screen_reader_exports 3564 }); 3565 3566 // node_modules/@base-ui/utils/platform/os.mjs 3567 var os_exports = {}; 3568 __export(os_exports, { 3569 android: () => android, 3570 apple: () => apple, 3571 ios: () => ios, 3572 linux: () => linux, 3573 mac: () => mac, 3574 windows: () => windows 3575 }); 3576 3577 // node_modules/@base-ui/utils/platform/shared.mjs 3578 function readRawData() { 3579 if (typeof navigator === "undefined") { 3580 return { 3581 userAgent: "", 3582 platform: "", 3583 maxTouchPoints: 0 3584 }; 3585 } 3586 if (true) { 3587 const uaData = navigator.userAgentData; 3588 if (uaData && Array.isArray(uaData.brands)) { 3589 return { 3590 userAgent: uaData.brands.map(({ 3591 brand, 3592 version: version2 3593 }) => `$brand}/$version2}`).join(" "), 3594 platform: uaData.platform ?? navigator.platform ?? "", 3595 maxTouchPoints: navigator.maxTouchPoints ?? 0 3596 }; 3597 } 3598 } 3599 return { 3600 userAgent: navigator.userAgent, 3601 platform: navigator.platform ?? "", 3602 maxTouchPoints: navigator.maxTouchPoints ?? 0 3603 }; 3604 } 3605 var { 3606 userAgent, 3607 platform, 3608 maxTouchPoints 3609 } = readRawData(); 3610 var lowerUserAgent = userAgent.toLowerCase(); 3611 var lowerPlatform = platform.toLowerCase(); 3612 3613 // node_modules/@base-ui/utils/platform/os.mjs 3614 var ios = /^i(os$|p)/.test(lowerPlatform) || lowerPlatform === "macintel" && maxTouchPoints > 1; 3615 var ANDROID_STRING = "android"; 3616 var android = lowerPlatform === ANDROID_STRING || lowerUserAgent.includes(ANDROID_STRING); 3617 var mac = !ios && lowerPlatform.startsWith("mac"); 3618 var windows = lowerPlatform.startsWith("win"); 3619 var linux = !android && /^(linux|chrome os)/.test(lowerPlatform); 3620 var apple = mac || ios; 3621 3622 // node_modules/@base-ui/utils/platform/engine.mjs 3623 var engine_exports = {}; 3624 __export(engine_exports, { 3625 blink: () => blink, 3626 gecko: () => gecko, 3627 webkit: () => webkit 3628 }); 3629 var webkit = typeof CSS !== "undefined" && !!CSS.supports?.("-webkit-backdrop-filter:none"); 3630 var gecko = !webkit && lowerUserAgent.includes("firefox"); 3631 var blink = !webkit && lowerUserAgent.includes("chrom"); 3632 3633 // node_modules/@base-ui/utils/platform/screen-reader.mjs 3634 var screen_reader_exports = {}; 3635 __export(screen_reader_exports, { 3636 voiceOver: () => voiceOver 3637 }); 3638 var voiceOver = apple; 3639 3640 // node_modules/@base-ui/utils/platform/env.mjs 3641 var env_exports = {}; 3642 __export(env_exports, { 3643 jsdom: () => jsdom 3644 }); 3645 var jsdom = /jsdom|happydom/.test(lowerUserAgent); 3646 3647 // node_modules/@base-ui/utils/useTimeout.mjs 3648 var EMPTY2 = 0; 3649 var Timeout = class _Timeout { 3650 static create() { 3651 return new _Timeout(); 3652 } 3653 currentId = EMPTY2; 3654 /** 3655 * Executes `fn` after `delay`, clearing any previously scheduled call. 3656 */ 3657 start(delay, fn) { 3658 this.clear(); 3659 this.currentId = setTimeout(() => { 3660 this.currentId = EMPTY2; 3661 fn(); 3662 }, delay); 3663 } 3664 isStarted() { 3665 return this.currentId !== EMPTY2; 3666 } 3667 clear = () => { 3668 if (this.currentId !== EMPTY2) { 3669 clearTimeout(this.currentId); 3670 this.currentId = EMPTY2; 3671 } 3672 }; 3673 disposeEffect = () => { 3674 return this.clear; 3675 }; 3676 }; 3677 function useTimeout() { 3678 const timeout = useRefWithInit(Timeout.create).current; 3679 useOnMount(timeout.disposeEffect); 3680 return timeout; 3681 } 3682 3683 // node_modules/@base-ui/utils/useScrollLock.mjs 3684 var originalHtmlStyles = {}; 3685 var originalBodyStyles = {}; 3686 var originalHtmlScrollBehavior = ""; 3687 function getViewportScroller(html, body) { 3688 return isOverflowElement(html) ? html : body; 3689 } 3690 function isPageScrollLocked(win, html, body) { 3691 return /hidden|clip/.test(win.getComputedStyle(getViewportScroller(html, body)).overflowY); 3692 } 3693 function hasInsetScrollbars(referenceElement) { 3694 if (typeof document === "undefined") { 3695 return false; 3696 } 3697 const doc = ownerDocument(referenceElement); 3698 const win = getWindow(doc); 3699 return win.innerWidth - doc.documentElement.clientWidth > 0; 3700 } 3701 function supportsStableScrollbarGutter(referenceElement) { 3702 const supported = typeof CSS !== "undefined" && CSS.supports && CSS.supports("scrollbar-gutter", "stable"); 3703 if (!supported || typeof document === "undefined") { 3704 return false; 3705 } 3706 const doc = ownerDocument(referenceElement); 3707 const html = doc.documentElement; 3708 const body = doc.body; 3709 const scrollContainer = getViewportScroller(html, body); 3710 const originalScrollContainerOverflowY = scrollContainer.style.overflowY; 3711 const originalHtmlStyleGutter = html.style.scrollbarGutter; 3712 html.style.scrollbarGutter = "stable"; 3713 scrollContainer.style.overflowY = "scroll"; 3714 const before = scrollContainer.offsetWidth; 3715 scrollContainer.style.overflowY = "hidden"; 3716 const after = scrollContainer.offsetWidth; 3717 scrollContainer.style.overflowY = originalScrollContainerOverflowY; 3718 html.style.scrollbarGutter = originalHtmlStyleGutter; 3719 return before === after; 3720 } 3721 function preventScrollOverlayScrollbars(referenceElement) { 3722 const doc = ownerDocument(referenceElement); 3723 const html = doc.documentElement; 3724 const body = doc.body; 3725 const elementToLock = getViewportScroller(html, body); 3726 const originalElementToLockStyles = { 3727 overflowY: elementToLock.style.overflowY, 3728 overflowX: elementToLock.style.overflowX 3729 }; 3730 Object.assign(elementToLock.style, { 3731 overflowY: "hidden", 3732 overflowX: "hidden" 3733 }); 3734 return () => { 3735 Object.assign(elementToLock.style, originalElementToLockStyles); 3736 }; 3737 } 3738 function preventScrollInsetScrollbars(referenceElement) { 3739 const doc = ownerDocument(referenceElement); 3740 const html = doc.documentElement; 3741 const body = doc.body; 3742 const win = getWindow(html); 3743 let scrollTop = 0; 3744 let scrollLeft = 0; 3745 let updateGutterOnly = false; 3746 const resizeFrame = AnimationFrame.create(); 3747 if (parts_exports.engine.webkit && (win.visualViewport?.scale ?? 1) !== 1) { 3748 return () => { 3749 }; 3750 } 3751 function lockScroll() { 3752 const htmlStyles = win.getComputedStyle(html); 3753 const bodyStyles = win.getComputedStyle(body); 3754 const htmlScrollbarGutterValue = htmlStyles.scrollbarGutter || ""; 3755 const hasBothEdges = htmlScrollbarGutterValue.includes("both-edges"); 3756 const scrollbarGutterValue = hasBothEdges ? "stable both-edges" : "stable"; 3757 scrollTop = html.scrollTop; 3758 scrollLeft = html.scrollLeft; 3759 originalHtmlStyles = { 3760 scrollbarGutter: html.style.scrollbarGutter, 3761 overflowY: html.style.overflowY, 3762 overflowX: html.style.overflowX 3763 }; 3764 originalHtmlScrollBehavior = html.style.scrollBehavior; 3765 originalBodyStyles = { 3766 position: body.style.position, 3767 height: body.style.height, 3768 width: body.style.width, 3769 boxSizing: body.style.boxSizing, 3770 overflowY: body.style.overflowY, 3771 overflowX: body.style.overflowX, 3772 scrollBehavior: body.style.scrollBehavior 3773 }; 3774 const isScrollableY = html.scrollHeight > html.clientHeight; 3775 const isScrollableX = html.scrollWidth > html.clientWidth; 3776 const hasConstantOverflowY = htmlStyles.overflowY === "scroll" || bodyStyles.overflowY === "scroll"; 3777 const hasConstantOverflowX = htmlStyles.overflowX === "scroll" || bodyStyles.overflowX === "scroll"; 3778 const scrollbarWidth = Math.max(0, win.innerWidth - body.clientWidth); 3779 const scrollbarHeight = Math.max(0, win.innerHeight - body.clientHeight); 3780 const marginY = parseFloat(bodyStyles.marginTop) + parseFloat(bodyStyles.marginBottom); 3781 const marginX = parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight); 3782 const elementToLock = getViewportScroller(html, body); 3783 updateGutterOnly = supportsStableScrollbarGutter(referenceElement); 3784 if (updateGutterOnly) { 3785 html.style.scrollbarGutter = scrollbarGutterValue; 3786 elementToLock.style.overflowY = "hidden"; 3787 elementToLock.style.overflowX = "hidden"; 3788 return; 3789 } 3790 Object.assign(html.style, { 3791 scrollbarGutter: scrollbarGutterValue, 3792 overflowY: "hidden", 3793 overflowX: "hidden" 3794 }); 3795 if (isScrollableY || hasConstantOverflowY) { 3796 html.style.overflowY = "scroll"; 3797 } 3798 if (isScrollableX || hasConstantOverflowX) { 3799 html.style.overflowX = "scroll"; 3800 } 3801 Object.assign(body.style, { 3802 position: "relative", 3803 height: marginY || scrollbarHeight ? `calc(100dvh - $marginY + scrollbarHeight}px)` : "100dvh", 3804 width: marginX || scrollbarWidth ? `calc(100vw - $marginX + scrollbarWidth}px)` : "100vw", 3805 boxSizing: "border-box", 3806 // Assign the longhands that `cleanup` restores, so nothing is left behind. 3807 overflowY: "hidden", 3808 overflowX: "hidden", 3809 scrollBehavior: "unset" 3810 }); 3811 body.scrollTop = scrollTop; 3812 body.scrollLeft = scrollLeft; 3813 html.setAttribute("data-base-ui-scroll-locked", ""); 3814 html.style.scrollBehavior = "unset"; 3815 } 3816 function cleanup() { 3817 Object.assign(html.style, originalHtmlStyles); 3818 Object.assign(body.style, originalBodyStyles); 3819 if (!updateGutterOnly) { 3820 html.scrollTop = scrollTop; 3821 html.scrollLeft = scrollLeft; 3822 html.removeAttribute("data-base-ui-scroll-locked"); 3823 html.style.scrollBehavior = originalHtmlScrollBehavior; 3824 } 3825 } 3826 function handleResize() { 3827 cleanup(); 3828 resizeFrame.request(lockScroll); 3829 } 3830 lockScroll(); 3831 const unsubscribeResize = addEventListener(win, "resize", handleResize); 3832 return () => { 3833 resizeFrame.cancel(); 3834 cleanup(); 3835 if (typeof win.removeEventListener === "function") { 3836 unsubscribeResize(); 3837 } 3838 }; 3839 } 3840 var ScrollLocker = class { 3841 lockCount = 0; 3842 restore = null; 3843 timeoutLock = Timeout.create(); 3844 timeoutUnlock = Timeout.create(); 3845 acquire(referenceElement) { 3846 this.lockCount += 1; 3847 if (this.lockCount === 1 && this.restore === null) { 3848 this.timeoutLock.start(0, () => this.lock(referenceElement)); 3849 } 3850 return this.release; 3851 } 3852 release = () => { 3853 this.lockCount -= 1; 3854 if (this.lockCount === 0 && this.restore) { 3855 this.timeoutUnlock.start(0, this.unlock); 3856 } 3857 }; 3858 unlock = () => { 3859 if (this.lockCount === 0 && this.restore) { 3860 this.restore?.(); 3861 this.restore = null; 3862 } 3863 }; 3864 lock(referenceElement) { 3865 if (this.lockCount === 0 || this.restore !== null) { 3866 return; 3867 } 3868 const doc = ownerDocument(referenceElement); 3869 const html = doc.documentElement; 3870 const body = doc.body; 3871 const win = getWindow(html); 3872 if (isPageScrollLocked(win, html, body)) { 3873 const observer = new win.MutationObserver(() => { 3874 if (isPageScrollLocked(win, html, body)) { 3875 return; 3876 } 3877 observer.disconnect(); 3878 this.restore = null; 3879 this.lock(referenceElement); 3880 }); 3881 const options = { 3882 attributes: true 3883 }; 3884 observer.observe(html, options); 3885 observer.observe(body, options); 3886 this.restore = () => observer.disconnect(); 3887 return; 3888 } 3889 const hasOverlayScrollbars = parts_exports.os.ios || !hasInsetScrollbars(referenceElement); 3890 this.restore = hasOverlayScrollbars ? preventScrollOverlayScrollbars(referenceElement) : preventScrollInsetScrollbars(referenceElement); 3891 } 3892 }; 3893 var SCROLL_LOCKER = new ScrollLocker(); 3894 function useScrollLock(enabled = true, referenceElement = null) { 3895 useIsoLayoutEffect(() => { 3896 if (!enabled) { 3897 return void 0; 3898 } 3899 return SCROLL_LOCKER.acquire(referenceElement); 3900 }, [enabled, referenceElement]); 3901 } 3902 3903 // node_modules/@base-ui/react/floating-ui-react/components/FloatingDelayGroup.mjs 3904 var React18 = __toESM(require_react(), 1); 3905 3906 // node_modules/@base-ui/react/floating-ui-react/utils/event.mjs 3907 function stopEvent(event) { 3908 event.preventDefault(); 3909 event.stopPropagation(); 3910 } 3911 function isReactEvent(event) { 3912 return "nativeEvent" in event; 3913 } 3914 function isVirtualClick(event) { 3915 if (event.pointerType === "" && event.isTrusted) { 3916 return true; 3917 } 3918 if (parts_exports.os.android && event.pointerType) { 3919 return event.type === "click" && event.buttons === 1; 3920 } 3921 return event.detail === 0 && !event.pointerType; 3922 } 3923 function isVirtualPointerEvent(event) { 3924 if (parts_exports.env.jsdom) { 3925 return false; 3926 } 3927 return !parts_exports.os.android && event.width === 0 && event.height === 0 || parts_exports.os.android && event.width === 1 && event.height === 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === "mouse" || // iOS VoiceOver returns 0.333• for width/height. 3928 event.width < 1 && event.height < 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === "touch"; 3929 } 3930 function isMouseLikePointerType(pointerType, strict) { 3931 const values = ["mouse", "pen"]; 3932 if (!strict) { 3933 values.push("", void 0); 3934 } 3935 return values.includes(pointerType); 3936 } 3937 function isClickLikeEvent(event) { 3938 const type = event.type; 3939 return type === "click" || type === "mousedown" || type === "keydown" || type === "keyup"; 3940 } 3941 3942 // node_modules/@base-ui/react/floating-ui-react/utils/constants.mjs 3943 var FOCUSABLE_ATTRIBUTE = "data-base-ui-focusable"; 3944 var TYPEABLE_SELECTOR = "input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])"; 3945 var ARROW_LEFT = "ArrowLeft"; 3946 var ARROW_RIGHT = "ArrowRight"; 3947 var ARROW_UP = "ArrowUp"; 3948 var ARROW_DOWN = "ArrowDown"; 3949 3950 // node_modules/@base-ui/react/internals/shadowDom.mjs 3951 function activeElement(doc) { 3952 let element = doc.activeElement; 3953 while (element?.shadowRoot?.activeElement != null) { 3954 element = element.shadowRoot.activeElement; 3955 } 3956 return element; 3957 } 3958 function contains(parent, child) { 3959 if (!parent || !child) { 3960 return false; 3961 } 3962 const rootNode = child.getRootNode?.(); 3963 if (parent.contains(child)) { 3964 return true; 3965 } 3966 if (rootNode && isShadowRoot(rootNode)) { 3967 let next = child; 3968 while (next) { 3969 if (parent === next) { 3970 return true; 3971 } 3972 next = next.parentNode || next.host; 3973 } 3974 } 3975 return false; 3976 } 3977 function getTarget(event) { 3978 if ("composedPath" in event) { 3979 return event.composedPath()[0]; 3980 } 3981 return event.target; 3982 } 3983 3984 // node_modules/@base-ui/react/floating-ui-react/utils/element.mjs 3985 function isTargetInsideEnabledTrigger(target, triggerElements) { 3986 if (!isElement(target)) { 3987 return false; 3988 } 3989 const targetElement = target; 3990 if (triggerElements.hasElement(targetElement)) { 3991 return !targetElement.hasAttribute("data-trigger-disabled"); 3992 } 3993 for (const [, trigger] of triggerElements.entries()) { 3994 if (contains(trigger, targetElement)) { 3995 return !trigger.hasAttribute("data-trigger-disabled"); 3996 } 3997 } 3998 return false; 3999 } 4000 function isEventTargetWithin(event, node) { 4001 if (node == null) { 4002 return false; 4003 } 4004 if ("composedPath" in event) { 4005 return event.composedPath().includes(node); 4006 } 4007 const eventAgain = event; 4008 return eventAgain.target != null && node.contains(eventAgain.target); 4009 } 4010 function isRootElement(element) { 4011 return element.matches("html,body"); 4012 } 4013 function isTypeableElement(element) { 4014 return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR); 4015 } 4016 function isInteractiveElement(element) { 4017 return element?.closest(`button,a[href],[role="button"],select,[tabindex]:not([tabindex="-1"]),$TYPEABLE_SELECTOR}`) != null; 4018 } 4019 function isTypeableCombobox(element) { 4020 if (!element) { 4021 return false; 4022 } 4023 return element.getAttribute("role") === "combobox" && isTypeableElement(element); 4024 } 4025 function matchesFocusVisible(element) { 4026 if (!element || parts_exports.env.jsdom) { 4027 return true; 4028 } 4029 try { 4030 return element.matches(":focus-visible"); 4031 } catch (_e) { 4032 return true; 4033 } 4034 } 4035 function getFloatingFocusElement(floatingElement) { 4036 if (!floatingElement) { 4037 return null; 4038 } 4039 return floatingElement.hasAttribute(FOCUSABLE_ATTRIBUTE) ? floatingElement : floatingElement.querySelector(`[$FOCUSABLE_ATTRIBUTE}]`) || floatingElement; 4040 } 4041 4042 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverShared.mjs 4043 function resolveValue(value, pointerType) { 4044 if (pointerType != null && !isMouseLikePointerType(pointerType)) { 4045 return 0; 4046 } 4047 if (typeof value === "function") { 4048 return value(); 4049 } 4050 return value; 4051 } 4052 function getDelay(value, prop, pointerType) { 4053 const result = resolveValue(value, pointerType); 4054 if (typeof result === "number") { 4055 return result; 4056 } 4057 return result?.[prop]; 4058 } 4059 function getRestMs(value) { 4060 if (typeof value === "function") { 4061 return value(); 4062 } 4063 return value; 4064 } 4065 function isClickLikeOpenEvent(openEventType, interactedInside) { 4066 return interactedInside || openEventType === "click" || openEventType === "mousedown"; 4067 } 4068 function isHoverOpenEvent(openEventType) { 4069 return openEventType?.includes("mouse") && openEventType !== "mousedown"; 4070 } 4071 4072 // node_modules/@base-ui/react/floating-ui-react/components/FloatingDelayGroup.mjs 4073 var import_jsx_runtime36 = __toESM(require_jsx_runtime(), 1); 4074 var FloatingDelayGroupContext = /* @__PURE__ */ React18.createContext({ 4075 hasProvider: false, 4076 timeoutMs: 0, 4077 delayRef: { 4078 current: 0 4079 }, 4080 initialDelayRef: { 4081 current: 0 4082 }, 4083 timeout: new Timeout(), 4084 currentIdRef: { 4085 current: null 4086 }, 4087 currentContextRef: { 4088 current: null 4089 } 4090 }); 4091 if (true) FloatingDelayGroupContext.displayName = "FloatingDelayGroupContext"; 4092 function resetDelayRef(delayRef, initialDelayRef) { 4093 delayRef.current = initialDelayRef.current; 4094 } 4095 function FloatingDelayGroup(props) { 4096 const { 4097 children, 4098 delay, 4099 timeoutMs = 0 4100 } = props; 4101 const delayRef = React18.useRef(delay); 4102 const initialDelayRef = React18.useRef(delay); 4103 const currentIdRef = React18.useRef(null); 4104 const currentContextRef = React18.useRef(null); 4105 const timeout = useTimeout(); 4106 useIsoLayoutEffect(() => { 4107 initialDelayRef.current = delay; 4108 if (!currentIdRef.current) { 4109 delayRef.current = delay; 4110 return; 4111 } 4112 delayRef.current = { 4113 open: getDelay(delayRef.current, "open"), 4114 close: getDelay(delay, "close") 4115 }; 4116 }, [delay, currentIdRef, delayRef, initialDelayRef]); 4117 return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(FloatingDelayGroupContext.Provider, { 4118 value: React18.useMemo(() => ({ 4119 hasProvider: true, 4120 delayRef, 4121 initialDelayRef, 4122 currentIdRef, 4123 timeoutMs, 4124 currentContextRef, 4125 timeout 4126 }), [timeoutMs, timeout]), 4127 children 4128 }); 4129 } 4130 function useDelayGroup(context, options = { 4131 open: false 4132 }) { 4133 const { 4134 open 4135 } = options; 4136 const store = "rootStore" in context ? context.rootStore : context; 4137 const floatingId = store.useState("floatingId"); 4138 const groupContext = React18.useContext(FloatingDelayGroupContext); 4139 const { 4140 currentIdRef, 4141 delayRef, 4142 timeoutMs, 4143 initialDelayRef, 4144 currentContextRef, 4145 hasProvider, 4146 timeout 4147 } = groupContext; 4148 const [isInstantPhase, setIsInstantPhase] = React18.useState(false); 4149 const openRef = React18.useRef(open); 4150 useIsoLayoutEffect(() => { 4151 openRef.current = open; 4152 }, [open]); 4153 useIsoLayoutEffect(() => { 4154 function unset() { 4155 currentContextRef.current?.setIsInstantPhase(false); 4156 currentIdRef.current = null; 4157 currentContextRef.current = null; 4158 delayRef.current = initialDelayRef.current; 4159 timeout.clear(); 4160 } 4161 if (!currentIdRef.current) { 4162 return void 0; 4163 } 4164 if (!open && currentIdRef.current === floatingId) { 4165 setIsInstantPhase(false); 4166 if (timeoutMs) { 4167 const closingId = floatingId; 4168 timeout.start(timeoutMs, () => { 4169 if (store.select("open") || currentIdRef.current && currentIdRef.current !== closingId) { 4170 return; 4171 } 4172 unset(); 4173 }); 4174 return () => { 4175 if (openRef.current || currentIdRef.current !== closingId) { 4176 timeout.clear(); 4177 } 4178 }; 4179 } 4180 unset(); 4181 } 4182 return void 0; 4183 }, [open, floatingId, currentIdRef, delayRef, timeoutMs, initialDelayRef, currentContextRef, timeout, store]); 4184 useIsoLayoutEffect(() => { 4185 if (!open) { 4186 return; 4187 } 4188 const prevContext = currentContextRef.current; 4189 const prevId = currentIdRef.current; 4190 timeout.clear(); 4191 currentContextRef.current = { 4192 onOpenChange: store.setOpen, 4193 setIsInstantPhase 4194 }; 4195 currentIdRef.current = floatingId; 4196 delayRef.current = { 4197 open: 0, 4198 close: getDelay(initialDelayRef.current, "close") 4199 }; 4200 if (prevId !== null && prevId !== floatingId) { 4201 setIsInstantPhase(true); 4202 prevContext?.setIsInstantPhase(true); 4203 prevContext?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.none)); 4204 } else { 4205 setIsInstantPhase(false); 4206 prevContext?.setIsInstantPhase(false); 4207 } 4208 }, [open, floatingId, store, currentIdRef, delayRef, initialDelayRef, currentContextRef, timeout]); 4209 useIsoLayoutEffect(() => { 4210 return () => { 4211 if (currentIdRef.current === floatingId) { 4212 currentContextRef.current = null; 4213 if (!openRef.current) { 4214 return; 4215 } 4216 currentIdRef.current = null; 4217 resetDelayRef(delayRef, initialDelayRef); 4218 timeout.clear(); 4219 } 4220 }; 4221 }, [currentContextRef, currentIdRef, delayRef, floatingId, initialDelayRef, timeout]); 4222 return React18.useMemo(() => ({ 4223 hasProvider, 4224 delayRef, 4225 isInstantPhase 4226 }), [hasProvider, delayRef, isInstantPhase]); 4227 } 4228 4229 // node_modules/@base-ui/react/floating-ui-react/components/FloatingFocusManager.mjs 4230 var React22 = __toESM(require_react(), 1); 4231 4232 // node_modules/@base-ui/utils/mergeCleanups.mjs 4233 function mergeCleanups(...cleanups) { 4234 return () => { 4235 for (let i2 = 0; i2 < cleanups.length; i2 += 1) { 4236 const cleanup = cleanups[i2]; 4237 if (cleanup) { 4238 cleanup(); 4239 } 4240 } 4241 }; 4242 } 4243 4244 // node_modules/@base-ui/react/utils/FocusGuard.mjs 4245 var React19 = __toESM(require_react(), 1); 4246 4247 // node_modules/@base-ui/utils/visuallyHidden.mjs 4248 var visuallyHiddenBase = { 4249 clipPath: "inset(50%)", 4250 overflow: "hidden", 4251 whiteSpace: "nowrap", 4252 border: 0, 4253 padding: 0, 4254 width: 1, 4255 height: 1, 4256 margin: -1 4257 }; 4258 var visuallyHidden = { 4259 ...visuallyHiddenBase, 4260 position: "fixed", 4261 top: 0, 4262 left: 0 4263 }; 4264 var visuallyHiddenInput = { 4265 ...visuallyHiddenBase, 4266 position: "absolute" 4267 }; 4268 4269 // node_modules/@base-ui/react/utils/FocusGuard.mjs 4270 var import_jsx_runtime37 = __toESM(require_jsx_runtime(), 1); 4271 var FocusGuard = /* @__PURE__ */ React19.forwardRef(function FocusGuard2(props, ref) { 4272 const [role, setRole] = React19.useState(); 4273 useIsoLayoutEffect(() => { 4274 if (parts_exports.screenReader.voiceOver && parts_exports.engine.webkit) { 4275 setRole("button"); 4276 } 4277 }, []); 4278 const restProps = { 4279 tabIndex: 0, 4280 // Role is only for VoiceOver 4281 role 4282 }; 4283 return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { 4284 ...props, 4285 ref, 4286 style: visuallyHidden, 4287 "aria-hidden": role ? void 0 : true, 4288 ...restProps, 4289 "data-base-ui-focus-guard": "" 4290 }); 4291 }); 4292 if (true) FocusGuard.displayName = "FocusGuard"; 4293 4294 // node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs 4295 var min = Math.min; 4296 var max = Math.max; 4297 var round = Math.round; 4298 var floor = Math.floor; 4299 var createCoords = (v2) => ({ 4300 x: v2, 4301 y: v2 4302 }); 4303 var oppositeSideMap = { 4304 left: "right", 4305 right: "left", 4306 bottom: "top", 4307 top: "bottom" 4308 }; 4309 function clamp(start, value, end) { 4310 return max(start, min(value, end)); 4311 } 4312 function evaluate(value, param) { 4313 return typeof value === "function" ? value(param) : value; 4314 } 4315 function getSide(placement) { 4316 return placement.split("-")[0]; 4317 } 4318 function getAlignment(placement) { 4319 return placement.split("-")[1]; 4320 } 4321 function getOppositeAxis(axis) { 4322 return axis === "x" ? "y" : "x"; 4323 } 4324 function getAxisLength(axis) { 4325 return axis === "y" ? "height" : "width"; 4326 } 4327 function getSideAxis(placement) { 4328 const firstChar = placement[0]; 4329 return firstChar === "t" || firstChar === "b" ? "y" : "x"; 4330 } 4331 function getAlignmentAxis(placement) { 4332 return getOppositeAxis(getSideAxis(placement)); 4333 } 4334 function getAlignmentSides(placement, rects, rtl) { 4335 if (rtl === void 0) { 4336 rtl = false; 4337 } 4338 const alignment = getAlignment(placement); 4339 const alignmentAxis = getAlignmentAxis(placement); 4340 const length = getAxisLength(alignmentAxis); 4341 let mainAlignmentSide = alignmentAxis === "x" ? alignment === (rtl ? "end" : "start") ? "right" : "left" : alignment === "start" ? "bottom" : "top"; 4342 if (rects.reference[length] > rects.floating[length]) { 4343 mainAlignmentSide = getOppositePlacement(mainAlignmentSide); 4344 } 4345 return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)]; 4346 } 4347 function getExpandedPlacements(placement) { 4348 const oppositePlacement = getOppositePlacement(placement); 4349 return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)]; 4350 } 4351 function getOppositeAlignmentPlacement(placement) { 4352 return placement.includes("start") ? placement.replace("start", "end") : placement.replace("end", "start"); 4353 } 4354 var lrPlacement = ["left", "right"]; 4355 var rlPlacement = ["right", "left"]; 4356 var tbPlacement = ["top", "bottom"]; 4357 var btPlacement = ["bottom", "top"]; 4358 function getSideList(side, isStart, rtl) { 4359 switch (side) { 4360 case "top": 4361 case "bottom": 4362 if (rtl) return isStart ? rlPlacement : lrPlacement; 4363 return isStart ? lrPlacement : rlPlacement; 4364 case "left": 4365 case "right": 4366 return isStart ? tbPlacement : btPlacement; 4367 default: 4368 return []; 4369 } 4370 } 4371 function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) { 4372 const alignment = getAlignment(placement); 4373 let list = getSideList(getSide(placement), direction === "start", rtl); 4374 if (alignment) { 4375 list = list.map((side) => side + "-" + alignment); 4376 if (flipAlignment) { 4377 list = list.concat(list.map(getOppositeAlignmentPlacement)); 4378 } 4379 } 4380 return list; 4381 } 4382 function getOppositePlacement(placement) { 4383 const side = getSide(placement); 4384 return oppositeSideMap[side] + placement.slice(side.length); 4385 } 4386 function expandPaddingObject(padding) { 4387 var _padding$top, _padding$right, _padding$bottom, _padding$left; 4388 return { 4389 top: (_padding$top = padding.top) != null ? _padding$top : 0, 4390 right: (_padding$right = padding.right) != null ? _padding$right : 0, 4391 bottom: (_padding$bottom = padding.bottom) != null ? _padding$bottom : 0, 4392 left: (_padding$left = padding.left) != null ? _padding$left : 0 4393 }; 4394 } 4395 function getPaddingObject(padding) { 4396 return typeof padding !== "number" ? expandPaddingObject(padding) : { 4397 top: padding, 4398 right: padding, 4399 bottom: padding, 4400 left: padding 4401 }; 4402 } 4403 function rectToClientRect(rect) { 4404 const { 4405 x: x2, 4406 y: y2, 4407 width, 4408 height 4409 } = rect; 4410 return { 4411 width, 4412 height, 4413 top: y2, 4414 left: x2, 4415 right: x2 + width, 4416 bottom: y2 + height, 4417 x: x2, 4418 y: y2 4419 }; 4420 } 4421 4422 // node_modules/@base-ui/react/floating-ui-react/utils/composite.mjs 4423 function isIndexOutOfListBounds(list, index2) { 4424 return index2 < 0 || index2 >= list.length; 4425 } 4426 function getMinListIndex(listRef, disabledIndices) { 4427 return findNonDisabledListIndex(listRef.current, { 4428 disabledIndices 4429 }); 4430 } 4431 function getMaxListIndex(listRef, disabledIndices) { 4432 return findNonDisabledListIndex(listRef.current, { 4433 decrement: true, 4434 startingIndex: listRef.current.length, 4435 disabledIndices 4436 }); 4437 } 4438 function findNonDisabledListIndex(list, { 4439 startingIndex = -1, 4440 decrement = false, 4441 disabledIndices, 4442 amount = 1 4443 } = {}) { 4444 let index2 = startingIndex; 4445 do { 4446 index2 += decrement ? -amount : amount; 4447 } while (index2 >= 0 && index2 <= list.length - 1 && isListIndexDisabled(list, index2, disabledIndices)); 4448 return index2; 4449 } 4450 function isListIndexDisabled(list, index2, disabledIndices) { 4451 const isExplicitlyDisabled = typeof disabledIndices === "function" ? disabledIndices(index2) : disabledIndices?.includes(index2) ?? false; 4452 if (isExplicitlyDisabled) { 4453 return true; 4454 } 4455 const element = list[index2]; 4456 if (!element) { 4457 return false; 4458 } 4459 if (!isElementVisible(element)) { 4460 return true; 4461 } 4462 if (element.matches(":disabled")) { 4463 return true; 4464 } 4465 return !disabledIndices && (element.hasAttribute("disabled") || element.getAttribute("aria-disabled") === "true"); 4466 } 4467 function isHiddenByStyles(styles) { 4468 return styles.visibility === "hidden" || styles.visibility === "collapse"; 4469 } 4470 function isElementVisible(element, styles = element ? getComputedStyle2(element) : null) { 4471 if (!element || !element.isConnected || !styles || isHiddenByStyles(styles)) { 4472 return false; 4473 } 4474 if (typeof element.checkVisibility === "function") { 4475 return element.checkVisibility(); 4476 } 4477 return styles.display !== "none" && styles.display !== "contents"; 4478 } 4479 4480 // node_modules/@base-ui/react/floating-ui-react/utils/tabbable.mjs 4481 var CANDIDATE_SELECTOR = 'a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable="false"]),audio[controls],video[controls]'; 4482 function getParentElement(element) { 4483 const assignedSlot = element.assignedSlot; 4484 if (assignedSlot) { 4485 return assignedSlot; 4486 } 4487 if (element.parentElement) { 4488 return element.parentElement; 4489 } 4490 const rootNode = element.getRootNode(); 4491 return isShadowRoot(rootNode) ? rootNode.host : null; 4492 } 4493 function getDetailsSummary(details) { 4494 for (const child of Array.from(details.children)) { 4495 if (getNodeName(child) === "summary") { 4496 return child; 4497 } 4498 } 4499 return null; 4500 } 4501 function isWithinOpenDetailsSummary(element, details) { 4502 const summary = getDetailsSummary(details); 4503 return !!summary && (element === summary || contains(summary, element)); 4504 } 4505 function isFocusableCandidate(element) { 4506 const nodeName = element ? getNodeName(element) : ""; 4507 return element != null && element.matches(CANDIDATE_SELECTOR) && (nodeName !== "summary" || element.parentElement != null && getNodeName(element.parentElement) === "details" && getDetailsSummary(element.parentElement) === element) && (nodeName !== "details" || getDetailsSummary(element) == null) && (nodeName !== "input" || element.type !== "hidden"); 4508 } 4509 function isFocusableElement(element) { 4510 if (!isFocusableCandidate(element) || !element.isConnected || element.matches(":disabled")) { 4511 return false; 4512 } 4513 for (let current = element; current; current = getParentElement(current)) { 4514 const isAncestor = current !== element; 4515 const isSlot = getNodeName(current) === "slot"; 4516 if (current.hasAttribute("inert")) { 4517 return false; 4518 } 4519 if (isAncestor && getNodeName(current) === "details" && !current.open && !isWithinOpenDetailsSummary(element, current) || current.hasAttribute("hidden") || !isSlot && !isVisibleInTabbableTree(current, isAncestor)) { 4520 return false; 4521 } 4522 } 4523 return true; 4524 } 4525 function isVisibleInTabbableTree(element, isAncestor) { 4526 const styles = getComputedStyle2(element); 4527 if (!isAncestor) { 4528 return isElementVisible(element, styles); 4529 } 4530 return styles.display !== "none"; 4531 } 4532 function getTabIndex(element) { 4533 const tabIndex = element.tabIndex; 4534 if (tabIndex < 0) { 4535 const nodeName = getNodeName(element); 4536 if (nodeName === "details" || nodeName === "audio" || nodeName === "video" || isHTMLElement(element) && element.isContentEditable) { 4537 return 0; 4538 } 4539 } 4540 return tabIndex; 4541 } 4542 function getNamedRadioInput(element) { 4543 if (getNodeName(element) !== "input") { 4544 return null; 4545 } 4546 const input = element; 4547 return input.type === "radio" && input.name !== "" ? input : null; 4548 } 4549 function isTabbableRadio(element, candidates) { 4550 const input = getNamedRadioInput(element); 4551 if (!input) { 4552 return true; 4553 } 4554 const checkedRadio = candidates.find((candidate) => { 4555 const radio = getNamedRadioInput(candidate); 4556 return radio?.name === input.name && radio.form === input.form && radio.checked; 4557 }); 4558 if (checkedRadio) { 4559 return checkedRadio === input; 4560 } 4561 return candidates.find((candidate) => { 4562 const radio = getNamedRadioInput(candidate); 4563 return radio?.name === input.name && radio.form === input.form; 4564 }) === input; 4565 } 4566 function getComposedChildren(container) { 4567 if (isHTMLElement(container) && getNodeName(container) === "slot") { 4568 const assignedElements = container.assignedElements({ 4569 flatten: true 4570 }); 4571 if (assignedElements.length > 0) { 4572 return assignedElements; 4573 } 4574 } 4575 if (isHTMLElement(container) && container.shadowRoot) { 4576 return Array.from(container.shadowRoot.children); 4577 } 4578 return Array.from(container.children); 4579 } 4580 function appendCandidates(container, list) { 4581 getComposedChildren(container).forEach((child) => { 4582 if (isFocusableCandidate(child)) { 4583 list.push(child); 4584 } 4585 appendCandidates(child, list); 4586 }); 4587 } 4588 function appendMatchingElements(container, selector2, list) { 4589 getComposedChildren(container).forEach((child) => { 4590 if (isHTMLElement(child) && child.matches(selector2)) { 4591 list.push(child); 4592 } 4593 appendMatchingElements(child, selector2, list); 4594 }); 4595 } 4596 function isTabbable(element) { 4597 return isFocusableElement(element) && getTabIndex(element) >= 0; 4598 } 4599 function focusable(container) { 4600 const candidates = []; 4601 appendCandidates(container, candidates); 4602 return candidates.filter(isFocusableElement); 4603 } 4604 function tabbable(container) { 4605 const candidates = focusable(container); 4606 return candidates.filter((element) => getTabIndex(element) >= 0 && isTabbableRadio(element, candidates)); 4607 } 4608 function getTabbableIn(container, dir) { 4609 const list = tabbable(container); 4610 const len = list.length; 4611 if (len === 0) { 4612 return void 0; 4613 } 4614 const active = activeElement(ownerDocument(container)); 4615 const index2 = list.indexOf(active); 4616 const nextIndex = index2 === -1 ? dir === 1 ? 0 : len - 1 : index2 + dir; 4617 return list[nextIndex]; 4618 } 4619 function getNextTabbable(referenceElement) { 4620 return getTabbableIn(ownerDocument(referenceElement).body, 1) || referenceElement; 4621 } 4622 function getPreviousTabbable(referenceElement) { 4623 return getTabbableIn(ownerDocument(referenceElement).body, -1) || referenceElement; 4624 } 4625 function getTabbableNearElement(referenceElement, dir) { 4626 if (!referenceElement) { 4627 return null; 4628 } 4629 const list = tabbable(ownerDocument(referenceElement).body); 4630 const elementCount = list.length; 4631 if (elementCount === 0) { 4632 return null; 4633 } 4634 const index2 = list.indexOf(referenceElement); 4635 if (index2 === -1) { 4636 return null; 4637 } 4638 const nextIndex = (index2 + dir + elementCount) % elementCount; 4639 return list[nextIndex]; 4640 } 4641 function getTabbableAfterElement(referenceElement) { 4642 return getTabbableNearElement(referenceElement, 1); 4643 } 4644 function getTabbableBeforeElement(referenceElement) { 4645 return getTabbableNearElement(referenceElement, -1); 4646 } 4647 function isOutsideEvent(event, container) { 4648 const containerElement = container || event.currentTarget; 4649 const relatedTarget = event.relatedTarget; 4650 return !relatedTarget || !contains(containerElement, relatedTarget); 4651 } 4652 function disableFocusInside(container) { 4653 const tabbableElements = tabbable(container); 4654 tabbableElements.forEach((element) => { 4655 element.dataset.tabindex = element.getAttribute("tabindex") || ""; 4656 element.setAttribute("tabindex", "-1"); 4657 }); 4658 } 4659 function enableFocusInside(container) { 4660 const elements = []; 4661 appendMatchingElements(container, "[data-tabindex]", elements); 4662 elements.forEach((element) => { 4663 const tabindex = element.dataset.tabindex; 4664 delete element.dataset.tabindex; 4665 if (tabindex) { 4666 element.setAttribute("tabindex", tabindex); 4667 } else { 4668 element.removeAttribute("tabindex"); 4669 } 4670 }); 4671 } 4672 4673 // node_modules/@base-ui/react/floating-ui-react/utils/nodes.mjs 4674 function getNodeChildren(nodes, id, onlyOpenChildren = true) { 4675 const directChildren = nodes.filter((node) => node.parentId === id); 4676 return directChildren.flatMap((child) => [...!onlyOpenChildren || child.context?.open ? [child] : [], ...getNodeChildren(nodes, child.id, onlyOpenChildren)]); 4677 } 4678 function getNodeAncestors(nodes, id) { 4679 let allAncestors = []; 4680 let currentParentId = nodes.find((node) => node.id === id)?.parentId; 4681 while (currentParentId) { 4682 const currentNode = nodes.find((node) => node.id === currentParentId); 4683 currentParentId = currentNode?.parentId; 4684 if (currentNode) { 4685 allAncestors = allAncestors.concat(currentNode); 4686 } 4687 } 4688 return allAncestors; 4689 } 4690 4691 // node_modules/@base-ui/react/floating-ui-react/utils/createAttribute.mjs 4692 function createAttribute(name) { 4693 return `data-base-ui-$name}`; 4694 } 4695 4696 // node_modules/@base-ui/react/floating-ui-react/utils/enqueueFocus.mjs 4697 var rafId = 0; 4698 function enqueueFocus(el, options = {}) { 4699 const { 4700 preventScroll = false, 4701 sync: sync2 = false, 4702 shouldFocus 4703 } = options; 4704 cancelAnimationFrame(rafId); 4705 function exec() { 4706 if (shouldFocus && !shouldFocus()) { 4707 return; 4708 } 4709 el?.focus({ 4710 preventScroll 4711 }); 4712 } 4713 if (sync2) { 4714 exec(); 4715 return NOOP; 4716 } 4717 const currentRafId = requestAnimationFrame(exec); 4718 rafId = currentRafId; 4719 return () => { 4720 if (rafId === currentRafId) { 4721 cancelAnimationFrame(currentRafId); 4722 rafId = 0; 4723 } 4724 }; 4725 } 4726 4727 // node_modules/@base-ui/react/floating-ui-react/utils/markOthers.mjs 4728 var counters = { 4729 inert: /* @__PURE__ */ new WeakMap(), 4730 "aria-hidden": /* @__PURE__ */ new WeakMap() 4731 }; 4732 var markerName = "data-base-ui-inert"; 4733 var uncontrolledElementsSets = { 4734 inert: /* @__PURE__ */ new WeakSet(), 4735 "aria-hidden": /* @__PURE__ */ new WeakSet() 4736 }; 4737 var markerCounterMap = /* @__PURE__ */ new WeakMap(); 4738 var lockCount = 0; 4739 function getUncontrolledElementsSet(controlAttribute) { 4740 return uncontrolledElementsSets[controlAttribute]; 4741 } 4742 function unwrapHost(node) { 4743 if (!node) { 4744 return null; 4745 } 4746 return isShadowRoot(node) ? node.host : unwrapHost(node.parentNode); 4747 } 4748 var correctElements = (parent, targets) => targets.map((target) => { 4749 if (parent.contains(target)) { 4750 return target; 4751 } 4752 const correctedTarget = unwrapHost(target); 4753 if (parent.contains(correctedTarget)) { 4754 return correctedTarget; 4755 } 4756 return null; 4757 }).filter((x2) => x2 != null); 4758 var buildKeepSet = (targets) => { 4759 const keep = /* @__PURE__ */ new Set(); 4760 targets.forEach((target) => { 4761 let node = target; 4762 while (node && !keep.has(node)) { 4763 keep.add(node); 4764 node = node.parentNode; 4765 } 4766 }); 4767 return keep; 4768 }; 4769 var collectOutsideElements = (root, keepElements, stopElements) => { 4770 const outside = []; 4771 const walk = (parent) => { 4772 if (!parent || stopElements.has(parent)) { 4773 return; 4774 } 4775 Array.from(parent.children).forEach((node) => { 4776 if (getNodeName(node) === "script") { 4777 return; 4778 } 4779 if (keepElements.has(node)) { 4780 walk(node); 4781 } else { 4782 outside.push(node); 4783 } 4784 }); 4785 }; 4786 walk(root); 4787 return outside; 4788 }; 4789 function applyAttributeToOthers(uncorrectedAvoidElements, body, ariaHidden, inert, { 4790 mark = true 4791 }) { 4792 let controlAttribute = null; 4793 if (inert) { 4794 controlAttribute = "inert"; 4795 } else if (ariaHidden) { 4796 controlAttribute = "aria-hidden"; 4797 } 4798 let counterMap = null; 4799 let uncontrolledElementsSet = null; 4800 const avoidElements = correctElements(body, uncorrectedAvoidElements); 4801 const markerTargets = mark ? collectOutsideElements(body, buildKeepSet(avoidElements), new Set(avoidElements)) : []; 4802 const hiddenElements = []; 4803 const markedElements = []; 4804 if (controlAttribute) { 4805 const map = counters[controlAttribute]; 4806 const currentUncontrolledElementsSet = getUncontrolledElementsSet(controlAttribute); 4807 uncontrolledElementsSet = currentUncontrolledElementsSet; 4808 counterMap = map; 4809 const ariaLiveElements = correctElements(body, Array.from(body.querySelectorAll("[aria-live]"))); 4810 const controlElements = avoidElements.concat(ariaLiveElements); 4811 const controlTargets = collectOutsideElements(body, buildKeepSet(controlElements), new Set(controlElements)); 4812 controlTargets.forEach((node) => { 4813 const attr2 = node.getAttribute(controlAttribute); 4814 const alreadyHidden = attr2 !== null && attr2 !== "false"; 4815 const counterValue = (map.get(node) || 0) + 1; 4816 map.set(node, counterValue); 4817 hiddenElements.push(node); 4818 if (counterValue === 1 && alreadyHidden) { 4819 currentUncontrolledElementsSet.add(node); 4820 } 4821 if (!alreadyHidden) { 4822 node.setAttribute(controlAttribute, controlAttribute === "inert" ? "" : "true"); 4823 } 4824 }); 4825 } 4826 if (mark) { 4827 markerTargets.forEach((node) => { 4828 const markerValue = (markerCounterMap.get(node) || 0) + 1; 4829 markerCounterMap.set(node, markerValue); 4830 markedElements.push(node); 4831 if (markerValue === 1) { 4832 node.setAttribute(markerName, ""); 4833 } 4834 }); 4835 } 4836 lockCount += 1; 4837 return () => { 4838 if (counterMap) { 4839 hiddenElements.forEach((element) => { 4840 const currentCounterValue = counterMap.get(element) || 0; 4841 const counterValue = currentCounterValue - 1; 4842 counterMap.set(element, counterValue); 4843 if (!counterValue) { 4844 if (!uncontrolledElementsSet?.has(element) && controlAttribute) { 4845 element.removeAttribute(controlAttribute); 4846 } 4847 uncontrolledElementsSet?.delete(element); 4848 } 4849 }); 4850 } 4851 if (mark) { 4852 markedElements.forEach((element) => { 4853 const markerValue = (markerCounterMap.get(element) || 0) - 1; 4854 markerCounterMap.set(element, markerValue); 4855 if (!markerValue) { 4856 element.removeAttribute(markerName); 4857 } 4858 }); 4859 } 4860 lockCount -= 1; 4861 if (!lockCount) { 4862 counters.inert = /* @__PURE__ */ new WeakMap(); 4863 counters["aria-hidden"] = /* @__PURE__ */ new WeakMap(); 4864 uncontrolledElementsSets.inert = /* @__PURE__ */ new WeakSet(); 4865 uncontrolledElementsSets["aria-hidden"] = /* @__PURE__ */ new WeakSet(); 4866 markerCounterMap = /* @__PURE__ */ new WeakMap(); 4867 } 4868 }; 4869 } 4870 function markOthers(avoidElements, options = {}) { 4871 const { 4872 ariaHidden = false, 4873 inert = false, 4874 mark = true 4875 } = options; 4876 const body = ownerDocument(avoidElements[0]).body; 4877 return applyAttributeToOthers(avoidElements, body, ariaHidden, inert, { 4878 mark 4879 }); 4880 } 4881 4882 // node_modules/@base-ui/react/floating-ui-react/components/FloatingPortal.mjs 4883 var React20 = __toESM(require_react(), 1); 4884 var ReactDOM2 = __toESM(require_react_dom(), 1); 4885 4886 // node_modules/@base-ui/react/internals/constants.mjs 4887 var TYPEAHEAD_RESET_MS = 500; 4888 var PATIENT_CLICK_THRESHOLD = 500; 4889 var DISABLED_TRANSITIONS_STYLE = { 4890 style: { 4891 transition: "none" 4892 } 4893 }; 4894 var CLICK_TRIGGER_IDENTIFIER = "data-base-ui-click-trigger"; 4895 var BASE_UI_SWIPE_IGNORE_ATTRIBUTE = "data-base-ui-swipe-ignore"; 4896 var LEGACY_SWIPE_IGNORE_ATTRIBUTE = "data-swipe-ignore"; 4897 var BASE_UI_SWIPE_IGNORE_SELECTOR = `[$BASE_UI_SWIPE_IGNORE_ATTRIBUTE}]`; 4898 var LEGACY_SWIPE_IGNORE_SELECTOR = `[$LEGACY_SWIPE_IGNORE_ATTRIBUTE}]`; 4899 var DROPDOWN_COLLISION_AVOIDANCE = { 4900 fallbackAxisSide: "none" 4901 }; 4902 var POPUP_COLLISION_AVOIDANCE = { 4903 fallbackAxisSide: "end" 4904 }; 4905 var ownerVisuallyHidden = { 4906 clipPath: "inset(50%)", 4907 position: "fixed", 4908 top: 0, 4909 left: 0 4910 }; 4911 4912 // node_modules/@base-ui/react/floating-ui-react/components/FloatingPortal.mjs 4913 var import_jsx_runtime38 = __toESM(require_jsx_runtime(), 1); 4914 var PortalContext = /* @__PURE__ */ React20.createContext(null); 4915 if (true) PortalContext.displayName = "PortalContext"; 4916 var usePortalContext = () => React20.useContext(PortalContext); 4917 var attr = createAttribute("portal"); 4918 function useFloatingPortalNode(props = {}) { 4919 const { 4920 ref, 4921 container: containerProp, 4922 componentProps = EMPTY_OBJECT, 4923 elementProps 4924 } = props; 4925 const uniqueId = useId(); 4926 const portalContext = usePortalContext(); 4927 const parentPortalNode = portalContext?.portalNode; 4928 const [containerElement, setContainerElement] = React20.useState(null); 4929 const [portalNode, setPortalNode] = React20.useState(null); 4930 const setPortalNodeRef = useStableCallback((node) => { 4931 if (node !== null) { 4932 setPortalNode(node); 4933 } 4934 }); 4935 const containerRef = React20.useRef(null); 4936 useIsoLayoutEffect(() => { 4937 if (containerProp === null) { 4938 if (containerRef.current) { 4939 containerRef.current = null; 4940 setPortalNode(null); 4941 setContainerElement(null); 4942 } 4943 return; 4944 } 4945 const resolvedContainer = (containerProp && (isNode(containerProp) ? containerProp : containerProp.current)) ?? parentPortalNode ?? document.body; 4946 if (resolvedContainer == null) { 4947 if (containerRef.current) { 4948 containerRef.current = null; 4949 setPortalNode(null); 4950 setContainerElement(null); 4951 } 4952 return; 4953 } 4954 if (containerRef.current !== resolvedContainer) { 4955 containerRef.current = resolvedContainer; 4956 setPortalNode(null); 4957 setContainerElement(resolvedContainer); 4958 } 4959 }, [containerProp, parentPortalNode]); 4960 const portalElement = useRenderElement("div", componentProps, { 4961 ref: [ref, setPortalNodeRef], 4962 props: [{ 4963 id: uniqueId, 4964 [attr]: "" 4965 }, elementProps] 4966 }); 4967 const portalSubtree = containerElement && portalElement ? /* @__PURE__ */ ReactDOM2.createPortal(portalElement, containerElement) : null; 4968 return { 4969 node: portalNode, 4970 // `id` and `render` props can override or remove the generated ID. Use the exact 4971 // rendered value so `aria-owns` never points at an ID absent from the DOM. 4972 nodeId: /* @__PURE__ */ React20.isValidElement(portalElement) ? portalElement.props.id : void 0, 4973 subtree: portalSubtree 4974 }; 4975 } 4976 var FloatingPortal = /* @__PURE__ */ React20.forwardRef(function FloatingPortal2(componentProps, forwardedRef) { 4977 const { 4978 render: render4, 4979 className, 4980 style, 4981 children, 4982 container, 4983 ...elementProps 4984 } = componentProps; 4985 const { 4986 node: portalNode, 4987 nodeId: portalNodeId, 4988 subtree: portalSubtree 4989 } = useFloatingPortalNode({ 4990 container, 4991 ref: forwardedRef, 4992 componentProps, 4993 elementProps 4994 }); 4995 const beforeOutsideRef = React20.useRef(null); 4996 const afterOutsideRef = React20.useRef(null); 4997 const beforeInsideRef = React20.useRef(null); 4998 const afterInsideRef = React20.useRef(null); 4999 const [focusManagerState, setFocusManagerState] = React20.useState(null); 5000 const focusInsideDisabledRef = React20.useRef(false); 5001 const modal = focusManagerState?.modal; 5002 const open = focusManagerState?.open; 5003 const shouldRenderGuards = !!focusManagerState && !focusManagerState.modal && focusManagerState.open && !!portalNode; 5004 React20.useEffect(() => { 5005 if (!portalNode || modal) { 5006 return void 0; 5007 } 5008 function onFocus(event) { 5009 if (portalNode && event.relatedTarget && isOutsideEvent(event)) { 5010 if (event.type === "focusin") { 5011 if (focusInsideDisabledRef.current) { 5012 enableFocusInside(portalNode); 5013 focusInsideDisabledRef.current = false; 5014 } 5015 } else { 5016 disableFocusInside(portalNode); 5017 focusInsideDisabledRef.current = true; 5018 } 5019 } 5020 } 5021 return mergeCleanups(addEventListener(portalNode, "focusin", onFocus, true), addEventListener(portalNode, "focusout", onFocus, true)); 5022 }, [portalNode, modal]); 5023 useIsoLayoutEffect(() => { 5024 if (!portalNode || open !== true || !focusInsideDisabledRef.current) { 5025 return; 5026 } 5027 enableFocusInside(portalNode); 5028 focusInsideDisabledRef.current = false; 5029 }, [open, portalNode]); 5030 const portalContextValue = React20.useMemo(() => ({ 5031 beforeOutsideRef, 5032 afterOutsideRef, 5033 beforeInsideRef, 5034 afterInsideRef, 5035 portalNode, 5036 setFocusManagerState 5037 }), [portalNode]); 5038 return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(React20.Fragment, { 5039 children: [portalSubtree, /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(PortalContext.Provider, { 5040 value: portalContextValue, 5041 children: [shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(FocusGuard, { 5042 "data-type": "outside", 5043 ref: beforeOutsideRef, 5044 onFocus: (event) => { 5045 if (isOutsideEvent(event, portalNode)) { 5046 beforeInsideRef.current?.focus(); 5047 } else { 5048 const domReference = focusManagerState ? focusManagerState.domReference : null; 5049 const prevTabbable = getPreviousTabbable(domReference); 5050 prevTabbable?.focus(); 5051 } 5052 } 5053 }), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { 5054 "aria-owns": portalNodeId, 5055 style: ownerVisuallyHidden 5056 }), portalNode && /* @__PURE__ */ ReactDOM2.createPortal(children, portalNode), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(FocusGuard, { 5057 "data-type": "outside", 5058 ref: afterOutsideRef, 5059 onFocus: (event) => { 5060 if (isOutsideEvent(event, portalNode)) { 5061 afterInsideRef.current?.focus(); 5062 } else { 5063 const domReference = focusManagerState ? focusManagerState.domReference : null; 5064 const nextTabbable = getNextTabbable(domReference); 5065 nextTabbable?.focus(); 5066 if (focusManagerState?.closeOnFocusOut) { 5067 focusManagerState?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.focusOut, event.nativeEvent)); 5068 } 5069 } 5070 } 5071 })] 5072 })] 5073 }); 5074 }); 5075 if (true) FloatingPortal.displayName = "FloatingPortal"; 5076 5077 // node_modules/@base-ui/react/floating-ui-react/components/FloatingTree.mjs 5078 var React21 = __toESM(require_react(), 1); 5079 5080 // node_modules/@base-ui/react/floating-ui-react/utils/createEventEmitter.mjs 5081 function createEventEmitter() { 5082 const map = /* @__PURE__ */ new Map(); 5083 return { 5084 emit(event, data) { 5085 map.get(event)?.forEach((listener) => listener(data)); 5086 }, 5087 on(event, listener) { 5088 if (!map.has(event)) { 5089 map.set(event, /* @__PURE__ */ new Set()); 5090 } 5091 map.get(event).add(listener); 5092 }, 5093 off(event, listener) { 5094 map.get(event)?.delete(listener); 5095 } 5096 }; 5097 } 5098 5099 // node_modules/@base-ui/react/floating-ui-react/components/FloatingTreeStore.mjs 5100 var FloatingTreeStore = class { 5101 nodesRef = { 5102 current: [] 5103 }; 5104 events = createEventEmitter(); 5105 addNode(node) { 5106 this.nodesRef.current.push(node); 5107 } 5108 removeNode(node) { 5109 const index2 = this.nodesRef.current.findIndex((n2) => n2 === node); 5110 if (index2 !== -1) { 5111 this.nodesRef.current.splice(index2, 1); 5112 } 5113 } 5114 }; 5115 5116 // node_modules/@base-ui/react/floating-ui-react/components/FloatingTree.mjs 5117 var import_jsx_runtime39 = __toESM(require_jsx_runtime(), 1); 5118 var FloatingNodeContext = /* @__PURE__ */ React21.createContext(null); 5119 if (true) FloatingNodeContext.displayName = "FloatingNodeContext"; 5120 var FloatingTreeContext = /* @__PURE__ */ React21.createContext(null); 5121 if (true) FloatingTreeContext.displayName = "FloatingTreeContext"; 5122 var useFloatingParentNodeId = () => React21.useContext(FloatingNodeContext)?.id || null; 5123 var useFloatingTree = (externalTree) => { 5124 const contextTree = React21.useContext(FloatingTreeContext); 5125 return externalTree ?? contextTree; 5126 }; 5127 function useFloatingNodeId(externalTree) { 5128 const id = useId(); 5129 const tree = useFloatingTree(externalTree); 5130 const parentId = useFloatingParentNodeId(); 5131 useIsoLayoutEffect(() => { 5132 if (!id) { 5133 return void 0; 5134 } 5135 const node = { 5136 id, 5137 parentId 5138 }; 5139 tree?.addNode(node); 5140 return () => { 5141 tree?.removeNode(node); 5142 }; 5143 }, [tree, id, parentId]); 5144 return id; 5145 } 5146 function FloatingNode(props) { 5147 const { 5148 children, 5149 id 5150 } = props; 5151 const parentId = useFloatingParentNodeId(); 5152 return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(FloatingNodeContext.Provider, { 5153 value: React21.useMemo(() => ({ 5154 id, 5155 parentId 5156 }), [id, parentId]), 5157 children 5158 }); 5159 } 5160 function FloatingTree(props) { 5161 const { 5162 children, 5163 externalTree 5164 } = props; 5165 const tree = useRefWithInit(() => externalTree ?? new FloatingTreeStore()).current; 5166 return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(FloatingTreeContext.Provider, { 5167 value: tree, 5168 children 5169 }); 5170 } 5171 5172 // node_modules/@base-ui/react/floating-ui-react/components/FloatingFocusManager.mjs 5173 var import_jsx_runtime40 = __toESM(require_jsx_runtime(), 1); 5174 function getEventType(event, lastInteractionType) { 5175 const win = getWindow(getTarget(event)); 5176 if (event instanceof win.KeyboardEvent) { 5177 return "keyboard"; 5178 } 5179 if (event instanceof win.FocusEvent) { 5180 return lastInteractionType || "keyboard"; 5181 } 5182 if ("pointerType" in event) { 5183 return event.pointerType || "keyboard"; 5184 } 5185 if ("touches" in event) { 5186 return "touch"; 5187 } 5188 if (event instanceof win.MouseEvent) { 5189 return lastInteractionType || (event.detail === 0 ? "keyboard" : "mouse"); 5190 } 5191 return ""; 5192 } 5193 var LIST_LIMIT = 20; 5194 var previouslyFocusedElements = []; 5195 function clearDisconnectedPreviouslyFocusedElements() { 5196 previouslyFocusedElements = previouslyFocusedElements.filter((entry) => { 5197 return entry.deref()?.isConnected; 5198 }); 5199 } 5200 function addPreviouslyFocusedElement(element) { 5201 clearDisconnectedPreviouslyFocusedElements(); 5202 if (element && getNodeName(element) !== "body") { 5203 previouslyFocusedElements.push(new WeakRef(element)); 5204 if (previouslyFocusedElements.length > LIST_LIMIT) { 5205 previouslyFocusedElements = previouslyFocusedElements.slice(-LIST_LIMIT); 5206 } 5207 } 5208 } 5209 function getPreviouslyFocusedElement() { 5210 clearDisconnectedPreviouslyFocusedElements(); 5211 return previouslyFocusedElements[previouslyFocusedElements.length - 1]?.deref(); 5212 } 5213 function getFirstTabbableElement(container) { 5214 if (!container) { 5215 return null; 5216 } 5217 if (isTabbable(container)) { 5218 return container; 5219 } 5220 return tabbable(container)[0] || container; 5221 } 5222 function handleTabIndex(floatingFocusElement) { 5223 if (floatingFocusElement.hasAttribute("tabindex") && !floatingFocusElement.hasAttribute("data-tabindex")) { 5224 return; 5225 } 5226 if (!floatingFocusElement.getAttribute("role")?.includes("dialog")) { 5227 return; 5228 } 5229 const focusableElements = focusable(floatingFocusElement); 5230 const tabbableContent = focusableElements.filter((element) => { 5231 const dataTabIndex = element.getAttribute("data-tabindex") || ""; 5232 return isTabbable(element) || element.hasAttribute("data-tabindex") && !dataTabIndex.startsWith("-"); 5233 }); 5234 const tabIndex = floatingFocusElement.getAttribute("tabindex"); 5235 if (tabbableContent.length === 0) { 5236 if (tabIndex !== "0") { 5237 floatingFocusElement.setAttribute("tabindex", "0"); 5238 floatingFocusElement.setAttribute("data-tabindex", "0"); 5239 } 5240 } else if (tabIndex !== "-1" || floatingFocusElement.hasAttribute("data-tabindex") && floatingFocusElement.getAttribute("data-tabindex") !== "-1") { 5241 floatingFocusElement.setAttribute("tabindex", "-1"); 5242 floatingFocusElement.setAttribute("data-tabindex", "-1"); 5243 } 5244 } 5245 function FloatingFocusManager(props) { 5246 const { 5247 context, 5248 children, 5249 disabled: disabled2 = false, 5250 initialFocus = true, 5251 returnFocus = true, 5252 restoreFocus = false, 5253 modal = true, 5254 closeOnFocusOut = true, 5255 openInteractionType = "", 5256 nextFocusableElement, 5257 previousFocusableElement, 5258 beforeContentFocusGuardRef, 5259 externalTree, 5260 getInsideElements 5261 } = props; 5262 const store = "rootStore" in context ? context.rootStore : context; 5263 const open = store.useState("open"); 5264 const domReference = store.useState("domReferenceElement"); 5265 const floating = store.useState("floatingElement"); 5266 const { 5267 events, 5268 dataRef 5269 } = store.context; 5270 const getNodeId = useStableCallback(() => dataRef.current.floatingContext?.nodeId); 5271 const ignoreInitialFocus = initialFocus === false; 5272 const isUntrappedTypeableCombobox = isTypeableCombobox(domReference) && ignoreInitialFocus; 5273 const initialFocusRef = useValueAsRef(initialFocus); 5274 const returnFocusRef = useValueAsRef(returnFocus); 5275 const openInteractionTypeRef = useValueAsRef(openInteractionType); 5276 const openRef = useValueAsRef(open); 5277 const tree = useFloatingTree(externalTree); 5278 const portalContext = usePortalContext(); 5279 const preventReturnFocusRef = React22.useRef(false); 5280 const isPointerDownRef = React22.useRef(false); 5281 const pointerDownOutsideRef = React22.useRef(false); 5282 const lastFocusedTabbableRef = React22.useRef(null); 5283 const closeTypeRef = React22.useRef(""); 5284 const lastInteractionTypeRef = React22.useRef(""); 5285 const beforeGuardRef = React22.useRef(null); 5286 const afterGuardRef = React22.useRef(null); 5287 const mergedBeforeGuardRef = useMergedRefs(beforeGuardRef, beforeContentFocusGuardRef, portalContext?.beforeInsideRef); 5288 const mergedAfterGuardRef = useMergedRefs(afterGuardRef, portalContext?.afterInsideRef); 5289 const blurTimeout = useTimeout(); 5290 const pointerDownTimeout = useTimeout(); 5291 const restoreFocusFrame = useAnimationFrame(); 5292 const isInsidePortal = portalContext != null; 5293 const floatingFocusElement = getFloatingFocusElement(floating); 5294 const getTabbableContent = useStableCallback((container = floatingFocusElement) => { 5295 return container ? tabbable(container) : []; 5296 }); 5297 const getResolvedInsideElements = useStableCallback(() => getInsideElements?.().filter((element) => element != null) ?? []); 5298 React22.useEffect(() => { 5299 if (disabled2 || !modal) { 5300 return void 0; 5301 } 5302 function onKeyDown(event) { 5303 if (event.key === "Tab") { 5304 if (contains(floatingFocusElement, activeElement(ownerDocument(floatingFocusElement))) && getTabbableContent().length === 0 && !isUntrappedTypeableCombobox) { 5305 stopEvent(event); 5306 } 5307 } 5308 } 5309 const doc = ownerDocument(floatingFocusElement); 5310 return addEventListener(doc, "keydown", onKeyDown); 5311 }, [disabled2, floatingFocusElement, modal, isUntrappedTypeableCombobox, getTabbableContent]); 5312 React22.useEffect(() => { 5313 if (disabled2 || !open) { 5314 return void 0; 5315 } 5316 const doc = ownerDocument(floatingFocusElement); 5317 function clearPointerDownOutside() { 5318 pointerDownOutsideRef.current = false; 5319 } 5320 function onPointerDown(event) { 5321 const target = getTarget(event); 5322 const insideElements = getResolvedInsideElements(); 5323 const pointerTargetInside = contains(floating, target) || contains(domReference, target) || contains(portalContext?.portalNode, target) || insideElements.some((element) => element === target || contains(element, target)); 5324 pointerDownOutsideRef.current = !pointerTargetInside; 5325 lastInteractionTypeRef.current = event.pointerType || "keyboard"; 5326 if (target?.closest(`[$CLICK_TRIGGER_IDENTIFIER}]`)) { 5327 isPointerDownRef.current = true; 5328 pointerDownTimeout.start(0, () => { 5329 isPointerDownRef.current = false; 5330 }); 5331 } 5332 } 5333 function onKeyDown() { 5334 lastInteractionTypeRef.current = "keyboard"; 5335 } 5336 return mergeCleanups( 5337 addEventListener(doc, "pointerdown", onPointerDown, true), 5338 addEventListener(doc, "pointerup", clearPointerDownOutside, true), 5339 addEventListener(doc, "pointercancel", clearPointerDownOutside, true), 5340 addEventListener(doc, "keydown", onKeyDown, true), 5341 // Avoid a stale `true` leaking into the next open (e.g. keep-mounted popups) 5342 // if the popup dismissed between pointerdown and pointerup. 5343 clearPointerDownOutside 5344 ); 5345 }, [disabled2, floating, domReference, floatingFocusElement, open, portalContext, pointerDownTimeout, getResolvedInsideElements]); 5346 React22.useEffect(() => { 5347 if (disabled2 || !closeOnFocusOut) { 5348 return void 0; 5349 } 5350 const doc = ownerDocument(floatingFocusElement); 5351 function handlePointerDown() { 5352 isPointerDownRef.current = true; 5353 pointerDownTimeout.start(0, () => { 5354 isPointerDownRef.current = false; 5355 }); 5356 } 5357 function handleFocusIn(event) { 5358 const target = getTarget(event); 5359 if (isTabbable(target)) { 5360 lastFocusedTabbableRef.current = target; 5361 } 5362 } 5363 function handleFocusOutside(event) { 5364 const relatedTarget = event.relatedTarget; 5365 const currentTarget = event.currentTarget; 5366 const target = getTarget(event); 5367 if (modal && relatedTarget == null && target != null && contains(floating, target)) { 5368 addPreviouslyFocusedElement(target); 5369 } 5370 queueMicrotask(() => { 5371 const nodeId = getNodeId(); 5372 const triggers = store.context.triggerElements; 5373 const insideElements = getResolvedInsideElements(); 5374 const isRelatedFocusGuard = relatedTarget?.hasAttribute(createAttribute("focus-guard")) && [beforeGuardRef.current, afterGuardRef.current, portalContext?.beforeInsideRef.current, portalContext?.afterInsideRef.current, portalContext?.beforeOutsideRef.current, portalContext?.afterOutsideRef.current, resolveRef(previousFocusableElement), resolveRef(nextFocusableElement)].includes(relatedTarget); 5375 const movedToUnrelatedNode = !(contains(domReference, relatedTarget) || contains(floating, relatedTarget) || contains(relatedTarget, floating) || contains(portalContext?.portalNode, relatedTarget) || insideElements.some((element) => element === relatedTarget || contains(element, relatedTarget)) || triggers.hasMatchingElement((trigger) => contains(trigger, relatedTarget)) || isRelatedFocusGuard || tree && (getNodeChildren(tree.nodesRef.current, nodeId).find((node) => contains(node.context?.elements.floating, relatedTarget) || contains(node.context?.elements.domReference, relatedTarget)) || getNodeAncestors(tree.nodesRef.current, nodeId).find((node) => [node.context?.elements.floating, getFloatingFocusElement(node.context?.elements.floating)].includes(relatedTarget) || node.context?.elements.domReference === relatedTarget))); 5376 if (currentTarget === domReference && floatingFocusElement) { 5377 handleTabIndex(floatingFocusElement); 5378 } 5379 if (restoreFocus && currentTarget !== domReference && !isElementVisible(target) && activeElement(doc) === doc.body) { 5380 if (isHTMLElement(floatingFocusElement)) { 5381 floatingFocusElement.focus(); 5382 if (restoreFocus === "popup") { 5383 restoreFocusFrame.request(() => { 5384 floatingFocusElement.focus(); 5385 }); 5386 return; 5387 } 5388 } 5389 const tabbableContent = getTabbableContent(); 5390 const prevTabbable = lastFocusedTabbableRef.current; 5391 const nodeToFocus = (prevTabbable && tabbableContent.includes(prevTabbable) ? prevTabbable : null) || tabbableContent[tabbableContent.length - 1] || floatingFocusElement; 5392 if (isHTMLElement(nodeToFocus)) { 5393 nodeToFocus.focus(); 5394 } 5395 } 5396 if (dataRef.current.insideReactTree) { 5397 dataRef.current.insideReactTree = false; 5398 return; 5399 } 5400 if ((isUntrappedTypeableCombobox ? true : !modal) && relatedTarget && movedToUnrelatedNode && !isPointerDownRef.current && // Fix React 18 Strict Mode returnFocus due to double rendering. 5401 // For an "untrapped" typeable combobox (input role=combobox with 5402 // initialFocus=false), re-opening the popup and tabbing out should still close it even 5403 // when the previously focused element (e.g. the next tabbable outside the popup) is 5404 // focused again. Otherwise, the popup remains open on the second Tab sequence: 5405 // click input -> Tab (closes) -> click input -> Tab. 5406 // Allow closing when `isUntrappedTypeableCombobox` regardless of the previously focused element. 5407 (isUntrappedTypeableCombobox || relatedTarget !== getPreviouslyFocusedElement())) { 5408 preventReturnFocusRef.current = true; 5409 store.setOpen(false, createChangeEventDetails(reason_parts_exports.focusOut, event)); 5410 } 5411 }); 5412 } 5413 function markInsideReactTree() { 5414 if (pointerDownOutsideRef.current) { 5415 return; 5416 } 5417 dataRef.current.insideReactTree = true; 5418 blurTimeout.start(0, () => { 5419 dataRef.current.insideReactTree = false; 5420 }); 5421 } 5422 const domReferenceElement = isHTMLElement(domReference) ? domReference : null; 5423 if (!floating && !domReferenceElement) { 5424 return void 0; 5425 } 5426 return mergeCleanups(domReferenceElement && addEventListener(domReferenceElement, "focusout", handleFocusOutside), domReferenceElement && addEventListener(domReferenceElement, "pointerdown", handlePointerDown), floating && addEventListener(floating, "focusin", handleFocusIn), floating && addEventListener(floating, "focusout", handleFocusOutside), floating && portalContext && addEventListener(floating, "focusout", markInsideReactTree, true)); 5427 }, [disabled2, domReference, floating, floatingFocusElement, modal, tree, portalContext, store, closeOnFocusOut, restoreFocus, getTabbableContent, isUntrappedTypeableCombobox, getNodeId, dataRef, blurTimeout, pointerDownTimeout, restoreFocusFrame, nextFocusableElement, previousFocusableElement, getResolvedInsideElements]); 5428 React22.useEffect(() => { 5429 if (disabled2 || !floating || !open) { 5430 return void 0; 5431 } 5432 const portalNodes = Array.from(portalContext?.portalNode?.querySelectorAll(`[$createAttribute("portal")}]`) || []); 5433 const ancestors = tree ? getNodeAncestors(tree.nodesRef.current, getNodeId()) : []; 5434 const rootAncestorComboboxDomReference = ancestors.find((node) => isTypeableCombobox(node.context?.elements.domReference || null))?.context?.elements.domReference; 5435 const controlInsideElements = [floating, ...portalNodes, beforeGuardRef.current, afterGuardRef.current, portalContext?.beforeOutsideRef.current, portalContext?.afterOutsideRef.current, ...getResolvedInsideElements()]; 5436 const insideElements = [...controlInsideElements, rootAncestorComboboxDomReference, resolveRef(previousFocusableElement), resolveRef(nextFocusableElement), isUntrappedTypeableCombobox ? domReference : null].filter((x2) => x2 != null); 5437 const ariaHiddenCleanup = markOthers(insideElements, { 5438 ariaHidden: modal || isUntrappedTypeableCombobox, 5439 mark: false 5440 }); 5441 const markerInsideElements = [floating, ...portalNodes].filter((x2) => x2 != null); 5442 const markerCleanup = markOthers(markerInsideElements); 5443 return () => { 5444 markerCleanup(); 5445 ariaHiddenCleanup(); 5446 }; 5447 }, [open, disabled2, domReference, floating, modal, portalContext, isUntrappedTypeableCombobox, tree, getNodeId, nextFocusableElement, previousFocusableElement, getResolvedInsideElements]); 5448 useIsoLayoutEffect(() => { 5449 if (!open || disabled2 || !isHTMLElement(floatingFocusElement)) { 5450 return; 5451 } 5452 closeTypeRef.current = ""; 5453 lastInteractionTypeRef.current = ""; 5454 const doc = ownerDocument(floatingFocusElement); 5455 const previouslyFocusedElement = activeElement(doc); 5456 queueMicrotask(() => { 5457 const initialFocusValueOrFn = initialFocusRef.current; 5458 const resolvedInitialFocus = typeof initialFocusValueOrFn === "function" ? initialFocusValueOrFn(openInteractionTypeRef.current || "") : initialFocusValueOrFn; 5459 if (resolvedInitialFocus === void 0 || resolvedInitialFocus === false) { 5460 return; 5461 } 5462 const focusAlreadyInsideFloatingEl = contains(floatingFocusElement, previouslyFocusedElement); 5463 if (focusAlreadyInsideFloatingEl) { 5464 return; 5465 } 5466 let focusableElements = null; 5467 const getDefaultFocusElement = () => { 5468 if (focusableElements == null) { 5469 focusableElements = getTabbableContent(floatingFocusElement); 5470 } 5471 return focusableElements[0] || floatingFocusElement; 5472 }; 5473 let elToFocus; 5474 if (resolvedInitialFocus === true || resolvedInitialFocus === null) { 5475 elToFocus = getDefaultFocusElement(); 5476 } else { 5477 elToFocus = resolveRef(resolvedInitialFocus); 5478 } 5479 elToFocus = elToFocus || getDefaultFocusElement(); 5480 const hadFocusInside = contains(floatingFocusElement, activeElement(doc)); 5481 void enqueueFocus(elToFocus, { 5482 preventScroll: elToFocus === floatingFocusElement, 5483 shouldFocus() { 5484 if (!openRef.current) { 5485 return false; 5486 } 5487 if (hadFocusInside) { 5488 return true; 5489 } 5490 const currentActiveElement = activeElement(doc); 5491 const focusMovedInside = currentActiveElement !== elToFocus && contains(floatingFocusElement, currentActiveElement); 5492 return !focusMovedInside; 5493 } 5494 }); 5495 }); 5496 }, [disabled2, open, floatingFocusElement, getTabbableContent, initialFocusRef, openInteractionTypeRef, openRef]); 5497 useIsoLayoutEffect(() => { 5498 if (disabled2 || !floatingFocusElement) { 5499 return void 0; 5500 } 5501 const doc = ownerDocument(floatingFocusElement); 5502 const elementFocusedBeforeOpen = activeElement(doc); 5503 const preferPreviousFocus = openInteractionTypeRef.current == null; 5504 addPreviouslyFocusedElement(elementFocusedBeforeOpen); 5505 function onOpenChangeLocal(details) { 5506 if (!details.open) { 5507 closeTypeRef.current = getEventType(details.nativeEvent, lastInteractionTypeRef.current); 5508 } 5509 if (details.reason === reason_parts_exports.triggerHover && details.nativeEvent.type === "mouseleave") { 5510 preventReturnFocusRef.current = true; 5511 } 5512 if (details.reason !== reason_parts_exports.outsidePress) { 5513 return; 5514 } 5515 if (details.nested) { 5516 preventReturnFocusRef.current = false; 5517 } else if (isVirtualClick(details.nativeEvent) || isVirtualPointerEvent(details.nativeEvent)) { 5518 preventReturnFocusRef.current = false; 5519 } else { 5520 let isPreventScrollSupported = false; 5521 ownerDocument(floatingFocusElement).createElement("div").focus({ 5522 get preventScroll() { 5523 isPreventScrollSupported = true; 5524 return false; 5525 } 5526 }); 5527 if (isPreventScrollSupported) { 5528 preventReturnFocusRef.current = false; 5529 } else { 5530 preventReturnFocusRef.current = true; 5531 } 5532 } 5533 } 5534 events.on("openchange", onOpenChangeLocal); 5535 function getReturnElement(closeType) { 5536 const returnFocusValueOrFn = returnFocusRef.current; 5537 let resolvedReturnFocusValue = typeof returnFocusValueOrFn === "function" ? returnFocusValueOrFn(closeType) : returnFocusValueOrFn; 5538 if (resolvedReturnFocusValue === void 0 || resolvedReturnFocusValue === false) { 5539 return null; 5540 } 5541 if (resolvedReturnFocusValue === null) { 5542 resolvedReturnFocusValue = true; 5543 } 5544 const referenceReturnElement = domReference?.isConnected ? domReference : null; 5545 const previousReturnElement = elementFocusedBeforeOpen?.isConnected && getNodeName(elementFocusedBeforeOpen) !== "body" ? elementFocusedBeforeOpen : null; 5546 let defaultReturnElement = preferPreviousFocus ? previousReturnElement || referenceReturnElement : referenceReturnElement || previousReturnElement; 5547 if (!defaultReturnElement) { 5548 defaultReturnElement = getPreviouslyFocusedElement() || null; 5549 } 5550 if (typeof resolvedReturnFocusValue === "boolean") { 5551 return defaultReturnElement; 5552 } 5553 return resolveRef(resolvedReturnFocusValue) || defaultReturnElement || null; 5554 } 5555 return () => { 5556 events.off("openchange", onOpenChangeLocal); 5557 const activeEl = activeElement(doc); 5558 const insideElements = getResolvedInsideElements(); 5559 const isFocusInsideFloatingTree = contains(floating, activeEl) || insideElements.some((element) => element === activeEl || contains(element, activeEl)) || tree && getNodeChildren(tree.nodesRef.current, getNodeId(), false).some((node) => contains(node.context?.elements.floating, activeEl)); 5560 const returnFocusValueOrFn = returnFocusRef.current; 5561 const closeType = closeTypeRef.current; 5562 const returnElement = getReturnElement(closeType); 5563 queueMicrotask(() => { 5564 const tabbableReturnElement = getFirstTabbableElement(returnElement); 5565 const hasExplicitReturnFocus = typeof returnFocusValueOrFn !== "boolean"; 5566 if (returnFocusValueOrFn && !preventReturnFocusRef.current && isHTMLElement(tabbableReturnElement) && // If the focus moved somewhere else after mount, avoid returning focus 5567 // since it likely entered a different element which should be 5568 // respected: https://github.com/floating-ui/floating-ui/issues/2607 5569 (!hasExplicitReturnFocus && tabbableReturnElement !== activeEl && activeEl !== doc.body ? isFocusInsideFloatingTree : true)) { 5570 const focusOptions = { 5571 preventScroll: true 5572 }; 5573 if (closeType === "keyboard") { 5574 focusOptions.focusVisible = true; 5575 } 5576 tabbableReturnElement.focus(focusOptions); 5577 } 5578 preventReturnFocusRef.current = false; 5579 }); 5580 }; 5581 }, [disabled2, floating, floatingFocusElement, returnFocusRef, openInteractionTypeRef, events, tree, domReference, getNodeId, getResolvedInsideElements]); 5582 useIsoLayoutEffect(() => { 5583 if (!parts_exports.engine.webkit || open || !floating) { 5584 return; 5585 } 5586 const activeEl = activeElement(ownerDocument(floating)); 5587 if (!isHTMLElement(activeEl) || !isTypeableElement(activeEl)) { 5588 return; 5589 } 5590 if (contains(floating, activeEl)) { 5591 activeEl.blur(); 5592 } 5593 }, [open, floating]); 5594 useIsoLayoutEffect(() => { 5595 if (disabled2 || !portalContext) { 5596 return void 0; 5597 } 5598 portalContext.setFocusManagerState({ 5599 modal, 5600 closeOnFocusOut, 5601 open, 5602 onOpenChange: store.setOpen, 5603 domReference 5604 }); 5605 return () => { 5606 portalContext.setFocusManagerState(null); 5607 }; 5608 }, [disabled2, portalContext, modal, open, store, closeOnFocusOut, domReference]); 5609 useIsoLayoutEffect(() => { 5610 if (disabled2 || !floatingFocusElement) { 5611 return void 0; 5612 } 5613 handleTabIndex(floatingFocusElement); 5614 return () => { 5615 queueMicrotask(clearDisconnectedPreviouslyFocusedElements); 5616 }; 5617 }, [disabled2, floatingFocusElement]); 5618 const shouldRenderGuards = !disabled2 && (modal ? !isUntrappedTypeableCombobox : true) && (isInsidePortal || modal); 5619 return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(React22.Fragment, { 5620 children: [shouldRenderGuards && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(FocusGuard, { 5621 "data-type": "inside", 5622 ref: mergedBeforeGuardRef, 5623 onFocus: (event) => { 5624 if (modal) { 5625 const els = getTabbableContent(); 5626 void enqueueFocus(els[els.length - 1]); 5627 } else if (portalContext?.portalNode) { 5628 preventReturnFocusRef.current = false; 5629 if (isOutsideEvent(event, portalContext.portalNode)) { 5630 const nextTabbable = getNextTabbable(domReference); 5631 nextTabbable?.focus(); 5632 } else { 5633 resolveRef(previousFocusableElement ?? portalContext.beforeOutsideRef)?.focus(); 5634 } 5635 } 5636 } 5637 }), children, shouldRenderGuards && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(FocusGuard, { 5638 "data-type": "inside", 5639 ref: mergedAfterGuardRef, 5640 onFocus: (event) => { 5641 if (modal) { 5642 void enqueueFocus(getTabbableContent()[0]); 5643 } else if (portalContext?.portalNode) { 5644 if (closeOnFocusOut) { 5645 preventReturnFocusRef.current = true; 5646 } 5647 if (isOutsideEvent(event, portalContext.portalNode)) { 5648 const prevTabbable = getPreviousTabbable(domReference); 5649 prevTabbable?.focus(); 5650 } else { 5651 resolveRef(nextFocusableElement ?? portalContext.afterOutsideRef)?.focus(); 5652 } 5653 } 5654 } 5655 })] 5656 }); 5657 } 5658 5659 // node_modules/@base-ui/react/floating-ui-react/hooks/useClick.mjs 5660 var React23 = __toESM(require_react(), 1); 5661 function useClick(context, props = {}) { 5662 const { 5663 enabled = true, 5664 event: eventOption = "click", 5665 toggle = true, 5666 ignoreMouse = false, 5667 stickIfOpen = true, 5668 touchOpenDelay = 0, 5669 reason = reason_parts_exports.triggerPress 5670 } = props; 5671 const store = "rootStore" in context ? context.rootStore : context; 5672 const dataRef = store.context.dataRef; 5673 const pointerTypeRef = React23.useRef(void 0); 5674 const frame = useAnimationFrame(); 5675 const touchOpenTimeout = useTimeout(); 5676 const reference = React23.useMemo(() => { 5677 function setOpenWithTouchDelay(nextOpen, nativeEvent, target, pointerType) { 5678 const details = createChangeEventDetails(reason, nativeEvent, target); 5679 if (nextOpen && pointerType === "touch" && touchOpenDelay > 0) { 5680 touchOpenTimeout.start(touchOpenDelay, () => { 5681 store.setOpen(true, details); 5682 }); 5683 } else { 5684 store.setOpen(nextOpen, details); 5685 } 5686 } 5687 function getNextOpen(open, currentTarget, isClickLikeOpenEvent2) { 5688 const openEvent = dataRef.current.openEvent; 5689 const hasClickedOnInactiveTrigger = store.select("domReferenceElement") !== currentTarget; 5690 if (open && hasClickedOnInactiveTrigger) { 5691 return true; 5692 } 5693 if (!open) { 5694 return true; 5695 } 5696 if (!toggle) { 5697 return true; 5698 } 5699 if (openEvent && stickIfOpen) { 5700 return !isClickLikeOpenEvent2(openEvent.type); 5701 } 5702 return false; 5703 } 5704 return { 5705 onPointerDown(event) { 5706 pointerTypeRef.current = isMouseLikePointerType(event.pointerType, true) && isVirtualPointerEvent(event.nativeEvent) ? "virtual" : event.pointerType; 5707 }, 5708 onMouseDown(event) { 5709 const pointerType = pointerTypeRef.current; 5710 const nativeEvent = event.nativeEvent; 5711 const open = store.select("open"); 5712 if (event.button !== 0 || eventOption === "click" || isMouseLikePointerType(pointerType, true) && ignoreMouse) { 5713 return; 5714 } 5715 const nextOpen = getNextOpen(open, event.currentTarget, (openEventType) => openEventType === "click" || openEventType === "mousedown"); 5716 const target = getTarget(nativeEvent); 5717 if (isTypeableElement(target)) { 5718 setOpenWithTouchDelay(nextOpen, nativeEvent, target, pointerType); 5719 return; 5720 } 5721 const eventCurrentTarget = event.currentTarget; 5722 frame.request(() => { 5723 setOpenWithTouchDelay(nextOpen, nativeEvent, eventCurrentTarget, pointerType); 5724 }); 5725 }, 5726 onClick(event) { 5727 if (eventOption === "mousedown-only") { 5728 return; 5729 } 5730 const pointerType = pointerTypeRef.current; 5731 if (eventOption === "mousedown" && pointerType) { 5732 pointerTypeRef.current = void 0; 5733 return; 5734 } 5735 if (isMouseLikePointerType(pointerType, true) && ignoreMouse) { 5736 return; 5737 } 5738 const open = store.select("open"); 5739 const nextOpen = getNextOpen(open, event.currentTarget, (openEventType) => openEventType === "click" || openEventType === "mousedown" || openEventType === "keydown" || openEventType === "keyup"); 5740 setOpenWithTouchDelay(nextOpen, event.nativeEvent, event.currentTarget, pointerType); 5741 }, 5742 onKeyDown() { 5743 pointerTypeRef.current = void 0; 5744 } 5745 }; 5746 }, [dataRef, eventOption, ignoreMouse, reason, store, stickIfOpen, toggle, frame, touchOpenTimeout, touchOpenDelay]); 5747 return React23.useMemo(() => enabled ? { 5748 reference 5749 } : EMPTY_OBJECT, [enabled, reference]); 5750 } 5751 5752 // node_modules/@base-ui/react/floating-ui-react/hooks/useClientPoint.mjs 5753 var React24 = __toESM(require_react(), 1); 5754 function createVirtualElement(domElement, data) { 5755 let offsetX = null; 5756 let offsetY = null; 5757 let isAutoUpdateEvent = false; 5758 return { 5759 contextElement: domElement || void 0, 5760 getBoundingClientRect() { 5761 const domRect = domElement?.getBoundingClientRect() || { 5762 width: 0, 5763 height: 0, 5764 x: 0, 5765 y: 0 5766 }; 5767 const isXAxis = data.axis === "x" || data.axis === "both"; 5768 const isYAxis = data.axis === "y" || data.axis === "both"; 5769 const canTrackCursorOnAutoUpdate = ["mouseenter", "mousemove"].includes(data.dataRef.current.openEvent?.type || "") && data.pointerType !== "touch"; 5770 let width = domRect.width; 5771 let height = domRect.height; 5772 let x2 = domRect.x; 5773 let y2 = domRect.y; 5774 if (offsetX == null && data.x && isXAxis) { 5775 offsetX = domRect.x - data.x; 5776 } 5777 if (offsetY == null && data.y && isYAxis) { 5778 offsetY = domRect.y - data.y; 5779 } 5780 x2 -= offsetX || 0; 5781 y2 -= offsetY || 0; 5782 width = 0; 5783 height = 0; 5784 if (!isAutoUpdateEvent || canTrackCursorOnAutoUpdate) { 5785 width = data.axis === "y" ? domRect.width : 0; 5786 height = data.axis === "x" ? domRect.height : 0; 5787 x2 = isXAxis && data.x != null ? data.x : x2; 5788 y2 = isYAxis && data.y != null ? data.y : y2; 5789 } else if (isAutoUpdateEvent && !canTrackCursorOnAutoUpdate) { 5790 height = data.axis === "x" ? domRect.height : height; 5791 width = data.axis === "y" ? domRect.width : width; 5792 } 5793 isAutoUpdateEvent = true; 5794 return { 5795 width, 5796 height, 5797 x: x2, 5798 y: y2, 5799 top: y2, 5800 right: x2 + width, 5801 bottom: y2 + height, 5802 left: x2 5803 }; 5804 } 5805 }; 5806 } 5807 function isMouseBasedEvent(event) { 5808 return event != null && event.clientX != null; 5809 } 5810 function useClientPoint(context, props = {}) { 5811 const { 5812 enabled = true, 5813 axis = "both" 5814 } = props; 5815 const store = "rootStore" in context ? context.rootStore : context; 5816 const open = store.useState("open"); 5817 const floating = store.useState("floatingElement"); 5818 const domReference = store.useState("domReferenceElement"); 5819 const dataRef = store.context.dataRef; 5820 const initialRef = React24.useRef(false); 5821 const cleanupListenerRef = React24.useRef(null); 5822 const [pointerType, setPointerType] = React24.useState(); 5823 const [reactive, setReactive] = React24.useState([]); 5824 const resetReference = useStableCallback((reference2) => { 5825 store.set("positionReference", reference2); 5826 }); 5827 const setReference = useStableCallback((newX, newY, referenceElement) => { 5828 if (initialRef.current) { 5829 return; 5830 } 5831 if (dataRef.current.openEvent && !isMouseBasedEvent(dataRef.current.openEvent)) { 5832 return; 5833 } 5834 store.set("positionReference", createVirtualElement(referenceElement ?? domReference, { 5835 x: newX, 5836 y: newY, 5837 axis, 5838 dataRef, 5839 pointerType 5840 })); 5841 }); 5842 const handleReferenceEnterOrMove = useStableCallback((event) => { 5843 if (!open) { 5844 setReference(event.clientX, event.clientY, event.currentTarget); 5845 } else if (!cleanupListenerRef.current) { 5846 setReference(event.clientX, event.clientY, event.currentTarget); 5847 setReactive([]); 5848 } 5849 }); 5850 const openCheck = isMouseLikePointerType(pointerType) ? floating : open; 5851 React24.useEffect(() => { 5852 if (!enabled) { 5853 resetReference(domReference); 5854 return void 0; 5855 } 5856 if (!openCheck) { 5857 return void 0; 5858 } 5859 function cleanupListener() { 5860 cleanupListenerRef.current?.(); 5861 cleanupListenerRef.current = null; 5862 } 5863 const win = getWindow(floating); 5864 function handleMouseMove(event) { 5865 const target = getTarget(event); 5866 if (!contains(floating, target)) { 5867 setReference(event.clientX, event.clientY); 5868 } else { 5869 cleanupListener(); 5870 } 5871 } 5872 if (!dataRef.current.openEvent || isMouseBasedEvent(dataRef.current.openEvent)) { 5873 cleanupListenerRef.current = addEventListener(win, "mousemove", handleMouseMove); 5874 } else { 5875 resetReference(domReference); 5876 } 5877 return cleanupListener; 5878 }, [openCheck, enabled, floating, dataRef, domReference, store, setReference, resetReference, reactive]); 5879 React24.useEffect(() => () => { 5880 store.set("positionReference", null); 5881 }, [store]); 5882 React24.useEffect(() => { 5883 if (enabled && !floating) { 5884 initialRef.current = false; 5885 } 5886 }, [enabled, floating]); 5887 React24.useEffect(() => { 5888 if (!enabled && open) { 5889 initialRef.current = true; 5890 } 5891 }, [enabled, open]); 5892 const reference = React24.useMemo(() => { 5893 function setPointerTypeRef(event) { 5894 setPointerType(event.pointerType); 5895 } 5896 return { 5897 onPointerDown: setPointerTypeRef, 5898 onPointerEnter: setPointerTypeRef, 5899 onMouseMove: handleReferenceEnterOrMove, 5900 onMouseEnter: handleReferenceEnterOrMove 5901 }; 5902 }, [handleReferenceEnterOrMove]); 5903 return React24.useMemo(() => enabled ? { 5904 reference, 5905 trigger: reference 5906 } : {}, [enabled, reference]); 5907 } 5908 5909 // node_modules/@base-ui/react/floating-ui-react/hooks/useDismiss.mjs 5910 var React25 = __toESM(require_react(), 1); 5911 function alwaysFalse() { 5912 return false; 5913 } 5914 function normalizeProp(normalizable) { 5915 return { 5916 escapeKey: typeof normalizable === "boolean" ? normalizable : normalizable?.escapeKey ?? false, 5917 outsidePress: typeof normalizable === "boolean" ? normalizable : normalizable?.outsidePress ?? true 5918 }; 5919 } 5920 function useDismiss(context, props = {}) { 5921 const { 5922 enabled = true, 5923 escapeKey: escapeKey2 = true, 5924 outsidePress: outsidePressProp = true, 5925 outsidePressEvent = "sloppy", 5926 referencePress = alwaysFalse, 5927 bubbles, 5928 externalTree 5929 } = props; 5930 const store = "rootStore" in context ? context.rootStore : context; 5931 const open = store.useState("open"); 5932 const floatingElement = store.useState("floatingElement"); 5933 const { 5934 dataRef 5935 } = store.context; 5936 const tree = useFloatingTree(externalTree); 5937 const outsidePressFn = useStableCallback(typeof outsidePressProp === "function" ? outsidePressProp : () => false); 5938 const outsidePress2 = typeof outsidePressProp === "function" ? outsidePressFn : outsidePressProp; 5939 const outsidePressEnabled = outsidePress2 !== false; 5940 const getOutsidePressEventProp = useStableCallback(() => outsidePressEvent); 5941 const { 5942 escapeKey: escapeKeyBubbles, 5943 outsidePress: outsidePressBubbles 5944 } = normalizeProp(bubbles); 5945 const pressStartedInsideRef = React25.useRef(false); 5946 const pressStartPreventedRef = React25.useRef(false); 5947 const suppressNextOutsideClickRef = React25.useRef(false); 5948 const isComposingRef = React25.useRef(false); 5949 const currentPointerTypeRef = React25.useRef(""); 5950 const touchStateRef = React25.useRef(null); 5951 const cancelDismissOnEndTimeout = useTimeout(); 5952 const clearInsideReactTreeTimeout = useTimeout(); 5953 const clearInsideReactTree = useStableCallback(() => { 5954 clearInsideReactTreeTimeout.clear(); 5955 dataRef.current.insideReactTree = false; 5956 }); 5957 const hasBlockingChild = useStableCallback((bubbleKey) => { 5958 const nodeId = dataRef.current.floatingContext?.nodeId; 5959 const children = tree ? getNodeChildren(tree.nodesRef.current, nodeId) : []; 5960 return children.some((child) => child.context?.open && !child.context.dataRef.current[bubbleKey]); 5961 }); 5962 const isEventWithinOwnElements = useStableCallback((event) => { 5963 return isEventTargetWithin(event, store.select("floatingElement")) || isEventTargetWithin(event, store.select("domReferenceElement")); 5964 }); 5965 const closeOnReferencePress = useStableCallback((event) => { 5966 if (!referencePress()) { 5967 return; 5968 } 5969 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerPress, event.nativeEvent)); 5970 }); 5971 const closeOnEscapeKeyDown = useStableCallback((event) => { 5972 if (!open || !enabled || !escapeKey2 || event.key !== "Escape") { 5973 return; 5974 } 5975 if (isComposingRef.current) { 5976 return; 5977 } 5978 if (!escapeKeyBubbles && hasBlockingChild("__escapeKeyBubbles")) { 5979 return; 5980 } 5981 const native = isReactEvent(event) ? event.nativeEvent : event; 5982 const eventDetails = createChangeEventDetails(reason_parts_exports.escapeKey, native); 5983 store.setOpen(false, eventDetails); 5984 if (!eventDetails.isCanceled) { 5985 event.preventDefault(); 5986 } 5987 if (!escapeKeyBubbles && !eventDetails.isPropagationAllowed) { 5988 event.stopPropagation(); 5989 } 5990 }); 5991 const markInsideReactTree = useStableCallback(() => { 5992 dataRef.current.insideReactTree = true; 5993 clearInsideReactTreeTimeout.start(0, clearInsideReactTree); 5994 }); 5995 const markPressStartedInsideReactTree = useStableCallback((event) => { 5996 if (!open || !enabled || event.button !== 0) { 5997 return; 5998 } 5999 const target = getTarget(event.nativeEvent); 6000 if (!contains(store.select("floatingElement"), target)) { 6001 return; 6002 } 6003 if (!pressStartedInsideRef.current) { 6004 pressStartedInsideRef.current = true; 6005 pressStartPreventedRef.current = false; 6006 } 6007 }); 6008 const markInsidePressStartPrevented = useStableCallback((event) => { 6009 if (!open || !enabled) { 6010 return; 6011 } 6012 if (!(event.defaultPrevented || event.nativeEvent.defaultPrevented)) { 6013 return; 6014 } 6015 if (pressStartedInsideRef.current) { 6016 pressStartPreventedRef.current = true; 6017 } 6018 }); 6019 React25.useEffect(() => { 6020 if (!open || !enabled) { 6021 return clearInsideReactTree; 6022 } 6023 dataRef.current.__escapeKeyBubbles = escapeKeyBubbles; 6024 dataRef.current.__outsidePressBubbles = outsidePressBubbles; 6025 const compositionTimeout = new Timeout(); 6026 const preventedPressSuppressionTimeout = new Timeout(); 6027 function handleCompositionStart() { 6028 compositionTimeout.clear(); 6029 isComposingRef.current = true; 6030 } 6031 function handleCompositionEnd() { 6032 compositionTimeout.start( 6033 // 0ms or 1ms don't work in Safari. 5ms appears to consistently work. 6034 // Only apply to WebKit for the test to remain 0ms. 6035 parts_exports.engine.webkit ? 5 : 0, 6036 () => { 6037 isComposingRef.current = false; 6038 } 6039 ); 6040 } 6041 function suppressImmediateOutsideClickAfterPreventedStart() { 6042 suppressNextOutsideClickRef.current = true; 6043 preventedPressSuppressionTimeout.start(0, () => { 6044 suppressNextOutsideClickRef.current = false; 6045 }); 6046 } 6047 function resetPressStartState() { 6048 pressStartedInsideRef.current = false; 6049 pressStartPreventedRef.current = false; 6050 } 6051 function getOutsidePressEvent() { 6052 const type = currentPointerTypeRef.current; 6053 const computedType = type === "pen" || !type ? "mouse" : type; 6054 const outsidePressEventValue = getOutsidePressEventProp(); 6055 const resolved = typeof outsidePressEventValue === "function" ? outsidePressEventValue() : outsidePressEventValue; 6056 if (typeof resolved === "string") { 6057 return resolved; 6058 } 6059 return resolved[computedType]; 6060 } 6061 function shouldIgnoreEvent(event) { 6062 const computedOutsidePressEvent = getOutsidePressEvent(); 6063 return computedOutsidePressEvent === "intentional" && event.type !== "click" || computedOutsidePressEvent === "sloppy" && event.type === "click"; 6064 } 6065 function isEventWithinFloatingTree(event) { 6066 const nodeId = dataRef.current.floatingContext?.nodeId; 6067 const targetIsInsideChildren = tree && getNodeChildren(tree.nodesRef.current, nodeId).some((node) => isEventTargetWithin(event, node.context?.elements.floating)); 6068 return isEventWithinOwnElements(event) || targetIsInsideChildren; 6069 } 6070 function closeOnPressOutside(event) { 6071 if (shouldIgnoreEvent(event)) { 6072 if (event.type !== "click" && !isEventWithinOwnElements(event)) { 6073 preventedPressSuppressionTimeout.clear(); 6074 suppressNextOutsideClickRef.current = false; 6075 } 6076 clearInsideReactTree(); 6077 return; 6078 } 6079 if (dataRef.current.insideReactTree) { 6080 clearInsideReactTree(); 6081 return; 6082 } 6083 const target = getTarget(event); 6084 const inertSelector = `[$createAttribute("inert")}]`; 6085 const targetRoot = isElement(target) ? target.getRootNode() : null; 6086 const markers = Array.from((isShadowRoot(targetRoot) ? targetRoot : ownerDocument(store.select("floatingElement"))).querySelectorAll(inertSelector)); 6087 const triggers = store.context.triggerElements; 6088 if (target && (triggers.hasElement(target) || triggers.hasMatchingElement((trigger) => contains(trigger, target)))) { 6089 return; 6090 } 6091 let targetRootAncestor = isElement(target) ? target : null; 6092 while (targetRootAncestor && !isLastTraversableNode(targetRootAncestor)) { 6093 const nextParent = getParentNode(targetRootAncestor); 6094 if (isLastTraversableNode(nextParent) || !isElement(nextParent)) { 6095 break; 6096 } 6097 targetRootAncestor = nextParent; 6098 } 6099 if (markers.length && isElement(target) && !isRootElement(target) && // Clicked on a direct ancestor (e.g. FloatingOverlay). 6100 !contains(target, store.select("floatingElement")) && // If the target root element contains none of the markers, then the 6101 // element was injected after the floating element rendered. 6102 markers.every((marker) => !contains(targetRootAncestor, marker))) { 6103 return; 6104 } 6105 if (isHTMLElement(target) && !("touches" in event)) { 6106 const lastTraversableNode = isLastTraversableNode(target); 6107 const style = getComputedStyle2(target); 6108 const scrollRe = /auto|scroll/; 6109 const isScrollableX = lastTraversableNode || scrollRe.test(style.overflowX); 6110 const isScrollableY = lastTraversableNode || scrollRe.test(style.overflowY); 6111 const canScrollX = isScrollableX && target.clientWidth > 0 && target.scrollWidth > target.clientWidth; 6112 const canScrollY = isScrollableY && target.clientHeight > 0 && target.scrollHeight > target.clientHeight; 6113 const isRTL11 = style.direction === "rtl"; 6114 const pressedVerticalScrollbar = canScrollY && (isRTL11 ? event.offsetX <= target.offsetWidth - target.clientWidth : event.offsetX > target.clientWidth); 6115 const pressedHorizontalScrollbar = canScrollX && event.offsetY > target.clientHeight; 6116 if (pressedVerticalScrollbar || pressedHorizontalScrollbar) { 6117 return; 6118 } 6119 } 6120 if (isEventWithinFloatingTree(event)) { 6121 return; 6122 } 6123 if (getOutsidePressEvent() === "intentional" && suppressNextOutsideClickRef.current) { 6124 preventedPressSuppressionTimeout.clear(); 6125 suppressNextOutsideClickRef.current = false; 6126 return; 6127 } 6128 if (typeof outsidePress2 === "function" && !outsidePress2(event)) { 6129 return; 6130 } 6131 if (hasBlockingChild("__outsidePressBubbles")) { 6132 return; 6133 } 6134 store.setOpen(false, createChangeEventDetails(reason_parts_exports.outsidePress, event)); 6135 clearInsideReactTree(); 6136 } 6137 function handlePointerDown(event) { 6138 if (getOutsidePressEvent() !== "sloppy" || event.pointerType === "touch" || !store.select("open") || !enabled || isEventWithinOwnElements(event)) { 6139 return; 6140 } 6141 closeOnPressOutside(event); 6142 } 6143 function handleTouchStart(event) { 6144 if (getOutsidePressEvent() !== "sloppy" || !store.select("open") || !enabled || isEventWithinOwnElements(event)) { 6145 return; 6146 } 6147 const touch = event.touches[0]; 6148 if (touch) { 6149 touchStateRef.current = { 6150 startTime: Date.now(), 6151 startX: touch.clientX, 6152 startY: touch.clientY, 6153 dismissOnTouchEnd: false, 6154 dismissOnMouseDown: true 6155 }; 6156 cancelDismissOnEndTimeout.start(1e3, () => { 6157 if (touchStateRef.current) { 6158 touchStateRef.current.dismissOnTouchEnd = false; 6159 touchStateRef.current.dismissOnMouseDown = false; 6160 } 6161 }); 6162 } 6163 } 6164 function addTargetEventListenerOnce(event, listener) { 6165 const target = getTarget(event); 6166 if (!target) { 6167 return; 6168 } 6169 const unsubscribe2 = addEventListener(target, event.type, () => { 6170 listener(event); 6171 unsubscribe2(); 6172 }); 6173 } 6174 function handleTouchStartCapture(event) { 6175 currentPointerTypeRef.current = "touch"; 6176 addTargetEventListenerOnce(event, handleTouchStart); 6177 } 6178 function closeOnPressOutsideCapture(event) { 6179 cancelDismissOnEndTimeout.clear(); 6180 if (event.type === "pointerdown") { 6181 currentPointerTypeRef.current = event.pointerType; 6182 } 6183 if (event.type === "mousedown" && touchStateRef.current && !touchStateRef.current.dismissOnMouseDown) { 6184 return; 6185 } 6186 addTargetEventListenerOnce(event, (targetEvent) => { 6187 if (targetEvent.type === "pointerdown") { 6188 handlePointerDown(targetEvent); 6189 } else { 6190 closeOnPressOutside(targetEvent); 6191 } 6192 }); 6193 } 6194 function handlePressEndCapture(event) { 6195 if (!pressStartedInsideRef.current) { 6196 return; 6197 } 6198 const pressStartedInsideDefaultPrevented = pressStartPreventedRef.current; 6199 resetPressStartState(); 6200 if (getOutsidePressEvent() !== "intentional") { 6201 return; 6202 } 6203 if (event.type === "pointercancel") { 6204 if (pressStartedInsideDefaultPrevented) { 6205 suppressImmediateOutsideClickAfterPreventedStart(); 6206 } 6207 return; 6208 } 6209 if (isEventWithinFloatingTree(event)) { 6210 return; 6211 } 6212 if (pressStartedInsideDefaultPrevented) { 6213 suppressImmediateOutsideClickAfterPreventedStart(); 6214 return; 6215 } 6216 if (typeof outsidePress2 === "function" && !outsidePress2(event)) { 6217 return; 6218 } 6219 preventedPressSuppressionTimeout.clear(); 6220 suppressNextOutsideClickRef.current = true; 6221 clearInsideReactTree(); 6222 } 6223 function handleTouchMove(event) { 6224 if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) { 6225 return; 6226 } 6227 const touch = event.touches[0]; 6228 if (!touch) { 6229 return; 6230 } 6231 const deltaX = Math.abs(touch.clientX - touchStateRef.current.startX); 6232 const deltaY = Math.abs(touch.clientY - touchStateRef.current.startY); 6233 const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY); 6234 if (distance > 5) { 6235 touchStateRef.current.dismissOnTouchEnd = true; 6236 } 6237 if (distance > 10) { 6238 closeOnPressOutside(event); 6239 cancelDismissOnEndTimeout.clear(); 6240 touchStateRef.current = null; 6241 } 6242 } 6243 function handleTouchMoveCapture(event) { 6244 addTargetEventListenerOnce(event, handleTouchMove); 6245 } 6246 function handleTouchEnd(event) { 6247 if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) { 6248 return; 6249 } 6250 if (touchStateRef.current.dismissOnTouchEnd) { 6251 closeOnPressOutside(event); 6252 } 6253 cancelDismissOnEndTimeout.clear(); 6254 touchStateRef.current = null; 6255 } 6256 function handleTouchEndCapture(event) { 6257 addTargetEventListenerOnce(event, handleTouchEnd); 6258 } 6259 const doc = ownerDocument(floatingElement); 6260 const unsubscribe = mergeCleanups(escapeKey2 && mergeCleanups(addEventListener(doc, "keydown", closeOnEscapeKeyDown), addEventListener(doc, "compositionstart", handleCompositionStart), addEventListener(doc, "compositionend", handleCompositionEnd)), outsidePressEnabled && mergeCleanups(addEventListener(doc, "click", closeOnPressOutsideCapture, true), addEventListener(doc, "pointerdown", closeOnPressOutsideCapture, true), addEventListener(doc, "pointerup", handlePressEndCapture, true), addEventListener(doc, "pointercancel", handlePressEndCapture, true), addEventListener(doc, "mousedown", closeOnPressOutsideCapture, true), addEventListener(doc, "mouseup", handlePressEndCapture, true), addEventListener(doc, "touchstart", handleTouchStartCapture, true), addEventListener(doc, "touchmove", handleTouchMoveCapture, true), addEventListener(doc, "touchend", handleTouchEndCapture, true))); 6261 return () => { 6262 unsubscribe(); 6263 compositionTimeout.clear(); 6264 preventedPressSuppressionTimeout.clear(); 6265 resetPressStartState(); 6266 suppressNextOutsideClickRef.current = false; 6267 clearInsideReactTree(); 6268 }; 6269 }, [dataRef, floatingElement, escapeKey2, outsidePressEnabled, outsidePress2, open, enabled, escapeKeyBubbles, outsidePressBubbles, closeOnEscapeKeyDown, clearInsideReactTree, getOutsidePressEventProp, hasBlockingChild, isEventWithinOwnElements, tree, store, cancelDismissOnEndTimeout]); 6270 const reference = React25.useMemo(() => ({ 6271 onKeyDown: closeOnEscapeKeyDown, 6272 onPointerDown: closeOnReferencePress, 6273 onClick: closeOnReferencePress 6274 }), [closeOnEscapeKeyDown, closeOnReferencePress]); 6275 const floating = React25.useMemo(() => ({ 6276 onKeyDown: closeOnEscapeKeyDown, 6277 // `onMouseDown` may be blocked if `event.preventDefault()` is called in 6278 // `onPointerDown`, such as with <NumberField.ScrubArea>. 6279 // See https://github.com/mui/base-ui/pull/3379 6280 onPointerDown: markInsidePressStartPrevented, 6281 onMouseDown: markInsidePressStartPrevented, 6282 onClickCapture: markInsideReactTree, 6283 onMouseDownCapture(event) { 6284 markInsideReactTree(); 6285 markPressStartedInsideReactTree(event); 6286 }, 6287 onPointerDownCapture(event) { 6288 markInsideReactTree(); 6289 markPressStartedInsideReactTree(event); 6290 }, 6291 onMouseUpCapture: markInsideReactTree, 6292 onTouchEndCapture: markInsideReactTree, 6293 onTouchMoveCapture: markInsideReactTree 6294 }), [closeOnEscapeKeyDown, markInsideReactTree, markPressStartedInsideReactTree, markInsidePressStartPrevented]); 6295 return React25.useMemo(() => enabled ? { 6296 reference, 6297 floating, 6298 trigger: reference 6299 } : {}, [enabled, reference, floating]); 6300 } 6301 6302 // node_modules/@base-ui/react/floating-ui-react/hooks/useFloating.mjs 6303 var React33 = __toESM(require_react(), 1); 6304 6305 // node_modules/@floating-ui/core/dist/floating-ui.core.mjs 6306 function computeCoordsFromPlacement(_ref, placement, rtl) { 6307 let { 6308 reference, 6309 floating 6310 } = _ref; 6311 const sideAxis = getSideAxis(placement); 6312 const alignmentAxis = getAlignmentAxis(placement); 6313 const alignLength = getAxisLength(alignmentAxis); 6314 const side = getSide(placement); 6315 const isVertical = sideAxis === "y"; 6316 const commonX = reference.x + reference.width / 2 - floating.width / 2; 6317 const commonY = reference.y + reference.height / 2 - floating.height / 2; 6318 const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2; 6319 let coords; 6320 switch (side) { 6321 case "top": 6322 coords = { 6323 x: commonX, 6324 y: reference.y - floating.height 6325 }; 6326 break; 6327 case "bottom": 6328 coords = { 6329 x: commonX, 6330 y: reference.y + reference.height 6331 }; 6332 break; 6333 case "right": 6334 coords = { 6335 x: reference.x + reference.width, 6336 y: commonY 6337 }; 6338 break; 6339 case "left": 6340 coords = { 6341 x: reference.x - floating.width, 6342 y: commonY 6343 }; 6344 break; 6345 default: 6346 coords = { 6347 x: reference.x, 6348 y: reference.y 6349 }; 6350 } 6351 const alignment = getAlignment(placement); 6352 if (alignment) { 6353 coords[alignmentAxis] += commonAlign * (alignment === "end" ? 1 : -1) * (rtl && isVertical ? -1 : 1); 6354 } 6355 return coords; 6356 } 6357 async function detectOverflow(state, options) { 6358 var _await$platform$isEle; 6359 if (options === void 0) { 6360 options = {}; 6361 } 6362 const { 6363 x: x2, 6364 y: y2, 6365 platform: platform3, 6366 rects, 6367 elements, 6368 strategy 6369 } = state; 6370 const { 6371 boundary = "clippingAncestors", 6372 rootBoundary = "viewport", 6373 elementContext = "floating", 6374 altBoundary = false, 6375 padding = 0 6376 } = evaluate(options, state); 6377 const paddingObject = getPaddingObject(padding); 6378 const altContext = elementContext === "floating" ? "reference" : "floating"; 6379 const element = elements[altBoundary ? altContext : elementContext]; 6380 const clippingClientRect = rectToClientRect(await platform3.getClippingRect({ 6381 element: ((_await$platform$isEle = await (platform3.isElement == null ? void 0 : platform3.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || await (platform3.getDocumentElement == null ? void 0 : platform3.getDocumentElement(elements.floating)), 6382 boundary, 6383 rootBoundary, 6384 strategy 6385 })); 6386 const rect = elementContext === "floating" ? { 6387 x: x2, 6388 y: y2, 6389 width: rects.floating.width, 6390 height: rects.floating.height 6391 } : rects.reference; 6392 const offsetParent = await (platform3.getOffsetParent == null ? void 0 : platform3.getOffsetParent(elements.floating)); 6393 const offsetScale = await (platform3.isElement == null ? void 0 : platform3.isElement(offsetParent)) && await (platform3.getScale == null ? void 0 : platform3.getScale(offsetParent)) || { 6394 x: 1, 6395 y: 1 6396 }; 6397 const elementClientRect = rectToClientRect(platform3.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform3.convertOffsetParentRelativeRectToViewportRelativeRect({ 6398 elements, 6399 rect, 6400 offsetParent, 6401 strategy 6402 }) : rect); 6403 return { 6404 top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y, 6405 bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y, 6406 left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x, 6407 right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x 6408 }; 6409 } 6410 var MAX_RESET_COUNT = 50; 6411 var computePosition = async (reference, floating, config) => { 6412 const { 6413 placement = "bottom", 6414 strategy = "absolute", 6415 middleware = [], 6416 platform: platform3 6417 } = config; 6418 const platformWithDetectOverflow = platform3.detectOverflow ? platform3 : { 6419 ...platform3, 6420 detectOverflow 6421 }; 6422 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(floating)); 6423 let rects = await platform3.getElementRects({ 6424 reference, 6425 floating, 6426 strategy 6427 }); 6428 let { 6429 x: x2, 6430 y: y2 6431 } = computeCoordsFromPlacement(rects, placement, rtl); 6432 let statefulPlacement = placement; 6433 let resetCount = 0; 6434 const middlewareData = {}; 6435 for (let i2 = 0; i2 < middleware.length; i2++) { 6436 const currentMiddleware = middleware[i2]; 6437 if (!currentMiddleware) { 6438 continue; 6439 } 6440 const { 6441 name, 6442 fn 6443 } = currentMiddleware; 6444 const { 6445 x: nextX, 6446 y: nextY, 6447 data, 6448 reset 6449 } = await fn({ 6450 x: x2, 6451 y: y2, 6452 initialPlacement: placement, 6453 placement: statefulPlacement, 6454 strategy, 6455 middlewareData, 6456 rects, 6457 platform: platformWithDetectOverflow, 6458 elements: { 6459 reference, 6460 floating 6461 } 6462 }); 6463 x2 = nextX != null ? nextX : x2; 6464 y2 = nextY != null ? nextY : y2; 6465 middlewareData[name] = { 6466 ...middlewareData[name], 6467 ...data 6468 }; 6469 if (reset && resetCount < MAX_RESET_COUNT) { 6470 resetCount++; 6471 if (typeof reset === "object") { 6472 if (reset.placement) { 6473 statefulPlacement = reset.placement; 6474 } 6475 if (reset.rects) { 6476 rects = reset.rects === true ? await platform3.getElementRects({ 6477 reference, 6478 floating, 6479 strategy 6480 }) : reset.rects; 6481 } 6482 ({ 6483 x: x2, 6484 y: y2 6485 } = computeCoordsFromPlacement(rects, statefulPlacement, rtl)); 6486 } 6487 i2 = -1; 6488 } 6489 } 6490 return { 6491 x: x2, 6492 y: y2, 6493 placement: statefulPlacement, 6494 strategy, 6495 middlewareData 6496 }; 6497 }; 6498 var flip = function(options) { 6499 if (options === void 0) { 6500 options = {}; 6501 } 6502 return { 6503 name: "flip", 6504 options, 6505 async fn(state) { 6506 var _middlewareData$arrow, _middlewareData$flip; 6507 const { 6508 placement, 6509 middlewareData, 6510 rects, 6511 initialPlacement, 6512 platform: platform3, 6513 elements 6514 } = state; 6515 const { 6516 mainAxis: checkMainAxis = true, 6517 crossAxis: checkCrossAxis = true, 6518 fallbackPlacements: specifiedFallbackPlacements, 6519 fallbackStrategy = "bestFit", 6520 fallbackAxisSideDirection = "none", 6521 flipAlignment = true, 6522 ...detectOverflowOptions 6523 } = evaluate(options, state); 6524 if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) { 6525 return {}; 6526 } 6527 const side = getSide(placement); 6528 const initialSideAxis = getSideAxis(initialPlacement); 6529 const isBasePlacement = getSide(initialPlacement) === initialPlacement; 6530 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)); 6531 const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement)); 6532 const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== "none"; 6533 if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) { 6534 fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl)); 6535 } 6536 const placements2 = [initialPlacement, ...fallbackPlacements]; 6537 const overflow = await platform3.detectOverflow(state, detectOverflowOptions); 6538 const overflows = []; 6539 let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || []; 6540 if (checkMainAxis) { 6541 overflows.push(overflow[side]); 6542 } 6543 if (checkCrossAxis) { 6544 const sides2 = getAlignmentSides(placement, rects, rtl); 6545 overflows.push(overflow[sides2[0]], overflow[sides2[1]]); 6546 } 6547 overflowsData = [...overflowsData, { 6548 placement, 6549 overflows 6550 }]; 6551 if (!overflows.every((side2) => side2 <= 0)) { 6552 var _middlewareData$flip2, _overflowsData$filter; 6553 const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1; 6554 const nextPlacement = placements2[nextIndex]; 6555 if (nextPlacement) { 6556 const ignoreCrossAxisOverflow = checkCrossAxis === "alignment" ? initialSideAxis !== getSideAxis(nextPlacement) : false; 6557 if (!ignoreCrossAxisOverflow || // We leave the current main axis only if every placement on that axis 6558 // overflows the main axis. 6559 overflowsData.every((d2) => getSideAxis(d2.placement) === initialSideAxis ? d2.overflows[0] > 0 : true)) { 6560 return { 6561 data: { 6562 index: nextIndex, 6563 overflows: overflowsData 6564 }, 6565 reset: { 6566 placement: nextPlacement 6567 } 6568 }; 6569 } 6570 } 6571 let resetPlacement = (_overflowsData$filter = overflowsData.filter((d2) => d2.overflows[0] <= 0).sort((a2, b2) => a2.overflows[1] - b2.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement; 6572 if (!resetPlacement) { 6573 switch (fallbackStrategy) { 6574 case "bestFit": { 6575 var _overflowsData$filter2; 6576 const placement2 = (_overflowsData$filter2 = overflowsData.filter((d2) => { 6577 if (hasFallbackAxisSideDirection) { 6578 const currentSideAxis = getSideAxis(d2.placement); 6579 return currentSideAxis === initialSideAxis || // Create a bias to the `y` side axis due to horizontal 6580 // reading directions favoring greater width. 6581 currentSideAxis === "y"; 6582 } 6583 return true; 6584 }).map((d2) => [d2.placement, d2.overflows.filter((overflow2) => overflow2 > 0).reduce((acc, overflow2) => acc + overflow2, 0)]).sort((a2, b2) => a2[1] - b2[1])[0]) == null ? void 0 : _overflowsData$filter2[0]; 6585 if (placement2) { 6586 resetPlacement = placement2; 6587 } 6588 break; 6589 } 6590 case "initialPlacement": 6591 resetPlacement = initialPlacement; 6592 break; 6593 } 6594 } 6595 if (placement !== resetPlacement) { 6596 return { 6597 reset: { 6598 placement: resetPlacement 6599 } 6600 }; 6601 } 6602 } 6603 return {}; 6604 } 6605 }; 6606 }; 6607 var originSides = /* @__PURE__ */ new Set(["left", "top"]); 6608 async function convertValueToCoords(state, options) { 6609 const { 6610 placement, 6611 platform: platform3, 6612 elements 6613 } = state; 6614 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)); 6615 const side = getSide(placement); 6616 const alignment = getAlignment(placement); 6617 const isVertical = getSideAxis(placement) === "y"; 6618 const mainAxisMulti = originSides.has(side) ? -1 : 1; 6619 const crossAxisMulti = rtl && isVertical ? -1 : 1; 6620 const rawValue = evaluate(options, state); 6621 let { 6622 mainAxis, 6623 crossAxis, 6624 alignmentAxis 6625 } = typeof rawValue === "number" ? { 6626 mainAxis: rawValue, 6627 crossAxis: 0, 6628 alignmentAxis: null 6629 } : { 6630 mainAxis: rawValue.mainAxis || 0, 6631 crossAxis: rawValue.crossAxis || 0, 6632 alignmentAxis: rawValue.alignmentAxis 6633 }; 6634 if (alignment && typeof alignmentAxis === "number") { 6635 crossAxis = alignment === "end" ? alignmentAxis * -1 : alignmentAxis; 6636 } 6637 return isVertical ? { 6638 x: crossAxis * crossAxisMulti, 6639 y: mainAxis * mainAxisMulti 6640 } : { 6641 x: mainAxis * mainAxisMulti, 6642 y: crossAxis * crossAxisMulti 6643 }; 6644 } 6645 var offset = function(options) { 6646 if (options === void 0) { 6647 options = 0; 6648 } 6649 return { 6650 name: "offset", 6651 options, 6652 async fn(state) { 6653 var _middlewareData$offse, _middlewareData$arrow; 6654 const { 6655 x: x2, 6656 y: y2, 6657 placement, 6658 middlewareData 6659 } = state; 6660 const diffCoords = await convertValueToCoords(state, options); 6661 if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) { 6662 return {}; 6663 } 6664 return { 6665 x: x2 + diffCoords.x, 6666 y: y2 + diffCoords.y, 6667 data: { 6668 ...diffCoords, 6669 placement 6670 } 6671 }; 6672 } 6673 }; 6674 }; 6675 var shift = function(options) { 6676 if (options === void 0) { 6677 options = {}; 6678 } 6679 return { 6680 name: "shift", 6681 options, 6682 async fn(state) { 6683 const { 6684 x: x2, 6685 y: y2, 6686 placement, 6687 platform: platform3 6688 } = state; 6689 const { 6690 mainAxis: checkMainAxis = true, 6691 crossAxis: checkCrossAxis = false, 6692 limiter = { 6693 fn: (_ref) => { 6694 let { 6695 x: x3, 6696 y: y3 6697 } = _ref; 6698 return { 6699 x: x3, 6700 y: y3 6701 }; 6702 } 6703 }, 6704 ...detectOverflowOptions 6705 } = evaluate(options, state); 6706 const coords = { 6707 x: x2, 6708 y: y2 6709 }; 6710 const overflow = await platform3.detectOverflow(state, detectOverflowOptions); 6711 const crossAxis = getSideAxis(placement); 6712 const mainAxis = getOppositeAxis(crossAxis); 6713 let mainAxisCoord = coords[mainAxis]; 6714 let crossAxisCoord = coords[crossAxis]; 6715 const clampCoord = (axis, coord) => clamp(coord + overflow[axis === "y" ? "top" : "left"], coord, coord - overflow[axis === "y" ? "bottom" : "right"]); 6716 if (checkMainAxis) { 6717 mainAxisCoord = clampCoord(mainAxis, mainAxisCoord); 6718 } 6719 if (checkCrossAxis) { 6720 crossAxisCoord = clampCoord(crossAxis, crossAxisCoord); 6721 } 6722 const limitedCoords = limiter.fn({ 6723 ...state, 6724 [mainAxis]: mainAxisCoord, 6725 [crossAxis]: crossAxisCoord 6726 }); 6727 return { 6728 ...limitedCoords, 6729 data: { 6730 x: limitedCoords.x - x2, 6731 y: limitedCoords.y - y2, 6732 enabled: { 6733 [mainAxis]: checkMainAxis, 6734 [crossAxis]: checkCrossAxis 6735 } 6736 } 6737 }; 6738 } 6739 }; 6740 }; 6741 var limitShift = function(options) { 6742 if (options === void 0) { 6743 options = {}; 6744 } 6745 return { 6746 options, 6747 fn(state) { 6748 var _rawOffset$mainAxis, _rawOffset$crossAxis; 6749 const { 6750 x: x2, 6751 y: y2, 6752 placement, 6753 rects, 6754 middlewareData 6755 } = state; 6756 const { 6757 offset: offset4 = 0, 6758 mainAxis: checkMainAxis = true, 6759 crossAxis: checkCrossAxis = true 6760 } = evaluate(options, state); 6761 const coords = { 6762 x: x2, 6763 y: y2 6764 }; 6765 const crossAxis = getSideAxis(placement); 6766 const mainAxis = getOppositeAxis(crossAxis); 6767 let mainAxisCoord = coords[mainAxis]; 6768 let crossAxisCoord = coords[crossAxis]; 6769 const rawOffset = evaluate(offset4, state); 6770 const computedOffset = typeof rawOffset === "number" ? { 6771 mainAxis: rawOffset, 6772 crossAxis: 0 6773 } : { 6774 mainAxis: (_rawOffset$mainAxis = rawOffset.mainAxis) != null ? _rawOffset$mainAxis : 0, 6775 crossAxis: (_rawOffset$crossAxis = rawOffset.crossAxis) != null ? _rawOffset$crossAxis : 0 6776 }; 6777 if (checkMainAxis) { 6778 const len = mainAxis === "y" ? "height" : "width"; 6779 const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis; 6780 const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis; 6781 if (mainAxisCoord < limitMin) { 6782 mainAxisCoord = limitMin; 6783 } else if (mainAxisCoord > limitMax) { 6784 mainAxisCoord = limitMax; 6785 } 6786 } 6787 if (checkCrossAxis) { 6788 var _middlewareData$offse, _middlewareData$offse2; 6789 const len = mainAxis === "y" ? "width" : "height"; 6790 const isOriginSide = originSides.has(getSide(placement)); 6791 const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis); 6792 const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0); 6793 if (crossAxisCoord < limitMin) { 6794 crossAxisCoord = limitMin; 6795 } else if (crossAxisCoord > limitMax) { 6796 crossAxisCoord = limitMax; 6797 } 6798 } 6799 return { 6800 [mainAxis]: mainAxisCoord, 6801 [crossAxis]: crossAxisCoord 6802 }; 6803 } 6804 }; 6805 }; 6806 var size = function(options) { 6807 if (options === void 0) { 6808 options = {}; 6809 } 6810 return { 6811 name: "size", 6812 options, 6813 async fn(state) { 6814 const { 6815 placement, 6816 rects, 6817 platform: platform3, 6818 elements 6819 } = state; 6820 const { 6821 apply = () => { 6822 }, 6823 ...detectOverflowOptions 6824 } = evaluate(options, state); 6825 const overflow = await platform3.detectOverflow(state, detectOverflowOptions); 6826 const side = getSide(placement); 6827 const alignment = getAlignment(placement); 6828 const isYAxis = getSideAxis(placement) === "y"; 6829 const { 6830 width, 6831 height 6832 } = rects.floating; 6833 let heightSide; 6834 let widthSide; 6835 if (side === "top" || side === "bottom") { 6836 heightSide = side; 6837 widthSide = alignment === (await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)) ? "start" : "end") ? "left" : "right"; 6838 } else { 6839 widthSide = side; 6840 heightSide = alignment === "end" ? "top" : "bottom"; 6841 } 6842 const maximumClippingHeight = height - overflow.top - overflow.bottom; 6843 const maximumClippingWidth = width - overflow.left - overflow.right; 6844 const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight); 6845 const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth); 6846 const shiftData = state.middlewareData.shift; 6847 const noShift = !shiftData; 6848 let availableHeight = overflowAvailableHeight; 6849 let availableWidth = overflowAvailableWidth; 6850 if (shiftData != null && shiftData.enabled.x) { 6851 availableWidth = maximumClippingWidth; 6852 } 6853 if (shiftData != null && shiftData.enabled.y) { 6854 availableHeight = maximumClippingHeight; 6855 } 6856 if (noShift && !alignment) { 6857 if (isYAxis) { 6858 availableWidth = width - 2 * max(overflow.left, overflow.right); 6859 } else { 6860 availableHeight = height - 2 * max(overflow.top, overflow.bottom); 6861 } 6862 } 6863 await apply({ 6864 ...state, 6865 availableWidth, 6866 availableHeight 6867 }); 6868 const nextDimensions = await platform3.getDimensions(elements.floating); 6869 if (width !== nextDimensions.width || height !== nextDimensions.height) { 6870 return { 6871 reset: { 6872 rects: true 6873 } 6874 }; 6875 } 6876 return {}; 6877 } 6878 }; 6879 }; 6880 6881 // node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs 6882 function getCssDimensions(element) { 6883 const css = getComputedStyle2(element); 6884 let width = parseFloat(css.width) || 0; 6885 let height = parseFloat(css.height) || 0; 6886 const hasOffset = isHTMLElement(element); 6887 const offsetWidth = hasOffset ? element.offsetWidth : width; 6888 const offsetHeight = hasOffset ? element.offsetHeight : height; 6889 const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight; 6890 if (shouldFallback) { 6891 width = offsetWidth; 6892 height = offsetHeight; 6893 } 6894 return { 6895 width, 6896 height, 6897 $: shouldFallback 6898 }; 6899 } 6900 function unwrapElement(element) { 6901 return !isElement(element) ? element.contextElement : element; 6902 } 6903 function getScale(element) { 6904 const domElement = unwrapElement(element); 6905 if (!isHTMLElement(domElement)) { 6906 return createCoords(1); 6907 } 6908 const rect = domElement.getBoundingClientRect(); 6909 const { 6910 width, 6911 height, 6912 $: $2 6913 } = getCssDimensions(domElement); 6914 let x2 = ($2 ? round(rect.width) : rect.width) / width; 6915 let y2 = ($2 ? round(rect.height) : rect.height) / height; 6916 if (!x2 || !Number.isFinite(x2)) { 6917 x2 = 1; 6918 } 6919 if (!y2 || !Number.isFinite(y2)) { 6920 y2 = 1; 6921 } 6922 return { 6923 x: x2, 6924 y: y2 6925 }; 6926 } 6927 var noOffsets = /* @__PURE__ */ createCoords(0); 6928 function getVisualOffsets(element) { 6929 const win = getWindow(element); 6930 if (!isWebKit() || !win.visualViewport) { 6931 return noOffsets; 6932 } 6933 return { 6934 x: win.visualViewport.offsetLeft, 6935 y: win.visualViewport.offsetTop 6936 }; 6937 } 6938 function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) { 6939 if (isFixed === void 0) { 6940 isFixed = false; 6941 } 6942 return !!floatingOffsetParent && isFixed && floatingOffsetParent === getWindow(element); 6943 } 6944 function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) { 6945 if (includeScale === void 0) { 6946 includeScale = false; 6947 } 6948 if (isFixedStrategy === void 0) { 6949 isFixedStrategy = false; 6950 } 6951 const clientRect = element.getBoundingClientRect(); 6952 const domElement = unwrapElement(element); 6953 let scale = createCoords(1); 6954 if (includeScale) { 6955 if (offsetParent) { 6956 if (isElement(offsetParent)) { 6957 scale = getScale(offsetParent); 6958 } 6959 } else { 6960 scale = getScale(element); 6961 } 6962 } 6963 const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0); 6964 let x2 = (clientRect.left + visualOffsets.x) / scale.x; 6965 let y2 = (clientRect.top + visualOffsets.y) / scale.y; 6966 let width = clientRect.width / scale.x; 6967 let height = clientRect.height / scale.y; 6968 if (domElement && offsetParent) { 6969 const win = getWindow(domElement); 6970 const offsetWin = isElement(offsetParent) ? getWindow(offsetParent) : offsetParent; 6971 let currentWin = win; 6972 let currentIFrame = getFrameElement(currentWin); 6973 while (currentIFrame && offsetWin !== currentWin) { 6974 const iframeScale = getScale(currentIFrame); 6975 const iframeRect = currentIFrame.getBoundingClientRect(); 6976 const css = getComputedStyle2(currentIFrame); 6977 const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x; 6978 const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y; 6979 x2 *= iframeScale.x; 6980 y2 *= iframeScale.y; 6981 width *= iframeScale.x; 6982 height *= iframeScale.y; 6983 x2 += left; 6984 y2 += top; 6985 currentWin = getWindow(currentIFrame); 6986 currentIFrame = getFrameElement(currentWin); 6987 } 6988 } 6989 return rectToClientRect({ 6990 width, 6991 height, 6992 x: x2, 6993 y: y2 6994 }); 6995 } 6996 function getWindowScrollBarX(element, rect) { 6997 const leftScroll = getNodeScroll(element).scrollLeft; 6998 if (!rect) { 6999 return getBoundingClientRect(getDocumentElement(element)).left + leftScroll; 7000 } 7001 return rect.left + leftScroll; 7002 } 7003 function getHTMLOffset(documentElement, scroll) { 7004 const htmlRect = documentElement.getBoundingClientRect(); 7005 const x2 = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect); 7006 const y2 = htmlRect.top + scroll.scrollTop; 7007 return { 7008 x: x2, 7009 y: y2 7010 }; 7011 } 7012 function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) { 7013 let { 7014 elements, 7015 rect, 7016 offsetParent, 7017 strategy 7018 } = _ref; 7019 const isFixed = strategy === "fixed"; 7020 const documentElement = getDocumentElement(offsetParent); 7021 const topLayer = elements ? isTopLayer(elements.floating) : false; 7022 if (offsetParent === documentElement || topLayer && isFixed) { 7023 return rect; 7024 } 7025 let scroll = { 7026 scrollLeft: 0, 7027 scrollTop: 0 7028 }; 7029 let scale = createCoords(1); 7030 const offsets = createCoords(0); 7031 const isOffsetParentAnElement = isHTMLElement(offsetParent); 7032 if (isOffsetParentAnElement || !isFixed) { 7033 if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) { 7034 scroll = getNodeScroll(offsetParent); 7035 } 7036 if (isOffsetParentAnElement) { 7037 const offsetRect = getBoundingClientRect(offsetParent); 7038 scale = getScale(offsetParent); 7039 offsets.x = offsetRect.x + offsetParent.clientLeft; 7040 offsets.y = offsetRect.y + offsetParent.clientTop; 7041 } 7042 } 7043 const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0); 7044 return { 7045 width: rect.width * scale.x, 7046 height: rect.height * scale.y, 7047 x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x, 7048 y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y 7049 }; 7050 } 7051 function getClientRects(element) { 7052 return element.getClientRects ? Array.from(element.getClientRects()) : []; 7053 } 7054 function getDocumentRect(html) { 7055 const scroll = getNodeScroll(html); 7056 const body = html.ownerDocument.body; 7057 const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth); 7058 const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight); 7059 let x2 = -scroll.scrollLeft + getWindowScrollBarX(html); 7060 const y2 = -scroll.scrollTop; 7061 if (getComputedStyle2(body).direction === "rtl") { 7062 x2 += max(html.clientWidth, body.clientWidth) - width; 7063 } 7064 return { 7065 width, 7066 height, 7067 x: x2, 7068 y: y2 7069 }; 7070 } 7071 var SCROLLBAR_MAX = 25; 7072 function getViewportRect(element, strategy, rootBoundary) { 7073 if (rootBoundary === void 0) { 7074 rootBoundary = "viewport"; 7075 } 7076 const isLayoutViewport = rootBoundary === "layoutViewport"; 7077 const win = getWindow(element); 7078 const html = getDocumentElement(element); 7079 const visualViewport = win.visualViewport; 7080 let width = html.clientWidth; 7081 let height = html.clientHeight; 7082 let x2 = 0; 7083 let y2 = 0; 7084 if (visualViewport) { 7085 const layoutRelativeClientCoords = !isWebKit() || strategy === "fixed"; 7086 if (isLayoutViewport) { 7087 if (!layoutRelativeClientCoords) { 7088 x2 = -visualViewport.offsetLeft; 7089 y2 = -visualViewport.offsetTop; 7090 } 7091 } else { 7092 width = visualViewport.width; 7093 height = visualViewport.height; 7094 if (layoutRelativeClientCoords) { 7095 x2 = visualViewport.offsetLeft; 7096 y2 = visualViewport.offsetTop; 7097 } 7098 } 7099 } 7100 const windowScrollbarX = getWindowScrollBarX(html); 7101 if (windowScrollbarX <= 0) { 7102 const doc = html.ownerDocument; 7103 const body = doc.body; 7104 const bodyStyles = getComputedStyle(body); 7105 const bodyMarginInline = doc.compatMode === "CSS1Compat" ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0; 7106 const reservedWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline); 7107 const gutter = getComputedStyle(html).scrollbarGutter === "stable both-edges" ? reservedWidth / 2 : reservedWidth; 7108 if (gutter <= SCROLLBAR_MAX) { 7109 width -= gutter; 7110 } 7111 } 7112 return { 7113 width, 7114 height, 7115 x: x2, 7116 y: y2 7117 }; 7118 } 7119 function getInnerBoundingClientRect(element, strategy) { 7120 const clientRect = getBoundingClientRect(element, true, strategy === "fixed"); 7121 const top = clientRect.top + element.clientTop; 7122 const left = clientRect.left + element.clientLeft; 7123 const scale = getScale(element); 7124 const width = element.clientWidth * scale.x; 7125 const height = element.clientHeight * scale.y; 7126 const x2 = left * scale.x; 7127 const y2 = top * scale.y; 7128 return { 7129 width, 7130 height, 7131 x: x2, 7132 y: y2 7133 }; 7134 } 7135 function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) { 7136 let rect; 7137 if (clippingAncestor === "viewport" || clippingAncestor === "layoutViewport") { 7138 rect = getViewportRect(element, strategy, clippingAncestor); 7139 } else if (clippingAncestor === "document") { 7140 rect = getDocumentRect(getDocumentElement(element)); 7141 } else if (isElement(clippingAncestor)) { 7142 rect = getInnerBoundingClientRect(clippingAncestor, strategy); 7143 } else { 7144 const visualOffsets = getVisualOffsets(element); 7145 rect = { 7146 x: clippingAncestor.x - visualOffsets.x, 7147 y: clippingAncestor.y - visualOffsets.y, 7148 width: clippingAncestor.width, 7149 height: clippingAncestor.height 7150 }; 7151 } 7152 return rectToClientRect(rect); 7153 } 7154 function getClippingElementAncestors(element, cache) { 7155 const cachedResult = cache.get(element); 7156 if (cachedResult) { 7157 return cachedResult; 7158 } 7159 let result = getOverflowAncestors(element, [], false).filter((el) => isElement(el) && getNodeName(el) !== "body"); 7160 let lastKeptComputedStyle = null; 7161 const elementIsFixed = getComputedStyle2(element).position === "fixed"; 7162 let currentNode = elementIsFixed ? getParentNode(element) : element; 7163 while (isElement(currentNode) && !isLastTraversableNode(currentNode)) { 7164 const computedStyle = getComputedStyle2(currentNode); 7165 const currentNodeIsContaining = isContainingBlock(currentNode); 7166 const lastPosition = lastKeptComputedStyle ? lastKeptComputedStyle.position : elementIsFixed ? "fixed" : ""; 7167 const shouldDropCurrentNode = !currentNodeIsContaining && (lastPosition === "fixed" || lastPosition === "absolute" && computedStyle.position === "static"); 7168 if (shouldDropCurrentNode) { 7169 result = result.filter((ancestor) => ancestor !== currentNode); 7170 } else { 7171 lastKeptComputedStyle = computedStyle; 7172 } 7173 currentNode = getParentNode(currentNode); 7174 } 7175 cache.set(element, result); 7176 return result; 7177 } 7178 function getClippingRect(_ref) { 7179 let { 7180 element, 7181 boundary, 7182 rootBoundary, 7183 strategy 7184 } = _ref; 7185 const elementClippingAncestors = boundary === "clippingAncestors" ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary); 7186 const clippingAncestors = [...elementClippingAncestors, rootBoundary]; 7187 const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy); 7188 let top = firstRect.top; 7189 let right = firstRect.right; 7190 let bottom = firstRect.bottom; 7191 let left = firstRect.left; 7192 for (let i2 = 1; i2 < clippingAncestors.length; i2++) { 7193 const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i2], strategy); 7194 top = max(rect.top, top); 7195 right = min(rect.right, right); 7196 bottom = min(rect.bottom, bottom); 7197 left = max(rect.left, left); 7198 } 7199 return { 7200 width: right - left, 7201 height: bottom - top, 7202 x: left, 7203 y: top 7204 }; 7205 } 7206 function getDimensions(element) { 7207 const { 7208 width, 7209 height 7210 } = getCssDimensions(element); 7211 return { 7212 width, 7213 height 7214 }; 7215 } 7216 function getRectRelativeToOffsetParent(element, offsetParent, strategy) { 7217 const isOffsetParentAnElement = isHTMLElement(offsetParent); 7218 const documentElement = getDocumentElement(offsetParent); 7219 const isFixed = strategy === "fixed"; 7220 const rect = getBoundingClientRect(element, true, isFixed, offsetParent); 7221 let scroll = { 7222 scrollLeft: 0, 7223 scrollTop: 0 7224 }; 7225 const offsets = createCoords(0); 7226 if (isOffsetParentAnElement || !isFixed) { 7227 if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) { 7228 scroll = getNodeScroll(offsetParent); 7229 } 7230 if (isOffsetParentAnElement) { 7231 const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent); 7232 offsets.x = offsetRect.x + offsetParent.clientLeft; 7233 offsets.y = offsetRect.y + offsetParent.clientTop; 7234 } 7235 } 7236 if (!isOffsetParentAnElement && documentElement) { 7237 offsets.x = getWindowScrollBarX(documentElement); 7238 } 7239 const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0); 7240 const x2 = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x; 7241 const y2 = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y; 7242 return { 7243 x: x2, 7244 y: y2, 7245 width: rect.width, 7246 height: rect.height 7247 }; 7248 } 7249 function isStaticPositioned(element) { 7250 return getComputedStyle2(element).position === "static"; 7251 } 7252 function getTrueOffsetParent(element, polyfill) { 7253 if (!isHTMLElement(element) || getComputedStyle2(element).position === "fixed") { 7254 return null; 7255 } 7256 if (polyfill) { 7257 return polyfill(element); 7258 } 7259 let rawOffsetParent = element.offsetParent; 7260 if (getDocumentElement(element) === rawOffsetParent) { 7261 rawOffsetParent = rawOffsetParent.ownerDocument.body; 7262 } 7263 return rawOffsetParent; 7264 } 7265 function getOffsetParent(element, polyfill) { 7266 const win = getWindow(element); 7267 if (isTopLayer(element)) { 7268 return win; 7269 } 7270 if (!isHTMLElement(element)) { 7271 let svgOffsetParent = getParentNode(element); 7272 while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) { 7273 if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) { 7274 return svgOffsetParent; 7275 } 7276 svgOffsetParent = getParentNode(svgOffsetParent); 7277 } 7278 return win; 7279 } 7280 let offsetParent = getTrueOffsetParent(element, polyfill); 7281 while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) { 7282 offsetParent = getTrueOffsetParent(offsetParent, polyfill); 7283 } 7284 if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) { 7285 return win; 7286 } 7287 return offsetParent || getContainingBlock(element) || win; 7288 } 7289 var getElementRects = async function(data) { 7290 const getOffsetParentFn = this.getOffsetParent || getOffsetParent; 7291 const getDimensionsFn = this.getDimensions; 7292 const floatingDimensions = await getDimensionsFn(data.floating); 7293 return { 7294 reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy), 7295 floating: { 7296 x: 0, 7297 y: 0, 7298 width: floatingDimensions.width, 7299 height: floatingDimensions.height 7300 } 7301 }; 7302 }; 7303 function isRTL(element) { 7304 return getComputedStyle2(element).direction === "rtl"; 7305 } 7306 var platform2 = { 7307 convertOffsetParentRelativeRectToViewportRelativeRect, 7308 getDocumentElement, 7309 getClippingRect, 7310 getOffsetParent, 7311 getElementRects, 7312 getClientRects, 7313 getDimensions, 7314 getScale, 7315 isElement, 7316 isRTL 7317 }; 7318 function rectsAreEqual(a2, b2) { 7319 return a2.x === b2.x && a2.y === b2.y && a2.width === b2.width && a2.height === b2.height; 7320 } 7321 function observeMove(element, onMove, ancestorResize) { 7322 let io = null; 7323 let timeoutId; 7324 const root = getDocumentElement(element); 7325 function cleanup() { 7326 var _io; 7327 clearTimeout(timeoutId); 7328 (_io = io) == null || _io.disconnect(); 7329 io = null; 7330 } 7331 function refresh(skip, threshold) { 7332 if (skip === void 0) { 7333 skip = false; 7334 } 7335 if (threshold === void 0) { 7336 threshold = 1; 7337 } 7338 cleanup(); 7339 const elementRectForRootMargin = element.getBoundingClientRect(); 7340 const { 7341 left, 7342 top, 7343 width, 7344 height 7345 } = elementRectForRootMargin; 7346 if (!skip) { 7347 onMove(); 7348 } 7349 if (!width || !height) { 7350 return; 7351 } 7352 const insetTop = floor(top); 7353 const insetRight = floor(root.clientWidth - (left + width)); 7354 const insetBottom = floor(root.clientHeight - (top + height)); 7355 const insetLeft = floor(left); 7356 const rootMargin = -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px"; 7357 const options = { 7358 rootMargin, 7359 threshold: max(0, min(1, threshold)) || 1 7360 }; 7361 let isFirstUpdate = true; 7362 function handleObserve(entries) { 7363 const ratio = entries[0].intersectionRatio; 7364 if (!rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) { 7365 return refresh(); 7366 } 7367 if (ratio !== threshold) { 7368 if (!isFirstUpdate) { 7369 return refresh(); 7370 } 7371 if (!ratio) { 7372 timeoutId = setTimeout(() => { 7373 refresh(false, 1e-7); 7374 }, 1e3); 7375 } else { 7376 refresh(false, ratio); 7377 } 7378 } 7379 isFirstUpdate = false; 7380 } 7381 try { 7382 io = new IntersectionObserver(handleObserve, { 7383 ...options, 7384 // Handle <iframe>s 7385 root: root.ownerDocument 7386 }); 7387 } catch (_e) { 7388 io = new IntersectionObserver(handleObserve, options); 7389 } 7390 io.observe(element); 7391 } 7392 const win = getWindow(element); 7393 const handleResize = () => refresh(ancestorResize); 7394 win.addEventListener("resize", handleResize); 7395 refresh(true); 7396 return () => { 7397 win.removeEventListener("resize", handleResize); 7398 cleanup(); 7399 }; 7400 } 7401 function autoUpdate(reference, floating, update2, options) { 7402 if (options === void 0) { 7403 options = {}; 7404 } 7405 const { 7406 ancestorScroll = true, 7407 ancestorResize = true, 7408 elementResize = typeof ResizeObserver === "function", 7409 layoutShift = typeof IntersectionObserver === "function", 7410 animationFrame = false 7411 } = options; 7412 const referenceEl = unwrapElement(reference); 7413 const ancestors = ancestorScroll || ancestorResize ? [...referenceEl ? getOverflowAncestors(referenceEl) : [], ...floating ? getOverflowAncestors(floating) : []] : []; 7414 ancestors.forEach((ancestor) => { 7415 ancestorScroll && ancestor.addEventListener("scroll", update2); 7416 ancestorResize && ancestor.addEventListener("resize", update2); 7417 }); 7418 const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update2, ancestorResize) : null; 7419 let reobserveFrame = -1; 7420 let resizeObserver = null; 7421 if (elementResize) { 7422 resizeObserver = new ResizeObserver((_ref) => { 7423 let [firstEntry] = _ref; 7424 if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) { 7425 resizeObserver.unobserve(floating); 7426 cancelAnimationFrame(reobserveFrame); 7427 reobserveFrame = requestAnimationFrame(() => { 7428 var _resizeObserver; 7429 (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating); 7430 }); 7431 } 7432 update2(); 7433 }); 7434 if (referenceEl && !animationFrame) { 7435 resizeObserver.observe(referenceEl); 7436 } 7437 if (floating) { 7438 resizeObserver.observe(floating); 7439 } 7440 } 7441 let frameId; 7442 let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null; 7443 if (animationFrame) { 7444 frameLoop(); 7445 } 7446 function frameLoop() { 7447 const nextRefRect = getBoundingClientRect(reference); 7448 if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) { 7449 update2(); 7450 } 7451 prevRefRect = nextRefRect; 7452 frameId = requestAnimationFrame(frameLoop); 7453 } 7454 update2(); 7455 return () => { 7456 var _resizeObserver2; 7457 ancestors.forEach((ancestor) => { 7458 ancestorScroll && ancestor.removeEventListener("scroll", update2); 7459 ancestorResize && ancestor.removeEventListener("resize", update2); 7460 }); 7461 cleanupIo == null || cleanupIo(); 7462 (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect(); 7463 resizeObserver = null; 7464 if (animationFrame) { 7465 cancelAnimationFrame(frameId); 7466 } 7467 }; 7468 } 7469 var offset2 = offset; 7470 var shift2 = shift; 7471 var flip2 = flip; 7472 var size2 = size; 7473 var limitShift2 = limitShift; 7474 var computePosition2 = (reference, floating, options) => { 7475 const cache = /* @__PURE__ */ new Map(); 7476 const mergedOptions = options != null ? options : {}; 7477 const platformWithCache = { 7478 ...platform2, 7479 ...mergedOptions.platform, 7480 _c: cache 7481 }; 7482 return computePosition(reference, floating, { 7483 ...mergedOptions, 7484 platform: platformWithCache 7485 }); 7486 }; 7487 7488 // node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs 7489 var React26 = __toESM(require_react(), 1); 7490 var import_react2 = __toESM(require_react(), 1); 7491 var ReactDOM3 = __toESM(require_react_dom(), 1); 7492 var isClient = typeof document !== "undefined"; 7493 var noop3 = function noop4() { 7494 }; 7495 var index = isClient ? import_react2.useLayoutEffect : noop3; 7496 function deepEqual(a2, b2) { 7497 if (a2 === b2) { 7498 return true; 7499 } 7500 if (typeof a2 !== typeof b2) { 7501 return false; 7502 } 7503 if (typeof a2 === "function" && a2.toString() === b2.toString()) { 7504 return true; 7505 } 7506 let length; 7507 let i2; 7508 let keys; 7509 if (a2 && b2 && typeof a2 === "object") { 7510 if (Array.isArray(a2)) { 7511 length = a2.length; 7512 if (length !== b2.length) return false; 7513 for (i2 = length; i2-- !== 0; ) { 7514 if (!deepEqual(a2[i2], b2[i2])) { 7515 return false; 7516 } 7517 } 7518 return true; 7519 } 7520 keys = Object.keys(a2); 7521 length = keys.length; 7522 if (length !== Object.keys(b2).length) { 7523 return false; 7524 } 7525 for (i2 = length; i2-- !== 0; ) { 7526 if (!{}.hasOwnProperty.call(b2, keys[i2])) { 7527 return false; 7528 } 7529 } 7530 for (i2 = length; i2-- !== 0; ) { 7531 const key = keys[i2]; 7532 if (key === "_owner" && a2.$$typeof) { 7533 continue; 7534 } 7535 if (!deepEqual(a2[key], b2[key])) { 7536 return false; 7537 } 7538 } 7539 return true; 7540 } 7541 return a2 !== a2 && b2 !== b2; 7542 } 7543 function getDPR(element) { 7544 if (typeof window === "undefined") { 7545 return 1; 7546 } 7547 const win = element.ownerDocument.defaultView || window; 7548 return win.devicePixelRatio || 1; 7549 } 7550 function roundByDPR(element, value) { 7551 const dpr = getDPR(element); 7552 return Math.round(value * dpr) / dpr; 7553 } 7554 function useLatestRef(value) { 7555 const ref = React26.useRef(value); 7556 index(() => { 7557 ref.current = value; 7558 }); 7559 return ref; 7560 } 7561 function useFloating(options) { 7562 if (options === void 0) { 7563 options = {}; 7564 } 7565 const { 7566 placement = "bottom", 7567 strategy = "absolute", 7568 middleware = [], 7569 platform: platform3, 7570 elements: { 7571 reference: externalReference, 7572 floating: externalFloating 7573 } = {}, 7574 transform = true, 7575 whileElementsMounted, 7576 open 7577 } = options; 7578 const [data, setData] = React26.useState({ 7579 x: 0, 7580 y: 0, 7581 strategy, 7582 placement, 7583 middlewareData: {}, 7584 isPositioned: false 7585 }); 7586 const [latestMiddleware, setLatestMiddleware] = React26.useState(middleware); 7587 if (!deepEqual(latestMiddleware, middleware)) { 7588 setLatestMiddleware(middleware); 7589 } 7590 const [_reference, _setReference] = React26.useState(null); 7591 const [_floating, _setFloating] = React26.useState(null); 7592 const setReference = React26.useCallback((node) => { 7593 if (node !== referenceRef.current) { 7594 referenceRef.current = node; 7595 _setReference(node); 7596 } 7597 }, []); 7598 const setFloating = React26.useCallback((node) => { 7599 if (node !== floatingRef.current) { 7600 floatingRef.current = node; 7601 _setFloating(node); 7602 } 7603 }, []); 7604 const referenceEl = externalReference || _reference; 7605 const floatingEl = externalFloating || _floating; 7606 const referenceRef = React26.useRef(null); 7607 const floatingRef = React26.useRef(null); 7608 const dataRef = React26.useRef(data); 7609 const hasWhileElementsMounted = whileElementsMounted != null; 7610 const whileElementsMountedRef = useLatestRef(whileElementsMounted); 7611 const platformRef = useLatestRef(platform3); 7612 const openRef = useLatestRef(open); 7613 const update2 = React26.useCallback(() => { 7614 if (!referenceRef.current || !floatingRef.current) { 7615 return; 7616 } 7617 const config = { 7618 placement, 7619 strategy, 7620 middleware: latestMiddleware 7621 }; 7622 if (platformRef.current) { 7623 config.platform = platformRef.current; 7624 } 7625 computePosition2(referenceRef.current, floatingRef.current, config).then((data2) => { 7626 const fullData = { 7627 ...data2, 7628 // The floating element's position may be recomputed while it's closed 7629 // but still mounted (such as when transitioning out). To ensure 7630 // `isPositioned` will be `false` initially on the next open, avoid 7631 // setting it to `true` when `open === false` (must be specified). 7632 isPositioned: openRef.current !== false 7633 }; 7634 if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) { 7635 dataRef.current = fullData; 7636 ReactDOM3.flushSync(() => { 7637 setData(fullData); 7638 }); 7639 } 7640 }); 7641 }, [latestMiddleware, placement, strategy, platformRef, openRef]); 7642 index(() => { 7643 if (open === false && dataRef.current.isPositioned) { 7644 dataRef.current.isPositioned = false; 7645 setData((data2) => ({ 7646 ...data2, 7647 isPositioned: false 7648 })); 7649 } 7650 }, [open]); 7651 const isMountedRef = React26.useRef(false); 7652 index(() => { 7653 isMountedRef.current = true; 7654 return () => { 7655 isMountedRef.current = false; 7656 }; 7657 }, []); 7658 index(() => { 7659 if (referenceEl) referenceRef.current = referenceEl; 7660 if (floatingEl) floatingRef.current = floatingEl; 7661 if (referenceEl && floatingEl) { 7662 if (whileElementsMountedRef.current) { 7663 return whileElementsMountedRef.current(referenceEl, floatingEl, update2); 7664 } 7665 update2(); 7666 } 7667 }, [referenceEl, floatingEl, update2, whileElementsMountedRef, hasWhileElementsMounted]); 7668 const refs = React26.useMemo(() => ({ 7669 reference: referenceRef, 7670 floating: floatingRef, 7671 setReference, 7672 setFloating 7673 }), [setReference, setFloating]); 7674 const elements = React26.useMemo(() => ({ 7675 reference: referenceEl, 7676 floating: floatingEl 7677 }), [referenceEl, floatingEl]); 7678 const floatingStyles = React26.useMemo(() => { 7679 const initialStyles = { 7680 position: strategy, 7681 left: 0, 7682 top: 0 7683 }; 7684 if (!elements.floating) { 7685 return initialStyles; 7686 } 7687 const x2 = roundByDPR(elements.floating, data.x); 7688 const y2 = roundByDPR(elements.floating, data.y); 7689 if (transform) { 7690 return { 7691 ...initialStyles, 7692 transform: "translate(" + x2 + "px, " + y2 + "px)", 7693 ...getDPR(elements.floating) >= 1.5 && { 7694 willChange: "transform" 7695 } 7696 }; 7697 } 7698 return { 7699 position: strategy, 7700 left: x2, 7701 top: y2 7702 }; 7703 }, [strategy, transform, elements.floating, data.x, data.y]); 7704 return React26.useMemo(() => ({ 7705 ...data, 7706 update: update2, 7707 refs, 7708 elements, 7709 floatingStyles 7710 }), [data, update2, refs, elements, floatingStyles]); 7711 } 7712 var offset3 = (options, deps) => { 7713 const result = offset2(options); 7714 return { 7715 name: result.name, 7716 fn: result.fn, 7717 options: [options, deps] 7718 }; 7719 }; 7720 var shift3 = (options, deps) => { 7721 const result = shift2(options); 7722 return { 7723 name: result.name, 7724 fn: result.fn, 7725 options: [options, deps] 7726 }; 7727 }; 7728 var limitShift3 = (options, deps) => { 7729 const result = limitShift2(options); 7730 return { 7731 fn: result.fn, 7732 options: [options, deps] 7733 }; 7734 }; 7735 var flip3 = (options, deps) => { 7736 const result = flip2(options); 7737 return { 7738 name: result.name, 7739 fn: result.fn, 7740 options: [options, deps] 7741 }; 7742 }; 7743 var size3 = (options, deps) => { 7744 const result = size2(options); 7745 return { 7746 name: result.name, 7747 fn: result.fn, 7748 options: [options, deps] 7749 }; 7750 }; 7751 7752 // node_modules/@base-ui/react/utils/popups/popupHandle.mjs 7753 var BasePopupHandle = class { 7754 /** 7755 * Stores of every root currently using this handle, in attach order. A handle is meant to be used 7756 * by a single mounted root, but roots can transiently overlap (e.g. during an animated route 7757 * transition), so this stack lets `attachStore`'s cleanup restore the previous root instead of 7758 * leaving a still-mounted root uncontrollable when a newer overlapping root detaches first. 7759 */ 7760 attachedStores = []; 7761 /** 7762 * Store of the root that currently controls the handle: the most recently attached one still 7763 * mounted, or `null` when no root is attached. Imperative methods are no-ops while this is `null`. 7764 */ 7765 attachedStoreValue = null; 7766 /** 7767 * Listeners notified when `attachedStore` changes, so detached triggers can follow the store pointer. 7768 */ 7769 storeListeners = /* @__PURE__ */ new Set(); 7770 /** 7771 * Creates a handle backed by the store used while no root is attached. 7772 * 7773 * @param fallbackStore Inert, closed store handed to detached triggers while no root is attached, 7774 * so they can render and register without a mounted root. Triggers register into whichever store 7775 * `store` currently resolves to, so while detached they live in this store's trigger map and 7776 * migrate themselves to the root's store (and back) as it attaches/detaches. 7777 * @param componentName Component name used to prefix dev warnings, e.g. `'Menu'` produces 7778 * `MenuHandle.open()` in warning text. 7779 * @param throwOnMissingTrigger Whether `open(triggerId)` throws when no trigger with that id is 7780 * registered. Anchored popups (Menu, Popover, Tooltip, PreviewCard) need a trigger to anchor to, 7781 * so they throw; Dialog is not anchored and instead opens unassociated with a dev warning. 7782 */ 7783 constructor(fallbackStore, componentName, throwOnMissingTrigger = true) { 7784 this.fallbackStore = fallbackStore; 7785 this.componentName = componentName; 7786 this.throwOnMissingTrigger = throwOnMissingTrigger; 7787 } 7788 get attachedStore() { 7789 return this.attachedStoreValue; 7790 } 7791 /** 7792 * Store that detached triggers read from: the attached root's store, or an inert fallback store 7793 * used while no root is attached. 7794 * @internal 7795 */ 7796 get store() { 7797 return this.attachedStoreValue ?? this.fallbackStore; 7798 } 7799 /** 7800 * Stable fallback store used for server rendering and hydration. Root stores cannot be recorded on 7801 * the handle during render because a handle can be shared by concurrent server-rendered requests. 7802 * @internal 7803 */ 7804 get serverStore() { 7805 return this.fallbackStore; 7806 } 7807 /** 7808 * Subscribes to changes of the attached store pointer so detached triggers re-render and re-bind 7809 * when a root attaches or detaches. Returns a function that removes the listener. 7810 * @internal 7811 */ 7812 subscribeStore(listener) { 7813 this.storeListeners.add(listener); 7814 return () => { 7815 this.storeListeners.delete(listener); 7816 }; 7817 } 7818 /** 7819 * Points the handle at a root's store and notifies subscribers so detached triggers re-render and 7820 * re-register into it (their registration ref re-fires on the store-pointer change). Returns a 7821 * cleanup function that detaches the store again. 7822 * @internal 7823 */ 7824 attachStore(newStore) { 7825 this.attachedStores.push(newStore); 7826 this.setActiveStore(newStore); 7827 if (true) { 7828 if (this.attachedStores.length > 1) { 7829 const dev = this; 7830 (dev.overlapWarningFrame ??= AnimationFrame.create()).request(() => { 7831 if (this.attachedStores.length > 1) { 7832 console.warn("Base UI: A handle is attached to more than one mounted root at the same time. The most recently mounted root takes over and the previous one stops being controlled by the handle. A handle should be used by a single root that stays mounted for the lifetime of the handle."); 7833 } 7834 }); 7835 } 7836 } 7837 return () => { 7838 const index2 = this.attachedStores.lastIndexOf(newStore); 7839 if (index2 !== -1) { 7840 this.attachedStores.splice(index2, 1); 7841 } 7842 this.setActiveStore(this.attachedStores[this.attachedStores.length - 1] ?? null); 7843 }; 7844 } 7845 /** 7846 * Sets the store that currently controls the handle and notifies subscribers when it changes, so 7847 * detached triggers re-render and migrate their registration to the new store. 7848 */ 7849 setActiveStore(store) { 7850 if (this.attachedStoreValue !== store) { 7851 this.attachedStoreValue = store; 7852 this.storeListeners.forEach((listener) => { 7853 listener(); 7854 }); 7855 } 7856 } 7857 /** 7858 * Opens the attached root's store and associates it with the trigger with the given id, or a 7859 * no-op (with a dev warning) while no root is attached. Shared by every concrete handle's public 7860 * `open()` method, which only narrows the parameter type. 7861 * 7862 * When a trigger id is given but no matching trigger is registered, anchored popups throw (see 7863 * `throwOnMissingTrigger`); Dialog opens unassociated with a dev warning instead. 7864 * 7865 * This method should only be called in an event handler or an effect (not during rendering). 7866 * 7867 * @param triggerId ID of the trigger to associate with the popup, or `null`/`undefined` to open 7868 * without associating any trigger. 7869 */ 7870 openByTrigger(triggerId) { 7871 const attachedStore = this.attachedStore; 7872 if (attachedStore === null) { 7873 if (true) { 7874 console.warn(`Base UI: $this.componentName}Handle.open() was called while no root using this handle is mounted. The call was ignored; mount a root with this handle before opening it imperatively.`); 7875 } 7876 return; 7877 } 7878 let triggerElement; 7879 if (triggerId) { 7880 for (let i2 = this.attachedStores.length - 1; i2 >= 0 && !triggerElement; i2 -= 1) { 7881 triggerElement = this.attachedStores[i2].context.triggerElements.getById(triggerId); 7882 } 7883 triggerElement ??= this.fallbackStore.context.triggerElements.getById(triggerId); 7884 } 7885 if (triggerId && !triggerElement) { 7886 if (this.throwOnMissingTrigger) { 7887 throw new Error(true ? `Base UI: $this.componentName}Handle.open() was called with the trigger id "$triggerId}", but no matching trigger is registered with this handle. An anchored popup cannot open without a trigger to anchor to. Pass the id of a mounted $this.componentName}.Trigger that has this handle set on its "handle" prop.` : formatErrorMessage_default(99, this.componentName, triggerId, this.componentName)); 7888 } 7889 if (true) { 7890 console.warn(`Base UI: $this.componentName}Handle.open: No trigger found with id "$triggerId}". The popup will open, but the trigger will not be associated with it.`); 7891 } 7892 } 7893 attachedStore.setOpen(true, createChangeEventDetails(reason_parts_exports.imperativeAction, void 0, triggerElement)); 7894 } 7895 /** 7896 * Closes the popup by setting the attached root's store to closed, or a no-op (with a dev warning) 7897 * while no root is attached. Shared by every concrete handle's public `close()` method. 7898 * 7899 * This method should only be called in an event handler or an effect (not during rendering). 7900 */ 7901 closePopup() { 7902 const attachedStore = this.attachedStore; 7903 if (attachedStore === null) { 7904 if (true) { 7905 console.warn(`Base UI: $this.componentName}Handle.close() was called while no root using this handle is mounted. The call was ignored.`); 7906 } 7907 return; 7908 } 7909 attachedStore.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction)); 7910 } 7911 }; 7912 7913 // node_modules/@base-ui/react/utils/popups/popupStoreUtils.mjs 7914 var React31 = __toESM(require_react(), 1); 7915 var ReactDOM4 = __toESM(require_react_dom(), 1); 7916 7917 // node_modules/@base-ui/react/floating-ui-react/hooks/useSyncedFloatingRootContext.mjs 7918 var React30 = __toESM(require_react(), 1); 7919 7920 // node_modules/@base-ui/utils/store/useStore.mjs 7921 var React28 = __toESM(require_react(), 1); 7922 var import_shim = __toESM(require_shim(), 1); 7923 var import_with_selector = __toESM(require_with_selector(), 1); 7924 7925 // node_modules/@base-ui/utils/fastHooks.mjs 7926 var React27 = __toESM(require_react(), 1); 7927 var hooks = []; 7928 var currentInstance = void 0; 7929 function getInstance() { 7930 return currentInstance; 7931 } 7932 function register(hook) { 7933 hooks.push(hook); 7934 } 7935 function fastComponent(fn) { 7936 const FastComponent = (props, forwardedRef) => { 7937 const instance = useRefWithInit(createInstance).current; 7938 let result; 7939 try { 7940 currentInstance = instance; 7941 for (const hook of hooks) { 7942 hook.before(instance); 7943 } 7944 result = fn(props, forwardedRef); 7945 for (const hook of hooks) { 7946 hook.after(instance); 7947 } 7948 instance.didInitialize = true; 7949 } finally { 7950 currentInstance = void 0; 7951 } 7952 return result; 7953 }; 7954 FastComponent.displayName = fn.displayName || fn.name; 7955 return FastComponent; 7956 } 7957 function fastComponentRef(fn) { 7958 return /* @__PURE__ */ React27.forwardRef(fastComponent(fn)); 7959 } 7960 function createInstance() { 7961 return { 7962 didInitialize: false 7963 }; 7964 } 7965 7966 // node_modules/@base-ui/utils/store/useStore.mjs 7967 var canUseRawUseSyncExternalStore = isReactVersionAtLeast(19); 7968 var useStoreImplementation = canUseRawUseSyncExternalStore ? useStoreFast : useStoreLegacy; 7969 function useStore(store, selector2, a1, a2, a3) { 7970 return useStoreImplementation(store, selector2, a1, a2, a3); 7971 } 7972 function useStoreR19(store, selector2, a1, a2, a3) { 7973 const getSelection = React28.useCallback(() => selector2(store.getSnapshot(), a1, a2, a3), [store, selector2, a1, a2, a3]); 7974 return (0, import_shim.useSyncExternalStore)(store.subscribe, getSelection, getSelection); 7975 } 7976 register({ 7977 before(instance) { 7978 instance.syncIndex = 0; 7979 if (!instance.didInitialize) { 7980 instance.syncTick = 1; 7981 instance.syncHooks = []; 7982 instance.didChangeStore = true; 7983 instance.getSnapshot = () => { 7984 let didChange2 = false; 7985 for (let i2 = 0; i2 < instance.syncHooks.length; i2 += 1) { 7986 const hook = instance.syncHooks[i2]; 7987 const value = hook.selector(hook.store.state, hook.a1, hook.a2, hook.a3); 7988 if (!Object.is(hook.value, value)) { 7989 didChange2 = true; 7990 hook.value = value; 7991 } 7992 } 7993 if (didChange2) { 7994 instance.syncTick += 1; 7995 } 7996 return instance.syncTick; 7997 }; 7998 } 7999 }, 8000 after(instance) { 8001 if (instance.syncHooks.length > 0) { 8002 if (instance.didChangeStore) { 8003 instance.didChangeStore = false; 8004 instance.subscribe = (onStoreChange) => { 8005 const stores = /* @__PURE__ */ new Set(); 8006 for (const hook of instance.syncHooks) { 8007 stores.add(hook.store); 8008 } 8009 const unsubscribes = []; 8010 for (const store of stores) { 8011 unsubscribes.push(store.subscribe(onStoreChange)); 8012 } 8013 return () => { 8014 for (const unsubscribe of unsubscribes) { 8015 unsubscribe(); 8016 } 8017 }; 8018 }; 8019 } 8020 (0, import_shim.useSyncExternalStore)(instance.subscribe, instance.getSnapshot, instance.getSnapshot); 8021 } 8022 } 8023 }); 8024 function useStoreFast(store, selector2, a1, a2, a3) { 8025 const instance = getInstance(); 8026 if (!instance) { 8027 return useStoreR19(store, selector2, a1, a2, a3); 8028 } 8029 const index2 = instance.syncIndex; 8030 instance.syncIndex += 1; 8031 let hook; 8032 if (!instance.didInitialize) { 8033 hook = { 8034 store, 8035 selector: selector2, 8036 a1, 8037 a2, 8038 a3, 8039 value: selector2(store.getSnapshot(), a1, a2, a3) 8040 }; 8041 instance.syncHooks.push(hook); 8042 } else { 8043 hook = instance.syncHooks[index2]; 8044 if (hook.store !== store || hook.selector !== selector2 || !Object.is(hook.a1, a1) || !Object.is(hook.a2, a2) || !Object.is(hook.a3, a3)) { 8045 if (hook.store !== store) { 8046 instance.didChangeStore = true; 8047 } 8048 hook.store = store; 8049 hook.selector = selector2; 8050 hook.a1 = a1; 8051 hook.a2 = a2; 8052 hook.a3 = a3; 8053 hook.value = selector2(store.getSnapshot(), a1, a2, a3); 8054 } 8055 } 8056 return hook.value; 8057 } 8058 function useStoreLegacy(store, selector2, a1, a2, a3) { 8059 return (0, import_with_selector.useSyncExternalStoreWithSelector)(store.subscribe, store.getSnapshot, store.getSnapshot, (state) => selector2(state, a1, a2, a3)); 8060 } 8061 8062 // node_modules/@base-ui/utils/store/Store.mjs 8063 var Store = class { 8064 /** 8065 * The current state of the store. 8066 * This property is updated immediately when the state changes as a result of calling {@link setState}, {@link update}, or {@link set}. 8067 * To subscribe to state changes, use the {@link useState} method. The value returned by {@link useState} is updated after the component renders (similarly to React's useState). 8068 * The values can be used directly (to avoid subscribing to the store) in effects or event handlers. 8069 * 8070 * Do not modify properties in state directly. Instead, use the provided methods to ensure proper state management and listener notification. 8071 */ 8072 // Internal state to handle recursive `setState()` calls 8073 constructor(state) { 8074 this.state = state; 8075 this.listeners = /* @__PURE__ */ new Set(); 8076 this.updateTick = 0; 8077 } 8078 /** 8079 * Registers a listener that will be called whenever the store's state changes. 8080 * 8081 * @param fn The listener function to be called on state changes. 8082 * @returns A function to unsubscribe the listener. 8083 */ 8084 subscribe = (fn) => { 8085 this.listeners.add(fn); 8086 return () => { 8087 this.listeners.delete(fn); 8088 }; 8089 }; 8090 /** 8091 * Returns the current state of the store. 8092 */ 8093 getSnapshot = () => { 8094 return this.state; 8095 }; 8096 /** 8097 * Updates the entire store's state and notifies all registered listeners. 8098 * 8099 * @param newState The new state to set for the store. 8100 */ 8101 setState(newState) { 8102 if (this.state === newState) { 8103 return; 8104 } 8105 this.state = newState; 8106 this.updateTick += 1; 8107 const currentTick = this.updateTick; 8108 for (const listener of this.listeners) { 8109 if (currentTick !== this.updateTick) { 8110 return; 8111 } 8112 listener(newState); 8113 } 8114 } 8115 /** 8116 * Merges the provided changes into the current state and notifies listeners if there are changes. 8117 * 8118 * @param changes An object containing the changes to apply to the current state. 8119 */ 8120 update(changes) { 8121 for (const key in changes) { 8122 if (!Object.is(this.state[key], changes[key])) { 8123 this.setState({ 8124 ...this.state, 8125 ...changes 8126 }); 8127 return; 8128 } 8129 } 8130 } 8131 /** 8132 * Sets a specific key in the store's state to a new value and notifies listeners if the value has changed. 8133 * 8134 * @param key The key in the store's state to update. 8135 * @param value The new value to set for the specified key. 8136 */ 8137 set(key, value) { 8138 if (!Object.is(this.state[key], value)) { 8139 this.setState({ 8140 ...this.state, 8141 [key]: value 8142 }); 8143 } 8144 } 8145 /** 8146 * Gives the state a new reference and updates all registered listeners. 8147 */ 8148 notifyAll() { 8149 const newState = { 8150 ...this.state 8151 }; 8152 this.setState(newState); 8153 } 8154 use(selector2, a1, a2, a3) { 8155 return useStore(this, selector2, a1, a2, a3); 8156 } 8157 }; 8158 8159 // node_modules/@base-ui/utils/store/ReactStore.mjs 8160 var React29 = __toESM(require_react(), 1); 8161 var ReactStore = class extends Store { 8162 /** 8163 * Creates a new ReactStore instance. 8164 * 8165 * @param state Initial state of the store. 8166 * @param context Non-reactive context values. 8167 * @param selectors Optional selectors for use with `useState`. 8168 */ 8169 constructor(state, context = {}, selectors4) { 8170 super(state); 8171 this.context = context; 8172 this.selectors = selectors4; 8173 } 8174 /** 8175 * Non-reactive values such as refs, callbacks, etc. 8176 */ 8177 /** 8178 * Synchronizes a single external value into the store. 8179 * 8180 * Note that the while the value in `state` is updated immediately, the value returned 8181 * by `useState` is updated before the next render (similarly to React's `useState`). 8182 */ 8183 useSyncedValue(key, value) { 8184 React29.useDebugValue(key); 8185 const store = this; 8186 useIsoLayoutEffect(() => { 8187 if (store.state[key] !== value) { 8188 store.set(key, value); 8189 } 8190 }, [store, key, value]); 8191 } 8192 /** 8193 * Synchronizes a single external value into the store and 8194 * cleans it up (sets to `undefined`) on unmount. 8195 * 8196 * Note that the while the value in `state` is updated immediately, the value returned 8197 * by `useState` is updated before the next render (similarly to React's `useState`). 8198 */ 8199 useSyncedValueWithCleanup(key, value) { 8200 const store = this; 8201 useIsoLayoutEffect(() => { 8202 if (store.state[key] !== value) { 8203 store.set(key, value); 8204 } 8205 return () => { 8206 store.set(key, void 0); 8207 }; 8208 }, [store, key, value]); 8209 } 8210 /** 8211 * Synchronizes multiple external values into the store. 8212 * 8213 * Note that the while the values in `state` are updated immediately, the values returned 8214 * by `useState` are updated before the next render (similarly to React's `useState`). 8215 */ 8216 useSyncedValues(statePart) { 8217 const store = this; 8218 if (true) { 8219 React29.useDebugValue(statePart, (p2) => Object.keys(p2)); 8220 const keys = React29.useRef(Object.keys(statePart)).current; 8221 const nextKeys = Object.keys(statePart); 8222 if (keys.length !== nextKeys.length || keys.some((key, index2) => key !== nextKeys[index2])) { 8223 console.error("ReactStore.useSyncedValues expects the same prop keys on every render. Keys should be stable."); 8224 } 8225 } 8226 const dependencies = Object.values(statePart); 8227 useIsoLayoutEffect(() => { 8228 store.update(statePart); 8229 }, [store, ...dependencies]); 8230 } 8231 /** 8232 * Registers a controllable prop pair (`controlled`, `defaultValue`) for a specific key. If `controlled` 8233 * is non-undefined, the store's state at `key` is updated to match `controlled`. 8234 */ 8235 useControlledProp(key, controlled) { 8236 React29.useDebugValue(key); 8237 const store = this; 8238 const isControlled = controlled !== void 0; 8239 useIsoLayoutEffect(() => { 8240 if (isControlled && !Object.is(store.state[key], controlled)) { 8241 store.setState({ 8242 ...store.state, 8243 [key]: controlled 8244 }); 8245 } 8246 }, [store, key, controlled, isControlled]); 8247 if (true) { 8248 const cache = this.controlledValues ??= /* @__PURE__ */ new Map(); 8249 if (!cache.has(key)) { 8250 cache.set(key, isControlled); 8251 } 8252 const previouslyControlled = cache.get(key); 8253 if (previouslyControlled !== void 0 && previouslyControlled !== isControlled) { 8254 console.error(`A component is changing the $isControlled ? "" : "un"}controlled state of $key.toString()} to be $isControlled ? "un" : ""}controlled. Elements should not switch from uncontrolled to controlled (or vice versa).`); 8255 } 8256 } 8257 } 8258 /** Gets the current value from the store using a selector with the provided key. 8259 * 8260 * @param key Key of the selector to use. 8261 */ 8262 select(key, a1, a2, a3) { 8263 const selector2 = this.selectors[key]; 8264 return selector2(this.state, a1, a2, a3); 8265 } 8266 /** 8267 * Returns a value from the store's state using a selector function. 8268 * Used to subscribe to specific parts of the state. 8269 * This methods causes a rerender whenever the selected state changes. 8270 * 8271 * @param key Key of the selector to use. 8272 */ 8273 useState(key, a1, a2, a3) { 8274 React29.useDebugValue(key); 8275 return useStore(this, this.selectors[key], a1, a2, a3); 8276 } 8277 /** 8278 * Wraps a function with `useStableCallback` to ensure it has a stable reference 8279 * and assigns it to the context. 8280 * 8281 * @param key Key of the event callback. Must be a function in the context. 8282 * @param fn Function to assign. 8283 */ 8284 useContextCallback(key, fn) { 8285 React29.useDebugValue(key); 8286 const stableFunction = useStableCallback(fn ?? NOOP); 8287 this.context[key] = stableFunction; 8288 } 8289 /** 8290 * Returns a stable setter function for a specific key in the store's state. 8291 * It's commonly used to pass as a ref callback to React elements. 8292 * 8293 * @param key Key of the state to set. 8294 */ 8295 useStateSetter(key) { 8296 const ref = React29.useRef(void 0); 8297 if (ref.current === void 0) { 8298 ref.current = (value) => { 8299 this.set(key, value); 8300 }; 8301 } 8302 return ref.current; 8303 } 8304 /** 8305 * Observes changes derived from the store's selectors and calls the listener when the selected value changes. 8306 * 8307 * @param key Key of the selector to observe. 8308 * @param listener Listener function called when the selector result changes. 8309 */ 8310 observe(selector2, listener) { 8311 let selectFn; 8312 if (typeof selector2 === "function") { 8313 selectFn = selector2; 8314 } else { 8315 selectFn = this.selectors[selector2]; 8316 } 8317 let prevValue = selectFn(this.state); 8318 listener(prevValue, prevValue, this); 8319 return this.subscribe((nextState) => { 8320 const nextValue = selectFn(nextState); 8321 if (!Object.is(prevValue, nextValue)) { 8322 const oldValue = prevValue; 8323 prevValue = nextValue; 8324 listener(nextValue, oldValue, this); 8325 } 8326 }); 8327 } 8328 }; 8329 8330 // node_modules/@base-ui/react/floating-ui-react/components/FloatingRootStore.mjs 8331 var selectors = { 8332 open: (state) => state.open, 8333 transitionStatus: (state) => state.transitionStatus, 8334 domReferenceElement: (state) => state.domReferenceElement, 8335 referenceElement: (state) => state.positionReference ?? state.referenceElement, 8336 floatingElement: (state) => state.floatingElement, 8337 floatingId: (state) => state.floatingId 8338 }; 8339 var FloatingRootStore = class extends ReactStore { 8340 constructor(options) { 8341 const { 8342 syncOnly, 8343 nested, 8344 onOpenChange, 8345 triggerElements, 8346 ...initialState 8347 } = options; 8348 super({ 8349 ...initialState, 8350 positionReference: initialState.referenceElement, 8351 domReferenceElement: initialState.referenceElement 8352 }, { 8353 onOpenChange, 8354 dataRef: { 8355 current: {} 8356 }, 8357 events: createEventEmitter(), 8358 nested, 8359 triggerElements 8360 }, selectors); 8361 this.syncOnly = syncOnly; 8362 } 8363 /** 8364 * Syncs the event used by hover logic to distinguish hover-open from click-like interaction. 8365 */ 8366 syncOpenEvent = (newOpen, event) => { 8367 if (!newOpen || !this.state.open || // Prevent a pending hover-open from overwriting a click-open event, while allowing 8368 // click events to upgrade a hover-open. 8369 event != null && isClickLikeEvent(event)) { 8370 this.context.dataRef.current.openEvent = newOpen ? event : void 0; 8371 } 8372 }; 8373 /** 8374 * Runs the root-owned side effects for an open state change. 8375 */ 8376 dispatchOpenChange = (newOpen, eventDetails) => { 8377 this.syncOpenEvent(newOpen, eventDetails.event); 8378 const details = { 8379 open: newOpen, 8380 reason: eventDetails.reason, 8381 nativeEvent: eventDetails.event, 8382 nested: this.context.nested, 8383 triggerElement: eventDetails.trigger 8384 }; 8385 this.context.events.emit("openchange", details); 8386 }; 8387 /** 8388 * Emits the `openchange` event through the internal event emitter and calls the `onOpenChange` handler with the provided arguments. 8389 * 8390 * @param newOpen The new open state. 8391 * @param eventDetails Details about the event that triggered the open state change. 8392 */ 8393 setOpen = (newOpen, eventDetails) => { 8394 if (this.syncOnly) { 8395 this.context.onOpenChange?.(newOpen, eventDetails); 8396 return; 8397 } 8398 this.dispatchOpenChange(newOpen, eventDetails); 8399 this.context.onOpenChange?.(newOpen, eventDetails); 8400 }; 8401 }; 8402 8403 // node_modules/@base-ui/react/floating-ui-react/hooks/useSyncedFloatingRootContext.mjs 8404 function useSyncedFloatingRootContext(options) { 8405 const { 8406 popupStore, 8407 treatPopupAsFloatingElement = false, 8408 floatingRootContext: floatingRootContextProp, 8409 floatingId, 8410 nested, 8411 onOpenChange 8412 } = options; 8413 const open = popupStore.useState("open"); 8414 const referenceElement = popupStore.useState("activeTriggerElement"); 8415 const floatingElement = popupStore.useState(treatPopupAsFloatingElement ? "popupElement" : "positionerElement"); 8416 const triggerElements = popupStore.context.triggerElements; 8417 const handleOpenChange = onOpenChange; 8418 const internalStoreRef = React30.useRef(null); 8419 if (floatingRootContextProp === void 0 && internalStoreRef.current === null) { 8420 internalStoreRef.current = new FloatingRootStore({ 8421 open, 8422 transitionStatus: void 0, 8423 referenceElement, 8424 floatingElement, 8425 triggerElements, 8426 onOpenChange: handleOpenChange, 8427 floatingId, 8428 syncOnly: true, 8429 nested 8430 }); 8431 } 8432 const store = floatingRootContextProp ?? internalStoreRef.current; 8433 popupStore.useSyncedValue("floatingId", floatingId); 8434 useIsoLayoutEffect(() => { 8435 const valuesToSync = { 8436 open, 8437 floatingId, 8438 referenceElement, 8439 floatingElement 8440 }; 8441 if (isElement(referenceElement)) { 8442 valuesToSync.domReferenceElement = referenceElement; 8443 } 8444 if (store.state.positionReference === store.state.referenceElement) { 8445 valuesToSync.positionReference = referenceElement; 8446 } 8447 store.update(valuesToSync); 8448 }, [open, floatingId, referenceElement, floatingElement, store]); 8449 store.context.onOpenChange = handleOpenChange; 8450 store.context.nested = nested; 8451 return store; 8452 } 8453 8454 // node_modules/@base-ui/react/utils/popups/popupStoreUtils.mjs 8455 var FOCUSABLE_POPUP_PROPS = { 8456 tabIndex: -1, 8457 [FOCUSABLE_ATTRIBUTE]: "" 8458 }; 8459 function usePopupRootStore(createStore2, treatPopupAsFloatingElement = false) { 8460 const floatingId = useId(); 8461 const nested = useFloatingParentNodeId() != null; 8462 const store = useRefWithInit(() => createStore2(floatingId, nested)).current; 8463 useSyncedFloatingRootContext({ 8464 popupStore: store, 8465 treatPopupAsFloatingElement, 8466 floatingRootContext: store.state.floatingRootContext, 8467 floatingId, 8468 nested, 8469 onOpenChange: store.setOpen 8470 }); 8471 return store; 8472 } 8473 function PopupHandleAttachment({ 8474 handle, 8475 store 8476 }) { 8477 useIsoLayoutEffect(() => { 8478 return handle.attachStore(store); 8479 }, [handle, store]); 8480 return null; 8481 } 8482 function useTriggerRegistration(id, store) { 8483 const registeredElementIdRef = React31.useRef(null); 8484 const registeredElementRef = React31.useRef(null); 8485 return React31.useCallback((element) => { 8486 if (id === void 0) { 8487 return; 8488 } 8489 let shouldSyncTriggerCount = false; 8490 if (registeredElementIdRef.current !== null) { 8491 const registeredId = registeredElementIdRef.current; 8492 const registeredElement = registeredElementRef.current; 8493 const currentElement = store.context.triggerElements.getById(registeredId); 8494 if (registeredElement && currentElement === registeredElement) { 8495 store.context.triggerElements.delete(registeredId); 8496 shouldSyncTriggerCount = true; 8497 } 8498 registeredElementIdRef.current = null; 8499 registeredElementRef.current = null; 8500 } 8501 if (element !== null) { 8502 registeredElementIdRef.current = id; 8503 registeredElementRef.current = element; 8504 store.context.triggerElements.add(id, element); 8505 shouldSyncTriggerCount = true; 8506 } 8507 if (shouldSyncTriggerCount) { 8508 const triggerCount = store.context.triggerElements.size; 8509 if (store.select("open") && store.state.triggerCount !== triggerCount) { 8510 store.set("triggerCount", triggerCount); 8511 } 8512 } 8513 }, [store, id]); 8514 } 8515 function setPopupOpenState(state, open, trigger, preventUnmountOnClose = false) { 8516 if (open) { 8517 state.preventUnmountingOnClose = false; 8518 } else if (preventUnmountOnClose) { 8519 state.preventUnmountingOnClose = true; 8520 } 8521 const triggerId = trigger?.id ?? null; 8522 if (triggerId || open) { 8523 state.activeTriggerId = triggerId; 8524 state.activeTriggerElement = trigger ?? null; 8525 } 8526 } 8527 function attachPreventUnmountOnClose(eventDetails) { 8528 let preventUnmountOnClose = false; 8529 eventDetails.preventUnmountOnClose = () => { 8530 preventUnmountOnClose = true; 8531 }; 8532 return () => preventUnmountOnClose; 8533 } 8534 function applyPopupOpenChange(store, nextOpen, eventDetails, options = {}) { 8535 const reason = eventDetails.reason; 8536 const isHover = reason === reason_parts_exports.triggerHover; 8537 const isFocusOpen = nextOpen && reason === reason_parts_exports.triggerFocus; 8538 const isDismissClose = !nextOpen && (reason === reason_parts_exports.triggerPress || reason === reason_parts_exports.escapeKey); 8539 const shouldPreventUnmountOnClose = attachPreventUnmountOnClose(eventDetails); 8540 store.context.onOpenChange?.(nextOpen, eventDetails); 8541 if (eventDetails.isCanceled) { 8542 return; 8543 } 8544 options.onBeforeDispatch?.(); 8545 store.state.floatingRootContext.dispatchOpenChange(nextOpen, eventDetails); 8546 const changeState = () => { 8547 const updatedState = { 8548 ...options.extraState, 8549 open: nextOpen 8550 }; 8551 if (isFocusOpen) { 8552 updatedState.instantType = "focus"; 8553 } else if (isDismissClose) { 8554 updatedState.instantType = "dismiss"; 8555 } else if (isHover) { 8556 updatedState.instantType = void 0; 8557 } 8558 setPopupOpenState(updatedState, nextOpen, eventDetails.trigger, shouldPreventUnmountOnClose()); 8559 store.update(updatedState); 8560 }; 8561 if (isHover) { 8562 ReactDOM4.flushSync(changeState); 8563 } else { 8564 changeState(); 8565 } 8566 } 8567 function useTriggerDataForwarding(triggerId, triggerElementRef, store, stateUpdates) { 8568 const isMountedByThisTrigger = store.useState("isMountedByTrigger", triggerId); 8569 const baseRegisterTrigger = useTriggerRegistration(triggerId, store); 8570 const applyTriggerData = useStableCallback((element) => { 8571 const open = store.select("open"); 8572 const activeTriggerId = store.select("activeTriggerId"); 8573 if (activeTriggerId === triggerId) { 8574 store.update({ 8575 activeTriggerElement: element, 8576 ...open ? stateUpdates : null 8577 }); 8578 return; 8579 } 8580 if (activeTriggerId == null && open) { 8581 store.update({ 8582 activeTriggerId: triggerId, 8583 activeTriggerElement: element, 8584 ...stateUpdates 8585 }); 8586 } 8587 }); 8588 const registerTrigger = React31.useCallback((element) => { 8589 baseRegisterTrigger(element); 8590 if (element) { 8591 applyTriggerData(element); 8592 } 8593 }, [baseRegisterTrigger, applyTriggerData]); 8594 useIsoLayoutEffect(() => { 8595 if (isMountedByThisTrigger) { 8596 store.update({ 8597 activeTriggerElement: triggerElementRef.current, 8598 ...stateUpdates 8599 }); 8600 } 8601 }, [isMountedByThisTrigger, store, triggerElementRef, ...Object.values(stateUpdates)]); 8602 return { 8603 registerTrigger, 8604 isMountedByThisTrigger 8605 }; 8606 } 8607 function useImplicitActiveTrigger(store, options = {}) { 8608 const { 8609 closeOnActiveTriggerUnmount = false 8610 } = options; 8611 const resolvedActiveTriggerIdRef = React31.useRef(null); 8612 const open = store.useState("open"); 8613 const reactiveTriggerCount = store.useState("triggerCount"); 8614 const activeTriggerId = store.useState("activeTriggerId"); 8615 const reactiveActiveTriggerElement = store.useState("activeTriggerElement"); 8616 useIsoLayoutEffect(() => { 8617 if (!open) { 8618 resolvedActiveTriggerIdRef.current = null; 8619 if (store.state.triggerCount !== 0) { 8620 store.set("triggerCount", 0); 8621 } 8622 return; 8623 } 8624 const triggerCount = store.context.triggerElements.size; 8625 const stateUpdates = {}; 8626 if (store.state.triggerCount !== triggerCount) { 8627 stateUpdates.triggerCount = triggerCount; 8628 } 8629 const currentActiveTriggerId = store.select("activeTriggerId"); 8630 let lostActiveTriggerId = null; 8631 if (currentActiveTriggerId) { 8632 const activeTriggerElement = store.context.triggerElements.getById(currentActiveTriggerId); 8633 if (!activeTriggerElement) { 8634 for (const [triggerId, triggerElement] of store.context.triggerElements.entries()) { 8635 if (triggerElement === store.state.activeTriggerElement) { 8636 stateUpdates.activeTriggerId = triggerId; 8637 stateUpdates.activeTriggerElement = triggerElement; 8638 resolvedActiveTriggerIdRef.current = triggerId; 8639 break; 8640 } 8641 } 8642 if (stateUpdates.activeTriggerId === void 0) { 8643 if (resolvedActiveTriggerIdRef.current === currentActiveTriggerId) { 8644 lostActiveTriggerId = currentActiveTriggerId; 8645 } else { 8646 resolvedActiveTriggerIdRef.current = null; 8647 } 8648 } 8649 } else { 8650 resolvedActiveTriggerIdRef.current = currentActiveTriggerId; 8651 if (activeTriggerElement !== store.state.activeTriggerElement) { 8652 stateUpdates.activeTriggerElement = activeTriggerElement; 8653 } 8654 } 8655 } else { 8656 resolvedActiveTriggerIdRef.current = null; 8657 } 8658 if (!lostActiveTriggerId && !currentActiveTriggerId && triggerCount === 1) { 8659 const iteratorResult = store.context.triggerElements.entries().next(); 8660 if (!iteratorResult.done) { 8661 const [implicitTriggerId, implicitTriggerElement] = iteratorResult.value; 8662 stateUpdates.activeTriggerId = implicitTriggerId; 8663 stateUpdates.activeTriggerElement = implicitTriggerElement; 8664 resolvedActiveTriggerIdRef.current = implicitTriggerId; 8665 } 8666 } 8667 if (stateUpdates.triggerCount !== void 0 || stateUpdates.activeTriggerId !== void 0 || stateUpdates.activeTriggerElement !== void 0) { 8668 store.update(stateUpdates); 8669 } 8670 if (lostActiveTriggerId) { 8671 if (closeOnActiveTriggerUnmount) { 8672 queueMicrotask(() => { 8673 if (store.select("open") && store.select("activeTriggerId") === lostActiveTriggerId && !store.context.triggerElements.getById(lostActiveTriggerId)) { 8674 const eventDetails = createChangeEventDetails(reason_parts_exports.none); 8675 store.setOpen(false, eventDetails); 8676 if (!eventDetails.isCanceled) { 8677 store.update({ 8678 activeTriggerId: null, 8679 activeTriggerElement: null 8680 }); 8681 } 8682 } 8683 }); 8684 } 8685 } 8686 }, [open, store, reactiveTriggerCount, activeTriggerId, reactiveActiveTriggerElement, closeOnActiveTriggerUnmount]); 8687 } 8688 function useOpenStateTransitions(open, store, onUnmount) { 8689 const { 8690 mounted, 8691 setMounted, 8692 transitionStatus 8693 } = useTransitionStatus(open); 8694 const preventUnmountingOnClose = store.useState("preventUnmountingOnClose"); 8695 const syncedPreventUnmountingOnClose = open ? false : preventUnmountingOnClose; 8696 store.useSyncedValues({ 8697 mounted, 8698 transitionStatus, 8699 preventUnmountingOnClose: syncedPreventUnmountingOnClose 8700 }); 8701 const forceUnmount = useStableCallback(() => { 8702 setMounted(false); 8703 store.update({ 8704 activeTriggerId: null, 8705 activeTriggerElement: null, 8706 mounted: false, 8707 preventUnmountingOnClose: false 8708 }); 8709 onUnmount?.(); 8710 store.context.onOpenChangeComplete?.(false); 8711 }); 8712 useOpenChangeComplete({ 8713 enabled: mounted && !open && !syncedPreventUnmountingOnClose, 8714 open, 8715 ref: store.context.popupRef, 8716 onComplete() { 8717 if (!open) { 8718 forceUnmount(); 8719 } 8720 } 8721 }); 8722 return { 8723 forceUnmount, 8724 transitionStatus 8725 }; 8726 } 8727 function usePopupInteractionProps(store, statePart) { 8728 store.useSyncedValues(statePart); 8729 useIsoLayoutEffect(() => () => { 8730 store.update({ 8731 activeTriggerProps: EMPTY_OBJECT, 8732 inactiveTriggerProps: EMPTY_OBJECT, 8733 popupProps: EMPTY_OBJECT 8734 }); 8735 }, [store]); 8736 } 8737 8738 // node_modules/@base-ui/react/utils/popups/popupTriggerMap.mjs 8739 var devElementIdsByMap; 8740 function getDevElementIds(map) { 8741 devElementIdsByMap ??= /* @__PURE__ */ new WeakMap(); 8742 let elementIds = devElementIdsByMap.get(map); 8743 if (!elementIds) { 8744 elementIds = /* @__PURE__ */ new WeakMap(); 8745 devElementIdsByMap.set(map, elementIds); 8746 } 8747 return elementIds; 8748 } 8749 var PopupTriggerMap = class { 8750 constructor() { 8751 this.idMap = /* @__PURE__ */ new Map(); 8752 } 8753 /** 8754 * Adds a trigger element with the given ID. 8755 * 8756 * Note: The provided element is assumed to not be registered under multiple IDs. 8757 */ 8758 add(id, element) { 8759 if (true) { 8760 const elementIds = getDevElementIds(this); 8761 const existingId = elementIds.get(element); 8762 if (existingId !== void 0 && existingId !== id) { 8763 throw new Error("Base UI: A trigger element cannot be registered under multiple IDs in PopupTriggerMap."); 8764 } 8765 const previousElement = this.idMap.get(id); 8766 if (previousElement !== void 0 && previousElement !== element) { 8767 elementIds.delete(previousElement); 8768 } 8769 elementIds.set(element, id); 8770 } 8771 this.idMap.set(id, element); 8772 } 8773 /** 8774 * Removes the trigger element with the given ID. 8775 */ 8776 delete(id) { 8777 if (true) { 8778 const element = this.idMap.get(id); 8779 if (element !== void 0) { 8780 devElementIdsByMap?.get(this)?.delete(element); 8781 } 8782 } 8783 this.idMap.delete(id); 8784 } 8785 /** 8786 * Whether the given element is registered as a trigger. 8787 */ 8788 hasElement(element) { 8789 for (const registered of this.idMap.values()) { 8790 if (registered === element) { 8791 return true; 8792 } 8793 } 8794 return false; 8795 } 8796 /** 8797 * Whether there is a registered trigger element matching the given predicate. 8798 */ 8799 hasMatchingElement(predicate) { 8800 for (const element of this.idMap.values()) { 8801 if (predicate(element)) { 8802 return true; 8803 } 8804 } 8805 return false; 8806 } 8807 /** 8808 * Returns the trigger element associated with the given ID, or undefined if no such element exists. 8809 */ 8810 getById(id) { 8811 return this.idMap.get(id); 8812 } 8813 /** 8814 * Returns an iterable of all registered trigger entries, where each entry is a tuple of [id, element]. 8815 */ 8816 entries() { 8817 return this.idMap.entries(); 8818 } 8819 /** 8820 * Returns an iterable of all registered trigger elements. 8821 */ 8822 elements() { 8823 return this.idMap.values(); 8824 } 8825 /** 8826 * Returns the number of registered trigger elements. 8827 */ 8828 get size() { 8829 return this.idMap.size; 8830 } 8831 }; 8832 8833 // node_modules/@base-ui/react/floating-ui-react/utils/getEmptyRootContext.mjs 8834 function getEmptyRootContext() { 8835 return new FloatingRootStore({ 8836 open: false, 8837 transitionStatus: void 0, 8838 floatingElement: null, 8839 referenceElement: null, 8840 triggerElements: new PopupTriggerMap(), 8841 floatingId: void 0, 8842 syncOnly: false, 8843 nested: false, 8844 onOpenChange: void 0 8845 }); 8846 } 8847 8848 // node_modules/@base-ui/react/utils/popups/store.mjs 8849 function createInitialPopupStoreState() { 8850 return { 8851 open: false, 8852 openProp: void 0, 8853 mounted: false, 8854 transitionStatus: void 0, 8855 floatingRootContext: getEmptyRootContext(), 8856 floatingId: void 0, 8857 triggerCount: 0, 8858 preventUnmountingOnClose: false, 8859 payload: void 0, 8860 activeTriggerId: null, 8861 activeTriggerElement: null, 8862 triggerIdProp: void 0, 8863 popupElement: null, 8864 positionerElement: null, 8865 activeTriggerProps: EMPTY_OBJECT, 8866 inactiveTriggerProps: EMPTY_OBJECT, 8867 popupProps: EMPTY_OBJECT 8868 }; 8869 } 8870 function createPopupFloatingRootContext(triggerElements, floatingId, nested = false) { 8871 return new FloatingRootStore({ 8872 open: false, 8873 transitionStatus: void 0, 8874 floatingElement: null, 8875 referenceElement: null, 8876 triggerElements, 8877 floatingId, 8878 syncOnly: true, 8879 nested, 8880 onOpenChange: void 0 8881 }); 8882 } 8883 var activeTriggerIdSelector = (state) => state.triggerIdProp ?? state.activeTriggerId; 8884 var openSelector = (state) => state.openProp ?? state.open; 8885 var popupIdSelector = (state) => { 8886 const popupId = state.popupElement?.id ?? state.floatingId; 8887 return popupId || void 0; 8888 }; 8889 function triggerOwnsOpenPopup(state, triggerId) { 8890 return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) === triggerId; 8891 } 8892 function triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) { 8893 if (triggerOwnsOpenPopup(state, triggerId)) { 8894 return true; 8895 } 8896 return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) == null && state.triggerCount === 1; 8897 } 8898 var popupStoreSelectors = { 8899 open: openSelector, 8900 mounted: (state) => state.mounted, 8901 transitionStatus: (state) => state.transitionStatus, 8902 floatingRootContext: (state) => state.floatingRootContext, 8903 triggerCount: (state) => state.triggerCount, 8904 preventUnmountingOnClose: (state) => state.preventUnmountingOnClose, 8905 payload: (state) => state.payload, 8906 activeTriggerId: activeTriggerIdSelector, 8907 activeTriggerElement: (state) => state.mounted ? state.activeTriggerElement : null, 8908 popupId: popupIdSelector, 8909 /** 8910 * Whether the trigger with the given ID was used to open the popup. 8911 */ 8912 isTriggerActive: (state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId, 8913 /** 8914 * Whether the popup is open and was activated by a trigger with the given ID. 8915 */ 8916 isOpenedByTrigger: (state, triggerId) => triggerOwnsOpenPopup(state, triggerId), 8917 /** 8918 * Whether the popup is mounted and was activated by a trigger with the given ID. 8919 */ 8920 isMountedByTrigger: (state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId && state.mounted, 8921 triggerProps: (state, isActive) => isActive ? state.activeTriggerProps : state.inactiveTriggerProps, 8922 /** 8923 * Popup id for the trigger that currently owns the open popup. 8924 */ 8925 triggerPopupId: (state, triggerId) => triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) ? popupIdSelector(state) : void 0, 8926 popupProps: (state) => state.popupProps, 8927 popupElement: (state) => state.popupElement, 8928 positionerElement: (state) => state.positionerElement 8929 }; 8930 8931 // node_modules/@base-ui/react/utils/popups/usePopupHandleStore.mjs 8932 var React32 = __toESM(require_react(), 1); 8933 var import_shim2 = __toESM(require_shim(), 1); 8934 function usePopupHandleStore(handle) { 8935 const subscribe2 = React32.useCallback((listener) => { 8936 if (handle === void 0) { 8937 return NOOP; 8938 } 8939 return handle.subscribeStore(listener); 8940 }, [handle]); 8941 const getSnapshot = React32.useCallback(() => { 8942 return handle === void 0 ? void 0 : handle.store; 8943 }, [handle]); 8944 return (0, import_shim2.useSyncExternalStore)(subscribe2, getSnapshot, () => handle?.serverStore); 8945 } 8946 8947 // node_modules/@base-ui/react/floating-ui-react/hooks/useFloating.mjs 8948 function useBaseUIFloating(options) { 8949 return useFloatingWithStore(options, options.rootContext); 8950 } 8951 function useFloatingWithStore(options, store) { 8952 const { 8953 nodeId, 8954 externalTree 8955 } = options; 8956 const referenceElement = store.useState("referenceElement"); 8957 const floatingElement = store.useState("floatingElement"); 8958 const domReferenceElement = store.useState("domReferenceElement"); 8959 const open = store.useState("open"); 8960 const floatingId = store.useState("floatingId"); 8961 const [positionReference, setPositionReferenceRaw] = React33.useState(null); 8962 const [localDomReference, setLocalDomReference] = React33.useState(void 0); 8963 const [localFloatingElement, setLocalFloatingElement] = React33.useState(void 0); 8964 const domReferenceRef = React33.useRef(null); 8965 const tree = useFloatingTree(externalTree); 8966 const storeElements = React33.useMemo(() => ({ 8967 reference: referenceElement, 8968 floating: floatingElement, 8969 domReference: domReferenceElement 8970 }), [referenceElement, floatingElement, domReferenceElement]); 8971 const position = useFloating({ 8972 ...options, 8973 elements: { 8974 ...storeElements, 8975 ...positionReference && { 8976 reference: positionReference 8977 } 8978 } 8979 }); 8980 const localDomReferenceElement = isElement(localDomReference) ? localDomReference : null; 8981 const syncedFloatingElement = localFloatingElement === void 0 ? store.state.floatingElement : localFloatingElement; 8982 store.useSyncedValue("referenceElement", localDomReference ?? null); 8983 store.useSyncedValue("domReferenceElement", localDomReference === void 0 ? domReferenceElement : localDomReferenceElement); 8984 store.useSyncedValue("floatingElement", syncedFloatingElement); 8985 const setPositionReference = React33.useCallback((node) => { 8986 const computedPositionReference = isElement(node) ? { 8987 getBoundingClientRect: () => node.getBoundingClientRect(), 8988 getClientRects: () => node.getClientRects(), 8989 contextElement: node 8990 } : node; 8991 setPositionReferenceRaw(computedPositionReference); 8992 position.refs.setReference(computedPositionReference); 8993 }, [position.refs]); 8994 const setReference = React33.useCallback((node) => { 8995 if (isElement(node) || node === null) { 8996 domReferenceRef.current = node; 8997 setLocalDomReference(node); 8998 } 8999 if (isElement(position.refs.reference.current) || position.refs.reference.current === null || // Don't allow setting virtual elements using the old technique back to 9000 // `null` to support `positionReference` + an unstable `reference` 9001 // callback ref. 9002 node !== null && !isElement(node)) { 9003 position.refs.setReference(node); 9004 } 9005 }, [position.refs, setLocalDomReference]); 9006 const setFloating = React33.useCallback((node) => { 9007 setLocalFloatingElement(node); 9008 position.refs.setFloating(node); 9009 }, [position.refs]); 9010 const refs = React33.useMemo(() => ({ 9011 ...position.refs, 9012 setReference, 9013 setFloating, 9014 setPositionReference, 9015 domReference: domReferenceRef 9016 }), [position.refs, setReference, setFloating, setPositionReference]); 9017 const elements = React33.useMemo(() => ({ 9018 ...position.elements, 9019 domReference: domReferenceElement 9020 }), [position.elements, domReferenceElement]); 9021 const context = React33.useMemo(() => ({ 9022 ...position, 9023 dataRef: store.context.dataRef, 9024 open, 9025 onOpenChange: store.setOpen, 9026 events: store.context.events, 9027 floatingId, 9028 refs, 9029 elements, 9030 nodeId, 9031 rootStore: store 9032 }), [position, refs, elements, nodeId, store, open, floatingId]); 9033 useIsoLayoutEffect(() => { 9034 if (domReferenceElement) { 9035 domReferenceRef.current = domReferenceElement; 9036 } 9037 }, [domReferenceElement]); 9038 useIsoLayoutEffect(() => { 9039 store.context.dataRef.current.floatingContext = context; 9040 const node = tree?.nodesRef.current.find((n2) => n2.id === nodeId); 9041 if (node) { 9042 node.context = context; 9043 } 9044 }); 9045 return React33.useMemo(() => ({ 9046 ...position, 9047 context, 9048 refs, 9049 elements, 9050 rootStore: store 9051 }), [position, refs, elements, context, store]); 9052 } 9053 9054 // node_modules/@base-ui/react/floating-ui-react/hooks/useFocus.mjs 9055 var React34 = __toESM(require_react(), 1); 9056 var isMacSafari = parts_exports.os.mac && parts_exports.engine.webkit; 9057 function useFocus(context, props = {}) { 9058 const { 9059 enabled = true, 9060 delay 9061 } = props; 9062 const store = "rootStore" in context ? context.rootStore : context; 9063 const { 9064 events, 9065 dataRef 9066 } = store.context; 9067 const blockFocusRef = React34.useRef(false); 9068 const blockedReferenceRef = React34.useRef(null); 9069 const keyboardModalityRef = React34.useRef(true); 9070 const timeout = useTimeout(); 9071 React34.useEffect(() => { 9072 const domReference = store.select("domReferenceElement"); 9073 if (!enabled) { 9074 return void 0; 9075 } 9076 const win = getWindow(domReference); 9077 function onBlur() { 9078 const currentDomReference = store.select("domReferenceElement"); 9079 if (!store.select("open") && isHTMLElement(currentDomReference) && currentDomReference === activeElement(ownerDocument(currentDomReference))) { 9080 blockFocusRef.current = true; 9081 } 9082 } 9083 function onKeyDown() { 9084 keyboardModalityRef.current = true; 9085 } 9086 function onPointerDown() { 9087 keyboardModalityRef.current = false; 9088 } 9089 return mergeCleanups(addEventListener(win, "blur", onBlur), isMacSafari && addEventListener(win, "keydown", onKeyDown, true), isMacSafari && addEventListener(win, "pointerdown", onPointerDown, true)); 9090 }, [store, enabled]); 9091 React34.useEffect(() => { 9092 if (!enabled) { 9093 return void 0; 9094 } 9095 function onOpenChangeLocal(details) { 9096 if (details.reason === reason_parts_exports.triggerPress || details.reason === reason_parts_exports.escapeKey) { 9097 const referenceElement = store.select("domReferenceElement"); 9098 if (isElement(referenceElement)) { 9099 blockedReferenceRef.current = referenceElement; 9100 blockFocusRef.current = true; 9101 } 9102 } 9103 } 9104 events.on("openchange", onOpenChangeLocal); 9105 return () => { 9106 events.off("openchange", onOpenChangeLocal); 9107 }; 9108 }, [events, enabled, store]); 9109 const reference = React34.useMemo(() => { 9110 function resetBlockedFocus() { 9111 blockFocusRef.current = false; 9112 blockedReferenceRef.current = null; 9113 } 9114 return { 9115 onMouseLeave() { 9116 resetBlockedFocus(); 9117 }, 9118 onFocus(event) { 9119 const focusTarget = event.currentTarget; 9120 if (blockFocusRef.current) { 9121 if (blockedReferenceRef.current === focusTarget) { 9122 return; 9123 } 9124 resetBlockedFocus(); 9125 } 9126 const target = getTarget(event.nativeEvent); 9127 if (isElement(target)) { 9128 if (isMacSafari && !event.relatedTarget) { 9129 if (!keyboardModalityRef.current && !isTypeableElement(target)) { 9130 return; 9131 } 9132 } else if (!matchesFocusVisible(target)) { 9133 return; 9134 } 9135 } 9136 const movedFromOtherEnabledTrigger = isTargetInsideEnabledTrigger(event.relatedTarget, store.context.triggerElements); 9137 const { 9138 nativeEvent, 9139 currentTarget 9140 } = event; 9141 const delayValue = typeof delay === "function" ? delay() : delay; 9142 if (store.select("open") && movedFromOtherEnabledTrigger || delayValue === 0 || delayValue === void 0) { 9143 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget)); 9144 return; 9145 } 9146 timeout.start(delayValue, () => { 9147 if (blockFocusRef.current) { 9148 return; 9149 } 9150 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget)); 9151 }); 9152 }, 9153 onBlur(event) { 9154 resetBlockedFocus(); 9155 const relatedTarget = event.relatedTarget; 9156 const nativeEvent = event.nativeEvent; 9157 const movedToFocusGuard = isElement(relatedTarget) && relatedTarget.hasAttribute(createAttribute("focus-guard")) && relatedTarget.getAttribute("data-type") === "outside"; 9158 timeout.start(0, () => { 9159 const domReference = store.select("domReferenceElement"); 9160 const activeEl = activeElement(ownerDocument(domReference)); 9161 if (!relatedTarget && activeEl === domReference) { 9162 return; 9163 } 9164 if (contains(dataRef.current.floatingContext?.refs.floating.current, activeEl) || contains(domReference, activeEl) || movedToFocusGuard) { 9165 return; 9166 } 9167 const nextFocusedElement = relatedTarget ?? activeEl; 9168 if (isTargetInsideEnabledTrigger(nextFocusedElement, store.context.triggerElements)) { 9169 return; 9170 } 9171 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent)); 9172 }); 9173 } 9174 }; 9175 }, [dataRef, delay, store, timeout]); 9176 return React34.useMemo(() => enabled ? { 9177 reference, 9178 trigger: reference 9179 } : {}, [enabled, reference]); 9180 } 9181 9182 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverFloatingInteraction.mjs 9183 var React35 = __toESM(require_react(), 1); 9184 9185 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverInteractionSharedState.mjs 9186 var HoverInteraction = class _HoverInteraction { 9187 constructor() { 9188 this.pointerType = void 0; 9189 this.interactedInside = false; 9190 this.handler = void 0; 9191 this.blockMouseMove = true; 9192 this.performedPointerEventsMutation = false; 9193 this.pointerEventsScopeElement = null; 9194 this.pointerEventsReferenceElement = null; 9195 this.pointerEventsFloatingElement = null; 9196 this.restTimeoutPending = false; 9197 this.openChangeTimeout = new Timeout(); 9198 this.restTimeout = new Timeout(); 9199 this.handleCloseOptions = void 0; 9200 } 9201 static create() { 9202 return new _HoverInteraction(); 9203 } 9204 dispose = () => { 9205 this.openChangeTimeout.clear(); 9206 this.restTimeout.clear(); 9207 }; 9208 disposeEffect = () => { 9209 return this.dispose; 9210 }; 9211 }; 9212 var pointerEventsMutationOwnerByScopeElement = /* @__PURE__ */ new WeakMap(); 9213 function clearSafePolygonPointerEventsMutation(instance) { 9214 if (!instance.performedPointerEventsMutation) { 9215 return; 9216 } 9217 const scopeElement = instance.pointerEventsScopeElement; 9218 if (scopeElement && pointerEventsMutationOwnerByScopeElement.get(scopeElement) === instance) { 9219 instance.pointerEventsScopeElement?.style.removeProperty("pointer-events"); 9220 instance.pointerEventsReferenceElement?.style.removeProperty("pointer-events"); 9221 instance.pointerEventsFloatingElement?.style.removeProperty("pointer-events"); 9222 pointerEventsMutationOwnerByScopeElement.delete(scopeElement); 9223 } 9224 instance.performedPointerEventsMutation = false; 9225 instance.pointerEventsScopeElement = null; 9226 instance.pointerEventsReferenceElement = null; 9227 instance.pointerEventsFloatingElement = null; 9228 } 9229 function applySafePolygonPointerEventsMutation(instance, options) { 9230 const { 9231 scopeElement, 9232 referenceElement, 9233 floatingElement 9234 } = options; 9235 const existingOwner = pointerEventsMutationOwnerByScopeElement.get(scopeElement); 9236 if (existingOwner && existingOwner !== instance) { 9237 clearSafePolygonPointerEventsMutation(existingOwner); 9238 } 9239 clearSafePolygonPointerEventsMutation(instance); 9240 instance.performedPointerEventsMutation = true; 9241 instance.pointerEventsScopeElement = scopeElement; 9242 instance.pointerEventsReferenceElement = referenceElement; 9243 instance.pointerEventsFloatingElement = floatingElement; 9244 pointerEventsMutationOwnerByScopeElement.set(scopeElement, instance); 9245 scopeElement.style.pointerEvents = "none"; 9246 referenceElement.style.pointerEvents = "auto"; 9247 floatingElement.style.pointerEvents = "auto"; 9248 } 9249 function useHoverInteractionSharedState(store) { 9250 const data = store.context.dataRef.current; 9251 const instance = useRefWithInit(() => data.hoverInteractionState ?? HoverInteraction.create()).current; 9252 if (!data.hoverInteractionState) { 9253 data.hoverInteractionState = instance; 9254 } 9255 useOnMount(data.hoverInteractionState.disposeEffect); 9256 return data.hoverInteractionState; 9257 } 9258 9259 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverFloatingInteraction.mjs 9260 function useHoverFloatingInteraction(context, parameters = {}) { 9261 const { 9262 enabled = true, 9263 closeDelay: closeDelayProp = 0, 9264 nodeId: nodeIdProp 9265 } = parameters; 9266 const store = "rootStore" in context ? context.rootStore : context; 9267 const open = store.useState("open"); 9268 const floatingElement = store.useState("floatingElement"); 9269 const domReferenceElement = store.useState("domReferenceElement"); 9270 const { 9271 dataRef 9272 } = store.context; 9273 const tree = useFloatingTree(); 9274 const parentId = useFloatingParentNodeId(); 9275 const instance = useHoverInteractionSharedState(store); 9276 const childClosedTimeout = useTimeout(); 9277 const isClickLikeOpenEvent2 = useStableCallback(() => { 9278 return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside); 9279 }); 9280 const isHoverOpen = useStableCallback(() => { 9281 return isHoverOpenEvent(dataRef.current.openEvent?.type); 9282 }); 9283 const clearPointerEvents = useStableCallback(() => { 9284 clearSafePolygonPointerEventsMutation(instance); 9285 }); 9286 useIsoLayoutEffect(() => { 9287 if (!open) { 9288 instance.pointerType = void 0; 9289 instance.restTimeoutPending = false; 9290 instance.interactedInside = false; 9291 clearPointerEvents(); 9292 } 9293 }, [open, instance, clearPointerEvents]); 9294 React35.useEffect(() => { 9295 return clearPointerEvents; 9296 }, [clearPointerEvents]); 9297 useIsoLayoutEffect(() => { 9298 if (!enabled) { 9299 return void 0; 9300 } 9301 if (open && instance.handleCloseOptions?.blockPointerEvents && isHoverOpen() && isElement(domReferenceElement) && floatingElement) { 9302 const ref = domReferenceElement; 9303 const floatingEl = floatingElement; 9304 const doc = ownerDocument(floatingElement); 9305 const parentFloating = tree?.nodesRef.current.find((node) => node.id === parentId)?.context?.elements.floating; 9306 if (parentFloating) { 9307 parentFloating.style.pointerEvents = ""; 9308 } 9309 const cachedScopeElement = instance.pointerEventsScopeElement !== floatingEl ? instance.pointerEventsScopeElement : null; 9310 const parentScopeElement = parentFloating !== floatingEl ? parentFloating : null; 9311 const scopeElement = instance.handleCloseOptions?.getScope?.() ?? cachedScopeElement ?? parentScopeElement ?? ref.closest("[data-rootownerid]") ?? doc.body; 9312 applySafePolygonPointerEventsMutation(instance, { 9313 scopeElement, 9314 referenceElement: ref, 9315 floatingElement: floatingEl 9316 }); 9317 return () => { 9318 clearPointerEvents(); 9319 }; 9320 } 9321 return void 0; 9322 }, [enabled, open, domReferenceElement, floatingElement, instance, isHoverOpen, tree, parentId, clearPointerEvents]); 9323 React35.useEffect(() => { 9324 if (!enabled) { 9325 return void 0; 9326 } 9327 function hasParentChildren() { 9328 return !!(tree && parentId && getNodeChildren(tree.nodesRef.current, parentId).length > 0); 9329 } 9330 function closeWithDelay(event) { 9331 const closeDelay = getDelay(closeDelayProp, "close", instance.pointerType); 9332 const close = () => { 9333 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 9334 tree?.events.emit("floating.closed", event); 9335 }; 9336 if (closeDelay) { 9337 instance.openChangeTimeout.start(closeDelay, close); 9338 } else { 9339 instance.openChangeTimeout.clear(); 9340 close(); 9341 } 9342 } 9343 function handleInteractInside(event) { 9344 const target = getTarget(event); 9345 if (!isInteractiveElement(target)) { 9346 instance.interactedInside = false; 9347 return; 9348 } 9349 instance.interactedInside = target?.closest("[aria-haspopup]") != null; 9350 } 9351 function onFloatingMouseEnter() { 9352 instance.openChangeTimeout.clear(); 9353 childClosedTimeout.clear(); 9354 tree?.events.off("floating.closed", onNodeClosed); 9355 clearPointerEvents(); 9356 } 9357 function onFloatingMouseLeave(event) { 9358 if (hasParentChildren() && tree) { 9359 tree.events.on("floating.closed", onNodeClosed); 9360 return; 9361 } 9362 if (isTargetInsideEnabledTrigger(event.relatedTarget, store.context.triggerElements)) { 9363 return; 9364 } 9365 const currentNodeId = dataRef.current.floatingContext?.nodeId ?? nodeIdProp; 9366 const relatedTarget = event.relatedTarget; 9367 const isMovingIntoDescendantFloating = tree && currentNodeId && isElement(relatedTarget) && getNodeChildren(tree.nodesRef.current, currentNodeId, false).some((node) => contains(node.context?.elements.floating, relatedTarget)); 9368 if (isMovingIntoDescendantFloating) { 9369 return; 9370 } 9371 if (instance.handler) { 9372 instance.handler(event); 9373 return; 9374 } 9375 clearPointerEvents(); 9376 if (isHoverOpen() && !isClickLikeOpenEvent2()) { 9377 closeWithDelay(event); 9378 } 9379 } 9380 function onNodeClosed(event) { 9381 if (!tree || !parentId || hasParentChildren()) { 9382 return; 9383 } 9384 childClosedTimeout.start(0, () => { 9385 tree.events.off("floating.closed", onNodeClosed); 9386 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 9387 tree.events.emit("floating.closed", event); 9388 }); 9389 } 9390 const floating = floatingElement; 9391 return mergeCleanups(floating && addEventListener(floating, "mouseenter", onFloatingMouseEnter), floating && addEventListener(floating, "mouseleave", onFloatingMouseLeave), floating && addEventListener(floating, "pointerdown", handleInteractInside, true), () => { 9392 tree?.events.off("floating.closed", onNodeClosed); 9393 }); 9394 }, [enabled, floatingElement, store, dataRef, closeDelayProp, nodeIdProp, isHoverOpen, isClickLikeOpenEvent2, clearPointerEvents, instance, tree, parentId, childClosedTimeout]); 9395 } 9396 9397 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverReferenceInteraction.mjs 9398 var React36 = __toESM(require_react(), 1); 9399 var ReactDOM5 = __toESM(require_react_dom(), 1); 9400 var EMPTY_REF = { 9401 current: null 9402 }; 9403 function useHoverReferenceInteraction(context, props = {}) { 9404 const { 9405 enabled = true, 9406 delay = 0, 9407 handleClose = null, 9408 mouseOnly = false, 9409 restMs = 0, 9410 move = true, 9411 triggerElementRef = EMPTY_REF, 9412 externalTree, 9413 isActiveTrigger = true, 9414 getHandleCloseContext, 9415 isClosing, 9416 shouldOpen: shouldOpenProp, 9417 guardStaleOpen = false 9418 } = props; 9419 const store = "rootStore" in context ? context.rootStore : context; 9420 const { 9421 dataRef, 9422 events 9423 } = store.context; 9424 const tree = useFloatingTree(externalTree); 9425 const instance = useHoverInteractionSharedState(store); 9426 const isHoverCloseActiveRef = React36.useRef(false); 9427 const handleCloseRef = useValueAsRef(handleClose); 9428 const delayRef = useValueAsRef(delay); 9429 const restMsRef = useValueAsRef(restMs); 9430 const enabledRef = useValueAsRef(enabled); 9431 const shouldOpenRef = useValueAsRef(shouldOpenProp); 9432 const isClosingRef = useValueAsRef(isClosing); 9433 const isClickLikeOpenEvent2 = useStableCallback(() => { 9434 return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside); 9435 }); 9436 const checkShouldOpen = useStableCallback(() => { 9437 return shouldOpenRef.current?.() !== false; 9438 }); 9439 const isOverInactiveTrigger = useStableCallback((currentDomReference, currentTarget, target) => { 9440 const allTriggers = store.context.triggerElements; 9441 if (allTriggers.hasElement(currentTarget)) { 9442 return !currentDomReference || !contains(currentDomReference, currentTarget); 9443 } 9444 if (!isElement(target)) { 9445 return false; 9446 } 9447 const targetElement = target; 9448 return allTriggers.hasMatchingElement((trigger) => contains(trigger, targetElement)) && (!currentDomReference || !contains(currentDomReference, targetElement)); 9449 }); 9450 const cleanupMouseMoveHandler = useStableCallback(() => { 9451 if (!instance.handler) { 9452 return; 9453 } 9454 const doc = ownerDocument(store.select("domReferenceElement")); 9455 doc.removeEventListener("mousemove", instance.handler); 9456 instance.handler = void 0; 9457 }); 9458 const clearPointerEvents = useStableCallback(() => { 9459 clearSafePolygonPointerEventsMutation(instance); 9460 }); 9461 if (isActiveTrigger) { 9462 instance.handleCloseOptions = handleCloseRef.current?.__options; 9463 } 9464 React36.useEffect(() => cleanupMouseMoveHandler, [cleanupMouseMoveHandler]); 9465 React36.useEffect(() => { 9466 if (!enabled) { 9467 return void 0; 9468 } 9469 function onOpenChangeLocal(details) { 9470 if (!details.open) { 9471 isHoverCloseActiveRef.current = details.reason === reason_parts_exports.triggerHover; 9472 cleanupMouseMoveHandler(); 9473 instance.openChangeTimeout.clear(); 9474 instance.restTimeout.clear(); 9475 instance.blockMouseMove = true; 9476 instance.restTimeoutPending = false; 9477 } else { 9478 isHoverCloseActiveRef.current = false; 9479 } 9480 } 9481 events.on("openchange", onOpenChangeLocal); 9482 return () => { 9483 events.off("openchange", onOpenChangeLocal); 9484 }; 9485 }, [enabled, events, instance, cleanupMouseMoveHandler]); 9486 React36.useEffect(() => { 9487 if (!enabled) { 9488 return void 0; 9489 } 9490 function closeWithDelay(event, runElseBranch = true) { 9491 const closeDelay = getDelay(delayRef.current, "close", instance.pointerType); 9492 if (closeDelay) { 9493 instance.openChangeTimeout.start(closeDelay, () => { 9494 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 9495 tree?.events.emit("floating.closed", event); 9496 }); 9497 } else if (runElseBranch) { 9498 instance.openChangeTimeout.clear(); 9499 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 9500 tree?.events.emit("floating.closed", event); 9501 } 9502 } 9503 const trigger = triggerElementRef.current ?? (isActiveTrigger ? store.select("domReferenceElement") : null); 9504 if (!isElement(trigger)) { 9505 return void 0; 9506 } 9507 function onMouseEnter(event) { 9508 instance.openChangeTimeout.clear(); 9509 instance.blockMouseMove = false; 9510 if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) { 9511 return; 9512 } 9513 const restMsValue = getRestMs(restMsRef.current); 9514 const openDelay = getDelay(delayRef.current, "open", instance.pointerType); 9515 const eventTarget = getTarget(event); 9516 const currentTarget = event.currentTarget ?? null; 9517 const currentDomReference = store.select("domReferenceElement"); 9518 let triggerNode = currentTarget; 9519 if (isElement(eventTarget) && !store.context.triggerElements.hasElement(eventTarget)) { 9520 for (const triggerElement of store.context.triggerElements.elements()) { 9521 if (contains(triggerElement, eventTarget)) { 9522 triggerNode = triggerElement; 9523 break; 9524 } 9525 } 9526 } 9527 if (isElement(currentTarget) && isElement(currentDomReference) && !store.context.triggerElements.hasElement(currentTarget) && contains(currentTarget, currentDomReference)) { 9528 triggerNode = currentDomReference; 9529 } 9530 const isOverInactive = triggerNode == null ? false : isOverInactiveTrigger(currentDomReference, triggerNode, eventTarget); 9531 const isOpen = store.select("open"); 9532 const isInClosingTransition = isClosingRef.current?.() ?? store.select("transitionStatus") === "ending"; 9533 const isHoverCloseTransition = !isOpen && isInClosingTransition && isHoverCloseActiveRef.current; 9534 const isReenteringSameTriggerDuringCloseTransition = !isOverInactive && isElement(triggerNode) && isElement(currentDomReference) && contains(currentDomReference, triggerNode) && isHoverCloseTransition; 9535 const isRestOnlyDelay = restMsValue > 0 && !openDelay; 9536 const shouldOpenImmediately = isOverInactive && (isOpen || isHoverCloseTransition) || isReenteringSameTriggerDuringCloseTransition; 9537 const shouldOpen = !isOpen || isOverInactive; 9538 if (shouldOpenImmediately) { 9539 if (checkShouldOpen()) { 9540 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode)); 9541 } 9542 return; 9543 } 9544 if (isRestOnlyDelay) { 9545 return; 9546 } 9547 if (openDelay) { 9548 instance.openChangeTimeout.start(openDelay, () => { 9549 if (shouldOpen && checkShouldOpen()) { 9550 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode)); 9551 } 9552 }); 9553 } else if (shouldOpen) { 9554 if (checkShouldOpen()) { 9555 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode)); 9556 } 9557 } 9558 } 9559 function onMouseLeave(event) { 9560 if (isClickLikeOpenEvent2()) { 9561 clearPointerEvents(); 9562 return; 9563 } 9564 cleanupMouseMoveHandler(); 9565 const domReferenceElement = store.select("domReferenceElement"); 9566 const doc = ownerDocument(domReferenceElement); 9567 instance.restTimeout.clear(); 9568 instance.restTimeoutPending = false; 9569 const handleCloseContextBase = dataRef.current.floatingContext ?? getHandleCloseContext?.(); 9570 if (isTargetInsideEnabledTrigger(event.relatedTarget, store.context.triggerElements)) { 9571 return; 9572 } 9573 if (handleCloseRef.current && handleCloseContextBase) { 9574 if (!store.select("open")) { 9575 instance.openChangeTimeout.clear(); 9576 } 9577 const currentTrigger = triggerElementRef.current; 9578 instance.handler = handleCloseRef.current({ 9579 ...handleCloseContextBase, 9580 tree, 9581 x: event.clientX, 9582 y: event.clientY, 9583 onClose() { 9584 clearPointerEvents(); 9585 cleanupMouseMoveHandler(); 9586 if (enabledRef.current && !isClickLikeOpenEvent2() && currentTrigger === store.select("domReferenceElement")) { 9587 closeWithDelay(event, true); 9588 } 9589 } 9590 }); 9591 doc.addEventListener("mousemove", instance.handler); 9592 instance.handler(event); 9593 return; 9594 } 9595 const shouldClose = instance.pointerType === "touch" ? !contains(store.select("floatingElement"), event.relatedTarget) : true; 9596 if (shouldClose) { 9597 closeWithDelay(event); 9598 } 9599 } 9600 function onMouseOut(event) { 9601 if (contains(trigger, event.relatedTarget)) { 9602 return; 9603 } 9604 instance.openChangeTimeout.clear(); 9605 instance.restTimeout.clear(); 9606 instance.restTimeoutPending = false; 9607 } 9608 const staleOpenGuard = guardStaleOpen ? addEventListener(trigger, "mouseout", onMouseOut) : void 0; 9609 if (move) { 9610 return mergeCleanups(addEventListener(trigger, "mousemove", onMouseEnter, { 9611 once: true 9612 }), addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave), staleOpenGuard); 9613 } 9614 return mergeCleanups(addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave), staleOpenGuard); 9615 }, [cleanupMouseMoveHandler, clearPointerEvents, dataRef, delayRef, store, enabled, handleCloseRef, instance, isActiveTrigger, isOverInactiveTrigger, isClickLikeOpenEvent2, mouseOnly, move, restMsRef, triggerElementRef, tree, enabledRef, getHandleCloseContext, isClosingRef, checkShouldOpen, guardStaleOpen]); 9616 return React36.useMemo(() => { 9617 if (!enabled) { 9618 return void 0; 9619 } 9620 function setPointerRef(event) { 9621 instance.pointerType = event.pointerType; 9622 } 9623 return { 9624 onPointerDown: setPointerRef, 9625 onPointerEnter: setPointerRef, 9626 onMouseMove(event) { 9627 const { 9628 nativeEvent 9629 } = event; 9630 const trigger = event.currentTarget; 9631 const currentDomReference = store.select("domReferenceElement"); 9632 const currentOpen = store.select("open"); 9633 const isOverInactive = isOverInactiveTrigger(currentDomReference, trigger, event.target); 9634 if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) { 9635 return; 9636 } 9637 if (currentOpen && isOverInactive && instance.handleCloseOptions?.blockPointerEvents) { 9638 const floatingElement = store.select("floatingElement"); 9639 if (floatingElement) { 9640 const scopeElement = instance.handleCloseOptions?.getScope?.() ?? trigger.ownerDocument.body; 9641 applySafePolygonPointerEventsMutation(instance, { 9642 scopeElement, 9643 referenceElement: trigger, 9644 floatingElement 9645 }); 9646 } 9647 } 9648 const restMsValue = getRestMs(restMsRef.current); 9649 if (currentOpen && !isOverInactive || restMsValue === 0) { 9650 return; 9651 } 9652 if (!isOverInactive && instance.restTimeoutPending && event.movementX ** 2 + event.movementY ** 2 < 2) { 9653 return; 9654 } 9655 instance.restTimeout.clear(); 9656 function handleMouseMove() { 9657 instance.restTimeoutPending = false; 9658 if (isClickLikeOpenEvent2()) { 9659 return; 9660 } 9661 const latestOpen = store.select("open"); 9662 if (!instance.blockMouseMove && (!latestOpen || isOverInactive) && checkShouldOpen()) { 9663 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, nativeEvent, trigger)); 9664 } 9665 } 9666 if (instance.pointerType === "touch") { 9667 ReactDOM5.flushSync(() => { 9668 handleMouseMove(); 9669 }); 9670 } else if (isOverInactive && currentOpen) { 9671 handleMouseMove(); 9672 } else { 9673 instance.restTimeoutPending = true; 9674 instance.restTimeout.start(restMsValue, handleMouseMove); 9675 } 9676 } 9677 }; 9678 }, [enabled, instance, isClickLikeOpenEvent2, isOverInactiveTrigger, mouseOnly, store, restMsRef, checkShouldOpen]); 9679 } 9680 9681 // node_modules/@base-ui/react/floating-ui-react/hooks/useListNavigation.mjs 9682 var React37 = __toESM(require_react(), 1); 9683 var ESCAPE = "Escape"; 9684 function isStationaryWebKitPointer(event) { 9685 return parts_exports.engine.webkit && event.movementX === 0 && event.movementY === 0; 9686 } 9687 function doSwitch(orientation, vertical, horizontal) { 9688 switch (orientation) { 9689 case "vertical": 9690 return vertical; 9691 case "horizontal": 9692 return horizontal; 9693 default: 9694 return vertical || horizontal; 9695 } 9696 } 9697 function isMainOrientationKey(key, orientation) { 9698 const vertical = key === ARROW_UP || key === ARROW_DOWN; 9699 const horizontal = key === ARROW_LEFT || key === ARROW_RIGHT; 9700 return doSwitch(orientation, vertical, horizontal); 9701 } 9702 function isMainOrientationToEndKey(key, orientation, rtl) { 9703 const vertical = key === ARROW_DOWN; 9704 const horizontal = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT; 9705 return doSwitch(orientation, vertical, horizontal) || key === "Enter" || key === " " || key === ""; 9706 } 9707 function isCrossOrientationOpenKey(key, orientation, rtl) { 9708 const vertical = rtl ? key === ARROW_LEFT : key === ARROW_RIGHT; 9709 const horizontal = key === ARROW_DOWN; 9710 return doSwitch(orientation, vertical, horizontal); 9711 } 9712 function isCrossOrientationCloseKey(key, orientation, rtl, grid) { 9713 const vertical = rtl ? key === ARROW_RIGHT : key === ARROW_LEFT; 9714 const horizontal = key === ARROW_UP; 9715 if (orientation === "both" || orientation === "horizontal" && grid) { 9716 return key === ESCAPE; 9717 } 9718 return doSwitch(orientation, vertical, horizontal); 9719 } 9720 function useListNavigation(context, props) { 9721 const { 9722 listRef, 9723 activeIndex, 9724 onNavigate: onNavigateProp = () => { 9725 }, 9726 enabled = true, 9727 selectedIndex = null, 9728 allowEscape = false, 9729 loopFocus = false, 9730 nested = false, 9731 rtl = false, 9732 virtual = false, 9733 focusItemOnOpen = "auto", 9734 focusItemOnHover = true, 9735 openOnArrowKeyDown = true, 9736 disabledIndices = void 0, 9737 orientation = "vertical", 9738 parentOrientation, 9739 id, 9740 resetOnPointerLeave = true, 9741 externalTree, 9742 grid: navigateGrid 9743 } = props; 9744 const isGrid2 = navigateGrid != null; 9745 if (true) { 9746 if (allowEscape) { 9747 if (!loopFocus) { 9748 console.warn("`useListNavigation` looping must be enabled to allow escaping."); 9749 } 9750 if (!virtual) { 9751 console.warn("`useListNavigation` must be virtual to allow escaping."); 9752 } 9753 } 9754 if (orientation === "vertical" && isGrid2) { 9755 console.warn("In grid list navigation mode, the `orientation` should", 'be either "horizontal" or "both".'); 9756 } 9757 } 9758 const store = "rootStore" in context ? context.rootStore : context; 9759 const open = store.useState("open"); 9760 const floatingElement = store.useState("floatingElement"); 9761 const domReferenceElement = store.useState("domReferenceElement"); 9762 const dataRef = store.context.dataRef; 9763 const floatingFocusElement = getFloatingFocusElement(floatingElement); 9764 const typeableComboboxReference = isTypeableCombobox(domReferenceElement); 9765 const floatingFocusElementRef = useValueAsRef(floatingFocusElement); 9766 const parentId = useFloatingParentNodeId(); 9767 const tree = useFloatingTree(externalTree); 9768 const focusItemOnOpenRef = React37.useRef(focusItemOnOpen); 9769 const indexRef = React37.useRef(selectedIndex ?? -1); 9770 const keyRef = React37.useRef(null); 9771 const isPointerModalityRef = React37.useRef(true); 9772 const onNavigate = useStableCallback((event) => { 9773 onNavigateProp(indexRef.current === -1 ? null : indexRef.current, event); 9774 }); 9775 const previousMountedRef = React37.useRef(!!floatingElement); 9776 const previousOpenRef = React37.useRef(open); 9777 const forceSyncFocusRef = React37.useRef(false); 9778 const forceScrollIntoViewRef = React37.useRef(false); 9779 const cancelQueuedFocusRef = React37.useRef(null); 9780 const disabledIndicesRef = useValueAsRef(disabledIndices); 9781 const latestOpenRef = useValueAsRef(open); 9782 const selectedIndexRef = useValueAsRef(selectedIndex); 9783 const resetOnPointerLeaveRef = useValueAsRef(resetOnPointerLeave); 9784 const focusFrame = useAnimationFrame(); 9785 const waitForListPopulatedFrame = useAnimationFrame(); 9786 const focusItem = useStableCallback(() => { 9787 function runFocus(item2) { 9788 if (virtual) { 9789 tree?.events.emit("virtualfocus", item2); 9790 } else { 9791 cancelQueuedFocusRef.current = enqueueFocus(item2, { 9792 sync: forceSyncFocusRef.current, 9793 preventScroll: true 9794 }); 9795 } 9796 } 9797 const initialItem = listRef.current[indexRef.current]; 9798 const forceScrollIntoView = forceScrollIntoViewRef.current; 9799 if (initialItem) { 9800 runFocus(initialItem); 9801 } 9802 const scheduler2 = forceSyncFocusRef.current ? (callback) => callback() : (callback) => focusFrame.request(callback); 9803 scheduler2(() => { 9804 const waitedItem = listRef.current[indexRef.current] || initialItem; 9805 if (!waitedItem) { 9806 return; 9807 } 9808 if (!initialItem) { 9809 runFocus(waitedItem); 9810 } 9811 const shouldScrollIntoView = ( 9812 // eslint-disable-next-line @typescript-eslint/no-use-before-define 9813 item && (forceScrollIntoView || !isPointerModalityRef.current) 9814 ); 9815 if (shouldScrollIntoView) { 9816 waitedItem.scrollIntoView?.({ 9817 block: "nearest", 9818 inline: "nearest" 9819 }); 9820 } 9821 }); 9822 }); 9823 useIsoLayoutEffect(() => { 9824 dataRef.current.orientation = orientation; 9825 }, [dataRef, orientation]); 9826 useIsoLayoutEffect(() => { 9827 if (!enabled) { 9828 return; 9829 } 9830 if (open && floatingElement) { 9831 indexRef.current = selectedIndex ?? -1; 9832 if (focusItemOnOpenRef.current && selectedIndex != null) { 9833 forceScrollIntoViewRef.current = true; 9834 onNavigate(); 9835 } 9836 } else if (previousMountedRef.current) { 9837 indexRef.current = -1; 9838 onNavigate(); 9839 } 9840 }, [enabled, open, floatingElement, selectedIndex, onNavigate]); 9841 useIsoLayoutEffect(() => { 9842 if (!enabled) { 9843 return; 9844 } 9845 if (!open) { 9846 forceSyncFocusRef.current = false; 9847 return; 9848 } 9849 if (!floatingElement) { 9850 return; 9851 } 9852 if (activeIndex == null) { 9853 forceSyncFocusRef.current = false; 9854 if (selectedIndexRef.current != null) { 9855 return; 9856 } 9857 if (previousMountedRef.current) { 9858 indexRef.current = -1; 9859 focusItem(); 9860 } 9861 if ((!previousOpenRef.current || !previousMountedRef.current) && focusItemOnOpenRef.current && (keyRef.current != null || focusItemOnOpenRef.current === true && keyRef.current == null)) { 9862 let runs = 0; 9863 const waitForListPopulated = () => { 9864 if (listRef.current[0] == null) { 9865 if (runs < 2) { 9866 const scheduler2 = runs ? (callback) => waitForListPopulatedFrame.request(callback) : queueMicrotask; 9867 scheduler2(waitForListPopulated); 9868 } 9869 runs += 1; 9870 } else { 9871 indexRef.current = keyRef.current == null || isMainOrientationToEndKey(keyRef.current, orientation, rtl) || nested ? getMinListIndex(listRef) : getMaxListIndex(listRef); 9872 keyRef.current = null; 9873 onNavigate(); 9874 } 9875 }; 9876 waitForListPopulated(); 9877 } 9878 } else if (!isIndexOutOfListBounds(listRef.current, activeIndex)) { 9879 indexRef.current = activeIndex; 9880 focusItem(); 9881 forceScrollIntoViewRef.current = false; 9882 } 9883 }, [enabled, open, floatingElement, activeIndex, selectedIndexRef, nested, listRef, orientation, rtl, onNavigate, focusItem, waitForListPopulatedFrame]); 9884 useIsoLayoutEffect(() => { 9885 if (!enabled || floatingElement || !tree || virtual || !previousMountedRef.current) { 9886 return; 9887 } 9888 const nodes = tree.nodesRef.current; 9889 const parent = nodes.find((node) => node.id === parentId)?.context?.elements.floating; 9890 const activeEl = activeElement(ownerDocument(domReferenceElement ?? parent ?? null)); 9891 const treeContainsActiveEl = nodes.some((node) => node.context && contains(node.context.elements.floating, activeEl)); 9892 if (parent && !treeContainsActiveEl && isPointerModalityRef.current) { 9893 parent.focus({ 9894 preventScroll: true 9895 }); 9896 } 9897 }, [enabled, floatingElement, domReferenceElement, tree, parentId, virtual]); 9898 useIsoLayoutEffect(() => { 9899 previousOpenRef.current = open; 9900 previousMountedRef.current = !!floatingElement; 9901 }); 9902 useIsoLayoutEffect(() => { 9903 if (!open) { 9904 keyRef.current = null; 9905 focusItemOnOpenRef.current = focusItemOnOpen; 9906 } 9907 }, [open, focusItemOnOpen]); 9908 const hasActiveIndex = activeIndex != null; 9909 const syncCurrentTarget = useStableCallback((event) => { 9910 if (!latestOpenRef.current) { 9911 return; 9912 } 9913 const index2 = listRef.current.indexOf(event.currentTarget); 9914 if (index2 !== -1 && (indexRef.current !== index2 || activeIndex !== index2)) { 9915 indexRef.current = index2; 9916 onNavigate(event); 9917 } 9918 }); 9919 const getParentOrientation = useStableCallback(() => { 9920 return parentOrientation ?? tree?.nodesRef.current.find((node) => node.id === parentId)?.context?.dataRef?.current.orientation; 9921 }); 9922 const getMinEnabledIndex = useStableCallback(() => { 9923 return getMinListIndex(listRef, disabledIndicesRef.current); 9924 }); 9925 const commonOnKeyDown = useStableCallback((event) => { 9926 isPointerModalityRef.current = false; 9927 forceSyncFocusRef.current = true; 9928 if (event.which === 229) { 9929 return; 9930 } 9931 if (!latestOpenRef.current && event.currentTarget === floatingFocusElementRef.current) { 9932 return; 9933 } 9934 if (nested && isCrossOrientationCloseKey(event.key, orientation, rtl, isGrid2)) { 9935 if (!isMainOrientationKey(event.key, getParentOrientation())) { 9936 stopEvent(event); 9937 } 9938 store.setOpen(false, createChangeEventDetails(reason_parts_exports.listNavigation, event.nativeEvent)); 9939 if (isHTMLElement(domReferenceElement)) { 9940 if (virtual) { 9941 tree?.events.emit("virtualfocus", domReferenceElement); 9942 } else { 9943 domReferenceElement.focus(); 9944 } 9945 } 9946 return; 9947 } 9948 const currentIndex = indexRef.current; 9949 const minIndex = getMinListIndex(listRef, disabledIndices); 9950 const maxIndex = getMaxListIndex(listRef, disabledIndices); 9951 if (!typeableComboboxReference) { 9952 if (event.key === "Home") { 9953 stopEvent(event); 9954 indexRef.current = minIndex; 9955 onNavigate(event); 9956 } 9957 if (event.key === "End") { 9958 stopEvent(event); 9959 indexRef.current = maxIndex; 9960 onNavigate(event); 9961 } 9962 } 9963 if (navigateGrid != null) { 9964 const index2 = navigateGrid(event, indexRef.current, listRef, orientation, loopFocus, rtl, disabledIndices, minIndex, maxIndex); 9965 if (index2 != null) { 9966 indexRef.current = index2; 9967 onNavigate(event); 9968 } 9969 if (orientation === "both") { 9970 return; 9971 } 9972 } 9973 if (isMainOrientationKey(event.key, orientation)) { 9974 stopEvent(event); 9975 if (open && !virtual && activeElement(event.currentTarget.ownerDocument) === event.currentTarget) { 9976 indexRef.current = isMainOrientationToEndKey(event.key, orientation, rtl) ? minIndex : maxIndex; 9977 onNavigate(event); 9978 return; 9979 } 9980 if (isMainOrientationToEndKey(event.key, orientation, rtl)) { 9981 if (loopFocus) { 9982 if (currentIndex >= maxIndex) { 9983 if (allowEscape && currentIndex !== listRef.current.length) { 9984 indexRef.current = -1; 9985 } else { 9986 forceSyncFocusRef.current = false; 9987 indexRef.current = minIndex; 9988 } 9989 } else { 9990 indexRef.current = findNonDisabledListIndex(listRef.current, { 9991 startingIndex: currentIndex, 9992 disabledIndices 9993 }); 9994 } 9995 } else { 9996 indexRef.current = Math.min(maxIndex, findNonDisabledListIndex(listRef.current, { 9997 startingIndex: currentIndex, 9998 disabledIndices 9999 })); 10000 } 10001 } else if (loopFocus) { 10002 if (currentIndex <= minIndex) { 10003 if (allowEscape && currentIndex !== -1) { 10004 indexRef.current = listRef.current.length; 10005 } else { 10006 forceSyncFocusRef.current = false; 10007 indexRef.current = maxIndex; 10008 } 10009 } else { 10010 indexRef.current = findNonDisabledListIndex(listRef.current, { 10011 startingIndex: currentIndex, 10012 decrement: true, 10013 disabledIndices 10014 }); 10015 } 10016 } else { 10017 indexRef.current = Math.max(minIndex, findNonDisabledListIndex(listRef.current, { 10018 startingIndex: currentIndex, 10019 decrement: true, 10020 disabledIndices 10021 })); 10022 } 10023 if (isIndexOutOfListBounds(listRef.current, indexRef.current)) { 10024 indexRef.current = -1; 10025 } 10026 onNavigate(event); 10027 } 10028 }); 10029 const item = React37.useMemo(() => { 10030 const itemProps = { 10031 onFocus(event) { 10032 forceSyncFocusRef.current = true; 10033 syncCurrentTarget(event); 10034 }, 10035 onClick: ({ 10036 currentTarget 10037 }) => currentTarget.focus({ 10038 preventScroll: true 10039 }), 10040 // Safari 10041 onMouseMove(event) { 10042 if (isStationaryWebKitPointer(event)) { 10043 return; 10044 } 10045 forceSyncFocusRef.current = true; 10046 forceScrollIntoViewRef.current = false; 10047 if (focusItemOnHover) { 10048 syncCurrentTarget(event); 10049 } 10050 }, 10051 onPointerLeave(event) { 10052 if (!latestOpenRef.current || !isPointerModalityRef.current || event.pointerType === "touch") { 10053 return; 10054 } 10055 forceSyncFocusRef.current = true; 10056 const relatedTarget = event.relatedTarget; 10057 if (!focusItemOnHover || listRef.current.includes(relatedTarget)) { 10058 return; 10059 } 10060 if (!resetOnPointerLeaveRef.current) { 10061 return; 10062 } 10063 cancelQueuedFocusRef.current?.(); 10064 cancelQueuedFocusRef.current = null; 10065 indexRef.current = -1; 10066 onNavigate(event); 10067 if (!virtual) { 10068 const floatingFocusEl = floatingFocusElementRef.current; 10069 const activeEl = activeElement(ownerDocument(floatingFocusEl)); 10070 if (floatingFocusEl && contains(floatingFocusEl, activeEl)) { 10071 floatingFocusEl.focus({ 10072 preventScroll: true 10073 }); 10074 } 10075 } 10076 } 10077 }; 10078 return itemProps; 10079 }, [syncCurrentTarget, latestOpenRef, floatingFocusElementRef, focusItemOnHover, listRef, onNavigate, resetOnPointerLeaveRef, virtual]); 10080 const ariaActiveDescendantProp = React37.useMemo(() => { 10081 return virtual && open && hasActiveIndex && { 10082 "aria-activedescendant": `$id}-$activeIndex}` 10083 }; 10084 }, [virtual, open, hasActiveIndex, id, activeIndex]); 10085 const floating = React37.useMemo(() => { 10086 return { 10087 "aria-orientation": orientation === "both" ? void 0 : orientation, 10088 ...!typeableComboboxReference ? ariaActiveDescendantProp : {}, 10089 onKeyDown(event) { 10090 if (event.key === "Tab" && event.shiftKey && open && !virtual) { 10091 const target = getTarget(event.nativeEvent); 10092 if (target && !contains(floatingFocusElementRef.current, target)) { 10093 return; 10094 } 10095 stopEvent(event); 10096 store.setOpen(false, createChangeEventDetails(reason_parts_exports.focusOut, event.nativeEvent)); 10097 if (isHTMLElement(domReferenceElement)) { 10098 domReferenceElement.focus(); 10099 } 10100 return; 10101 } 10102 commonOnKeyDown(event); 10103 }, 10104 onPointerMove(event) { 10105 if (isStationaryWebKitPointer(event)) { 10106 return; 10107 } 10108 isPointerModalityRef.current = true; 10109 } 10110 }; 10111 }, [ariaActiveDescendantProp, commonOnKeyDown, floatingFocusElementRef, orientation, typeableComboboxReference, store, open, virtual, domReferenceElement]); 10112 const trigger = React37.useMemo(() => { 10113 function openOnNavigationKeyDown(event) { 10114 store.setOpen(true, createChangeEventDetails(reason_parts_exports.listNavigation, event.nativeEvent, event.currentTarget)); 10115 } 10116 function checkVirtualMouse(event) { 10117 if (focusItemOnOpen === "auto" && isVirtualClick(event.nativeEvent)) { 10118 focusItemOnOpenRef.current = !virtual; 10119 } 10120 } 10121 function checkVirtualPointer(event) { 10122 focusItemOnOpenRef.current = focusItemOnOpen; 10123 if (focusItemOnOpen === "auto" && isVirtualPointerEvent(event.nativeEvent)) { 10124 focusItemOnOpenRef.current = true; 10125 } 10126 } 10127 return { 10128 onKeyDown(event) { 10129 const currentOpen = store.select("open"); 10130 isPointerModalityRef.current = false; 10131 const isArrowKey = event.key.startsWith("Arrow"); 10132 const isParentCrossOpenKey = isCrossOrientationOpenKey(event.key, getParentOrientation(), rtl); 10133 const isMainKey = isMainOrientationKey(event.key, orientation); 10134 const isNavigationKey = (nested ? isParentCrossOpenKey : isMainKey) || event.key === "Enter" || event.key.trim() === ""; 10135 if (virtual && currentOpen) { 10136 return commonOnKeyDown(event); 10137 } 10138 if (!currentOpen && !openOnArrowKeyDown && isArrowKey) { 10139 return void 0; 10140 } 10141 if (isNavigationKey) { 10142 const isParentMainKey = isMainOrientationKey(event.key, getParentOrientation()); 10143 keyRef.current = nested && isParentMainKey ? null : event.key; 10144 } 10145 if (nested) { 10146 if (isParentCrossOpenKey) { 10147 stopEvent(event); 10148 if (currentOpen) { 10149 indexRef.current = getMinEnabledIndex(); 10150 onNavigate(event); 10151 } else { 10152 openOnNavigationKeyDown(event); 10153 } 10154 } 10155 return void 0; 10156 } 10157 if (isMainKey) { 10158 if (selectedIndexRef.current != null) { 10159 indexRef.current = selectedIndexRef.current; 10160 } 10161 stopEvent(event); 10162 if (!currentOpen && openOnArrowKeyDown) { 10163 openOnNavigationKeyDown(event); 10164 } else { 10165 commonOnKeyDown(event); 10166 } 10167 if (currentOpen) { 10168 onNavigate(event); 10169 } 10170 } 10171 return void 0; 10172 }, 10173 onFocus(event) { 10174 if (store.select("open") && !virtual) { 10175 indexRef.current = -1; 10176 onNavigate(event); 10177 } 10178 }, 10179 onPointerDown: checkVirtualPointer, 10180 onPointerEnter: checkVirtualPointer, 10181 onMouseDown: checkVirtualMouse, 10182 onClick: checkVirtualMouse 10183 }; 10184 }, [commonOnKeyDown, focusItemOnOpen, getMinEnabledIndex, nested, onNavigate, store, openOnArrowKeyDown, orientation, getParentOrientation, rtl, selectedIndexRef, virtual]); 10185 const reference = React37.useMemo(() => { 10186 return { 10187 ...ariaActiveDescendantProp, 10188 ...trigger 10189 }; 10190 }, [ariaActiveDescendantProp, trigger]); 10191 return React37.useMemo(() => enabled ? { 10192 reference, 10193 floating, 10194 item, 10195 trigger 10196 } : {}, [enabled, reference, floating, trigger, item]); 10197 } 10198 10199 // node_modules/@base-ui/react/floating-ui-react/hooks/useTypeahead.mjs 10200 var React38 = __toESM(require_react(), 1); 10201 function useTypeahead(context, props) { 10202 const { 10203 listRef, 10204 elementsRef, 10205 activeIndex, 10206 onMatch: onMatchProp, 10207 disabledIndices, 10208 onTyping, 10209 enabled = true, 10210 resetMs = 750, 10211 selectedIndex = null 10212 } = props; 10213 const store = "rootStore" in context ? context.rootStore : context; 10214 const open = store.useState("open"); 10215 const timeout = useTimeout(); 10216 const stringRef = React38.useRef(""); 10217 const prevIndexRef = React38.useRef(selectedIndex ?? activeIndex ?? -1); 10218 const matchIndexRef = React38.useRef(null); 10219 const onKeyDown = useStableCallback((event) => { 10220 function getElement(index3) { 10221 return elementsRef?.current[index3]; 10222 } 10223 function isItemAvailable(index3) { 10224 const element = getElement(index3); 10225 if (element && !isElementVisible(element) || element?.matches(":disabled")) { 10226 return false; 10227 } 10228 return disabledIndices == null || !isListIndexDisabled(EMPTY_ARRAY, index3, disabledIndices); 10229 } 10230 function getMatchingIndex(list, string, startIndex2 = 0) { 10231 if (list.length === 0) { 10232 return -1; 10233 } 10234 const normalizedStartIndex = (startIndex2 % list.length + list.length) % list.length; 10235 const lowerString = string.toLowerCase(); 10236 for (let offset4 = 0; offset4 < list.length; offset4 += 1) { 10237 const index3 = (normalizedStartIndex + offset4) % list.length; 10238 const text = list[index3]; 10239 if (!text?.toLowerCase().startsWith(lowerString) || !isItemAvailable(index3)) { 10240 continue; 10241 } 10242 return index3; 10243 } 10244 return -1; 10245 } 10246 const listContent = listRef.current; 10247 if (stringRef.current.length > 0 && event.key === " ") { 10248 stopEvent(event); 10249 onTyping?.(true); 10250 } 10251 if (stringRef.current.length > 0 && stringRef.current[0] !== " ") { 10252 if (getMatchingIndex(listContent, stringRef.current) === -1 && event.key !== " ") { 10253 onTyping?.(false); 10254 } 10255 } 10256 if (listContent == null || // Character key. 10257 event.key.length !== 1 || // Modifier key. 10258 event.ctrlKey || event.metaKey || event.altKey) { 10259 return; 10260 } 10261 if (open && event.key !== " ") { 10262 stopEvent(event); 10263 onTyping?.(true); 10264 } 10265 const isNewSession = stringRef.current === ""; 10266 if (isNewSession) { 10267 prevIndexRef.current = selectedIndex ?? activeIndex ?? -1; 10268 } 10269 const allowRapidSuccessionOfFirstLetter = listContent.every((text, index3) => text && isItemAvailable(index3) ? text[0]?.toLowerCase() !== text[1]?.toLowerCase() : true); 10270 if (allowRapidSuccessionOfFirstLetter && stringRef.current === event.key) { 10271 stringRef.current = ""; 10272 prevIndexRef.current = matchIndexRef.current; 10273 } 10274 stringRef.current += event.key; 10275 timeout.start(resetMs, () => { 10276 stringRef.current = ""; 10277 prevIndexRef.current = matchIndexRef.current; 10278 onTyping?.(false); 10279 }); 10280 const prevIndex = isNewSession ? selectedIndex ?? activeIndex ?? -1 : prevIndexRef.current; 10281 const startIndex = (prevIndex ?? 0) + 1; 10282 const index2 = getMatchingIndex(listContent, stringRef.current, startIndex); 10283 if (index2 !== -1) { 10284 onMatchProp?.(index2); 10285 matchIndexRef.current = index2; 10286 } else if (event.key !== " ") { 10287 stringRef.current = ""; 10288 onTyping?.(false); 10289 } 10290 }); 10291 const onBlur = useStableCallback((event) => { 10292 const next = event.relatedTarget; 10293 const currentDomReferenceElement = store.select("domReferenceElement"); 10294 const currentFloatingElement = store.select("floatingElement"); 10295 const withinComposite = contains(currentDomReferenceElement, next) || contains(currentFloatingElement, next); 10296 if (withinComposite) { 10297 return; 10298 } 10299 timeout.clear(); 10300 stringRef.current = ""; 10301 prevIndexRef.current = matchIndexRef.current; 10302 onTyping?.(false); 10303 }); 10304 useIsoLayoutEffect(() => { 10305 if (!open && selectedIndex !== null) { 10306 return; 10307 } 10308 timeout.clear(); 10309 matchIndexRef.current = null; 10310 if (stringRef.current !== "") { 10311 stringRef.current = ""; 10312 } 10313 }, [open, selectedIndex, timeout]); 10314 const sharedProps = React38.useMemo(() => ({ 10315 onKeyDown, 10316 onBlur 10317 }), [onKeyDown, onBlur]); 10318 return React38.useMemo(() => enabled ? { 10319 reference: sharedProps, 10320 floating: sharedProps 10321 } : {}, [enabled, sharedProps]); 10322 } 10323 10324 // node_modules/@base-ui/react/floating-ui-react/safePolygon.mjs 10325 var CURSOR_SPEED_THRESHOLD = 0.1; 10326 var CURSOR_SPEED_THRESHOLD_SQUARED = CURSOR_SPEED_THRESHOLD * CURSOR_SPEED_THRESHOLD; 10327 var POLYGON_BUFFER = 0.5; 10328 function hasIntersectingEdge(pointX, pointY, xi, yi, xj, yj) { 10329 return yi >= pointY !== yj >= pointY && pointX <= (xj - xi) * (pointY - yi) / (yj - yi) + xi; 10330 } 10331 function isPointInQuadrilateral(pointX, pointY, x1, y1, x2, y2, x3, y3, x4, y4) { 10332 let isInsideValue = false; 10333 if (hasIntersectingEdge(pointX, pointY, x1, y1, x2, y2)) { 10334 isInsideValue = !isInsideValue; 10335 } 10336 if (hasIntersectingEdge(pointX, pointY, x2, y2, x3, y3)) { 10337 isInsideValue = !isInsideValue; 10338 } 10339 if (hasIntersectingEdge(pointX, pointY, x3, y3, x4, y4)) { 10340 isInsideValue = !isInsideValue; 10341 } 10342 if (hasIntersectingEdge(pointX, pointY, x4, y4, x1, y1)) { 10343 isInsideValue = !isInsideValue; 10344 } 10345 return isInsideValue; 10346 } 10347 function isInsideRect(pointX, pointY, rect) { 10348 return pointX >= rect.x && pointX <= rect.x + rect.width && pointY >= rect.y && pointY <= rect.y + rect.height; 10349 } 10350 function isInsideAxisAlignedRect(pointX, pointY, x1, y1, x2, y2) { 10351 const minX = Math.min(x1, x2); 10352 const maxX = Math.max(x1, x2); 10353 const minY = Math.min(y1, y2); 10354 const maxY = Math.max(y1, y2); 10355 return pointX >= minX && pointX <= maxX && pointY >= minY && pointY <= maxY; 10356 } 10357 function safePolygon(options = {}) { 10358 const { 10359 blockPointerEvents = false 10360 } = options; 10361 const timeout = new Timeout(); 10362 const fn = ({ 10363 x: x2, 10364 y: y2, 10365 placement, 10366 elements, 10367 onClose, 10368 nodeId, 10369 tree 10370 }) => { 10371 const side = placement?.split("-")[0]; 10372 let hasLanded = false; 10373 let lastX = null; 10374 let lastY = null; 10375 let lastCursorTime = typeof performance !== "undefined" ? performance.now() : 0; 10376 function isCursorMovingSlowly(nextX, nextY) { 10377 const currentTime = performance.now(); 10378 const elapsedTime = currentTime - lastCursorTime; 10379 if (lastX === null || lastY === null || elapsedTime === 0) { 10380 lastX = nextX; 10381 lastY = nextY; 10382 lastCursorTime = currentTime; 10383 return false; 10384 } 10385 const deltaX = nextX - lastX; 10386 const deltaY = nextY - lastY; 10387 const distanceSquared = deltaX * deltaX + deltaY * deltaY; 10388 const thresholdSquared = elapsedTime * elapsedTime * CURSOR_SPEED_THRESHOLD_SQUARED; 10389 lastX = nextX; 10390 lastY = nextY; 10391 lastCursorTime = currentTime; 10392 return distanceSquared < thresholdSquared; 10393 } 10394 function close() { 10395 timeout.clear(); 10396 onClose(); 10397 } 10398 return function onMouseMove(event) { 10399 timeout.clear(); 10400 const domReference = elements.domReference; 10401 const floating = elements.floating; 10402 if (!domReference || !floating || side == null || x2 == null || y2 == null) { 10403 return void 0; 10404 } 10405 const { 10406 clientX, 10407 clientY 10408 } = event; 10409 const target = getTarget(event); 10410 const isLeave = event.type === "mouseleave"; 10411 const isOverFloatingEl = contains(floating, target); 10412 const isOverReferenceEl = contains(domReference, target); 10413 if (isOverFloatingEl) { 10414 hasLanded = true; 10415 if (!isLeave) { 10416 return void 0; 10417 } 10418 } 10419 if (isOverReferenceEl) { 10420 hasLanded = false; 10421 if (!isLeave) { 10422 hasLanded = true; 10423 return void 0; 10424 } 10425 } 10426 if (isLeave && isElement(event.relatedTarget) && contains(floating, event.relatedTarget)) { 10427 return void 0; 10428 } 10429 function hasOpenChildNode() { 10430 return Boolean(tree && getNodeChildren(tree.nodesRef.current, nodeId).length > 0); 10431 } 10432 function closeIfNoOpenChild() { 10433 if (!hasOpenChildNode()) { 10434 close(); 10435 } 10436 } 10437 if (hasOpenChildNode()) { 10438 return void 0; 10439 } 10440 const refRect = domReference.getBoundingClientRect(); 10441 const rect = floating.getBoundingClientRect(); 10442 const cursorLeaveFromRight = x2 > rect.right - rect.width / 2; 10443 const cursorLeaveFromBottom = y2 > rect.bottom - rect.height / 2; 10444 const isFloatingWider = rect.width > refRect.width; 10445 const isFloatingTaller = rect.height > refRect.height; 10446 const left = (isFloatingWider ? refRect : rect).left; 10447 const right = (isFloatingWider ? refRect : rect).right; 10448 const top = (isFloatingTaller ? refRect : rect).top; 10449 const bottom = (isFloatingTaller ? refRect : rect).bottom; 10450 if (side === "top" && y2 >= refRect.bottom - 1 || side === "bottom" && y2 <= refRect.top + 1 || side === "left" && x2 >= refRect.right - 1 || side === "right" && x2 <= refRect.left + 1) { 10451 closeIfNoOpenChild(); 10452 return void 0; 10453 } 10454 let isInsideTroughRect = false; 10455 switch (side) { 10456 case "top": 10457 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, refRect.top + 1, right, rect.bottom - 1); 10458 break; 10459 case "bottom": 10460 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, rect.top + 1, right, refRect.bottom - 1); 10461 break; 10462 case "left": 10463 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, rect.right - 1, bottom, refRect.left + 1, top); 10464 break; 10465 case "right": 10466 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, refRect.right - 1, bottom, rect.left + 1, top); 10467 break; 10468 default: 10469 } 10470 if (isInsideTroughRect) { 10471 return void 0; 10472 } 10473 if (hasLanded && !isInsideRect(clientX, clientY, refRect)) { 10474 closeIfNoOpenChild(); 10475 return void 0; 10476 } 10477 if (!isLeave && isCursorMovingSlowly(clientX, clientY)) { 10478 closeIfNoOpenChild(); 10479 return void 0; 10480 } 10481 let isInsidePolygon = false; 10482 switch (side) { 10483 case "top": { 10484 const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; 10485 const cursorPointOneX = isFloatingWider ? x2 + cursorXOffset : cursorLeaveFromRight ? x2 + cursorXOffset : x2 - cursorXOffset; 10486 const cursorPointTwoX = isFloatingWider ? x2 - cursorXOffset : cursorLeaveFromRight ? x2 + cursorXOffset : x2 - cursorXOffset; 10487 const cursorPointY = y2 + POLYGON_BUFFER + 1; 10488 const commonYLeft = cursorLeaveFromRight ? rect.bottom - POLYGON_BUFFER : isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top; 10489 const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top : rect.bottom - POLYGON_BUFFER; 10490 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight); 10491 break; 10492 } 10493 case "bottom": { 10494 const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; 10495 const cursorPointOneX = isFloatingWider ? x2 + cursorXOffset : cursorLeaveFromRight ? x2 + cursorXOffset : x2 - cursorXOffset; 10496 const cursorPointTwoX = isFloatingWider ? x2 - cursorXOffset : cursorLeaveFromRight ? x2 + cursorXOffset : x2 - cursorXOffset; 10497 const cursorPointY = y2 - POLYGON_BUFFER; 10498 const commonYLeft = cursorLeaveFromRight ? rect.top + POLYGON_BUFFER : isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom; 10499 const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom : rect.top + POLYGON_BUFFER; 10500 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight); 10501 break; 10502 } 10503 case "left": { 10504 const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; 10505 const cursorPointOneY = isFloatingTaller ? y2 + cursorYOffset : cursorLeaveFromBottom ? y2 + cursorYOffset : y2 - cursorYOffset; 10506 const cursorPointTwoY = isFloatingTaller ? y2 - cursorYOffset : cursorLeaveFromBottom ? y2 + cursorYOffset : y2 - cursorYOffset; 10507 const cursorPointX = x2 + POLYGON_BUFFER + 1; 10508 const commonXTop = cursorLeaveFromBottom ? rect.right - POLYGON_BUFFER : isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left; 10509 const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left : rect.right - POLYGON_BUFFER; 10510 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, commonXTop, rect.top, commonXBottom, rect.bottom, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY); 10511 break; 10512 } 10513 case "right": { 10514 const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4; 10515 const cursorPointOneY = isFloatingTaller ? y2 + cursorYOffset : cursorLeaveFromBottom ? y2 + cursorYOffset : y2 - cursorYOffset; 10516 const cursorPointTwoY = isFloatingTaller ? y2 - cursorYOffset : cursorLeaveFromBottom ? y2 + cursorYOffset : y2 - cursorYOffset; 10517 const cursorPointX = x2 - POLYGON_BUFFER; 10518 const commonXTop = cursorLeaveFromBottom ? rect.left + POLYGON_BUFFER : isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right; 10519 const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right : rect.left + POLYGON_BUFFER; 10520 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY, commonXTop, rect.top, commonXBottom, rect.bottom); 10521 break; 10522 } 10523 default: 10524 } 10525 if (!isInsidePolygon) { 10526 closeIfNoOpenChild(); 10527 } else if (!hasLanded) { 10528 timeout.start(40, closeIfNoOpenChild); 10529 } 10530 return void 0; 10531 }; 10532 }; 10533 fn.__options = { 10534 ...options, 10535 blockPointerEvents 10536 }; 10537 return fn; 10538 } 10539 10540 // node_modules/@base-ui/react/utils/NullStore.mjs 10541 var NullStore = class extends ReactStore { 10542 // `update`/`set`/`notifyAll` funnel through `setState` in the base `Store`, so overriding 10543 // `setState` alone would neutralize them today. They are overridden explicitly so the store stays 10544 // inert even if a future base-class change stops routing a mutator through `setState`. 10545 setState(_newState) { 10546 } 10547 update(_changes) { 10548 } 10549 set(_key, _value) { 10550 } 10551 notifyAll() { 10552 } 10553 }; 10554 10555 // node_modules/@base-ui/react/utils/popupStateMapping.mjs 10556 var CommonPopupDataAttributes = (function(CommonPopupDataAttributes2) { 10557 CommonPopupDataAttributes2["open"] = "data-open"; 10558 CommonPopupDataAttributes2["closed"] = "data-closed"; 10559 CommonPopupDataAttributes2[CommonPopupDataAttributes2["startingStyle"] = TransitionStatusDataAttributes.startingStyle] = "startingStyle"; 10560 CommonPopupDataAttributes2[CommonPopupDataAttributes2["endingStyle"] = TransitionStatusDataAttributes.endingStyle] = "endingStyle"; 10561 CommonPopupDataAttributes2["anchorHidden"] = "data-anchor-hidden"; 10562 CommonPopupDataAttributes2["side"] = "data-side"; 10563 CommonPopupDataAttributes2["align"] = "data-align"; 10564 return CommonPopupDataAttributes2; 10565 })({}); 10566 var TRIGGER_HOOK = { 10567 "data-popup-open": "" 10568 }; 10569 var PRESSABLE_TRIGGER_HOOK = { 10570 "data-popup-open": "", 10571 "data-pressed": "" 10572 }; 10573 var POPUP_OPEN_HOOK = { 10574 "data-open": "" 10575 }; 10576 var POPUP_CLOSED_HOOK = { 10577 "data-closed": "" 10578 }; 10579 var ANCHOR_HIDDEN_HOOK = { 10580 "data-anchor-hidden": "" 10581 }; 10582 var triggerOpenStateMapping = { 10583 open(value) { 10584 if (value) { 10585 return TRIGGER_HOOK; 10586 } 10587 return null; 10588 } 10589 }; 10590 var pressableTriggerOpenStateMapping = { 10591 open(value) { 10592 if (value) { 10593 return PRESSABLE_TRIGGER_HOOK; 10594 } 10595 return null; 10596 } 10597 }; 10598 var popupStateMapping = { 10599 open(value) { 10600 if (value) { 10601 return POPUP_OPEN_HOOK; 10602 } 10603 return POPUP_CLOSED_HOOK; 10604 }, 10605 anchorHidden(value) { 10606 if (value) { 10607 return ANCHOR_HIDDEN_HOOK; 10608 } 10609 return null; 10610 } 10611 }; 10612 var popupTransitionStateMapping = { 10613 ...popupStateMapping, 10614 ...transitionStatusMapping 10615 }; 10616 10617 // node_modules/@base-ui/react/internals/composite/composite.mjs 10618 var ARROW_UP2 = "ArrowUp"; 10619 var ARROW_DOWN2 = "ArrowDown"; 10620 var ARROW_LEFT2 = "ArrowLeft"; 10621 var ARROW_RIGHT2 = "ArrowRight"; 10622 var HOME = "Home"; 10623 var END = "End"; 10624 var COMPOSITE_KEYS = /* @__PURE__ */ new Set([ARROW_UP2, ARROW_DOWN2, ARROW_LEFT2, ARROW_RIGHT2, HOME, END]); 10625 10626 // node_modules/@base-ui/utils/inertValue.mjs 10627 function inertValue(value) { 10628 if (isReactVersionAtLeast(19)) { 10629 return value; 10630 } 10631 return value ? "true" : void 0; 10632 } 10633 10634 // node_modules/@base-ui/react/utils/InternalBackdrop.mjs 10635 var React39 = __toESM(require_react(), 1); 10636 var import_jsx_runtime41 = __toESM(require_jsx_runtime(), 1); 10637 var InternalBackdrop = /* @__PURE__ */ React39.forwardRef(function InternalBackdrop2(props, ref) { 10638 const { 10639 cutout, 10640 ...otherProps 10641 } = props; 10642 let clipPath; 10643 if (cutout) { 10644 const rect = cutout.getBoundingClientRect(); 10645 clipPath = `polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,$rect.left}px $rect.top}px,$rect.left}px $rect.bottom}px,$rect.right}px $rect.bottom}px,$rect.right}px $rect.top}px,$rect.left}px $rect.top}px)`; 10646 } 10647 return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { 10648 ref, 10649 role: "presentation", 10650 "data-base-ui-inert": "", 10651 ...otherProps, 10652 style: { 10653 position: "fixed", 10654 inset: 0, 10655 userSelect: "none", 10656 WebkitUserSelect: "none", 10657 clipPath 10658 } 10659 }); 10660 }); 10661 if (true) InternalBackdrop.displayName = "InternalBackdrop"; 10662 10663 // node_modules/@base-ui/react/utils/useOpenInteractionType.mjs 10664 var React42 = __toESM(require_react(), 1); 10665 10666 // node_modules/@base-ui/utils/useEnhancedClickHandler.mjs 10667 var React40 = __toESM(require_react(), 1); 10668 function useEnhancedClickHandler(handler) { 10669 const lastClickInteractionTypeRef = React40.useRef(""); 10670 const handlePointerDown = React40.useCallback((event) => { 10671 if (event.defaultPrevented) { 10672 return; 10673 } 10674 lastClickInteractionTypeRef.current = event.pointerType; 10675 handler(event, event.pointerType); 10676 }, [handler]); 10677 const handleClick = React40.useCallback((event) => { 10678 if (event.detail === 0) { 10679 handler(event, "keyboard"); 10680 return; 10681 } 10682 if ("pointerType" in event) { 10683 handler(event, event.pointerType); 10684 } else { 10685 handler(event, lastClickInteractionTypeRef.current); 10686 } 10687 lastClickInteractionTypeRef.current = ""; 10688 }, [handler]); 10689 return { 10690 onClick: handleClick, 10691 onPointerDown: handlePointerDown 10692 }; 10693 } 10694 10695 // node_modules/@base-ui/react/internals/useValueChanged.mjs 10696 var React41 = __toESM(require_react(), 1); 10697 function useValueChanged(value, onChange) { 10698 const valueRef = React41.useRef(value); 10699 const onChangeCallback = useStableCallback(onChange); 10700 useIsoLayoutEffect(() => { 10701 if (valueRef.current !== value) { 10702 onChangeCallback(valueRef.current); 10703 } 10704 valueRef.current = value; 10705 }, [value, onChangeCallback]); 10706 } 10707 10708 // node_modules/@base-ui/react/utils/useOpenInteractionType.mjs 10709 function useOpenMethodTriggerProps(open, setOpenMethod) { 10710 const handleTriggerClick = useStableCallback((_, interactionType) => { 10711 const isOpen = typeof open === "function" ? open() : open; 10712 if (!isOpen) { 10713 setOpenMethod(interactionType || // On iOS Safari, the hitslop around touch targets means tapping outside an element's 10714 // bounds does not fire `pointerdown` but does fire `mousedown`. The `interactionType` 10715 // will be "" in that case. 10716 (parts_exports.os.ios ? "touch" : "")); 10717 } 10718 }); 10719 const { 10720 onClick, 10721 onPointerDown 10722 } = useEnhancedClickHandler(handleTriggerClick); 10723 return React42.useMemo(() => ({ 10724 onClick, 10725 onPointerDown 10726 }), [onClick, onPointerDown]); 10727 } 10728 function useOpenInteractionType(open) { 10729 const [openMethod, setOpenMethod] = React42.useState(null); 10730 const triggerProps = useOpenMethodTriggerProps(open, setOpenMethod); 10731 useValueChanged(open, (previousOpen) => { 10732 if (previousOpen && !open) { 10733 setOpenMethod(null); 10734 } 10735 }); 10736 return React42.useMemo(() => ({ 10737 openMethod, 10738 triggerProps 10739 }), [openMethod, triggerProps]); 10740 } 10741 10742 // node_modules/@base-ui/react/internals/field-root-context/FieldRootContext.mjs 10743 var React43 = __toESM(require_react(), 1); 10744 10745 // node_modules/@base-ui/react/internals/field-constants/constants.mjs 10746 var DEFAULT_VALIDITY_STATE = { 10747 badInput: false, 10748 customError: false, 10749 patternMismatch: false, 10750 rangeOverflow: false, 10751 rangeUnderflow: false, 10752 stepMismatch: false, 10753 tooLong: false, 10754 tooShort: false, 10755 typeMismatch: false, 10756 valid: null, 10757 valueMissing: false 10758 }; 10759 var DEFAULT_FIELD_STATE_ATTRIBUTES = { 10760 valid: null, 10761 touched: false, 10762 dirty: false, 10763 filled: false, 10764 focused: false 10765 }; 10766 var DEFAULT_FIELD_ROOT_STATE = { 10767 disabled: false, 10768 ...DEFAULT_FIELD_STATE_ATTRIBUTES 10769 }; 10770 var fieldValidityMapping = { 10771 valid(value) { 10772 if (value === null) { 10773 return null; 10774 } 10775 if (value) { 10776 return { 10777 "data-valid": "" 10778 }; 10779 } 10780 return { 10781 "data-invalid": "" 10782 }; 10783 } 10784 }; 10785 10786 // node_modules/@base-ui/react/internals/field-root-context/FieldRootContext.mjs 10787 var DEFAULT_FIELD_ROOT_CONTEXT = { 10788 invalid: void 0, 10789 name: void 0, 10790 validityData: { 10791 state: DEFAULT_VALIDITY_STATE, 10792 errors: [], 10793 error: "", 10794 value: "", 10795 initialValue: null 10796 }, 10797 setValidityData: NOOP, 10798 disabled: void 0, 10799 setTouched: NOOP, 10800 setDirty: NOOP, 10801 setFilled: NOOP, 10802 setFocused: NOOP, 10803 validationMode: "onSubmit", 10804 shouldValidateOnChange: () => false, 10805 state: DEFAULT_FIELD_ROOT_STATE, 10806 registerFieldControl: NOOP, 10807 validation: { 10808 getValidationProps: (_disabled, props = EMPTY_OBJECT) => props, 10809 inputRef: { 10810 current: null 10811 }, 10812 registeredInputs: /* @__PURE__ */ new Map(), 10813 registerInput: NOOP, 10814 getInputControl: () => null, 10815 commit: async () => { 10816 }, 10817 change: NOOP 10818 } 10819 }; 10820 var FieldRootContext = /* @__PURE__ */ React43.createContext(DEFAULT_FIELD_ROOT_CONTEXT); 10821 if (true) FieldRootContext.displayName = "FieldRootContext"; 10822 function useFieldRootContext(optional = true) { 10823 const context = React43.useContext(FieldRootContext); 10824 if (context.setValidityData === NOOP && !optional) { 10825 throw new Error(true ? "Base UI: FieldRootContext is missing. Field parts must be placed within <Field.Root>." : formatErrorMessage_default(28)); 10826 } 10827 return context; 10828 } 10829 10830 // node_modules/@base-ui/react/internals/field-register-control/useRegisterFieldControl.mjs 10831 function useRegisterFieldControl(controlRef, id, value, getFormValueOverride, enabled = true, name) { 10832 const { 10833 registerFieldControl 10834 } = useFieldRootContext(); 10835 const sourceRef = useRefWithInit(() => /* @__PURE__ */ Symbol()); 10836 useIsoLayoutEffect(() => { 10837 const source = sourceRef.current; 10838 if (!enabled) { 10839 registerFieldControl(source, void 0); 10840 return; 10841 } 10842 const registration = { 10843 controlRef, 10844 getValue: getFormValueOverride, 10845 id, 10846 name, 10847 value 10848 }; 10849 registerFieldControl(source, registration); 10850 }, [controlRef, enabled, getFormValueOverride, id, name, registerFieldControl, sourceRef, value]); 10851 useIsoLayoutEffect(() => { 10852 const source = sourceRef.current; 10853 return () => { 10854 registerFieldControl(source, void 0); 10855 }; 10856 }, [registerFieldControl, sourceRef]); 10857 } 10858 10859 // node_modules/@base-ui/react/internals/form-context/FormContext.mjs 10860 var React44 = __toESM(require_react(), 1); 10861 var FormContext = /* @__PURE__ */ React44.createContext({ 10862 elementRef: { 10863 current: null 10864 }, 10865 formRef: { 10866 current: { 10867 fields: /* @__PURE__ */ new Map() 10868 } 10869 }, 10870 errors: {}, 10871 clearErrors: NOOP, 10872 validationMode: "onSubmit", 10873 submitAttemptedRef: { 10874 current: false 10875 } 10876 }); 10877 if (true) FormContext.displayName = "FormContext"; 10878 function useFormContext() { 10879 return React44.useContext(FormContext); 10880 } 10881 10882 // node_modules/@base-ui/react/internals/labelable-provider/useLabelableId.mjs 10883 var React46 = __toESM(require_react(), 1); 10884 10885 // node_modules/@base-ui/react/internals/labelable-provider/LabelableContext.mjs 10886 var React45 = __toESM(require_react(), 1); 10887 var LabelableContext = /* @__PURE__ */ React45.createContext({ 10888 controlId: void 0, 10889 registerControlId: NOOP, 10890 labelId: void 0, 10891 setLabelId: NOOP, 10892 messageIds: [], 10893 setMessageIds: NOOP, 10894 getDescriptionProps: (externalProps) => externalProps 10895 }); 10896 if (true) LabelableContext.displayName = "LabelableContext"; 10897 function useLabelableContext() { 10898 return React45.useContext(LabelableContext); 10899 } 10900 10901 // node_modules/@base-ui/react/internals/labelable-provider/useLabelableId.mjs 10902 function useLabelableId(params = {}) { 10903 const { 10904 id, 10905 implicit = false, 10906 controlRef 10907 } = params; 10908 const { 10909 controlId, 10910 registerControlId 10911 } = useLabelableContext(); 10912 const defaultId = useBaseUiId(id); 10913 const controlIdForEffect = implicit ? controlId : void 0; 10914 const controlSourceRef = useRefWithInit(() => /* @__PURE__ */ Symbol()); 10915 const hasRegisteredRef = React46.useRef(false); 10916 const hadExplicitIdRef = React46.useRef(id != null); 10917 const unregisterControlId = useStableCallback(() => { 10918 if (!hasRegisteredRef.current || registerControlId === NOOP) { 10919 return; 10920 } 10921 hasRegisteredRef.current = false; 10922 registerControlId(controlSourceRef.current, void 0); 10923 }); 10924 useIsoLayoutEffect(() => { 10925 if (registerControlId === NOOP) { 10926 return void 0; 10927 } 10928 let nextId; 10929 if (implicit) { 10930 const elem = controlRef?.current; 10931 if (isElement(elem) && elem.closest("label") != null) { 10932 nextId = id ?? null; 10933 } else { 10934 nextId = controlIdForEffect ?? defaultId; 10935 } 10936 } else if (id != null) { 10937 hadExplicitIdRef.current = true; 10938 nextId = id; 10939 } else if (hadExplicitIdRef.current) { 10940 nextId = defaultId; 10941 } else { 10942 unregisterControlId(); 10943 return void 0; 10944 } 10945 if (nextId === void 0) { 10946 unregisterControlId(); 10947 return void 0; 10948 } 10949 hasRegisteredRef.current = true; 10950 registerControlId(controlSourceRef.current, nextId); 10951 return void 0; 10952 }, [id, controlRef, controlIdForEffect, registerControlId, implicit, defaultId, controlSourceRef, unregisterControlId]); 10953 React46.useEffect(() => { 10954 return unregisterControlId; 10955 }, [unregisterControlId]); 10956 return controlId ?? defaultId; 10957 } 10958 10959 // node_modules/@base-ui/react/internals/direction-context/DirectionContext.mjs 10960 var React47 = __toESM(require_react(), 1); 10961 var DirectionContext = /* @__PURE__ */ React47.createContext(void 0); 10962 if (true) DirectionContext.displayName = "DirectionContext"; 10963 function useDirection() { 10964 const context = React47.useContext(DirectionContext); 10965 return context?.direction ?? "ltr"; 10966 } 10967 10968 // node_modules/@base-ui/react/utils/getPseudoElementBounds.mjs 10969 var BOUNDARY_OFFSET = 5; 10970 function isMouseWithinBounds(event, element) { 10971 const bounds = getPseudoElementBounds(element); 10972 return event.clientX >= bounds.left - BOUNDARY_OFFSET && event.clientX <= bounds.right + BOUNDARY_OFFSET && event.clientY >= bounds.top - BOUNDARY_OFFSET && event.clientY <= bounds.bottom + BOUNDARY_OFFSET; 10973 } 10974 function getPseudoElementBounds(element) { 10975 const elementRect = element.getBoundingClientRect(); 10976 const win = getWindow(element); 10977 if (parts_exports.env.jsdom) { 10978 return elementRect; 10979 } 10980 const beforeStyles = win.getComputedStyle(element, "::before"); 10981 const afterStyles = win.getComputedStyle(element, "::after"); 10982 const hasPseudoElements = beforeStyles.content !== "none" || afterStyles.content !== "none"; 10983 if (!hasPseudoElements) { 10984 return elementRect; 10985 } 10986 const beforeWidth = parseFloat(beforeStyles.width) || 0; 10987 const beforeHeight = parseFloat(beforeStyles.height) || 0; 10988 const afterWidth = parseFloat(afterStyles.width) || 0; 10989 const afterHeight = parseFloat(afterStyles.height) || 0; 10990 const totalWidth = Math.max(elementRect.width, beforeWidth, afterWidth); 10991 const totalHeight = Math.max(elementRect.height, beforeHeight, afterHeight); 10992 const widthDiff = totalWidth - elementRect.width; 10993 const heightDiff = totalHeight - elementRect.height; 10994 return { 10995 left: elementRect.left - widthDiff / 2, 10996 right: elementRect.right + widthDiff / 2, 10997 top: elementRect.top - heightDiff / 2, 10998 bottom: elementRect.bottom + heightDiff / 2 10999 }; 11000 } 11001 11002 // node_modules/@base-ui/react/internals/useAnchorPositioning.mjs 11003 var React48 = __toESM(require_react(), 1); 11004 11005 // node_modules/@base-ui/react/floating-ui-react/middleware/arrow.mjs 11006 var baseArrow = (options) => ({ 11007 name: "arrow", 11008 options, 11009 async fn(state) { 11010 const { 11011 x: x2, 11012 y: y2, 11013 placement, 11014 rects, 11015 platform: platform3, 11016 elements, 11017 middlewareData 11018 } = state; 11019 const { 11020 element, 11021 padding = 0, 11022 offsetParent = "real" 11023 } = evaluate(options, state) || {}; 11024 if (element == null) { 11025 return {}; 11026 } 11027 const paddingObject = getPaddingObject(padding); 11028 const coords = { 11029 x: x2, 11030 y: y2 11031 }; 11032 const axis = getAlignmentAxis(placement); 11033 const length = getAxisLength(axis); 11034 const arrowDimensions = await platform3.getDimensions(element); 11035 const isYAxis = axis === "y"; 11036 const minProp = isYAxis ? "top" : "left"; 11037 const maxProp = isYAxis ? "bottom" : "right"; 11038 const clientProp = isYAxis ? "clientHeight" : "clientWidth"; 11039 const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length]; 11040 const startDiff = coords[axis] - rects.reference[axis]; 11041 const arrowOffsetParent = offsetParent === "real" ? await platform3.getOffsetParent?.(element) : elements.floating; 11042 let clientSize = elements.floating[clientProp] || rects.floating[length]; 11043 if (!clientSize || !await platform3.isElement?.(arrowOffsetParent)) { 11044 clientSize = elements.floating[clientProp] || rects.floating[length]; 11045 } 11046 const centerToReference = endDiff / 2 - startDiff / 2; 11047 const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1; 11048 const minPadding = Math.min(paddingObject[minProp], largestPossiblePadding); 11049 const maxPadding = Math.min(paddingObject[maxProp], largestPossiblePadding); 11050 const min3 = minPadding; 11051 const max3 = clientSize - arrowDimensions[length] - maxPadding; 11052 const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference; 11053 const offset4 = clamp(min3, center, max3); 11054 const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset4 && rects.reference[length] / 2 - (center < min3 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0; 11055 const alignmentOffset = shouldAddOffset ? center < min3 ? center - min3 : center - max3 : 0; 11056 return { 11057 [axis]: coords[axis] + alignmentOffset, 11058 data: { 11059 [axis]: offset4, 11060 centerOffset: center - offset4 - alignmentOffset, 11061 ...shouldAddOffset && { 11062 alignmentOffset 11063 } 11064 }, 11065 reset: shouldAddOffset 11066 }; 11067 } 11068 }); 11069 var arrow4 = (options, deps) => ({ 11070 ...baseArrow(options), 11071 options: [options, deps] 11072 }); 11073 11074 // node_modules/@base-ui/react/utils/hideMiddleware.mjs 11075 var hide4 = { 11076 name: "hide", 11077 async fn(state) { 11078 const { 11079 width, 11080 height, 11081 x: x2, 11082 y: y2 11083 } = state.rects.reference; 11084 const anchorHidden = width === 0 && height === 0 && x2 === 0 && y2 === 0; 11085 const overflow = await state.platform.detectOverflow(state, { 11086 elementContext: "reference" 11087 }); 11088 const referenceHidden = overflow.top - height >= 0 || overflow.right - width >= 0 || overflow.bottom - height >= 0 || overflow.left - width >= 0; 11089 return { 11090 data: { 11091 referenceHidden: referenceHidden || anchorHidden 11092 } 11093 }; 11094 } 11095 }; 11096 11097 // node_modules/@base-ui/react/utils/adaptiveOriginConstants.mjs 11098 var DEFAULT_SIDES = { 11099 sideX: "left", 11100 sideY: "top" 11101 }; 11102 11103 // node_modules/@base-ui/react/internals/useAnchorPositioning.mjs 11104 var AVAILABLE_WIDTH_VAR = "--available-width"; 11105 var AVAILABLE_HEIGHT_VAR = "--available-height"; 11106 function getLogicalSide(sideParam, renderedSide, isRtl) { 11107 const isLogicalSideParam = sideParam === "inline-start" || sideParam === "inline-end"; 11108 const logicalRight = isRtl ? "inline-start" : "inline-end"; 11109 const logicalLeft = isRtl ? "inline-end" : "inline-start"; 11110 return { 11111 top: "top", 11112 right: isLogicalSideParam ? logicalRight : "right", 11113 bottom: "bottom", 11114 left: isLogicalSideParam ? logicalLeft : "left" 11115 }[renderedSide]; 11116 } 11117 function getOffsetData(state, sideParam, isRtl) { 11118 const { 11119 rects, 11120 placement 11121 } = state; 11122 const data = { 11123 side: getLogicalSide(sideParam, getSide(placement), isRtl), 11124 align: getAlignment(placement) || "center", 11125 anchor: { 11126 width: rects.reference.width, 11127 height: rects.reference.height 11128 }, 11129 positioner: { 11130 width: rects.floating.width, 11131 height: rects.floating.height 11132 } 11133 }; 11134 return data; 11135 } 11136 function useAnchorPositioning(params) { 11137 return useAnchorPositioningWithHook(params, useBaseUIFloating); 11138 } 11139 function useAnchorPositioningWithHook(params, useFloatingHook) { 11140 const { 11141 // Public parameters 11142 anchor, 11143 positionMethod = "absolute", 11144 side: sideParam = "bottom", 11145 sideOffset = 0, 11146 align = "center", 11147 alignOffset = 0, 11148 collisionBoundary, 11149 collisionPadding: collisionPaddingParam = 5, 11150 sticky = false, 11151 arrowPadding = 5, 11152 disableAnchorTracking = false, 11153 inline: inlineMiddleware, 11154 // Private parameters 11155 keepMounted = false, 11156 floatingRootContext, 11157 mounted, 11158 collisionAvoidance, 11159 shift: shift4, 11160 nodeId, 11161 adaptiveOrigin: adaptiveOrigin2, 11162 lazyFlip = false, 11163 externalTree 11164 } = params; 11165 const [mountSide, setMountSide] = React48.useState(null); 11166 if (!mounted && mountSide !== null) { 11167 setMountSide(null); 11168 } 11169 const collisionAvoidanceSide = collisionAvoidance.side || "flip"; 11170 const collisionAvoidanceAlign = collisionAvoidance.align || "flip"; 11171 const collisionAvoidanceFallbackAxisSide = collisionAvoidance.fallbackAxisSide || "end"; 11172 const shiftCrossAxis = shift4?.crossAxis ?? false; 11173 const shiftRootBoundary = shift4?.rootBoundary; 11174 const anchorFn = typeof anchor === "function" ? anchor : void 0; 11175 const anchorFnCallback = useStableCallback(anchorFn); 11176 const anchorDep = anchorFn ? anchorFnCallback : anchor; 11177 const anchorValueRef = useValueAsRef(anchor); 11178 const mountedRef = useValueAsRef(mounted); 11179 const direction = useDirection(); 11180 const isRtl = direction === "rtl"; 11181 const side = mountSide || { 11182 top: "top", 11183 right: "right", 11184 bottom: "bottom", 11185 left: "left", 11186 "inline-end": isRtl ? "left" : "right", 11187 "inline-start": isRtl ? "right" : "left" 11188 }[sideParam]; 11189 const placement = align === "center" ? side : `$side}-$align}`; 11190 let collisionPadding = collisionPaddingParam; 11191 if (typeof collisionPadding === "number") { 11192 collisionPadding = { 11193 top: collisionPadding, 11194 right: collisionPadding, 11195 bottom: collisionPadding, 11196 left: collisionPadding 11197 }; 11198 } else if (collisionPadding) { 11199 collisionPadding = { 11200 top: collisionPadding.top || 0, 11201 right: collisionPadding.right || 0, 11202 bottom: collisionPadding.bottom || 0, 11203 left: collisionPadding.left || 0 11204 }; 11205 } 11206 const bias = 1; 11207 const biasTop = sideParam === "bottom" ? bias : 0; 11208 const biasBottom = sideParam === "top" ? bias : 0; 11209 const biasLeft = sideParam === "right" ? bias : 0; 11210 const biasRight = sideParam === "left" ? bias : 0; 11211 const commonCollisionProps = { 11212 boundary: collisionBoundary === "clipping-ancestors" ? "clippingAncestors" : collisionBoundary, 11213 padding: collisionPadding 11214 }; 11215 const arrowRef = React48.useRef(null); 11216 const sideOffsetRef = useValueAsRef(sideOffset); 11217 const alignOffsetRef = useValueAsRef(alignOffset); 11218 const sideOffsetDep = typeof sideOffset !== "function" ? sideOffset : 0; 11219 const alignOffsetDep = typeof alignOffset !== "function" ? alignOffset : 0; 11220 const middleware = []; 11221 if (inlineMiddleware) { 11222 middleware.push(inlineMiddleware); 11223 } 11224 middleware.push(offset3((state) => { 11225 const data = getOffsetData(state, sideParam, isRtl); 11226 const sideAxis = typeof sideOffsetRef.current === "function" ? sideOffsetRef.current(data) : sideOffsetRef.current; 11227 const alignAxis = typeof alignOffsetRef.current === "function" ? alignOffsetRef.current(data) : alignOffsetRef.current; 11228 return { 11229 mainAxis: sideAxis, 11230 crossAxis: alignAxis, 11231 alignmentAxis: alignAxis 11232 }; 11233 }, [sideOffsetDep, alignOffsetDep, isRtl, sideParam])); 11234 const shiftDisabled = collisionAvoidanceAlign === "none" && collisionAvoidanceSide !== "shift"; 11235 const crossAxisShiftEnabled = !shiftDisabled && (sticky || shiftCrossAxis || collisionAvoidanceSide === "shift"); 11236 const flipMiddleware = collisionAvoidanceSide === "none" ? null : flip3({ 11237 ...commonCollisionProps, 11238 // Ensure the popup flips if it's been limited by its --available-height and it resizes. 11239 // Since the size() padding is smaller than the flip() padding, flip() will take precedence. 11240 padding: { 11241 top: collisionPadding.top + bias + biasTop, 11242 right: collisionPadding.right + bias + biasRight, 11243 bottom: collisionPadding.bottom + bias + biasBottom, 11244 left: collisionPadding.left + bias + biasLeft 11245 }, 11246 mainAxis: !shiftCrossAxis && collisionAvoidanceSide === "flip", 11247 crossAxis: collisionAvoidanceAlign === "flip" ? "alignment" : false, 11248 fallbackAxisSideDirection: collisionAvoidanceFallbackAxisSide 11249 }); 11250 const shiftMiddleware = shiftDisabled ? null : shift3({ 11251 ...commonCollisionProps, 11252 // Use the Layout Viewport to avoid shifting around when pinch-zooming. 11253 rootBoundary: shiftRootBoundary, 11254 mainAxis: collisionAvoidanceAlign !== "none", 11255 crossAxis: crossAxisShiftEnabled, 11256 limiter: sticky || shiftCrossAxis ? void 0 : limitShift3((limitData) => { 11257 if (!arrowRef.current) { 11258 return {}; 11259 } 11260 const { 11261 width, 11262 height 11263 } = arrowRef.current.getBoundingClientRect(); 11264 const sideAxis = getSideAxis(getSide(limitData.placement)); 11265 const arrowSize = sideAxis === "y" ? width : height; 11266 const offsetAmount = sideAxis === "y" ? collisionPadding.left + collisionPadding.right : collisionPadding.top + collisionPadding.bottom; 11267 return { 11268 offset: arrowSize / 2 + offsetAmount / 2 11269 }; 11270 }) 11271 }, [commonCollisionProps, sticky, shiftCrossAxis, shiftRootBoundary, collisionPadding, collisionAvoidanceAlign]); 11272 if (collisionAvoidanceSide === "shift" || collisionAvoidanceAlign === "shift" || align === "center") { 11273 middleware.push(shiftMiddleware, flipMiddleware); 11274 } else { 11275 middleware.push(flipMiddleware, shiftMiddleware); 11276 } 11277 middleware.push(size3({ 11278 ...commonCollisionProps, 11279 apply({ 11280 elements: { 11281 floating 11282 }, 11283 availableWidth, 11284 availableHeight, 11285 rects 11286 }) { 11287 if (!mountedRef.current) { 11288 return; 11289 } 11290 const floatingStyle = floating.style; 11291 floatingStyle.setProperty(AVAILABLE_WIDTH_VAR, `$availableWidth}px`); 11292 floatingStyle.setProperty(AVAILABLE_HEIGHT_VAR, `$availableHeight}px`); 11293 const dpr = getWindow(floating).devicePixelRatio || 1; 11294 const { 11295 x: x3, 11296 y: y3, 11297 width, 11298 height 11299 } = rects.reference; 11300 const anchorWidth = (Math.round((x3 + width) * dpr) - Math.round(x3 * dpr)) / dpr; 11301 const anchorHeight = (Math.round((y3 + height) * dpr) - Math.round(y3 * dpr)) / dpr; 11302 floatingStyle.setProperty("--anchor-width", `$anchorWidth}px`); 11303 floatingStyle.setProperty("--anchor-height", `$anchorHeight}px`); 11304 } 11305 }), arrow4((state) => ({ 11306 // `transform-origin` calculations rely on an element existing. If the arrow hasn't been set, 11307 // we'll create a fake element. 11308 element: arrowRef.current || ownerDocument(state.elements.floating).createElement("div"), 11309 padding: arrowPadding, 11310 offsetParent: "floating" 11311 }), [arrowPadding]), { 11312 name: "transformOrigin", 11313 fn(state) { 11314 const { 11315 elements: elements2, 11316 middlewareData: middlewareData2, 11317 placement: renderedPlacement2, 11318 rects, 11319 y: y3 11320 } = state; 11321 const currentRenderedSide = getSide(renderedPlacement2); 11322 const currentRenderedAxis = getSideAxis(currentRenderedSide); 11323 const arrowEl = arrowRef.current; 11324 const arrowX = middlewareData2.arrow?.x || 0; 11325 const arrowY = middlewareData2.arrow?.y || 0; 11326 const arrowWidth = arrowEl?.clientWidth || 0; 11327 const arrowHeight = arrowEl?.clientHeight || 0; 11328 const transformX = arrowX + arrowWidth / 2; 11329 const transformY = arrowY + arrowHeight / 2; 11330 const shiftY = Math.abs(middlewareData2.shift?.y || 0); 11331 const halfAnchorHeight = rects.reference.height / 2; 11332 const sideOffsetValue = typeof sideOffset === "function" ? sideOffset(getOffsetData(state, sideParam, isRtl)) : sideOffset; 11333 const isOverlappingAnchor = shiftY > sideOffsetValue; 11334 const adjacentTransformOrigin = { 11335 top: `$transformX}px calc(100% + $sideOffsetValue}px)`, 11336 bottom: `$transformX}px ${-sideOffsetValue}px`, 11337 left: `calc(100% + $sideOffsetValue}px) $transformY}px`, 11338 right: `${-sideOffsetValue}px $transformY}px` 11339 }[currentRenderedSide]; 11340 const overlapTransformOrigin = `$transformX}px $rects.reference.y + halfAnchorHeight - y3}px`; 11341 elements2.floating.style.setProperty("--transform-origin", crossAxisShiftEnabled && currentRenderedAxis === "y" && isOverlappingAnchor ? overlapTransformOrigin : adjacentTransformOrigin); 11342 return {}; 11343 } 11344 }, hide4, adaptiveOrigin2); 11345 useIsoLayoutEffect(() => { 11346 if (!mounted && floatingRootContext) { 11347 floatingRootContext.update({ 11348 referenceElement: null, 11349 floatingElement: null, 11350 domReferenceElement: null, 11351 positionReference: null 11352 }); 11353 } 11354 }, [mounted, floatingRootContext]); 11355 const autoUpdateOptions = React48.useMemo(() => ({ 11356 elementResize: !disableAnchorTracking && typeof ResizeObserver !== "undefined", 11357 layoutShift: !disableAnchorTracking && typeof IntersectionObserver !== "undefined" 11358 }), [disableAnchorTracking]); 11359 const { 11360 refs, 11361 elements, 11362 x: x2, 11363 y: y2, 11364 middlewareData, 11365 update: update2, 11366 placement: renderedPlacement, 11367 context, 11368 isPositioned, 11369 floatingStyles: originalFloatingStyles 11370 } = useFloatingHook({ 11371 rootContext: floatingRootContext, 11372 open: keepMounted ? mounted : void 0, 11373 placement, 11374 middleware, 11375 strategy: positionMethod, 11376 whileElementsMounted: keepMounted ? void 0 : (...args) => autoUpdate(...args, autoUpdateOptions), 11377 nodeId, 11378 externalTree 11379 }); 11380 const { 11381 sideX, 11382 sideY 11383 } = middlewareData.adaptiveOrigin || DEFAULT_SIDES; 11384 const resolvedPosition = isPositioned ? positionMethod : "fixed"; 11385 const floatingStyles = React48.useMemo(() => { 11386 let base; 11387 if (!isPositioned) { 11388 base = { 11389 position: resolvedPosition, 11390 top: 0, 11391 left: 0 11392 }; 11393 } else if (adaptiveOrigin2) { 11394 base = { 11395 position: resolvedPosition, 11396 [sideX]: x2, 11397 [sideY]: y2 11398 }; 11399 } else { 11400 base = { 11401 ...originalFloatingStyles, 11402 position: resolvedPosition 11403 }; 11404 } 11405 base[AVAILABLE_WIDTH_VAR] = "100vw"; 11406 base[AVAILABLE_HEIGHT_VAR] = "100vh"; 11407 if (!isPositioned) { 11408 base.opacity = 0; 11409 } 11410 return base; 11411 }, [adaptiveOrigin2, resolvedPosition, sideX, x2, sideY, y2, originalFloatingStyles, isPositioned]); 11412 const registeredPositionReferenceRef = React48.useRef(null); 11413 useIsoLayoutEffect(() => { 11414 if (!mounted) { 11415 return; 11416 } 11417 const anchorValue = anchorValueRef.current; 11418 const resolvedAnchor = typeof anchorValue === "function" ? anchorValue() : anchorValue; 11419 const unwrappedElement = (isRef(resolvedAnchor) ? resolvedAnchor.current : resolvedAnchor) || null; 11420 const finalAnchor = unwrappedElement || null; 11421 if (finalAnchor !== registeredPositionReferenceRef.current) { 11422 refs.setPositionReference(finalAnchor); 11423 registeredPositionReferenceRef.current = finalAnchor; 11424 } 11425 }, [mounted, refs, anchorDep, anchorValueRef]); 11426 React48.useEffect(() => { 11427 if (!mounted) { 11428 return; 11429 } 11430 const anchorValue = anchorValueRef.current; 11431 if (typeof anchorValue === "function") { 11432 return; 11433 } 11434 if (isRef(anchorValue) && anchorValue.current !== registeredPositionReferenceRef.current) { 11435 refs.setPositionReference(anchorValue.current); 11436 registeredPositionReferenceRef.current = anchorValue.current; 11437 } 11438 }, [mounted, refs, anchorDep, anchorValueRef]); 11439 React48.useEffect(() => { 11440 if (keepMounted && mounted && elements.reference && elements.floating) { 11441 return autoUpdate(elements.reference, elements.floating, update2, autoUpdateOptions); 11442 } 11443 return void 0; 11444 }, [keepMounted, mounted, elements, update2, autoUpdateOptions]); 11445 const renderedSide = getSide(renderedPlacement); 11446 const logicalRenderedSide = getLogicalSide(sideParam, renderedSide, isRtl); 11447 const renderedAlign = getAlignment(renderedPlacement) || "center"; 11448 const anchorHidden = Boolean(middlewareData.hide?.referenceHidden); 11449 useIsoLayoutEffect(() => { 11450 if (lazyFlip && mounted && isPositioned && renderedSide !== side) { 11451 setMountSide(renderedSide); 11452 } 11453 }, [lazyFlip, mounted, isPositioned, renderedSide, side]); 11454 const arrowStyles = React48.useMemo(() => ({ 11455 position: "absolute", 11456 top: middlewareData.arrow?.y, 11457 left: middlewareData.arrow?.x 11458 }), [middlewareData.arrow]); 11459 const arrowUncentered = middlewareData.arrow?.centerOffset !== 0; 11460 return React48.useMemo(() => ({ 11461 positionerStyles: floatingStyles, 11462 arrowStyles, 11463 arrowRef, 11464 arrowUncentered, 11465 side: logicalRenderedSide, 11466 align: renderedAlign, 11467 physicalSide: renderedSide, 11468 anchorHidden, 11469 refs, 11470 context, 11471 isPositioned, 11472 update: update2 11473 }), [floatingStyles, arrowStyles, arrowRef, arrowUncentered, logicalRenderedSide, renderedAlign, renderedSide, anchorHidden, refs, context, isPositioned, update2]); 11474 } 11475 function isRef(param) { 11476 return param != null && "current" in param; 11477 } 11478 11479 // node_modules/@base-ui/react/internals/getDisabledMountTransitionStyles.mjs 11480 function getDisabledMountTransitionStyles(transitionStatus) { 11481 return transitionStatus === "starting" ? DISABLED_TRANSITIONS_STYLE : EMPTY_OBJECT; 11482 } 11483 11484 // node_modules/@base-ui/react/utils/usePositioner.mjs 11485 function usePositioner(componentProps, state, { 11486 styles, 11487 transitionStatus, 11488 props, 11489 refs, 11490 hidden, 11491 inert = false 11492 }) { 11493 const style = { 11494 ...styles 11495 }; 11496 if (inert) { 11497 style.pointerEvents = "none"; 11498 } 11499 return useRenderElement("div", componentProps, { 11500 state, 11501 ref: refs, 11502 props: [{ 11503 role: "presentation", 11504 hidden, 11505 style 11506 }, getDisabledMountTransitionStyles(transitionStatus), props], 11507 stateAttributesMapping: popupStateMapping 11508 }); 11509 } 11510 11511 // node_modules/@base-ui/react/utils/useAnchoredPopupScrollLock.mjs 11512 var React49 = __toESM(require_react(), 1); 11513 var VIEWPORT_WIDTH_TOLERANCE_PX = 20; 11514 function useAnchoredPopupScrollLock(enabled, touchOpen, positionerElement, referenceElement) { 11515 const [touchOpenShouldLockScroll, setTouchOpenShouldLockScroll] = React49.useState(false); 11516 useIsoLayoutEffect(() => { 11517 if (!enabled || !touchOpen || positionerElement == null) { 11518 setTouchOpenShouldLockScroll(false); 11519 return; 11520 } 11521 const viewportWidth = ownerDocument(positionerElement).documentElement.clientWidth; 11522 const popupWidth = positionerElement.offsetWidth; 11523 setTouchOpenShouldLockScroll(viewportWidth > 0 && popupWidth > 0 && popupWidth >= viewportWidth - VIEWPORT_WIDTH_TOLERANCE_PX); 11524 }, [enabled, touchOpen, positionerElement]); 11525 useScrollLock(enabled && (!touchOpen || touchOpenShouldLockScroll), referenceElement); 11526 } 11527 11528 // node_modules/@base-ui/react/button/Button.mjs 11529 var React50 = __toESM(require_react(), 1); 11530 var Button = /* @__PURE__ */ React50.forwardRef(function Button2(componentProps, forwardedRef) { 11531 const { 11532 render: render4, 11533 className, 11534 disabled: disabled2 = false, 11535 focusableWhenDisabled = false, 11536 nativeButton = true, 11537 style, 11538 ...elementProps 11539 } = componentProps; 11540 const { 11541 getButtonProps, 11542 buttonRef 11543 } = useButton({ 11544 disabled: disabled2, 11545 focusableWhenDisabled, 11546 native: nativeButton 11547 }); 11548 const state = { 11549 disabled: disabled2 11550 }; 11551 return useRenderElement("button", componentProps, { 11552 state, 11553 ref: [forwardedRef, buttonRef], 11554 props: [elementProps, getButtonProps] 11555 }); 11556 }); 11557 if (true) Button.displayName = "Button"; 11558 11559 // node_modules/@base-ui/react/field/item/FieldItemContext.mjs 11560 var React51 = __toESM(require_react(), 1); 11561 var FieldItemContext = /* @__PURE__ */ React51.createContext({ 11562 disabled: false 11563 }); 11564 if (true) FieldItemContext.displayName = "FieldItemContext"; 11565 function useFieldItemContext() { 11566 const context = React51.useContext(FieldItemContext); 11567 return context; 11568 } 11569 11570 // node_modules/@base-ui/react/field/root/useFieldValidation.mjs 11571 var React52 = __toESM(require_react(), 1); 11572 11573 // node_modules/@base-ui/react/field/utils/getCombinedFieldValidityData.mjs 11574 function getCombinedFieldValidityData(validityData, invalid) { 11575 return { 11576 ...validityData, 11577 state: { 11578 ...validityData.state, 11579 valid: !invalid && validityData.state.valid 11580 } 11581 }; 11582 } 11583 11584 // node_modules/@base-ui/react/field/root/useFieldValidation.mjs 11585 var validityKeys = Object.keys(DEFAULT_VALIDITY_STATE); 11586 function isEligibleInput(input, formElement) { 11587 if (input.matches(":disabled")) { 11588 return false; 11589 } 11590 if (!formElement || input.form === formElement) { 11591 return true; 11592 } 11593 return input.form === null && !input.hasAttribute("form"); 11594 } 11595 function findRepresentativeInput(inputs, formElement) { 11596 let fallback = null; 11597 for (const input of inputs.keys()) { 11598 if (!isEligibleInput(input, formElement)) { 11599 continue; 11600 } 11601 if (!input.validity.valid) { 11602 return input; 11603 } 11604 fallback ??= input; 11605 } 11606 return fallback; 11607 } 11608 function clearCustomValidity(element, inputs) { 11609 for (const input of inputs.keys()) { 11610 input.setCustomValidity(""); 11611 } 11612 element?.setCustomValidity(""); 11613 } 11614 function useFieldValidation(params) { 11615 const { 11616 elementRef, 11617 formRef 11618 } = useFormContext(); 11619 const { 11620 setValidityData, 11621 validate, 11622 validityData, 11623 validationDebounceTime, 11624 invalid, 11625 markedDirtyRef, 11626 state, 11627 shouldValidateOnChange, 11628 registeredFieldIdRef 11629 } = params; 11630 const { 11631 controlId, 11632 getDescriptionProps 11633 } = useLabelableContext(); 11634 const timeout = useTimeout(); 11635 const inputRef = React52.useRef(null); 11636 const registeredInputs = useRefWithInit(() => /* @__PURE__ */ new Map()).current; 11637 const validationCommitIdRef = React52.useRef(0); 11638 const registerInput = React52.useCallback((element, registration) => { 11639 registeredInputs.set(element, registration); 11640 return () => { 11641 registeredInputs.delete(element); 11642 }; 11643 }, [registeredInputs]); 11644 const getInputControl = useStableCallback(() => { 11645 const element = findRepresentativeInput(registeredInputs, elementRef.current); 11646 return element && registeredInputs.get(element)?.controlRef.current || null; 11647 }); 11648 const commit = useStableCallback(async (value, revalidate = false) => { 11649 validationCommitIdRef.current += 1; 11650 const validationCommitId = validationCommitIdRef.current; 11651 function updateRegisteredFieldValidity(nextValidityData2, externalInvalid = invalid) { 11652 const fieldId = registeredFieldIdRef.current ?? controlId; 11653 if (fieldId == null) { 11654 return; 11655 } 11656 const currentFieldData = formRef.current.fields.get(fieldId); 11657 if (!currentFieldData) { 11658 return; 11659 } 11660 const validityDataWithFormErrors = getCombinedFieldValidityData(nextValidityData2, externalInvalid); 11661 formRef.current.fields.set(fieldId, { 11662 ...currentFieldData, 11663 validityData: validityDataWithFormErrors 11664 }); 11665 } 11666 function publishAllValid(input, externalInvalid) { 11667 const nextValidityData2 = { 11668 value, 11669 state: { 11670 ...DEFAULT_VALIDITY_STATE, 11671 valid: true 11672 }, 11673 error: "", 11674 errors: [], 11675 initialValue: validityData.initialValue 11676 }; 11677 clearCustomValidity(input, registeredInputs); 11678 updateRegisteredFieldValidity(nextValidityData2, externalInvalid); 11679 setValidityData(nextValidityData2); 11680 } 11681 const element = registeredInputs.size > 0 ? findRepresentativeInput(registeredInputs, elementRef.current) : inputRef.current; 11682 if (revalidate) { 11683 if (state.valid !== false || !element) { 11684 return; 11685 } 11686 const currentNativeValidity = element.validity; 11687 if (!currentNativeValidity.valueMissing) { 11688 publishAllValid(element, false); 11689 return; 11690 } 11691 for (const key of validityKeys) { 11692 if (key !== "valid" && key !== "valueMissing" && key !== "customError" && currentNativeValidity[key]) { 11693 return; 11694 } 11695 } 11696 } 11697 function getState(el) { 11698 const computedState = validityKeys.reduce((acc, key) => { 11699 acc[key] = el.validity[key]; 11700 return acc; 11701 }, {}); 11702 let hasOnlyValueMissingError = false; 11703 for (const key of validityKeys) { 11704 if (key === "valid") { 11705 continue; 11706 } 11707 if (key === "valueMissing" && computedState[key]) { 11708 hasOnlyValueMissingError = true; 11709 } else if (computedState[key]) { 11710 return computedState; 11711 } 11712 } 11713 if (hasOnlyValueMissingError && !markedDirtyRef.current) { 11714 computedState.valid = true; 11715 computedState.valueMissing = false; 11716 } 11717 return computedState; 11718 } 11719 timeout.clear(); 11720 let result = null; 11721 let validationErrors = []; 11722 const nextState = element ? getState(element) : { 11723 ...DEFAULT_VALIDITY_STATE, 11724 valid: true 11725 }; 11726 let defaultValidationMessage; 11727 const isValidatingOnChange = shouldValidateOnChange(); 11728 if (element && element.validationMessage && !isValidatingOnChange) { 11729 defaultValidationMessage = element.validationMessage; 11730 validationErrors = [element.validationMessage]; 11731 } else { 11732 const formValues = Array.from(formRef.current.fields.values()).reduce((acc, field) => { 11733 if (field.name) { 11734 acc[field.name] = field.getValue(); 11735 } 11736 return acc; 11737 }, {}); 11738 const resultOrPromise = validate(value, formValues); 11739 if (typeof resultOrPromise === "object" && resultOrPromise !== null && "then" in resultOrPromise) { 11740 result = await resultOrPromise; 11741 if (validationCommitId !== validationCommitIdRef.current) { 11742 return; 11743 } 11744 } else { 11745 result = resultOrPromise; 11746 } 11747 if (result !== null) { 11748 nextState.valid = false; 11749 nextState.customError = true; 11750 if (Array.isArray(result)) { 11751 validationErrors = result; 11752 element?.setCustomValidity(result.join("\n")); 11753 } else if (result) { 11754 validationErrors = [result]; 11755 element?.setCustomValidity(result); 11756 } 11757 } else if (isValidatingOnChange) { 11758 clearCustomValidity(element, registeredInputs); 11759 nextState.customError = false; 11760 if (element && element.validationMessage) { 11761 defaultValidationMessage = element.validationMessage; 11762 validationErrors = [element.validationMessage]; 11763 } else if ((!element || element.validity.valid) && !nextState.valid) { 11764 nextState.valid = true; 11765 } 11766 } 11767 } 11768 const nextValidityData = { 11769 value, 11770 state: nextState, 11771 error: defaultValidationMessage ?? (Array.isArray(result) ? result[0] : result ?? ""), 11772 errors: validationErrors, 11773 initialValue: validityData.initialValue 11774 }; 11775 updateRegisteredFieldValidity(nextValidityData); 11776 setValidityData(nextValidityData); 11777 }); 11778 const change = useStableCallback((value) => { 11779 timeout.clear(); 11780 const validateOnChange = shouldValidateOnChange(); 11781 if (validateOnChange && value !== "" && validationDebounceTime) { 11782 validationCommitIdRef.current += 1; 11783 timeout.start(validationDebounceTime, () => { 11784 commit(value); 11785 }); 11786 } else { 11787 commit(value, !validateOnChange); 11788 } 11789 }); 11790 const getValidationProps = React52.useCallback((disabled2, externalProps = {}) => mergeProps(getDescriptionProps(externalProps), state.valid === false && !state.disabled && !disabled2 ? { 11791 "aria-invalid": true 11792 } : EMPTY_OBJECT), [getDescriptionProps, state.disabled, state.valid]); 11793 return React52.useMemo(() => ({ 11794 getValidationProps, 11795 inputRef, 11796 registeredInputs, 11797 registerInput, 11798 getInputControl, 11799 commit, 11800 change 11801 }), [getValidationProps, registeredInputs, registerInput, getInputControl, commit, change]); 11802 } 11803 11804 // node_modules/@base-ui/react/utils/useRegisteredLabelId.mjs 11805 function useRegisteredLabelId(idProp, setLabelId) { 11806 const id = useBaseUiId(idProp); 11807 useIsoLayoutEffect(() => { 11808 setLabelId(id); 11809 return () => { 11810 setLabelId((currentId) => currentId === id ? void 0 : currentId); 11811 }; 11812 }, [id, setLabelId]); 11813 return id; 11814 } 11815 11816 // node_modules/@base-ui/react/internals/labelable-provider/useLabel.mjs 11817 function useLabel(params = {}) { 11818 const { 11819 id: idProp, 11820 fallbackControlId, 11821 native = false, 11822 setLabelId: setLabelIdProp, 11823 focusControl: focusControlProp 11824 } = params; 11825 const { 11826 controlId: contextControlId, 11827 setLabelId: setContextLabelId 11828 } = useLabelableContext(); 11829 const syncLabelId = useStableCallback((nextLabelId) => { 11830 setContextLabelId(nextLabelId); 11831 setLabelIdProp?.(nextLabelId); 11832 }); 11833 const id = useRegisteredLabelId(idProp, syncLabelId); 11834 const resolvedControlId = contextControlId ?? fallbackControlId; 11835 function focusControl(event) { 11836 if (focusControlProp) { 11837 focusControlProp(event, resolvedControlId); 11838 return; 11839 } 11840 if (!resolvedControlId) { 11841 return; 11842 } 11843 const controlElement = ownerDocument(event.currentTarget).getElementById(resolvedControlId); 11844 if (isHTMLElement(controlElement)) { 11845 focusElementWithVisible(controlElement); 11846 } 11847 } 11848 function handleInteraction(event) { 11849 const target = getTarget(event.nativeEvent); 11850 if (target?.closest("button,input,select,textarea")) { 11851 return; 11852 } 11853 if (!event.defaultPrevented && event.detail > 1) { 11854 event.preventDefault(); 11855 } 11856 if (native) { 11857 return; 11858 } 11859 focusControl(event); 11860 } 11861 return native ? { 11862 id, 11863 htmlFor: resolvedControlId ?? void 0, 11864 onMouseDown: handleInteraction 11865 } : { 11866 id, 11867 onClick: handleInteraction, 11868 onPointerDown(event) { 11869 event.preventDefault(); 11870 } 11871 }; 11872 } 11873 function focusElementWithVisible(element) { 11874 element.focus({ 11875 // Available from Chrome 144+ (January 2026). 11876 // Safari and Firefox already support it. 11877 focusVisible: true 11878 }); 11879 } 11880 11881 // node_modules/@base-ui/react/context-menu/root/ContextMenuRootContext.mjs 11882 var React53 = __toESM(require_react(), 1); 11883 var ContextMenuRootContext = /* @__PURE__ */ React53.createContext(void 0); 11884 if (true) ContextMenuRootContext.displayName = "ContextMenuRootContext"; 11885 function useContextMenuRootContext(optional = true) { 11886 const context = React53.useContext(ContextMenuRootContext); 11887 if (context === void 0 && !optional) { 11888 throw new Error(true ? "Base UI: ContextMenuRootContext is missing. ContextMenu parts must be placed within <ContextMenu.Root>." : formatErrorMessage_default(25)); 11889 } 11890 return context; 11891 } 11892 11893 // node_modules/@base-ui/react/menu/index.parts.mjs 11894 var index_parts_exports = {}; 11895 __export(index_parts_exports, { 11896 Arrow: () => MenuArrow, 11897 Backdrop: () => MenuBackdrop, 11898 CheckboxItem: () => MenuCheckboxItem, 11899 CheckboxItemIndicator: () => MenuCheckboxItemIndicator, 11900 Group: () => MenuGroup, 11901 GroupLabel: () => MenuGroupLabel, 11902 Handle: () => MenuHandle, 11903 Item: () => MenuItem, 11904 LinkItem: () => MenuLinkItem, 11905 Popup: () => MenuPopup, 11906 Portal: () => MenuPortal, 11907 Positioner: () => MenuPositioner, 11908 RadioGroup: () => MenuRadioGroup, 11909 RadioItem: () => MenuRadioItem, 11910 RadioItemIndicator: () => MenuRadioItemIndicator, 11911 Root: () => MenuRoot, 11912 Separator: () => Separator, 11913 SubmenuRoot: () => MenuSubmenuRoot, 11914 SubmenuTrigger: () => MenuSubmenuTrigger, 11915 Trigger: () => MenuTrigger, 11916 Viewport: () => MenuViewport, 11917 createHandle: () => createMenuHandle 11918 }); 11919 11920 // node_modules/@base-ui/react/menu/arrow/MenuArrow.mjs 11921 var React56 = __toESM(require_react(), 1); 11922 11923 // node_modules/@base-ui/react/menu/positioner/MenuPositionerContext.mjs 11924 var React54 = __toESM(require_react(), 1); 11925 var MenuPositionerContext = /* @__PURE__ */ React54.createContext(void 0); 11926 if (true) MenuPositionerContext.displayName = "MenuPositionerContext"; 11927 function useMenuPositionerContext(optional) { 11928 const context = React54.useContext(MenuPositionerContext); 11929 if (context === void 0 && !optional) { 11930 throw new Error(true ? "Base UI: MenuPositionerContext is missing. MenuPositioner parts must be placed within <Menu.Positioner>." : formatErrorMessage_default(33)); 11931 } 11932 return context; 11933 } 11934 11935 // node_modules/@base-ui/react/menu/root/MenuRootContext.mjs 11936 var React55 = __toESM(require_react(), 1); 11937 var MenuRootContext = /* @__PURE__ */ React55.createContext(void 0); 11938 if (true) MenuRootContext.displayName = "MenuRootContext"; 11939 function useMenuRootContext(optional) { 11940 const context = React55.useContext(MenuRootContext); 11941 if (context === void 0 && !optional) { 11942 throw new Error(true ? "Base UI: MenuRootContext is missing. Menu parts must be placed within <Menu.Root>." : formatErrorMessage_default(36)); 11943 } 11944 return context; 11945 } 11946 11947 // node_modules/@base-ui/react/menu/arrow/MenuArrow.mjs 11948 var MenuArrow = /* @__PURE__ */ React56.forwardRef(function MenuArrow2(componentProps, forwardedRef) { 11949 const { 11950 render: render4, 11951 className, 11952 style, 11953 ...elementProps 11954 } = componentProps; 11955 const { 11956 store 11957 } = useMenuRootContext(); 11958 const { 11959 arrowRef, 11960 side, 11961 align, 11962 arrowUncentered, 11963 arrowStyles 11964 } = useMenuPositionerContext(); 11965 const open = store.useState("open"); 11966 const state = { 11967 open, 11968 side, 11969 align, 11970 uncentered: arrowUncentered 11971 }; 11972 return useRenderElement("div", componentProps, { 11973 ref: [arrowRef, forwardedRef], 11974 stateAttributesMapping: popupStateMapping, 11975 state, 11976 props: { 11977 style: arrowStyles, 11978 "aria-hidden": true, 11979 ...elementProps 11980 } 11981 }); 11982 }); 11983 if (true) MenuArrow.displayName = "MenuArrow"; 11984 11985 // node_modules/@base-ui/react/menu/backdrop/MenuBackdrop.mjs 11986 var React57 = __toESM(require_react(), 1); 11987 var MenuBackdrop = /* @__PURE__ */ React57.forwardRef(function MenuBackdrop2(componentProps, forwardedRef) { 11988 const { 11989 render: render4, 11990 className, 11991 style, 11992 ...elementProps 11993 } = componentProps; 11994 const { 11995 store 11996 } = useMenuRootContext(); 11997 const open = store.useState("open"); 11998 const mounted = store.useState("mounted"); 11999 const transitionStatus = store.useState("transitionStatus"); 12000 const lastOpenChangeReason = store.useState("lastOpenChangeReason"); 12001 const contextMenuContext = useContextMenuRootContext(); 12002 const state = { 12003 open, 12004 transitionStatus 12005 }; 12006 return useRenderElement("div", componentProps, { 12007 ref: contextMenuContext?.backdropRef ? [forwardedRef, contextMenuContext.backdropRef] : forwardedRef, 12008 state, 12009 stateAttributesMapping: popupTransitionStateMapping, 12010 props: [{ 12011 role: "presentation", 12012 hidden: !mounted, 12013 style: { 12014 pointerEvents: lastOpenChangeReason === reason_parts_exports.triggerHover ? "none" : void 0, 12015 userSelect: "none", 12016 WebkitUserSelect: "none" 12017 } 12018 }, elementProps] 12019 }); 12020 }); 12021 if (true) MenuBackdrop.displayName = "MenuBackdrop"; 12022 12023 // node_modules/@base-ui/react/menu/checkbox-item/MenuCheckboxItem.mjs 12024 var React61 = __toESM(require_react(), 1); 12025 12026 // node_modules/@base-ui/react/menu/checkbox-item/MenuCheckboxItemContext.mjs 12027 var React58 = __toESM(require_react(), 1); 12028 var MenuCheckboxItemContext = /* @__PURE__ */ React58.createContext(void 0); 12029 if (true) MenuCheckboxItemContext.displayName = "MenuCheckboxItemContext"; 12030 function useMenuCheckboxItemContext() { 12031 const context = React58.useContext(MenuCheckboxItemContext); 12032 if (context === void 0) { 12033 throw new Error(true ? "Base UI: MenuCheckboxItemContext is missing. MenuCheckboxItem parts must be placed within <Menu.CheckboxItem>." : formatErrorMessage_default(30)); 12034 } 12035 return context; 12036 } 12037 12038 // node_modules/@base-ui/react/menu/item/useMenuItem.mjs 12039 var React60 = __toESM(require_react(), 1); 12040 12041 // node_modules/@base-ui/react/menu/item/useMenuItemCommonProps.mjs 12042 var React59 = __toESM(require_react(), 1); 12043 function useMenuItemCommonProps(params) { 12044 const { 12045 closeOnClick, 12046 highlighted, 12047 id, 12048 nodeId, 12049 store, 12050 typingRef, 12051 itemRef, 12052 itemMetadata 12053 } = params; 12054 const { 12055 events: menuEvents 12056 } = store.useState("floatingTreeRoot"); 12057 const open = store.useState("open"); 12058 const contextMenuContext = useContextMenuRootContext(true); 12059 const isContextMenu = contextMenuContext !== void 0; 12060 return React59.useMemo(() => ({ 12061 id, 12062 role: "menuitem", 12063 tabIndex: open && highlighted ? 0 : -1, 12064 onKeyDown(event) { 12065 if (event.key === " " && typingRef?.current) { 12066 event.preventDefault(); 12067 } 12068 }, 12069 onMouseMove(event) { 12070 if (!nodeId) { 12071 return; 12072 } 12073 menuEvents.emit("itemhover", { 12074 nodeId, 12075 target: event.currentTarget 12076 }); 12077 }, 12078 onClick(event) { 12079 if (closeOnClick) { 12080 menuEvents.emit("close", { 12081 domEvent: event, 12082 reason: reason_parts_exports.itemPress 12083 }); 12084 } 12085 }, 12086 onMouseUp(event) { 12087 if (contextMenuContext) { 12088 const initialCursorPoint = contextMenuContext.initialCursorPointRef.current; 12089 contextMenuContext.initialCursorPointRef.current = null; 12090 if (isContextMenu && initialCursorPoint && Math.abs(event.clientX - initialCursorPoint.x) <= 1 && Math.abs(event.clientY - initialCursorPoint.y) <= 1) { 12091 return; 12092 } 12093 if (isContextMenu && !parts_exports.os.mac && event.button === 2) { 12094 return; 12095 } 12096 } 12097 if (itemRef.current && store.context.allowMouseUpTriggerRef.current && (!isContextMenu || event.button === 2)) { 12098 if (itemMetadata.type === "regular-item") { 12099 dispatchClickWithModifiers(itemRef.current, event, { 12100 detail: 1 12101 }); 12102 } 12103 } 12104 } 12105 }), [closeOnClick, highlighted, id, menuEvents, nodeId, open, store, typingRef, itemRef, contextMenuContext, isContextMenu, itemMetadata]); 12106 } 12107 12108 // node_modules/@base-ui/react/menu/item/useMenuItem.mjs 12109 var REGULAR_ITEM = { 12110 type: "regular-item" 12111 }; 12112 function useMenuItem(params) { 12113 const { 12114 closeOnClick, 12115 disabled: disabled2, 12116 highlighted, 12117 id, 12118 store, 12119 typingRef = store.context.typingRef, 12120 nativeButton, 12121 itemMetadata, 12122 nodeId 12123 } = params; 12124 const itemRef = React60.useRef(null); 12125 const { 12126 getButtonProps, 12127 buttonRef 12128 } = useButton({ 12129 disabled: disabled2, 12130 focusableWhenDisabled: true, 12131 native: nativeButton, 12132 composite: true 12133 }); 12134 const commonProps = useMenuItemCommonProps({ 12135 closeOnClick, 12136 highlighted, 12137 id, 12138 nodeId, 12139 store, 12140 typingRef, 12141 itemRef, 12142 itemMetadata 12143 }); 12144 const getItemProps = React60.useCallback((externalProps) => { 12145 return mergeProps(commonProps, { 12146 onMouseEnter() { 12147 if (itemMetadata.type !== "submenu-trigger") { 12148 return; 12149 } 12150 itemMetadata.setActive(); 12151 } 12152 }, externalProps, getButtonProps); 12153 }, [commonProps, getButtonProps, itemMetadata]); 12154 const mergedRef = useMergedRefs(itemRef, buttonRef); 12155 return React60.useMemo(() => ({ 12156 getItemProps, 12157 itemRef: mergedRef 12158 }), [getItemProps, mergedRef]); 12159 } 12160 12161 // node_modules/@base-ui/react/menu/checkbox-item/MenuCheckboxItemDataAttributes.mjs 12162 var MenuCheckboxItemDataAttributes = /* @__PURE__ */ (function(MenuCheckboxItemDataAttributes2) { 12163 MenuCheckboxItemDataAttributes2["checked"] = "data-checked"; 12164 MenuCheckboxItemDataAttributes2["unchecked"] = "data-unchecked"; 12165 MenuCheckboxItemDataAttributes2["disabled"] = "data-disabled"; 12166 MenuCheckboxItemDataAttributes2["highlighted"] = "data-highlighted"; 12167 return MenuCheckboxItemDataAttributes2; 12168 })({}); 12169 12170 // node_modules/@base-ui/react/menu/utils/stateAttributesMapping.mjs 12171 var itemMapping = { 12172 checked(value) { 12173 if (value) { 12174 return { 12175 [MenuCheckboxItemDataAttributes.checked]: "" 12176 }; 12177 } 12178 return { 12179 [MenuCheckboxItemDataAttributes.unchecked]: "" 12180 }; 12181 }, 12182 ...transitionStatusMapping 12183 }; 12184 12185 // node_modules/@base-ui/react/menu/checkbox-item/MenuCheckboxItem.mjs 12186 var import_jsx_runtime42 = __toESM(require_jsx_runtime(), 1); 12187 var MenuCheckboxItem = /* @__PURE__ */ React61.forwardRef(function MenuCheckboxItem2(componentProps, forwardedRef) { 12188 const { 12189 render: render4, 12190 className, 12191 id: idProp, 12192 label, 12193 nativeButton = false, 12194 disabled: disabledProp = false, 12195 closeOnClick = false, 12196 checked: checkedProp, 12197 defaultChecked, 12198 onCheckedChange, 12199 style, 12200 ...elementProps 12201 } = componentProps; 12202 const listItem = useCompositeListItem({ 12203 guess: true, 12204 label 12205 }); 12206 const menuPositionerContext = useMenuPositionerContext(true); 12207 const id = useBaseUiId(idProp); 12208 const { 12209 store 12210 } = useMenuRootContext(); 12211 const rootDisabled = store.useState("disabled"); 12212 const disabled2 = disabledProp || rootDisabled; 12213 const highlighted = store.useState("isActive", listItem.index); 12214 const itemProps = store.useState("itemProps"); 12215 const [checked, setChecked] = useControlled({ 12216 controlled: checkedProp, 12217 default: defaultChecked ?? false, 12218 name: "MenuCheckboxItem", 12219 state: "checked" 12220 }); 12221 const { 12222 getItemProps, 12223 itemRef 12224 } = useMenuItem({ 12225 closeOnClick, 12226 disabled: disabled2, 12227 highlighted, 12228 id, 12229 store, 12230 nativeButton, 12231 nodeId: menuPositionerContext?.context.nodeId, 12232 itemMetadata: REGULAR_ITEM 12233 }); 12234 const state = React61.useMemo(() => ({ 12235 disabled: disabled2, 12236 highlighted, 12237 checked 12238 }), [disabled2, highlighted, checked]); 12239 function handleClick(event) { 12240 const details = createChangeEventDetails(reason_parts_exports.itemPress, event.nativeEvent, void 0, { 12241 preventUnmountOnClose: NOOP 12242 }); 12243 onCheckedChange?.(!checked, details); 12244 if (details.isCanceled) { 12245 return; 12246 } 12247 setChecked((currentlyChecked) => !currentlyChecked); 12248 } 12249 const element = useRenderElement("div", componentProps, { 12250 state, 12251 stateAttributesMapping: itemMapping, 12252 props: [itemProps, { 12253 role: "menuitemcheckbox", 12254 "aria-checked": checked, 12255 onClick: handleClick 12256 }, elementProps, getItemProps], 12257 ref: [itemRef, forwardedRef, listItem.ref] 12258 }); 12259 return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(MenuCheckboxItemContext.Provider, { 12260 value: state, 12261 children: element 12262 }); 12263 }); 12264 if (true) MenuCheckboxItem.displayName = "MenuCheckboxItem"; 12265 12266 // node_modules/@base-ui/react/menu/checkbox-item-indicator/MenuCheckboxItemIndicator.mjs 12267 var React62 = __toESM(require_react(), 1); 12268 var MenuCheckboxItemIndicator = /* @__PURE__ */ React62.forwardRef(function MenuCheckboxItemIndicator2(componentProps, forwardedRef) { 12269 const { 12270 render: render4, 12271 className, 12272 style, 12273 keepMounted = false, 12274 ...elementProps 12275 } = componentProps; 12276 const item = useMenuCheckboxItemContext(); 12277 const indicatorRef = React62.useRef(null); 12278 const { 12279 transitionStatus, 12280 mounted, 12281 setMounted 12282 } = useTransitionStatus(item.checked); 12283 useOpenChangeComplete({ 12284 open: item.checked, 12285 ref: indicatorRef, 12286 onComplete() { 12287 if (!item.checked) { 12288 setMounted(false); 12289 } 12290 } 12291 }); 12292 const state = { 12293 checked: item.checked, 12294 disabled: item.disabled, 12295 highlighted: item.highlighted, 12296 transitionStatus 12297 }; 12298 const element = useRenderElement("span", componentProps, { 12299 state, 12300 ref: [forwardedRef, indicatorRef], 12301 stateAttributesMapping: itemMapping, 12302 props: { 12303 "aria-hidden": true, 12304 ...elementProps 12305 }, 12306 enabled: keepMounted || mounted 12307 }); 12308 return element; 12309 }); 12310 if (true) MenuCheckboxItemIndicator.displayName = "MenuCheckboxItemIndicator"; 12311 12312 // node_modules/@base-ui/react/menu/group/MenuGroup.mjs 12313 var React64 = __toESM(require_react(), 1); 12314 12315 // node_modules/@base-ui/react/menu/group/MenuGroupContext.mjs 12316 var React63 = __toESM(require_react(), 1); 12317 var MenuGroupContext = /* @__PURE__ */ React63.createContext(void 0); 12318 if (true) MenuGroupContext.displayName = "MenuGroupContext"; 12319 function useMenuGroupRootContext() { 12320 const context = React63.useContext(MenuGroupContext); 12321 if (context === void 0) { 12322 throw new Error(true ? "Base UI: MenuGroupContext is missing. Menu group parts must be used within <Menu.Group> or <Menu.RadioGroup>." : formatErrorMessage_default(31)); 12323 } 12324 return context; 12325 } 12326 12327 // node_modules/@base-ui/react/menu/group/MenuGroup.mjs 12328 var import_jsx_runtime43 = __toESM(require_jsx_runtime(), 1); 12329 var MenuGroup = /* @__PURE__ */ React64.forwardRef(function MenuGroup2(componentProps, forwardedRef) { 12330 const { 12331 render: render4, 12332 className, 12333 style, 12334 ...elementProps 12335 } = componentProps; 12336 const [labelId, setLabelId] = React64.useState(void 0); 12337 const element = useRenderElement("div", componentProps, { 12338 ref: forwardedRef, 12339 props: { 12340 role: "group", 12341 "aria-labelledby": labelId, 12342 ...elementProps 12343 } 12344 }); 12345 return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(MenuGroupContext.Provider, { 12346 value: setLabelId, 12347 children: element 12348 }); 12349 }); 12350 if (true) MenuGroup.displayName = "MenuGroup"; 12351 12352 // node_modules/@base-ui/react/menu/group-label/MenuGroupLabel.mjs 12353 var React65 = __toESM(require_react(), 1); 12354 var MenuGroupLabel = /* @__PURE__ */ React65.forwardRef(function MenuGroupLabel2(componentProps, forwardedRef) { 12355 const { 12356 render: render4, 12357 className, 12358 style, 12359 id: idProp, 12360 ...elementProps 12361 } = componentProps; 12362 const id = useBaseUiId(idProp); 12363 const setLabelId = useMenuGroupRootContext(); 12364 useIsoLayoutEffect(() => { 12365 setLabelId(id); 12366 return () => { 12367 setLabelId((currentId) => currentId === id ? void 0 : currentId); 12368 }; 12369 }, [setLabelId, id]); 12370 return useRenderElement("div", componentProps, { 12371 ref: forwardedRef, 12372 props: { 12373 id, 12374 role: "presentation", 12375 ...elementProps 12376 } 12377 }); 12378 }); 12379 if (true) MenuGroupLabel.displayName = "MenuGroupLabel"; 12380 12381 // node_modules/@base-ui/react/menu/item/MenuItem.mjs 12382 var React66 = __toESM(require_react(), 1); 12383 var MenuItem = /* @__PURE__ */ React66.forwardRef(function MenuItem2(componentProps, forwardedRef) { 12384 const { 12385 render: render4, 12386 className, 12387 id: idProp, 12388 label, 12389 nativeButton = false, 12390 disabled: disabledProp = false, 12391 closeOnClick = true, 12392 style, 12393 ...elementProps 12394 } = componentProps; 12395 const listItem = useCompositeListItem({ 12396 guess: true, 12397 label 12398 }); 12399 const menuPositionerContext = useMenuPositionerContext(true); 12400 const id = useBaseUiId(idProp); 12401 const { 12402 store 12403 } = useMenuRootContext(); 12404 const rootDisabled = store.useState("disabled"); 12405 const disabled2 = disabledProp || rootDisabled; 12406 const highlighted = store.useState("isActive", listItem.index); 12407 const itemProps = store.useState("itemProps"); 12408 const { 12409 getItemProps, 12410 itemRef 12411 } = useMenuItem({ 12412 closeOnClick, 12413 disabled: disabled2, 12414 highlighted, 12415 id, 12416 store, 12417 nativeButton, 12418 nodeId: menuPositionerContext?.context.nodeId, 12419 itemMetadata: REGULAR_ITEM 12420 }); 12421 const state = { 12422 disabled: disabled2, 12423 highlighted 12424 }; 12425 return useRenderElement("div", componentProps, { 12426 state, 12427 props: [itemProps, elementProps, getItemProps], 12428 ref: [itemRef, forwardedRef, listItem.ref] 12429 }); 12430 }); 12431 if (true) MenuItem.displayName = "MenuItem"; 12432 12433 // node_modules/@base-ui/react/menu/link-item/MenuLinkItem.mjs 12434 var React67 = __toESM(require_react(), 1); 12435 var MenuLinkItem = /* @__PURE__ */ React67.forwardRef(function MenuLinkItem2(componentProps, forwardedRef) { 12436 const { 12437 render: render4, 12438 className, 12439 id: idProp, 12440 label, 12441 closeOnClick = false, 12442 style, 12443 ...elementProps 12444 } = componentProps; 12445 const linkRef = React67.useRef(null); 12446 const listItem = useCompositeListItem({ 12447 guess: true, 12448 label 12449 }); 12450 const menuPositionerContext = useMenuPositionerContext(true); 12451 const nodeId = menuPositionerContext?.context.nodeId; 12452 const id = useBaseUiId(idProp); 12453 const { 12454 store 12455 } = useMenuRootContext(); 12456 const highlighted = store.useState("isActive", listItem.index); 12457 const itemProps = store.useState("itemProps"); 12458 const typingRef = store.context.typingRef; 12459 const { 12460 getButtonProps, 12461 buttonRef 12462 } = useButton({ 12463 native: false, 12464 composite: true 12465 }); 12466 const commonProps = useMenuItemCommonProps({ 12467 closeOnClick, 12468 highlighted, 12469 id, 12470 nodeId, 12471 store, 12472 typingRef, 12473 itemRef: linkRef, 12474 itemMetadata: REGULAR_ITEM 12475 }); 12476 function getItemProps(externalProps) { 12477 return mergeProps(commonProps, externalProps, getButtonProps); 12478 } 12479 const state = { 12480 highlighted 12481 }; 12482 return useRenderElement("a", componentProps, { 12483 state, 12484 props: [itemProps, elementProps, getItemProps], 12485 ref: [linkRef, buttonRef, forwardedRef, listItem.ref] 12486 }); 12487 }); 12488 if (true) MenuLinkItem.displayName = "MenuLinkItem"; 12489 12490 // node_modules/@base-ui/react/menu/popup/MenuPopup.mjs 12491 var React69 = __toESM(require_react(), 1); 12492 12493 // node_modules/@base-ui/react/toolbar/root/ToolbarRootContext.mjs 12494 var React68 = __toESM(require_react(), 1); 12495 var ToolbarRootContext = /* @__PURE__ */ React68.createContext(void 0); 12496 if (true) ToolbarRootContext.displayName = "ToolbarRootContext"; 12497 function useToolbarRootContext(optional) { 12498 const context = React68.useContext(ToolbarRootContext); 12499 if (context === void 0 && !optional) { 12500 throw new Error(true ? "Base UI: ToolbarRootContext is missing. Toolbar parts must be placed within <Toolbar.Root>." : formatErrorMessage_default(69)); 12501 } 12502 return context; 12503 } 12504 12505 // node_modules/@base-ui/react/menu/popup/MenuPopup.mjs 12506 var import_jsx_runtime44 = __toESM(require_jsx_runtime(), 1); 12507 var MenuPopup = /* @__PURE__ */ React69.forwardRef(function MenuPopup2(componentProps, forwardedRef) { 12508 const { 12509 render: render4, 12510 className, 12511 style, 12512 finalFocus, 12513 ...elementProps 12514 } = componentProps; 12515 const { 12516 store 12517 } = useMenuRootContext(); 12518 const { 12519 side, 12520 align 12521 } = useMenuPositionerContext(); 12522 const insideToolbar = useToolbarRootContext(true) != null; 12523 const open = store.useState("open"); 12524 const transitionStatus = store.useState("transitionStatus"); 12525 const popupProps = store.useState("popupProps"); 12526 const mounted = store.useState("mounted"); 12527 const instantType = store.useState("instantType"); 12528 const activeTriggerElement = store.useState("activeTriggerElement"); 12529 const parent = store.useState("parent"); 12530 const lastOpenChangeReason = store.useState("lastOpenChangeReason"); 12531 const rootId = store.useState("rootId"); 12532 const floatingContext = store.useState("floatingRootContext"); 12533 const floatingTreeRoot = store.useState("floatingTreeRoot"); 12534 const closeDelay = store.useState("closeDelay"); 12535 const hoverEnabled = store.useState("hoverEnabled"); 12536 const disabled2 = store.useState("disabled"); 12537 const openMethod = store.useState("openMethod"); 12538 const isContextMenu = parent.type === "context-menu"; 12539 useOpenChangeComplete({ 12540 open, 12541 ref: store.context.popupRef, 12542 onComplete() { 12543 if (open) { 12544 store.context.onOpenChangeComplete?.(true); 12545 } 12546 } 12547 }); 12548 React69.useEffect(() => { 12549 function handleClose(event) { 12550 store.setOpen(false, createChangeEventDetails(event.reason, event.domEvent)); 12551 } 12552 floatingTreeRoot.events.on("close", handleClose); 12553 return () => { 12554 floatingTreeRoot.events.off("close", handleClose); 12555 }; 12556 }, [floatingTreeRoot.events, store]); 12557 useHoverFloatingInteraction(floatingContext, { 12558 enabled: hoverEnabled && !disabled2 && !isContextMenu && parent.type !== "menubar", 12559 closeDelay 12560 }); 12561 const setPopupElement = store.useStateSetter("popupElement"); 12562 const state = { 12563 transitionStatus, 12564 side, 12565 align, 12566 open, 12567 nested: parent.type === "menu", 12568 instant: instantType 12569 }; 12570 const element = useRenderElement("div", componentProps, { 12571 state, 12572 ref: [forwardedRef, store.context.popupRef, setPopupElement], 12573 stateAttributesMapping: popupTransitionStateMapping, 12574 props: [popupProps, { 12575 onKeyDown(event) { 12576 if (insideToolbar && COMPOSITE_KEYS.has(event.key)) { 12577 event.stopPropagation(); 12578 } 12579 } 12580 }, getDisabledMountTransitionStyles(transitionStatus), elementProps, { 12581 "data-rootownerid": rootId 12582 }] 12583 }); 12584 let returnFocus = parent.type === void 0 || isContextMenu; 12585 if (activeTriggerElement || parent.type === "menubar" && lastOpenChangeReason !== reason_parts_exports.outsidePress) { 12586 returnFocus = true; 12587 } 12588 return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(FloatingFocusManager, { 12589 context: floatingContext, 12590 openInteractionType: openMethod, 12591 modal: isContextMenu, 12592 disabled: !mounted, 12593 returnFocus: finalFocus === void 0 ? returnFocus : finalFocus, 12594 initialFocus: parent.type !== "menu", 12595 restoreFocus: true, 12596 externalTree: parent.type !== "menubar" ? floatingTreeRoot : void 0, 12597 previousFocusableElement: activeTriggerElement, 12598 nextFocusableElement: parent.type === void 0 ? store.context.triggerFocusTargetRef : void 0, 12599 beforeContentFocusGuardRef: parent.type === void 0 ? store.context.beforeContentFocusGuardRef : void 0, 12600 children: element 12601 }); 12602 }); 12603 if (true) MenuPopup.displayName = "MenuPopup"; 12604 12605 // node_modules/@base-ui/react/menu/portal/MenuPortal.mjs 12606 var React71 = __toESM(require_react(), 1); 12607 12608 // node_modules/@base-ui/react/menu/portal/MenuPortalContext.mjs 12609 var React70 = __toESM(require_react(), 1); 12610 var MenuPortalContext = /* @__PURE__ */ React70.createContext(void 0); 12611 if (true) MenuPortalContext.displayName = "MenuPortalContext"; 12612 function useMenuPortalContext() { 12613 const value = React70.useContext(MenuPortalContext); 12614 if (value === void 0) { 12615 throw new Error(true ? "Base UI: <Menu.Portal> is missing." : formatErrorMessage_default(32)); 12616 } 12617 return value; 12618 } 12619 12620 // node_modules/@base-ui/react/menu/portal/MenuPortal.mjs 12621 var import_jsx_runtime45 = __toESM(require_jsx_runtime(), 1); 12622 var MenuPortal = /* @__PURE__ */ React71.forwardRef(function MenuPortal2(props, forwardedRef) { 12623 const { 12624 keepMounted = false, 12625 ...portalProps 12626 } = props; 12627 const { 12628 store 12629 } = useMenuRootContext(); 12630 const mounted = store.useState("mounted"); 12631 const shouldRender = mounted || keepMounted; 12632 if (!shouldRender) { 12633 return null; 12634 } 12635 return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(MenuPortalContext.Provider, { 12636 value: keepMounted, 12637 children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(FloatingPortal, { 12638 ref: forwardedRef, 12639 ...portalProps 12640 }) 12641 }); 12642 }); 12643 if (true) MenuPortal.displayName = "MenuPortal"; 12644 12645 // node_modules/@base-ui/react/menu/positioner/MenuPositioner.mjs 12646 var React72 = __toESM(require_react(), 1); 12647 var import_jsx_runtime46 = __toESM(require_jsx_runtime(), 1); 12648 var MenuPositioner = /* @__PURE__ */ React72.forwardRef(function MenuPositioner2(componentProps, forwardedRef) { 12649 const { 12650 anchor: anchorProp, 12651 positionMethod: positionMethodProp = "absolute", 12652 className, 12653 render: render4, 12654 side, 12655 align: alignProp, 12656 sideOffset: sideOffsetProp = 0, 12657 alignOffset: alignOffsetProp = 0, 12658 collisionBoundary = "clipping-ancestors", 12659 collisionPadding = 5, 12660 arrowPadding = 5, 12661 sticky = false, 12662 disableAnchorTracking = false, 12663 collisionAvoidance: collisionAvoidanceProp = DROPDOWN_COLLISION_AVOIDANCE, 12664 style, 12665 ...elementProps 12666 } = componentProps; 12667 const { 12668 store 12669 } = useMenuRootContext(); 12670 const keepMounted = useMenuPortalContext(); 12671 const contextMenuContext = useContextMenuRootContext(true); 12672 const parent = store.useState("parent"); 12673 const floatingRootContext = store.useState("floatingRootContext"); 12674 const floatingTreeRoot = store.useState("floatingTreeRoot"); 12675 const mounted = store.useState("mounted"); 12676 const open = store.useState("open"); 12677 const modal = store.useState("modal"); 12678 const openMethod = store.useState("openMethod"); 12679 const triggerElement = store.useState("activeTriggerElement"); 12680 const transitionStatus = store.useState("transitionStatus"); 12681 const positionerElement = store.useState("positionerElement"); 12682 const instantType = store.useState("instantType"); 12683 const adaptiveOrigin2 = store.useState("adaptiveOrigin"); 12684 const lastOpenChangeReason = store.useState("lastOpenChangeReason"); 12685 const floatingNodeId = store.useState("floatingNodeId"); 12686 const floatingParentNodeId = store.useState("floatingParentNodeId"); 12687 const domReference = floatingRootContext.useState("domReferenceElement"); 12688 const previousTriggerRef = React72.useRef(null); 12689 const runOnceAnimationsFinish = useAnimationsFinished(positionerElement); 12690 let anchor = anchorProp; 12691 let sideOffset = sideOffsetProp; 12692 let alignOffset = alignOffsetProp; 12693 let align = alignProp; 12694 let collisionAvoidance = collisionAvoidanceProp; 12695 if (parent.type === "context-menu") { 12696 anchor = anchorProp ?? parent.context?.anchor; 12697 align = align ?? "start"; 12698 if (!side && align !== "center") { 12699 alignOffset = componentProps.alignOffset ?? 2; 12700 sideOffset = componentProps.sideOffset ?? -5; 12701 } 12702 } 12703 let computedSide = side; 12704 let computedAlign = align; 12705 if (parent.type === "menu") { 12706 computedSide = computedSide ?? "inline-end"; 12707 computedAlign = computedAlign ?? "start"; 12708 collisionAvoidance = componentProps.collisionAvoidance ?? POPUP_COLLISION_AVOIDANCE; 12709 } else if (parent.type === "menubar") { 12710 computedSide = computedSide ?? (parent.context.orientation === "vertical" ? "inline-end" : "bottom"); 12711 computedAlign = computedAlign ?? "start"; 12712 } 12713 const contextMenu = parent.type === "context-menu"; 12714 const positioner = useAnchorPositioning({ 12715 anchor, 12716 floatingRootContext, 12717 positionMethod: contextMenuContext ? "fixed" : positionMethodProp, 12718 mounted, 12719 side: computedSide, 12720 sideOffset, 12721 align: computedAlign, 12722 alignOffset, 12723 arrowPadding: contextMenu ? 0 : arrowPadding, 12724 collisionBoundary, 12725 collisionPadding, 12726 sticky, 12727 nodeId: floatingNodeId, 12728 keepMounted, 12729 disableAnchorTracking, 12730 collisionAvoidance, 12731 shift: contextMenu ? { 12732 crossAxis: !("side" in collisionAvoidance && collisionAvoidance.side === "flip"), 12733 rootBoundary: "layoutViewport" 12734 } : void 0, 12735 externalTree: floatingTreeRoot, 12736 adaptiveOrigin: adaptiveOrigin2 12737 }); 12738 React72.useEffect(() => { 12739 function onMenuOpenChange(details) { 12740 if (details.open) { 12741 if (details.parentNodeId === floatingNodeId) { 12742 store.set("hoverEnabled", false); 12743 } 12744 if (details.nodeId !== floatingNodeId && details.parentNodeId === store.select("floatingParentNodeId")) { 12745 store.setOpen(false, createChangeEventDetails(reason_parts_exports.siblingOpen)); 12746 } 12747 } 12748 } 12749 floatingTreeRoot.events.on("menuopenchange", onMenuOpenChange); 12750 return () => { 12751 floatingTreeRoot.events.off("menuopenchange", onMenuOpenChange); 12752 }; 12753 }, [store, floatingTreeRoot.events, floatingNodeId]); 12754 React72.useEffect(() => { 12755 if (store.select("floatingParentNodeId") == null) { 12756 return void 0; 12757 } 12758 function onParentClose(details) { 12759 if (details.open || details.nodeId !== store.select("floatingParentNodeId")) { 12760 return; 12761 } 12762 const reason = details.reason ?? reason_parts_exports.siblingOpen; 12763 store.setOpen(false, createChangeEventDetails(reason)); 12764 } 12765 floatingTreeRoot.events.on("menuopenchange", onParentClose); 12766 return () => { 12767 floatingTreeRoot.events.off("menuopenchange", onParentClose); 12768 }; 12769 }, [floatingTreeRoot.events, store]); 12770 const closeTimeout = useTimeout(); 12771 React72.useEffect(() => { 12772 if (!open) { 12773 closeTimeout.clear(); 12774 } 12775 }, [open, closeTimeout]); 12776 React72.useEffect(() => { 12777 function onItemHover(event) { 12778 if (!open || event.nodeId !== store.select("floatingParentNodeId")) { 12779 return; 12780 } 12781 if (event.target && triggerElement && triggerElement !== event.target) { 12782 const delay = store.select("closeDelay"); 12783 if (delay > 0) { 12784 if (!closeTimeout.isStarted()) { 12785 closeTimeout.start(delay, () => { 12786 store.setOpen(false, createChangeEventDetails(reason_parts_exports.siblingOpen)); 12787 }); 12788 } 12789 } else { 12790 store.setOpen(false, createChangeEventDetails(reason_parts_exports.siblingOpen)); 12791 } 12792 } else { 12793 closeTimeout.clear(); 12794 } 12795 } 12796 floatingTreeRoot.events.on("itemhover", onItemHover); 12797 return () => { 12798 floatingTreeRoot.events.off("itemhover", onItemHover); 12799 }; 12800 }, [floatingTreeRoot.events, open, triggerElement, store, closeTimeout]); 12801 React72.useEffect(() => { 12802 const eventDetails = { 12803 open, 12804 nodeId: floatingNodeId, 12805 parentNodeId: floatingParentNodeId, 12806 reason: store.select("lastOpenChangeReason") 12807 }; 12808 floatingTreeRoot.events.emit("menuopenchange", eventDetails); 12809 }, [floatingTreeRoot.events, open, store, floatingNodeId, floatingParentNodeId]); 12810 useIsoLayoutEffect(() => { 12811 const currentTrigger = domReference; 12812 const previousTrigger = previousTriggerRef.current; 12813 if (currentTrigger) { 12814 previousTriggerRef.current = currentTrigger; 12815 } 12816 if (previousTrigger && currentTrigger && currentTrigger !== previousTrigger) { 12817 store.set("instantType", void 0); 12818 const abortController = new AbortController(); 12819 runOnceAnimationsFinish(() => { 12820 store.set("instantType", "trigger-change"); 12821 }, abortController.signal); 12822 return () => { 12823 abortController.abort(); 12824 }; 12825 } 12826 return void 0; 12827 }, [domReference, runOnceAnimationsFinish, store]); 12828 const state = { 12829 open, 12830 side: positioner.side, 12831 align: positioner.align, 12832 anchorHidden: positioner.anchorHidden, 12833 nested: parent.type === "menu", 12834 instant: instantType 12835 }; 12836 const menubarModal = parent.type === "menubar" && parent.context.modal; 12837 const popupModal = modal && lastOpenChangeReason !== reason_parts_exports.triggerHover; 12838 useAnchoredPopupScrollLock(open && (menubarModal || popupModal), openMethod === "touch", positionerElement, triggerElement); 12839 const element = usePositioner(componentProps, state, { 12840 styles: positioner.positionerStyles, 12841 transitionStatus, 12842 props: elementProps, 12843 refs: [forwardedRef, store.useStateSetter("positionerElement")], 12844 hidden: !mounted, 12845 inert: !open 12846 }); 12847 const shouldRenderBackdrop = mounted && parent.type !== "menu" && (parent.type !== "menubar" && modal && lastOpenChangeReason !== reason_parts_exports.triggerHover || parent.type === "menubar" && parent.context.modal); 12848 let backdropCutout = null; 12849 if (parent.type === "menubar") { 12850 backdropCutout = parent.context.contentElement; 12851 } else if (parent.type === void 0) { 12852 backdropCutout = triggerElement; 12853 } 12854 return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(MenuPositionerContext.Provider, { 12855 value: positioner, 12856 children: [shouldRenderBackdrop && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(InternalBackdrop, { 12857 ref: parent.type === "context-menu" || parent.type === "nested-context-menu" ? parent.context.internalBackdropRef : null, 12858 inert: inertValue(!open), 12859 cutout: backdropCutout 12860 }), /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(FloatingNode, { 12861 id: floatingNodeId, 12862 children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(CompositeList, { 12863 elementsRef: store.context.itemDomElements, 12864 labelsRef: store.context.itemLabels, 12865 children: element 12866 }) 12867 })] 12868 }); 12869 }); 12870 if (true) MenuPositioner.displayName = "MenuPositioner"; 12871 12872 // node_modules/@base-ui/react/menu/radio-group/MenuRadioGroup.mjs 12873 var React74 = __toESM(require_react(), 1); 12874 12875 // node_modules/@base-ui/react/menu/radio-group/MenuRadioGroupContext.mjs 12876 var React73 = __toESM(require_react(), 1); 12877 var MenuRadioGroupContext = /* @__PURE__ */ React73.createContext(void 0); 12878 if (true) MenuRadioGroupContext.displayName = "MenuRadioGroupContext"; 12879 function useMenuRadioGroupContext() { 12880 const context = React73.useContext(MenuRadioGroupContext); 12881 if (context === void 0) { 12882 throw new Error(true ? "Base UI: MenuRadioGroupContext is missing. MenuRadioGroup parts must be placed within <Menu.RadioGroup>." : formatErrorMessage_default(34)); 12883 } 12884 return context; 12885 } 12886 12887 // node_modules/@base-ui/react/menu/radio-group/MenuRadioGroup.mjs 12888 var import_jsx_runtime47 = __toESM(require_jsx_runtime(), 1); 12889 var MenuRadioGroup = /* @__PURE__ */ React74.memo(/* @__PURE__ */ React74.forwardRef(function MenuRadioGroup2(componentProps, forwardedRef) { 12890 const { 12891 render: render4, 12892 className, 12893 value: valueProp, 12894 defaultValue: defaultValue2, 12895 onValueChange: onValueChangeProp, 12896 disabled: disabled2 = false, 12897 style, 12898 "aria-labelledby": ariaLabelledByProp, 12899 ...elementProps 12900 } = componentProps; 12901 const [labelId, setLabelId] = React74.useState(void 0); 12902 const [value, setValueUnwrapped] = useControlled({ 12903 controlled: valueProp, 12904 default: defaultValue2, 12905 name: "MenuRadioGroup" 12906 }); 12907 const setValue = useStableCallback((newValue, eventDetails) => { 12908 onValueChangeProp?.(newValue, eventDetails); 12909 if (eventDetails.isCanceled) { 12910 return; 12911 } 12912 setValueUnwrapped(newValue); 12913 }); 12914 const state = { 12915 disabled: disabled2 12916 }; 12917 const element = useRenderElement("div", componentProps, { 12918 state, 12919 ref: forwardedRef, 12920 props: { 12921 role: "group", 12922 "aria-labelledby": ariaLabelledByProp ?? labelId, 12923 "aria-disabled": disabled2 || void 0, 12924 ...elementProps 12925 } 12926 }); 12927 const context = React74.useMemo(() => ({ 12928 value, 12929 setValue, 12930 disabled: disabled2 12931 }), [value, setValue, disabled2]); 12932 return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(MenuGroupContext.Provider, { 12933 value: setLabelId, 12934 children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(MenuRadioGroupContext.Provider, { 12935 value: context, 12936 children: element 12937 }) 12938 }); 12939 })); 12940 if (true) MenuRadioGroup.displayName = "MenuRadioGroup"; 12941 12942 // node_modules/@base-ui/react/menu/radio-item/MenuRadioItem.mjs 12943 var React76 = __toESM(require_react(), 1); 12944 12945 // node_modules/@base-ui/react/menu/radio-item/MenuRadioItemContext.mjs 12946 var React75 = __toESM(require_react(), 1); 12947 var MenuRadioItemContext = /* @__PURE__ */ React75.createContext(void 0); 12948 if (true) MenuRadioItemContext.displayName = "MenuRadioItemContext"; 12949 function useMenuRadioItemContext() { 12950 const context = React75.useContext(MenuRadioItemContext); 12951 if (context === void 0) { 12952 throw new Error(true ? "Base UI: MenuRadioItemContext is missing. MenuRadioItem parts must be placed within <Menu.RadioItem>." : formatErrorMessage_default(35)); 12953 } 12954 return context; 12955 } 12956 12957 // node_modules/@base-ui/react/menu/radio-item/MenuRadioItem.mjs 12958 var import_jsx_runtime48 = __toESM(require_jsx_runtime(), 1); 12959 var MenuRadioItem = /* @__PURE__ */ React76.forwardRef(function MenuRadioItem2(componentProps, forwardedRef) { 12960 const { 12961 render: render4, 12962 className, 12963 id: idProp, 12964 label, 12965 nativeButton = false, 12966 disabled: disabledProp = false, 12967 closeOnClick = false, 12968 value, 12969 style, 12970 ...elementProps 12971 } = componentProps; 12972 const listItem = useCompositeListItem({ 12973 guess: true, 12974 label 12975 }); 12976 const menuPositionerContext = useMenuPositionerContext(true); 12977 const id = useBaseUiId(idProp); 12978 const { 12979 store 12980 } = useMenuRootContext(); 12981 const highlighted = store.useState("isActive", listItem.index); 12982 const itemProps = store.useState("itemProps"); 12983 const { 12984 value: selectedValue, 12985 setValue: setSelectedValue, 12986 disabled: groupDisabled 12987 } = useMenuRadioGroupContext(); 12988 const rootDisabled = store.useState("disabled"); 12989 const disabled2 = disabledProp || groupDisabled || rootDisabled; 12990 const checked = selectedValue === value; 12991 const { 12992 getItemProps, 12993 itemRef 12994 } = useMenuItem({ 12995 closeOnClick, 12996 disabled: disabled2, 12997 highlighted, 12998 id, 12999 store, 13000 nativeButton, 13001 nodeId: menuPositionerContext?.context.nodeId, 13002 itemMetadata: REGULAR_ITEM 13003 }); 13004 const state = React76.useMemo(() => ({ 13005 disabled: disabled2, 13006 highlighted, 13007 checked 13008 }), [disabled2, highlighted, checked]); 13009 function handleClick(event) { 13010 const details = createChangeEventDetails(reason_parts_exports.itemPress, event.nativeEvent, void 0, { 13011 preventUnmountOnClose: NOOP 13012 }); 13013 setSelectedValue(value, details); 13014 } 13015 const element = useRenderElement("div", componentProps, { 13016 state, 13017 stateAttributesMapping: itemMapping, 13018 props: [itemProps, { 13019 role: "menuitemradio", 13020 "aria-checked": checked, 13021 onClick: handleClick 13022 }, elementProps, getItemProps], 13023 ref: [itemRef, forwardedRef, listItem.ref] 13024 }); 13025 return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(MenuRadioItemContext.Provider, { 13026 value: state, 13027 children: element 13028 }); 13029 }); 13030 if (true) MenuRadioItem.displayName = "MenuRadioItem"; 13031 13032 // node_modules/@base-ui/react/menu/radio-item-indicator/MenuRadioItemIndicator.mjs 13033 var React77 = __toESM(require_react(), 1); 13034 var MenuRadioItemIndicator = /* @__PURE__ */ React77.forwardRef(function MenuRadioItemIndicator2(componentProps, forwardedRef) { 13035 const { 13036 render: render4, 13037 className, 13038 style, 13039 keepMounted = false, 13040 ...elementProps 13041 } = componentProps; 13042 const item = useMenuRadioItemContext(); 13043 const indicatorRef = React77.useRef(null); 13044 const { 13045 transitionStatus, 13046 mounted, 13047 setMounted 13048 } = useTransitionStatus(item.checked); 13049 useOpenChangeComplete({ 13050 open: item.checked, 13051 ref: indicatorRef, 13052 onComplete() { 13053 if (!item.checked) { 13054 setMounted(false); 13055 } 13056 } 13057 }); 13058 const state = { 13059 checked: item.checked, 13060 disabled: item.disabled, 13061 highlighted: item.highlighted, 13062 transitionStatus 13063 }; 13064 const element = useRenderElement("span", componentProps, { 13065 state, 13066 stateAttributesMapping: itemMapping, 13067 ref: [forwardedRef, indicatorRef], 13068 props: { 13069 "aria-hidden": true, 13070 ...elementProps 13071 }, 13072 enabled: keepMounted || mounted 13073 }); 13074 return element; 13075 }); 13076 if (true) MenuRadioItemIndicator.displayName = "MenuRadioItemIndicator"; 13077 13078 // node_modules/@base-ui/react/menu/root/MenuRoot.mjs 13079 var React81 = __toESM(require_react(), 1); 13080 13081 // node_modules/@base-ui/react/menubar/MenubarContext.mjs 13082 var React78 = __toESM(require_react(), 1); 13083 var MenubarContext = /* @__PURE__ */ React78.createContext(null); 13084 if (true) MenubarContext.displayName = "MenubarContext"; 13085 function useMenubarContext(optional) { 13086 const context = React78.useContext(MenubarContext); 13087 if (context === null && !optional) { 13088 throw new Error(true ? "Base UI: MenubarContext is missing. Menubar parts must be placed within <Menubar>." : formatErrorMessage_default(5)); 13089 } 13090 return context; 13091 } 13092 13093 // node_modules/@base-ui/react/menu/store/MenuStore.mjs 13094 var React79 = __toESM(require_react(), 1); 13095 var selectors2 = { 13096 ...popupStoreSelectors, 13097 disabled: (state) => state.parent.type === "menubar" ? state.parent.context.disabled || state.disabled : state.disabled, 13098 modal: (state) => (state.parent.type === void 0 || state.parent.type === "context-menu") && (state.modal ?? true), 13099 openMethod: (state) => state.openMethod, 13100 allowMouseEnter: (state) => state.allowMouseEnter, 13101 highlightItemOnHover: (state) => state.highlightItemOnHover, 13102 parent: (state) => state.parent, 13103 rootId: (state) => { 13104 if (state.parent.type === "menu") { 13105 return state.parent.store.select("rootId"); 13106 } 13107 return state.parent.type !== void 0 ? state.parent.context.rootId : state.rootId; 13108 }, 13109 activeIndex: (state) => state.activeIndex, 13110 isActive: (state, itemIndex) => state.activeIndex === itemIndex, 13111 hoverEnabled: (state) => state.hoverEnabled, 13112 instantType: (state) => state.instantType, 13113 lastOpenChangeReason: (state) => state.openChangeReason, 13114 floatingTreeRoot: (state) => { 13115 if (state.parent.type === "menu") { 13116 return state.parent.store.select("floatingTreeRoot"); 13117 } 13118 return state.floatingTreeRoot; 13119 }, 13120 floatingNodeId: (state) => state.floatingNodeId, 13121 floatingParentNodeId: (state) => state.floatingParentNodeId, 13122 itemProps: (state) => state.itemProps, 13123 closeDelay: (state) => state.closeDelay, 13124 adaptiveOrigin: (state) => state.adaptiveOrigin, 13125 keyboardEventRelay: (state) => { 13126 if (state.keyboardEventRelay) { 13127 return state.keyboardEventRelay; 13128 } 13129 if (state.parent.type === "menu") { 13130 return state.parent.store.select("keyboardEventRelay"); 13131 } 13132 return void 0; 13133 } 13134 }; 13135 var MenuStore = class extends ReactStore { 13136 constructor(initialState) { 13137 super({ 13138 ...createInitialState(), 13139 ...initialState 13140 }, createInitialContext(), selectors2); 13141 this.unsubscribeParentListener = this.observe("parent", (parent) => { 13142 this.unsubscribeParentListener?.(); 13143 if (parent.type === "menu") { 13144 let rootId = parent.store.select("rootId"); 13145 let floatingTreeRoot = parent.store.select("floatingTreeRoot"); 13146 let keyboardEventRelay = parent.store.select("keyboardEventRelay"); 13147 this.unsubscribeParentListener = parent.store.subscribe(() => { 13148 const nextRootId = parent.store.select("rootId"); 13149 const nextFloatingTreeRoot = parent.store.select("floatingTreeRoot"); 13150 const nextKeyboardEventRelay = parent.store.select("keyboardEventRelay"); 13151 if (rootId === nextRootId && floatingTreeRoot === nextFloatingTreeRoot && keyboardEventRelay === nextKeyboardEventRelay) { 13152 return; 13153 } 13154 rootId = nextRootId; 13155 floatingTreeRoot = nextFloatingTreeRoot; 13156 keyboardEventRelay = nextKeyboardEventRelay; 13157 this.notifyAll(); 13158 }); 13159 this.context.allowMouseUpTriggerRef = parent.store.context.allowMouseUpTriggerRef; 13160 return; 13161 } 13162 if (parent.type !== void 0) { 13163 this.context.allowMouseUpTriggerRef = parent.context.allowMouseUpTriggerRef; 13164 } 13165 this.unsubscribeParentListener = null; 13166 }); 13167 } 13168 setOpen(open, eventDetails) { 13169 this.state.floatingRootContext.context.events.emit("setOpen", { 13170 open, 13171 eventDetails 13172 }); 13173 } 13174 unsubscribeParentListener = null; 13175 }; 13176 function createNullMenuStore() { 13177 const store = new NullStore(Object.freeze(createInitialState()), Object.freeze(createInitialContext()), selectors2); 13178 return Object.assign(store, { 13179 setOpen: NOOP 13180 }); 13181 } 13182 function createInitialContext() { 13183 return { 13184 positionerRef: /* @__PURE__ */ React79.createRef(), 13185 popupRef: /* @__PURE__ */ React79.createRef(), 13186 typingRef: { 13187 current: false 13188 }, 13189 itemDomElements: { 13190 current: [] 13191 }, 13192 itemLabels: { 13193 current: [] 13194 }, 13195 allowMouseUpTriggerRef: { 13196 current: false 13197 }, 13198 triggerFocusTargetRef: /* @__PURE__ */ React79.createRef(), 13199 beforeContentFocusGuardRef: /* @__PURE__ */ React79.createRef(), 13200 onOpenChangeComplete: void 0, 13201 triggerElements: new PopupTriggerMap() 13202 }; 13203 } 13204 function createInitialState() { 13205 return { 13206 ...createInitialPopupStoreState(), 13207 disabled: false, 13208 modal: true, 13209 openMethod: null, 13210 allowMouseEnter: false, 13211 highlightItemOnHover: true, 13212 parent: { 13213 type: void 0 13214 }, 13215 rootId: void 0, 13216 activeIndex: null, 13217 hoverEnabled: true, 13218 instantType: void 0, 13219 openChangeReason: null, 13220 floatingTreeRoot: new FloatingTreeStore(), 13221 floatingNodeId: void 0, 13222 floatingParentNodeId: null, 13223 itemProps: EMPTY_OBJECT, 13224 keyboardEventRelay: void 0, 13225 closeDelay: 0, 13226 adaptiveOrigin: void 0 13227 }; 13228 } 13229 13230 // node_modules/@base-ui/react/menu/submenu-root/MenuSubmenuRootContext.mjs 13231 var React80 = __toESM(require_react(), 1); 13232 var MenuSubmenuRootContext = /* @__PURE__ */ React80.createContext(void 0); 13233 if (true) MenuSubmenuRootContext.displayName = "MenuSubmenuRootContext"; 13234 function useMenuSubmenuRootContext() { 13235 return React80.useContext(MenuSubmenuRootContext); 13236 } 13237 13238 // node_modules/@base-ui/react/menu/root/MenuRoot.mjs 13239 var import_jsx_runtime49 = __toESM(require_jsx_runtime(), 1); 13240 var MenuRoot = fastComponent(function MenuRoot2(props) { 13241 const { 13242 children, 13243 open: openProp, 13244 onOpenChange, 13245 onOpenChangeComplete, 13246 defaultOpen = false, 13247 disabled: disabledProp = false, 13248 modal: modalProp, 13249 loopFocus = true, 13250 orientation = "vertical", 13251 actionsRef, 13252 closeParentOnEsc = false, 13253 handle, 13254 triggerId: triggerIdProp, 13255 defaultTriggerId: defaultTriggerIdProp = null, 13256 highlightItemOnHover = true 13257 } = props; 13258 const contextMenuContext = useContextMenuRootContext(true); 13259 const parentMenuRootContext = useMenuRootContext(true); 13260 const menubarContext = useMenubarContext(true); 13261 const isSubmenu = useMenuSubmenuRootContext(); 13262 const parentFromContext = React81.useMemo(() => { 13263 if (isSubmenu && parentMenuRootContext) { 13264 return { 13265 type: "menu", 13266 store: parentMenuRootContext.store 13267 }; 13268 } 13269 if (menubarContext) { 13270 return { 13271 type: "menubar", 13272 context: menubarContext 13273 }; 13274 } 13275 if (contextMenuContext && !parentMenuRootContext) { 13276 return { 13277 type: "context-menu", 13278 context: contextMenuContext 13279 }; 13280 } 13281 return { 13282 type: void 0 13283 }; 13284 }, [contextMenuContext, parentMenuRootContext, menubarContext, isSubmenu]); 13285 const store = useMenuRootStore({ 13286 open: defaultOpen, 13287 openProp, 13288 activeTriggerId: defaultTriggerIdProp, 13289 triggerIdProp, 13290 parent: parentFromContext 13291 }); 13292 store.useControlledProp("openProp", openProp); 13293 store.useControlledProp("triggerIdProp", triggerIdProp); 13294 store.useContextCallback("onOpenChangeComplete", onOpenChangeComplete); 13295 const rootId = useId(); 13296 const floatingId = useId(); 13297 const floatingTreeRoot = store.useState("floatingTreeRoot"); 13298 const floatingNodeIdFromContext = useFloatingNodeId(floatingTreeRoot); 13299 const floatingParentNodeIdFromContext = useFloatingParentNodeId(); 13300 const open = store.useState("open"); 13301 const activeTriggerElement = store.useState("activeTriggerElement"); 13302 const positionerElement = store.useState("positionerElement"); 13303 const hoverEnabled = store.useState("hoverEnabled"); 13304 const disabled2 = store.useState("disabled"); 13305 const lastOpenChangeReason = store.useState("lastOpenChangeReason"); 13306 const parent = store.useState("parent"); 13307 const activeIndex = store.useState("activeIndex"); 13308 const payload = store.useState("payload"); 13309 const floatingParentNodeId = store.useState("floatingParentNodeId"); 13310 const openEventRef = React81.useRef(null); 13311 const allowOutsidePressDismissalRef = React81.useRef(parent.type !== "context-menu"); 13312 const allowOutsidePressDismissalTimeout = useTimeout(); 13313 const allowTouchToCloseRef = React81.useRef(true); 13314 const allowTouchToCloseTimeout = useTimeout(); 13315 const nested = floatingParentNodeId != null; 13316 if (true) { 13317 if (parent.type !== void 0 && modalProp !== void 0) { 13318 console.warn("Base UI: The `modal` prop is not supported on nested menus. It will be ignored."); 13319 } 13320 } 13321 const { 13322 openMethod, 13323 triggerProps: interactionTypeProps 13324 } = useOpenInteractionType(open); 13325 store.useSyncedValues({ 13326 disabled: disabledProp, 13327 highlightItemOnHover, 13328 modal: parent.type === void 0 ? modalProp : void 0, 13329 openMethod, 13330 rootId 13331 }); 13332 useImplicitActiveTrigger(store); 13333 const { 13334 forceUnmount 13335 } = useOpenStateTransitions(open, store, () => { 13336 store.set("allowMouseEnter", false); 13337 }); 13338 useIsoLayoutEffect(() => { 13339 if (contextMenuContext && !parentMenuRootContext) { 13340 store.update({ 13341 parent: { 13342 type: "context-menu", 13343 context: contextMenuContext 13344 }, 13345 floatingNodeId: floatingNodeIdFromContext, 13346 floatingParentNodeId: floatingParentNodeIdFromContext 13347 }); 13348 } else if (parentMenuRootContext) { 13349 store.update({ 13350 floatingNodeId: floatingNodeIdFromContext, 13351 floatingParentNodeId: floatingParentNodeIdFromContext 13352 }); 13353 } 13354 }, [contextMenuContext, parentMenuRootContext, floatingNodeIdFromContext, floatingParentNodeIdFromContext, store]); 13355 React81.useEffect(() => { 13356 if (!open) { 13357 openEventRef.current = null; 13358 } 13359 if (parent.type !== "context-menu") { 13360 return; 13361 } 13362 if (!open) { 13363 allowOutsidePressDismissalTimeout.clear(); 13364 allowOutsidePressDismissalRef.current = false; 13365 return; 13366 } 13367 allowOutsidePressDismissalTimeout.start(500, () => { 13368 allowOutsidePressDismissalRef.current = true; 13369 }); 13370 }, [allowOutsidePressDismissalTimeout, open, parent.type]); 13371 useIsoLayoutEffect(() => { 13372 if (!open && !hoverEnabled) { 13373 store.set("hoverEnabled", true); 13374 } 13375 }, [open, hoverEnabled, store]); 13376 const setOpen = useStableCallback((nextOpen, eventDetails) => { 13377 const reason = eventDetails.reason; 13378 if (!nextOpen && !store.select("open")) { 13379 return; 13380 } 13381 if (open === nextOpen && eventDetails.trigger === activeTriggerElement && lastOpenChangeReason === reason) { 13382 return; 13383 } 13384 const shouldPreventUnmountOnClose = attachPreventUnmountOnClose(eventDetails); 13385 if (!nextOpen && eventDetails.trigger == null) { 13386 eventDetails.trigger = activeTriggerElement ?? void 0; 13387 } 13388 onOpenChange?.(nextOpen, eventDetails); 13389 if (eventDetails.isCanceled) { 13390 return; 13391 } 13392 store.state.floatingRootContext.dispatchOpenChange(nextOpen, eventDetails); 13393 const nativeEvent = eventDetails.event; 13394 if (nextOpen === false && nativeEvent?.type === "click" && nativeEvent.pointerType === "touch" && !allowTouchToCloseRef.current) { 13395 return; 13396 } 13397 if (nextOpen && reason === reason_parts_exports.triggerFocus) { 13398 allowTouchToCloseRef.current = false; 13399 allowTouchToCloseTimeout.start(300, () => { 13400 allowTouchToCloseRef.current = true; 13401 }); 13402 } else { 13403 allowTouchToCloseRef.current = true; 13404 allowTouchToCloseTimeout.clear(); 13405 } 13406 const isKeyboardClick = (reason === reason_parts_exports.triggerPress || reason === reason_parts_exports.itemPress) && nativeEvent.detail === 0; 13407 const isDismissClose = !nextOpen && (reason === reason_parts_exports.escapeKey || reason == null); 13408 const updatedState = { 13409 open: nextOpen, 13410 openChangeReason: reason 13411 }; 13412 openEventRef.current = eventDetails.event; 13413 setPopupOpenState(updatedState, nextOpen, eventDetails.trigger, shouldPreventUnmountOnClose()); 13414 store.update(updatedState); 13415 if (parent.type === "menubar" && (reason === reason_parts_exports.triggerFocus || reason === reason_parts_exports.focusOut || reason === reason_parts_exports.triggerHover || reason === reason_parts_exports.listNavigation || reason === reason_parts_exports.siblingOpen)) { 13416 store.set("instantType", "group"); 13417 } else if (isKeyboardClick || isDismissClose) { 13418 store.set("instantType", isKeyboardClick ? "click" : "dismiss"); 13419 } else { 13420 store.set("instantType", void 0); 13421 } 13422 }); 13423 const floatingRootContext = useSyncedFloatingRootContext({ 13424 popupStore: store, 13425 floatingId, 13426 nested: floatingParentNodeIdFromContext != null, 13427 onOpenChange: setOpen 13428 }); 13429 const floatingEvents = floatingRootContext.context.events; 13430 useIsoLayoutEffect(() => { 13431 const handleSetOpenEvent = ({ 13432 open: nextOpen, 13433 eventDetails 13434 }) => setOpen(nextOpen, eventDetails); 13435 floatingEvents.on("setOpen", handleSetOpenEvent); 13436 return () => { 13437 floatingEvents?.off("setOpen", handleSetOpenEvent); 13438 }; 13439 }, [floatingEvents, setOpen]); 13440 const handleImperativeClose = React81.useCallback(() => { 13441 store.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction)); 13442 }, [store]); 13443 React81.useImperativeHandle(actionsRef, () => ({ 13444 unmount: forceUnmount, 13445 close: handleImperativeClose 13446 }), [forceUnmount, handleImperativeClose]); 13447 let ctx8; 13448 if (parent.type === "context-menu") { 13449 ctx8 = parent.context; 13450 } 13451 React81.useImperativeHandle(ctx8?.positionerRef, () => positionerElement, [positionerElement]); 13452 React81.useImperativeHandle(ctx8?.actionsRef, () => ({ 13453 setOpen 13454 }), [setOpen]); 13455 const dismiss = useDismiss(floatingRootContext, { 13456 enabled: !disabled2, 13457 bubbles: { 13458 escapeKey: closeParentOnEsc && parent.type === "menu" 13459 }, 13460 outsidePress() { 13461 if (parent.type !== "context-menu" || openEventRef.current?.type === "contextmenu") { 13462 return true; 13463 } 13464 return allowOutsidePressDismissalRef.current; 13465 }, 13466 externalTree: nested ? floatingTreeRoot : void 0 13467 }); 13468 const direction = useDirection(); 13469 const setActiveIndex = React81.useCallback((index2) => { 13470 if (store.select("activeIndex") === index2) { 13471 return; 13472 } 13473 store.set("activeIndex", index2); 13474 }, [store]); 13475 const listNavigation2 = useListNavigation(floatingRootContext, { 13476 enabled: !disabled2, 13477 listRef: store.context.itemDomElements, 13478 activeIndex, 13479 nested: parent.type !== void 0, 13480 loopFocus, 13481 orientation, 13482 parentOrientation: parent.type === "menubar" ? parent.context.orientation : void 0, 13483 rtl: direction === "rtl", 13484 disabledIndices: EMPTY_ARRAY, 13485 onNavigate: setActiveIndex, 13486 openOnArrowKeyDown: parent.type !== "context-menu", 13487 externalTree: nested ? floatingTreeRoot : void 0, 13488 focusItemOnHover: highlightItemOnHover 13489 }); 13490 const onTyping = React81.useCallback((nextTyping) => { 13491 store.context.typingRef.current = nextTyping; 13492 }, [store]); 13493 const typeahead = useTypeahead(floatingRootContext, { 13494 enabled: !disabled2, 13495 listRef: store.context.itemLabels, 13496 elementsRef: store.context.itemDomElements, 13497 activeIndex, 13498 resetMs: TYPEAHEAD_RESET_MS, 13499 onMatch: (index2) => { 13500 if (open && index2 !== activeIndex) { 13501 store.set("activeIndex", index2); 13502 } 13503 }, 13504 onTyping 13505 }); 13506 const activeTriggerProps = React81.useMemo(() => { 13507 const mergedProps = mergeProps(typeahead.reference, listNavigation2.reference, dismiss.reference, { 13508 onMouseMove() { 13509 store.set("allowMouseEnter", true); 13510 } 13511 }, interactionTypeProps); 13512 mergedProps["aria-haspopup"] = "menu"; 13513 mergedProps["aria-expanded"] = open; 13514 return mergedProps; 13515 }, [store, typeahead.reference, listNavigation2.reference, dismiss.reference, interactionTypeProps, open]); 13516 const inactiveTriggerProps = React81.useMemo(() => { 13517 const mergedProps = mergeProps(listNavigation2.trigger, dismiss.trigger, interactionTypeProps); 13518 mergedProps["aria-haspopup"] = "menu"; 13519 mergedProps["aria-expanded"] = false; 13520 return mergedProps; 13521 }, [listNavigation2.trigger, dismiss.trigger, interactionTypeProps]); 13522 const popupProps = React81.useMemo(() => mergeProps(FOCUSABLE_POPUP_PROPS, { 13523 id: floatingId, 13524 role: "menu", 13525 "aria-labelledby": activeTriggerElement?.id, 13526 onMouseMove() { 13527 store.set("allowMouseEnter", true); 13528 if (parent.type === "menu") { 13529 store.set("hoverEnabled", false); 13530 } 13531 }, 13532 onClick() { 13533 if (store.select("hoverEnabled")) { 13534 store.set("hoverEnabled", false); 13535 } 13536 }, 13537 onKeyDown(event) { 13538 const relay = store.select("keyboardEventRelay"); 13539 if (relay && !event.isPropagationStopped()) { 13540 relay(event); 13541 } 13542 } 13543 }, typeahead.floating, listNavigation2.floating, dismiss.floating), [activeTriggerElement, floatingId, parent.type, store, typeahead.floating, listNavigation2.floating, dismiss.floating]); 13544 const itemProps = listNavigation2.item ?? EMPTY_OBJECT; 13545 usePopupInteractionProps(store, { 13546 floatingRootContext, 13547 activeTriggerProps, 13548 inactiveTriggerProps, 13549 popupProps, 13550 itemProps 13551 }); 13552 const context = React81.useMemo(() => ({ 13553 store, 13554 parent: parentFromContext 13555 }), [store, parentFromContext]); 13556 const content = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(MenuRootContext.Provider, { 13557 value: context, 13558 children: [handle && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(PopupHandleAttachment, { 13559 handle, 13560 store 13561 }), typeof children === "function" ? children({ 13562 payload 13563 }) : children] 13564 }); 13565 if (parent.type === void 0 || parent.type === "context-menu") { 13566 return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(FloatingTree, { 13567 externalTree: floatingTreeRoot, 13568 children: content 13569 }); 13570 } 13571 return content; 13572 }); 13573 if (true) MenuRoot.displayName = "MenuRoot"; 13574 function useMenuRootStore(initialState) { 13575 const store = useRefWithInit(() => new MenuStore(initialState)).current; 13576 return store; 13577 } 13578 13579 // node_modules/@base-ui/react/menu/submenu-root/MenuSubmenuRoot.mjs 13580 var React82 = __toESM(require_react(), 1); 13581 var import_jsx_runtime50 = __toESM(require_jsx_runtime(), 1); 13582 function MenuSubmenuRoot(props) { 13583 const parentMenu = useMenuRootContext().store; 13584 const contextValue = React82.useMemo(() => ({ 13585 parentMenu 13586 }), [parentMenu]); 13587 return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(MenuSubmenuRootContext.Provider, { 13588 value: contextValue, 13589 children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(MenuRoot, { 13590 ...props 13591 }) 13592 }); 13593 } 13594 13595 // node_modules/@base-ui/react/menu/trigger/MenuTrigger.mjs 13596 var React86 = __toESM(require_react(), 1); 13597 13598 // node_modules/@base-ui/react/internals/composite/item/useCompositeItem.mjs 13599 var React83 = __toESM(require_react(), 1); 13600 function useCompositeItem(params = {}) { 13601 const { 13602 highlightItemOnHover, 13603 highlightedIndex, 13604 onHighlightedIndexChange 13605 } = useCompositeRootContext(); 13606 const { 13607 ref, 13608 index: index2 13609 } = useCompositeListItem(params); 13610 const isHighlighted = highlightedIndex === index2; 13611 const itemRef = React83.useRef(null); 13612 const mergedRef = useMergedRefs(ref, itemRef); 13613 const compositeProps = { 13614 tabIndex: isHighlighted ? 0 : -1, 13615 onFocus() { 13616 onHighlightedIndexChange(index2); 13617 }, 13618 onMouseMove() { 13619 const item = itemRef.current; 13620 if (!highlightItemOnHover || !item) { 13621 return; 13622 } 13623 const disabled2 = item.hasAttribute("disabled") || item.ariaDisabled === "true"; 13624 if (!isHighlighted && !disabled2) { 13625 item.focus(); 13626 } 13627 } 13628 }; 13629 return { 13630 compositeProps, 13631 compositeRef: mergedRef, 13632 index: index2 13633 }; 13634 } 13635 13636 // node_modules/@base-ui/react/internals/composite/item/CompositeItem.mjs 13637 function CompositeItem(componentProps) { 13638 const { 13639 render: render4, 13640 className, 13641 style, 13642 state = EMPTY_OBJECT, 13643 props = EMPTY_ARRAY, 13644 refs = EMPTY_ARRAY, 13645 metadata, 13646 stateAttributesMapping: stateAttributesMapping2, 13647 tag = "div", 13648 ...elementProps 13649 } = componentProps; 13650 const { 13651 compositeProps, 13652 compositeRef 13653 } = useCompositeItem({ 13654 metadata 13655 }); 13656 return useRenderElement(tag, componentProps, { 13657 state, 13658 // The composite ref attaches first so an outer item wins when nested items share a DOM node. 13659 ref: [compositeRef, ...refs], 13660 props: [compositeProps, ...props, elementProps], 13661 stateAttributesMapping: stateAttributesMapping2 13662 }); 13663 } 13664 13665 // node_modules/@base-ui/react/menu/utils/findRootOwnerId.mjs 13666 function findRootOwnerId(node) { 13667 if (isHTMLElement(node) && node.hasAttribute("data-rootownerid")) { 13668 return node.getAttribute("data-rootownerid"); 13669 } 13670 if (isLastTraversableNode(node)) { 13671 return void 0; 13672 } 13673 return findRootOwnerId(getParentNode(node)); 13674 } 13675 13676 // node_modules/@base-ui/react/utils/popups/useTriggerFocusGuards.mjs 13677 var React84 = __toESM(require_react(), 1); 13678 var ReactDOM6 = __toESM(require_react_dom(), 1); 13679 function useTriggerFocusGuards(store, triggerElementRef) { 13680 const preFocusGuardRef = React84.useRef(null); 13681 function handlePreFocusGuardFocus(event) { 13682 ReactDOM6.flushSync(() => { 13683 store.setOpen(false, createChangeEventDetails(reason_parts_exports.focusOut, event.nativeEvent, event.currentTarget)); 13684 }); 13685 const previousTabbable = getTabbableBeforeElement(preFocusGuardRef.current); 13686 previousTabbable?.focus(); 13687 } 13688 function handleFocusTargetFocus(event) { 13689 const positionerElement = store.select("positionerElement"); 13690 if (positionerElement && isOutsideEvent(event, positionerElement)) { 13691 store.context.beforeContentFocusGuardRef.current?.focus(); 13692 } else { 13693 ReactDOM6.flushSync(() => { 13694 store.setOpen(false, createChangeEventDetails(reason_parts_exports.focusOut, event.nativeEvent, event.currentTarget)); 13695 }); 13696 let nextTabbable = getTabbableAfterElement(store.context.triggerFocusTargetRef.current || triggerElementRef.current); 13697 while (nextTabbable !== null && contains(positionerElement, nextTabbable)) { 13698 const prevTabbable = nextTabbable; 13699 nextTabbable = getNextTabbable(nextTabbable); 13700 if (nextTabbable === prevTabbable) { 13701 break; 13702 } 13703 } 13704 nextTabbable?.focus(); 13705 } 13706 } 13707 return { 13708 preFocusGuardRef, 13709 handlePreFocusGuardFocus, 13710 handleFocusTargetFocus 13711 }; 13712 } 13713 13714 // node_modules/@base-ui/react/utils/useMixedToggleClickHandler.mjs 13715 var React85 = __toESM(require_react(), 1); 13716 function useMixedToggleClickHandler(params) { 13717 const { 13718 enabled = true, 13719 mouseDownAction, 13720 open 13721 } = params; 13722 const ignoreClickRef = React85.useRef(false); 13723 return React85.useMemo(() => { 13724 if (!enabled) { 13725 return EMPTY_OBJECT; 13726 } 13727 return { 13728 onMouseDown: (event) => { 13729 if (mouseDownAction === "open" && !open || mouseDownAction === "close" && open) { 13730 ignoreClickRef.current = true; 13731 ownerDocument(event.currentTarget).addEventListener("click", () => { 13732 ignoreClickRef.current = false; 13733 }, { 13734 once: true 13735 }); 13736 } 13737 }, 13738 onClick: (event) => { 13739 if (ignoreClickRef.current) { 13740 ignoreClickRef.current = false; 13741 event.preventBaseUIHandler(); 13742 } 13743 } 13744 }; 13745 }, [enabled, mouseDownAction, open]); 13746 } 13747 13748 // node_modules/@base-ui/react/menu/trigger/MenuTrigger.mjs 13749 var import_jsx_runtime51 = __toESM(require_jsx_runtime(), 1); 13750 var MenuTrigger = fastComponentRef(function MenuTrigger2(componentProps, forwardedRef) { 13751 const { 13752 render: render4, 13753 className, 13754 style, 13755 disabled: disabledProp = false, 13756 nativeButton = true, 13757 id: idProp, 13758 openOnHover: openOnHoverProp, 13759 delay = 100, 13760 closeDelay = 0, 13761 handle, 13762 payload, 13763 ...elementProps 13764 } = componentProps; 13765 const rootContext = useMenuRootContext(true); 13766 const handleStore = usePopupHandleStore(handle); 13767 const store = handleStore ?? rootContext?.store; 13768 if (!store) { 13769 throw new Error(true ? "Base UI: <Menu.Trigger> must be either used within a <Menu.Root> component or provided with a handle." : formatErrorMessage_default(85)); 13770 } 13771 const thisTriggerId = useBaseUiId(idProp); 13772 const isTriggerActive = store.useState("isTriggerActive", thisTriggerId); 13773 const floatingRootContext = store.useState("floatingRootContext"); 13774 const isOpenedByThisTrigger = store.useState("isOpenedByTrigger", thisTriggerId); 13775 const popupId = store.useState("triggerPopupId", thisTriggerId); 13776 const triggerElementRef = React86.useRef(null); 13777 const parent = useMenuParent(); 13778 const compositeRootContext = useCompositeRootContext(true); 13779 const floatingTreeRootFromContext = useFloatingTree(); 13780 const floatingTreeRoot = React86.useMemo(() => { 13781 return floatingTreeRootFromContext ?? new FloatingTreeStore(); 13782 }, [floatingTreeRootFromContext]); 13783 const floatingNodeId = useFloatingNodeId(floatingTreeRoot); 13784 const floatingParentNodeId = useFloatingParentNodeId(); 13785 const { 13786 registerTrigger, 13787 isMountedByThisTrigger 13788 } = useTriggerDataForwarding(thisTriggerId, triggerElementRef, store, { 13789 payload, 13790 closeDelay, 13791 parent, 13792 floatingTreeRoot, 13793 floatingNodeId, 13794 floatingParentNodeId, 13795 keyboardEventRelay: compositeRootContext?.relayKeyboardEvent 13796 }); 13797 const isInMenubar = parent.type === "menubar"; 13798 const rootDisabled = store.useState("disabled"); 13799 const disabled2 = disabledProp || rootDisabled || isInMenubar && parent.context.disabled; 13800 const { 13801 getButtonProps, 13802 buttonRef 13803 } = useButton({ 13804 disabled: disabled2, 13805 native: nativeButton 13806 }); 13807 React86.useEffect(() => { 13808 if (!isOpenedByThisTrigger && parent.type === void 0) { 13809 store.context.allowMouseUpTriggerRef.current = false; 13810 } 13811 }, [store, isOpenedByThisTrigger, parent.type]); 13812 const triggerRef = React86.useRef(null); 13813 const allowMouseUpTriggerTimeout = useTimeout(); 13814 const handleDocumentMouseUp = useStableCallback((mouseEvent) => { 13815 if (!triggerRef.current) { 13816 return; 13817 } 13818 allowMouseUpTriggerTimeout.clear(); 13819 store.context.allowMouseUpTriggerRef.current = false; 13820 const mouseUpTarget = mouseEvent.target; 13821 if (contains(triggerRef.current, mouseUpTarget) || contains(store.select("positionerElement"), mouseUpTarget) || mouseUpTarget === triggerRef.current) { 13822 return; 13823 } 13824 if (mouseUpTarget != null && findRootOwnerId(mouseUpTarget) === store.select("rootId")) { 13825 return; 13826 } 13827 if (isMouseWithinBounds(mouseEvent, triggerRef.current)) { 13828 return; 13829 } 13830 floatingTreeRoot.events.emit("close", { 13831 domEvent: mouseEvent, 13832 reason: reason_parts_exports.cancelOpen 13833 }); 13834 }); 13835 React86.useEffect(() => { 13836 if (isOpenedByThisTrigger && store.select("lastOpenChangeReason") === reason_parts_exports.triggerHover) { 13837 const doc = ownerDocument(triggerRef.current); 13838 doc.addEventListener("mouseup", handleDocumentMouseUp, { 13839 once: true 13840 }); 13841 } 13842 }, [isOpenedByThisTrigger, handleDocumentMouseUp, store]); 13843 const parentMenubarHasSubmenuOpen = isInMenubar && parent.context.hasSubmenuOpen; 13844 const openOnHover = openOnHoverProp ?? parentMenubarHasSubmenuOpen; 13845 const hoverProps = useHoverReferenceInteraction(floatingRootContext, { 13846 enabled: openOnHover && !disabled2 && (!isInMenubar || parentMenubarHasSubmenuOpen && !isMountedByThisTrigger), 13847 handleClose: safePolygon({ 13848 blockPointerEvents: !isInMenubar 13849 }), 13850 mouseOnly: true, 13851 move: false, 13852 restMs: parent.type === void 0 ? delay : void 0, 13853 delay: { 13854 close: closeDelay 13855 }, 13856 triggerElementRef, 13857 externalTree: floatingTreeRoot, 13858 isActiveTrigger: isTriggerActive, 13859 isClosing: () => store.select("transitionStatus") === "ending" 13860 }); 13861 const stickIfOpen = useStickIfOpen(isOpenedByThisTrigger, store.select("lastOpenChangeReason")); 13862 const click = useClick(floatingRootContext, { 13863 enabled: !disabled2, 13864 event: isOpenedByThisTrigger && isInMenubar ? "click" : "mousedown", 13865 toggle: true, 13866 ignoreMouse: false, 13867 stickIfOpen: parent.type === void 0 ? stickIfOpen : false 13868 }); 13869 const focus = useFocus(floatingRootContext, { 13870 enabled: !disabled2 && parentMenubarHasSubmenuOpen 13871 }); 13872 const mixedToggleHandlers = useMixedToggleClickHandler({ 13873 open: isOpenedByThisTrigger, 13874 enabled: isInMenubar, 13875 mouseDownAction: "open" 13876 }); 13877 const localInteractionProps = React86.useMemo(() => mergeProps(focus.reference, click.reference), [focus.reference, click.reference]); 13878 const rootTriggerProps = store.useState("triggerProps", isMountedByThisTrigger); 13879 const { 13880 preFocusGuardRef, 13881 handlePreFocusGuardFocus, 13882 handleFocusTargetFocus 13883 } = useTriggerFocusGuards(store, triggerElementRef); 13884 const state = { 13885 disabled: disabled2, 13886 open: isOpenedByThisTrigger 13887 }; 13888 const ref = [triggerRef, forwardedRef, buttonRef, registerTrigger, triggerElementRef]; 13889 const props = [localInteractionProps, hoverProps ?? EMPTY_OBJECT, rootTriggerProps, { 13890 "aria-haspopup": "menu", 13891 "aria-controls": popupId, 13892 id: thisTriggerId, 13893 onMouseDown: (event) => { 13894 if (store.select("open")) { 13895 return; 13896 } 13897 allowMouseUpTriggerTimeout.start(200, () => { 13898 store.context.allowMouseUpTriggerRef.current = true; 13899 }); 13900 const doc = ownerDocument(event.currentTarget); 13901 doc.addEventListener("mouseup", handleDocumentMouseUp, { 13902 once: true 13903 }); 13904 } 13905 }, isInMenubar ? { 13906 role: "menuitem" 13907 } : {}, mixedToggleHandlers, elementProps, getButtonProps]; 13908 const element = useRenderElement("button", componentProps, { 13909 enabled: !isInMenubar, 13910 stateAttributesMapping: pressableTriggerOpenStateMapping, 13911 state, 13912 ref, 13913 props 13914 }); 13915 if (isInMenubar) { 13916 return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(CompositeItem, { 13917 tag: "button", 13918 render: render4, 13919 className, 13920 style, 13921 state, 13922 refs: ref, 13923 props, 13924 stateAttributesMapping: pressableTriggerOpenStateMapping 13925 }); 13926 } 13927 if (isOpenedByThisTrigger) { 13928 return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(React86.Fragment, { 13929 children: [/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(FocusGuard, { 13930 ref: preFocusGuardRef, 13931 onFocus: handlePreFocusGuardFocus 13932 }, `$thisTriggerId}-pre-focus-guard`), /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(React86.Fragment, { 13933 children: element 13934 }, thisTriggerId), /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(FocusGuard, { 13935 ref: store.context.triggerFocusTargetRef, 13936 onFocus: handleFocusTargetFocus 13937 }, `$thisTriggerId}-post-focus-guard`)] 13938 }); 13939 } 13940 return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(React86.Fragment, { 13941 children: element 13942 }, thisTriggerId); 13943 }); 13944 if (true) MenuTrigger.displayName = "MenuTrigger"; 13945 function useStickIfOpen(open, openReason) { 13946 const stickIfOpenTimeout = useTimeout(); 13947 const [stickIfOpen, setStickIfOpen] = React86.useState(false); 13948 useIsoLayoutEffect(() => { 13949 if (open && openReason === reason_parts_exports.triggerHover) { 13950 setStickIfOpen(true); 13951 stickIfOpenTimeout.start(PATIENT_CLICK_THRESHOLD, () => { 13952 setStickIfOpen(false); 13953 }); 13954 } else if (!open) { 13955 stickIfOpenTimeout.clear(); 13956 setStickIfOpen(false); 13957 } 13958 }, [open, openReason, stickIfOpenTimeout]); 13959 return stickIfOpen; 13960 } 13961 function useMenuParent() { 13962 const menubarContext = useMenubarContext(true); 13963 const parent = React86.useMemo(() => { 13964 if (menubarContext) { 13965 return { 13966 type: "menubar", 13967 context: menubarContext 13968 }; 13969 } 13970 return { 13971 type: void 0 13972 }; 13973 }, [menubarContext]); 13974 return parent; 13975 } 13976 13977 // node_modules/@base-ui/react/menu/viewport/MenuViewport.mjs 13978 var React91 = __toESM(require_react(), 1); 13979 13980 // node_modules/@base-ui/react/utils/usePopupViewport.mjs 13981 var React90 = __toESM(require_react(), 1); 13982 var ReactDOM7 = __toESM(require_react_dom(), 1); 13983 13984 // node_modules/@base-ui/utils/usePreviousValue.mjs 13985 var React87 = __toESM(require_react(), 1); 13986 function usePreviousValue(value) { 13987 const [state, setState] = React87.useState({ 13988 current: value, 13989 previous: null 13990 }); 13991 if (!Object.is(value, state.current)) { 13992 setState({ 13993 current: value, 13994 previous: state.current 13995 }); 13996 } 13997 return state.previous; 13998 } 13999 14000 // node_modules/@base-ui/react/utils/usePopupAutoResize.mjs 14001 var React88 = __toESM(require_react(), 1); 14002 14003 // node_modules/@base-ui/react/utils/getCssDimensions.mjs 14004 function getCssDimensions2(element) { 14005 const css = getComputedStyle2(element); 14006 let width = parseFloat(css.width) || 0; 14007 let height = parseFloat(css.height) || 0; 14008 const hasOffset = isHTMLElement(element); 14009 const offsetWidth = hasOffset ? element.offsetWidth : width; 14010 const offsetHeight = hasOffset ? element.offsetHeight : height; 14011 const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight; 14012 if (shouldFallback) { 14013 width = offsetWidth; 14014 height = offsetHeight; 14015 } 14016 return { 14017 width, 14018 height 14019 }; 14020 } 14021 14022 // node_modules/@base-ui/react/utils/usePopupAutoResize.mjs 14023 function usePopupAutoResize(parameters) { 14024 const { 14025 popupElement, 14026 positionerElement, 14027 content, 14028 mounted, 14029 onMeasureLayout: onMeasureLayoutParam, 14030 onMeasureLayoutComplete: onMeasureLayoutCompleteParam, 14031 side, 14032 direction 14033 } = parameters; 14034 const runOnceAnimationsFinish = useAnimationsFinished(popupElement, true); 14035 const animationFrame = useAnimationFrame(); 14036 const committedDimensionsRef = React88.useRef(null); 14037 const isInitialRenderRef = React88.useRef(true); 14038 const restoreAnchoringStylesRef = React88.useRef(NOOP); 14039 const onMeasureLayout = useStableCallback(onMeasureLayoutParam); 14040 const onMeasureLayoutComplete = useStableCallback(onMeasureLayoutCompleteParam); 14041 const anchoringStyles = React88.useMemo(() => getPopupAnchoringStyles(side, direction), [side, direction]); 14042 useIsoLayoutEffect(() => { 14043 if (!mounted) { 14044 restoreAnchoringStylesRef.current = NOOP; 14045 isInitialRenderRef.current = true; 14046 committedDimensionsRef.current = null; 14047 return void 0; 14048 } 14049 if (!popupElement || !positionerElement) { 14050 return void 0; 14051 } 14052 restoreAnchoringStylesRef.current = applyElementStyles(popupElement, anchoringStyles); 14053 setPopupCssSize(popupElement, "auto"); 14054 const restorePopupPosition = overrideElementStyle(popupElement, "position", "static"); 14055 const restorePopupTransform = overrideElementStyle(popupElement, "transform", "none"); 14056 const restorePopupScale = overrideElementStyle(popupElement, "scale", "1"); 14057 const restorePositionerAvailableSize = applyElementStyles(positionerElement, { 14058 "--available-width": "max-content", 14059 "--available-height": "max-content" 14060 }); 14061 function restoreMeasurementOverrides() { 14062 restorePopupPosition(); 14063 restorePopupTransform(); 14064 restorePositionerAvailableSize(); 14065 } 14066 function restoreMeasurementOverridesIncludingScale() { 14067 restoreMeasurementOverrides(); 14068 restorePopupScale(); 14069 } 14070 onMeasureLayout?.(); 14071 if (isInitialRenderRef.current || committedDimensionsRef.current === null) { 14072 setPositionerCssSize(positionerElement, "max-content"); 14073 const dimensions = getCssDimensions2(popupElement); 14074 committedDimensionsRef.current = dimensions; 14075 setPositionerCssSize(positionerElement, dimensions); 14076 restoreMeasurementOverridesIncludingScale(); 14077 onMeasureLayoutComplete?.(null, dimensions); 14078 isInitialRenderRef.current = false; 14079 return () => { 14080 restoreAnchoringStylesRef.current(); 14081 restoreAnchoringStylesRef.current = NOOP; 14082 }; 14083 } 14084 setPositionerCssSize(positionerElement, "max-content"); 14085 const previousDimensions = committedDimensionsRef.current; 14086 const newDimensions = getCssDimensions2(popupElement); 14087 committedDimensionsRef.current = newDimensions; 14088 setPopupCssSize(popupElement, previousDimensions); 14089 restoreMeasurementOverridesIncludingScale(); 14090 onMeasureLayoutComplete?.(previousDimensions, newDimensions); 14091 setPositionerCssSize(positionerElement, newDimensions); 14092 const abortController = new AbortController(); 14093 animationFrame.request(() => { 14094 setPopupCssSize(popupElement, newDimensions); 14095 runOnceAnimationsFinish(() => { 14096 popupElement.style.setProperty("--popup-width", "auto"); 14097 popupElement.style.setProperty("--popup-height", "auto"); 14098 }, abortController.signal); 14099 }); 14100 return () => { 14101 abortController.abort(); 14102 animationFrame.cancel(); 14103 restoreAnchoringStylesRef.current(); 14104 restoreAnchoringStylesRef.current = NOOP; 14105 }; 14106 }, [content, popupElement, positionerElement, runOnceAnimationsFinish, animationFrame, mounted, onMeasureLayout, onMeasureLayoutComplete, anchoringStyles]); 14107 } 14108 function getPopupAnchoringStyles(side, direction) { 14109 const isPhysicalTop = side === "top"; 14110 const isPhysicalLeft = side === "left" || side === (direction === "rtl" ? "inline-end" : "inline-start"); 14111 if (!isPhysicalTop && !isPhysicalLeft) { 14112 return EMPTY_OBJECT; 14113 } 14114 return { 14115 position: "absolute", 14116 [isPhysicalTop ? "bottom" : "top"]: "0", 14117 [isPhysicalLeft ? "right" : "left"]: "0" 14118 }; 14119 } 14120 function overrideElementStyle(element, property, value) { 14121 const originalValue = element.style.getPropertyValue(property); 14122 element.style.setProperty(property, value); 14123 return () => { 14124 element.style.setProperty(property, originalValue); 14125 }; 14126 } 14127 function applyElementStyles(element, styles) { 14128 const restorers = []; 14129 for (const [key, value] of Object.entries(styles)) { 14130 restorers.push(overrideElementStyle(element, key, value)); 14131 } 14132 return restorers.length ? () => { 14133 restorers.forEach((restore) => restore()); 14134 } : NOOP; 14135 } 14136 function setPopupCssSize(popupElement, size4) { 14137 const width = size4 === "auto" ? "auto" : `$size4.width}px`; 14138 const height = size4 === "auto" ? "auto" : `$size4.height}px`; 14139 popupElement.style.setProperty("--popup-width", width); 14140 popupElement.style.setProperty("--popup-height", height); 14141 } 14142 function setPositionerCssSize(positionerElement, size4) { 14143 const width = size4 === "max-content" ? "max-content" : `$size4.width}px`; 14144 const height = size4 === "max-content" ? "max-content" : `$size4.height}px`; 14145 positionerElement.style.setProperty("--positioner-width", width); 14146 positionerElement.style.setProperty("--positioner-height", height); 14147 } 14148 14149 // node_modules/@base-ui/react/direction-provider/DirectionProvider.mjs 14150 var React89 = __toESM(require_react(), 1); 14151 var import_jsx_runtime52 = __toESM(require_jsx_runtime(), 1); 14152 var DirectionProvider = function DirectionProvider2(props) { 14153 const { 14154 direction = "ltr" 14155 } = props; 14156 const contextValue = React89.useMemo(() => ({ 14157 direction 14158 }), [direction]); 14159 return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(DirectionContext.Provider, { 14160 value: contextValue, 14161 children: props.children 14162 }); 14163 }; 14164 if (true) DirectionProvider.displayName = "DirectionProvider"; 14165 14166 // node_modules/@base-ui/react/utils/adaptiveOriginMiddleware.mjs 14167 var adaptiveOrigin = { 14168 name: "adaptiveOrigin", 14169 async fn(state) { 14170 const { 14171 x: rawX, 14172 y: rawY, 14173 rects: { 14174 floating: floatRect 14175 }, 14176 elements: { 14177 floating 14178 }, 14179 platform: platform3, 14180 strategy, 14181 placement 14182 } = state; 14183 const win = getWindow(floating); 14184 const styles = win.getComputedStyle(floating); 14185 const hasTransition = styles.transitionDuration !== "0s" && styles.transitionDuration !== ""; 14186 if (!hasTransition) { 14187 return { 14188 x: rawX, 14189 y: rawY, 14190 data: DEFAULT_SIDES 14191 }; 14192 } 14193 const offsetParent = await platform3.getOffsetParent?.(floating); 14194 let offsetDimensions = { 14195 width: 0, 14196 height: 0 14197 }; 14198 if (strategy === "fixed" && win?.visualViewport) { 14199 offsetDimensions = { 14200 width: win.visualViewport.width, 14201 height: win.visualViewport.height 14202 }; 14203 } else if (offsetParent === win) { 14204 const doc = ownerDocument(floating); 14205 offsetDimensions = { 14206 width: doc.documentElement.clientWidth, 14207 height: doc.documentElement.clientHeight 14208 }; 14209 } else if (await platform3.isElement?.(offsetParent)) { 14210 offsetDimensions = await platform3.getDimensions(offsetParent); 14211 } 14212 const currentSide = getSide(placement); 14213 let x2 = rawX; 14214 let y2 = rawY; 14215 if (currentSide === "left") { 14216 x2 = offsetDimensions.width - (rawX + floatRect.width); 14217 } 14218 if (currentSide === "top") { 14219 y2 = offsetDimensions.height - (rawY + floatRect.height); 14220 } 14221 const sideX = currentSide === "left" ? "right" : DEFAULT_SIDES.sideX; 14222 const sideY = currentSide === "top" ? "bottom" : DEFAULT_SIDES.sideY; 14223 return { 14224 x: x2, 14225 y: y2, 14226 data: { 14227 sideX, 14228 sideY 14229 } 14230 }; 14231 } 14232 }; 14233 14234 // node_modules/@base-ui/react/utils/usePopupViewport.mjs 14235 var import_jsx_runtime53 = __toESM(require_jsx_runtime(), 1); 14236 var popupViewportStateMapping = { 14237 activationDirection: (value) => value ? { 14238 "data-activation-direction": value 14239 } : null 14240 }; 14241 function usePopupViewport(parameters) { 14242 const { 14243 store, 14244 side, 14245 children 14246 } = parameters; 14247 const direction = useDirection(); 14248 const activeTrigger = store.useState("activeTriggerElement"); 14249 const activeTriggerId = store.useState("activeTriggerId"); 14250 const open = store.useState("open"); 14251 const payload = store.useState("payload"); 14252 const mounted = store.useState("mounted"); 14253 const popupElement = store.useState("popupElement"); 14254 const positionerElement = store.useState("positionerElement"); 14255 const previousActiveTrigger = usePreviousValue(open ? activeTrigger : null); 14256 const currentContentKey = usePopupContentKey(activeTriggerId, payload); 14257 const capturedNodeRef = React90.useRef(null); 14258 const [previousContentNode, setPreviousContentNode] = React90.useState(null); 14259 const [newTriggerOffset, setNewTriggerOffset] = React90.useState(null); 14260 const currentContainerRef = React90.useRef(null); 14261 const previousContainerRef = React90.useRef(null); 14262 const onAnimationsFinished = useAnimationsFinished(currentContainerRef, true); 14263 const cleanupFrame = useAnimationFrame(); 14264 const cleanupControllerRef = React90.useRef(null); 14265 const [previousContentDimensions, setPreviousContentDimensions] = React90.useState(null); 14266 const [showStartingStyleAttribute, setShowStartingStyleAttribute] = React90.useState(false); 14267 useIsoLayoutEffect(() => { 14268 store.set("adaptiveOrigin", adaptiveOrigin); 14269 return () => { 14270 store.set("adaptiveOrigin", void 0); 14271 }; 14272 }, [store]); 14273 const handleMeasureLayout = useStableCallback(() => { 14274 currentContainerRef.current?.style.setProperty("animation", "none"); 14275 currentContainerRef.current?.style.setProperty("transition", "none"); 14276 previousContainerRef.current?.style.setProperty("display", "none"); 14277 }); 14278 const handleMeasureLayoutComplete = useStableCallback((previousDimensions) => { 14279 currentContainerRef.current?.style.removeProperty("animation"); 14280 currentContainerRef.current?.style.removeProperty("transition"); 14281 previousContainerRef.current?.style.removeProperty("display"); 14282 if (previousDimensions) { 14283 setPreviousContentDimensions(previousDimensions); 14284 } 14285 }); 14286 const armViewportCleanup = useStableCallback(() => { 14287 cleanupControllerRef.current?.abort(); 14288 const controller = new AbortController(); 14289 cleanupControllerRef.current = controller; 14290 onAnimationsFinished(() => { 14291 setPreviousContentNode(null); 14292 setPreviousContentDimensions(null); 14293 capturedNodeRef.current = null; 14294 }, controller.signal); 14295 }); 14296 const lastHandledTriggerRef = React90.useRef(null); 14297 useIsoLayoutEffect(() => { 14298 if (!open || !mounted) { 14299 lastHandledTriggerRef.current = null; 14300 } 14301 }, [open, mounted]); 14302 useIsoLayoutEffect(() => { 14303 if (activeTrigger && previousActiveTrigger && activeTrigger !== previousActiveTrigger && lastHandledTriggerRef.current !== activeTrigger && capturedNodeRef.current) { 14304 setPreviousContentNode(capturedNodeRef.current); 14305 setShowStartingStyleAttribute(true); 14306 const offset4 = calculateRelativePosition(previousActiveTrigger, activeTrigger); 14307 setNewTriggerOffset(offset4); 14308 lastHandledTriggerRef.current = activeTrigger; 14309 } 14310 }, [activeTrigger, previousActiveTrigger]); 14311 useIsoLayoutEffect(() => { 14312 if (previousContentNode == null) { 14313 return; 14314 } 14315 cleanupControllerRef.current?.abort(); 14316 setShowStartingStyleAttribute(true); 14317 cleanupFrame.request(() => { 14318 ReactDOM7.flushSync(() => { 14319 setShowStartingStyleAttribute(false); 14320 }); 14321 armViewportCleanup(); 14322 }); 14323 }, [currentContentKey, previousContentNode, armViewportCleanup, cleanupFrame]); 14324 useIsoLayoutEffect(() => { 14325 const source = currentContainerRef.current; 14326 if (!source) { 14327 return; 14328 } 14329 const wrapper = ownerDocument(source).createElement("div"); 14330 for (const child of Array.from(source.childNodes)) { 14331 wrapper.appendChild(child.cloneNode(true)); 14332 } 14333 capturedNodeRef.current = wrapper; 14334 }); 14335 const isTransitioning = previousContentNode != null; 14336 let childrenToRender; 14337 if (!isTransitioning) { 14338 childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { 14339 "data-current": true, 14340 ref: currentContainerRef, 14341 children 14342 }, currentContentKey); 14343 } else { 14344 childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(React90.Fragment, { 14345 children: [/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { 14346 "data-previous": true, 14347 inert: inertValue(true), 14348 ref: previousContainerRef, 14349 style: { 14350 ...previousContentDimensions ? { 14351 "--popup-width": `$previousContentDimensions.width}px`, 14352 "--popup-height": `$previousContentDimensions.height}px` 14353 } : null, 14354 position: "absolute" 14355 }, 14356 "data-ending-style": showStartingStyleAttribute ? void 0 : "" 14357 }, "previous"), /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { 14358 "data-current": true, 14359 ref: currentContainerRef, 14360 "data-starting-style": showStartingStyleAttribute ? "" : void 0, 14361 children 14362 }, currentContentKey)] 14363 }); 14364 } 14365 useIsoLayoutEffect(() => { 14366 const container = previousContainerRef.current; 14367 if (!container || !previousContentNode) { 14368 return; 14369 } 14370 container.replaceChildren(...Array.from(previousContentNode.childNodes)); 14371 }, [previousContentNode]); 14372 usePopupAutoResize({ 14373 popupElement, 14374 positionerElement, 14375 mounted, 14376 content: payload, 14377 onMeasureLayout: handleMeasureLayout, 14378 onMeasureLayoutComplete: handleMeasureLayoutComplete, 14379 side, 14380 direction 14381 }); 14382 const state = { 14383 activationDirection: getActivationDirection(newTriggerOffset), 14384 transitioning: isTransitioning 14385 }; 14386 return { 14387 children: childrenToRender, 14388 state 14389 }; 14390 } 14391 function getActivationDirection(offset4) { 14392 if (!offset4) { 14393 return void 0; 14394 } 14395 return `$getValueWithTolerance(offset4.horizontal, 5, "right", "left")} $getValueWithTolerance(offset4.vertical, 5, "down", "up")}`; 14396 } 14397 function getValueWithTolerance(value, tolerance, positiveLabel, negativeLabel) { 14398 if (value > tolerance) { 14399 return positiveLabel; 14400 } 14401 if (value < -tolerance) { 14402 return negativeLabel; 14403 } 14404 return ""; 14405 } 14406 function calculateRelativePosition(from, to) { 14407 const fromRect = from.getBoundingClientRect(); 14408 const toRect = to.getBoundingClientRect(); 14409 const fromCenter = { 14410 x: fromRect.left + fromRect.width / 2, 14411 y: fromRect.top + fromRect.height / 2 14412 }; 14413 const toCenter = { 14414 x: toRect.left + toRect.width / 2, 14415 y: toRect.top + toRect.height / 2 14416 }; 14417 return { 14418 horizontal: toCenter.x - fromCenter.x, 14419 vertical: toCenter.y - fromCenter.y 14420 }; 14421 } 14422 function usePopupContentKey(activeTriggerId, payload) { 14423 const [contentKey, setContentKey] = React90.useState(0); 14424 const previousActiveTriggerIdRef = React90.useRef(activeTriggerId); 14425 const previousPayloadRef = React90.useRef(payload); 14426 const pendingPayloadUpdateRef = React90.useRef(false); 14427 useIsoLayoutEffect(() => { 14428 const previousActiveTriggerId = previousActiveTriggerIdRef.current; 14429 const previousPayload = previousPayloadRef.current; 14430 const triggerIdChanged = activeTriggerId !== previousActiveTriggerId; 14431 const payloadChanged = payload !== previousPayload; 14432 if (triggerIdChanged) { 14433 setContentKey((value) => value + 1); 14434 pendingPayloadUpdateRef.current = !payloadChanged; 14435 } else if (pendingPayloadUpdateRef.current && payloadChanged) { 14436 setContentKey((value) => value + 1); 14437 pendingPayloadUpdateRef.current = false; 14438 } 14439 previousActiveTriggerIdRef.current = activeTriggerId; 14440 previousPayloadRef.current = payload; 14441 }, [activeTriggerId, payload]); 14442 return `$activeTriggerId ?? "current"}-$contentKey}`; 14443 } 14444 14445 // node_modules/@base-ui/react/menu/viewport/MenuViewport.mjs 14446 var MenuViewport = /* @__PURE__ */ React91.forwardRef(function MenuViewport2(componentProps, forwardedRef) { 14447 const { 14448 render: render4, 14449 className, 14450 style, 14451 children, 14452 ...elementProps 14453 } = componentProps; 14454 const { 14455 store 14456 } = useMenuRootContext(); 14457 const { 14458 side 14459 } = useMenuPositionerContext(); 14460 const instantType = store.useState("instantType"); 14461 const { 14462 children: childrenToRender, 14463 state: viewportState 14464 } = usePopupViewport({ 14465 store, 14466 side, 14467 children 14468 }); 14469 const state = { 14470 activationDirection: viewportState.activationDirection, 14471 transitioning: viewportState.transitioning, 14472 instant: instantType 14473 }; 14474 return useRenderElement("div", componentProps, { 14475 state, 14476 ref: forwardedRef, 14477 props: [elementProps, { 14478 children: childrenToRender 14479 }], 14480 stateAttributesMapping: popupViewportStateMapping 14481 }); 14482 }); 14483 if (true) MenuViewport.displayName = "MenuViewport"; 14484 14485 // node_modules/@base-ui/react/separator/Separator.mjs 14486 var React92 = __toESM(require_react(), 1); 14487 var Separator = /* @__PURE__ */ React92.forwardRef(function SeparatorComponent(componentProps, forwardedRef) { 14488 const { 14489 className, 14490 render: render4, 14491 orientation = "horizontal", 14492 style, 14493 ...elementProps 14494 } = componentProps; 14495 const state = { 14496 orientation 14497 }; 14498 const element = useRenderElement("div", componentProps, { 14499 state, 14500 ref: forwardedRef, 14501 props: [{ 14502 role: "separator", 14503 "aria-orientation": orientation 14504 }, elementProps] 14505 }); 14506 return element; 14507 }); 14508 if (true) Separator.displayName = "Separator"; 14509 14510 // node_modules/@base-ui/react/menu/submenu-trigger/MenuSubmenuTrigger.mjs 14511 var React93 = __toESM(require_react(), 1); 14512 14513 // node_modules/@base-ui/utils/isElementDisabled.mjs 14514 function isElementDisabled(element) { 14515 return element == null || element.hasAttribute("disabled") || element.getAttribute("aria-disabled") === "true"; 14516 } 14517 14518 // node_modules/@base-ui/react/menu/submenu-trigger/MenuSubmenuTrigger.mjs 14519 var VOICE_OVER_EXPANDED_PROPS = { 14520 "aria-expanded": void 0 14521 }; 14522 var MenuSubmenuTrigger = /* @__PURE__ */ React93.forwardRef(function MenuSubmenuTrigger2(componentProps, forwardedRef) { 14523 const { 14524 render: render4, 14525 className, 14526 style, 14527 label, 14528 id: idProp, 14529 nativeButton = false, 14530 openOnHover = true, 14531 delay = 100, 14532 closeDelay = 0, 14533 disabled: disabledProp = false, 14534 ...elementProps 14535 } = componentProps; 14536 const submenuRootContext = useMenuSubmenuRootContext(); 14537 if (!submenuRootContext?.parentMenu) { 14538 throw new Error(true ? "Base UI: <Menu.SubmenuTrigger> must be placed in <Menu.SubmenuRoot>." : formatErrorMessage_default(37)); 14539 } 14540 const listItem = useCompositeListItem({ 14541 guess: true, 14542 label 14543 }); 14544 const menuPositionerContext = useMenuPositionerContext(); 14545 const { 14546 store 14547 } = useMenuRootContext(); 14548 const thisTriggerId = useBaseUiId(idProp); 14549 const open = store.useState("open"); 14550 const floatingRootContext = store.useState("floatingRootContext"); 14551 const floatingTreeRoot = store.useState("floatingTreeRoot"); 14552 const popupId = store.useState("triggerPopupId", thisTriggerId); 14553 const baseRegisterTrigger = useTriggerRegistration(thisTriggerId, store); 14554 const registerTrigger = React93.useCallback((element2) => { 14555 const cleanup = baseRegisterTrigger(element2); 14556 if (element2 !== null && store.select("open") && store.select("activeTriggerId") == null) { 14557 store.update({ 14558 activeTriggerId: thisTriggerId, 14559 activeTriggerElement: element2, 14560 closeDelay 14561 }); 14562 } 14563 return cleanup; 14564 }, [baseRegisterTrigger, closeDelay, store, thisTriggerId]); 14565 const triggerElementRef = React93.useRef(null); 14566 const handleTriggerElementRef = React93.useCallback((el) => { 14567 triggerElementRef.current = el; 14568 store.set("activeTriggerElement", el); 14569 }, [store]); 14570 store.useSyncedValue("closeDelay", closeDelay); 14571 const parentMenuStore = submenuRootContext.parentMenu; 14572 const rootDisabled = store.useState("disabled"); 14573 const parentDisabled = parentMenuStore.useState("disabled"); 14574 const disabled2 = disabledProp || rootDisabled || parentDisabled; 14575 if (true) { 14576 React93.useEffect(() => { 14577 const element2 = triggerElementRef.current; 14578 if (element2 && isElementDisabled(element2) && !disabled2) { 14579 const ownerStackMessage = SafeReact.captureOwnerStack?.() || ""; 14580 warn(`A disabled element was detected on <Menu.SubmenuTrigger>. To properly disable the trigger, use the \`disabled\` prop on the component instead of setting it on the rendered element.$ownerStackMessage}`); 14581 } 14582 }); 14583 } 14584 const itemProps = parentMenuStore.useState("itemProps"); 14585 const highlighted = parentMenuStore.useState("isActive", listItem.index); 14586 const itemMetadata = React93.useMemo(() => ({ 14587 type: "submenu-trigger", 14588 setActive() { 14589 if (parentMenuStore.select("highlightItemOnHover")) { 14590 parentMenuStore.set("activeIndex", listItem.index); 14591 } 14592 } 14593 }), [parentMenuStore, listItem.index]); 14594 const { 14595 getItemProps, 14596 itemRef 14597 } = useMenuItem({ 14598 closeOnClick: false, 14599 disabled: disabled2, 14600 highlighted, 14601 id: thisTriggerId, 14602 store, 14603 typingRef: parentMenuStore.context.typingRef, 14604 nativeButton, 14605 itemMetadata, 14606 nodeId: menuPositionerContext?.context.nodeId 14607 }); 14608 const hoverEnabled = store.useState("hoverEnabled"); 14609 const hoverProps = useHoverReferenceInteraction(floatingRootContext, { 14610 enabled: hoverEnabled && openOnHover && !disabled2, 14611 handleClose: safePolygon({ 14612 blockPointerEvents: true 14613 }), 14614 mouseOnly: true, 14615 move: true, 14616 restMs: delay, 14617 delay: { 14618 open: delay, 14619 close: closeDelay 14620 }, 14621 shouldOpen: delay > 0 ? () => parentMenuStore.select("allowMouseEnter") : void 0, 14622 triggerElementRef, 14623 externalTree: floatingTreeRoot, 14624 isClosing: () => store.select("transitionStatus") === "ending", 14625 // Chrome can drop the trigger's `mouseleave` during a fast pointer sweep, 14626 // leaving a stale submenu open (see #5152) — cancel from `mouseout` too. 14627 guardStaleOpen: true 14628 }); 14629 const click = useClick(floatingRootContext, { 14630 enabled: !disabled2, 14631 event: "mousedown", 14632 toggle: !openOnHover, 14633 ignoreMouse: openOnHover, 14634 stickIfOpen: false 14635 }); 14636 const localInteractionProps = click.reference ?? EMPTY_OBJECT; 14637 const rootTriggerProps = store.useState("triggerProps", true); 14638 delete rootTriggerProps.id; 14639 const state = { 14640 disabled: disabled2, 14641 highlighted, 14642 open 14643 }; 14644 const openMethod = store.useState("openMethod"); 14645 const lastOpenChangeReason = store.useState("lastOpenChangeReason"); 14646 const openedByKeyboard = lastOpenChangeReason === reason_parts_exports.listNavigation || openMethod === "keyboard"; 14647 const shouldOmitExpanded = open && openedByKeyboard && parts_exports.screenReader.voiceOver; 14648 const element = useRenderElement("div", componentProps, { 14649 state, 14650 stateAttributesMapping: triggerOpenStateMapping, 14651 props: [ 14652 localInteractionProps, 14653 hoverProps, 14654 rootTriggerProps, 14655 itemProps, 14656 // Opening a submenu changes the trigger's expanded state while the trigger still holds 14657 // focus, and VoiceOver announces that state change instead of the submenu item that focus 14658 // moves to a moment later, so the first item is never announced. Dropping the state while 14659 // the submenu is open avoids the announcement without claiming the submenu is collapsed; 14660 // `aria-haspopup` still conveys that the item opens a submenu. 14661 shouldOmitExpanded ? VOICE_OVER_EXPANDED_PROPS : void 0, 14662 { 14663 "aria-controls": popupId, 14664 tabIndex: open || highlighted ? 0 : -1, 14665 onBlur() { 14666 if (highlighted) { 14667 parentMenuStore.set("activeIndex", null); 14668 } 14669 } 14670 }, 14671 elementProps, 14672 getItemProps 14673 ], 14674 ref: [forwardedRef, listItem.ref, itemRef, registerTrigger, handleTriggerElementRef] 14675 }); 14676 return element; 14677 }); 14678 if (true) MenuSubmenuTrigger.displayName = "MenuSubmenuTrigger"; 14679 14680 // node_modules/@base-ui/react/menu/store/MenuHandle.mjs 14681 var MenuHandle = class extends BasePopupHandle { 14682 constructor() { 14683 super(createNullMenuStore(), "Menu"); 14684 } 14685 /** 14686 * Opens the menu and associates it with the trigger with the given id. 14687 * 14688 * This method should only be called in an event handler or an effect (not during rendering). 14689 * 14690 * @param triggerId ID of the trigger to associate with the menu. The trigger must be a matching 14691 * `Menu.Trigger` with this handle passed as a prop. 14692 */ 14693 open(triggerId) { 14694 this.openByTrigger(triggerId); 14695 } 14696 /** 14697 * Closes the menu. 14698 * 14699 * This method should only be called in an event handler or an effect (not during rendering). 14700 */ 14701 close() { 14702 this.closePopup(); 14703 } 14704 /** 14705 * Whether the menu is currently open. Returns `false` while no root is attached to the handle. 14706 */ 14707 get isOpen() { 14708 return this.attachedStore?.select("open") ?? false; 14709 } 14710 }; 14711 function createMenuHandle() { 14712 return new MenuHandle(); 14713 } 14714 14715 // node_modules/@base-ui/react/field/index.parts.mjs 14716 var index_parts_exports2 = {}; 14717 __export(index_parts_exports2, { 14718 Control: () => FieldControl, 14719 Description: () => FieldDescription, 14720 Error: () => FieldError, 14721 Item: () => FieldItem, 14722 Label: () => FieldLabel, 14723 Root: () => FieldRoot, 14724 Validity: () => FieldValidity 14725 }); 14726 14727 // node_modules/@base-ui/react/field/root/FieldRoot.mjs 14728 var React97 = __toESM(require_react(), 1); 14729 14730 // node_modules/@base-ui/react/fieldset/root/FieldsetRootContext.mjs 14731 var React94 = __toESM(require_react(), 1); 14732 var FieldsetRootContext = /* @__PURE__ */ React94.createContext(void 0); 14733 if (true) FieldsetRootContext.displayName = "FieldsetRootContext"; 14734 function useFieldsetRootContext(optional = false) { 14735 const context = React94.useContext(FieldsetRootContext); 14736 if (!context && !optional) { 14737 throw new Error(true ? "Base UI: FieldsetRootContext is missing. Fieldset parts must be placed within <Fieldset.Root>." : formatErrorMessage_default(86)); 14738 } 14739 return context; 14740 } 14741 14742 // node_modules/@base-ui/react/internals/labelable-provider/LabelableProvider.mjs 14743 var React95 = __toESM(require_react(), 1); 14744 var import_jsx_runtime54 = __toESM(require_jsx_runtime(), 1); 14745 var LabelableProvider = function LabelableProvider2(props) { 14746 const defaultId = useBaseUiId(); 14747 const initialControlId = props.controlId === void 0 ? defaultId : props.controlId; 14748 const [controlId, setControlIdState] = React95.useState(initialControlId); 14749 const [labelId, setLabelId] = React95.useState(props.labelId); 14750 const [messageIds, setMessageIds] = React95.useState([]); 14751 const registrationsRef = useRefWithInit(() => /* @__PURE__ */ new Map()); 14752 const { 14753 messageIds: parentMessageIds 14754 } = useLabelableContext(); 14755 const registerControlId = useStableCallback((source, nextId) => { 14756 const registrations = registrationsRef.current; 14757 if (nextId === void 0) { 14758 registrations.delete(source); 14759 return; 14760 } 14761 registrations.set(source, nextId); 14762 setControlIdState((prev) => { 14763 if (registrations.size === 0) { 14764 return void 0; 14765 } 14766 let nextControlId; 14767 for (const id of registrations.values()) { 14768 if (prev !== void 0 && id === prev) { 14769 return prev; 14770 } 14771 if (nextControlId === void 0) { 14772 nextControlId = id; 14773 } 14774 } 14775 return nextControlId; 14776 }); 14777 }); 14778 const getDescriptionProps = React95.useCallback((externalProps) => { 14779 const ids = externalProps["aria-describedby"] ? externalProps["aria-describedby"].split(" ") : []; 14780 ids.push(...parentMessageIds, ...messageIds); 14781 return { 14782 ...externalProps, 14783 "aria-describedby": Array.from(new Set(ids)).join(" ") || void 0 14784 }; 14785 }, [parentMessageIds, messageIds]); 14786 const contextValue = React95.useMemo(() => ({ 14787 controlId, 14788 registerControlId, 14789 labelId, 14790 setLabelId, 14791 messageIds, 14792 setMessageIds, 14793 getDescriptionProps 14794 }), [controlId, registerControlId, labelId, setLabelId, messageIds, setMessageIds, getDescriptionProps]); 14795 return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(LabelableContext.Provider, { 14796 value: contextValue, 14797 children: props.children 14798 }); 14799 }; 14800 if (true) LabelableProvider.displayName = "LabelableProvider"; 14801 14802 // node_modules/@base-ui/react/internals/field-register-control/useFieldControlRegistration.mjs 14803 var React96 = __toESM(require_react(), 1); 14804 function useFieldControlRegistration(params) { 14805 const { 14806 commit, 14807 invalid, 14808 markedDirtyRef, 14809 name, 14810 setRegisteredFieldName, 14811 registeredFieldIdRef, 14812 setValidityData, 14813 validityData 14814 } = params; 14815 const { 14816 formRef 14817 } = useFormContext(); 14818 const activeFieldControlSourceRef = React96.useRef(null); 14819 const registrationRef = React96.useRef(null); 14820 const initialValueCapturedRef = React96.useRef(false); 14821 const getValueForForm = useStableCallback(() => { 14822 const registration = registrationRef.current; 14823 if (!registration) { 14824 return void 0; 14825 } 14826 if (registration.getValue) { 14827 return registration.getValue(); 14828 } 14829 return registration.value; 14830 }); 14831 function getRegistrationValue(registration) { 14832 return registration.value === void 0 ? getValueForForm() : registration.value; 14833 } 14834 const validate = useStableCallback(() => { 14835 const registration = registrationRef.current; 14836 markedDirtyRef.current = true; 14837 if (!registration) { 14838 commit(validityData.value); 14839 return; 14840 } 14841 commit(getRegistrationValue(registration)); 14842 }); 14843 function refreshRegistration() { 14844 const registration = registrationRef.current; 14845 if (!registration || !registration.id) { 14846 return; 14847 } 14848 formRef.current.fields.set(registration.id, { 14849 getValue: getValueForForm, 14850 name: name ?? registration.name, 14851 controlRef: registration.controlRef, 14852 validityData: getCombinedFieldValidityData(validityData, invalid), 14853 validate 14854 }); 14855 } 14856 function deleteRegistration(id = registrationRef.current?.id) { 14857 if (id) { 14858 formRef.current.fields.delete(id); 14859 } 14860 } 14861 function captureInitialValue(registration) { 14862 if (initialValueCapturedRef.current) { 14863 return; 14864 } 14865 initialValueCapturedRef.current = true; 14866 const initialValue = getRegistrationValue(registration); 14867 setValidityData((prev) => prev.initialValue === initialValue ? prev : { 14868 ...prev, 14869 initialValue 14870 }); 14871 } 14872 useIsoLayoutEffect(() => { 14873 const registration = registrationRef.current; 14874 if (!registration || !registration.id) { 14875 return; 14876 } 14877 setRegisteredFieldName(name ? void 0 : registration.name); 14878 formRef.current.fields.set(registration.id, { 14879 getValue: getValueForForm, 14880 name: name ?? registration.name, 14881 controlRef: registration.controlRef, 14882 validityData: getCombinedFieldValidityData(validityData, invalid), 14883 validate 14884 }); 14885 }, [formRef, getValueForForm, invalid, name, setRegisteredFieldName, validate, validityData]); 14886 useIsoLayoutEffect(() => { 14887 const fields = formRef.current.fields; 14888 return () => { 14889 const id = registrationRef.current?.id; 14890 if (id) { 14891 fields.delete(id); 14892 } 14893 }; 14894 }, [formRef]); 14895 const register2 = useStableCallback((source, registration) => { 14896 if (!registration) { 14897 if (activeFieldControlSourceRef.current === source) { 14898 activeFieldControlSourceRef.current = null; 14899 deleteRegistration(); 14900 registrationRef.current = null; 14901 setRegisteredFieldName(void 0); 14902 registeredFieldIdRef.current = void 0; 14903 } 14904 return; 14905 } 14906 const previousId = registrationRef.current?.id; 14907 activeFieldControlSourceRef.current = source; 14908 registrationRef.current = registration; 14909 if (!name) { 14910 setRegisteredFieldName(registration.name); 14911 } 14912 registeredFieldIdRef.current = registration.id; 14913 if (previousId && previousId !== registration.id) { 14914 deleteRegistration(previousId); 14915 } 14916 captureInitialValue(registration); 14917 refreshRegistration(); 14918 }); 14919 return [validate, register2]; 14920 } 14921 14922 // node_modules/@base-ui/react/field/root/FieldRoot.mjs 14923 var import_jsx_runtime55 = __toESM(require_jsx_runtime(), 1); 14924 var FieldRootInner = /* @__PURE__ */ React97.forwardRef(function FieldRootInner2(componentProps, forwardedRef) { 14925 const { 14926 errors, 14927 validationMode: formValidationMode, 14928 submitAttemptedRef 14929 } = useFormContext(); 14930 const { 14931 render: render4, 14932 className, 14933 validate: validateProp, 14934 validationDebounceTime = 0, 14935 validationMode = formValidationMode, 14936 name, 14937 disabled: disabledProp = false, 14938 invalid: invalidProp, 14939 dirty: dirtyProp, 14940 touched: touchedProp, 14941 actionsRef, 14942 style, 14943 ...elementProps 14944 } = componentProps; 14945 const disabledFieldset = useFieldsetRootContext(true)?.disabled; 14946 const validate = useStableCallback(validateProp || (() => null)); 14947 const disabled2 = disabledFieldset || disabledProp; 14948 const [touchedState, setTouchedUnwrapped] = React97.useState(false); 14949 const [dirtyState, setDirtyUnwrapped] = React97.useState(false); 14950 const [filled, setFilled] = React97.useState(false); 14951 const [focused, setFocused] = React97.useState(false); 14952 const dirty = dirtyProp ?? dirtyState; 14953 const touched = touchedProp ?? touchedState; 14954 const markedDirtyRef = React97.useRef(dirty); 14955 const registeredFieldIdRef = React97.useRef(void 0); 14956 const [registeredFieldName, setRegisteredFieldName] = React97.useState(); 14957 const effectiveName = name ?? registeredFieldName; 14958 useIsoLayoutEffect(() => { 14959 if (dirtyProp !== void 0) { 14960 markedDirtyRef.current = dirtyProp; 14961 } 14962 }, [dirtyProp]); 14963 const setDirty = useStableCallback((value) => { 14964 if (dirtyProp !== void 0) { 14965 return; 14966 } 14967 if (value) { 14968 markedDirtyRef.current = true; 14969 } 14970 setDirtyUnwrapped(value); 14971 }); 14972 const setTouched = useStableCallback((value) => { 14973 if (touchedProp !== void 0) { 14974 return; 14975 } 14976 setTouchedUnwrapped(value); 14977 }); 14978 const shouldValidateOnChange = useStableCallback(() => validationMode === "onChange" || validationMode === "onSubmit" && submitAttemptedRef.current); 14979 const formError = effectiveName && Object.hasOwn(errors, effectiveName) ? errors[effectiveName] : null; 14980 const hasFormError = !!(Array.isArray(formError) ? formError.length : formError); 14981 const invalid = invalidProp === true || hasFormError; 14982 const [validityData, setValidityData] = React97.useState({ 14983 state: DEFAULT_VALIDITY_STATE, 14984 error: "", 14985 errors: [], 14986 value: null, 14987 initialValue: null 14988 }); 14989 const valid = !invalid && (disabled2 ? null : validityData.state.valid); 14990 const state = React97.useMemo(() => ({ 14991 disabled: disabled2, 14992 touched, 14993 dirty, 14994 valid, 14995 filled, 14996 focused 14997 }), [disabled2, touched, dirty, valid, filled, focused]); 14998 const validation = useFieldValidation({ 14999 setValidityData, 15000 validate, 15001 validityData, 15002 validationDebounceTime, 15003 invalid, 15004 markedDirtyRef, 15005 state, 15006 shouldValidateOnChange, 15007 registeredFieldIdRef 15008 }); 15009 const [validateFieldControl, registerFieldControl] = useFieldControlRegistration({ 15010 commit: validation.commit, 15011 invalid, 15012 markedDirtyRef, 15013 name, 15014 setRegisteredFieldName, 15015 registeredFieldIdRef, 15016 setValidityData, 15017 validityData 15018 }); 15019 React97.useImperativeHandle(actionsRef, () => ({ 15020 validate: validateFieldControl 15021 }), [validateFieldControl]); 15022 const contextValue = React97.useMemo(() => ({ 15023 invalid, 15024 name: effectiveName, 15025 validityData, 15026 setValidityData, 15027 disabled: disabled2, 15028 setTouched, 15029 setDirty, 15030 setFilled, 15031 setFocused, 15032 validationMode, 15033 shouldValidateOnChange, 15034 state, 15035 registerFieldControl, 15036 validation 15037 }), [invalid, effectiveName, validityData, disabled2, setTouched, setDirty, setFilled, setFocused, validationMode, shouldValidateOnChange, state, registerFieldControl, validation]); 15038 const element = useRenderElement("div", componentProps, { 15039 ref: forwardedRef, 15040 state, 15041 props: elementProps, 15042 stateAttributesMapping: fieldValidityMapping 15043 }); 15044 return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(FieldRootContext.Provider, { 15045 value: contextValue, 15046 children: element 15047 }); 15048 }); 15049 if (true) FieldRootInner.displayName = "FieldRootInner"; 15050 var FieldRoot = /* @__PURE__ */ React97.forwardRef(function FieldRoot2(componentProps, forwardedRef) { 15051 return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(LabelableProvider, { 15052 children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(FieldRootInner, { 15053 ...componentProps, 15054 ref: forwardedRef 15055 }) 15056 }); 15057 }); 15058 if (true) FieldRoot.displayName = "FieldRoot"; 15059 15060 // node_modules/@base-ui/react/field/label/FieldLabel.mjs 15061 var React98 = __toESM(require_react(), 1); 15062 var FieldLabel = /* @__PURE__ */ React98.forwardRef(function FieldLabel2(componentProps, forwardedRef) { 15063 const { 15064 render: render4, 15065 className, 15066 style, 15067 id: idProp, 15068 nativeLabel = true, 15069 ...elementProps 15070 } = componentProps; 15071 const fieldRootContext = useFieldRootContext(false); 15072 const fieldItemContext = useFieldItemContext(); 15073 const { 15074 labelId 15075 } = useLabelableContext(); 15076 const state = { 15077 ...fieldRootContext.state, 15078 disabled: fieldRootContext.disabled || fieldItemContext.disabled 15079 }; 15080 const labelRef = React98.useRef(null); 15081 const labelProps = useLabel({ 15082 id: labelId ?? idProp, 15083 native: nativeLabel 15084 }); 15085 if (true) { 15086 React98.useEffect(() => { 15087 if (!labelRef.current) { 15088 return; 15089 } 15090 const isLabelTag = labelRef.current.tagName === "LABEL"; 15091 if (nativeLabel) { 15092 if (!isLabelTag) { 15093 const ownerStackMessage = SafeReact.captureOwnerStack?.() || ""; 15094 const message2 = "<Field.Label> expected a <label> element because the `nativeLabel` prop is true. Rendering a non-<label> disables native label association, so `htmlFor` will not work. Use a real <label> in the `render` prop, or set `nativeLabel` to `false`."; 15095 error(`$message2}$ownerStackMessage}`); 15096 } 15097 } else if (isLabelTag) { 15098 const ownerStackMessage = SafeReact.captureOwnerStack?.() || ""; 15099 const message2 = "<Field.Label> expected a non-<label> element because the `nativeLabel` prop is false. Rendering a <label> assumes native label behavior while Base UI treats it as non-native, which can cause unexpected pointer behavior. Use a non-<label> in the `render` prop, or set `nativeLabel` to `true`."; 15100 error(`$message2}$ownerStackMessage}`); 15101 } 15102 }, [nativeLabel]); 15103 } 15104 const element = useRenderElement("label", componentProps, { 15105 ref: [forwardedRef, labelRef], 15106 state, 15107 props: [labelProps, elementProps], 15108 stateAttributesMapping: fieldValidityMapping 15109 }); 15110 return element; 15111 }); 15112 if (true) FieldLabel.displayName = "FieldLabel"; 15113 15114 // node_modules/@base-ui/react/field/error/FieldError.mjs 15115 var React99 = __toESM(require_react(), 1); 15116 var import_jsx_runtime56 = __toESM(require_jsx_runtime(), 1); 15117 var stateAttributesMapping = { 15118 ...fieldValidityMapping, 15119 ...transitionStatusMapping 15120 }; 15121 var FieldError = /* @__PURE__ */ React99.forwardRef(function FieldError2(componentProps, forwardedRef) { 15122 const { 15123 render: render4, 15124 id: idProp, 15125 className, 15126 match: match2, 15127 style, 15128 ...elementProps 15129 } = componentProps; 15130 const id = useBaseUiId(idProp); 15131 const { 15132 validityData, 15133 state: fieldState, 15134 name 15135 } = useFieldRootContext(false); 15136 const { 15137 setMessageIds 15138 } = useLabelableContext(); 15139 const { 15140 errors 15141 } = useFormContext(); 15142 const formError = name && Object.hasOwn(errors, name) ? errors[name] : null; 15143 const hasFormError = !!(Array.isArray(formError) ? formError.length : formError); 15144 const hasSpecificMatch = typeof match2 === "string"; 15145 let rendered = false; 15146 if (match2 === true) { 15147 rendered = true; 15148 } else if (fieldState.disabled) { 15149 rendered = false; 15150 } else if (hasSpecificMatch) { 15151 rendered = Boolean(validityData.state[match2]); 15152 } else { 15153 rendered = hasFormError || validityData.state.valid === false; 15154 } 15155 const { 15156 mounted, 15157 transitionStatus, 15158 setMounted 15159 } = useTransitionStatus(rendered); 15160 useIsoLayoutEffect(() => { 15161 if (!rendered || !id) { 15162 return void 0; 15163 } 15164 setMessageIds((v2) => v2.concat(id)); 15165 return () => { 15166 setMessageIds((v2) => v2.filter((item) => item !== id)); 15167 }; 15168 }, [rendered, id, setMessageIds]); 15169 const errorRef = React99.useRef(null); 15170 const [lastRenderedMessage, setLastRenderedMessage] = React99.useState(null); 15171 const [lastRenderedMessageKey, setLastRenderedMessageKey] = React99.useState(null); 15172 let error2 = validityData.error; 15173 if (!hasSpecificMatch && hasFormError) { 15174 error2 = formError; 15175 } else if (validityData.errors.length > 1) { 15176 error2 = validityData.errors; 15177 } 15178 let errorMessage = error2; 15179 if (Array.isArray(error2)) { 15180 errorMessage = error2.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("ul", { 15181 children: error2.map((message2) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("li", { 15182 children: message2 15183 }, message2)) 15184 }) : error2[0]; 15185 } 15186 const errorKey = Array.isArray(error2) ? JSON.stringify(error2) : error2; 15187 if (rendered && errorKey !== lastRenderedMessageKey) { 15188 setLastRenderedMessageKey(errorKey); 15189 setLastRenderedMessage(errorMessage); 15190 } 15191 useOpenChangeComplete({ 15192 open: rendered, 15193 ref: errorRef, 15194 onComplete() { 15195 if (!rendered) { 15196 setMounted(false); 15197 } 15198 } 15199 }); 15200 const state = { 15201 ...fieldState, 15202 transitionStatus 15203 }; 15204 const element = useRenderElement("div", componentProps, { 15205 ref: [forwardedRef, errorRef], 15206 state, 15207 props: [{ 15208 id, 15209 children: rendered ? errorMessage : lastRenderedMessage 15210 }, elementProps], 15211 stateAttributesMapping, 15212 enabled: mounted 15213 }); 15214 if (!mounted) { 15215 return null; 15216 } 15217 return element; 15218 }); 15219 if (true) FieldError.displayName = "FieldError"; 15220 15221 // node_modules/@base-ui/react/field/description/FieldDescription.mjs 15222 var React100 = __toESM(require_react(), 1); 15223 var FieldDescription = /* @__PURE__ */ React100.forwardRef(function FieldDescription2(componentProps, forwardedRef) { 15224 const { 15225 render: render4, 15226 id: idProp, 15227 className, 15228 style, 15229 ...elementProps 15230 } = componentProps; 15231 const id = useBaseUiId(idProp); 15232 const fieldRootContext = useFieldRootContext(false); 15233 const fieldItemContext = useFieldItemContext(); 15234 const { 15235 setMessageIds 15236 } = useLabelableContext(); 15237 const state = { 15238 ...fieldRootContext.state, 15239 disabled: fieldRootContext.disabled || fieldItemContext.disabled 15240 }; 15241 useIsoLayoutEffect(() => { 15242 if (!id) { 15243 return void 0; 15244 } 15245 setMessageIds((v2) => v2.concat(id)); 15246 return () => { 15247 setMessageIds((v2) => v2.filter((item) => item !== id)); 15248 }; 15249 }, [id, setMessageIds]); 15250 const element = useRenderElement("p", componentProps, { 15251 ref: forwardedRef, 15252 state, 15253 props: [{ 15254 id 15255 }, elementProps], 15256 stateAttributesMapping: fieldValidityMapping 15257 }); 15258 return element; 15259 }); 15260 if (true) FieldDescription.displayName = "FieldDescription"; 15261 15262 // node_modules/@base-ui/react/field/control/FieldControl.mjs 15263 var React101 = __toESM(require_react(), 1); 15264 var FieldControl = /* @__PURE__ */ React101.forwardRef(function FieldControl2(componentProps, forwardedRef) { 15265 const { 15266 render: render4, 15267 className, 15268 id: idProp, 15269 name: nameProp, 15270 value: valueProp, 15271 disabled: disabledProp = false, 15272 onValueChange, 15273 defaultValue: defaultValue2, 15274 autoFocus = false, 15275 style, 15276 ...elementProps 15277 } = componentProps; 15278 const { 15279 state: fieldState, 15280 name: fieldName, 15281 disabled: fieldDisabled, 15282 setTouched, 15283 setDirty, 15284 validityData, 15285 setFocused, 15286 setFilled, 15287 validationMode, 15288 validation 15289 } = useFieldRootContext(); 15290 const { 15291 clearErrors 15292 } = useFormContext(); 15293 const disabled2 = fieldDisabled || disabledProp; 15294 const name = fieldName ?? nameProp; 15295 const state = { 15296 ...fieldState, 15297 disabled: disabled2 15298 }; 15299 const { 15300 labelId 15301 } = useLabelableContext(); 15302 const id = useLabelableId({ 15303 id: idProp 15304 }); 15305 useIsoLayoutEffect(() => { 15306 const hasExternalValue = valueProp != null; 15307 if (validation.inputRef.current?.value || hasExternalValue && valueProp !== "") { 15308 setFilled(true); 15309 } else if (hasExternalValue && valueProp === "") { 15310 setFilled(false); 15311 } 15312 }, [validation.inputRef, setFilled, valueProp]); 15313 const inputRef = React101.useRef(null); 15314 useIsoLayoutEffect(() => { 15315 if (autoFocus && inputRef.current === activeElement(ownerDocument(inputRef.current))) { 15316 setFocused(true); 15317 } 15318 }, [autoFocus, setFocused]); 15319 const [valueUnwrapped] = useControlled({ 15320 controlled: valueProp, 15321 default: defaultValue2, 15322 name: "FieldControl", 15323 state: "value" 15324 }); 15325 const isControlled = valueProp !== void 0; 15326 const value = isControlled ? valueUnwrapped : void 0; 15327 const getValueFromInput = useStableCallback(() => validation.inputRef.current?.value); 15328 useRegisterFieldControl(validation.inputRef, id, value, getValueFromInput, !disabled2, nameProp); 15329 const element = useRenderElement("input", componentProps, { 15330 ref: [forwardedRef, inputRef], 15331 state, 15332 props: [{ 15333 id, 15334 disabled: disabled2, 15335 name, 15336 ref: validation.inputRef, 15337 "aria-labelledby": labelId, 15338 autoFocus, 15339 ...isControlled ? { 15340 value 15341 } : { 15342 defaultValue: defaultValue2 15343 }, 15344 onChange(event) { 15345 const inputValue = event.currentTarget.value; 15346 onValueChange?.(inputValue, createChangeEventDetails(reason_parts_exports.none, event.nativeEvent)); 15347 setDirty(inputValue !== (validityData.initialValue ?? "")); 15348 setFilled(inputValue !== ""); 15349 if (!event.nativeEvent.defaultPrevented) { 15350 clearErrors(name); 15351 validation.change(inputValue); 15352 } 15353 }, 15354 onFocus() { 15355 setFocused(true); 15356 }, 15357 onBlur(event) { 15358 setTouched(true); 15359 setFocused(false); 15360 if (validationMode === "onBlur") { 15361 validation.commit(event.currentTarget.value); 15362 } 15363 }, 15364 onKeyDown(event) { 15365 if (event.currentTarget.tagName === "INPUT" && event.key === "Enter") { 15366 setTouched(true); 15367 validation.commit(event.currentTarget.value); 15368 } 15369 } 15370 }, elementProps, (props) => validation.getValidationProps(disabled2, props)], 15371 stateAttributesMapping: fieldValidityMapping 15372 }); 15373 return element; 15374 }); 15375 if (true) FieldControl.displayName = "FieldControl"; 15376 15377 // node_modules/@base-ui/react/field/validity/FieldValidity.mjs 15378 var React102 = __toESM(require_react(), 1); 15379 var import_jsx_runtime57 = __toESM(require_jsx_runtime(), 1); 15380 var FieldValidity = function FieldValidity2(props) { 15381 const { 15382 children 15383 } = props; 15384 const { 15385 validityData, 15386 invalid 15387 } = useFieldRootContext(false); 15388 const combinedFieldValidityData = React102.useMemo(() => getCombinedFieldValidityData(validityData, invalid), [validityData, invalid]); 15389 const isInvalid = combinedFieldValidityData.state.valid === false; 15390 const { 15391 transitionStatus 15392 } = useTransitionStatus(isInvalid); 15393 const fieldValidityState = React102.useMemo(() => { 15394 return { 15395 ...combinedFieldValidityData, 15396 validity: combinedFieldValidityData.state, 15397 transitionStatus 15398 }; 15399 }, [combinedFieldValidityData, transitionStatus]); 15400 return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(React102.Fragment, { 15401 children: children(fieldValidityState) 15402 }); 15403 }; 15404 if (true) FieldValidity.displayName = "FieldValidity"; 15405 15406 // node_modules/@base-ui/react/field/item/FieldItem.mjs 15407 var React103 = __toESM(require_react(), 1); 15408 var import_jsx_runtime58 = __toESM(require_jsx_runtime(), 1); 15409 var FieldItem = /* @__PURE__ */ React103.forwardRef(function FieldItem2(componentProps, forwardedRef) { 15410 const { 15411 render: render4, 15412 className, 15413 style, 15414 disabled: disabledProp = false, 15415 ...elementProps 15416 } = componentProps; 15417 const { 15418 state: fieldState, 15419 disabled: rootDisabled 15420 } = useFieldRootContext(false); 15421 const disabled2 = rootDisabled || disabledProp; 15422 const state = { 15423 ...fieldState, 15424 disabled: disabled2 15425 }; 15426 const fieldItemContext = React103.useMemo(() => ({ 15427 disabled: disabled2 15428 }), [disabled2]); 15429 const element = useRenderElement("div", componentProps, { 15430 ref: forwardedRef, 15431 state, 15432 props: elementProps, 15433 stateAttributesMapping: fieldValidityMapping 15434 }); 15435 return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(LabelableProvider, { 15436 children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(FieldItemContext.Provider, { 15437 value: fieldItemContext, 15438 children: element 15439 }) 15440 }); 15441 }); 15442 if (true) FieldItem.displayName = "FieldItem"; 15443 15444 // node_modules/@base-ui/react/input/Input.mjs 15445 var React104 = __toESM(require_react(), 1); 15446 var import_jsx_runtime59 = __toESM(require_jsx_runtime(), 1); 15447 var Input = /* @__PURE__ */ React104.forwardRef(function Input2(props, forwardedRef) { 15448 return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(index_parts_exports2.Control, { 15449 ref: forwardedRef, 15450 ...props 15451 }); 15452 }); 15453 if (true) Input.displayName = "Input"; 15454 15455 // node_modules/@base-ui/react/utils/FloatingPortalLite.mjs 15456 var React105 = __toESM(require_react(), 1); 15457 var ReactDOM8 = __toESM(require_react_dom(), 1); 15458 var import_jsx_runtime60 = __toESM(require_jsx_runtime(), 1); 15459 var FloatingPortalLite = /* @__PURE__ */ React105.forwardRef(function FloatingPortalLite2(componentProps, forwardedRef) { 15460 const { 15461 children, 15462 container, 15463 className, 15464 render: render4, 15465 style, 15466 ...elementProps 15467 } = componentProps; 15468 const { 15469 node: portalNode, 15470 subtree: portalSubtree 15471 } = useFloatingPortalNode({ 15472 container, 15473 ref: forwardedRef, 15474 componentProps, 15475 elementProps 15476 }); 15477 if (!portalSubtree && !portalNode) { 15478 return null; 15479 } 15480 return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(React105.Fragment, { 15481 children: [portalSubtree, portalNode && /* @__PURE__ */ ReactDOM8.createPortal(children, portalNode)] 15482 }); 15483 }); 15484 if (true) FloatingPortalLite.displayName = "FloatingPortalLite"; 15485 15486 // node_modules/@base-ui/react/tooltip/index.parts.mjs 15487 var index_parts_exports3 = {}; 15488 __export(index_parts_exports3, { 15489 Arrow: () => TooltipArrow, 15490 Handle: () => TooltipHandle, 15491 Popup: () => TooltipPopup, 15492 Portal: () => TooltipPortal, 15493 Positioner: () => TooltipPositioner, 15494 Provider: () => TooltipProvider, 15495 Root: () => TooltipRoot, 15496 Trigger: () => TooltipTrigger, 15497 Viewport: () => TooltipViewport, 15498 createHandle: () => createTooltipHandle 15499 }); 15500 15501 // node_modules/@base-ui/react/tooltip/root/TooltipRoot.mjs 15502 var React108 = __toESM(require_react(), 1); 15503 15504 // node_modules/@base-ui/react/tooltip/root/TooltipRootContext.mjs 15505 var React106 = __toESM(require_react(), 1); 15506 var TooltipRootContext = /* @__PURE__ */ React106.createContext(void 0); 15507 if (true) TooltipRootContext.displayName = "TooltipRootContext"; 15508 function useTooltipRootContext(optional) { 15509 const context = React106.useContext(TooltipRootContext); 15510 if (context === void 0 && !optional) { 15511 throw new Error(true ? "Base UI: TooltipRootContext is missing. Tooltip parts must be placed within <Tooltip.Root>." : formatErrorMessage_default(72)); 15512 } 15513 return context; 15514 } 15515 15516 // node_modules/@base-ui/react/tooltip/store/TooltipStore.mjs 15517 var React107 = __toESM(require_react(), 1); 15518 var selectors3 = { 15519 ...popupStoreSelectors, 15520 disabled: (state) => state.disabled, 15521 instantType: (state) => state.instantType, 15522 isInstantPhase: (state) => state.isInstantPhase, 15523 trackCursorAxis: (state) => state.trackCursorAxis, 15524 disableHoverablePopup: (state) => state.disableHoverablePopup, 15525 lastOpenChangeReason: (state) => state.openChangeReason, 15526 closeOnClick: (state) => state.closeOnClick, 15527 closeDelay: (state) => state.closeDelay, 15528 adaptiveOrigin: (state) => state.adaptiveOrigin 15529 }; 15530 var TooltipStore = class extends ReactStore { 15531 constructor(initialState, floatingId, nested) { 15532 const triggerElements = new PopupTriggerMap(); 15533 super(createInitialState2(initialState, triggerElements, floatingId, nested), createInitialContext2(triggerElements), selectors3); 15534 } 15535 setOpen = (nextOpen, eventDetails) => { 15536 applyPopupOpenChange(this, nextOpen, eventDetails, { 15537 extraState: { 15538 openChangeReason: eventDetails.reason 15539 } 15540 }); 15541 }; 15542 // Used by trigger clicks to clear a delayed hover open without reporting a public open-state change. 15543 cancelPendingOpen(event) { 15544 this.state.floatingRootContext.dispatchOpenChange(false, createChangeEventDetails(reason_parts_exports.triggerPress, event)); 15545 } 15546 }; 15547 function createNullTooltipStore() { 15548 const triggerElements = new PopupTriggerMap(); 15549 const store = new NullStore(Object.freeze(createInitialState2(void 0, triggerElements)), Object.freeze(createInitialContext2(triggerElements)), selectors3); 15550 return Object.assign(store, { 15551 setOpen: NOOP, 15552 cancelPendingOpen: NOOP 15553 }); 15554 } 15555 function createInitialState2(initialState, triggerElements, floatingId, nested = false) { 15556 const state = { 15557 ...createInitialPopupStoreState(), 15558 disabled: false, 15559 instantType: void 0, 15560 isInstantPhase: false, 15561 trackCursorAxis: "none", 15562 disableHoverablePopup: false, 15563 openChangeReason: null, 15564 closeOnClick: true, 15565 closeDelay: 0, 15566 adaptiveOrigin: void 0, 15567 ...initialState 15568 }; 15569 state.floatingRootContext = createPopupFloatingRootContext(triggerElements, floatingId, nested); 15570 return state; 15571 } 15572 function createInitialContext2(triggerElements) { 15573 return { 15574 popupRef: /* @__PURE__ */ React107.createRef(), 15575 onOpenChange: void 0, 15576 onOpenChangeComplete: void 0, 15577 triggerElements 15578 }; 15579 } 15580 15581 // node_modules/@base-ui/react/tooltip/root/TooltipRoot.mjs 15582 var import_jsx_runtime61 = __toESM(require_jsx_runtime(), 1); 15583 var TooltipRoot = fastComponent(function TooltipRoot2(props) { 15584 const { 15585 disabled: disabled2 = false, 15586 defaultOpen = false, 15587 open: openProp, 15588 disableHoverablePopup = false, 15589 trackCursorAxis = "none", 15590 actionsRef, 15591 onOpenChange, 15592 onOpenChangeComplete, 15593 handle, 15594 triggerId: triggerIdProp, 15595 defaultTriggerId: defaultTriggerIdProp = null, 15596 children 15597 } = props; 15598 const store = usePopupRootStore((floatingId, nested) => new TooltipStore({ 15599 open: defaultOpen, 15600 openProp, 15601 activeTriggerId: defaultTriggerIdProp, 15602 triggerIdProp 15603 }, floatingId, nested)); 15604 store.useControlledProp("openProp", openProp); 15605 store.useControlledProp("triggerIdProp", triggerIdProp); 15606 store.useContextCallback("onOpenChange", onOpenChange); 15607 store.useContextCallback("onOpenChangeComplete", onOpenChangeComplete); 15608 const openState = store.useState("open"); 15609 const open = !disabled2 && openState; 15610 const activeTriggerId = store.useState("activeTriggerId"); 15611 const mounted = store.useState("mounted"); 15612 const payload = store.useState("payload"); 15613 store.useSyncedValues({ 15614 trackCursorAxis, 15615 disableHoverablePopup, 15616 disabled: disabled2 15617 }); 15618 useImplicitActiveTrigger(store, { 15619 closeOnActiveTriggerUnmount: true 15620 }); 15621 const { 15622 forceUnmount, 15623 transitionStatus 15624 } = useOpenStateTransitions(open, store); 15625 const isInstantPhase = store.useState("isInstantPhase"); 15626 const instantType = store.useState("instantType"); 15627 const lastOpenChangeReason = store.useState("lastOpenChangeReason"); 15628 const previousInstantTypeRef = React108.useRef(null); 15629 useIsoLayoutEffect(() => { 15630 if (openState && disabled2) { 15631 store.setOpen(false, createChangeEventDetails(reason_parts_exports.disabled)); 15632 } 15633 }, [openState, disabled2, store]); 15634 useIsoLayoutEffect(() => { 15635 if (transitionStatus === "ending" && lastOpenChangeReason === reason_parts_exports.none || transitionStatus !== "ending" && isInstantPhase) { 15636 if (instantType !== "delay") { 15637 previousInstantTypeRef.current = instantType; 15638 } 15639 store.set("instantType", "delay"); 15640 } else if (previousInstantTypeRef.current !== null) { 15641 store.set("instantType", previousInstantTypeRef.current); 15642 previousInstantTypeRef.current = null; 15643 } 15644 }, [transitionStatus, isInstantPhase, lastOpenChangeReason, instantType, store]); 15645 useIsoLayoutEffect(() => { 15646 if (open) { 15647 if (activeTriggerId == null) { 15648 store.set("payload", void 0); 15649 } 15650 } 15651 }, [store, activeTriggerId, open]); 15652 React108.useImperativeHandle(actionsRef, () => ({ 15653 unmount: forceUnmount, 15654 close: () => store.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction)) 15655 }), [forceUnmount, store]); 15656 const shouldRenderInteractions = open || mounted || !disabled2 && trackCursorAxis !== "none"; 15657 return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(TooltipRootContext.Provider, { 15658 value: store, 15659 children: [handle && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(PopupHandleAttachment, { 15660 handle, 15661 store 15662 }), shouldRenderInteractions && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(TooltipInteractions, { 15663 store, 15664 disabled: disabled2, 15665 trackCursorAxis 15666 }), typeof children === "function" ? children({ 15667 payload 15668 }) : children] 15669 }); 15670 }); 15671 if (true) TooltipRoot.displayName = "TooltipRoot"; 15672 function TooltipInteractions({ 15673 store, 15674 disabled: disabled2, 15675 trackCursorAxis 15676 }) { 15677 const floatingRootContext = store.useState("floatingRootContext"); 15678 const dismiss = useDismiss(floatingRootContext, { 15679 enabled: !disabled2, 15680 referencePress: () => store.select("closeOnClick") 15681 }); 15682 const clientPoint = useClientPoint(floatingRootContext, { 15683 enabled: !disabled2 && trackCursorAxis !== "none", 15684 axis: trackCursorAxis === "none" ? void 0 : trackCursorAxis 15685 }); 15686 const triggerProps = React108.useMemo(() => mergeProps(clientPoint.reference, dismiss.reference), [clientPoint.reference, dismiss.reference]); 15687 usePopupInteractionProps(store, { 15688 activeTriggerProps: triggerProps, 15689 inactiveTriggerProps: triggerProps, 15690 popupProps: dismiss.floating ?? EMPTY_OBJECT 15691 }); 15692 return null; 15693 } 15694 15695 // node_modules/@base-ui/react/tooltip/trigger/TooltipTrigger.mjs 15696 var React110 = __toESM(require_react(), 1); 15697 15698 // node_modules/@base-ui/react/tooltip/provider/TooltipProviderContext.mjs 15699 var React109 = __toESM(require_react(), 1); 15700 var TooltipProviderContext = /* @__PURE__ */ React109.createContext(void 0); 15701 if (true) TooltipProviderContext.displayName = "TooltipProviderContext"; 15702 function useTooltipProviderContext() { 15703 return React109.useContext(TooltipProviderContext); 15704 } 15705 15706 // node_modules/@base-ui/react/tooltip/utils/constants.mjs 15707 var OPEN_DELAY = 600; 15708 15709 // node_modules/@base-ui/react/tooltip/trigger/TooltipTrigger.mjs 15710 var TOOLTIP_TRIGGER_IDENTIFIER = "data-base-ui-tooltip-trigger"; 15711 function getTargetElement(event) { 15712 if ("composedPath" in event) { 15713 const path = event.composedPath(); 15714 for (let i2 = 0; i2 < path.length; i2 += 1) { 15715 const element = path[i2]; 15716 if (isElement(element)) { 15717 return element; 15718 } 15719 } 15720 } 15721 const target = event.target; 15722 if (isElement(target)) { 15723 return target; 15724 } 15725 return null; 15726 } 15727 function closestEnabledTooltipTrigger(element) { 15728 let current = element; 15729 while (current) { 15730 const trigger = current.closest(`[$TOOLTIP_TRIGGER_IDENTIFIER}]`); 15731 if (trigger) { 15732 return trigger; 15733 } 15734 const root = current.getRootNode(); 15735 current = "host" in root && isElement(root.host) ? root.host : null; 15736 } 15737 return null; 15738 } 15739 var TooltipTrigger = fastComponentRef(function TooltipTrigger2(componentProps, forwardedRef) { 15740 const { 15741 render: render4, 15742 className, 15743 style, 15744 handle, 15745 payload, 15746 disabled: disabledProp, 15747 delay, 15748 closeOnClick = true, 15749 closeDelay, 15750 id: idProp, 15751 ...elementProps 15752 } = componentProps; 15753 const rootContext = useTooltipRootContext(true); 15754 const handleStore = usePopupHandleStore(handle); 15755 const store = handleStore ?? rootContext; 15756 if (!store) { 15757 throw new Error(true ? "Base UI: <Tooltip.Trigger> must be either used within a <Tooltip.Root> component or provided with a handle." : formatErrorMessage_default(82)); 15758 } 15759 const thisTriggerId = useBaseUiId(idProp); 15760 const isTriggerActive = store.useState("isTriggerActive", thisTriggerId); 15761 const isOpenedByThisTrigger = store.useState("isOpenedByTrigger", thisTriggerId); 15762 const floatingRootContext = store.useState("floatingRootContext"); 15763 const triggerElementRef = React110.useRef(null); 15764 const delayWithDefault = delay ?? OPEN_DELAY; 15765 const closeDelayWithDefault = closeDelay ?? 0; 15766 const { 15767 registerTrigger, 15768 isMountedByThisTrigger 15769 } = useTriggerDataForwarding(thisTriggerId, triggerElementRef, store, { 15770 payload, 15771 closeOnClick, 15772 closeDelay: closeDelayWithDefault 15773 }); 15774 const providerDelay = useTooltipProviderContext(); 15775 const { 15776 delayRef, 15777 isInstantPhase, 15778 hasProvider 15779 } = useDelayGroup(floatingRootContext, { 15780 open: isOpenedByThisTrigger 15781 }); 15782 const hoverInteraction = useHoverInteractionSharedState(floatingRootContext); 15783 store.useSyncedValue("isInstantPhase", isInstantPhase); 15784 const rootDisabled = store.useState("disabled"); 15785 const disabled2 = disabledProp ?? rootDisabled; 15786 const disabledRef = useValueAsRef(disabled2); 15787 const trackCursorAxis = store.useState("trackCursorAxis"); 15788 const disableHoverablePopup = store.useState("disableHoverablePopup"); 15789 const isNestedTriggerHoveredRef = React110.useRef(false); 15790 const nestedTriggerOpenTimeout = useTimeout(); 15791 const pointerTypeRef = React110.useRef(void 0); 15792 function getOpenDelay() { 15793 if (!hasProvider) { 15794 return delayWithDefault; 15795 } 15796 return getDelay(delayRef.current, "open") === 0 ? 0 : delay ?? providerDelay ?? OPEN_DELAY; 15797 } 15798 function isEnabledNestedTriggerTarget(target) { 15799 const triggerEl = triggerElementRef.current; 15800 if (!triggerEl || !target) { 15801 return false; 15802 } 15803 const nearestTrigger = closestEnabledTooltipTrigger(target); 15804 return nearestTrigger !== null && nearestTrigger !== triggerEl && contains(triggerEl, nearestTrigger); 15805 } 15806 function detectNestedTriggerHover(target) { 15807 const nestedTriggerHovered = isEnabledNestedTriggerTarget(target); 15808 isNestedTriggerHoveredRef.current = nestedTriggerHovered; 15809 if (nestedTriggerHovered) { 15810 hoverInteraction.openChangeTimeout.clear(); 15811 hoverInteraction.restTimeout.clear(); 15812 hoverInteraction.restTimeoutPending = false; 15813 nestedTriggerOpenTimeout.clear(); 15814 } 15815 return nestedTriggerHovered; 15816 } 15817 const hoverProps = useHoverReferenceInteraction(floatingRootContext, { 15818 enabled: !disabled2, 15819 mouseOnly: true, 15820 move: false, 15821 handleClose: !disableHoverablePopup && trackCursorAxis !== "both" ? safePolygon() : null, 15822 restMs: getOpenDelay, 15823 delay() { 15824 if (closeDelay == null && hasProvider) { 15825 return { 15826 close: getDelay(delayRef.current, "close") 15827 }; 15828 } 15829 return { 15830 close: closeDelayWithDefault 15831 }; 15832 }, 15833 triggerElementRef, 15834 isActiveTrigger: isTriggerActive, 15835 isClosing: () => store.select("transitionStatus") === "ending", 15836 shouldOpen() { 15837 return !isNestedTriggerHoveredRef.current; 15838 } 15839 }); 15840 const focusProps = useFocus(floatingRootContext, { 15841 enabled: !disabled2 15842 }).reference; 15843 const handleNestedTriggerHover = (event) => { 15844 const wasNestedTriggerHovered = isNestedTriggerHoveredRef.current; 15845 const target = getTargetElement(event); 15846 const nestedTriggerHovered = detectNestedTriggerHover(target); 15847 const triggerEl = triggerElementRef.current; 15848 const targetInsideTrigger = triggerEl && target && contains(triggerEl, target); 15849 if (nestedTriggerHovered && store.select("open") && store.select("lastOpenChangeReason") === reason_parts_exports.triggerHover) { 15850 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event)); 15851 return; 15852 } 15853 if (wasNestedTriggerHovered && !nestedTriggerHovered && targetInsideTrigger && !disabledRef.current && !store.select("open") && triggerEl && // Match the hover hook's non-strict mouse fallback for mouse-only event sequences. 15854 isMouseLikePointerType(pointerTypeRef.current)) { 15855 const open = () => { 15856 if (!isNestedTriggerHoveredRef.current && !disabledRef.current && !store.select("open")) { 15857 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerEl)); 15858 } 15859 }; 15860 const openDelay = getOpenDelay(); 15861 if (openDelay === 0) { 15862 nestedTriggerOpenTimeout.clear(); 15863 open(); 15864 } else { 15865 nestedTriggerOpenTimeout.start(openDelay, open); 15866 } 15867 } 15868 }; 15869 const rootTriggerProps = store.useState("triggerProps", isMountedByThisTrigger); 15870 const shouldApplyRootTriggerProps = isMountedByThisTrigger || trackCursorAxis !== "none"; 15871 const state = { 15872 open: isOpenedByThisTrigger 15873 }; 15874 const element = useRenderElement("button", componentProps, { 15875 state, 15876 ref: [forwardedRef, registerTrigger, triggerElementRef], 15877 props: [hoverProps, focusProps, shouldApplyRootTriggerProps ? rootTriggerProps : void 0, { 15878 onMouseOver(event) { 15879 handleNestedTriggerHover(event.nativeEvent); 15880 }, 15881 onFocus(event) { 15882 if (isEnabledNestedTriggerTarget(getTargetElement(event.nativeEvent))) { 15883 event.preventBaseUIHandler(); 15884 } 15885 }, 15886 onMouseLeave() { 15887 isNestedTriggerHoveredRef.current = false; 15888 nestedTriggerOpenTimeout.clear(); 15889 pointerTypeRef.current = void 0; 15890 }, 15891 onPointerEnter(event) { 15892 pointerTypeRef.current = event.pointerType; 15893 }, 15894 onPointerDown(event) { 15895 pointerTypeRef.current = event.pointerType; 15896 store.set("closeOnClick", closeOnClick); 15897 if (closeOnClick && !store.select("open")) { 15898 store.cancelPendingOpen(event.nativeEvent); 15899 } 15900 }, 15901 onClick(event) { 15902 if (closeOnClick && !store.select("open")) { 15903 store.cancelPendingOpen(event.nativeEvent); 15904 } 15905 }, 15906 id: thisTriggerId, 15907 "data-trigger-disabled": disabled2 ? "" : void 0, 15908 [TOOLTIP_TRIGGER_IDENTIFIER]: disabled2 ? void 0 : "" 15909 }, elementProps], 15910 stateAttributesMapping: triggerOpenStateMapping 15911 }); 15912 return element; 15913 }); 15914 if (true) TooltipTrigger.displayName = "TooltipTrigger"; 15915 15916 // node_modules/@base-ui/react/tooltip/portal/TooltipPortal.mjs 15917 var React112 = __toESM(require_react(), 1); 15918 15919 // node_modules/@base-ui/react/tooltip/portal/TooltipPortalContext.mjs 15920 var React111 = __toESM(require_react(), 1); 15921 var TooltipPortalContext = /* @__PURE__ */ React111.createContext(void 0); 15922 if (true) TooltipPortalContext.displayName = "TooltipPortalContext"; 15923 function useTooltipPortalContext() { 15924 const value = React111.useContext(TooltipPortalContext); 15925 if (value === void 0) { 15926 throw new Error(true ? "Base UI: <Tooltip.Portal> is missing." : formatErrorMessage_default(70)); 15927 } 15928 return value; 15929 } 15930 15931 // node_modules/@base-ui/react/tooltip/portal/TooltipPortal.mjs 15932 var import_jsx_runtime62 = __toESM(require_jsx_runtime(), 1); 15933 var TooltipPortal = /* @__PURE__ */ React112.forwardRef(function TooltipPortal2(props, forwardedRef) { 15934 const { 15935 keepMounted = false, 15936 ...portalProps 15937 } = props; 15938 const store = useTooltipRootContext(); 15939 const mounted = store.useState("mounted"); 15940 const shouldRender = mounted || keepMounted; 15941 if (!shouldRender) { 15942 return null; 15943 } 15944 return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(TooltipPortalContext.Provider, { 15945 value: keepMounted, 15946 children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(FloatingPortalLite, { 15947 ref: forwardedRef, 15948 ...portalProps 15949 }) 15950 }); 15951 }); 15952 if (true) TooltipPortal.displayName = "TooltipPortal"; 15953 15954 // node_modules/@base-ui/react/tooltip/positioner/TooltipPositioner.mjs 15955 var React114 = __toESM(require_react(), 1); 15956 15957 // node_modules/@base-ui/react/tooltip/positioner/TooltipPositionerContext.mjs 15958 var React113 = __toESM(require_react(), 1); 15959 var TooltipPositionerContext = /* @__PURE__ */ React113.createContext(void 0); 15960 if (true) TooltipPositionerContext.displayName = "TooltipPositionerContext"; 15961 function useTooltipPositionerContext() { 15962 const context = React113.useContext(TooltipPositionerContext); 15963 if (context === void 0) { 15964 throw new Error(true ? "Base UI: TooltipPositionerContext is missing. TooltipPositioner parts must be placed within <Tooltip.Positioner>." : formatErrorMessage_default(71)); 15965 } 15966 return context; 15967 } 15968 15969 // node_modules/@base-ui/react/tooltip/positioner/TooltipPositioner.mjs 15970 var import_jsx_runtime63 = __toESM(require_jsx_runtime(), 1); 15971 var TooltipPositioner = /* @__PURE__ */ React114.forwardRef(function TooltipPositioner2(componentProps, forwardedRef) { 15972 const { 15973 render: render4, 15974 className, 15975 anchor, 15976 positionMethod = "absolute", 15977 side = "top", 15978 align = "center", 15979 sideOffset = 0, 15980 alignOffset = 0, 15981 collisionBoundary = "clipping-ancestors", 15982 collisionPadding = 5, 15983 arrowPadding = 5, 15984 sticky = false, 15985 disableAnchorTracking = false, 15986 collisionAvoidance = POPUP_COLLISION_AVOIDANCE, 15987 style, 15988 ...elementProps 15989 } = componentProps; 15990 const store = useTooltipRootContext(); 15991 const keepMounted = useTooltipPortalContext(); 15992 const open = store.useState("open"); 15993 const mounted = store.useState("mounted"); 15994 const trackCursorAxis = store.useState("trackCursorAxis"); 15995 const disableHoverablePopup = store.useState("disableHoverablePopup"); 15996 const floatingRootContext = store.useState("floatingRootContext"); 15997 const instantType = store.useState("instantType"); 15998 const transitionStatus = store.useState("transitionStatus"); 15999 const adaptiveOrigin2 = store.useState("adaptiveOrigin"); 16000 const positioning = useAnchorPositioning({ 16001 anchor, 16002 positionMethod, 16003 floatingRootContext, 16004 mounted, 16005 side, 16006 sideOffset, 16007 align, 16008 alignOffset, 16009 collisionBoundary, 16010 collisionPadding, 16011 sticky, 16012 arrowPadding, 16013 disableAnchorTracking, 16014 keepMounted, 16015 collisionAvoidance, 16016 adaptiveOrigin: adaptiveOrigin2 16017 }); 16018 const state = React114.useMemo(() => ({ 16019 open, 16020 side: positioning.side, 16021 align: positioning.align, 16022 anchorHidden: positioning.anchorHidden, 16023 instant: trackCursorAxis !== "none" ? "tracking-cursor" : instantType 16024 }), [open, positioning.side, positioning.align, positioning.anchorHidden, trackCursorAxis, instantType]); 16025 const element = usePositioner(componentProps, state, { 16026 styles: positioning.positionerStyles, 16027 transitionStatus, 16028 props: elementProps, 16029 refs: [forwardedRef, store.useStateSetter("positionerElement")], 16030 hidden: !mounted, 16031 inert: !open || trackCursorAxis === "both" || disableHoverablePopup 16032 }); 16033 return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(TooltipPositionerContext.Provider, { 16034 value: positioning, 16035 children: element 16036 }); 16037 }); 16038 if (true) TooltipPositioner.displayName = "TooltipPositioner"; 16039 16040 // node_modules/@base-ui/react/tooltip/popup/TooltipPopup.mjs 16041 var React115 = __toESM(require_react(), 1); 16042 var TooltipPopup = /* @__PURE__ */ React115.forwardRef(function TooltipPopup2(componentProps, forwardedRef) { 16043 const { 16044 render: render4, 16045 className, 16046 style, 16047 ...elementProps 16048 } = componentProps; 16049 const store = useTooltipRootContext(); 16050 const { 16051 side, 16052 align 16053 } = useTooltipPositionerContext(); 16054 const open = store.useState("open"); 16055 const instantType = store.useState("instantType"); 16056 const transitionStatus = store.useState("transitionStatus"); 16057 const popupProps = store.useState("popupProps"); 16058 const floatingContext = store.useState("floatingRootContext"); 16059 const disabled2 = store.useState("disabled"); 16060 const closeDelay = store.useState("closeDelay"); 16061 useOpenChangeComplete({ 16062 open, 16063 ref: store.context.popupRef, 16064 onComplete() { 16065 if (open) { 16066 store.context.onOpenChangeComplete?.(true); 16067 } 16068 } 16069 }); 16070 useHoverFloatingInteraction(floatingContext, { 16071 enabled: !disabled2, 16072 closeDelay 16073 }); 16074 const setPopupElement = store.useStateSetter("popupElement"); 16075 const state = { 16076 open, 16077 side, 16078 align, 16079 instant: instantType, 16080 transitionStatus 16081 }; 16082 const element = useRenderElement("div", componentProps, { 16083 state, 16084 ref: [forwardedRef, store.context.popupRef, setPopupElement], 16085 props: [FOCUSABLE_POPUP_PROPS, popupProps, getDisabledMountTransitionStyles(transitionStatus), elementProps], 16086 stateAttributesMapping: popupTransitionStateMapping 16087 }); 16088 return element; 16089 }); 16090 if (true) TooltipPopup.displayName = "TooltipPopup"; 16091 16092 // node_modules/@base-ui/react/tooltip/arrow/TooltipArrow.mjs 16093 var React116 = __toESM(require_react(), 1); 16094 var TooltipArrow = /* @__PURE__ */ React116.forwardRef(function TooltipArrow2(componentProps, forwardedRef) { 16095 const { 16096 render: render4, 16097 className, 16098 style, 16099 ...elementProps 16100 } = componentProps; 16101 const store = useTooltipRootContext(); 16102 const { 16103 arrowRef, 16104 side, 16105 align, 16106 arrowUncentered, 16107 arrowStyles 16108 } = useTooltipPositionerContext(); 16109 const open = store.useState("open"); 16110 const instantType = store.useState("instantType"); 16111 const state = { 16112 open, 16113 side, 16114 align, 16115 uncentered: arrowUncentered, 16116 instant: instantType 16117 }; 16118 const element = useRenderElement("div", componentProps, { 16119 state, 16120 ref: [forwardedRef, arrowRef], 16121 props: [{ 16122 style: arrowStyles, 16123 "aria-hidden": true 16124 }, elementProps], 16125 stateAttributesMapping: popupStateMapping 16126 }); 16127 return element; 16128 }); 16129 if (true) TooltipArrow.displayName = "TooltipArrow"; 16130 16131 // node_modules/@base-ui/react/tooltip/provider/TooltipProvider.mjs 16132 var React117 = __toESM(require_react(), 1); 16133 var import_jsx_runtime64 = __toESM(require_jsx_runtime(), 1); 16134 var TooltipProvider = function TooltipProvider2(props) { 16135 const { 16136 delay, 16137 closeDelay, 16138 timeout = 400 16139 } = props; 16140 const delayValue = React117.useMemo(() => ({ 16141 open: delay, 16142 close: closeDelay 16143 }), [delay, closeDelay]); 16144 return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(TooltipProviderContext.Provider, { 16145 value: delay, 16146 children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(FloatingDelayGroup, { 16147 delay: delayValue, 16148 timeoutMs: timeout, 16149 children: props.children 16150 }) 16151 }); 16152 }; 16153 if (true) TooltipProvider.displayName = "TooltipProvider"; 16154 16155 // node_modules/@base-ui/react/tooltip/viewport/TooltipViewport.mjs 16156 var React118 = __toESM(require_react(), 1); 16157 var TooltipViewport = /* @__PURE__ */ React118.forwardRef(function TooltipViewport2(componentProps, forwardedRef) { 16158 const { 16159 render: render4, 16160 className, 16161 style, 16162 children, 16163 ...elementProps 16164 } = componentProps; 16165 const store = useTooltipRootContext(); 16166 const positioner = useTooltipPositionerContext(); 16167 const instantType = store.useState("instantType"); 16168 const { 16169 children: childrenToRender, 16170 state: viewportState 16171 } = usePopupViewport({ 16172 store, 16173 side: positioner.side, 16174 children 16175 }); 16176 const state = { 16177 activationDirection: viewportState.activationDirection, 16178 transitioning: viewportState.transitioning, 16179 instant: instantType 16180 }; 16181 return useRenderElement("div", componentProps, { 16182 state, 16183 ref: forwardedRef, 16184 props: [elementProps, { 16185 children: childrenToRender 16186 }], 16187 stateAttributesMapping: popupViewportStateMapping 16188 }); 16189 }); 16190 if (true) TooltipViewport.displayName = "TooltipViewport"; 16191 16192 // node_modules/@base-ui/react/tooltip/store/TooltipHandle.mjs 16193 var TooltipHandle = class extends BasePopupHandle { 16194 constructor() { 16195 super(createNullTooltipStore(), "Tooltip"); 16196 } 16197 /** 16198 * Opens the tooltip and associates it with the trigger with the given id. 16199 * 16200 * This method should only be called in an event handler or an effect (not during rendering). 16201 * 16202 * @param triggerId ID of the trigger to associate with the tooltip. The trigger must be a matching 16203 * `Tooltip.Trigger` with this handle passed as a prop. 16204 */ 16205 open(triggerId) { 16206 this.openByTrigger(triggerId); 16207 } 16208 /** 16209 * Closes the tooltip. 16210 * 16211 * This method should only be called in an event handler or an effect (not during rendering). 16212 */ 16213 close() { 16214 this.closePopup(); 16215 } 16216 /** 16217 * Whether the tooltip is currently open. Returns `false` while no root is attached to the handle. 16218 */ 16219 get isOpen() { 16220 return this.attachedStore?.select("open") ?? false; 16221 } 16222 }; 16223 function createTooltipHandle() { 16224 return new TooltipHandle(); 16225 } 16226 16227 // node_modules/@base-ui/react/use-render/useRender.mjs 16228 function useRender(params) { 16229 return useRenderElement(params.defaultTagName ?? "div", params, params); 16230 } 16231 16232 // packages/ui/build-module/text/text.mjs 16233 var import_element15 = __toESM(require_element(), 1); 16234 var STYLE_HASH_ATTRIBUTE = "data-wp-hash"; 16235 function getRuntime() { 16236 const globalScope = globalThis; 16237 if (globalScope.__wpStyleRuntime) { 16238 return globalScope.__wpStyleRuntime; 16239 } 16240 globalScope.__wpStyleRuntime = { 16241 documents: /* @__PURE__ */ new Map(), 16242 styles: /* @__PURE__ */ new Map(), 16243 injectedStyles: /* @__PURE__ */ new WeakMap() 16244 }; 16245 if (typeof document !== "undefined") { 16246 registerDocument(document); 16247 } 16248 return globalScope.__wpStyleRuntime; 16249 } 16250 function documentContainsStyleHash(targetDocument, hash) { 16251 if (!targetDocument.head) { 16252 return false; 16253 } 16254 for (const style of targetDocument.head.querySelectorAll( 16255 `style[$STYLE_HASH_ATTRIBUTE}]` 16256 )) { 16257 if (style.getAttribute(STYLE_HASH_ATTRIBUTE) === hash) { 16258 return true; 16259 } 16260 } 16261 return false; 16262 } 16263 function injectStyle(targetDocument, hash, css) { 16264 if (!targetDocument.head) { 16265 return; 16266 } 16267 const runtime = getRuntime(); 16268 let injectedStyles = runtime.injectedStyles.get(targetDocument); 16269 if (!injectedStyles) { 16270 injectedStyles = /* @__PURE__ */ new Set(); 16271 runtime.injectedStyles.set(targetDocument, injectedStyles); 16272 } 16273 if (injectedStyles.has(hash)) { 16274 return; 16275 } 16276 if (documentContainsStyleHash(targetDocument, hash)) { 16277 injectedStyles.add(hash); 16278 return; 16279 } 16280 const style = targetDocument.createElement("style"); 16281 style.setAttribute(STYLE_HASH_ATTRIBUTE, hash); 16282 style.appendChild(targetDocument.createTextNode(css)); 16283 targetDocument.head.appendChild(style); 16284 injectedStyles.add(hash); 16285 } 16286 function registerDocument(targetDocument) { 16287 const runtime = getRuntime(); 16288 runtime.documents.set( 16289 targetDocument, 16290 (runtime.documents.get(targetDocument) ?? 0) + 1 16291 ); 16292 for (const [hash, css] of runtime.styles) { 16293 injectStyle(targetDocument, hash, css); 16294 } 16295 return () => { 16296 const count = runtime.documents.get(targetDocument); 16297 if (count === void 0) { 16298 return; 16299 } 16300 if (count <= 1) { 16301 runtime.documents.delete(targetDocument); 16302 return; 16303 } 16304 runtime.documents.set(targetDocument, count - 1); 16305 }; 16306 } 16307 function registerStyle(hash, css) { 16308 const runtime = getRuntime(); 16309 runtime.styles.set(hash, css); 16310 for (const targetDocument of runtime.documents.keys()) { 16311 injectStyle(targetDocument, hash, css); 16312 } 16313 } 16314 if (typeof process === "undefined" || true) { 16315 registerStyle("3167e7d116", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._83ed8a8da5dd50ea__text{text-wrap:pretty;margin:0}._14437cfb77831647__heading-2xl{--_gcd-heading-font-size:var(--wpds-typography-font-size-2xl,32px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-emphasis,600);--_gcd-p-font-size:var(--wpds-typography-font-size-2xl,32px);--_gcd-p-line-height:var(--wpds-typography-line-height-2xl,40px);font-size:var(--wpds-typography-font-size-2xl,32px);line-height:var(--wpds-typography-line-height-2xl,40px)}._14437cfb77831647__heading-2xl,._3c78b7fa9b4072dd__heading-xl{font-family:var(--wpds-typography-font-family-heading,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-typography-font-weight-emphasis,600)}._3c78b7fa9b4072dd__heading-xl{--_gcd-heading-font-size:var(--wpds-typography-font-size-xl,20px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-emphasis,600);--_gcd-p-font-size:var(--wpds-typography-font-size-xl,20px);--_gcd-p-line-height:var(--wpds-typography-line-height-md,24px);font-size:var(--wpds-typography-font-size-xl,20px);line-height:var(--wpds-typography-line-height-md,24px)}.aa58f227716bcde2__heading-lg{--_gcd-heading-font-size:var(--wpds-typography-font-size-lg,15px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-emphasis,600);--_gcd-p-font-size:var(--wpds-typography-font-size-lg,15px);--_gcd-p-line-height:var(--wpds-typography-line-height-sm,20px);font-size:var(--wpds-typography-font-size-lg,15px)}.aa58f227716bcde2__heading-lg,.fc4da56d8dfe52c4__heading-md{font-family:var(--wpds-typography-font-family-heading,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-typography-font-weight-emphasis,600);line-height:var(--wpds-typography-line-height-sm,20px)}.fc4da56d8dfe52c4__heading-md{--_gcd-heading-font-size:var(--wpds-typography-font-size-md,13px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-emphasis,600);--_gcd-p-font-size:var(--wpds-typography-font-size-md,13px);--_gcd-p-line-height:var(--wpds-typography-line-height-sm,20px);font-size:var(--wpds-typography-font-size-md,13px)}.a9b78c7c82e8dff7__heading-sm{--_gcd-heading-font-size:var(--wpds-typography-font-size-xs,11px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-emphasis,600);--_gcd-p-font-size:var(--wpds-typography-font-size-xs,11px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);font-family:var(--wpds-typography-font-family-heading,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);line-height:var(--wpds-typography-line-height-xs,16px);text-transform:uppercase}._305ff559e52180d5__body-xl{--_gcd-heading-font-size:var(--wpds-typography-font-size-xl,20px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-default,400);--_gcd-p-font-size:var(--wpds-typography-font-size-xl,20px);--_gcd-p-line-height:var(--wpds-typography-line-height-xl,32px);font-size:var(--wpds-typography-font-size-xl,20px);line-height:var(--wpds-typography-line-height-xl,32px)}._305ff559e52180d5__body-xl,.ca1aa3fc2029e958__body-lg{font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-typography-font-weight-default,400)}.ca1aa3fc2029e958__body-lg{--_gcd-heading-font-size:var(--wpds-typography-font-size-lg,15px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-default,400);--_gcd-p-font-size:var(--wpds-typography-font-size-lg,15px);--_gcd-p-line-height:var(--wpds-typography-line-height-md,24px);font-size:var(--wpds-typography-font-size-lg,15px);line-height:var(--wpds-typography-line-height-md,24px)}._131101940be12424__body-md{--_gcd-heading-font-size:var(--wpds-typography-font-size-md,13px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-default,400);--_gcd-p-font-size:var(--wpds-typography-font-size-md,13px);--_gcd-p-line-height:var(--wpds-typography-line-height-sm,20px);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--wpds-typography-line-height-sm,20px)}._0e8d87a42c1f75fa__body-sm,._131101940be12424__body-md{font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-weight:var(--wpds-typography-font-weight-default,400)}._0e8d87a42c1f75fa__body-sm{--_gcd-heading-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-heading-font-weight:var(--wpds-typography-font-weight-default,400);--_gcd-p-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);font-size:var(--wpds-typography-font-size-sm,12px);line-height:var(--wpds-typography-line-height-xs,16px)}}}'); 16316 } 16317 var style_default = { "text": "_83ed8a8da5dd50ea__text", "heading-2xl": "_14437cfb77831647__heading-2xl", "heading-xl": "_3c78b7fa9b4072dd__heading-xl", "heading-lg": "aa58f227716bcde2__heading-lg", "heading-md": "fc4da56d8dfe52c4__heading-md", "heading-sm": "a9b78c7c82e8dff7__heading-sm", "body-xl": "_305ff559e52180d5__body-xl", "body-lg": "ca1aa3fc2029e958__body-lg", "body-md": "_131101940be12424__body-md", "body-sm": "_0e8d87a42c1f75fa__body-sm" }; 16318 if (typeof process === "undefined" || true) { 16319 registerStyle("e8e31009f5", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-weak,#707070))}&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-emphasis,600));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}.c59a0ebebd71fa4a__ol{list-style:var(--_gcd-ol-list-style,none);margin:var(--_gcd-ol-margin,0);padding-block:var(--_gcd-ol-padding-block,0);padding-inline:var(--_gcd-ol-padding-inline,0)}._46b5cb0c8e24e8c9__li{margin:var(--_gcd-li-margin,0)}"); 16320 } 16321 var global_css_defense_default = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a", "ol": "c59a0ebebd71fa4a__ol", "li": "_46b5cb0c8e24e8c9__li" }; 16322 var Text = (0, import_element15.forwardRef)(function Text2({ variant = "body-md", render: render4, className, ...props }, ref) { 16323 const element = useRender({ 16324 render: render4, 16325 defaultTagName: "span", 16326 ref, 16327 props: mergeProps(props, { 16328 className: clsx_default( 16329 style_default.text, 16330 global_css_defense_default.heading, 16331 global_css_defense_default.p, 16332 style_default[variant], 16333 className 16334 ) 16335 }) 16336 }); 16337 return element; 16338 }); 16339 16340 // packages/ui/build-module/badge/badge.mjs 16341 var import_jsx_runtime65 = __toESM(require_jsx_runtime(), 1); 16342 var STYLE_HASH_ATTRIBUTE2 = "data-wp-hash"; 16343 function getRuntime2() { 16344 const globalScope = globalThis; 16345 if (globalScope.__wpStyleRuntime) { 16346 return globalScope.__wpStyleRuntime; 16347 } 16348 globalScope.__wpStyleRuntime = { 16349 documents: /* @__PURE__ */ new Map(), 16350 styles: /* @__PURE__ */ new Map(), 16351 injectedStyles: /* @__PURE__ */ new WeakMap() 16352 }; 16353 if (typeof document !== "undefined") { 16354 registerDocument2(document); 16355 } 16356 return globalScope.__wpStyleRuntime; 16357 } 16358 function documentContainsStyleHash2(targetDocument, hash) { 16359 if (!targetDocument.head) { 16360 return false; 16361 } 16362 for (const style of targetDocument.head.querySelectorAll( 16363 `style[$STYLE_HASH_ATTRIBUTE2}]` 16364 )) { 16365 if (style.getAttribute(STYLE_HASH_ATTRIBUTE2) === hash) { 16366 return true; 16367 } 16368 } 16369 return false; 16370 } 16371 function injectStyle2(targetDocument, hash, css) { 16372 if (!targetDocument.head) { 16373 return; 16374 } 16375 const runtime = getRuntime2(); 16376 let injectedStyles = runtime.injectedStyles.get(targetDocument); 16377 if (!injectedStyles) { 16378 injectedStyles = /* @__PURE__ */ new Set(); 16379 runtime.injectedStyles.set(targetDocument, injectedStyles); 16380 } 16381 if (injectedStyles.has(hash)) { 16382 return; 16383 } 16384 if (documentContainsStyleHash2(targetDocument, hash)) { 16385 injectedStyles.add(hash); 16386 return; 16387 } 16388 const style = targetDocument.createElement("style"); 16389 style.setAttribute(STYLE_HASH_ATTRIBUTE2, hash); 16390 style.appendChild(targetDocument.createTextNode(css)); 16391 targetDocument.head.appendChild(style); 16392 injectedStyles.add(hash); 16393 } 16394 function registerDocument2(targetDocument) { 16395 const runtime = getRuntime2(); 16396 runtime.documents.set( 16397 targetDocument, 16398 (runtime.documents.get(targetDocument) ?? 0) + 1 16399 ); 16400 for (const [hash, css] of runtime.styles) { 16401 injectStyle2(targetDocument, hash, css); 16402 } 16403 return () => { 16404 const count = runtime.documents.get(targetDocument); 16405 if (count === void 0) { 16406 return; 16407 } 16408 if (count <= 1) { 16409 runtime.documents.delete(targetDocument); 16410 return; 16411 } 16412 runtime.documents.set(targetDocument, count - 1); 16413 }; 16414 } 16415 function registerStyle2(hash, css) { 16416 const runtime = getRuntime2(); 16417 runtime.styles.set(hash, css); 16418 for (const targetDocument of runtime.documents.keys()) { 16419 injectStyle2(targetDocument, hash, css); 16420 } 16421 } 16422 if (typeof process === "undefined" || true) { 16423 registerStyle2("59353631d1", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._96e6251aad1a6136__badge{border-radius:var(--wpds-border-radius-lg,8px);padding-block:var(--wpds-dimension-padding-xs,4px);padding-inline:var(--wpds-dimension-padding-sm,8px)}._99f7158cb520f750__is-high-intent{background-color:var(--wpds-color-background-surface-error,#f7e6e3);color:var(--wpds-color-foreground-content-error,#470000)}.c20ebef2365bc8b7__is-medium-intent{background-color:var(--wpds-color-background-surface-warning,#fae8c8);color:var(--wpds-color-foreground-content-warning,#2e1900)}._365e1626c6202e52__is-low-intent{background-color:var(--wpds-color-background-surface-caution,#ffea8f);color:var(--wpds-color-foreground-content-caution,#281d00)}._33f8198127ddf4ef__is-stable-intent{background-color:var(--wpds-color-background-surface-success,#ccf4d2);color:var(--wpds-color-foreground-content-success,#002900)}._04c1aca8fc449412__is-informational-intent{background-color:var(--wpds-color-background-surface-info,#e0ebf8);color:var(--wpds-color-foreground-content-info,#001b4f)}._90726e69d495ec19__is-draft-intent{background-color:var(--wpds-color-background-surface-neutral-weak,#f4f4f4);color:var(--wpds-color-foreground-content-neutral,#1e1e1e)}._898f4a544993bd39__is-none-intent{background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);padding-block:calc(var(--wpds-dimension-padding-xs, 4px) - var(--wpds-border-width-xs, 1px));padding-inline:calc(var(--wpds-dimension-padding-sm, 8px) - var(--wpds-border-width-xs, 1px))}}}"); 16424 } 16425 var style_default2 = { "badge": "_96e6251aad1a6136__badge", "is-high-intent": "_99f7158cb520f750__is-high-intent", "is-medium-intent": "c20ebef2365bc8b7__is-medium-intent", "is-low-intent": "_365e1626c6202e52__is-low-intent", "is-stable-intent": "_33f8198127ddf4ef__is-stable-intent", "is-informational-intent": "_04c1aca8fc449412__is-informational-intent", "is-draft-intent": "_90726e69d495ec19__is-draft-intent", "is-none-intent": "_898f4a544993bd39__is-none-intent" }; 16426 var Badge = (0, import_element16.forwardRef)(function Badge2({ intent = "none", className, ...props }, ref) { 16427 return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)( 16428 Text, 16429 { 16430 ref, 16431 className: clsx_default( 16432 style_default2.badge, 16433 style_default2[`is-$intent}-intent`], 16434 className 16435 ), 16436 ...props, 16437 variant: "body-sm" 16438 } 16439 ); 16440 }); 16441 16442 // packages/ui/build-module/tooltip/index.mjs 16443 var tooltip_exports = {}; 16444 __export(tooltip_exports, { 16445 Popup: () => Popup, 16446 Portal: () => Portal, 16447 Positioner: () => Positioner, 16448 Provider: () => Provider, 16449 Root: () => Root, 16450 Trigger: () => Trigger 16451 }); 16452 16453 // packages/ui/build-module/tooltip/popup.mjs 16454 var import_element20 = __toESM(require_element(), 1); 16455 16456 // packages/ui/build-module/tooltip/portal.mjs 16457 var import_element17 = __toESM(require_element(), 1); 16458 16459 // packages/ui/build-module/utils/wp-compat-overlay-slot.mjs 16460 var STYLE_HASH_ATTRIBUTE3 = "data-wp-hash"; 16461 function getRuntime3() { 16462 const globalScope = globalThis; 16463 if (globalScope.__wpStyleRuntime) { 16464 return globalScope.__wpStyleRuntime; 16465 } 16466 globalScope.__wpStyleRuntime = { 16467 documents: /* @__PURE__ */ new Map(), 16468 styles: /* @__PURE__ */ new Map(), 16469 injectedStyles: /* @__PURE__ */ new WeakMap() 16470 }; 16471 if (typeof document !== "undefined") { 16472 registerDocument3(document); 16473 } 16474 return globalScope.__wpStyleRuntime; 16475 } 16476 function documentContainsStyleHash3(targetDocument, hash) { 16477 if (!targetDocument.head) { 16478 return false; 16479 } 16480 for (const style of targetDocument.head.querySelectorAll( 16481 `style[$STYLE_HASH_ATTRIBUTE3}]` 16482 )) { 16483 if (style.getAttribute(STYLE_HASH_ATTRIBUTE3) === hash) { 16484 return true; 16485 } 16486 } 16487 return false; 16488 } 16489 function injectStyle3(targetDocument, hash, css) { 16490 if (!targetDocument.head) { 16491 return; 16492 } 16493 const runtime = getRuntime3(); 16494 let injectedStyles = runtime.injectedStyles.get(targetDocument); 16495 if (!injectedStyles) { 16496 injectedStyles = /* @__PURE__ */ new Set(); 16497 runtime.injectedStyles.set(targetDocument, injectedStyles); 16498 } 16499 if (injectedStyles.has(hash)) { 16500 return; 16501 } 16502 if (documentContainsStyleHash3(targetDocument, hash)) { 16503 injectedStyles.add(hash); 16504 return; 16505 } 16506 const style = targetDocument.createElement("style"); 16507 style.setAttribute(STYLE_HASH_ATTRIBUTE3, hash); 16508 style.appendChild(targetDocument.createTextNode(css)); 16509 targetDocument.head.appendChild(style); 16510 injectedStyles.add(hash); 16511 } 16512 function registerDocument3(targetDocument) { 16513 const runtime = getRuntime3(); 16514 runtime.documents.set( 16515 targetDocument, 16516 (runtime.documents.get(targetDocument) ?? 0) + 1 16517 ); 16518 for (const [hash, css] of runtime.styles) { 16519 injectStyle3(targetDocument, hash, css); 16520 } 16521 return () => { 16522 const count = runtime.documents.get(targetDocument); 16523 if (count === void 0) { 16524 return; 16525 } 16526 if (count <= 1) { 16527 runtime.documents.delete(targetDocument); 16528 return; 16529 } 16530 runtime.documents.set(targetDocument, count - 1); 16531 }; 16532 } 16533 function registerStyle3(hash, css) { 16534 const runtime = getRuntime3(); 16535 runtime.styles.set(hash, css); 16536 for (const targetDocument of runtime.documents.keys()) { 16537 injectStyle3(targetDocument, hash, css); 16538 } 16539 } 16540 if (typeof process === "undefined" || true) { 16541 registerStyle3("be37f31c1e", "._11fc52b637ff8a7e__slot{inset:0;isolation:isolate;pointer-events:none;position:fixed;z-index:1000000003}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._11fc52b637ff8a7e__slot>*{pointer-events:auto}}}"); 16542 } 16543 var wp_compat_overlay_slot_default = { "slot": "_11fc52b637ff8a7e__slot" }; 16544 var WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE = "data-wp-compat-overlay-slot"; 16545 function resolveOwnerDocument() { 16546 return typeof document === "undefined" ? null : document; 16547 } 16548 function isInWordPressEnvironment() { 16549 let topWp; 16550 try { 16551 topWp = window.top?.wp; 16552 } catch { 16553 } 16554 const wp = topWp ?? window.wp; 16555 return typeof wp?.components === "object" && wp.components !== null; 16556 } 16557 var cachedSlot = null; 16558 function ensureSlotIsAccessible(element) { 16559 element.setAttribute("aria-hidden", "false"); 16560 return element; 16561 } 16562 function createSlot(ownerDocument2) { 16563 const element = ownerDocument2.createElement("div"); 16564 element.setAttribute(WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE, ""); 16565 if (wp_compat_overlay_slot_default.slot) { 16566 element.classList.add(wp_compat_overlay_slot_default.slot); 16567 } 16568 ownerDocument2.body.appendChild(element); 16569 return element; 16570 } 16571 function getWpCompatOverlaySlot() { 16572 if (typeof window === "undefined") { 16573 return void 0; 16574 } 16575 if (!isInWordPressEnvironment() && window.__wpUiCompatOverlaySlotEnabled !== true) { 16576 return void 0; 16577 } 16578 const ownerDocument2 = resolveOwnerDocument(); 16579 if (!ownerDocument2 || !ownerDocument2.body) { 16580 return void 0; 16581 } 16582 if (cachedSlot && cachedSlot.ownerDocument === ownerDocument2 && cachedSlot.isConnected) { 16583 return ensureSlotIsAccessible(cachedSlot); 16584 } 16585 const existing = ownerDocument2.querySelector( 16586 `[$WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE}]` 16587 ); 16588 if (existing instanceof HTMLDivElement) { 16589 cachedSlot = ensureSlotIsAccessible(existing); 16590 return cachedSlot; 16591 } 16592 if (cachedSlot?.isConnected) { 16593 cachedSlot.remove(); 16594 } 16595 cachedSlot = ensureSlotIsAccessible(createSlot(ownerDocument2)); 16596 return cachedSlot; 16597 } 16598 16599 // packages/ui/build-module/tooltip/portal.mjs 16600 var import_jsx_runtime66 = __toESM(require_jsx_runtime(), 1); 16601 var Portal = (0, import_element17.forwardRef)( 16602 function TooltipPortal3({ container, ...restProps }, ref) { 16603 return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)( 16604 index_parts_exports3.Portal, 16605 { 16606 container: container ?? getWpCompatOverlaySlot(), 16607 ...restProps, 16608 ref 16609 } 16610 ); 16611 } 16612 ); 16613 16614 // packages/ui/build-module/tooltip/positioner.mjs 16615 var import_element18 = __toESM(require_element(), 1); 16616 var import_jsx_runtime67 = __toESM(require_jsx_runtime(), 1); 16617 var STYLE_HASH_ATTRIBUTE4 = "data-wp-hash"; 16618 function getRuntime4() { 16619 const globalScope = globalThis; 16620 if (globalScope.__wpStyleRuntime) { 16621 return globalScope.__wpStyleRuntime; 16622 } 16623 globalScope.__wpStyleRuntime = { 16624 documents: /* @__PURE__ */ new Map(), 16625 styles: /* @__PURE__ */ new Map(), 16626 injectedStyles: /* @__PURE__ */ new WeakMap() 16627 }; 16628 if (typeof document !== "undefined") { 16629 registerDocument4(document); 16630 } 16631 return globalScope.__wpStyleRuntime; 16632 } 16633 function documentContainsStyleHash4(targetDocument, hash) { 16634 if (!targetDocument.head) { 16635 return false; 16636 } 16637 for (const style of targetDocument.head.querySelectorAll( 16638 `style[$STYLE_HASH_ATTRIBUTE4}]` 16639 )) { 16640 if (style.getAttribute(STYLE_HASH_ATTRIBUTE4) === hash) { 16641 return true; 16642 } 16643 } 16644 return false; 16645 } 16646 function injectStyle4(targetDocument, hash, css) { 16647 if (!targetDocument.head) { 16648 return; 16649 } 16650 const runtime = getRuntime4(); 16651 let injectedStyles = runtime.injectedStyles.get(targetDocument); 16652 if (!injectedStyles) { 16653 injectedStyles = /* @__PURE__ */ new Set(); 16654 runtime.injectedStyles.set(targetDocument, injectedStyles); 16655 } 16656 if (injectedStyles.has(hash)) { 16657 return; 16658 } 16659 if (documentContainsStyleHash4(targetDocument, hash)) { 16660 injectedStyles.add(hash); 16661 return; 16662 } 16663 const style = targetDocument.createElement("style"); 16664 style.setAttribute(STYLE_HASH_ATTRIBUTE4, hash); 16665 style.appendChild(targetDocument.createTextNode(css)); 16666 targetDocument.head.appendChild(style); 16667 injectedStyles.add(hash); 16668 } 16669 function registerDocument4(targetDocument) { 16670 const runtime = getRuntime4(); 16671 runtime.documents.set( 16672 targetDocument, 16673 (runtime.documents.get(targetDocument) ?? 0) + 1 16674 ); 16675 for (const [hash, css] of runtime.styles) { 16676 injectStyle4(targetDocument, hash, css); 16677 } 16678 return () => { 16679 const count = runtime.documents.get(targetDocument); 16680 if (count === void 0) { 16681 return; 16682 } 16683 if (count <= 1) { 16684 runtime.documents.delete(targetDocument); 16685 return; 16686 } 16687 runtime.documents.set(targetDocument, count - 1); 16688 }; 16689 } 16690 function registerStyle4(hash, css) { 16691 const runtime = getRuntime4(); 16692 runtime.styles.set(hash, css); 16693 for (const targetDocument of runtime.documents.keys()) { 16694 injectStyle4(targetDocument, hash, css); 16695 } 16696 } 16697 if (typeof process === "undefined" || true) { 16698 registerStyle4("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); 16699 } 16700 var resets_default = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; 16701 if (typeof process === "undefined" || true) { 16702 registerStyle4("19fcc06039", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._480b748dd3510e64__positioner{z-index:var(--wp-ui-tooltip-z-index,initial)}._50096b232db7709d__popup{--_wp-ui-elevation-sm:0 1px 2px rgba(0,0,0,.05),0 2px 3px rgba(0,0,0,.04),0 6px 6px rgba(0,0,0,.03),0 8px 8px rgba(0,0,0,.02);background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-elevation-sm);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:1.4;padding:var(--wpds-dimension-padding-xs,4px) var(--wpds-dimension-padding-sm,8px);@media (forced-colors:active){border-bottom-color:CanvasText;border-bottom-style:solid;border-bottom-width:1px;border-left-color:CanvasText;border-left-style:solid;border-left-width:1px;border-right-color:CanvasText;border-right-style:solid;border-right-width:1px;border-top-color:CanvasText;border-top-style:solid;border-top-width:1px}}}}'); 16703 } 16704 var style_default3 = { "positioner": "_480b748dd3510e64__positioner", "popup": "_50096b232db7709d__popup" }; 16705 var Positioner = (0, import_element18.forwardRef)( 16706 function TooltipPositioner3({ align = "center", className, side = "top", sideOffset = 4, ...props }, ref) { 16707 return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)( 16708 index_parts_exports3.Positioner, 16709 { 16710 ref, 16711 align, 16712 side, 16713 sideOffset, 16714 ...props, 16715 className: clsx_default( 16716 resets_default["box-sizing"], 16717 style_default3.positioner, 16718 className 16719 ) 16720 } 16721 ); 16722 } 16723 ); 16724 16725 // packages/ui/build-module/utils/render-slot-with-children.mjs 16726 var import_element19 = __toESM(require_element(), 1); 16727 function renderSlotWithChildren(slot, defaultSlot, children) { 16728 return (0, import_element19.cloneElement)(slot ?? defaultSlot, { children }); 16729 } 16730 16731 // packages/ui/build-module/utils/theme-provider.mjs 16732 var theme = __toESM(require_theme(), 1); 16733 16734 // packages/ui/build-module/lock-unlock.mjs 16735 var import_private_apis = __toESM(require_private_apis(), 1); 16736 var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( 16737 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", 16738 "@wordpress/ui" 16739 ); 16740 16741 // packages/ui/build-module/utils/theme-provider.mjs 16742 function getThemeProvider() { 16743 const themePackage = theme; 16744 if (themePackage.ThemeProvider) { 16745 return themePackage.ThemeProvider; 16746 } 16747 if (!themePackage.privateApis) { 16748 throw new Error( 16749 "@wordpress/ui: @wordpress/theme must expose `ThemeProvider` or `privateApis.ThemeProvider`." 16750 ); 16751 } 16752 return unlock( 16753 themePackage.privateApis 16754 ).ThemeProvider; 16755 } 16756 var ThemeProvider = getThemeProvider(); 16757 16758 // packages/ui/build-module/tooltip/popup.mjs 16759 var import_jsx_runtime68 = __toESM(require_jsx_runtime(), 1); 16760 var STYLE_HASH_ATTRIBUTE5 = "data-wp-hash"; 16761 function getRuntime5() { 16762 const globalScope = globalThis; 16763 if (globalScope.__wpStyleRuntime) { 16764 return globalScope.__wpStyleRuntime; 16765 } 16766 globalScope.__wpStyleRuntime = { 16767 documents: /* @__PURE__ */ new Map(), 16768 styles: /* @__PURE__ */ new Map(), 16769 injectedStyles: /* @__PURE__ */ new WeakMap() 16770 }; 16771 if (typeof document !== "undefined") { 16772 registerDocument5(document); 16773 } 16774 return globalScope.__wpStyleRuntime; 16775 } 16776 function documentContainsStyleHash5(targetDocument, hash) { 16777 if (!targetDocument.head) { 16778 return false; 16779 } 16780 for (const style of targetDocument.head.querySelectorAll( 16781 `style[$STYLE_HASH_ATTRIBUTE5}]` 16782 )) { 16783 if (style.getAttribute(STYLE_HASH_ATTRIBUTE5) === hash) { 16784 return true; 16785 } 16786 } 16787 return false; 16788 } 16789 function injectStyle5(targetDocument, hash, css) { 16790 if (!targetDocument.head) { 16791 return; 16792 } 16793 const runtime = getRuntime5(); 16794 let injectedStyles = runtime.injectedStyles.get(targetDocument); 16795 if (!injectedStyles) { 16796 injectedStyles = /* @__PURE__ */ new Set(); 16797 runtime.injectedStyles.set(targetDocument, injectedStyles); 16798 } 16799 if (injectedStyles.has(hash)) { 16800 return; 16801 } 16802 if (documentContainsStyleHash5(targetDocument, hash)) { 16803 injectedStyles.add(hash); 16804 return; 16805 } 16806 const style = targetDocument.createElement("style"); 16807 style.setAttribute(STYLE_HASH_ATTRIBUTE5, hash); 16808 style.appendChild(targetDocument.createTextNode(css)); 16809 targetDocument.head.appendChild(style); 16810 injectedStyles.add(hash); 16811 } 16812 function registerDocument5(targetDocument) { 16813 const runtime = getRuntime5(); 16814 runtime.documents.set( 16815 targetDocument, 16816 (runtime.documents.get(targetDocument) ?? 0) + 1 16817 ); 16818 for (const [hash, css] of runtime.styles) { 16819 injectStyle5(targetDocument, hash, css); 16820 } 16821 return () => { 16822 const count = runtime.documents.get(targetDocument); 16823 if (count === void 0) { 16824 return; 16825 } 16826 if (count <= 1) { 16827 runtime.documents.delete(targetDocument); 16828 return; 16829 } 16830 runtime.documents.set(targetDocument, count - 1); 16831 }; 16832 } 16833 function registerStyle5(hash, css) { 16834 const runtime = getRuntime5(); 16835 runtime.styles.set(hash, css); 16836 for (const targetDocument of runtime.documents.keys()) { 16837 injectStyle5(targetDocument, hash, css); 16838 } 16839 } 16840 if (typeof process === "undefined" || true) { 16841 registerStyle5("19fcc06039", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._480b748dd3510e64__positioner{z-index:var(--wp-ui-tooltip-z-index,initial)}._50096b232db7709d__popup{--_wp-ui-elevation-sm:0 1px 2px rgba(0,0,0,.05),0 2px 3px rgba(0,0,0,.04),0 6px 6px rgba(0,0,0,.03),0 8px 8px rgba(0,0,0,.02);background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-elevation-sm);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:1.4;padding:var(--wpds-dimension-padding-xs,4px) var(--wpds-dimension-padding-sm,8px);@media (forced-colors:active){border-bottom-color:CanvasText;border-bottom-style:solid;border-bottom-width:1px;border-left-color:CanvasText;border-left-style:solid;border-left-width:1px;border-right-color:CanvasText;border-right-style:solid;border-right-width:1px;border-top-color:CanvasText;border-top-style:solid;border-top-width:1px}}}}'); 16842 } 16843 var style_default4 = { "positioner": "_480b748dd3510e64__positioner", "popup": "_50096b232db7709d__popup" }; 16844 var POPUP_COLOR = { background: "#1e1e1e" }; 16845 var Popup = (0, import_element20.forwardRef)(function TooltipPopup3({ portal, positioner, children, className, ...props }, ref) { 16846 const popupContent = /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(ThemeProvider, { color: POPUP_COLOR, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)( 16847 index_parts_exports3.Popup, 16848 { 16849 ref, 16850 className: clsx_default(style_default4.popup, className), 16851 ...props, 16852 children 16853 } 16854 ) }); 16855 const positionedPopup = renderSlotWithChildren( 16856 positioner, 16857 /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Positioner, {}), 16858 popupContent 16859 ); 16860 return renderSlotWithChildren(portal, /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(Portal, {}), positionedPopup); 16861 }); 16862 16863 // packages/ui/build-module/tooltip/trigger.mjs 16864 var import_element21 = __toESM(require_element(), 1); 16865 var import_jsx_runtime69 = __toESM(require_jsx_runtime(), 1); 16866 var Trigger = (0, import_element21.forwardRef)( 16867 function TooltipTrigger3(props, ref) { 16868 return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(index_parts_exports3.Trigger, { ref, ...props }); 16869 } 16870 ); 16871 16872 // packages/ui/build-module/utils/direction-provider.mjs 16873 var import_i18n7 = __toESM(require_i18n(), 1); 16874 var import_jsx_runtime70 = __toESM(require_jsx_runtime(), 1); 16875 function DirectionProvider3({ children }) { 16876 return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(DirectionProvider, { direction: (0, import_i18n7.isRTL)() ? "rtl" : "ltr", children }); 16877 } 16878 16879 // packages/ui/build-module/tooltip/root.mjs 16880 var import_jsx_runtime71 = __toESM(require_jsx_runtime(), 1); 16881 function Root(props) { 16882 return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(DirectionProvider3, { children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(index_parts_exports3.Root, { ...props }) }); 16883 } 16884 16885 // packages/ui/build-module/tooltip/provider.mjs 16886 var import_jsx_runtime72 = __toESM(require_jsx_runtime(), 1); 16887 function Provider({ ...props }) { 16888 return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(index_parts_exports3.Provider, { ...props }); 16889 } 16890 16891 // packages/ui/build-module/link/link.mjs 16892 var import_element22 = __toESM(require_element(), 1); 16893 var import_i18n8 = __toESM(require_i18n(), 1); 16894 var import_jsx_runtime73 = __toESM(require_jsx_runtime(), 1); 16895 var STYLE_HASH_ATTRIBUTE6 = "data-wp-hash"; 16896 function getRuntime6() { 16897 const globalScope = globalThis; 16898 if (globalScope.__wpStyleRuntime) { 16899 return globalScope.__wpStyleRuntime; 16900 } 16901 globalScope.__wpStyleRuntime = { 16902 documents: /* @__PURE__ */ new Map(), 16903 styles: /* @__PURE__ */ new Map(), 16904 injectedStyles: /* @__PURE__ */ new WeakMap() 16905 }; 16906 if (typeof document !== "undefined") { 16907 registerDocument6(document); 16908 } 16909 return globalScope.__wpStyleRuntime; 16910 } 16911 function documentContainsStyleHash6(targetDocument, hash) { 16912 if (!targetDocument.head) { 16913 return false; 16914 } 16915 for (const style of targetDocument.head.querySelectorAll( 16916 `style[$STYLE_HASH_ATTRIBUTE6}]` 16917 )) { 16918 if (style.getAttribute(STYLE_HASH_ATTRIBUTE6) === hash) { 16919 return true; 16920 } 16921 } 16922 return false; 16923 } 16924 function injectStyle6(targetDocument, hash, css) { 16925 if (!targetDocument.head) { 16926 return; 16927 } 16928 const runtime = getRuntime6(); 16929 let injectedStyles = runtime.injectedStyles.get(targetDocument); 16930 if (!injectedStyles) { 16931 injectedStyles = /* @__PURE__ */ new Set(); 16932 runtime.injectedStyles.set(targetDocument, injectedStyles); 16933 } 16934 if (injectedStyles.has(hash)) { 16935 return; 16936 } 16937 if (documentContainsStyleHash6(targetDocument, hash)) { 16938 injectedStyles.add(hash); 16939 return; 16940 } 16941 const style = targetDocument.createElement("style"); 16942 style.setAttribute(STYLE_HASH_ATTRIBUTE6, hash); 16943 style.appendChild(targetDocument.createTextNode(css)); 16944 targetDocument.head.appendChild(style); 16945 injectedStyles.add(hash); 16946 } 16947 function registerDocument6(targetDocument) { 16948 const runtime = getRuntime6(); 16949 runtime.documents.set( 16950 targetDocument, 16951 (runtime.documents.get(targetDocument) ?? 0) + 1 16952 ); 16953 for (const [hash, css] of runtime.styles) { 16954 injectStyle6(targetDocument, hash, css); 16955 } 16956 return () => { 16957 const count = runtime.documents.get(targetDocument); 16958 if (count === void 0) { 16959 return; 16960 } 16961 if (count <= 1) { 16962 runtime.documents.delete(targetDocument); 16963 return; 16964 } 16965 runtime.documents.set(targetDocument, count - 1); 16966 }; 16967 } 16968 function registerStyle6(hash, css) { 16969 const runtime = getRuntime6(); 16970 runtime.styles.set(hash, css); 16971 for (const targetDocument of runtime.documents.keys()) { 16972 injectStyle6(targetDocument, hash, css); 16973 } 16974 } 16975 if (typeof process === "undefined" || true) { 16976 registerStyle6("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); 16977 } 16978 var resets_default2 = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; 16979 if (typeof process === "undefined" || true) { 16980 registerStyle6("08122b3d53", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{.af79fb116edb0dd7__outset-ring--focus:focus,.dfcfdc28396e5d98__outset-ring--focus-visible:focus-visible,.e5cd9ee879f6403a__outset-ring--focus-within:focus-within,:focus-visible ._81935a08e952f267__outset-ring--focus-parent-visible{--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}._3c9f5ee9fc9c136d__outset-ring--focus-within-except-active:focus-within,.abc777e9713fa711__outset-ring--focus-except-active:focus{outline:none}._3c9f5ee9fc9c136d__outset-ring--focus-within-except-active:focus-within:not(:has(:active)),.abc777e9713fa711__outset-ring--focus-except-active:focus:not(:active){--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}}}"); 16981 } 16982 var focus_module_default = { "outset-ring--focus": "af79fb116edb0dd7__outset-ring--focus", "outset-ring--focus-visible": "dfcfdc28396e5d98__outset-ring--focus-visible", "outset-ring--focus-within": "e5cd9ee879f6403a__outset-ring--focus-within", "outset-ring--focus-parent-visible": "_81935a08e952f267__outset-ring--focus-parent-visible", "outset-ring--focus-except-active": "abc777e9713fa711__outset-ring--focus-except-active", "outset-ring--focus-within-except-active": "_3c9f5ee9fc9c136d__outset-ring--focus-within-except-active" }; 16983 if (typeof process === "undefined" || true) { 16984 registerStyle6("e8e6a9be37", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.d4250949359b05ce__link{text-decoration-thickness:from-font;text-underline-offset:.2em}.c6055659b8e2cd2c__is-brand,.c6055659b8e2cd2c__is-brand:visited{--_gcd-a-color:var(--wpds-color-foreground-interactive-brand,var(--wp-admin-theme-color,#3858e9));color:var(--wpds-color-foreground-interactive-brand,var(--wp-admin-theme-color,#3858e9))}.c6055659b8e2cd2c__is-brand:active,.c6055659b8e2cd2c__is-brand:hover{--_gcd-a-color:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000));color:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000))}._92e0dfcaeee15b88__is-neutral,._92e0dfcaeee15b88__is-neutral:visited{--_gcd-a-color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);text-decoration-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d)}._92e0dfcaeee15b88__is-neutral:active,._92e0dfcaeee15b88__is-neutral:hover{--_gcd-a-color:var(--wpds-color-foreground-interactive-neutral-active,#1e1e1e);color:var(--wpds-color-foreground-interactive-neutral-active,#1e1e1e)}.cf122a9bf1035d42__is-unstyled{--_gcd-a-color:inherit;color:inherit;text-decoration:none}._0cb411afac4c86c7__link-icon{display:inline-block;font-weight:var(--wpds-typography-font-weight-default,400);line-height:1;margin-inline-start:var(--wpds-dimension-padding-xs,4px);text-decoration:none}._0cb411afac4c86c7__link-icon:after{content:"\\2197"}._0cb411afac4c86c7__link-icon:dir(rtl):after{content:"\\2196"}}}'); 16985 } 16986 var style_default5 = { "link": "d4250949359b05ce__link", "is-brand": "c6055659b8e2cd2c__is-brand", "is-neutral": "_92e0dfcaeee15b88__is-neutral", "is-unstyled": "cf122a9bf1035d42__is-unstyled", "link-icon": "_0cb411afac4c86c7__link-icon" }; 16987 if (typeof process === "undefined" || true) { 16988 registerStyle6("e8e31009f5", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-weak,#707070))}&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-emphasis,600));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}.c59a0ebebd71fa4a__ol{list-style:var(--_gcd-ol-list-style,none);margin:var(--_gcd-ol-margin,0);padding-block:var(--_gcd-ol-padding-block,0);padding-inline:var(--_gcd-ol-padding-inline,0)}._46b5cb0c8e24e8c9__li{margin:var(--_gcd-li-margin,0)}"); 16989 } 16990 var global_css_defense_default2 = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a", "ol": "c59a0ebebd71fa4a__ol", "li": "_46b5cb0c8e24e8c9__li" }; 16991 var Link = (0, import_element22.forwardRef)(function Link2({ 16992 children, 16993 variant = "default", 16994 tone = "brand", 16995 openInNewTab = false, 16996 target, 16997 render: render4, 16998 className, 16999 ...props 17000 }, ref) { 17001 const shouldShowNewTabIndicator = openInNewTab || /^_blank$/i.test(target ?? ""); 17002 const element = useRender({ 17003 render: render4, 17004 defaultTagName: "a", 17005 ref, 17006 props: mergeProps(props, { 17007 className: clsx_default( 17008 global_css_defense_default2.a, 17009 resets_default2["box-sizing"], 17010 focus_module_default["outset-ring--focus-except-active"], 17011 variant !== "unstyled" && style_default5.link, 17012 variant !== "unstyled" && style_default5[`is-$tone}`], 17013 variant === "unstyled" && style_default5["is-unstyled"], 17014 className 17015 ), 17016 target: target ?? (openInNewTab ? "_blank" : void 0), 17017 children: /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(import_jsx_runtime73.Fragment, { children: [ 17018 children, 17019 shouldShowNewTabIndicator && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)( 17020 "span", 17021 { 17022 className: style_default5["link-icon"], 17023 role: "img", 17024 "aria-label": ( 17025 /* translators: accessibility text appended to link text */ 17026 (0, import_i18n8.__)("(opens in a new tab)") 17027 ) 17028 } 17029 ) 17030 ] }) 17031 }) 17032 }); 17033 return element; 17034 }); 17035 17036 // packages/ui/build-module/menu/index.mjs 17037 var menu_exports = {}; 17038 __export(menu_exports, { 17039 CheckboxItem: () => CheckboxItem, 17040 Group: () => Group, 17041 GroupLabel: () => GroupLabel, 17042 Item: () => Item, 17043 ItemDescription: () => ItemDescription, 17044 ItemLabel: () => ItemLabel, 17045 LinkItem: () => LinkItem, 17046 Popup: () => Popup2, 17047 Portal: () => Portal2, 17048 Positioner: () => Positioner2, 17049 PrefixIcon: () => PrefixIcon, 17050 RadioGroup: () => RadioGroup, 17051 RadioItem: () => RadioItem, 17052 Root: () => Root2, 17053 Separator: () => Separator2, 17054 SubmenuRoot: () => SubmenuRoot, 17055 SubmenuTrigger: () => SubmenuTrigger, 17056 Trigger: () => Trigger2 17057 }); 17058 17059 // packages/ui/build-module/menu/checkbox-item.mjs 17060 var import_element30 = __toESM(require_element(), 1); 17061 17062 // packages/ui/build-module/icon/icon.mjs 17063 var import_element23 = __toESM(require_element(), 1); 17064 var import_primitives35 = __toESM(require_primitives(), 1); 17065 var import_jsx_runtime74 = __toESM(require_jsx_runtime(), 1); 17066 var Icon = (0, import_element23.forwardRef)(function Icon2({ icon, size: size4 = 24, style, ...restProps }, ref) { 17067 const mergedStyle = icon.props.style || style ? { ...icon.props.style, ...style } : void 0; 17068 return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)( 17069 import_primitives35.SVG, 17070 { 17071 ref, 17072 ...icon.props, 17073 ...restProps, 17074 ...mergedStyle ? { style: mergedStyle } : {}, 17075 width: size4, 17076 height: size4 17077 } 17078 ); 17079 }); 17080 17081 // packages/ui/build-module/menu/context.mjs 17082 var import_element24 = __toESM(require_element(), 1); 17083 var MenuContext = (0, import_element24.createContext)({ 17084 isSubmenu: false 17085 }); 17086 var useMenuContext = () => (0, import_element24.useContext)(MenuContext); 17087 var MenuItemContentContext = (0, import_element24.createContext)(null); 17088 var useMenuItemContentContext = () => (0, import_element24.useContext)(MenuItemContentContext); 17089 17090 // packages/ui/build-module/menu/item.mjs 17091 var import_element29 = __toESM(require_element(), 1); 17092 17093 // packages/ui/build-module/utils/keyboard-shortcut.mjs 17094 var import_element26 = __toESM(require_element(), 1); 17095 var import_i18n9 = __toESM(require_i18n(), 1); 17096 17097 // packages/ui/build-module/visually-hidden/visually-hidden.mjs 17098 var import_element25 = __toESM(require_element(), 1); 17099 var STYLE_HASH_ATTRIBUTE7 = "data-wp-hash"; 17100 function getRuntime7() { 17101 const globalScope = globalThis; 17102 if (globalScope.__wpStyleRuntime) { 17103 return globalScope.__wpStyleRuntime; 17104 } 17105 globalScope.__wpStyleRuntime = { 17106 documents: /* @__PURE__ */ new Map(), 17107 styles: /* @__PURE__ */ new Map(), 17108 injectedStyles: /* @__PURE__ */ new WeakMap() 17109 }; 17110 if (typeof document !== "undefined") { 17111 registerDocument7(document); 17112 } 17113 return globalScope.__wpStyleRuntime; 17114 } 17115 function documentContainsStyleHash7(targetDocument, hash) { 17116 if (!targetDocument.head) { 17117 return false; 17118 } 17119 for (const style of targetDocument.head.querySelectorAll( 17120 `style[$STYLE_HASH_ATTRIBUTE7}]` 17121 )) { 17122 if (style.getAttribute(STYLE_HASH_ATTRIBUTE7) === hash) { 17123 return true; 17124 } 17125 } 17126 return false; 17127 } 17128 function injectStyle7(targetDocument, hash, css) { 17129 if (!targetDocument.head) { 17130 return; 17131 } 17132 const runtime = getRuntime7(); 17133 let injectedStyles = runtime.injectedStyles.get(targetDocument); 17134 if (!injectedStyles) { 17135 injectedStyles = /* @__PURE__ */ new Set(); 17136 runtime.injectedStyles.set(targetDocument, injectedStyles); 17137 } 17138 if (injectedStyles.has(hash)) { 17139 return; 17140 } 17141 if (documentContainsStyleHash7(targetDocument, hash)) { 17142 injectedStyles.add(hash); 17143 return; 17144 } 17145 const style = targetDocument.createElement("style"); 17146 style.setAttribute(STYLE_HASH_ATTRIBUTE7, hash); 17147 style.appendChild(targetDocument.createTextNode(css)); 17148 targetDocument.head.appendChild(style); 17149 injectedStyles.add(hash); 17150 } 17151 function registerDocument7(targetDocument) { 17152 const runtime = getRuntime7(); 17153 runtime.documents.set( 17154 targetDocument, 17155 (runtime.documents.get(targetDocument) ?? 0) + 1 17156 ); 17157 for (const [hash, css] of runtime.styles) { 17158 injectStyle7(targetDocument, hash, css); 17159 } 17160 return () => { 17161 const count = runtime.documents.get(targetDocument); 17162 if (count === void 0) { 17163 return; 17164 } 17165 if (count <= 1) { 17166 runtime.documents.delete(targetDocument); 17167 return; 17168 } 17169 runtime.documents.set(targetDocument, count - 1); 17170 }; 17171 } 17172 function registerStyle7(hash, css) { 17173 const runtime = getRuntime7(); 17174 runtime.styles.set(hash, css); 17175 for (const targetDocument of runtime.documents.keys()) { 17176 injectStyle7(targetDocument, hash, css); 17177 } 17178 } 17179 if (typeof process === "undefined" || true) { 17180 registerStyle7("fa606a57ae", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.f37b9e2e191ebd66__visually-hidden{word-wrap:normal;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal}}}"); 17181 } 17182 var style_default6 = { "visually-hidden": "f37b9e2e191ebd66__visually-hidden" }; 17183 var VisuallyHidden = (0, import_element25.forwardRef)( 17184 function VisuallyHidden2({ render: render4, ...restProps }, ref) { 17185 const element = useRender({ 17186 render: render4, 17187 ref, 17188 props: mergeProps( 17189 { className: style_default6["visually-hidden"] }, 17190 restProps, 17191 { 17192 // @ts-expect-error Arbitrary data-* attributes aren't indexable on the typed div props. Kept hardcoded so consumers can't change or remove it. 17193 "data-visually-hidden": "" 17194 } 17195 ) 17196 }); 17197 return element; 17198 } 17199 ); 17200 17201 // packages/ui/build-module/utils/keyboard-shortcut.mjs 17202 var import_jsx_runtime75 = __toESM(require_jsx_runtime(), 1); 17203 function useKeyboardShortcutProps({ 17204 "aria-describedby": ariaDescribedBy, 17205 "aria-keyshortcuts": ariaKeyShortcuts, 17206 shortcut 17207 }) { 17208 const generatedDescriptionId = (0, import_element26.useId)(); 17209 const descriptionId = shortcut ? generatedDescriptionId : void 0; 17210 const describedBy = [ariaDescribedBy, descriptionId].filter(Boolean).join(" "); 17211 return { 17212 descriptionId, 17213 targetProps: { 17214 "aria-describedby": describedBy || void 0, 17215 "aria-keyshortcuts": shortcut?.ariaKeyShortcut ?? ariaKeyShortcuts 17216 } 17217 }; 17218 } 17219 var KeyboardShortcutDescription = (0, import_element26.forwardRef)(function KeyboardShortcutDescription2({ descriptionId, shortcut }, ref) { 17220 return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)( 17221 VisuallyHidden, 17222 { 17223 id: descriptionId, 17224 "aria-hidden": "true", 17225 render: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { ref }), 17226 children: (0, import_i18n9.sprintf)( 17227 /* translators: %s: keyboard shortcut. */ 17228 (0, import_i18n9.__)("Keyboard shortcut: %s"), 17229 shortcut.label ?? shortcut.ariaKeyShortcut 17230 ) 17231 } 17232 ); 17233 }); 17234 var KeyboardShortcutDisplay = (0, import_element26.forwardRef)(function KeyboardShortcutDisplay2({ className, shortcut }, ref) { 17235 return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { ref, "aria-hidden": "true", className, dir: "ltr", children: shortcut.displayShortcut }); 17236 }); 17237 17238 // packages/ui/build-module/menu/item-description.mjs 17239 var import_element27 = __toESM(require_element(), 1); 17240 var import_jsx_runtime76 = __toESM(require_jsx_runtime(), 1); 17241 var STYLE_HASH_ATTRIBUTE8 = "data-wp-hash"; 17242 function getRuntime8() { 17243 const globalScope = globalThis; 17244 if (globalScope.__wpStyleRuntime) { 17245 return globalScope.__wpStyleRuntime; 17246 } 17247 globalScope.__wpStyleRuntime = { 17248 documents: /* @__PURE__ */ new Map(), 17249 styles: /* @__PURE__ */ new Map(), 17250 injectedStyles: /* @__PURE__ */ new WeakMap() 17251 }; 17252 if (typeof document !== "undefined") { 17253 registerDocument8(document); 17254 } 17255 return globalScope.__wpStyleRuntime; 17256 } 17257 function documentContainsStyleHash8(targetDocument, hash) { 17258 if (!targetDocument.head) { 17259 return false; 17260 } 17261 for (const style of targetDocument.head.querySelectorAll( 17262 `style[$STYLE_HASH_ATTRIBUTE8}]` 17263 )) { 17264 if (style.getAttribute(STYLE_HASH_ATTRIBUTE8) === hash) { 17265 return true; 17266 } 17267 } 17268 return false; 17269 } 17270 function injectStyle8(targetDocument, hash, css) { 17271 if (!targetDocument.head) { 17272 return; 17273 } 17274 const runtime = getRuntime8(); 17275 let injectedStyles = runtime.injectedStyles.get(targetDocument); 17276 if (!injectedStyles) { 17277 injectedStyles = /* @__PURE__ */ new Set(); 17278 runtime.injectedStyles.set(targetDocument, injectedStyles); 17279 } 17280 if (injectedStyles.has(hash)) { 17281 return; 17282 } 17283 if (documentContainsStyleHash8(targetDocument, hash)) { 17284 injectedStyles.add(hash); 17285 return; 17286 } 17287 const style = targetDocument.createElement("style"); 17288 style.setAttribute(STYLE_HASH_ATTRIBUTE8, hash); 17289 style.appendChild(targetDocument.createTextNode(css)); 17290 targetDocument.head.appendChild(style); 17291 injectedStyles.add(hash); 17292 } 17293 function registerDocument8(targetDocument) { 17294 const runtime = getRuntime8(); 17295 runtime.documents.set( 17296 targetDocument, 17297 (runtime.documents.get(targetDocument) ?? 0) + 1 17298 ); 17299 for (const [hash, css] of runtime.styles) { 17300 injectStyle8(targetDocument, hash, css); 17301 } 17302 return () => { 17303 const count = runtime.documents.get(targetDocument); 17304 if (count === void 0) { 17305 return; 17306 } 17307 if (count <= 1) { 17308 runtime.documents.delete(targetDocument); 17309 return; 17310 } 17311 runtime.documents.set(targetDocument, count - 1); 17312 }; 17313 } 17314 function registerStyle8(hash, css) { 17315 const runtime = getRuntime8(); 17316 runtime.styles.set(hash, css); 17317 for (const targetDocument of runtime.documents.keys()) { 17318 injectStyle8(targetDocument, hash, css); 17319 } 17320 } 17321 if (typeof process === "undefined" || true) { 17322 registerStyle8("dce31c541c", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion,._7f344b94e270e039__dropdown-motion--fade-only{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}}._380b81b8f79fb10f__dropdown-motion{transform:translate(0);&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=inline-start][data-ending-style],&[data-side=inline-start][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=inline-end][data-ending-style],&[data-side=inline-end][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-start][data-ending-style],&:dir(rtl)[data-side=inline-start][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-end][data-ending-style],&:dir(rtl)[data-side=inline-end][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.d61e2d85c0ee0699__positioner{z-index:var(--wp-ui-menu-z-index,initial)}._34e81249f419a5a5__popup{--wp-ui-menu-popup-padding:var(--wpds-dimension-padding-xs,4px);--wp-ui-menu-min-width:160px;--wp-ui-menu-max-width:var(--wpds-dimension-surface-width-md,400px);--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-group-head-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-selection-indicator-track-size:0px;--wp-ui-menu-selection-indicator-size:var(--wpds-dimension-size-sm,24px);--wp-ui-menu-selection-indicator-gap:0px;--_wp-ui-menu-elevation-md:0px 2px 3px 0px #0000000d,0px 4px 5px 0px #0000000a,0px 12px 12px 0px #00000008,0px 16px 16px 0px #00000005;background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-menu-elevation-md);max-height:min(var(--available-height),480px,60dvh);max-width:min(var(--available-width),var(--wp-ui-menu-max-width));min-width:min(var(--available-width),var(--wp-ui-menu-min-width));outline:none;overflow-block:auto;overscroll-behavior:none;padding:var(--wp-ui-menu-popup-padding);scroll-padding:var(--wp-ui-menu-popup-padding);&:has(._42313b48c5459be3__item-selection-indicator){--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-menu-selection-indicator-track-size:var(--wpds-dimension-size-2xs,16px);--wp-ui-menu-selection-indicator-gap:var(--wpds-dimension-gap-sm,8px)}}._33f07ab17005471d__list{--_wp-ui-menu-item-label-line-height:var(--wpds-typography-line-height-sm,20px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--_wp-ui-menu-item-label-line-height)}._33f07ab17005471d__list,.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{--wp-ui-menu-group-prefix-gap:0px;display:grid;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];min-width:0}.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{grid-column:1/-1}._33f07ab17005471d__list:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.e05914e1005d7c2e__radio-group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.f11085533c0056b0__group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix){--wp-ui-menu-group-prefix-gap:var(--wpds-dimension-gap-xs,4px)}._4a0fd085d76fd23c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);grid-column:1/-1;line-height:var(--wpds-typography-line-height-xs,16px);min-height:var(--wpds-dimension-size-md,32px);padding-block:var(--wpds-dimension-padding-xs,4px);padding-inline:var(--wp-ui-menu-group-head-padding-inline);text-transform:uppercase}.bfc11368eadf3b39__separator{background-color:var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);grid-column:1/-1;height:var(--wpds-border-width-xs,1px);margin-block:var(--wpds-dimension-gap-xs,4px);margin-inline:var(--wp-ui-menu-group-head-padding-inline);@media (forced-colors:active){background-color:CanvasText}}._5c913bce0d8bb0d6__item{--wp-ui-menu-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-menu-item-padding-block:var(--wpds-dimension-padding-xs,4px);--_gcd-a-border-radius:var(--wpds-border-radius-sm,2px);align-items:start;border-radius:var(--wpds-border-radius-sm,2px);display:grid;gap:0;grid-column:1/-1;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];justify-content:stretch;min-height:var(--wp-ui-menu-item-height);min-width:0;padding-block:var(--wp-ui-menu-item-padding-block);scroll-margin:var(--wp-ui-menu-popup-padding);text-decoration:none;user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&[href]{cursor:pointer}@supports (grid-template-columns:subgrid){grid-template-columns:subgrid}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:var(--wpds-border-width-xs,1px) solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}._42313b48c5459be3__item-selection-indicator,._64924ecabf65a5d6__item-prefix,.af879698ede76757__item-content{grid-row:1}._42313b48c5459be3__item-selection-indicator{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:selection-start/selection-end;height:var(--_wp-ui-menu-item-label-line-height);justify-content:center;justify-self:center;pointer-events:none;width:var(--wp-ui-menu-selection-indicator-size);&[data-unchecked]{opacity:0}}._99c5bd141cbf516f__checkbox-selection-icon{translate:0 1px}._59aa9b3b3a651148__radio-selection-icon{fill:currentColor;height:var(--wpds-dimension-size-xs,20px);width:var(--wpds-dimension-size-xs,20px)}._64924ecabf65a5d6__item-prefix{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:prefix-start/prefix-end;justify-content:center;min-width:0}.a836378335a4cbf1__prefix-icon{align-self:flex-start;flex-shrink:0;margin-block-start:calc((var(--_wp-ui-menu-item-label-line-height) - var(--_wp-ui-menu-prefix-icon-size))/2)}.af879698ede76757__item-content{align-items:center;box-sizing:border-box;display:grid;grid-column:content-start/content-end;grid-template-columns:[label-start] minmax(0,1fr) [label-end suffix-start] auto [suffix-end shortcut-start] auto [shortcut-end trailing-start] auto [trailing-end];min-width:0;pointer-events:none}._943a932d9f81c78c__item-children{align-self:start;display:inline-flex;flex-direction:column;gap:2px;grid-column:label-start/label-end;min-width:0}._5ed41da4abcf8958__item-label{--_gcd-heading-color:currentColor;--_gcd-p-line-height:var(--_wp-ui-menu-item-label-line-height);color:inherit;line-height:var(--_wp-ui-menu-item-label-line-height);min-width:0;overflow-wrap:anywhere}.fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:var(--wpds-color-foreground-content-neutral-weak,#707070);color:var(--wpds-color-foreground-content-neutral-weak,#707070);overflow-wrap:anywhere;padding-block-end:var(--wpds-dimension-padding-xs,4px)}._091406749ed93e6e__item-suffix{align-items:center;display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:suffix-start/suffix-end}._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin-inline-start:var(--wpds-dimension-gap-md,12px)}._23630f40071a29ff__item-shortcut{grid-column:shortcut-start/shortcut-end}._06be17a91bf434a0__item-trailing{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:trailing-start/trailing-end;margin-inline-start:var(--wpds-dimension-gap-md,12px)}._943a932d9f81c78c__item-children+:is(._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut,._06be17a91bf434a0__item-trailing){margin-inline-start:var(--wpds-dimension-gap-xl,24px)}._23630f40071a29ff__item-shortcut+._06be17a91bf434a0__item-trailing{margin-inline-start:var(--wpds-dimension-gap-xs,4px)}.b78aec79bf93eba0__submenu-chevron{margin-inline-end:calc(var(--wpds-dimension-gap-sm, 8px)*-1)}.b78aec79bf93eba0__submenu-chevron:dir(rtl){transform:rotate(180deg)}._60da3b6f9718cf76__external-link-indicator{display:inline-block;font-weight:var(--wpds-typography-font-weight-default,400);line-height:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px);text-decoration:none}._60da3b6f9718cf76__external-link-indicator:after{content:"\\2197"}._60da3b6f9718cf76__external-link-indicator:dir(rtl):after{content:"\\2196"}._5c913bce0d8bb0d6__item[aria-disabled=true] ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[aria-disabled=true] ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[aria-disabled=true] ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[aria-disabled=true] ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[aria-disabled=true] ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[aria-disabled=true] .fa88c9f1a96a4c5a__item-description,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) .fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:currentColor;color:inherit}}}'); 17323 } 17324 var style_default7 = { "positioner": "d61e2d85c0ee0699__positioner", "popup": "_34e81249f419a5a5__popup", "item-selection-indicator": "_42313b48c5459be3__item-selection-indicator", "is-root": "_087a537b24fee6a1__is-root _380b81b8f79fb10f__dropdown-motion", "is-submenu": "_6d3b567f6289bdc2__is-submenu _7f344b94e270e039__dropdown-motion--fade-only", "list": "_33f07ab17005471d__list", "group": "f11085533c0056b0__group", "radio-group": "e05914e1005d7c2e__radio-group", "item": "_5c913bce0d8bb0d6__item", "item-prefix": "_64924ecabf65a5d6__item-prefix", "group-label": "_4a0fd085d76fd23c__group-label", "separator": "bfc11368eadf3b39__separator", "item-content": "af879698ede76757__item-content", "checkbox-selection-icon": "_99c5bd141cbf516f__checkbox-selection-icon", "radio-selection-icon": "_59aa9b3b3a651148__radio-selection-icon", "prefix-icon": "a836378335a4cbf1__prefix-icon", "item-children": "_943a932d9f81c78c__item-children", "item-label": "_5ed41da4abcf8958__item-label", "item-description": "fa88c9f1a96a4c5a__item-description", "item-suffix": "_091406749ed93e6e__item-suffix", "item-shortcut": "_23630f40071a29ff__item-shortcut", "item-trailing": "_06be17a91bf434a0__item-trailing", "submenu-chevron": "b78aec79bf93eba0__submenu-chevron", "external-link-indicator": "_60da3b6f9718cf76__external-link-indicator" }; 17325 var ITEM_DESCRIPTION_DIRECT_CHILD = /* @__PURE__ */ Symbol(); 17326 var ItemDescription = (0, import_element27.forwardRef)( 17327 function MenuItemDescription(props, ref) { 17328 const { className, id, validationToken, ...restProps } = props; 17329 if (validationToken !== ITEM_DESCRIPTION_DIRECT_CHILD) { 17330 throw new Error( 17331 "Menu.ItemDescription: Missing direct menu item parent. Render <Menu.ItemDescription> as a direct child of a menu item." 17332 ); 17333 } 17334 return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)( 17335 Text, 17336 { 17337 ref, 17338 variant: "body-sm", 17339 ...restProps, 17340 id, 17341 className: clsx_default(style_default7["item-description"], className) 17342 } 17343 ); 17344 } 17345 ); 17346 17347 // packages/ui/build-module/menu/item-label.mjs 17348 var import_element28 = __toESM(require_element(), 1); 17349 var import_jsx_runtime77 = __toESM(require_jsx_runtime(), 1); 17350 var STYLE_HASH_ATTRIBUTE9 = "data-wp-hash"; 17351 function getRuntime9() { 17352 const globalScope = globalThis; 17353 if (globalScope.__wpStyleRuntime) { 17354 return globalScope.__wpStyleRuntime; 17355 } 17356 globalScope.__wpStyleRuntime = { 17357 documents: /* @__PURE__ */ new Map(), 17358 styles: /* @__PURE__ */ new Map(), 17359 injectedStyles: /* @__PURE__ */ new WeakMap() 17360 }; 17361 if (typeof document !== "undefined") { 17362 registerDocument9(document); 17363 } 17364 return globalScope.__wpStyleRuntime; 17365 } 17366 function documentContainsStyleHash9(targetDocument, hash) { 17367 if (!targetDocument.head) { 17368 return false; 17369 } 17370 for (const style of targetDocument.head.querySelectorAll( 17371 `style[$STYLE_HASH_ATTRIBUTE9}]` 17372 )) { 17373 if (style.getAttribute(STYLE_HASH_ATTRIBUTE9) === hash) { 17374 return true; 17375 } 17376 } 17377 return false; 17378 } 17379 function injectStyle9(targetDocument, hash, css) { 17380 if (!targetDocument.head) { 17381 return; 17382 } 17383 const runtime = getRuntime9(); 17384 let injectedStyles = runtime.injectedStyles.get(targetDocument); 17385 if (!injectedStyles) { 17386 injectedStyles = /* @__PURE__ */ new Set(); 17387 runtime.injectedStyles.set(targetDocument, injectedStyles); 17388 } 17389 if (injectedStyles.has(hash)) { 17390 return; 17391 } 17392 if (documentContainsStyleHash9(targetDocument, hash)) { 17393 injectedStyles.add(hash); 17394 return; 17395 } 17396 const style = targetDocument.createElement("style"); 17397 style.setAttribute(STYLE_HASH_ATTRIBUTE9, hash); 17398 style.appendChild(targetDocument.createTextNode(css)); 17399 targetDocument.head.appendChild(style); 17400 injectedStyles.add(hash); 17401 } 17402 function registerDocument9(targetDocument) { 17403 const runtime = getRuntime9(); 17404 runtime.documents.set( 17405 targetDocument, 17406 (runtime.documents.get(targetDocument) ?? 0) + 1 17407 ); 17408 for (const [hash, css] of runtime.styles) { 17409 injectStyle9(targetDocument, hash, css); 17410 } 17411 return () => { 17412 const count = runtime.documents.get(targetDocument); 17413 if (count === void 0) { 17414 return; 17415 } 17416 if (count <= 1) { 17417 runtime.documents.delete(targetDocument); 17418 return; 17419 } 17420 runtime.documents.set(targetDocument, count - 1); 17421 }; 17422 } 17423 function registerStyle9(hash, css) { 17424 const runtime = getRuntime9(); 17425 runtime.styles.set(hash, css); 17426 for (const targetDocument of runtime.documents.keys()) { 17427 injectStyle9(targetDocument, hash, css); 17428 } 17429 } 17430 if (typeof process === "undefined" || true) { 17431 registerStyle9("dce31c541c", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion,._7f344b94e270e039__dropdown-motion--fade-only{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}}._380b81b8f79fb10f__dropdown-motion{transform:translate(0);&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=inline-start][data-ending-style],&[data-side=inline-start][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=inline-end][data-ending-style],&[data-side=inline-end][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-start][data-ending-style],&:dir(rtl)[data-side=inline-start][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-end][data-ending-style],&:dir(rtl)[data-side=inline-end][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.d61e2d85c0ee0699__positioner{z-index:var(--wp-ui-menu-z-index,initial)}._34e81249f419a5a5__popup{--wp-ui-menu-popup-padding:var(--wpds-dimension-padding-xs,4px);--wp-ui-menu-min-width:160px;--wp-ui-menu-max-width:var(--wpds-dimension-surface-width-md,400px);--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-group-head-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-selection-indicator-track-size:0px;--wp-ui-menu-selection-indicator-size:var(--wpds-dimension-size-sm,24px);--wp-ui-menu-selection-indicator-gap:0px;--_wp-ui-menu-elevation-md:0px 2px 3px 0px #0000000d,0px 4px 5px 0px #0000000a,0px 12px 12px 0px #00000008,0px 16px 16px 0px #00000005;background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-menu-elevation-md);max-height:min(var(--available-height),480px,60dvh);max-width:min(var(--available-width),var(--wp-ui-menu-max-width));min-width:min(var(--available-width),var(--wp-ui-menu-min-width));outline:none;overflow-block:auto;overscroll-behavior:none;padding:var(--wp-ui-menu-popup-padding);scroll-padding:var(--wp-ui-menu-popup-padding);&:has(._42313b48c5459be3__item-selection-indicator){--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-menu-selection-indicator-track-size:var(--wpds-dimension-size-2xs,16px);--wp-ui-menu-selection-indicator-gap:var(--wpds-dimension-gap-sm,8px)}}._33f07ab17005471d__list{--_wp-ui-menu-item-label-line-height:var(--wpds-typography-line-height-sm,20px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--_wp-ui-menu-item-label-line-height)}._33f07ab17005471d__list,.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{--wp-ui-menu-group-prefix-gap:0px;display:grid;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];min-width:0}.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{grid-column:1/-1}._33f07ab17005471d__list:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.e05914e1005d7c2e__radio-group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.f11085533c0056b0__group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix){--wp-ui-menu-group-prefix-gap:var(--wpds-dimension-gap-xs,4px)}._4a0fd085d76fd23c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);grid-column:1/-1;line-height:var(--wpds-typography-line-height-xs,16px);min-height:var(--wpds-dimension-size-md,32px);padding-block:var(--wpds-dimension-padding-xs,4px);padding-inline:var(--wp-ui-menu-group-head-padding-inline);text-transform:uppercase}.bfc11368eadf3b39__separator{background-color:var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);grid-column:1/-1;height:var(--wpds-border-width-xs,1px);margin-block:var(--wpds-dimension-gap-xs,4px);margin-inline:var(--wp-ui-menu-group-head-padding-inline);@media (forced-colors:active){background-color:CanvasText}}._5c913bce0d8bb0d6__item{--wp-ui-menu-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-menu-item-padding-block:var(--wpds-dimension-padding-xs,4px);--_gcd-a-border-radius:var(--wpds-border-radius-sm,2px);align-items:start;border-radius:var(--wpds-border-radius-sm,2px);display:grid;gap:0;grid-column:1/-1;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];justify-content:stretch;min-height:var(--wp-ui-menu-item-height);min-width:0;padding-block:var(--wp-ui-menu-item-padding-block);scroll-margin:var(--wp-ui-menu-popup-padding);text-decoration:none;user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&[href]{cursor:pointer}@supports (grid-template-columns:subgrid){grid-template-columns:subgrid}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:var(--wpds-border-width-xs,1px) solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}._42313b48c5459be3__item-selection-indicator,._64924ecabf65a5d6__item-prefix,.af879698ede76757__item-content{grid-row:1}._42313b48c5459be3__item-selection-indicator{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:selection-start/selection-end;height:var(--_wp-ui-menu-item-label-line-height);justify-content:center;justify-self:center;pointer-events:none;width:var(--wp-ui-menu-selection-indicator-size);&[data-unchecked]{opacity:0}}._99c5bd141cbf516f__checkbox-selection-icon{translate:0 1px}._59aa9b3b3a651148__radio-selection-icon{fill:currentColor;height:var(--wpds-dimension-size-xs,20px);width:var(--wpds-dimension-size-xs,20px)}._64924ecabf65a5d6__item-prefix{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:prefix-start/prefix-end;justify-content:center;min-width:0}.a836378335a4cbf1__prefix-icon{align-self:flex-start;flex-shrink:0;margin-block-start:calc((var(--_wp-ui-menu-item-label-line-height) - var(--_wp-ui-menu-prefix-icon-size))/2)}.af879698ede76757__item-content{align-items:center;box-sizing:border-box;display:grid;grid-column:content-start/content-end;grid-template-columns:[label-start] minmax(0,1fr) [label-end suffix-start] auto [suffix-end shortcut-start] auto [shortcut-end trailing-start] auto [trailing-end];min-width:0;pointer-events:none}._943a932d9f81c78c__item-children{align-self:start;display:inline-flex;flex-direction:column;gap:2px;grid-column:label-start/label-end;min-width:0}._5ed41da4abcf8958__item-label{--_gcd-heading-color:currentColor;--_gcd-p-line-height:var(--_wp-ui-menu-item-label-line-height);color:inherit;line-height:var(--_wp-ui-menu-item-label-line-height);min-width:0;overflow-wrap:anywhere}.fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:var(--wpds-color-foreground-content-neutral-weak,#707070);color:var(--wpds-color-foreground-content-neutral-weak,#707070);overflow-wrap:anywhere;padding-block-end:var(--wpds-dimension-padding-xs,4px)}._091406749ed93e6e__item-suffix{align-items:center;display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:suffix-start/suffix-end}._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin-inline-start:var(--wpds-dimension-gap-md,12px)}._23630f40071a29ff__item-shortcut{grid-column:shortcut-start/shortcut-end}._06be17a91bf434a0__item-trailing{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:trailing-start/trailing-end;margin-inline-start:var(--wpds-dimension-gap-md,12px)}._943a932d9f81c78c__item-children+:is(._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut,._06be17a91bf434a0__item-trailing){margin-inline-start:var(--wpds-dimension-gap-xl,24px)}._23630f40071a29ff__item-shortcut+._06be17a91bf434a0__item-trailing{margin-inline-start:var(--wpds-dimension-gap-xs,4px)}.b78aec79bf93eba0__submenu-chevron{margin-inline-end:calc(var(--wpds-dimension-gap-sm, 8px)*-1)}.b78aec79bf93eba0__submenu-chevron:dir(rtl){transform:rotate(180deg)}._60da3b6f9718cf76__external-link-indicator{display:inline-block;font-weight:var(--wpds-typography-font-weight-default,400);line-height:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px);text-decoration:none}._60da3b6f9718cf76__external-link-indicator:after{content:"\\2197"}._60da3b6f9718cf76__external-link-indicator:dir(rtl):after{content:"\\2196"}._5c913bce0d8bb0d6__item[aria-disabled=true] ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[aria-disabled=true] ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[aria-disabled=true] ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[aria-disabled=true] ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[aria-disabled=true] ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[aria-disabled=true] .fa88c9f1a96a4c5a__item-description,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) .fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:currentColor;color:inherit}}}'); 17432 } 17433 var style_default8 = { "positioner": "d61e2d85c0ee0699__positioner", "popup": "_34e81249f419a5a5__popup", "item-selection-indicator": "_42313b48c5459be3__item-selection-indicator", "is-root": "_087a537b24fee6a1__is-root _380b81b8f79fb10f__dropdown-motion", "is-submenu": "_6d3b567f6289bdc2__is-submenu _7f344b94e270e039__dropdown-motion--fade-only", "list": "_33f07ab17005471d__list", "group": "f11085533c0056b0__group", "radio-group": "e05914e1005d7c2e__radio-group", "item": "_5c913bce0d8bb0d6__item", "item-prefix": "_64924ecabf65a5d6__item-prefix", "group-label": "_4a0fd085d76fd23c__group-label", "separator": "bfc11368eadf3b39__separator", "item-content": "af879698ede76757__item-content", "checkbox-selection-icon": "_99c5bd141cbf516f__checkbox-selection-icon", "radio-selection-icon": "_59aa9b3b3a651148__radio-selection-icon", "prefix-icon": "a836378335a4cbf1__prefix-icon", "item-children": "_943a932d9f81c78c__item-children", "item-label": "_5ed41da4abcf8958__item-label", "item-description": "fa88c9f1a96a4c5a__item-description", "item-suffix": "_091406749ed93e6e__item-suffix", "item-shortcut": "_23630f40071a29ff__item-shortcut", "item-trailing": "_06be17a91bf434a0__item-trailing", "submenu-chevron": "b78aec79bf93eba0__submenu-chevron", "external-link-indicator": "_60da3b6f9718cf76__external-link-indicator" }; 17434 var ItemLabel = (0, import_element28.forwardRef)( 17435 function MenuItemLabel({ children, className, id, ...props }, ref) { 17436 const itemContentContext = useMenuItemContentContext(); 17437 return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)( 17438 Text, 17439 { 17440 ref, 17441 variant: "body-md", 17442 ...props, 17443 id: id ?? itemContentContext?.labelId, 17444 className: clsx_default(style_default8["item-label"], className), 17445 children: [ 17446 children, 17447 itemContentContext?.labelTrailing 17448 ] 17449 } 17450 ); 17451 } 17452 ); 17453 17454 // packages/ui/build-module/menu/item.mjs 17455 var import_jsx_runtime78 = __toESM(require_jsx_runtime(), 1); 17456 var STYLE_HASH_ATTRIBUTE10 = "data-wp-hash"; 17457 function getRuntime10() { 17458 const globalScope = globalThis; 17459 if (globalScope.__wpStyleRuntime) { 17460 return globalScope.__wpStyleRuntime; 17461 } 17462 globalScope.__wpStyleRuntime = { 17463 documents: /* @__PURE__ */ new Map(), 17464 styles: /* @__PURE__ */ new Map(), 17465 injectedStyles: /* @__PURE__ */ new WeakMap() 17466 }; 17467 if (typeof document !== "undefined") { 17468 registerDocument10(document); 17469 } 17470 return globalScope.__wpStyleRuntime; 17471 } 17472 function documentContainsStyleHash10(targetDocument, hash) { 17473 if (!targetDocument.head) { 17474 return false; 17475 } 17476 for (const style of targetDocument.head.querySelectorAll( 17477 `style[$STYLE_HASH_ATTRIBUTE10}]` 17478 )) { 17479 if (style.getAttribute(STYLE_HASH_ATTRIBUTE10) === hash) { 17480 return true; 17481 } 17482 } 17483 return false; 17484 } 17485 function injectStyle10(targetDocument, hash, css) { 17486 if (!targetDocument.head) { 17487 return; 17488 } 17489 const runtime = getRuntime10(); 17490 let injectedStyles = runtime.injectedStyles.get(targetDocument); 17491 if (!injectedStyles) { 17492 injectedStyles = /* @__PURE__ */ new Set(); 17493 runtime.injectedStyles.set(targetDocument, injectedStyles); 17494 } 17495 if (injectedStyles.has(hash)) { 17496 return; 17497 } 17498 if (documentContainsStyleHash10(targetDocument, hash)) { 17499 injectedStyles.add(hash); 17500 return; 17501 } 17502 const style = targetDocument.createElement("style"); 17503 style.setAttribute(STYLE_HASH_ATTRIBUTE10, hash); 17504 style.appendChild(targetDocument.createTextNode(css)); 17505 targetDocument.head.appendChild(style); 17506 injectedStyles.add(hash); 17507 } 17508 function registerDocument10(targetDocument) { 17509 const runtime = getRuntime10(); 17510 runtime.documents.set( 17511 targetDocument, 17512 (runtime.documents.get(targetDocument) ?? 0) + 1 17513 ); 17514 for (const [hash, css] of runtime.styles) { 17515 injectStyle10(targetDocument, hash, css); 17516 } 17517 return () => { 17518 const count = runtime.documents.get(targetDocument); 17519 if (count === void 0) { 17520 return; 17521 } 17522 if (count <= 1) { 17523 runtime.documents.delete(targetDocument); 17524 return; 17525 } 17526 runtime.documents.set(targetDocument, count - 1); 17527 }; 17528 } 17529 function registerStyle10(hash, css) { 17530 const runtime = getRuntime10(); 17531 runtime.styles.set(hash, css); 17532 for (const targetDocument of runtime.documents.keys()) { 17533 injectStyle10(targetDocument, hash, css); 17534 } 17535 } 17536 if (typeof process === "undefined" || true) { 17537 registerStyle10("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); 17538 } 17539 var resets_default3 = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; 17540 if (typeof process === "undefined" || true) { 17541 registerStyle10("dce31c541c", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion,._7f344b94e270e039__dropdown-motion--fade-only{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}}._380b81b8f79fb10f__dropdown-motion{transform:translate(0);&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=inline-start][data-ending-style],&[data-side=inline-start][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=inline-end][data-ending-style],&[data-side=inline-end][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-start][data-ending-style],&:dir(rtl)[data-side=inline-start][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-end][data-ending-style],&:dir(rtl)[data-side=inline-end][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.d61e2d85c0ee0699__positioner{z-index:var(--wp-ui-menu-z-index,initial)}._34e81249f419a5a5__popup{--wp-ui-menu-popup-padding:var(--wpds-dimension-padding-xs,4px);--wp-ui-menu-min-width:160px;--wp-ui-menu-max-width:var(--wpds-dimension-surface-width-md,400px);--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-group-head-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-selection-indicator-track-size:0px;--wp-ui-menu-selection-indicator-size:var(--wpds-dimension-size-sm,24px);--wp-ui-menu-selection-indicator-gap:0px;--_wp-ui-menu-elevation-md:0px 2px 3px 0px #0000000d,0px 4px 5px 0px #0000000a,0px 12px 12px 0px #00000008,0px 16px 16px 0px #00000005;background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-menu-elevation-md);max-height:min(var(--available-height),480px,60dvh);max-width:min(var(--available-width),var(--wp-ui-menu-max-width));min-width:min(var(--available-width),var(--wp-ui-menu-min-width));outline:none;overflow-block:auto;overscroll-behavior:none;padding:var(--wp-ui-menu-popup-padding);scroll-padding:var(--wp-ui-menu-popup-padding);&:has(._42313b48c5459be3__item-selection-indicator){--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-menu-selection-indicator-track-size:var(--wpds-dimension-size-2xs,16px);--wp-ui-menu-selection-indicator-gap:var(--wpds-dimension-gap-sm,8px)}}._33f07ab17005471d__list{--_wp-ui-menu-item-label-line-height:var(--wpds-typography-line-height-sm,20px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--_wp-ui-menu-item-label-line-height)}._33f07ab17005471d__list,.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{--wp-ui-menu-group-prefix-gap:0px;display:grid;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];min-width:0}.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{grid-column:1/-1}._33f07ab17005471d__list:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.e05914e1005d7c2e__radio-group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.f11085533c0056b0__group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix){--wp-ui-menu-group-prefix-gap:var(--wpds-dimension-gap-xs,4px)}._4a0fd085d76fd23c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);grid-column:1/-1;line-height:var(--wpds-typography-line-height-xs,16px);min-height:var(--wpds-dimension-size-md,32px);padding-block:var(--wpds-dimension-padding-xs,4px);padding-inline:var(--wp-ui-menu-group-head-padding-inline);text-transform:uppercase}.bfc11368eadf3b39__separator{background-color:var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);grid-column:1/-1;height:var(--wpds-border-width-xs,1px);margin-block:var(--wpds-dimension-gap-xs,4px);margin-inline:var(--wp-ui-menu-group-head-padding-inline);@media (forced-colors:active){background-color:CanvasText}}._5c913bce0d8bb0d6__item{--wp-ui-menu-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-menu-item-padding-block:var(--wpds-dimension-padding-xs,4px);--_gcd-a-border-radius:var(--wpds-border-radius-sm,2px);align-items:start;border-radius:var(--wpds-border-radius-sm,2px);display:grid;gap:0;grid-column:1/-1;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];justify-content:stretch;min-height:var(--wp-ui-menu-item-height);min-width:0;padding-block:var(--wp-ui-menu-item-padding-block);scroll-margin:var(--wp-ui-menu-popup-padding);text-decoration:none;user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&[href]{cursor:pointer}@supports (grid-template-columns:subgrid){grid-template-columns:subgrid}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:var(--wpds-border-width-xs,1px) solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}._42313b48c5459be3__item-selection-indicator,._64924ecabf65a5d6__item-prefix,.af879698ede76757__item-content{grid-row:1}._42313b48c5459be3__item-selection-indicator{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:selection-start/selection-end;height:var(--_wp-ui-menu-item-label-line-height);justify-content:center;justify-self:center;pointer-events:none;width:var(--wp-ui-menu-selection-indicator-size);&[data-unchecked]{opacity:0}}._99c5bd141cbf516f__checkbox-selection-icon{translate:0 1px}._59aa9b3b3a651148__radio-selection-icon{fill:currentColor;height:var(--wpds-dimension-size-xs,20px);width:var(--wpds-dimension-size-xs,20px)}._64924ecabf65a5d6__item-prefix{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:prefix-start/prefix-end;justify-content:center;min-width:0}.a836378335a4cbf1__prefix-icon{align-self:flex-start;flex-shrink:0;margin-block-start:calc((var(--_wp-ui-menu-item-label-line-height) - var(--_wp-ui-menu-prefix-icon-size))/2)}.af879698ede76757__item-content{align-items:center;box-sizing:border-box;display:grid;grid-column:content-start/content-end;grid-template-columns:[label-start] minmax(0,1fr) [label-end suffix-start] auto [suffix-end shortcut-start] auto [shortcut-end trailing-start] auto [trailing-end];min-width:0;pointer-events:none}._943a932d9f81c78c__item-children{align-self:start;display:inline-flex;flex-direction:column;gap:2px;grid-column:label-start/label-end;min-width:0}._5ed41da4abcf8958__item-label{--_gcd-heading-color:currentColor;--_gcd-p-line-height:var(--_wp-ui-menu-item-label-line-height);color:inherit;line-height:var(--_wp-ui-menu-item-label-line-height);min-width:0;overflow-wrap:anywhere}.fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:var(--wpds-color-foreground-content-neutral-weak,#707070);color:var(--wpds-color-foreground-content-neutral-weak,#707070);overflow-wrap:anywhere;padding-block-end:var(--wpds-dimension-padding-xs,4px)}._091406749ed93e6e__item-suffix{align-items:center;display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:suffix-start/suffix-end}._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin-inline-start:var(--wpds-dimension-gap-md,12px)}._23630f40071a29ff__item-shortcut{grid-column:shortcut-start/shortcut-end}._06be17a91bf434a0__item-trailing{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:trailing-start/trailing-end;margin-inline-start:var(--wpds-dimension-gap-md,12px)}._943a932d9f81c78c__item-children+:is(._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut,._06be17a91bf434a0__item-trailing){margin-inline-start:var(--wpds-dimension-gap-xl,24px)}._23630f40071a29ff__item-shortcut+._06be17a91bf434a0__item-trailing{margin-inline-start:var(--wpds-dimension-gap-xs,4px)}.b78aec79bf93eba0__submenu-chevron{margin-inline-end:calc(var(--wpds-dimension-gap-sm, 8px)*-1)}.b78aec79bf93eba0__submenu-chevron:dir(rtl){transform:rotate(180deg)}._60da3b6f9718cf76__external-link-indicator{display:inline-block;font-weight:var(--wpds-typography-font-weight-default,400);line-height:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px);text-decoration:none}._60da3b6f9718cf76__external-link-indicator:after{content:"\\2197"}._60da3b6f9718cf76__external-link-indicator:dir(rtl):after{content:"\\2196"}._5c913bce0d8bb0d6__item[aria-disabled=true] ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[aria-disabled=true] ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[aria-disabled=true] ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[aria-disabled=true] ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[aria-disabled=true] ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[aria-disabled=true] .fa88c9f1a96a4c5a__item-description,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) .fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:currentColor;color:inherit}}}'); 17542 } 17543 var style_default9 = { "positioner": "d61e2d85c0ee0699__positioner", "popup": "_34e81249f419a5a5__popup", "item-selection-indicator": "_42313b48c5459be3__item-selection-indicator", "is-root": "_087a537b24fee6a1__is-root _380b81b8f79fb10f__dropdown-motion", "is-submenu": "_6d3b567f6289bdc2__is-submenu _7f344b94e270e039__dropdown-motion--fade-only", "list": "_33f07ab17005471d__list", "group": "f11085533c0056b0__group", "radio-group": "e05914e1005d7c2e__radio-group", "item": "_5c913bce0d8bb0d6__item", "item-prefix": "_64924ecabf65a5d6__item-prefix", "group-label": "_4a0fd085d76fd23c__group-label", "separator": "bfc11368eadf3b39__separator", "item-content": "af879698ede76757__item-content", "checkbox-selection-icon": "_99c5bd141cbf516f__checkbox-selection-icon", "radio-selection-icon": "_59aa9b3b3a651148__radio-selection-icon", "prefix-icon": "a836378335a4cbf1__prefix-icon", "item-children": "_943a932d9f81c78c__item-children", "item-label": "_5ed41da4abcf8958__item-label", "item-description": "fa88c9f1a96a4c5a__item-description", "item-suffix": "_091406749ed93e6e__item-suffix", "item-shortcut": "_23630f40071a29ff__item-shortcut", "item-trailing": "_06be17a91bf434a0__item-trailing", "submenu-chevron": "b78aec79bf93eba0__submenu-chevron", "external-link-indicator": "_60da3b6f9718cf76__external-link-indicator" }; 17544 var VALIDATION_ENABLED = true; 17545 function getItemContent(children) { 17546 const childArray = import_element29.Children.toArray(children); 17547 const [label, ...descriptions] = childArray; 17548 const hasLabel = (0, import_element29.isValidElement)(label) && label.type === ItemLabel; 17549 const descriptionElements = descriptions.filter( 17550 (description) => (0, import_element29.isValidElement)(description) && description.type === ItemDescription 17551 ); 17552 if (VALIDATION_ENABLED && (!hasLabel || descriptionElements.length !== descriptions.length)) { 17553 throw new Error( 17554 "Menu.ItemLabel must be the first direct child of every menu item, followed only by Menu.ItemDescription components." 17555 ); 17556 } 17557 return { 17558 descriptionIds: descriptionElements.map( 17559 (description) => description.props.id 17560 ), 17561 hasLabel, 17562 labelId: hasLabel ? label.props.id : void 0 17563 }; 17564 } 17565 function useItemContent(children, { 17566 "aria-describedby": ariaDescribedBy, 17567 "aria-keyshortcuts": ariaKeyShortcuts, 17568 "aria-label": ariaLabel, 17569 "aria-labelledby": ariaLabelledBy, 17570 labelTrailing, 17571 shortcut 17572 }) { 17573 const generatedLabelId = (0, import_element29.useId)(); 17574 const generatedDescriptionId = (0, import_element29.useId)(); 17575 const { descriptionIds, hasLabel, labelId } = getItemContent(children); 17576 const resolvedLabelId = hasLabel ? labelId ?? generatedLabelId : void 0; 17577 const resolvedDescriptionIds = descriptionIds.map( 17578 (descriptionId, index2) => descriptionId ?? `$generatedDescriptionId}-$index2}` 17579 ); 17580 const itemDescribedBy = Array.from( 17581 /* @__PURE__ */ new Set([ 17582 ...ariaDescribedBy?.split(/\s+/).filter(Boolean) ?? [], 17583 ...resolvedDescriptionIds 17584 ]) 17585 ).join(" "); 17586 let descriptionIndex = 0; 17587 const contentChildren = import_element29.Children.map(children, (child) => { 17588 if (!(0, import_element29.isValidElement)(child) || child.type !== ItemDescription) { 17589 return child; 17590 } 17591 const descriptionId = resolvedDescriptionIds[descriptionIndex++]; 17592 const descriptionProps = { 17593 id: descriptionId, 17594 validationToken: ITEM_DESCRIPTION_DIRECT_CHILD 17595 }; 17596 return (0, import_element29.cloneElement)(child, descriptionProps); 17597 }); 17598 const { 17599 descriptionId: shortcutDescriptionId, 17600 targetProps: shortcutAriaProps 17601 } = useKeyboardShortcutProps({ 17602 "aria-describedby": itemDescribedBy || void 0, 17603 "aria-keyshortcuts": ariaKeyShortcuts, 17604 shortcut 17605 }); 17606 const labelledBy = ariaLabelledBy ?? (ariaLabel ? void 0 : resolvedLabelId); 17607 return { 17608 contentChildren, 17609 contentContextValue: { 17610 labelId: resolvedLabelId, 17611 labelTrailing 17612 }, 17613 itemAriaProps: { 17614 ...shortcutAriaProps, 17615 "aria-label": ariaLabel, 17616 "aria-labelledby": labelledBy 17617 }, 17618 shortcutDescriptionId 17619 }; 17620 } 17621 function ItemContent({ 17622 children, 17623 prefix, 17624 shortcut, 17625 shortcutDescriptionId, 17626 suffix, 17627 trailing 17628 }) { 17629 const hasPrefix = import_element29.Children.toArray(prefix).some( 17630 (child) => child !== "" 17631 ); 17632 const hasSuffix = import_element29.Children.toArray(suffix).some( 17633 (child) => child !== "" 17634 ); 17635 const hasTrailing = import_element29.Children.toArray(trailing).some( 17636 (child) => child !== "" 17637 ); 17638 return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(import_jsx_runtime78.Fragment, { children: [ 17639 /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("span", { className: style_default9["item-content"], children: [ 17640 /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: style_default9["item-children"], children }), 17641 hasSuffix && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: style_default9["item-suffix"], children: suffix }), 17642 shortcut && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: style_default9["item-shortcut"], children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(KeyboardShortcutDisplay, { shortcut }) }), 17643 hasTrailing && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: style_default9["item-trailing"], children: trailing }) 17644 ] }), 17645 hasPrefix && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { "aria-hidden": "true", className: style_default9["item-prefix"], children: prefix }), 17646 shortcut && shortcutDescriptionId && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)( 17647 KeyboardShortcutDescription, 17648 { 17649 descriptionId: shortcutDescriptionId, 17650 shortcut 17651 } 17652 ) 17653 ] }); 17654 } 17655 var Item = (0, import_element29.forwardRef)(function MenuItem3({ 17656 children, 17657 className, 17658 prefix, 17659 shortcut, 17660 suffix, 17661 "aria-describedby": ariaDescribedBy, 17662 "aria-keyshortcuts": ariaKeyShortcuts, 17663 "aria-label": ariaLabel, 17664 "aria-labelledby": ariaLabelledBy, 17665 ...props 17666 }, ref) { 17667 const { 17668 contentChildren, 17669 contentContextValue, 17670 itemAriaProps, 17671 shortcutDescriptionId 17672 } = useItemContent(children, { 17673 "aria-describedby": ariaDescribedBy, 17674 "aria-keyshortcuts": ariaKeyShortcuts, 17675 "aria-label": ariaLabel, 17676 "aria-labelledby": ariaLabelledBy, 17677 shortcut 17678 }); 17679 return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)( 17680 index_parts_exports.Item, 17681 { 17682 ref, 17683 ...itemAriaProps, 17684 className: clsx_default( 17685 resets_default3["box-sizing"], 17686 style_default9.item, 17687 className 17688 ), 17689 ...props, 17690 children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(MenuItemContentContext.Provider, { value: contentContextValue, children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)( 17691 ItemContent, 17692 { 17693 prefix, 17694 shortcut, 17695 shortcutDescriptionId, 17696 suffix, 17697 children: contentChildren 17698 } 17699 ) }) 17700 } 17701 ); 17702 }); 17703 17704 // packages/ui/build-module/menu/checkbox-item.mjs 17705 var import_jsx_runtime79 = __toESM(require_jsx_runtime(), 1); 17706 var STYLE_HASH_ATTRIBUTE11 = "data-wp-hash"; 17707 function getRuntime11() { 17708 const globalScope = globalThis; 17709 if (globalScope.__wpStyleRuntime) { 17710 return globalScope.__wpStyleRuntime; 17711 } 17712 globalScope.__wpStyleRuntime = { 17713 documents: /* @__PURE__ */ new Map(), 17714 styles: /* @__PURE__ */ new Map(), 17715 injectedStyles: /* @__PURE__ */ new WeakMap() 17716 }; 17717 if (typeof document !== "undefined") { 17718 registerDocument11(document); 17719 } 17720 return globalScope.__wpStyleRuntime; 17721 } 17722 function documentContainsStyleHash11(targetDocument, hash) { 17723 if (!targetDocument.head) { 17724 return false; 17725 } 17726 for (const style of targetDocument.head.querySelectorAll( 17727 `style[$STYLE_HASH_ATTRIBUTE11}]` 17728 )) { 17729 if (style.getAttribute(STYLE_HASH_ATTRIBUTE11) === hash) { 17730 return true; 17731 } 17732 } 17733 return false; 17734 } 17735 function injectStyle11(targetDocument, hash, css) { 17736 if (!targetDocument.head) { 17737 return; 17738 } 17739 const runtime = getRuntime11(); 17740 let injectedStyles = runtime.injectedStyles.get(targetDocument); 17741 if (!injectedStyles) { 17742 injectedStyles = /* @__PURE__ */ new Set(); 17743 runtime.injectedStyles.set(targetDocument, injectedStyles); 17744 } 17745 if (injectedStyles.has(hash)) { 17746 return; 17747 } 17748 if (documentContainsStyleHash11(targetDocument, hash)) { 17749 injectedStyles.add(hash); 17750 return; 17751 } 17752 const style = targetDocument.createElement("style"); 17753 style.setAttribute(STYLE_HASH_ATTRIBUTE11, hash); 17754 style.appendChild(targetDocument.createTextNode(css)); 17755 targetDocument.head.appendChild(style); 17756 injectedStyles.add(hash); 17757 } 17758 function registerDocument11(targetDocument) { 17759 const runtime = getRuntime11(); 17760 runtime.documents.set( 17761 targetDocument, 17762 (runtime.documents.get(targetDocument) ?? 0) + 1 17763 ); 17764 for (const [hash, css] of runtime.styles) { 17765 injectStyle11(targetDocument, hash, css); 17766 } 17767 return () => { 17768 const count = runtime.documents.get(targetDocument); 17769 if (count === void 0) { 17770 return; 17771 } 17772 if (count <= 1) { 17773 runtime.documents.delete(targetDocument); 17774 return; 17775 } 17776 runtime.documents.set(targetDocument, count - 1); 17777 }; 17778 } 17779 function registerStyle11(hash, css) { 17780 const runtime = getRuntime11(); 17781 runtime.styles.set(hash, css); 17782 for (const targetDocument of runtime.documents.keys()) { 17783 injectStyle11(targetDocument, hash, css); 17784 } 17785 } 17786 if (typeof process === "undefined" || true) { 17787 registerStyle11("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); 17788 } 17789 var resets_default4 = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; 17790 if (typeof process === "undefined" || true) { 17791 registerStyle11("dce31c541c", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion,._7f344b94e270e039__dropdown-motion--fade-only{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}}._380b81b8f79fb10f__dropdown-motion{transform:translate(0);&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=inline-start][data-ending-style],&[data-side=inline-start][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=inline-end][data-ending-style],&[data-side=inline-end][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-start][data-ending-style],&:dir(rtl)[data-side=inline-start][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-end][data-ending-style],&:dir(rtl)[data-side=inline-end][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.d61e2d85c0ee0699__positioner{z-index:var(--wp-ui-menu-z-index,initial)}._34e81249f419a5a5__popup{--wp-ui-menu-popup-padding:var(--wpds-dimension-padding-xs,4px);--wp-ui-menu-min-width:160px;--wp-ui-menu-max-width:var(--wpds-dimension-surface-width-md,400px);--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-group-head-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-selection-indicator-track-size:0px;--wp-ui-menu-selection-indicator-size:var(--wpds-dimension-size-sm,24px);--wp-ui-menu-selection-indicator-gap:0px;--_wp-ui-menu-elevation-md:0px 2px 3px 0px #0000000d,0px 4px 5px 0px #0000000a,0px 12px 12px 0px #00000008,0px 16px 16px 0px #00000005;background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-menu-elevation-md);max-height:min(var(--available-height),480px,60dvh);max-width:min(var(--available-width),var(--wp-ui-menu-max-width));min-width:min(var(--available-width),var(--wp-ui-menu-min-width));outline:none;overflow-block:auto;overscroll-behavior:none;padding:var(--wp-ui-menu-popup-padding);scroll-padding:var(--wp-ui-menu-popup-padding);&:has(._42313b48c5459be3__item-selection-indicator){--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-menu-selection-indicator-track-size:var(--wpds-dimension-size-2xs,16px);--wp-ui-menu-selection-indicator-gap:var(--wpds-dimension-gap-sm,8px)}}._33f07ab17005471d__list{--_wp-ui-menu-item-label-line-height:var(--wpds-typography-line-height-sm,20px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--_wp-ui-menu-item-label-line-height)}._33f07ab17005471d__list,.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{--wp-ui-menu-group-prefix-gap:0px;display:grid;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];min-width:0}.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{grid-column:1/-1}._33f07ab17005471d__list:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.e05914e1005d7c2e__radio-group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.f11085533c0056b0__group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix){--wp-ui-menu-group-prefix-gap:var(--wpds-dimension-gap-xs,4px)}._4a0fd085d76fd23c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);grid-column:1/-1;line-height:var(--wpds-typography-line-height-xs,16px);min-height:var(--wpds-dimension-size-md,32px);padding-block:var(--wpds-dimension-padding-xs,4px);padding-inline:var(--wp-ui-menu-group-head-padding-inline);text-transform:uppercase}.bfc11368eadf3b39__separator{background-color:var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);grid-column:1/-1;height:var(--wpds-border-width-xs,1px);margin-block:var(--wpds-dimension-gap-xs,4px);margin-inline:var(--wp-ui-menu-group-head-padding-inline);@media (forced-colors:active){background-color:CanvasText}}._5c913bce0d8bb0d6__item{--wp-ui-menu-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-menu-item-padding-block:var(--wpds-dimension-padding-xs,4px);--_gcd-a-border-radius:var(--wpds-border-radius-sm,2px);align-items:start;border-radius:var(--wpds-border-radius-sm,2px);display:grid;gap:0;grid-column:1/-1;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];justify-content:stretch;min-height:var(--wp-ui-menu-item-height);min-width:0;padding-block:var(--wp-ui-menu-item-padding-block);scroll-margin:var(--wp-ui-menu-popup-padding);text-decoration:none;user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&[href]{cursor:pointer}@supports (grid-template-columns:subgrid){grid-template-columns:subgrid}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:var(--wpds-border-width-xs,1px) solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}._42313b48c5459be3__item-selection-indicator,._64924ecabf65a5d6__item-prefix,.af879698ede76757__item-content{grid-row:1}._42313b48c5459be3__item-selection-indicator{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:selection-start/selection-end;height:var(--_wp-ui-menu-item-label-line-height);justify-content:center;justify-self:center;pointer-events:none;width:var(--wp-ui-menu-selection-indicator-size);&[data-unchecked]{opacity:0}}._99c5bd141cbf516f__checkbox-selection-icon{translate:0 1px}._59aa9b3b3a651148__radio-selection-icon{fill:currentColor;height:var(--wpds-dimension-size-xs,20px);width:var(--wpds-dimension-size-xs,20px)}._64924ecabf65a5d6__item-prefix{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:prefix-start/prefix-end;justify-content:center;min-width:0}.a836378335a4cbf1__prefix-icon{align-self:flex-start;flex-shrink:0;margin-block-start:calc((var(--_wp-ui-menu-item-label-line-height) - var(--_wp-ui-menu-prefix-icon-size))/2)}.af879698ede76757__item-content{align-items:center;box-sizing:border-box;display:grid;grid-column:content-start/content-end;grid-template-columns:[label-start] minmax(0,1fr) [label-end suffix-start] auto [suffix-end shortcut-start] auto [shortcut-end trailing-start] auto [trailing-end];min-width:0;pointer-events:none}._943a932d9f81c78c__item-children{align-self:start;display:inline-flex;flex-direction:column;gap:2px;grid-column:label-start/label-end;min-width:0}._5ed41da4abcf8958__item-label{--_gcd-heading-color:currentColor;--_gcd-p-line-height:var(--_wp-ui-menu-item-label-line-height);color:inherit;line-height:var(--_wp-ui-menu-item-label-line-height);min-width:0;overflow-wrap:anywhere}.fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:var(--wpds-color-foreground-content-neutral-weak,#707070);color:var(--wpds-color-foreground-content-neutral-weak,#707070);overflow-wrap:anywhere;padding-block-end:var(--wpds-dimension-padding-xs,4px)}._091406749ed93e6e__item-suffix{align-items:center;display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:suffix-start/suffix-end}._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin-inline-start:var(--wpds-dimension-gap-md,12px)}._23630f40071a29ff__item-shortcut{grid-column:shortcut-start/shortcut-end}._06be17a91bf434a0__item-trailing{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:trailing-start/trailing-end;margin-inline-start:var(--wpds-dimension-gap-md,12px)}._943a932d9f81c78c__item-children+:is(._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut,._06be17a91bf434a0__item-trailing){margin-inline-start:var(--wpds-dimension-gap-xl,24px)}._23630f40071a29ff__item-shortcut+._06be17a91bf434a0__item-trailing{margin-inline-start:var(--wpds-dimension-gap-xs,4px)}.b78aec79bf93eba0__submenu-chevron{margin-inline-end:calc(var(--wpds-dimension-gap-sm, 8px)*-1)}.b78aec79bf93eba0__submenu-chevron:dir(rtl){transform:rotate(180deg)}._60da3b6f9718cf76__external-link-indicator{display:inline-block;font-weight:var(--wpds-typography-font-weight-default,400);line-height:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px);text-decoration:none}._60da3b6f9718cf76__external-link-indicator:after{content:"\\2197"}._60da3b6f9718cf76__external-link-indicator:dir(rtl):after{content:"\\2196"}._5c913bce0d8bb0d6__item[aria-disabled=true] ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[aria-disabled=true] ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[aria-disabled=true] ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[aria-disabled=true] ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[aria-disabled=true] ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[aria-disabled=true] .fa88c9f1a96a4c5a__item-description,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) .fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:currentColor;color:inherit}}}'); 17792 } 17793 var style_default10 = { "positioner": "d61e2d85c0ee0699__positioner", "popup": "_34e81249f419a5a5__popup", "item-selection-indicator": "_42313b48c5459be3__item-selection-indicator", "is-root": "_087a537b24fee6a1__is-root _380b81b8f79fb10f__dropdown-motion", "is-submenu": "_6d3b567f6289bdc2__is-submenu _7f344b94e270e039__dropdown-motion--fade-only", "list": "_33f07ab17005471d__list", "group": "f11085533c0056b0__group", "radio-group": "e05914e1005d7c2e__radio-group", "item": "_5c913bce0d8bb0d6__item", "item-prefix": "_64924ecabf65a5d6__item-prefix", "group-label": "_4a0fd085d76fd23c__group-label", "separator": "bfc11368eadf3b39__separator", "item-content": "af879698ede76757__item-content", "checkbox-selection-icon": "_99c5bd141cbf516f__checkbox-selection-icon", "radio-selection-icon": "_59aa9b3b3a651148__radio-selection-icon", "prefix-icon": "a836378335a4cbf1__prefix-icon", "item-children": "_943a932d9f81c78c__item-children", "item-label": "_5ed41da4abcf8958__item-label", "item-description": "fa88c9f1a96a4c5a__item-description", "item-suffix": "_091406749ed93e6e__item-suffix", "item-shortcut": "_23630f40071a29ff__item-shortcut", "item-trailing": "_06be17a91bf434a0__item-trailing", "submenu-chevron": "b78aec79bf93eba0__submenu-chevron", "external-link-indicator": "_60da3b6f9718cf76__external-link-indicator" }; 17794 var CheckboxItem = (0, import_element30.forwardRef)( 17795 function MenuCheckboxItem3({ 17796 children, 17797 className, 17798 prefix, 17799 shortcut, 17800 suffix, 17801 "aria-describedby": ariaDescribedBy, 17802 "aria-keyshortcuts": ariaKeyShortcuts, 17803 "aria-label": ariaLabel, 17804 "aria-labelledby": ariaLabelledBy, 17805 ...props 17806 }, ref) { 17807 const { 17808 contentChildren, 17809 contentContextValue, 17810 itemAriaProps, 17811 shortcutDescriptionId 17812 } = useItemContent(children, { 17813 "aria-describedby": ariaDescribedBy, 17814 "aria-keyshortcuts": ariaKeyShortcuts, 17815 "aria-label": ariaLabel, 17816 "aria-labelledby": ariaLabelledBy, 17817 shortcut 17818 }); 17819 return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)( 17820 index_parts_exports.CheckboxItem, 17821 { 17822 ref, 17823 ...itemAriaProps, 17824 className: clsx_default( 17825 resets_default4["box-sizing"], 17826 style_default10.item, 17827 className 17828 ), 17829 ...props, 17830 children: [ 17831 /* @__PURE__ */ (0, import_jsx_runtime79.jsx)( 17832 index_parts_exports.CheckboxItemIndicator, 17833 { 17834 keepMounted: true, 17835 className: style_default10["item-selection-indicator"], 17836 children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)( 17837 Icon, 17838 { 17839 icon: check_default, 17840 size: 24, 17841 className: style_default10["checkbox-selection-icon"], 17842 "aria-hidden": "true" 17843 } 17844 ) 17845 } 17846 ), 17847 /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(MenuItemContentContext.Provider, { value: contentContextValue, children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)( 17848 ItemContent, 17849 { 17850 prefix, 17851 shortcut, 17852 shortcutDescriptionId, 17853 suffix, 17854 children: contentChildren 17855 } 17856 ) }) 17857 ] 17858 } 17859 ); 17860 } 17861 ); 17862 17863 // packages/ui/build-module/menu/group.mjs 17864 var import_element31 = __toESM(require_element(), 1); 17865 var import_jsx_runtime80 = __toESM(require_jsx_runtime(), 1); 17866 var STYLE_HASH_ATTRIBUTE12 = "data-wp-hash"; 17867 function getRuntime12() { 17868 const globalScope = globalThis; 17869 if (globalScope.__wpStyleRuntime) { 17870 return globalScope.__wpStyleRuntime; 17871 } 17872 globalScope.__wpStyleRuntime = { 17873 documents: /* @__PURE__ */ new Map(), 17874 styles: /* @__PURE__ */ new Map(), 17875 injectedStyles: /* @__PURE__ */ new WeakMap() 17876 }; 17877 if (typeof document !== "undefined") { 17878 registerDocument12(document); 17879 } 17880 return globalScope.__wpStyleRuntime; 17881 } 17882 function documentContainsStyleHash12(targetDocument, hash) { 17883 if (!targetDocument.head) { 17884 return false; 17885 } 17886 for (const style of targetDocument.head.querySelectorAll( 17887 `style[$STYLE_HASH_ATTRIBUTE12}]` 17888 )) { 17889 if (style.getAttribute(STYLE_HASH_ATTRIBUTE12) === hash) { 17890 return true; 17891 } 17892 } 17893 return false; 17894 } 17895 function injectStyle12(targetDocument, hash, css) { 17896 if (!targetDocument.head) { 17897 return; 17898 } 17899 const runtime = getRuntime12(); 17900 let injectedStyles = runtime.injectedStyles.get(targetDocument); 17901 if (!injectedStyles) { 17902 injectedStyles = /* @__PURE__ */ new Set(); 17903 runtime.injectedStyles.set(targetDocument, injectedStyles); 17904 } 17905 if (injectedStyles.has(hash)) { 17906 return; 17907 } 17908 if (documentContainsStyleHash12(targetDocument, hash)) { 17909 injectedStyles.add(hash); 17910 return; 17911 } 17912 const style = targetDocument.createElement("style"); 17913 style.setAttribute(STYLE_HASH_ATTRIBUTE12, hash); 17914 style.appendChild(targetDocument.createTextNode(css)); 17915 targetDocument.head.appendChild(style); 17916 injectedStyles.add(hash); 17917 } 17918 function registerDocument12(targetDocument) { 17919 const runtime = getRuntime12(); 17920 runtime.documents.set( 17921 targetDocument, 17922 (runtime.documents.get(targetDocument) ?? 0) + 1 17923 ); 17924 for (const [hash, css] of runtime.styles) { 17925 injectStyle12(targetDocument, hash, css); 17926 } 17927 return () => { 17928 const count = runtime.documents.get(targetDocument); 17929 if (count === void 0) { 17930 return; 17931 } 17932 if (count <= 1) { 17933 runtime.documents.delete(targetDocument); 17934 return; 17935 } 17936 runtime.documents.set(targetDocument, count - 1); 17937 }; 17938 } 17939 function registerStyle12(hash, css) { 17940 const runtime = getRuntime12(); 17941 runtime.styles.set(hash, css); 17942 for (const targetDocument of runtime.documents.keys()) { 17943 injectStyle12(targetDocument, hash, css); 17944 } 17945 } 17946 if (typeof process === "undefined" || true) { 17947 registerStyle12("dce31c541c", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion,._7f344b94e270e039__dropdown-motion--fade-only{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}}._380b81b8f79fb10f__dropdown-motion{transform:translate(0);&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=inline-start][data-ending-style],&[data-side=inline-start][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=inline-end][data-ending-style],&[data-side=inline-end][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-start][data-ending-style],&:dir(rtl)[data-side=inline-start][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-end][data-ending-style],&:dir(rtl)[data-side=inline-end][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.d61e2d85c0ee0699__positioner{z-index:var(--wp-ui-menu-z-index,initial)}._34e81249f419a5a5__popup{--wp-ui-menu-popup-padding:var(--wpds-dimension-padding-xs,4px);--wp-ui-menu-min-width:160px;--wp-ui-menu-max-width:var(--wpds-dimension-surface-width-md,400px);--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-group-head-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-selection-indicator-track-size:0px;--wp-ui-menu-selection-indicator-size:var(--wpds-dimension-size-sm,24px);--wp-ui-menu-selection-indicator-gap:0px;--_wp-ui-menu-elevation-md:0px 2px 3px 0px #0000000d,0px 4px 5px 0px #0000000a,0px 12px 12px 0px #00000008,0px 16px 16px 0px #00000005;background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-menu-elevation-md);max-height:min(var(--available-height),480px,60dvh);max-width:min(var(--available-width),var(--wp-ui-menu-max-width));min-width:min(var(--available-width),var(--wp-ui-menu-min-width));outline:none;overflow-block:auto;overscroll-behavior:none;padding:var(--wp-ui-menu-popup-padding);scroll-padding:var(--wp-ui-menu-popup-padding);&:has(._42313b48c5459be3__item-selection-indicator){--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-menu-selection-indicator-track-size:var(--wpds-dimension-size-2xs,16px);--wp-ui-menu-selection-indicator-gap:var(--wpds-dimension-gap-sm,8px)}}._33f07ab17005471d__list{--_wp-ui-menu-item-label-line-height:var(--wpds-typography-line-height-sm,20px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--_wp-ui-menu-item-label-line-height)}._33f07ab17005471d__list,.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{--wp-ui-menu-group-prefix-gap:0px;display:grid;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];min-width:0}.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{grid-column:1/-1}._33f07ab17005471d__list:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.e05914e1005d7c2e__radio-group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.f11085533c0056b0__group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix){--wp-ui-menu-group-prefix-gap:var(--wpds-dimension-gap-xs,4px)}._4a0fd085d76fd23c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);grid-column:1/-1;line-height:var(--wpds-typography-line-height-xs,16px);min-height:var(--wpds-dimension-size-md,32px);padding-block:var(--wpds-dimension-padding-xs,4px);padding-inline:var(--wp-ui-menu-group-head-padding-inline);text-transform:uppercase}.bfc11368eadf3b39__separator{background-color:var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);grid-column:1/-1;height:var(--wpds-border-width-xs,1px);margin-block:var(--wpds-dimension-gap-xs,4px);margin-inline:var(--wp-ui-menu-group-head-padding-inline);@media (forced-colors:active){background-color:CanvasText}}._5c913bce0d8bb0d6__item{--wp-ui-menu-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-menu-item-padding-block:var(--wpds-dimension-padding-xs,4px);--_gcd-a-border-radius:var(--wpds-border-radius-sm,2px);align-items:start;border-radius:var(--wpds-border-radius-sm,2px);display:grid;gap:0;grid-column:1/-1;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];justify-content:stretch;min-height:var(--wp-ui-menu-item-height);min-width:0;padding-block:var(--wp-ui-menu-item-padding-block);scroll-margin:var(--wp-ui-menu-popup-padding);text-decoration:none;user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&[href]{cursor:pointer}@supports (grid-template-columns:subgrid){grid-template-columns:subgrid}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:var(--wpds-border-width-xs,1px) solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}._42313b48c5459be3__item-selection-indicator,._64924ecabf65a5d6__item-prefix,.af879698ede76757__item-content{grid-row:1}._42313b48c5459be3__item-selection-indicator{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:selection-start/selection-end;height:var(--_wp-ui-menu-item-label-line-height);justify-content:center;justify-self:center;pointer-events:none;width:var(--wp-ui-menu-selection-indicator-size);&[data-unchecked]{opacity:0}}._99c5bd141cbf516f__checkbox-selection-icon{translate:0 1px}._59aa9b3b3a651148__radio-selection-icon{fill:currentColor;height:var(--wpds-dimension-size-xs,20px);width:var(--wpds-dimension-size-xs,20px)}._64924ecabf65a5d6__item-prefix{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:prefix-start/prefix-end;justify-content:center;min-width:0}.a836378335a4cbf1__prefix-icon{align-self:flex-start;flex-shrink:0;margin-block-start:calc((var(--_wp-ui-menu-item-label-line-height) - var(--_wp-ui-menu-prefix-icon-size))/2)}.af879698ede76757__item-content{align-items:center;box-sizing:border-box;display:grid;grid-column:content-start/content-end;grid-template-columns:[label-start] minmax(0,1fr) [label-end suffix-start] auto [suffix-end shortcut-start] auto [shortcut-end trailing-start] auto [trailing-end];min-width:0;pointer-events:none}._943a932d9f81c78c__item-children{align-self:start;display:inline-flex;flex-direction:column;gap:2px;grid-column:label-start/label-end;min-width:0}._5ed41da4abcf8958__item-label{--_gcd-heading-color:currentColor;--_gcd-p-line-height:var(--_wp-ui-menu-item-label-line-height);color:inherit;line-height:var(--_wp-ui-menu-item-label-line-height);min-width:0;overflow-wrap:anywhere}.fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:var(--wpds-color-foreground-content-neutral-weak,#707070);color:var(--wpds-color-foreground-content-neutral-weak,#707070);overflow-wrap:anywhere;padding-block-end:var(--wpds-dimension-padding-xs,4px)}._091406749ed93e6e__item-suffix{align-items:center;display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:suffix-start/suffix-end}._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin-inline-start:var(--wpds-dimension-gap-md,12px)}._23630f40071a29ff__item-shortcut{grid-column:shortcut-start/shortcut-end}._06be17a91bf434a0__item-trailing{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:trailing-start/trailing-end;margin-inline-start:var(--wpds-dimension-gap-md,12px)}._943a932d9f81c78c__item-children+:is(._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut,._06be17a91bf434a0__item-trailing){margin-inline-start:var(--wpds-dimension-gap-xl,24px)}._23630f40071a29ff__item-shortcut+._06be17a91bf434a0__item-trailing{margin-inline-start:var(--wpds-dimension-gap-xs,4px)}.b78aec79bf93eba0__submenu-chevron{margin-inline-end:calc(var(--wpds-dimension-gap-sm, 8px)*-1)}.b78aec79bf93eba0__submenu-chevron:dir(rtl){transform:rotate(180deg)}._60da3b6f9718cf76__external-link-indicator{display:inline-block;font-weight:var(--wpds-typography-font-weight-default,400);line-height:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px);text-decoration:none}._60da3b6f9718cf76__external-link-indicator:after{content:"\\2197"}._60da3b6f9718cf76__external-link-indicator:dir(rtl):after{content:"\\2196"}._5c913bce0d8bb0d6__item[aria-disabled=true] ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[aria-disabled=true] ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[aria-disabled=true] ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[aria-disabled=true] ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[aria-disabled=true] ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[aria-disabled=true] .fa88c9f1a96a4c5a__item-description,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) .fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:currentColor;color:inherit}}}'); 17948 } 17949 var style_default11 = { "positioner": "d61e2d85c0ee0699__positioner", "popup": "_34e81249f419a5a5__popup", "item-selection-indicator": "_42313b48c5459be3__item-selection-indicator", "is-root": "_087a537b24fee6a1__is-root _380b81b8f79fb10f__dropdown-motion", "is-submenu": "_6d3b567f6289bdc2__is-submenu _7f344b94e270e039__dropdown-motion--fade-only", "list": "_33f07ab17005471d__list", "group": "f11085533c0056b0__group", "radio-group": "e05914e1005d7c2e__radio-group", "item": "_5c913bce0d8bb0d6__item", "item-prefix": "_64924ecabf65a5d6__item-prefix", "group-label": "_4a0fd085d76fd23c__group-label", "separator": "bfc11368eadf3b39__separator", "item-content": "af879698ede76757__item-content", "checkbox-selection-icon": "_99c5bd141cbf516f__checkbox-selection-icon", "radio-selection-icon": "_59aa9b3b3a651148__radio-selection-icon", "prefix-icon": "a836378335a4cbf1__prefix-icon", "item-children": "_943a932d9f81c78c__item-children", "item-label": "_5ed41da4abcf8958__item-label", "item-description": "fa88c9f1a96a4c5a__item-description", "item-suffix": "_091406749ed93e6e__item-suffix", "item-shortcut": "_23630f40071a29ff__item-shortcut", "item-trailing": "_06be17a91bf434a0__item-trailing", "submenu-chevron": "b78aec79bf93eba0__submenu-chevron", "external-link-indicator": "_60da3b6f9718cf76__external-link-indicator" }; 17950 var Group = (0, import_element31.forwardRef)(function MenuGroup3({ className, ...props }, ref) { 17951 return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)( 17952 index_parts_exports.Group, 17953 { 17954 ref, 17955 className: clsx_default(style_default11.group, className), 17956 ...props 17957 } 17958 ); 17959 }); 17960 17961 // packages/ui/build-module/menu/group-label.mjs 17962 var import_element32 = __toESM(require_element(), 1); 17963 var import_jsx_runtime81 = __toESM(require_jsx_runtime(), 1); 17964 var STYLE_HASH_ATTRIBUTE13 = "data-wp-hash"; 17965 function getRuntime13() { 17966 const globalScope = globalThis; 17967 if (globalScope.__wpStyleRuntime) { 17968 return globalScope.__wpStyleRuntime; 17969 } 17970 globalScope.__wpStyleRuntime = { 17971 documents: /* @__PURE__ */ new Map(), 17972 styles: /* @__PURE__ */ new Map(), 17973 injectedStyles: /* @__PURE__ */ new WeakMap() 17974 }; 17975 if (typeof document !== "undefined") { 17976 registerDocument13(document); 17977 } 17978 return globalScope.__wpStyleRuntime; 17979 } 17980 function documentContainsStyleHash13(targetDocument, hash) { 17981 if (!targetDocument.head) { 17982 return false; 17983 } 17984 for (const style of targetDocument.head.querySelectorAll( 17985 `style[$STYLE_HASH_ATTRIBUTE13}]` 17986 )) { 17987 if (style.getAttribute(STYLE_HASH_ATTRIBUTE13) === hash) { 17988 return true; 17989 } 17990 } 17991 return false; 17992 } 17993 function injectStyle13(targetDocument, hash, css) { 17994 if (!targetDocument.head) { 17995 return; 17996 } 17997 const runtime = getRuntime13(); 17998 let injectedStyles = runtime.injectedStyles.get(targetDocument); 17999 if (!injectedStyles) { 18000 injectedStyles = /* @__PURE__ */ new Set(); 18001 runtime.injectedStyles.set(targetDocument, injectedStyles); 18002 } 18003 if (injectedStyles.has(hash)) { 18004 return; 18005 } 18006 if (documentContainsStyleHash13(targetDocument, hash)) { 18007 injectedStyles.add(hash); 18008 return; 18009 } 18010 const style = targetDocument.createElement("style"); 18011 style.setAttribute(STYLE_HASH_ATTRIBUTE13, hash); 18012 style.appendChild(targetDocument.createTextNode(css)); 18013 targetDocument.head.appendChild(style); 18014 injectedStyles.add(hash); 18015 } 18016 function registerDocument13(targetDocument) { 18017 const runtime = getRuntime13(); 18018 runtime.documents.set( 18019 targetDocument, 18020 (runtime.documents.get(targetDocument) ?? 0) + 1 18021 ); 18022 for (const [hash, css] of runtime.styles) { 18023 injectStyle13(targetDocument, hash, css); 18024 } 18025 return () => { 18026 const count = runtime.documents.get(targetDocument); 18027 if (count === void 0) { 18028 return; 18029 } 18030 if (count <= 1) { 18031 runtime.documents.delete(targetDocument); 18032 return; 18033 } 18034 runtime.documents.set(targetDocument, count - 1); 18035 }; 18036 } 18037 function registerStyle13(hash, css) { 18038 const runtime = getRuntime13(); 18039 runtime.styles.set(hash, css); 18040 for (const targetDocument of runtime.documents.keys()) { 18041 injectStyle13(targetDocument, hash, css); 18042 } 18043 } 18044 if (typeof process === "undefined" || true) { 18045 registerStyle13("dce31c541c", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion,._7f344b94e270e039__dropdown-motion--fade-only{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}}._380b81b8f79fb10f__dropdown-motion{transform:translate(0);&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=inline-start][data-ending-style],&[data-side=inline-start][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=inline-end][data-ending-style],&[data-side=inline-end][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-start][data-ending-style],&:dir(rtl)[data-side=inline-start][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-end][data-ending-style],&:dir(rtl)[data-side=inline-end][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.d61e2d85c0ee0699__positioner{z-index:var(--wp-ui-menu-z-index,initial)}._34e81249f419a5a5__popup{--wp-ui-menu-popup-padding:var(--wpds-dimension-padding-xs,4px);--wp-ui-menu-min-width:160px;--wp-ui-menu-max-width:var(--wpds-dimension-surface-width-md,400px);--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-group-head-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-selection-indicator-track-size:0px;--wp-ui-menu-selection-indicator-size:var(--wpds-dimension-size-sm,24px);--wp-ui-menu-selection-indicator-gap:0px;--_wp-ui-menu-elevation-md:0px 2px 3px 0px #0000000d,0px 4px 5px 0px #0000000a,0px 12px 12px 0px #00000008,0px 16px 16px 0px #00000005;background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-menu-elevation-md);max-height:min(var(--available-height),480px,60dvh);max-width:min(var(--available-width),var(--wp-ui-menu-max-width));min-width:min(var(--available-width),var(--wp-ui-menu-min-width));outline:none;overflow-block:auto;overscroll-behavior:none;padding:var(--wp-ui-menu-popup-padding);scroll-padding:var(--wp-ui-menu-popup-padding);&:has(._42313b48c5459be3__item-selection-indicator){--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-menu-selection-indicator-track-size:var(--wpds-dimension-size-2xs,16px);--wp-ui-menu-selection-indicator-gap:var(--wpds-dimension-gap-sm,8px)}}._33f07ab17005471d__list{--_wp-ui-menu-item-label-line-height:var(--wpds-typography-line-height-sm,20px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--_wp-ui-menu-item-label-line-height)}._33f07ab17005471d__list,.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{--wp-ui-menu-group-prefix-gap:0px;display:grid;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];min-width:0}.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{grid-column:1/-1}._33f07ab17005471d__list:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.e05914e1005d7c2e__radio-group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.f11085533c0056b0__group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix){--wp-ui-menu-group-prefix-gap:var(--wpds-dimension-gap-xs,4px)}._4a0fd085d76fd23c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);grid-column:1/-1;line-height:var(--wpds-typography-line-height-xs,16px);min-height:var(--wpds-dimension-size-md,32px);padding-block:var(--wpds-dimension-padding-xs,4px);padding-inline:var(--wp-ui-menu-group-head-padding-inline);text-transform:uppercase}.bfc11368eadf3b39__separator{background-color:var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);grid-column:1/-1;height:var(--wpds-border-width-xs,1px);margin-block:var(--wpds-dimension-gap-xs,4px);margin-inline:var(--wp-ui-menu-group-head-padding-inline);@media (forced-colors:active){background-color:CanvasText}}._5c913bce0d8bb0d6__item{--wp-ui-menu-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-menu-item-padding-block:var(--wpds-dimension-padding-xs,4px);--_gcd-a-border-radius:var(--wpds-border-radius-sm,2px);align-items:start;border-radius:var(--wpds-border-radius-sm,2px);display:grid;gap:0;grid-column:1/-1;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];justify-content:stretch;min-height:var(--wp-ui-menu-item-height);min-width:0;padding-block:var(--wp-ui-menu-item-padding-block);scroll-margin:var(--wp-ui-menu-popup-padding);text-decoration:none;user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&[href]{cursor:pointer}@supports (grid-template-columns:subgrid){grid-template-columns:subgrid}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:var(--wpds-border-width-xs,1px) solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}._42313b48c5459be3__item-selection-indicator,._64924ecabf65a5d6__item-prefix,.af879698ede76757__item-content{grid-row:1}._42313b48c5459be3__item-selection-indicator{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:selection-start/selection-end;height:var(--_wp-ui-menu-item-label-line-height);justify-content:center;justify-self:center;pointer-events:none;width:var(--wp-ui-menu-selection-indicator-size);&[data-unchecked]{opacity:0}}._99c5bd141cbf516f__checkbox-selection-icon{translate:0 1px}._59aa9b3b3a651148__radio-selection-icon{fill:currentColor;height:var(--wpds-dimension-size-xs,20px);width:var(--wpds-dimension-size-xs,20px)}._64924ecabf65a5d6__item-prefix{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:prefix-start/prefix-end;justify-content:center;min-width:0}.a836378335a4cbf1__prefix-icon{align-self:flex-start;flex-shrink:0;margin-block-start:calc((var(--_wp-ui-menu-item-label-line-height) - var(--_wp-ui-menu-prefix-icon-size))/2)}.af879698ede76757__item-content{align-items:center;box-sizing:border-box;display:grid;grid-column:content-start/content-end;grid-template-columns:[label-start] minmax(0,1fr) [label-end suffix-start] auto [suffix-end shortcut-start] auto [shortcut-end trailing-start] auto [trailing-end];min-width:0;pointer-events:none}._943a932d9f81c78c__item-children{align-self:start;display:inline-flex;flex-direction:column;gap:2px;grid-column:label-start/label-end;min-width:0}._5ed41da4abcf8958__item-label{--_gcd-heading-color:currentColor;--_gcd-p-line-height:var(--_wp-ui-menu-item-label-line-height);color:inherit;line-height:var(--_wp-ui-menu-item-label-line-height);min-width:0;overflow-wrap:anywhere}.fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:var(--wpds-color-foreground-content-neutral-weak,#707070);color:var(--wpds-color-foreground-content-neutral-weak,#707070);overflow-wrap:anywhere;padding-block-end:var(--wpds-dimension-padding-xs,4px)}._091406749ed93e6e__item-suffix{align-items:center;display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:suffix-start/suffix-end}._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin-inline-start:var(--wpds-dimension-gap-md,12px)}._23630f40071a29ff__item-shortcut{grid-column:shortcut-start/shortcut-end}._06be17a91bf434a0__item-trailing{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:trailing-start/trailing-end;margin-inline-start:var(--wpds-dimension-gap-md,12px)}._943a932d9f81c78c__item-children+:is(._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut,._06be17a91bf434a0__item-trailing){margin-inline-start:var(--wpds-dimension-gap-xl,24px)}._23630f40071a29ff__item-shortcut+._06be17a91bf434a0__item-trailing{margin-inline-start:var(--wpds-dimension-gap-xs,4px)}.b78aec79bf93eba0__submenu-chevron{margin-inline-end:calc(var(--wpds-dimension-gap-sm, 8px)*-1)}.b78aec79bf93eba0__submenu-chevron:dir(rtl){transform:rotate(180deg)}._60da3b6f9718cf76__external-link-indicator{display:inline-block;font-weight:var(--wpds-typography-font-weight-default,400);line-height:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px);text-decoration:none}._60da3b6f9718cf76__external-link-indicator:after{content:"\\2197"}._60da3b6f9718cf76__external-link-indicator:dir(rtl):after{content:"\\2196"}._5c913bce0d8bb0d6__item[aria-disabled=true] ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[aria-disabled=true] ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[aria-disabled=true] ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[aria-disabled=true] ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[aria-disabled=true] ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[aria-disabled=true] .fa88c9f1a96a4c5a__item-description,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) .fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:currentColor;color:inherit}}}'); 18046 } 18047 var style_default12 = { "positioner": "d61e2d85c0ee0699__positioner", "popup": "_34e81249f419a5a5__popup", "item-selection-indicator": "_42313b48c5459be3__item-selection-indicator", "is-root": "_087a537b24fee6a1__is-root _380b81b8f79fb10f__dropdown-motion", "is-submenu": "_6d3b567f6289bdc2__is-submenu _7f344b94e270e039__dropdown-motion--fade-only", "list": "_33f07ab17005471d__list", "group": "f11085533c0056b0__group", "radio-group": "e05914e1005d7c2e__radio-group", "item": "_5c913bce0d8bb0d6__item", "item-prefix": "_64924ecabf65a5d6__item-prefix", "group-label": "_4a0fd085d76fd23c__group-label", "separator": "bfc11368eadf3b39__separator", "item-content": "af879698ede76757__item-content", "checkbox-selection-icon": "_99c5bd141cbf516f__checkbox-selection-icon", "radio-selection-icon": "_59aa9b3b3a651148__radio-selection-icon", "prefix-icon": "a836378335a4cbf1__prefix-icon", "item-children": "_943a932d9f81c78c__item-children", "item-label": "_5ed41da4abcf8958__item-label", "item-description": "fa88c9f1a96a4c5a__item-description", "item-suffix": "_091406749ed93e6e__item-suffix", "item-shortcut": "_23630f40071a29ff__item-shortcut", "item-trailing": "_06be17a91bf434a0__item-trailing", "submenu-chevron": "b78aec79bf93eba0__submenu-chevron", "external-link-indicator": "_60da3b6f9718cf76__external-link-indicator" }; 18048 var GroupLabel = (0, import_element32.forwardRef)( 18049 function MenuGroupLabel3({ className, ...props }, ref) { 18050 return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)( 18051 index_parts_exports.GroupLabel, 18052 { 18053 ref, 18054 className: clsx_default(style_default12["group-label"], className), 18055 ...props 18056 } 18057 ); 18058 } 18059 ); 18060 18061 // packages/ui/build-module/menu/link-item.mjs 18062 var import_element33 = __toESM(require_element(), 1); 18063 var import_i18n10 = __toESM(require_i18n(), 1); 18064 var import_jsx_runtime82 = __toESM(require_jsx_runtime(), 1); 18065 var STYLE_HASH_ATTRIBUTE14 = "data-wp-hash"; 18066 function getRuntime14() { 18067 const globalScope = globalThis; 18068 if (globalScope.__wpStyleRuntime) { 18069 return globalScope.__wpStyleRuntime; 18070 } 18071 globalScope.__wpStyleRuntime = { 18072 documents: /* @__PURE__ */ new Map(), 18073 styles: /* @__PURE__ */ new Map(), 18074 injectedStyles: /* @__PURE__ */ new WeakMap() 18075 }; 18076 if (typeof document !== "undefined") { 18077 registerDocument14(document); 18078 } 18079 return globalScope.__wpStyleRuntime; 18080 } 18081 function documentContainsStyleHash14(targetDocument, hash) { 18082 if (!targetDocument.head) { 18083 return false; 18084 } 18085 for (const style of targetDocument.head.querySelectorAll( 18086 `style[$STYLE_HASH_ATTRIBUTE14}]` 18087 )) { 18088 if (style.getAttribute(STYLE_HASH_ATTRIBUTE14) === hash) { 18089 return true; 18090 } 18091 } 18092 return false; 18093 } 18094 function injectStyle14(targetDocument, hash, css) { 18095 if (!targetDocument.head) { 18096 return; 18097 } 18098 const runtime = getRuntime14(); 18099 let injectedStyles = runtime.injectedStyles.get(targetDocument); 18100 if (!injectedStyles) { 18101 injectedStyles = /* @__PURE__ */ new Set(); 18102 runtime.injectedStyles.set(targetDocument, injectedStyles); 18103 } 18104 if (injectedStyles.has(hash)) { 18105 return; 18106 } 18107 if (documentContainsStyleHash14(targetDocument, hash)) { 18108 injectedStyles.add(hash); 18109 return; 18110 } 18111 const style = targetDocument.createElement("style"); 18112 style.setAttribute(STYLE_HASH_ATTRIBUTE14, hash); 18113 style.appendChild(targetDocument.createTextNode(css)); 18114 targetDocument.head.appendChild(style); 18115 injectedStyles.add(hash); 18116 } 18117 function registerDocument14(targetDocument) { 18118 const runtime = getRuntime14(); 18119 runtime.documents.set( 18120 targetDocument, 18121 (runtime.documents.get(targetDocument) ?? 0) + 1 18122 ); 18123 for (const [hash, css] of runtime.styles) { 18124 injectStyle14(targetDocument, hash, css); 18125 } 18126 return () => { 18127 const count = runtime.documents.get(targetDocument); 18128 if (count === void 0) { 18129 return; 18130 } 18131 if (count <= 1) { 18132 runtime.documents.delete(targetDocument); 18133 return; 18134 } 18135 runtime.documents.set(targetDocument, count - 1); 18136 }; 18137 } 18138 function registerStyle14(hash, css) { 18139 const runtime = getRuntime14(); 18140 runtime.styles.set(hash, css); 18141 for (const targetDocument of runtime.documents.keys()) { 18142 injectStyle14(targetDocument, hash, css); 18143 } 18144 } 18145 if (typeof process === "undefined" || true) { 18146 registerStyle14("e8e31009f5", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-weak,#707070))}&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-emphasis,600));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}.c59a0ebebd71fa4a__ol{list-style:var(--_gcd-ol-list-style,none);margin:var(--_gcd-ol-margin,0);padding-block:var(--_gcd-ol-padding-block,0);padding-inline:var(--_gcd-ol-padding-inline,0)}._46b5cb0c8e24e8c9__li{margin:var(--_gcd-li-margin,0)}"); 18147 } 18148 var global_css_defense_default3 = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a", "ol": "c59a0ebebd71fa4a__ol", "li": "_46b5cb0c8e24e8c9__li" }; 18149 if (typeof process === "undefined" || true) { 18150 registerStyle14("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); 18151 } 18152 var resets_default5 = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; 18153 if (typeof process === "undefined" || true) { 18154 registerStyle14("dce31c541c", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion,._7f344b94e270e039__dropdown-motion--fade-only{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}}._380b81b8f79fb10f__dropdown-motion{transform:translate(0);&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=inline-start][data-ending-style],&[data-side=inline-start][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=inline-end][data-ending-style],&[data-side=inline-end][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-start][data-ending-style],&:dir(rtl)[data-side=inline-start][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-end][data-ending-style],&:dir(rtl)[data-side=inline-end][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.d61e2d85c0ee0699__positioner{z-index:var(--wp-ui-menu-z-index,initial)}._34e81249f419a5a5__popup{--wp-ui-menu-popup-padding:var(--wpds-dimension-padding-xs,4px);--wp-ui-menu-min-width:160px;--wp-ui-menu-max-width:var(--wpds-dimension-surface-width-md,400px);--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-group-head-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-selection-indicator-track-size:0px;--wp-ui-menu-selection-indicator-size:var(--wpds-dimension-size-sm,24px);--wp-ui-menu-selection-indicator-gap:0px;--_wp-ui-menu-elevation-md:0px 2px 3px 0px #0000000d,0px 4px 5px 0px #0000000a,0px 12px 12px 0px #00000008,0px 16px 16px 0px #00000005;background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-menu-elevation-md);max-height:min(var(--available-height),480px,60dvh);max-width:min(var(--available-width),var(--wp-ui-menu-max-width));min-width:min(var(--available-width),var(--wp-ui-menu-min-width));outline:none;overflow-block:auto;overscroll-behavior:none;padding:var(--wp-ui-menu-popup-padding);scroll-padding:var(--wp-ui-menu-popup-padding);&:has(._42313b48c5459be3__item-selection-indicator){--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-menu-selection-indicator-track-size:var(--wpds-dimension-size-2xs,16px);--wp-ui-menu-selection-indicator-gap:var(--wpds-dimension-gap-sm,8px)}}._33f07ab17005471d__list{--_wp-ui-menu-item-label-line-height:var(--wpds-typography-line-height-sm,20px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--_wp-ui-menu-item-label-line-height)}._33f07ab17005471d__list,.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{--wp-ui-menu-group-prefix-gap:0px;display:grid;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];min-width:0}.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{grid-column:1/-1}._33f07ab17005471d__list:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.e05914e1005d7c2e__radio-group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.f11085533c0056b0__group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix){--wp-ui-menu-group-prefix-gap:var(--wpds-dimension-gap-xs,4px)}._4a0fd085d76fd23c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);grid-column:1/-1;line-height:var(--wpds-typography-line-height-xs,16px);min-height:var(--wpds-dimension-size-md,32px);padding-block:var(--wpds-dimension-padding-xs,4px);padding-inline:var(--wp-ui-menu-group-head-padding-inline);text-transform:uppercase}.bfc11368eadf3b39__separator{background-color:var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);grid-column:1/-1;height:var(--wpds-border-width-xs,1px);margin-block:var(--wpds-dimension-gap-xs,4px);margin-inline:var(--wp-ui-menu-group-head-padding-inline);@media (forced-colors:active){background-color:CanvasText}}._5c913bce0d8bb0d6__item{--wp-ui-menu-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-menu-item-padding-block:var(--wpds-dimension-padding-xs,4px);--_gcd-a-border-radius:var(--wpds-border-radius-sm,2px);align-items:start;border-radius:var(--wpds-border-radius-sm,2px);display:grid;gap:0;grid-column:1/-1;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];justify-content:stretch;min-height:var(--wp-ui-menu-item-height);min-width:0;padding-block:var(--wp-ui-menu-item-padding-block);scroll-margin:var(--wp-ui-menu-popup-padding);text-decoration:none;user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&[href]{cursor:pointer}@supports (grid-template-columns:subgrid){grid-template-columns:subgrid}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:var(--wpds-border-width-xs,1px) solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}._42313b48c5459be3__item-selection-indicator,._64924ecabf65a5d6__item-prefix,.af879698ede76757__item-content{grid-row:1}._42313b48c5459be3__item-selection-indicator{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:selection-start/selection-end;height:var(--_wp-ui-menu-item-label-line-height);justify-content:center;justify-self:center;pointer-events:none;width:var(--wp-ui-menu-selection-indicator-size);&[data-unchecked]{opacity:0}}._99c5bd141cbf516f__checkbox-selection-icon{translate:0 1px}._59aa9b3b3a651148__radio-selection-icon{fill:currentColor;height:var(--wpds-dimension-size-xs,20px);width:var(--wpds-dimension-size-xs,20px)}._64924ecabf65a5d6__item-prefix{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:prefix-start/prefix-end;justify-content:center;min-width:0}.a836378335a4cbf1__prefix-icon{align-self:flex-start;flex-shrink:0;margin-block-start:calc((var(--_wp-ui-menu-item-label-line-height) - var(--_wp-ui-menu-prefix-icon-size))/2)}.af879698ede76757__item-content{align-items:center;box-sizing:border-box;display:grid;grid-column:content-start/content-end;grid-template-columns:[label-start] minmax(0,1fr) [label-end suffix-start] auto [suffix-end shortcut-start] auto [shortcut-end trailing-start] auto [trailing-end];min-width:0;pointer-events:none}._943a932d9f81c78c__item-children{align-self:start;display:inline-flex;flex-direction:column;gap:2px;grid-column:label-start/label-end;min-width:0}._5ed41da4abcf8958__item-label{--_gcd-heading-color:currentColor;--_gcd-p-line-height:var(--_wp-ui-menu-item-label-line-height);color:inherit;line-height:var(--_wp-ui-menu-item-label-line-height);min-width:0;overflow-wrap:anywhere}.fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:var(--wpds-color-foreground-content-neutral-weak,#707070);color:var(--wpds-color-foreground-content-neutral-weak,#707070);overflow-wrap:anywhere;padding-block-end:var(--wpds-dimension-padding-xs,4px)}._091406749ed93e6e__item-suffix{align-items:center;display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:suffix-start/suffix-end}._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin-inline-start:var(--wpds-dimension-gap-md,12px)}._23630f40071a29ff__item-shortcut{grid-column:shortcut-start/shortcut-end}._06be17a91bf434a0__item-trailing{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:trailing-start/trailing-end;margin-inline-start:var(--wpds-dimension-gap-md,12px)}._943a932d9f81c78c__item-children+:is(._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut,._06be17a91bf434a0__item-trailing){margin-inline-start:var(--wpds-dimension-gap-xl,24px)}._23630f40071a29ff__item-shortcut+._06be17a91bf434a0__item-trailing{margin-inline-start:var(--wpds-dimension-gap-xs,4px)}.b78aec79bf93eba0__submenu-chevron{margin-inline-end:calc(var(--wpds-dimension-gap-sm, 8px)*-1)}.b78aec79bf93eba0__submenu-chevron:dir(rtl){transform:rotate(180deg)}._60da3b6f9718cf76__external-link-indicator{display:inline-block;font-weight:var(--wpds-typography-font-weight-default,400);line-height:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px);text-decoration:none}._60da3b6f9718cf76__external-link-indicator:after{content:"\\2197"}._60da3b6f9718cf76__external-link-indicator:dir(rtl):after{content:"\\2196"}._5c913bce0d8bb0d6__item[aria-disabled=true] ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[aria-disabled=true] ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[aria-disabled=true] ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[aria-disabled=true] ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[aria-disabled=true] ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[aria-disabled=true] .fa88c9f1a96a4c5a__item-description,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) .fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:currentColor;color:inherit}}}'); 18155 } 18156 var style_default13 = { "positioner": "d61e2d85c0ee0699__positioner", "popup": "_34e81249f419a5a5__popup", "item-selection-indicator": "_42313b48c5459be3__item-selection-indicator", "is-root": "_087a537b24fee6a1__is-root _380b81b8f79fb10f__dropdown-motion", "is-submenu": "_6d3b567f6289bdc2__is-submenu _7f344b94e270e039__dropdown-motion--fade-only", "list": "_33f07ab17005471d__list", "group": "f11085533c0056b0__group", "radio-group": "e05914e1005d7c2e__radio-group", "item": "_5c913bce0d8bb0d6__item", "item-prefix": "_64924ecabf65a5d6__item-prefix", "group-label": "_4a0fd085d76fd23c__group-label", "separator": "bfc11368eadf3b39__separator", "item-content": "af879698ede76757__item-content", "checkbox-selection-icon": "_99c5bd141cbf516f__checkbox-selection-icon", "radio-selection-icon": "_59aa9b3b3a651148__radio-selection-icon", "prefix-icon": "a836378335a4cbf1__prefix-icon", "item-children": "_943a932d9f81c78c__item-children", "item-label": "_5ed41da4abcf8958__item-label", "item-description": "fa88c9f1a96a4c5a__item-description", "item-suffix": "_091406749ed93e6e__item-suffix", "item-shortcut": "_23630f40071a29ff__item-shortcut", "item-trailing": "_06be17a91bf434a0__item-trailing", "submenu-chevron": "b78aec79bf93eba0__submenu-chevron", "external-link-indicator": "_60da3b6f9718cf76__external-link-indicator" }; 18157 var LinkItem = (0, import_element33.forwardRef)(function MenuLinkItem3({ 18158 children, 18159 className, 18160 openInNewTab = false, 18161 target, 18162 prefix, 18163 shortcut, 18164 suffix, 18165 "aria-describedby": ariaDescribedBy, 18166 "aria-keyshortcuts": ariaKeyShortcuts, 18167 "aria-label": ariaLabel, 18168 "aria-labelledby": ariaLabelledBy, 18169 rel, 18170 ...props 18171 }, ref) { 18172 const shouldShowNewTabIndicator = openInNewTab || /^_blank$/i.test(target ?? ""); 18173 const externalLinkIndicator = shouldShowNewTabIndicator ? /* @__PURE__ */ (0, import_jsx_runtime82.jsx)( 18174 "span", 18175 { 18176 className: style_default13["external-link-indicator"], 18177 role: "img", 18178 "aria-label": ( 18179 /* translators: accessibility text appended to link text */ 18180 (0, import_i18n10.__)("(opens in a new tab)") 18181 ) 18182 } 18183 ) : null; 18184 const { 18185 contentChildren, 18186 contentContextValue, 18187 itemAriaProps, 18188 shortcutDescriptionId 18189 } = useItemContent(children, { 18190 "aria-describedby": ariaDescribedBy, 18191 "aria-keyshortcuts": ariaKeyShortcuts, 18192 "aria-label": ariaLabel, 18193 "aria-labelledby": ariaLabelledBy, 18194 labelTrailing: externalLinkIndicator, 18195 shortcut 18196 }); 18197 return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)( 18198 index_parts_exports.LinkItem, 18199 { 18200 ref, 18201 ...props, 18202 ...itemAriaProps, 18203 rel, 18204 target: target ?? (openInNewTab ? "_blank" : void 0), 18205 className: clsx_default( 18206 global_css_defense_default3.a, 18207 resets_default5["box-sizing"], 18208 style_default13.item, 18209 className 18210 ), 18211 children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(MenuItemContentContext.Provider, { value: contentContextValue, children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)( 18212 ItemContent, 18213 { 18214 prefix, 18215 shortcut, 18216 shortcutDescriptionId, 18217 suffix, 18218 children: contentChildren 18219 } 18220 ) }) 18221 } 18222 ); 18223 }); 18224 18225 // packages/ui/build-module/menu/popup.mjs 18226 var import_element36 = __toESM(require_element(), 1); 18227 18228 // packages/ui/build-module/menu/portal.mjs 18229 var import_element34 = __toESM(require_element(), 1); 18230 var import_jsx_runtime83 = __toESM(require_jsx_runtime(), 1); 18231 var Portal2 = (0, import_element34.forwardRef)(function MenuPortal3({ container, ...props }, ref) { 18232 return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)( 18233 index_parts_exports.Portal, 18234 { 18235 ref, 18236 container: container ?? getWpCompatOverlaySlot(), 18237 ...props 18238 } 18239 ); 18240 }); 18241 18242 // packages/ui/build-module/menu/positioner.mjs 18243 var import_element35 = __toESM(require_element(), 1); 18244 18245 // packages/ui/build-module/form/primitives/constants.mjs 18246 var ITEM_POPUP_POSITIONER_PROPS = { 18247 align: "start", 18248 sideOffset: 8, 18249 collisionPadding: 12 18250 }; 18251 18252 // packages/ui/build-module/menu/positioner.mjs 18253 var import_jsx_runtime84 = __toESM(require_jsx_runtime(), 1); 18254 var STYLE_HASH_ATTRIBUTE15 = "data-wp-hash"; 18255 function getRuntime15() { 18256 const globalScope = globalThis; 18257 if (globalScope.__wpStyleRuntime) { 18258 return globalScope.__wpStyleRuntime; 18259 } 18260 globalScope.__wpStyleRuntime = { 18261 documents: /* @__PURE__ */ new Map(), 18262 styles: /* @__PURE__ */ new Map(), 18263 injectedStyles: /* @__PURE__ */ new WeakMap() 18264 }; 18265 if (typeof document !== "undefined") { 18266 registerDocument15(document); 18267 } 18268 return globalScope.__wpStyleRuntime; 18269 } 18270 function documentContainsStyleHash15(targetDocument, hash) { 18271 if (!targetDocument.head) { 18272 return false; 18273 } 18274 for (const style of targetDocument.head.querySelectorAll( 18275 `style[$STYLE_HASH_ATTRIBUTE15}]` 18276 )) { 18277 if (style.getAttribute(STYLE_HASH_ATTRIBUTE15) === hash) { 18278 return true; 18279 } 18280 } 18281 return false; 18282 } 18283 function injectStyle15(targetDocument, hash, css) { 18284 if (!targetDocument.head) { 18285 return; 18286 } 18287 const runtime = getRuntime15(); 18288 let injectedStyles = runtime.injectedStyles.get(targetDocument); 18289 if (!injectedStyles) { 18290 injectedStyles = /* @__PURE__ */ new Set(); 18291 runtime.injectedStyles.set(targetDocument, injectedStyles); 18292 } 18293 if (injectedStyles.has(hash)) { 18294 return; 18295 } 18296 if (documentContainsStyleHash15(targetDocument, hash)) { 18297 injectedStyles.add(hash); 18298 return; 18299 } 18300 const style = targetDocument.createElement("style"); 18301 style.setAttribute(STYLE_HASH_ATTRIBUTE15, hash); 18302 style.appendChild(targetDocument.createTextNode(css)); 18303 targetDocument.head.appendChild(style); 18304 injectedStyles.add(hash); 18305 } 18306 function registerDocument15(targetDocument) { 18307 const runtime = getRuntime15(); 18308 runtime.documents.set( 18309 targetDocument, 18310 (runtime.documents.get(targetDocument) ?? 0) + 1 18311 ); 18312 for (const [hash, css] of runtime.styles) { 18313 injectStyle15(targetDocument, hash, css); 18314 } 18315 return () => { 18316 const count = runtime.documents.get(targetDocument); 18317 if (count === void 0) { 18318 return; 18319 } 18320 if (count <= 1) { 18321 runtime.documents.delete(targetDocument); 18322 return; 18323 } 18324 runtime.documents.set(targetDocument, count - 1); 18325 }; 18326 } 18327 function registerStyle15(hash, css) { 18328 const runtime = getRuntime15(); 18329 runtime.styles.set(hash, css); 18330 for (const targetDocument of runtime.documents.keys()) { 18331 injectStyle15(targetDocument, hash, css); 18332 } 18333 } 18334 if (typeof process === "undefined" || true) { 18335 registerStyle15("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); 18336 } 18337 var resets_default6 = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; 18338 if (typeof process === "undefined" || true) { 18339 registerStyle15("dce31c541c", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion,._7f344b94e270e039__dropdown-motion--fade-only{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}}._380b81b8f79fb10f__dropdown-motion{transform:translate(0);&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=inline-start][data-ending-style],&[data-side=inline-start][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=inline-end][data-ending-style],&[data-side=inline-end][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-start][data-ending-style],&:dir(rtl)[data-side=inline-start][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-end][data-ending-style],&:dir(rtl)[data-side=inline-end][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.d61e2d85c0ee0699__positioner{z-index:var(--wp-ui-menu-z-index,initial)}._34e81249f419a5a5__popup{--wp-ui-menu-popup-padding:var(--wpds-dimension-padding-xs,4px);--wp-ui-menu-min-width:160px;--wp-ui-menu-max-width:var(--wpds-dimension-surface-width-md,400px);--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-group-head-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-selection-indicator-track-size:0px;--wp-ui-menu-selection-indicator-size:var(--wpds-dimension-size-sm,24px);--wp-ui-menu-selection-indicator-gap:0px;--_wp-ui-menu-elevation-md:0px 2px 3px 0px #0000000d,0px 4px 5px 0px #0000000a,0px 12px 12px 0px #00000008,0px 16px 16px 0px #00000005;background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-menu-elevation-md);max-height:min(var(--available-height),480px,60dvh);max-width:min(var(--available-width),var(--wp-ui-menu-max-width));min-width:min(var(--available-width),var(--wp-ui-menu-min-width));outline:none;overflow-block:auto;overscroll-behavior:none;padding:var(--wp-ui-menu-popup-padding);scroll-padding:var(--wp-ui-menu-popup-padding);&:has(._42313b48c5459be3__item-selection-indicator){--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-menu-selection-indicator-track-size:var(--wpds-dimension-size-2xs,16px);--wp-ui-menu-selection-indicator-gap:var(--wpds-dimension-gap-sm,8px)}}._33f07ab17005471d__list{--_wp-ui-menu-item-label-line-height:var(--wpds-typography-line-height-sm,20px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--_wp-ui-menu-item-label-line-height)}._33f07ab17005471d__list,.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{--wp-ui-menu-group-prefix-gap:0px;display:grid;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];min-width:0}.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{grid-column:1/-1}._33f07ab17005471d__list:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.e05914e1005d7c2e__radio-group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.f11085533c0056b0__group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix){--wp-ui-menu-group-prefix-gap:var(--wpds-dimension-gap-xs,4px)}._4a0fd085d76fd23c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);grid-column:1/-1;line-height:var(--wpds-typography-line-height-xs,16px);min-height:var(--wpds-dimension-size-md,32px);padding-block:var(--wpds-dimension-padding-xs,4px);padding-inline:var(--wp-ui-menu-group-head-padding-inline);text-transform:uppercase}.bfc11368eadf3b39__separator{background-color:var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);grid-column:1/-1;height:var(--wpds-border-width-xs,1px);margin-block:var(--wpds-dimension-gap-xs,4px);margin-inline:var(--wp-ui-menu-group-head-padding-inline);@media (forced-colors:active){background-color:CanvasText}}._5c913bce0d8bb0d6__item{--wp-ui-menu-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-menu-item-padding-block:var(--wpds-dimension-padding-xs,4px);--_gcd-a-border-radius:var(--wpds-border-radius-sm,2px);align-items:start;border-radius:var(--wpds-border-radius-sm,2px);display:grid;gap:0;grid-column:1/-1;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];justify-content:stretch;min-height:var(--wp-ui-menu-item-height);min-width:0;padding-block:var(--wp-ui-menu-item-padding-block);scroll-margin:var(--wp-ui-menu-popup-padding);text-decoration:none;user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&[href]{cursor:pointer}@supports (grid-template-columns:subgrid){grid-template-columns:subgrid}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:var(--wpds-border-width-xs,1px) solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}._42313b48c5459be3__item-selection-indicator,._64924ecabf65a5d6__item-prefix,.af879698ede76757__item-content{grid-row:1}._42313b48c5459be3__item-selection-indicator{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:selection-start/selection-end;height:var(--_wp-ui-menu-item-label-line-height);justify-content:center;justify-self:center;pointer-events:none;width:var(--wp-ui-menu-selection-indicator-size);&[data-unchecked]{opacity:0}}._99c5bd141cbf516f__checkbox-selection-icon{translate:0 1px}._59aa9b3b3a651148__radio-selection-icon{fill:currentColor;height:var(--wpds-dimension-size-xs,20px);width:var(--wpds-dimension-size-xs,20px)}._64924ecabf65a5d6__item-prefix{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:prefix-start/prefix-end;justify-content:center;min-width:0}.a836378335a4cbf1__prefix-icon{align-self:flex-start;flex-shrink:0;margin-block-start:calc((var(--_wp-ui-menu-item-label-line-height) - var(--_wp-ui-menu-prefix-icon-size))/2)}.af879698ede76757__item-content{align-items:center;box-sizing:border-box;display:grid;grid-column:content-start/content-end;grid-template-columns:[label-start] minmax(0,1fr) [label-end suffix-start] auto [suffix-end shortcut-start] auto [shortcut-end trailing-start] auto [trailing-end];min-width:0;pointer-events:none}._943a932d9f81c78c__item-children{align-self:start;display:inline-flex;flex-direction:column;gap:2px;grid-column:label-start/label-end;min-width:0}._5ed41da4abcf8958__item-label{--_gcd-heading-color:currentColor;--_gcd-p-line-height:var(--_wp-ui-menu-item-label-line-height);color:inherit;line-height:var(--_wp-ui-menu-item-label-line-height);min-width:0;overflow-wrap:anywhere}.fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:var(--wpds-color-foreground-content-neutral-weak,#707070);color:var(--wpds-color-foreground-content-neutral-weak,#707070);overflow-wrap:anywhere;padding-block-end:var(--wpds-dimension-padding-xs,4px)}._091406749ed93e6e__item-suffix{align-items:center;display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:suffix-start/suffix-end}._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin-inline-start:var(--wpds-dimension-gap-md,12px)}._23630f40071a29ff__item-shortcut{grid-column:shortcut-start/shortcut-end}._06be17a91bf434a0__item-trailing{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:trailing-start/trailing-end;margin-inline-start:var(--wpds-dimension-gap-md,12px)}._943a932d9f81c78c__item-children+:is(._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut,._06be17a91bf434a0__item-trailing){margin-inline-start:var(--wpds-dimension-gap-xl,24px)}._23630f40071a29ff__item-shortcut+._06be17a91bf434a0__item-trailing{margin-inline-start:var(--wpds-dimension-gap-xs,4px)}.b78aec79bf93eba0__submenu-chevron{margin-inline-end:calc(var(--wpds-dimension-gap-sm, 8px)*-1)}.b78aec79bf93eba0__submenu-chevron:dir(rtl){transform:rotate(180deg)}._60da3b6f9718cf76__external-link-indicator{display:inline-block;font-weight:var(--wpds-typography-font-weight-default,400);line-height:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px);text-decoration:none}._60da3b6f9718cf76__external-link-indicator:after{content:"\\2197"}._60da3b6f9718cf76__external-link-indicator:dir(rtl):after{content:"\\2196"}._5c913bce0d8bb0d6__item[aria-disabled=true] ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[aria-disabled=true] ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[aria-disabled=true] ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[aria-disabled=true] ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[aria-disabled=true] ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[aria-disabled=true] .fa88c9f1a96a4c5a__item-description,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) .fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:currentColor;color:inherit}}}'); 18340 } 18341 var style_default14 = { "positioner": "d61e2d85c0ee0699__positioner", "popup": "_34e81249f419a5a5__popup", "item-selection-indicator": "_42313b48c5459be3__item-selection-indicator", "is-root": "_087a537b24fee6a1__is-root _380b81b8f79fb10f__dropdown-motion", "is-submenu": "_6d3b567f6289bdc2__is-submenu _7f344b94e270e039__dropdown-motion--fade-only", "list": "_33f07ab17005471d__list", "group": "f11085533c0056b0__group", "radio-group": "e05914e1005d7c2e__radio-group", "item": "_5c913bce0d8bb0d6__item", "item-prefix": "_64924ecabf65a5d6__item-prefix", "group-label": "_4a0fd085d76fd23c__group-label", "separator": "bfc11368eadf3b39__separator", "item-content": "af879698ede76757__item-content", "checkbox-selection-icon": "_99c5bd141cbf516f__checkbox-selection-icon", "radio-selection-icon": "_59aa9b3b3a651148__radio-selection-icon", "prefix-icon": "a836378335a4cbf1__prefix-icon", "item-children": "_943a932d9f81c78c__item-children", "item-label": "_5ed41da4abcf8958__item-label", "item-description": "fa88c9f1a96a4c5a__item-description", "item-suffix": "_091406749ed93e6e__item-suffix", "item-shortcut": "_23630f40071a29ff__item-shortcut", "item-trailing": "_06be17a91bf434a0__item-trailing", "submenu-chevron": "b78aec79bf93eba0__submenu-chevron", "external-link-indicator": "_60da3b6f9718cf76__external-link-indicator" }; 18342 var MENU_SUBMENU_POPUP_POSITIONER_PROPS = { 18343 side: "inline-end", 18344 align: "start", 18345 sideOffset: -4, 18346 collisionPadding: 12 18347 }; 18348 var Positioner2 = (0, import_element35.forwardRef)( 18349 function MenuPositioner3({ className, ...props }, ref) { 18350 const { isSubmenu } = useMenuContext(); 18351 const defaultProps = isSubmenu ? MENU_SUBMENU_POPUP_POSITIONER_PROPS : ITEM_POPUP_POSITIONER_PROPS; 18352 return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)( 18353 index_parts_exports.Positioner, 18354 { 18355 ...defaultProps, 18356 ...props, 18357 ref, 18358 className: clsx_default( 18359 resets_default6["box-sizing"], 18360 style_default14.positioner, 18361 className 18362 ) 18363 } 18364 ); 18365 } 18366 ); 18367 18368 // packages/ui/build-module/menu/popup.mjs 18369 var import_jsx_runtime85 = __toESM(require_jsx_runtime(), 1); 18370 var STYLE_HASH_ATTRIBUTE16 = "data-wp-hash"; 18371 function getRuntime16() { 18372 const globalScope = globalThis; 18373 if (globalScope.__wpStyleRuntime) { 18374 return globalScope.__wpStyleRuntime; 18375 } 18376 globalScope.__wpStyleRuntime = { 18377 documents: /* @__PURE__ */ new Map(), 18378 styles: /* @__PURE__ */ new Map(), 18379 injectedStyles: /* @__PURE__ */ new WeakMap() 18380 }; 18381 if (typeof document !== "undefined") { 18382 registerDocument16(document); 18383 } 18384 return globalScope.__wpStyleRuntime; 18385 } 18386 function documentContainsStyleHash16(targetDocument, hash) { 18387 if (!targetDocument.head) { 18388 return false; 18389 } 18390 for (const style of targetDocument.head.querySelectorAll( 18391 `style[$STYLE_HASH_ATTRIBUTE16}]` 18392 )) { 18393 if (style.getAttribute(STYLE_HASH_ATTRIBUTE16) === hash) { 18394 return true; 18395 } 18396 } 18397 return false; 18398 } 18399 function injectStyle16(targetDocument, hash, css) { 18400 if (!targetDocument.head) { 18401 return; 18402 } 18403 const runtime = getRuntime16(); 18404 let injectedStyles = runtime.injectedStyles.get(targetDocument); 18405 if (!injectedStyles) { 18406 injectedStyles = /* @__PURE__ */ new Set(); 18407 runtime.injectedStyles.set(targetDocument, injectedStyles); 18408 } 18409 if (injectedStyles.has(hash)) { 18410 return; 18411 } 18412 if (documentContainsStyleHash16(targetDocument, hash)) { 18413 injectedStyles.add(hash); 18414 return; 18415 } 18416 const style = targetDocument.createElement("style"); 18417 style.setAttribute(STYLE_HASH_ATTRIBUTE16, hash); 18418 style.appendChild(targetDocument.createTextNode(css)); 18419 targetDocument.head.appendChild(style); 18420 injectedStyles.add(hash); 18421 } 18422 function registerDocument16(targetDocument) { 18423 const runtime = getRuntime16(); 18424 runtime.documents.set( 18425 targetDocument, 18426 (runtime.documents.get(targetDocument) ?? 0) + 1 18427 ); 18428 for (const [hash, css] of runtime.styles) { 18429 injectStyle16(targetDocument, hash, css); 18430 } 18431 return () => { 18432 const count = runtime.documents.get(targetDocument); 18433 if (count === void 0) { 18434 return; 18435 } 18436 if (count <= 1) { 18437 runtime.documents.delete(targetDocument); 18438 return; 18439 } 18440 runtime.documents.set(targetDocument, count - 1); 18441 }; 18442 } 18443 function registerStyle16(hash, css) { 18444 const runtime = getRuntime16(); 18445 runtime.styles.set(hash, css); 18446 for (const targetDocument of runtime.documents.keys()) { 18447 injectStyle16(targetDocument, hash, css); 18448 } 18449 } 18450 if (typeof process === "undefined" || true) { 18451 registerStyle16("dce31c541c", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion,._7f344b94e270e039__dropdown-motion--fade-only{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}}._380b81b8f79fb10f__dropdown-motion{transform:translate(0);&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=inline-start][data-ending-style],&[data-side=inline-start][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=inline-end][data-ending-style],&[data-side=inline-end][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-start][data-ending-style],&:dir(rtl)[data-side=inline-start][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-end][data-ending-style],&:dir(rtl)[data-side=inline-end][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.d61e2d85c0ee0699__positioner{z-index:var(--wp-ui-menu-z-index,initial)}._34e81249f419a5a5__popup{--wp-ui-menu-popup-padding:var(--wpds-dimension-padding-xs,4px);--wp-ui-menu-min-width:160px;--wp-ui-menu-max-width:var(--wpds-dimension-surface-width-md,400px);--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-group-head-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-selection-indicator-track-size:0px;--wp-ui-menu-selection-indicator-size:var(--wpds-dimension-size-sm,24px);--wp-ui-menu-selection-indicator-gap:0px;--_wp-ui-menu-elevation-md:0px 2px 3px 0px #0000000d,0px 4px 5px 0px #0000000a,0px 12px 12px 0px #00000008,0px 16px 16px 0px #00000005;background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-menu-elevation-md);max-height:min(var(--available-height),480px,60dvh);max-width:min(var(--available-width),var(--wp-ui-menu-max-width));min-width:min(var(--available-width),var(--wp-ui-menu-min-width));outline:none;overflow-block:auto;overscroll-behavior:none;padding:var(--wp-ui-menu-popup-padding);scroll-padding:var(--wp-ui-menu-popup-padding);&:has(._42313b48c5459be3__item-selection-indicator){--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-menu-selection-indicator-track-size:var(--wpds-dimension-size-2xs,16px);--wp-ui-menu-selection-indicator-gap:var(--wpds-dimension-gap-sm,8px)}}._33f07ab17005471d__list{--_wp-ui-menu-item-label-line-height:var(--wpds-typography-line-height-sm,20px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--_wp-ui-menu-item-label-line-height)}._33f07ab17005471d__list,.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{--wp-ui-menu-group-prefix-gap:0px;display:grid;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];min-width:0}.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{grid-column:1/-1}._33f07ab17005471d__list:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.e05914e1005d7c2e__radio-group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.f11085533c0056b0__group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix){--wp-ui-menu-group-prefix-gap:var(--wpds-dimension-gap-xs,4px)}._4a0fd085d76fd23c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);grid-column:1/-1;line-height:var(--wpds-typography-line-height-xs,16px);min-height:var(--wpds-dimension-size-md,32px);padding-block:var(--wpds-dimension-padding-xs,4px);padding-inline:var(--wp-ui-menu-group-head-padding-inline);text-transform:uppercase}.bfc11368eadf3b39__separator{background-color:var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);grid-column:1/-1;height:var(--wpds-border-width-xs,1px);margin-block:var(--wpds-dimension-gap-xs,4px);margin-inline:var(--wp-ui-menu-group-head-padding-inline);@media (forced-colors:active){background-color:CanvasText}}._5c913bce0d8bb0d6__item{--wp-ui-menu-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-menu-item-padding-block:var(--wpds-dimension-padding-xs,4px);--_gcd-a-border-radius:var(--wpds-border-radius-sm,2px);align-items:start;border-radius:var(--wpds-border-radius-sm,2px);display:grid;gap:0;grid-column:1/-1;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];justify-content:stretch;min-height:var(--wp-ui-menu-item-height);min-width:0;padding-block:var(--wp-ui-menu-item-padding-block);scroll-margin:var(--wp-ui-menu-popup-padding);text-decoration:none;user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&[href]{cursor:pointer}@supports (grid-template-columns:subgrid){grid-template-columns:subgrid}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:var(--wpds-border-width-xs,1px) solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}._42313b48c5459be3__item-selection-indicator,._64924ecabf65a5d6__item-prefix,.af879698ede76757__item-content{grid-row:1}._42313b48c5459be3__item-selection-indicator{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:selection-start/selection-end;height:var(--_wp-ui-menu-item-label-line-height);justify-content:center;justify-self:center;pointer-events:none;width:var(--wp-ui-menu-selection-indicator-size);&[data-unchecked]{opacity:0}}._99c5bd141cbf516f__checkbox-selection-icon{translate:0 1px}._59aa9b3b3a651148__radio-selection-icon{fill:currentColor;height:var(--wpds-dimension-size-xs,20px);width:var(--wpds-dimension-size-xs,20px)}._64924ecabf65a5d6__item-prefix{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:prefix-start/prefix-end;justify-content:center;min-width:0}.a836378335a4cbf1__prefix-icon{align-self:flex-start;flex-shrink:0;margin-block-start:calc((var(--_wp-ui-menu-item-label-line-height) - var(--_wp-ui-menu-prefix-icon-size))/2)}.af879698ede76757__item-content{align-items:center;box-sizing:border-box;display:grid;grid-column:content-start/content-end;grid-template-columns:[label-start] minmax(0,1fr) [label-end suffix-start] auto [suffix-end shortcut-start] auto [shortcut-end trailing-start] auto [trailing-end];min-width:0;pointer-events:none}._943a932d9f81c78c__item-children{align-self:start;display:inline-flex;flex-direction:column;gap:2px;grid-column:label-start/label-end;min-width:0}._5ed41da4abcf8958__item-label{--_gcd-heading-color:currentColor;--_gcd-p-line-height:var(--_wp-ui-menu-item-label-line-height);color:inherit;line-height:var(--_wp-ui-menu-item-label-line-height);min-width:0;overflow-wrap:anywhere}.fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:var(--wpds-color-foreground-content-neutral-weak,#707070);color:var(--wpds-color-foreground-content-neutral-weak,#707070);overflow-wrap:anywhere;padding-block-end:var(--wpds-dimension-padding-xs,4px)}._091406749ed93e6e__item-suffix{align-items:center;display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:suffix-start/suffix-end}._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin-inline-start:var(--wpds-dimension-gap-md,12px)}._23630f40071a29ff__item-shortcut{grid-column:shortcut-start/shortcut-end}._06be17a91bf434a0__item-trailing{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:trailing-start/trailing-end;margin-inline-start:var(--wpds-dimension-gap-md,12px)}._943a932d9f81c78c__item-children+:is(._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut,._06be17a91bf434a0__item-trailing){margin-inline-start:var(--wpds-dimension-gap-xl,24px)}._23630f40071a29ff__item-shortcut+._06be17a91bf434a0__item-trailing{margin-inline-start:var(--wpds-dimension-gap-xs,4px)}.b78aec79bf93eba0__submenu-chevron{margin-inline-end:calc(var(--wpds-dimension-gap-sm, 8px)*-1)}.b78aec79bf93eba0__submenu-chevron:dir(rtl){transform:rotate(180deg)}._60da3b6f9718cf76__external-link-indicator{display:inline-block;font-weight:var(--wpds-typography-font-weight-default,400);line-height:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px);text-decoration:none}._60da3b6f9718cf76__external-link-indicator:after{content:"\\2197"}._60da3b6f9718cf76__external-link-indicator:dir(rtl):after{content:"\\2196"}._5c913bce0d8bb0d6__item[aria-disabled=true] ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[aria-disabled=true] ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[aria-disabled=true] ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[aria-disabled=true] ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[aria-disabled=true] ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[aria-disabled=true] .fa88c9f1a96a4c5a__item-description,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) .fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:currentColor;color:inherit}}}'); 18452 } 18453 var style_default15 = { "positioner": "d61e2d85c0ee0699__positioner", "popup": "_34e81249f419a5a5__popup", "item-selection-indicator": "_42313b48c5459be3__item-selection-indicator", "is-root": "_087a537b24fee6a1__is-root _380b81b8f79fb10f__dropdown-motion", "is-submenu": "_6d3b567f6289bdc2__is-submenu _7f344b94e270e039__dropdown-motion--fade-only", "list": "_33f07ab17005471d__list", "group": "f11085533c0056b0__group", "radio-group": "e05914e1005d7c2e__radio-group", "item": "_5c913bce0d8bb0d6__item", "item-prefix": "_64924ecabf65a5d6__item-prefix", "group-label": "_4a0fd085d76fd23c__group-label", "separator": "bfc11368eadf3b39__separator", "item-content": "af879698ede76757__item-content", "checkbox-selection-icon": "_99c5bd141cbf516f__checkbox-selection-icon", "radio-selection-icon": "_59aa9b3b3a651148__radio-selection-icon", "prefix-icon": "a836378335a4cbf1__prefix-icon", "item-children": "_943a932d9f81c78c__item-children", "item-label": "_5ed41da4abcf8958__item-label", "item-description": "fa88c9f1a96a4c5a__item-description", "item-suffix": "_091406749ed93e6e__item-suffix", "item-shortcut": "_23630f40071a29ff__item-shortcut", "item-trailing": "_06be17a91bf434a0__item-trailing", "submenu-chevron": "b78aec79bf93eba0__submenu-chevron", "external-link-indicator": "_60da3b6f9718cf76__external-link-indicator" }; 18454 var Popup2 = (0, import_element36.forwardRef)(function MenuPopup3({ children, className, portal, positioner, ...props }, ref) { 18455 const { isSubmenu } = useMenuContext(); 18456 const popupContent = /* @__PURE__ */ (0, import_jsx_runtime85.jsx)( 18457 index_parts_exports.Popup, 18458 { 18459 ref, 18460 className: clsx_default( 18461 style_default15.popup, 18462 isSubmenu ? style_default15["is-submenu"] : style_default15["is-root"], 18463 className 18464 ), 18465 ...props, 18466 children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)( 18467 "div", 18468 { 18469 className: style_default15.list, 18470 children 18471 } 18472 ) 18473 } 18474 ); 18475 const positionedPopup = renderSlotWithChildren( 18476 positioner, 18477 /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(Positioner2, {}), 18478 popupContent 18479 ); 18480 return renderSlotWithChildren(portal, /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(Portal2, {}), positionedPopup); 18481 }); 18482 18483 // packages/ui/build-module/menu/prefix-icon.mjs 18484 var import_element37 = __toESM(require_element(), 1); 18485 var import_jsx_runtime86 = __toESM(require_jsx_runtime(), 1); 18486 var STYLE_HASH_ATTRIBUTE17 = "data-wp-hash"; 18487 function getRuntime17() { 18488 const globalScope = globalThis; 18489 if (globalScope.__wpStyleRuntime) { 18490 return globalScope.__wpStyleRuntime; 18491 } 18492 globalScope.__wpStyleRuntime = { 18493 documents: /* @__PURE__ */ new Map(), 18494 styles: /* @__PURE__ */ new Map(), 18495 injectedStyles: /* @__PURE__ */ new WeakMap() 18496 }; 18497 if (typeof document !== "undefined") { 18498 registerDocument17(document); 18499 } 18500 return globalScope.__wpStyleRuntime; 18501 } 18502 function documentContainsStyleHash17(targetDocument, hash) { 18503 if (!targetDocument.head) { 18504 return false; 18505 } 18506 for (const style of targetDocument.head.querySelectorAll( 18507 `style[$STYLE_HASH_ATTRIBUTE17}]` 18508 )) { 18509 if (style.getAttribute(STYLE_HASH_ATTRIBUTE17) === hash) { 18510 return true; 18511 } 18512 } 18513 return false; 18514 } 18515 function injectStyle17(targetDocument, hash, css) { 18516 if (!targetDocument.head) { 18517 return; 18518 } 18519 const runtime = getRuntime17(); 18520 let injectedStyles = runtime.injectedStyles.get(targetDocument); 18521 if (!injectedStyles) { 18522 injectedStyles = /* @__PURE__ */ new Set(); 18523 runtime.injectedStyles.set(targetDocument, injectedStyles); 18524 } 18525 if (injectedStyles.has(hash)) { 18526 return; 18527 } 18528 if (documentContainsStyleHash17(targetDocument, hash)) { 18529 injectedStyles.add(hash); 18530 return; 18531 } 18532 const style = targetDocument.createElement("style"); 18533 style.setAttribute(STYLE_HASH_ATTRIBUTE17, hash); 18534 style.appendChild(targetDocument.createTextNode(css)); 18535 targetDocument.head.appendChild(style); 18536 injectedStyles.add(hash); 18537 } 18538 function registerDocument17(targetDocument) { 18539 const runtime = getRuntime17(); 18540 runtime.documents.set( 18541 targetDocument, 18542 (runtime.documents.get(targetDocument) ?? 0) + 1 18543 ); 18544 for (const [hash, css] of runtime.styles) { 18545 injectStyle17(targetDocument, hash, css); 18546 } 18547 return () => { 18548 const count = runtime.documents.get(targetDocument); 18549 if (count === void 0) { 18550 return; 18551 } 18552 if (count <= 1) { 18553 runtime.documents.delete(targetDocument); 18554 return; 18555 } 18556 runtime.documents.set(targetDocument, count - 1); 18557 }; 18558 } 18559 function registerStyle17(hash, css) { 18560 const runtime = getRuntime17(); 18561 runtime.styles.set(hash, css); 18562 for (const targetDocument of runtime.documents.keys()) { 18563 injectStyle17(targetDocument, hash, css); 18564 } 18565 } 18566 if (typeof process === "undefined" || true) { 18567 registerStyle17("dce31c541c", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion,._7f344b94e270e039__dropdown-motion--fade-only{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}}._380b81b8f79fb10f__dropdown-motion{transform:translate(0);&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=inline-start][data-ending-style],&[data-side=inline-start][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=inline-end][data-ending-style],&[data-side=inline-end][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-start][data-ending-style],&:dir(rtl)[data-side=inline-start][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-end][data-ending-style],&:dir(rtl)[data-side=inline-end][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.d61e2d85c0ee0699__positioner{z-index:var(--wp-ui-menu-z-index,initial)}._34e81249f419a5a5__popup{--wp-ui-menu-popup-padding:var(--wpds-dimension-padding-xs,4px);--wp-ui-menu-min-width:160px;--wp-ui-menu-max-width:var(--wpds-dimension-surface-width-md,400px);--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-group-head-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-selection-indicator-track-size:0px;--wp-ui-menu-selection-indicator-size:var(--wpds-dimension-size-sm,24px);--wp-ui-menu-selection-indicator-gap:0px;--_wp-ui-menu-elevation-md:0px 2px 3px 0px #0000000d,0px 4px 5px 0px #0000000a,0px 12px 12px 0px #00000008,0px 16px 16px 0px #00000005;background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-menu-elevation-md);max-height:min(var(--available-height),480px,60dvh);max-width:min(var(--available-width),var(--wp-ui-menu-max-width));min-width:min(var(--available-width),var(--wp-ui-menu-min-width));outline:none;overflow-block:auto;overscroll-behavior:none;padding:var(--wp-ui-menu-popup-padding);scroll-padding:var(--wp-ui-menu-popup-padding);&:has(._42313b48c5459be3__item-selection-indicator){--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-menu-selection-indicator-track-size:var(--wpds-dimension-size-2xs,16px);--wp-ui-menu-selection-indicator-gap:var(--wpds-dimension-gap-sm,8px)}}._33f07ab17005471d__list{--_wp-ui-menu-item-label-line-height:var(--wpds-typography-line-height-sm,20px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--_wp-ui-menu-item-label-line-height)}._33f07ab17005471d__list,.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{--wp-ui-menu-group-prefix-gap:0px;display:grid;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];min-width:0}.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{grid-column:1/-1}._33f07ab17005471d__list:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.e05914e1005d7c2e__radio-group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.f11085533c0056b0__group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix){--wp-ui-menu-group-prefix-gap:var(--wpds-dimension-gap-xs,4px)}._4a0fd085d76fd23c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);grid-column:1/-1;line-height:var(--wpds-typography-line-height-xs,16px);min-height:var(--wpds-dimension-size-md,32px);padding-block:var(--wpds-dimension-padding-xs,4px);padding-inline:var(--wp-ui-menu-group-head-padding-inline);text-transform:uppercase}.bfc11368eadf3b39__separator{background-color:var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);grid-column:1/-1;height:var(--wpds-border-width-xs,1px);margin-block:var(--wpds-dimension-gap-xs,4px);margin-inline:var(--wp-ui-menu-group-head-padding-inline);@media (forced-colors:active){background-color:CanvasText}}._5c913bce0d8bb0d6__item{--wp-ui-menu-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-menu-item-padding-block:var(--wpds-dimension-padding-xs,4px);--_gcd-a-border-radius:var(--wpds-border-radius-sm,2px);align-items:start;border-radius:var(--wpds-border-radius-sm,2px);display:grid;gap:0;grid-column:1/-1;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];justify-content:stretch;min-height:var(--wp-ui-menu-item-height);min-width:0;padding-block:var(--wp-ui-menu-item-padding-block);scroll-margin:var(--wp-ui-menu-popup-padding);text-decoration:none;user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&[href]{cursor:pointer}@supports (grid-template-columns:subgrid){grid-template-columns:subgrid}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:var(--wpds-border-width-xs,1px) solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}._42313b48c5459be3__item-selection-indicator,._64924ecabf65a5d6__item-prefix,.af879698ede76757__item-content{grid-row:1}._42313b48c5459be3__item-selection-indicator{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:selection-start/selection-end;height:var(--_wp-ui-menu-item-label-line-height);justify-content:center;justify-self:center;pointer-events:none;width:var(--wp-ui-menu-selection-indicator-size);&[data-unchecked]{opacity:0}}._99c5bd141cbf516f__checkbox-selection-icon{translate:0 1px}._59aa9b3b3a651148__radio-selection-icon{fill:currentColor;height:var(--wpds-dimension-size-xs,20px);width:var(--wpds-dimension-size-xs,20px)}._64924ecabf65a5d6__item-prefix{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:prefix-start/prefix-end;justify-content:center;min-width:0}.a836378335a4cbf1__prefix-icon{align-self:flex-start;flex-shrink:0;margin-block-start:calc((var(--_wp-ui-menu-item-label-line-height) - var(--_wp-ui-menu-prefix-icon-size))/2)}.af879698ede76757__item-content{align-items:center;box-sizing:border-box;display:grid;grid-column:content-start/content-end;grid-template-columns:[label-start] minmax(0,1fr) [label-end suffix-start] auto [suffix-end shortcut-start] auto [shortcut-end trailing-start] auto [trailing-end];min-width:0;pointer-events:none}._943a932d9f81c78c__item-children{align-self:start;display:inline-flex;flex-direction:column;gap:2px;grid-column:label-start/label-end;min-width:0}._5ed41da4abcf8958__item-label{--_gcd-heading-color:currentColor;--_gcd-p-line-height:var(--_wp-ui-menu-item-label-line-height);color:inherit;line-height:var(--_wp-ui-menu-item-label-line-height);min-width:0;overflow-wrap:anywhere}.fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:var(--wpds-color-foreground-content-neutral-weak,#707070);color:var(--wpds-color-foreground-content-neutral-weak,#707070);overflow-wrap:anywhere;padding-block-end:var(--wpds-dimension-padding-xs,4px)}._091406749ed93e6e__item-suffix{align-items:center;display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:suffix-start/suffix-end}._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin-inline-start:var(--wpds-dimension-gap-md,12px)}._23630f40071a29ff__item-shortcut{grid-column:shortcut-start/shortcut-end}._06be17a91bf434a0__item-trailing{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:trailing-start/trailing-end;margin-inline-start:var(--wpds-dimension-gap-md,12px)}._943a932d9f81c78c__item-children+:is(._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut,._06be17a91bf434a0__item-trailing){margin-inline-start:var(--wpds-dimension-gap-xl,24px)}._23630f40071a29ff__item-shortcut+._06be17a91bf434a0__item-trailing{margin-inline-start:var(--wpds-dimension-gap-xs,4px)}.b78aec79bf93eba0__submenu-chevron{margin-inline-end:calc(var(--wpds-dimension-gap-sm, 8px)*-1)}.b78aec79bf93eba0__submenu-chevron:dir(rtl){transform:rotate(180deg)}._60da3b6f9718cf76__external-link-indicator{display:inline-block;font-weight:var(--wpds-typography-font-weight-default,400);line-height:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px);text-decoration:none}._60da3b6f9718cf76__external-link-indicator:after{content:"\\2197"}._60da3b6f9718cf76__external-link-indicator:dir(rtl):after{content:"\\2196"}._5c913bce0d8bb0d6__item[aria-disabled=true] ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[aria-disabled=true] ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[aria-disabled=true] ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[aria-disabled=true] ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[aria-disabled=true] ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[aria-disabled=true] .fa88c9f1a96a4c5a__item-description,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) .fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:currentColor;color:inherit}}}'); 18568 } 18569 var style_default16 = { "positioner": "d61e2d85c0ee0699__positioner", "popup": "_34e81249f419a5a5__popup", "item-selection-indicator": "_42313b48c5459be3__item-selection-indicator", "is-root": "_087a537b24fee6a1__is-root _380b81b8f79fb10f__dropdown-motion", "is-submenu": "_6d3b567f6289bdc2__is-submenu _7f344b94e270e039__dropdown-motion--fade-only", "list": "_33f07ab17005471d__list", "group": "f11085533c0056b0__group", "radio-group": "e05914e1005d7c2e__radio-group", "item": "_5c913bce0d8bb0d6__item", "item-prefix": "_64924ecabf65a5d6__item-prefix", "group-label": "_4a0fd085d76fd23c__group-label", "separator": "bfc11368eadf3b39__separator", "item-content": "af879698ede76757__item-content", "checkbox-selection-icon": "_99c5bd141cbf516f__checkbox-selection-icon", "radio-selection-icon": "_59aa9b3b3a651148__radio-selection-icon", "prefix-icon": "a836378335a4cbf1__prefix-icon", "item-children": "_943a932d9f81c78c__item-children", "item-label": "_5ed41da4abcf8958__item-label", "item-description": "fa88c9f1a96a4c5a__item-description", "item-suffix": "_091406749ed93e6e__item-suffix", "item-shortcut": "_23630f40071a29ff__item-shortcut", "item-trailing": "_06be17a91bf434a0__item-trailing", "submenu-chevron": "b78aec79bf93eba0__submenu-chevron", "external-link-indicator": "_60da3b6f9718cf76__external-link-indicator" }; 18570 var PrefixIcon = (0, import_element37.forwardRef)( 18571 function MenuPrefixIcon({ className, size: size4 = 24, style, ...props }, ref) { 18572 return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)( 18573 Icon, 18574 { 18575 ...props, 18576 ref, 18577 size: size4, 18578 className: clsx_default(style_default16["prefix-icon"], className), 18579 style: { 18580 ...style, 18581 "--_wp-ui-menu-prefix-icon-size": `$size4}px` 18582 } 18583 } 18584 ); 18585 } 18586 ); 18587 PrefixIcon.displayName = "Menu.PrefixIcon"; 18588 18589 // packages/ui/build-module/menu/radio-group.mjs 18590 var import_element38 = __toESM(require_element(), 1); 18591 var import_jsx_runtime87 = __toESM(require_jsx_runtime(), 1); 18592 var STYLE_HASH_ATTRIBUTE18 = "data-wp-hash"; 18593 function getRuntime18() { 18594 const globalScope = globalThis; 18595 if (globalScope.__wpStyleRuntime) { 18596 return globalScope.__wpStyleRuntime; 18597 } 18598 globalScope.__wpStyleRuntime = { 18599 documents: /* @__PURE__ */ new Map(), 18600 styles: /* @__PURE__ */ new Map(), 18601 injectedStyles: /* @__PURE__ */ new WeakMap() 18602 }; 18603 if (typeof document !== "undefined") { 18604 registerDocument18(document); 18605 } 18606 return globalScope.__wpStyleRuntime; 18607 } 18608 function documentContainsStyleHash18(targetDocument, hash) { 18609 if (!targetDocument.head) { 18610 return false; 18611 } 18612 for (const style of targetDocument.head.querySelectorAll( 18613 `style[$STYLE_HASH_ATTRIBUTE18}]` 18614 )) { 18615 if (style.getAttribute(STYLE_HASH_ATTRIBUTE18) === hash) { 18616 return true; 18617 } 18618 } 18619 return false; 18620 } 18621 function injectStyle18(targetDocument, hash, css) { 18622 if (!targetDocument.head) { 18623 return; 18624 } 18625 const runtime = getRuntime18(); 18626 let injectedStyles = runtime.injectedStyles.get(targetDocument); 18627 if (!injectedStyles) { 18628 injectedStyles = /* @__PURE__ */ new Set(); 18629 runtime.injectedStyles.set(targetDocument, injectedStyles); 18630 } 18631 if (injectedStyles.has(hash)) { 18632 return; 18633 } 18634 if (documentContainsStyleHash18(targetDocument, hash)) { 18635 injectedStyles.add(hash); 18636 return; 18637 } 18638 const style = targetDocument.createElement("style"); 18639 style.setAttribute(STYLE_HASH_ATTRIBUTE18, hash); 18640 style.appendChild(targetDocument.createTextNode(css)); 18641 targetDocument.head.appendChild(style); 18642 injectedStyles.add(hash); 18643 } 18644 function registerDocument18(targetDocument) { 18645 const runtime = getRuntime18(); 18646 runtime.documents.set( 18647 targetDocument, 18648 (runtime.documents.get(targetDocument) ?? 0) + 1 18649 ); 18650 for (const [hash, css] of runtime.styles) { 18651 injectStyle18(targetDocument, hash, css); 18652 } 18653 return () => { 18654 const count = runtime.documents.get(targetDocument); 18655 if (count === void 0) { 18656 return; 18657 } 18658 if (count <= 1) { 18659 runtime.documents.delete(targetDocument); 18660 return; 18661 } 18662 runtime.documents.set(targetDocument, count - 1); 18663 }; 18664 } 18665 function registerStyle18(hash, css) { 18666 const runtime = getRuntime18(); 18667 runtime.styles.set(hash, css); 18668 for (const targetDocument of runtime.documents.keys()) { 18669 injectStyle18(targetDocument, hash, css); 18670 } 18671 } 18672 if (typeof process === "undefined" || true) { 18673 registerStyle18("dce31c541c", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion,._7f344b94e270e039__dropdown-motion--fade-only{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}}._380b81b8f79fb10f__dropdown-motion{transform:translate(0);&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=inline-start][data-ending-style],&[data-side=inline-start][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=inline-end][data-ending-style],&[data-side=inline-end][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-start][data-ending-style],&:dir(rtl)[data-side=inline-start][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-end][data-ending-style],&:dir(rtl)[data-side=inline-end][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.d61e2d85c0ee0699__positioner{z-index:var(--wp-ui-menu-z-index,initial)}._34e81249f419a5a5__popup{--wp-ui-menu-popup-padding:var(--wpds-dimension-padding-xs,4px);--wp-ui-menu-min-width:160px;--wp-ui-menu-max-width:var(--wpds-dimension-surface-width-md,400px);--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-group-head-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-selection-indicator-track-size:0px;--wp-ui-menu-selection-indicator-size:var(--wpds-dimension-size-sm,24px);--wp-ui-menu-selection-indicator-gap:0px;--_wp-ui-menu-elevation-md:0px 2px 3px 0px #0000000d,0px 4px 5px 0px #0000000a,0px 12px 12px 0px #00000008,0px 16px 16px 0px #00000005;background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-menu-elevation-md);max-height:min(var(--available-height),480px,60dvh);max-width:min(var(--available-width),var(--wp-ui-menu-max-width));min-width:min(var(--available-width),var(--wp-ui-menu-min-width));outline:none;overflow-block:auto;overscroll-behavior:none;padding:var(--wp-ui-menu-popup-padding);scroll-padding:var(--wp-ui-menu-popup-padding);&:has(._42313b48c5459be3__item-selection-indicator){--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-menu-selection-indicator-track-size:var(--wpds-dimension-size-2xs,16px);--wp-ui-menu-selection-indicator-gap:var(--wpds-dimension-gap-sm,8px)}}._33f07ab17005471d__list{--_wp-ui-menu-item-label-line-height:var(--wpds-typography-line-height-sm,20px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--_wp-ui-menu-item-label-line-height)}._33f07ab17005471d__list,.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{--wp-ui-menu-group-prefix-gap:0px;display:grid;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];min-width:0}.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{grid-column:1/-1}._33f07ab17005471d__list:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.e05914e1005d7c2e__radio-group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.f11085533c0056b0__group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix){--wp-ui-menu-group-prefix-gap:var(--wpds-dimension-gap-xs,4px)}._4a0fd085d76fd23c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);grid-column:1/-1;line-height:var(--wpds-typography-line-height-xs,16px);min-height:var(--wpds-dimension-size-md,32px);padding-block:var(--wpds-dimension-padding-xs,4px);padding-inline:var(--wp-ui-menu-group-head-padding-inline);text-transform:uppercase}.bfc11368eadf3b39__separator{background-color:var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);grid-column:1/-1;height:var(--wpds-border-width-xs,1px);margin-block:var(--wpds-dimension-gap-xs,4px);margin-inline:var(--wp-ui-menu-group-head-padding-inline);@media (forced-colors:active){background-color:CanvasText}}._5c913bce0d8bb0d6__item{--wp-ui-menu-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-menu-item-padding-block:var(--wpds-dimension-padding-xs,4px);--_gcd-a-border-radius:var(--wpds-border-radius-sm,2px);align-items:start;border-radius:var(--wpds-border-radius-sm,2px);display:grid;gap:0;grid-column:1/-1;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];justify-content:stretch;min-height:var(--wp-ui-menu-item-height);min-width:0;padding-block:var(--wp-ui-menu-item-padding-block);scroll-margin:var(--wp-ui-menu-popup-padding);text-decoration:none;user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&[href]{cursor:pointer}@supports (grid-template-columns:subgrid){grid-template-columns:subgrid}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:var(--wpds-border-width-xs,1px) solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}._42313b48c5459be3__item-selection-indicator,._64924ecabf65a5d6__item-prefix,.af879698ede76757__item-content{grid-row:1}._42313b48c5459be3__item-selection-indicator{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:selection-start/selection-end;height:var(--_wp-ui-menu-item-label-line-height);justify-content:center;justify-self:center;pointer-events:none;width:var(--wp-ui-menu-selection-indicator-size);&[data-unchecked]{opacity:0}}._99c5bd141cbf516f__checkbox-selection-icon{translate:0 1px}._59aa9b3b3a651148__radio-selection-icon{fill:currentColor;height:var(--wpds-dimension-size-xs,20px);width:var(--wpds-dimension-size-xs,20px)}._64924ecabf65a5d6__item-prefix{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:prefix-start/prefix-end;justify-content:center;min-width:0}.a836378335a4cbf1__prefix-icon{align-self:flex-start;flex-shrink:0;margin-block-start:calc((var(--_wp-ui-menu-item-label-line-height) - var(--_wp-ui-menu-prefix-icon-size))/2)}.af879698ede76757__item-content{align-items:center;box-sizing:border-box;display:grid;grid-column:content-start/content-end;grid-template-columns:[label-start] minmax(0,1fr) [label-end suffix-start] auto [suffix-end shortcut-start] auto [shortcut-end trailing-start] auto [trailing-end];min-width:0;pointer-events:none}._943a932d9f81c78c__item-children{align-self:start;display:inline-flex;flex-direction:column;gap:2px;grid-column:label-start/label-end;min-width:0}._5ed41da4abcf8958__item-label{--_gcd-heading-color:currentColor;--_gcd-p-line-height:var(--_wp-ui-menu-item-label-line-height);color:inherit;line-height:var(--_wp-ui-menu-item-label-line-height);min-width:0;overflow-wrap:anywhere}.fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:var(--wpds-color-foreground-content-neutral-weak,#707070);color:var(--wpds-color-foreground-content-neutral-weak,#707070);overflow-wrap:anywhere;padding-block-end:var(--wpds-dimension-padding-xs,4px)}._091406749ed93e6e__item-suffix{align-items:center;display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:suffix-start/suffix-end}._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin-inline-start:var(--wpds-dimension-gap-md,12px)}._23630f40071a29ff__item-shortcut{grid-column:shortcut-start/shortcut-end}._06be17a91bf434a0__item-trailing{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:trailing-start/trailing-end;margin-inline-start:var(--wpds-dimension-gap-md,12px)}._943a932d9f81c78c__item-children+:is(._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut,._06be17a91bf434a0__item-trailing){margin-inline-start:var(--wpds-dimension-gap-xl,24px)}._23630f40071a29ff__item-shortcut+._06be17a91bf434a0__item-trailing{margin-inline-start:var(--wpds-dimension-gap-xs,4px)}.b78aec79bf93eba0__submenu-chevron{margin-inline-end:calc(var(--wpds-dimension-gap-sm, 8px)*-1)}.b78aec79bf93eba0__submenu-chevron:dir(rtl){transform:rotate(180deg)}._60da3b6f9718cf76__external-link-indicator{display:inline-block;font-weight:var(--wpds-typography-font-weight-default,400);line-height:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px);text-decoration:none}._60da3b6f9718cf76__external-link-indicator:after{content:"\\2197"}._60da3b6f9718cf76__external-link-indicator:dir(rtl):after{content:"\\2196"}._5c913bce0d8bb0d6__item[aria-disabled=true] ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[aria-disabled=true] ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[aria-disabled=true] ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[aria-disabled=true] ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[aria-disabled=true] ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[aria-disabled=true] .fa88c9f1a96a4c5a__item-description,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) .fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:currentColor;color:inherit}}}'); 18674 } 18675 var style_default17 = { "positioner": "d61e2d85c0ee0699__positioner", "popup": "_34e81249f419a5a5__popup", "item-selection-indicator": "_42313b48c5459be3__item-selection-indicator", "is-root": "_087a537b24fee6a1__is-root _380b81b8f79fb10f__dropdown-motion", "is-submenu": "_6d3b567f6289bdc2__is-submenu _7f344b94e270e039__dropdown-motion--fade-only", "list": "_33f07ab17005471d__list", "group": "f11085533c0056b0__group", "radio-group": "e05914e1005d7c2e__radio-group", "item": "_5c913bce0d8bb0d6__item", "item-prefix": "_64924ecabf65a5d6__item-prefix", "group-label": "_4a0fd085d76fd23c__group-label", "separator": "bfc11368eadf3b39__separator", "item-content": "af879698ede76757__item-content", "checkbox-selection-icon": "_99c5bd141cbf516f__checkbox-selection-icon", "radio-selection-icon": "_59aa9b3b3a651148__radio-selection-icon", "prefix-icon": "a836378335a4cbf1__prefix-icon", "item-children": "_943a932d9f81c78c__item-children", "item-label": "_5ed41da4abcf8958__item-label", "item-description": "fa88c9f1a96a4c5a__item-description", "item-suffix": "_091406749ed93e6e__item-suffix", "item-shortcut": "_23630f40071a29ff__item-shortcut", "item-trailing": "_06be17a91bf434a0__item-trailing", "submenu-chevron": "b78aec79bf93eba0__submenu-chevron", "external-link-indicator": "_60da3b6f9718cf76__external-link-indicator" }; 18676 var RadioGroup = (0, import_element38.forwardRef)( 18677 function MenuRadioGroup3({ className, ...props }, ref) { 18678 return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)( 18679 index_parts_exports.RadioGroup, 18680 { 18681 ref, 18682 className: clsx_default(style_default17["radio-group"], className), 18683 ...props 18684 } 18685 ); 18686 } 18687 ); 18688 18689 // packages/ui/build-module/menu/radio-item.mjs 18690 var import_element39 = __toESM(require_element(), 1); 18691 var import_primitives36 = __toESM(require_primitives(), 1); 18692 var import_jsx_runtime88 = __toESM(require_jsx_runtime(), 1); 18693 var STYLE_HASH_ATTRIBUTE19 = "data-wp-hash"; 18694 function getRuntime19() { 18695 const globalScope = globalThis; 18696 if (globalScope.__wpStyleRuntime) { 18697 return globalScope.__wpStyleRuntime; 18698 } 18699 globalScope.__wpStyleRuntime = { 18700 documents: /* @__PURE__ */ new Map(), 18701 styles: /* @__PURE__ */ new Map(), 18702 injectedStyles: /* @__PURE__ */ new WeakMap() 18703 }; 18704 if (typeof document !== "undefined") { 18705 registerDocument19(document); 18706 } 18707 return globalScope.__wpStyleRuntime; 18708 } 18709 function documentContainsStyleHash19(targetDocument, hash) { 18710 if (!targetDocument.head) { 18711 return false; 18712 } 18713 for (const style of targetDocument.head.querySelectorAll( 18714 `style[$STYLE_HASH_ATTRIBUTE19}]` 18715 )) { 18716 if (style.getAttribute(STYLE_HASH_ATTRIBUTE19) === hash) { 18717 return true; 18718 } 18719 } 18720 return false; 18721 } 18722 function injectStyle19(targetDocument, hash, css) { 18723 if (!targetDocument.head) { 18724 return; 18725 } 18726 const runtime = getRuntime19(); 18727 let injectedStyles = runtime.injectedStyles.get(targetDocument); 18728 if (!injectedStyles) { 18729 injectedStyles = /* @__PURE__ */ new Set(); 18730 runtime.injectedStyles.set(targetDocument, injectedStyles); 18731 } 18732 if (injectedStyles.has(hash)) { 18733 return; 18734 } 18735 if (documentContainsStyleHash19(targetDocument, hash)) { 18736 injectedStyles.add(hash); 18737 return; 18738 } 18739 const style = targetDocument.createElement("style"); 18740 style.setAttribute(STYLE_HASH_ATTRIBUTE19, hash); 18741 style.appendChild(targetDocument.createTextNode(css)); 18742 targetDocument.head.appendChild(style); 18743 injectedStyles.add(hash); 18744 } 18745 function registerDocument19(targetDocument) { 18746 const runtime = getRuntime19(); 18747 runtime.documents.set( 18748 targetDocument, 18749 (runtime.documents.get(targetDocument) ?? 0) + 1 18750 ); 18751 for (const [hash, css] of runtime.styles) { 18752 injectStyle19(targetDocument, hash, css); 18753 } 18754 return () => { 18755 const count = runtime.documents.get(targetDocument); 18756 if (count === void 0) { 18757 return; 18758 } 18759 if (count <= 1) { 18760 runtime.documents.delete(targetDocument); 18761 return; 18762 } 18763 runtime.documents.set(targetDocument, count - 1); 18764 }; 18765 } 18766 function registerStyle19(hash, css) { 18767 const runtime = getRuntime19(); 18768 runtime.styles.set(hash, css); 18769 for (const targetDocument of runtime.documents.keys()) { 18770 injectStyle19(targetDocument, hash, css); 18771 } 18772 } 18773 if (typeof process === "undefined" || true) { 18774 registerStyle19("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); 18775 } 18776 var resets_default7 = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; 18777 if (typeof process === "undefined" || true) { 18778 registerStyle19("dce31c541c", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion,._7f344b94e270e039__dropdown-motion--fade-only{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}}._380b81b8f79fb10f__dropdown-motion{transform:translate(0);&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=inline-start][data-ending-style],&[data-side=inline-start][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=inline-end][data-ending-style],&[data-side=inline-end][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-start][data-ending-style],&:dir(rtl)[data-side=inline-start][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-end][data-ending-style],&:dir(rtl)[data-side=inline-end][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.d61e2d85c0ee0699__positioner{z-index:var(--wp-ui-menu-z-index,initial)}._34e81249f419a5a5__popup{--wp-ui-menu-popup-padding:var(--wpds-dimension-padding-xs,4px);--wp-ui-menu-min-width:160px;--wp-ui-menu-max-width:var(--wpds-dimension-surface-width-md,400px);--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-group-head-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-selection-indicator-track-size:0px;--wp-ui-menu-selection-indicator-size:var(--wpds-dimension-size-sm,24px);--wp-ui-menu-selection-indicator-gap:0px;--_wp-ui-menu-elevation-md:0px 2px 3px 0px #0000000d,0px 4px 5px 0px #0000000a,0px 12px 12px 0px #00000008,0px 16px 16px 0px #00000005;background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-menu-elevation-md);max-height:min(var(--available-height),480px,60dvh);max-width:min(var(--available-width),var(--wp-ui-menu-max-width));min-width:min(var(--available-width),var(--wp-ui-menu-min-width));outline:none;overflow-block:auto;overscroll-behavior:none;padding:var(--wp-ui-menu-popup-padding);scroll-padding:var(--wp-ui-menu-popup-padding);&:has(._42313b48c5459be3__item-selection-indicator){--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-menu-selection-indicator-track-size:var(--wpds-dimension-size-2xs,16px);--wp-ui-menu-selection-indicator-gap:var(--wpds-dimension-gap-sm,8px)}}._33f07ab17005471d__list{--_wp-ui-menu-item-label-line-height:var(--wpds-typography-line-height-sm,20px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--_wp-ui-menu-item-label-line-height)}._33f07ab17005471d__list,.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{--wp-ui-menu-group-prefix-gap:0px;display:grid;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];min-width:0}.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{grid-column:1/-1}._33f07ab17005471d__list:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.e05914e1005d7c2e__radio-group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.f11085533c0056b0__group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix){--wp-ui-menu-group-prefix-gap:var(--wpds-dimension-gap-xs,4px)}._4a0fd085d76fd23c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);grid-column:1/-1;line-height:var(--wpds-typography-line-height-xs,16px);min-height:var(--wpds-dimension-size-md,32px);padding-block:var(--wpds-dimension-padding-xs,4px);padding-inline:var(--wp-ui-menu-group-head-padding-inline);text-transform:uppercase}.bfc11368eadf3b39__separator{background-color:var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);grid-column:1/-1;height:var(--wpds-border-width-xs,1px);margin-block:var(--wpds-dimension-gap-xs,4px);margin-inline:var(--wp-ui-menu-group-head-padding-inline);@media (forced-colors:active){background-color:CanvasText}}._5c913bce0d8bb0d6__item{--wp-ui-menu-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-menu-item-padding-block:var(--wpds-dimension-padding-xs,4px);--_gcd-a-border-radius:var(--wpds-border-radius-sm,2px);align-items:start;border-radius:var(--wpds-border-radius-sm,2px);display:grid;gap:0;grid-column:1/-1;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];justify-content:stretch;min-height:var(--wp-ui-menu-item-height);min-width:0;padding-block:var(--wp-ui-menu-item-padding-block);scroll-margin:var(--wp-ui-menu-popup-padding);text-decoration:none;user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&[href]{cursor:pointer}@supports (grid-template-columns:subgrid){grid-template-columns:subgrid}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:var(--wpds-border-width-xs,1px) solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}._42313b48c5459be3__item-selection-indicator,._64924ecabf65a5d6__item-prefix,.af879698ede76757__item-content{grid-row:1}._42313b48c5459be3__item-selection-indicator{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:selection-start/selection-end;height:var(--_wp-ui-menu-item-label-line-height);justify-content:center;justify-self:center;pointer-events:none;width:var(--wp-ui-menu-selection-indicator-size);&[data-unchecked]{opacity:0}}._99c5bd141cbf516f__checkbox-selection-icon{translate:0 1px}._59aa9b3b3a651148__radio-selection-icon{fill:currentColor;height:var(--wpds-dimension-size-xs,20px);width:var(--wpds-dimension-size-xs,20px)}._64924ecabf65a5d6__item-prefix{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:prefix-start/prefix-end;justify-content:center;min-width:0}.a836378335a4cbf1__prefix-icon{align-self:flex-start;flex-shrink:0;margin-block-start:calc((var(--_wp-ui-menu-item-label-line-height) - var(--_wp-ui-menu-prefix-icon-size))/2)}.af879698ede76757__item-content{align-items:center;box-sizing:border-box;display:grid;grid-column:content-start/content-end;grid-template-columns:[label-start] minmax(0,1fr) [label-end suffix-start] auto [suffix-end shortcut-start] auto [shortcut-end trailing-start] auto [trailing-end];min-width:0;pointer-events:none}._943a932d9f81c78c__item-children{align-self:start;display:inline-flex;flex-direction:column;gap:2px;grid-column:label-start/label-end;min-width:0}._5ed41da4abcf8958__item-label{--_gcd-heading-color:currentColor;--_gcd-p-line-height:var(--_wp-ui-menu-item-label-line-height);color:inherit;line-height:var(--_wp-ui-menu-item-label-line-height);min-width:0;overflow-wrap:anywhere}.fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:var(--wpds-color-foreground-content-neutral-weak,#707070);color:var(--wpds-color-foreground-content-neutral-weak,#707070);overflow-wrap:anywhere;padding-block-end:var(--wpds-dimension-padding-xs,4px)}._091406749ed93e6e__item-suffix{align-items:center;display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:suffix-start/suffix-end}._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin-inline-start:var(--wpds-dimension-gap-md,12px)}._23630f40071a29ff__item-shortcut{grid-column:shortcut-start/shortcut-end}._06be17a91bf434a0__item-trailing{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:trailing-start/trailing-end;margin-inline-start:var(--wpds-dimension-gap-md,12px)}._943a932d9f81c78c__item-children+:is(._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut,._06be17a91bf434a0__item-trailing){margin-inline-start:var(--wpds-dimension-gap-xl,24px)}._23630f40071a29ff__item-shortcut+._06be17a91bf434a0__item-trailing{margin-inline-start:var(--wpds-dimension-gap-xs,4px)}.b78aec79bf93eba0__submenu-chevron{margin-inline-end:calc(var(--wpds-dimension-gap-sm, 8px)*-1)}.b78aec79bf93eba0__submenu-chevron:dir(rtl){transform:rotate(180deg)}._60da3b6f9718cf76__external-link-indicator{display:inline-block;font-weight:var(--wpds-typography-font-weight-default,400);line-height:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px);text-decoration:none}._60da3b6f9718cf76__external-link-indicator:after{content:"\\2197"}._60da3b6f9718cf76__external-link-indicator:dir(rtl):after{content:"\\2196"}._5c913bce0d8bb0d6__item[aria-disabled=true] ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[aria-disabled=true] ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[aria-disabled=true] ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[aria-disabled=true] ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[aria-disabled=true] ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[aria-disabled=true] .fa88c9f1a96a4c5a__item-description,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) .fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:currentColor;color:inherit}}}'); 18779 } 18780 var style_default18 = { "positioner": "d61e2d85c0ee0699__positioner", "popup": "_34e81249f419a5a5__popup", "item-selection-indicator": "_42313b48c5459be3__item-selection-indicator", "is-root": "_087a537b24fee6a1__is-root _380b81b8f79fb10f__dropdown-motion", "is-submenu": "_6d3b567f6289bdc2__is-submenu _7f344b94e270e039__dropdown-motion--fade-only", "list": "_33f07ab17005471d__list", "group": "f11085533c0056b0__group", "radio-group": "e05914e1005d7c2e__radio-group", "item": "_5c913bce0d8bb0d6__item", "item-prefix": "_64924ecabf65a5d6__item-prefix", "group-label": "_4a0fd085d76fd23c__group-label", "separator": "bfc11368eadf3b39__separator", "item-content": "af879698ede76757__item-content", "checkbox-selection-icon": "_99c5bd141cbf516f__checkbox-selection-icon", "radio-selection-icon": "_59aa9b3b3a651148__radio-selection-icon", "prefix-icon": "a836378335a4cbf1__prefix-icon", "item-children": "_943a932d9f81c78c__item-children", "item-label": "_5ed41da4abcf8958__item-label", "item-description": "fa88c9f1a96a4c5a__item-description", "item-suffix": "_091406749ed93e6e__item-suffix", "item-shortcut": "_23630f40071a29ff__item-shortcut", "item-trailing": "_06be17a91bf434a0__item-trailing", "submenu-chevron": "b78aec79bf93eba0__submenu-chevron", "external-link-indicator": "_60da3b6f9718cf76__external-link-indicator" }; 18781 var radioCheck = /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_primitives36.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_primitives36.Circle, { cx: 12, cy: 12, r: 3 }) }); 18782 var RadioItem = (0, import_element39.forwardRef)( 18783 function MenuRadioItem3({ 18784 children, 18785 className, 18786 prefix, 18787 shortcut, 18788 suffix, 18789 "aria-describedby": ariaDescribedBy, 18790 "aria-keyshortcuts": ariaKeyShortcuts, 18791 "aria-label": ariaLabel, 18792 "aria-labelledby": ariaLabelledBy, 18793 ...props 18794 }, ref) { 18795 const { 18796 contentChildren, 18797 contentContextValue, 18798 itemAriaProps, 18799 shortcutDescriptionId 18800 } = useItemContent(children, { 18801 "aria-describedby": ariaDescribedBy, 18802 "aria-keyshortcuts": ariaKeyShortcuts, 18803 "aria-label": ariaLabel, 18804 "aria-labelledby": ariaLabelledBy, 18805 shortcut 18806 }); 18807 return /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)( 18808 index_parts_exports.RadioItem, 18809 { 18810 ref, 18811 ...itemAriaProps, 18812 className: clsx_default( 18813 resets_default7["box-sizing"], 18814 style_default18.item, 18815 className 18816 ), 18817 ...props, 18818 children: [ 18819 /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( 18820 index_parts_exports.RadioItemIndicator, 18821 { 18822 keepMounted: true, 18823 className: style_default18["item-selection-indicator"], 18824 children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( 18825 Icon, 18826 { 18827 icon: radioCheck, 18828 className: style_default18["radio-selection-icon"], 18829 "aria-hidden": "true" 18830 } 18831 ) 18832 } 18833 ), 18834 /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(MenuItemContentContext.Provider, { value: contentContextValue, children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)( 18835 ItemContent, 18836 { 18837 prefix, 18838 shortcut, 18839 shortcutDescriptionId, 18840 suffix, 18841 children: contentChildren 18842 } 18843 ) }) 18844 ] 18845 } 18846 ); 18847 } 18848 ); 18849 18850 // packages/ui/build-module/menu/use-iframe-dismissal-bridge.mjs 18851 var import_element40 = __toESM(require_element(), 1); 18852 function getIframeDocument(iframe) { 18853 try { 18854 return iframe.contentDocument; 18855 } catch { 18856 return null; 18857 } 18858 } 18859 function forEachIframe(node, callback) { 18860 if (node.nodeType !== Node.ELEMENT_NODE) { 18861 return; 18862 } 18863 const element = node; 18864 if (element.tagName === "IFRAME") { 18865 callback(element); 18866 } 18867 element.querySelectorAll("iframe").forEach(callback); 18868 } 18869 function isInsideCurrentMenu(event, trigger) { 18870 const target = event.target; 18871 const targetElement = target?.nodeType === Node.ELEMENT_NODE ? target : target?.parentElement; 18872 const popupId = trigger.getAttribute("aria-controls"); 18873 if (!targetElement || !popupId) { 18874 return false; 18875 } 18876 const popup = targetElement.ownerDocument.getElementById(popupId); 18877 if (!popup) { 18878 return false; 18879 } 18880 const rootOwnerId = popup.getAttribute("data-rootownerid"); 18881 if (!rootOwnerId) { 18882 return popup.contains(targetElement); 18883 } 18884 return targetElement.closest("[data-rootownerid]")?.getAttribute("data-rootownerid") === rootOwnerId; 18885 } 18886 function useCloseOnIframePointerDown({ 18887 enabled, 18888 onPointerDown, 18889 ownerDocument: ownerDocument2 18890 }) { 18891 (0, import_element40.useEffect)(() => { 18892 if (!enabled || !ownerDocument2) { 18893 return; 18894 } 18895 const observeDocument = (document2, listenForPointerDown) => { 18896 if (listenForPointerDown) { 18897 document2.addEventListener("pointerdown", onPointerDown, true); 18898 } 18899 const iframeCleanups = /* @__PURE__ */ new Map(); 18900 const addIframe = (iframe) => { 18901 if (iframeCleanups.has(iframe)) { 18902 return; 18903 } 18904 let iframeDocument = null; 18905 let iframeDocumentCleanup; 18906 const updateIframeDocument = () => { 18907 const nextIframeDocument = getIframeDocument(iframe); 18908 if (nextIframeDocument === iframeDocument) { 18909 return; 18910 } 18911 iframeDocumentCleanup?.(); 18912 iframeDocument = nextIframeDocument; 18913 iframeDocumentCleanup = iframeDocument ? observeDocument(iframeDocument, true) : void 0; 18914 }; 18915 iframe.addEventListener("load", updateIframeDocument); 18916 updateIframeDocument(); 18917 iframeCleanups.set(iframe, () => { 18918 iframe.removeEventListener("load", updateIframeDocument); 18919 iframeDocumentCleanup?.(); 18920 }); 18921 }; 18922 const removeIframe = (iframe) => { 18923 iframeCleanups.get(iframe)?.(); 18924 iframeCleanups.delete(iframe); 18925 }; 18926 document2.querySelectorAll("iframe").forEach(addIframe); 18927 const MutationObserverConstructor = document2.defaultView?.MutationObserver; 18928 const observer = MutationObserverConstructor ? new MutationObserverConstructor((records) => { 18929 records.forEach((record) => { 18930 record.removedNodes.forEach( 18931 (node) => forEachIframe(node, removeIframe) 18932 ); 18933 record.addedNodes.forEach( 18934 (node) => forEachIframe(node, addIframe) 18935 ); 18936 }); 18937 }) : null; 18938 observer?.observe(document2.documentElement, { 18939 childList: true, 18940 subtree: true 18941 }); 18942 return () => { 18943 observer?.disconnect(); 18944 iframeCleanups.forEach((cleanup) => cleanup()); 18945 if (listenForPointerDown) { 18946 document2.removeEventListener( 18947 "pointerdown", 18948 onPointerDown, 18949 true 18950 ); 18951 } 18952 }; 18953 }; 18954 return observeDocument(ownerDocument2, false); 18955 }, [enabled, onPointerDown, ownerDocument2]); 18956 } 18957 function useIframeDismissalBridge({ 18958 actionsRef, 18959 defaultOpen, 18960 disabled: disabled2, 18961 modal, 18962 onOpenChange, 18963 open: openProp 18964 }) { 18965 const fallbackActionsRef = (0, import_element40.useRef)(null); 18966 const resolvedActionsRef = actionsRef ?? fallbackActionsRef; 18967 const [uncontrolledOpen, setUncontrolledOpen] = (0, import_element40.useState)( 18968 defaultOpen ?? false 18969 ); 18970 const [trigger, setTrigger] = (0, import_element40.useState)(null); 18971 const open = openProp ?? uncontrolledOpen; 18972 const handleIframePointerDown = (0, import_element40.useCallback)( 18973 (event) => { 18974 if (trigger && !isInsideCurrentMenu(event, trigger)) { 18975 resolvedActionsRef.current?.close(); 18976 } 18977 }, 18978 [resolvedActionsRef, trigger] 18979 ); 18980 useCloseOnIframePointerDown({ 18981 enabled: open && modal === false && !disabled2 && trigger !== null, 18982 onPointerDown: handleIframePointerDown, 18983 ownerDocument: trigger?.ownerDocument ?? null 18984 }); 18985 const handleOpenChange = (nextOpen, eventDetails) => { 18986 onOpenChange(nextOpen, eventDetails); 18987 if (eventDetails.isCanceled) { 18988 return; 18989 } 18990 setUncontrolledOpen(nextOpen); 18991 setTrigger(nextOpen ? eventDetails.trigger ?? null : null); 18992 }; 18993 return { 18994 actionsRef: resolvedActionsRef, 18995 onOpenChange: handleOpenChange 18996 }; 18997 } 18998 18999 // packages/ui/build-module/menu/root.mjs 19000 var import_jsx_runtime89 = __toESM(require_jsx_runtime(), 1); 19001 function Root2(props) { 19002 const { onOpenChange } = props; 19003 const handleOpenChange = (nextOpen, eventDetails) => { 19004 const trigger = eventDetails.trigger; 19005 const TriggerElement = trigger?.ownerDocument.defaultView?.HTMLElement; 19006 const EventTargetElement = trigger?.ownerDocument.defaultView?.Element; 19007 const activeElementBeforeOpenChange = trigger?.ownerDocument.activeElement; 19008 const eventTarget = eventDetails.event.target; 19009 const menuElement = EventTargetElement && eventTarget instanceof EventTargetElement ? eventTarget.closest('[role="menu"]') : null; 19010 onOpenChange?.(nextOpen, eventDetails); 19011 if (!nextOpen && eventDetails.reason === "item-press" && !eventDetails.isCanceled && TriggerElement && trigger instanceof TriggerElement && menuElement?.contains(activeElementBeforeOpenChange ?? null) && trigger.ownerDocument.activeElement === activeElementBeforeOpenChange) { 19012 trigger.focus(); 19013 } 19014 }; 19015 const iframeDismissalProps = useIframeDismissalBridge({ 19016 actionsRef: props.actionsRef, 19017 defaultOpen: props.defaultOpen, 19018 disabled: props.disabled, 19019 modal: props.modal, 19020 onOpenChange: handleOpenChange, 19021 open: props.open 19022 }); 19023 return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(DirectionProvider3, { children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(MenuContext.Provider, { value: { isSubmenu: false }, children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(index_parts_exports.Root, { ...props, ...iframeDismissalProps }) }) }); 19024 } 19025 19026 // packages/ui/build-module/menu/separator.mjs 19027 var import_element41 = __toESM(require_element(), 1); 19028 var import_jsx_runtime90 = __toESM(require_jsx_runtime(), 1); 19029 var STYLE_HASH_ATTRIBUTE20 = "data-wp-hash"; 19030 function getRuntime20() { 19031 const globalScope = globalThis; 19032 if (globalScope.__wpStyleRuntime) { 19033 return globalScope.__wpStyleRuntime; 19034 } 19035 globalScope.__wpStyleRuntime = { 19036 documents: /* @__PURE__ */ new Map(), 19037 styles: /* @__PURE__ */ new Map(), 19038 injectedStyles: /* @__PURE__ */ new WeakMap() 19039 }; 19040 if (typeof document !== "undefined") { 19041 registerDocument20(document); 19042 } 19043 return globalScope.__wpStyleRuntime; 19044 } 19045 function documentContainsStyleHash20(targetDocument, hash) { 19046 if (!targetDocument.head) { 19047 return false; 19048 } 19049 for (const style of targetDocument.head.querySelectorAll( 19050 `style[$STYLE_HASH_ATTRIBUTE20}]` 19051 )) { 19052 if (style.getAttribute(STYLE_HASH_ATTRIBUTE20) === hash) { 19053 return true; 19054 } 19055 } 19056 return false; 19057 } 19058 function injectStyle20(targetDocument, hash, css) { 19059 if (!targetDocument.head) { 19060 return; 19061 } 19062 const runtime = getRuntime20(); 19063 let injectedStyles = runtime.injectedStyles.get(targetDocument); 19064 if (!injectedStyles) { 19065 injectedStyles = /* @__PURE__ */ new Set(); 19066 runtime.injectedStyles.set(targetDocument, injectedStyles); 19067 } 19068 if (injectedStyles.has(hash)) { 19069 return; 19070 } 19071 if (documentContainsStyleHash20(targetDocument, hash)) { 19072 injectedStyles.add(hash); 19073 return; 19074 } 19075 const style = targetDocument.createElement("style"); 19076 style.setAttribute(STYLE_HASH_ATTRIBUTE20, hash); 19077 style.appendChild(targetDocument.createTextNode(css)); 19078 targetDocument.head.appendChild(style); 19079 injectedStyles.add(hash); 19080 } 19081 function registerDocument20(targetDocument) { 19082 const runtime = getRuntime20(); 19083 runtime.documents.set( 19084 targetDocument, 19085 (runtime.documents.get(targetDocument) ?? 0) + 1 19086 ); 19087 for (const [hash, css] of runtime.styles) { 19088 injectStyle20(targetDocument, hash, css); 19089 } 19090 return () => { 19091 const count = runtime.documents.get(targetDocument); 19092 if (count === void 0) { 19093 return; 19094 } 19095 if (count <= 1) { 19096 runtime.documents.delete(targetDocument); 19097 return; 19098 } 19099 runtime.documents.set(targetDocument, count - 1); 19100 }; 19101 } 19102 function registerStyle20(hash, css) { 19103 const runtime = getRuntime20(); 19104 runtime.styles.set(hash, css); 19105 for (const targetDocument of runtime.documents.keys()) { 19106 injectStyle20(targetDocument, hash, css); 19107 } 19108 } 19109 if (typeof process === "undefined" || true) { 19110 registerStyle20("dce31c541c", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion,._7f344b94e270e039__dropdown-motion--fade-only{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}}._380b81b8f79fb10f__dropdown-motion{transform:translate(0);&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=inline-start][data-ending-style],&[data-side=inline-start][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=inline-end][data-ending-style],&[data-side=inline-end][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-start][data-ending-style],&:dir(rtl)[data-side=inline-start][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-end][data-ending-style],&:dir(rtl)[data-side=inline-end][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.d61e2d85c0ee0699__positioner{z-index:var(--wp-ui-menu-z-index,initial)}._34e81249f419a5a5__popup{--wp-ui-menu-popup-padding:var(--wpds-dimension-padding-xs,4px);--wp-ui-menu-min-width:160px;--wp-ui-menu-max-width:var(--wpds-dimension-surface-width-md,400px);--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-group-head-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-selection-indicator-track-size:0px;--wp-ui-menu-selection-indicator-size:var(--wpds-dimension-size-sm,24px);--wp-ui-menu-selection-indicator-gap:0px;--_wp-ui-menu-elevation-md:0px 2px 3px 0px #0000000d,0px 4px 5px 0px #0000000a,0px 12px 12px 0px #00000008,0px 16px 16px 0px #00000005;background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-menu-elevation-md);max-height:min(var(--available-height),480px,60dvh);max-width:min(var(--available-width),var(--wp-ui-menu-max-width));min-width:min(var(--available-width),var(--wp-ui-menu-min-width));outline:none;overflow-block:auto;overscroll-behavior:none;padding:var(--wp-ui-menu-popup-padding);scroll-padding:var(--wp-ui-menu-popup-padding);&:has(._42313b48c5459be3__item-selection-indicator){--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-menu-selection-indicator-track-size:var(--wpds-dimension-size-2xs,16px);--wp-ui-menu-selection-indicator-gap:var(--wpds-dimension-gap-sm,8px)}}._33f07ab17005471d__list{--_wp-ui-menu-item-label-line-height:var(--wpds-typography-line-height-sm,20px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--_wp-ui-menu-item-label-line-height)}._33f07ab17005471d__list,.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{--wp-ui-menu-group-prefix-gap:0px;display:grid;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];min-width:0}.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{grid-column:1/-1}._33f07ab17005471d__list:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.e05914e1005d7c2e__radio-group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.f11085533c0056b0__group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix){--wp-ui-menu-group-prefix-gap:var(--wpds-dimension-gap-xs,4px)}._4a0fd085d76fd23c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);grid-column:1/-1;line-height:var(--wpds-typography-line-height-xs,16px);min-height:var(--wpds-dimension-size-md,32px);padding-block:var(--wpds-dimension-padding-xs,4px);padding-inline:var(--wp-ui-menu-group-head-padding-inline);text-transform:uppercase}.bfc11368eadf3b39__separator{background-color:var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);grid-column:1/-1;height:var(--wpds-border-width-xs,1px);margin-block:var(--wpds-dimension-gap-xs,4px);margin-inline:var(--wp-ui-menu-group-head-padding-inline);@media (forced-colors:active){background-color:CanvasText}}._5c913bce0d8bb0d6__item{--wp-ui-menu-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-menu-item-padding-block:var(--wpds-dimension-padding-xs,4px);--_gcd-a-border-radius:var(--wpds-border-radius-sm,2px);align-items:start;border-radius:var(--wpds-border-radius-sm,2px);display:grid;gap:0;grid-column:1/-1;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];justify-content:stretch;min-height:var(--wp-ui-menu-item-height);min-width:0;padding-block:var(--wp-ui-menu-item-padding-block);scroll-margin:var(--wp-ui-menu-popup-padding);text-decoration:none;user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&[href]{cursor:pointer}@supports (grid-template-columns:subgrid){grid-template-columns:subgrid}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:var(--wpds-border-width-xs,1px) solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}._42313b48c5459be3__item-selection-indicator,._64924ecabf65a5d6__item-prefix,.af879698ede76757__item-content{grid-row:1}._42313b48c5459be3__item-selection-indicator{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:selection-start/selection-end;height:var(--_wp-ui-menu-item-label-line-height);justify-content:center;justify-self:center;pointer-events:none;width:var(--wp-ui-menu-selection-indicator-size);&[data-unchecked]{opacity:0}}._99c5bd141cbf516f__checkbox-selection-icon{translate:0 1px}._59aa9b3b3a651148__radio-selection-icon{fill:currentColor;height:var(--wpds-dimension-size-xs,20px);width:var(--wpds-dimension-size-xs,20px)}._64924ecabf65a5d6__item-prefix{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:prefix-start/prefix-end;justify-content:center;min-width:0}.a836378335a4cbf1__prefix-icon{align-self:flex-start;flex-shrink:0;margin-block-start:calc((var(--_wp-ui-menu-item-label-line-height) - var(--_wp-ui-menu-prefix-icon-size))/2)}.af879698ede76757__item-content{align-items:center;box-sizing:border-box;display:grid;grid-column:content-start/content-end;grid-template-columns:[label-start] minmax(0,1fr) [label-end suffix-start] auto [suffix-end shortcut-start] auto [shortcut-end trailing-start] auto [trailing-end];min-width:0;pointer-events:none}._943a932d9f81c78c__item-children{align-self:start;display:inline-flex;flex-direction:column;gap:2px;grid-column:label-start/label-end;min-width:0}._5ed41da4abcf8958__item-label{--_gcd-heading-color:currentColor;--_gcd-p-line-height:var(--_wp-ui-menu-item-label-line-height);color:inherit;line-height:var(--_wp-ui-menu-item-label-line-height);min-width:0;overflow-wrap:anywhere}.fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:var(--wpds-color-foreground-content-neutral-weak,#707070);color:var(--wpds-color-foreground-content-neutral-weak,#707070);overflow-wrap:anywhere;padding-block-end:var(--wpds-dimension-padding-xs,4px)}._091406749ed93e6e__item-suffix{align-items:center;display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:suffix-start/suffix-end}._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin-inline-start:var(--wpds-dimension-gap-md,12px)}._23630f40071a29ff__item-shortcut{grid-column:shortcut-start/shortcut-end}._06be17a91bf434a0__item-trailing{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:trailing-start/trailing-end;margin-inline-start:var(--wpds-dimension-gap-md,12px)}._943a932d9f81c78c__item-children+:is(._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut,._06be17a91bf434a0__item-trailing){margin-inline-start:var(--wpds-dimension-gap-xl,24px)}._23630f40071a29ff__item-shortcut+._06be17a91bf434a0__item-trailing{margin-inline-start:var(--wpds-dimension-gap-xs,4px)}.b78aec79bf93eba0__submenu-chevron{margin-inline-end:calc(var(--wpds-dimension-gap-sm, 8px)*-1)}.b78aec79bf93eba0__submenu-chevron:dir(rtl){transform:rotate(180deg)}._60da3b6f9718cf76__external-link-indicator{display:inline-block;font-weight:var(--wpds-typography-font-weight-default,400);line-height:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px);text-decoration:none}._60da3b6f9718cf76__external-link-indicator:after{content:"\\2197"}._60da3b6f9718cf76__external-link-indicator:dir(rtl):after{content:"\\2196"}._5c913bce0d8bb0d6__item[aria-disabled=true] ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[aria-disabled=true] ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[aria-disabled=true] ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[aria-disabled=true] ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[aria-disabled=true] ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[aria-disabled=true] .fa88c9f1a96a4c5a__item-description,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) .fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:currentColor;color:inherit}}}'); 19111 } 19112 var style_default19 = { "positioner": "d61e2d85c0ee0699__positioner", "popup": "_34e81249f419a5a5__popup", "item-selection-indicator": "_42313b48c5459be3__item-selection-indicator", "is-root": "_087a537b24fee6a1__is-root _380b81b8f79fb10f__dropdown-motion", "is-submenu": "_6d3b567f6289bdc2__is-submenu _7f344b94e270e039__dropdown-motion--fade-only", "list": "_33f07ab17005471d__list", "group": "f11085533c0056b0__group", "radio-group": "e05914e1005d7c2e__radio-group", "item": "_5c913bce0d8bb0d6__item", "item-prefix": "_64924ecabf65a5d6__item-prefix", "group-label": "_4a0fd085d76fd23c__group-label", "separator": "bfc11368eadf3b39__separator", "item-content": "af879698ede76757__item-content", "checkbox-selection-icon": "_99c5bd141cbf516f__checkbox-selection-icon", "radio-selection-icon": "_59aa9b3b3a651148__radio-selection-icon", "prefix-icon": "a836378335a4cbf1__prefix-icon", "item-children": "_943a932d9f81c78c__item-children", "item-label": "_5ed41da4abcf8958__item-label", "item-description": "fa88c9f1a96a4c5a__item-description", "item-suffix": "_091406749ed93e6e__item-suffix", "item-shortcut": "_23630f40071a29ff__item-shortcut", "item-trailing": "_06be17a91bf434a0__item-trailing", "submenu-chevron": "b78aec79bf93eba0__submenu-chevron", "external-link-indicator": "_60da3b6f9718cf76__external-link-indicator" }; 19113 var Separator2 = (0, import_element41.forwardRef)( 19114 function MenuSeparator({ className, ...props }, ref) { 19115 return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)( 19116 index_parts_exports.Separator, 19117 { 19118 ref, 19119 className: clsx_default(style_default19.separator, className), 19120 ...props 19121 } 19122 ); 19123 } 19124 ); 19125 19126 // packages/ui/build-module/menu/submenu-root.mjs 19127 var import_jsx_runtime91 = __toESM(require_jsx_runtime(), 1); 19128 function SubmenuRoot(props) { 19129 return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(MenuContext.Provider, { value: { isSubmenu: true }, children: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(index_parts_exports.SubmenuRoot, { ...props }) }); 19130 } 19131 19132 // packages/ui/build-module/menu/submenu-trigger.mjs 19133 var import_element42 = __toESM(require_element(), 1); 19134 var import_jsx_runtime92 = __toESM(require_jsx_runtime(), 1); 19135 var STYLE_HASH_ATTRIBUTE21 = "data-wp-hash"; 19136 function getRuntime21() { 19137 const globalScope = globalThis; 19138 if (globalScope.__wpStyleRuntime) { 19139 return globalScope.__wpStyleRuntime; 19140 } 19141 globalScope.__wpStyleRuntime = { 19142 documents: /* @__PURE__ */ new Map(), 19143 styles: /* @__PURE__ */ new Map(), 19144 injectedStyles: /* @__PURE__ */ new WeakMap() 19145 }; 19146 if (typeof document !== "undefined") { 19147 registerDocument21(document); 19148 } 19149 return globalScope.__wpStyleRuntime; 19150 } 19151 function documentContainsStyleHash21(targetDocument, hash) { 19152 if (!targetDocument.head) { 19153 return false; 19154 } 19155 for (const style of targetDocument.head.querySelectorAll( 19156 `style[$STYLE_HASH_ATTRIBUTE21}]` 19157 )) { 19158 if (style.getAttribute(STYLE_HASH_ATTRIBUTE21) === hash) { 19159 return true; 19160 } 19161 } 19162 return false; 19163 } 19164 function injectStyle21(targetDocument, hash, css) { 19165 if (!targetDocument.head) { 19166 return; 19167 } 19168 const runtime = getRuntime21(); 19169 let injectedStyles = runtime.injectedStyles.get(targetDocument); 19170 if (!injectedStyles) { 19171 injectedStyles = /* @__PURE__ */ new Set(); 19172 runtime.injectedStyles.set(targetDocument, injectedStyles); 19173 } 19174 if (injectedStyles.has(hash)) { 19175 return; 19176 } 19177 if (documentContainsStyleHash21(targetDocument, hash)) { 19178 injectedStyles.add(hash); 19179 return; 19180 } 19181 const style = targetDocument.createElement("style"); 19182 style.setAttribute(STYLE_HASH_ATTRIBUTE21, hash); 19183 style.appendChild(targetDocument.createTextNode(css)); 19184 targetDocument.head.appendChild(style); 19185 injectedStyles.add(hash); 19186 } 19187 function registerDocument21(targetDocument) { 19188 const runtime = getRuntime21(); 19189 runtime.documents.set( 19190 targetDocument, 19191 (runtime.documents.get(targetDocument) ?? 0) + 1 19192 ); 19193 for (const [hash, css] of runtime.styles) { 19194 injectStyle21(targetDocument, hash, css); 19195 } 19196 return () => { 19197 const count = runtime.documents.get(targetDocument); 19198 if (count === void 0) { 19199 return; 19200 } 19201 if (count <= 1) { 19202 runtime.documents.delete(targetDocument); 19203 return; 19204 } 19205 runtime.documents.set(targetDocument, count - 1); 19206 }; 19207 } 19208 function registerStyle21(hash, css) { 19209 const runtime = getRuntime21(); 19210 runtime.styles.set(hash, css); 19211 for (const targetDocument of runtime.documents.keys()) { 19212 injectStyle21(targetDocument, hash, css); 19213 } 19214 } 19215 if (typeof process === "undefined" || true) { 19216 registerStyle21("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); 19217 } 19218 var resets_default8 = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; 19219 if (typeof process === "undefined" || true) { 19220 registerStyle21("dce31c541c", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._380b81b8f79fb10f__dropdown-motion,._7f344b94e270e039__dropdown-motion--fade-only{--wp-ui-dropdown-slide-distance:4px;--wp-ui-dropdown-slide-duration:var(--wpds-motion-duration-md,200ms);--wp-ui-dropdown-slide-easing:var(--wpds-motion-easing-expressive,cubic-bezier(0.25,0,0,1));--wp-ui-dropdown-fade-duration:var(--wpds-motion-duration-sm,100ms);--wp-ui-dropdown-fade-easing:linear;@media not (prefers-reduced-motion){transition-duration:var(--wp-ui-dropdown-slide-duration),var(--wp-ui-dropdown-fade-duration);transition-property:transform,opacity;transition-timing-function:var(--wp-ui-dropdown-slide-easing),var(--wp-ui-dropdown-fade-easing);will-change:transform,opacity}opacity:1;&[data-instant]{transition:none}&[data-ending-style],&[data-starting-style]{opacity:0}}._380b81b8f79fb10f__dropdown-motion{transform:translate(0);&[data-side=bottom][data-ending-style],&[data-side=bottom][data-starting-style]{transform:translateY(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=top][data-ending-style],&[data-side=top][data-starting-style]{transform:translateY(var(--wp-ui-dropdown-slide-distance))}&[data-side=left][data-ending-style],&[data-side=left][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=right][data-ending-style],&[data-side=right][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&[data-side=inline-start][data-ending-style],&[data-side=inline-start][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}&[data-side=inline-end][data-ending-style],&[data-side=inline-end][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-start][data-ending-style],&:dir(rtl)[data-side=inline-start][data-starting-style]{transform:translateX(calc(var(--wp-ui-dropdown-slide-distance)*-1))}&:dir(rtl)[data-side=inline-end][data-ending-style],&:dir(rtl)[data-side=inline-end][data-starting-style]{transform:translateX(var(--wp-ui-dropdown-slide-distance))}}}}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.d61e2d85c0ee0699__positioner{z-index:var(--wp-ui-menu-z-index,initial)}._34e81249f419a5a5__popup{--wp-ui-menu-popup-padding:var(--wpds-dimension-padding-xs,4px);--wp-ui-menu-min-width:160px;--wp-ui-menu-max-width:var(--wpds-dimension-surface-width-md,400px);--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-group-head-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-menu-selection-indicator-track-size:0px;--wp-ui-menu-selection-indicator-size:var(--wpds-dimension-size-sm,24px);--wp-ui-menu-selection-indicator-gap:0px;--_wp-ui-menu-elevation-md:0px 2px 3px 0px #0000000d,0px 4px 5px 0px #0000000a,0px 12px 12px 0px #00000008,0px 16px 16px 0px #00000005;background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border:var(--wpds-border-width-xs,1px) solid var(--wpds-color-stroke-surface-neutral,#dbdbdb);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-menu-elevation-md);max-height:min(var(--available-height),480px,60dvh);max-width:min(var(--available-width),var(--wp-ui-menu-max-width));min-width:min(var(--available-width),var(--wp-ui-menu-min-width));outline:none;overflow-block:auto;overscroll-behavior:none;padding:var(--wp-ui-menu-popup-padding);scroll-padding:var(--wp-ui-menu-popup-padding);&:has(._42313b48c5459be3__item-selection-indicator){--wp-ui-menu-item-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-menu-selection-indicator-track-size:var(--wpds-dimension-size-2xs,16px);--wp-ui-menu-selection-indicator-gap:var(--wpds-dimension-gap-sm,8px)}}._33f07ab17005471d__list{--_wp-ui-menu-item-label-line-height:var(--wpds-typography-line-height-sm,20px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);line-height:var(--_wp-ui-menu-item-label-line-height)}._33f07ab17005471d__list,.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{--wp-ui-menu-group-prefix-gap:0px;display:grid;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];min-width:0}.e05914e1005d7c2e__radio-group,.f11085533c0056b0__group{grid-column:1/-1}._33f07ab17005471d__list:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.e05914e1005d7c2e__radio-group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix),.f11085533c0056b0__group:has(>._5c913bce0d8bb0d6__item>._64924ecabf65a5d6__item-prefix){--wp-ui-menu-group-prefix-gap:var(--wpds-dimension-gap-xs,4px)}._4a0fd085d76fd23c__group-label{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);grid-column:1/-1;line-height:var(--wpds-typography-line-height-xs,16px);min-height:var(--wpds-dimension-size-md,32px);padding-block:var(--wpds-dimension-padding-xs,4px);padding-inline:var(--wp-ui-menu-group-head-padding-inline);text-transform:uppercase}.bfc11368eadf3b39__separator{background-color:var(--wpds-color-stroke-surface-neutral-weak,#f0f0f0);grid-column:1/-1;height:var(--wpds-border-width-xs,1px);margin-block:var(--wpds-dimension-gap-xs,4px);margin-inline:var(--wp-ui-menu-group-head-padding-inline);@media (forced-colors:active){background-color:CanvasText}}._5c913bce0d8bb0d6__item{--wp-ui-menu-item-height:var(--wpds-dimension-size-md,32px);--wp-ui-menu-item-padding-block:var(--wpds-dimension-padding-xs,4px);--_gcd-a-border-radius:var(--wpds-border-radius-sm,2px);align-items:start;border-radius:var(--wpds-border-radius-sm,2px);display:grid;gap:0;grid-column:1/-1;grid-template-columns:[item-padding-start] var(--wp-ui-menu-item-padding-inline) [selection-start] var(--wp-ui-menu-selection-indicator-track-size) [selection-end] var(--wp-ui-menu-selection-indicator-gap) [prefix-start] max-content [prefix-end] var(--wp-ui-menu-group-prefix-gap) [content-start] minmax(0,1fr) [content-end] var(--wp-ui-menu-item-padding-inline) [item-padding-end];justify-content:stretch;min-height:var(--wp-ui-menu-item-height);min-width:0;padding-block:var(--wp-ui-menu-item-padding-block);scroll-margin:var(--wp-ui-menu-popup-padding);text-decoration:none;user-select:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}&[href]{cursor:pointer}@supports (grid-template-columns:subgrid){grid-template-columns:subgrid}&[data-highlighted]:not([aria-disabled=true]){background-color:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);outline:none;@media (forced-colors:active){outline:var(--wpds-border-width-xs,1px) solid Highlight}}&[aria-disabled=true]{background-color:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}}}._42313b48c5459be3__item-selection-indicator,._64924ecabf65a5d6__item-prefix,.af879698ede76757__item-content{grid-row:1}._42313b48c5459be3__item-selection-indicator{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:selection-start/selection-end;height:var(--_wp-ui-menu-item-label-line-height);justify-content:center;justify-self:center;pointer-events:none;width:var(--wp-ui-menu-selection-indicator-size);&[data-unchecked]{opacity:0}}._99c5bd141cbf516f__checkbox-selection-icon{translate:0 1px}._59aa9b3b3a651148__radio-selection-icon{fill:currentColor;height:var(--wpds-dimension-size-xs,20px);width:var(--wpds-dimension-size-xs,20px)}._64924ecabf65a5d6__item-prefix{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:prefix-start/prefix-end;justify-content:center;min-width:0}.a836378335a4cbf1__prefix-icon{align-self:flex-start;flex-shrink:0;margin-block-start:calc((var(--_wp-ui-menu-item-label-line-height) - var(--_wp-ui-menu-prefix-icon-size))/2)}.af879698ede76757__item-content{align-items:center;box-sizing:border-box;display:grid;grid-column:content-start/content-end;grid-template-columns:[label-start] minmax(0,1fr) [label-end suffix-start] auto [suffix-end shortcut-start] auto [shortcut-end trailing-start] auto [trailing-end];min-width:0;pointer-events:none}._943a932d9f81c78c__item-children{align-self:start;display:inline-flex;flex-direction:column;gap:2px;grid-column:label-start/label-end;min-width:0}._5ed41da4abcf8958__item-label{--_gcd-heading-color:currentColor;--_gcd-p-line-height:var(--_wp-ui-menu-item-label-line-height);color:inherit;line-height:var(--_wp-ui-menu-item-label-line-height);min-width:0;overflow-wrap:anywhere}.fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:var(--wpds-color-foreground-content-neutral-weak,#707070);color:var(--wpds-color-foreground-content-neutral-weak,#707070);overflow-wrap:anywhere;padding-block-end:var(--wpds-dimension-padding-xs,4px)}._091406749ed93e6e__item-suffix{align-items:center;display:flex;gap:var(--wpds-dimension-gap-xs,4px);grid-column:suffix-start/suffix-end}._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut{color:var(--wpds-color-foreground-content-neutral-weak,#707070);margin-inline-start:var(--wpds-dimension-gap-md,12px)}._23630f40071a29ff__item-shortcut{grid-column:shortcut-start/shortcut-end}._06be17a91bf434a0__item-trailing{align-items:center;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;grid-column:trailing-start/trailing-end;margin-inline-start:var(--wpds-dimension-gap-md,12px)}._943a932d9f81c78c__item-children+:is(._091406749ed93e6e__item-suffix,._23630f40071a29ff__item-shortcut,._06be17a91bf434a0__item-trailing){margin-inline-start:var(--wpds-dimension-gap-xl,24px)}._23630f40071a29ff__item-shortcut+._06be17a91bf434a0__item-trailing{margin-inline-start:var(--wpds-dimension-gap-xs,4px)}.b78aec79bf93eba0__submenu-chevron{margin-inline-end:calc(var(--wpds-dimension-gap-sm, 8px)*-1)}.b78aec79bf93eba0__submenu-chevron:dir(rtl){transform:rotate(180deg)}._60da3b6f9718cf76__external-link-indicator{display:inline-block;font-weight:var(--wpds-typography-font-weight-default,400);line-height:1;margin-inline-start:var(--wpds-dimension-gap-xs,4px);text-decoration:none}._60da3b6f9718cf76__external-link-indicator:after{content:"\\2197"}._60da3b6f9718cf76__external-link-indicator:dir(rtl):after{content:"\\2196"}._5c913bce0d8bb0d6__item[aria-disabled=true] ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[aria-disabled=true] ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[aria-disabled=true] ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[aria-disabled=true] ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[aria-disabled=true] ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[aria-disabled=true] .fa88c9f1a96a4c5a__item-description,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._06be17a91bf434a0__item-trailing,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._091406749ed93e6e__item-suffix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._23630f40071a29ff__item-shortcut,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._42313b48c5459be3__item-selection-indicator,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) ._64924ecabf65a5d6__item-prefix,._5c913bce0d8bb0d6__item[data-highlighted]:not([aria-disabled=true]) .fa88c9f1a96a4c5a__item-description{--_gcd-heading-color:currentColor;color:inherit}}}'); 19221 } 19222 var style_default20 = { "positioner": "d61e2d85c0ee0699__positioner", "popup": "_34e81249f419a5a5__popup", "item-selection-indicator": "_42313b48c5459be3__item-selection-indicator", "is-root": "_087a537b24fee6a1__is-root _380b81b8f79fb10f__dropdown-motion", "is-submenu": "_6d3b567f6289bdc2__is-submenu _7f344b94e270e039__dropdown-motion--fade-only", "list": "_33f07ab17005471d__list", "group": "f11085533c0056b0__group", "radio-group": "e05914e1005d7c2e__radio-group", "item": "_5c913bce0d8bb0d6__item", "item-prefix": "_64924ecabf65a5d6__item-prefix", "group-label": "_4a0fd085d76fd23c__group-label", "separator": "bfc11368eadf3b39__separator", "item-content": "af879698ede76757__item-content", "checkbox-selection-icon": "_99c5bd141cbf516f__checkbox-selection-icon", "radio-selection-icon": "_59aa9b3b3a651148__radio-selection-icon", "prefix-icon": "a836378335a4cbf1__prefix-icon", "item-children": "_943a932d9f81c78c__item-children", "item-label": "_5ed41da4abcf8958__item-label", "item-description": "fa88c9f1a96a4c5a__item-description", "item-suffix": "_091406749ed93e6e__item-suffix", "item-shortcut": "_23630f40071a29ff__item-shortcut", "item-trailing": "_06be17a91bf434a0__item-trailing", "submenu-chevron": "b78aec79bf93eba0__submenu-chevron", "external-link-indicator": "_60da3b6f9718cf76__external-link-indicator" }; 19223 var SubmenuTrigger = (0, import_element42.forwardRef)( 19224 function MenuSubmenuTrigger3({ 19225 children, 19226 className, 19227 prefix, 19228 shortcut, 19229 suffix, 19230 "aria-describedby": ariaDescribedBy, 19231 "aria-keyshortcuts": ariaKeyShortcuts, 19232 "aria-label": ariaLabel, 19233 "aria-labelledby": ariaLabelledBy, 19234 ...props 19235 }, ref) { 19236 const { 19237 contentChildren, 19238 contentContextValue, 19239 itemAriaProps, 19240 shortcutDescriptionId 19241 } = useItemContent(children, { 19242 "aria-describedby": ariaDescribedBy, 19243 "aria-keyshortcuts": ariaKeyShortcuts, 19244 "aria-label": ariaLabel, 19245 "aria-labelledby": ariaLabelledBy, 19246 shortcut 19247 }); 19248 return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)( 19249 index_parts_exports.SubmenuTrigger, 19250 { 19251 ref, 19252 ...itemAriaProps, 19253 className: clsx_default( 19254 resets_default8["box-sizing"], 19255 style_default20.item, 19256 className 19257 ), 19258 ...props, 19259 children: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(MenuItemContentContext.Provider, { value: contentContextValue, children: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)( 19260 ItemContent, 19261 { 19262 prefix, 19263 shortcut, 19264 shortcutDescriptionId, 19265 suffix, 19266 trailing: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)( 19267 Icon, 19268 { 19269 className: style_default20["submenu-chevron"], 19270 icon: chevron_right_small_default, 19271 size: 24, 19272 "aria-hidden": "true" 19273 } 19274 ), 19275 children: contentChildren 19276 } 19277 ) }) 19278 } 19279 ); 19280 } 19281 ); 19282 19283 // packages/ui/build-module/menu/trigger.mjs 19284 var import_element43 = __toESM(require_element(), 1); 19285 var import_jsx_runtime93 = __toESM(require_jsx_runtime(), 1); 19286 var Trigger2 = (0, import_element43.forwardRef)( 19287 function MenuTrigger3(props, ref) { 19288 return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(index_parts_exports.Trigger, { ref, ...props }); 19289 } 19290 ); 19291 19292 // packages/ui/build-module/button/button.mjs 19293 var import_a11y = __toESM(require_a11y(), 1); 19294 var import_element44 = __toESM(require_element(), 1); 19295 var import_i18n11 = __toESM(require_i18n(), 1); 19296 var import_jsx_runtime94 = __toESM(require_jsx_runtime(), 1); 19297 var STYLE_HASH_ATTRIBUTE22 = "data-wp-hash"; 19298 function getRuntime22() { 19299 const globalScope = globalThis; 19300 if (globalScope.__wpStyleRuntime) { 19301 return globalScope.__wpStyleRuntime; 19302 } 19303 globalScope.__wpStyleRuntime = { 19304 documents: /* @__PURE__ */ new Map(), 19305 styles: /* @__PURE__ */ new Map(), 19306 injectedStyles: /* @__PURE__ */ new WeakMap() 19307 }; 19308 if (typeof document !== "undefined") { 19309 registerDocument22(document); 19310 } 19311 return globalScope.__wpStyleRuntime; 19312 } 19313 function documentContainsStyleHash22(targetDocument, hash) { 19314 if (!targetDocument.head) { 19315 return false; 19316 } 19317 for (const style of targetDocument.head.querySelectorAll( 19318 `style[$STYLE_HASH_ATTRIBUTE22}]` 19319 )) { 19320 if (style.getAttribute(STYLE_HASH_ATTRIBUTE22) === hash) { 19321 return true; 19322 } 19323 } 19324 return false; 19325 } 19326 function injectStyle22(targetDocument, hash, css) { 19327 if (!targetDocument.head) { 19328 return; 19329 } 19330 const runtime = getRuntime22(); 19331 let injectedStyles = runtime.injectedStyles.get(targetDocument); 19332 if (!injectedStyles) { 19333 injectedStyles = /* @__PURE__ */ new Set(); 19334 runtime.injectedStyles.set(targetDocument, injectedStyles); 19335 } 19336 if (injectedStyles.has(hash)) { 19337 return; 19338 } 19339 if (documentContainsStyleHash22(targetDocument, hash)) { 19340 injectedStyles.add(hash); 19341 return; 19342 } 19343 const style = targetDocument.createElement("style"); 19344 style.setAttribute(STYLE_HASH_ATTRIBUTE22, hash); 19345 style.appendChild(targetDocument.createTextNode(css)); 19346 targetDocument.head.appendChild(style); 19347 injectedStyles.add(hash); 19348 } 19349 function registerDocument22(targetDocument) { 19350 const runtime = getRuntime22(); 19351 runtime.documents.set( 19352 targetDocument, 19353 (runtime.documents.get(targetDocument) ?? 0) + 1 19354 ); 19355 for (const [hash, css] of runtime.styles) { 19356 injectStyle22(targetDocument, hash, css); 19357 } 19358 return () => { 19359 const count = runtime.documents.get(targetDocument); 19360 if (count === void 0) { 19361 return; 19362 } 19363 if (count <= 1) { 19364 runtime.documents.delete(targetDocument); 19365 return; 19366 } 19367 runtime.documents.set(targetDocument, count - 1); 19368 }; 19369 } 19370 function registerStyle22(hash, css) { 19371 const runtime = getRuntime22(); 19372 runtime.styles.set(hash, css); 19373 for (const targetDocument of runtime.documents.keys()) { 19374 injectStyle22(targetDocument, hash, css); 19375 } 19376 } 19377 if (typeof process === "undefined" || true) { 19378 registerStyle22("effc4e3032", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._97b0fc33c028be1a__button,.abbb272e2ce49bd6__is-unstyled{appearance:none;padding:0}._97b0fc33c028be1a__button{--wp-ui-button-font-weight:var(--wpds-typography-font-weight-emphasis,600);--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-strong,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-strong-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 93%,#000));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-strong-disabled,#e6e6e6);--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-brand-strong,#fff);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-brand-strong-active,#fff);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-brand-strong-disabled,#8d8d8d);--wp-ui-button-padding-block:var(--wpds-dimension-padding-xs,4px);--wp-ui-button-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-button-height:var(--wpds-dimension-size-lg,40px);--wp-ui-button-aspect-ratio:auto;--wp-ui-button-font-size:var(--wpds-typography-font-size-md,13px);--wp-ui-button-min-width:calc(4ch + var(--wp-ui-button-padding-inline)*2);--wp-ui-button-icon-margin:calc((var(--wpds-dimension-size-2xs, 16px) - var(--wpds-dimension-size-sm, 24px))/2);--wp-ui-button-border-color:var(--wp-ui-button-background-color);--wp-ui-button-border-color-active:var(--wp-ui-button-background-color-active);--wp-ui-button-border-color-disabled:var(--wp-ui-button-background-color-disabled);--_gcd-button-font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);--_gcd-button-font-size:var(--wp-ui-button-font-size);--_gcd-button-font-weight:var(--wp-ui-button-font-weight);align-items:center;aspect-ratio:var(--wp-ui-button-aspect-ratio);background-clip:border-box;background-color:var(--wp-ui-button-background-color);border-color:var(--wp-ui-button-border-color);border-radius:var(--wpds-border-radius-sm,2px);border-style:solid;border-width:1px;color:var(--wp-ui-button-foreground-color);display:inline-flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wp-ui-button-font-size);font-weight:var(--wp-ui-button-font-weight);gap:var(--wpds-dimension-gap-sm,8px);justify-content:center;line-height:var(--wpds-typography-line-height-sm,20px);max-width:100%;min-height:var(--wp-ui-button-height);min-width:var(--wp-ui-button-min-width);overflow-wrap:anywhere;padding-block:var(--wp-ui-button-padding-block);padding-inline:var(--wp-ui-button-padding-inline);position:relative;text-align:center;text-decoration:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}@media not (prefers-reduced-motion){transition:color .1s ease-out;*{transition:opacity .1s ease-out}}&[href]{cursor:pointer}[href]{color:inherit;text-decoration:inherit}&:not([data-disabled]):is(:hover,:active,:focus){background-color:var(--wp-ui-button-background-color-active);border-color:var(--wp-ui-button-border-color-active);color:var(--wp-ui-button-foreground-color-active)}&[data-disabled]:not(._914b42f315c0e580__is-loading){background-color:var(--wp-ui-button-background-color-disabled);border-color:var(--wp-ui-button-border-color-disabled);color:var(--wp-ui-button-foreground-color-disabled);@media (forced-colors:active){border-bottom-color:GrayText;border-left-color:GrayText;border-right-color:GrayText;border-top-color:GrayText;color:GrayText}}&:before{aspect-ratio:1;border:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid;border-block-end-color:transparent;border-block-start-color:var(--wp-ui-button-foreground-color);border-inline-end-color:var(--wp-ui-button-foreground-color);border-inline-start-color:transparent;border-radius:50%;box-sizing:border-box;content:"";display:block;height:var(--wp-ui-button-font-size);left:50%;opacity:0;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);@media not (prefers-reduced-motion){transition:opacity .1s ease-out}@media (forced-colors:active){border-block-end-style:none;border-bottom-color:ButtonText;border-inline-start-style:none;border-left-color:ButtonText;border-right-color:ButtonText;border-top-color:ButtonText}}}._908205475f9f2a92__is-small{--wp-ui-button-padding-block:0px;--wp-ui-button-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-button-height:var(--wpds-dimension-size-sm,24px)}._9f6fc6553aeb36fe__icon{margin:var(--wp-ui-button-icon-margin)}.dd460c965226cc77__is-brand{&._62d5a778b7b258ee__is-outline,&.ad0619a3217c6a5b__is-minimal{--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-brand,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000));--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-brand-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline{--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);--wp-ui-button-border-color:var(--wpds-color-stroke-interactive-brand,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-border-color-active:var(--wpds-color-stroke-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 85%,#000));--wp-ui-button-border-color-disabled:var(--wpds-color-stroke-interactive-brand-disabled,#dbdbdb)}&.ad0619a3217c6a5b__is-minimal{--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-weak-disabled,#0000)}}.e722a8f96726aa99__is-neutral{&.ad0619a3217c6a5b__is-minimal[aria-pressed=true],&.b50b3358c5fb4d0b__is-solid{--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-strong,#2d2d2d);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-strong-active,#1e1e1e);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-strong-disabled,#e6e6e6);--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-neutral-strong,#f0f0f0);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-neutral-strong-active,#f0f0f0);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-neutral-strong-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline,&.ad0619a3217c6a5b__is-minimal:not([aria-pressed=true]){--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-neutral-active,#1e1e1e);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline{--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-weak-active,#ededed);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-weak-disabled,#0000);--wp-ui-button-border-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d);--wp-ui-button-border-color-active:var(--wpds-color-stroke-interactive-neutral-active,#6e6e6e);--wp-ui-button-border-color-disabled:var(--wpds-color-stroke-interactive-neutral-disabled,#dbdbdb)}&.ad0619a3217c6a5b__is-minimal:not([aria-pressed=true]){--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-weak-active,#ededed);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-weak-disabled,#0000)}}.abbb272e2ce49bd6__is-unstyled{background:none;border:none;min-width:unset}.cf59cf1b69629838__is-compact{--wp-ui-button-height:var(--wpds-dimension-size-md,32px)}._914b42f315c0e580__is-loading:not(.abbb272e2ce49bd6__is-unstyled){color:transparent;&:not([data-disabled]):is(:hover,:active,:focus){color:transparent}@media (forced-colors:active){color:ButtonFace}*{opacity:0}&:before{opacity:1;transition-delay:.05s;@media not (prefers-reduced-motion){animation:_5a1d53da6f830c8d__loading-animation 1s linear infinite}}}}@keyframes _5a1d53da6f830c8d__loading-animation{0%{transform:translate(-50%,-50%) rotate(0deg)}to{transform:translate(-50%,-50%) rotate(1turn)}}}'); 19379 } 19380 var style_default21 = { "button": "_97b0fc33c028be1a__button", "is-unstyled": "abbb272e2ce49bd6__is-unstyled", "is-loading": "_914b42f315c0e580__is-loading", "is-small": "_908205475f9f2a92__is-small", "icon": "_9f6fc6553aeb36fe__icon", "is-brand": "dd460c965226cc77__is-brand", "is-outline": "_62d5a778b7b258ee__is-outline", "is-minimal": "ad0619a3217c6a5b__is-minimal", "is-neutral": "e722a8f96726aa99__is-neutral", "is-solid": "b50b3358c5fb4d0b__is-solid", "is-compact": "cf59cf1b69629838__is-compact", "loading-animation": "_5a1d53da6f830c8d__loading-animation" }; 19381 if (typeof process === "undefined" || true) { 19382 registerStyle22("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); 19383 } 19384 var resets_default9 = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; 19385 if (typeof process === "undefined" || true) { 19386 registerStyle22("08122b3d53", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{.af79fb116edb0dd7__outset-ring--focus:focus,.dfcfdc28396e5d98__outset-ring--focus-visible:focus-visible,.e5cd9ee879f6403a__outset-ring--focus-within:focus-within,:focus-visible ._81935a08e952f267__outset-ring--focus-parent-visible{--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}._3c9f5ee9fc9c136d__outset-ring--focus-within-except-active:focus-within,.abc777e9713fa711__outset-ring--focus-except-active:focus{outline:none}._3c9f5ee9fc9c136d__outset-ring--focus-within-except-active:focus-within:not(:has(:active)),.abc777e9713fa711__outset-ring--focus-except-active:focus:not(:active){--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}}}"); 19387 } 19388 var focus_module_default2 = { "outset-ring--focus": "af79fb116edb0dd7__outset-ring--focus", "outset-ring--focus-visible": "dfcfdc28396e5d98__outset-ring--focus-visible", "outset-ring--focus-within": "e5cd9ee879f6403a__outset-ring--focus-within", "outset-ring--focus-parent-visible": "_81935a08e952f267__outset-ring--focus-parent-visible", "outset-ring--focus-except-active": "abc777e9713fa711__outset-ring--focus-except-active", "outset-ring--focus-within-except-active": "_3c9f5ee9fc9c136d__outset-ring--focus-within-except-active" }; 19389 if (typeof process === "undefined" || true) { 19390 registerStyle22("e8e31009f5", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-weak,#707070))}&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-emphasis,600));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}.c59a0ebebd71fa4a__ol{list-style:var(--_gcd-ol-list-style,none);margin:var(--_gcd-ol-margin,0);padding-block:var(--_gcd-ol-padding-block,0);padding-inline:var(--_gcd-ol-padding-inline,0)}._46b5cb0c8e24e8c9__li{margin:var(--_gcd-li-margin,0)}"); 19391 } 19392 var global_css_defense_default4 = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a", "ol": "c59a0ebebd71fa4a__ol", "li": "_46b5cb0c8e24e8c9__li" }; 19393 var Button3 = (0, import_element44.forwardRef)( 19394 function Button22({ 19395 tone = "brand", 19396 variant = "solid", 19397 size: size4 = "default", 19398 className, 19399 focusableWhenDisabled = true, 19400 disabled: disabled2, 19401 loading, 19402 loadingAnnouncement = (0, import_i18n11.__)("Loading"), 19403 children, 19404 ...props 19405 }, ref) { 19406 const mergedClassName = clsx_default( 19407 global_css_defense_default4.button, 19408 resets_default9["box-sizing"], 19409 focus_module_default2["outset-ring--focus-except-active"], 19410 variant !== "unstyled" && style_default21.button, 19411 style_default21[`is-$tone}`], 19412 style_default21[`is-$variant}`], 19413 style_default21[`is-$size4}`], 19414 loading && style_default21["is-loading"], 19415 className 19416 ); 19417 (0, import_element44.useEffect)(() => { 19418 if (loading && loadingAnnouncement) { 19419 (0, import_a11y.speak)(loadingAnnouncement); 19420 } 19421 }, [loading, loadingAnnouncement]); 19422 return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)( 19423 Button, 19424 { 19425 ref, 19426 className: mergedClassName, 19427 focusableWhenDisabled, 19428 disabled: disabled2 ?? loading, 19429 ...props, 19430 children 19431 } 19432 ); 19433 } 19434 ); 19435 19436 // packages/ui/build-module/button/icon.mjs 19437 var import_element45 = __toESM(require_element(), 1); 19438 var import_jsx_runtime95 = __toESM(require_jsx_runtime(), 1); 19439 var STYLE_HASH_ATTRIBUTE23 = "data-wp-hash"; 19440 function getRuntime23() { 19441 const globalScope = globalThis; 19442 if (globalScope.__wpStyleRuntime) { 19443 return globalScope.__wpStyleRuntime; 19444 } 19445 globalScope.__wpStyleRuntime = { 19446 documents: /* @__PURE__ */ new Map(), 19447 styles: /* @__PURE__ */ new Map(), 19448 injectedStyles: /* @__PURE__ */ new WeakMap() 19449 }; 19450 if (typeof document !== "undefined") { 19451 registerDocument23(document); 19452 } 19453 return globalScope.__wpStyleRuntime; 19454 } 19455 function documentContainsStyleHash23(targetDocument, hash) { 19456 if (!targetDocument.head) { 19457 return false; 19458 } 19459 for (const style of targetDocument.head.querySelectorAll( 19460 `style[$STYLE_HASH_ATTRIBUTE23}]` 19461 )) { 19462 if (style.getAttribute(STYLE_HASH_ATTRIBUTE23) === hash) { 19463 return true; 19464 } 19465 } 19466 return false; 19467 } 19468 function injectStyle23(targetDocument, hash, css) { 19469 if (!targetDocument.head) { 19470 return; 19471 } 19472 const runtime = getRuntime23(); 19473 let injectedStyles = runtime.injectedStyles.get(targetDocument); 19474 if (!injectedStyles) { 19475 injectedStyles = /* @__PURE__ */ new Set(); 19476 runtime.injectedStyles.set(targetDocument, injectedStyles); 19477 } 19478 if (injectedStyles.has(hash)) { 19479 return; 19480 } 19481 if (documentContainsStyleHash23(targetDocument, hash)) { 19482 injectedStyles.add(hash); 19483 return; 19484 } 19485 const style = targetDocument.createElement("style"); 19486 style.setAttribute(STYLE_HASH_ATTRIBUTE23, hash); 19487 style.appendChild(targetDocument.createTextNode(css)); 19488 targetDocument.head.appendChild(style); 19489 injectedStyles.add(hash); 19490 } 19491 function registerDocument23(targetDocument) { 19492 const runtime = getRuntime23(); 19493 runtime.documents.set( 19494 targetDocument, 19495 (runtime.documents.get(targetDocument) ?? 0) + 1 19496 ); 19497 for (const [hash, css] of runtime.styles) { 19498 injectStyle23(targetDocument, hash, css); 19499 } 19500 return () => { 19501 const count = runtime.documents.get(targetDocument); 19502 if (count === void 0) { 19503 return; 19504 } 19505 if (count <= 1) { 19506 runtime.documents.delete(targetDocument); 19507 return; 19508 } 19509 runtime.documents.set(targetDocument, count - 1); 19510 }; 19511 } 19512 function registerStyle23(hash, css) { 19513 const runtime = getRuntime23(); 19514 runtime.styles.set(hash, css); 19515 for (const targetDocument of runtime.documents.keys()) { 19516 injectStyle23(targetDocument, hash, css); 19517 } 19518 } 19519 if (typeof process === "undefined" || true) { 19520 registerStyle23("effc4e3032", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._97b0fc33c028be1a__button,.abbb272e2ce49bd6__is-unstyled{appearance:none;padding:0}._97b0fc33c028be1a__button{--wp-ui-button-font-weight:var(--wpds-typography-font-weight-emphasis,600);--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-strong,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-strong-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 93%,#000));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-strong-disabled,#e6e6e6);--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-brand-strong,#fff);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-brand-strong-active,#fff);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-brand-strong-disabled,#8d8d8d);--wp-ui-button-padding-block:var(--wpds-dimension-padding-xs,4px);--wp-ui-button-padding-inline:var(--wpds-dimension-padding-md,12px);--wp-ui-button-height:var(--wpds-dimension-size-lg,40px);--wp-ui-button-aspect-ratio:auto;--wp-ui-button-font-size:var(--wpds-typography-font-size-md,13px);--wp-ui-button-min-width:calc(4ch + var(--wp-ui-button-padding-inline)*2);--wp-ui-button-icon-margin:calc((var(--wpds-dimension-size-2xs, 16px) - var(--wpds-dimension-size-sm, 24px))/2);--wp-ui-button-border-color:var(--wp-ui-button-background-color);--wp-ui-button-border-color-active:var(--wp-ui-button-background-color-active);--wp-ui-button-border-color-disabled:var(--wp-ui-button-background-color-disabled);--_gcd-button-font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);--_gcd-button-font-size:var(--wp-ui-button-font-size);--_gcd-button-font-weight:var(--wp-ui-button-font-weight);align-items:center;aspect-ratio:var(--wp-ui-button-aspect-ratio);background-clip:border-box;background-color:var(--wp-ui-button-background-color);border-color:var(--wp-ui-button-border-color);border-radius:var(--wpds-border-radius-sm,2px);border-style:solid;border-width:1px;color:var(--wp-ui-button-foreground-color);display:inline-flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wp-ui-button-font-size);font-weight:var(--wp-ui-button-font-weight);gap:var(--wpds-dimension-gap-sm,8px);justify-content:center;line-height:var(--wpds-typography-line-height-sm,20px);max-width:100%;min-height:var(--wp-ui-button-height);min-width:var(--wp-ui-button-min-width);overflow-wrap:anywhere;padding-block:var(--wp-ui-button-padding-block);padding-inline:var(--wp-ui-button-padding-inline);position:relative;text-align:center;text-decoration:none;&:not([data-disabled]){cursor:var(--wpds-cursor-control,pointer)}@media not (prefers-reduced-motion){transition:color .1s ease-out;*{transition:opacity .1s ease-out}}&[href]{cursor:pointer}[href]{color:inherit;text-decoration:inherit}&:not([data-disabled]):is(:hover,:active,:focus){background-color:var(--wp-ui-button-background-color-active);border-color:var(--wp-ui-button-border-color-active);color:var(--wp-ui-button-foreground-color-active)}&[data-disabled]:not(._914b42f315c0e580__is-loading){background-color:var(--wp-ui-button-background-color-disabled);border-color:var(--wp-ui-button-border-color-disabled);color:var(--wp-ui-button-foreground-color-disabled);@media (forced-colors:active){border-bottom-color:GrayText;border-left-color:GrayText;border-right-color:GrayText;border-top-color:GrayText;color:GrayText}}&:before{aspect-ratio:1;border:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid;border-block-end-color:transparent;border-block-start-color:var(--wp-ui-button-foreground-color);border-inline-end-color:var(--wp-ui-button-foreground-color);border-inline-start-color:transparent;border-radius:50%;box-sizing:border-box;content:"";display:block;height:var(--wp-ui-button-font-size);left:50%;opacity:0;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);@media not (prefers-reduced-motion){transition:opacity .1s ease-out}@media (forced-colors:active){border-block-end-style:none;border-bottom-color:ButtonText;border-inline-start-style:none;border-left-color:ButtonText;border-right-color:ButtonText;border-top-color:ButtonText}}}._908205475f9f2a92__is-small{--wp-ui-button-padding-block:0px;--wp-ui-button-padding-inline:var(--wpds-dimension-padding-sm,8px);--wp-ui-button-height:var(--wpds-dimension-size-sm,24px)}._9f6fc6553aeb36fe__icon{margin:var(--wp-ui-button-icon-margin)}.dd460c965226cc77__is-brand{&._62d5a778b7b258ee__is-outline,&.ad0619a3217c6a5b__is-minimal{--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-brand,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 52%,#000));--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-brand-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline{--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-weak-disabled,#0000);--wp-ui-button-border-color:var(--wpds-color-stroke-interactive-brand,var(--wp-admin-theme-color,#3858e9));--wp-ui-button-border-color-active:var(--wpds-color-stroke-interactive-brand-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 85%,#000));--wp-ui-button-border-color-disabled:var(--wpds-color-stroke-interactive-brand-disabled,#dbdbdb)}&.ad0619a3217c6a5b__is-minimal{--wp-ui-button-background-color:var(--wpds-color-background-interactive-brand-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-brand-weak-active,color-mix(in oklch,var(--wp-admin-theme-color,#3858e9) 12%,#fff));--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-brand-weak-disabled,#0000)}}.e722a8f96726aa99__is-neutral{&.ad0619a3217c6a5b__is-minimal[aria-pressed=true],&.b50b3358c5fb4d0b__is-solid{--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-strong,#2d2d2d);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-strong-active,#1e1e1e);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-strong-disabled,#e6e6e6);--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-neutral-strong,#f0f0f0);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-neutral-strong-active,#f0f0f0);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-neutral-strong-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline,&.ad0619a3217c6a5b__is-minimal:not([aria-pressed=true]){--wp-ui-button-foreground-color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);--wp-ui-button-foreground-color-active:var(--wpds-color-foreground-interactive-neutral-active,#1e1e1e);--wp-ui-button-foreground-color-disabled:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d)}&._62d5a778b7b258ee__is-outline{--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-weak-active,#ededed);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-weak-disabled,#0000);--wp-ui-button-border-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d);--wp-ui-button-border-color-active:var(--wpds-color-stroke-interactive-neutral-active,#6e6e6e);--wp-ui-button-border-color-disabled:var(--wpds-color-stroke-interactive-neutral-disabled,#dbdbdb)}&.ad0619a3217c6a5b__is-minimal:not([aria-pressed=true]){--wp-ui-button-background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);--wp-ui-button-background-color-active:var(--wpds-color-background-interactive-neutral-weak-active,#ededed);--wp-ui-button-background-color-disabled:var(--wpds-color-background-interactive-neutral-weak-disabled,#0000)}}.abbb272e2ce49bd6__is-unstyled{background:none;border:none;min-width:unset}.cf59cf1b69629838__is-compact{--wp-ui-button-height:var(--wpds-dimension-size-md,32px)}._914b42f315c0e580__is-loading:not(.abbb272e2ce49bd6__is-unstyled){color:transparent;&:not([data-disabled]):is(:hover,:active,:focus){color:transparent}@media (forced-colors:active){color:ButtonFace}*{opacity:0}&:before{opacity:1;transition-delay:.05s;@media not (prefers-reduced-motion){animation:_5a1d53da6f830c8d__loading-animation 1s linear infinite}}}}@keyframes _5a1d53da6f830c8d__loading-animation{0%{transform:translate(-50%,-50%) rotate(0deg)}to{transform:translate(-50%,-50%) rotate(1turn)}}}'); 19521 } 19522 var style_default22 = { "button": "_97b0fc33c028be1a__button", "is-unstyled": "abbb272e2ce49bd6__is-unstyled", "is-loading": "_914b42f315c0e580__is-loading", "is-small": "_908205475f9f2a92__is-small", "icon": "_9f6fc6553aeb36fe__icon", "is-brand": "dd460c965226cc77__is-brand", "is-outline": "_62d5a778b7b258ee__is-outline", "is-minimal": "ad0619a3217c6a5b__is-minimal", "is-neutral": "e722a8f96726aa99__is-neutral", "is-solid": "b50b3358c5fb4d0b__is-solid", "is-compact": "cf59cf1b69629838__is-compact", "loading-animation": "_5a1d53da6f830c8d__loading-animation" }; 19523 var ButtonIcon = (0, import_element45.forwardRef)( 19524 function ButtonIcon2({ className, icon, ...props }, ref) { 19525 return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)( 19526 Icon, 19527 { 19528 ref, 19529 icon, 19530 className: clsx_default(style_default22.icon, className), 19531 size: 24, 19532 ...props 19533 } 19534 ); 19535 } 19536 ); 19537 19538 // packages/ui/build-module/button/index.mjs 19539 ButtonIcon.displayName = "Button.Icon"; 19540 var Button4 = Object.assign(Button3, { 19541 /** 19542 * An icon component specifically designed to work well when rendered inside 19543 * a `Button` component. 19544 */ 19545 Icon: ButtonIcon 19546 }); 19547 19548 // node_modules/@date-fns/tz/tzName/index.js 19549 function tzName(timeZone, date, format7 = "long") { 19550 return new Intl.DateTimeFormat("en-US", { 19551 // Enforces engine to render the time. Without the option JavaScriptCore omits it. 19552 hour: "numeric", 19553 timeZone, 19554 timeZoneName: format7 19555 }).format(date).split(/\s/g).slice(2).join(" "); 19556 } 19557 19558 // node_modules/@date-fns/tz/tzOffset/index.js 19559 var offsetFormatCache = {}; 19560 var offsetCache = {}; 19561 function tzOffset(timeZone, date) { 19562 try { 19563 const format7 = offsetFormatCache[timeZone] ||= new Intl.DateTimeFormat("en-US", { 19564 timeZone, 19565 timeZoneName: "longOffset" 19566 }).format; 19567 const offsetStr = format7(date).split("GMT")[1]; 19568 if (offsetStr in offsetCache) return offsetCache[offsetStr]; 19569 return calcOffset(offsetStr, offsetStr.split(":")); 19570 } catch { 19571 if (timeZone in offsetCache) return offsetCache[timeZone]; 19572 const captures = timeZone?.match(offsetRe); 19573 if (captures) return calcOffset(timeZone, captures.slice(1)); 19574 return NaN; 19575 } 19576 } 19577 var offsetRe = /([+-]\d\d):?(\d\d)?/; 19578 function calcOffset(cacheStr, values) { 19579 const hours = +(values[0] || 0); 19580 const minutes = +(values[1] || 0); 19581 const seconds = +(values[2] || 0) / 60; 19582 return offsetCache[cacheStr] = hours * 60 + minutes > 0 ? hours * 60 + minutes + seconds : hours * 60 - minutes - seconds; 19583 } 19584 19585 // node_modules/@date-fns/tz/date/mini.js 19586 var TZDateMini = class _TZDateMini extends Date { 19587 //#region static 19588 constructor(...args) { 19589 super(); 19590 if (args.length > 1 && typeof args[args.length - 1] === "string") { 19591 this.timeZone = args.pop(); 19592 } 19593 this.internal = /* @__PURE__ */ new Date(); 19594 if (isNaN(tzOffset(this.timeZone, this))) { 19595 this.setTime(NaN); 19596 } else { 19597 if (!args.length) { 19598 this.setTime(Date.now()); 19599 } else if (typeof args[0] === "number" && (args.length === 1 || args.length === 2 && typeof args[1] !== "number")) { 19600 this.setTime(args[0]); 19601 } else if (typeof args[0] === "string") { 19602 this.setTime(+new Date(args[0])); 19603 } else if (args[0] instanceof Date) { 19604 this.setTime(+args[0]); 19605 } else { 19606 this.setTime(+new Date(...args)); 19607 adjustToSystemTZ(this, args); 19608 } 19609 } 19610 } 19611 static tz(tz, ...args) { 19612 return args.length ? new _TZDateMini(...args, tz) : new _TZDateMini(Date.now(), tz); 19613 } 19614 //#endregion 19615 //#region time zone 19616 withTimeZone(timeZone) { 19617 return new _TZDateMini(+this, timeZone); 19618 } 19619 getTimezoneOffset() { 19620 const offset4 = -tzOffset(this.timeZone, this); 19621 return offset4 > 0 ? Math.floor(offset4) : Math.ceil(offset4); 19622 } 19623 //#endregion 19624 //#region time 19625 setTime(_time) { 19626 Date.prototype.setTime.apply(this, arguments); 19627 syncToInternal(this); 19628 return +this; 19629 } 19630 //#endregion 19631 //#region date-fns integration 19632 [/* @__PURE__ */ Symbol.for("constructDateFrom")](date) { 19633 return new _TZDateMini(+new Date(date), this.timeZone); 19634 } 19635 //#endregion 19636 }; 19637 var re = /^(get|set)(?!UTC)/; 19638 Object.getOwnPropertyNames(Date.prototype).forEach((method) => { 19639 if (!re.test(method)) return; 19640 const utcMethod = method.replace(re, "$1UTC"); 19641 if (!TZDateMini.prototype[utcMethod]) return; 19642 if (method.startsWith("get")) { 19643 TZDateMini.prototype[method] = function() { 19644 return this.internal[utcMethod](); 19645 }; 19646 } else { 19647 TZDateMini.prototype[method] = function() { 19648 Date.prototype[utcMethod].apply(this.internal, arguments); 19649 syncFromInternal(this); 19650 return +this; 19651 }; 19652 TZDateMini.prototype[utcMethod] = function() { 19653 Date.prototype[utcMethod].apply(this, arguments); 19654 syncToInternal(this); 19655 return +this; 19656 }; 19657 } 19658 }); 19659 function syncToInternal(date) { 19660 date.internal.setTime(+date); 19661 date.internal.setUTCSeconds(date.internal.getUTCSeconds() - // Round after converting minutes to seconds to avoid fractional offset 19662 // precision errors from historical offsets. 19663 Math.round(-tzOffset(date.timeZone, date) * 60)); 19664 } 19665 function syncFromInternal(date) { 19666 Date.prototype.setFullYear.call(date, date.internal.getUTCFullYear(), date.internal.getUTCMonth(), date.internal.getUTCDate()); 19667 Date.prototype.setHours.call(date, date.internal.getUTCHours(), date.internal.getUTCMinutes(), date.internal.getUTCSeconds(), date.internal.getUTCMilliseconds()); 19668 adjustToSystemTZ(date); 19669 } 19670 function adjustToSystemTZ(date, constructorArgs) { 19671 const expectedInternalTime = Array.isArray(constructorArgs) ? constructorArgsToInternalTime(constructorArgs) : +date.internal; 19672 const offsetWithSeconds = tzOffset(date.timeZone, date); 19673 const offset4 = offsetWithSeconds > 0 ? Math.floor(offsetWithSeconds) : Math.ceil(offsetWithSeconds); 19674 const prevHour = /* @__PURE__ */ new Date(+date); 19675 prevHour.setUTCHours(prevHour.getUTCHours() - 1); 19676 const systemOffset = -(/* @__PURE__ */ new Date(+date)).getTimezoneOffset(); 19677 const prevHourSystemOffset = -(/* @__PURE__ */ new Date(+prevHour)).getTimezoneOffset(); 19678 const systemDSTChange = systemOffset - prevHourSystemOffset; 19679 let systemOffsetForDiff = systemOffset; 19680 if (systemDSTChange && systemOffset !== offset4) { 19681 const systemHour = Date.prototype.getHours.apply(date); 19682 const expectedHour = Array.isArray(constructorArgs) ? constructorArgs[3] || 0 : date.internal.getUTCHours(); 19683 if (systemHour !== expectedHour) { 19684 const testDate = /* @__PURE__ */ new Date(+date); 19685 const testOffsetDiff = systemOffset - offset4; 19686 if (testOffsetDiff) testDate.setUTCMinutes(testDate.getUTCMinutes() + testOffsetDiff); 19687 const testOffsetWithSeconds = tzOffset(date.timeZone, testDate); 19688 const testOffset = testOffsetWithSeconds > 0 ? Math.floor(testOffsetWithSeconds) : Math.ceil(testOffsetWithSeconds); 19689 if (testOffset === offset4) systemOffsetForDiff = prevHourSystemOffset; 19690 } 19691 } 19692 const offsetDiff = systemOffsetForDiff - offset4; 19693 if (offsetDiff) 19694 Date.prototype.setUTCMinutes.call(date, Date.prototype.getUTCMinutes.call(date) + offsetDiff); 19695 const systemDate = /* @__PURE__ */ new Date(+date); 19696 systemDate.setUTCSeconds(0); 19697 const systemSecondsOffset = systemOffset > 0 ? systemDate.getSeconds() : (systemDate.getSeconds() - 60) % 60; 19698 const secondsOffset = Math.round(-(tzOffset(date.timeZone, date) * 60)) % 60; 19699 if (secondsOffset || systemSecondsOffset) 19700 Date.prototype.setUTCSeconds.call(date, Date.prototype.getUTCSeconds.call(date) + secondsOffset + systemSecondsOffset); 19701 const postOffsetWithSeconds = tzOffset(date.timeZone, date); 19702 const postOffset = postOffsetWithSeconds > 0 ? Math.floor(postOffsetWithSeconds) : Math.ceil(postOffsetWithSeconds); 19703 const postSystemOffset = -(/* @__PURE__ */ new Date(+date)).getTimezoneOffset(); 19704 const postOffsetDiff = postSystemOffset - postOffset; 19705 const offsetChanged = postOffset !== offset4; 19706 const postDiff = postOffsetDiff - offsetDiff; 19707 const targetDSTShift = postOffset - offset4; 19708 const postOffsetCandidate = expectedInternalTime - postOffset * 60 * 1e3; 19709 const normalizedTargetDSTGap = targetDSTShift > 0 && targetInternalTime(date) - expectedInternalTime === targetDSTShift * 60 * 1e3 && targetInternalTime(date, postOffsetCandidate) !== expectedInternalTime; 19710 if (offsetChanged && postDiff && !normalizedTargetDSTGap) { 19711 Date.prototype.setUTCMinutes.call(date, Date.prototype.getUTCMinutes.call(date) + postDiff); 19712 const newOffsetWithSeconds = tzOffset(date.timeZone, date); 19713 const newOffset = newOffsetWithSeconds > 0 ? Math.floor(newOffsetWithSeconds) : Math.ceil(newOffsetWithSeconds); 19714 const offsetChange = postOffset - newOffset; 19715 if (offsetChange && postDiff < 0) { 19716 Date.prototype.setUTCMinutes.call(date, Date.prototype.getUTCMinutes.call(date) + offsetChange); 19717 } 19718 } 19719 syncToInternal(date); 19720 const expectedTime = constructorArgs ? expectedInternalTime : expectedInternalTime + secondsOffset * 1e3; 19721 const drift = expectedTime - +date.internal; 19722 if (drift && Math.abs(drift) < 30 * 60 * 1e3) { 19723 Date.prototype.setTime.call(date, +date + drift); 19724 syncToInternal(date); 19725 } 19726 } 19727 function constructorArgsToInternalTime(args) { 19728 return Date.UTC(args[0], args.length > 1 ? args[1] : 0, args.length > 2 ? args[2] : 1, ...args.slice(3)); 19729 } 19730 function targetInternalTime(date, time) { 19731 const internal = new Date(time ?? +date); 19732 internal.setUTCSeconds(internal.getUTCSeconds() - Math.round(-tzOffset(date.timeZone, internal) * 60)); 19733 return +internal; 19734 } 19735 19736 // node_modules/@date-fns/tz/date/index.js 19737 var TZDate = class _TZDate extends TZDateMini { 19738 //#region static 19739 static tz(tz, ...args) { 19740 return args.length ? new _TZDate(...args, tz) : new _TZDate(Date.now(), tz); 19741 } 19742 //#endregion 19743 //#region representation 19744 toISOString() { 19745 const [sign, hours, minutes] = this.tzComponents(); 19746 const tz = `$sign}$hours}:$minutes}`; 19747 return this.internal.toISOString().slice(0, -1) + tz; 19748 } 19749 toString() { 19750 return `$this.toDateString()} $this.toTimeString()}`; 19751 } 19752 toDateString() { 19753 const [day, date, month, year] = this.internal.toUTCString().split(" "); 19754 return `$day?.slice(0, -1)} $month} $date} $year}`; 19755 } 19756 toTimeString() { 19757 const time = this.internal.toUTCString().split(" ")[4]; 19758 const [sign, hours, minutes] = this.tzComponents(); 19759 return `$time} GMT$sign}$hours}$minutes} ($tzName(this.timeZone, this)})`; 19760 } 19761 toLocaleString(locales, options) { 19762 return Date.prototype.toLocaleString.call(this, locales, { 19763 ...options, 19764 timeZone: options?.timeZone || this.timeZone 19765 }); 19766 } 19767 toLocaleDateString(locales, options) { 19768 return Date.prototype.toLocaleDateString.call(this, locales, { 19769 ...options, 19770 timeZone: options?.timeZone || this.timeZone 19771 }); 19772 } 19773 toLocaleTimeString(locales, options) { 19774 return Date.prototype.toLocaleTimeString.call(this, locales, { 19775 ...options, 19776 timeZone: options?.timeZone || this.timeZone 19777 }); 19778 } 19779 //#endregion 19780 //#region private 19781 tzComponents() { 19782 const offset4 = this.getTimezoneOffset(); 19783 const sign = offset4 > 0 ? "-" : "+"; 19784 const hours = String(Math.floor(Math.abs(offset4) / 60)).padStart(2, "0"); 19785 const minutes = String(Math.abs(offset4) % 60).padStart(2, "0"); 19786 return [sign, hours, minutes]; 19787 } 19788 //#endregion 19789 withTimeZone(timeZone) { 19790 return new _TZDate(+this, timeZone); 19791 } 19792 //#region date-fns integration 19793 [/* @__PURE__ */ Symbol.for("constructDateFrom")](date) { 19794 return new _TZDate(+new Date(date), this.timeZone); 19795 } 19796 //#endregion 19797 }; 19798 19799 // node_modules/date-fns/constants.js 19800 var daysInYear = 365.2425; 19801 var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1e3; 19802 var minTime = -maxTime; 19803 var millisecondsInWeek = 6048e5; 19804 var millisecondsInDay = 864e5; 19805 var millisecondsInMinute = 6e4; 19806 var millisecondsInHour = 36e5; 19807 var millisecondsInSecond = 1e3; 19808 var secondsInHour = 3600; 19809 var secondsInDay = secondsInHour * 24; 19810 var secondsInWeek = secondsInDay * 7; 19811 var secondsInYear = secondsInDay * daysInYear; 19812 var secondsInMonth = secondsInYear / 12; 19813 var secondsInQuarter = secondsInMonth * 3; 19814 var constructFromSymbol = /* @__PURE__ */ Symbol.for("constructDateFrom"); 19815 19816 // node_modules/date-fns/constructFrom.js 19817 function constructFrom(date, value) { 19818 if (typeof date === "function") return date(value); 19819 if (date && typeof date === "object" && constructFromSymbol in date) 19820 return date[constructFromSymbol](value); 19821 if (date instanceof Date) return new date.constructor(value); 19822 return new Date(value); 19823 } 19824 19825 // node_modules/date-fns/toDate.js 19826 function toDate(argument, context) { 19827 return constructFrom(context || argument, argument); 19828 } 19829 19830 // node_modules/date-fns/addDays.js 19831 function addDays(date, amount, options) { 19832 const _date = toDate(date, options?.in); 19833 if (isNaN(amount)) return constructFrom(options?.in || date, NaN); 19834 if (!amount) return _date; 19835 _date.setDate(_date.getDate() + amount); 19836 return _date; 19837 } 19838 19839 // node_modules/date-fns/addMonths.js 19840 function addMonths(date, amount, options) { 19841 const _date = toDate(date, options?.in); 19842 if (isNaN(amount)) return constructFrom(options?.in || date, NaN); 19843 if (!amount) { 19844 return _date; 19845 } 19846 const dayOfMonth = _date.getDate(); 19847 const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime()); 19848 endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0); 19849 const daysInMonth = endOfDesiredMonth.getDate(); 19850 if (dayOfMonth >= daysInMonth) { 19851 return endOfDesiredMonth; 19852 } else { 19853 _date.setFullYear( 19854 endOfDesiredMonth.getFullYear(), 19855 endOfDesiredMonth.getMonth(), 19856 dayOfMonth 19857 ); 19858 return _date; 19859 } 19860 } 19861 19862 // node_modules/date-fns/_lib/defaultOptions.js 19863 var defaultOptions = {}; 19864 function getDefaultOptions() { 19865 return defaultOptions; 19866 } 19867 19868 // node_modules/date-fns/startOfWeek.js 19869 function startOfWeek(date, options) { 19870 const defaultOptions2 = getDefaultOptions(); 19871 const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0; 19872 const _date = toDate(date, options?.in); 19873 const day = _date.getDay(); 19874 const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; 19875 _date.setDate(_date.getDate() - diff); 19876 _date.setHours(0, 0, 0, 0); 19877 return _date; 19878 } 19879 19880 // node_modules/date-fns/startOfISOWeek.js 19881 function startOfISOWeek(date, options) { 19882 return startOfWeek(date, { ...options, weekStartsOn: 1 }); 19883 } 19884 19885 // node_modules/date-fns/getISOWeekYear.js 19886 function getISOWeekYear(date, options) { 19887 const _date = toDate(date, options?.in); 19888 const year = _date.getFullYear(); 19889 const fourthOfJanuaryOfNextYear = constructFrom(_date, 0); 19890 fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4); 19891 fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0); 19892 const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear); 19893 const fourthOfJanuaryOfThisYear = constructFrom(_date, 0); 19894 fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4); 19895 fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0); 19896 const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear); 19897 if (_date.getTime() >= startOfNextYear.getTime()) { 19898 return year + 1; 19899 } else if (_date.getTime() >= startOfThisYear.getTime()) { 19900 return year; 19901 } else { 19902 return year - 1; 19903 } 19904 } 19905 19906 // node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js 19907 function getTimezoneOffsetInMilliseconds(date) { 19908 const _date = toDate(date); 19909 const utcDate = new Date( 19910 Date.UTC( 19911 _date.getFullYear(), 19912 _date.getMonth(), 19913 _date.getDate(), 19914 _date.getHours(), 19915 _date.getMinutes(), 19916 _date.getSeconds(), 19917 _date.getMilliseconds() 19918 ) 19919 ); 19920 utcDate.setUTCFullYear(_date.getFullYear()); 19921 return +date - +utcDate; 19922 } 19923 19924 // node_modules/date-fns/_lib/normalizeDates.js 19925 function normalizeDates(context, ...dates) { 19926 const normalize = constructFrom.bind( 19927 null, 19928 context || dates.find((date) => typeof date === "object") 19929 ); 19930 return dates.map(normalize); 19931 } 19932 19933 // node_modules/date-fns/startOfDay.js 19934 function startOfDay(date, options) { 19935 const _date = toDate(date, options?.in); 19936 _date.setHours(0, 0, 0, 0); 19937 return _date; 19938 } 19939 19940 // node_modules/date-fns/differenceInCalendarDays.js 19941 function differenceInCalendarDays(laterDate, earlierDate, options) { 19942 const [laterDate_, earlierDate_] = normalizeDates( 19943 options?.in, 19944 laterDate, 19945 earlierDate 19946 ); 19947 const laterStartOfDay = startOfDay(laterDate_); 19948 const earlierStartOfDay = startOfDay(earlierDate_); 19949 const laterTimestamp = +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay); 19950 const earlierTimestamp = +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay); 19951 return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay); 19952 } 19953 19954 // node_modules/date-fns/startOfISOWeekYear.js 19955 function startOfISOWeekYear(date, options) { 19956 const year = getISOWeekYear(date, options); 19957 const fourthOfJanuary = constructFrom(options?.in || date, 0); 19958 fourthOfJanuary.setFullYear(year, 0, 4); 19959 fourthOfJanuary.setHours(0, 0, 0, 0); 19960 return startOfISOWeek(fourthOfJanuary); 19961 } 19962 19963 // node_modules/date-fns/addWeeks.js 19964 function addWeeks(date, amount, options) { 19965 return addDays(date, amount * 7, options); 19966 } 19967 19968 // node_modules/date-fns/addYears.js 19969 function addYears(date, amount, options) { 19970 return addMonths(date, amount * 12, options); 19971 } 19972 19973 // node_modules/date-fns/areIntervalsOverlapping.js 19974 function areIntervalsOverlapping(intervalLeft, intervalRight, options) { 19975 const [leftStartTime, leftEndTime] = [ 19976 +toDate(intervalLeft.start, options?.in), 19977 +toDate(intervalLeft.end, options?.in) 19978 ].sort((a2, b2) => a2 - b2); 19979 const [rightStartTime, rightEndTime] = [ 19980 +toDate(intervalRight.start, options?.in), 19981 +toDate(intervalRight.end, options?.in) 19982 ].sort((a2, b2) => a2 - b2); 19983 if (options?.inclusive) 19984 return leftStartTime <= rightEndTime && rightStartTime <= leftEndTime; 19985 return leftStartTime < rightEndTime && rightStartTime < leftEndTime; 19986 } 19987 19988 // node_modules/date-fns/max.js 19989 function max2(dates, options) { 19990 let result; 19991 let context = options?.in; 19992 dates.forEach((date) => { 19993 if (!context && typeof date === "object") 19994 context = constructFrom.bind(null, date); 19995 const date_ = toDate(date, context); 19996 if (!result || result < date_ || isNaN(+date_)) result = date_; 19997 }); 19998 return constructFrom(context, result || NaN); 19999 } 20000 20001 // node_modules/date-fns/min.js 20002 function min2(dates, options) { 20003 let result; 20004 let context = options?.in; 20005 dates.forEach((date) => { 20006 if (!context && typeof date === "object") 20007 context = constructFrom.bind(null, date); 20008 const date_ = toDate(date, context); 20009 if (!result || result > date_ || isNaN(+date_)) result = date_; 20010 }); 20011 return constructFrom(context, result || NaN); 20012 } 20013 20014 // node_modules/date-fns/isSameDay.js 20015 function isSameDay(laterDate, earlierDate, options) { 20016 const [dateLeft_, dateRight_] = normalizeDates( 20017 options?.in, 20018 laterDate, 20019 earlierDate 20020 ); 20021 return +startOfDay(dateLeft_) === +startOfDay(dateRight_); 20022 } 20023 20024 // node_modules/date-fns/isDate.js 20025 function isDate(value) { 20026 return value instanceof Date || typeof value === "object" && Object.prototype.toString.call(value) === "[object Date]"; 20027 } 20028 20029 // node_modules/date-fns/isValid.js 20030 function isValid(date) { 20031 return !(!isDate(date) && typeof date !== "number" || isNaN(+toDate(date))); 20032 } 20033 20034 // node_modules/date-fns/differenceInCalendarMonths.js 20035 function differenceInCalendarMonths(laterDate, earlierDate, options) { 20036 const [laterDate_, earlierDate_] = normalizeDates( 20037 options?.in, 20038 laterDate, 20039 earlierDate 20040 ); 20041 const yearsDiff = laterDate_.getFullYear() - earlierDate_.getFullYear(); 20042 const monthsDiff = laterDate_.getMonth() - earlierDate_.getMonth(); 20043 return yearsDiff * 12 + monthsDiff; 20044 } 20045 20046 // node_modules/date-fns/endOfMonth.js 20047 function endOfMonth(date, options) { 20048 const _date = toDate(date, options?.in); 20049 const month = _date.getMonth(); 20050 _date.setFullYear(_date.getFullYear(), month + 1, 0); 20051 _date.setHours(23, 59, 59, 999); 20052 return _date; 20053 } 20054 20055 // node_modules/date-fns/_lib/normalizeInterval.js 20056 function normalizeInterval(context, interval) { 20057 const [start, end] = normalizeDates(context, interval.start, interval.end); 20058 return { start, end }; 20059 } 20060 20061 // node_modules/date-fns/eachMonthOfInterval.js 20062 function eachMonthOfInterval(interval, options) { 20063 const { start, end } = normalizeInterval(options?.in, interval); 20064 let reversed = +start > +end; 20065 const endTime = reversed ? +start : +end; 20066 const date = reversed ? end : start; 20067 date.setHours(0, 0, 0, 0); 20068 date.setDate(1); 20069 let step = options?.step ?? 1; 20070 if (!step) return []; 20071 if (step < 0) { 20072 step = -step; 20073 reversed = !reversed; 20074 } 20075 const dates = []; 20076 while (+date <= endTime) { 20077 dates.push(constructFrom(start, date)); 20078 date.setMonth(date.getMonth() + step); 20079 } 20080 return reversed ? dates.reverse() : dates; 20081 } 20082 20083 // node_modules/date-fns/startOfMonth.js 20084 function startOfMonth(date, options) { 20085 const _date = toDate(date, options?.in); 20086 _date.setDate(1); 20087 _date.setHours(0, 0, 0, 0); 20088 return _date; 20089 } 20090 20091 // node_modules/date-fns/endOfYear.js 20092 function endOfYear(date, options) { 20093 const _date = toDate(date, options?.in); 20094 const year = _date.getFullYear(); 20095 _date.setFullYear(year + 1, 0, 0); 20096 _date.setHours(23, 59, 59, 999); 20097 return _date; 20098 } 20099 20100 // node_modules/date-fns/startOfYear.js 20101 function startOfYear(date, options) { 20102 const date_ = toDate(date, options?.in); 20103 date_.setFullYear(date_.getFullYear(), 0, 1); 20104 date_.setHours(0, 0, 0, 0); 20105 return date_; 20106 } 20107 20108 // node_modules/date-fns/eachYearOfInterval.js 20109 function eachYearOfInterval(interval, options) { 20110 const { start, end } = normalizeInterval(options?.in, interval); 20111 let reversed = +start > +end; 20112 const endTime = reversed ? +start : +end; 20113 const date = reversed ? end : start; 20114 date.setHours(0, 0, 0, 0); 20115 date.setMonth(0, 1); 20116 let step = options?.step ?? 1; 20117 if (!step) return []; 20118 if (step < 0) { 20119 step = -step; 20120 reversed = !reversed; 20121 } 20122 const dates = []; 20123 while (+date <= endTime) { 20124 dates.push(constructFrom(start, date)); 20125 date.setFullYear(date.getFullYear() + step); 20126 } 20127 return reversed ? dates.reverse() : dates; 20128 } 20129 20130 // node_modules/date-fns/endOfWeek.js 20131 function endOfWeek(date, options) { 20132 const defaultOptions2 = getDefaultOptions(); 20133 const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0; 20134 const _date = toDate(date, options?.in); 20135 const day = _date.getDay(); 20136 const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn); 20137 _date.setDate(_date.getDate() + diff); 20138 _date.setHours(23, 59, 59, 999); 20139 return _date; 20140 } 20141 20142 // node_modules/date-fns/endOfISOWeek.js 20143 function endOfISOWeek(date, options) { 20144 return endOfWeek(date, { ...options, weekStartsOn: 1 }); 20145 } 20146 20147 // node_modules/date-fns/locale/en-US/_lib/formatDistance.js 20148 var formatDistanceLocale = { 20149 lessThanXSeconds: { 20150 one: "less than a second", 20151 other: "less than {{count}} seconds" 20152 }, 20153 xSeconds: { 20154 one: "1 second", 20155 other: "{{count}} seconds" 20156 }, 20157 halfAMinute: "half a minute", 20158 lessThanXMinutes: { 20159 one: "less than a minute", 20160 other: "less than {{count}} minutes" 20161 }, 20162 xMinutes: { 20163 one: "1 minute", 20164 other: "{{count}} minutes" 20165 }, 20166 aboutXHours: { 20167 one: "about 1 hour", 20168 other: "about {{count}} hours" 20169 }, 20170 xHours: { 20171 one: "1 hour", 20172 other: "{{count}} hours" 20173 }, 20174 xDays: { 20175 one: "1 day", 20176 other: "{{count}} days" 20177 }, 20178 aboutXWeeks: { 20179 one: "about 1 week", 20180 other: "about {{count}} weeks" 20181 }, 20182 xWeeks: { 20183 one: "1 week", 20184 other: "{{count}} weeks" 20185 }, 20186 aboutXMonths: { 20187 one: "about 1 month", 20188 other: "about {{count}} months" 20189 }, 20190 xMonths: { 20191 one: "1 month", 20192 other: "{{count}} months" 20193 }, 20194 aboutXYears: { 20195 one: "about 1 year", 20196 other: "about {{count}} years" 20197 }, 20198 xYears: { 20199 one: "1 year", 20200 other: "{{count}} years" 20201 }, 20202 overXYears: { 20203 one: "over 1 year", 20204 other: "over {{count}} years" 20205 }, 20206 almostXYears: { 20207 one: "almost 1 year", 20208 other: "almost {{count}} years" 20209 } 20210 }; 20211 var formatDistance = (token, count, options) => { 20212 let result; 20213 const tokenValue = formatDistanceLocale[token]; 20214 if (typeof tokenValue === "string") { 20215 result = tokenValue; 20216 } else if (count === 1) { 20217 result = tokenValue.one; 20218 } else { 20219 result = tokenValue.other.replace("{{count}}", count.toString()); 20220 } 20221 if (options?.addSuffix) { 20222 if (options.comparison && options.comparison > 0) { 20223 return "in " + result; 20224 } else { 20225 return result + " ago"; 20226 } 20227 } 20228 return result; 20229 }; 20230 20231 // node_modules/date-fns/locale/_lib/buildFormatLongFn.js 20232 function buildFormatLongFn(args) { 20233 return (options = {}) => { 20234 const width = options.width ? String(options.width) : args.defaultWidth; 20235 const format7 = args.formats[width] || args.formats[args.defaultWidth]; 20236 return format7; 20237 }; 20238 } 20239 20240 // node_modules/date-fns/locale/en-US/_lib/formatLong.js 20241 var dateFormats = { 20242 full: "EEEE, MMMM do, y", 20243 long: "MMMM do, y", 20244 medium: "MMM d, y", 20245 short: "MM/dd/yyyy" 20246 }; 20247 var timeFormats = { 20248 full: "h:mm:ss a zzzz", 20249 long: "h:mm:ss a z", 20250 medium: "h:mm:ss a", 20251 short: "h:mm a" 20252 }; 20253 var dateTimeFormats = { 20254 full: "{{date}} 'at' {{time}}", 20255 long: "{{date}} 'at' {{time}}", 20256 medium: "{{date}}, {{time}}", 20257 short: "{{date}}, {{time}}" 20258 }; 20259 var formatLong = { 20260 date: buildFormatLongFn({ 20261 formats: dateFormats, 20262 defaultWidth: "full" 20263 }), 20264 time: buildFormatLongFn({ 20265 formats: timeFormats, 20266 defaultWidth: "full" 20267 }), 20268 dateTime: buildFormatLongFn({ 20269 formats: dateTimeFormats, 20270 defaultWidth: "full" 20271 }) 20272 }; 20273 20274 // node_modules/date-fns/locale/en-US/_lib/formatRelative.js 20275 var formatRelativeLocale = { 20276 lastWeek: "'last' eeee 'at' p", 20277 yesterday: "'yesterday at' p", 20278 today: "'today at' p", 20279 tomorrow: "'tomorrow at' p", 20280 nextWeek: "eeee 'at' p", 20281 other: "P" 20282 }; 20283 var formatRelative = (token, _date, _baseDate, _options) => formatRelativeLocale[token]; 20284 20285 // node_modules/date-fns/locale/_lib/buildLocalizeFn.js 20286 function buildLocalizeFn(args) { 20287 return (value, options) => { 20288 const context = options?.context ? String(options.context) : "standalone"; 20289 let valuesArray; 20290 if (context === "formatting" && args.formattingValues) { 20291 const defaultWidth = args.defaultFormattingWidth || args.defaultWidth; 20292 const width = options?.width ? String(options.width) : defaultWidth; 20293 valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth]; 20294 } else { 20295 const defaultWidth = args.defaultWidth; 20296 const width = options?.width ? String(options.width) : args.defaultWidth; 20297 valuesArray = args.values[width] || args.values[defaultWidth]; 20298 } 20299 const index2 = args.argumentCallback ? args.argumentCallback(value) : value; 20300 return valuesArray[index2]; 20301 }; 20302 } 20303 20304 // node_modules/date-fns/locale/en-US/_lib/localize.js 20305 var eraValues = { 20306 narrow: ["B", "A"], 20307 abbreviated: ["BC", "AD"], 20308 wide: ["Before Christ", "Anno Domini"] 20309 }; 20310 var quarterValues = { 20311 narrow: ["1", "2", "3", "4"], 20312 abbreviated: ["Q1", "Q2", "Q3", "Q4"], 20313 wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"] 20314 }; 20315 var monthValues = { 20316 narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], 20317 abbreviated: [ 20318 "Jan", 20319 "Feb", 20320 "Mar", 20321 "Apr", 20322 "May", 20323 "Jun", 20324 "Jul", 20325 "Aug", 20326 "Sep", 20327 "Oct", 20328 "Nov", 20329 "Dec" 20330 ], 20331 wide: [ 20332 "January", 20333 "February", 20334 "March", 20335 "April", 20336 "May", 20337 "June", 20338 "July", 20339 "August", 20340 "September", 20341 "October", 20342 "November", 20343 "December" 20344 ] 20345 }; 20346 var dayValues = { 20347 narrow: ["S", "M", "T", "W", "T", "F", "S"], 20348 short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], 20349 abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], 20350 wide: [ 20351 "Sunday", 20352 "Monday", 20353 "Tuesday", 20354 "Wednesday", 20355 "Thursday", 20356 "Friday", 20357 "Saturday" 20358 ] 20359 }; 20360 var dayPeriodValues = { 20361 narrow: { 20362 am: "a", 20363 pm: "p", 20364 midnight: "mi", 20365 noon: "n", 20366 morning: "morning", 20367 afternoon: "afternoon", 20368 evening: "evening", 20369 night: "night" 20370 }, 20371 abbreviated: { 20372 am: "AM", 20373 pm: "PM", 20374 midnight: "midnight", 20375 noon: "noon", 20376 morning: "morning", 20377 afternoon: "afternoon", 20378 evening: "evening", 20379 night: "night" 20380 }, 20381 wide: { 20382 am: "a.m.", 20383 pm: "p.m.", 20384 midnight: "midnight", 20385 noon: "noon", 20386 morning: "morning", 20387 afternoon: "afternoon", 20388 evening: "evening", 20389 night: "night" 20390 } 20391 }; 20392 var formattingDayPeriodValues = { 20393 narrow: { 20394 am: "a", 20395 pm: "p", 20396 midnight: "mi", 20397 noon: "n", 20398 morning: "in the morning", 20399 afternoon: "in the afternoon", 20400 evening: "in the evening", 20401 night: "at night" 20402 }, 20403 abbreviated: { 20404 am: "AM", 20405 pm: "PM", 20406 midnight: "midnight", 20407 noon: "noon", 20408 morning: "in the morning", 20409 afternoon: "in the afternoon", 20410 evening: "in the evening", 20411 night: "at night" 20412 }, 20413 wide: { 20414 am: "a.m.", 20415 pm: "p.m.", 20416 midnight: "midnight", 20417 noon: "noon", 20418 morning: "in the morning", 20419 afternoon: "in the afternoon", 20420 evening: "in the evening", 20421 night: "at night" 20422 } 20423 }; 20424 var ordinalNumber = (dirtyNumber, _options) => { 20425 const number = Number(dirtyNumber); 20426 const rem100 = number % 100; 20427 if (rem100 > 20 || rem100 < 10) { 20428 switch (rem100 % 10) { 20429 case 1: 20430 return number + "st"; 20431 case 2: 20432 return number + "nd"; 20433 case 3: 20434 return number + "rd"; 20435 } 20436 } 20437 return number + "th"; 20438 }; 20439 var localize = { 20440 ordinalNumber, 20441 era: buildLocalizeFn({ 20442 values: eraValues, 20443 defaultWidth: "wide" 20444 }), 20445 quarter: buildLocalizeFn({ 20446 values: quarterValues, 20447 defaultWidth: "wide", 20448 argumentCallback: (quarter) => quarter - 1 20449 }), 20450 month: buildLocalizeFn({ 20451 values: monthValues, 20452 defaultWidth: "wide" 20453 }), 20454 day: buildLocalizeFn({ 20455 values: dayValues, 20456 defaultWidth: "wide" 20457 }), 20458 dayPeriod: buildLocalizeFn({ 20459 values: dayPeriodValues, 20460 defaultWidth: "wide", 20461 formattingValues: formattingDayPeriodValues, 20462 defaultFormattingWidth: "wide" 20463 }) 20464 }; 20465 20466 // node_modules/date-fns/locale/_lib/buildMatchFn.js 20467 function buildMatchFn(args) { 20468 return (string, options = {}) => { 20469 const width = options.width; 20470 const matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth]; 20471 const matchResult = string.match(matchPattern); 20472 if (!matchResult) { 20473 return null; 20474 } 20475 const matchedString = matchResult[0]; 20476 const parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth]; 20477 const key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString)) : ( 20478 // [TODO] -- I challenge you to fix the type 20479 findKey(parsePatterns, (pattern) => pattern.test(matchedString)) 20480 ); 20481 let value; 20482 value = args.valueCallback ? args.valueCallback(key) : key; 20483 value = options.valueCallback ? ( 20484 // [TODO] -- I challenge you to fix the type 20485 options.valueCallback(value) 20486 ) : value; 20487 const rest = string.slice(matchedString.length); 20488 return { value, rest }; 20489 }; 20490 } 20491 function findKey(object, predicate) { 20492 for (const key in object) { 20493 if (Object.prototype.hasOwnProperty.call(object, key) && predicate(object[key])) { 20494 return key; 20495 } 20496 } 20497 return void 0; 20498 } 20499 function findIndex(array, predicate) { 20500 for (let key = 0; key < array.length; key++) { 20501 if (predicate(array[key])) { 20502 return key; 20503 } 20504 } 20505 return void 0; 20506 } 20507 20508 // node_modules/date-fns/locale/_lib/buildMatchPatternFn.js 20509 function buildMatchPatternFn(args) { 20510 return (string, options = {}) => { 20511 const matchResult = string.match(args.matchPattern); 20512 if (!matchResult) return null; 20513 const matchedString = matchResult[0]; 20514 const parseResult = string.match(args.parsePattern); 20515 if (!parseResult) return null; 20516 let value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]; 20517 value = options.valueCallback ? options.valueCallback(value) : value; 20518 const rest = string.slice(matchedString.length); 20519 return { value, rest }; 20520 }; 20521 } 20522 20523 // node_modules/date-fns/locale/en-US/_lib/match.js 20524 var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i; 20525 var parseOrdinalNumberPattern = /\d+/i; 20526 var matchEraPatterns = { 20527 narrow: /^(b|a)/i, 20528 abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i, 20529 wide: /^(before christ|before common era|anno domini|common era)/i 20530 }; 20531 var parseEraPatterns = { 20532 any: [/^b/i, /^(a|c)/i] 20533 }; 20534 var matchQuarterPatterns = { 20535 narrow: /^[1234]/i, 20536 abbreviated: /^q[1234]/i, 20537 wide: /^[1234](th|st|nd|rd)? quarter/i 20538 }; 20539 var parseQuarterPatterns = { 20540 any: [/1/i, /2/i, /3/i, /4/i] 20541 }; 20542 var matchMonthPatterns = { 20543 narrow: /^[jfmasond]/i, 20544 abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i, 20545 wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i 20546 }; 20547 var parseMonthPatterns = { 20548 narrow: [ 20549 /^j/i, 20550 /^f/i, 20551 /^m/i, 20552 /^a/i, 20553 /^m/i, 20554 /^j/i, 20555 /^j/i, 20556 /^a/i, 20557 /^s/i, 20558 /^o/i, 20559 /^n/i, 20560 /^d/i 20561 ], 20562 any: [ 20563 /^ja/i, 20564 /^f/i, 20565 /^mar/i, 20566 /^ap/i, 20567 /^may/i, 20568 /^jun/i, 20569 /^jul/i, 20570 /^au/i, 20571 /^s/i, 20572 /^o/i, 20573 /^n/i, 20574 /^d/i 20575 ] 20576 }; 20577 var matchDayPatterns = { 20578 narrow: /^[smtwf]/i, 20579 short: /^(su|mo|tu|we|th|fr|sa)/i, 20580 abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i, 20581 wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i 20582 }; 20583 var parseDayPatterns = { 20584 narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i], 20585 any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i] 20586 }; 20587 var matchDayPeriodPatterns = { 20588 narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i, 20589 any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i 20590 }; 20591 var parseDayPeriodPatterns = { 20592 any: { 20593 am: /^a/i, 20594 pm: /^p/i, 20595 midnight: /^mi/i, 20596 noon: /^no/i, 20597 morning: /morning/i, 20598 afternoon: /afternoon/i, 20599 evening: /evening/i, 20600 night: /night/i 20601 } 20602 }; 20603 var match = { 20604 ordinalNumber: buildMatchPatternFn({ 20605 matchPattern: matchOrdinalNumberPattern, 20606 parsePattern: parseOrdinalNumberPattern, 20607 valueCallback: (value) => parseInt(value, 10) 20608 }), 20609 era: buildMatchFn({ 20610 matchPatterns: matchEraPatterns, 20611 defaultMatchWidth: "wide", 20612 parsePatterns: parseEraPatterns, 20613 defaultParseWidth: "any" 20614 }), 20615 quarter: buildMatchFn({ 20616 matchPatterns: matchQuarterPatterns, 20617 defaultMatchWidth: "wide", 20618 parsePatterns: parseQuarterPatterns, 20619 defaultParseWidth: "any", 20620 valueCallback: (index2) => index2 + 1 20621 }), 20622 month: buildMatchFn({ 20623 matchPatterns: matchMonthPatterns, 20624 defaultMatchWidth: "wide", 20625 parsePatterns: parseMonthPatterns, 20626 defaultParseWidth: "any" 20627 }), 20628 day: buildMatchFn({ 20629 matchPatterns: matchDayPatterns, 20630 defaultMatchWidth: "wide", 20631 parsePatterns: parseDayPatterns, 20632 defaultParseWidth: "any" 20633 }), 20634 dayPeriod: buildMatchFn({ 20635 matchPatterns: matchDayPeriodPatterns, 20636 defaultMatchWidth: "any", 20637 parsePatterns: parseDayPeriodPatterns, 20638 defaultParseWidth: "any" 20639 }) 20640 }; 20641 20642 // node_modules/date-fns/locale/en-US.js 20643 var enUS = { 20644 code: "en-US", 20645 formatDistance, 20646 formatLong, 20647 formatRelative, 20648 localize, 20649 match, 20650 options: { 20651 weekStartsOn: 0, 20652 firstWeekContainsDate: 1 20653 } 20654 }; 20655 20656 // node_modules/date-fns/getDayOfYear.js 20657 function getDayOfYear(date, options) { 20658 const _date = toDate(date, options?.in); 20659 const diff = differenceInCalendarDays(_date, startOfYear(_date)); 20660 const dayOfYear = diff + 1; 20661 return dayOfYear; 20662 } 20663 20664 // node_modules/date-fns/getISOWeek.js 20665 function getISOWeek(date, options) { 20666 const _date = toDate(date, options?.in); 20667 const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date); 20668 return Math.round(diff / millisecondsInWeek) + 1; 20669 } 20670 20671 // node_modules/date-fns/getWeekYear.js 20672 function getWeekYear(date, options) { 20673 const _date = toDate(date, options?.in); 20674 const year = _date.getFullYear(); 20675 const defaultOptions2 = getDefaultOptions(); 20676 const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; 20677 const firstWeekOfNextYear = constructFrom(options?.in || date, 0); 20678 firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate); 20679 firstWeekOfNextYear.setHours(0, 0, 0, 0); 20680 const startOfNextYear = startOfWeek(firstWeekOfNextYear, options); 20681 const firstWeekOfThisYear = constructFrom(options?.in || date, 0); 20682 firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate); 20683 firstWeekOfThisYear.setHours(0, 0, 0, 0); 20684 const startOfThisYear = startOfWeek(firstWeekOfThisYear, options); 20685 if (+_date >= +startOfNextYear) { 20686 return year + 1; 20687 } else if (+_date >= +startOfThisYear) { 20688 return year; 20689 } else { 20690 return year - 1; 20691 } 20692 } 20693 20694 // node_modules/date-fns/startOfWeekYear.js 20695 function startOfWeekYear(date, options) { 20696 const defaultOptions2 = getDefaultOptions(); 20697 const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; 20698 const year = getWeekYear(date, options); 20699 const firstWeek = constructFrom(options?.in || date, 0); 20700 firstWeek.setFullYear(year, 0, firstWeekContainsDate); 20701 firstWeek.setHours(0, 0, 0, 0); 20702 const _date = startOfWeek(firstWeek, options); 20703 return _date; 20704 } 20705 20706 // node_modules/date-fns/getWeek.js 20707 function getWeek(date, options) { 20708 const _date = toDate(date, options?.in); 20709 const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options); 20710 return Math.round(diff / millisecondsInWeek) + 1; 20711 } 20712 20713 // node_modules/date-fns/_lib/addLeadingZeros.js 20714 function addLeadingZeros(number, targetLength) { 20715 const sign = number < 0 ? "-" : ""; 20716 const output = Math.abs(number).toString().padStart(targetLength, "0"); 20717 return sign + output; 20718 } 20719 20720 // node_modules/date-fns/_lib/format/lightFormatters.js 20721 var lightFormatters = { 20722 // Year 20723 y(date, token) { 20724 const signedYear = date.getFullYear(); 20725 const year = signedYear > 0 ? signedYear : 1 - signedYear; 20726 return addLeadingZeros(token === "yy" ? year % 100 : year, token.length); 20727 }, 20728 // Month 20729 M(date, token) { 20730 const month = date.getMonth(); 20731 return token === "M" ? String(month + 1) : addLeadingZeros(month + 1, 2); 20732 }, 20733 // Day of the month 20734 d(date, token) { 20735 return addLeadingZeros(date.getDate(), token.length); 20736 }, 20737 // AM or PM 20738 a(date, token) { 20739 const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? "pm" : "am"; 20740 switch (token) { 20741 case "a": 20742 case "aa": 20743 return dayPeriodEnumValue.toUpperCase(); 20744 case "aaa": 20745 return dayPeriodEnumValue; 20746 case "aaaaa": 20747 return dayPeriodEnumValue[0]; 20748 case "aaaa": 20749 default: 20750 return dayPeriodEnumValue === "am" ? "a.m." : "p.m."; 20751 } 20752 }, 20753 // Hour [1-12] 20754 h(date, token) { 20755 return addLeadingZeros(date.getHours() % 12 || 12, token.length); 20756 }, 20757 // Hour [0-23] 20758 H(date, token) { 20759 return addLeadingZeros(date.getHours(), token.length); 20760 }, 20761 // Minute 20762 m(date, token) { 20763 return addLeadingZeros(date.getMinutes(), token.length); 20764 }, 20765 // Second 20766 s(date, token) { 20767 return addLeadingZeros(date.getSeconds(), token.length); 20768 }, 20769 // Fraction of second 20770 S(date, token) { 20771 const numberOfDigits = token.length; 20772 const milliseconds = date.getMilliseconds(); 20773 const fractionalSeconds = Math.trunc( 20774 milliseconds * Math.pow(10, numberOfDigits - 3) 20775 ); 20776 return addLeadingZeros(fractionalSeconds, token.length); 20777 } 20778 }; 20779 20780 // node_modules/date-fns/_lib/format/formatters.js 20781 var dayPeriodEnum = { 20782 am: "am", 20783 pm: "pm", 20784 midnight: "midnight", 20785 noon: "noon", 20786 morning: "morning", 20787 afternoon: "afternoon", 20788 evening: "evening", 20789 night: "night" 20790 }; 20791 var formatters = { 20792 // Era 20793 G: function(date, token, localize2) { 20794 const era = date.getFullYear() > 0 ? 1 : 0; 20795 switch (token) { 20796 // AD, BC 20797 case "G": 20798 case "GG": 20799 case "GGG": 20800 return localize2.era(era, { width: "abbreviated" }); 20801 // A, B 20802 case "GGGGG": 20803 return localize2.era(era, { width: "narrow" }); 20804 // Anno Domini, Before Christ 20805 case "GGGG": 20806 default: 20807 return localize2.era(era, { width: "wide" }); 20808 } 20809 }, 20810 // Year 20811 y: function(date, token, localize2) { 20812 if (token === "yo") { 20813 const signedYear = date.getFullYear(); 20814 const year = signedYear > 0 ? signedYear : 1 - signedYear; 20815 return localize2.ordinalNumber(year, { unit: "year" }); 20816 } 20817 return lightFormatters.y(date, token); 20818 }, 20819 // Local week-numbering year 20820 Y: function(date, token, localize2, options) { 20821 const signedWeekYear = getWeekYear(date, options); 20822 const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; 20823 if (token === "YY") { 20824 const twoDigitYear = weekYear % 100; 20825 return addLeadingZeros(twoDigitYear, 2); 20826 } 20827 if (token === "Yo") { 20828 return localize2.ordinalNumber(weekYear, { unit: "year" }); 20829 } 20830 return addLeadingZeros(weekYear, token.length); 20831 }, 20832 // ISO week-numbering year 20833 R: function(date, token) { 20834 const isoWeekYear = getISOWeekYear(date); 20835 return addLeadingZeros(isoWeekYear, token.length); 20836 }, 20837 // Extended year. This is a single number designating the year of this calendar system. 20838 // The main difference between `y` and `u` localizers are B.C. years: 20839 // | Year | `y` | `u` | 20840 // |------|-----|-----| 20841 // | AC 1 | 1 | 1 | 20842 // | BC 1 | 1 | 0 | 20843 // | BC 2 | 2 | -1 | 20844 // Also `yy` always returns the last two digits of a year, 20845 // while `uu` pads single digit years to 2 characters and returns other years unchanged. 20846 u: function(date, token) { 20847 const year = date.getFullYear(); 20848 return addLeadingZeros(year, token.length); 20849 }, 20850 // Quarter 20851 Q: function(date, token, localize2) { 20852 const quarter = Math.ceil((date.getMonth() + 1) / 3); 20853 switch (token) { 20854 // 1, 2, 3, 4 20855 case "Q": 20856 return String(quarter); 20857 // 01, 02, 03, 04 20858 case "QQ": 20859 return addLeadingZeros(quarter, 2); 20860 // 1st, 2nd, 3rd, 4th 20861 case "Qo": 20862 return localize2.ordinalNumber(quarter, { unit: "quarter" }); 20863 // Q1, Q2, Q3, Q4 20864 case "QQQ": 20865 return localize2.quarter(quarter, { 20866 width: "abbreviated", 20867 context: "formatting" 20868 }); 20869 // 1, 2, 3, 4 (narrow quarter; could be not numerical) 20870 case "QQQQQ": 20871 return localize2.quarter(quarter, { 20872 width: "narrow", 20873 context: "formatting" 20874 }); 20875 // 1st quarter, 2nd quarter, ... 20876 case "QQQQ": 20877 default: 20878 return localize2.quarter(quarter, { 20879 width: "wide", 20880 context: "formatting" 20881 }); 20882 } 20883 }, 20884 // Stand-alone quarter 20885 q: function(date, token, localize2) { 20886 const quarter = Math.ceil((date.getMonth() + 1) / 3); 20887 switch (token) { 20888 // 1, 2, 3, 4 20889 case "q": 20890 return String(quarter); 20891 // 01, 02, 03, 04 20892 case "qq": 20893 return addLeadingZeros(quarter, 2); 20894 // 1st, 2nd, 3rd, 4th 20895 case "qo": 20896 return localize2.ordinalNumber(quarter, { unit: "quarter" }); 20897 // Q1, Q2, Q3, Q4 20898 case "qqq": 20899 return localize2.quarter(quarter, { 20900 width: "abbreviated", 20901 context: "standalone" 20902 }); 20903 // 1, 2, 3, 4 (narrow quarter; could be not numerical) 20904 case "qqqqq": 20905 return localize2.quarter(quarter, { 20906 width: "narrow", 20907 context: "standalone" 20908 }); 20909 // 1st quarter, 2nd quarter, ... 20910 case "qqqq": 20911 default: 20912 return localize2.quarter(quarter, { 20913 width: "wide", 20914 context: "standalone" 20915 }); 20916 } 20917 }, 20918 // Month 20919 M: function(date, token, localize2) { 20920 const month = date.getMonth(); 20921 switch (token) { 20922 case "M": 20923 case "MM": 20924 return lightFormatters.M(date, token); 20925 // 1st, 2nd, ..., 12th 20926 case "Mo": 20927 return localize2.ordinalNumber(month + 1, { unit: "month" }); 20928 // Jan, Feb, ..., Dec 20929 case "MMM": 20930 return localize2.month(month, { 20931 width: "abbreviated", 20932 context: "formatting" 20933 }); 20934 // J, F, ..., D 20935 case "MMMMM": 20936 return localize2.month(month, { 20937 width: "narrow", 20938 context: "formatting" 20939 }); 20940 // January, February, ..., December 20941 case "MMMM": 20942 default: 20943 return localize2.month(month, { width: "wide", context: "formatting" }); 20944 } 20945 }, 20946 // Stand-alone month 20947 L: function(date, token, localize2) { 20948 const month = date.getMonth(); 20949 switch (token) { 20950 // 1, 2, ..., 12 20951 case "L": 20952 return String(month + 1); 20953 // 01, 02, ..., 12 20954 case "LL": 20955 return addLeadingZeros(month + 1, 2); 20956 // 1st, 2nd, ..., 12th 20957 case "Lo": 20958 return localize2.ordinalNumber(month + 1, { unit: "month" }); 20959 // Jan, Feb, ..., Dec 20960 case "LLL": 20961 return localize2.month(month, { 20962 width: "abbreviated", 20963 context: "standalone" 20964 }); 20965 // J, F, ..., D 20966 case "LLLLL": 20967 return localize2.month(month, { 20968 width: "narrow", 20969 context: "standalone" 20970 }); 20971 // January, February, ..., December 20972 case "LLLL": 20973 default: 20974 return localize2.month(month, { width: "wide", context: "standalone" }); 20975 } 20976 }, 20977 // Local week of year 20978 w: function(date, token, localize2, options) { 20979 const week = getWeek(date, options); 20980 if (token === "wo") { 20981 return localize2.ordinalNumber(week, { unit: "week" }); 20982 } 20983 return addLeadingZeros(week, token.length); 20984 }, 20985 // ISO week of year 20986 I: function(date, token, localize2) { 20987 const isoWeek = getISOWeek(date); 20988 if (token === "Io") { 20989 return localize2.ordinalNumber(isoWeek, { unit: "week" }); 20990 } 20991 return addLeadingZeros(isoWeek, token.length); 20992 }, 20993 // Day of the month 20994 d: function(date, token, localize2) { 20995 if (token === "do") { 20996 return localize2.ordinalNumber(date.getDate(), { unit: "date" }); 20997 } 20998 return lightFormatters.d(date, token); 20999 }, 21000 // Day of year 21001 D: function(date, token, localize2) { 21002 const dayOfYear = getDayOfYear(date); 21003 if (token === "Do") { 21004 return localize2.ordinalNumber(dayOfYear, { unit: "dayOfYear" }); 21005 } 21006 return addLeadingZeros(dayOfYear, token.length); 21007 }, 21008 // Day of week 21009 E: function(date, token, localize2) { 21010 const dayOfWeek = date.getDay(); 21011 switch (token) { 21012 // Tue 21013 case "E": 21014 case "EE": 21015 case "EEE": 21016 return localize2.day(dayOfWeek, { 21017 width: "abbreviated", 21018 context: "formatting" 21019 }); 21020 // T 21021 case "EEEEE": 21022 return localize2.day(dayOfWeek, { 21023 width: "narrow", 21024 context: "formatting" 21025 }); 21026 // Tu 21027 case "EEEEEE": 21028 return localize2.day(dayOfWeek, { 21029 width: "short", 21030 context: "formatting" 21031 }); 21032 // Tuesday 21033 case "EEEE": 21034 default: 21035 return localize2.day(dayOfWeek, { 21036 width: "wide", 21037 context: "formatting" 21038 }); 21039 } 21040 }, 21041 // Local day of week 21042 e: function(date, token, localize2, options) { 21043 const dayOfWeek = date.getDay(); 21044 const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; 21045 switch (token) { 21046 // Numerical value (Nth day of week with current locale or weekStartsOn) 21047 case "e": 21048 return String(localDayOfWeek); 21049 // Padded numerical value 21050 case "ee": 21051 return addLeadingZeros(localDayOfWeek, 2); 21052 // 1st, 2nd, ..., 7th 21053 case "eo": 21054 return localize2.ordinalNumber(localDayOfWeek, { unit: "day" }); 21055 case "eee": 21056 return localize2.day(dayOfWeek, { 21057 width: "abbreviated", 21058 context: "formatting" 21059 }); 21060 // T 21061 case "eeeee": 21062 return localize2.day(dayOfWeek, { 21063 width: "narrow", 21064 context: "formatting" 21065 }); 21066 // Tu 21067 case "eeeeee": 21068 return localize2.day(dayOfWeek, { 21069 width: "short", 21070 context: "formatting" 21071 }); 21072 // Tuesday 21073 case "eeee": 21074 default: 21075 return localize2.day(dayOfWeek, { 21076 width: "wide", 21077 context: "formatting" 21078 }); 21079 } 21080 }, 21081 // Stand-alone local day of week 21082 c: function(date, token, localize2, options) { 21083 const dayOfWeek = date.getDay(); 21084 const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7; 21085 switch (token) { 21086 // Numerical value (same as in `e`) 21087 case "c": 21088 return String(localDayOfWeek); 21089 // Padded numerical value 21090 case "cc": 21091 return addLeadingZeros(localDayOfWeek, token.length); 21092 // 1st, 2nd, ..., 7th 21093 case "co": 21094 return localize2.ordinalNumber(localDayOfWeek, { unit: "day" }); 21095 case "ccc": 21096 return localize2.day(dayOfWeek, { 21097 width: "abbreviated", 21098 context: "standalone" 21099 }); 21100 // T 21101 case "ccccc": 21102 return localize2.day(dayOfWeek, { 21103 width: "narrow", 21104 context: "standalone" 21105 }); 21106 // Tu 21107 case "cccccc": 21108 return localize2.day(dayOfWeek, { 21109 width: "short", 21110 context: "standalone" 21111 }); 21112 // Tuesday 21113 case "cccc": 21114 default: 21115 return localize2.day(dayOfWeek, { 21116 width: "wide", 21117 context: "standalone" 21118 }); 21119 } 21120 }, 21121 // ISO day of week 21122 i: function(date, token, localize2) { 21123 const dayOfWeek = date.getDay(); 21124 const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek; 21125 switch (token) { 21126 // 2 21127 case "i": 21128 return String(isoDayOfWeek); 21129 // 02 21130 case "ii": 21131 return addLeadingZeros(isoDayOfWeek, token.length); 21132 // 2nd 21133 case "io": 21134 return localize2.ordinalNumber(isoDayOfWeek, { unit: "day" }); 21135 // Tue 21136 case "iii": 21137 return localize2.day(dayOfWeek, { 21138 width: "abbreviated", 21139 context: "formatting" 21140 }); 21141 // T 21142 case "iiiii": 21143 return localize2.day(dayOfWeek, { 21144 width: "narrow", 21145 context: "formatting" 21146 }); 21147 // Tu 21148 case "iiiiii": 21149 return localize2.day(dayOfWeek, { 21150 width: "short", 21151 context: "formatting" 21152 }); 21153 // Tuesday 21154 case "iiii": 21155 default: 21156 return localize2.day(dayOfWeek, { 21157 width: "wide", 21158 context: "formatting" 21159 }); 21160 } 21161 }, 21162 // AM or PM 21163 a: function(date, token, localize2) { 21164 const hours = date.getHours(); 21165 const dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; 21166 switch (token) { 21167 case "a": 21168 case "aa": 21169 return localize2.dayPeriod(dayPeriodEnumValue, { 21170 width: "abbreviated", 21171 context: "formatting" 21172 }); 21173 case "aaa": 21174 return localize2.dayPeriod(dayPeriodEnumValue, { 21175 width: "abbreviated", 21176 context: "formatting" 21177 }).toLowerCase(); 21178 case "aaaaa": 21179 return localize2.dayPeriod(dayPeriodEnumValue, { 21180 width: "narrow", 21181 context: "formatting" 21182 }); 21183 case "aaaa": 21184 default: 21185 return localize2.dayPeriod(dayPeriodEnumValue, { 21186 width: "wide", 21187 context: "formatting" 21188 }); 21189 } 21190 }, 21191 // AM, PM, midnight, noon 21192 b: function(date, token, localize2) { 21193 const hours = date.getHours(); 21194 let dayPeriodEnumValue; 21195 if (hours === 12) { 21196 dayPeriodEnumValue = dayPeriodEnum.noon; 21197 } else if (hours === 0) { 21198 dayPeriodEnumValue = dayPeriodEnum.midnight; 21199 } else { 21200 dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am"; 21201 } 21202 switch (token) { 21203 case "b": 21204 case "bb": 21205 return localize2.dayPeriod(dayPeriodEnumValue, { 21206 width: "abbreviated", 21207 context: "formatting" 21208 }); 21209 case "bbb": 21210 return localize2.dayPeriod(dayPeriodEnumValue, { 21211 width: "abbreviated", 21212 context: "formatting" 21213 }).toLowerCase(); 21214 case "bbbbb": 21215 return localize2.dayPeriod(dayPeriodEnumValue, { 21216 width: "narrow", 21217 context: "formatting" 21218 }); 21219 case "bbbb": 21220 default: 21221 return localize2.dayPeriod(dayPeriodEnumValue, { 21222 width: "wide", 21223 context: "formatting" 21224 }); 21225 } 21226 }, 21227 // in the morning, in the afternoon, in the evening, at night 21228 B: function(date, token, localize2) { 21229 const hours = date.getHours(); 21230 let dayPeriodEnumValue; 21231 if (hours >= 17) { 21232 dayPeriodEnumValue = dayPeriodEnum.evening; 21233 } else if (hours >= 12) { 21234 dayPeriodEnumValue = dayPeriodEnum.afternoon; 21235 } else if (hours >= 4) { 21236 dayPeriodEnumValue = dayPeriodEnum.morning; 21237 } else { 21238 dayPeriodEnumValue = dayPeriodEnum.night; 21239 } 21240 switch (token) { 21241 case "B": 21242 case "BB": 21243 case "BBB": 21244 return localize2.dayPeriod(dayPeriodEnumValue, { 21245 width: "abbreviated", 21246 context: "formatting" 21247 }); 21248 case "BBBBB": 21249 return localize2.dayPeriod(dayPeriodEnumValue, { 21250 width: "narrow", 21251 context: "formatting" 21252 }); 21253 case "BBBB": 21254 default: 21255 return localize2.dayPeriod(dayPeriodEnumValue, { 21256 width: "wide", 21257 context: "formatting" 21258 }); 21259 } 21260 }, 21261 // Hour [1-12] 21262 h: function(date, token, localize2) { 21263 if (token === "ho") { 21264 let hours = date.getHours() % 12; 21265 if (hours === 0) hours = 12; 21266 return localize2.ordinalNumber(hours, { unit: "hour" }); 21267 } 21268 return lightFormatters.h(date, token); 21269 }, 21270 // Hour [0-23] 21271 H: function(date, token, localize2) { 21272 if (token === "Ho") { 21273 return localize2.ordinalNumber(date.getHours(), { unit: "hour" }); 21274 } 21275 return lightFormatters.H(date, token); 21276 }, 21277 // Hour [0-11] 21278 K: function(date, token, localize2) { 21279 const hours = date.getHours() % 12; 21280 if (token === "Ko") { 21281 return localize2.ordinalNumber(hours, { unit: "hour" }); 21282 } 21283 return addLeadingZeros(hours, token.length); 21284 }, 21285 // Hour [1-24] 21286 k: function(date, token, localize2) { 21287 let hours = date.getHours(); 21288 if (hours === 0) hours = 24; 21289 if (token === "ko") { 21290 return localize2.ordinalNumber(hours, { unit: "hour" }); 21291 } 21292 return addLeadingZeros(hours, token.length); 21293 }, 21294 // Minute 21295 m: function(date, token, localize2) { 21296 if (token === "mo") { 21297 return localize2.ordinalNumber(date.getMinutes(), { unit: "minute" }); 21298 } 21299 return lightFormatters.m(date, token); 21300 }, 21301 // Second 21302 s: function(date, token, localize2) { 21303 if (token === "so") { 21304 return localize2.ordinalNumber(date.getSeconds(), { unit: "second" }); 21305 } 21306 return lightFormatters.s(date, token); 21307 }, 21308 // Fraction of second 21309 S: function(date, token) { 21310 return lightFormatters.S(date, token); 21311 }, 21312 // Timezone (ISO-8601. If offset is 0, output is always `'Z'`) 21313 X: function(date, token, _localize) { 21314 const timezoneOffset = date.getTimezoneOffset(); 21315 if (timezoneOffset === 0) { 21316 return "Z"; 21317 } 21318 switch (token) { 21319 // Hours and optional minutes 21320 case "X": 21321 return formatTimezoneWithOptionalMinutes(timezoneOffset); 21322 // Hours, minutes and optional seconds without `:` delimiter 21323 // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets 21324 // so this token always has the same output as `XX` 21325 case "XXXX": 21326 case "XX": 21327 return formatTimezone(timezoneOffset); 21328 // Hours, minutes and optional seconds with `:` delimiter 21329 // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets 21330 // so this token always has the same output as `XXX` 21331 case "XXXXX": 21332 case "XXX": 21333 // Hours and minutes with `:` delimiter 21334 default: 21335 return formatTimezone(timezoneOffset, ":"); 21336 } 21337 }, 21338 // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent) 21339 x: function(date, token, _localize) { 21340 const timezoneOffset = date.getTimezoneOffset(); 21341 switch (token) { 21342 // Hours and optional minutes 21343 case "x": 21344 return formatTimezoneWithOptionalMinutes(timezoneOffset); 21345 // Hours, minutes and optional seconds without `:` delimiter 21346 // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets 21347 // so this token always has the same output as `xx` 21348 case "xxxx": 21349 case "xx": 21350 return formatTimezone(timezoneOffset); 21351 // Hours, minutes and optional seconds with `:` delimiter 21352 // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets 21353 // so this token always has the same output as `xxx` 21354 case "xxxxx": 21355 case "xxx": 21356 // Hours and minutes with `:` delimiter 21357 default: 21358 return formatTimezone(timezoneOffset, ":"); 21359 } 21360 }, 21361 // Timezone (GMT) 21362 O: function(date, token, _localize) { 21363 const timezoneOffset = date.getTimezoneOffset(); 21364 switch (token) { 21365 // Short 21366 case "O": 21367 case "OO": 21368 case "OOO": 21369 return "GMT" + formatTimezoneShort(timezoneOffset, ":"); 21370 // Long 21371 case "OOOO": 21372 default: 21373 return "GMT" + formatTimezone(timezoneOffset, ":"); 21374 } 21375 }, 21376 // Timezone (specific non-location) 21377 z: function(date, token, _localize) { 21378 const timezoneOffset = date.getTimezoneOffset(); 21379 switch (token) { 21380 // Short 21381 case "z": 21382 case "zz": 21383 case "zzz": 21384 return "GMT" + formatTimezoneShort(timezoneOffset, ":"); 21385 // Long 21386 case "zzzz": 21387 default: 21388 return "GMT" + formatTimezone(timezoneOffset, ":"); 21389 } 21390 }, 21391 // Seconds timestamp 21392 t: function(date, token, _localize) { 21393 const timestamp = Math.trunc(+date / 1e3); 21394 return addLeadingZeros(timestamp, token.length); 21395 }, 21396 // Milliseconds timestamp 21397 T: function(date, token, _localize) { 21398 return addLeadingZeros(+date, token.length); 21399 } 21400 }; 21401 function formatTimezoneShort(offset4, delimiter = "") { 21402 const sign = offset4 > 0 ? "-" : "+"; 21403 const absOffset = Math.abs(offset4); 21404 const hours = Math.trunc(absOffset / 60); 21405 const minutes = absOffset % 60; 21406 if (minutes === 0) { 21407 return sign + String(hours); 21408 } 21409 return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2); 21410 } 21411 function formatTimezoneWithOptionalMinutes(offset4, delimiter) { 21412 if (offset4 % 60 === 0) { 21413 const sign = offset4 > 0 ? "-" : "+"; 21414 return sign + addLeadingZeros(Math.abs(offset4) / 60, 2); 21415 } 21416 return formatTimezone(offset4, delimiter); 21417 } 21418 function formatTimezone(offset4, delimiter = "") { 21419 const sign = offset4 > 0 ? "-" : "+"; 21420 const absOffset = Math.abs(offset4); 21421 const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2); 21422 const minutes = addLeadingZeros(absOffset % 60, 2); 21423 return sign + hours + delimiter + minutes; 21424 } 21425 21426 // node_modules/date-fns/_lib/format/longFormatters.js 21427 var dateLongFormatter = (pattern, formatLong2) => { 21428 switch (pattern) { 21429 case "P": 21430 return formatLong2.date({ width: "short" }); 21431 case "PP": 21432 return formatLong2.date({ width: "medium" }); 21433 case "PPP": 21434 return formatLong2.date({ width: "long" }); 21435 case "PPPP": 21436 default: 21437 return formatLong2.date({ width: "full" }); 21438 } 21439 }; 21440 var timeLongFormatter = (pattern, formatLong2) => { 21441 switch (pattern) { 21442 case "p": 21443 return formatLong2.time({ width: "short" }); 21444 case "pp": 21445 return formatLong2.time({ width: "medium" }); 21446 case "ppp": 21447 return formatLong2.time({ width: "long" }); 21448 case "pppp": 21449 default: 21450 return formatLong2.time({ width: "full" }); 21451 } 21452 }; 21453 var dateTimeLongFormatter = (pattern, formatLong2) => { 21454 const matchResult = pattern.match(/(P+)(p+)?/) || []; 21455 const datePattern = matchResult[1]; 21456 const timePattern = matchResult[2]; 21457 if (!timePattern) { 21458 return dateLongFormatter(pattern, formatLong2); 21459 } 21460 let dateTimeFormat; 21461 switch (datePattern) { 21462 case "P": 21463 dateTimeFormat = formatLong2.dateTime({ width: "short" }); 21464 break; 21465 case "PP": 21466 dateTimeFormat = formatLong2.dateTime({ width: "medium" }); 21467 break; 21468 case "PPP": 21469 dateTimeFormat = formatLong2.dateTime({ width: "long" }); 21470 break; 21471 case "PPPP": 21472 default: 21473 dateTimeFormat = formatLong2.dateTime({ width: "full" }); 21474 break; 21475 } 21476 return dateTimeFormat.replace("{{date}}", dateLongFormatter(datePattern, formatLong2)).replace("{{time}}", timeLongFormatter(timePattern, formatLong2)); 21477 }; 21478 var longFormatters = { 21479 p: timeLongFormatter, 21480 P: dateTimeLongFormatter 21481 }; 21482 21483 // node_modules/date-fns/_lib/protectedTokens.js 21484 var dayOfYearTokenRE = /^D+$/; 21485 var weekYearTokenRE = /^Y+$/; 21486 var throwTokens = ["D", "DD", "YY", "YYYY"]; 21487 function isProtectedDayOfYearToken(token) { 21488 return dayOfYearTokenRE.test(token); 21489 } 21490 function isProtectedWeekYearToken(token) { 21491 return weekYearTokenRE.test(token); 21492 } 21493 function warnOrThrowProtectedError(token, format7, input) { 21494 const _message = message(token, format7, input); 21495 console.warn(_message); 21496 if (throwTokens.includes(token)) throw new RangeError(_message); 21497 } 21498 function message(token, format7, input) { 21499 const subject = token[0] === "Y" ? "years" : "days of the month"; 21500 return `Use \`$token.toLowerCase()}\` instead of \`$token}\` (in \`$format7}\`) for formatting $subject} to the input \`$input}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`; 21501 } 21502 21503 // node_modules/date-fns/format.js 21504 var formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g; 21505 var longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; 21506 var escapedStringRegExp = /^'([^]*?)'?$/; 21507 var doubleQuoteRegExp = /''/g; 21508 var unescapedLatinCharacterRegExp = /[a-zA-Z]/; 21509 function format(date, formatStr, options) { 21510 const defaultOptions2 = getDefaultOptions(); 21511 const locale = options?.locale ?? defaultOptions2.locale ?? enUS; 21512 const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; 21513 const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0; 21514 const originalDate = toDate(date, options?.in); 21515 if (!isValid(originalDate)) { 21516 throw new RangeError("Invalid time value"); 21517 } 21518 let parts = formatStr.match(longFormattingTokensRegExp).map((substring) => { 21519 const firstCharacter = substring[0]; 21520 if (firstCharacter === "p" || firstCharacter === "P") { 21521 const longFormatter = longFormatters[firstCharacter]; 21522 return longFormatter(substring, locale.formatLong); 21523 } 21524 return substring; 21525 }).join("").match(formattingTokensRegExp).map((substring) => { 21526 if (substring === "''") { 21527 return { isToken: false, value: "'" }; 21528 } 21529 const firstCharacter = substring[0]; 21530 if (firstCharacter === "'") { 21531 return { isToken: false, value: cleanEscapedString(substring) }; 21532 } 21533 if (formatters[firstCharacter]) { 21534 return { isToken: true, value: substring }; 21535 } 21536 if (firstCharacter.match(unescapedLatinCharacterRegExp)) { 21537 throw new RangeError( 21538 "Format string contains an unescaped latin alphabet character `" + firstCharacter + "`" 21539 ); 21540 } 21541 return { isToken: false, value: substring }; 21542 }); 21543 if (locale.localize.preprocessor) { 21544 parts = locale.localize.preprocessor(originalDate, parts); 21545 } 21546 const formatterOptions = { 21547 firstWeekContainsDate, 21548 weekStartsOn, 21549 locale 21550 }; 21551 return parts.map((part) => { 21552 if (!part.isToken) return part.value; 21553 const token = part.value; 21554 if (!options?.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token) || !options?.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) { 21555 warnOrThrowProtectedError(token, formatStr, String(date)); 21556 } 21557 const formatter = formatters[token[0]]; 21558 return formatter(originalDate, token, locale.localize, formatterOptions); 21559 }).join(""); 21560 } 21561 function cleanEscapedString(input) { 21562 const matched = input.match(escapedStringRegExp); 21563 if (!matched) { 21564 return input; 21565 } 21566 return matched[1].replace(doubleQuoteRegExp, "'"); 21567 } 21568 21569 // node_modules/date-fns/getDaysInMonth.js 21570 function getDaysInMonth(date, options) { 21571 const _date = toDate(date, options?.in); 21572 const year = _date.getFullYear(); 21573 const monthIndex = _date.getMonth(); 21574 const lastDayOfMonth = constructFrom(_date, 0); 21575 lastDayOfMonth.setFullYear(year, monthIndex + 1, 0); 21576 lastDayOfMonth.setHours(0, 0, 0, 0); 21577 return lastDayOfMonth.getDate(); 21578 } 21579 21580 // node_modules/date-fns/getDefaultOptions.js 21581 function getDefaultOptions2() { 21582 return Object.assign({}, getDefaultOptions()); 21583 } 21584 21585 // node_modules/date-fns/getISODay.js 21586 function getISODay(date, options) { 21587 const day = toDate(date, options?.in).getDay(); 21588 return day === 0 ? 7 : day; 21589 } 21590 21591 // node_modules/date-fns/getMonth.js 21592 function getMonth(date, options) { 21593 return toDate(date, options?.in).getMonth(); 21594 } 21595 21596 // node_modules/date-fns/getYear.js 21597 function getYear(date, options) { 21598 return toDate(date, options?.in).getFullYear(); 21599 } 21600 21601 // node_modules/date-fns/isAfter.js 21602 function isAfter(date, dateToCompare) { 21603 return +toDate(date) > +toDate(dateToCompare); 21604 } 21605 21606 // node_modules/date-fns/isBefore.js 21607 function isBefore(date, dateToCompare) { 21608 return +toDate(date) < +toDate(dateToCompare); 21609 } 21610 21611 // node_modules/date-fns/transpose.js 21612 function transpose(date, constructor) { 21613 const date_ = isConstructor(constructor) ? new constructor(0) : constructFrom(constructor, 0); 21614 date_.setFullYear(date.getFullYear(), date.getMonth(), date.getDate()); 21615 date_.setHours( 21616 date.getHours(), 21617 date.getMinutes(), 21618 date.getSeconds(), 21619 date.getMilliseconds() 21620 ); 21621 return date_; 21622 } 21623 function isConstructor(constructor) { 21624 return typeof constructor === "function" && constructor.prototype?.constructor === constructor; 21625 } 21626 21627 // node_modules/date-fns/parse/_lib/Setter.js 21628 var TIMEZONE_UNIT_PRIORITY = 10; 21629 var Setter = class { 21630 subPriority = 0; 21631 validate(_utcDate, _options) { 21632 return true; 21633 } 21634 }; 21635 var ValueSetter = class extends Setter { 21636 constructor(value, validateValue, setValue, priority, subPriority) { 21637 super(); 21638 this.value = value; 21639 this.validateValue = validateValue; 21640 this.setValue = setValue; 21641 this.priority = priority; 21642 if (subPriority) { 21643 this.subPriority = subPriority; 21644 } 21645 } 21646 validate(date, options) { 21647 return this.validateValue(date, this.value, options); 21648 } 21649 set(date, flags, options) { 21650 return this.setValue(date, flags, this.value, options); 21651 } 21652 }; 21653 var DateTimezoneSetter = class extends Setter { 21654 priority = TIMEZONE_UNIT_PRIORITY; 21655 subPriority = -1; 21656 constructor(context, reference) { 21657 super(); 21658 this.context = context || ((date) => constructFrom(reference, date)); 21659 } 21660 set(date, flags) { 21661 if (flags.timestampIsSet) return date; 21662 return constructFrom(date, transpose(date, this.context)); 21663 } 21664 }; 21665 21666 // node_modules/date-fns/parse/_lib/Parser.js 21667 var Parser = class { 21668 run(dateString, token, match2, options) { 21669 const result = this.parse(dateString, token, match2, options); 21670 if (!result) { 21671 return null; 21672 } 21673 return { 21674 setter: new ValueSetter( 21675 result.value, 21676 this.validate, 21677 this.set, 21678 this.priority, 21679 this.subPriority 21680 ), 21681 rest: result.rest 21682 }; 21683 } 21684 validate(_utcDate, _value, _options) { 21685 return true; 21686 } 21687 }; 21688 21689 // node_modules/date-fns/parse/_lib/parsers/EraParser.js 21690 var EraParser = class extends Parser { 21691 priority = 140; 21692 parse(dateString, token, match2) { 21693 switch (token) { 21694 // AD, BC 21695 case "G": 21696 case "GG": 21697 case "GGG": 21698 return match2.era(dateString, { width: "abbreviated" }) || match2.era(dateString, { width: "narrow" }); 21699 // A, B 21700 case "GGGGG": 21701 return match2.era(dateString, { width: "narrow" }); 21702 // Anno Domini, Before Christ 21703 case "GGGG": 21704 default: 21705 return match2.era(dateString, { width: "wide" }) || match2.era(dateString, { width: "abbreviated" }) || match2.era(dateString, { width: "narrow" }); 21706 } 21707 } 21708 set(date, flags, value) { 21709 flags.era = value; 21710 date.setFullYear(value, 0, 1); 21711 date.setHours(0, 0, 0, 0); 21712 return date; 21713 } 21714 incompatibleTokens = ["R", "u", "t", "T"]; 21715 }; 21716 21717 // node_modules/date-fns/parse/_lib/constants.js 21718 var numericPatterns = { 21719 month: /^(1[0-2]|0?\d)/, 21720 // 0 to 12 21721 date: /^(3[0-1]|[0-2]?\d)/, 21722 // 0 to 31 21723 dayOfYear: /^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/, 21724 // 0 to 366 21725 week: /^(5[0-3]|[0-4]?\d)/, 21726 // 0 to 53 21727 hour23h: /^(2[0-3]|[0-1]?\d)/, 21728 // 0 to 23 21729 hour24h: /^(2[0-4]|[0-1]?\d)/, 21730 // 0 to 24 21731 hour11h: /^(1[0-1]|0?\d)/, 21732 // 0 to 11 21733 hour12h: /^(1[0-2]|0?\d)/, 21734 // 0 to 12 21735 minute: /^[0-5]?\d/, 21736 // 0 to 59 21737 second: /^[0-5]?\d/, 21738 // 0 to 59 21739 singleDigit: /^\d/, 21740 // 0 to 9 21741 twoDigits: /^\d{1,2}/, 21742 // 0 to 99 21743 threeDigits: /^\d{1,3}/, 21744 // 0 to 999 21745 fourDigits: /^\d{1,4}/, 21746 // 0 to 9999 21747 anyDigitsSigned: /^-?\d+/, 21748 singleDigitSigned: /^-?\d/, 21749 // 0 to 9, -0 to -9 21750 twoDigitsSigned: /^-?\d{1,2}/, 21751 // 0 to 99, -0 to -99 21752 threeDigitsSigned: /^-?\d{1,3}/, 21753 // 0 to 999, -0 to -999 21754 fourDigitsSigned: /^-?\d{1,4}/ 21755 // 0 to 9999, -0 to -9999 21756 }; 21757 var timezonePatterns = { 21758 basicOptionalMinutes: /^([+-])(\d{2})(\d{2})?|Z/, 21759 basic: /^([+-])(\d{2})(\d{2})|Z/, 21760 basicOptionalSeconds: /^([+-])(\d{2})(\d{2})((\d{2}))?|Z/, 21761 extended: /^([+-])(\d{2}):(\d{2})|Z/, 21762 extendedOptionalSeconds: /^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/ 21763 }; 21764 21765 // node_modules/date-fns/parse/_lib/utils.js 21766 function mapValue(parseFnResult, mapFn) { 21767 if (!parseFnResult) { 21768 return parseFnResult; 21769 } 21770 return { 21771 value: mapFn(parseFnResult.value), 21772 rest: parseFnResult.rest 21773 }; 21774 } 21775 function parseNumericPattern(pattern, dateString) { 21776 const matchResult = dateString.match(pattern); 21777 if (!matchResult) { 21778 return null; 21779 } 21780 return { 21781 value: parseInt(matchResult[0], 10), 21782 rest: dateString.slice(matchResult[0].length) 21783 }; 21784 } 21785 function parseTimezonePattern(pattern, dateString) { 21786 const matchResult = dateString.match(pattern); 21787 if (!matchResult) { 21788 return null; 21789 } 21790 if (matchResult[0] === "Z") { 21791 return { 21792 value: 0, 21793 rest: dateString.slice(1) 21794 }; 21795 } 21796 const sign = matchResult[1] === "+" ? 1 : -1; 21797 const hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0; 21798 const minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0; 21799 const seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0; 21800 return { 21801 value: sign * (hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * millisecondsInSecond), 21802 rest: dateString.slice(matchResult[0].length) 21803 }; 21804 } 21805 function parseAnyDigitsSigned(dateString) { 21806 return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString); 21807 } 21808 function parseNDigits(n2, dateString) { 21809 switch (n2) { 21810 case 1: 21811 return parseNumericPattern(numericPatterns.singleDigit, dateString); 21812 case 2: 21813 return parseNumericPattern(numericPatterns.twoDigits, dateString); 21814 case 3: 21815 return parseNumericPattern(numericPatterns.threeDigits, dateString); 21816 case 4: 21817 return parseNumericPattern(numericPatterns.fourDigits, dateString); 21818 default: 21819 return parseNumericPattern(new RegExp("^\\d{1," + n2 + "}"), dateString); 21820 } 21821 } 21822 function parseNDigitsSigned(n2, dateString) { 21823 switch (n2) { 21824 case 1: 21825 return parseNumericPattern(numericPatterns.singleDigitSigned, dateString); 21826 case 2: 21827 return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString); 21828 case 3: 21829 return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString); 21830 case 4: 21831 return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString); 21832 default: 21833 return parseNumericPattern(new RegExp("^-?\\d{1," + n2 + "}"), dateString); 21834 } 21835 } 21836 function dayPeriodEnumToHours(dayPeriod) { 21837 switch (dayPeriod) { 21838 case "morning": 21839 return 4; 21840 case "evening": 21841 return 17; 21842 case "pm": 21843 case "noon": 21844 case "afternoon": 21845 return 12; 21846 case "am": 21847 case "midnight": 21848 case "night": 21849 default: 21850 return 0; 21851 } 21852 } 21853 function normalizeTwoDigitYear(twoDigitYear, currentYear) { 21854 const isCommonEra = currentYear > 0; 21855 const absCurrentYear = isCommonEra ? currentYear : 1 - currentYear; 21856 let result; 21857 if (absCurrentYear <= 50) { 21858 result = twoDigitYear || 100; 21859 } else { 21860 const rangeEnd = absCurrentYear + 50; 21861 const rangeEndCentury = Math.trunc(rangeEnd / 100) * 100; 21862 const isPreviousCentury = twoDigitYear >= rangeEnd % 100; 21863 result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0); 21864 } 21865 return isCommonEra ? result : 1 - result; 21866 } 21867 function isLeapYearIndex(year) { 21868 return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0; 21869 } 21870 21871 // node_modules/date-fns/parse/_lib/parsers/YearParser.js 21872 var YearParser = class extends Parser { 21873 priority = 130; 21874 incompatibleTokens = ["Y", "R", "u", "w", "I", "i", "e", "c", "t", "T"]; 21875 parse(dateString, token, match2) { 21876 const valueCallback = (year) => ({ 21877 year, 21878 isTwoDigitYear: token === "yy" 21879 }); 21880 switch (token) { 21881 case "y": 21882 return mapValue(parseNDigits(4, dateString), valueCallback); 21883 case "yo": 21884 return mapValue( 21885 match2.ordinalNumber(dateString, { 21886 unit: "year" 21887 }), 21888 valueCallback 21889 ); 21890 default: 21891 return mapValue(parseNDigits(token.length, dateString), valueCallback); 21892 } 21893 } 21894 validate(_date, value) { 21895 return value.isTwoDigitYear || value.year > 0; 21896 } 21897 set(date, flags, value) { 21898 const currentYear = date.getFullYear(); 21899 if (value.isTwoDigitYear) { 21900 const normalizedTwoDigitYear = normalizeTwoDigitYear( 21901 value.year, 21902 currentYear 21903 ); 21904 date.setFullYear(normalizedTwoDigitYear, 0, 1); 21905 date.setHours(0, 0, 0, 0); 21906 return date; 21907 } 21908 const year = !("era" in flags) || flags.era === 1 ? value.year : 1 - value.year; 21909 date.setFullYear(year, 0, 1); 21910 date.setHours(0, 0, 0, 0); 21911 return date; 21912 } 21913 }; 21914 21915 // node_modules/date-fns/parse/_lib/parsers/LocalWeekYearParser.js 21916 var LocalWeekYearParser = class extends Parser { 21917 priority = 130; 21918 parse(dateString, token, match2) { 21919 const valueCallback = (year) => ({ 21920 year, 21921 isTwoDigitYear: token === "YY" 21922 }); 21923 switch (token) { 21924 case "Y": 21925 return mapValue(parseNDigits(4, dateString), valueCallback); 21926 case "Yo": 21927 return mapValue( 21928 match2.ordinalNumber(dateString, { 21929 unit: "year" 21930 }), 21931 valueCallback 21932 ); 21933 default: 21934 return mapValue(parseNDigits(token.length, dateString), valueCallback); 21935 } 21936 } 21937 validate(_date, value) { 21938 return value.isTwoDigitYear || value.year > 0; 21939 } 21940 set(date, flags, value, options) { 21941 const currentYear = getWeekYear(date, options); 21942 if (value.isTwoDigitYear) { 21943 const normalizedTwoDigitYear = normalizeTwoDigitYear( 21944 value.year, 21945 currentYear 21946 ); 21947 date.setFullYear( 21948 normalizedTwoDigitYear, 21949 0, 21950 options.firstWeekContainsDate 21951 ); 21952 date.setHours(0, 0, 0, 0); 21953 return startOfWeek(date, options); 21954 } 21955 const year = !("era" in flags) || flags.era === 1 ? value.year : 1 - value.year; 21956 date.setFullYear(year, 0, options.firstWeekContainsDate); 21957 date.setHours(0, 0, 0, 0); 21958 return startOfWeek(date, options); 21959 } 21960 incompatibleTokens = [ 21961 "y", 21962 "R", 21963 "u", 21964 "Q", 21965 "q", 21966 "M", 21967 "L", 21968 "I", 21969 "d", 21970 "D", 21971 "i", 21972 "t", 21973 "T" 21974 ]; 21975 }; 21976 21977 // node_modules/date-fns/parse/_lib/parsers/ISOWeekYearParser.js 21978 var ISOWeekYearParser = class extends Parser { 21979 priority = 130; 21980 parse(dateString, token) { 21981 if (token === "R") { 21982 return parseNDigitsSigned(4, dateString); 21983 } 21984 return parseNDigitsSigned(token.length, dateString); 21985 } 21986 set(date, _flags, value) { 21987 const firstWeekOfYear = constructFrom(date, 0); 21988 firstWeekOfYear.setFullYear(value, 0, 4); 21989 firstWeekOfYear.setHours(0, 0, 0, 0); 21990 return startOfISOWeek(firstWeekOfYear); 21991 } 21992 incompatibleTokens = [ 21993 "G", 21994 "y", 21995 "Y", 21996 "u", 21997 "Q", 21998 "q", 21999 "M", 22000 "L", 22001 "w", 22002 "d", 22003 "D", 22004 "e", 22005 "c", 22006 "t", 22007 "T" 22008 ]; 22009 }; 22010 22011 // node_modules/date-fns/parse/_lib/parsers/ExtendedYearParser.js 22012 var ExtendedYearParser = class extends Parser { 22013 priority = 130; 22014 parse(dateString, token) { 22015 if (token === "u") { 22016 return parseNDigitsSigned(4, dateString); 22017 } 22018 return parseNDigitsSigned(token.length, dateString); 22019 } 22020 set(date, _flags, value) { 22021 date.setFullYear(value, 0, 1); 22022 date.setHours(0, 0, 0, 0); 22023 return date; 22024 } 22025 incompatibleTokens = ["G", "y", "Y", "R", "w", "I", "i", "e", "c", "t", "T"]; 22026 }; 22027 22028 // node_modules/date-fns/parse/_lib/parsers/QuarterParser.js 22029 var QuarterParser = class extends Parser { 22030 priority = 120; 22031 parse(dateString, token, match2) { 22032 switch (token) { 22033 // 1, 2, 3, 4 22034 case "Q": 22035 case "QQ": 22036 return parseNDigits(token.length, dateString); 22037 // 1st, 2nd, 3rd, 4th 22038 case "Qo": 22039 return match2.ordinalNumber(dateString, { unit: "quarter" }); 22040 // Q1, Q2, Q3, Q4 22041 case "QQQ": 22042 return match2.quarter(dateString, { 22043 width: "abbreviated", 22044 context: "formatting" 22045 }) || match2.quarter(dateString, { 22046 width: "narrow", 22047 context: "formatting" 22048 }); 22049 // 1, 2, 3, 4 (narrow quarter; could be not numerical) 22050 case "QQQQQ": 22051 return match2.quarter(dateString, { 22052 width: "narrow", 22053 context: "formatting" 22054 }); 22055 // 1st quarter, 2nd quarter, ... 22056 case "QQQQ": 22057 default: 22058 return match2.quarter(dateString, { 22059 width: "wide", 22060 context: "formatting" 22061 }) || match2.quarter(dateString, { 22062 width: "abbreviated", 22063 context: "formatting" 22064 }) || match2.quarter(dateString, { 22065 width: "narrow", 22066 context: "formatting" 22067 }); 22068 } 22069 } 22070 validate(_date, value) { 22071 return value >= 1 && value <= 4; 22072 } 22073 set(date, _flags, value) { 22074 date.setMonth((value - 1) * 3, 1); 22075 date.setHours(0, 0, 0, 0); 22076 return date; 22077 } 22078 incompatibleTokens = [ 22079 "Y", 22080 "R", 22081 "q", 22082 "M", 22083 "L", 22084 "w", 22085 "I", 22086 "d", 22087 "D", 22088 "i", 22089 "e", 22090 "c", 22091 "t", 22092 "T" 22093 ]; 22094 }; 22095 22096 // node_modules/date-fns/parse/_lib/parsers/StandAloneQuarterParser.js 22097 var StandAloneQuarterParser = class extends Parser { 22098 priority = 120; 22099 parse(dateString, token, match2) { 22100 switch (token) { 22101 // 1, 2, 3, 4 22102 case "q": 22103 case "qq": 22104 return parseNDigits(token.length, dateString); 22105 // 1st, 2nd, 3rd, 4th 22106 case "qo": 22107 return match2.ordinalNumber(dateString, { unit: "quarter" }); 22108 // Q1, Q2, Q3, Q4 22109 case "qqq": 22110 return match2.quarter(dateString, { 22111 width: "abbreviated", 22112 context: "standalone" 22113 }) || match2.quarter(dateString, { 22114 width: "narrow", 22115 context: "standalone" 22116 }); 22117 // 1, 2, 3, 4 (narrow quarter; could be not numerical) 22118 case "qqqqq": 22119 return match2.quarter(dateString, { 22120 width: "narrow", 22121 context: "standalone" 22122 }); 22123 // 1st quarter, 2nd quarter, ... 22124 case "qqqq": 22125 default: 22126 return match2.quarter(dateString, { 22127 width: "wide", 22128 context: "standalone" 22129 }) || match2.quarter(dateString, { 22130 width: "abbreviated", 22131 context: "standalone" 22132 }) || match2.quarter(dateString, { 22133 width: "narrow", 22134 context: "standalone" 22135 }); 22136 } 22137 } 22138 validate(_date, value) { 22139 return value >= 1 && value <= 4; 22140 } 22141 set(date, _flags, value) { 22142 date.setMonth((value - 1) * 3, 1); 22143 date.setHours(0, 0, 0, 0); 22144 return date; 22145 } 22146 incompatibleTokens = [ 22147 "Y", 22148 "R", 22149 "Q", 22150 "M", 22151 "L", 22152 "w", 22153 "I", 22154 "d", 22155 "D", 22156 "i", 22157 "e", 22158 "c", 22159 "t", 22160 "T" 22161 ]; 22162 }; 22163 22164 // node_modules/date-fns/parse/_lib/parsers/MonthParser.js 22165 var MonthParser = class extends Parser { 22166 incompatibleTokens = [ 22167 "Y", 22168 "R", 22169 "q", 22170 "Q", 22171 "L", 22172 "w", 22173 "I", 22174 "D", 22175 "i", 22176 "e", 22177 "c", 22178 "t", 22179 "T" 22180 ]; 22181 priority = 110; 22182 parse(dateString, token, match2) { 22183 const valueCallback = (value) => value - 1; 22184 switch (token) { 22185 // 1, 2, ..., 12 22186 case "M": 22187 return mapValue( 22188 parseNumericPattern(numericPatterns.month, dateString), 22189 valueCallback 22190 ); 22191 // 01, 02, ..., 12 22192 case "MM": 22193 return mapValue(parseNDigits(2, dateString), valueCallback); 22194 // 1st, 2nd, ..., 12th 22195 case "Mo": 22196 return mapValue( 22197 match2.ordinalNumber(dateString, { 22198 unit: "month" 22199 }), 22200 valueCallback 22201 ); 22202 // Jan, Feb, ..., Dec 22203 case "MMM": 22204 return match2.month(dateString, { 22205 width: "abbreviated", 22206 context: "formatting" 22207 }) || match2.month(dateString, { width: "narrow", context: "formatting" }); 22208 // J, F, ..., D 22209 case "MMMMM": 22210 return match2.month(dateString, { 22211 width: "narrow", 22212 context: "formatting" 22213 }); 22214 // January, February, ..., December 22215 case "MMMM": 22216 default: 22217 return match2.month(dateString, { width: "wide", context: "formatting" }) || match2.month(dateString, { 22218 width: "abbreviated", 22219 context: "formatting" 22220 }) || match2.month(dateString, { width: "narrow", context: "formatting" }); 22221 } 22222 } 22223 validate(_date, value) { 22224 return value >= 0 && value <= 11; 22225 } 22226 set(date, _flags, value) { 22227 date.setMonth(value, 1); 22228 date.setHours(0, 0, 0, 0); 22229 return date; 22230 } 22231 }; 22232 22233 // node_modules/date-fns/parse/_lib/parsers/StandAloneMonthParser.js 22234 var StandAloneMonthParser = class extends Parser { 22235 priority = 110; 22236 parse(dateString, token, match2) { 22237 const valueCallback = (value) => value - 1; 22238 switch (token) { 22239 // 1, 2, ..., 12 22240 case "L": 22241 return mapValue( 22242 parseNumericPattern(numericPatterns.month, dateString), 22243 valueCallback 22244 ); 22245 // 01, 02, ..., 12 22246 case "LL": 22247 return mapValue(parseNDigits(2, dateString), valueCallback); 22248 // 1st, 2nd, ..., 12th 22249 case "Lo": 22250 return mapValue( 22251 match2.ordinalNumber(dateString, { 22252 unit: "month" 22253 }), 22254 valueCallback 22255 ); 22256 // Jan, Feb, ..., Dec 22257 case "LLL": 22258 return match2.month(dateString, { 22259 width: "abbreviated", 22260 context: "standalone" 22261 }) || match2.month(dateString, { width: "narrow", context: "standalone" }); 22262 // J, F, ..., D 22263 case "LLLLL": 22264 return match2.month(dateString, { 22265 width: "narrow", 22266 context: "standalone" 22267 }); 22268 // January, February, ..., December 22269 case "LLLL": 22270 default: 22271 return match2.month(dateString, { width: "wide", context: "standalone" }) || match2.month(dateString, { 22272 width: "abbreviated", 22273 context: "standalone" 22274 }) || match2.month(dateString, { width: "narrow", context: "standalone" }); 22275 } 22276 } 22277 validate(_date, value) { 22278 return value >= 0 && value <= 11; 22279 } 22280 set(date, _flags, value) { 22281 date.setMonth(value, 1); 22282 date.setHours(0, 0, 0, 0); 22283 return date; 22284 } 22285 incompatibleTokens = [ 22286 "Y", 22287 "R", 22288 "q", 22289 "Q", 22290 "M", 22291 "w", 22292 "I", 22293 "D", 22294 "i", 22295 "e", 22296 "c", 22297 "t", 22298 "T" 22299 ]; 22300 }; 22301 22302 // node_modules/date-fns/setWeek.js 22303 function setWeek(date, week, options) { 22304 const date_ = toDate(date, options?.in); 22305 const diff = getWeek(date_, options) - week; 22306 date_.setDate(date_.getDate() - diff * 7); 22307 return toDate(date_, options?.in); 22308 } 22309 22310 // node_modules/date-fns/parse/_lib/parsers/LocalWeekParser.js 22311 var LocalWeekParser = class extends Parser { 22312 priority = 100; 22313 parse(dateString, token, match2) { 22314 switch (token) { 22315 case "w": 22316 return parseNumericPattern(numericPatterns.week, dateString); 22317 case "wo": 22318 return match2.ordinalNumber(dateString, { unit: "week" }); 22319 default: 22320 return parseNDigits(token.length, dateString); 22321 } 22322 } 22323 validate(_date, value) { 22324 return value >= 1 && value <= 53; 22325 } 22326 set(date, _flags, value, options) { 22327 return startOfWeek(setWeek(date, value, options), options); 22328 } 22329 incompatibleTokens = [ 22330 "y", 22331 "R", 22332 "u", 22333 "q", 22334 "Q", 22335 "M", 22336 "L", 22337 "I", 22338 "d", 22339 "D", 22340 "i", 22341 "t", 22342 "T" 22343 ]; 22344 }; 22345 22346 // node_modules/date-fns/setISOWeek.js 22347 function setISOWeek(date, week, options) { 22348 const _date = toDate(date, options?.in); 22349 const diff = getISOWeek(_date, options) - week; 22350 _date.setDate(_date.getDate() - diff * 7); 22351 return _date; 22352 } 22353 22354 // node_modules/date-fns/parse/_lib/parsers/ISOWeekParser.js 22355 var ISOWeekParser = class extends Parser { 22356 priority = 100; 22357 parse(dateString, token, match2) { 22358 switch (token) { 22359 case "I": 22360 return parseNumericPattern(numericPatterns.week, dateString); 22361 case "Io": 22362 return match2.ordinalNumber(dateString, { unit: "week" }); 22363 default: 22364 return parseNDigits(token.length, dateString); 22365 } 22366 } 22367 validate(_date, value) { 22368 return value >= 1 && value <= 53; 22369 } 22370 set(date, _flags, value) { 22371 return startOfISOWeek(setISOWeek(date, value)); 22372 } 22373 incompatibleTokens = [ 22374 "y", 22375 "Y", 22376 "u", 22377 "q", 22378 "Q", 22379 "M", 22380 "L", 22381 "w", 22382 "d", 22383 "D", 22384 "e", 22385 "c", 22386 "t", 22387 "T" 22388 ]; 22389 }; 22390 22391 // node_modules/date-fns/parse/_lib/parsers/DateParser.js 22392 var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; 22393 var DAYS_IN_MONTH_LEAP_YEAR = [ 22394 31, 22395 29, 22396 31, 22397 30, 22398 31, 22399 30, 22400 31, 22401 31, 22402 30, 22403 31, 22404 30, 22405 31 22406 ]; 22407 var DateParser = class extends Parser { 22408 priority = 90; 22409 subPriority = 1; 22410 parse(dateString, token, match2) { 22411 switch (token) { 22412 case "d": 22413 return parseNumericPattern(numericPatterns.date, dateString); 22414 case "do": 22415 return match2.ordinalNumber(dateString, { unit: "date" }); 22416 default: 22417 return parseNDigits(token.length, dateString); 22418 } 22419 } 22420 validate(date, value) { 22421 const year = date.getFullYear(); 22422 const isLeapYear = isLeapYearIndex(year); 22423 const month = date.getMonth(); 22424 if (isLeapYear) { 22425 return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month]; 22426 } else { 22427 return value >= 1 && value <= DAYS_IN_MONTH[month]; 22428 } 22429 } 22430 set(date, _flags, value) { 22431 date.setDate(value); 22432 date.setHours(0, 0, 0, 0); 22433 return date; 22434 } 22435 incompatibleTokens = [ 22436 "Y", 22437 "R", 22438 "q", 22439 "Q", 22440 "w", 22441 "I", 22442 "D", 22443 "i", 22444 "e", 22445 "c", 22446 "t", 22447 "T" 22448 ]; 22449 }; 22450 22451 // node_modules/date-fns/parse/_lib/parsers/DayOfYearParser.js 22452 var DayOfYearParser = class extends Parser { 22453 priority = 90; 22454 subpriority = 1; 22455 parse(dateString, token, match2) { 22456 switch (token) { 22457 case "D": 22458 case "DD": 22459 return parseNumericPattern(numericPatterns.dayOfYear, dateString); 22460 case "Do": 22461 return match2.ordinalNumber(dateString, { unit: "date" }); 22462 default: 22463 return parseNDigits(token.length, dateString); 22464 } 22465 } 22466 validate(date, value) { 22467 const year = date.getFullYear(); 22468 const isLeapYear = isLeapYearIndex(year); 22469 if (isLeapYear) { 22470 return value >= 1 && value <= 366; 22471 } else { 22472 return value >= 1 && value <= 365; 22473 } 22474 } 22475 set(date, _flags, value) { 22476 date.setMonth(0, value); 22477 date.setHours(0, 0, 0, 0); 22478 return date; 22479 } 22480 incompatibleTokens = [ 22481 "Y", 22482 "R", 22483 "q", 22484 "Q", 22485 "M", 22486 "L", 22487 "w", 22488 "I", 22489 "d", 22490 "E", 22491 "i", 22492 "e", 22493 "c", 22494 "t", 22495 "T" 22496 ]; 22497 }; 22498 22499 // node_modules/date-fns/setDay.js 22500 function setDay(date, day, options) { 22501 const defaultOptions2 = getDefaultOptions(); 22502 const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0; 22503 const date_ = toDate(date, options?.in); 22504 const currentDay = date_.getDay(); 22505 const remainder = day % 7; 22506 const dayIndex = (remainder + 7) % 7; 22507 const delta = 7 - weekStartsOn; 22508 const diff = day < 0 || day > 6 ? day - (currentDay + delta) % 7 : (dayIndex + delta) % 7 - (currentDay + delta) % 7; 22509 return addDays(date_, diff, options); 22510 } 22511 22512 // node_modules/date-fns/parse/_lib/parsers/DayParser.js 22513 var DayParser = class extends Parser { 22514 priority = 90; 22515 parse(dateString, token, match2) { 22516 switch (token) { 22517 // Tue 22518 case "E": 22519 case "EE": 22520 case "EEE": 22521 return match2.day(dateString, { 22522 width: "abbreviated", 22523 context: "formatting" 22524 }) || match2.day(dateString, { width: "short", context: "formatting" }) || match2.day(dateString, { width: "narrow", context: "formatting" }); 22525 // T 22526 case "EEEEE": 22527 return match2.day(dateString, { 22528 width: "narrow", 22529 context: "formatting" 22530 }); 22531 // Tu 22532 case "EEEEEE": 22533 return match2.day(dateString, { width: "short", context: "formatting" }) || match2.day(dateString, { width: "narrow", context: "formatting" }); 22534 // Tuesday 22535 case "EEEE": 22536 default: 22537 return match2.day(dateString, { width: "wide", context: "formatting" }) || match2.day(dateString, { 22538 width: "abbreviated", 22539 context: "formatting" 22540 }) || match2.day(dateString, { width: "short", context: "formatting" }) || match2.day(dateString, { width: "narrow", context: "formatting" }); 22541 } 22542 } 22543 validate(_date, value) { 22544 return value >= 0 && value <= 6; 22545 } 22546 set(date, _flags, value, options) { 22547 date = setDay(date, value, options); 22548 date.setHours(0, 0, 0, 0); 22549 return date; 22550 } 22551 incompatibleTokens = ["D", "i", "e", "c", "t", "T"]; 22552 }; 22553 22554 // node_modules/date-fns/parse/_lib/parsers/LocalDayParser.js 22555 var LocalDayParser = class extends Parser { 22556 priority = 90; 22557 parse(dateString, token, match2, options) { 22558 const valueCallback = (value) => { 22559 const wholeWeekDays = Math.floor((value - 1) / 7) * 7; 22560 return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays; 22561 }; 22562 switch (token) { 22563 // 3 22564 case "e": 22565 case "ee": 22566 return mapValue(parseNDigits(token.length, dateString), valueCallback); 22567 // 3rd 22568 case "eo": 22569 return mapValue( 22570 match2.ordinalNumber(dateString, { 22571 unit: "day" 22572 }), 22573 valueCallback 22574 ); 22575 // Tue 22576 case "eee": 22577 return match2.day(dateString, { 22578 width: "abbreviated", 22579 context: "formatting" 22580 }) || match2.day(dateString, { width: "short", context: "formatting" }) || match2.day(dateString, { width: "narrow", context: "formatting" }); 22581 // T 22582 case "eeeee": 22583 return match2.day(dateString, { 22584 width: "narrow", 22585 context: "formatting" 22586 }); 22587 // Tu 22588 case "eeeeee": 22589 return match2.day(dateString, { width: "short", context: "formatting" }) || match2.day(dateString, { width: "narrow", context: "formatting" }); 22590 // Tuesday 22591 case "eeee": 22592 default: 22593 return match2.day(dateString, { width: "wide", context: "formatting" }) || match2.day(dateString, { 22594 width: "abbreviated", 22595 context: "formatting" 22596 }) || match2.day(dateString, { width: "short", context: "formatting" }) || match2.day(dateString, { width: "narrow", context: "formatting" }); 22597 } 22598 } 22599 validate(_date, value) { 22600 return value >= 0 && value <= 6; 22601 } 22602 set(date, _flags, value, options) { 22603 date = setDay(date, value, options); 22604 date.setHours(0, 0, 0, 0); 22605 return date; 22606 } 22607 incompatibleTokens = [ 22608 "y", 22609 "R", 22610 "u", 22611 "q", 22612 "Q", 22613 "M", 22614 "L", 22615 "I", 22616 "d", 22617 "D", 22618 "E", 22619 "i", 22620 "c", 22621 "t", 22622 "T" 22623 ]; 22624 }; 22625 22626 // node_modules/date-fns/parse/_lib/parsers/StandAloneLocalDayParser.js 22627 var StandAloneLocalDayParser = class extends Parser { 22628 priority = 90; 22629 parse(dateString, token, match2, options) { 22630 const valueCallback = (value) => { 22631 const wholeWeekDays = Math.floor((value - 1) / 7) * 7; 22632 return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays; 22633 }; 22634 switch (token) { 22635 // 3 22636 case "c": 22637 case "cc": 22638 return mapValue(parseNDigits(token.length, dateString), valueCallback); 22639 // 3rd 22640 case "co": 22641 return mapValue( 22642 match2.ordinalNumber(dateString, { 22643 unit: "day" 22644 }), 22645 valueCallback 22646 ); 22647 // Tue 22648 case "ccc": 22649 return match2.day(dateString, { 22650 width: "abbreviated", 22651 context: "standalone" 22652 }) || match2.day(dateString, { width: "short", context: "standalone" }) || match2.day(dateString, { width: "narrow", context: "standalone" }); 22653 // T 22654 case "ccccc": 22655 return match2.day(dateString, { 22656 width: "narrow", 22657 context: "standalone" 22658 }); 22659 // Tu 22660 case "cccccc": 22661 return match2.day(dateString, { width: "short", context: "standalone" }) || match2.day(dateString, { width: "narrow", context: "standalone" }); 22662 // Tuesday 22663 case "cccc": 22664 default: 22665 return match2.day(dateString, { width: "wide", context: "standalone" }) || match2.day(dateString, { 22666 width: "abbreviated", 22667 context: "standalone" 22668 }) || match2.day(dateString, { width: "short", context: "standalone" }) || match2.day(dateString, { width: "narrow", context: "standalone" }); 22669 } 22670 } 22671 validate(_date, value) { 22672 return value >= 0 && value <= 6; 22673 } 22674 set(date, _flags, value, options) { 22675 date = setDay(date, value, options); 22676 date.setHours(0, 0, 0, 0); 22677 return date; 22678 } 22679 incompatibleTokens = [ 22680 "y", 22681 "R", 22682 "u", 22683 "q", 22684 "Q", 22685 "M", 22686 "L", 22687 "I", 22688 "d", 22689 "D", 22690 "E", 22691 "i", 22692 "e", 22693 "t", 22694 "T" 22695 ]; 22696 }; 22697 22698 // node_modules/date-fns/setISODay.js 22699 function setISODay(date, day, options) { 22700 const date_ = toDate(date, options?.in); 22701 const currentDay = getISODay(date_, options); 22702 const diff = day - currentDay; 22703 return addDays(date_, diff, options); 22704 } 22705 22706 // node_modules/date-fns/parse/_lib/parsers/ISODayParser.js 22707 var ISODayParser = class extends Parser { 22708 priority = 90; 22709 parse(dateString, token, match2) { 22710 const valueCallback = (value) => { 22711 if (value === 0) { 22712 return 7; 22713 } 22714 return value; 22715 }; 22716 switch (token) { 22717 // 2 22718 case "i": 22719 case "ii": 22720 return parseNDigits(token.length, dateString); 22721 // 2nd 22722 case "io": 22723 return match2.ordinalNumber(dateString, { unit: "day" }); 22724 // Tue 22725 case "iii": 22726 return mapValue( 22727 match2.day(dateString, { 22728 width: "abbreviated", 22729 context: "formatting" 22730 }) || match2.day(dateString, { 22731 width: "short", 22732 context: "formatting" 22733 }) || match2.day(dateString, { 22734 width: "narrow", 22735 context: "formatting" 22736 }), 22737 valueCallback 22738 ); 22739 // T 22740 case "iiiii": 22741 return mapValue( 22742 match2.day(dateString, { 22743 width: "narrow", 22744 context: "formatting" 22745 }), 22746 valueCallback 22747 ); 22748 // Tu 22749 case "iiiiii": 22750 return mapValue( 22751 match2.day(dateString, { 22752 width: "short", 22753 context: "formatting" 22754 }) || match2.day(dateString, { 22755 width: "narrow", 22756 context: "formatting" 22757 }), 22758 valueCallback 22759 ); 22760 // Tuesday 22761 case "iiii": 22762 default: 22763 return mapValue( 22764 match2.day(dateString, { 22765 width: "wide", 22766 context: "formatting" 22767 }) || match2.day(dateString, { 22768 width: "abbreviated", 22769 context: "formatting" 22770 }) || match2.day(dateString, { 22771 width: "short", 22772 context: "formatting" 22773 }) || match2.day(dateString, { 22774 width: "narrow", 22775 context: "formatting" 22776 }), 22777 valueCallback 22778 ); 22779 } 22780 } 22781 validate(_date, value) { 22782 return value >= 1 && value <= 7; 22783 } 22784 set(date, _flags, value) { 22785 date = setISODay(date, value); 22786 date.setHours(0, 0, 0, 0); 22787 return date; 22788 } 22789 incompatibleTokens = [ 22790 "y", 22791 "Y", 22792 "u", 22793 "q", 22794 "Q", 22795 "M", 22796 "L", 22797 "w", 22798 "d", 22799 "D", 22800 "E", 22801 "e", 22802 "c", 22803 "t", 22804 "T" 22805 ]; 22806 }; 22807 22808 // node_modules/date-fns/parse/_lib/parsers/AMPMParser.js 22809 var AMPMParser = class extends Parser { 22810 priority = 80; 22811 parse(dateString, token, match2) { 22812 switch (token) { 22813 case "a": 22814 case "aa": 22815 case "aaa": 22816 return match2.dayPeriod(dateString, { 22817 width: "abbreviated", 22818 context: "formatting" 22819 }) || match2.dayPeriod(dateString, { 22820 width: "narrow", 22821 context: "formatting" 22822 }); 22823 case "aaaaa": 22824 return match2.dayPeriod(dateString, { 22825 width: "narrow", 22826 context: "formatting" 22827 }); 22828 case "aaaa": 22829 default: 22830 return match2.dayPeriod(dateString, { 22831 width: "wide", 22832 context: "formatting" 22833 }) || match2.dayPeriod(dateString, { 22834 width: "abbreviated", 22835 context: "formatting" 22836 }) || match2.dayPeriod(dateString, { 22837 width: "narrow", 22838 context: "formatting" 22839 }); 22840 } 22841 } 22842 set(date, _flags, value) { 22843 date.setHours(dayPeriodEnumToHours(value), 0, 0, 0); 22844 return date; 22845 } 22846 incompatibleTokens = ["b", "B", "H", "k", "t", "T"]; 22847 }; 22848 22849 // node_modules/date-fns/parse/_lib/parsers/AMPMMidnightParser.js 22850 var AMPMMidnightParser = class extends Parser { 22851 priority = 80; 22852 parse(dateString, token, match2) { 22853 switch (token) { 22854 case "b": 22855 case "bb": 22856 case "bbb": 22857 return match2.dayPeriod(dateString, { 22858 width: "abbreviated", 22859 context: "formatting" 22860 }) || match2.dayPeriod(dateString, { 22861 width: "narrow", 22862 context: "formatting" 22863 }); 22864 case "bbbbb": 22865 return match2.dayPeriod(dateString, { 22866 width: "narrow", 22867 context: "formatting" 22868 }); 22869 case "bbbb": 22870 default: 22871 return match2.dayPeriod(dateString, { 22872 width: "wide", 22873 context: "formatting" 22874 }) || match2.dayPeriod(dateString, { 22875 width: "abbreviated", 22876 context: "formatting" 22877 }) || match2.dayPeriod(dateString, { 22878 width: "narrow", 22879 context: "formatting" 22880 }); 22881 } 22882 } 22883 set(date, _flags, value) { 22884 date.setHours(dayPeriodEnumToHours(value), 0, 0, 0); 22885 return date; 22886 } 22887 incompatibleTokens = ["a", "B", "H", "k", "t", "T"]; 22888 }; 22889 22890 // node_modules/date-fns/parse/_lib/parsers/DayPeriodParser.js 22891 var DayPeriodParser = class extends Parser { 22892 priority = 80; 22893 parse(dateString, token, match2) { 22894 switch (token) { 22895 case "B": 22896 case "BB": 22897 case "BBB": 22898 return match2.dayPeriod(dateString, { 22899 width: "abbreviated", 22900 context: "formatting" 22901 }) || match2.dayPeriod(dateString, { 22902 width: "narrow", 22903 context: "formatting" 22904 }); 22905 case "BBBBB": 22906 return match2.dayPeriod(dateString, { 22907 width: "narrow", 22908 context: "formatting" 22909 }); 22910 case "BBBB": 22911 default: 22912 return match2.dayPeriod(dateString, { 22913 width: "wide", 22914 context: "formatting" 22915 }) || match2.dayPeriod(dateString, { 22916 width: "abbreviated", 22917 context: "formatting" 22918 }) || match2.dayPeriod(dateString, { 22919 width: "narrow", 22920 context: "formatting" 22921 }); 22922 } 22923 } 22924 set(date, _flags, value) { 22925 date.setHours(dayPeriodEnumToHours(value), 0, 0, 0); 22926 return date; 22927 } 22928 incompatibleTokens = ["a", "b", "t", "T"]; 22929 }; 22930 22931 // node_modules/date-fns/parse/_lib/parsers/Hour1to12Parser.js 22932 var Hour1to12Parser = class extends Parser { 22933 priority = 70; 22934 parse(dateString, token, match2) { 22935 switch (token) { 22936 case "h": 22937 return parseNumericPattern(numericPatterns.hour12h, dateString); 22938 case "ho": 22939 return match2.ordinalNumber(dateString, { unit: "hour" }); 22940 default: 22941 return parseNDigits(token.length, dateString); 22942 } 22943 } 22944 validate(_date, value) { 22945 return value >= 1 && value <= 12; 22946 } 22947 set(date, _flags, value) { 22948 const isPM = date.getHours() >= 12; 22949 if (isPM && value < 12) { 22950 date.setHours(value + 12, 0, 0, 0); 22951 } else if (!isPM && value === 12) { 22952 date.setHours(0, 0, 0, 0); 22953 } else { 22954 date.setHours(value, 0, 0, 0); 22955 } 22956 return date; 22957 } 22958 incompatibleTokens = ["H", "K", "k", "t", "T"]; 22959 }; 22960 22961 // node_modules/date-fns/parse/_lib/parsers/Hour0to23Parser.js 22962 var Hour0to23Parser = class extends Parser { 22963 priority = 70; 22964 parse(dateString, token, match2) { 22965 switch (token) { 22966 case "H": 22967 return parseNumericPattern(numericPatterns.hour23h, dateString); 22968 case "Ho": 22969 return match2.ordinalNumber(dateString, { unit: "hour" }); 22970 default: 22971 return parseNDigits(token.length, dateString); 22972 } 22973 } 22974 validate(_date, value) { 22975 return value >= 0 && value <= 23; 22976 } 22977 set(date, _flags, value) { 22978 date.setHours(value, 0, 0, 0); 22979 return date; 22980 } 22981 incompatibleTokens = ["a", "b", "h", "K", "k", "t", "T"]; 22982 }; 22983 22984 // node_modules/date-fns/parse/_lib/parsers/Hour0To11Parser.js 22985 var Hour0To11Parser = class extends Parser { 22986 priority = 70; 22987 parse(dateString, token, match2) { 22988 switch (token) { 22989 case "K": 22990 return parseNumericPattern(numericPatterns.hour11h, dateString); 22991 case "Ko": 22992 return match2.ordinalNumber(dateString, { unit: "hour" }); 22993 default: 22994 return parseNDigits(token.length, dateString); 22995 } 22996 } 22997 validate(_date, value) { 22998 return value >= 0 && value <= 11; 22999 } 23000 set(date, _flags, value) { 23001 const isPM = date.getHours() >= 12; 23002 if (isPM && value < 12) { 23003 date.setHours(value + 12, 0, 0, 0); 23004 } else { 23005 date.setHours(value, 0, 0, 0); 23006 } 23007 return date; 23008 } 23009 incompatibleTokens = ["h", "H", "k", "t", "T"]; 23010 }; 23011 23012 // node_modules/date-fns/parse/_lib/parsers/Hour1To24Parser.js 23013 var Hour1To24Parser = class extends Parser { 23014 priority = 70; 23015 parse(dateString, token, match2) { 23016 switch (token) { 23017 case "k": 23018 return parseNumericPattern(numericPatterns.hour24h, dateString); 23019 case "ko": 23020 return match2.ordinalNumber(dateString, { unit: "hour" }); 23021 default: 23022 return parseNDigits(token.length, dateString); 23023 } 23024 } 23025 validate(_date, value) { 23026 return value >= 1 && value <= 24; 23027 } 23028 set(date, _flags, value) { 23029 const hours = value <= 24 ? value % 24 : value; 23030 date.setHours(hours, 0, 0, 0); 23031 return date; 23032 } 23033 incompatibleTokens = ["a", "b", "h", "H", "K", "t", "T"]; 23034 }; 23035 23036 // node_modules/date-fns/parse/_lib/parsers/MinuteParser.js 23037 var MinuteParser = class extends Parser { 23038 priority = 60; 23039 parse(dateString, token, match2) { 23040 switch (token) { 23041 case "m": 23042 return parseNumericPattern(numericPatterns.minute, dateString); 23043 case "mo": 23044 return match2.ordinalNumber(dateString, { unit: "minute" }); 23045 default: 23046 return parseNDigits(token.length, dateString); 23047 } 23048 } 23049 validate(_date, value) { 23050 return value >= 0 && value <= 59; 23051 } 23052 set(date, _flags, value) { 23053 date.setMinutes(value, 0, 0); 23054 return date; 23055 } 23056 incompatibleTokens = ["t", "T"]; 23057 }; 23058 23059 // node_modules/date-fns/parse/_lib/parsers/SecondParser.js 23060 var SecondParser = class extends Parser { 23061 priority = 50; 23062 parse(dateString, token, match2) { 23063 switch (token) { 23064 case "s": 23065 return parseNumericPattern(numericPatterns.second, dateString); 23066 case "so": 23067 return match2.ordinalNumber(dateString, { unit: "second" }); 23068 default: 23069 return parseNDigits(token.length, dateString); 23070 } 23071 } 23072 validate(_date, value) { 23073 return value >= 0 && value <= 59; 23074 } 23075 set(date, _flags, value) { 23076 date.setSeconds(value, 0); 23077 return date; 23078 } 23079 incompatibleTokens = ["t", "T"]; 23080 }; 23081 23082 // node_modules/date-fns/parse/_lib/parsers/FractionOfSecondParser.js 23083 var FractionOfSecondParser = class extends Parser { 23084 priority = 30; 23085 parse(dateString, token) { 23086 const valueCallback = (value) => Math.trunc(value * Math.pow(10, -token.length + 3)); 23087 return mapValue(parseNDigits(token.length, dateString), valueCallback); 23088 } 23089 set(date, _flags, value) { 23090 date.setMilliseconds(value); 23091 return date; 23092 } 23093 incompatibleTokens = ["t", "T"]; 23094 }; 23095 23096 // node_modules/date-fns/parse/_lib/parsers/ISOTimezoneWithZParser.js 23097 var ISOTimezoneWithZParser = class extends Parser { 23098 priority = 10; 23099 parse(dateString, token) { 23100 switch (token) { 23101 case "X": 23102 return parseTimezonePattern( 23103 timezonePatterns.basicOptionalMinutes, 23104 dateString 23105 ); 23106 case "XX": 23107 return parseTimezonePattern(timezonePatterns.basic, dateString); 23108 case "XXXX": 23109 return parseTimezonePattern( 23110 timezonePatterns.basicOptionalSeconds, 23111 dateString 23112 ); 23113 case "XXXXX": 23114 return parseTimezonePattern( 23115 timezonePatterns.extendedOptionalSeconds, 23116 dateString 23117 ); 23118 case "XXX": 23119 default: 23120 return parseTimezonePattern(timezonePatterns.extended, dateString); 23121 } 23122 } 23123 set(date, flags, value) { 23124 if (flags.timestampIsSet) return date; 23125 return constructFrom( 23126 date, 23127 date.getTime() - getTimezoneOffsetInMilliseconds(date) - value 23128 ); 23129 } 23130 incompatibleTokens = ["t", "T", "x"]; 23131 }; 23132 23133 // node_modules/date-fns/parse/_lib/parsers/ISOTimezoneParser.js 23134 var ISOTimezoneParser = class extends Parser { 23135 priority = 10; 23136 parse(dateString, token) { 23137 switch (token) { 23138 case "x": 23139 return parseTimezonePattern( 23140 timezonePatterns.basicOptionalMinutes, 23141 dateString 23142 ); 23143 case "xx": 23144 return parseTimezonePattern(timezonePatterns.basic, dateString); 23145 case "xxxx": 23146 return parseTimezonePattern( 23147 timezonePatterns.basicOptionalSeconds, 23148 dateString 23149 ); 23150 case "xxxxx": 23151 return parseTimezonePattern( 23152 timezonePatterns.extendedOptionalSeconds, 23153 dateString 23154 ); 23155 case "xxx": 23156 default: 23157 return parseTimezonePattern(timezonePatterns.extended, dateString); 23158 } 23159 } 23160 set(date, flags, value) { 23161 if (flags.timestampIsSet) return date; 23162 return constructFrom( 23163 date, 23164 date.getTime() - getTimezoneOffsetInMilliseconds(date) - value 23165 ); 23166 } 23167 incompatibleTokens = ["t", "T", "X"]; 23168 }; 23169 23170 // node_modules/date-fns/parse/_lib/parsers/TimestampSecondsParser.js 23171 var TimestampSecondsParser = class extends Parser { 23172 priority = 40; 23173 parse(dateString) { 23174 return parseAnyDigitsSigned(dateString); 23175 } 23176 set(date, _flags, value) { 23177 return [constructFrom(date, value * 1e3), { timestampIsSet: true }]; 23178 } 23179 incompatibleTokens = "*"; 23180 }; 23181 23182 // node_modules/date-fns/parse/_lib/parsers/TimestampMillisecondsParser.js 23183 var TimestampMillisecondsParser = class extends Parser { 23184 priority = 20; 23185 parse(dateString) { 23186 return parseAnyDigitsSigned(dateString); 23187 } 23188 set(date, _flags, value) { 23189 return [constructFrom(date, value), { timestampIsSet: true }]; 23190 } 23191 incompatibleTokens = "*"; 23192 }; 23193 23194 // node_modules/date-fns/parse/_lib/parsers.js 23195 var parsers = { 23196 G: new EraParser(), 23197 y: new YearParser(), 23198 Y: new LocalWeekYearParser(), 23199 R: new ISOWeekYearParser(), 23200 u: new ExtendedYearParser(), 23201 Q: new QuarterParser(), 23202 q: new StandAloneQuarterParser(), 23203 M: new MonthParser(), 23204 L: new StandAloneMonthParser(), 23205 w: new LocalWeekParser(), 23206 I: new ISOWeekParser(), 23207 d: new DateParser(), 23208 D: new DayOfYearParser(), 23209 E: new DayParser(), 23210 e: new LocalDayParser(), 23211 c: new StandAloneLocalDayParser(), 23212 i: new ISODayParser(), 23213 a: new AMPMParser(), 23214 b: new AMPMMidnightParser(), 23215 B: new DayPeriodParser(), 23216 h: new Hour1to12Parser(), 23217 H: new Hour0to23Parser(), 23218 K: new Hour0To11Parser(), 23219 k: new Hour1To24Parser(), 23220 m: new MinuteParser(), 23221 s: new SecondParser(), 23222 S: new FractionOfSecondParser(), 23223 X: new ISOTimezoneWithZParser(), 23224 x: new ISOTimezoneParser(), 23225 t: new TimestampSecondsParser(), 23226 T: new TimestampMillisecondsParser() 23227 }; 23228 23229 // node_modules/date-fns/parse.js 23230 var formattingTokensRegExp2 = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g; 23231 var longFormattingTokensRegExp2 = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g; 23232 var escapedStringRegExp2 = /^'([^]*?)'?$/; 23233 var doubleQuoteRegExp2 = /''/g; 23234 var notWhitespaceRegExp = /\S/; 23235 var unescapedLatinCharacterRegExp2 = /[a-zA-Z]/; 23236 function parse(dateStr, formatStr, referenceDate, options) { 23237 const invalidDate = () => constructFrom(options?.in || referenceDate, NaN); 23238 const defaultOptions2 = getDefaultOptions2(); 23239 const locale = options?.locale ?? defaultOptions2.locale ?? enUS; 23240 const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1; 23241 const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0; 23242 if (!formatStr) 23243 return dateStr ? invalidDate() : toDate(referenceDate, options?.in); 23244 const subFnOptions = { 23245 firstWeekContainsDate, 23246 weekStartsOn, 23247 locale 23248 }; 23249 const setters = [new DateTimezoneSetter(options?.in, referenceDate)]; 23250 const tokens = formatStr.match(longFormattingTokensRegExp2).map((substring) => { 23251 const firstCharacter = substring[0]; 23252 if (firstCharacter in longFormatters) { 23253 const longFormatter = longFormatters[firstCharacter]; 23254 return longFormatter(substring, locale.formatLong); 23255 } 23256 return substring; 23257 }).join("").match(formattingTokensRegExp2); 23258 const usedTokens = []; 23259 for (let token of tokens) { 23260 if (!options?.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token)) { 23261 warnOrThrowProtectedError(token, formatStr, dateStr); 23262 } 23263 if (!options?.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) { 23264 warnOrThrowProtectedError(token, formatStr, dateStr); 23265 } 23266 const firstCharacter = token[0]; 23267 const parser = parsers[firstCharacter]; 23268 if (parser) { 23269 const { incompatibleTokens } = parser; 23270 if (Array.isArray(incompatibleTokens)) { 23271 const incompatibleToken = usedTokens.find( 23272 (usedToken) => incompatibleTokens.includes(usedToken.token) || usedToken.token === firstCharacter 23273 ); 23274 if (incompatibleToken) { 23275 throw new RangeError( 23276 `The format string mustn't contain \`$incompatibleToken.fullToken}\` and \`$token}\` at the same time` 23277 ); 23278 } 23279 } else if (parser.incompatibleTokens === "*" && usedTokens.length > 0) { 23280 throw new RangeError( 23281 `The format string mustn't contain \`$token}\` and any other token at the same time` 23282 ); 23283 } 23284 usedTokens.push({ token: firstCharacter, fullToken: token }); 23285 const parseResult = parser.run( 23286 dateStr, 23287 token, 23288 locale.match, 23289 subFnOptions 23290 ); 23291 if (!parseResult) { 23292 return invalidDate(); 23293 } 23294 setters.push(parseResult.setter); 23295 dateStr = parseResult.rest; 23296 } else { 23297 if (firstCharacter.match(unescapedLatinCharacterRegExp2)) { 23298 throw new RangeError( 23299 "Format string contains an unescaped latin alphabet character `" + firstCharacter + "`" 23300 ); 23301 } 23302 if (token === "''") { 23303 token = "'"; 23304 } else if (firstCharacter === "'") { 23305 token = cleanEscapedString2(token); 23306 } 23307 if (dateStr.indexOf(token) === 0) { 23308 dateStr = dateStr.slice(token.length); 23309 } else { 23310 return invalidDate(); 23311 } 23312 } 23313 } 23314 if (dateStr.length > 0 && notWhitespaceRegExp.test(dateStr)) { 23315 return invalidDate(); 23316 } 23317 const uniquePrioritySetters = setters.map((setter) => setter.priority).sort((a2, b2) => b2 - a2).filter((priority, index2, array) => array.indexOf(priority) === index2).map( 23318 (priority) => setters.filter((setter) => setter.priority === priority).sort((a2, b2) => b2.subPriority - a2.subPriority) 23319 ).map((setterArray) => setterArray[0]); 23320 let date = toDate(referenceDate, options?.in); 23321 if (isNaN(+date)) return invalidDate(); 23322 const flags = {}; 23323 for (const setter of uniquePrioritySetters) { 23324 if (!setter.validate(date, subFnOptions)) { 23325 return invalidDate(); 23326 } 23327 const result = setter.set(date, flags, subFnOptions); 23328 if (Array.isArray(result)) { 23329 date = result[0]; 23330 Object.assign(flags, result[1]); 23331 } else { 23332 date = result; 23333 } 23334 } 23335 return date; 23336 } 23337 function cleanEscapedString2(input) { 23338 return input.match(escapedStringRegExp2)[1].replace(doubleQuoteRegExp2, "'"); 23339 } 23340 23341 // node_modules/date-fns/isSameMonth.js 23342 function isSameMonth(laterDate, earlierDate, options) { 23343 const [laterDate_, earlierDate_] = normalizeDates( 23344 options?.in, 23345 laterDate, 23346 earlierDate 23347 ); 23348 return laterDate_.getFullYear() === earlierDate_.getFullYear() && laterDate_.getMonth() === earlierDate_.getMonth(); 23349 } 23350 23351 // node_modules/date-fns/isSameYear.js 23352 function isSameYear(laterDate, earlierDate, options) { 23353 const [laterDate_, earlierDate_] = normalizeDates( 23354 options?.in, 23355 laterDate, 23356 earlierDate 23357 ); 23358 return laterDate_.getFullYear() === earlierDate_.getFullYear(); 23359 } 23360 23361 // node_modules/date-fns/subDays.js 23362 function subDays(date, amount, options) { 23363 return addDays(date, -amount, options); 23364 } 23365 23366 // node_modules/date-fns/parseISO.js 23367 function parseISO(argument, options) { 23368 const invalidDate = () => constructFrom(options?.in, NaN); 23369 const additionalDigits = options?.additionalDigits ?? 2; 23370 const dateStrings = splitDateString(argument); 23371 let date; 23372 if (dateStrings.date) { 23373 const parseYearResult = parseYear(dateStrings.date, additionalDigits); 23374 date = parseDate(parseYearResult.restDateString, parseYearResult.year); 23375 } 23376 if (!date || isNaN(+date)) return invalidDate(); 23377 const timestamp = +date; 23378 let time = 0; 23379 let offset4; 23380 if (dateStrings.time) { 23381 time = parseTime(dateStrings.time); 23382 if (isNaN(time)) return invalidDate(); 23383 } 23384 if (dateStrings.timezone) { 23385 offset4 = parseTimezone(dateStrings.timezone); 23386 if (isNaN(offset4)) return invalidDate(); 23387 } else { 23388 const tmpDate = new Date(timestamp + time); 23389 const result = toDate(0, options?.in); 23390 result.setFullYear( 23391 tmpDate.getUTCFullYear(), 23392 tmpDate.getUTCMonth(), 23393 tmpDate.getUTCDate() 23394 ); 23395 result.setHours( 23396 tmpDate.getUTCHours(), 23397 tmpDate.getUTCMinutes(), 23398 tmpDate.getUTCSeconds(), 23399 tmpDate.getUTCMilliseconds() 23400 ); 23401 return result; 23402 } 23403 return toDate(timestamp + time + offset4, options?.in); 23404 } 23405 var patterns = { 23406 dateTimeDelimiter: /[T ]/, 23407 timeZoneDelimiter: /[Z ]/i, 23408 timezone: /([Z+-].*)$/ 23409 }; 23410 var dateRegex = /^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/; 23411 var timeRegex = /^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/; 23412 var timezoneRegex = /^([+-])(\d{2})(?::?(\d{2}))?$/; 23413 function splitDateString(dateString) { 23414 const dateStrings = {}; 23415 const array = dateString.split(patterns.dateTimeDelimiter); 23416 let timeString; 23417 if (array.length > 2) { 23418 return dateStrings; 23419 } 23420 if (/:/.test(array[0])) { 23421 timeString = array[0]; 23422 } else { 23423 dateStrings.date = array[0]; 23424 timeString = array[1]; 23425 if (patterns.timeZoneDelimiter.test(dateStrings.date)) { 23426 dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0]; 23427 timeString = dateString.substr( 23428 dateStrings.date.length, 23429 dateString.length 23430 ); 23431 } 23432 } 23433 if (timeString) { 23434 const token = patterns.timezone.exec(timeString); 23435 if (token) { 23436 dateStrings.time = timeString.replace(token[1], ""); 23437 dateStrings.timezone = token[1]; 23438 } else { 23439 dateStrings.time = timeString; 23440 } 23441 } 23442 return dateStrings; 23443 } 23444 function parseYear(dateString, additionalDigits) { 23445 const regex = new RegExp( 23446 "^(?:(\\d{4}|[+-]\\d{" + (4 + additionalDigits) + "})|(\\d{2}|[+-]\\d{" + (2 + additionalDigits) + "})$)" 23447 ); 23448 const captures = dateString.match(regex); 23449 if (!captures) return { year: NaN, restDateString: "" }; 23450 const year = captures[1] ? parseInt(captures[1]) : null; 23451 const century = captures[2] ? parseInt(captures[2]) : null; 23452 return { 23453 year: century === null ? year : century * 100, 23454 restDateString: dateString.slice((captures[1] || captures[2]).length) 23455 }; 23456 } 23457 function parseDate(dateString, year) { 23458 if (year === null) return /* @__PURE__ */ new Date(NaN); 23459 const captures = dateString.match(dateRegex); 23460 if (!captures) return /* @__PURE__ */ new Date(NaN); 23461 const isWeekDate = !!captures[4]; 23462 const dayOfYear = parseDateUnit(captures[1]); 23463 const month = parseDateUnit(captures[2]) - 1; 23464 const day = parseDateUnit(captures[3]); 23465 const week = parseDateUnit(captures[4]); 23466 const dayOfWeek = parseDateUnit(captures[5]) - 1; 23467 if (isWeekDate) { 23468 if (!validateWeekDate(year, week, dayOfWeek)) { 23469 return /* @__PURE__ */ new Date(NaN); 23470 } 23471 return dayOfISOWeekYear(year, week, dayOfWeek); 23472 } else { 23473 const date = /* @__PURE__ */ new Date(0); 23474 if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) { 23475 return /* @__PURE__ */ new Date(NaN); 23476 } 23477 date.setUTCFullYear(year, month, Math.max(dayOfYear, day)); 23478 return date; 23479 } 23480 } 23481 function parseDateUnit(value) { 23482 return value ? parseInt(value) : 1; 23483 } 23484 function parseTime(timeString) { 23485 const captures = timeString.match(timeRegex); 23486 if (!captures) return NaN; 23487 const hours = parseTimeUnit(captures[1]); 23488 const minutes = parseTimeUnit(captures[2]); 23489 const seconds = parseTimeUnit(captures[3]); 23490 if (!validateTime(hours, minutes, seconds)) { 23491 return NaN; 23492 } 23493 return hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1e3; 23494 } 23495 function parseTimeUnit(value) { 23496 return value && parseFloat(value.replace(",", ".")) || 0; 23497 } 23498 function parseTimezone(timezoneString) { 23499 if (timezoneString === "Z") return 0; 23500 const captures = timezoneString.match(timezoneRegex); 23501 if (!captures) return 0; 23502 const sign = captures[1] === "+" ? -1 : 1; 23503 const hours = parseInt(captures[2]); 23504 const minutes = captures[3] && parseInt(captures[3]) || 0; 23505 if (!validateTimezone(hours, minutes)) { 23506 return NaN; 23507 } 23508 return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute); 23509 } 23510 function dayOfISOWeekYear(isoWeekYear, week, day) { 23511 const date = /* @__PURE__ */ new Date(0); 23512 date.setUTCFullYear(isoWeekYear, 0, 4); 23513 const fourthOfJanuaryDay = date.getUTCDay() || 7; 23514 const diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay; 23515 date.setUTCDate(date.getUTCDate() + diff); 23516 return date; 23517 } 23518 var daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; 23519 function isLeapYearIndex2(year) { 23520 return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0; 23521 } 23522 function validateDate(year, month, date) { 23523 return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex2(year) ? 29 : 28)); 23524 } 23525 function validateDayOfYearDate(year, dayOfYear) { 23526 return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex2(year) ? 366 : 365); 23527 } 23528 function validateWeekDate(_year, week, day) { 23529 return week >= 1 && week <= 53 && day >= 0 && day <= 6; 23530 } 23531 function validateTime(hours, minutes, seconds) { 23532 if (hours === 24) { 23533 return minutes === 0 && seconds === 0; 23534 } 23535 return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25; 23536 } 23537 function validateTimezone(_hours, minutes) { 23538 return minutes >= 0 && minutes <= 59; 23539 } 23540 23541 // node_modules/date-fns/setMonth.js 23542 function setMonth(date, month, options) { 23543 const _date = toDate(date, options?.in); 23544 const year = _date.getFullYear(); 23545 const day = _date.getDate(); 23546 const midMonth = constructFrom(options?.in || date, 0); 23547 midMonth.setFullYear(year, month, 15); 23548 midMonth.setHours(0, 0, 0, 0); 23549 const daysInMonth = getDaysInMonth(midMonth); 23550 _date.setMonth(month, Math.min(day, daysInMonth)); 23551 return _date; 23552 } 23553 23554 // node_modules/date-fns/setYear.js 23555 function setYear(date, year, options) { 23556 const date_ = toDate(date, options?.in); 23557 if (isNaN(+date_)) return constructFrom(options?.in || date, NaN); 23558 date_.setFullYear(year); 23559 return date_; 23560 } 23561 23562 // node_modules/date-fns/subMonths.js 23563 function subMonths(date, amount, options) { 23564 return addMonths(date, -amount, options); 23565 } 23566 23567 // node_modules/date-fns/subWeeks.js 23568 function subWeeks(date, amount, options) { 23569 return addWeeks(date, -amount, options); 23570 } 23571 23572 // node_modules/date-fns/subYears.js 23573 function subYears(date, amount, options) { 23574 return addYears(date, -amount, options); 23575 } 23576 23577 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getBroadcastWeeksInMonth.js 23578 var FIVE_WEEKS = 5; 23579 var FOUR_WEEKS = 4; 23580 function getBroadcastWeeksInMonth(month, dateLib) { 23581 const firstDayOfMonth = dateLib.startOfMonth(month); 23582 const firstDayOfWeek = firstDayOfMonth.getDay() > 0 ? firstDayOfMonth.getDay() : 7; 23583 const broadcastStartDate = dateLib.addDays(month, -firstDayOfWeek + 1); 23584 const lastDateOfLastWeek = dateLib.addDays(broadcastStartDate, FIVE_WEEKS * 7 - 1); 23585 const numberOfWeeks = dateLib.getMonth(month) === dateLib.getMonth(lastDateOfLastWeek) ? FIVE_WEEKS : FOUR_WEEKS; 23586 return numberOfWeeks; 23587 } 23588 23589 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/startOfBroadcastWeek.js 23590 function startOfBroadcastWeek(date, dateLib) { 23591 const firstOfMonth = dateLib.startOfMonth(date); 23592 const dayOfWeek = firstOfMonth.getDay(); 23593 if (dayOfWeek === 1) { 23594 return firstOfMonth; 23595 } else if (dayOfWeek === 0) { 23596 return dateLib.addDays(firstOfMonth, -1 * 6); 23597 } else { 23598 return dateLib.addDays(firstOfMonth, -1 * (dayOfWeek - 1)); 23599 } 23600 } 23601 23602 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/endOfBroadcastWeek.js 23603 function endOfBroadcastWeek(date, dateLib) { 23604 const startDate = startOfBroadcastWeek(date, dateLib); 23605 const numberOfWeeks = getBroadcastWeeksInMonth(date, dateLib); 23606 const endDate = dateLib.addDays(startDate, numberOfWeeks * 7 - 1); 23607 return endDate; 23608 } 23609 23610 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/locale/en-US.js 23611 var enUS2 = { 23612 ...enUS, 23613 labels: { 23614 labelDayButton: (date, modifiers, options, dateLib) => { 23615 let formatDate2; 23616 if (dateLib && typeof dateLib.format === "function") { 23617 formatDate2 = dateLib.format.bind(dateLib); 23618 } else { 23619 formatDate2 = (d2, pattern) => format(d2, pattern, { locale: enUS, ...options }); 23620 } 23621 let label = formatDate2(date, "PPPP"); 23622 if (modifiers.today) 23623 label = `Today, $label}`; 23624 if (modifiers.selected) 23625 label = `$label}, selected`; 23626 return label; 23627 }, 23628 labelMonthDropdown: "Choose the Month", 23629 labelNext: "Go to the Next Month", 23630 labelPrevious: "Go to the Previous Month", 23631 labelWeekNumber: (weekNumber) => `Week $weekNumber}`, 23632 labelYearDropdown: "Choose the Year", 23633 labelGrid: (date, options, dateLib) => { 23634 let formatDate2; 23635 if (dateLib && typeof dateLib.format === "function") { 23636 formatDate2 = dateLib.format.bind(dateLib); 23637 } else { 23638 formatDate2 = (d2, pattern) => format(d2, pattern, { locale: enUS, ...options }); 23639 } 23640 return formatDate2(date, "LLLL yyyy"); 23641 }, 23642 labelGridcell: (date, modifiers, options, dateLib) => { 23643 let formatDate2; 23644 if (dateLib && typeof dateLib.format === "function") { 23645 formatDate2 = dateLib.format.bind(dateLib); 23646 } else { 23647 formatDate2 = (d2, pattern) => format(d2, pattern, { locale: enUS, ...options }); 23648 } 23649 let label = formatDate2(date, "PPPP"); 23650 if (modifiers?.today) { 23651 label = `Today, $label}`; 23652 } 23653 return label; 23654 }, 23655 labelNav: "Navigation bar", 23656 labelWeekNumberHeader: "Week Number", 23657 labelWeekday: (date, options, dateLib) => { 23658 let formatDate2; 23659 if (dateLib && typeof dateLib.format === "function") { 23660 formatDate2 = dateLib.format.bind(dateLib); 23661 } else { 23662 formatDate2 = (d2, pattern) => format(d2, pattern, { locale: enUS, ...options }); 23663 } 23664 return formatDate2(date, "cccc"); 23665 } 23666 } 23667 }; 23668 23669 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/classes/DateLib.js 23670 var DateLib = class _DateLib { 23671 /** 23672 * Creates an instance of `DateLib`. 23673 * 23674 * @param options Configuration options for the date library. 23675 * @param overrides Custom overrides for the date library functions. 23676 */ 23677 constructor(options, overrides) { 23678 this.today = () => { 23679 if (this.overrides?.today) { 23680 return this.overrides.today(); 23681 } 23682 if (this.options.timeZone) { 23683 return TZDate.tz(this.options.timeZone); 23684 } 23685 const DateCtor = this.options.Date ?? Date; 23686 return new DateCtor(); 23687 }; 23688 this.newDate = (year, monthIndex, date) => { 23689 if (this.overrides?.newDate) { 23690 return this.overrides.newDate(year, monthIndex, date); 23691 } 23692 if (this.options.timeZone) { 23693 return new TZDate(year, monthIndex, date, this.options.timeZone); 23694 } 23695 return new Date(year, monthIndex, date); 23696 }; 23697 this.addDays = (date, amount) => { 23698 return this.overrides?.addDays ? this.overrides.addDays(date, amount) : addDays(date, amount); 23699 }; 23700 this.addMonths = (date, amount) => { 23701 return this.overrides?.addMonths ? this.overrides.addMonths(date, amount) : addMonths(date, amount); 23702 }; 23703 this.addWeeks = (date, amount) => { 23704 return this.overrides?.addWeeks ? this.overrides.addWeeks(date, amount) : addWeeks(date, amount); 23705 }; 23706 this.addYears = (date, amount) => { 23707 return this.overrides?.addYears ? this.overrides.addYears(date, amount) : addYears(date, amount); 23708 }; 23709 this.differenceInCalendarDays = (dateLeft, dateRight) => { 23710 return this.overrides?.differenceInCalendarDays ? this.overrides.differenceInCalendarDays(dateLeft, dateRight) : differenceInCalendarDays(dateLeft, dateRight); 23711 }; 23712 this.differenceInCalendarMonths = (dateLeft, dateRight) => { 23713 return this.overrides?.differenceInCalendarMonths ? this.overrides.differenceInCalendarMonths(dateLeft, dateRight) : differenceInCalendarMonths(dateLeft, dateRight); 23714 }; 23715 this.eachMonthOfInterval = (interval) => { 23716 return this.overrides?.eachMonthOfInterval ? this.overrides.eachMonthOfInterval(interval) : eachMonthOfInterval(interval); 23717 }; 23718 this.eachYearOfInterval = (interval) => { 23719 const years = this.overrides?.eachYearOfInterval ? this.overrides.eachYearOfInterval(interval) : eachYearOfInterval(interval); 23720 const uniqueYears = new Set(years.map((d2) => this.getYear(d2))); 23721 if (uniqueYears.size === years.length) { 23722 return years; 23723 } 23724 const yearsArray = []; 23725 uniqueYears.forEach((y2) => { 23726 yearsArray.push(new Date(y2, 0, 1)); 23727 }); 23728 return yearsArray; 23729 }; 23730 this.endOfBroadcastWeek = (date) => { 23731 return this.overrides?.endOfBroadcastWeek ? this.overrides.endOfBroadcastWeek(date) : endOfBroadcastWeek(date, this); 23732 }; 23733 this.endOfISOWeek = (date) => { 23734 return this.overrides?.endOfISOWeek ? this.overrides.endOfISOWeek(date) : endOfISOWeek(date); 23735 }; 23736 this.endOfMonth = (date) => { 23737 return this.overrides?.endOfMonth ? this.overrides.endOfMonth(date) : endOfMonth(date); 23738 }; 23739 this.endOfWeek = (date, options2) => { 23740 return this.overrides?.endOfWeek ? this.overrides.endOfWeek(date, options2) : endOfWeek(date, this.options); 23741 }; 23742 this.endOfYear = (date) => { 23743 return this.overrides?.endOfYear ? this.overrides.endOfYear(date) : endOfYear(date); 23744 }; 23745 this.format = (date, formatStr, _options) => { 23746 const formatted = this.overrides?.format ? this.overrides.format(date, formatStr, this.options) : format(date, formatStr, this.options); 23747 if (this.options.numerals && this.options.numerals !== "latn") { 23748 return this.replaceDigits(formatted); 23749 } 23750 return formatted; 23751 }; 23752 this.getISOWeek = (date) => { 23753 return this.overrides?.getISOWeek ? this.overrides.getISOWeek(date) : getISOWeek(date); 23754 }; 23755 this.getMonth = (date, _options) => { 23756 return this.overrides?.getMonth ? this.overrides.getMonth(date, this.options) : getMonth(date, this.options); 23757 }; 23758 this.getYear = (date, _options) => { 23759 return this.overrides?.getYear ? this.overrides.getYear(date, this.options) : getYear(date, this.options); 23760 }; 23761 this.getWeek = (date, _options) => { 23762 return this.overrides?.getWeek ? this.overrides.getWeek(date, this.options) : getWeek(date, this.options); 23763 }; 23764 this.isAfter = (date, dateToCompare) => { 23765 return this.overrides?.isAfter ? this.overrides.isAfter(date, dateToCompare) : isAfter(date, dateToCompare); 23766 }; 23767 this.isBefore = (date, dateToCompare) => { 23768 return this.overrides?.isBefore ? this.overrides.isBefore(date, dateToCompare) : isBefore(date, dateToCompare); 23769 }; 23770 this.isDate = (value) => { 23771 return this.overrides?.isDate ? this.overrides.isDate(value) : isDate(value); 23772 }; 23773 this.isSameDay = (dateLeft, dateRight) => { 23774 return this.overrides?.isSameDay ? this.overrides.isSameDay(dateLeft, dateRight) : isSameDay(dateLeft, dateRight); 23775 }; 23776 this.isSameMonth = (dateLeft, dateRight) => { 23777 return this.overrides?.isSameMonth ? this.overrides.isSameMonth(dateLeft, dateRight) : isSameMonth(dateLeft, dateRight); 23778 }; 23779 this.isSameYear = (dateLeft, dateRight) => { 23780 return this.overrides?.isSameYear ? this.overrides.isSameYear(dateLeft, dateRight) : isSameYear(dateLeft, dateRight); 23781 }; 23782 this.max = (dates) => { 23783 return this.overrides?.max ? this.overrides.max(dates) : max2(dates); 23784 }; 23785 this.min = (dates) => { 23786 return this.overrides?.min ? this.overrides.min(dates) : min2(dates); 23787 }; 23788 this.setMonth = (date, month) => { 23789 return this.overrides?.setMonth ? this.overrides.setMonth(date, month) : setMonth(date, month); 23790 }; 23791 this.setYear = (date, year) => { 23792 return this.overrides?.setYear ? this.overrides.setYear(date, year) : setYear(date, year); 23793 }; 23794 this.startOfBroadcastWeek = (date, _dateLib) => { 23795 return this.overrides?.startOfBroadcastWeek ? this.overrides.startOfBroadcastWeek(date, this) : startOfBroadcastWeek(date, this); 23796 }; 23797 this.startOfDay = (date) => { 23798 return this.overrides?.startOfDay ? this.overrides.startOfDay(date) : startOfDay(date); 23799 }; 23800 this.startOfISOWeek = (date) => { 23801 return this.overrides?.startOfISOWeek ? this.overrides.startOfISOWeek(date) : startOfISOWeek(date); 23802 }; 23803 this.startOfMonth = (date) => { 23804 return this.overrides?.startOfMonth ? this.overrides.startOfMonth(date) : startOfMonth(date); 23805 }; 23806 this.startOfWeek = (date, _options) => { 23807 return this.overrides?.startOfWeek ? this.overrides.startOfWeek(date, this.options) : startOfWeek(date, this.options); 23808 }; 23809 this.startOfYear = (date) => { 23810 return this.overrides?.startOfYear ? this.overrides.startOfYear(date) : startOfYear(date); 23811 }; 23812 this.options = { locale: enUS2, ...options }; 23813 this.overrides = overrides; 23814 } 23815 /** 23816 * Generates a mapping of Arabic digits (0-9) to the target numbering system 23817 * digits. 23818 * 23819 * @since 9.5.0 23820 * @returns A record mapping Arabic digits to the target numerals. 23821 */ 23822 getDigitMap() { 23823 const { numerals = "latn" } = this.options; 23824 const formatter = new Intl.NumberFormat("en-US", { 23825 numberingSystem: numerals 23826 }); 23827 const digitMap = {}; 23828 for (let i2 = 0; i2 < 10; i2++) { 23829 digitMap[i2.toString()] = formatter.format(i2); 23830 } 23831 return digitMap; 23832 } 23833 /** 23834 * Replaces Arabic digits in a string with the target numbering system digits. 23835 * 23836 * @since 9.5.0 23837 * @param input The string containing Arabic digits. 23838 * @returns The string with digits replaced. 23839 */ 23840 replaceDigits(input) { 23841 const digitMap = this.getDigitMap(); 23842 return input.replace(/\d/g, (digit) => digitMap[digit] || digit); 23843 } 23844 /** 23845 * Formats a number using the configured numbering system. 23846 * 23847 * @since 9.5.0 23848 * @param value The number to format. 23849 * @returns The formatted number as a string. 23850 */ 23851 formatNumber(value) { 23852 return this.replaceDigits(value.toString()); 23853 } 23854 /** 23855 * Returns the preferred ordering for month and year labels for the current 23856 * locale. 23857 */ 23858 getMonthYearOrder() { 23859 const code = this.options.locale?.code; 23860 if (!code) { 23861 return "month-first"; 23862 } 23863 return _DateLib.yearFirstLocales.has(code) ? "year-first" : "month-first"; 23864 } 23865 /** 23866 * Formats the month/year pair respecting locale conventions. 23867 * 23868 * @since 9.11.0 23869 */ 23870 formatMonthYear(date) { 23871 const { locale, timeZone, numerals } = this.options; 23872 const localeCode = locale?.code; 23873 if (localeCode && _DateLib.yearFirstLocales.has(localeCode)) { 23874 try { 23875 const intl = new Intl.DateTimeFormat(localeCode, { 23876 month: "long", 23877 year: "numeric", 23878 timeZone, 23879 numberingSystem: numerals 23880 }); 23881 const formatted = intl.format(date); 23882 return formatted; 23883 } catch { 23884 } 23885 } 23886 const pattern = this.getMonthYearOrder() === "year-first" ? "y LLLL" : "LLLL y"; 23887 return this.format(date, pattern); 23888 } 23889 }; 23890 DateLib.yearFirstLocales = /* @__PURE__ */ new Set([ 23891 "eu", 23892 "hu", 23893 "ja", 23894 "ja-Hira", 23895 "ja-JP", 23896 "ko", 23897 "ko-KR", 23898 "lt", 23899 "lt-LT", 23900 "lv", 23901 "lv-LV", 23902 "mn", 23903 "mn-MN", 23904 "zh", 23905 "zh-CN", 23906 "zh-HK", 23907 "zh-TW" 23908 ]); 23909 var defaultDateLib = new DateLib(); 23910 23911 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/classes/CalendarDay.js 23912 var CalendarDay = class { 23913 constructor(date, displayMonth, dateLib = defaultDateLib) { 23914 this.date = date; 23915 this.displayMonth = displayMonth; 23916 this.outside = Boolean(displayMonth && !dateLib.isSameMonth(date, displayMonth)); 23917 this.dateLib = dateLib; 23918 this.isoDate = dateLib.format(date, "yyyy-MM-dd"); 23919 this.displayMonthId = dateLib.format(displayMonth, "yyyy-MM"); 23920 this.dateMonthId = dateLib.format(date, "yyyy-MM"); 23921 } 23922 /** 23923 * Checks if this day is equal to another `CalendarDay`, considering both the 23924 * date and the displayed month. 23925 * 23926 * @param day The `CalendarDay` to compare with. 23927 * @returns `true` if the days are equal, otherwise `false`. 23928 */ 23929 isEqualTo(day) { 23930 return this.dateLib.isSameDay(day.date, this.date) && this.dateLib.isSameMonth(day.displayMonth, this.displayMonth); 23931 } 23932 }; 23933 23934 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/classes/CalendarMonth.js 23935 var CalendarMonth = class { 23936 constructor(month, weeks) { 23937 this.date = month; 23938 this.weeks = weeks; 23939 } 23940 }; 23941 23942 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/classes/CalendarWeek.js 23943 var CalendarWeek = class { 23944 constructor(weekNumber, days) { 23945 this.days = days; 23946 this.weekNumber = weekNumber; 23947 } 23948 }; 23949 23950 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/custom-components.js 23951 var custom_components_exports = {}; 23952 __export(custom_components_exports, { 23953 CaptionLabel: () => CaptionLabel, 23954 Chevron: () => Chevron, 23955 Day: () => Day, 23956 DayButton: () => DayButton, 23957 Dropdown: () => Dropdown, 23958 DropdownNav: () => DropdownNav, 23959 Footer: () => Footer, 23960 Month: () => Month, 23961 MonthCaption: () => MonthCaption, 23962 MonthGrid: () => MonthGrid, 23963 Months: () => Months, 23964 MonthsDropdown: () => MonthsDropdown, 23965 Nav: () => Nav, 23966 NextMonthButton: () => NextMonthButton, 23967 Option: () => Option, 23968 PreviousMonthButton: () => PreviousMonthButton, 23969 Root: () => Root3, 23970 Select: () => Select, 23971 Week: () => Week, 23972 WeekNumber: () => WeekNumber, 23973 WeekNumberHeader: () => WeekNumberHeader, 23974 Weekday: () => Weekday, 23975 Weekdays: () => Weekdays, 23976 Weeks: () => Weeks, 23977 YearsDropdown: () => YearsDropdown 23978 }); 23979 23980 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/CaptionLabel.js 23981 var import_react6 = __toESM(require_react(), 1); 23982 function CaptionLabel(props) { 23983 return import_react6.default.createElement("span", { ...props }); 23984 } 23985 23986 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Chevron.js 23987 var import_react7 = __toESM(require_react(), 1); 23988 function Chevron(props) { 23989 const { size: size4 = 24, orientation = "left", className, style } = props; 23990 return import_react7.default.createElement( 23991 "svg", 23992 { className, style, width: size4, height: size4, viewBox: "0 0 24 24" }, 23993 orientation === "up" && import_react7.default.createElement("polygon", { points: "6.77 17 12.5 11.43 18.24 17 20 15.28 12.5 8 5 15.28" }), 23994 orientation === "down" && import_react7.default.createElement("polygon", { points: "6.77 8 12.5 13.57 18.24 8 20 9.72 12.5 17 5 9.72" }), 23995 orientation === "left" && import_react7.default.createElement("polygon", { points: "16 18.112 9.81111111 12 16 5.87733333 14.0888889 4 6 12 14.0888889 20" }), 23996 orientation === "right" && import_react7.default.createElement("polygon", { points: "8 18.112 14.18888889 12 8 5.87733333 9.91111111 4 18 12 9.91111111 20" }) 23997 ); 23998 } 23999 24000 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Day.js 24001 var import_react8 = __toESM(require_react(), 1); 24002 function Day(props) { 24003 const { day, modifiers, ...tdProps } = props; 24004 return import_react8.default.createElement("td", { ...tdProps }); 24005 } 24006 24007 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/DayButton.js 24008 var import_react9 = __toESM(require_react(), 1); 24009 function DayButton(props) { 24010 const { day, modifiers, ...buttonProps } = props; 24011 const ref = import_react9.default.useRef(null); 24012 import_react9.default.useEffect(() => { 24013 if (modifiers.focused) 24014 ref.current?.focus(); 24015 }, [modifiers.focused]); 24016 return import_react9.default.createElement("button", { ref, ...buttonProps }); 24017 } 24018 24019 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Dropdown.js 24020 var import_react11 = __toESM(require_react(), 1); 24021 24022 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/UI.js 24023 var UI; 24024 (function(UI2) { 24025 UI2["Root"] = "root"; 24026 UI2["Chevron"] = "chevron"; 24027 UI2["Day"] = "day"; 24028 UI2["DayButton"] = "day_button"; 24029 UI2["CaptionLabel"] = "caption_label"; 24030 UI2["Dropdowns"] = "dropdowns"; 24031 UI2["Dropdown"] = "dropdown"; 24032 UI2["DropdownRoot"] = "dropdown_root"; 24033 UI2["Footer"] = "footer"; 24034 UI2["MonthGrid"] = "month_grid"; 24035 UI2["MonthCaption"] = "month_caption"; 24036 UI2["MonthsDropdown"] = "months_dropdown"; 24037 UI2["Month"] = "month"; 24038 UI2["Months"] = "months"; 24039 UI2["Nav"] = "nav"; 24040 UI2["NextMonthButton"] = "button_next"; 24041 UI2["PreviousMonthButton"] = "button_previous"; 24042 UI2["Week"] = "week"; 24043 UI2["Weeks"] = "weeks"; 24044 UI2["Weekday"] = "weekday"; 24045 UI2["Weekdays"] = "weekdays"; 24046 UI2["WeekNumber"] = "week_number"; 24047 UI2["WeekNumberHeader"] = "week_number_header"; 24048 UI2["YearsDropdown"] = "years_dropdown"; 24049 })(UI || (UI = {})); 24050 var DayFlag; 24051 (function(DayFlag2) { 24052 DayFlag2["disabled"] = "disabled"; 24053 DayFlag2["hidden"] = "hidden"; 24054 DayFlag2["outside"] = "outside"; 24055 DayFlag2["focused"] = "focused"; 24056 DayFlag2["today"] = "today"; 24057 })(DayFlag || (DayFlag = {})); 24058 var SelectionState; 24059 (function(SelectionState2) { 24060 SelectionState2["range_end"] = "range_end"; 24061 SelectionState2["range_middle"] = "range_middle"; 24062 SelectionState2["range_start"] = "range_start"; 24063 SelectionState2["selected"] = "selected"; 24064 })(SelectionState || (SelectionState = {})); 24065 var Animation; 24066 (function(Animation2) { 24067 Animation2["weeks_before_enter"] = "weeks_before_enter"; 24068 Animation2["weeks_before_exit"] = "weeks_before_exit"; 24069 Animation2["weeks_after_enter"] = "weeks_after_enter"; 24070 Animation2["weeks_after_exit"] = "weeks_after_exit"; 24071 Animation2["caption_after_enter"] = "caption_after_enter"; 24072 Animation2["caption_after_exit"] = "caption_after_exit"; 24073 Animation2["caption_before_enter"] = "caption_before_enter"; 24074 Animation2["caption_before_exit"] = "caption_before_exit"; 24075 })(Animation || (Animation = {})); 24076 24077 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/useDayPicker.js 24078 var import_react10 = __toESM(require_react(), 1); 24079 var dayPickerContext = (0, import_react10.createContext)(void 0); 24080 function useDayPicker() { 24081 const context = (0, import_react10.useContext)(dayPickerContext); 24082 if (context === void 0) { 24083 throw new Error("useDayPicker() must be used within a custom component."); 24084 } 24085 return context; 24086 } 24087 24088 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Dropdown.js 24089 function Dropdown(props) { 24090 const { options, className, ...selectProps } = props; 24091 const { classNames, components, styles } = useDayPicker(); 24092 const cssClassSelect = [classNames[UI.Dropdown], className].join(" "); 24093 const selectedOption = options?.find(({ value }) => value === selectProps.value); 24094 return import_react11.default.createElement( 24095 "span", 24096 { "data-disabled": selectProps.disabled, className: classNames[UI.DropdownRoot], style: styles?.[UI.DropdownRoot] }, 24097 import_react11.default.createElement(components.Select, { className: cssClassSelect, ...selectProps }, options?.map(({ value, label, disabled: disabled2 }) => import_react11.default.createElement(components.Option, { key: value, value, disabled: disabled2 }, label))), 24098 import_react11.default.createElement( 24099 "span", 24100 { className: classNames[UI.CaptionLabel], style: styles?.[UI.CaptionLabel], "aria-hidden": true }, 24101 selectedOption?.label, 24102 import_react11.default.createElement(components.Chevron, { orientation: "down", size: 18, className: classNames[UI.Chevron], style: styles?.[UI.Chevron] }) 24103 ) 24104 ); 24105 } 24106 24107 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/DropdownNav.js 24108 var import_react12 = __toESM(require_react(), 1); 24109 function DropdownNav(props) { 24110 return import_react12.default.createElement("div", { ...props }); 24111 } 24112 24113 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Footer.js 24114 var import_react13 = __toESM(require_react(), 1); 24115 function Footer(props) { 24116 return import_react13.default.createElement("div", { ...props }); 24117 } 24118 24119 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Month.js 24120 var import_react14 = __toESM(require_react(), 1); 24121 function Month(props) { 24122 const { calendarMonth, displayIndex, ...divProps } = props; 24123 return import_react14.default.createElement("div", { ...divProps }, props.children); 24124 } 24125 24126 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/MonthCaption.js 24127 var import_react15 = __toESM(require_react(), 1); 24128 function MonthCaption(props) { 24129 const { calendarMonth, displayIndex, ...divProps } = props; 24130 return import_react15.default.createElement("div", { ...divProps }); 24131 } 24132 24133 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/MonthGrid.js 24134 var import_react16 = __toESM(require_react(), 1); 24135 function MonthGrid(props) { 24136 return import_react16.default.createElement("table", { ...props }); 24137 } 24138 24139 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Months.js 24140 var import_react17 = __toESM(require_react(), 1); 24141 function Months(props) { 24142 return import_react17.default.createElement("div", { ...props }); 24143 } 24144 24145 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/MonthsDropdown.js 24146 var import_react18 = __toESM(require_react(), 1); 24147 function MonthsDropdown(props) { 24148 const { components } = useDayPicker(); 24149 return import_react18.default.createElement(components.Dropdown, { ...props }); 24150 } 24151 24152 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Nav.js 24153 var import_react19 = __toESM(require_react(), 1); 24154 function Nav(props) { 24155 const { onPreviousClick, onNextClick, previousMonth, nextMonth, ...navProps } = props; 24156 const { components, classNames, styles, labels: { labelPrevious: labelPrevious2, labelNext: labelNext2 } } = useDayPicker(); 24157 const handleNextClick = (0, import_react19.useCallback)((e2) => { 24158 if (nextMonth) { 24159 onNextClick?.(e2); 24160 } 24161 }, [nextMonth, onNextClick]); 24162 const handlePreviousClick = (0, import_react19.useCallback)((e2) => { 24163 if (previousMonth) { 24164 onPreviousClick?.(e2); 24165 } 24166 }, [previousMonth, onPreviousClick]); 24167 return import_react19.default.createElement( 24168 "nav", 24169 { ...navProps }, 24170 import_react19.default.createElement( 24171 components.PreviousMonthButton, 24172 { type: "button", className: classNames[UI.PreviousMonthButton], style: styles?.[UI.PreviousMonthButton], tabIndex: previousMonth ? void 0 : -1, "aria-disabled": previousMonth ? void 0 : true, "aria-label": labelPrevious2(previousMonth), onClick: handlePreviousClick }, 24173 import_react19.default.createElement(components.Chevron, { disabled: previousMonth ? void 0 : true, className: classNames[UI.Chevron], style: styles?.[UI.Chevron], orientation: "left" }) 24174 ), 24175 import_react19.default.createElement( 24176 components.NextMonthButton, 24177 { type: "button", className: classNames[UI.NextMonthButton], style: styles?.[UI.NextMonthButton], tabIndex: nextMonth ? void 0 : -1, "aria-disabled": nextMonth ? void 0 : true, "aria-label": labelNext2(nextMonth), onClick: handleNextClick }, 24178 import_react19.default.createElement(components.Chevron, { disabled: nextMonth ? void 0 : true, orientation: "right", className: classNames[UI.Chevron], style: styles?.[UI.Chevron] }) 24179 ) 24180 ); 24181 } 24182 24183 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/NextMonthButton.js 24184 var import_react20 = __toESM(require_react(), 1); 24185 function NextMonthButton(props) { 24186 return import_react20.default.createElement("button", { ...props }); 24187 } 24188 24189 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Option.js 24190 var import_react21 = __toESM(require_react(), 1); 24191 function Option(props) { 24192 return import_react21.default.createElement("option", { ...props }); 24193 } 24194 24195 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/PreviousMonthButton.js 24196 var import_react22 = __toESM(require_react(), 1); 24197 function PreviousMonthButton(props) { 24198 return import_react22.default.createElement("button", { ...props }); 24199 } 24200 24201 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Root.js 24202 var import_react23 = __toESM(require_react(), 1); 24203 function Root3(props) { 24204 const { rootRef, ...rest } = props; 24205 return import_react23.default.createElement("div", { ...rest, ref: rootRef }); 24206 } 24207 24208 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Select.js 24209 var import_react24 = __toESM(require_react(), 1); 24210 function Select(props) { 24211 return import_react24.default.createElement("select", { ...props }); 24212 } 24213 24214 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Week.js 24215 var import_react25 = __toESM(require_react(), 1); 24216 function Week(props) { 24217 const { week, ...trProps } = props; 24218 return import_react25.default.createElement("tr", { ...trProps }); 24219 } 24220 24221 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Weekday.js 24222 var import_react26 = __toESM(require_react(), 1); 24223 function Weekday(props) { 24224 return import_react26.default.createElement("th", { ...props }); 24225 } 24226 24227 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Weekdays.js 24228 var import_react27 = __toESM(require_react(), 1); 24229 function Weekdays(props) { 24230 return import_react27.default.createElement( 24231 "thead", 24232 { "aria-hidden": true }, 24233 import_react27.default.createElement("tr", { ...props }) 24234 ); 24235 } 24236 24237 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/WeekNumber.js 24238 var import_react28 = __toESM(require_react(), 1); 24239 function WeekNumber(props) { 24240 const { week, ...thProps } = props; 24241 return import_react28.default.createElement("th", { ...thProps }); 24242 } 24243 24244 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/WeekNumberHeader.js 24245 var import_react29 = __toESM(require_react(), 1); 24246 function WeekNumberHeader(props) { 24247 return import_react29.default.createElement("th", { ...props }); 24248 } 24249 24250 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Weeks.js 24251 var import_react30 = __toESM(require_react(), 1); 24252 function Weeks(props) { 24253 return import_react30.default.createElement("tbody", { ...props }); 24254 } 24255 24256 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/YearsDropdown.js 24257 var import_react31 = __toESM(require_react(), 1); 24258 function YearsDropdown(props) { 24259 const { components } = useDayPicker(); 24260 return import_react31.default.createElement(components.Dropdown, { ...props }); 24261 } 24262 24263 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/DayPicker.js 24264 var import_react36 = __toESM(require_react(), 1); 24265 24266 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/utils/rangeIncludesDate.js 24267 function rangeIncludesDate(range, date, excludeEnds = false, dateLib = defaultDateLib) { 24268 let { from, to } = range; 24269 const { differenceInCalendarDays: differenceInCalendarDays2, isSameDay: isSameDay2 } = dateLib; 24270 if (from && to) { 24271 const isRangeInverted = differenceInCalendarDays2(to, from) < 0; 24272 if (isRangeInverted) { 24273 [from, to] = [to, from]; 24274 } 24275 const isInRange = differenceInCalendarDays2(date, from) >= (excludeEnds ? 1 : 0) && differenceInCalendarDays2(to, date) >= (excludeEnds ? 1 : 0); 24276 return isInRange; 24277 } 24278 if (!excludeEnds && to) { 24279 return isSameDay2(to, date); 24280 } 24281 if (!excludeEnds && from) { 24282 return isSameDay2(from, date); 24283 } 24284 return false; 24285 } 24286 24287 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/utils/typeguards.js 24288 function isDateInterval(matcher) { 24289 return Boolean(matcher && typeof matcher === "object" && "before" in matcher && "after" in matcher); 24290 } 24291 function isDateRange(value) { 24292 return Boolean(value && typeof value === "object" && "from" in value); 24293 } 24294 function isDateAfterType(value) { 24295 return Boolean(value && typeof value === "object" && "after" in value); 24296 } 24297 function isDateBeforeType(value) { 24298 return Boolean(value && typeof value === "object" && "before" in value); 24299 } 24300 function isDayOfWeekType(value) { 24301 return Boolean(value && typeof value === "object" && "dayOfWeek" in value); 24302 } 24303 function isDatesArray(value, dateLib) { 24304 return Array.isArray(value) && value.every(dateLib.isDate); 24305 } 24306 24307 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/utils/dateMatchModifiers.js 24308 function dateMatchModifiers(date, matchers, dateLib = defaultDateLib) { 24309 const matchersArr = !Array.isArray(matchers) ? [matchers] : matchers; 24310 const { isSameDay: isSameDay2, differenceInCalendarDays: differenceInCalendarDays2, isAfter: isAfter2 } = dateLib; 24311 return matchersArr.some((matcher) => { 24312 if (typeof matcher === "boolean") { 24313 return matcher; 24314 } 24315 if (dateLib.isDate(matcher)) { 24316 return isSameDay2(date, matcher); 24317 } 24318 if (isDatesArray(matcher, dateLib)) { 24319 return matcher.some((matcherDate) => isSameDay2(date, matcherDate)); 24320 } 24321 if (isDateRange(matcher)) { 24322 return rangeIncludesDate(matcher, date, false, dateLib); 24323 } 24324 if (isDayOfWeekType(matcher)) { 24325 if (!Array.isArray(matcher.dayOfWeek)) { 24326 return matcher.dayOfWeek === date.getDay(); 24327 } 24328 return matcher.dayOfWeek.includes(date.getDay()); 24329 } 24330 if (isDateInterval(matcher)) { 24331 const diffBefore = differenceInCalendarDays2(matcher.before, date); 24332 const diffAfter = differenceInCalendarDays2(matcher.after, date); 24333 const isDayBefore = diffBefore > 0; 24334 const isDayAfter = diffAfter < 0; 24335 const isClosedInterval = isAfter2(matcher.before, matcher.after); 24336 if (isClosedInterval) { 24337 return isDayAfter && isDayBefore; 24338 } else { 24339 return isDayBefore || isDayAfter; 24340 } 24341 } 24342 if (isDateAfterType(matcher)) { 24343 return differenceInCalendarDays2(date, matcher.after) > 0; 24344 } 24345 if (isDateBeforeType(matcher)) { 24346 return differenceInCalendarDays2(matcher.before, date) > 0; 24347 } 24348 if (typeof matcher === "function") { 24349 return matcher(date); 24350 } 24351 return false; 24352 }); 24353 } 24354 24355 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/createGetModifiers.js 24356 function createGetModifiers(days, props, navStart, navEnd, dateLib) { 24357 const { disabled: disabled2, hidden, modifiers, showOutsideDays, broadcastCalendar, today = dateLib.today() } = props; 24358 const { isSameDay: isSameDay2, isSameMonth: isSameMonth2, startOfMonth: startOfMonth2, isBefore: isBefore2, endOfMonth: endOfMonth2, isAfter: isAfter2 } = dateLib; 24359 const computedNavStart = navStart && startOfMonth2(navStart); 24360 const computedNavEnd = navEnd && endOfMonth2(navEnd); 24361 const internalModifiersMap = { 24362 [DayFlag.focused]: [], 24363 [DayFlag.outside]: [], 24364 [DayFlag.disabled]: [], 24365 [DayFlag.hidden]: [], 24366 [DayFlag.today]: [] 24367 }; 24368 const customModifiersMap = {}; 24369 for (const day of days) { 24370 const { date, displayMonth } = day; 24371 const isOutside = Boolean(displayMonth && !isSameMonth2(date, displayMonth)); 24372 const isBeforeNavStart = Boolean(computedNavStart && isBefore2(date, computedNavStart)); 24373 const isAfterNavEnd = Boolean(computedNavEnd && isAfter2(date, computedNavEnd)); 24374 const isDisabled = Boolean(disabled2 && dateMatchModifiers(date, disabled2, dateLib)); 24375 const isHidden2 = Boolean(hidden && dateMatchModifiers(date, hidden, dateLib)) || isBeforeNavStart || isAfterNavEnd || // Broadcast calendar will show outside days as default 24376 !broadcastCalendar && !showOutsideDays && isOutside || broadcastCalendar && showOutsideDays === false && isOutside; 24377 const isToday = isSameDay2(date, today); 24378 if (isOutside) 24379 internalModifiersMap.outside.push(day); 24380 if (isDisabled) 24381 internalModifiersMap.disabled.push(day); 24382 if (isHidden2) 24383 internalModifiersMap.hidden.push(day); 24384 if (isToday) 24385 internalModifiersMap.today.push(day); 24386 if (modifiers) { 24387 Object.keys(modifiers).forEach((name) => { 24388 const modifierValue = modifiers?.[name]; 24389 const isMatch = modifierValue ? dateMatchModifiers(date, modifierValue, dateLib) : false; 24390 if (!isMatch) 24391 return; 24392 if (customModifiersMap[name]) { 24393 customModifiersMap[name].push(day); 24394 } else { 24395 customModifiersMap[name] = [day]; 24396 } 24397 }); 24398 } 24399 } 24400 return (day) => { 24401 const dayFlags = { 24402 [DayFlag.focused]: false, 24403 [DayFlag.disabled]: false, 24404 [DayFlag.hidden]: false, 24405 [DayFlag.outside]: false, 24406 [DayFlag.today]: false 24407 }; 24408 const customModifiers = {}; 24409 for (const name in internalModifiersMap) { 24410 const days2 = internalModifiersMap[name]; 24411 dayFlags[name] = days2.some((d2) => d2 === day); 24412 } 24413 for (const name in customModifiersMap) { 24414 customModifiers[name] = customModifiersMap[name].some((d2) => d2 === day); 24415 } 24416 return { 24417 ...dayFlags, 24418 // custom modifiers should override all the previous ones 24419 ...customModifiers 24420 }; 24421 }; 24422 } 24423 24424 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getClassNamesForModifiers.js 24425 function getClassNamesForModifiers(modifiers, classNames, modifiersClassNames = {}) { 24426 const modifierClassNames = Object.entries(modifiers).filter(([, active]) => active === true).reduce((previousValue, [key]) => { 24427 if (modifiersClassNames[key]) { 24428 previousValue.push(modifiersClassNames[key]); 24429 } else if (classNames[DayFlag[key]]) { 24430 previousValue.push(classNames[DayFlag[key]]); 24431 } else if (classNames[SelectionState[key]]) { 24432 previousValue.push(classNames[SelectionState[key]]); 24433 } 24434 return previousValue; 24435 }, [classNames[UI.Day]]); 24436 return modifierClassNames; 24437 } 24438 24439 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getComponents.js 24440 function getComponents(customComponents) { 24441 return { 24442 ...custom_components_exports, 24443 ...customComponents 24444 }; 24445 } 24446 24447 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getDataAttributes.js 24448 function getDataAttributes(props) { 24449 const dataAttributes = { 24450 "data-mode": props.mode ?? void 0, 24451 "data-required": "required" in props ? props.required : void 0, 24452 "data-multiple-months": props.numberOfMonths && props.numberOfMonths > 1 || void 0, 24453 "data-week-numbers": props.showWeekNumber || void 0, 24454 "data-broadcast-calendar": props.broadcastCalendar || void 0, 24455 "data-nav-layout": props.navLayout || void 0 24456 }; 24457 Object.entries(props).forEach(([key, val]) => { 24458 if (key.startsWith("data-")) { 24459 dataAttributes[key] = val; 24460 } 24461 }); 24462 return dataAttributes; 24463 } 24464 24465 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getDefaultClassNames.js 24466 function getDefaultClassNames() { 24467 const classNames = {}; 24468 for (const key in UI) { 24469 classNames[UI[key]] = `rdp-$UI[key]}`; 24470 } 24471 for (const key in DayFlag) { 24472 classNames[DayFlag[key]] = `rdp-$DayFlag[key]}`; 24473 } 24474 for (const key in SelectionState) { 24475 classNames[SelectionState[key]] = `rdp-$SelectionState[key]}`; 24476 } 24477 for (const key in Animation) { 24478 classNames[Animation[key]] = `rdp-$Animation[key]}`; 24479 } 24480 return classNames; 24481 } 24482 24483 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/formatters/index.js 24484 var formatters_exports = {}; 24485 __export(formatters_exports, { 24486 formatCaption: () => formatCaption, 24487 formatDay: () => formatDay, 24488 formatMonthDropdown: () => formatMonthDropdown, 24489 formatWeekNumber: () => formatWeekNumber, 24490 formatWeekNumberHeader: () => formatWeekNumberHeader, 24491 formatWeekdayName: () => formatWeekdayName, 24492 formatYearDropdown: () => formatYearDropdown 24493 }); 24494 24495 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/formatters/formatCaption.js 24496 function formatCaption(month, options, dateLib) { 24497 const lib = dateLib ?? new DateLib(options); 24498 return lib.formatMonthYear(month); 24499 } 24500 24501 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/formatters/formatDay.js 24502 function formatDay(date, options, dateLib) { 24503 return (dateLib ?? new DateLib(options)).format(date, "d"); 24504 } 24505 24506 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/formatters/formatMonthDropdown.js 24507 function formatMonthDropdown(month, dateLib = defaultDateLib) { 24508 return dateLib.format(month, "LLLL"); 24509 } 24510 24511 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/formatters/formatWeekdayName.js 24512 function formatWeekdayName(weekday, options, dateLib) { 24513 return (dateLib ?? new DateLib(options)).format(weekday, "cccccc"); 24514 } 24515 24516 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/formatters/formatWeekNumber.js 24517 function formatWeekNumber(weekNumber, dateLib = defaultDateLib) { 24518 if (weekNumber < 10) { 24519 return dateLib.formatNumber(`0$weekNumber.toLocaleString()}`); 24520 } 24521 return dateLib.formatNumber(`$weekNumber.toLocaleString()}`); 24522 } 24523 24524 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/formatters/formatWeekNumberHeader.js 24525 function formatWeekNumberHeader() { 24526 return ``; 24527 } 24528 24529 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/formatters/formatYearDropdown.js 24530 function formatYearDropdown(year, dateLib = defaultDateLib) { 24531 return dateLib.format(year, "yyyy"); 24532 } 24533 24534 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getFormatters.js 24535 function getFormatters(customFormatters) { 24536 return { 24537 ...formatters_exports, 24538 ...customFormatters 24539 }; 24540 } 24541 24542 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/index.js 24543 var labels_exports = {}; 24544 __export(labels_exports, { 24545 labelDayButton: () => labelDayButton, 24546 labelGrid: () => labelGrid, 24547 labelGridcell: () => labelGridcell, 24548 labelMonthDropdown: () => labelMonthDropdown, 24549 labelNav: () => labelNav, 24550 labelNext: () => labelNext, 24551 labelPrevious: () => labelPrevious, 24552 labelWeekNumber: () => labelWeekNumber, 24553 labelWeekNumberHeader: () => labelWeekNumberHeader, 24554 labelWeekday: () => labelWeekday, 24555 labelYearDropdown: () => labelYearDropdown 24556 }); 24557 24558 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelDayButton.js 24559 function labelDayButton(date, modifiers, options, dateLib) { 24560 let label = (dateLib ?? new DateLib(options)).format(date, "PPPP"); 24561 if (modifiers.today) 24562 label = `Today, $label}`; 24563 if (modifiers.selected) 24564 label = `$label}, selected`; 24565 return label; 24566 } 24567 24568 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelGrid.js 24569 function labelGrid(date, options, dateLib) { 24570 const lib = dateLib ?? new DateLib(options); 24571 return lib.formatMonthYear(date); 24572 } 24573 24574 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelGridcell.js 24575 function labelGridcell(date, modifiers, options, dateLib) { 24576 let label = (dateLib ?? new DateLib(options)).format(date, "PPPP"); 24577 if (modifiers?.today) { 24578 label = `Today, $label}`; 24579 } 24580 return label; 24581 } 24582 24583 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelMonthDropdown.js 24584 function labelMonthDropdown(_options) { 24585 return "Choose the Month"; 24586 } 24587 24588 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelNav.js 24589 function labelNav() { 24590 return ""; 24591 } 24592 24593 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelNext.js 24594 var defaultLabel = "Go to the Next Month"; 24595 function labelNext(_month, _options) { 24596 return defaultLabel; 24597 } 24598 24599 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelPrevious.js 24600 function labelPrevious(_month) { 24601 return "Go to the Previous Month"; 24602 } 24603 24604 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelWeekday.js 24605 function labelWeekday(date, options, dateLib) { 24606 return (dateLib ?? new DateLib(options)).format(date, "cccc"); 24607 } 24608 24609 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelWeekNumber.js 24610 function labelWeekNumber(weekNumber, _options) { 24611 return `Week $weekNumber}`; 24612 } 24613 24614 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelWeekNumberHeader.js 24615 function labelWeekNumberHeader(_options) { 24616 return "Week Number"; 24617 } 24618 24619 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelYearDropdown.js 24620 function labelYearDropdown(_options) { 24621 return "Choose the Year"; 24622 } 24623 24624 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getLabels.js 24625 var resolveLabel = (defaultLabel2, customLabel, localeLabel) => { 24626 if (customLabel) 24627 return customLabel; 24628 if (localeLabel) { 24629 return typeof localeLabel === "function" ? localeLabel : (..._args) => localeLabel; 24630 } 24631 return defaultLabel2; 24632 }; 24633 function getLabels(customLabels, options) { 24634 const localeLabels = options.locale?.labels ?? {}; 24635 return { 24636 ...labels_exports, 24637 ...customLabels ?? {}, 24638 labelDayButton: resolveLabel(labelDayButton, customLabels?.labelDayButton, localeLabels.labelDayButton), 24639 labelMonthDropdown: resolveLabel(labelMonthDropdown, customLabels?.labelMonthDropdown, localeLabels.labelMonthDropdown), 24640 labelNext: resolveLabel(labelNext, customLabels?.labelNext, localeLabels.labelNext), 24641 labelPrevious: resolveLabel(labelPrevious, customLabels?.labelPrevious, localeLabels.labelPrevious), 24642 labelWeekNumber: resolveLabel(labelWeekNumber, customLabels?.labelWeekNumber, localeLabels.labelWeekNumber), 24643 labelYearDropdown: resolveLabel(labelYearDropdown, customLabels?.labelYearDropdown, localeLabels.labelYearDropdown), 24644 labelGrid: resolveLabel(labelGrid, customLabels?.labelGrid, localeLabels.labelGrid), 24645 labelGridcell: resolveLabel(labelGridcell, customLabels?.labelGridcell, localeLabels.labelGridcell), 24646 labelNav: resolveLabel(labelNav, customLabels?.labelNav, localeLabels.labelNav), 24647 labelWeekNumberHeader: resolveLabel(labelWeekNumberHeader, customLabels?.labelWeekNumberHeader, localeLabels.labelWeekNumberHeader), 24648 labelWeekday: resolveLabel(labelWeekday, customLabels?.labelWeekday, localeLabels.labelWeekday) 24649 }; 24650 } 24651 24652 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getMonthOptions.js 24653 function getMonthOptions(displayMonth, navStart, navEnd, formatters2, dateLib) { 24654 const { startOfMonth: startOfMonth2, startOfYear: startOfYear2, endOfYear: endOfYear2, eachMonthOfInterval: eachMonthOfInterval2, getMonth: getMonth2 } = dateLib; 24655 const months = eachMonthOfInterval2({ 24656 start: startOfYear2(displayMonth), 24657 end: endOfYear2(displayMonth) 24658 }); 24659 const options = months.map((month) => { 24660 const label = formatters2.formatMonthDropdown(month, dateLib); 24661 const value = getMonth2(month); 24662 const disabled2 = navStart && month < startOfMonth2(navStart) || navEnd && month > startOfMonth2(navEnd) || false; 24663 return { value, label, disabled: disabled2 }; 24664 }); 24665 return options; 24666 } 24667 24668 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getStyleForModifiers.js 24669 function getStyleForModifiers(dayModifiers, styles = {}, modifiersStyles = {}) { 24670 let style = { ...styles?.[UI.Day] }; 24671 Object.entries(dayModifiers).filter(([, active]) => active === true).forEach(([modifier]) => { 24672 style = { 24673 ...style, 24674 ...modifiersStyles?.[modifier] 24675 }; 24676 }); 24677 return style; 24678 } 24679 24680 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getWeekdays.js 24681 function getWeekdays(dateLib, ISOWeek, broadcastCalendar, today) { 24682 const referenceToday = today ?? dateLib.today(); 24683 const start = broadcastCalendar ? dateLib.startOfBroadcastWeek(referenceToday, dateLib) : ISOWeek ? dateLib.startOfISOWeek(referenceToday) : dateLib.startOfWeek(referenceToday); 24684 const days = []; 24685 for (let i2 = 0; i2 < 7; i2++) { 24686 const day = dateLib.addDays(start, i2); 24687 days.push(day); 24688 } 24689 return days; 24690 } 24691 24692 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getYearOptions.js 24693 function getYearOptions(navStart, navEnd, formatters2, dateLib, reverse = false) { 24694 if (!navStart) 24695 return void 0; 24696 if (!navEnd) 24697 return void 0; 24698 const { startOfYear: startOfYear2, endOfYear: endOfYear2, eachYearOfInterval: eachYearOfInterval2, getYear: getYear2 } = dateLib; 24699 const firstNavYear = startOfYear2(navStart); 24700 const lastNavYear = endOfYear2(navEnd); 24701 const years = eachYearOfInterval2({ start: firstNavYear, end: lastNavYear }); 24702 if (reverse) 24703 years.reverse(); 24704 return years.map((year) => { 24705 const label = formatters2.formatYearDropdown(year, dateLib); 24706 return { 24707 value: getYear2(year), 24708 label, 24709 disabled: false 24710 }; 24711 }); 24712 } 24713 24714 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/noonDateLib.js 24715 function createNoonOverrides(timeZone, options = {}) { 24716 const { weekStartsOn, locale } = options; 24717 const fallbackWeekStartsOn = weekStartsOn ?? locale?.options?.weekStartsOn ?? 0; 24718 const toNoonTZDate = (date) => { 24719 const normalizedDate = typeof date === "number" || typeof date === "string" ? new Date(date) : date; 24720 return new TZDate(normalizedDate.getFullYear(), normalizedDate.getMonth(), normalizedDate.getDate(), 12, 0, 0, timeZone); 24721 }; 24722 const toCalendarDate2 = (date) => { 24723 const zoned = toNoonTZDate(date); 24724 return new Date(zoned.getFullYear(), zoned.getMonth(), zoned.getDate(), 0, 0, 0, 0); 24725 }; 24726 return { 24727 today: () => { 24728 return toNoonTZDate(TZDate.tz(timeZone)); 24729 }, 24730 newDate: (year, monthIndex, date) => { 24731 return new TZDate(year, monthIndex, date, 12, 0, 0, timeZone); 24732 }, 24733 startOfDay: (date) => { 24734 return toNoonTZDate(date); 24735 }, 24736 startOfWeek: (date, options2) => { 24737 const base = toNoonTZDate(date); 24738 const weekStartsOnValue = options2?.weekStartsOn ?? fallbackWeekStartsOn; 24739 const diff = (base.getDay() - weekStartsOnValue + 7) % 7; 24740 base.setDate(base.getDate() - diff); 24741 return base; 24742 }, 24743 startOfISOWeek: (date) => { 24744 const base = toNoonTZDate(date); 24745 const diff = (base.getDay() - 1 + 7) % 7; 24746 base.setDate(base.getDate() - diff); 24747 return base; 24748 }, 24749 startOfMonth: (date) => { 24750 const base = toNoonTZDate(date); 24751 base.setDate(1); 24752 return base; 24753 }, 24754 startOfYear: (date) => { 24755 const base = toNoonTZDate(date); 24756 base.setMonth(0, 1); 24757 return base; 24758 }, 24759 endOfWeek: (date, options2) => { 24760 const base = toNoonTZDate(date); 24761 const weekStartsOnValue = options2?.weekStartsOn ?? fallbackWeekStartsOn; 24762 const endDow = (weekStartsOnValue + 6) % 7; 24763 const diff = (endDow - base.getDay() + 7) % 7; 24764 base.setDate(base.getDate() + diff); 24765 return base; 24766 }, 24767 endOfISOWeek: (date) => { 24768 const base = toNoonTZDate(date); 24769 const diff = (7 - base.getDay()) % 7; 24770 base.setDate(base.getDate() + diff); 24771 return base; 24772 }, 24773 endOfMonth: (date) => { 24774 const base = toNoonTZDate(date); 24775 base.setMonth(base.getMonth() + 1, 0); 24776 return base; 24777 }, 24778 endOfYear: (date) => { 24779 const base = toNoonTZDate(date); 24780 base.setMonth(11, 31); 24781 return base; 24782 }, 24783 eachMonthOfInterval: (interval) => { 24784 const start = toNoonTZDate(interval.start); 24785 const end = toNoonTZDate(interval.end); 24786 const result = []; 24787 const cursor = new TZDate(start.getFullYear(), start.getMonth(), 1, 12, 0, 0, timeZone); 24788 const endKey = end.getFullYear() * 12 + end.getMonth(); 24789 while (cursor.getFullYear() * 12 + cursor.getMonth() <= endKey) { 24790 result.push(new TZDate(cursor, timeZone)); 24791 cursor.setMonth(cursor.getMonth() + 1, 1); 24792 } 24793 return result; 24794 }, 24795 // Normalize to noon once before arithmetic (avoid DST/midnight edge cases), 24796 // mutate the same TZDate, and return it. 24797 addDays: (date, amount) => { 24798 const base = toNoonTZDate(date); 24799 base.setDate(base.getDate() + amount); 24800 return base; 24801 }, 24802 addWeeks: (date, amount) => { 24803 const base = toNoonTZDate(date); 24804 base.setDate(base.getDate() + amount * 7); 24805 return base; 24806 }, 24807 addMonths: (date, amount) => { 24808 const base = toNoonTZDate(date); 24809 base.setMonth(base.getMonth() + amount); 24810 return base; 24811 }, 24812 addYears: (date, amount) => { 24813 const base = toNoonTZDate(date); 24814 base.setFullYear(base.getFullYear() + amount); 24815 return base; 24816 }, 24817 eachYearOfInterval: (interval) => { 24818 const start = toNoonTZDate(interval.start); 24819 const end = toNoonTZDate(interval.end); 24820 const years = []; 24821 const cursor = new TZDate(start.getFullYear(), 0, 1, 12, 0, 0, timeZone); 24822 while (cursor.getFullYear() <= end.getFullYear()) { 24823 years.push(new TZDate(cursor, timeZone)); 24824 cursor.setFullYear(cursor.getFullYear() + 1, 0, 1); 24825 } 24826 return years; 24827 }, 24828 getWeek: (date, options2) => { 24829 const base = toCalendarDate2(date); 24830 return getWeek(base, { 24831 weekStartsOn: options2?.weekStartsOn ?? fallbackWeekStartsOn, 24832 firstWeekContainsDate: options2?.firstWeekContainsDate ?? locale?.options?.firstWeekContainsDate ?? 1 24833 }); 24834 }, 24835 getISOWeek: (date) => { 24836 const base = toCalendarDate2(date); 24837 return getISOWeek(base); 24838 }, 24839 differenceInCalendarDays: (dateLeft, dateRight) => { 24840 const left = toCalendarDate2(dateLeft); 24841 const right = toCalendarDate2(dateRight); 24842 return differenceInCalendarDays(left, right); 24843 }, 24844 differenceInCalendarMonths: (dateLeft, dateRight) => { 24845 const left = toCalendarDate2(dateLeft); 24846 const right = toCalendarDate2(dateRight); 24847 return differenceInCalendarMonths(left, right); 24848 } 24849 }; 24850 } 24851 24852 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/useAnimation.js 24853 var import_react32 = __toESM(require_react(), 1); 24854 var asHtmlElement = (element) => { 24855 if (element instanceof HTMLElement) 24856 return element; 24857 return null; 24858 }; 24859 var queryMonthEls = (element) => [ 24860 ...element.querySelectorAll("[data-animated-month]") ?? [] 24861 ]; 24862 var queryMonthEl = (element) => asHtmlElement(element.querySelector("[data-animated-month]")); 24863 var queryCaptionEl = (element) => asHtmlElement(element.querySelector("[data-animated-caption]")); 24864 var queryWeeksEl = (element) => asHtmlElement(element.querySelector("[data-animated-weeks]")); 24865 var queryNavEl = (element) => asHtmlElement(element.querySelector("[data-animated-nav]")); 24866 var queryWeekdaysEl = (element) => asHtmlElement(element.querySelector("[data-animated-weekdays]")); 24867 function useAnimation(rootElRef, enabled, { classNames, months, focused, dateLib }) { 24868 const previousRootElSnapshotRef = (0, import_react32.useRef)(null); 24869 const previousMonthsRef = (0, import_react32.useRef)(months); 24870 const animatingRef = (0, import_react32.useRef)(false); 24871 (0, import_react32.useLayoutEffect)(() => { 24872 const previousMonths = previousMonthsRef.current; 24873 previousMonthsRef.current = months; 24874 if (!enabled || !rootElRef.current || // safety check because the ref can be set to anything by consumers 24875 !(rootElRef.current instanceof HTMLElement) || // validation required for the animation to work as expected 24876 months.length === 0 || previousMonths.length === 0 || months.length !== previousMonths.length) { 24877 return; 24878 } 24879 const isSameMonth2 = dateLib.isSameMonth(months[0].date, previousMonths[0].date); 24880 const isAfterPreviousMonth = dateLib.isAfter(months[0].date, previousMonths[0].date); 24881 const captionAnimationClass = isAfterPreviousMonth ? classNames[Animation.caption_after_enter] : classNames[Animation.caption_before_enter]; 24882 const weeksAnimationClass = isAfterPreviousMonth ? classNames[Animation.weeks_after_enter] : classNames[Animation.weeks_before_enter]; 24883 const previousRootElSnapshot = previousRootElSnapshotRef.current; 24884 const rootElSnapshot = rootElRef.current.cloneNode(true); 24885 if (rootElSnapshot instanceof HTMLElement) { 24886 const currentMonthElsSnapshot = queryMonthEls(rootElSnapshot); 24887 currentMonthElsSnapshot.forEach((currentMonthElSnapshot) => { 24888 if (!(currentMonthElSnapshot instanceof HTMLElement)) 24889 return; 24890 const previousMonthElSnapshot = queryMonthEl(currentMonthElSnapshot); 24891 if (previousMonthElSnapshot && currentMonthElSnapshot.contains(previousMonthElSnapshot)) { 24892 currentMonthElSnapshot.removeChild(previousMonthElSnapshot); 24893 } 24894 const captionEl = queryCaptionEl(currentMonthElSnapshot); 24895 if (captionEl) { 24896 captionEl.classList.remove(captionAnimationClass); 24897 } 24898 const weeksEl = queryWeeksEl(currentMonthElSnapshot); 24899 if (weeksEl) { 24900 weeksEl.classList.remove(weeksAnimationClass); 24901 } 24902 }); 24903 previousRootElSnapshotRef.current = rootElSnapshot; 24904 } else { 24905 previousRootElSnapshotRef.current = null; 24906 } 24907 if (animatingRef.current || isSameMonth2 || // skip animation if a day is focused because it can cause issues to the animation and is better for a11y 24908 focused) { 24909 return; 24910 } 24911 const previousMonthEls = previousRootElSnapshot instanceof HTMLElement ? queryMonthEls(previousRootElSnapshot) : []; 24912 const currentMonthEls = queryMonthEls(rootElRef.current); 24913 if (currentMonthEls?.every((el) => el instanceof HTMLElement) && previousMonthEls?.every((el) => el instanceof HTMLElement)) { 24914 animatingRef.current = true; 24915 const cleanUpFunctions = []; 24916 rootElRef.current.style.isolation = "isolate"; 24917 const navEl = queryNavEl(rootElRef.current); 24918 if (navEl) { 24919 navEl.style.zIndex = "1"; 24920 } 24921 currentMonthEls.forEach((currentMonthEl, index2) => { 24922 const previousMonthEl = previousMonthEls[index2]; 24923 if (!previousMonthEl) { 24924 return; 24925 } 24926 currentMonthEl.style.position = "relative"; 24927 currentMonthEl.style.overflow = "hidden"; 24928 const captionEl = queryCaptionEl(currentMonthEl); 24929 if (captionEl) { 24930 captionEl.classList.add(captionAnimationClass); 24931 } 24932 const weeksEl = queryWeeksEl(currentMonthEl); 24933 if (weeksEl) { 24934 weeksEl.classList.add(weeksAnimationClass); 24935 } 24936 const cleanUp = () => { 24937 animatingRef.current = false; 24938 if (rootElRef.current) { 24939 rootElRef.current.style.isolation = ""; 24940 } 24941 if (navEl) { 24942 navEl.style.zIndex = ""; 24943 } 24944 if (captionEl) { 24945 captionEl.classList.remove(captionAnimationClass); 24946 } 24947 if (weeksEl) { 24948 weeksEl.classList.remove(weeksAnimationClass); 24949 } 24950 currentMonthEl.style.position = ""; 24951 currentMonthEl.style.overflow = ""; 24952 if (currentMonthEl.contains(previousMonthEl)) { 24953 currentMonthEl.removeChild(previousMonthEl); 24954 } 24955 }; 24956 cleanUpFunctions.push(cleanUp); 24957 previousMonthEl.style.pointerEvents = "none"; 24958 previousMonthEl.style.position = "absolute"; 24959 previousMonthEl.style.overflow = "hidden"; 24960 previousMonthEl.setAttribute("aria-hidden", "true"); 24961 const previousWeekdaysEl = queryWeekdaysEl(previousMonthEl); 24962 if (previousWeekdaysEl) { 24963 previousWeekdaysEl.style.opacity = "0"; 24964 } 24965 const previousCaptionEl = queryCaptionEl(previousMonthEl); 24966 if (previousCaptionEl) { 24967 previousCaptionEl.classList.add(isAfterPreviousMonth ? classNames[Animation.caption_before_exit] : classNames[Animation.caption_after_exit]); 24968 previousCaptionEl.addEventListener("animationend", cleanUp); 24969 } 24970 const previousWeeksEl = queryWeeksEl(previousMonthEl); 24971 if (previousWeeksEl) { 24972 previousWeeksEl.classList.add(isAfterPreviousMonth ? classNames[Animation.weeks_before_exit] : classNames[Animation.weeks_after_exit]); 24973 } 24974 currentMonthEl.insertBefore(previousMonthEl, currentMonthEl.firstChild); 24975 }); 24976 } 24977 }); 24978 } 24979 24980 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/useCalendar.js 24981 var import_react34 = __toESM(require_react(), 1); 24982 24983 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getDates.js 24984 function getDates(displayMonths, maxDate, props, dateLib) { 24985 const firstMonth = displayMonths[0]; 24986 const lastMonth = displayMonths[displayMonths.length - 1]; 24987 const { ISOWeek, fixedWeeks, broadcastCalendar } = props ?? {}; 24988 const { addDays: addDays2, differenceInCalendarDays: differenceInCalendarDays2, differenceInCalendarMonths: differenceInCalendarMonths2, endOfBroadcastWeek: endOfBroadcastWeek2, endOfISOWeek: endOfISOWeek2, endOfMonth: endOfMonth2, endOfWeek: endOfWeek2, isAfter: isAfter2, startOfBroadcastWeek: startOfBroadcastWeek2, startOfISOWeek: startOfISOWeek2, startOfWeek: startOfWeek2 } = dateLib; 24989 const startWeekFirstDate = broadcastCalendar ? startOfBroadcastWeek2(firstMonth, dateLib) : ISOWeek ? startOfISOWeek2(firstMonth) : startOfWeek2(firstMonth); 24990 const displayMonthsWeekEnd = broadcastCalendar ? endOfBroadcastWeek2(lastMonth) : ISOWeek ? endOfISOWeek2(endOfMonth2(lastMonth)) : endOfWeek2(endOfMonth2(lastMonth)); 24991 const constraintWeekEnd = maxDate && (broadcastCalendar ? endOfBroadcastWeek2(maxDate) : ISOWeek ? endOfISOWeek2(maxDate) : endOfWeek2(maxDate)); 24992 const gridEndDate = constraintWeekEnd && isAfter2(displayMonthsWeekEnd, constraintWeekEnd) ? constraintWeekEnd : displayMonthsWeekEnd; 24993 const nOfDays = differenceInCalendarDays2(gridEndDate, startWeekFirstDate); 24994 const nOfMonths = differenceInCalendarMonths2(lastMonth, firstMonth) + 1; 24995 const dates = []; 24996 for (let i2 = 0; i2 <= nOfDays; i2++) { 24997 const date = addDays2(startWeekFirstDate, i2); 24998 dates.push(date); 24999 } 25000 const nrOfDaysWithFixedWeeks = broadcastCalendar ? 35 : 42; 25001 const extraDates = nrOfDaysWithFixedWeeks * nOfMonths; 25002 if (fixedWeeks && dates.length < extraDates) { 25003 const daysToAdd = extraDates - dates.length; 25004 for (let i2 = 0; i2 < daysToAdd; i2++) { 25005 const date = addDays2(dates[dates.length - 1], 1); 25006 dates.push(date); 25007 } 25008 } 25009 return dates; 25010 } 25011 25012 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getDays.js 25013 function getDays(calendarMonths) { 25014 const initialDays = []; 25015 return calendarMonths.reduce((days, month) => { 25016 const weekDays = month.weeks.reduce((weekDays2, week) => { 25017 return weekDays2.concat(week.days.slice()); 25018 }, initialDays.slice()); 25019 return days.concat(weekDays.slice()); 25020 }, initialDays.slice()); 25021 } 25022 25023 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getDisplayMonths.js 25024 function getDisplayMonths(firstDisplayedMonth, calendarEndMonth, props, dateLib) { 25025 const { numberOfMonths = 1 } = props; 25026 const months = []; 25027 for (let i2 = 0; i2 < numberOfMonths; i2++) { 25028 const month = dateLib.addMonths(firstDisplayedMonth, i2); 25029 if (calendarEndMonth && month > calendarEndMonth) { 25030 break; 25031 } 25032 months.push(month); 25033 } 25034 return months; 25035 } 25036 25037 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getInitialMonth.js 25038 function getInitialMonth(props, navStart, navEnd, dateLib) { 25039 const { month, defaultMonth, today = dateLib.today(), numberOfMonths = 1 } = props; 25040 let initialMonth = month || defaultMonth || today; 25041 const { differenceInCalendarMonths: differenceInCalendarMonths2, addMonths: addMonths2, startOfMonth: startOfMonth2 } = dateLib; 25042 if (navEnd && differenceInCalendarMonths2(navEnd, initialMonth) < numberOfMonths - 1) { 25043 const offset4 = -1 * (numberOfMonths - 1); 25044 initialMonth = addMonths2(navEnd, offset4); 25045 } 25046 if (navStart && differenceInCalendarMonths2(initialMonth, navStart) < 0) { 25047 initialMonth = navStart; 25048 } 25049 return startOfMonth2(initialMonth); 25050 } 25051 25052 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getMonths.js 25053 function getMonths(displayMonths, dates, props, dateLib) { 25054 const { addDays: addDays2, endOfBroadcastWeek: endOfBroadcastWeek2, endOfISOWeek: endOfISOWeek2, endOfMonth: endOfMonth2, endOfWeek: endOfWeek2, getISOWeek: getISOWeek2, getWeek: getWeek2, startOfBroadcastWeek: startOfBroadcastWeek2, startOfISOWeek: startOfISOWeek2, startOfWeek: startOfWeek2 } = dateLib; 25055 const dayPickerMonths = displayMonths.reduce((months, month) => { 25056 const firstDateOfFirstWeek = props.broadcastCalendar ? startOfBroadcastWeek2(month, dateLib) : props.ISOWeek ? startOfISOWeek2(month) : startOfWeek2(month); 25057 const lastDateOfLastWeek = props.broadcastCalendar ? endOfBroadcastWeek2(month) : props.ISOWeek ? endOfISOWeek2(endOfMonth2(month)) : endOfWeek2(endOfMonth2(month)); 25058 const monthDates = dates.filter((date) => { 25059 return date >= firstDateOfFirstWeek && date <= lastDateOfLastWeek; 25060 }); 25061 const nrOfDaysWithFixedWeeks = props.broadcastCalendar ? 35 : 42; 25062 if (props.fixedWeeks && monthDates.length < nrOfDaysWithFixedWeeks) { 25063 const extraDates = dates.filter((date) => { 25064 const daysToAdd = nrOfDaysWithFixedWeeks - monthDates.length; 25065 return date > lastDateOfLastWeek && date <= addDays2(lastDateOfLastWeek, daysToAdd); 25066 }); 25067 monthDates.push(...extraDates); 25068 } 25069 const weeks = monthDates.reduce((weeks2, date) => { 25070 const weekNumber = props.ISOWeek ? getISOWeek2(date) : getWeek2(date); 25071 const week = weeks2.find((week2) => week2.weekNumber === weekNumber); 25072 const day = new CalendarDay(date, month, dateLib); 25073 if (!week) { 25074 weeks2.push(new CalendarWeek(weekNumber, [day])); 25075 } else { 25076 week.days.push(day); 25077 } 25078 return weeks2; 25079 }, []); 25080 const dayPickerMonth = new CalendarMonth(month, weeks); 25081 months.push(dayPickerMonth); 25082 return months; 25083 }, []); 25084 if (!props.reverseMonths) { 25085 return dayPickerMonths; 25086 } else { 25087 return dayPickerMonths.reverse(); 25088 } 25089 } 25090 25091 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getNavMonth.js 25092 function getNavMonths(props, dateLib) { 25093 let { startMonth, endMonth } = props; 25094 const { startOfYear: startOfYear2, startOfDay: startOfDay2, startOfMonth: startOfMonth2, endOfMonth: endOfMonth2, addYears: addYears2, endOfYear: endOfYear2, today } = dateLib; 25095 const hasYearDropdown = props.captionLayout === "dropdown" || props.captionLayout === "dropdown-years"; 25096 if (startMonth) { 25097 startMonth = startOfMonth2(startMonth); 25098 } else if (!startMonth && hasYearDropdown) { 25099 startMonth = startOfYear2(addYears2(props.today ?? today(), -100)); 25100 } 25101 if (endMonth) { 25102 endMonth = endOfMonth2(endMonth); 25103 } else if (!endMonth && hasYearDropdown) { 25104 endMonth = endOfYear2(props.today ?? today()); 25105 } 25106 return [ 25107 startMonth ? startOfDay2(startMonth) : startMonth, 25108 endMonth ? startOfDay2(endMonth) : endMonth 25109 ]; 25110 } 25111 25112 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getNextMonth.js 25113 function getNextMonth(firstDisplayedMonth, calendarEndMonth, options, dateLib) { 25114 if (options.disableNavigation) { 25115 return void 0; 25116 } 25117 const { pagedNavigation, numberOfMonths = 1 } = options; 25118 const { startOfMonth: startOfMonth2, addMonths: addMonths2, differenceInCalendarMonths: differenceInCalendarMonths2 } = dateLib; 25119 const offset4 = pagedNavigation ? numberOfMonths : 1; 25120 const month = startOfMonth2(firstDisplayedMonth); 25121 if (!calendarEndMonth) { 25122 return addMonths2(month, offset4); 25123 } 25124 const monthsDiff = differenceInCalendarMonths2(calendarEndMonth, firstDisplayedMonth); 25125 if (monthsDiff < numberOfMonths) { 25126 return void 0; 25127 } 25128 return addMonths2(month, offset4); 25129 } 25130 25131 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getPreviousMonth.js 25132 function getPreviousMonth(firstDisplayedMonth, calendarStartMonth, options, dateLib) { 25133 if (options.disableNavigation) { 25134 return void 0; 25135 } 25136 const { pagedNavigation, numberOfMonths } = options; 25137 const { startOfMonth: startOfMonth2, addMonths: addMonths2, differenceInCalendarMonths: differenceInCalendarMonths2 } = dateLib; 25138 const offset4 = pagedNavigation ? numberOfMonths ?? 1 : 1; 25139 const month = startOfMonth2(firstDisplayedMonth); 25140 if (!calendarStartMonth) { 25141 return addMonths2(month, -offset4); 25142 } 25143 const monthsDiff = differenceInCalendarMonths2(month, calendarStartMonth); 25144 if (monthsDiff <= 0) { 25145 return void 0; 25146 } 25147 return addMonths2(month, -offset4); 25148 } 25149 25150 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getWeeks.js 25151 function getWeeks(months) { 25152 const initialWeeks = []; 25153 return months.reduce((weeks, month) => { 25154 return weeks.concat(month.weeks.slice()); 25155 }, initialWeeks.slice()); 25156 } 25157 25158 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/useControlledValue.js 25159 var import_react33 = __toESM(require_react(), 1); 25160 function useControlledValue(defaultValue2, controlledValue) { 25161 const [uncontrolledValue, setValue] = (0, import_react33.useState)(defaultValue2); 25162 const value = controlledValue === void 0 ? uncontrolledValue : controlledValue; 25163 return [value, setValue]; 25164 } 25165 25166 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/useCalendar.js 25167 function useCalendar(props, dateLib) { 25168 const [navStart, navEnd] = getNavMonths(props, dateLib); 25169 const { startOfMonth: startOfMonth2, endOfMonth: endOfMonth2 } = dateLib; 25170 const initialMonth = getInitialMonth(props, navStart, navEnd, dateLib); 25171 const [firstMonth, setFirstMonth] = useControlledValue( 25172 initialMonth, 25173 // initialMonth is always computed from props.month if provided 25174 props.month ? initialMonth : void 0 25175 ); 25176 (0, import_react34.useEffect)(() => { 25177 const newInitialMonth = getInitialMonth(props, navStart, navEnd, dateLib); 25178 setFirstMonth(newInitialMonth); 25179 }, [props.timeZone]); 25180 const { months, weeks, days, previousMonth, nextMonth } = (0, import_react34.useMemo)(() => { 25181 const displayMonths = getDisplayMonths(firstMonth, navEnd, { numberOfMonths: props.numberOfMonths }, dateLib); 25182 const dates = getDates(displayMonths, props.endMonth ? endOfMonth2(props.endMonth) : void 0, { 25183 ISOWeek: props.ISOWeek, 25184 fixedWeeks: props.fixedWeeks, 25185 broadcastCalendar: props.broadcastCalendar 25186 }, dateLib); 25187 const months2 = getMonths(displayMonths, dates, { 25188 broadcastCalendar: props.broadcastCalendar, 25189 fixedWeeks: props.fixedWeeks, 25190 ISOWeek: props.ISOWeek, 25191 reverseMonths: props.reverseMonths 25192 }, dateLib); 25193 const weeks2 = getWeeks(months2); 25194 const days2 = getDays(months2); 25195 const previousMonth2 = getPreviousMonth(firstMonth, navStart, props, dateLib); 25196 const nextMonth2 = getNextMonth(firstMonth, navEnd, props, dateLib); 25197 return { 25198 months: months2, 25199 weeks: weeks2, 25200 days: days2, 25201 previousMonth: previousMonth2, 25202 nextMonth: nextMonth2 25203 }; 25204 }, [ 25205 dateLib, 25206 firstMonth.getTime(), 25207 navEnd?.getTime(), 25208 navStart?.getTime(), 25209 props.disableNavigation, 25210 props.broadcastCalendar, 25211 props.endMonth?.getTime(), 25212 props.fixedWeeks, 25213 props.ISOWeek, 25214 props.numberOfMonths, 25215 props.pagedNavigation, 25216 props.reverseMonths 25217 ]); 25218 const { disableNavigation, onMonthChange } = props; 25219 const isDayInCalendar = (day) => weeks.some((week) => week.days.some((d2) => d2.isEqualTo(day))); 25220 const goToMonth = (date) => { 25221 if (disableNavigation) { 25222 return; 25223 } 25224 let newMonth = startOfMonth2(date); 25225 if (navStart && newMonth < startOfMonth2(navStart)) { 25226 newMonth = startOfMonth2(navStart); 25227 } 25228 if (navEnd && newMonth > startOfMonth2(navEnd)) { 25229 newMonth = startOfMonth2(navEnd); 25230 } 25231 setFirstMonth(newMonth); 25232 onMonthChange?.(newMonth); 25233 }; 25234 const goToDay = (day) => { 25235 if (isDayInCalendar(day)) { 25236 return; 25237 } 25238 goToMonth(day.date); 25239 }; 25240 const calendar = { 25241 months, 25242 weeks, 25243 days, 25244 navStart, 25245 navEnd, 25246 previousMonth, 25247 nextMonth, 25248 goToMonth, 25249 goToDay 25250 }; 25251 return calendar; 25252 } 25253 25254 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/useFocus.js 25255 var import_react35 = __toESM(require_react(), 1); 25256 25257 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/calculateFocusTarget.js 25258 var FocusTargetPriority; 25259 (function(FocusTargetPriority2) { 25260 FocusTargetPriority2[FocusTargetPriority2["Today"] = 0] = "Today"; 25261 FocusTargetPriority2[FocusTargetPriority2["Selected"] = 1] = "Selected"; 25262 FocusTargetPriority2[FocusTargetPriority2["LastFocused"] = 2] = "LastFocused"; 25263 FocusTargetPriority2[FocusTargetPriority2["FocusedModifier"] = 3] = "FocusedModifier"; 25264 })(FocusTargetPriority || (FocusTargetPriority = {})); 25265 function isFocusableDay(modifiers) { 25266 return !modifiers[DayFlag.disabled] && !modifiers[DayFlag.hidden] && !modifiers[DayFlag.outside]; 25267 } 25268 function calculateFocusTarget(days, getModifiers, isSelected2, lastFocused) { 25269 let focusTarget; 25270 let foundFocusTargetPriority = -1; 25271 for (const day of days) { 25272 const modifiers = getModifiers(day); 25273 if (isFocusableDay(modifiers)) { 25274 if (modifiers[DayFlag.focused] && foundFocusTargetPriority < FocusTargetPriority.FocusedModifier) { 25275 focusTarget = day; 25276 foundFocusTargetPriority = FocusTargetPriority.FocusedModifier; 25277 } else if (lastFocused?.isEqualTo(day) && foundFocusTargetPriority < FocusTargetPriority.LastFocused) { 25278 focusTarget = day; 25279 foundFocusTargetPriority = FocusTargetPriority.LastFocused; 25280 } else if (isSelected2(day.date) && foundFocusTargetPriority < FocusTargetPriority.Selected) { 25281 focusTarget = day; 25282 foundFocusTargetPriority = FocusTargetPriority.Selected; 25283 } else if (modifiers[DayFlag.today] && foundFocusTargetPriority < FocusTargetPriority.Today) { 25284 focusTarget = day; 25285 foundFocusTargetPriority = FocusTargetPriority.Today; 25286 } 25287 } 25288 } 25289 if (!focusTarget) { 25290 focusTarget = days.find((day) => isFocusableDay(getModifiers(day))); 25291 } 25292 return focusTarget; 25293 } 25294 25295 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getFocusableDate.js 25296 function getFocusableDate(moveBy, moveDir, refDate, navStart, navEnd, props, dateLib) { 25297 const { ISOWeek, broadcastCalendar } = props; 25298 const { addDays: addDays2, addMonths: addMonths2, addWeeks: addWeeks2, addYears: addYears2, endOfBroadcastWeek: endOfBroadcastWeek2, endOfISOWeek: endOfISOWeek2, endOfWeek: endOfWeek2, max: max3, min: min3, startOfBroadcastWeek: startOfBroadcastWeek2, startOfISOWeek: startOfISOWeek2, startOfWeek: startOfWeek2 } = dateLib; 25299 const moveFns = { 25300 day: addDays2, 25301 week: addWeeks2, 25302 month: addMonths2, 25303 year: addYears2, 25304 startOfWeek: (date) => broadcastCalendar ? startOfBroadcastWeek2(date, dateLib) : ISOWeek ? startOfISOWeek2(date) : startOfWeek2(date), 25305 endOfWeek: (date) => broadcastCalendar ? endOfBroadcastWeek2(date) : ISOWeek ? endOfISOWeek2(date) : endOfWeek2(date) 25306 }; 25307 let focusableDate = moveFns[moveBy](refDate, moveDir === "after" ? 1 : -1); 25308 if (moveDir === "before" && navStart) { 25309 focusableDate = max3([navStart, focusableDate]); 25310 } else if (moveDir === "after" && navEnd) { 25311 focusableDate = min3([navEnd, focusableDate]); 25312 } 25313 return focusableDate; 25314 } 25315 25316 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getNextFocus.js 25317 function getNextFocus(moveBy, moveDir, refDay, calendarStartMonth, calendarEndMonth, props, dateLib, attempt = 0) { 25318 if (attempt > 365) { 25319 return void 0; 25320 } 25321 const focusableDate = getFocusableDate(moveBy, moveDir, refDay.date, calendarStartMonth, calendarEndMonth, props, dateLib); 25322 const isDisabled = Boolean(props.disabled && dateMatchModifiers(focusableDate, props.disabled, dateLib)); 25323 const isHidden2 = Boolean(props.hidden && dateMatchModifiers(focusableDate, props.hidden, dateLib)); 25324 const targetMonth = focusableDate; 25325 const focusDay = new CalendarDay(focusableDate, targetMonth, dateLib); 25326 if (!isDisabled && !isHidden2) { 25327 return focusDay; 25328 } 25329 return getNextFocus(moveBy, moveDir, focusDay, calendarStartMonth, calendarEndMonth, props, dateLib, attempt + 1); 25330 } 25331 25332 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/useFocus.js 25333 function useFocus2(props, calendar, getModifiers, isSelected2, dateLib) { 25334 const { autoFocus } = props; 25335 const [lastFocused, setLastFocused] = (0, import_react35.useState)(); 25336 const focusTarget = calculateFocusTarget(calendar.days, getModifiers, isSelected2 || (() => false), lastFocused); 25337 const [focusedDay, setFocused] = (0, import_react35.useState)(autoFocus ? focusTarget : void 0); 25338 const blur = () => { 25339 setLastFocused(focusedDay); 25340 setFocused(void 0); 25341 }; 25342 const moveFocus = (moveBy, moveDir) => { 25343 if (!focusedDay) 25344 return; 25345 const nextFocus = getNextFocus(moveBy, moveDir, focusedDay, calendar.navStart, calendar.navEnd, props, dateLib); 25346 if (!nextFocus) 25347 return; 25348 if (props.disableNavigation) { 25349 const isNextInCalendar = calendar.days.some((day) => day.isEqualTo(nextFocus)); 25350 if (!isNextInCalendar) { 25351 return; 25352 } 25353 } 25354 calendar.goToDay(nextFocus); 25355 setFocused(nextFocus); 25356 }; 25357 const isFocusTarget = (day) => { 25358 return Boolean(focusTarget?.isEqualTo(day)); 25359 }; 25360 const useFocus3 = { 25361 isFocusTarget, 25362 setFocused, 25363 focused: focusedDay, 25364 blur, 25365 moveFocus 25366 }; 25367 return useFocus3; 25368 } 25369 25370 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/selection/useMulti.js 25371 function useMulti(props, dateLib) { 25372 const { selected: initiallySelected, required, onSelect } = props; 25373 const [internallySelected, setSelected] = useControlledValue(initiallySelected, onSelect ? initiallySelected : void 0); 25374 const selected = !onSelect ? internallySelected : initiallySelected; 25375 const { isSameDay: isSameDay2 } = dateLib; 25376 const isSelected2 = (date) => { 25377 return selected?.some((d2) => isSameDay2(d2, date)) ?? false; 25378 }; 25379 const { min: min3, max: max3 } = props; 25380 const select3 = (triggerDate, modifiers, e2) => { 25381 let newDates = [...selected ?? []]; 25382 if (isSelected2(triggerDate)) { 25383 if (selected?.length === min3) { 25384 return; 25385 } 25386 if (required && selected?.length === 1) { 25387 return; 25388 } 25389 newDates = selected?.filter((d2) => !isSameDay2(d2, triggerDate)); 25390 } else { 25391 if (selected?.length === max3) { 25392 newDates = [triggerDate]; 25393 } else { 25394 newDates = [...newDates, triggerDate]; 25395 } 25396 } 25397 if (!onSelect) { 25398 setSelected(newDates); 25399 } 25400 onSelect?.(newDates, triggerDate, modifiers, e2); 25401 return newDates; 25402 }; 25403 return { 25404 selected, 25405 select: select3, 25406 isSelected: isSelected2 25407 }; 25408 } 25409 25410 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/utils/addToRange.js 25411 function addToRange(date, initialRange, min3 = 0, max3 = 0, required = false, dateLib = defaultDateLib) { 25412 const { from, to } = initialRange || {}; 25413 const { isSameDay: isSameDay2, isAfter: isAfter2, isBefore: isBefore2 } = dateLib; 25414 let range; 25415 if (!from && !to) { 25416 range = { from: date, to: min3 > 0 ? void 0 : date }; 25417 } else if (from && !to) { 25418 if (isSameDay2(from, date)) { 25419 if (min3 === 0) { 25420 range = { from, to: date }; 25421 } else if (required) { 25422 range = { from, to: void 0 }; 25423 } else { 25424 range = void 0; 25425 } 25426 } else if (isBefore2(date, from)) { 25427 range = { from: date, to: from }; 25428 } else { 25429 range = { from, to: date }; 25430 } 25431 } else if (from && to) { 25432 if (isSameDay2(from, date) && isSameDay2(to, date)) { 25433 if (required) { 25434 range = { from, to }; 25435 } else { 25436 range = void 0; 25437 } 25438 } else if (isSameDay2(from, date)) { 25439 range = { from, to: min3 > 0 ? void 0 : date }; 25440 } else if (isSameDay2(to, date)) { 25441 range = { from: date, to: min3 > 0 ? void 0 : date }; 25442 } else if (isBefore2(date, from)) { 25443 range = { from: date, to }; 25444 } else if (isAfter2(date, from)) { 25445 range = { from, to: date }; 25446 } else if (isAfter2(date, to)) { 25447 range = { from, to: date }; 25448 } else { 25449 throw new Error("Invalid range"); 25450 } 25451 } 25452 if (range?.from && range?.to) { 25453 const diff = dateLib.differenceInCalendarDays(range.to, range.from); 25454 if (max3 > 0 && diff > max3) { 25455 range = { from: date, to: void 0 }; 25456 } else if (min3 > 1 && diff < min3) { 25457 range = { from: date, to: void 0 }; 25458 } 25459 } 25460 return range; 25461 } 25462 25463 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/utils/rangeContainsDayOfWeek.js 25464 function rangeContainsDayOfWeek(range, dayOfWeek, dateLib = defaultDateLib) { 25465 const dayOfWeekArr = !Array.isArray(dayOfWeek) ? [dayOfWeek] : dayOfWeek; 25466 let date = range.from; 25467 const totalDays = dateLib.differenceInCalendarDays(range.to, range.from); 25468 const totalDaysLimit = Math.min(totalDays, 6); 25469 for (let i2 = 0; i2 <= totalDaysLimit; i2++) { 25470 if (dayOfWeekArr.includes(date.getDay())) { 25471 return true; 25472 } 25473 date = dateLib.addDays(date, 1); 25474 } 25475 return false; 25476 } 25477 25478 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/utils/rangeOverlaps.js 25479 function rangeOverlaps(rangeLeft, rangeRight, dateLib = defaultDateLib) { 25480 return rangeIncludesDate(rangeLeft, rangeRight.from, false, dateLib) || rangeIncludesDate(rangeLeft, rangeRight.to, false, dateLib) || rangeIncludesDate(rangeRight, rangeLeft.from, false, dateLib) || rangeIncludesDate(rangeRight, rangeLeft.to, false, dateLib); 25481 } 25482 25483 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/utils/rangeContainsModifiers.js 25484 function rangeContainsModifiers(range, modifiers, dateLib = defaultDateLib) { 25485 const matchers = Array.isArray(modifiers) ? modifiers : [modifiers]; 25486 const nonFunctionMatchers = matchers.filter((matcher) => typeof matcher !== "function"); 25487 const nonFunctionMatchersResult = nonFunctionMatchers.some((matcher) => { 25488 if (typeof matcher === "boolean") 25489 return matcher; 25490 if (dateLib.isDate(matcher)) { 25491 return rangeIncludesDate(range, matcher, false, dateLib); 25492 } 25493 if (isDatesArray(matcher, dateLib)) { 25494 return matcher.some((date) => rangeIncludesDate(range, date, false, dateLib)); 25495 } 25496 if (isDateRange(matcher)) { 25497 if (matcher.from && matcher.to) { 25498 return rangeOverlaps(range, { from: matcher.from, to: matcher.to }, dateLib); 25499 } 25500 return false; 25501 } 25502 if (isDayOfWeekType(matcher)) { 25503 return rangeContainsDayOfWeek(range, matcher.dayOfWeek, dateLib); 25504 } 25505 if (isDateInterval(matcher)) { 25506 const isClosedInterval = dateLib.isAfter(matcher.before, matcher.after); 25507 if (isClosedInterval) { 25508 return rangeOverlaps(range, { 25509 from: dateLib.addDays(matcher.after, 1), 25510 to: dateLib.addDays(matcher.before, -1) 25511 }, dateLib); 25512 } 25513 return dateMatchModifiers(range.from, matcher, dateLib) || dateMatchModifiers(range.to, matcher, dateLib); 25514 } 25515 if (isDateAfterType(matcher) || isDateBeforeType(matcher)) { 25516 return dateMatchModifiers(range.from, matcher, dateLib) || dateMatchModifiers(range.to, matcher, dateLib); 25517 } 25518 return false; 25519 }); 25520 if (nonFunctionMatchersResult) { 25521 return true; 25522 } 25523 const functionMatchers = matchers.filter((matcher) => typeof matcher === "function"); 25524 if (functionMatchers.length) { 25525 let date = range.from; 25526 const totalDays = dateLib.differenceInCalendarDays(range.to, range.from); 25527 for (let i2 = 0; i2 <= totalDays; i2++) { 25528 if (functionMatchers.some((matcher) => matcher(date))) { 25529 return true; 25530 } 25531 date = dateLib.addDays(date, 1); 25532 } 25533 } 25534 return false; 25535 } 25536 25537 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/selection/useRange.js 25538 function useRange(props, dateLib) { 25539 const { disabled: disabled2, excludeDisabled, resetOnSelect, selected: initiallySelected, required, onSelect } = props; 25540 const [internallySelected, setSelected] = useControlledValue(initiallySelected, onSelect ? initiallySelected : void 0); 25541 const selected = !onSelect ? internallySelected : initiallySelected; 25542 const isSelected2 = (date) => selected && rangeIncludesDate(selected, date, false, dateLib); 25543 const select3 = (triggerDate, modifiers, e2) => { 25544 const { min: min3, max: max3 } = props; 25545 let newRange; 25546 if (triggerDate) { 25547 const selectedFrom = selected?.from; 25548 const selectedTo = selected?.to; 25549 const hasFullRange = !!selectedFrom && !!selectedTo; 25550 const isClickingSingleDayRange = !!selectedFrom && !!selectedTo && dateLib.isSameDay(selectedFrom, selectedTo) && dateLib.isSameDay(triggerDate, selectedFrom); 25551 if (resetOnSelect && (hasFullRange || !selected?.from)) { 25552 if (!required && isClickingSingleDayRange) { 25553 newRange = void 0; 25554 } else { 25555 newRange = { from: triggerDate, to: void 0 }; 25556 } 25557 } else { 25558 newRange = addToRange(triggerDate, selected, min3, max3, required, dateLib); 25559 } 25560 } 25561 if (excludeDisabled && disabled2 && newRange?.from && newRange.to) { 25562 if (rangeContainsModifiers({ from: newRange.from, to: newRange.to }, disabled2, dateLib)) { 25563 newRange.from = triggerDate; 25564 newRange.to = void 0; 25565 } 25566 } 25567 if (!onSelect) { 25568 setSelected(newRange); 25569 } 25570 onSelect?.(newRange, triggerDate, modifiers, e2); 25571 return newRange; 25572 }; 25573 return { 25574 selected, 25575 select: select3, 25576 isSelected: isSelected2 25577 }; 25578 } 25579 25580 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/selection/useSingle.js 25581 function useSingle(props, dateLib) { 25582 const { selected: initiallySelected, required, onSelect } = props; 25583 const [internallySelected, setSelected] = useControlledValue(initiallySelected, onSelect ? initiallySelected : void 0); 25584 const selected = !onSelect ? internallySelected : initiallySelected; 25585 const { isSameDay: isSameDay2 } = dateLib; 25586 const isSelected2 = (compareDate) => { 25587 return selected ? isSameDay2(selected, compareDate) : false; 25588 }; 25589 const select3 = (triggerDate, modifiers, e2) => { 25590 let newDate = triggerDate; 25591 if (!required && selected && selected && isSameDay2(triggerDate, selected)) { 25592 newDate = void 0; 25593 } 25594 if (!onSelect) { 25595 setSelected(newDate); 25596 } 25597 if (required) { 25598 onSelect?.(newDate, triggerDate, modifiers, e2); 25599 } else { 25600 onSelect?.(newDate, triggerDate, modifiers, e2); 25601 } 25602 return newDate; 25603 }; 25604 return { 25605 selected, 25606 select: select3, 25607 isSelected: isSelected2 25608 }; 25609 } 25610 25611 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/useSelection.js 25612 function useSelection(props, dateLib) { 25613 const single = useSingle(props, dateLib); 25614 const multi = useMulti(props, dateLib); 25615 const range = useRange(props, dateLib); 25616 switch (props.mode) { 25617 case "single": 25618 return single; 25619 case "multiple": 25620 return multi; 25621 case "range": 25622 return range; 25623 default: 25624 return void 0; 25625 } 25626 } 25627 25628 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/utils/toTimeZone.js 25629 function toTimeZone(date, timeZone) { 25630 if (date instanceof TZDate && date.timeZone === timeZone) { 25631 return date; 25632 } 25633 return new TZDate(date, timeZone); 25634 } 25635 25636 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/utils/convertMatchersToTimeZone.js 25637 function toZoneNoon(date, timeZone, noonSafe) { 25638 if (!noonSafe) 25639 return toTimeZone(date, timeZone); 25640 const zoned = toTimeZone(date, timeZone); 25641 const noonZoned = new TZDate(zoned.getFullYear(), zoned.getMonth(), zoned.getDate(), 12, 0, 0, timeZone); 25642 return new Date(noonZoned.getTime()); 25643 } 25644 function convertMatcher(matcher, timeZone, noonSafe) { 25645 if (typeof matcher === "boolean" || typeof matcher === "function") { 25646 return matcher; 25647 } 25648 if (matcher instanceof Date) { 25649 return toZoneNoon(matcher, timeZone, noonSafe); 25650 } 25651 if (Array.isArray(matcher)) { 25652 return matcher.map((value) => value instanceof Date ? toZoneNoon(value, timeZone, noonSafe) : value); 25653 } 25654 if (isDateRange(matcher)) { 25655 return { 25656 ...matcher, 25657 from: matcher.from ? toTimeZone(matcher.from, timeZone) : matcher.from, 25658 to: matcher.to ? toTimeZone(matcher.to, timeZone) : matcher.to 25659 }; 25660 } 25661 if (isDateInterval(matcher)) { 25662 return { 25663 before: toZoneNoon(matcher.before, timeZone, noonSafe), 25664 after: toZoneNoon(matcher.after, timeZone, noonSafe) 25665 }; 25666 } 25667 if (isDateAfterType(matcher)) { 25668 return { 25669 after: toZoneNoon(matcher.after, timeZone, noonSafe) 25670 }; 25671 } 25672 if (isDateBeforeType(matcher)) { 25673 return { 25674 before: toZoneNoon(matcher.before, timeZone, noonSafe) 25675 }; 25676 } 25677 return matcher; 25678 } 25679 function convertMatchersToTimeZone(matchers, timeZone, noonSafe) { 25680 if (!matchers) { 25681 return matchers; 25682 } 25683 if (Array.isArray(matchers)) { 25684 return matchers.map((matcher) => convertMatcher(matcher, timeZone, noonSafe)); 25685 } 25686 return convertMatcher(matchers, timeZone, noonSafe); 25687 } 25688 25689 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/DayPicker.js 25690 function DayPicker(initialProps) { 25691 let props = initialProps; 25692 const timeZone = props.timeZone; 25693 if (timeZone) { 25694 props = { 25695 ...initialProps, 25696 timeZone 25697 }; 25698 if (props.today) { 25699 props.today = toTimeZone(props.today, timeZone); 25700 } 25701 if (props.month) { 25702 props.month = toTimeZone(props.month, timeZone); 25703 } 25704 if (props.defaultMonth) { 25705 props.defaultMonth = toTimeZone(props.defaultMonth, timeZone); 25706 } 25707 if (props.startMonth) { 25708 props.startMonth = toTimeZone(props.startMonth, timeZone); 25709 } 25710 if (props.endMonth) { 25711 props.endMonth = toTimeZone(props.endMonth, timeZone); 25712 } 25713 if (props.mode === "single" && props.selected) { 25714 props.selected = toTimeZone(props.selected, timeZone); 25715 } else if (props.mode === "multiple" && props.selected) { 25716 props.selected = props.selected?.map((date) => toTimeZone(date, timeZone)); 25717 } else if (props.mode === "range" && props.selected) { 25718 props.selected = { 25719 from: props.selected.from ? toTimeZone(props.selected.from, timeZone) : props.selected.from, 25720 to: props.selected.to ? toTimeZone(props.selected.to, timeZone) : props.selected.to 25721 }; 25722 } 25723 if (props.disabled !== void 0) { 25724 props.disabled = convertMatchersToTimeZone(props.disabled, timeZone); 25725 } 25726 if (props.hidden !== void 0) { 25727 props.hidden = convertMatchersToTimeZone(props.hidden, timeZone); 25728 } 25729 if (props.modifiers) { 25730 const nextModifiers = {}; 25731 Object.keys(props.modifiers).forEach((key) => { 25732 nextModifiers[key] = convertMatchersToTimeZone(props.modifiers?.[key], timeZone); 25733 }); 25734 props.modifiers = nextModifiers; 25735 } 25736 } 25737 const { components, formatters: formatters2, labels, dateLib, locale, classNames } = (0, import_react36.useMemo)(() => { 25738 const locale2 = { ...enUS2, ...props.locale }; 25739 const weekStartsOn = props.broadcastCalendar ? 1 : props.weekStartsOn; 25740 const noonOverrides = props.noonSafe && props.timeZone ? createNoonOverrides(props.timeZone, { 25741 weekStartsOn, 25742 locale: locale2 25743 }) : void 0; 25744 const overrides = props.dateLib && noonOverrides ? { ...noonOverrides, ...props.dateLib } : props.dateLib ?? noonOverrides; 25745 const dateLib2 = new DateLib({ 25746 locale: locale2, 25747 weekStartsOn, 25748 firstWeekContainsDate: props.firstWeekContainsDate, 25749 useAdditionalWeekYearTokens: props.useAdditionalWeekYearTokens, 25750 useAdditionalDayOfYearTokens: props.useAdditionalDayOfYearTokens, 25751 timeZone: props.timeZone, 25752 numerals: props.numerals 25753 }, overrides); 25754 return { 25755 dateLib: dateLib2, 25756 components: getComponents(props.components), 25757 formatters: getFormatters(props.formatters), 25758 labels: getLabels(props.labels, dateLib2.options), 25759 locale: locale2, 25760 classNames: { ...getDefaultClassNames(), ...props.classNames } 25761 }; 25762 }, [ 25763 props.locale, 25764 props.broadcastCalendar, 25765 props.weekStartsOn, 25766 props.firstWeekContainsDate, 25767 props.useAdditionalWeekYearTokens, 25768 props.useAdditionalDayOfYearTokens, 25769 props.timeZone, 25770 props.numerals, 25771 props.dateLib, 25772 props.noonSafe, 25773 props.components, 25774 props.formatters, 25775 props.labels, 25776 props.classNames 25777 ]); 25778 if (!props.today) { 25779 props = { ...props, today: dateLib.today() }; 25780 } 25781 const { captionLayout, mode, navLayout, numberOfMonths = 1, onDayBlur, onDayClick, onDayFocus, onDayKeyDown, onDayMouseEnter, onDayMouseLeave, onNextClick, onPrevClick, showWeekNumber, styles } = props; 25782 const { formatCaption: formatCaption2, formatDay: formatDay2, formatMonthDropdown: formatMonthDropdown2, formatWeekNumber: formatWeekNumber2, formatWeekNumberHeader: formatWeekNumberHeader2, formatWeekdayName: formatWeekdayName2, formatYearDropdown: formatYearDropdown2 } = formatters2; 25783 const calendar = useCalendar(props, dateLib); 25784 const { days, months, navStart, navEnd, previousMonth, nextMonth, goToMonth } = calendar; 25785 const getModifiers = createGetModifiers(days, props, navStart, navEnd, dateLib); 25786 const { isSelected: isSelected2, select: select3, selected: selectedValue } = useSelection(props, dateLib) ?? {}; 25787 const { blur, focused, isFocusTarget, moveFocus, setFocused } = useFocus2(props, calendar, getModifiers, isSelected2 ?? (() => false), dateLib); 25788 const { labelDayButton: labelDayButton2, labelGridcell: labelGridcell2, labelGrid: labelGrid2, labelMonthDropdown: labelMonthDropdown2, labelNav: labelNav2, labelPrevious: labelPrevious2, labelNext: labelNext2, labelWeekday: labelWeekday2, labelWeekNumber: labelWeekNumber2, labelWeekNumberHeader: labelWeekNumberHeader2, labelYearDropdown: labelYearDropdown2 } = labels; 25789 const weekdays = (0, import_react36.useMemo)(() => getWeekdays(dateLib, props.ISOWeek, props.broadcastCalendar, props.today), [dateLib, props.ISOWeek, props.broadcastCalendar, props.today]); 25790 const isInteractive = mode !== void 0 || onDayClick !== void 0; 25791 const handlePreviousClick = (0, import_react36.useCallback)(() => { 25792 if (!previousMonth) 25793 return; 25794 goToMonth(previousMonth); 25795 onPrevClick?.(previousMonth); 25796 }, [previousMonth, goToMonth, onPrevClick]); 25797 const handleNextClick = (0, import_react36.useCallback)(() => { 25798 if (!nextMonth) 25799 return; 25800 goToMonth(nextMonth); 25801 onNextClick?.(nextMonth); 25802 }, [goToMonth, nextMonth, onNextClick]); 25803 const handleDayClick = (0, import_react36.useCallback)((day, m2) => (e2) => { 25804 e2.preventDefault(); 25805 e2.stopPropagation(); 25806 setFocused(day); 25807 if (m2.disabled) { 25808 return; 25809 } 25810 select3?.(day.date, m2, e2); 25811 onDayClick?.(day.date, m2, e2); 25812 }, [select3, onDayClick, setFocused]); 25813 const handleDayFocus = (0, import_react36.useCallback)((day, m2) => (e2) => { 25814 setFocused(day); 25815 onDayFocus?.(day.date, m2, e2); 25816 }, [onDayFocus, setFocused]); 25817 const handleDayBlur = (0, import_react36.useCallback)((day, m2) => (e2) => { 25818 blur(); 25819 onDayBlur?.(day.date, m2, e2); 25820 }, [blur, onDayBlur]); 25821 const handleDayKeyDown = (0, import_react36.useCallback)((day, modifiers) => (e2) => { 25822 const keyMap = { 25823 ArrowLeft: [ 25824 e2.shiftKey ? "month" : "day", 25825 props.dir === "rtl" ? "after" : "before" 25826 ], 25827 ArrowRight: [ 25828 e2.shiftKey ? "month" : "day", 25829 props.dir === "rtl" ? "before" : "after" 25830 ], 25831 ArrowDown: [e2.shiftKey ? "year" : "week", "after"], 25832 ArrowUp: [e2.shiftKey ? "year" : "week", "before"], 25833 PageUp: [e2.shiftKey ? "year" : "month", "before"], 25834 PageDown: [e2.shiftKey ? "year" : "month", "after"], 25835 Home: ["startOfWeek", "before"], 25836 End: ["endOfWeek", "after"] 25837 }; 25838 if (keyMap[e2.key]) { 25839 e2.preventDefault(); 25840 e2.stopPropagation(); 25841 const [moveBy, moveDir] = keyMap[e2.key]; 25842 moveFocus(moveBy, moveDir); 25843 } 25844 onDayKeyDown?.(day.date, modifiers, e2); 25845 }, [moveFocus, onDayKeyDown, props.dir]); 25846 const handleDayMouseEnter = (0, import_react36.useCallback)((day, modifiers) => (e2) => { 25847 onDayMouseEnter?.(day.date, modifiers, e2); 25848 }, [onDayMouseEnter]); 25849 const handleDayMouseLeave = (0, import_react36.useCallback)((day, modifiers) => (e2) => { 25850 onDayMouseLeave?.(day.date, modifiers, e2); 25851 }, [onDayMouseLeave]); 25852 const handleMonthChange = (0, import_react36.useCallback)((date, monthOffset) => (e2) => { 25853 const selectedMonth = Number(e2.target.value); 25854 const month = dateLib.setMonth(dateLib.startOfMonth(date), selectedMonth); 25855 goToMonth(dateLib.addMonths(month, -monthOffset)); 25856 }, [dateLib, goToMonth]); 25857 const handleYearChange = (0, import_react36.useCallback)((date, monthOffset) => (e2) => { 25858 const selectedYear = Number(e2.target.value); 25859 const month = dateLib.setYear(dateLib.startOfMonth(date), selectedYear); 25860 goToMonth(dateLib.addMonths(month, -monthOffset)); 25861 }, [dateLib, goToMonth]); 25862 const { className, style } = (0, import_react36.useMemo)(() => ({ 25863 className: [classNames[UI.Root], props.className].filter(Boolean).join(" "), 25864 style: { ...styles?.[UI.Root], ...props.style } 25865 }), [classNames, props.className, props.style, styles]); 25866 const dataAttributes = getDataAttributes(props); 25867 const getDropdownStyle = (dropdown) => { 25868 const dropdownStyle = styles?.[UI.Dropdown]; 25869 const specificDropdownStyle = styles?.[dropdown]; 25870 if (!dropdownStyle && !specificDropdownStyle) { 25871 return void 0; 25872 } 25873 return { 25874 ...dropdownStyle, 25875 ...specificDropdownStyle 25876 }; 25877 }; 25878 const rootElRef = (0, import_react36.useRef)(null); 25879 useAnimation(rootElRef, Boolean(props.animate), { 25880 classNames, 25881 months, 25882 focused, 25883 dateLib 25884 }); 25885 const contextValue = { 25886 dayPickerProps: props, 25887 selected: selectedValue, 25888 select: select3, 25889 isSelected: isSelected2, 25890 months, 25891 nextMonth, 25892 previousMonth, 25893 goToMonth, 25894 getModifiers, 25895 components, 25896 classNames, 25897 styles, 25898 labels, 25899 formatters: formatters2 25900 }; 25901 return import_react36.default.createElement( 25902 dayPickerContext.Provider, 25903 { value: contextValue }, 25904 import_react36.default.createElement( 25905 components.Root, 25906 { rootRef: props.animate ? rootElRef : void 0, className, style, dir: props.dir, id: props.id, lang: props.lang ?? locale.code, nonce: props.nonce, title: props.title, role: props.role, "aria-label": props["aria-label"], "aria-labelledby": props["aria-labelledby"], ...dataAttributes }, 25907 import_react36.default.createElement( 25908 components.Months, 25909 { className: classNames[UI.Months], style: styles?.[UI.Months] }, 25910 !props.hideNavigation && !navLayout && import_react36.default.createElement(components.Nav, { "data-animated-nav": props.animate ? "true" : void 0, className: classNames[UI.Nav], style: styles?.[UI.Nav], "aria-label": labelNav2(), onPreviousClick: handlePreviousClick, onNextClick: handleNextClick, previousMonth, nextMonth }), 25911 months.map((calendarMonth, displayIndex) => { 25912 const monthOffset = props.reverseMonths ? months.length - 1 - displayIndex : displayIndex; 25913 return import_react36.default.createElement( 25914 components.Month, 25915 { 25916 "data-animated-month": props.animate ? "true" : void 0, 25917 className: classNames[UI.Month], 25918 style: styles?.[UI.Month], 25919 // biome-ignore lint/suspicious/noArrayIndexKey: breaks animation 25920 key: displayIndex, 25921 displayIndex, 25922 calendarMonth 25923 }, 25924 navLayout === "around" && !props.hideNavigation && displayIndex === 0 && import_react36.default.createElement( 25925 components.PreviousMonthButton, 25926 { type: "button", className: classNames[UI.PreviousMonthButton], style: styles?.[UI.PreviousMonthButton], tabIndex: previousMonth ? void 0 : -1, "aria-disabled": previousMonth ? void 0 : true, "aria-label": labelPrevious2(previousMonth), onClick: handlePreviousClick, "data-animated-button": props.animate ? "true" : void 0 }, 25927 import_react36.default.createElement(components.Chevron, { disabled: previousMonth ? void 0 : true, className: classNames[UI.Chevron], style: styles?.[UI.Chevron], orientation: props.dir === "rtl" ? "right" : "left" }) 25928 ), 25929 import_react36.default.createElement(components.MonthCaption, { "data-animated-caption": props.animate ? "true" : void 0, className: classNames[UI.MonthCaption], style: styles?.[UI.MonthCaption], calendarMonth, displayIndex }, captionLayout?.startsWith("dropdown") ? import_react36.default.createElement( 25930 components.DropdownNav, 25931 { className: classNames[UI.Dropdowns], style: styles?.[UI.Dropdowns] }, 25932 (() => { 25933 const monthControl = captionLayout === "dropdown" || captionLayout === "dropdown-months" ? import_react36.default.createElement(components.MonthsDropdown, { key: "month", className: classNames[UI.MonthsDropdown], "aria-label": labelMonthDropdown2(), disabled: Boolean(props.disableNavigation), onChange: handleMonthChange(calendarMonth.date, monthOffset), options: getMonthOptions(calendarMonth.date, navStart, navEnd, formatters2, dateLib), style: getDropdownStyle(UI.MonthsDropdown), value: dateLib.getMonth(calendarMonth.date) }) : import_react36.default.createElement("span", { key: "month" }, formatMonthDropdown2(calendarMonth.date, dateLib)); 25934 const yearControl = captionLayout === "dropdown" || captionLayout === "dropdown-years" ? import_react36.default.createElement(components.YearsDropdown, { key: "year", className: classNames[UI.YearsDropdown], "aria-label": labelYearDropdown2(dateLib.options), disabled: Boolean(props.disableNavigation), onChange: handleYearChange(calendarMonth.date, monthOffset), options: getYearOptions(navStart, navEnd, formatters2, dateLib, Boolean(props.reverseYears)), style: getDropdownStyle(UI.YearsDropdown), value: dateLib.getYear(calendarMonth.date) }) : import_react36.default.createElement("span", { key: "year" }, formatYearDropdown2(calendarMonth.date, dateLib)); 25935 const controls = dateLib.getMonthYearOrder() === "year-first" ? [yearControl, monthControl] : [monthControl, yearControl]; 25936 return controls; 25937 })(), 25938 import_react36.default.createElement("span", { role: "status", "aria-live": "polite", style: { 25939 border: 0, 25940 clip: "rect(0 0 0 0)", 25941 height: "1px", 25942 margin: "-1px", 25943 overflow: "hidden", 25944 padding: 0, 25945 position: "absolute", 25946 width: "1px", 25947 whiteSpace: "nowrap", 25948 wordWrap: "normal" 25949 } }, formatCaption2(calendarMonth.date, dateLib.options, dateLib)) 25950 ) : import_react36.default.createElement(components.CaptionLabel, { className: classNames[UI.CaptionLabel], style: styles?.[UI.CaptionLabel], role: "status", "aria-live": "polite" }, formatCaption2(calendarMonth.date, dateLib.options, dateLib))), 25951 navLayout === "around" && !props.hideNavigation && displayIndex === numberOfMonths - 1 && import_react36.default.createElement( 25952 components.NextMonthButton, 25953 { type: "button", className: classNames[UI.NextMonthButton], style: styles?.[UI.NextMonthButton], tabIndex: nextMonth ? void 0 : -1, "aria-disabled": nextMonth ? void 0 : true, "aria-label": labelNext2(nextMonth), onClick: handleNextClick, "data-animated-button": props.animate ? "true" : void 0 }, 25954 import_react36.default.createElement(components.Chevron, { disabled: nextMonth ? void 0 : true, className: classNames[UI.Chevron], style: styles?.[UI.Chevron], orientation: props.dir === "rtl" ? "left" : "right" }) 25955 ), 25956 displayIndex === numberOfMonths - 1 && navLayout === "after" && !props.hideNavigation && import_react36.default.createElement(components.Nav, { "data-animated-nav": props.animate ? "true" : void 0, className: classNames[UI.Nav], style: styles?.[UI.Nav], "aria-label": labelNav2(), onPreviousClick: handlePreviousClick, onNextClick: handleNextClick, previousMonth, nextMonth }), 25957 import_react36.default.createElement( 25958 components.MonthGrid, 25959 { role: "grid", "aria-multiselectable": mode === "multiple" || mode === "range", "aria-label": labelGrid2(calendarMonth.date, dateLib.options, dateLib) || void 0, className: classNames[UI.MonthGrid], style: styles?.[UI.MonthGrid] }, 25960 !props.hideWeekdays && import_react36.default.createElement( 25961 components.Weekdays, 25962 { "data-animated-weekdays": props.animate ? "true" : void 0, className: classNames[UI.Weekdays], style: styles?.[UI.Weekdays] }, 25963 showWeekNumber && import_react36.default.createElement(components.WeekNumberHeader, { "aria-label": labelWeekNumberHeader2(dateLib.options), className: classNames[UI.WeekNumberHeader], style: styles?.[UI.WeekNumberHeader], scope: "col" }, formatWeekNumberHeader2()), 25964 weekdays.map((weekday) => import_react36.default.createElement(components.Weekday, { "aria-label": labelWeekday2(weekday, dateLib.options, dateLib), className: classNames[UI.Weekday], key: String(weekday), style: styles?.[UI.Weekday], scope: "col" }, formatWeekdayName2(weekday, dateLib.options, dateLib))) 25965 ), 25966 import_react36.default.createElement(components.Weeks, { "data-animated-weeks": props.animate ? "true" : void 0, className: classNames[UI.Weeks], style: styles?.[UI.Weeks] }, calendarMonth.weeks.map((week) => { 25967 return import_react36.default.createElement( 25968 components.Week, 25969 { className: classNames[UI.Week], key: week.weekNumber, style: styles?.[UI.Week], week }, 25970 showWeekNumber && import_react36.default.createElement(components.WeekNumber, { week, style: styles?.[UI.WeekNumber], "aria-label": labelWeekNumber2(week.weekNumber, { 25971 locale 25972 }), className: classNames[UI.WeekNumber], scope: "row", role: "rowheader" }, formatWeekNumber2(week.weekNumber, dateLib)), 25973 week.days.map((day) => { 25974 const { date } = day; 25975 const modifiers = getModifiers(day); 25976 modifiers[DayFlag.focused] = !modifiers.hidden && Boolean(focused?.isEqualTo(day)); 25977 modifiers[SelectionState.selected] = isSelected2?.(date) || modifiers.selected; 25978 if (isDateRange(selectedValue)) { 25979 const { from, to } = selectedValue; 25980 modifiers[SelectionState.range_start] = Boolean(from && to && dateLib.isSameDay(date, from)); 25981 modifiers[SelectionState.range_end] = Boolean(from && to && dateLib.isSameDay(date, to)); 25982 modifiers[SelectionState.range_middle] = rangeIncludesDate(selectedValue, date, true, dateLib); 25983 } 25984 const style2 = getStyleForModifiers(modifiers, styles, props.modifiersStyles); 25985 const className2 = getClassNamesForModifiers(modifiers, classNames, props.modifiersClassNames); 25986 const ariaLabel = !isInteractive && !modifiers.hidden ? labelGridcell2(date, modifiers, dateLib.options, dateLib) : void 0; 25987 return import_react36.default.createElement(components.Day, { key: `$day.isoDate}_$day.displayMonthId}`, day, modifiers, className: className2.join(" "), style: style2, role: "gridcell", "aria-selected": modifiers.selected || void 0, "aria-label": ariaLabel, "data-day": day.isoDate, "data-month": day.outside ? day.dateMonthId : void 0, "data-selected": modifiers.selected || void 0, "data-disabled": modifiers.disabled || void 0, "data-hidden": modifiers.hidden || void 0, "data-outside": day.outside || void 0, "data-focused": modifiers.focused || void 0, "data-today": modifiers.today || void 0 }, !modifiers.hidden && isInteractive ? import_react36.default.createElement(components.DayButton, { className: classNames[UI.DayButton], style: styles?.[UI.DayButton], type: "button", day, modifiers, disabled: !modifiers.focused && modifiers.disabled || void 0, "aria-disabled": modifiers.focused && modifiers.disabled || void 0, tabIndex: isFocusTarget(day) ? 0 : -1, "aria-label": labelDayButton2(date, modifiers, dateLib.options, dateLib), onClick: handleDayClick(day, modifiers), onBlur: handleDayBlur(day, modifiers), onFocus: handleDayFocus(day, modifiers), onKeyDown: handleDayKeyDown(day, modifiers), onMouseEnter: handleDayMouseEnter(day, modifiers), onMouseLeave: handleDayMouseLeave(day, modifiers) }, formatDay2(date, dateLib.options, dateLib)) : !modifiers.hidden && formatDay2(day.date, dateLib.options, dateLib)); 25988 }) 25989 ); 25990 })) 25991 ) 25992 ); 25993 }) 25994 ), 25995 props.footer && import_react36.default.createElement(components.Footer, { className: classNames[UI.Footer], style: styles?.[UI.Footer], role: "status", "aria-live": "polite" }, props.footer) 25996 ) 25997 ); 25998 } 25999 26000 // packages/ui/build-module/calendar/calendar.mjs 26001 var import_element52 = __toESM(require_element(), 1); 26002 26003 // packages/ui/build-module/calendar/utils/components.mjs 26004 var import_element48 = __toESM(require_element(), 1); 26005 var import_compose = __toESM(require_compose(), 1); 26006 var import_i18n12 = __toESM(require_i18n(), 1); 26007 26008 // packages/ui/build-module/icon-button/icon-button.mjs 26009 var import_element46 = __toESM(require_element(), 1); 26010 var import_jsx_runtime96 = __toESM(require_jsx_runtime(), 1); 26011 var STYLE_HASH_ATTRIBUTE24 = "data-wp-hash"; 26012 function getRuntime24() { 26013 const globalScope = globalThis; 26014 if (globalScope.__wpStyleRuntime) { 26015 return globalScope.__wpStyleRuntime; 26016 } 26017 globalScope.__wpStyleRuntime = { 26018 documents: /* @__PURE__ */ new Map(), 26019 styles: /* @__PURE__ */ new Map(), 26020 injectedStyles: /* @__PURE__ */ new WeakMap() 26021 }; 26022 if (typeof document !== "undefined") { 26023 registerDocument24(document); 26024 } 26025 return globalScope.__wpStyleRuntime; 26026 } 26027 function documentContainsStyleHash24(targetDocument, hash) { 26028 if (!targetDocument.head) { 26029 return false; 26030 } 26031 for (const style of targetDocument.head.querySelectorAll( 26032 `style[$STYLE_HASH_ATTRIBUTE24}]` 26033 )) { 26034 if (style.getAttribute(STYLE_HASH_ATTRIBUTE24) === hash) { 26035 return true; 26036 } 26037 } 26038 return false; 26039 } 26040 function injectStyle24(targetDocument, hash, css) { 26041 if (!targetDocument.head) { 26042 return; 26043 } 26044 const runtime = getRuntime24(); 26045 let injectedStyles = runtime.injectedStyles.get(targetDocument); 26046 if (!injectedStyles) { 26047 injectedStyles = /* @__PURE__ */ new Set(); 26048 runtime.injectedStyles.set(targetDocument, injectedStyles); 26049 } 26050 if (injectedStyles.has(hash)) { 26051 return; 26052 } 26053 if (documentContainsStyleHash24(targetDocument, hash)) { 26054 injectedStyles.add(hash); 26055 return; 26056 } 26057 const style = targetDocument.createElement("style"); 26058 style.setAttribute(STYLE_HASH_ATTRIBUTE24, hash); 26059 style.appendChild(targetDocument.createTextNode(css)); 26060 targetDocument.head.appendChild(style); 26061 injectedStyles.add(hash); 26062 } 26063 function registerDocument24(targetDocument) { 26064 const runtime = getRuntime24(); 26065 runtime.documents.set( 26066 targetDocument, 26067 (runtime.documents.get(targetDocument) ?? 0) + 1 26068 ); 26069 for (const [hash, css] of runtime.styles) { 26070 injectStyle24(targetDocument, hash, css); 26071 } 26072 return () => { 26073 const count = runtime.documents.get(targetDocument); 26074 if (count === void 0) { 26075 return; 26076 } 26077 if (count <= 1) { 26078 runtime.documents.delete(targetDocument); 26079 return; 26080 } 26081 runtime.documents.set(targetDocument, count - 1); 26082 }; 26083 } 26084 function registerStyle24(hash, css) { 26085 const runtime = getRuntime24(); 26086 runtime.styles.set(hash, css); 26087 for (const targetDocument of runtime.documents.keys()) { 26088 injectStyle24(targetDocument, hash, css); 26089 } 26090 } 26091 if (typeof process === "undefined" || true) { 26092 registerStyle24("c5cdafb1bc", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer compositions{._28cfdc260e755391__icon-button{--wp-ui-button-aspect-ratio:1;--wp-ui-button-padding-inline:0px;--wp-ui-button-min-width:unset}.f1c70d719989a85a__icon{margin:-1px}}}"); 26093 } 26094 var style_default23 = { "icon-button": "_28cfdc260e755391__icon-button", "icon": "f1c70d719989a85a__icon" }; 26095 var IconButton = (0, import_element46.forwardRef)( 26096 function IconButton2({ 26097 label, 26098 className, 26099 // Prevent accidental forwarding of `children` 26100 children: _children, 26101 disabled: disabled2, 26102 focusableWhenDisabled = true, 26103 icon, 26104 size: size4, 26105 shortcut, 26106 positioner, 26107 "aria-describedby": ariaDescribedBy, 26108 "aria-keyshortcuts": ariaKeyShortcuts, 26109 ...restProps 26110 }, ref) { 26111 const classes = clsx_default(style_default23["icon-button"], className); 26112 const { descriptionId, targetProps } = useKeyboardShortcutProps({ 26113 "aria-describedby": ariaDescribedBy, 26114 "aria-keyshortcuts": ariaKeyShortcuts, 26115 shortcut 26116 }); 26117 return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(Root, { children: [ 26118 /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)( 26119 Trigger, 26120 { 26121 ref, 26122 ...targetProps, 26123 disabled: disabled2 && !focusableWhenDisabled, 26124 render: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)( 26125 Button4, 26126 { 26127 ...restProps, 26128 size: size4, 26129 "aria-label": label, 26130 disabled: disabled2, 26131 focusableWhenDisabled 26132 } 26133 ), 26134 className: classes, 26135 children: [ 26136 /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Icon, { icon, size: 24, className: style_default23.icon }), 26137 shortcut && descriptionId && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)( 26138 KeyboardShortcutDescription, 26139 { 26140 descriptionId, 26141 shortcut 26142 } 26143 ) 26144 ] 26145 } 26146 ), 26147 /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(Popup, { positioner, children: [ 26148 label, 26149 shortcut && /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(import_jsx_runtime96.Fragment, { children: [ 26150 " ", 26151 /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(KeyboardShortcutDisplay, { shortcut }) 26152 ] }) 26153 ] }) 26154 ] }); 26155 } 26156 ); 26157 26158 // packages/ui/build-module/calendar/utils/root-context.mjs 26159 var import_element47 = __toESM(require_element(), 1); 26160 var RootContext = (0, import_element47.createContext)({}); 26161 26162 // packages/ui/build-module/calendar/utils/components.mjs 26163 var import_jsx_runtime97 = __toESM(require_jsx_runtime(), 1); 26164 var PreviewDashStartAndEnd = () => { 26165 return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)( 26166 "svg", 26167 { 26168 viewBox: "0 0 32 32", 26169 xmlns: "http://www.w3.org/2000/svg", 26170 fill: "none", 26171 stroke: "currentColor", 26172 strokeDasharray: "3.7677", 26173 strokeDashoffset: "3.2", 26174 strokeWidth: "1", 26175 children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("path", { d: "M29.5,0.5 h-27 a2,2 0 0 0 -2,2 v27 a2,2 0 0 0 2,2 h27 a2,2 0 0 0 2,-2 v-27 a2,2 0 0 0 -2,-2" }) 26176 } 26177 ); 26178 }; 26179 var PreviewDashStart = () => { 26180 return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)( 26181 "svg", 26182 { 26183 viewBox: "0 0 32 32", 26184 xmlns: "http://www.w3.org/2000/svg", 26185 fill: "none", 26186 stroke: "currentColor", 26187 strokeDasharray: "3.84516", 26188 strokeDashoffset: "1.9226", 26189 strokeWidth: "1", 26190 children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("path", { d: "M32,0.5 h-29.5 a2,2 0 0 0 -2,2 v27 a2,2 0 0 0 2,2 h30" }) 26191 } 26192 ); 26193 }; 26194 var PreviewDashMiddle = () => { 26195 return /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)( 26196 "svg", 26197 { 26198 viewBox: "0 0 32 32", 26199 xmlns: "http://www.w3.org/2000/svg", 26200 fill: "none", 26201 stroke: "currentColor", 26202 strokeDasharray: "3.9 4", 26203 strokeDashoffset: "2", 26204 strokeWidth: "1", 26205 children: [ 26206 /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("line", { x1: "0", y1: "0.5", x2: "100", y2: "0.5" }), 26207 /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("line", { x1: "0", y1: "31.5", x2: "100", y2: "31.5" }) 26208 ] 26209 } 26210 ); 26211 }; 26212 var PreviewDashEnd = () => { 26213 return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)( 26214 "svg", 26215 { 26216 viewBox: "0 0 32 32", 26217 xmlns: "http://www.w3.org/2000/svg", 26218 fill: "none", 26219 stroke: "currentColor", 26220 strokeDasharray: "3.84516", 26221 strokeDashoffset: "1.9226", 26222 strokeWidth: "1", 26223 children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)("path", { d: "M0,0.5 h29.5 a2,2 0 0 1 2,2 v27 a2,2 0 0 1 -2,2 h-29.5" }) 26224 } 26225 ); 26226 }; 26227 function Day2(props) { 26228 const { day, modifiers, children, ...tdProps } = props; 26229 let PreviewDash; 26230 if (modifiers.preview_start && modifiers.preview_end) { 26231 PreviewDash = PreviewDashStartAndEnd; 26232 } else if (modifiers.preview_start) { 26233 PreviewDash = PreviewDashStart; 26234 } else if (modifiers.preview_end) { 26235 PreviewDash = PreviewDashEnd; 26236 } else if (modifiers.preview) { 26237 PreviewDash = PreviewDashMiddle; 26238 } 26239 return /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("td", { ...tdProps, children: [ 26240 PreviewDash && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(PreviewDash, {}), 26241 children 26242 ] }); 26243 } 26244 function Root4({ rootRef, ...props }) { 26245 const { render: render4, ref, role, defaultAriaLabel } = (0, import_element48.useContext)(RootContext); 26246 const { months, labels } = useDayPicker(); 26247 const hasExplicitLabel = props["aria-label"] !== void 0 || props["aria-labelledby"] !== void 0; 26248 let ariaLabel = props["aria-label"]; 26249 if (!hasExplicitLabel && defaultAriaLabel && role === "application") { 26250 const currentMonth = months[0]; 26251 ariaLabel = currentMonth ? (0, import_i18n12.sprintf)( 26252 // translators: 1: Calendar type. 2: Current month and year. 26253 (0, import_i18n12.__)("%1$s, %2$s"), 26254 defaultAriaLabel, 26255 labels.labelGrid(currentMonth.date) 26256 ) : defaultAriaLabel; 26257 } 26258 const mergedRef = (0, import_compose.useMergeRefs)([rootRef ?? null, ref ?? null]); 26259 return useRender({ 26260 render: render4, 26261 defaultTagName: "div", 26262 ref: mergedRef, 26263 props: { ...props, role, "aria-label": ariaLabel } 26264 }); 26265 } 26266 function NavButton({ 26267 icon, 26268 className, 26269 children: _children, 26270 "aria-label": label, 26271 "aria-disabled": ariaDisabled, 26272 ...props 26273 }) { 26274 return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)( 26275 IconButton, 26276 { 26277 ...props, 26278 className, 26279 label, 26280 icon, 26281 variant: "minimal", 26282 tone: "neutral", 26283 size: "compact", 26284 disabled: ariaDisabled === true || ariaDisabled === "true", 26285 focusableWhenDisabled: true 26286 } 26287 ); 26288 } 26289 function PreviousMonthButton2(props) { 26290 return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(NavButton, { ...props, icon: chevron_left_default }); 26291 } 26292 function NextMonthButton2(props) { 26293 return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(NavButton, { ...props, icon: chevron_right_default }); 26294 } 26295 26296 // packages/ui/build-module/calendar/utils/constants.mjs 26297 var STYLE_HASH_ATTRIBUTE25 = "data-wp-hash"; 26298 function getRuntime25() { 26299 const globalScope = globalThis; 26300 if (globalScope.__wpStyleRuntime) { 26301 return globalScope.__wpStyleRuntime; 26302 } 26303 globalScope.__wpStyleRuntime = { 26304 documents: /* @__PURE__ */ new Map(), 26305 styles: /* @__PURE__ */ new Map(), 26306 injectedStyles: /* @__PURE__ */ new WeakMap() 26307 }; 26308 if (typeof document !== "undefined") { 26309 registerDocument25(document); 26310 } 26311 return globalScope.__wpStyleRuntime; 26312 } 26313 function documentContainsStyleHash25(targetDocument, hash) { 26314 if (!targetDocument.head) { 26315 return false; 26316 } 26317 for (const style of targetDocument.head.querySelectorAll( 26318 `style[$STYLE_HASH_ATTRIBUTE25}]` 26319 )) { 26320 if (style.getAttribute(STYLE_HASH_ATTRIBUTE25) === hash) { 26321 return true; 26322 } 26323 } 26324 return false; 26325 } 26326 function injectStyle25(targetDocument, hash, css) { 26327 if (!targetDocument.head) { 26328 return; 26329 } 26330 const runtime = getRuntime25(); 26331 let injectedStyles = runtime.injectedStyles.get(targetDocument); 26332 if (!injectedStyles) { 26333 injectedStyles = /* @__PURE__ */ new Set(); 26334 runtime.injectedStyles.set(targetDocument, injectedStyles); 26335 } 26336 if (injectedStyles.has(hash)) { 26337 return; 26338 } 26339 if (documentContainsStyleHash25(targetDocument, hash)) { 26340 injectedStyles.add(hash); 26341 return; 26342 } 26343 const style = targetDocument.createElement("style"); 26344 style.setAttribute(STYLE_HASH_ATTRIBUTE25, hash); 26345 style.appendChild(targetDocument.createTextNode(css)); 26346 targetDocument.head.appendChild(style); 26347 injectedStyles.add(hash); 26348 } 26349 function registerDocument25(targetDocument) { 26350 const runtime = getRuntime25(); 26351 runtime.documents.set( 26352 targetDocument, 26353 (runtime.documents.get(targetDocument) ?? 0) + 1 26354 ); 26355 for (const [hash, css] of runtime.styles) { 26356 injectStyle25(targetDocument, hash, css); 26357 } 26358 return () => { 26359 const count = runtime.documents.get(targetDocument); 26360 if (count === void 0) { 26361 return; 26362 } 26363 if (count <= 1) { 26364 runtime.documents.delete(targetDocument); 26365 return; 26366 } 26367 runtime.documents.set(targetDocument, count - 1); 26368 }; 26369 } 26370 function registerStyle25(hash, css) { 26371 const runtime = getRuntime25(); 26372 runtime.styles.set(hash, css); 26373 for (const targetDocument of runtime.documents.keys()) { 26374 injectStyle25(targetDocument, hash, css); 26375 } 26376 } 26377 if (typeof process === "undefined" || true) { 26378 registerStyle25("9d2212290a", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._2c7ac60ba97b3411__root{--wp-ui-calendar-cell-size:var(--wpds-dimension-size-md,32px);background-color:var(--wpds-color-background-surface-neutral-strong,#fff);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);display:inline-block;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-md,13px);font-weight:var(--wpds-typography-font-weight-default,400);position:relative;z-index:0}._172c492625235710__day{color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);padding:0;position:relative;&:has(._1b64226e315835f8__day-button:disabled){color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d)}&:has(._1b64226e315835f8__day-button:focus-visible),&:has(._1b64226e315835f8__day-button:hover:not(:disabled)){color:var(--wpds-color-foreground-interactive-neutral-active,#1e1e1e)}}._1b64226e315835f8__day-button{align-items:center;background:none;border:none;border-radius:var(--wpds-border-radius-sm,2px);color:inherit;cursor:var(--wpds-cursor-control,pointer);display:flex;font:inherit;font-variant-numeric:tabular-nums;height:var(--wp-ui-calendar-cell-size);justify-content:center;margin:0;padding:0;position:relative;width:var(--wp-ui-calendar-cell-size);&:before{background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);border:none;border-radius:var(--wpds-border-radius-sm,2px);z-index:-1}&:after,&:before{content:"";inset:0;position:absolute}&:after{pointer-events:none;z-index:1}&:disabled{cursor:revert;&:before{background-color:var(--wpds-color-background-interactive-neutral-weak-disabled,#0000)}@media (forced-colors:active){text-decoration:line-through}}&:focus-visible:before,&:hover:not(:disabled):before{background-color:var(--wpds-color-background-interactive-neutral-weak-active,#ededed)}}._66b9a8120581fd4b__caption-label{align-items:center;border:0;display:inline-flex;position:relative;text-transform:capitalize;white-space:nowrap;z-index:1}._2c7ac60ba97b3411__root[dir=rtl] ._395a75bb1930f57e__nav-button{transform:rotate(180deg);transform-origin:50%}._337e5337d49b7f3d__month-caption{align-content:center;display:flex;height:var(--wp-ui-calendar-cell-size);justify-content:center;margin-bottom:var(--wpds-dimension-gap-md,12px)}._110e46230c68e498__months{display:flex;flex-wrap:wrap;gap:var(--wpds-dimension-gap-lg,16px);justify-content:center;max-width:fit-content;position:relative}._92915239fedb1fea__month-grid{border-collapse:separate;border-spacing:0 var(--wpds-dimension-gap-xs,4px)}._66b1d4a7b488b496__nav{align-items:center;display:flex;height:var(--wp-ui-calendar-cell-size);inset-block-start:0;inset-inline-end:0;inset-inline-start:0;justify-content:space-between;position:absolute}._7207199709ca5776__weekday{color:var(--wpds-color-foreground-content-neutral-weak,#707070);font-weight:var(--wpds-typography-font-weight-default,400);height:var(--wp-ui-calendar-cell-size);padding:0;text-align:center;text-transform:uppercase;width:var(--wp-ui-calendar-cell-size)}._058175f0f9c495e0__today:after{border:2px solid;border-radius:50%;content:"";height:0;inset-block-start:2px;inset-inline-end:2px;position:absolute;width:0;z-index:1}.acb642920fb0bef5__selected:not(._165d91a726feca9c__range-middle){&:has(._1b64226e315835f8__day-button,._1b64226e315835f8__day-button:hover:not(:disabled)){color:var(--wpds-color-foreground-interactive-neutral-strong,#f0f0f0)}&:has(._1b64226e315835f8__day-button:disabled){color:var(--wpds-color-foreground-interactive-neutral-strong-disabled,#8d8d8d)}._1b64226e315835f8__day-button{&:before{background-color:var(--wpds-color-background-interactive-neutral-strong,#2d2d2d);border:1px solid transparent}&:disabled:before{background-color:var(--wpds-color-background-interactive-neutral-strong-disabled,#e6e6e6)}&:hover:not(:disabled):before{background-color:var(--wpds-color-background-interactive-neutral-strong-active,#1e1e1e)}}}.c259c5c255fda10f__outside{color:var(--wpds-color-foreground-interactive-neutral-weak,#707070)}._4d8957a0ca4ec8f0__hidden{visibility:hidden}.f2523033db055ffe__range-start:not(.c04a453de7b11520__range-end) ._1b64226e315835f8__day-button{&,&:before{border-end-end-radius:0;border-start-end-radius:0}}._165d91a726feca9c__range-middle ._1b64226e315835f8__day-button{&:before{background-color:var(--wpds-color-background-interactive-neutral-weak-active,#ededed);border-color:transparent;border-radius:0;border-style:solid;border-width:1px 0}}.c04a453de7b11520__range-end:not(.f2523033db055ffe__range-start) ._1b64226e315835f8__day-button{&,&:before{border-end-start-radius:0;border-start-start-radius:0}}._81b244e7c541d95e__preview svg{color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d);inset:0;pointer-events:none;position:absolute;@media (forced-colors:active){color:inherit}}._81b244e7c541d95e__preview.acb642920fb0bef5__selected:not(._165d91a726feca9c__range-middle) svg{display:none}._2c7ac60ba97b3411__root[dir=rtl] ._81b244e7c541d95e__preview svg{transform:scaleX(-1)}._81b244e7c541d95e__preview._165d91a726feca9c__range-middle ._1b64226e315835f8__day-button:before{border:none}@keyframes _255a1a462a5377db__slide-in-left{0%{transform:translateX(-100%)}to{transform:translateX(0)}}@keyframes c21e45f616d6db39__slide-in-right{0%{transform:translateX(100%)}to{transform:translateX(0)}}@keyframes aed80001de9ae226__slide-out-left{0%{transform:translateX(0)}to{transform:translateX(-100%)}}@keyframes _7d4779a7f29408f2__slide-out-right{0%{transform:translateX(0)}to{transform:translateX(100%)}}@keyframes _83ba6321b055d687__fade-in{0%{opacity:0}to{opacity:1}}@keyframes _96fbead71248d210__fade-out{0%{opacity:1}to{opacity:0}}._1563bccb09e39c30__caption-after-enter,._60ac2a7fc3208801__weeks-before-exit,._735dacf9052adecd__caption-before-exit,._7f73a6ab85101202__weeks-after-exit,._805d698b56ba4a29__weeks-after-enter,._9721326fbc23a5fb__weeks-before-enter,.c7a3082839155d29__caption-after-exit,.cb8a5ec82ad0885e__caption-before-enter{animation-duration:0s;animation-fill-mode:forwards;animation-timing-function:var(--wpds-motion-easing-balanced,cubic-bezier(.4,0,.2,1));@media not (prefers-reduced-motion){animation-duration:var(--wpds-motion-duration-lg,.3s)}}._2c7ac60ba97b3411__root[dir=rtl] ._805d698b56ba4a29__weeks-after-enter,._9721326fbc23a5fb__weeks-before-enter{animation-name:_255a1a462a5377db__slide-in-left}._2c7ac60ba97b3411__root[dir=rtl] ._7f73a6ab85101202__weeks-after-exit,._60ac2a7fc3208801__weeks-before-exit{animation-name:aed80001de9ae226__slide-out-left}._2c7ac60ba97b3411__root[dir=rtl] ._9721326fbc23a5fb__weeks-before-enter,._805d698b56ba4a29__weeks-after-enter{animation-name:c21e45f616d6db39__slide-in-right}._2c7ac60ba97b3411__root[dir=rtl] ._60ac2a7fc3208801__weeks-before-exit,._7f73a6ab85101202__weeks-after-exit{animation-name:_7d4779a7f29408f2__slide-out-right}._1563bccb09e39c30__caption-after-enter,.cb8a5ec82ad0885e__caption-before-enter{animation-name:_83ba6321b055d687__fade-in}._735dacf9052adecd__caption-before-exit,.c7a3082839155d29__caption-after-exit{animation-name:_96fbead71248d210__fade-out}}}'); 26379 } 26380 var style_default24 = { "root": "_2c7ac60ba97b3411__root", "day": "_172c492625235710__day", "day-button": "_1b64226e315835f8__day-button", "caption-label": "_66b9a8120581fd4b__caption-label", "nav-button": "_395a75bb1930f57e__nav-button", "month-caption": "_337e5337d49b7f3d__month-caption", "months": "_110e46230c68e498__months", "month-grid": "_92915239fedb1fea__month-grid", "nav": "_66b1d4a7b488b496__nav", "weekday": "_7207199709ca5776__weekday", "today": "_058175f0f9c495e0__today", "selected": "acb642920fb0bef5__selected", "range-middle": "_165d91a726feca9c__range-middle", "outside": "c259c5c255fda10f__outside", "hidden": "_4d8957a0ca4ec8f0__hidden", "range-start": "f2523033db055ffe__range-start", "range-end": "c04a453de7b11520__range-end", "preview": "_81b244e7c541d95e__preview", "weeks-before-enter": "_9721326fbc23a5fb__weeks-before-enter", "weeks-before-exit": "_60ac2a7fc3208801__weeks-before-exit", "weeks-after-enter": "_805d698b56ba4a29__weeks-after-enter", "weeks-after-exit": "_7f73a6ab85101202__weeks-after-exit", "caption-after-enter": "_1563bccb09e39c30__caption-after-enter", "caption-after-exit": "c7a3082839155d29__caption-after-exit", "caption-before-enter": "cb8a5ec82ad0885e__caption-before-enter", "caption-before-exit": "_735dacf9052adecd__caption-before-exit", "slide-in-left": "_255a1a462a5377db__slide-in-left", "slide-out-left": "aed80001de9ae226__slide-out-left", "slide-in-right": "c21e45f616d6db39__slide-in-right", "slide-out-right": "_7d4779a7f29408f2__slide-out-right", "fade-in": "_83ba6321b055d687__fade-in", "fade-out": "_96fbead71248d210__fade-out" }; 26381 if (typeof process === "undefined" || true) { 26382 registerStyle25("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); 26383 } 26384 var resets_default10 = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; 26385 if (typeof process === "undefined" || true) { 26386 registerStyle25("08122b3d53", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{.af79fb116edb0dd7__outset-ring--focus:focus,.dfcfdc28396e5d98__outset-ring--focus-visible:focus-visible,.e5cd9ee879f6403a__outset-ring--focus-within:focus-within,:focus-visible ._81935a08e952f267__outset-ring--focus-parent-visible{--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}._3c9f5ee9fc9c136d__outset-ring--focus-within-except-active:focus-within,.abc777e9713fa711__outset-ring--focus-except-active:focus{outline:none}._3c9f5ee9fc9c136d__outset-ring--focus-within-except-active:focus-within:not(:has(:active)),.abc777e9713fa711__outset-ring--focus-except-active:focus:not(:active){--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}}}"); 26387 } 26388 var focus_module_default3 = { "outset-ring--focus": "af79fb116edb0dd7__outset-ring--focus", "outset-ring--focus-visible": "dfcfdc28396e5d98__outset-ring--focus-visible", "outset-ring--focus-within": "e5cd9ee879f6403a__outset-ring--focus-within", "outset-ring--focus-parent-visible": "_81935a08e952f267__outset-ring--focus-parent-visible", "outset-ring--focus-except-active": "abc777e9713fa711__outset-ring--focus-except-active", "outset-ring--focus-within-except-active": "_3c9f5ee9fc9c136d__outset-ring--focus-within-except-active" }; 26389 if (typeof process === "undefined" || true) { 26390 registerStyle25("e8e31009f5", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-weak,#707070))}&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-emphasis,600));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}.c59a0ebebd71fa4a__ol{list-style:var(--_gcd-ol-list-style,none);margin:var(--_gcd-ol-margin,0);padding-block:var(--_gcd-ol-padding-block,0);padding-inline:var(--_gcd-ol-padding-inline,0)}._46b5cb0c8e24e8c9__li{margin:var(--_gcd-li-margin,0)}"); 26391 } 26392 var global_css_defense_default5 = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a", "ol": "c59a0ebebd71fa4a__ol", "li": "_46b5cb0c8e24e8c9__li" }; 26393 var CLASSNAMES = { 26394 root: clsx_default(style_default24.root, resets_default10["box-sizing"]), 26395 day: style_default24.day, 26396 day_button: clsx_default( 26397 style_default24["day-button"], 26398 global_css_defense_default5.button, 26399 focus_module_default3["outset-ring--focus-visible"] 26400 ), 26401 outside: style_default24.outside, 26402 caption_label: style_default24["caption-label"], 26403 button_next: style_default24["nav-button"], 26404 button_previous: style_default24["nav-button"], 26405 nav: style_default24.nav, 26406 month_caption: style_default24["month-caption"], 26407 months: style_default24.months, 26408 month_grid: style_default24["month-grid"], 26409 weekday: style_default24.weekday, 26410 today: style_default24.today, 26411 selected: style_default24.selected, 26412 /* 26413 * Disabled days are styled through `:has(.day-button:disabled)` rather than 26414 * a modifier class on the cell, because the two are not equivalent: the 26415 * focused day keeps its button enabled so it stays reachable. Mapped to 26416 * `undefined` on purpose, so `@daypicker/react` doesn't fall back to its 26417 * own `rdp-disabled` class for a modifier we don't style. 26418 */ 26419 disabled: void 0, 26420 hidden: style_default24.hidden, 26421 range_start: style_default24["range-start"], 26422 range_end: style_default24["range-end"], 26423 range_middle: style_default24["range-middle"], 26424 weeks_before_enter: style_default24["weeks-before-enter"], 26425 weeks_before_exit: style_default24["weeks-before-exit"], 26426 weeks_after_enter: style_default24["weeks-after-enter"], 26427 weeks_after_exit: style_default24["weeks-after-exit"], 26428 caption_after_enter: style_default24["caption-after-enter"], 26429 caption_after_exit: style_default24["caption-after-exit"], 26430 caption_before_enter: style_default24["caption-before-enter"], 26431 caption_before_exit: style_default24["caption-before-exit"] 26432 }; 26433 var MODIFIER_CLASSNAMES = { 26434 preview: style_default24.preview 26435 }; 26436 var COMMON_PROPS = { 26437 animate: true, 26438 // Only show days in the current month 26439 showOutsideDays: false, 26440 // Hide week number column 26441 showWeekNumber: false, 26442 // Show weekdays row 26443 hideWeekdays: false, 26444 // Month and year caption are not interactive 26445 captionLayout: "label", 26446 // Show a variable number of weeks depending on the month 26447 fixedWeeks: false, 26448 // Show navigation buttons 26449 hideNavigation: false, 26450 // Class names 26451 classNames: CLASSNAMES, 26452 components: { 26453 Day: Day2, 26454 Root: Root4, 26455 PreviousMonthButton: PreviousMonthButton2, 26456 NextMonthButton: NextMonthButton2 26457 } 26458 }; 26459 26460 // packages/ui/build-module/calendar/utils/misc.mjs 26461 function clampNumberOfMonths(numberOfMonths) { 26462 return Math.min(3, Math.max(1, numberOfMonths)); 26463 } 26464 26465 // packages/ui/build-module/calendar/utils/use-controlled-value.mjs 26466 var import_element49 = __toESM(require_element(), 1); 26467 function useControlledValue2({ 26468 defaultValue: defaultValue2, 26469 onChange, 26470 value: valueProp 26471 }) { 26472 const hasValue = typeof valueProp !== "undefined"; 26473 const initialValue = hasValue ? valueProp : defaultValue2; 26474 const [state, setState] = (0, import_element49.useState)(initialValue); 26475 const value = hasValue ? valueProp : state; 26476 const uncontrolledSetValue = (0, import_element49.useCallback)( 26477 (nextValue, ...args) => { 26478 setState(nextValue); 26479 onChange?.(nextValue, ...args); 26480 }, 26481 [onChange] 26482 ); 26483 let setValue; 26484 if (hasValue && typeof onChange === "function") { 26485 setValue = onChange; 26486 } else if (!hasValue && typeof onChange === "function") { 26487 setValue = uncontrolledSetValue; 26488 } else { 26489 setValue = setState; 26490 } 26491 return [value, setValue]; 26492 } 26493 26494 // packages/ui/build-module/calendar/utils/use-localization-props.mjs 26495 var import_i18n13 = __toESM(require_i18n(), 1); 26496 var import_element50 = __toESM(require_element(), 1); 26497 function isLocaleRTL(locale) { 26498 const direction = (locale.getTextInfo?.() ?? locale.textInfo)?.direction; 26499 if (direction) { 26500 return direction === "rtl"; 26501 } 26502 return [ 26503 "ar", 26504 // Arabic 26505 "he", 26506 // Hebrew 26507 "fa", 26508 // Persian (Farsi) 26509 "ur", 26510 // Urdu 26511 "ps", 26512 // Pashto 26513 "syr", 26514 // Syriac 26515 "dv", 26516 // Divehi 26517 "ku", 26518 // Kurdish (Sorani) 26519 "ckb", 26520 // Central Kurdish (Sorani) 26521 "ug", 26522 // Uyghur 26523 "yi" 26524 // Yiddish 26525 ].includes(locale.language); 26526 } 26527 function getSupportedLocaleCode(localeCode) { 26528 if (!localeCode) { 26529 return; 26530 } 26531 let supportedLocaleCode; 26532 try { 26533 supportedLocaleCode = Intl.DateTimeFormat.supportedLocalesOf([ 26534 localeCode 26535 ])[0]; 26536 } catch { 26537 } 26538 return supportedLocaleCode; 26539 } 26540 function getWeekStartsOn(locale) { 26541 const firstDay = (locale.getWeekInfo?.() ?? locale.weekInfo)?.firstDay; 26542 if (firstDay === void 0 || firstDay < 1 || firstDay > 7) { 26543 return; 26544 } 26545 return firstDay % 7; 26546 } 26547 var useLocalizationProps = ({ 26548 locale, 26549 timeZone, 26550 mode 26551 }) => { 26552 return (0, import_element50.useMemo)(() => { 26553 const isLocaleString = typeof locale === "string"; 26554 const dateFnsLocale = isLocaleString || locale === void 0 ? enUS : locale; 26555 const supportedLocaleCode = getSupportedLocaleCode( 26556 isLocaleString ? locale : locale?.code 26557 ); 26558 const localeCode = supportedLocaleCode ?? "en-US"; 26559 const intlLocale = new Intl.Locale(localeCode); 26560 const isRightToLeft = supportedLocaleCode !== void 0 ? isLocaleRTL(intlLocale) : (0, import_i18n13.isRTL)(); 26561 const weekStartsOn = isLocaleString || supportedLocaleCode !== void 0 ? getWeekStartsOn(intlLocale) : void 0; 26562 const monthNameFormatter = new Intl.DateTimeFormat(localeCode, { 26563 calendar: "gregory", 26564 year: "numeric", 26565 month: "long", 26566 timeZone 26567 }); 26568 const weekdayNarrowFormatter = new Intl.DateTimeFormat(localeCode, { 26569 calendar: "gregory", 26570 weekday: "narrow", 26571 timeZone 26572 }); 26573 const weekdayLongFormatter = new Intl.DateTimeFormat(localeCode, { 26574 calendar: "gregory", 26575 weekday: "long", 26576 timeZone 26577 }); 26578 const fullDateFormatter = new Intl.DateTimeFormat(localeCode, { 26579 calendar: "gregory", 26580 weekday: "long", 26581 year: "numeric", 26582 month: "long", 26583 day: "numeric", 26584 timeZone 26585 }); 26586 const dayNumberFormatter = new Intl.DateTimeFormat(localeCode, { 26587 calendar: "gregory", 26588 day: "numeric", 26589 timeZone 26590 }); 26591 return { 26592 "aria-label": mode === "single" ? (0, import_i18n13.__)("Date calendar") : (0, import_i18n13.__)("Date range calendar"), 26593 labels: { 26594 /** The label for the navigation toolbar. */ 26595 labelNav: () => (0, import_i18n13.__)("Navigation bar"), 26596 /** 26597 * The label for the month grid. 26598 * @param date 26599 */ 26600 labelGrid: monthNameFormatter.format, 26601 /** 26602 * The label for the gridcell, when the calendar is not interactive. 26603 * @param date 26604 * @param modifiers 26605 */ 26606 labelGridcell: (date, modifiers) => { 26607 const formattedDate = fullDateFormatter.format(date); 26608 let label = formattedDate; 26609 if (modifiers?.today) { 26610 label = (0, import_i18n13.sprintf)( 26611 // translators: %s is the full date (e.g. "Monday, April 29, 2025") 26612 (0, import_i18n13.__)("Today, %s"), 26613 formattedDate 26614 ); 26615 } 26616 return label; 26617 }, 26618 /** The label for the "next month" button. */ 26619 labelNext: () => (0, import_i18n13.__)("Next month"), 26620 /** The label for the "previous month" button. */ 26621 labelPrevious: () => (0, import_i18n13.__)("Previous month"), 26622 /** 26623 * The label for the day button. 26624 * @param date 26625 * @param modifiers 26626 */ 26627 labelDayButton: (date, modifiers) => { 26628 const formattedDate = fullDateFormatter.format(date); 26629 let label = formattedDate; 26630 if (modifiers?.today && modifiers?.selected) { 26631 return (0, import_i18n13.sprintf)( 26632 // translators: %s is the full date (e.g. "Monday, April 29, 2025") 26633 (0, import_i18n13.__)("Today, %s, selected"), 26634 formattedDate 26635 ); 26636 } 26637 if (modifiers?.today) { 26638 label = (0, import_i18n13.sprintf)( 26639 // translators: %s is the full date (e.g. "Monday, April 29, 2025") 26640 (0, import_i18n13.__)("Today, %s"), 26641 formattedDate 26642 ); 26643 } 26644 if (modifiers?.selected) { 26645 label = (0, import_i18n13.sprintf)( 26646 // translators: %s is the full date (e.g. "Monday, April 29, 2025") 26647 (0, import_i18n13.__)("%s, selected"), 26648 formattedDate 26649 ); 26650 } 26651 return label; 26652 }, 26653 /** 26654 * The label for the weekday. 26655 * @param date 26656 */ 26657 labelWeekday: weekdayLongFormatter.format 26658 }, 26659 locale: dateFnsLocale, 26660 lang: localeCode, 26661 dir: isRightToLeft ? "rtl" : "ltr", 26662 ...weekStartsOn === void 0 ? {} : { weekStartsOn }, 26663 formatters: { 26664 formatDay: dayNumberFormatter.format, 26665 formatWeekdayName: weekdayNarrowFormatter.format, 26666 formatCaption: monthNameFormatter.format 26667 }, 26668 timeZone 26669 }; 26670 }, [locale, timeZone, mode]); 26671 }; 26672 26673 // packages/ui/build-module/calendar/utils/use-preserve-day-focus.mjs 26674 var import_compose2 = __toESM(require_compose(), 1); 26675 var import_element51 = __toESM(require_element(), 1); 26676 function usePreserveDayFocus(forwardedRef, month) { 26677 const rootRef = (0, import_element51.useRef)(null); 26678 const hadDayFocusRef = (0, import_element51.useRef)(false); 26679 const mergedRef = (0, import_compose2.useMergeRefs)([rootRef, forwardedRef]); 26680 const monthIndex = month ? month.getFullYear() * 12 + month.getMonth() : void 0; 26681 const onDayFocus = (0, import_element51.useCallback)(() => { 26682 hadDayFocusRef.current = true; 26683 }, []); 26684 const onDayBlur = (0, import_element51.useCallback)(() => { 26685 hadDayFocusRef.current = false; 26686 }, []); 26687 (0, import_element51.useEffect)(() => { 26688 if (!hadDayFocusRef.current) { 26689 return; 26690 } 26691 const root = rootRef.current; 26692 if (!root) { 26693 return; 26694 } 26695 const { activeElement: activeElement2, body } = root.ownerDocument; 26696 if (activeElement2 !== body) { 26697 const grid = activeElement2?.closest('[role="grid"]'); 26698 hadDayFocusRef.current = !!grid && root.contains(grid); 26699 return; 26700 } 26701 hadDayFocusRef.current = false; 26702 const focusTarget = root.querySelector( 26703 '[role="grid"] button[tabindex="0"]:not(:disabled)' 26704 ); 26705 const enabledControl = root.querySelector( 26706 'button:not(:disabled):not([aria-disabled="true"])' 26707 ); 26708 const focusableControl = root.querySelector( 26709 "button:not(:disabled)" 26710 ); 26711 (focusTarget ?? enabledControl ?? focusableControl)?.focus(); 26712 }, [monthIndex]); 26713 return { ref: mergedRef, onDayFocus, onDayBlur }; 26714 } 26715 26716 // packages/ui/build-module/calendar/calendar.mjs 26717 var import_jsx_runtime98 = __toESM(require_jsx_runtime(), 1); 26718 var Calendar = (0, import_element52.forwardRef)( 26719 function Calendar2({ 26720 defaultValue: defaultValue2, 26721 value: valueProp, 26722 onValueChange, 26723 numberOfMonths = 1, 26724 locale, 26725 timeZone, 26726 month, 26727 render: render4, 26728 role = "application", 26729 "aria-label": ariaLabel, 26730 labels: customLabels, 26731 ...props 26732 }, ref) { 26733 const { "aria-label": defaultAriaLabel, ...localizationProps } = useLocalizationProps({ 26734 locale, 26735 timeZone, 26736 mode: "single" 26737 }); 26738 const labels = (0, import_element52.useMemo)( 26739 () => customLabels ? { ...localizationProps.labels, ...customLabels } : localizationProps.labels, 26740 [localizationProps.labels, customLabels] 26741 ); 26742 const onChange = (0, import_element52.useCallback)( 26743 (selected2, triggerDate, modifiers, e2) => { 26744 onValueChange?.( 26745 selected2 ?? null, 26746 triggerDate, 26747 modifiers, 26748 e2 26749 ); 26750 }, 26751 [onValueChange] 26752 ); 26753 const [selected, setSelected] = useControlledValue2({ 26754 defaultValue: defaultValue2, 26755 value: valueProp, 26756 onChange 26757 }); 26758 const dayFocusProps = usePreserveDayFocus(ref, month); 26759 const rootContextValue = (0, import_element52.useMemo)( 26760 () => ({ 26761 render: render4, 26762 ref: dayFocusProps.ref, 26763 role, 26764 defaultAriaLabel 26765 }), 26766 [render4, dayFocusProps.ref, role, defaultAriaLabel] 26767 ); 26768 return /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(RootContext.Provider, { value: rootContextValue, children: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)( 26769 DayPicker, 26770 { 26771 ...COMMON_PROPS, 26772 ...localizationProps, 26773 ...props, 26774 "aria-label": ariaLabel, 26775 mode: "single", 26776 month, 26777 numberOfMonths: clampNumberOfMonths(numberOfMonths), 26778 labels, 26779 selected: selected ?? void 0, 26780 onSelect: setSelected, 26781 onDayFocus: dayFocusProps.onDayFocus, 26782 onDayBlur: dayFocusProps.onDayBlur 26783 } 26784 ) }); 26785 } 26786 ); 26787 26788 // packages/ui/build-module/calendar/range-calendar.mjs 26789 var import_element53 = __toESM(require_element(), 1); 26790 var import_jsx_runtime99 = __toESM(require_jsx_runtime(), 1); 26791 function usePreviewRange({ 26792 value, 26793 hoveredDate, 26794 excludeDisabled, 26795 min: min3, 26796 max: max3, 26797 disabled: disabled2 26798 }) { 26799 return (0, import_element53.useMemo)(() => { 26800 if (!hoveredDate || !value?.from) { 26801 return; 26802 } 26803 let previewHighlight; 26804 let potentialNewRange; 26805 if (hoveredDate < value.from) { 26806 previewHighlight = { 26807 from: hoveredDate, 26808 to: value.from 26809 }; 26810 potentialNewRange = { 26811 from: hoveredDate, 26812 to: value.to ?? value.from 26813 }; 26814 } else if (value.to && hoveredDate > value.from && hoveredDate < value.to) { 26815 previewHighlight = { 26816 from: value.from, 26817 to: hoveredDate 26818 }; 26819 potentialNewRange = { 26820 from: value.from, 26821 to: hoveredDate 26822 }; 26823 } else if (hoveredDate > value.from) { 26824 previewHighlight = { 26825 from: value.to ?? value.from, 26826 to: hoveredDate 26827 }; 26828 potentialNewRange = { 26829 from: value.from, 26830 to: hoveredDate 26831 }; 26832 } 26833 if (min3 !== void 0 && min3 > 0 && potentialNewRange && differenceInCalendarDays( 26834 potentialNewRange.to, 26835 potentialNewRange.from 26836 ) < min3) { 26837 previewHighlight = { 26838 from: hoveredDate, 26839 to: hoveredDate 26840 }; 26841 } 26842 if (max3 !== void 0 && max3 > 0 && potentialNewRange && differenceInCalendarDays( 26843 potentialNewRange.to, 26844 potentialNewRange.from 26845 ) > max3) { 26846 previewHighlight = { 26847 from: hoveredDate, 26848 to: hoveredDate 26849 }; 26850 } 26851 if (excludeDisabled && disabled2 && potentialNewRange && rangeContainsModifiers(potentialNewRange, disabled2)) { 26852 previewHighlight = { 26853 from: hoveredDate, 26854 to: hoveredDate 26855 }; 26856 } 26857 return previewHighlight; 26858 }, [value, hoveredDate, excludeDisabled, min3, max3, disabled2]); 26859 } 26860 var RangeCalendar = (0, import_element53.forwardRef)( 26861 function RangeCalendar2({ 26862 defaultValue: defaultValue2, 26863 value: valueProp, 26864 onValueChange, 26865 numberOfMonths = 1, 26866 excludeDisabled, 26867 min: min3, 26868 max: max3, 26869 disabled: disabled2, 26870 locale, 26871 timeZone, 26872 month, 26873 render: render4, 26874 role = "application", 26875 "aria-label": ariaLabel, 26876 labels: customLabels, 26877 ...props 26878 }, ref) { 26879 const { "aria-label": defaultAriaLabel, ...localizationProps } = useLocalizationProps({ 26880 locale, 26881 timeZone, 26882 mode: "range" 26883 }); 26884 const labels = (0, import_element53.useMemo)( 26885 () => customLabels ? { ...localizationProps.labels, ...customLabels } : localizationProps.labels, 26886 [localizationProps.labels, customLabels] 26887 ); 26888 const onChange = (0, import_element53.useCallback)( 26889 (selected2, triggerDate, modifiers2, e2) => { 26890 onValueChange?.( 26891 selected2 ?? null, 26892 triggerDate, 26893 modifiers2, 26894 e2 26895 ); 26896 }, 26897 [onValueChange] 26898 ); 26899 const [selected, setSelected] = useControlledValue2({ 26900 defaultValue: defaultValue2, 26901 value: valueProp, 26902 onChange 26903 }); 26904 const dayFocusProps = usePreserveDayFocus(ref, month); 26905 const [hoveredDate, setHoveredDate] = (0, import_element53.useState)( 26906 void 0 26907 ); 26908 const previewRange = usePreviewRange({ 26909 value: selected, 26910 hoveredDate, 26911 excludeDisabled, 26912 min: min3, 26913 max: max3, 26914 disabled: disabled2 26915 }); 26916 const modifiers = (0, import_element53.useMemo)(() => { 26917 return { 26918 preview: previewRange, 26919 preview_start: previewRange?.from, 26920 preview_end: previewRange?.to 26921 }; 26922 }, [previewRange]); 26923 const rootContextValue = (0, import_element53.useMemo)( 26924 () => ({ 26925 render: render4, 26926 ref: dayFocusProps.ref, 26927 role, 26928 defaultAriaLabel 26929 }), 26930 [render4, dayFocusProps.ref, role, defaultAriaLabel] 26931 ); 26932 return /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(RootContext.Provider, { value: rootContextValue, children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)( 26933 DayPicker, 26934 { 26935 ...COMMON_PROPS, 26936 ...localizationProps, 26937 ...props, 26938 "aria-label": ariaLabel, 26939 mode: "range", 26940 month, 26941 numberOfMonths: clampNumberOfMonths(numberOfMonths), 26942 disabled: disabled2, 26943 excludeDisabled, 26944 min: min3, 26945 max: max3, 26946 labels, 26947 selected: selected ?? void 0, 26948 onSelect: setSelected, 26949 onDayFocus: dayFocusProps.onDayFocus, 26950 onDayBlur: dayFocusProps.onDayBlur, 26951 onDayMouseEnter: (date) => setHoveredDate(date), 26952 onDayMouseLeave: () => setHoveredDate(void 0), 26953 modifiers, 26954 modifiersClassNames: MODIFIER_CLASSNAMES 26955 } 26956 ) }); 26957 } 26958 ); 26959 26960 // packages/ui/build-module/stack/stack.mjs 26961 var import_element54 = __toESM(require_element(), 1); 26962 var STYLE_HASH_ATTRIBUTE26 = "data-wp-hash"; 26963 function getRuntime26() { 26964 const globalScope = globalThis; 26965 if (globalScope.__wpStyleRuntime) { 26966 return globalScope.__wpStyleRuntime; 26967 } 26968 globalScope.__wpStyleRuntime = { 26969 documents: /* @__PURE__ */ new Map(), 26970 styles: /* @__PURE__ */ new Map(), 26971 injectedStyles: /* @__PURE__ */ new WeakMap() 26972 }; 26973 if (typeof document !== "undefined") { 26974 registerDocument26(document); 26975 } 26976 return globalScope.__wpStyleRuntime; 26977 } 26978 function documentContainsStyleHash26(targetDocument, hash) { 26979 if (!targetDocument.head) { 26980 return false; 26981 } 26982 for (const style of targetDocument.head.querySelectorAll( 26983 `style[$STYLE_HASH_ATTRIBUTE26}]` 26984 )) { 26985 if (style.getAttribute(STYLE_HASH_ATTRIBUTE26) === hash) { 26986 return true; 26987 } 26988 } 26989 return false; 26990 } 26991 function injectStyle26(targetDocument, hash, css) { 26992 if (!targetDocument.head) { 26993 return; 26994 } 26995 const runtime = getRuntime26(); 26996 let injectedStyles = runtime.injectedStyles.get(targetDocument); 26997 if (!injectedStyles) { 26998 injectedStyles = /* @__PURE__ */ new Set(); 26999 runtime.injectedStyles.set(targetDocument, injectedStyles); 27000 } 27001 if (injectedStyles.has(hash)) { 27002 return; 27003 } 27004 if (documentContainsStyleHash26(targetDocument, hash)) { 27005 injectedStyles.add(hash); 27006 return; 27007 } 27008 const style = targetDocument.createElement("style"); 27009 style.setAttribute(STYLE_HASH_ATTRIBUTE26, hash); 27010 style.appendChild(targetDocument.createTextNode(css)); 27011 targetDocument.head.appendChild(style); 27012 injectedStyles.add(hash); 27013 } 27014 function registerDocument26(targetDocument) { 27015 const runtime = getRuntime26(); 27016 runtime.documents.set( 27017 targetDocument, 27018 (runtime.documents.get(targetDocument) ?? 0) + 1 27019 ); 27020 for (const [hash, css] of runtime.styles) { 27021 injectStyle26(targetDocument, hash, css); 27022 } 27023 return () => { 27024 const count = runtime.documents.get(targetDocument); 27025 if (count === void 0) { 27026 return; 27027 } 27028 if (count <= 1) { 27029 runtime.documents.delete(targetDocument); 27030 return; 27031 } 27032 runtime.documents.set(targetDocument, count - 1); 27033 }; 27034 } 27035 function registerStyle26(hash, css) { 27036 const runtime = getRuntime26(); 27037 runtime.styles.set(hash, css); 27038 for (const targetDocument of runtime.documents.keys()) { 27039 injectStyle26(targetDocument, hash, css); 27040 } 27041 } 27042 if (typeof process === "undefined" || true) { 27043 registerStyle26("32aba35fe1", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._19ce0419607e1896__stack{display:flex}}}"); 27044 } 27045 var style_default25 = { "stack": "_19ce0419607e1896__stack" }; 27046 var gapTokens = { 27047 xs: "var(--wpds-dimension-gap-xs, 4px)", 27048 sm: "var(--wpds-dimension-gap-sm, 8px)", 27049 md: "var(--wpds-dimension-gap-md, 12px)", 27050 lg: "var(--wpds-dimension-gap-lg, 16px)", 27051 xl: "var(--wpds-dimension-gap-xl, 24px)", 27052 "2xl": "var(--wpds-dimension-gap-2xl, 32px)", 27053 "3xl": "var(--wpds-dimension-gap-3xl, 40px)" 27054 }; 27055 var Stack = (0, import_element54.forwardRef)(function Stack2({ direction, gap, align, justify, wrap, render: render4, ...props }, ref) { 27056 const style = { 27057 gap: gap && gapTokens[gap], 27058 alignItems: align, 27059 justifyContent: justify, 27060 flexDirection: direction, 27061 flexWrap: wrap 27062 }; 27063 const element = useRender({ 27064 render: render4, 27065 ref, 27066 props: mergeProps(props, { style, className: style_default25.stack }) 27067 }); 27068 return element; 27069 }); 27070 27071 // packages/ui/build-module/form/primitives/input/input.mjs 27072 var import_element57 = __toESM(require_element(), 1); 27073 27074 // packages/ui/build-module/form/primitives/input-layout/input-layout.mjs 27075 var import_element55 = __toESM(require_element(), 1); 27076 var import_jsx_runtime100 = __toESM(require_jsx_runtime(), 1); 27077 var STYLE_HASH_ATTRIBUTE27 = "data-wp-hash"; 27078 function getRuntime27() { 27079 const globalScope = globalThis; 27080 if (globalScope.__wpStyleRuntime) { 27081 return globalScope.__wpStyleRuntime; 27082 } 27083 globalScope.__wpStyleRuntime = { 27084 documents: /* @__PURE__ */ new Map(), 27085 styles: /* @__PURE__ */ new Map(), 27086 injectedStyles: /* @__PURE__ */ new WeakMap() 27087 }; 27088 if (typeof document !== "undefined") { 27089 registerDocument27(document); 27090 } 27091 return globalScope.__wpStyleRuntime; 27092 } 27093 function documentContainsStyleHash27(targetDocument, hash) { 27094 if (!targetDocument.head) { 27095 return false; 27096 } 27097 for (const style of targetDocument.head.querySelectorAll( 27098 `style[$STYLE_HASH_ATTRIBUTE27}]` 27099 )) { 27100 if (style.getAttribute(STYLE_HASH_ATTRIBUTE27) === hash) { 27101 return true; 27102 } 27103 } 27104 return false; 27105 } 27106 function injectStyle27(targetDocument, hash, css) { 27107 if (!targetDocument.head) { 27108 return; 27109 } 27110 const runtime = getRuntime27(); 27111 let injectedStyles = runtime.injectedStyles.get(targetDocument); 27112 if (!injectedStyles) { 27113 injectedStyles = /* @__PURE__ */ new Set(); 27114 runtime.injectedStyles.set(targetDocument, injectedStyles); 27115 } 27116 if (injectedStyles.has(hash)) { 27117 return; 27118 } 27119 if (documentContainsStyleHash27(targetDocument, hash)) { 27120 injectedStyles.add(hash); 27121 return; 27122 } 27123 const style = targetDocument.createElement("style"); 27124 style.setAttribute(STYLE_HASH_ATTRIBUTE27, hash); 27125 style.appendChild(targetDocument.createTextNode(css)); 27126 targetDocument.head.appendChild(style); 27127 injectedStyles.add(hash); 27128 } 27129 function registerDocument27(targetDocument) { 27130 const runtime = getRuntime27(); 27131 runtime.documents.set( 27132 targetDocument, 27133 (runtime.documents.get(targetDocument) ?? 0) + 1 27134 ); 27135 for (const [hash, css] of runtime.styles) { 27136 injectStyle27(targetDocument, hash, css); 27137 } 27138 return () => { 27139 const count = runtime.documents.get(targetDocument); 27140 if (count === void 0) { 27141 return; 27142 } 27143 if (count <= 1) { 27144 runtime.documents.delete(targetDocument); 27145 return; 27146 } 27147 runtime.documents.set(targetDocument, count - 1); 27148 }; 27149 } 27150 function registerStyle27(hash, css) { 27151 const runtime = getRuntime27(); 27152 runtime.styles.set(hash, css); 27153 for (const targetDocument of runtime.documents.keys()) { 27154 injectStyle27(targetDocument, hash, css); 27155 } 27156 } 27157 if (typeof process === "undefined" || true) { 27158 registerStyle27("e8e31009f5", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-weak,#707070))}&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-emphasis,600));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}.c59a0ebebd71fa4a__ol{list-style:var(--_gcd-ol-list-style,none);margin:var(--_gcd-ol-margin,0);padding-block:var(--_gcd-ol-padding-block,0);padding-inline:var(--_gcd-ol-padding-inline,0)}._46b5cb0c8e24e8c9__li{margin:var(--_gcd-li-margin,0)}"); 27159 } 27160 var global_css_defense_default6 = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a", "ol": "c59a0ebebd71fa4a__ol", "li": "_46b5cb0c8e24e8c9__li" }; 27161 if (typeof process === "undefined" || true) { 27162 registerStyle27("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); 27163 } 27164 var resets_default11 = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; 27165 if (typeof process === "undefined" || true) { 27166 registerStyle27("e4f4f9600b", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.cb2baafdc08746bb__input-layout{--wp-ui-input-layout-padding-inline:var(--wpds-dimension-padding-md,12px);background-color:var(--wpds-color-background-interactive-neutral,var(--wpds-color-background-surface-neutral-strong,#fff));border-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d);border-radius:var(--wpds-border-radius-sm,2px);border-style:solid;border-width:var(--wpds-border-width-xs,1px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:max(var(--wpds-typography-font-size-md,13px),16px);height:var(--wpds-dimension-size-lg,40px);line-height:1;@media (min-width:600px){font-size:var(--wpds-typography-font-size-md,13px)}&._0c807a84cbb94e0c__is-size-compact{height:var(--wpds-dimension-size-md,32px)}&._0c807a84cbb94e0c__is-size-compact,&.ed67cda122dc1e7b__is-size-small{--wp-ui-input-layout-padding-inline:var(--wpds-dimension-padding-sm,8px)}&.ed67cda122dc1e7b__is-size-small{height:var(--wpds-dimension-size-sm,24px)}&._6fb7104732387680__is-disabled,&:has([data-can-disable-input-layout][data-disabled]){color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}&:not(._8097270636ca6100__is-borderless){background-color:var(--wpds-color-background-interactive-neutral-disabled,var(--wpds-color-background-surface-neutral-strong,#fff));border-color:var(--wpds-color-stroke-interactive-neutral-disabled,#dbdbdb);@media (forced-colors:active){border-bottom-color:GrayText;border-left-color:GrayText;border-right-color:GrayText;border-top-color:GrayText}}}&._8097270636ca6100__is-borderless{background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);border-color:transparent}&:has(._0d7afad74a057888__input-layout-slot:focus-within){--_gcd-div-outline:none;outline:none}&:hover:not(._6fb7104732387680__is-disabled,:has([data-can-disable-input-layout][data-disabled]),._8097270636ca6100__is-borderless){background-color:var(--wpds-color-background-interactive-neutral-active,var(--wpds-color-background-surface-neutral-strong,#fff));border-color:var(--wpds-color-stroke-interactive-neutral-active,#6e6e6e)}&:has(:invalid[data-validity-visible]){--focus-color:var(--wpds-color-stroke-interactive-error,#cc1818);border-color:var(--wpds-color-stroke-interactive-error,#cc1818);&:hover{border-color:var(--wpds-color-stroke-interactive-error-active,#9d0000)}}}.c192b41a12b4387b__slot-wrapper{display:contents}._0d7afad74a057888__input-layout-slot{align-items:center;display:flex;&._0c952682762ca288__is-padding-minimal{--wp-ui-input-layout-prefix-padding-start:calc(var(--wp-ui-input-layout-padding-inline) - var(--wpds-dimension-padding-xs, 4px));--wp-ui-input-layout-suffix-padding-end:calc(var(--wp-ui-input-layout-padding-inline) - var(--wpds-dimension-padding-xs, 4px))}[data-slot-type=prefix] &{padding-inline-start:var(--wp-ui-input-layout-prefix-padding-start,var(--wp-ui-input-layout-padding-inline))}[data-slot-type=suffix] &{padding-inline-end:var(--wp-ui-input-layout-suffix-padding-end,var(--wp-ui-input-layout-padding-inline))}}}}'); 27167 } 27168 var style_default26 = { "input-layout": "cb2baafdc08746bb__input-layout", "is-size-compact": "_0c807a84cbb94e0c__is-size-compact", "is-size-small": "ed67cda122dc1e7b__is-size-small", "is-disabled": "_6fb7104732387680__is-disabled", "is-borderless": "_8097270636ca6100__is-borderless", "input-layout-slot": "_0d7afad74a057888__input-layout-slot", "slot-wrapper": "c192b41a12b4387b__slot-wrapper", "is-padding-minimal": "_0c952682762ca288__is-padding-minimal" }; 27169 var InputLayout = (0, import_element55.forwardRef)( 27170 function InputLayout2({ 27171 className, 27172 children, 27173 visuallyDisabled, 27174 size: size4 = "default", 27175 isBorderless, 27176 prefix, 27177 suffix, 27178 ...restProps 27179 }, ref) { 27180 return /* @__PURE__ */ (0, import_jsx_runtime100.jsxs)( 27181 "div", 27182 { 27183 ref, 27184 className: clsx_default( 27185 global_css_defense_default6.div, 27186 resets_default11["box-sizing"], 27187 style_default26["input-layout"], 27188 style_default26[`is-size-$size4}`], 27189 visuallyDisabled && style_default26["is-disabled"], 27190 isBorderless && style_default26["is-borderless"], 27191 className 27192 ), 27193 ...restProps, 27194 children: [ 27195 import_element55.Children.count(prefix) > 0 && /* @__PURE__ */ (0, import_jsx_runtime100.jsx)( 27196 "div", 27197 { 27198 className: style_default26["slot-wrapper"], 27199 "data-slot-type": "prefix", 27200 children: prefix 27201 } 27202 ), 27203 children, 27204 import_element55.Children.count(suffix) > 0 && /* @__PURE__ */ (0, import_jsx_runtime100.jsx)( 27205 "div", 27206 { 27207 className: style_default26["slot-wrapper"], 27208 "data-slot-type": "suffix", 27209 children: suffix 27210 } 27211 ) 27212 ] 27213 } 27214 ); 27215 } 27216 ); 27217 27218 // packages/ui/build-module/form/primitives/input-layout/slot.mjs 27219 var import_element56 = __toESM(require_element(), 1); 27220 var import_jsx_runtime101 = __toESM(require_jsx_runtime(), 1); 27221 var STYLE_HASH_ATTRIBUTE28 = "data-wp-hash"; 27222 function getRuntime28() { 27223 const globalScope = globalThis; 27224 if (globalScope.__wpStyleRuntime) { 27225 return globalScope.__wpStyleRuntime; 27226 } 27227 globalScope.__wpStyleRuntime = { 27228 documents: /* @__PURE__ */ new Map(), 27229 styles: /* @__PURE__ */ new Map(), 27230 injectedStyles: /* @__PURE__ */ new WeakMap() 27231 }; 27232 if (typeof document !== "undefined") { 27233 registerDocument28(document); 27234 } 27235 return globalScope.__wpStyleRuntime; 27236 } 27237 function documentContainsStyleHash28(targetDocument, hash) { 27238 if (!targetDocument.head) { 27239 return false; 27240 } 27241 for (const style of targetDocument.head.querySelectorAll( 27242 `style[$STYLE_HASH_ATTRIBUTE28}]` 27243 )) { 27244 if (style.getAttribute(STYLE_HASH_ATTRIBUTE28) === hash) { 27245 return true; 27246 } 27247 } 27248 return false; 27249 } 27250 function injectStyle28(targetDocument, hash, css) { 27251 if (!targetDocument.head) { 27252 return; 27253 } 27254 const runtime = getRuntime28(); 27255 let injectedStyles = runtime.injectedStyles.get(targetDocument); 27256 if (!injectedStyles) { 27257 injectedStyles = /* @__PURE__ */ new Set(); 27258 runtime.injectedStyles.set(targetDocument, injectedStyles); 27259 } 27260 if (injectedStyles.has(hash)) { 27261 return; 27262 } 27263 if (documentContainsStyleHash28(targetDocument, hash)) { 27264 injectedStyles.add(hash); 27265 return; 27266 } 27267 const style = targetDocument.createElement("style"); 27268 style.setAttribute(STYLE_HASH_ATTRIBUTE28, hash); 27269 style.appendChild(targetDocument.createTextNode(css)); 27270 targetDocument.head.appendChild(style); 27271 injectedStyles.add(hash); 27272 } 27273 function registerDocument28(targetDocument) { 27274 const runtime = getRuntime28(); 27275 runtime.documents.set( 27276 targetDocument, 27277 (runtime.documents.get(targetDocument) ?? 0) + 1 27278 ); 27279 for (const [hash, css] of runtime.styles) { 27280 injectStyle28(targetDocument, hash, css); 27281 } 27282 return () => { 27283 const count = runtime.documents.get(targetDocument); 27284 if (count === void 0) { 27285 return; 27286 } 27287 if (count <= 1) { 27288 runtime.documents.delete(targetDocument); 27289 return; 27290 } 27291 runtime.documents.set(targetDocument, count - 1); 27292 }; 27293 } 27294 function registerStyle28(hash, css) { 27295 const runtime = getRuntime28(); 27296 runtime.styles.set(hash, css); 27297 for (const targetDocument of runtime.documents.keys()) { 27298 injectStyle28(targetDocument, hash, css); 27299 } 27300 } 27301 if (typeof process === "undefined" || true) { 27302 registerStyle28("e4f4f9600b", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.cb2baafdc08746bb__input-layout{--wp-ui-input-layout-padding-inline:var(--wpds-dimension-padding-md,12px);background-color:var(--wpds-color-background-interactive-neutral,var(--wpds-color-background-surface-neutral-strong,#fff));border-color:var(--wpds-color-stroke-interactive-neutral,#8d8d8d);border-radius:var(--wpds-border-radius-sm,2px);border-style:solid;border-width:var(--wpds-border-width-xs,1px);color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:max(var(--wpds-typography-font-size-md,13px),16px);height:var(--wpds-dimension-size-lg,40px);line-height:1;@media (min-width:600px){font-size:var(--wpds-typography-font-size-md,13px)}&._0c807a84cbb94e0c__is-size-compact{height:var(--wpds-dimension-size-md,32px)}&._0c807a84cbb94e0c__is-size-compact,&.ed67cda122dc1e7b__is-size-small{--wp-ui-input-layout-padding-inline:var(--wpds-dimension-padding-sm,8px)}&.ed67cda122dc1e7b__is-size-small{height:var(--wpds-dimension-size-sm,24px)}&._6fb7104732387680__is-disabled,&:has([data-can-disable-input-layout][data-disabled]){color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);@media (forced-colors:active){color:GrayText}&:not(._8097270636ca6100__is-borderless){background-color:var(--wpds-color-background-interactive-neutral-disabled,var(--wpds-color-background-surface-neutral-strong,#fff));border-color:var(--wpds-color-stroke-interactive-neutral-disabled,#dbdbdb);@media (forced-colors:active){border-bottom-color:GrayText;border-left-color:GrayText;border-right-color:GrayText;border-top-color:GrayText}}}&._8097270636ca6100__is-borderless{background-color:var(--wpds-color-background-interactive-neutral-weak,#0000);border-color:transparent}&:has(._0d7afad74a057888__input-layout-slot:focus-within){--_gcd-div-outline:none;outline:none}&:hover:not(._6fb7104732387680__is-disabled,:has([data-can-disable-input-layout][data-disabled]),._8097270636ca6100__is-borderless){background-color:var(--wpds-color-background-interactive-neutral-active,var(--wpds-color-background-surface-neutral-strong,#fff));border-color:var(--wpds-color-stroke-interactive-neutral-active,#6e6e6e)}&:has(:invalid[data-validity-visible]){--focus-color:var(--wpds-color-stroke-interactive-error,#cc1818);border-color:var(--wpds-color-stroke-interactive-error,#cc1818);&:hover{border-color:var(--wpds-color-stroke-interactive-error-active,#9d0000)}}}.c192b41a12b4387b__slot-wrapper{display:contents}._0d7afad74a057888__input-layout-slot{align-items:center;display:flex;&._0c952682762ca288__is-padding-minimal{--wp-ui-input-layout-prefix-padding-start:calc(var(--wp-ui-input-layout-padding-inline) - var(--wpds-dimension-padding-xs, 4px));--wp-ui-input-layout-suffix-padding-end:calc(var(--wp-ui-input-layout-padding-inline) - var(--wpds-dimension-padding-xs, 4px))}[data-slot-type=prefix] &{padding-inline-start:var(--wp-ui-input-layout-prefix-padding-start,var(--wp-ui-input-layout-padding-inline))}[data-slot-type=suffix] &{padding-inline-end:var(--wp-ui-input-layout-suffix-padding-end,var(--wp-ui-input-layout-padding-inline))}}}}'); 27303 } 27304 var style_default27 = { "input-layout": "cb2baafdc08746bb__input-layout", "is-size-compact": "_0c807a84cbb94e0c__is-size-compact", "is-size-small": "ed67cda122dc1e7b__is-size-small", "is-disabled": "_6fb7104732387680__is-disabled", "is-borderless": "_8097270636ca6100__is-borderless", "input-layout-slot": "_0d7afad74a057888__input-layout-slot", "slot-wrapper": "c192b41a12b4387b__slot-wrapper", "is-padding-minimal": "_0c952682762ca288__is-padding-minimal" }; 27305 var InputLayoutSlot = (0, import_element56.forwardRef)(function InputLayoutSlot2({ padding = "default", className, ...restProps }, ref) { 27306 return /* @__PURE__ */ (0, import_jsx_runtime101.jsx)( 27307 "div", 27308 { 27309 ref, 27310 className: clsx_default( 27311 style_default27["input-layout-slot"], 27312 style_default27[`is-padding-$padding}`], 27313 className 27314 ), 27315 ...restProps 27316 } 27317 ); 27318 }); 27319 InputLayoutSlot.displayName = "InputLayout.Slot"; 27320 27321 // packages/ui/build-module/form/primitives/input-layout/index.mjs 27322 var InputLayout3 = Object.assign(InputLayout, { 27323 Slot: InputLayoutSlot 27324 }); 27325 27326 // packages/ui/build-module/form/primitives/input/input.mjs 27327 var import_jsx_runtime102 = __toESM(require_jsx_runtime(), 1); 27328 var STYLE_HASH_ATTRIBUTE29 = "data-wp-hash"; 27329 function getRuntime29() { 27330 const globalScope = globalThis; 27331 if (globalScope.__wpStyleRuntime) { 27332 return globalScope.__wpStyleRuntime; 27333 } 27334 globalScope.__wpStyleRuntime = { 27335 documents: /* @__PURE__ */ new Map(), 27336 styles: /* @__PURE__ */ new Map(), 27337 injectedStyles: /* @__PURE__ */ new WeakMap() 27338 }; 27339 if (typeof document !== "undefined") { 27340 registerDocument29(document); 27341 } 27342 return globalScope.__wpStyleRuntime; 27343 } 27344 function documentContainsStyleHash29(targetDocument, hash) { 27345 if (!targetDocument.head) { 27346 return false; 27347 } 27348 for (const style of targetDocument.head.querySelectorAll( 27349 `style[$STYLE_HASH_ATTRIBUTE29}]` 27350 )) { 27351 if (style.getAttribute(STYLE_HASH_ATTRIBUTE29) === hash) { 27352 return true; 27353 } 27354 } 27355 return false; 27356 } 27357 function injectStyle29(targetDocument, hash, css) { 27358 if (!targetDocument.head) { 27359 return; 27360 } 27361 const runtime = getRuntime29(); 27362 let injectedStyles = runtime.injectedStyles.get(targetDocument); 27363 if (!injectedStyles) { 27364 injectedStyles = /* @__PURE__ */ new Set(); 27365 runtime.injectedStyles.set(targetDocument, injectedStyles); 27366 } 27367 if (injectedStyles.has(hash)) { 27368 return; 27369 } 27370 if (documentContainsStyleHash29(targetDocument, hash)) { 27371 injectedStyles.add(hash); 27372 return; 27373 } 27374 const style = targetDocument.createElement("style"); 27375 style.setAttribute(STYLE_HASH_ATTRIBUTE29, hash); 27376 style.appendChild(targetDocument.createTextNode(css)); 27377 targetDocument.head.appendChild(style); 27378 injectedStyles.add(hash); 27379 } 27380 function registerDocument29(targetDocument) { 27381 const runtime = getRuntime29(); 27382 runtime.documents.set( 27383 targetDocument, 27384 (runtime.documents.get(targetDocument) ?? 0) + 1 27385 ); 27386 for (const [hash, css] of runtime.styles) { 27387 injectStyle29(targetDocument, hash, css); 27388 } 27389 return () => { 27390 const count = runtime.documents.get(targetDocument); 27391 if (count === void 0) { 27392 return; 27393 } 27394 if (count <= 1) { 27395 runtime.documents.delete(targetDocument); 27396 return; 27397 } 27398 runtime.documents.set(targetDocument, count - 1); 27399 }; 27400 } 27401 function registerStyle29(hash, css) { 27402 const runtime = getRuntime29(); 27403 runtime.styles.set(hash, css); 27404 for (const targetDocument of runtime.documents.keys()) { 27405 injectStyle29(targetDocument, hash, css); 27406 } 27407 } 27408 if (typeof process === "undefined" || true) { 27409 registerStyle29("e8e31009f5", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-weak,#707070))}&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-emphasis,600));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}.c59a0ebebd71fa4a__ol{list-style:var(--_gcd-ol-list-style,none);margin:var(--_gcd-ol-margin,0);padding-block:var(--_gcd-ol-padding-block,0);padding-inline:var(--_gcd-ol-padding-inline,0)}._46b5cb0c8e24e8c9__li{margin:var(--_gcd-li-margin,0)}"); 27410 } 27411 var global_css_defense_default7 = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a", "ol": "c59a0ebebd71fa4a__ol", "li": "_46b5cb0c8e24e8c9__li" }; 27412 if (typeof process === "undefined" || true) { 27413 registerStyle29("08122b3d53", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{.af79fb116edb0dd7__outset-ring--focus:focus,.dfcfdc28396e5d98__outset-ring--focus-visible:focus-visible,.e5cd9ee879f6403a__outset-ring--focus-within:focus-within,:focus-visible ._81935a08e952f267__outset-ring--focus-parent-visible{--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}._3c9f5ee9fc9c136d__outset-ring--focus-within-except-active:focus-within,.abc777e9713fa711__outset-ring--focus-except-active:focus{outline:none}._3c9f5ee9fc9c136d__outset-ring--focus-within-except-active:focus-within:not(:has(:active)),.abc777e9713fa711__outset-ring--focus-except-active:focus:not(:active){--_gcd-a-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));--_gcd-div-outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px)) solid var(--focus-color,var(--wpds-color-stroke-focus,var(--wp-admin-theme-color,#3858e9)));outline-offset:var(--wpds-border-width-focus,var(--wp-admin-border-width-focus,2px))}}}"); 27414 } 27415 var focus_module_default4 = { "outset-ring--focus": "af79fb116edb0dd7__outset-ring--focus", "outset-ring--focus-visible": "dfcfdc28396e5d98__outset-ring--focus-visible", "outset-ring--focus-within": "e5cd9ee879f6403a__outset-ring--focus-within", "outset-ring--focus-parent-visible": "_81935a08e952f267__outset-ring--focus-parent-visible", "outset-ring--focus-except-active": "abc777e9713fa711__outset-ring--focus-except-active", "outset-ring--focus-within-except-active": "_3c9f5ee9fc9c136d__outset-ring--focus-within-except-active" }; 27416 if (typeof process === "undefined" || true) { 27417 registerStyle29("1a25f6a232", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._2ae7be2fc1bb17a3__input{--_gcd-input-padding:var(--wp-ui-input-padding-block,0px) var(--wp-ui-input-layout-padding-inline,0px);background:transparent;border:none;color:var(--wpds-color-foreground-interactive-neutral,#1e1e1e);font-family:inherit;font-size:inherit;line-height:inherit;outline:none;padding-block:var(--wp-ui-input-padding-block,0);padding-inline:var(--wp-ui-input-layout-padding-inline,0);width:100%;&::placeholder{color:var(--wpds-color-foreground-interactive-neutral-weak,#707070)}&:disabled,&[aria-disabled=true]{--_gcd-input-placeholder-color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d);&::placeholder{color:var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d)}@media (forced-colors:active){color:GrayText}}&[type=email],&[type=url]{direction:ltr}&[type=number]{appearance:textfield;&::-webkit-inner-spin-button,&::-webkit-outer-spin-button{appearance:none;margin:0}}}}}"); 27418 } 27419 var style_default28 = { "input": "_2ae7be2fc1bb17a3__input" }; 27420 var Input3 = (0, import_element57.forwardRef)(function Input22({ className, size: size4 = "default", prefix, suffix, style, ...restProps }, ref) { 27421 return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( 27422 InputLayout3, 27423 { 27424 className: clsx_default( 27425 focus_module_default4["outset-ring--focus-within"], 27426 className 27427 ), 27428 style, 27429 size: size4, 27430 visuallyDisabled: restProps.disabled, 27431 prefix, 27432 suffix, 27433 children: /* @__PURE__ */ (0, import_jsx_runtime102.jsx)( 27434 Input, 27435 { 27436 ref, 27437 className: clsx_default(global_css_defense_default7.input, style_default28.input), 27438 ...restProps 27439 } 27440 ) 27441 } 27442 ); 27443 }); 27444 27445 // packages/ui/build-module/form/primitives/control-with-error/control-with-error.mjs 27446 var import_i18n14 = __toESM(require_i18n(), 1); 27447 var import_element59 = __toESM(require_element(), 1); 27448 27449 // packages/ui/build-module/spinner/spinner.mjs 27450 var import_element58 = __toESM(require_element(), 1); 27451 var import_jsx_runtime103 = __toESM(require_jsx_runtime(), 1); 27452 var STYLE_HASH_ATTRIBUTE30 = "data-wp-hash"; 27453 function getRuntime30() { 27454 const globalScope = globalThis; 27455 if (globalScope.__wpStyleRuntime) { 27456 return globalScope.__wpStyleRuntime; 27457 } 27458 globalScope.__wpStyleRuntime = { 27459 documents: /* @__PURE__ */ new Map(), 27460 styles: /* @__PURE__ */ new Map(), 27461 injectedStyles: /* @__PURE__ */ new WeakMap() 27462 }; 27463 if (typeof document !== "undefined") { 27464 registerDocument30(document); 27465 } 27466 return globalScope.__wpStyleRuntime; 27467 } 27468 function documentContainsStyleHash30(targetDocument, hash) { 27469 if (!targetDocument.head) { 27470 return false; 27471 } 27472 for (const style of targetDocument.head.querySelectorAll( 27473 `style[$STYLE_HASH_ATTRIBUTE30}]` 27474 )) { 27475 if (style.getAttribute(STYLE_HASH_ATTRIBUTE30) === hash) { 27476 return true; 27477 } 27478 } 27479 return false; 27480 } 27481 function injectStyle30(targetDocument, hash, css) { 27482 if (!targetDocument.head) { 27483 return; 27484 } 27485 const runtime = getRuntime30(); 27486 let injectedStyles = runtime.injectedStyles.get(targetDocument); 27487 if (!injectedStyles) { 27488 injectedStyles = /* @__PURE__ */ new Set(); 27489 runtime.injectedStyles.set(targetDocument, injectedStyles); 27490 } 27491 if (injectedStyles.has(hash)) { 27492 return; 27493 } 27494 if (documentContainsStyleHash30(targetDocument, hash)) { 27495 injectedStyles.add(hash); 27496 return; 27497 } 27498 const style = targetDocument.createElement("style"); 27499 style.setAttribute(STYLE_HASH_ATTRIBUTE30, hash); 27500 style.appendChild(targetDocument.createTextNode(css)); 27501 targetDocument.head.appendChild(style); 27502 injectedStyles.add(hash); 27503 } 27504 function registerDocument30(targetDocument) { 27505 const runtime = getRuntime30(); 27506 runtime.documents.set( 27507 targetDocument, 27508 (runtime.documents.get(targetDocument) ?? 0) + 1 27509 ); 27510 for (const [hash, css] of runtime.styles) { 27511 injectStyle30(targetDocument, hash, css); 27512 } 27513 return () => { 27514 const count = runtime.documents.get(targetDocument); 27515 if (count === void 0) { 27516 return; 27517 } 27518 if (count <= 1) { 27519 runtime.documents.delete(targetDocument); 27520 return; 27521 } 27522 runtime.documents.set(targetDocument, count - 1); 27523 }; 27524 } 27525 function registerStyle30(hash, css) { 27526 const runtime = getRuntime30(); 27527 runtime.styles.set(hash, css); 27528 for (const targetDocument of runtime.documents.keys()) { 27529 injectStyle30(targetDocument, hash, css); 27530 } 27531 } 27532 if (typeof process === "undefined" || true) { 27533 registerStyle30("bbbecfe373", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.ab4d64c07c0ba587__spinner{background-color:transparent;display:inline-block;height:var(--wpds-dimension-size-2xs,16px);opacity:1;overflow:visible;position:relative;width:var(--wpds-dimension-size-2xs,16px)}.a7654e10245bb7d2__indicator,.dc51f80c84b35fe2__track{fill:transparent;stroke-width:1.5px}.dc51f80c84b35fe2__track{stroke:var(--wpds-color-background-track-neutral,#dbdbdb)}.a7654e10245bb7d2__indicator{stroke:var(--wpds-color-background-thumb-brand,var(--wp-admin-theme-color,#3858e9));stroke-linecap:round;animation:_02322d973909703c__spinner-spin 1.4s linear infinite both;transform-origin:50% 50%}@keyframes _02322d973909703c__spinner-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}}}"); 27534 } 27535 var style_default29 = { "spinner": "ab4d64c07c0ba587__spinner", "track": "dc51f80c84b35fe2__track", "indicator": "a7654e10245bb7d2__indicator", "spinner-spin": "_02322d973909703c__spinner-spin" }; 27536 var Spinner = (0, import_element58.forwardRef)( 27537 function Spinner2({ className, ...props }, ref) { 27538 return /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)( 27539 "svg", 27540 { 27541 className: clsx_default(style_default29.spinner, className), 27542 viewBox: "0 0 100 100", 27543 xmlns: "http://www.w3.org/2000/svg", 27544 role: "presentation", 27545 focusable: "false", 27546 ...props, 27547 ref, 27548 children: [ 27549 /* @__PURE__ */ (0, import_jsx_runtime103.jsx)( 27550 "circle", 27551 { 27552 className: style_default29.track, 27553 cx: "50", 27554 cy: "50", 27555 r: "50", 27556 vectorEffect: "non-scaling-stroke" 27557 } 27558 ), 27559 /* @__PURE__ */ (0, import_jsx_runtime103.jsx)( 27560 "path", 27561 { 27562 className: style_default29.indicator, 27563 d: "m 50 0 a 50 50 0 0 1 50 50", 27564 vectorEffect: "non-scaling-stroke" 27565 } 27566 ) 27567 ] 27568 } 27569 ); 27570 } 27571 ); 27572 27573 // packages/ui/build-module/form/primitives/validity-indicator/validity-indicator.mjs 27574 var import_jsx_runtime104 = __toESM(require_jsx_runtime(), 1); 27575 var STYLE_HASH_ATTRIBUTE31 = "data-wp-hash"; 27576 function getRuntime31() { 27577 const globalScope = globalThis; 27578 if (globalScope.__wpStyleRuntime) { 27579 return globalScope.__wpStyleRuntime; 27580 } 27581 globalScope.__wpStyleRuntime = { 27582 documents: /* @__PURE__ */ new Map(), 27583 styles: /* @__PURE__ */ new Map(), 27584 injectedStyles: /* @__PURE__ */ new WeakMap() 27585 }; 27586 if (typeof document !== "undefined") { 27587 registerDocument31(document); 27588 } 27589 return globalScope.__wpStyleRuntime; 27590 } 27591 function documentContainsStyleHash31(targetDocument, hash) { 27592 if (!targetDocument.head) { 27593 return false; 27594 } 27595 for (const style of targetDocument.head.querySelectorAll( 27596 `style[$STYLE_HASH_ATTRIBUTE31}]` 27597 )) { 27598 if (style.getAttribute(STYLE_HASH_ATTRIBUTE31) === hash) { 27599 return true; 27600 } 27601 } 27602 return false; 27603 } 27604 function injectStyle31(targetDocument, hash, css) { 27605 if (!targetDocument.head) { 27606 return; 27607 } 27608 const runtime = getRuntime31(); 27609 let injectedStyles = runtime.injectedStyles.get(targetDocument); 27610 if (!injectedStyles) { 27611 injectedStyles = /* @__PURE__ */ new Set(); 27612 runtime.injectedStyles.set(targetDocument, injectedStyles); 27613 } 27614 if (injectedStyles.has(hash)) { 27615 return; 27616 } 27617 if (documentContainsStyleHash31(targetDocument, hash)) { 27618 injectedStyles.add(hash); 27619 return; 27620 } 27621 const style = targetDocument.createElement("style"); 27622 style.setAttribute(STYLE_HASH_ATTRIBUTE31, hash); 27623 style.appendChild(targetDocument.createTextNode(css)); 27624 targetDocument.head.appendChild(style); 27625 injectedStyles.add(hash); 27626 } 27627 function registerDocument31(targetDocument) { 27628 const runtime = getRuntime31(); 27629 runtime.documents.set( 27630 targetDocument, 27631 (runtime.documents.get(targetDocument) ?? 0) + 1 27632 ); 27633 for (const [hash, css] of runtime.styles) { 27634 injectStyle31(targetDocument, hash, css); 27635 } 27636 return () => { 27637 const count = runtime.documents.get(targetDocument); 27638 if (count === void 0) { 27639 return; 27640 } 27641 if (count <= 1) { 27642 runtime.documents.delete(targetDocument); 27643 return; 27644 } 27645 runtime.documents.set(targetDocument, count - 1); 27646 }; 27647 } 27648 function registerStyle31(hash, css) { 27649 const runtime = getRuntime31(); 27650 runtime.styles.set(hash, css); 27651 for (const targetDocument of runtime.documents.keys()) { 27652 injectStyle31(targetDocument, hash, css); 27653 } 27654 } 27655 if (typeof process === "undefined" || true) { 27656 registerStyle31("e8e31009f5", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-weak,#707070))}&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-emphasis,600));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}.c59a0ebebd71fa4a__ol{list-style:var(--_gcd-ol-list-style,none);margin:var(--_gcd-ol-margin,0);padding-block:var(--_gcd-ol-padding-block,0);padding-inline:var(--_gcd-ol-padding-inline,0)}._46b5cb0c8e24e8c9__li{margin:var(--_gcd-li-margin,0)}"); 27657 } 27658 var global_css_defense_default8 = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a", "ol": "c59a0ebebd71fa4a__ol", "li": "_46b5cb0c8e24e8c9__li" }; 27659 if (typeof process === "undefined" || true) { 27660 registerStyle31("bd510b0d40", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._7a7ac88e306348e7__indicator{--_gcd-p-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);align-items:flex-start;color:var(--wpds-color-foreground-content-neutral-weak,#707070);display:flex;font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);gap:var(--wpds-dimension-gap-xs,4px);line-height:var(--wpds-typography-line-height-xs,16px);@media not (prefers-reduced-motion){animation:_48722cc5dd090ce4__indicator-jump var(--wpds-motion-duration-md,.2s) cubic-bezier(.68,-.55,.27,1.55)}}._57a3bbbfbe38a5c6__is-invalid{color:var(--wpds-color-foreground-content-error-weak,#cc1818)}._9e944dc198aac10b__is-valid{color:var(--wpds-color-foreground-content-success-weak,#007f2f)}.e482806667437c6a__indicator-icon{flex-shrink:0}._6e46434cc23019d2__indicator-spinner{height:var(--wpds-dimension-size-3xs,12px);margin:2px;width:var(--wpds-dimension-size-3xs,12px)}@keyframes _48722cc5dd090ce4__indicator-jump{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}}}'); 27661 } 27662 var style_default30 = { "indicator": "_7a7ac88e306348e7__indicator", "indicator-jump": "_48722cc5dd090ce4__indicator-jump", "is-invalid": "_57a3bbbfbe38a5c6__is-invalid", "is-valid": "_9e944dc198aac10b__is-valid", "indicator-icon": "e482806667437c6a__indicator-icon", "indicator-spinner": "_6e46434cc23019d2__indicator-spinner" }; 27663 var ICON = { 27664 valid: published_default, 27665 invalid: error_default 27666 }; 27667 function ValidityIndicator({ 27668 id, 27669 type, 27670 message: message2 27671 }) { 27672 return /* @__PURE__ */ (0, import_jsx_runtime104.jsxs)( 27673 "p", 27674 { 27675 id, 27676 className: clsx_default( 27677 global_css_defense_default8.p, 27678 style_default30.indicator, 27679 style_default30[`is-$type}`] 27680 ), 27681 children: [ 27682 type === "validating" ? /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(Spinner, { className: style_default30["indicator-spinner"] }) : /* @__PURE__ */ (0, import_jsx_runtime104.jsx)( 27683 Icon, 27684 { 27685 className: style_default30["indicator-icon"], 27686 icon: ICON[type], 27687 size: 16, 27688 fill: "currentColor" 27689 } 27690 ), 27691 message2 27692 ] 27693 } 27694 ); 27695 } 27696 27697 // packages/ui/build-module/form/primitives/control-with-error/control-with-error.mjs 27698 var import_jsx_runtime105 = __toESM(require_jsx_runtime(), 1); 27699 var DEFAULT_RENDER = (props) => /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(Stack, { ...props, direction: "column", gap: "sm" }); 27700 function appendRequiredIndicator(label, required, markWhenOptional) { 27701 let suffix; 27702 if (required && !markWhenOptional) { 27703 suffix = `(${(0, import_i18n14.__)("Required")})`; 27704 } else if (!required && markWhenOptional) { 27705 suffix = `(${(0, import_i18n14.__)("Optional")})`; 27706 } 27707 if (!suffix) { 27708 return label; 27709 } 27710 if (typeof label === "string") { 27711 return `$label} $suffix}`; 27712 } 27713 return /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)(import_jsx_runtime105.Fragment, { children: [ 27714 label, 27715 " ", 27716 suffix 27717 ] }); 27718 } 27719 var VALIDITY_VISIBLE_ATTRIBUTE = "data-validity-visible"; 27720 var ControlWithError = (0, import_element59.forwardRef)(function ControlWithError2({ 27721 required, 27722 markWhenOptional, 27723 customValidity, 27724 getValidityTarget, 27725 children, 27726 render: render4 = DEFAULT_RENDER, 27727 ...restProps 27728 }, forwardedRef) { 27729 const [errorMessage, setErrorMessage] = (0, import_element59.useState)(); 27730 const [statusMessage, setStatusMessage] = (0, import_element59.useState)(); 27731 const [showMessage, setShowMessage] = (0, import_element59.useState)(false); 27732 const [isTouched, setIsTouched] = (0, import_element59.useState)(false); 27733 const wrapperRef = (0, import_element59.useRef)(null); 27734 (0, import_element59.useEffect)(() => { 27735 const validityTarget = getValidityTarget(); 27736 const handler = () => { 27737 if (customValidity?.type !== "validating") { 27738 setErrorMessage(validityTarget?.validationMessage); 27739 } 27740 setShowMessage(true); 27741 validityTarget?.setAttribute(VALIDITY_VISIBLE_ATTRIBUTE, ""); 27742 }; 27743 validityTarget?.addEventListener("invalid", handler); 27744 return () => validityTarget?.removeEventListener("invalid", handler); 27745 }, [customValidity?.type, getValidityTarget]); 27746 (0, import_element59.useEffect)(() => { 27747 const validityTarget = getValidityTarget(); 27748 const suppressNativePopover = (event) => { 27749 event.preventDefault(); 27750 if (!event.isTrusted) { 27751 return; 27752 } 27753 const target = event.target; 27754 const firstErrorInForm = Array.from( 27755 target.form?.elements ?? [] 27756 ).find((el) => !el.validity.valid); 27757 if (!target.form || firstErrorInForm === target) { 27758 target.focus(); 27759 } 27760 }; 27761 const radioSiblings = validityTarget?.type === "radio" && validityTarget?.name ? Array.from( 27762 wrapperRef.current?.querySelectorAll( 27763 `input[type="radio"][name="$validityTarget?.name}"]` 27764 ) ?? [] 27765 ).filter((sibling) => sibling !== validityTarget) : []; 27766 validityTarget?.addEventListener("invalid", suppressNativePopover); 27767 radioSiblings.forEach( 27768 (sibling) => sibling.addEventListener("invalid", suppressNativePopover) 27769 ); 27770 return () => { 27771 validityTarget?.removeEventListener( 27772 "invalid", 27773 suppressNativePopover 27774 ); 27775 radioSiblings.forEach( 27776 (sibling) => sibling.removeEventListener("invalid", suppressNativePopover) 27777 ); 27778 }; 27779 }, [getValidityTarget]); 27780 (0, import_element59.useEffect)(() => { 27781 const validityTarget = getValidityTarget(); 27782 if (!customValidity?.type) { 27783 validityTarget?.setCustomValidity(""); 27784 setErrorMessage(validityTarget?.validationMessage); 27785 setStatusMessage(void 0); 27786 return; 27787 } 27788 switch (customValidity.type) { 27789 case "validating": { 27790 validityTarget?.setCustomValidity(""); 27791 setErrorMessage(void 0); 27792 setStatusMessage({ 27793 type: "validating", 27794 message: customValidity.message 27795 }); 27796 break; 27797 } 27798 case "valid": { 27799 validityTarget?.setCustomValidity(""); 27800 setErrorMessage(validityTarget?.validationMessage); 27801 setStatusMessage({ 27802 type: "valid", 27803 message: customValidity.message 27804 }); 27805 break; 27806 } 27807 case "invalid": { 27808 validityTarget?.setCustomValidity( 27809 customValidity.message ?? "" 27810 ); 27811 setErrorMessage(validityTarget?.validationMessage); 27812 setStatusMessage(void 0); 27813 break; 27814 } 27815 } 27816 }, [customValidity, getValidityTarget]); 27817 (0, import_element59.useEffect)(() => { 27818 if (!isTouched || showMessage) { 27819 return; 27820 } 27821 if (customValidity?.type === "validating") { 27822 const timer = setTimeout(() => { 27823 setShowMessage(true); 27824 }, 1e3); 27825 return () => clearTimeout(timer); 27826 } 27827 setShowMessage(true); 27828 }, [isTouched, customValidity?.type, showMessage]); 27829 const onBlur = (event) => { 27830 if (event.relatedTarget && event.currentTarget.contains(event.relatedTarget)) { 27831 return; 27832 } 27833 if (!isTouched) { 27834 setIsTouched(true); 27835 getValidityTarget()?.setAttribute(VALIDITY_VISIBLE_ATTRIBUTE, ""); 27836 } 27837 const validityTarget = getValidityTarget(); 27838 const isValidating = customValidity?.type === "validating"; 27839 window.queueMicrotask(() => { 27840 if (!isValidating) { 27841 setErrorMessage(validityTarget?.validationMessage); 27842 } 27843 }); 27844 }; 27845 const messageId = (0, import_element59.useId)(); 27846 const message2 = (() => { 27847 if (errorMessage) { 27848 return /* @__PURE__ */ (0, import_jsx_runtime105.jsx)( 27849 ValidityIndicator, 27850 { 27851 id: messageId, 27852 type: "invalid", 27853 message: errorMessage 27854 } 27855 ); 27856 } 27857 if (statusMessage?.type) { 27858 return /* @__PURE__ */ (0, import_jsx_runtime105.jsx)( 27859 ValidityIndicator, 27860 { 27861 id: messageId, 27862 type: statusMessage.type, 27863 message: statusMessage.message 27864 } 27865 ); 27866 } 27867 return null; 27868 })(); 27869 const visibleMessage = showMessage ? message2 : null; 27870 (0, import_element59.useEffect)(() => { 27871 const target = getValidityTarget(); 27872 if (!target) { 27873 return; 27874 } 27875 function setDescribedBy(el, shouldAdd) { 27876 const ids = (el.getAttribute("aria-describedby") ?? "").split(" ").filter((id) => id && id !== messageId); 27877 if (shouldAdd) { 27878 ids.push(messageId); 27879 } 27880 if (ids.length) { 27881 el.setAttribute("aria-describedby", ids.join(" ")); 27882 } else { 27883 el.removeAttribute("aria-describedby"); 27884 } 27885 } 27886 setDescribedBy(target, !!visibleMessage); 27887 return () => setDescribedBy(target, false); 27888 }, [visibleMessage, messageId, getValidityTarget]); 27889 return useRender({ 27890 render: render4, 27891 ref: [forwardedRef, wrapperRef], 27892 props: mergeProps(restProps, { 27893 onBlur, 27894 children: /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)(import_jsx_runtime105.Fragment, { children: [ 27895 (0, import_element59.cloneElement)(children, { 27896 label: appendRequiredIndicator( 27897 children.props.label, 27898 required, 27899 markWhenOptional 27900 ), 27901 required 27902 }), 27903 visibleMessage 27904 ] }) 27905 }) 27906 }); 27907 }); 27908 27909 // packages/ui/build-module/form/primitives/field/index.mjs 27910 var field_exports = {}; 27911 __export(field_exports, { 27912 Control: () => Control, 27913 Description: () => Description, 27914 Details: () => Details, 27915 Item: () => Item2, 27916 Label: () => Label, 27917 Root: () => Root5, 27918 VisualLabel: () => VisualLabel 27919 }); 27920 27921 // packages/ui/build-module/form/primitives/field/root.mjs 27922 var import_element60 = __toESM(require_element(), 1); 27923 var import_jsx_runtime106 = __toESM(require_jsx_runtime(), 1); 27924 var STYLE_HASH_ATTRIBUTE32 = "data-wp-hash"; 27925 function getRuntime32() { 27926 const globalScope = globalThis; 27927 if (globalScope.__wpStyleRuntime) { 27928 return globalScope.__wpStyleRuntime; 27929 } 27930 globalScope.__wpStyleRuntime = { 27931 documents: /* @__PURE__ */ new Map(), 27932 styles: /* @__PURE__ */ new Map(), 27933 injectedStyles: /* @__PURE__ */ new WeakMap() 27934 }; 27935 if (typeof document !== "undefined") { 27936 registerDocument32(document); 27937 } 27938 return globalScope.__wpStyleRuntime; 27939 } 27940 function documentContainsStyleHash32(targetDocument, hash) { 27941 if (!targetDocument.head) { 27942 return false; 27943 } 27944 for (const style of targetDocument.head.querySelectorAll( 27945 `style[$STYLE_HASH_ATTRIBUTE32}]` 27946 )) { 27947 if (style.getAttribute(STYLE_HASH_ATTRIBUTE32) === hash) { 27948 return true; 27949 } 27950 } 27951 return false; 27952 } 27953 function injectStyle32(targetDocument, hash, css) { 27954 if (!targetDocument.head) { 27955 return; 27956 } 27957 const runtime = getRuntime32(); 27958 let injectedStyles = runtime.injectedStyles.get(targetDocument); 27959 if (!injectedStyles) { 27960 injectedStyles = /* @__PURE__ */ new Set(); 27961 runtime.injectedStyles.set(targetDocument, injectedStyles); 27962 } 27963 if (injectedStyles.has(hash)) { 27964 return; 27965 } 27966 if (documentContainsStyleHash32(targetDocument, hash)) { 27967 injectedStyles.add(hash); 27968 return; 27969 } 27970 const style = targetDocument.createElement("style"); 27971 style.setAttribute(STYLE_HASH_ATTRIBUTE32, hash); 27972 style.appendChild(targetDocument.createTextNode(css)); 27973 targetDocument.head.appendChild(style); 27974 injectedStyles.add(hash); 27975 } 27976 function registerDocument32(targetDocument) { 27977 const runtime = getRuntime32(); 27978 runtime.documents.set( 27979 targetDocument, 27980 (runtime.documents.get(targetDocument) ?? 0) + 1 27981 ); 27982 for (const [hash, css] of runtime.styles) { 27983 injectStyle32(targetDocument, hash, css); 27984 } 27985 return () => { 27986 const count = runtime.documents.get(targetDocument); 27987 if (count === void 0) { 27988 return; 27989 } 27990 if (count <= 1) { 27991 runtime.documents.delete(targetDocument); 27992 return; 27993 } 27994 runtime.documents.set(targetDocument, count - 1); 27995 }; 27996 } 27997 function registerStyle32(hash, css) { 27998 const runtime = getRuntime32(); 27999 runtime.styles.set(hash, css); 28000 for (const targetDocument of runtime.documents.keys()) { 28001 injectStyle32(targetDocument, hash, css); 28002 } 28003 } 28004 if (typeof process === "undefined" || true) { 28005 registerStyle32("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}"); 28006 } 28007 var resets_default12 = { "box-sizing": "_336cd3e4e743482f__box-sizing" }; 28008 var DEFAULT_RENDER2 = (props) => /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(Stack, { ...props, direction: "column", gap: "sm" }); 28009 var Root5 = (0, import_element60.forwardRef)(function Root22({ className, render: render4 = DEFAULT_RENDER2, ...restProps }, ref) { 28010 return /* @__PURE__ */ (0, import_jsx_runtime106.jsx)( 28011 index_parts_exports2.Root, 28012 { 28013 ref, 28014 className: clsx_default(resets_default12["box-sizing"], className), 28015 render: render4, 28016 ...restProps 28017 } 28018 ); 28019 }); 28020 28021 // packages/ui/build-module/form/primitives/field/item.mjs 28022 var import_element61 = __toESM(require_element(), 1); 28023 var import_jsx_runtime107 = __toESM(require_jsx_runtime(), 1); 28024 var Item2 = (0, import_element61.forwardRef)(function Item22(props, ref) { 28025 return /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(index_parts_exports2.Item, { ref, ...props }); 28026 }); 28027 28028 // packages/ui/build-module/form/primitives/field/label.mjs 28029 var import_element62 = __toESM(require_element(), 1); 28030 var import_jsx_runtime108 = __toESM(require_jsx_runtime(), 1); 28031 var STYLE_HASH_ATTRIBUTE33 = "data-wp-hash"; 28032 function getRuntime33() { 28033 const globalScope = globalThis; 28034 if (globalScope.__wpStyleRuntime) { 28035 return globalScope.__wpStyleRuntime; 28036 } 28037 globalScope.__wpStyleRuntime = { 28038 documents: /* @__PURE__ */ new Map(), 28039 styles: /* @__PURE__ */ new Map(), 28040 injectedStyles: /* @__PURE__ */ new WeakMap() 28041 }; 28042 if (typeof document !== "undefined") { 28043 registerDocument33(document); 28044 } 28045 return globalScope.__wpStyleRuntime; 28046 } 28047 function documentContainsStyleHash33(targetDocument, hash) { 28048 if (!targetDocument.head) { 28049 return false; 28050 } 28051 for (const style of targetDocument.head.querySelectorAll( 28052 `style[$STYLE_HASH_ATTRIBUTE33}]` 28053 )) { 28054 if (style.getAttribute(STYLE_HASH_ATTRIBUTE33) === hash) { 28055 return true; 28056 } 28057 } 28058 return false; 28059 } 28060 function injectStyle33(targetDocument, hash, css) { 28061 if (!targetDocument.head) { 28062 return; 28063 } 28064 const runtime = getRuntime33(); 28065 let injectedStyles = runtime.injectedStyles.get(targetDocument); 28066 if (!injectedStyles) { 28067 injectedStyles = /* @__PURE__ */ new Set(); 28068 runtime.injectedStyles.set(targetDocument, injectedStyles); 28069 } 28070 if (injectedStyles.has(hash)) { 28071 return; 28072 } 28073 if (documentContainsStyleHash33(targetDocument, hash)) { 28074 injectedStyles.add(hash); 28075 return; 28076 } 28077 const style = targetDocument.createElement("style"); 28078 style.setAttribute(STYLE_HASH_ATTRIBUTE33, hash); 28079 style.appendChild(targetDocument.createTextNode(css)); 28080 targetDocument.head.appendChild(style); 28081 injectedStyles.add(hash); 28082 } 28083 function registerDocument33(targetDocument) { 28084 const runtime = getRuntime33(); 28085 runtime.documents.set( 28086 targetDocument, 28087 (runtime.documents.get(targetDocument) ?? 0) + 1 28088 ); 28089 for (const [hash, css] of runtime.styles) { 28090 injectStyle33(targetDocument, hash, css); 28091 } 28092 return () => { 28093 const count = runtime.documents.get(targetDocument); 28094 if (count === void 0) { 28095 return; 28096 } 28097 if (count <= 1) { 28098 runtime.documents.delete(targetDocument); 28099 return; 28100 } 28101 runtime.documents.set(targetDocument, count - 1); 28102 }; 28103 } 28104 function registerStyle33(hash, css) { 28105 const runtime = getRuntime33(); 28106 runtime.styles.set(hash, css); 28107 for (const targetDocument of runtime.documents.keys()) { 28108 injectStyle33(targetDocument, hash, css); 28109 } 28110 } 28111 if (typeof process === "undefined" || true) { 28112 registerStyle33("df33c48b2d", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._2d5ad850b2f90964__label{--wp-ui-field-label-line-height:var(--wpds-typography-line-height-xs,16px);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);line-height:var(--wp-ui-field-label-line-height);text-transform:uppercase;&._17c4214649230bea__is-plain{font-size:var(--wpds-typography-font-size-md,13px);font-weight:var(--wpds-typography-font-weight-default,400);text-transform:none}}._08a3750500e0233f__description{--_gcd-p-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);--_gcd-p-margin:0;text-wrap:pretty;color:var(--wpds-color-foreground-content-neutral-weak,#707070);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:var(--wpds-typography-line-height-xs,16px)}}}'); 28113 } 28114 var field_default = { "label": "_2d5ad850b2f90964__label", "is-plain": "_17c4214649230bea__is-plain", "description": "_08a3750500e0233f__description" }; 28115 var Label = (0, import_element62.forwardRef)( 28116 function Label2({ className, hideFromVision, variant, ...restProps }, ref) { 28117 const label = /* @__PURE__ */ (0, import_jsx_runtime108.jsx)( 28118 index_parts_exports2.Label, 28119 { 28120 ref, 28121 className: clsx_default( 28122 field_default.label, 28123 variant && field_default[`is-$variant}`], 28124 className 28125 ), 28126 ...restProps 28127 } 28128 ); 28129 if (hideFromVision) { 28130 return /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(VisuallyHidden, { render: label }); 28131 } 28132 return label; 28133 } 28134 ); 28135 28136 // packages/ui/build-module/form/primitives/field/description.mjs 28137 var import_element63 = __toESM(require_element(), 1); 28138 var import_jsx_runtime109 = __toESM(require_jsx_runtime(), 1); 28139 var STYLE_HASH_ATTRIBUTE34 = "data-wp-hash"; 28140 function getRuntime34() { 28141 const globalScope = globalThis; 28142 if (globalScope.__wpStyleRuntime) { 28143 return globalScope.__wpStyleRuntime; 28144 } 28145 globalScope.__wpStyleRuntime = { 28146 documents: /* @__PURE__ */ new Map(), 28147 styles: /* @__PURE__ */ new Map(), 28148 injectedStyles: /* @__PURE__ */ new WeakMap() 28149 }; 28150 if (typeof document !== "undefined") { 28151 registerDocument34(document); 28152 } 28153 return globalScope.__wpStyleRuntime; 28154 } 28155 function documentContainsStyleHash34(targetDocument, hash) { 28156 if (!targetDocument.head) { 28157 return false; 28158 } 28159 for (const style of targetDocument.head.querySelectorAll( 28160 `style[$STYLE_HASH_ATTRIBUTE34}]` 28161 )) { 28162 if (style.getAttribute(STYLE_HASH_ATTRIBUTE34) === hash) { 28163 return true; 28164 } 28165 } 28166 return false; 28167 } 28168 function injectStyle34(targetDocument, hash, css) { 28169 if (!targetDocument.head) { 28170 return; 28171 } 28172 const runtime = getRuntime34(); 28173 let injectedStyles = runtime.injectedStyles.get(targetDocument); 28174 if (!injectedStyles) { 28175 injectedStyles = /* @__PURE__ */ new Set(); 28176 runtime.injectedStyles.set(targetDocument, injectedStyles); 28177 } 28178 if (injectedStyles.has(hash)) { 28179 return; 28180 } 28181 if (documentContainsStyleHash34(targetDocument, hash)) { 28182 injectedStyles.add(hash); 28183 return; 28184 } 28185 const style = targetDocument.createElement("style"); 28186 style.setAttribute(STYLE_HASH_ATTRIBUTE34, hash); 28187 style.appendChild(targetDocument.createTextNode(css)); 28188 targetDocument.head.appendChild(style); 28189 injectedStyles.add(hash); 28190 } 28191 function registerDocument34(targetDocument) { 28192 const runtime = getRuntime34(); 28193 runtime.documents.set( 28194 targetDocument, 28195 (runtime.documents.get(targetDocument) ?? 0) + 1 28196 ); 28197 for (const [hash, css] of runtime.styles) { 28198 injectStyle34(targetDocument, hash, css); 28199 } 28200 return () => { 28201 const count = runtime.documents.get(targetDocument); 28202 if (count === void 0) { 28203 return; 28204 } 28205 if (count <= 1) { 28206 runtime.documents.delete(targetDocument); 28207 return; 28208 } 28209 runtime.documents.set(targetDocument, count - 1); 28210 }; 28211 } 28212 function registerStyle34(hash, css) { 28213 const runtime = getRuntime34(); 28214 runtime.styles.set(hash, css); 28215 for (const targetDocument of runtime.documents.keys()) { 28216 injectStyle34(targetDocument, hash, css); 28217 } 28218 } 28219 if (typeof process === "undefined" || true) { 28220 registerStyle34("e8e31009f5", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-weak,#707070))}&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-emphasis,600));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}.c59a0ebebd71fa4a__ol{list-style:var(--_gcd-ol-list-style,none);margin:var(--_gcd-ol-margin,0);padding-block:var(--_gcd-ol-padding-block,0);padding-inline:var(--_gcd-ol-padding-inline,0)}._46b5cb0c8e24e8c9__li{margin:var(--_gcd-li-margin,0)}"); 28221 } 28222 var global_css_defense_default9 = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a", "ol": "c59a0ebebd71fa4a__ol", "li": "_46b5cb0c8e24e8c9__li" }; 28223 if (typeof process === "undefined" || true) { 28224 registerStyle34("df33c48b2d", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._2d5ad850b2f90964__label{--wp-ui-field-label-line-height:var(--wpds-typography-line-height-xs,16px);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);line-height:var(--wp-ui-field-label-line-height);text-transform:uppercase;&._17c4214649230bea__is-plain{font-size:var(--wpds-typography-font-size-md,13px);font-weight:var(--wpds-typography-font-weight-default,400);text-transform:none}}._08a3750500e0233f__description{--_gcd-p-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);--_gcd-p-margin:0;text-wrap:pretty;color:var(--wpds-color-foreground-content-neutral-weak,#707070);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:var(--wpds-typography-line-height-xs,16px)}}}'); 28225 } 28226 var field_default2 = { "label": "_2d5ad850b2f90964__label", "is-plain": "_17c4214649230bea__is-plain", "description": "_08a3750500e0233f__description" }; 28227 var Description = (0, import_element63.forwardRef)(function Description2({ className, ...restProps }, ref) { 28228 return /* @__PURE__ */ (0, import_jsx_runtime109.jsx)( 28229 index_parts_exports2.Description, 28230 { 28231 ref, 28232 className: clsx_default( 28233 global_css_defense_default9.p, 28234 field_default2.description, 28235 className 28236 ), 28237 ...restProps 28238 } 28239 ); 28240 }); 28241 28242 // packages/ui/build-module/form/primitives/field/details.mjs 28243 var import_element64 = __toESM(require_element(), 1); 28244 var import_i18n15 = __toESM(require_i18n(), 1); 28245 var import_jsx_runtime110 = __toESM(require_jsx_runtime(), 1); 28246 var STYLE_HASH_ATTRIBUTE35 = "data-wp-hash"; 28247 function getRuntime35() { 28248 const globalScope = globalThis; 28249 if (globalScope.__wpStyleRuntime) { 28250 return globalScope.__wpStyleRuntime; 28251 } 28252 globalScope.__wpStyleRuntime = { 28253 documents: /* @__PURE__ */ new Map(), 28254 styles: /* @__PURE__ */ new Map(), 28255 injectedStyles: /* @__PURE__ */ new WeakMap() 28256 }; 28257 if (typeof document !== "undefined") { 28258 registerDocument35(document); 28259 } 28260 return globalScope.__wpStyleRuntime; 28261 } 28262 function documentContainsStyleHash35(targetDocument, hash) { 28263 if (!targetDocument.head) { 28264 return false; 28265 } 28266 for (const style of targetDocument.head.querySelectorAll( 28267 `style[$STYLE_HASH_ATTRIBUTE35}]` 28268 )) { 28269 if (style.getAttribute(STYLE_HASH_ATTRIBUTE35) === hash) { 28270 return true; 28271 } 28272 } 28273 return false; 28274 } 28275 function injectStyle35(targetDocument, hash, css) { 28276 if (!targetDocument.head) { 28277 return; 28278 } 28279 const runtime = getRuntime35(); 28280 let injectedStyles = runtime.injectedStyles.get(targetDocument); 28281 if (!injectedStyles) { 28282 injectedStyles = /* @__PURE__ */ new Set(); 28283 runtime.injectedStyles.set(targetDocument, injectedStyles); 28284 } 28285 if (injectedStyles.has(hash)) { 28286 return; 28287 } 28288 if (documentContainsStyleHash35(targetDocument, hash)) { 28289 injectedStyles.add(hash); 28290 return; 28291 } 28292 const style = targetDocument.createElement("style"); 28293 style.setAttribute(STYLE_HASH_ATTRIBUTE35, hash); 28294 style.appendChild(targetDocument.createTextNode(css)); 28295 targetDocument.head.appendChild(style); 28296 injectedStyles.add(hash); 28297 } 28298 function registerDocument35(targetDocument) { 28299 const runtime = getRuntime35(); 28300 runtime.documents.set( 28301 targetDocument, 28302 (runtime.documents.get(targetDocument) ?? 0) + 1 28303 ); 28304 for (const [hash, css] of runtime.styles) { 28305 injectStyle35(targetDocument, hash, css); 28306 } 28307 return () => { 28308 const count = runtime.documents.get(targetDocument); 28309 if (count === void 0) { 28310 return; 28311 } 28312 if (count <= 1) { 28313 runtime.documents.delete(targetDocument); 28314 return; 28315 } 28316 runtime.documents.set(targetDocument, count - 1); 28317 }; 28318 } 28319 function registerStyle35(hash, css) { 28320 const runtime = getRuntime35(); 28321 runtime.styles.set(hash, css); 28322 for (const targetDocument of runtime.documents.keys()) { 28323 injectStyle35(targetDocument, hash, css); 28324 } 28325 } 28326 if (typeof process === "undefined" || true) { 28327 registerStyle35("df33c48b2d", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._2d5ad850b2f90964__label{--wp-ui-field-label-line-height:var(--wpds-typography-line-height-xs,16px);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);line-height:var(--wp-ui-field-label-line-height);text-transform:uppercase;&._17c4214649230bea__is-plain{font-size:var(--wpds-typography-font-size-md,13px);font-weight:var(--wpds-typography-font-weight-default,400);text-transform:none}}._08a3750500e0233f__description{--_gcd-p-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);--_gcd-p-margin:0;text-wrap:pretty;color:var(--wpds-color-foreground-content-neutral-weak,#707070);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:var(--wpds-typography-line-height-xs,16px)}}}'); 28328 } 28329 var field_default3 = { "label": "_2d5ad850b2f90964__label", "is-plain": "_17c4214649230bea__is-plain", "description": "_08a3750500e0233f__description" }; 28330 var Details = (0, import_element64.forwardRef)( 28331 function Details2({ className, ...restProps }, ref) { 28332 return /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)(import_jsx_runtime110.Fragment, { children: [ 28333 /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(VisuallyHidden, { render: /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(index_parts_exports2.Description, {}), children: (0, import_i18n15.__)("More details follow the field.") }), 28334 /* @__PURE__ */ (0, import_jsx_runtime110.jsx)( 28335 "div", 28336 { 28337 ref, 28338 className: clsx_default(field_default3.description, className), 28339 ...restProps 28340 } 28341 ) 28342 ] }); 28343 } 28344 ); 28345 28346 // packages/ui/build-module/form/primitives/field/control.mjs 28347 var import_element65 = __toESM(require_element(), 1); 28348 var import_jsx_runtime111 = __toESM(require_jsx_runtime(), 1); 28349 var Control = (0, import_element65.forwardRef)( 28350 function Control2(props, ref) { 28351 return /* @__PURE__ */ (0, import_jsx_runtime111.jsx)(index_parts_exports2.Control, { ref, ...props }); 28352 } 28353 ); 28354 28355 // packages/ui/build-module/form/primitives/field/visual-label.mjs 28356 var import_element66 = __toESM(require_element(), 1); 28357 var STYLE_HASH_ATTRIBUTE36 = "data-wp-hash"; 28358 function getRuntime36() { 28359 const globalScope = globalThis; 28360 if (globalScope.__wpStyleRuntime) { 28361 return globalScope.__wpStyleRuntime; 28362 } 28363 globalScope.__wpStyleRuntime = { 28364 documents: /* @__PURE__ */ new Map(), 28365 styles: /* @__PURE__ */ new Map(), 28366 injectedStyles: /* @__PURE__ */ new WeakMap() 28367 }; 28368 if (typeof document !== "undefined") { 28369 registerDocument36(document); 28370 } 28371 return globalScope.__wpStyleRuntime; 28372 } 28373 function documentContainsStyleHash36(targetDocument, hash) { 28374 if (!targetDocument.head) { 28375 return false; 28376 } 28377 for (const style of targetDocument.head.querySelectorAll( 28378 `style[$STYLE_HASH_ATTRIBUTE36}]` 28379 )) { 28380 if (style.getAttribute(STYLE_HASH_ATTRIBUTE36) === hash) { 28381 return true; 28382 } 28383 } 28384 return false; 28385 } 28386 function injectStyle36(targetDocument, hash, css) { 28387 if (!targetDocument.head) { 28388 return; 28389 } 28390 const runtime = getRuntime36(); 28391 let injectedStyles = runtime.injectedStyles.get(targetDocument); 28392 if (!injectedStyles) { 28393 injectedStyles = /* @__PURE__ */ new Set(); 28394 runtime.injectedStyles.set(targetDocument, injectedStyles); 28395 } 28396 if (injectedStyles.has(hash)) { 28397 return; 28398 } 28399 if (documentContainsStyleHash36(targetDocument, hash)) { 28400 injectedStyles.add(hash); 28401 return; 28402 } 28403 const style = targetDocument.createElement("style"); 28404 style.setAttribute(STYLE_HASH_ATTRIBUTE36, hash); 28405 style.appendChild(targetDocument.createTextNode(css)); 28406 targetDocument.head.appendChild(style); 28407 injectedStyles.add(hash); 28408 } 28409 function registerDocument36(targetDocument) { 28410 const runtime = getRuntime36(); 28411 runtime.documents.set( 28412 targetDocument, 28413 (runtime.documents.get(targetDocument) ?? 0) + 1 28414 ); 28415 for (const [hash, css] of runtime.styles) { 28416 injectStyle36(targetDocument, hash, css); 28417 } 28418 return () => { 28419 const count = runtime.documents.get(targetDocument); 28420 if (count === void 0) { 28421 return; 28422 } 28423 if (count <= 1) { 28424 runtime.documents.delete(targetDocument); 28425 return; 28426 } 28427 runtime.documents.set(targetDocument, count - 1); 28428 }; 28429 } 28430 function registerStyle36(hash, css) { 28431 const runtime = getRuntime36(); 28432 runtime.styles.set(hash, css); 28433 for (const targetDocument of runtime.documents.keys()) { 28434 injectStyle36(targetDocument, hash, css); 28435 } 28436 } 28437 if (typeof process === "undefined" || true) { 28438 registerStyle36("df33c48b2d", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._2d5ad850b2f90964__label{--wp-ui-field-label-line-height:var(--wpds-typography-line-height-xs,16px);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-xs,11px);font-weight:var(--wpds-typography-font-weight-emphasis,600);line-height:var(--wp-ui-field-label-line-height);text-transform:uppercase;&._17c4214649230bea__is-plain{font-size:var(--wpds-typography-font-size-md,13px);font-weight:var(--wpds-typography-font-weight-default,400);text-transform:none}}._08a3750500e0233f__description{--_gcd-p-font-size:var(--wpds-typography-font-size-sm,12px);--_gcd-p-line-height:var(--wpds-typography-line-height-xs,16px);--_gcd-p-margin:0;text-wrap:pretty;color:var(--wpds-color-foreground-content-neutral-weak,#707070);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:var(--wpds-typography-line-height-xs,16px)}}}'); 28439 } 28440 var field_default4 = { "label": "_2d5ad850b2f90964__label", "is-plain": "_17c4214649230bea__is-plain", "description": "_08a3750500e0233f__description" }; 28441 var VisualLabel = (0, import_element66.forwardRef)( 28442 function VisualLabel2({ className, render: render4, variant, ...restProps }, ref) { 28443 return useRender({ 28444 defaultTagName: "span", 28445 render: render4, 28446 ref, 28447 props: mergeProps(restProps, { 28448 className: clsx_default( 28449 field_default4.label, 28450 variant && field_default4[`is-$variant}`], 28451 className 28452 ) 28453 }) 28454 }); 28455 } 28456 ); 28457 VisualLabel.displayName = "Field.VisualLabel"; 28458 28459 // packages/ui/build-module/form/primitives/textarea/textarea.mjs 28460 var import_element67 = __toESM(require_element(), 1); 28461 var import_jsx_runtime112 = __toESM(require_jsx_runtime(), 1); 28462 var STYLE_HASH_ATTRIBUTE37 = "data-wp-hash"; 28463 function getRuntime37() { 28464 const globalScope = globalThis; 28465 if (globalScope.__wpStyleRuntime) { 28466 return globalScope.__wpStyleRuntime; 28467 } 28468 globalScope.__wpStyleRuntime = { 28469 documents: /* @__PURE__ */ new Map(), 28470 styles: /* @__PURE__ */ new Map(), 28471 injectedStyles: /* @__PURE__ */ new WeakMap() 28472 }; 28473 if (typeof document !== "undefined") { 28474 registerDocument37(document); 28475 } 28476 return globalScope.__wpStyleRuntime; 28477 } 28478 function documentContainsStyleHash37(targetDocument, hash) { 28479 if (!targetDocument.head) { 28480 return false; 28481 } 28482 for (const style of targetDocument.head.querySelectorAll( 28483 `style[$STYLE_HASH_ATTRIBUTE37}]` 28484 )) { 28485 if (style.getAttribute(STYLE_HASH_ATTRIBUTE37) === hash) { 28486 return true; 28487 } 28488 } 28489 return false; 28490 } 28491 function injectStyle37(targetDocument, hash, css) { 28492 if (!targetDocument.head) { 28493 return; 28494 } 28495 const runtime = getRuntime37(); 28496 let injectedStyles = runtime.injectedStyles.get(targetDocument); 28497 if (!injectedStyles) { 28498 injectedStyles = /* @__PURE__ */ new Set(); 28499 runtime.injectedStyles.set(targetDocument, injectedStyles); 28500 } 28501 if (injectedStyles.has(hash)) { 28502 return; 28503 } 28504 if (documentContainsStyleHash37(targetDocument, hash)) { 28505 injectedStyles.add(hash); 28506 return; 28507 } 28508 const style = targetDocument.createElement("style"); 28509 style.setAttribute(STYLE_HASH_ATTRIBUTE37, hash); 28510 style.appendChild(targetDocument.createTextNode(css)); 28511 targetDocument.head.appendChild(style); 28512 injectedStyles.add(hash); 28513 } 28514 function registerDocument37(targetDocument) { 28515 const runtime = getRuntime37(); 28516 runtime.documents.set( 28517 targetDocument, 28518 (runtime.documents.get(targetDocument) ?? 0) + 1 28519 ); 28520 for (const [hash, css] of runtime.styles) { 28521 injectStyle37(targetDocument, hash, css); 28522 } 28523 return () => { 28524 const count = runtime.documents.get(targetDocument); 28525 if (count === void 0) { 28526 return; 28527 } 28528 if (count <= 1) { 28529 runtime.documents.delete(targetDocument); 28530 return; 28531 } 28532 runtime.documents.set(targetDocument, count - 1); 28533 }; 28534 } 28535 function registerStyle37(hash, css) { 28536 const runtime = getRuntime37(); 28537 runtime.styles.set(hash, css); 28538 for (const targetDocument of runtime.documents.keys()) { 28539 injectStyle37(targetDocument, hash, css); 28540 } 28541 } 28542 if (typeof process === "undefined" || true) { 28543 registerStyle37("1540cbc709", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._1e441c22c9dc5d28__wrapper{--wp-ui-textarea-min-height:var(--wpds-dimension-size-lg,40px)}._414844876c32ecee__textarea{min-height:calc(var(--wp-ui-textarea-min-height) - 2px);resize:block}}@layer compositions{._1e441c22c9dc5d28__wrapper{--wp-ui-input-padding-block:9.9px;height:auto;line-height:1.4}}}"); 28544 } 28545 var style_default31 = { "wrapper": "_1e441c22c9dc5d28__wrapper", "textarea": "_414844876c32ecee__textarea" }; 28546 if (typeof process === "undefined" || true) { 28547 registerStyle37("e8e31009f5", "._6defc79820e382c6__button{box-sizing:var(--_gcd-button-box-sizing,border-box);font-family:var(--_gcd-button-font-family,inherit);font-size:var(--_gcd-button-font-size,inherit);font-weight:var(--_gcd-button-font-weight,inherit)}.d2cff2e5dea83bd1__input{box-sizing:var(--_gcd-input-box-sizing,border-box);font-family:var(--_gcd-input-font-family,inherit);font-size:var(--_gcd-input-font-size,inherit);font-weight:var(--_gcd-input-font-weight,inherit);margin:var(--_gcd-input-margin,0);&::placeholder{color:var(--_gcd-input-placeholder-color,var(--wpds-color-foreground-interactive-neutral-weak,#707070))}&:is(textarea,[type=text],[type=password],[type=color],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){background-color:var(--_gcd-input-background-color,transparent);border:var(--_gcd-input-border,none);border-radius:var(--_gcd-input-border-radius,0);box-shadow:var(--_gcd-input-box-shadow,0 0 0 transparent);color:var(--_gcd-input-color,var(--wpds-color-foreground-interactive-neutral,#1e1e1e));&:focus{border-color:var(--_gcd-input-border-color-focus,var(--wp-admin-theme-color));box-shadow:var(--_gcd-input-box-shadow-focus,none);outline:var(--_gcd-input-outline-focus,none)}&:disabled{background:var(--_gcd-input-background-disabled,transparent);border-color:var(--_gcd-input-border-color-disabled,transparent);box-shadow:var(--_gcd-input-box-shadow-disabled,none);color:var(--_gcd-input-color-disabled,var(--wpds-color-foreground-interactive-neutral-disabled,#8d8d8d))}}&:is(textarea,[type=text],[type=password],[type=date],[type=datetime],[type=datetime-local],[type=email],[type=month],[type=number],[type=search],[type=tel],[type=time],[type=url],[type=week]){line-height:var(--_gcd-input-line-height,inherit);min-height:var(--_gcd-input-min-height,auto);padding:var(--_gcd-input-padding,0)}}._547d86373d02e108__textarea{box-sizing:var(--_gcd-textarea-box-sizing,border-box);overflow:var(--_gcd-textarea-overflow,auto);resize:var(--_gcd-textarea-resize,block)}._8c15fd0ed9f28ba4__div{outline:var(--_gcd-div-outline,0 solid transparent)}p._43cec3e1eec1066d__p{font-size:var(--_gcd-p-font-size,13px);line-height:var(--_gcd-p-line-height,1.5);margin:var(--_gcd-p-margin,0)}:is(h1,h2,h3,h4,h5,h6).e97669c6d9a38497__heading{color:var(--_gcd-heading-color,var(--wpds-color-foreground-content-neutral,#1e1e1e));font-size:var(--_gcd-heading-font-size,inherit);font-weight:var(--_gcd-heading-font-weight,var(--wpds-typography-font-weight-emphasis,600));margin:var(--_gcd-heading-margin,0)}._2c0831b0499dbd6e__a,._2c0831b0499dbd6e__a:is(:hover,:focus,:active){border-radius:var(--_gcd-a-border-radius,0);box-shadow:var(--_gcd-a-box-shadow,none);color:var(--_gcd-a-color,inherit);outline:var(--_gcd-a-outline,0 solid transparent);transition:var(--_gcd-a-transition,none)}.c59a0ebebd71fa4a__ol{list-style:var(--_gcd-ol-list-style,none);margin:var(--_gcd-ol-margin,0);padding-block:var(--_gcd-ol-padding-block,0);padding-inline:var(--_gcd-ol-padding-inline,0)}._46b5cb0c8e24e8c9__li{margin:var(--_gcd-li-margin,0)}"); 28548 } 28549 var global_css_defense_default10 = { "button": "_6defc79820e382c6__button", "input": "d2cff2e5dea83bd1__input", "textarea": "_547d86373d02e108__textarea", "div": "_8c15fd0ed9f28ba4__div", "p": "_43cec3e1eec1066d__p", "heading": "e97669c6d9a38497__heading", "a": "_2c0831b0499dbd6e__a", "ol": "c59a0ebebd71fa4a__ol", "li": "_46b5cb0c8e24e8c9__li" }; 28550 var wrappedRender = (render4, restProps) => { 28551 return function textareaRender(props) { 28552 return typeof render4 === "function" ? render4(mergeProps(props, restProps)) : (0, import_element67.cloneElement)(render4, mergeProps(props, restProps)); 28553 }; 28554 }; 28555 var Textarea = (0, import_element67.forwardRef)( 28556 function Textarea2({ 28557 className, 28558 defaultValue: defaultValue2, 28559 disabled: disabled2, 28560 onValueChange, 28561 render: render4, 28562 rows = 4, 28563 style, 28564 value, 28565 ...restProps 28566 }, ref) { 28567 return /* @__PURE__ */ (0, import_jsx_runtime112.jsx)( 28568 Input3, 28569 { 28570 className: clsx_default(style_default31.wrapper, className), 28571 style, 28572 render: wrappedRender( 28573 render4 || ((props) => /* @__PURE__ */ (0, import_jsx_runtime112.jsx)("textarea", { ...props })), 28574 { 28575 className: clsx_default( 28576 global_css_defense_default10.textarea, 28577 style_default31.textarea 28578 ), 28579 ref, 28580 rows, 28581 ...restProps 28582 } 28583 ), 28584 value, 28585 defaultValue: defaultValue2, 28586 onValueChange, 28587 disabled: disabled2 28588 } 28589 ); 28590 } 28591 ); 28592 28593 // packages/ui/build-module/form/input-control/input-control.mjs 28594 var import_element68 = __toESM(require_element(), 1); 28595 var import_jsx_runtime113 = __toESM(require_jsx_runtime(), 1); 28596 var STYLE_HASH_ATTRIBUTE38 = "data-wp-hash"; 28597 function getRuntime38() { 28598 const globalScope = globalThis; 28599 if (globalScope.__wpStyleRuntime) { 28600 return globalScope.__wpStyleRuntime; 28601 } 28602 globalScope.__wpStyleRuntime = { 28603 documents: /* @__PURE__ */ new Map(), 28604 styles: /* @__PURE__ */ new Map(), 28605 injectedStyles: /* @__PURE__ */ new WeakMap() 28606 }; 28607 if (typeof document !== "undefined") { 28608 registerDocument38(document); 28609 } 28610 return globalScope.__wpStyleRuntime; 28611 } 28612 function documentContainsStyleHash38(targetDocument, hash) { 28613 if (!targetDocument.head) { 28614 return false; 28615 } 28616 for (const style of targetDocument.head.querySelectorAll( 28617 `style[$STYLE_HASH_ATTRIBUTE38}]` 28618 )) { 28619 if (style.getAttribute(STYLE_HASH_ATTRIBUTE38) === hash) { 28620 return true; 28621 } 28622 } 28623 return false; 28624 } 28625 function injectStyle38(targetDocument, hash, css) { 28626 if (!targetDocument.head) { 28627 return; 28628 } 28629 const runtime = getRuntime38(); 28630 let injectedStyles = runtime.injectedStyles.get(targetDocument); 28631 if (!injectedStyles) { 28632 injectedStyles = /* @__PURE__ */ new Set(); 28633 runtime.injectedStyles.set(targetDocument, injectedStyles); 28634 } 28635 if (injectedStyles.has(hash)) { 28636 return; 28637 } 28638 if (documentContainsStyleHash38(targetDocument, hash)) { 28639 injectedStyles.add(hash); 28640 return; 28641 } 28642 const style = targetDocument.createElement("style"); 28643 style.setAttribute(STYLE_HASH_ATTRIBUTE38, hash); 28644 style.appendChild(targetDocument.createTextNode(css)); 28645 targetDocument.head.appendChild(style); 28646 injectedStyles.add(hash); 28647 } 28648 function registerDocument38(targetDocument) { 28649 const runtime = getRuntime38(); 28650 runtime.documents.set( 28651 targetDocument, 28652 (runtime.documents.get(targetDocument) ?? 0) + 1 28653 ); 28654 for (const [hash, css] of runtime.styles) { 28655 injectStyle38(targetDocument, hash, css); 28656 } 28657 return () => { 28658 const count = runtime.documents.get(targetDocument); 28659 if (count === void 0) { 28660 return; 28661 } 28662 if (count <= 1) { 28663 runtime.documents.delete(targetDocument); 28664 return; 28665 } 28666 runtime.documents.set(targetDocument, count - 1); 28667 }; 28668 } 28669 function registerStyle38(hash, css) { 28670 const runtime = getRuntime38(); 28671 runtime.styles.set(hash, css); 28672 for (const targetDocument of runtime.documents.keys()) { 28673 injectStyle38(targetDocument, hash, css); 28674 } 28675 } 28676 if (typeof process === "undefined" || true) { 28677 registerStyle38("0c752c3d08", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer compositions{@supports (-webkit-hyphens:none) and (not (-moz-appearance:none)){.a9211a7e6af24bed__root input[type=date]:not([data-filled]):not(:focus),.a9211a7e6af24bed__root input[type=datetime-local]:not([data-filled]):not(:focus),.a9211a7e6af24bed__root input[type=time]:not([data-filled]):not(:focus){--_gcd-input-color:transparent;--_gcd-input-color-disabled:transparent;color:transparent;&:disabled::-webkit-datetime-edit-text{color:transparent}}}}}"); 28678 } 28679 var style_default32 = { "root": "a9211a7e6af24bed__root" }; 28680 var InputControl = (0, import_element68.forwardRef)( 28681 function InputControl2({ 28682 className, 28683 label, 28684 description, 28685 details, 28686 hideLabelFromVision, 28687 ...restProps 28688 }, ref) { 28689 return /* @__PURE__ */ (0, import_jsx_runtime113.jsxs)(field_exports.Root, { className: clsx_default(style_default32.root, className), children: [ 28690 /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(field_exports.Label, { hideFromVision: hideLabelFromVision, children: label }), 28691 /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(Input3, { ref, ...restProps }), 28692 description && /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(field_exports.Description, { children: description }), 28693 details && /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(field_exports.Details, { children: details }) 28694 ] }); 28695 } 28696 ); 28697 28698 // packages/ui/build-module/form/textarea-control/textarea-control.mjs 28699 var import_element69 = __toESM(require_element(), 1); 28700 var import_jsx_runtime114 = __toESM(require_jsx_runtime(), 1); 28701 var TextareaControl = (0, import_element69.forwardRef)(function TextareaControl2({ 28702 className, 28703 label, 28704 description, 28705 details, 28706 hideLabelFromVision, 28707 ...restProps 28708 }, ref) { 28709 return /* @__PURE__ */ (0, import_jsx_runtime114.jsxs)(field_exports.Root, { className, children: [ 28710 /* @__PURE__ */ (0, import_jsx_runtime114.jsx)(field_exports.Label, { hideFromVision: hideLabelFromVision, children: label }), 28711 /* @__PURE__ */ (0, import_jsx_runtime114.jsx)(Textarea, { ref, ...restProps }), 28712 description && /* @__PURE__ */ (0, import_jsx_runtime114.jsx)(field_exports.Description, { children: description }), 28713 details && /* @__PURE__ */ (0, import_jsx_runtime114.jsx)(field_exports.Details, { children: details }) 28714 ] }); 28715 }); 28716 28717 // packages/ui/build-module/form/with-validation/validated-input-control/validated-input-control.mjs 28718 var import_element70 = __toESM(require_element(), 1); 28719 var import_compose3 = __toESM(require_compose(), 1); 28720 var import_jsx_runtime115 = __toESM(require_jsx_runtime(), 1); 28721 var ValidatedInputControl = (0, import_element70.forwardRef)(function ValidatedInputControl2({ required, markWhenOptional, customValidity, ...restProps }, forwardedRef) { 28722 const validityTargetRef = (0, import_element70.useRef)(null); 28723 const mergedRefs = (0, import_compose3.useMergeRefs)([forwardedRef, validityTargetRef]); 28724 return /* @__PURE__ */ (0, import_jsx_runtime115.jsx)( 28725 ControlWithError, 28726 { 28727 required, 28728 markWhenOptional, 28729 customValidity, 28730 getValidityTarget: () => validityTargetRef.current, 28731 children: /* @__PURE__ */ (0, import_jsx_runtime115.jsx)(InputControl, { ref: mergedRefs, ...restProps }) 28732 } 28733 ); 28734 }); 28735 28736 // packages/ui/build-module/form/with-validation/validated-textarea-control/validated-textarea-control.mjs 28737 var import_element71 = __toESM(require_element(), 1); 28738 var import_compose4 = __toESM(require_compose(), 1); 28739 var import_jsx_runtime116 = __toESM(require_jsx_runtime(), 1); 28740 var ValidatedTextareaControl = (0, import_element71.forwardRef)(function ValidatedTextareaControl2({ required, markWhenOptional, customValidity, ...restProps }, forwardedRef) { 28741 const validityTargetRef = (0, import_element71.useRef)(null); 28742 const mergedRefs = (0, import_compose4.useMergeRefs)([forwardedRef, validityTargetRef]); 28743 return /* @__PURE__ */ (0, import_jsx_runtime116.jsx)( 28744 ControlWithError, 28745 { 28746 required, 28747 markWhenOptional, 28748 customValidity, 28749 getValidityTarget: () => validityTargetRef.current, 28750 children: /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(TextareaControl, { ref: mergedRefs, ...restProps }) 28751 } 28752 ); 28753 }); 28754 28755 // packages/dataviews/build-module/components/dataviews-context/index.mjs 28756 var import_element72 = __toESM(require_element(), 1); 28757 28758 // packages/dataviews/build-module/constants.mjs 28759 var import_i18n16 = __toESM(require_i18n(), 1); 28760 var OPERATOR_IS_ANY = "isAny"; 28761 var OPERATOR_IS_NONE = "isNone"; 28762 var OPERATOR_IS_ALL = "isAll"; 28763 var OPERATOR_IS_NOT_ALL = "isNotAll"; 28764 var OPERATOR_BETWEEN = "between"; 28765 var OPERATOR_IN_THE_PAST = "inThePast"; 28766 var OPERATOR_OVER = "over"; 28767 var OPERATOR_IS = "is"; 28768 var OPERATOR_IS_NOT = "isNot"; 28769 var OPERATOR_LESS_THAN = "lessThan"; 28770 var OPERATOR_GREATER_THAN = "greaterThan"; 28771 var OPERATOR_LESS_THAN_OR_EQUAL = "lessThanOrEqual"; 28772 var OPERATOR_GREATER_THAN_OR_EQUAL = "greaterThanOrEqual"; 28773 var OPERATOR_BEFORE = "before"; 28774 var OPERATOR_AFTER = "after"; 28775 var OPERATOR_BEFORE_INC = "beforeInc"; 28776 var OPERATOR_AFTER_INC = "afterInc"; 28777 var OPERATOR_CONTAINS = "contains"; 28778 var OPERATOR_NOT_CONTAINS = "notContains"; 28779 var OPERATOR_STARTS_WITH = "startsWith"; 28780 var OPERATOR_ON = "on"; 28781 var OPERATOR_NOT_ON = "notOn"; 28782 var SORTING_DIRECTIONS = ["asc", "desc"]; 28783 var sortArrows = { asc: "\u2191", desc: "\u2193" }; 28784 var sortValues = { asc: "ascending", desc: "descending" }; 28785 var sortLabels = { 28786 asc: (0, import_i18n16.__)("Sort ascending"), 28787 desc: (0, import_i18n16.__)("Sort descending") 28788 }; 28789 var sortIcons = { 28790 asc: arrow_up_default, 28791 desc: arrow_down_default 28792 }; 28793 var LAYOUT_TABLE = "table"; 28794 var LAYOUT_GRID = "grid"; 28795 var LAYOUT_LIST = "list"; 28796 var LAYOUT_ACTIVITY = "activity"; 28797 var LAYOUT_PICKER_GRID = "pickerGrid"; 28798 var LAYOUT_PICKER_TABLE = "pickerTable"; 28799 var LAYOUT_PICKER_ACTIVITY = "pickerActivity"; 28800 var MEDIA_ASPECT_RATIOS = [ 28801 "1/1", 28802 "4/3", 28803 "3/4", 28804 "3/2", 28805 "2/3", 28806 "16/9", 28807 "9/16" 28808 ]; 28809 28810 // packages/dataviews/build-module/components/dataviews-context/index.mjs 28811 var DataViewsContext = (0, import_element72.createContext)({ 28812 view: { type: LAYOUT_TABLE }, 28813 onChangeView: () => { 28814 }, 28815 fields: [], 28816 data: [], 28817 paginationInfo: { 28818 totalItems: 0, 28819 totalPages: 0 28820 }, 28821 selection: [], 28822 onChangeSelection: () => { 28823 }, 28824 setOpenedFilter: () => { 28825 }, 28826 openedFilter: null, 28827 getItemId: (item) => item.id, 28828 isItemClickable: () => true, 28829 renderItemLink: void 0, 28830 containerWidth: 0, 28831 containerRef: (0, import_element72.createRef)(), 28832 resizeObserverRef: () => { 28833 }, 28834 defaultLayouts: { list: {}, grid: {}, table: {} }, 28835 filters: [], 28836 isShowingFilter: false, 28837 setIsShowingFilter: () => { 28838 }, 28839 hasInitiallyLoaded: false, 28840 config: { 28841 perPageSizes: [] 28842 }, 28843 intersectionObserver: null 28844 }); 28845 DataViewsContext.displayName = "DataViewsContext"; 28846 var dataviews_context_default = DataViewsContext; 28847 28848 // packages/dataviews/build-module/components/dataviews-layouts/index.mjs 28849 var import_i18n38 = __toESM(require_i18n(), 1); 28850 28851 // packages/dataviews/build-module/components/dataviews-layouts/table/index.mjs 28852 var import_i18n24 = __toESM(require_i18n(), 1); 28853 var import_components7 = __toESM(require_components(), 1); 28854 var import_element81 = __toESM(require_element(), 1); 28855 var import_keycodes2 = __toESM(require_keycodes(), 1); 28856 28857 // packages/dataviews/build-module/components/dataviews-selection-checkbox/index.mjs 28858 var import_components2 = __toESM(require_components(), 1); 28859 var import_i18n17 = __toESM(require_i18n(), 1); 28860 var import_jsx_runtime117 = __toESM(require_jsx_runtime(), 1); 28861 var SELECTION_CHECKBOX_CLASS = "dataviews-selection-checkbox"; 28862 function DataViewsSelectionCheckbox({ 28863 selection, 28864 onChangeSelection, 28865 item, 28866 getItemId, 28867 titleField, 28868 disabled: disabled2, 28869 ...extraProps 28870 }) { 28871 const id = getItemId(item); 28872 const isInSelectionArray = selection.includes(id); 28873 const checked = !disabled2 && isInSelectionArray; 28874 const selectionLabel = titleField?.getValue?.({ item }) || (0, import_i18n17.__)("(no title)"); 28875 return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)( 28876 import_components2.CheckboxControl, 28877 { 28878 className: SELECTION_CHECKBOX_CLASS, 28879 "aria-label": selectionLabel, 28880 "aria-disabled": disabled2, 28881 checked, 28882 onChange: () => { 28883 if (disabled2) { 28884 return; 28885 } 28886 onChangeSelection( 28887 isInSelectionArray ? selection.filter((itemId) => id !== itemId) : [...selection, id] 28888 ); 28889 }, 28890 ...extraProps 28891 } 28892 ); 28893 } 28894 28895 // packages/dataviews/build-module/components/dataviews-item-actions/index.mjs 28896 var import_components3 = __toESM(require_components(), 1); 28897 var import_i18n18 = __toESM(require_i18n(), 1); 28898 var import_element73 = __toESM(require_element(), 1); 28899 var import_data2 = __toESM(require_data(), 1); 28900 var import_compose5 = __toESM(require_compose(), 1); 28901 28902 // node_modules/tslib/tslib.es6.mjs 28903 var __assign = function() { 28904 __assign = Object.assign || function __assign2(t2) { 28905 for (var s2, i2 = 1, n2 = arguments.length; i2 < n2; i2++) { 28906 s2 = arguments[i2]; 28907 for (var p2 in s2) if (Object.prototype.hasOwnProperty.call(s2, p2)) t2[p2] = s2[p2]; 28908 } 28909 return t2; 28910 }; 28911 return __assign.apply(this, arguments); 28912 }; 28913 28914 // node_modules/lower-case/dist.es2015/index.js 28915 function lowerCase(str) { 28916 return str.toLowerCase(); 28917 } 28918 28919 // node_modules/no-case/dist.es2015/index.js 28920 var DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g]; 28921 var DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi; 28922 function noCase(input, options) { 28923 if (options === void 0) { 28924 options = {}; 28925 } 28926 var _a = options.splitRegexp, splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a, _b = options.stripRegexp, stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b, _c = options.transform, transform = _c === void 0 ? lowerCase : _c, _d = options.delimiter, delimiter = _d === void 0 ? " " : _d; 28927 var result = replace(replace(input, splitRegexp, "$1\0$2"), stripRegexp, "\0"); 28928 var start = 0; 28929 var end = result.length; 28930 while (result.charAt(start) === "\0") 28931 start++; 28932 while (result.charAt(end - 1) === "\0") 28933 end--; 28934 return result.slice(start, end).split("\0").map(transform).join(delimiter); 28935 } 28936 function replace(input, re2, value) { 28937 if (re2 instanceof RegExp) 28938 return input.replace(re2, value); 28939 return re2.reduce(function(input2, re3) { 28940 return input2.replace(re3, value); 28941 }, input); 28942 } 28943 28944 // node_modules/dot-case/dist.es2015/index.js 28945 function dotCase(input, options) { 28946 if (options === void 0) { 28947 options = {}; 28948 } 28949 return noCase(input, __assign({ delimiter: "." }, options)); 28950 } 28951 28952 // node_modules/param-case/dist.es2015/index.js 28953 function paramCase(input, options) { 28954 if (options === void 0) { 28955 options = {}; 28956 } 28957 return dotCase(input, __assign({ delimiter: "-" }, options)); 28958 } 28959 28960 // packages/kebab-case/build-module/index.mjs 28961 function kebabCase(str) { 28962 let input = str?.toString?.() ?? ""; 28963 input = input.replace(/['\u2019]/, ""); 28964 return paramCase(input, { 28965 splitRegexp: [ 28966 /(?!(?:1ST|2ND|3RD|[4-9]TH)(?![a-z]))([a-z0-9])([A-Z])/g, 28967 // fooBar => foo-bar, 3Bar => 3-bar 28968 /(?!(?:1st|2nd|3rd|[4-9]th)(?![a-z]))([0-9])([a-z])/g, 28969 // 3bar => 3-bar 28970 /([A-Za-z])([0-9])/g, 28971 // Foo3 => foo-3, foo3 => foo-3 28972 /([A-Z])([A-Z][a-z])/g 28973 // FOOBar => foo-bar 28974 ] 28975 }); 28976 } 28977 28978 // packages/dataviews/build-module/components/dataviews-item-actions/index.mjs 28979 var import_jsx_runtime118 = __toESM(require_jsx_runtime(), 1); 28980 function ButtonTrigger({ 28981 action, 28982 onClick, 28983 items, 28984 variant 28985 }) { 28986 const label = typeof action.label === "string" ? action.label : action.label(items); 28987 return /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( 28988 import_components3.Button, 28989 { 28990 disabled: !!action.disabled, 28991 accessibleWhenDisabled: true, 28992 size: "compact", 28993 variant, 28994 onClick, 28995 children: label 28996 } 28997 ); 28998 } 28999 function MenuItemTrigger({ 29000 action, 29001 onClick, 29002 items 29003 }) { 29004 const label = typeof action.label === "string" ? action.label : action.label(items); 29005 return /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(menu_exports.Item, { disabled: action.disabled, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(menu_exports.ItemLabel, { children: label }) }); 29006 } 29007 function ActionModal({ 29008 action, 29009 items, 29010 closeModal 29011 }) { 29012 const label = typeof action.label === "string" ? action.label : action.label(items); 29013 const modalHeader = typeof action.modalHeader === "function" ? action.modalHeader(items) : action.modalHeader; 29014 return /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( 29015 import_components3.Modal, 29016 { 29017 title: modalHeader || label, 29018 __experimentalHideHeader: !!action.hideModalHeader, 29019 onRequestClose: closeModal, 29020 focusOnMount: action.modalFocusOnMount ?? true, 29021 size: action.modalSize || "medium", 29022 overlayClassName: `dataviews-action-modal dataviews-action-modal__$kebabCase( 29023 action.id 29024 )}`, 29025 children: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(action.RenderModal, { items, closeModal }) 29026 } 29027 ); 29028 } 29029 function ActionsMenuGroup({ 29030 actions, 29031 item, 29032 registry, 29033 setActiveModalAction 29034 }) { 29035 const { primaryActions, regularActions } = (0, import_element73.useMemo)(() => { 29036 return actions.reduce( 29037 (acc, action) => { 29038 (action.isPrimary ? acc.primaryActions : acc.regularActions).push(action); 29039 return acc; 29040 }, 29041 { 29042 primaryActions: [], 29043 regularActions: [] 29044 } 29045 ); 29046 }, [actions]); 29047 const renderActionGroup = (actionList) => actionList.map((action) => /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( 29048 MenuItemTrigger, 29049 { 29050 action, 29051 onClick: () => { 29052 if ("RenderModal" in action) { 29053 setActiveModalAction(action); 29054 return; 29055 } 29056 action.callback([item], { registry }); 29057 }, 29058 items: [item] 29059 }, 29060 action.id 29061 )); 29062 return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(menu_exports.Group, { children: [ 29063 renderActionGroup(primaryActions), 29064 renderActionGroup(regularActions) 29065 ] }); 29066 } 29067 function ItemActions({ 29068 item, 29069 actions, 29070 isCompact 29071 }) { 29072 const registry = (0, import_data2.useRegistry)(); 29073 const { primaryActions, eligibleActions } = (0, import_element73.useMemo)(() => { 29074 const _eligibleActions = actions.filter( 29075 (action) => !action.isEligible || action.isEligible(item) 29076 ); 29077 const _primaryActions = _eligibleActions.filter( 29078 (action) => action.isPrimary 29079 ); 29080 return { 29081 primaryActions: _primaryActions, 29082 eligibleActions: _eligibleActions 29083 }; 29084 }, [actions, item]); 29085 const isMobileViewport = (0, import_compose5.useViewportMatch)("medium", "<"); 29086 if (isCompact) { 29087 return /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( 29088 CompactItemActions, 29089 { 29090 item, 29091 actions: eligibleActions, 29092 isSmall: true, 29093 registry 29094 } 29095 ); 29096 } 29097 return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)( 29098 Stack, 29099 { 29100 direction: "row", 29101 justify: "flex-end", 29102 className: "dataviews-item-actions", 29103 style: { 29104 flexShrink: 0, 29105 width: "auto" 29106 }, 29107 children: [ 29108 /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( 29109 PrimaryActions, 29110 { 29111 item, 29112 actions: primaryActions, 29113 registry 29114 } 29115 ), 29116 (primaryActions.length < eligibleActions.length || // Since we hide primary actions on mobile, we need to show the menu 29117 // there if there are any actions at all. 29118 isMobileViewport) && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( 29119 CompactItemActions, 29120 { 29121 item, 29122 actions: eligibleActions, 29123 registry 29124 } 29125 ) 29126 ] 29127 } 29128 ); 29129 } 29130 function CompactItemActions({ 29131 item, 29132 actions, 29133 isSmall, 29134 registry 29135 }) { 29136 const [activeModalAction, setActiveModalAction] = (0, import_element73.useState)( 29137 null 29138 ); 29139 return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(import_jsx_runtime118.Fragment, { children: [ 29140 /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(menu_exports.Root, { disabled: !actions.length, children: [ 29141 /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( 29142 menu_exports.Trigger, 29143 { 29144 render: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( 29145 import_components3.Button, 29146 { 29147 size: isSmall ? "small" : "compact", 29148 icon: more_vertical_default, 29149 label: (0, import_i18n18.__)("Actions"), 29150 accessibleWhenDisabled: true, 29151 disabled: !actions.length, 29152 className: "dataviews-all-actions-button" 29153 } 29154 ) 29155 } 29156 ), 29157 /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(menu_exports.Popup, { positioner: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(menu_exports.Positioner, { align: "end" }), children: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( 29158 ActionsMenuGroup, 29159 { 29160 actions, 29161 item, 29162 registry, 29163 setActiveModalAction 29164 } 29165 ) }) 29166 ] }), 29167 !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( 29168 ActionModal, 29169 { 29170 action: activeModalAction, 29171 items: [item], 29172 closeModal: () => setActiveModalAction(null) 29173 } 29174 ) 29175 ] }); 29176 } 29177 function PrimaryActions({ 29178 item, 29179 actions, 29180 registry, 29181 buttonVariant 29182 }) { 29183 const [activeModalAction, setActiveModalAction] = (0, import_element73.useState)(null); 29184 const isMobileViewport = (0, import_compose5.useViewportMatch)("medium", "<"); 29185 if (isMobileViewport) { 29186 return null; 29187 } 29188 if (!Array.isArray(actions) || actions.length === 0) { 29189 return null; 29190 } 29191 return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(import_jsx_runtime118.Fragment, { children: [ 29192 actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( 29193 ButtonTrigger, 29194 { 29195 action, 29196 onClick: () => { 29197 if ("RenderModal" in action) { 29198 setActiveModalAction(action); 29199 return; 29200 } 29201 action.callback([item], { registry }); 29202 }, 29203 items: [item], 29204 variant: buttonVariant 29205 }, 29206 action.id 29207 )), 29208 !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)( 29209 ActionModal, 29210 { 29211 action: activeModalAction, 29212 items: [item], 29213 closeModal: () => setActiveModalAction(null) 29214 } 29215 ) 29216 ] }); 29217 } 29218 29219 // packages/dataviews/build-module/components/dataviews-bulk-actions/index.mjs 29220 var import_components4 = __toESM(require_components(), 1); 29221 var import_i18n20 = __toESM(require_i18n(), 1); 29222 var import_element74 = __toESM(require_element(), 1); 29223 var import_data3 = __toESM(require_data(), 1); 29224 var import_compose6 = __toESM(require_compose(), 1); 29225 29226 // packages/dataviews/build-module/utils/get-footer-message.mjs 29227 var import_i18n19 = __toESM(require_i18n(), 1); 29228 function getFooterMessage(selectionCount, itemsCount, totalItems, onlyTotalCount = false) { 29229 if (selectionCount > 0) { 29230 return (0, import_i18n19.sprintf)( 29231 /* translators: %d: number of items. */ 29232 (0, import_i18n19._n)("%d Item selected", "%d Items selected", selectionCount), 29233 selectionCount 29234 ); 29235 } 29236 if (onlyTotalCount || totalItems <= itemsCount) { 29237 return (0, import_i18n19.sprintf)( 29238 /* translators: %d: number of items. */ 29239 (0, import_i18n19._n)("%d Item", "%d Items", totalItems), 29240 totalItems 29241 ); 29242 } 29243 return (0, import_i18n19.sprintf)( 29244 /* translators: %1$d: number of items. %2$d: total number of items. */ 29245 (0, import_i18n19._n)("%1$d of %2$d Item", "%1$d of %2$d Items", totalItems), 29246 itemsCount, 29247 totalItems 29248 ); 29249 } 29250 29251 // packages/dataviews/build-module/components/dataviews-bulk-actions/index.mjs 29252 var import_jsx_runtime119 = __toESM(require_jsx_runtime(), 1); 29253 function hasAPossibleBulkAction(actions, item) { 29254 return actions.some( 29255 (action) => action.supportsBulk && (!action.isEligible || action.isEligible(item)) 29256 ); 29257 } 29258 function useHasAPossibleBulkAction(actions, item) { 29259 return (0, import_element74.useMemo)( 29260 () => hasAPossibleBulkAction(actions, item), 29261 [actions, item] 29262 ); 29263 } 29264 function useSomeItemHasAPossibleBulkAction(actions, data) { 29265 return (0, import_element74.useMemo)( 29266 () => data.some((item) => hasAPossibleBulkAction(actions, item)), 29267 [actions, data] 29268 ); 29269 } 29270 function BulkSelectionCheckbox({ 29271 selection, 29272 onChangeSelection, 29273 data, 29274 actions, 29275 getItemId, 29276 disableSelectAll = false 29277 }) { 29278 const selectableItems = (0, import_element74.useMemo)(() => { 29279 return data.filter((item) => { 29280 return actions.some( 29281 (action) => action.supportsBulk && (!action.isEligible || action.isEligible(item)) 29282 ); 29283 }); 29284 }, [data, actions]); 29285 const selectedItems = data.filter( 29286 (item) => selection.includes(getItemId(item)) && selectableItems.includes(item) 29287 ); 29288 const hasSelection = selection.length > 0; 29289 const areAllSelected = selectedItems.length === selectableItems.length; 29290 if (disableSelectAll) { 29291 return /* @__PURE__ */ (0, import_jsx_runtime119.jsx)( 29292 import_components4.CheckboxControl, 29293 { 29294 className: "dataviews-view-table-selection-checkbox", 29295 checked: hasSelection, 29296 disabled: !hasSelection, 29297 onChange: () => { 29298 onChangeSelection([]); 29299 }, 29300 "aria-label": (0, import_i18n20.__)("Deselect all") 29301 } 29302 ); 29303 } 29304 return /* @__PURE__ */ (0, import_jsx_runtime119.jsx)( 29305 import_components4.CheckboxControl, 29306 { 29307 className: "dataviews-view-table-selection-checkbox", 29308 checked: areAllSelected, 29309 indeterminate: !areAllSelected && !!selectedItems.length, 29310 onChange: () => { 29311 if (areAllSelected) { 29312 onChangeSelection([]); 29313 } else { 29314 onChangeSelection( 29315 selectableItems.map((item) => getItemId(item)) 29316 ); 29317 } 29318 }, 29319 "aria-label": areAllSelected ? (0, import_i18n20.__)("Deselect all") : (0, import_i18n20.__)("Select all") 29320 } 29321 ); 29322 } 29323 29324 // packages/dataviews/build-module/components/dataviews-layouts/table/column-header-menu.mjs 29325 var import_i18n21 = __toESM(require_i18n(), 1); 29326 var import_components5 = __toESM(require_components(), 1); 29327 var import_element75 = __toESM(require_element(), 1); 29328 29329 // packages/dataviews/build-module/utils/get-hideable-fields.mjs 29330 function getHideableFields(view, fields) { 29331 const togglableFields = [ 29332 view?.titleField, 29333 view?.mediaField, 29334 view?.descriptionField 29335 ].filter(Boolean); 29336 return fields.filter( 29337 (f2) => !togglableFields.includes(f2.id) && f2.type !== "media" && f2.enableHiding !== false 29338 ); 29339 } 29340 29341 // packages/dataviews/build-module/components/dataviews-layouts/utils/get-table-columns.mjs 29342 function getTableColumns(view, fields) { 29343 return (view.fields ?? []).filter( 29344 (fieldId) => fields.some((field) => field.id === fieldId) 29345 ); 29346 } 29347 29348 // packages/dataviews/build-module/components/dataviews-layouts/table/column-header-menu.mjs 29349 var import_jsx_runtime120 = __toESM(require_jsx_runtime(), 1); 29350 function WithMenuSeparators({ children }) { 29351 return import_element75.Children.toArray(children).filter(Boolean).map((child, i2) => /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(import_element75.Fragment, { children: [ 29352 i2 > 0 && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(menu_exports.Separator, {}), 29353 child 29354 ] }, i2)); 29355 } 29356 var _HeaderMenu = (0, import_element75.forwardRef)(function HeaderMenu({ 29357 fieldId, 29358 view, 29359 fields, 29360 onChangeView, 29361 onHide, 29362 setOpenedFilter, 29363 canMove = true, 29364 canInsertLeft = true, 29365 canInsertRight = true 29366 }, ref) { 29367 const isSorted = view.sort?.field === fieldId; 29368 let isHidable = false; 29369 let isSortable = false; 29370 let canAddFilter = false; 29371 let operators = []; 29372 const field = fields.find((f2) => f2.id === fieldId); 29373 const { setIsShowingFilter } = (0, import_element75.useContext)(dataviews_context_default); 29374 if (!field) { 29375 return null; 29376 } 29377 isHidable = field.enableHiding !== false; 29378 isSortable = field.enableSorting !== false; 29379 const header = field.header; 29380 operators = !!field.filterBy && field.filterBy?.operators || []; 29381 canAddFilter = !view.filters?.some((_filter) => fieldId === _filter.field) && !!(field.hasElements || field.Edit) && field.filterBy !== false && !field.filterBy?.isPrimary; 29382 if (!isSortable && !canMove && !isHidable && !canAddFilter) { 29383 return header; 29384 } 29385 const visibleFieldIds = getTableColumns(view, fields); 29386 const index2 = visibleFieldIds.indexOf(fieldId); 29387 const hiddenFields = getHideableFields(view, fields).filter( 29388 (f2) => !visibleFieldIds.includes(f2.id) 29389 ); 29390 const canInsert = (canInsertLeft || canInsertRight) && !!hiddenFields.length; 29391 const isRtl = (0, import_i18n21.isRTL)(); 29392 return /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(menu_exports.Root, { children: [ 29393 /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)( 29394 menu_exports.Trigger, 29395 { 29396 render: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)( 29397 import_components5.Button, 29398 { 29399 size: "compact", 29400 className: "dataviews-view-table-header-button", 29401 ref, 29402 variant: "tertiary" 29403 } 29404 ), 29405 children: [ 29406 header, 29407 view.sort && isSorted && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("span", { "aria-hidden": "true", children: sortArrows[view.sort.direction] }) 29408 ] 29409 } 29410 ), 29411 /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(menu_exports.Popup, { style: { minWidth: "240px" }, children: /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(WithMenuSeparators, { children: [ 29412 isSortable && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)( 29413 menu_exports.RadioGroup, 29414 { 29415 value: isSorted && view.sort ? view.sort.direction : null, 29416 onValueChange: (direction) => { 29417 onChangeView({ 29418 ...view, 29419 sort: { 29420 field: fieldId, 29421 direction 29422 }, 29423 showLevels: false 29424 }); 29425 }, 29426 children: SORTING_DIRECTIONS.map( 29427 (direction) => /* @__PURE__ */ (0, import_jsx_runtime120.jsx)( 29428 menu_exports.RadioItem, 29429 { 29430 value: direction, 29431 children: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(menu_exports.ItemLabel, { children: sortLabels[direction] }) 29432 }, 29433 direction 29434 ) 29435 ) 29436 } 29437 ), 29438 canAddFilter && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(menu_exports.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)( 29439 menu_exports.Item, 29440 { 29441 prefix: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(menu_exports.PrefixIcon, { icon: funnel_default }), 29442 onClick: () => { 29443 setOpenedFilter(fieldId); 29444 setIsShowingFilter(true); 29445 onChangeView({ 29446 ...view, 29447 page: 1, 29448 filters: [ 29449 ...view.filters || [], 29450 { 29451 field: fieldId, 29452 value: void 0, 29453 operator: operators[0] 29454 } 29455 ] 29456 }); 29457 }, 29458 children: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(menu_exports.ItemLabel, { children: (0, import_i18n21.__)("Add filter") }) 29459 } 29460 ) }), 29461 (canMove || isHidable || canInsert) && field && /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(menu_exports.Group, { children: [ 29462 canMove && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)( 29463 menu_exports.Item, 29464 { 29465 prefix: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(menu_exports.PrefixIcon, { icon: arrow_left_default }), 29466 disabled: isRtl ? index2 >= visibleFieldIds.length - 1 : index2 < 1, 29467 onClick: () => { 29468 const targetIndex = isRtl ? index2 + 1 : index2 - 1; 29469 const newFields = [ 29470 ...visibleFieldIds 29471 ]; 29472 newFields.splice(index2, 1); 29473 newFields.splice( 29474 targetIndex, 29475 0, 29476 fieldId 29477 ); 29478 onChangeView({ 29479 ...view, 29480 fields: newFields 29481 }); 29482 }, 29483 children: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(menu_exports.ItemLabel, { children: (0, import_i18n21.__)("Move left") }) 29484 } 29485 ), 29486 canMove && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)( 29487 menu_exports.Item, 29488 { 29489 prefix: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(menu_exports.PrefixIcon, { icon: arrow_right_default }), 29490 disabled: isRtl ? index2 < 1 : index2 >= visibleFieldIds.length - 1, 29491 onClick: () => { 29492 const targetIndex = isRtl ? index2 - 1 : index2 + 1; 29493 const newFields = [ 29494 ...visibleFieldIds 29495 ]; 29496 newFields.splice(index2, 1); 29497 newFields.splice( 29498 targetIndex, 29499 0, 29500 fieldId 29501 ); 29502 onChangeView({ 29503 ...view, 29504 fields: newFields 29505 }); 29506 }, 29507 children: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(menu_exports.ItemLabel, { children: (0, import_i18n21.__)("Move right") }) 29508 } 29509 ), 29510 canInsertLeft && !!hiddenFields.length && /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(menu_exports.SubmenuRoot, { children: [ 29511 /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(menu_exports.SubmenuTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(menu_exports.ItemLabel, { children: (0, import_i18n21.__)("Insert left") }) }), 29512 /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(menu_exports.Popup, { children: hiddenFields.map((hiddenField) => { 29513 const insertIndex = isRtl ? index2 + 1 : index2; 29514 return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)( 29515 menu_exports.Item, 29516 { 29517 onClick: () => { 29518 onChangeView({ 29519 ...view, 29520 fields: [ 29521 ...visibleFieldIds.slice( 29522 0, 29523 insertIndex 29524 ), 29525 hiddenField.id, 29526 ...visibleFieldIds.slice( 29527 insertIndex 29528 ) 29529 ] 29530 }); 29531 }, 29532 children: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(menu_exports.ItemLabel, { children: hiddenField.label }) 29533 }, 29534 hiddenField.id 29535 ); 29536 }) }) 29537 ] }), 29538 canInsertRight && !!hiddenFields.length && /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(menu_exports.SubmenuRoot, { children: [ 29539 /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(menu_exports.SubmenuTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(menu_exports.ItemLabel, { children: (0, import_i18n21.__)("Insert right") }) }), 29540 /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(menu_exports.Popup, { children: hiddenFields.map((hiddenField) => { 29541 const insertIndex = isRtl ? index2 : index2 + 1; 29542 return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)( 29543 menu_exports.Item, 29544 { 29545 onClick: () => { 29546 onChangeView({ 29547 ...view, 29548 fields: [ 29549 ...visibleFieldIds.slice( 29550 0, 29551 insertIndex 29552 ), 29553 hiddenField.id, 29554 ...visibleFieldIds.slice( 29555 insertIndex 29556 ) 29557 ] 29558 }); 29559 }, 29560 children: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(menu_exports.ItemLabel, { children: hiddenField.label }) 29561 }, 29562 hiddenField.id 29563 ); 29564 }) }) 29565 ] }), 29566 isHidable && field && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)( 29567 menu_exports.Item, 29568 { 29569 prefix: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(menu_exports.PrefixIcon, { icon: unseen_default }), 29570 onClick: () => { 29571 onHide(field); 29572 onChangeView({ 29573 ...view, 29574 fields: visibleFieldIds.filter( 29575 (id) => id !== fieldId 29576 ) 29577 }); 29578 }, 29579 children: /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(menu_exports.ItemLabel, { children: (0, import_i18n21.__)("Hide column") }) 29580 } 29581 ) 29582 ] }) 29583 ] }) }) 29584 ] }); 29585 }); 29586 var ColumnHeaderMenu = _HeaderMenu; 29587 var column_header_menu_default = ColumnHeaderMenu; 29588 29589 // packages/dataviews/build-module/components/dataviews-layouts/utils/item-click-wrapper.mjs 29590 var import_element76 = __toESM(require_element(), 1); 29591 var import_jsx_runtime121 = __toESM(require_jsx_runtime(), 1); 29592 function getClickableItemProps({ 29593 item, 29594 isItemClickable: isItemClickable2, 29595 onClickItem, 29596 className 29597 }) { 29598 if (!isItemClickable2(item) || !onClickItem) { 29599 return { className }; 29600 } 29601 return { 29602 className: className ? `$className} $className}--clickable` : void 0, 29603 role: "button", 29604 tabIndex: 0, 29605 onClick: (event) => { 29606 event.stopPropagation(); 29607 onClickItem(item); 29608 }, 29609 onKeyDown: (event) => { 29610 if (event.key === "Enter" || event.key === "" || event.key === " ") { 29611 event.stopPropagation(); 29612 onClickItem(item); 29613 } 29614 } 29615 }; 29616 } 29617 function ItemClickWrapper({ 29618 item, 29619 isItemClickable: isItemClickable2, 29620 onClickItem, 29621 renderItemLink, 29622 className, 29623 children, 29624 ...extraProps 29625 }) { 29626 if (!isItemClickable2(item)) { 29627 return /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("div", { className, ...extraProps, children }); 29628 } 29629 if (renderItemLink) { 29630 const renderedElement = renderItemLink({ 29631 item, 29632 className: `$className} $className}--clickable`, 29633 ...extraProps, 29634 children 29635 }); 29636 return (0, import_element76.cloneElement)(renderedElement, { 29637 onClick: (event) => { 29638 event.stopPropagation(); 29639 if (renderedElement.props.onClick) { 29640 renderedElement.props.onClick(event); 29641 } 29642 }, 29643 onKeyDown: (event) => { 29644 if (event.key === "Enter" || event.key === "" || event.key === " ") { 29645 event.stopPropagation(); 29646 if (renderedElement.props.onKeyDown) { 29647 renderedElement.props.onKeyDown(event); 29648 } 29649 } 29650 } 29651 }); 29652 } 29653 const clickProps = getClickableItemProps({ 29654 item, 29655 isItemClickable: isItemClickable2, 29656 onClickItem, 29657 className 29658 }); 29659 return /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("div", { ...clickProps, ...extraProps, children }); 29660 } 29661 29662 // packages/dataviews/build-module/components/dataviews-layouts/table/column-primary.mjs 29663 var import_jsx_runtime122 = __toESM(require_jsx_runtime(), 1); 29664 function ColumnPrimary({ 29665 item, 29666 level, 29667 titleField, 29668 mediaField, 29669 mediaAspectRatio, 29670 descriptionField: descriptionField2, 29671 onClickItem, 29672 renderItemLink, 29673 isItemClickable: isItemClickable2 29674 }) { 29675 let mediaSizes = "32px"; 29676 if (mediaAspectRatio) { 29677 const [ratioWidth, ratioHeight] = mediaAspectRatio.split("/").map(Number); 29678 mediaSizes = `$Math.min( 29679 60, 29680 Math.round(32 * ratioWidth / ratioHeight) 29681 )}px`; 29682 } 29683 return /* @__PURE__ */ (0, import_jsx_runtime122.jsxs)(Stack, { direction: "row", gap: "md", align: "flex-start", justify: "flex-start", children: [ 29684 mediaField && /* @__PURE__ */ (0, import_jsx_runtime122.jsx)( 29685 ItemClickWrapper, 29686 { 29687 item, 29688 isItemClickable: isItemClickable2, 29689 onClickItem, 29690 renderItemLink, 29691 className: "dataviews-view-table__cell-content-wrapper dataviews-column-primary__media", 29692 "aria-label": isItemClickable2(item) && (!!onClickItem || !!renderItemLink) && !!titleField ? titleField.getValue?.({ item }) : void 0, 29693 children: /* @__PURE__ */ (0, import_jsx_runtime122.jsx)( 29694 mediaField.render, 29695 { 29696 item, 29697 field: mediaField, 29698 config: { sizes: mediaSizes } 29699 } 29700 ) 29701 } 29702 ), 29703 /* @__PURE__ */ (0, import_jsx_runtime122.jsxs)( 29704 Stack, 29705 { 29706 direction: "column", 29707 align: "flex-start", 29708 className: "dataviews-view-table__primary-column-content", 29709 children: [ 29710 titleField && /* @__PURE__ */ (0, import_jsx_runtime122.jsxs)( 29711 ItemClickWrapper, 29712 { 29713 item, 29714 isItemClickable: isItemClickable2, 29715 onClickItem, 29716 renderItemLink, 29717 className: "dataviews-view-table__cell-content-wrapper dataviews-title-field", 29718 children: [ 29719 level !== void 0 && level > 0 && /* @__PURE__ */ (0, import_jsx_runtime122.jsxs)("span", { className: "dataviews-view-table__level", children: [ 29720 Array(level).fill("\u2014").join(" "), 29721 "\xA0" 29722 ] }), 29723 /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(titleField.render, { item, field: titleField }) 29724 ] 29725 } 29726 ), 29727 descriptionField2 && /* @__PURE__ */ (0, import_jsx_runtime122.jsx)( 29728 descriptionField2.render, 29729 { 29730 item, 29731 field: descriptionField2 29732 } 29733 ) 29734 ] 29735 } 29736 ) 29737 ] }); 29738 } 29739 var column_primary_default = ColumnPrimary; 29740 29741 // packages/dataviews/build-module/components/dataviews-layouts/table/use-scroll-state.mjs 29742 var import_element77 = __toESM(require_element(), 1); 29743 var import_i18n22 = __toESM(require_i18n(), 1); 29744 var isScrolledToEnd = (element) => { 29745 if ((0, import_i18n22.isRTL)()) { 29746 const scrollLeft = Math.abs(element.scrollLeft); 29747 return scrollLeft <= 1; 29748 } 29749 return element.scrollLeft + element.clientWidth >= element.scrollWidth - 1; 29750 }; 29751 function useScrollState({ 29752 scrollContainerRef, 29753 enabledHorizontal = false 29754 }) { 29755 const [isHorizontalScrollEnd, setIsHorizontalScrollEnd] = (0, import_element77.useState)(false); 29756 const [isVerticallyScrolled, setIsVerticallyScrolled] = (0, import_element77.useState)(false); 29757 const handleScroll = (0, import_element77.useCallback)(() => { 29758 const scrollContainer = scrollContainerRef.current; 29759 if (!scrollContainer) { 29760 return; 29761 } 29762 if (enabledHorizontal) { 29763 setIsHorizontalScrollEnd(isScrolledToEnd(scrollContainer)); 29764 } 29765 setIsVerticallyScrolled(scrollContainer.scrollTop > 0); 29766 }, [scrollContainerRef, enabledHorizontal]); 29767 (0, import_element77.useEffect)(() => { 29768 if (typeof window === "undefined" || !scrollContainerRef.current) { 29769 return () => { 29770 }; 29771 } 29772 const scrollContainer = scrollContainerRef.current; 29773 handleScroll(); 29774 scrollContainer.addEventListener("scroll", handleScroll); 29775 window.addEventListener("resize", handleScroll); 29776 return () => { 29777 scrollContainer.removeEventListener("scroll", handleScroll); 29778 window.removeEventListener("resize", handleScroll); 29779 }; 29780 }, [scrollContainerRef, enabledHorizontal, handleScroll]); 29781 return { isHorizontalScrollEnd, isVerticallyScrolled }; 29782 } 29783 29784 // packages/dataviews/build-module/components/dataviews-layouts/utils/get-data-by-group.mjs 29785 function getDataByGroup(data, groupByField) { 29786 return data.reduce((groups, item) => { 29787 const groupName = groupByField.getValue({ item }); 29788 if (!groups.has(groupName)) { 29789 groups.set(groupName, []); 29790 } 29791 groups.get(groupName)?.push(item); 29792 return groups; 29793 }, /* @__PURE__ */ new Map()); 29794 } 29795 29796 // packages/dataviews/build-module/components/dataviews-layouts/utils/use-selection-props.mjs 29797 var import_element78 = __toESM(require_element(), 1); 29798 var import_keycodes = __toESM(require_keycodes(), 1); 29799 function getRange(orderedIds, fromIndex, toIndex) { 29800 return orderedIds.slice( 29801 Math.min(fromIndex, toIndex), 29802 Math.max(fromIndex, toIndex) + 1 29803 ); 29804 } 29805 function getRangeSelection({ 29806 anchorId, 29807 targetId, 29808 lastTargetId, 29809 orderedIds, 29810 selection 29811 }) { 29812 const targetIndex = orderedIds.indexOf(targetId); 29813 if (targetIndex === -1) { 29814 return selection; 29815 } 29816 const anchorIndex = anchorId === null ? -1 : orderedIds.indexOf(anchorId); 29817 const hasAnchor = anchorIndex !== -1; 29818 const rangeStart = hasAnchor ? anchorIndex : targetIndex; 29819 const lastTargetIndex = hasAnchor && lastTargetId !== null ? orderedIds.indexOf(lastTargetId) : -1; 29820 const lastRange = lastTargetIndex === -1 ? [] : getRange(orderedIds, rangeStart, lastTargetIndex); 29821 const base = selection.filter((id) => !lastRange.includes(id)); 29822 return [ 29823 .../* @__PURE__ */ new Set([ 29824 ...base, 29825 ...getRange(orderedIds, rangeStart, targetIndex) 29826 ]) 29827 ]; 29828 } 29829 function getClosestSelectedId({ 29830 targetId, 29831 orderedIds, 29832 selection 29833 }) { 29834 const targetIndex = orderedIds.indexOf(targetId); 29835 if (targetIndex === -1) { 29836 return null; 29837 } 29838 const selectedIds = new Set(selection); 29839 let closestId = null; 29840 let closestDistance = Infinity; 29841 orderedIds.forEach((id, index2) => { 29842 if (!selectedIds.has(id)) { 29843 return; 29844 } 29845 const distance = Math.abs(index2 - targetIndex); 29846 if (distance < closestDistance) { 29847 closestDistance = distance; 29848 closestId = id; 29849 } 29850 }); 29851 return closestId; 29852 } 29853 function useSelectionProps({ 29854 data, 29855 getItemId, 29856 isItemSelectable, 29857 selection, 29858 onChangeSelection, 29859 selectionMode, 29860 shouldSelectOnClick 29861 }) { 29862 const isMultiselect = selectionMode === "multi"; 29863 const allowDeselect = selectionMode !== "single-required"; 29864 const gestureRef = (0, import_element78.useRef)(null); 29865 const anchorTo = (id) => { 29866 gestureRef.current = { anchorId: id, lastTargetId: null }; 29867 }; 29868 const isTouchDeviceRef = (0, import_element78.useRef)(false); 29869 (0, import_element78.useEffect)(() => { 29870 const markTouchDevice = () => { 29871 isTouchDeviceRef.current = true; 29872 }; 29873 document.addEventListener("touchstart", markTouchDevice, { 29874 once: true 29875 }); 29876 return () => document.removeEventListener("touchstart", markTouchDevice); 29877 }, []); 29878 const selectableIds = data.filter(isItemSelectable).map(getItemId); 29879 const selectableIdSet = new Set(selectableIds); 29880 const hasSelectableItems = selectableIds.length > 0; 29881 const hasRangeGesture = hasSelectableItems && isMultiselect; 29882 const getSelectionProps = (id) => { 29883 const isSelectable = selectableIdSet.has(id); 29884 return { 29885 // When a plain click selects, that click is also what anchors the 29886 // range a following Shift+Click extends from. Modifier clicks never 29887 // reach here: `onClickCapture` stops them. 29888 ...shouldSelectOnClick && { 29889 onClick: () => { 29890 if (allowDeselect && selection.includes(id)) { 29891 onChangeSelection( 29892 selection.filter((itemId) => id !== itemId) 29893 ); 29894 } else { 29895 onChangeSelection( 29896 isMultiselect ? [...selection, id] : [id] 29897 ); 29898 } 29899 anchorTo(id); 29900 } 29901 }, 29902 onMouseDown: (event) => { 29903 if (event.button === 0 && event.shiftKey && hasRangeGesture) { 29904 event.preventDefault(); 29905 } 29906 }, 29907 onClickCapture: (event) => { 29908 if (!hasRangeGesture) { 29909 return; 29910 } 29911 const isModifierKeyPressed = (0, import_keycodes.isAppleOS)() ? event.metaKey : event.ctrlKey; 29912 const isSelectionCheckboxClick = event.target instanceof Element && !!event.target.closest(`.$SELECTION_CHECKBOX_CLASS}`); 29913 if (!isModifierKeyPressed && !event.shiftKey) { 29914 if (isSelectable && isSelectionCheckboxClick) { 29915 anchorTo(id); 29916 } 29917 return; 29918 } 29919 if (isTouchDeviceRef.current || document.getSelection()?.type === "Range") { 29920 return; 29921 } 29922 event.stopPropagation(); 29923 if (!isSelectionCheckboxClick) { 29924 event.preventDefault(); 29925 } 29926 if (!isSelectable) { 29927 return; 29928 } 29929 if (event.shiftKey) { 29930 let gesture = gestureRef.current; 29931 if (!gesture || !selectableIdSet.has(gesture.anchorId)) { 29932 gesture = { 29933 anchorId: getClosestSelectedId({ 29934 targetId: id, 29935 orderedIds: selectableIds, 29936 selection 29937 }) ?? id, 29938 lastTargetId: null 29939 }; 29940 } 29941 onChangeSelection( 29942 getRangeSelection({ 29943 anchorId: gesture.anchorId, 29944 targetId: id, 29945 lastTargetId: gesture.lastTargetId, 29946 orderedIds: selectableIds, 29947 selection 29948 }) 29949 ); 29950 gestureRef.current = { 29951 anchorId: gesture.anchorId, 29952 lastTargetId: id 29953 }; 29954 } else { 29955 onChangeSelection( 29956 selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id] 29957 ); 29958 anchorTo(id); 29959 } 29960 } 29961 }; 29962 }; 29963 return { getSelectionProps }; 29964 } 29965 29966 // packages/dataviews/build-module/components/dataviews-view-config/properties-section.mjs 29967 var import_components6 = __toESM(require_components(), 1); 29968 var import_i18n23 = __toESM(require_i18n(), 1); 29969 var import_element79 = __toESM(require_element(), 1); 29970 var import_jsx_runtime123 = __toESM(require_jsx_runtime(), 1); 29971 function FieldItem3({ 29972 field, 29973 isVisible: isVisible2, 29974 onToggleVisibility 29975 }) { 29976 return /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(import_components6.__experimentalItem, { onClick: field.enableHiding ? onToggleVisibility : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime123.jsxs)(Stack, { direction: "row", gap: "sm", justify: "flex-start", align: "center", children: [ 29977 /* @__PURE__ */ (0, import_jsx_runtime123.jsx)("div", { style: { height: 24, width: 24 }, children: isVisible2 && /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(import_components6.Icon, { icon: check_default }) }), 29978 /* @__PURE__ */ (0, import_jsx_runtime123.jsx)("span", { className: "dataviews-view-config__label", children: field.label }) 29979 ] }) }); 29980 } 29981 function isDefined(item) { 29982 return !!item; 29983 } 29984 function PropertiesSection({ 29985 showLabel = true 29986 }) { 29987 const { view, fields, onChangeView } = (0, import_element79.useContext)(dataviews_context_default); 29988 const regularFields = getHideableFields(view, fields); 29989 if (!regularFields?.length) { 29990 return null; 29991 } 29992 const titleField = fields.find((f2) => f2.id === view.titleField); 29993 const previewField = fields.find((f2) => f2.id === view.mediaField); 29994 const descriptionField2 = fields.find( 29995 (f2) => f2.id === view.descriptionField 29996 ); 29997 const lockedFields = [ 29998 { 29999 field: titleField, 30000 isVisibleFlag: "showTitle" 30001 }, 30002 { 30003 field: previewField, 30004 isVisibleFlag: "showMedia" 30005 }, 30006 { 30007 field: descriptionField2, 30008 isVisibleFlag: "showDescription" 30009 } 30010 ].filter(({ field }) => isDefined(field)); 30011 const visibleFieldIds = view.fields ?? []; 30012 const visibleRegularFieldsCount = regularFields.filter( 30013 (f2) => visibleFieldIds.includes(f2.id) 30014 ).length; 30015 const visibleLockedFields = lockedFields.filter( 30016 ({ isVisibleFlag }) => view[isVisibleFlag] ?? true 30017 ); 30018 const totalVisibleFields = visibleLockedFields.length + visibleRegularFieldsCount; 30019 const isSingleVisibleLockedField = totalVisibleFields === 1 && visibleLockedFields.length === 1; 30020 return /* @__PURE__ */ (0, import_jsx_runtime123.jsxs)(Stack, { direction: "column", className: "dataviews-field-control", children: [ 30021 showLabel && /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(import_components6.BaseControl.VisualLabel, { children: (0, import_i18n23.__)("Properties") }), 30022 /* @__PURE__ */ (0, import_jsx_runtime123.jsx)( 30023 Stack, 30024 { 30025 direction: "column", 30026 className: "dataviews-view-config__properties", 30027 children: /* @__PURE__ */ (0, import_jsx_runtime123.jsxs)(import_components6.__experimentalItemGroup, { isBordered: true, isSeparated: true, size: "medium", children: [ 30028 lockedFields.map(({ field, isVisibleFlag }) => { 30029 const isVisible2 = view[isVisibleFlag] ?? true; 30030 const fieldToRender = isSingleVisibleLockedField && isVisible2 ? { ...field, enableHiding: false } : field; 30031 return /* @__PURE__ */ (0, import_jsx_runtime123.jsx)( 30032 FieldItem3, 30033 { 30034 field: fieldToRender, 30035 isVisible: isVisible2, 30036 onToggleVisibility: () => { 30037 onChangeView({ 30038 ...view, 30039 [isVisibleFlag]: !isVisible2 30040 }); 30041 } 30042 }, 30043 field.id 30044 ); 30045 }), 30046 regularFields.map((field) => { 30047 const isVisible2 = visibleFieldIds.includes(field.id); 30048 const fieldToRender = totalVisibleFields === 1 && isVisible2 ? { ...field, enableHiding: false } : field; 30049 return /* @__PURE__ */ (0, import_jsx_runtime123.jsx)( 30050 FieldItem3, 30051 { 30052 field: fieldToRender, 30053 isVisible: isVisible2, 30054 onToggleVisibility: () => { 30055 onChangeView({ 30056 ...view, 30057 fields: isVisible2 ? visibleFieldIds.filter( 30058 (fieldId) => fieldId !== field.id 30059 ) : [...visibleFieldIds, field.id] 30060 }); 30061 } 30062 }, 30063 field.id 30064 ); 30065 }) 30066 ] }) 30067 } 30068 ) 30069 ] }); 30070 } 30071 30072 // packages/dataviews/build-module/hooks/use-delayed-loading.mjs 30073 var import_element80 = __toESM(require_element(), 1); 30074 function useDelayedLoading(isLoading, options = { delay: 400 }) { 30075 const [showLoader, setShowLoader] = (0, import_element80.useState)(false); 30076 (0, import_element80.useEffect)(() => { 30077 if (!isLoading) { 30078 return; 30079 } 30080 const timeout = setTimeout(() => { 30081 setShowLoader(true); 30082 }, options.delay); 30083 return () => { 30084 clearTimeout(timeout); 30085 setShowLoader(false); 30086 }; 30087 }, [isLoading, options.delay]); 30088 return showLoader; 30089 } 30090 30091 // packages/dataviews/build-module/components/dataviews-layouts/table/index.mjs 30092 var import_jsx_runtime124 = __toESM(require_jsx_runtime(), 1); 30093 function getEffectiveAlign(explicitAlign, fieldType) { 30094 if (explicitAlign) { 30095 return explicitAlign; 30096 } 30097 if (fieldType === "integer" || fieldType === "number") { 30098 return "end"; 30099 } 30100 return void 0; 30101 } 30102 function TableColumnField({ 30103 item, 30104 fields, 30105 column, 30106 align 30107 }) { 30108 const field = fields.find((f2) => f2.id === column); 30109 if (!field) { 30110 return null; 30111 } 30112 const className = clsx_default("dataviews-view-table__cell-content-wrapper", { 30113 "dataviews-view-table__cell-align-end": align === "end", 30114 "dataviews-view-table__cell-align-center": align === "center" 30115 }); 30116 return /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(field.render, { item, field }) }); 30117 } 30118 function TableRow({ 30119 hasBulkActions, 30120 item, 30121 level, 30122 actions, 30123 fields, 30124 id, 30125 view, 30126 titleField, 30127 mediaField, 30128 mediaAspectRatio, 30129 descriptionField: descriptionField2, 30130 selection, 30131 getItemId, 30132 isItemClickable: isItemClickable2, 30133 onClickItem, 30134 renderItemLink, 30135 onChangeSelection, 30136 onMouseDown, 30137 onClickCapture, 30138 isActionsColumnSticky, 30139 posinset 30140 }) { 30141 const { paginationInfo } = (0, import_element81.useContext)(dataviews_context_default); 30142 const hasPossibleBulkAction = useHasAPossibleBulkAction(actions, item); 30143 const isSelected2 = hasPossibleBulkAction && selection.includes(id); 30144 const { 30145 showTitle = true, 30146 showMedia = true, 30147 showDescription = true, 30148 infiniteScrollEnabled 30149 } = view; 30150 const columns = getTableColumns(view, fields); 30151 const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField2 && showDescription; 30152 return /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)( 30153 "tr", 30154 { 30155 className: clsx_default("dataviews-view-table__row", { 30156 "is-selected": hasPossibleBulkAction && isSelected2, 30157 "has-bulk-actions": hasPossibleBulkAction 30158 }), 30159 "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0, 30160 "aria-posinset": posinset, 30161 role: infiniteScrollEnabled ? "article" : void 0, 30162 onClickCapture, 30163 onMouseDown: (event) => { 30164 const isMetaClick = (0, import_keycodes2.isAppleOS)() ? event.metaKey : event.ctrlKey; 30165 if (event.button === 0 && isMetaClick && window.navigator.userAgent.toLowerCase().includes("firefox")) { 30166 event.preventDefault(); 30167 } 30168 onMouseDown(event); 30169 }, 30170 children: [ 30171 hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("td", { className: "dataviews-view-table__checkbox-column", children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("div", { className: "dataviews-view-table__cell-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)( 30172 DataViewsSelectionCheckbox, 30173 { 30174 item, 30175 selection, 30176 onChangeSelection, 30177 getItemId, 30178 titleField, 30179 disabled: !hasPossibleBulkAction 30180 } 30181 ) }) }), 30182 hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)( 30183 column_primary_default, 30184 { 30185 item, 30186 level, 30187 titleField: showTitle ? titleField : void 0, 30188 mediaField: showMedia ? mediaField : void 0, 30189 mediaAspectRatio, 30190 descriptionField: showDescription ? descriptionField2 : void 0, 30191 isItemClickable: isItemClickable2, 30192 onClickItem, 30193 renderItemLink 30194 } 30195 ) }), 30196 columns.map((column) => { 30197 const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; 30198 const field = fields.find((f2) => f2.id === column); 30199 const effectiveAlign = getEffectiveAlign(align, field?.type); 30200 return /* @__PURE__ */ (0, import_jsx_runtime124.jsx)( 30201 "td", 30202 { 30203 style: { 30204 width, 30205 maxWidth, 30206 minWidth 30207 }, 30208 children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)( 30209 TableColumnField, 30210 { 30211 fields, 30212 item, 30213 column, 30214 align: effectiveAlign 30215 } 30216 ) 30217 }, 30218 column 30219 ); 30220 }), 30221 !!actions?.length && // Disable reason: we are not making the element interactive, 30222 // but preventing any click events from bubbling up to the 30223 // table row. This allows us to add a click handler to the row 30224 // itself (to toggle row selection) without erroneously 30225 // intercepting click events from ItemActions. 30226 /* @__PURE__ */ (0, import_jsx_runtime124.jsx)( 30227 "td", 30228 { 30229 className: clsx_default("dataviews-view-table__actions-column", { 30230 "dataviews-view-table__actions-column--sticky": true, 30231 "dataviews-view-table__actions-column--stuck": isActionsColumnSticky 30232 }), 30233 onClick: (e2) => e2.stopPropagation(), 30234 children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(ItemActions, { item, actions }) 30235 } 30236 ) 30237 ] 30238 } 30239 ); 30240 } 30241 function ViewTable({ 30242 actions, 30243 data, 30244 fields, 30245 getItemId, 30246 getItemLevel, 30247 isLoading = false, 30248 onChangeView, 30249 onChangeSelection, 30250 selection, 30251 setOpenedFilter, 30252 onClickItem, 30253 isItemClickable: isItemClickable2, 30254 renderItemLink, 30255 view, 30256 className, 30257 empty 30258 }) { 30259 const { containerRef } = (0, import_element81.useContext)(dataviews_context_default); 30260 const isDelayedLoading = useDelayedLoading(isLoading); 30261 const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; 30262 const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; 30263 const orderedData = dataByGroup ? Array.from(dataByGroup.values()).flat() : data; 30264 const { getSelectionProps } = useSelectionProps({ 30265 data: orderedData, 30266 getItemId, 30267 isItemSelectable: (item) => hasAPossibleBulkAction(actions, item), 30268 selection, 30269 onChangeSelection, 30270 selectionMode: "multi", 30271 shouldSelectOnClick: false 30272 }); 30273 const headerMenuRefs = (0, import_element81.useRef)(/* @__PURE__ */ new Map()); 30274 const headerMenuToFocusRef = (0, import_element81.useRef)(void 0); 30275 const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, import_element81.useState)(); 30276 const [contextMenuAnchor, setContextMenuAnchor] = (0, import_element81.useState)(null); 30277 (0, import_element81.useEffect)(() => { 30278 if (headerMenuToFocusRef.current) { 30279 headerMenuToFocusRef.current.focus(); 30280 headerMenuToFocusRef.current = void 0; 30281 } 30282 }); 30283 const tableNoticeId = (0, import_element81.useId)(); 30284 const { isHorizontalScrollEnd, isVerticallyScrolled } = useScrollState({ 30285 scrollContainerRef: containerRef, 30286 enabledHorizontal: !!actions?.length 30287 }); 30288 const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data); 30289 if (nextHeaderMenuToFocus) { 30290 headerMenuToFocusRef.current = nextHeaderMenuToFocus; 30291 setNextHeaderMenuToFocus(void 0); 30292 return; 30293 } 30294 const onHide = (field) => { 30295 const hidden = headerMenuRefs.current.get(field.id); 30296 const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : void 0; 30297 setNextHeaderMenuToFocus(fallback?.node); 30298 }; 30299 const handleHeaderContextMenu = (event) => { 30300 event.preventDefault(); 30301 event.stopPropagation(); 30302 const virtualAnchor = { 30303 getBoundingClientRect: () => ({ 30304 x: event.clientX, 30305 y: event.clientY, 30306 top: event.clientY, 30307 left: event.clientX, 30308 right: event.clientX, 30309 bottom: event.clientY, 30310 width: 0, 30311 height: 0, 30312 toJSON: () => ({}) 30313 }) 30314 }; 30315 window.requestAnimationFrame(() => { 30316 setContextMenuAnchor(virtualAnchor); 30317 }); 30318 }; 30319 const hasData = !!data?.length; 30320 const titleField = fields.find((field) => field.id === view.titleField); 30321 const mediaField = fields.find((field) => field.id === view.mediaField); 30322 const descriptionField2 = fields.find( 30323 (field) => field.id === view.descriptionField 30324 ); 30325 const { showTitle = true, showMedia = true, showDescription = true } = view; 30326 const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField2 && showDescription; 30327 const columns = getTableColumns(view, fields); 30328 const headerMenuRef = (column, index2) => (node) => { 30329 if (node) { 30330 headerMenuRefs.current.set(column, { 30331 node, 30332 fallback: columns[index2 > 0 ? index2 - 1 : 1] 30333 }); 30334 } else { 30335 headerMenuRefs.current.delete(column); 30336 } 30337 }; 30338 const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; 30339 const isRtl = (0, import_i18n24.isRTL)(); 30340 const mediaAspectRatio = view.layout?.aspectRatio && MEDIA_ASPECT_RATIOS.includes(view.layout.aspectRatio) ? view.layout.aspectRatio : void 0; 30341 const tableStyle = { 30342 "--wp-dataviews-media-aspect-ratio": mediaAspectRatio ?? "1/1" 30343 }; 30344 if (!hasData) { 30345 return /* @__PURE__ */ (0, import_jsx_runtime124.jsx)( 30346 "div", 30347 { 30348 className: clsx_default("dataviews-no-results", { 30349 "is-refreshing": isDelayedLoading 30350 }), 30351 id: tableNoticeId, 30352 children: empty 30353 } 30354 ); 30355 } 30356 return /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)(import_jsx_runtime124.Fragment, { children: [ 30357 /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)( 30358 "table", 30359 { 30360 className: clsx_default("dataviews-view-table", className, { 30361 [`has-$view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( 30362 view.layout.density 30363 ), 30364 "has-bulk-actions": hasBulkActions, 30365 "is-refreshing": !isInfiniteScroll && isDelayedLoading, 30366 "has-media-aspect-ratio": !!mediaAspectRatio 30367 }), 30368 style: tableStyle, 30369 "aria-busy": isLoading, 30370 "aria-describedby": tableNoticeId, 30371 role: isInfiniteScroll ? "feed" : void 0, 30372 inert: !isInfiniteScroll && isLoading ? "true" : void 0, 30373 children: [ 30374 /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)("colgroup", { children: [ 30375 hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("col", { className: "dataviews-view-table__col-checkbox" }), 30376 hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("col", { className: "dataviews-view-table__col-first-data" }), 30377 columns.map((column, index2) => /* @__PURE__ */ (0, import_jsx_runtime124.jsx)( 30378 "col", 30379 { 30380 className: clsx_default( 30381 `dataviews-view-table__col-$column}`, 30382 { 30383 "dataviews-view-table__col-expand": !hasPrimaryColumn && index2 === columns.length - 1 30384 } 30385 ) 30386 }, 30387 `col-$column}` 30388 )), 30389 !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("col", { className: "dataviews-view-table__col-actions" }) 30390 ] }), 30391 contextMenuAnchor && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)( 30392 import_components7.Popover, 30393 { 30394 anchor: contextMenuAnchor, 30395 onClose: () => setContextMenuAnchor(null), 30396 placement: "bottom-start", 30397 children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(PropertiesSection, { showLabel: false }) 30398 } 30399 ), 30400 /* @__PURE__ */ (0, import_jsx_runtime124.jsx)( 30401 "thead", 30402 { 30403 className: clsx_default({ 30404 "dataviews-view-table__thead--stuck": isVerticallyScrolled 30405 }), 30406 onContextMenu: handleHeaderContextMenu, 30407 children: /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)("tr", { className: "dataviews-view-table__row", children: [ 30408 hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)( 30409 "th", 30410 { 30411 className: "dataviews-view-table__checkbox-column", 30412 scope: "col", 30413 onContextMenu: handleHeaderContextMenu, 30414 children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)( 30415 BulkSelectionCheckbox, 30416 { 30417 selection, 30418 onChangeSelection, 30419 data, 30420 actions, 30421 getItemId 30422 } 30423 ) 30424 } 30425 ), 30426 hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("th", { scope: "col", children: titleField && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)( 30427 column_header_menu_default, 30428 { 30429 ref: headerMenuRef( 30430 titleField.id, 30431 0 30432 ), 30433 fieldId: titleField.id, 30434 view, 30435 fields, 30436 onChangeView, 30437 onHide, 30438 setOpenedFilter, 30439 canMove: false, 30440 canInsertLeft: isRtl ? view.layout?.enableMoving ?? true : false, 30441 canInsertRight: isRtl ? false : view.layout?.enableMoving ?? true 30442 } 30443 ) }), 30444 columns.map((column, index2) => { 30445 const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; 30446 const field = fields.find( 30447 (f2) => f2.id === column 30448 ); 30449 const effectiveAlign = getEffectiveAlign( 30450 align, 30451 field?.type 30452 ); 30453 const canInsertOrMove = view.layout?.enableMoving ?? true; 30454 return /* @__PURE__ */ (0, import_jsx_runtime124.jsx)( 30455 "th", 30456 { 30457 style: { 30458 width, 30459 maxWidth, 30460 minWidth, 30461 textAlign: effectiveAlign 30462 }, 30463 "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : void 0, 30464 scope: "col", 30465 children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)( 30466 column_header_menu_default, 30467 { 30468 ref: headerMenuRef(column, index2), 30469 fieldId: column, 30470 view, 30471 fields, 30472 onChangeView, 30473 onHide, 30474 setOpenedFilter, 30475 canMove: canInsertOrMove, 30476 canInsertLeft: canInsertOrMove, 30477 canInsertRight: canInsertOrMove 30478 } 30479 ) 30480 }, 30481 column 30482 ); 30483 }), 30484 !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)( 30485 "th", 30486 { 30487 className: clsx_default( 30488 "dataviews-view-table__actions-column", 30489 { 30490 "dataviews-view-table__actions-column--sticky": true, 30491 "dataviews-view-table__actions-column--stuck": !isHorizontalScrollEnd 30492 } 30493 ), 30494 children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("span", { className: "dataviews-view-table-header", children: (0, import_i18n24.__)("Actions") }) 30495 } 30496 ) 30497 ] }) 30498 } 30499 ), 30500 hasData && groupField && dataByGroup ? Array.from(dataByGroup.entries()).map( 30501 ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)("tbody", { children: [ 30502 /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("tr", { className: "dataviews-view-table__group-header-row", children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)( 30503 "td", 30504 { 30505 colSpan: columns.length + (hasPrimaryColumn ? 1 : 0) + (hasBulkActions ? 1 : 0) + (actions?.length ? 1 : 0), 30506 className: "dataviews-view-table__group-header-cell", 30507 children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n24.sprintf)( 30508 // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". 30509 (0, import_i18n24.__)("%1$s: %2$s"), 30510 groupField.label, 30511 groupName 30512 ) 30513 } 30514 ) }), 30515 groupItems.map((item, index2) => { 30516 const id = getItemId(item) || index2.toString(); 30517 return /* @__PURE__ */ (0, import_jsx_runtime124.jsx)( 30518 TableRow, 30519 { 30520 item, 30521 level: view.showLevels && typeof getItemLevel === "function" ? getItemLevel(item) : void 0, 30522 hasBulkActions, 30523 actions, 30524 fields, 30525 id, 30526 view, 30527 titleField, 30528 mediaField, 30529 mediaAspectRatio, 30530 descriptionField: descriptionField2, 30531 selection, 30532 getItemId, 30533 onChangeSelection, 30534 ...getSelectionProps(id), 30535 onClickItem, 30536 renderItemLink, 30537 isItemClickable: isItemClickable2, 30538 isActionsColumnSticky: !isHorizontalScrollEnd 30539 }, 30540 getItemId(item) 30541 ); 30542 }) 30543 ] }, `group-$groupName}`) 30544 ) : /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("tbody", { children: hasData && data.map((item, index2) => { 30545 const id = getItemId(item) || index2.toString(); 30546 return /* @__PURE__ */ (0, import_jsx_runtime124.jsx)( 30547 TableRow, 30548 { 30549 item, 30550 level: view.showLevels && typeof getItemLevel === "function" ? getItemLevel(item) : void 0, 30551 hasBulkActions, 30552 actions, 30553 fields, 30554 id, 30555 view, 30556 titleField, 30557 mediaField, 30558 mediaAspectRatio, 30559 descriptionField: descriptionField2, 30560 selection, 30561 getItemId, 30562 onChangeSelection, 30563 ...getSelectionProps(id), 30564 onClickItem, 30565 renderItemLink, 30566 isItemClickable: isItemClickable2, 30567 isActionsColumnSticky: !isHorizontalScrollEnd, 30568 posinset: isInfiniteScroll ? index2 + 1 : void 0 30569 }, 30570 getItemId(item) 30571 ); 30572 }) }) 30573 ] 30574 } 30575 ), 30576 isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("div", { className: "dataviews-loading", id: tableNoticeId, children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_components7.Spinner, {}) }) }) 30577 ] }); 30578 } 30579 var table_default = ViewTable; 30580 30581 // packages/dataviews/build-module/components/dataviews-layouts/grid/index.mjs 30582 var import_components10 = __toESM(require_components(), 1); 30583 var import_i18n27 = __toESM(require_i18n(), 1); 30584 30585 // packages/dataviews/build-module/components/dataviews-layouts/grid/composite-grid.mjs 30586 var import_components9 = __toESM(require_components(), 1); 30587 var import_i18n26 = __toESM(require_i18n(), 1); 30588 var import_compose7 = __toESM(require_compose(), 1); 30589 var import_element85 = __toESM(require_element(), 1); 30590 30591 // packages/dataviews/build-module/components/dataviews-layouts/grid/preview-size-picker.mjs 30592 var import_components8 = __toESM(require_components(), 1); 30593 var import_i18n25 = __toESM(require_i18n(), 1); 30594 var import_element82 = __toESM(require_element(), 1); 30595 var import_jsx_runtime125 = __toESM(require_jsx_runtime(), 1); 30596 var imageSizes = [ 30597 { 30598 value: 120, 30599 breakpoint: 1 30600 }, 30601 { 30602 value: 170, 30603 breakpoint: 1 30604 }, 30605 { 30606 value: 230, 30607 breakpoint: 1 30608 }, 30609 { 30610 value: 290, 30611 breakpoint: 1112 30612 // at minimum image width, 4 images display at this container size 30613 }, 30614 { 30615 value: 350, 30616 breakpoint: 1636 30617 // at minimum image width, 6 images display at this container size 30618 }, 30619 { 30620 value: 430, 30621 breakpoint: 588 30622 // at minimum image width, 2 images display at this container size 30623 } 30624 ]; 30625 var DEFAULT_PREVIEW_SIZE = imageSizes[2].value; 30626 function useGridColumns() { 30627 const context = (0, import_element82.useContext)(dataviews_context_default); 30628 const view = context.view; 30629 return (0, import_element82.useMemo)(() => { 30630 const containerWidth = context.containerWidth; 30631 const gap = 32; 30632 const previewSize = view.layout?.previewSize ?? DEFAULT_PREVIEW_SIZE; 30633 const columns = Math.floor( 30634 (containerWidth + gap) / (previewSize + gap) 30635 ); 30636 return Math.max(1, columns); 30637 }, [context.containerWidth, view.layout?.previewSize]); 30638 } 30639 30640 // packages/dataviews/build-module/components/dataviews-layouts/utils/grid-items.mjs 30641 var import_element83 = __toESM(require_element(), 1); 30642 var import_jsx_runtime126 = __toESM(require_jsx_runtime(), 1); 30643 var GridItems = (0, import_element83.forwardRef)(({ className, previewSize, style, ...props }, ref) => { 30644 return /* @__PURE__ */ (0, import_jsx_runtime126.jsx)( 30645 "div", 30646 { 30647 ref, 30648 className: clsx_default("dataviews-view-grid-items", className), 30649 style: { 30650 gridTemplateColumns: previewSize && `repeat(auto-fill, minmax($previewSize}px, 1fr))`, 30651 ...style 30652 }, 30653 ...props 30654 } 30655 ); 30656 }); 30657 30658 // packages/dataviews/build-module/components/dataviews-layouts/utils/use-infinite-scroll.mjs 30659 var import_element84 = __toESM(require_element(), 1); 30660 function useIntersectionObserver(elementRef, posinset) { 30661 const { intersectionObserver } = (0, import_element84.useContext)(dataviews_context_default); 30662 (0, import_element84.useEffect)(() => { 30663 const element = elementRef.current; 30664 if (!element || posinset === void 0 || !intersectionObserver) { 30665 return; 30666 } 30667 intersectionObserver.observe(element); 30668 return () => { 30669 intersectionObserver.unobserve(element); 30670 }; 30671 }, [elementRef, intersectionObserver, posinset]); 30672 } 30673 function usePlaceholdersNeeded(data, isInfiniteScroll, gridColumns) { 30674 const hasData = !!data?.length; 30675 const firstItemPosition = hasData && isInfiniteScroll ? data[0].position : void 0; 30676 return firstItemPosition && gridColumns ? (firstItemPosition - 1) % gridColumns : 0; 30677 } 30678 30679 // packages/dataviews/build-module/components/dataviews-layouts/grid/composite-grid.mjs 30680 var import_jsx_runtime127 = __toESM(require_jsx_runtime(), 1); 30681 function chunk(array, size4) { 30682 const chunks = []; 30683 for (let i2 = 0, j2 = array.length; i2 < j2; i2 += size4) { 30684 chunks.push(array.slice(i2, i2 + size4)); 30685 } 30686 return chunks; 30687 } 30688 var GridItem = (0, import_element85.forwardRef)( 30689 function GridItem2({ 30690 view, 30691 selection, 30692 onChangeSelection, 30693 onClickItem, 30694 isItemClickable: isItemClickable2, 30695 renderItemLink, 30696 getItemId, 30697 item, 30698 actions, 30699 mediaField, 30700 titleField, 30701 descriptionField: descriptionField2, 30702 regularFields, 30703 badgeFields, 30704 hasBulkActions, 30705 config, 30706 posinset, 30707 setsize, 30708 ...props 30709 }, forwardedRef) { 30710 const { 30711 showTitle = true, 30712 showMedia = true, 30713 showDescription = true 30714 } = view; 30715 const hasBulkAction = useHasAPossibleBulkAction(actions, item); 30716 const id = getItemId(item); 30717 const elementRef = (0, import_element85.useRef)(null); 30718 const setRefs = (0, import_element85.useCallback)( 30719 (node) => { 30720 elementRef.current = node; 30721 if (typeof forwardedRef === "function") { 30722 forwardedRef(node); 30723 } else if (forwardedRef) { 30724 forwardedRef.current = node; 30725 } 30726 }, 30727 [forwardedRef] 30728 ); 30729 useIntersectionObserver(elementRef, posinset); 30730 const instanceId = (0, import_compose7.useInstanceId)(GridItem2); 30731 const isSelected2 = selection.includes(id); 30732 const mediaPlaceholder = /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("span", { className: "dataviews-view-grid__media-placeholder" }); 30733 const rendersMediaField = showMedia && mediaField?.render; 30734 const renderedMediaField = rendersMediaField ? /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 30735 mediaField.render, 30736 { 30737 item, 30738 field: mediaField, 30739 config 30740 } 30741 ) : mediaPlaceholder; 30742 const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(titleField.render, { item, field: titleField }) : null; 30743 let mediaA11yProps; 30744 let titleA11yProps; 30745 if (isItemClickable2(item) && onClickItem) { 30746 if (renderedTitleField) { 30747 mediaA11yProps = { 30748 "aria-labelledby": `dataviews-view-grid__title-field-$instanceId}` 30749 }; 30750 titleA11yProps = { 30751 id: `dataviews-view-grid__title-field-$instanceId}` 30752 }; 30753 } else { 30754 mediaA11yProps = { 30755 "aria-label": (0, import_i18n26.__)("Navigate to item") 30756 }; 30757 } 30758 } 30759 return /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)( 30760 Stack, 30761 { 30762 direction: "column", 30763 ...props, 30764 ref: setRefs, 30765 "aria-setsize": setsize, 30766 "aria-posinset": posinset, 30767 className: clsx_default( 30768 props.className, 30769 "dataviews-view-grid__row__gridcell", 30770 "dataviews-view-grid__card", 30771 { 30772 "is-selected": hasBulkAction && isSelected2 30773 } 30774 ), 30775 children: [ 30776 /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 30777 ItemClickWrapper, 30778 { 30779 item, 30780 isItemClickable: isItemClickable2, 30781 onClickItem, 30782 renderItemLink, 30783 className: clsx_default("dataviews-view-grid__media", { 30784 "dataviews-view-grid__media--placeholder": !rendersMediaField 30785 }), 30786 ...mediaA11yProps, 30787 children: renderedMediaField 30788 } 30789 ), 30790 hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 30791 DataViewsSelectionCheckbox, 30792 { 30793 item, 30794 selection, 30795 onChangeSelection, 30796 getItemId, 30797 titleField, 30798 disabled: !hasBulkAction 30799 } 30800 ), 30801 !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("div", { className: "dataviews-view-grid__media-actions", children: /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 30802 ItemActions, 30803 { 30804 item, 30805 actions, 30806 isCompact: true 30807 } 30808 ) }), 30809 showTitle && /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("div", { className: "dataviews-view-grid__title-actions", children: /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 30810 ItemClickWrapper, 30811 { 30812 item, 30813 isItemClickable: isItemClickable2, 30814 onClickItem, 30815 renderItemLink, 30816 className: "dataviews-view-grid__title-field dataviews-title-field", 30817 ...titleA11yProps, 30818 title: titleField?.getValueFormatted({ 30819 item, 30820 field: titleField 30821 }) || void 0, 30822 children: renderedTitleField 30823 } 30824 ) }), 30825 /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)(Stack, { direction: "column", gap: "xs", children: [ 30826 showDescription && descriptionField2?.render && /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 30827 descriptionField2.render, 30828 { 30829 item, 30830 field: descriptionField2 30831 } 30832 ), 30833 !!badgeFields?.length && /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 30834 Stack, 30835 { 30836 direction: "row", 30837 className: "dataviews-view-grid__badge-fields", 30838 gap: "sm", 30839 wrap: "wrap", 30840 align: "top", 30841 justify: "flex-start", 30842 children: badgeFields.map((field) => { 30843 return ( 30844 /* @ts-expect-error `Badge` is text-only, but a badge field renders whatever its `render` returns. */ 30845 /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 30846 Badge, 30847 { 30848 className: "dataviews-view-grid__field-value", 30849 children: /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 30850 field.render, 30851 { 30852 item, 30853 field 30854 } 30855 ) 30856 }, 30857 field.id 30858 ) 30859 ); 30860 }) 30861 } 30862 ), 30863 !!regularFields?.length && /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 30864 Stack, 30865 { 30866 direction: "column", 30867 className: "dataviews-view-grid__fields", 30868 gap: "xs", 30869 children: regularFields.map((field) => { 30870 return /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 30871 import_components9.Flex, 30872 { 30873 className: "dataviews-view-grid__field", 30874 gap: 1, 30875 justify: "flex-start", 30876 expanded: true, 30877 style: { height: "auto" }, 30878 direction: "row", 30879 children: /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)(import_jsx_runtime127.Fragment, { children: [ 30880 /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)(tooltip_exports.Root, { children: [ 30881 /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 30882 tooltip_exports.Trigger, 30883 { 30884 render: /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(import_components9.FlexItem, { className: "dataviews-view-grid__field-name", children: field.header }) 30885 } 30886 ), 30887 /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(tooltip_exports.Popup, { children: field.label }) 30888 ] }), 30889 /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 30890 import_components9.FlexItem, 30891 { 30892 className: "dataviews-view-grid__field-value", 30893 style: { maxHeight: "none" }, 30894 children: /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 30895 field.render, 30896 { 30897 item, 30898 field 30899 } 30900 ) 30901 } 30902 ) 30903 ] }) 30904 }, 30905 field.id 30906 ); 30907 }) 30908 } 30909 ) 30910 ] }) 30911 ] 30912 } 30913 ); 30914 } 30915 ); 30916 function CompositeGrid({ 30917 data, 30918 isInfiniteScroll, 30919 className, 30920 inert, 30921 isLoading, 30922 view, 30923 fields, 30924 selection, 30925 onChangeSelection, 30926 onClickItem, 30927 isItemClickable: isItemClickable2, 30928 renderItemLink, 30929 getItemId, 30930 actions, 30931 getSelectionProps 30932 }) { 30933 const { paginationInfo, resizeObserverRef } = (0, import_element85.useContext)(dataviews_context_default); 30934 const gridColumns = useGridColumns(); 30935 const gridStyle = { 30936 "--wp-dataviews-media-aspect-ratio": view.layout?.aspectRatio && MEDIA_ASPECT_RATIOS.includes(view.layout.aspectRatio) ? view.layout.aspectRatio : "1/1" 30937 }; 30938 const isMediaContain = view.layout?.mediaFit === "contain"; 30939 const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data); 30940 const titleField = fields.find( 30941 (field) => field.id === view?.titleField 30942 ); 30943 const mediaField = fields.find( 30944 (field) => field.id === view?.mediaField 30945 ); 30946 const descriptionField2 = fields.find( 30947 (field) => field.id === view?.descriptionField 30948 ); 30949 const otherFields = view.fields ?? []; 30950 const { regularFields, badgeFields } = otherFields.reduce( 30951 (accumulator, fieldId) => { 30952 const field = fields.find((f2) => f2.id === fieldId); 30953 if (!field) { 30954 return accumulator; 30955 } 30956 const key = view.layout?.badgeFields?.includes(fieldId) ? "badgeFields" : "regularFields"; 30957 accumulator[key].push(field); 30958 return accumulator; 30959 }, 30960 { regularFields: [], badgeFields: [] } 30961 ); 30962 const size4 = "900px"; 30963 const totalRows = Math.ceil(data.length / gridColumns); 30964 const placeholdersNeeded = usePlaceholdersNeeded( 30965 data, 30966 isInfiniteScroll, 30967 gridColumns 30968 ); 30969 return /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)(import_jsx_runtime127.Fragment, { 30970 // Render infinite scroll layout (no rows, feed semantics) 30971 children: [ 30972 isInfiniteScroll && /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)( 30973 import_components9.Composite, 30974 { 30975 render: /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 30976 GridItems, 30977 { 30978 className: clsx_default( 30979 "dataviews-view-grid-infinite-scroll", 30980 className, 30981 { 30982 [`has-$view.layout?.density}-density`]: view.layout?.density && [ 30983 "compact", 30984 "comfortable" 30985 ].includes(view.layout.density), 30986 "has-media-fit-contain": isMediaContain 30987 } 30988 ), 30989 previewSize: view.layout?.previewSize, 30990 style: gridStyle, 30991 "aria-busy": isLoading, 30992 ref: resizeObserverRef 30993 } 30994 ), 30995 role: "feed", 30996 focusWrap: true, 30997 inert, 30998 children: [ 30999 Array.from({ length: placeholdersNeeded }).map( 31000 (_, index2) => /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 31001 import_components9.Composite.Item, 31002 { 31003 render: (props) => /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 31004 Stack, 31005 { 31006 ...props, 31007 direction: "column", 31008 role: "article", 31009 className: "dataviews-view-grid__row__gridcell dataviews-view-grid__card dataviews-view-grid__placeholder" 31010 } 31011 ), 31012 "aria-hidden": true, 31013 tabIndex: -1 31014 }, 31015 `placeholder-$index2}` 31016 ) 31017 ), 31018 data.map((item) => { 31019 const itemId = getItemId(item); 31020 const selectionProps = getSelectionProps(itemId); 31021 const stablePosition = item.position; 31022 return /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 31023 import_components9.Composite.Item, 31024 { 31025 render: (props) => /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 31026 GridItem, 31027 { 31028 ...props, 31029 id: itemId, 31030 role: "article", 31031 view, 31032 selection, 31033 onChangeSelection, 31034 onClickItem, 31035 isItemClickable: isItemClickable2, 31036 renderItemLink, 31037 getItemId, 31038 item, 31039 actions, 31040 onMouseDown: (event) => { 31041 props.onMouseDown?.(event); 31042 selectionProps.onMouseDown( 31043 event 31044 ); 31045 }, 31046 onClickCapture: (event) => { 31047 props.onClickCapture?.(event); 31048 selectionProps.onClickCapture( 31049 event 31050 ); 31051 }, 31052 mediaField, 31053 titleField, 31054 descriptionField: descriptionField2, 31055 regularFields, 31056 badgeFields, 31057 hasBulkActions, 31058 posinset: stablePosition, 31059 setsize: paginationInfo.totalItems, 31060 config: { 31061 sizes: size4 31062 } 31063 } 31064 ) 31065 }, 31066 itemId 31067 ); 31068 }) 31069 ] 31070 } 31071 ), 31072 // Render standard grid layout (with rows, grid semantics) 31073 !isInfiniteScroll && /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 31074 import_components9.Composite, 31075 { 31076 role: "grid", 31077 style: gridStyle, 31078 className: clsx_default("dataviews-view-grid", className, { 31079 [`has-$view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( 31080 view.layout.density 31081 ), 31082 "has-media-fit-contain": isMediaContain 31083 }), 31084 focusWrap: true, 31085 "aria-busy": isLoading, 31086 "aria-rowcount": totalRows, 31087 ref: resizeObserverRef, 31088 inert, 31089 children: chunk(data, gridColumns).map((row, i2) => /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 31090 import_components9.Composite.Row, 31091 { 31092 render: /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 31093 "div", 31094 { 31095 role: "row", 31096 "aria-rowindex": i2 + 1, 31097 "aria-label": (0, import_i18n26.sprintf)( 31098 /* translators: %d: The row number in the grid */ 31099 (0, import_i18n26.__)("Row %d"), 31100 i2 + 1 31101 ), 31102 className: "dataviews-view-grid__row", 31103 style: { 31104 gridTemplateColumns: `repeat( $gridColumns}, minmax(0, 1fr) )` 31105 } 31106 } 31107 ), 31108 children: row.map((item) => { 31109 const itemId = getItemId(item); 31110 const selectionProps = getSelectionProps(itemId); 31111 return /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 31112 import_components9.Composite.Item, 31113 { 31114 render: (props) => /* @__PURE__ */ (0, import_jsx_runtime127.jsx)( 31115 GridItem, 31116 { 31117 ...props, 31118 id: itemId, 31119 role: "gridcell", 31120 view, 31121 selection, 31122 onChangeSelection, 31123 onClickItem, 31124 isItemClickable: isItemClickable2, 31125 renderItemLink, 31126 getItemId, 31127 item, 31128 actions, 31129 onMouseDown: (event) => { 31130 props.onMouseDown?.( 31131 event 31132 ); 31133 selectionProps.onMouseDown( 31134 event 31135 ); 31136 }, 31137 onClickCapture: (event) => { 31138 props.onClickCapture?.( 31139 event 31140 ); 31141 selectionProps.onClickCapture( 31142 event 31143 ); 31144 }, 31145 mediaField, 31146 titleField, 31147 descriptionField: descriptionField2, 31148 regularFields, 31149 badgeFields, 31150 hasBulkActions, 31151 config: { 31152 sizes: size4 31153 } 31154 } 31155 ) 31156 }, 31157 itemId 31158 ); 31159 }) 31160 }, 31161 i2 31162 )) 31163 } 31164 ) 31165 ] 31166 }); 31167 } 31168 31169 // packages/dataviews/build-module/components/dataviews-layouts/grid/index.mjs 31170 var import_jsx_runtime128 = __toESM(require_jsx_runtime(), 1); 31171 function ViewGrid({ 31172 actions, 31173 data, 31174 fields, 31175 getItemId, 31176 isLoading, 31177 onChangeSelection, 31178 onClickItem, 31179 isItemClickable: isItemClickable2, 31180 renderItemLink, 31181 selection, 31182 view, 31183 className, 31184 empty 31185 }) { 31186 const isDelayedLoading = useDelayedLoading(!!isLoading); 31187 const hasData = !!data?.length; 31188 const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; 31189 const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; 31190 const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; 31191 const orderedData = dataByGroup ? Array.from(dataByGroup.values()).flat() : data; 31192 const { getSelectionProps } = useSelectionProps({ 31193 data: orderedData, 31194 getItemId, 31195 isItemSelectable: (item) => hasAPossibleBulkAction(actions, item), 31196 selection, 31197 onChangeSelection, 31198 selectionMode: "multi", 31199 shouldSelectOnClick: false 31200 }); 31201 if (!hasData) { 31202 return /* @__PURE__ */ (0, import_jsx_runtime128.jsx)( 31203 "div", 31204 { 31205 className: clsx_default("dataviews-no-results", { 31206 "is-refreshing": isDelayedLoading 31207 }), 31208 children: empty 31209 } 31210 ); 31211 } 31212 const gridProps = { 31213 className: clsx_default(className, { 31214 "is-refreshing": !isInfiniteScroll && isDelayedLoading 31215 }), 31216 inert: !isInfiniteScroll && !!isLoading ? "true" : void 0, 31217 isLoading, 31218 view, 31219 fields, 31220 selection, 31221 onChangeSelection, 31222 onClickItem, 31223 isItemClickable: isItemClickable2, 31224 renderItemLink, 31225 getItemId, 31226 actions, 31227 getSelectionProps 31228 }; 31229 return /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(import_jsx_runtime128.Fragment, { 31230 // Render multiple groups. 31231 children: [ 31232 hasData && groupField && dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(Stack, { direction: "column", gap: "lg", children: Array.from(dataByGroup.entries()).map( 31233 ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)( 31234 Stack, 31235 { 31236 direction: "column", 31237 gap: "sm", 31238 children: [ 31239 /* @__PURE__ */ (0, import_jsx_runtime128.jsx)("h3", { className: "dataviews-view-grid__group-header", children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n27.sprintf)( 31240 // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". 31241 (0, import_i18n27.__)("%1$s: %2$s"), 31242 groupField.label, 31243 groupName 31244 ) }), 31245 /* @__PURE__ */ (0, import_jsx_runtime128.jsx)( 31246 CompositeGrid, 31247 { 31248 ...gridProps, 31249 data: groupItems, 31250 isInfiniteScroll: false 31251 } 31252 ) 31253 ] 31254 }, 31255 groupName 31256 ) 31257 ) }), 31258 // Render a single grid with all data. 31259 !dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime128.jsx)( 31260 CompositeGrid, 31261 { 31262 ...gridProps, 31263 data, 31264 isInfiniteScroll: !!isInfiniteScroll 31265 } 31266 ), 31267 isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime128.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(import_components10.Spinner, {}) }) 31268 ] 31269 }); 31270 } 31271 var grid_default = ViewGrid; 31272 31273 // packages/dataviews/build-module/components/dataviews-layouts/list/index.mjs 31274 var import_compose8 = __toESM(require_compose(), 1); 31275 var import_components11 = __toESM(require_components(), 1); 31276 var import_element86 = __toESM(require_element(), 1); 31277 var import_i18n28 = __toESM(require_i18n(), 1); 31278 var import_data4 = __toESM(require_data(), 1); 31279 var import_jsx_runtime129 = __toESM(require_jsx_runtime(), 1); 31280 function generateItemWrapperCompositeId(idPrefix) { 31281 return `$idPrefix}-item-wrapper`; 31282 } 31283 function generatePrimaryActionCompositeId(idPrefix, primaryActionId) { 31284 return `$idPrefix}-primary-action-$primaryActionId}`; 31285 } 31286 function generateDropdownTriggerCompositeId(idPrefix) { 31287 return `$idPrefix}-dropdown`; 31288 } 31289 function PrimaryActionGridCell({ 31290 idPrefix, 31291 primaryAction, 31292 item 31293 }) { 31294 const registry = (0, import_data4.useRegistry)(); 31295 const [isModalOpen, setIsModalOpen] = (0, import_element86.useState)(false); 31296 const compositeItemId = generatePrimaryActionCompositeId( 31297 idPrefix, 31298 primaryAction.id 31299 ); 31300 const label = typeof primaryAction.label === "string" ? primaryAction.label : primaryAction.label([item]); 31301 return "RenderModal" in primaryAction ? /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31302 import_components11.Composite.Item, 31303 { 31304 id: compositeItemId, 31305 render: /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31306 import_components11.Button, 31307 { 31308 disabled: !!primaryAction.disabled, 31309 accessibleWhenDisabled: true, 31310 text: label, 31311 size: "small", 31312 onClick: () => setIsModalOpen(true) 31313 } 31314 ), 31315 children: isModalOpen && /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31316 ActionModal, 31317 { 31318 action: primaryAction, 31319 items: [item], 31320 closeModal: () => setIsModalOpen(false) 31321 } 31322 ) 31323 } 31324 ) }, primaryAction.id) : /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31325 import_components11.Composite.Item, 31326 { 31327 id: compositeItemId, 31328 render: /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31329 import_components11.Button, 31330 { 31331 disabled: !!primaryAction.disabled, 31332 accessibleWhenDisabled: true, 31333 size: "small", 31334 onClick: () => { 31335 primaryAction.callback([item], { registry }); 31336 }, 31337 children: label 31338 } 31339 ) 31340 } 31341 ) }, primaryAction.id); 31342 } 31343 function ListItem({ 31344 view, 31345 actions, 31346 idPrefix, 31347 isSelected: isSelected2, 31348 item, 31349 titleField, 31350 mediaField, 31351 descriptionField: descriptionField2, 31352 selectionProps, 31353 otherFields, 31354 onDropdownTriggerKeyDown, 31355 posinset 31356 }) { 31357 const { 31358 showTitle = true, 31359 showMedia = true, 31360 showDescription = true, 31361 infiniteScrollEnabled 31362 } = view; 31363 const itemRef = (0, import_element86.useRef)(null); 31364 const labelId = `$idPrefix}-label`; 31365 const descriptionId = `$idPrefix}-description`; 31366 const registry = (0, import_data4.useRegistry)(); 31367 const [isHovered, setIsHovered] = (0, import_element86.useState)(false); 31368 const [activeModalAction, setActiveModalAction] = (0, import_element86.useState)( 31369 null 31370 ); 31371 const handleHover = ({ type }) => { 31372 const isHover = type === "mouseenter"; 31373 setIsHovered(isHover); 31374 }; 31375 const { paginationInfo } = (0, import_element86.useContext)(dataviews_context_default); 31376 (0, import_element86.useEffect)(() => { 31377 if (isSelected2) { 31378 itemRef.current?.scrollIntoView({ 31379 behavior: "auto", 31380 block: "nearest", 31381 inline: "nearest" 31382 }); 31383 } 31384 }, [isSelected2]); 31385 const { primaryAction, eligibleActions } = (0, import_element86.useMemo)(() => { 31386 const _eligibleActions = actions.filter( 31387 (action) => !action.isEligible || action.isEligible(item) 31388 ); 31389 const _primaryActions = _eligibleActions.filter( 31390 (action) => action.isPrimary 31391 ); 31392 return { 31393 primaryAction: _primaryActions[0], 31394 eligibleActions: _eligibleActions 31395 }; 31396 }, [actions, item]); 31397 const hasOnlyOnePrimaryAction = primaryAction && actions.length === 1; 31398 const renderedMediaField = showMedia && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("div", { className: "dataviews-view-list__media-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31399 mediaField.render, 31400 { 31401 item, 31402 field: mediaField, 31403 config: { sizes: "52px" } 31404 } 31405 ) }) : null; 31406 const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(titleField.render, { item, field: titleField }) : null; 31407 const renderDescription = showDescription && descriptionField2?.render; 31408 const hasOnlyMediaAndTitle = !!renderedMediaField && !renderDescription && !otherFields.length; 31409 const usedActions = eligibleActions?.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)( 31410 Stack, 31411 { 31412 direction: "row", 31413 gap: "md", 31414 className: "dataviews-view-list__item-actions", 31415 children: [ 31416 primaryAction && /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31417 PrimaryActionGridCell, 31418 { 31419 idPrefix, 31420 primaryAction, 31421 item 31422 } 31423 ), 31424 !hasOnlyOnePrimaryAction && /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("div", { role: "gridcell", children: [ 31425 /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)(menu_exports.Root, { disabled: !actions.length, children: [ 31426 /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31427 menu_exports.Trigger, 31428 { 31429 render: /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31430 import_components11.Composite.Item, 31431 { 31432 id: generateDropdownTriggerCompositeId( 31433 idPrefix 31434 ), 31435 accessibleWhenDisabled: true, 31436 render: /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31437 import_components11.Button, 31438 { 31439 size: "small", 31440 icon: more_vertical_default, 31441 label: (0, import_i18n28.__)("Actions"), 31442 accessibleWhenDisabled: true, 31443 disabled: !actions.length, 31444 onKeyDownCapture: onDropdownTriggerKeyDown 31445 } 31446 ) 31447 } 31448 ) 31449 } 31450 ), 31451 /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31452 menu_exports.Popup, 31453 { 31454 positioner: /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(menu_exports.Positioner, { align: "end" }), 31455 children: /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31456 ActionsMenuGroup, 31457 { 31458 actions: eligibleActions, 31459 item, 31460 registry, 31461 setActiveModalAction 31462 } 31463 ) 31464 } 31465 ) 31466 ] }), 31467 !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31468 ActionModal, 31469 { 31470 action: activeModalAction, 31471 items: [item], 31472 closeModal: () => setActiveModalAction(null) 31473 } 31474 ) 31475 ] }) 31476 ] 31477 } 31478 ); 31479 return /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31480 import_components11.Composite.Row, 31481 { 31482 ref: itemRef, 31483 render: ( 31484 /* aria-posinset breaks Composite.Row if passed to it directly. */ 31485 /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31486 "div", 31487 { 31488 "aria-posinset": posinset, 31489 "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0 31490 } 31491 ) 31492 ), 31493 role: infiniteScrollEnabled ? "article" : "row", 31494 className: clsx_default({ 31495 "is-selected": isSelected2, 31496 "is-hovered": isHovered 31497 }), 31498 onMouseEnter: handleHover, 31499 onMouseLeave: handleHover, 31500 children: /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)( 31501 Stack, 31502 { 31503 direction: "row", 31504 className: "dataviews-view-list__item-wrapper", 31505 children: [ 31506 /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31507 import_components11.Composite.Item, 31508 { 31509 id: generateItemWrapperCompositeId(idPrefix), 31510 "aria-pressed": isSelected2, 31511 "aria-labelledby": labelId, 31512 "aria-describedby": descriptionId, 31513 className: "dataviews-view-list__item", 31514 ...selectionProps 31515 } 31516 ) }), 31517 /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)( 31518 Stack, 31519 { 31520 direction: "row", 31521 gap: "md", 31522 justify: "start", 31523 align: hasOnlyMediaAndTitle ? "center" : "flex-start", 31524 style: { flex: 1, minWidth: 0 }, 31525 children: [ 31526 renderedMediaField, 31527 /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)( 31528 Stack, 31529 { 31530 direction: "column", 31531 gap: "xs", 31532 className: "dataviews-view-list__field-wrapper", 31533 children: [ 31534 /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)(Stack, { direction: "row", align: "center", children: [ 31535 /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31536 "div", 31537 { 31538 className: "dataviews-title-field dataviews-view-list__title-field", 31539 id: labelId, 31540 children: renderedTitleField 31541 } 31542 ), 31543 usedActions 31544 ] }), 31545 renderDescription && /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("div", { className: "dataviews-view-list__field", children: /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31546 descriptionField2.render, 31547 { 31548 item, 31549 field: descriptionField2 31550 } 31551 ) }), 31552 /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31553 "div", 31554 { 31555 className: "dataviews-view-list__fields", 31556 id: descriptionId, 31557 children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)( 31558 "div", 31559 { 31560 className: "dataviews-view-list__field", 31561 children: [ 31562 /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31563 VisuallyHidden, 31564 { 31565 className: "dataviews-view-list__field-label", 31566 render: /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("span", {}), 31567 children: field.label 31568 } 31569 ), 31570 /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("span", { className: "dataviews-view-list__field-value", children: /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31571 field.render, 31572 { 31573 item, 31574 field 31575 } 31576 ) }) 31577 ] 31578 }, 31579 field.id 31580 )) 31581 } 31582 ) 31583 ] 31584 } 31585 ) 31586 ] 31587 } 31588 ) 31589 ] 31590 } 31591 ) 31592 } 31593 ); 31594 } 31595 function isDefined2(item) { 31596 return !!item; 31597 } 31598 function ViewList(props) { 31599 const { 31600 actions, 31601 data, 31602 fields, 31603 getItemId, 31604 isLoading, 31605 onChangeSelection, 31606 selection, 31607 view, 31608 className, 31609 empty 31610 } = props; 31611 const baseId = (0, import_compose8.useInstanceId)(ViewList, "view-list"); 31612 const isDelayedLoading = useDelayedLoading(!!isLoading); 31613 const { paginationInfo } = (0, import_element86.useContext)(dataviews_context_default); 31614 const selectedItem = data?.findLast( 31615 (item) => selection.includes(getItemId(item)) 31616 ); 31617 const titleField = fields.find((field) => field.id === view.titleField); 31618 const mediaField = fields.find((field) => field.id === view.mediaField); 31619 const descriptionField2 = fields.find( 31620 (field) => field.id === view.descriptionField 31621 ); 31622 const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined2); 31623 const { getSelectionProps } = useSelectionProps({ 31624 data, 31625 getItemId, 31626 isItemSelectable: () => true, 31627 selection, 31628 onChangeSelection, 31629 selectionMode: "single-required", 31630 shouldSelectOnClick: true 31631 }); 31632 const generateCompositeItemIdPrefix = (0, import_element86.useCallback)( 31633 (item) => `$baseId}-$getItemId(item)}`, 31634 [baseId, getItemId] 31635 ); 31636 const isActiveCompositeItem = (0, import_element86.useCallback)( 31637 (item, idToCheck) => { 31638 return idToCheck.startsWith( 31639 generateCompositeItemIdPrefix(item) 31640 ); 31641 }, 31642 [generateCompositeItemIdPrefix] 31643 ); 31644 const [activeCompositeId, setActiveCompositeId] = (0, import_element86.useState)(void 0); 31645 const compositeRef = (0, import_element86.useRef)(null); 31646 (0, import_element86.useEffect)(() => { 31647 if (selectedItem) { 31648 setActiveCompositeId( 31649 generateItemWrapperCompositeId( 31650 generateCompositeItemIdPrefix(selectedItem) 31651 ) 31652 ); 31653 } 31654 }, [selectedItem, generateCompositeItemIdPrefix]); 31655 const activeItemIndex = data.findIndex( 31656 (item) => isActiveCompositeItem(item, activeCompositeId ?? "") 31657 ); 31658 const previousActiveItemIndex = (0, import_compose8.usePrevious)(activeItemIndex); 31659 const isActiveIdInList = activeItemIndex !== -1; 31660 const selectCompositeItem = (0, import_element86.useCallback)( 31661 (targetIndex, generateCompositeId) => { 31662 const clampedIndex = Math.min( 31663 data.length - 1, 31664 Math.max(0, targetIndex) 31665 ); 31666 if (!data[clampedIndex]) { 31667 return; 31668 } 31669 const itemIdPrefix = generateCompositeItemIdPrefix( 31670 data[clampedIndex] 31671 ); 31672 const targetCompositeItemId = generateCompositeId(itemIdPrefix); 31673 setActiveCompositeId(targetCompositeItemId); 31674 if (compositeRef.current?.contains( 31675 compositeRef.current.ownerDocument.activeElement 31676 )) { 31677 document.getElementById(targetCompositeItemId)?.focus(); 31678 } 31679 }, 31680 [data, generateCompositeItemIdPrefix] 31681 ); 31682 (0, import_element86.useEffect)(() => { 31683 const wasActiveIdInList = previousActiveItemIndex !== void 0 && previousActiveItemIndex !== -1; 31684 if (!isActiveIdInList && wasActiveIdInList) { 31685 selectCompositeItem( 31686 previousActiveItemIndex, 31687 generateItemWrapperCompositeId 31688 ); 31689 } 31690 }, [isActiveIdInList, selectCompositeItem, previousActiveItemIndex]); 31691 const onDropdownTriggerKeyDown = (0, import_element86.useCallback)( 31692 (event) => { 31693 if (event.key === "ArrowDown") { 31694 event.preventDefault(); 31695 event.stopPropagation(); 31696 selectCompositeItem( 31697 activeItemIndex + 1, 31698 generateDropdownTriggerCompositeId 31699 ); 31700 } 31701 if (event.key === "ArrowUp") { 31702 event.preventDefault(); 31703 event.stopPropagation(); 31704 selectCompositeItem( 31705 activeItemIndex - 1, 31706 generateDropdownTriggerCompositeId 31707 ); 31708 } 31709 }, 31710 [selectCompositeItem, activeItemIndex] 31711 ); 31712 const hasData = !!data?.length; 31713 const groupField = view.groupBy?.field ? fields.find((field) => field.id === view.groupBy?.field) : null; 31714 const dataByGroup = hasData && groupField ? getDataByGroup(data, groupField) : null; 31715 const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; 31716 const hasMoreItems = isInfiniteScroll && (view.startPosition ?? 1) + (view.perPage ?? 0) < paginationInfo.totalItems; 31717 const listClassName = clsx_default("dataviews-view-list", className, { 31718 [`has-$view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes(view.layout.density), 31719 "is-refreshing": !isInfiniteScroll && isDelayedLoading 31720 }); 31721 const compositeProps = { 31722 ref: compositeRef, 31723 id: baseId, 31724 render: /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("div", {}), 31725 activeId: activeCompositeId, 31726 setActiveId: setActiveCompositeId, 31727 inert: !isInfiniteScroll && !!isLoading ? "true" : void 0 31728 }; 31729 if (!hasData) { 31730 return /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31731 "div", 31732 { 31733 className: clsx_default("dataviews-no-results", { 31734 "is-refreshing": isDelayedLoading 31735 }), 31736 children: empty 31737 } 31738 ); 31739 } 31740 if (hasData && groupField && dataByGroup) { 31741 return /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31742 import_components11.Composite, 31743 { 31744 ...compositeProps, 31745 className: "dataviews-view-list__group", 31746 role: "grid", 31747 children: /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(Stack, { direction: "column", gap: "lg", className: listClassName, children: Array.from(dataByGroup.entries()).map( 31748 ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)(Stack, { direction: "column", children: [ 31749 /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("h3", { className: "dataviews-view-list__group-header", children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n28.sprintf)( 31750 // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". 31751 (0, import_i18n28.__)("%1$s: %2$s"), 31752 groupField.label, 31753 groupName 31754 ) }), 31755 groupItems.map((item) => { 31756 const id = generateCompositeItemIdPrefix(item); 31757 return /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31758 ListItem, 31759 { 31760 view, 31761 idPrefix: id, 31762 actions, 31763 item, 31764 isSelected: item === selectedItem, 31765 selectionProps: getSelectionProps( 31766 getItemId(item) 31767 ), 31768 mediaField, 31769 titleField, 31770 descriptionField: descriptionField2, 31771 otherFields, 31772 onDropdownTriggerKeyDown 31773 }, 31774 id 31775 ); 31776 }) 31777 ] }, groupName) 31778 ) }) 31779 } 31780 ); 31781 } 31782 return /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)(import_jsx_runtime129.Fragment, { children: [ 31783 /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31784 import_components11.Composite, 31785 { 31786 ...compositeProps, 31787 className: listClassName, 31788 role: view.infiniteScrollEnabled ? "feed" : "grid", 31789 children: data.map((item, index2) => { 31790 const id = generateCompositeItemIdPrefix(item); 31791 return /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31792 ListItem, 31793 { 31794 view, 31795 idPrefix: id, 31796 actions, 31797 item, 31798 isSelected: item === selectedItem, 31799 selectionProps: getSelectionProps( 31800 getItemId(item) 31801 ), 31802 mediaField, 31803 titleField, 31804 descriptionField: descriptionField2, 31805 otherFields, 31806 onDropdownTriggerKeyDown, 31807 posinset: view.infiniteScrollEnabled ? index2 + 1 : void 0 31808 }, 31809 id 31810 ); 31811 }) 31812 } 31813 ), 31814 (hasMoreItems || isInfiniteScroll && isLoading) && // Keep the spinner's height reserved while loading more so the 31815 // scroll position doesn't bounce. Hidden, and silent to a11y, 31816 // while idle. 31817 /* @__PURE__ */ (0, import_jsx_runtime129.jsx)( 31818 "p", 31819 { 31820 className: "dataviews-loading-more", 31821 "aria-hidden": !isLoading, 31822 children: /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(import_components11.Spinner, {}) 31823 } 31824 ) 31825 ] }); 31826 } 31827 31828 // packages/dataviews/build-module/components/dataviews-layouts/activity/index.mjs 31829 var import_components12 = __toESM(require_components(), 1); 31830 31831 // packages/dataviews/build-module/components/dataviews-layouts/activity/activity-group.mjs 31832 var import_i18n29 = __toESM(require_i18n(), 1); 31833 var import_element87 = __toESM(require_element(), 1); 31834 var import_jsx_runtime130 = __toESM(require_jsx_runtime(), 1); 31835 function ActivityGroup({ 31836 groupName, 31837 groupData, 31838 groupField, 31839 showLabel = true, 31840 children 31841 }) { 31842 const groupHeader = showLabel ? (0, import_element87.createInterpolateElement)( 31843 // translators: %s: The label of the field e.g. "Status". 31844 (0, import_i18n29.sprintf)((0, import_i18n29.__)("%s: <groupName />"), groupField.label).trim(), 31845 { 31846 groupName: /* @__PURE__ */ (0, import_jsx_runtime130.jsx)( 31847 groupField.render, 31848 { 31849 item: groupData[0], 31850 field: groupField 31851 } 31852 ) 31853 } 31854 ) : /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(groupField.render, { item: groupData[0], field: groupField }); 31855 return /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)( 31856 Stack, 31857 { 31858 direction: "column", 31859 className: "dataviews-view-activity__group", 31860 children: [ 31861 /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("h3", { className: "dataviews-view-activity__group-header", children: groupHeader }), 31862 children 31863 ] 31864 }, 31865 groupName 31866 ); 31867 } 31868 31869 // packages/dataviews/build-module/components/dataviews-layouts/activity/activity-item.mjs 31870 var import_element88 = __toESM(require_element(), 1); 31871 var import_data5 = __toESM(require_data(), 1); 31872 var import_compose9 = __toESM(require_compose(), 1); 31873 var import_jsx_runtime131 = __toESM(require_jsx_runtime(), 1); 31874 function ActivityItem(props) { 31875 const { 31876 view, 31877 actions, 31878 item, 31879 titleField, 31880 mediaField, 31881 descriptionField: descriptionField2, 31882 otherFields, 31883 posinset, 31884 onClickItem, 31885 renderItemLink, 31886 isItemClickable: isItemClickable2 31887 } = props; 31888 const { 31889 showTitle = true, 31890 showMedia = true, 31891 showDescription = true, 31892 infiniteScrollEnabled 31893 } = view; 31894 const itemRef = (0, import_element88.useRef)(null); 31895 const registry = (0, import_data5.useRegistry)(); 31896 const { paginationInfo } = (0, import_element88.useContext)(dataviews_context_default); 31897 const { primaryActions, eligibleActions } = (0, import_element88.useMemo)(() => { 31898 const _eligibleActions = actions.filter( 31899 (action) => !action.isEligible || action.isEligible(item) 31900 ); 31901 const _primaryActions = _eligibleActions.filter( 31902 (action) => action.isPrimary 31903 ); 31904 return { 31905 primaryActions: _primaryActions, 31906 eligibleActions: _eligibleActions 31907 }; 31908 }, [actions, item]); 31909 const isMobileViewport = (0, import_compose9.useViewportMatch)("medium", "<"); 31910 const density = view.layout?.density ?? "balanced"; 31911 const mediaContent = showMedia && density !== "compact" && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime131.jsx)( 31912 mediaField.render, 31913 { 31914 item, 31915 field: mediaField, 31916 config: { 31917 sizes: density === "comfortable" ? "32px" : "24px" 31918 } 31919 } 31920 ) : null; 31921 const renderedMediaField = /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { className: "dataviews-view-activity__item-type-icon", children: mediaContent || /* @__PURE__ */ (0, import_jsx_runtime131.jsx)( 31922 "span", 31923 { 31924 className: "dataviews-view-activity__item-bullet", 31925 "aria-hidden": "true" 31926 } 31927 ) }); 31928 const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(titleField.render, { item, field: titleField }) : null; 31929 const verticalGap = (0, import_element88.useMemo)(() => { 31930 switch (density) { 31931 case "comfortable": 31932 return "md"; 31933 default: 31934 return "sm"; 31935 } 31936 }, [density]); 31937 return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)( 31938 "div", 31939 { 31940 ref: itemRef, 31941 role: infiniteScrollEnabled ? "article" : void 0, 31942 "aria-posinset": posinset, 31943 "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0, 31944 className: clsx_default( 31945 "dataviews-view-activity__item", 31946 density === "compact" && "is-compact", 31947 density === "balanced" && "is-balanced", 31948 density === "comfortable" && "is-comfortable" 31949 ), 31950 children: /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(Stack, { direction: "row", gap: "lg", justify: "start", align: "flex-start", children: [ 31951 /* @__PURE__ */ (0, import_jsx_runtime131.jsx)( 31952 Stack, 31953 { 31954 direction: "column", 31955 gap: "xs", 31956 align: "center", 31957 className: "dataviews-view-activity__item-type", 31958 children: renderedMediaField 31959 } 31960 ), 31961 /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)( 31962 Stack, 31963 { 31964 direction: "column", 31965 gap: verticalGap, 31966 align: "flex-start", 31967 className: "dataviews-view-activity__item-content", 31968 children: [ 31969 renderedTitleField && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)( 31970 ItemClickWrapper, 31971 { 31972 item, 31973 isItemClickable: isItemClickable2, 31974 onClickItem, 31975 renderItemLink, 31976 className: "dataviews-view-activity__item-title", 31977 children: renderedTitleField 31978 } 31979 ), 31980 showDescription && descriptionField2 && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { className: "dataviews-view-activity__item-description", children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)( 31981 descriptionField2.render, 31982 { 31983 item, 31984 field: descriptionField2 31985 } 31986 ) }), 31987 /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { className: "dataviews-view-activity__item-fields", children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)( 31988 "div", 31989 { 31990 className: "dataviews-view-activity__item-field", 31991 children: [ 31992 /* @__PURE__ */ (0, import_jsx_runtime131.jsx)( 31993 VisuallyHidden, 31994 { 31995 className: "dataviews-view-activity__item-field-label", 31996 render: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("span", {}), 31997 children: field.label 31998 } 31999 ), 32000 /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("span", { className: "dataviews-view-activity__item-field-value", children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)( 32001 field.render, 32002 { 32003 item, 32004 field 32005 } 32006 ) }) 32007 ] 32008 }, 32009 field.id 32010 )) }), 32011 !!primaryActions?.length && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)( 32012 PrimaryActions, 32013 { 32014 item, 32015 actions: primaryActions, 32016 registry, 32017 buttonVariant: "secondary" 32018 } 32019 ) 32020 ] 32021 } 32022 ), 32023 (primaryActions.length < eligibleActions.length || // Since we hide primary actions on mobile, we need to show the menu 32024 // there if there are any actions at all. 32025 isMobileViewport && // At the same time, only show the menu if there are actions to show. 32026 eligibleActions.length > 0) && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { className: "dataviews-view-activity__item-actions", children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)( 32027 ItemActions, 32028 { 32029 item, 32030 actions: eligibleActions, 32031 isCompact: true 32032 } 32033 ) }) 32034 ] }) 32035 } 32036 ); 32037 } 32038 var activity_item_default = ActivityItem; 32039 32040 // packages/dataviews/build-module/components/dataviews-layouts/activity/activity-items.mjs 32041 var import_react45 = __toESM(require_react(), 1); 32042 function isDefined3(item) { 32043 return !!item; 32044 } 32045 function ActivityItems(props) { 32046 const { data, fields, getItemId, view } = props; 32047 const titleField = fields.find((field) => field.id === view.titleField); 32048 const mediaField = fields.find((field) => field.id === view.mediaField); 32049 const descriptionField2 = fields.find( 32050 (field) => field.id === view.descriptionField 32051 ); 32052 const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined3); 32053 return data.map((item, index2) => { 32054 return /* @__PURE__ */ (0, import_react45.createElement)( 32055 activity_item_default, 32056 { 32057 ...props, 32058 key: getItemId(item), 32059 item, 32060 mediaField, 32061 titleField, 32062 descriptionField: descriptionField2, 32063 otherFields, 32064 posinset: view.infiniteScrollEnabled ? index2 + 1 : void 0 32065 } 32066 ); 32067 }); 32068 } 32069 32070 // packages/dataviews/build-module/components/dataviews-layouts/activity/index.mjs 32071 var import_jsx_runtime132 = __toESM(require_jsx_runtime(), 1); 32072 function ViewActivity(props) { 32073 const { empty, data, fields, isLoading, view, className } = props; 32074 const isDelayedLoading = useDelayedLoading(!!isLoading); 32075 const hasData = !!data?.length; 32076 const groupField = view.groupBy?.field ? fields.find((field) => field.id === view.groupBy?.field) : null; 32077 const dataByGroup = hasData && groupField ? getDataByGroup(data, groupField) : null; 32078 const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; 32079 if (!hasData) { 32080 return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)( 32081 "div", 32082 { 32083 className: clsx_default("dataviews-no-results", { 32084 "is-refreshing": isDelayedLoading 32085 }), 32086 children: empty 32087 } 32088 ); 32089 } 32090 const isInert = !isInfiniteScroll && !!isLoading; 32091 const wrapperClassName = clsx_default("dataviews-view-activity", className, { 32092 "is-refreshing": !isInfiniteScroll && isDelayedLoading 32093 }); 32094 const groupedEntries = dataByGroup ? Array.from(dataByGroup.entries()) : []; 32095 if (hasData && groupField && dataByGroup) { 32096 return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)( 32097 Stack, 32098 { 32099 direction: "column", 32100 gap: "sm", 32101 className: wrapperClassName, 32102 inert: isInert ? "true" : void 0, 32103 children: groupedEntries.map( 32104 ([groupName, groupData]) => /* @__PURE__ */ (0, import_jsx_runtime132.jsx)( 32105 ActivityGroup, 32106 { 32107 groupName, 32108 groupData, 32109 groupField, 32110 showLabel: view.groupBy?.showLabel !== false, 32111 children: /* @__PURE__ */ (0, import_jsx_runtime132.jsx)( 32112 ActivityItems, 32113 { 32114 ...props, 32115 data: groupData 32116 } 32117 ) 32118 }, 32119 groupName 32120 ) 32121 ) 32122 } 32123 ); 32124 } 32125 return /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment, { children: [ 32126 /* @__PURE__ */ (0, import_jsx_runtime132.jsx)( 32127 "div", 32128 { 32129 className: wrapperClassName, 32130 role: view.infiniteScrollEnabled ? "feed" : void 0, 32131 inert: isInert ? "true" : void 0, 32132 children: /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(ActivityItems, { ...props }) 32133 } 32134 ), 32135 isInfiniteScroll && isLoading && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(import_components12.Spinner, {}) }) 32136 ] }); 32137 } 32138 32139 // packages/dataviews/build-module/components/dataviews-layouts/picker-grid/index.mjs 32140 var import_components15 = __toESM(require_components(), 1); 32141 var import_i18n32 = __toESM(require_i18n(), 1); 32142 var import_compose10 = __toESM(require_compose(), 1); 32143 var import_element91 = __toESM(require_element(), 1); 32144 32145 // packages/dataviews/build-module/components/dataviews-picker-footer/index.mjs 32146 var import_components14 = __toESM(require_components(), 1); 32147 var import_data6 = __toESM(require_data(), 1); 32148 var import_element90 = __toESM(require_element(), 1); 32149 var import_i18n31 = __toESM(require_i18n(), 1); 32150 32151 // packages/dataviews/build-module/components/dataviews-pagination/index.mjs 32152 var import_components13 = __toESM(require_components(), 1); 32153 var import_element89 = __toESM(require_element(), 1); 32154 var import_i18n30 = __toESM(require_i18n(), 1); 32155 var import_jsx_runtime133 = __toESM(require_jsx_runtime(), 1); 32156 function hasPaginationControls(view, paginationInfo) { 32157 return !view.infiniteScrollEnabled && paginationInfo.totalItems > 0 && paginationInfo.totalPages > 1; 32158 } 32159 function DataViewsPagination() { 32160 const { view, onChangeView, paginationInfo } = (0, import_element89.useContext)(dataviews_context_default); 32161 if (!hasPaginationControls(view, paginationInfo)) { 32162 return null; 32163 } 32164 const { totalPages } = paginationInfo; 32165 const currentPage = view.page ?? 1; 32166 const pageSelectOptions = Array.from(Array(totalPages)).map( 32167 (_, i2) => { 32168 const page = i2 + 1; 32169 return { 32170 value: page.toString(), 32171 label: page.toString(), 32172 "aria-label": currentPage === page ? (0, import_i18n30.sprintf)( 32173 // translators: 1: current page number. 2: total number of pages. 32174 (0, import_i18n30.__)("Page %1$d of %2$d"), 32175 currentPage, 32176 totalPages 32177 ) : page.toString() 32178 }; 32179 } 32180 ); 32181 return /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)( 32182 Stack, 32183 { 32184 direction: "row", 32185 className: "dataviews-pagination", 32186 justify: "end", 32187 align: "center", 32188 gap: "xl", 32189 children: [ 32190 /* @__PURE__ */ (0, import_jsx_runtime133.jsx)( 32191 Stack, 32192 { 32193 direction: "row", 32194 justify: "flex-start", 32195 align: "center", 32196 gap: "xs", 32197 className: "dataviews-pagination__page-select", 32198 children: (0, import_element89.createInterpolateElement)( 32199 (0, import_i18n30.sprintf)( 32200 // translators: 1: Current page number, 2: Total number of pages. 32201 (0, import_i18n30._x)("<div>Page</div>%1$s<div>of %2$d</div>", "paging"), 32202 "<CurrentPage />", 32203 totalPages 32204 ), 32205 { 32206 div: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { "aria-hidden": true }), 32207 // @ts-expect-error — Tag injected via sprintf argument, not visible in format string. 32208 CurrentPage: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)( 32209 import_components13.SelectControl, 32210 { 32211 "aria-label": (0, import_i18n30.__)("Current page"), 32212 value: currentPage.toString(), 32213 options: pageSelectOptions, 32214 onChange: (newValue) => { 32215 onChangeView({ 32216 ...view, 32217 page: +newValue 32218 }); 32219 }, 32220 size: "small", 32221 variant: "minimal" 32222 } 32223 ) 32224 } 32225 ) 32226 } 32227 ), 32228 /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)(Stack, { direction: "row", gap: "xs", align: "center", children: [ 32229 /* @__PURE__ */ (0, import_jsx_runtime133.jsx)( 32230 import_components13.Button, 32231 { 32232 onClick: () => onChangeView({ 32233 ...view, 32234 page: currentPage - 1 32235 }), 32236 disabled: currentPage === 1, 32237 accessibleWhenDisabled: true, 32238 label: (0, import_i18n30.__)("Previous page"), 32239 icon: (0, import_i18n30.isRTL)() ? next_default : previous_default, 32240 showTooltip: true, 32241 size: "compact", 32242 tooltipPosition: "top" 32243 } 32244 ), 32245 /* @__PURE__ */ (0, import_jsx_runtime133.jsx)( 32246 import_components13.Button, 32247 { 32248 onClick: () => onChangeView({ ...view, page: currentPage + 1 }), 32249 disabled: currentPage >= totalPages, 32250 accessibleWhenDisabled: true, 32251 label: (0, import_i18n30.__)("Next page"), 32252 icon: (0, import_i18n30.isRTL)() ? previous_default : next_default, 32253 showTooltip: true, 32254 size: "compact", 32255 tooltipPosition: "top" 32256 } 32257 ) 32258 ] }) 32259 ] 32260 } 32261 ); 32262 } 32263 var dataviews_pagination_default = (0, import_element89.memo)(DataViewsPagination); 32264 32265 // packages/dataviews/build-module/components/dataviews-picker-footer/index.mjs 32266 var import_jsx_runtime134 = __toESM(require_jsx_runtime(), 1); 32267 var EMPTY_ARRAY2 = []; 32268 function useIsMultiselectPicker(actions) { 32269 return (0, import_element90.useMemo)(() => { 32270 return !!actions?.length && actions?.every((action) => action.supportsBulk); 32271 }, [actions]); 32272 } 32273 function BulkSelectionCheckbox2({ 32274 selection, 32275 selectedItems, 32276 onChangeSelection, 32277 data, 32278 getItemId, 32279 disableSelectAll = false 32280 }) { 32281 const hasSelection = selection.length > 0; 32282 const areAllSelected = selectedItems.length === data.length; 32283 if (disableSelectAll) { 32284 return /* @__PURE__ */ (0, import_jsx_runtime134.jsx)( 32285 import_components14.CheckboxControl, 32286 { 32287 className: "dataviews-view-table-selection-checkbox", 32288 checked: hasSelection, 32289 disabled: !hasSelection, 32290 onChange: () => { 32291 onChangeSelection([]); 32292 }, 32293 "aria-label": (0, import_i18n31.__)("Deselect all") 32294 } 32295 ); 32296 } 32297 return /* @__PURE__ */ (0, import_jsx_runtime134.jsx)( 32298 import_components14.CheckboxControl, 32299 { 32300 className: "dataviews-view-table-selection-checkbox", 32301 checked: areAllSelected, 32302 indeterminate: !areAllSelected && !!selectedItems.length, 32303 onChange: () => { 32304 if (areAllSelected) { 32305 onChangeSelection( 32306 selection.filter( 32307 (id) => !data.some( 32308 (item) => id === getItemId(item) 32309 ) 32310 ) 32311 ); 32312 } else { 32313 const selectionSet = /* @__PURE__ */ new Set([ 32314 ...selection, 32315 ...data.map((item) => getItemId(item)) 32316 ]); 32317 onChangeSelection(Array.from(selectionSet)); 32318 } 32319 }, 32320 "aria-label": areAllSelected ? (0, import_i18n31.__)("Deselect all") : (0, import_i18n31.__)("Select all") 32321 } 32322 ); 32323 } 32324 function ActionButtons({ 32325 actions, 32326 items, 32327 selection 32328 }) { 32329 const registry = (0, import_data6.useRegistry)(); 32330 const [actionInProgress, setActionInProgress] = (0, import_element90.useState)( 32331 null 32332 ); 32333 return /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(Stack, { direction: "row", gap: "xs", children: actions.map((action) => { 32334 if (!("callback" in action)) { 32335 return null; 32336 } 32337 const { id, label, icon, isPrimary, callback } = action; 32338 const _label = typeof label === "string" ? label : label(items); 32339 const variant = isPrimary ? "primary" : "tertiary"; 32340 const isInProgress = id === actionInProgress; 32341 return /* @__PURE__ */ (0, import_jsx_runtime134.jsx)( 32342 import_components14.Button, 32343 { 32344 accessibleWhenDisabled: true, 32345 icon, 32346 disabled: isInProgress || !selection?.length, 32347 isBusy: isInProgress, 32348 onClick: async () => { 32349 setActionInProgress(id); 32350 await callback(items, { 32351 registry 32352 }); 32353 setActionInProgress(null); 32354 }, 32355 size: "compact", 32356 variant, 32357 children: _label 32358 }, 32359 id 32360 ); 32361 }) }); 32362 } 32363 function PickerBulkSelectionInfo() { 32364 const { 32365 data, 32366 selection, 32367 onChangeSelection, 32368 getItemId, 32369 actions = EMPTY_ARRAY2, 32370 paginationInfo, 32371 view 32372 } = (0, import_element90.useContext)(dataviews_context_default); 32373 const isMultiselect = useIsMultiselectPicker(actions); 32374 const selectedItems = (0, import_element90.useMemo)( 32375 () => data.filter((item) => selection.includes(getItemId(item))), 32376 [selection, getItemId, data] 32377 ); 32378 if (!actions.length) { 32379 return null; 32380 } 32381 const message2 = getFooterMessage( 32382 selection.length, 32383 data.length, 32384 paginationInfo.totalItems, 32385 !!view.infiniteScrollEnabled 32386 ); 32387 return /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)( 32388 Stack, 32389 { 32390 direction: "row", 32391 className: "dataviews-picker-footer__bulk-selection", 32392 gap: "md", 32393 align: "center", 32394 children: [ 32395 isMultiselect && /* @__PURE__ */ (0, import_jsx_runtime134.jsx)( 32396 BulkSelectionCheckbox2, 32397 { 32398 selection, 32399 selectedItems, 32400 onChangeSelection, 32401 data, 32402 getItemId, 32403 disableSelectAll: !!view.infiniteScrollEnabled 32404 } 32405 ), 32406 /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("span", { className: "dataviews-bulk-actions-footer__item-count", children: message2 }) 32407 ] 32408 } 32409 ); 32410 } 32411 function PickerActions() { 32412 const { 32413 data, 32414 selection, 32415 getItemId, 32416 actions = EMPTY_ARRAY2 32417 } = (0, import_element90.useContext)(dataviews_context_default); 32418 const selectedItems = (0, import_element90.useMemo)( 32419 () => data.filter((item) => selection.includes(getItemId(item))), 32420 [selection, getItemId, data] 32421 ); 32422 if (!actions.length) { 32423 return null; 32424 } 32425 return /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("div", { className: "dataviews-picker-footer__actions", children: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)( 32426 ActionButtons, 32427 { 32428 actions, 32429 items: selectedItems, 32430 selection 32431 } 32432 ) }); 32433 } 32434 function DataViewsPickerBulkActionToolbar() { 32435 return /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)(Stack, { direction: "row", gap: "md", align: "center", children: [ 32436 /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(PickerBulkSelectionInfo, {}), 32437 /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(PickerActions, {}) 32438 ] }); 32439 } 32440 function DataViewsPickerFooter() { 32441 const { 32442 actions = EMPTY_ARRAY2, 32443 paginationInfo, 32444 view 32445 } = (0, import_element90.useContext)(dataviews_context_default); 32446 const hasPagination = !view.infiniteScrollEnabled && !!paginationInfo.totalItems && paginationInfo.totalPages > 1; 32447 if (!actions.length && !hasPagination) { 32448 return null; 32449 } 32450 return /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)( 32451 Stack, 32452 { 32453 direction: "row", 32454 justify: "space-between", 32455 align: "center", 32456 className: "dataviews-footer", 32457 gap: "sm", 32458 children: [ 32459 /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(PickerBulkSelectionInfo, {}), 32460 /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(dataviews_pagination_default, {}), 32461 /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(PickerActions, {}) 32462 ] 32463 } 32464 ); 32465 } 32466 32467 // packages/dataviews/build-module/components/dataviews-layouts/picker-grid/index.mjs 32468 var import_jsx_runtime135 = __toESM(require_jsx_runtime(), 1); 32469 function GridItem3({ 32470 view, 32471 selection, 32472 onChangeSelection, 32473 selectionProps, 32474 getItemId, 32475 item, 32476 mediaField, 32477 titleField, 32478 descriptionField: descriptionField2, 32479 regularFields, 32480 badgeFields, 32481 config, 32482 posinset, 32483 setsize 32484 }) { 32485 const { showTitle = true, showMedia = true, showDescription = true } = view; 32486 const id = getItemId(item); 32487 const elementRef = (0, import_element91.useRef)(null); 32488 const isSelected2 = selection.includes(id); 32489 useIntersectionObserver(elementRef, posinset); 32490 const renderedMediaField = mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32491 mediaField.render, 32492 { 32493 item, 32494 field: mediaField, 32495 config 32496 } 32497 ) : null; 32498 const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(titleField.render, { item, field: titleField }) : null; 32499 return /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)( 32500 import_components15.Composite.Item, 32501 { 32502 ref: elementRef, 32503 "aria-label": titleField ? titleField.getValue({ item }) || (0, import_i18n32.__)("(no title)") : void 0, 32504 render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(Stack, { direction: "column", children, ...props }), 32505 role: "option", 32506 "aria-posinset": posinset, 32507 "aria-setsize": setsize, 32508 className: clsx_default("dataviews-view-picker-grid__card", { 32509 "is-selected": isSelected2 32510 }), 32511 "aria-selected": isSelected2, 32512 ...selectionProps, 32513 children: [ 32514 showMedia && renderedMediaField && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("div", { className: "dataviews-view-picker-grid__media", children: renderedMediaField }), 32515 showMedia && renderedMediaField && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32516 DataViewsSelectionCheckbox, 32517 { 32518 item, 32519 selection, 32520 onChangeSelection, 32521 getItemId, 32522 titleField, 32523 disabled: false, 32524 "aria-hidden": true, 32525 tabIndex: -1 32526 } 32527 ), 32528 showTitle && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32529 Stack, 32530 { 32531 direction: "row", 32532 justify: "space-between", 32533 className: "dataviews-view-picker-grid__title-actions", 32534 children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("div", { className: "dataviews-view-picker-grid__title-field dataviews-title-field", children: renderedTitleField }) 32535 } 32536 ), 32537 /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)(Stack, { direction: "column", gap: "xs", children: [ 32538 showDescription && descriptionField2?.render && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32539 descriptionField2.render, 32540 { 32541 item, 32542 field: descriptionField2 32543 } 32544 ), 32545 !!badgeFields?.length && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32546 Stack, 32547 { 32548 direction: "row", 32549 className: "dataviews-view-picker-grid__badge-fields", 32550 gap: "sm", 32551 wrap: "wrap", 32552 align: "top", 32553 justify: "flex-start", 32554 children: badgeFields.map((field) => { 32555 return ( 32556 /* @ts-expect-error `Badge` is text-only, but a badge field renders whatever its `render` returns. */ 32557 /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32558 Badge, 32559 { 32560 className: "dataviews-view-picker-grid__field-value", 32561 children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32562 field.render, 32563 { 32564 item, 32565 field 32566 } 32567 ) 32568 }, 32569 field.id 32570 ) 32571 ); 32572 }) 32573 } 32574 ), 32575 !!regularFields?.length && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32576 Stack, 32577 { 32578 direction: "column", 32579 className: "dataviews-view-picker-grid__fields", 32580 gap: "xs", 32581 children: regularFields.map((field) => { 32582 return /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32583 import_components15.Flex, 32584 { 32585 className: "dataviews-view-picker-grid__field", 32586 gap: 1, 32587 justify: "flex-start", 32588 expanded: true, 32589 style: { height: "auto" }, 32590 direction: "row", 32591 children: /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)(import_jsx_runtime135.Fragment, { children: [ 32592 /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(import_components15.FlexItem, { className: "dataviews-view-picker-grid__field-name", children: field.header }), 32593 /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32594 import_components15.FlexItem, 32595 { 32596 className: "dataviews-view-picker-grid__field-value", 32597 style: { maxHeight: "none" }, 32598 children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32599 field.render, 32600 { 32601 item, 32602 field 32603 } 32604 ) 32605 } 32606 ) 32607 ] }) 32608 }, 32609 field.id 32610 ); 32611 }) 32612 } 32613 ) 32614 ] }) 32615 ] 32616 }, 32617 id 32618 ); 32619 } 32620 function GridGroup({ 32621 groupName, 32622 groupField, 32623 showLabel = true, 32624 children 32625 }) { 32626 const headerId = (0, import_compose10.useInstanceId)( 32627 GridGroup, 32628 "dataviews-view-picker-grid-group__header" 32629 ); 32630 return /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)( 32631 Stack, 32632 { 32633 direction: "column", 32634 gap: "sm", 32635 role: "group", 32636 "aria-labelledby": headerId, 32637 children: [ 32638 /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32639 "h3", 32640 { 32641 className: "dataviews-view-picker-grid-group__header", 32642 id: headerId, 32643 children: showLabel ? (0, import_i18n32.sprintf)( 32644 // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". 32645 (0, import_i18n32.__)("%1$s: %2$s"), 32646 groupField.label, 32647 groupName 32648 ) : groupName 32649 } 32650 ), 32651 children 32652 ] 32653 }, 32654 groupName 32655 ); 32656 } 32657 function ViewPickerGrid({ 32658 actions, 32659 data, 32660 fields, 32661 getItemId, 32662 isLoading, 32663 onChangeSelection, 32664 selection, 32665 view, 32666 className, 32667 empty 32668 }) { 32669 const { resizeObserverRef, paginationInfo, itemListLabel } = (0, import_element91.useContext)(dataviews_context_default); 32670 const titleField = fields.find( 32671 (field) => field.id === view?.titleField 32672 ); 32673 const mediaField = fields.find( 32674 (field) => field.id === view?.mediaField 32675 ); 32676 const descriptionField2 = fields.find( 32677 (field) => field.id === view?.descriptionField 32678 ); 32679 const otherFields = view.fields ?? []; 32680 const { regularFields, badgeFields } = otherFields.reduce( 32681 (accumulator, fieldId) => { 32682 const field = fields.find((f2) => f2.id === fieldId); 32683 if (!field) { 32684 return accumulator; 32685 } 32686 const key = view.layout?.badgeFields?.includes(fieldId) ? "badgeFields" : "regularFields"; 32687 accumulator[key].push(field); 32688 return accumulator; 32689 }, 32690 { regularFields: [], badgeFields: [] } 32691 ); 32692 const hasData = !!data?.length; 32693 const usedPreviewSize = view.layout?.previewSize; 32694 const isMultiselect = useIsMultiselectPicker(actions); 32695 const size4 = "900px"; 32696 const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; 32697 const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; 32698 const isInfiniteScroll = (view.infiniteScrollEnabled && !dataByGroup) ?? false; 32699 const orderedData = dataByGroup ? Array.from(dataByGroup.values()).flat() : data; 32700 const { getSelectionProps } = useSelectionProps({ 32701 data: orderedData, 32702 getItemId, 32703 isItemSelectable: () => true, 32704 selection, 32705 onChangeSelection, 32706 selectionMode: isMultiselect ? "multi" : "single-clearable", 32707 shouldSelectOnClick: true 32708 }); 32709 const currentPage = view?.page ?? 1; 32710 const perPage = view?.perPage ?? 0; 32711 const setSize = isInfiniteScroll ? paginationInfo?.totalItems : void 0; 32712 const isMediaContain = view.layout?.mediaFit === "contain"; 32713 const gridColumns = useGridColumns(); 32714 const placeholdersNeeded = usePlaceholdersNeeded( 32715 data, 32716 isInfiniteScroll, 32717 gridColumns 32718 ); 32719 return /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)(import_jsx_runtime135.Fragment, { 32720 // Render multiple groups. 32721 children: [ 32722 hasData && groupField && dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32723 import_components15.Composite, 32724 { 32725 virtualFocus: true, 32726 orientation: "horizontal", 32727 role: "listbox", 32728 "aria-multiselectable": isMultiselect, 32729 className: clsx_default( 32730 "dataviews-view-picker-grid", 32731 className, 32732 { 32733 [`has-$view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( 32734 view.layout.density 32735 ), 32736 "has-media-fit-contain": isMediaContain 32737 } 32738 ), 32739 "aria-label": itemListLabel, 32740 render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32741 Stack, 32742 { 32743 direction: "column", 32744 gap: "lg", 32745 children, 32746 ...props 32747 } 32748 ), 32749 children: Array.from(dataByGroup.entries()).map( 32750 ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32751 GridGroup, 32752 { 32753 groupName, 32754 groupField, 32755 showLabel: view.groupBy?.showLabel !== false, 32756 children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32757 GridItems, 32758 { 32759 previewSize: usedPreviewSize, 32760 "aria-busy": isLoading, 32761 ref: resizeObserverRef, 32762 children: groupItems.map((item) => { 32763 const posInSet = item.position ?? (currentPage - 1) * perPage + data.indexOf(item) + 1; 32764 return /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32765 GridItem3, 32766 { 32767 view, 32768 selection, 32769 onChangeSelection, 32770 selectionProps: getSelectionProps( 32771 getItemId(item) 32772 ), 32773 getItemId, 32774 item, 32775 mediaField, 32776 titleField, 32777 descriptionField: descriptionField2, 32778 regularFields, 32779 badgeFields, 32780 config: { 32781 sizes: size4 32782 }, 32783 posinset: posInSet, 32784 setsize: setSize 32785 }, 32786 getItemId(item) 32787 ); 32788 }) 32789 } 32790 ) 32791 }, 32792 groupName 32793 ) 32794 ) 32795 } 32796 ), 32797 // Render a single grid with all data. 32798 hasData && !dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)( 32799 import_components15.Composite, 32800 { 32801 render: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32802 GridItems, 32803 { 32804 className: clsx_default( 32805 "dataviews-view-picker-grid", 32806 className, 32807 { 32808 [`has-$view.layout?.density}-density`]: view.layout?.density && [ 32809 "compact", 32810 "comfortable" 32811 ].includes(view.layout.density), 32812 "has-media-fit-contain": isMediaContain 32813 } 32814 ), 32815 previewSize: usedPreviewSize, 32816 "aria-busy": isLoading, 32817 ref: resizeObserverRef 32818 } 32819 ), 32820 virtualFocus: true, 32821 orientation: "horizontal", 32822 role: "listbox", 32823 "aria-multiselectable": isMultiselect, 32824 "aria-label": itemListLabel, 32825 children: [ 32826 Array.from({ length: placeholdersNeeded }).map( 32827 (_, index2) => /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32828 import_components15.Composite.Item, 32829 { 32830 render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32831 Stack, 32832 { 32833 direction: "column", 32834 children, 32835 ...props 32836 } 32837 ), 32838 role: "option", 32839 "aria-hidden": true, 32840 tabIndex: -1, 32841 className: "dataviews-view-picker-grid__card dataviews-view-picker-grid__placeholder" 32842 }, 32843 `placeholder-$index2}` 32844 ) 32845 ), 32846 data.map((item) => { 32847 const posinset = item.position; 32848 return /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32849 GridItem3, 32850 { 32851 view, 32852 selection, 32853 onChangeSelection, 32854 selectionProps: getSelectionProps( 32855 getItemId(item) 32856 ), 32857 getItemId, 32858 item, 32859 mediaField, 32860 titleField, 32861 descriptionField: descriptionField2, 32862 regularFields, 32863 badgeFields, 32864 config: { 32865 sizes: size4 32866 }, 32867 posinset, 32868 setsize: setSize 32869 }, 32870 getItemId(item) 32871 ); 32872 }) 32873 ] 32874 } 32875 ), 32876 // Render empty state. 32877 !hasData && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)( 32878 "div", 32879 { 32880 className: clsx_default({ 32881 "dataviews-loading": isLoading, 32882 "dataviews-no-results": !isLoading 32883 }), 32884 children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(import_components15.Spinner, {}) }) : empty 32885 } 32886 ), 32887 hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(import_components15.Spinner, {}) }) 32888 ] 32889 }); 32890 } 32891 var picker_grid_default = ViewPickerGrid; 32892 32893 // packages/dataviews/build-module/components/dataviews-layouts/picker-table/index.mjs 32894 var import_i18n33 = __toESM(require_i18n(), 1); 32895 var import_components16 = __toESM(require_components(), 1); 32896 var import_element92 = __toESM(require_element(), 1); 32897 var import_jsx_runtime136 = __toESM(require_jsx_runtime(), 1); 32898 function TableColumnField2({ 32899 item, 32900 fields, 32901 column, 32902 align 32903 }) { 32904 const field = fields.find((f2) => f2.id === column); 32905 if (!field) { 32906 return null; 32907 } 32908 const className = clsx_default("dataviews-view-table__cell-content-wrapper", { 32909 "dataviews-view-table__cell-align-end": align === "end", 32910 "dataviews-view-table__cell-align-center": align === "center" 32911 }); 32912 return /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(field.render, { item, field }) }); 32913 } 32914 function TableRow2({ 32915 item, 32916 fields, 32917 id, 32918 view, 32919 titleField, 32920 mediaField, 32921 descriptionField: descriptionField2, 32922 selection, 32923 getItemId, 32924 onChangeSelection, 32925 selectionProps, 32926 posinset 32927 }) { 32928 const { paginationInfo } = (0, import_element92.useContext)(dataviews_context_default); 32929 const isSelected2 = selection.includes(id); 32930 const [isHovered, setIsHovered] = (0, import_element92.useState)(false); 32931 const elementRef = (0, import_element92.useRef)(null); 32932 useIntersectionObserver(elementRef, posinset); 32933 const { 32934 showTitle = true, 32935 showMedia = true, 32936 showDescription = true, 32937 infiniteScrollEnabled 32938 } = view; 32939 const handleMouseEnter = () => { 32940 setIsHovered(true); 32941 }; 32942 const handleMouseLeave = () => { 32943 setIsHovered(false); 32944 }; 32945 const columns = getTableColumns(view, fields); 32946 const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField2 && showDescription; 32947 return /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)( 32948 import_components16.Composite.Item, 32949 { 32950 ref: elementRef, 32951 render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime136.jsx)( 32952 "tr", 32953 { 32954 className: clsx_default("dataviews-view-table__row", { 32955 "is-selected": isSelected2, 32956 "is-hovered": isHovered 32957 }), 32958 onMouseEnter: handleMouseEnter, 32959 onMouseLeave: handleMouseLeave, 32960 children, 32961 ...props 32962 } 32963 ), 32964 "aria-selected": isSelected2, 32965 "aria-setsize": paginationInfo.totalItems || void 0, 32966 "aria-posinset": posinset, 32967 role: infiniteScrollEnabled ? "article" : "option", 32968 onClickCapture: selectionProps.onClickCapture, 32969 onClick: selectionProps.onClick, 32970 onMouseDown: (event) => { 32971 if (event.button !== 0) { 32972 return; 32973 } 32974 event.currentTarget.parentElement?.focus({ 32975 preventScroll: true 32976 }); 32977 selectionProps.onMouseDown(event); 32978 }, 32979 children: [ 32980 /* @__PURE__ */ (0, import_jsx_runtime136.jsx)( 32981 "td", 32982 { 32983 className: "dataviews-view-table__checkbox-column", 32984 role: "presentation", 32985 children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("div", { className: "dataviews-view-table__cell-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)( 32986 DataViewsSelectionCheckbox, 32987 { 32988 item, 32989 selection, 32990 onChangeSelection, 32991 getItemId, 32992 titleField, 32993 disabled: false, 32994 "aria-hidden": true, 32995 tabIndex: -1 32996 } 32997 ) }) 32998 } 32999 ), 33000 hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime136.jsx)( 33001 "td", 33002 { 33003 role: "presentation", 33004 children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)( 33005 column_primary_default, 33006 { 33007 item, 33008 titleField: showTitle ? titleField : void 0, 33009 mediaField: showMedia ? mediaField : void 0, 33010 descriptionField: showDescription ? descriptionField2 : void 0, 33011 isItemClickable: () => false 33012 } 33013 ) 33014 } 33015 ), 33016 columns.map((column) => { 33017 const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; 33018 return /* @__PURE__ */ (0, import_jsx_runtime136.jsx)( 33019 "td", 33020 { 33021 style: { 33022 width, 33023 maxWidth, 33024 minWidth 33025 }, 33026 role: "presentation", 33027 children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)( 33028 TableColumnField2, 33029 { 33030 fields, 33031 item, 33032 column, 33033 align 33034 } 33035 ) 33036 }, 33037 column 33038 ); 33039 }) 33040 ] 33041 }, 33042 id 33043 ); 33044 } 33045 function ViewPickerTable({ 33046 actions, 33047 data, 33048 fields, 33049 getItemId, 33050 isLoading = false, 33051 onChangeView, 33052 onChangeSelection, 33053 selection, 33054 setOpenedFilter, 33055 view, 33056 className, 33057 empty 33058 }) { 33059 const headerMenuRefs = (0, import_element92.useRef)(/* @__PURE__ */ new Map()); 33060 const headerMenuToFocusRef = (0, import_element92.useRef)(void 0); 33061 const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, import_element92.useState)(); 33062 const isMultiselect = useIsMultiselectPicker(actions) ?? false; 33063 (0, import_element92.useEffect)(() => { 33064 if (headerMenuToFocusRef.current) { 33065 headerMenuToFocusRef.current.focus(); 33066 headerMenuToFocusRef.current = void 0; 33067 } 33068 }); 33069 const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; 33070 const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; 33071 const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup; 33072 const orderedData = dataByGroup ? Array.from(dataByGroup.values()).flat() : data; 33073 const { getSelectionProps } = useSelectionProps({ 33074 data: orderedData, 33075 getItemId, 33076 isItemSelectable: () => true, 33077 selection, 33078 onChangeSelection, 33079 selectionMode: isMultiselect ? "multi" : "single-clearable", 33080 shouldSelectOnClick: true 33081 }); 33082 const tableNoticeId = (0, import_element92.useId)(); 33083 if (nextHeaderMenuToFocus) { 33084 headerMenuToFocusRef.current = nextHeaderMenuToFocus; 33085 setNextHeaderMenuToFocus(void 0); 33086 return; 33087 } 33088 const onHide = (field) => { 33089 const hidden = headerMenuRefs.current.get(field.id); 33090 const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : void 0; 33091 setNextHeaderMenuToFocus(fallback?.node); 33092 }; 33093 const hasData = !!data?.length; 33094 const titleField = fields.find((field) => field.id === view.titleField); 33095 const mediaField = fields.find((field) => field.id === view.mediaField); 33096 const descriptionField2 = fields.find( 33097 (field) => field.id === view.descriptionField 33098 ); 33099 const { showTitle = true, showMedia = true, showDescription = true } = view; 33100 const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField2 && showDescription; 33101 const columns = getTableColumns(view, fields); 33102 const headerMenuRef = (column, index2) => (node) => { 33103 if (node) { 33104 headerMenuRefs.current.set(column, { 33105 node, 33106 fallback: columns[index2 > 0 ? index2 - 1 : 1] 33107 }); 33108 } else { 33109 headerMenuRefs.current.delete(column); 33110 } 33111 }; 33112 return /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(import_jsx_runtime136.Fragment, { children: [ 33113 /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)( 33114 "table", 33115 { 33116 className: clsx_default( 33117 "dataviews-view-table", 33118 "dataviews-view-picker-table", 33119 className, 33120 { 33121 [`has-$view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes( 33122 view.layout.density 33123 ) 33124 } 33125 ), 33126 "aria-busy": isLoading, 33127 "aria-describedby": tableNoticeId, 33128 role: isInfiniteScroll ? "feed" : "listbox", 33129 children: [ 33130 /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("thead", { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)( 33131 "tr", 33132 { 33133 className: "dataviews-view-table__row", 33134 role: "presentation", 33135 children: [ 33136 /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("th", { className: "dataviews-view-table__checkbox-column", children: isMultiselect && /* @__PURE__ */ (0, import_jsx_runtime136.jsx)( 33137 BulkSelectionCheckbox, 33138 { 33139 selection, 33140 onChangeSelection, 33141 data, 33142 actions, 33143 getItemId, 33144 disableSelectAll: isInfiniteScroll 33145 } 33146 ) }), 33147 hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("th", { children: titleField && /* @__PURE__ */ (0, import_jsx_runtime136.jsx)( 33148 column_header_menu_default, 33149 { 33150 ref: headerMenuRef( 33151 titleField.id, 33152 0 33153 ), 33154 fieldId: titleField.id, 33155 view, 33156 fields, 33157 onChangeView, 33158 onHide, 33159 setOpenedFilter, 33160 canMove: false 33161 } 33162 ) }), 33163 columns.map((column, index2) => { 33164 const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {}; 33165 return /* @__PURE__ */ (0, import_jsx_runtime136.jsx)( 33166 "th", 33167 { 33168 style: { 33169 width, 33170 maxWidth, 33171 minWidth, 33172 textAlign: align 33173 }, 33174 "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : void 0, 33175 scope: "col", 33176 children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)( 33177 column_header_menu_default, 33178 { 33179 ref: headerMenuRef(column, index2), 33180 fieldId: column, 33181 view, 33182 fields, 33183 onChangeView, 33184 onHide, 33185 setOpenedFilter, 33186 canMove: view.layout?.enableMoving ?? true 33187 } 33188 ) 33189 }, 33190 column 33191 ); 33192 }) 33193 ] 33194 } 33195 ) }), 33196 hasData && groupField && dataByGroup ? Array.from(dataByGroup.entries()).map( 33197 ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)( 33198 import_components16.Composite, 33199 { 33200 virtualFocus: true, 33201 orientation: "vertical", 33202 render: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("tbody", { role: "group" }), 33203 children: [ 33204 /* @__PURE__ */ (0, import_jsx_runtime136.jsx)( 33205 "tr", 33206 { 33207 className: "dataviews-view-table__group-header-row", 33208 role: "presentation", 33209 children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)( 33210 "td", 33211 { 33212 colSpan: columns.length + (hasPrimaryColumn ? 1 : 0) + 1, 33213 className: "dataviews-view-table__group-header-cell", 33214 role: "presentation", 33215 children: view.groupBy?.showLabel === false ? groupName : (0, import_i18n33.sprintf)( 33216 // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". 33217 (0, import_i18n33.__)("%1$s: %2$s"), 33218 groupField.label, 33219 groupName 33220 ) 33221 } 33222 ) 33223 } 33224 ), 33225 groupItems.map((item, index2) => { 33226 const id = getItemId(item) || index2.toString(); 33227 return /* @__PURE__ */ (0, import_jsx_runtime136.jsx)( 33228 TableRow2, 33229 { 33230 item, 33231 fields, 33232 id, 33233 view, 33234 titleField, 33235 mediaField, 33236 descriptionField: descriptionField2, 33237 selection, 33238 getItemId, 33239 onChangeSelection, 33240 selectionProps: getSelectionProps( 33241 id 33242 ) 33243 }, 33244 getItemId(item) 33245 ); 33246 }) 33247 ] 33248 }, 33249 `group-$groupName}` 33250 ) 33251 ) : /* @__PURE__ */ (0, import_jsx_runtime136.jsx)( 33252 import_components16.Composite, 33253 { 33254 render: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("tbody", { role: "presentation" }), 33255 virtualFocus: true, 33256 orientation: "vertical", 33257 children: hasData && data.map((item, index2) => { 33258 const itemId = getItemId(item); 33259 const id = itemId || index2.toString(); 33260 const posinset = item.position; 33261 return /* @__PURE__ */ (0, import_jsx_runtime136.jsx)( 33262 TableRow2, 33263 { 33264 item, 33265 fields, 33266 id, 33267 view, 33268 titleField, 33269 mediaField, 33270 descriptionField: descriptionField2, 33271 selection, 33272 getItemId, 33273 onChangeSelection, 33274 selectionProps: getSelectionProps( 33275 id 33276 ), 33277 posinset 33278 }, 33279 itemId 33280 ); 33281 }) 33282 } 33283 ) 33284 ] 33285 } 33286 ), 33287 /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)( 33288 "div", 33289 { 33290 className: clsx_default({ 33291 "dataviews-loading": isLoading, 33292 "dataviews-no-results": !hasData && !isLoading 33293 }), 33294 id: tableNoticeId, 33295 children: [ 33296 !hasData && (isLoading ? /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(import_components16.Spinner, {}) }) : empty), 33297 hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(import_components16.Spinner, {}) }) 33298 ] 33299 } 33300 ) 33301 ] }); 33302 } 33303 var picker_table_default = ViewPickerTable; 33304 33305 // packages/dataviews/build-module/components/dataviews-layouts/picker-activity/index.mjs 33306 var import_components17 = __toESM(require_components(), 1); 33307 var import_element93 = __toESM(require_element(), 1); 33308 var import_compose11 = __toESM(require_compose(), 1); 33309 var import_i18n34 = __toESM(require_i18n(), 1); 33310 var import_jsx_runtime137 = __toESM(require_jsx_runtime(), 1); 33311 function isDefined4(item) { 33312 return !!item; 33313 } 33314 function PickerActivityItem({ 33315 view, 33316 selection, 33317 selectionProps, 33318 getItemId, 33319 item, 33320 titleField, 33321 mediaField, 33322 descriptionField: descriptionField2, 33323 otherFields, 33324 posinset, 33325 setsize 33326 }) { 33327 const elementRef = (0, import_element93.useRef)(null); 33328 useIntersectionObserver(elementRef, posinset); 33329 const { showTitle = true, showMedia = true, showDescription = true } = view; 33330 const id = getItemId(item); 33331 const isSelected2 = selection.includes(id); 33332 const density = view.layout?.density ?? "balanced"; 33333 const mediaContent = showMedia && density !== "compact" && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime137.jsx)( 33334 mediaField.render, 33335 { 33336 item, 33337 field: mediaField, 33338 config: { 33339 sizes: density === "comfortable" ? "32px" : "24px" 33340 } 33341 } 33342 ) : null; 33343 const renderedMediaField = /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: "dataviews-view-picker-activity__item-type-icon", children: mediaContent || /* @__PURE__ */ (0, import_jsx_runtime137.jsx)( 33344 "span", 33345 { 33346 className: "dataviews-view-picker-activity__item-bullet", 33347 "aria-hidden": "true" 33348 } 33349 ) }); 33350 const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(titleField.render, { item, field: titleField }) : null; 33351 const renderedDescriptionField = showDescription && descriptionField2?.render ? /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(descriptionField2.render, { item, field: descriptionField2 }) : null; 33352 const verticalGap = (0, import_element93.useMemo)(() => { 33353 switch (density) { 33354 case "comfortable": 33355 return "md"; 33356 default: 33357 return "sm"; 33358 } 33359 }, [density]); 33360 return /* @__PURE__ */ (0, import_jsx_runtime137.jsx)( 33361 import_components17.Composite.Item, 33362 { 33363 ref: elementRef, 33364 role: "option", 33365 "aria-label": titleField ? titleField.getValue({ item }) || void 0 : void 0, 33366 "aria-posinset": posinset, 33367 "aria-setsize": setsize, 33368 "aria-selected": isSelected2, 33369 className: clsx_default( 33370 "dataviews-view-picker-activity__item", 33371 density === "compact" && "is-compact", 33372 density === "balanced" && "is-balanced", 33373 density === "comfortable" && "is-comfortable", 33374 isSelected2 && "is-selected" 33375 ), 33376 ...selectionProps, 33377 render: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", {}), 33378 children: /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(Stack, { direction: "row", gap: "lg", justify: "start", align: "flex-start", children: [ 33379 /* @__PURE__ */ (0, import_jsx_runtime137.jsx)( 33380 Stack, 33381 { 33382 direction: "column", 33383 gap: "xs", 33384 align: "center", 33385 className: "dataviews-view-picker-activity__item-type", 33386 children: renderedMediaField 33387 } 33388 ), 33389 /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)( 33390 Stack, 33391 { 33392 direction: "column", 33393 gap: verticalGap, 33394 align: "flex-start", 33395 className: "dataviews-view-picker-activity__item-content", 33396 children: [ 33397 renderedTitleField && /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: "dataviews-view-picker-activity__item-title", children: renderedTitleField }), 33398 renderedDescriptionField && /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: "dataviews-view-picker-activity__item-description", children: renderedDescriptionField }), 33399 /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: "dataviews-view-picker-activity__item-fields", children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)( 33400 "div", 33401 { 33402 className: "dataviews-view-picker-activity__item-field", 33403 children: [ 33404 /* @__PURE__ */ (0, import_jsx_runtime137.jsx)( 33405 VisuallyHidden, 33406 { 33407 render: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", {}), 33408 className: "dataviews-view-picker-activity__item-field-label", 33409 children: field.label 33410 } 33411 ), 33412 /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "dataviews-view-picker-activity__item-field-value", children: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)( 33413 field.render, 33414 { 33415 item, 33416 field 33417 } 33418 ) }) 33419 ] 33420 }, 33421 field.id 33422 )) }) 33423 ] 33424 } 33425 ) 33426 ] }) 33427 } 33428 ); 33429 } 33430 function PickerActivityGroup({ 33431 groupName, 33432 groupField, 33433 showLabel = true, 33434 children 33435 }) { 33436 const headerId = (0, import_compose11.useInstanceId)( 33437 PickerActivityGroup, 33438 "dataviews-view-picker-activity-group__header" 33439 ); 33440 return /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)( 33441 Stack, 33442 { 33443 direction: "column", 33444 role: "group", 33445 "aria-labelledby": headerId, 33446 className: "dataviews-view-picker-activity-group", 33447 children: [ 33448 /* @__PURE__ */ (0, import_jsx_runtime137.jsx)( 33449 "h3", 33450 { 33451 className: "dataviews-view-picker-activity-group__header", 33452 id: headerId, 33453 children: showLabel ? (0, import_i18n34.sprintf)( 33454 // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022". 33455 (0, import_i18n34.__)("%1$s: %2$s"), 33456 groupField.label, 33457 groupName 33458 ) : groupName 33459 } 33460 ), 33461 children 33462 ] 33463 } 33464 ); 33465 } 33466 function ViewPickerActivity({ 33467 data, 33468 fields, 33469 getItemId, 33470 isLoading, 33471 onChangeSelection, 33472 selection, 33473 view, 33474 actions, 33475 className, 33476 empty 33477 }) { 33478 const { itemListLabel, paginationInfo } = (0, import_element93.useContext)(dataviews_context_default); 33479 const isMultiselect = useIsMultiselectPicker(actions); 33480 const titleField = fields.find( 33481 (field) => field.id === view?.titleField 33482 ); 33483 const mediaField = fields.find( 33484 (field) => field.id === view?.mediaField 33485 ); 33486 const descriptionField2 = fields.find( 33487 (field) => field.id === view?.descriptionField 33488 ); 33489 const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined4); 33490 const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null; 33491 const dataByGroup = groupField ? getDataByGroup(data, groupField) : null; 33492 const isInfiniteScroll = (view.infiniteScrollEnabled && !dataByGroup) ?? false; 33493 const setsize = isInfiniteScroll ? paginationInfo?.totalItems : void 0; 33494 const hasData = !!data?.length; 33495 const isGrouped = !!(groupField && dataByGroup); 33496 const orderedData = dataByGroup ? Array.from(dataByGroup.values()).flat() : data; 33497 const { getSelectionProps } = useSelectionProps({ 33498 data: orderedData, 33499 getItemId, 33500 isItemSelectable: () => true, 33501 selection, 33502 onChangeSelection, 33503 selectionMode: isMultiselect ? "multi" : "single-clearable", 33504 shouldSelectOnClick: true 33505 }); 33506 const renderItem = (item) => /* @__PURE__ */ (0, import_jsx_runtime137.jsx)( 33507 PickerActivityItem, 33508 { 33509 view, 33510 selection, 33511 selectionProps: getSelectionProps(getItemId(item)), 33512 getItemId, 33513 item, 33514 titleField, 33515 mediaField, 33516 descriptionField: descriptionField2, 33517 otherFields, 33518 posinset: item.position, 33519 setsize 33520 }, 33521 getItemId(item) 33522 ); 33523 if (!hasData) { 33524 return /* @__PURE__ */ (0, import_jsx_runtime137.jsx)( 33525 "div", 33526 { 33527 className: clsx_default({ 33528 "dataviews-loading": isLoading, 33529 "dataviews-no-results": !isLoading 33530 }), 33531 children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_components17.Spinner, {}) }) : empty 33532 } 33533 ); 33534 } 33535 return /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(import_jsx_runtime137.Fragment, { children: [ 33536 /* @__PURE__ */ (0, import_jsx_runtime137.jsx)( 33537 import_components17.Composite, 33538 { 33539 virtualFocus: true, 33540 orientation: "vertical", 33541 role: "listbox", 33542 "aria-multiselectable": isMultiselect, 33543 "aria-label": itemListLabel, 33544 "aria-busy": isLoading, 33545 render: isGrouped ? /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(Stack, { direction: "column", gap: "sm" }) : void 0, 33546 className: clsx_default( 33547 "dataviews-view-picker-activity", 33548 className 33549 ), 33550 children: isGrouped && dataByGroup ? Array.from(dataByGroup.entries()).map( 33551 ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime137.jsx)( 33552 PickerActivityGroup, 33553 { 33554 groupName, 33555 groupField, 33556 showLabel: view.groupBy?.showLabel !== false, 33557 children: groupItems.map(renderItem) 33558 }, 33559 groupName 33560 ) 33561 ) : data.map(renderItem) 33562 } 33563 ), 33564 isLoading && /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(import_components17.Spinner, {}) }) 33565 ] }); 33566 } 33567 33568 // packages/dataviews/build-module/components/dataviews-layouts/utils/density-picker.mjs 33569 var import_components18 = __toESM(require_components(), 1); 33570 var import_i18n35 = __toESM(require_i18n(), 1); 33571 var import_element94 = __toESM(require_element(), 1); 33572 var import_jsx_runtime138 = __toESM(require_jsx_runtime(), 1); 33573 function DensityPicker() { 33574 const context = (0, import_element94.useContext)(dataviews_context_default); 33575 const view = context.view; 33576 return /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)( 33577 import_components18.__experimentalToggleGroupControl, 33578 { 33579 label: (0, import_i18n35.__)("Density"), 33580 value: view.layout?.density || "balanced", 33581 onChange: (value) => { 33582 context.onChangeView({ 33583 ...view, 33584 layout: { 33585 ...view.layout, 33586 density: value 33587 } 33588 }); 33589 }, 33590 isBlock: true, 33591 children: [ 33592 /* @__PURE__ */ (0, import_jsx_runtime138.jsx)( 33593 import_components18.__experimentalToggleGroupControlOption, 33594 { 33595 value: "comfortable", 33596 label: (0, import_i18n35._x)( 33597 "Comfortable", 33598 "Density option for DataView layout" 33599 ) 33600 }, 33601 "comfortable" 33602 ), 33603 /* @__PURE__ */ (0, import_jsx_runtime138.jsx)( 33604 import_components18.__experimentalToggleGroupControlOption, 33605 { 33606 value: "balanced", 33607 label: (0, import_i18n35._x)("Balanced", "Density option for DataView layout") 33608 }, 33609 "balanced" 33610 ), 33611 /* @__PURE__ */ (0, import_jsx_runtime138.jsx)( 33612 import_components18.__experimentalToggleGroupControlOption, 33613 { 33614 value: "compact", 33615 label: (0, import_i18n35._x)("Compact", "Density option for DataView layout") 33616 }, 33617 "compact" 33618 ) 33619 ] 33620 } 33621 ); 33622 } 33623 33624 // packages/dataviews/build-module/components/dataviews-layouts/utils/media-fit-control.mjs 33625 var import_components19 = __toESM(require_components(), 1); 33626 var import_i18n36 = __toESM(require_i18n(), 1); 33627 var import_element95 = __toESM(require_element(), 1); 33628 var import_jsx_runtime139 = __toESM(require_jsx_runtime(), 1); 33629 function MediaFitControl() { 33630 const context = (0, import_element95.useContext)(dataviews_context_default); 33631 const view = context.view; 33632 if (!context.config?.mediaFitControl) { 33633 return null; 33634 } 33635 const hasMediaField = view.showMedia !== false && context.fields.some((field) => field.id === view.mediaField); 33636 if (!hasMediaField) { 33637 return null; 33638 } 33639 return /* @__PURE__ */ (0, import_jsx_runtime139.jsx)( 33640 import_components19.ToggleControl, 33641 { 33642 label: (0, import_i18n36.__)("Original aspect ratio"), 33643 checked: view.layout?.mediaFit === "contain", 33644 onChange: (isChecked) => { 33645 context.onChangeView({ 33646 ...view, 33647 layout: { 33648 ...view.layout, 33649 mediaFit: isChecked ? "contain" : "cover" 33650 } 33651 }); 33652 } 33653 } 33654 ); 33655 } 33656 33657 // packages/dataviews/build-module/components/dataviews-layouts/utils/preview-size-picker.mjs 33658 var import_components20 = __toESM(require_components(), 1); 33659 var import_i18n37 = __toESM(require_i18n(), 1); 33660 var import_element96 = __toESM(require_element(), 1); 33661 var import_jsx_runtime140 = __toESM(require_jsx_runtime(), 1); 33662 var imageSizes2 = [ 33663 { 33664 value: 120, 33665 breakpoint: 1 33666 }, 33667 { 33668 value: 170, 33669 breakpoint: 1 33670 }, 33671 { 33672 value: 230, 33673 breakpoint: 1 33674 }, 33675 { 33676 value: 290, 33677 breakpoint: 1112 33678 // at minimum image width, 4 images display at this container size 33679 }, 33680 { 33681 value: 350, 33682 breakpoint: 1636 33683 // at minimum image width, 6 images display at this container size 33684 }, 33685 { 33686 value: 430, 33687 breakpoint: 588 33688 // at minimum image width, 2 images display at this container size 33689 } 33690 ]; 33691 function PreviewSizePicker() { 33692 const context = (0, import_element96.useContext)(dataviews_context_default); 33693 const view = context.view; 33694 const breakValues = imageSizes2.filter((size4) => { 33695 return context.containerWidth >= size4.breakpoint; 33696 }); 33697 const layoutPreviewSize = view.layout?.previewSize ?? 230; 33698 const previewSizeToUse = breakValues.map((size4, index2) => ({ ...size4, index: index2 })).filter((size4) => size4.value <= layoutPreviewSize).sort((a2, b2) => b2.value - a2.value)[0]?.index ?? 0; 33699 const marks = breakValues.map((size4, index2) => { 33700 return { 33701 value: index2 33702 }; 33703 }); 33704 return /* @__PURE__ */ (0, import_jsx_runtime140.jsx)( 33705 import_components20.RangeControl, 33706 { 33707 showTooltip: false, 33708 label: (0, import_i18n37.__)("Preview size"), 33709 value: previewSizeToUse, 33710 min: 0, 33711 max: breakValues.length - 1, 33712 withInputField: false, 33713 onChange: (value = 0) => { 33714 context.onChangeView({ 33715 ...view, 33716 layout: { 33717 ...view.layout, 33718 previewSize: breakValues[value].value 33719 } 33720 }); 33721 }, 33722 step: 1, 33723 marks 33724 } 33725 ); 33726 } 33727 33728 // packages/dataviews/build-module/components/dataviews-layouts/utils/grid-config-options.mjs 33729 var import_jsx_runtime141 = __toESM(require_jsx_runtime(), 1); 33730 function GridConfigOptions() { 33731 return /* @__PURE__ */ (0, import_jsx_runtime141.jsxs)(import_jsx_runtime141.Fragment, { children: [ 33732 /* @__PURE__ */ (0, import_jsx_runtime141.jsx)(DensityPicker, {}), 33733 /* @__PURE__ */ (0, import_jsx_runtime141.jsx)(MediaFitControl, {}), 33734 /* @__PURE__ */ (0, import_jsx_runtime141.jsx)(PreviewSizePicker, {}) 33735 ] }); 33736 } 33737 33738 // packages/dataviews/build-module/components/dataviews-layouts/index.mjs 33739 var VIEW_LAYOUTS = [ 33740 { 33741 type: LAYOUT_TABLE, 33742 label: (0, import_i18n38.__)("Table"), 33743 component: table_default, 33744 icon: block_table_default, 33745 viewConfigOptions: DensityPicker 33746 }, 33747 { 33748 type: LAYOUT_GRID, 33749 label: (0, import_i18n38.__)("Grid"), 33750 component: grid_default, 33751 icon: category_default, 33752 viewConfigOptions: GridConfigOptions 33753 }, 33754 { 33755 type: LAYOUT_LIST, 33756 label: (0, import_i18n38.__)("List"), 33757 component: ViewList, 33758 icon: (0, import_i18n38.isRTL)() ? format_list_bullets_rtl_default : format_list_bullets_default, 33759 viewConfigOptions: DensityPicker 33760 }, 33761 { 33762 type: LAYOUT_ACTIVITY, 33763 label: (0, import_i18n38.__)("Activity"), 33764 component: ViewActivity, 33765 icon: scheduled_default, 33766 viewConfigOptions: DensityPicker 33767 }, 33768 { 33769 type: LAYOUT_PICKER_GRID, 33770 label: (0, import_i18n38.__)("Grid"), 33771 component: picker_grid_default, 33772 icon: category_default, 33773 viewConfigOptions: GridConfigOptions, 33774 isPicker: true 33775 }, 33776 { 33777 type: LAYOUT_PICKER_TABLE, 33778 label: (0, import_i18n38.__)("Table"), 33779 component: picker_table_default, 33780 icon: block_table_default, 33781 viewConfigOptions: DensityPicker, 33782 isPicker: true 33783 }, 33784 { 33785 type: LAYOUT_PICKER_ACTIVITY, 33786 label: (0, import_i18n38.__)("Activity"), 33787 component: ViewPickerActivity, 33788 icon: scheduled_default, 33789 viewConfigOptions: DensityPicker, 33790 isPicker: true 33791 } 33792 ]; 33793 33794 // packages/dataviews/build-module/components/dataviews-filters/filters.mjs 33795 var import_element104 = __toESM(require_element(), 1); 33796 33797 // packages/dataviews/build-module/components/dataviews-filters/filter.mjs 33798 var import_components23 = __toESM(require_components(), 1); 33799 var import_i18n41 = __toESM(require_i18n(), 1); 33800 var import_element101 = __toESM(require_element(), 1); 33801 33802 // node_modules/@ariakit/react-components/dist/button/utils.js 33803 function withDefaultButtonType(props) { 33804 const { render: render4, type } = props; 33805 if (render4 || type !== void 0) return props; 33806 return { 33807 ...props, 33808 type: "button" 33809 }; 33810 } 33811 33812 // node_modules/@ariakit/react-components/dist/focusable/focusable-context.js 33813 var import_react46 = __toESM(require_react(), 1); 33814 var FocusableContext = (0, import_react46.createContext)(true); 33815 33816 // node_modules/@ariakit/utils/dist/index.js 33817 function toArray(arg) { 33818 if (Array.isArray(arg)) return arg; 33819 return typeof arg !== "undefined" ? [arg] : []; 33820 } 33821 function flatten2DArray(array) { 33822 const flattened = []; 33823 for (const row of array) flattened.push(...row); 33824 return flattened; 33825 } 33826 function reverseArray(array) { 33827 return array.slice().reverse(); 33828 } 33829 function noop5(..._) { 33830 } 33831 function applyState(argument, currentValue) { 33832 if (isUpdater(argument)) return argument(isLazyValue(currentValue) ? currentValue() : currentValue); 33833 return argument; 33834 } 33835 function isUpdater(argument) { 33836 return typeof argument === "function"; 33837 } 33838 function isLazyValue(value) { 33839 return typeof value === "function"; 33840 } 33841 function hasOwnProperty(object, prop) { 33842 if (typeof Object.hasOwn === "function") return Object.hasOwn(object, prop); 33843 return Object.prototype.hasOwnProperty.call(object, prop); 33844 } 33845 function chain(...fns) { 33846 return (...args) => { 33847 for (const fn of fns) if (typeof fn === "function") fn(...args); 33848 }; 33849 } 33850 function normalizeString(str) { 33851 return str.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); 33852 } 33853 function omit(object, keys) { 33854 const result = { ...object }; 33855 for (const key of keys) if (hasOwnProperty(result, key)) delete result[key]; 33856 return result; 33857 } 33858 function pick(object, paths) { 33859 const result = {}; 33860 for (const key of paths) if (hasOwnProperty(object, key)) result[key] = object[key]; 33861 return result; 33862 } 33863 function identity(value) { 33864 return value; 33865 } 33866 function afterPaint(cb = noop5) { 33867 let raf = requestAnimationFrame(() => { 33868 raf = requestAnimationFrame(cb); 33869 }); 33870 return () => cancelAnimationFrame(raf); 33871 } 33872 var defaultWarnOnceKey = {}; 33873 var warningMessages = /* @__PURE__ */ new WeakMap(); 33874 function warnOnce(message2, key) { 33875 const warningKey = key || defaultWarnOnceKey; 33876 let messages = warningMessages.get(warningKey); 33877 if (!messages) { 33878 messages = /* @__PURE__ */ new Set(); 33879 warningMessages.set(warningKey, messages); 33880 } 33881 if (messages.has(message2)) return; 33882 messages.add(message2); 33883 console.warn(message2); 33884 } 33885 function invariant(condition, message2) { 33886 if (condition) return; 33887 if (typeof message2 !== "string") throw new Error("Invariant failed"); 33888 throw new Error(message2); 33889 } 33890 function getKeys(obj) { 33891 return Object.keys(obj); 33892 } 33893 function isFalsyBooleanCallback(booleanOrCallback, ...args) { 33894 const result = typeof booleanOrCallback === "function" ? booleanOrCallback(...args) : booleanOrCallback; 33895 if (result == null) return false; 33896 return !result; 33897 } 33898 function disabledFromProps(props) { 33899 return props.disabled || props["aria-disabled"] === true || props["aria-disabled"] === "true"; 33900 } 33901 function removeUndefinedValues(obj) { 33902 const result = {}; 33903 for (const key in obj) { 33904 if (!hasOwnProperty(obj, key)) continue; 33905 if (key === "__proto__") continue; 33906 if (obj[key] !== void 0) result[key] = obj[key]; 33907 } 33908 return result; 33909 } 33910 function defaultValue(...values) { 33911 for (const value of values) if (value !== void 0) return value; 33912 } 33913 var canUseDOM = checkIsBrowser(); 33914 function checkIsBrowser() { 33915 return typeof window !== "undefined" && !!window.document?.createElement; 33916 } 33917 function getDocument(node) { 33918 if (!node) return document; 33919 if ("self" in node) return node.document; 33920 return node.ownerDocument || document; 33921 } 33922 function getActiveElement(node, activeDescendant = false) { 33923 const { activeElement: activeElement2 } = getDocument(node); 33924 if (!activeElement2?.nodeName) return null; 33925 if (isFrame(activeElement2) && activeElement2.contentDocument?.body) return getActiveElement(activeElement2.contentDocument.body, activeDescendant); 33926 if (activeDescendant) { 33927 const id = activeElement2.getAttribute("aria-activedescendant"); 33928 if (id) { 33929 const element = getDocument(activeElement2).getElementById(id); 33930 if (element) return element; 33931 } 33932 } 33933 return activeElement2; 33934 } 33935 function contains2(parent, child) { 33936 return parent === child || parent.contains(child); 33937 } 33938 function isElement2(target) { 33939 return target?.nodeType === 1; 33940 } 33941 function isNode2(target) { 33942 return typeof target?.nodeType === "number"; 33943 } 33944 function isFrame(element) { 33945 return element.tagName === "IFRAME"; 33946 } 33947 function isButton(element) { 33948 const tagName = element.tagName.toLowerCase(); 33949 if (tagName === "button") return true; 33950 if (tagName === "input" && element.type) return buttonInputTypes.indexOf(element.type) !== -1; 33951 return false; 33952 } 33953 var buttonInputTypes = [ 33954 "button", 33955 "color", 33956 "file", 33957 "image", 33958 "reset", 33959 "submit" 33960 ]; 33961 function isVisible(element) { 33962 if (typeof element.checkVisibility === "function") return element.checkVisibility(); 33963 const htmlElement = element; 33964 return htmlElement.offsetWidth > 0 || htmlElement.offsetHeight > 0 || element.getClientRects().length > 0; 33965 } 33966 function isTextField(element) { 33967 try { 33968 if (element.tagName === "TEXTAREA") return true; 33969 if (element.tagName !== "INPUT") return false; 33970 return element.selectionStart !== null; 33971 } catch (_error) { 33972 return false; 33973 } 33974 } 33975 function isTextbox(element) { 33976 return element.isContentEditable || isTextField(element); 33977 } 33978 function getTextboxValue(element) { 33979 if (isTextField(element)) return element.value; 33980 if (element.isContentEditable) { 33981 const range = getDocument(element).createRange(); 33982 range.selectNodeContents(element); 33983 return range.toString(); 33984 } 33985 return ""; 33986 } 33987 function getTextboxSelection(element) { 33988 let start = 0; 33989 let end = 0; 33990 if (isTextField(element)) { 33991 start = element.selectionStart || 0; 33992 end = element.selectionEnd || 0; 33993 } else if (element.isContentEditable) { 33994 const selection = getDocument(element).getSelection(); 33995 if (selection?.rangeCount && selection.anchorNode && contains2(element, selection.anchorNode) && selection.focusNode && contains2(element, selection.focusNode)) { 33996 const range = selection.getRangeAt(0); 33997 const nextRange = range.cloneRange(); 33998 nextRange.selectNodeContents(element); 33999 nextRange.setEnd(range.startContainer, range.startOffset); 34000 start = nextRange.toString().length; 34001 nextRange.setEnd(range.endContainer, range.endOffset); 34002 end = nextRange.toString().length; 34003 } 34004 } 34005 return { 34006 start, 34007 end 34008 }; 34009 } 34010 var allowedPopupRoles = [ 34011 "dialog", 34012 "menu", 34013 "listbox", 34014 "tree", 34015 "grid" 34016 ]; 34017 var itemRoleByPopupRole = { 34018 menu: "menuitem", 34019 listbox: "option", 34020 tree: "treeitem" 34021 }; 34022 function getPopupRole(element, fallback) { 34023 const role = element?.getAttribute("role"); 34024 if (role && allowedPopupRoles.indexOf(role) !== -1) return role; 34025 return fallback; 34026 } 34027 function getItemRoleByPopupRole(popupRole) { 34028 if (popupRole == null) return; 34029 if (!hasOwnProperty(itemRoleByPopupRole, popupRole)) return; 34030 return itemRoleByPopupRole[popupRole]; 34031 } 34032 function getScrollingElement(element) { 34033 if (!element) return null; 34034 const isScrollableOverflow = (overflow) => { 34035 if (overflow === "auto") return true; 34036 if (overflow === "scroll") return true; 34037 return false; 34038 }; 34039 if (element.clientHeight && element.scrollHeight > element.clientHeight) { 34040 const { overflowY } = getComputedStyle(element); 34041 if (isScrollableOverflow(overflowY)) return element; 34042 } else if (element.clientWidth && element.scrollWidth > element.clientWidth) { 34043 const { overflowX } = getComputedStyle(element); 34044 if (isScrollableOverflow(overflowX)) return element; 34045 } 34046 const doc = getDocument(element); 34047 return getScrollingElement(element.parentElement) || doc.scrollingElement || doc.body; 34048 } 34049 function setSelectionRange(element, ...args) { 34050 if (/text|search|password|tel|url/i.test(element.type)) element.setSelectionRange(...args); 34051 } 34052 function sortBasedOnDOMPosition(items, getElement) { 34053 const pairs = items.map((item, index2) => [index2, item]); 34054 let isOrderDifferent = false; 34055 pairs.sort(([indexA, a2], [indexB, b2]) => { 34056 const elementA = getElement(a2); 34057 const elementB = getElement(b2); 34058 if (elementA === elementB) return 0; 34059 if (!elementA || !elementB) return 0; 34060 if (isElementPreceding(elementA, elementB)) { 34061 if (indexA > indexB) isOrderDifferent = true; 34062 return -1; 34063 } 34064 if (indexA < indexB) isOrderDifferent = true; 34065 return 1; 34066 }); 34067 if (isOrderDifferent) return pairs.map(([_, item]) => item); 34068 return items; 34069 } 34070 function isElementPreceding(a2, b2) { 34071 return Boolean(b2.compareDocumentPosition(a2) & Node.DOCUMENT_POSITION_PRECEDING); 34072 } 34073 function isTouchDevice() { 34074 return canUseDOM && !!navigator.maxTouchPoints; 34075 } 34076 function isApple() { 34077 if (!canUseDOM) return false; 34078 return /mac|iphone|ipad|ipod/i.test(navigator.platform); 34079 } 34080 function isSafari() { 34081 return canUseDOM && isApple() && /apple/i.test(navigator.vendor); 34082 } 34083 function isFirefox() { 34084 return canUseDOM && /firefox\//i.test(navigator.userAgent); 34085 } 34086 function isPortalEvent(event) { 34087 const { currentTarget, target } = event; 34088 if (!currentTarget) return false; 34089 if (!isNode2(target)) return true; 34090 return !contains2(currentTarget, target); 34091 } 34092 function isSelfTarget(event) { 34093 return event.target === event.currentTarget; 34094 } 34095 function isActivatableNavigationTarget(element) { 34096 if (!isElement2(element)) return false; 34097 const target = element; 34098 const tagName = target.tagName.toLowerCase(); 34099 if (tagName === "a") return true; 34100 if (tagName === "button" && target.type === "submit") return true; 34101 if (tagName === "input" && target.type === "submit") return true; 34102 return false; 34103 } 34104 function isOpeningInNewTab(event) { 34105 const isAppleDevice = isApple(); 34106 if (isAppleDevice && !event.metaKey) return false; 34107 if (!isAppleDevice && !event.ctrlKey) return false; 34108 return isActivatableNavigationTarget(event.currentTarget); 34109 } 34110 function isDownloading(event) { 34111 if (!event.altKey) return false; 34112 return isActivatableNavigationTarget(event.currentTarget); 34113 } 34114 function fireBlurEvent(element, eventInit) { 34115 const event = new FocusEvent("blur", eventInit); 34116 const defaultAllowed = element.dispatchEvent(event); 34117 const bubbleInit = { 34118 ...eventInit, 34119 bubbles: true 34120 }; 34121 element.dispatchEvent(new FocusEvent("focusout", bubbleInit)); 34122 return defaultAllowed; 34123 } 34124 function fireKeyboardEvent(element, type, eventInit) { 34125 const event = new KeyboardEvent(type, eventInit); 34126 return element.dispatchEvent(event); 34127 } 34128 function fireClickEvent(element, eventInit) { 34129 const event = new MouseEvent("click", eventInit); 34130 return element.dispatchEvent(event); 34131 } 34132 function isFocusEventOutside(event, container) { 34133 const containerElement = container || event.currentTarget; 34134 const relatedTarget = event.relatedTarget; 34135 return !isNode2(relatedTarget) || !contains2(containerElement, relatedTarget); 34136 } 34137 function isInputEvent(event) { 34138 return event.type === "input"; 34139 } 34140 function queueBeforeEvent(element, type, callback, timeout) { 34141 const createTimer = (callback2) => { 34142 if (timeout) { 34143 const timerId2 = setTimeout(callback2, timeout); 34144 return () => clearTimeout(timerId2); 34145 } 34146 const timerId = requestAnimationFrame(callback2); 34147 return () => cancelAnimationFrame(timerId); 34148 }; 34149 const cancelTimer = createTimer(() => { 34150 element.removeEventListener(type, callSync, true); 34151 callback(); 34152 }); 34153 const callSync = () => { 34154 cancelTimer(); 34155 callback(); 34156 }; 34157 element.addEventListener(type, callSync, { 34158 once: true, 34159 capture: true 34160 }); 34161 return () => { 34162 cancelTimer(); 34163 element.removeEventListener(type, callSync, true); 34164 }; 34165 } 34166 function addGlobalEventListener(type, listener, options, scope = window) { 34167 const children = []; 34168 try { 34169 scope.document.addEventListener(type, listener, options); 34170 for (const frame of Array.from(scope.frames)) children.push(addGlobalEventListener(type, listener, options, frame)); 34171 } catch { 34172 } 34173 const removeEventListener = () => { 34174 try { 34175 scope.document.removeEventListener(type, listener, options); 34176 } catch { 34177 } 34178 for (const remove of children) remove(); 34179 }; 34180 return removeEventListener; 34181 } 34182 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'])"; 34183 function isFocusable(element) { 34184 if (!element.matches(selector)) return false; 34185 if (!isVisible(element)) return false; 34186 if (element.closest("[inert]")) return false; 34187 return true; 34188 } 34189 function hasFocus(element) { 34190 const activeElement2 = getActiveElement(element); 34191 if (!activeElement2) return false; 34192 if (activeElement2 === element) return true; 34193 const activeDescendant = activeElement2.getAttribute("aria-activedescendant"); 34194 if (!activeDescendant) return false; 34195 return activeDescendant === element.id; 34196 } 34197 function hasFocusWithin(element) { 34198 const activeElement2 = getActiveElement(element); 34199 if (!activeElement2) return false; 34200 if (contains2(element, activeElement2)) return true; 34201 const activeDescendant = activeElement2.getAttribute("aria-activedescendant"); 34202 if (!activeDescendant) return false; 34203 if (!("id" in element)) return false; 34204 if (activeDescendant === element.id) return true; 34205 return !!element.querySelector(`#$CSS.escape(activeDescendant)}`); 34206 } 34207 function createUndoCallback(callback) { 34208 return async () => { 34209 const redo = await callback?.(); 34210 return createUndoCallback(async () => { 34211 await redo?.(); 34212 return callback; 34213 }); 34214 }; 34215 } 34216 var UndoManager = createUndoManager(); 34217 function createUndoManager({ limit = 100 } = {}) { 34218 const undoStack = []; 34219 let redoStack = []; 34220 let currentGroup = null; 34221 const canUndo = () => undoStack.length > 0; 34222 const canRedo = () => redoStack.length > 0; 34223 const undo = async () => { 34224 if (!canUndo()) return; 34225 currentGroup = null; 34226 redoStack.push(await undoStack.pop()?.()); 34227 }; 34228 const redo = async () => { 34229 if (!canRedo()) return; 34230 currentGroup = null; 34231 undoStack.push(await redoStack.pop()?.()); 34232 }; 34233 const execute = async (callback, group) => { 34234 if (!callback) return; 34235 const sameGroup = group === currentGroup; 34236 currentGroup = group ?? null; 34237 const nextIndex = sameGroup ? Math.max(0, undoStack.length - 1) : undoStack.length; 34238 const undoCallback = await callback(); 34239 if (!undoCallback) return; 34240 redoStack = []; 34241 const currentUndo = undoStack[nextIndex]; 34242 undoStack[nextIndex] = createUndoCallback(async () => { 34243 await undoCallback?.(); 34244 const currentRedo = await currentUndo?.(); 34245 return async () => { 34246 await currentRedo?.(); 34247 await callback?.(); 34248 }; 34249 }); 34250 while (undoStack.length > limit) undoStack.shift(); 34251 }; 34252 return { 34253 canUndo, 34254 canRedo, 34255 undo, 34256 redo, 34257 execute 34258 }; 34259 } 34260 34261 // node_modules/@ariakit/react-utils/dist/index.js 34262 var React145 = __toESM(require_react(), 1); 34263 var import_react47 = __toESM(require_react(), 1); 34264 var import_jsx_runtime142 = __toESM(require_jsx_runtime(), 1); 34265 function setRef(ref, value) { 34266 if (typeof ref === "function") { 34267 const cleanup = ref(value); 34268 if (typeof cleanup === "function") return cleanup; 34269 } else if (ref) ref.current = value; 34270 } 34271 function isValidElementWithRef(element) { 34272 if (!element) return false; 34273 if (!(0, import_react47.isValidElement)(element)) return false; 34274 if ("ref" in element.props) return true; 34275 if ("ref" in element) return true; 34276 return false; 34277 } 34278 function getRefProperty(element) { 34279 if (!isValidElementWithRef(element)) return null; 34280 return { ...element.props }.ref || element.ref; 34281 } 34282 function mergeProps2(base, overrides) { 34283 const props = { ...base }; 34284 for (const key in overrides) { 34285 if (!hasOwnProperty(overrides, key)) continue; 34286 if (key === "__proto__") continue; 34287 if (key === "className") { 34288 const prop = "className"; 34289 const baseClass = base[prop]; 34290 const overrideClass = overrides[prop]; 34291 if (baseClass && overrideClass) props[prop] = `$baseClass} $overrideClass}`; 34292 else props[prop] = overrideClass || baseClass; 34293 continue; 34294 } 34295 if (key === "style") { 34296 const prop = "style"; 34297 props[prop] = base[prop] ? { 34298 ...base[prop], 34299 ...overrides[prop] 34300 } : overrides[prop]; 34301 continue; 34302 } 34303 const overrideValue = overrides[key]; 34304 if (overrideValue === void 0) continue; 34305 if (key.startsWith("on")) { 34306 if (typeof overrideValue !== "function") continue; 34307 const baseValue = base[key]; 34308 if (typeof baseValue === "function") { 34309 props[key] = (...args) => { 34310 overrideValue(...args); 34311 baseValue(...args); 34312 }; 34313 continue; 34314 } 34315 } 34316 props[key] = overrideValue; 34317 } 34318 return props; 34319 } 34320 var _React = { ...React145 }; 34321 var useReactId = _React.useId; 34322 var useReactDeferredValue = _React.useDeferredValue; 34323 var useReactInsertionEffect = _React.useInsertionEffect; 34324 var useSafeLayoutEffect = canUseDOM ? import_react47.useLayoutEffect : import_react47.useEffect; 34325 function useInitialValue(value) { 34326 const [initialValue] = (0, import_react47.useState)(value); 34327 return initialValue; 34328 } 34329 function useLiveRef(value) { 34330 const ref = (0, import_react47.useRef)(value); 34331 useSafeLayoutEffect(() => { 34332 ref.current = value; 34333 }); 34334 return ref; 34335 } 34336 function useEvent(callback) { 34337 const ref = (0, import_react47.useRef)(() => { 34338 throw new Error("Cannot call an event handler while rendering."); 34339 }); 34340 if (useReactInsertionEffect) useReactInsertionEffect(() => { 34341 ref.current = callback; 34342 }); 34343 else ref.current = callback; 34344 return (0, import_react47.useCallback)((...args) => ref.current?.(...args), []); 34345 } 34346 function useTransactionState(callback) { 34347 const [state, setState] = (0, import_react47.useState)(null); 34348 useSafeLayoutEffect(() => { 34349 if (state == null) return; 34350 if (!callback) return; 34351 let prevState = null; 34352 callback((prev) => { 34353 prevState = prev; 34354 return state; 34355 }); 34356 return () => { 34357 callback(prevState); 34358 }; 34359 }, [state, callback]); 34360 return [state, setState]; 34361 } 34362 function useMergeRefs5(...refs) { 34363 return (0, import_react47.useMemo)(() => { 34364 if (!refs.some(Boolean)) return; 34365 return (value) => { 34366 const refEffects = []; 34367 for (const ref of refs) { 34368 if (!ref) continue; 34369 const cleanup = setRef(ref, value); 34370 refEffects.push({ 34371 ref, 34372 cleanup: typeof cleanup === "function" ? cleanup : void 0 34373 }); 34374 } 34375 if (!refEffects.some((effect) => effect.cleanup)) return; 34376 return () => { 34377 for (const { ref, cleanup } of refEffects) if (cleanup) cleanup(); 34378 else setRef(ref, null); 34379 }; 34380 }; 34381 }, refs); 34382 } 34383 function useId7(defaultId) { 34384 if (useReactId) { 34385 const reactId = useReactId(); 34386 if (defaultId) return defaultId; 34387 return reactId; 34388 } 34389 const [id, setId] = (0, import_react47.useState)(defaultId); 34390 useSafeLayoutEffect(() => { 34391 if (defaultId || id) return; 34392 const random = Math.random().toString(36).slice(2, 8); 34393 setId(`id-$random}`); 34394 }, [defaultId, id]); 34395 return defaultId || id; 34396 } 34397 function useAttribute(refOrElement, attributeName, defaultValue2) { 34398 const initialValue = useInitialValue(defaultValue2); 34399 const [attribute, setAttribute] = (0, import_react47.useState)(initialValue); 34400 (0, import_react47.useEffect)(() => { 34401 const element = refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement; 34402 if (!element) return; 34403 const callback = () => { 34404 const value = element.getAttribute(attributeName); 34405 setAttribute(value == null ? initialValue : value); 34406 }; 34407 const observer = new MutationObserver(callback); 34408 observer.observe(element, { attributeFilter: [attributeName] }); 34409 callback(); 34410 return () => observer.disconnect(); 34411 }, [ 34412 refOrElement, 34413 attributeName, 34414 initialValue 34415 ]); 34416 return attribute; 34417 } 34418 function useUpdateEffect(effect, deps) { 34419 const mounted = (0, import_react47.useRef)(false); 34420 (0, import_react47.useEffect)(() => { 34421 if (mounted.current) return effect(); 34422 mounted.current = true; 34423 }, deps); 34424 (0, import_react47.useEffect)(() => () => { 34425 mounted.current = false; 34426 }, []); 34427 } 34428 function useUpdateLayoutEffect(effect, deps) { 34429 const mounted = (0, import_react47.useRef)(false); 34430 useSafeLayoutEffect(() => { 34431 if (mounted.current) return effect(); 34432 mounted.current = true; 34433 }, deps); 34434 useSafeLayoutEffect(() => () => { 34435 mounted.current = false; 34436 }, []); 34437 } 34438 function useForceUpdate() { 34439 return (0, import_react47.useReducer)(() => [], []); 34440 } 34441 function useBooleanEvent(booleanOrCallback) { 34442 return useEvent(typeof booleanOrCallback === "function" ? booleanOrCallback : () => booleanOrCallback); 34443 } 34444 function useWrapElement(props, callback, deps = []) { 34445 const wrapElement = (0, import_react47.useCallback)((element) => { 34446 if (props.wrapElement) element = props.wrapElement(element); 34447 return callback(element); 34448 }, [...deps, props.wrapElement]); 34449 return { 34450 ...props, 34451 wrapElement 34452 }; 34453 } 34454 function useMetadataProps(props, key, value) { 34455 const parent = props.onLoadedMetadataCapture; 34456 const onLoadedMetadataCapture = (0, import_react47.useMemo)(() => { 34457 return Object.assign(() => { 34458 }, parent, ...value !== void 0 ? [{ [key]: value }] : []); 34459 }, [ 34460 parent, 34461 key, 34462 value 34463 ]); 34464 return [parent?.[key], { onLoadedMetadataCapture }]; 34465 } 34466 var hasInstalledGlobalEventListeners = false; 34467 function useIsMouseMoving() { 34468 (0, import_react47.useEffect)(() => { 34469 if (hasInstalledGlobalEventListeners) return; 34470 addGlobalEventListener("mousemove", setMouseMoving, true); 34471 addGlobalEventListener("mousedown", resetMouseMoving, true); 34472 addGlobalEventListener("mouseup", resetMouseMoving, true); 34473 addGlobalEventListener("keydown", resetMouseMoving, true); 34474 addGlobalEventListener("scroll", resetMouseMoving, true); 34475 hasInstalledGlobalEventListeners = true; 34476 }, []); 34477 return useEvent(() => mouseMoving); 34478 } 34479 var mouseMoving = false; 34480 var previousScreenX = 0; 34481 var previousScreenY = 0; 34482 function hasMouseMovement(event) { 34483 const movementX = event.movementX || event.screenX - previousScreenX; 34484 const movementY = event.movementY || event.screenY - previousScreenY; 34485 previousScreenX = event.screenX; 34486 previousScreenY = event.screenY; 34487 return movementX || movementY || false; 34488 } 34489 function setMouseMoving(event) { 34490 if (!hasMouseMovement(event)) return; 34491 mouseMoving = true; 34492 } 34493 function resetMouseMoving() { 34494 mouseMoving = false; 34495 } 34496 function forwardRef89(render4) { 34497 const Role = React145.forwardRef((props, ref) => render4(removeUndefinedValues({ 34498 ...props, 34499 ref 34500 }))); 34501 Role.displayName = render4.displayName || render4.name; 34502 return Role; 34503 } 34504 function memo4(Component2, propsAreEqual) { 34505 return React145.memo(Component2, propsAreEqual); 34506 } 34507 function createElement3(Type, props) { 34508 const { wrapElement, render: render4, ...rest } = props; 34509 const mergedRef = useMergeRefs5(props.ref, getRefProperty(render4)); 34510 let element; 34511 if (React145.isValidElement(render4)) { 34512 const renderProps = { 34513 ...render4.props, 34514 ref: mergedRef 34515 }; 34516 element = React145.cloneElement(render4, mergeProps2(rest, renderProps)); 34517 } else if (render4) element = render4(rest); 34518 else element = /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(Type, { ...rest }); 34519 if (wrapElement) return wrapElement(element); 34520 return element; 34521 } 34522 function createHook(useProps) { 34523 const useRole = (props = {}) => { 34524 return useProps(props); 34525 }; 34526 useRole.displayName = useProps.name; 34527 return useRole; 34528 } 34529 function createStoreContext(providers = [], scopedProviders = []) { 34530 const context = React145.createContext(void 0); 34531 const scopedContext = React145.createContext(void 0); 34532 const useContext60 = () => React145.useContext(context); 34533 const useScopedContext = (onlyScoped = false) => { 34534 const scoped = React145.useContext(scopedContext); 34535 const store = useContext60(); 34536 if (onlyScoped) return scoped; 34537 return scoped || store; 34538 }; 34539 const useProviderContext = () => { 34540 const scoped = React145.useContext(scopedContext); 34541 const store = useContext60(); 34542 if (scoped && scoped === store) return; 34543 return store; 34544 }; 34545 const ContextProvider = (props) => { 34546 return providers.reduceRight((children, Provider2) => /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(Provider2, { 34547 ...props, 34548 children 34549 }), /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(context.Provider, { ...props })); 34550 }; 34551 const ScopedContextProvider = (props) => { 34552 return /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(ContextProvider, { 34553 ...props, 34554 children: scopedProviders.reduceRight((children, Provider2) => /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(Provider2, { 34555 ...props, 34556 children 34557 }), /* @__PURE__ */ (0, import_jsx_runtime142.jsx)(scopedContext.Provider, { ...props })) 34558 }); 34559 }; 34560 return { 34561 context, 34562 scopedContext, 34563 useContext: useContext60, 34564 useScopedContext, 34565 useProviderContext, 34566 ContextProvider, 34567 ScopedContextProvider 34568 }; 34569 } 34570 34571 // node_modules/@ariakit/react-components/dist/__chunks/CKgCZrim.js 34572 var import_react48 = __toESM(require_react(), 1); 34573 function isCompositeMoveKey(key) { 34574 return key === "ArrowUp" || key === "ArrowRight" || key === "ArrowDown" || key === "ArrowLeft" || key === "Home" || key === "End" || key === "PageUp" || key === "PageDown"; 34575 } 34576 var TagName = "div"; 34577 var accessibleWhenDisabledSymbol = /* @__PURE__ */ Symbol("accessibleWhenDisabled"); 34578 var isSafariBrowser = isSafari(); 34579 var nativeTabbableMask = 1; 34580 var supportsDisabledMask = 2; 34581 var defaultElementCapabilities = 3; 34582 var alwaysFocusVisibleInputTypes = [ 34583 "text", 34584 "search", 34585 "url", 34586 "tel", 34587 "email", 34588 "password", 34589 "number", 34590 "date", 34591 "month", 34592 "week", 34593 "time", 34594 "datetime", 34595 "datetime-local" 34596 ]; 34597 function isAlwaysFocusVisible(element) { 34598 const { tagName, readOnly, type } = element; 34599 if (tagName === "TEXTAREA" && !readOnly) return true; 34600 if (tagName === "SELECT" && !readOnly) return true; 34601 if (tagName === "INPUT" && !readOnly) return alwaysFocusVisibleInputTypes.includes(type); 34602 if (element.isContentEditable) return true; 34603 if (element.getAttribute("role") === "combobox" && element.dataset.name) return true; 34604 return false; 34605 } 34606 function isNativeTabbable(tagName) { 34607 if (!tagName) return true; 34608 return tagName === "button" || tagName === "summary" || tagName === "input" || tagName === "select" || tagName === "textarea" || tagName === "a"; 34609 } 34610 function supportsDisabledAttribute(tagName) { 34611 if (!tagName) return true; 34612 return tagName === "button" || tagName === "input" || tagName === "select" || tagName === "textarea"; 34613 } 34614 function getElementCapabilities(tagName) { 34615 let capabilities = 0; 34616 if (isNativeTabbable(tagName)) capabilities |= nativeTabbableMask; 34617 if (supportsDisabledAttribute(tagName)) capabilities |= supportsDisabledMask; 34618 return capabilities; 34619 } 34620 function isNativeSubmitControl(element) { 34621 if (element.tagName === "BUTTON") { 34622 const { type } = element; 34623 return type === "submit"; 34624 } 34625 if (element.tagName === "INPUT") { 34626 const { type } = element; 34627 return type === "submit" || type === "image"; 34628 } 34629 return false; 34630 } 34631 function getTabIndex2({ focusable: focusable2, trulyDisabled, nativeTabbable, supportsDisabled, safariTabIndex, tabIndexProp }) { 34632 if (!focusable2) return tabIndexProp; 34633 if (trulyDisabled) { 34634 if (nativeTabbable && !supportsDisabled) return -1; 34635 return; 34636 } 34637 if (nativeTabbable) { 34638 if (safariTabIndex && tabIndexProp == null) return 0; 34639 return tabIndexProp; 34640 } 34641 return tabIndexProp ?? 0; 34642 } 34643 function useDisableEvent(onEvent, disabled2) { 34644 return useEvent((event) => { 34645 onEvent?.(event); 34646 if (event.defaultPrevented) return; 34647 if (disabled2) { 34648 event.stopPropagation(); 34649 event.preventDefault(); 34650 } 34651 }); 34652 } 34653 var hasInstalledGlobalEventListeners2 = false; 34654 var isKeyboardModality = true; 34655 function onGlobalMouseDown(event) { 34656 const target = event.target; 34657 if (isElement2(target) && !target.hasAttribute("data-focus-visible")) isKeyboardModality = false; 34658 } 34659 function onGlobalKeyDown(event) { 34660 if (isCompositeMoveKey(event.key)) { 34661 isKeyboardModality = true; 34662 return; 34663 } 34664 if (event.metaKey) return; 34665 if (event.ctrlKey) return; 34666 if (event.altKey) { 34667 if (!isSafariBrowser) return; 34668 if (event.key !== "Tab") return; 34669 } 34670 isKeyboardModality = true; 34671 } 34672 var useFocusable = createHook(function useFocusable2({ focusable: focusable2 = true, accessibleWhenDisabled, autoFocus, onFocusVisible, ...props }) { 34673 const ref = (0, import_react48.useRef)(null); 34674 const [parentAccessibleWhenDisabled, metadataProps] = useMetadataProps(props, accessibleWhenDisabledSymbol, accessibleWhenDisabled); 34675 accessibleWhenDisabled ??= parentAccessibleWhenDisabled; 34676 (0, import_react48.useEffect)(() => { 34677 if (!focusable2) return; 34678 if (hasInstalledGlobalEventListeners2) return; 34679 addGlobalEventListener("mousedown", onGlobalMouseDown, true); 34680 addGlobalEventListener("keydown", onGlobalKeyDown, true); 34681 hasInstalledGlobalEventListeners2 = true; 34682 }, [focusable2]); 34683 const disabled2 = focusable2 && disabledFromProps(props); 34684 const trulyDisabled = disabled2 && !accessibleWhenDisabled; 34685 const [focusVisible, setFocusVisible] = (0, import_react48.useState)(false); 34686 const focusVisibleRef = (0, import_react48.useRef)(false); 34687 const nativeSubmitObserverCleanupRef = (0, import_react48.useRef)(null); 34688 const cleanupFocusVisible = useEvent((element) => { 34689 nativeSubmitObserverCleanupRef.current?.(); 34690 nativeSubmitObserverCleanupRef.current = null; 34691 focusVisibleRef.current = false; 34692 element?.removeAttribute("data-focus-visible"); 34693 }); 34694 (0, import_react48.useEffect)(() => { 34695 if (focusable2 && !trulyDisabled) return; 34696 cleanupFocusVisible(ref.current); 34697 if (focusVisible) setFocusVisible(false); 34698 }, [ 34699 focusable2, 34700 trulyDisabled, 34701 focusVisible, 34702 cleanupFocusVisible 34703 ]); 34704 (0, import_react48.useEffect)(() => { 34705 if (!focusable2) return; 34706 if (!focusVisible) return; 34707 const element = ref.current; 34708 if (!element) return; 34709 if (typeof IntersectionObserver === "undefined") return; 34710 const observer = new IntersectionObserver(() => { 34711 if (!isFocusable(element)) { 34712 focusVisibleRef.current = false; 34713 setFocusVisible(false); 34714 } 34715 }); 34716 observer.observe(element); 34717 return () => observer.disconnect(); 34718 }, [focusable2, focusVisible]); 34719 (0, import_react48.useEffect)(() => { 34720 return () => nativeSubmitObserverCleanupRef.current?.(); 34721 }, []); 34722 const onKeyPressCapture = useDisableEvent(props.onKeyPressCapture, disabled2); 34723 const onMouseDownCapture = useDisableEvent(props.onMouseDownCapture, disabled2); 34724 const onClickCapture = useDisableEvent(props.onClickCapture, disabled2); 34725 const handleFocusVisible = (event, currentTarget) => { 34726 if (currentTarget) event.currentTarget = currentTarget; 34727 if (!focusable2) return; 34728 const element = event.currentTarget; 34729 if (!element) return; 34730 if (!hasFocus(element)) return; 34731 onFocusVisible?.(event); 34732 if (event.defaultPrevented) return; 34733 element.dataset.focusVisible = "true"; 34734 focusVisibleRef.current = true; 34735 if (isNativeSubmitControl(element)) { 34736 nativeSubmitObserverCleanupRef.current?.(); 34737 nativeSubmitObserverCleanupRef.current = null; 34738 if (typeof IntersectionObserver !== "undefined") { 34739 const observer = new IntersectionObserver(() => { 34740 if (isFocusable(element)) return; 34741 cleanupFocusVisible(element); 34742 }); 34743 observer.observe(element); 34744 nativeSubmitObserverCleanupRef.current = () => observer.disconnect(); 34745 } 34746 return; 34747 } 34748 setFocusVisible(true); 34749 }; 34750 const onKeyDownCaptureProp = props.onKeyDownCapture; 34751 const onKeyDownCapture = useEvent((event) => { 34752 onKeyDownCaptureProp?.(event); 34753 if (event.defaultPrevented) return; 34754 if (!focusable2) return; 34755 if (focusVisible) return; 34756 if (focusVisibleRef.current) return; 34757 if ((event.metaKey || event.altKey || event.ctrlKey) && !isCompositeMoveKey(event.key)) return; 34758 if (!isSelfTarget(event)) return; 34759 const element = event.currentTarget; 34760 const applyFocusVisible = () => handleFocusVisible(event, element); 34761 queueBeforeEvent(element, "focusout", applyFocusVisible); 34762 }); 34763 const onFocusCaptureProp = props.onFocusCapture; 34764 const onFocusCapture = useEvent((event) => { 34765 onFocusCaptureProp?.(event); 34766 if (event.defaultPrevented) return; 34767 if (!focusable2) return; 34768 if (!isSelfTarget(event)) { 34769 setFocusVisible(false); 34770 return; 34771 } 34772 const element = event.currentTarget; 34773 const applyFocusVisible = () => handleFocusVisible(event, element); 34774 if (isKeyboardModality || isAlwaysFocusVisible(event.target)) queueBeforeEvent(event.target, "focusout", applyFocusVisible); 34775 else setFocusVisible(false); 34776 }); 34777 const onBlurProp = props.onBlur; 34778 const onBlur = useEvent((event) => { 34779 onBlurProp?.(event); 34780 if (!focusable2) return; 34781 if (!isFocusEventOutside(event)) return; 34782 cleanupFocusVisible(event.currentTarget); 34783 setFocusVisible(false); 34784 }); 34785 const autoFocusOnShow = (0, import_react48.useContext)(FocusableContext); 34786 const autoFocusRef = useEvent((element) => { 34787 if (!focusable2) return; 34788 if (!autoFocus) return; 34789 if (!element) return; 34790 if (!autoFocusOnShow) return; 34791 queueMicrotask(() => { 34792 if (hasFocus(element)) return; 34793 if (!isFocusable(element)) return; 34794 element.focus(); 34795 }); 34796 }); 34797 const [elementCapabilities, setElementCapabilities] = (0, import_react48.useState)(defaultElementCapabilities); 34798 useSafeLayoutEffect(() => { 34799 const element = ref.current; 34800 if (!element) return; 34801 const nextCapabilities = getElementCapabilities(element.tagName.toLowerCase()); 34802 if (nextCapabilities === defaultElementCapabilities) return; 34803 setElementCapabilities(nextCapabilities); 34804 }, []); 34805 const nativeTabbable = focusable2 && !!(elementCapabilities & nativeTabbableMask); 34806 const supportsDisabled = focusable2 && !!(elementCapabilities & supportsDisabledMask); 34807 const [safariTabIndex, setSafariTabIndex] = (0, import_react48.useState)(false); 34808 if (isSafariBrowser) (0, import_react48.useEffect)(() => { 34809 if (!focusable2) return; 34810 const element = ref.current; 34811 if (!element) return; 34812 const { type } = element; 34813 const isNativeCheckboxOrRadio = element.tagName === "INPUT" && (type === "checkbox" || type === "radio"); 34814 setSafariTabIndex(isButton(element) || isNativeCheckboxOrRadio); 34815 }, [focusable2]); 34816 const styleProp = props.style; 34817 const style = (0, import_react48.useMemo)(() => { 34818 if (trulyDisabled) return { 34819 pointerEvents: "none", 34820 ...styleProp 34821 }; 34822 return styleProp; 34823 }, [trulyDisabled, styleProp]); 34824 props = { 34825 "data-focus-visible": focusable2 && focusVisible || void 0, 34826 "data-autofocus": autoFocus || void 0, 34827 "aria-disabled": disabled2 || void 0, 34828 ...props, 34829 ...metadataProps, 34830 ref: useMergeRefs5(ref, autoFocusRef, props.ref), 34831 style, 34832 tabIndex: getTabIndex2({ 34833 focusable: focusable2, 34834 trulyDisabled, 34835 nativeTabbable, 34836 supportsDisabled, 34837 safariTabIndex, 34838 tabIndexProp: props.tabIndex 34839 }), 34840 disabled: supportsDisabled && trulyDisabled ? true : void 0, 34841 contentEditable: disabled2 ? void 0 : props.contentEditable, 34842 onKeyPressCapture, 34843 onClickCapture, 34844 onMouseDownCapture, 34845 onKeyDownCapture, 34846 onFocusCapture, 34847 onBlur 34848 }; 34849 return removeUndefinedValues(props); 34850 }); 34851 var Focusable = forwardRef89(function Focusable2(props) { 34852 const htmlProps = useFocusable(props); 34853 return createElement3(TagName, htmlProps); 34854 }); 34855 34856 // node_modules/@ariakit/react-components/dist/command/command.js 34857 var import_react49 = __toESM(require_react(), 1); 34858 var TagName2 = "button"; 34859 function isNativeClick(event) { 34860 if (!event.isTrusted) return false; 34861 const element = event.currentTarget; 34862 if (event.key === "Enter") return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "A"; 34863 if (event.key === " ") return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "INPUT" || element.tagName === "SELECT"; 34864 return false; 34865 } 34866 var symbol = /* @__PURE__ */ Symbol("command"); 34867 var useCommand = createHook(function useCommand2({ clickOnEnter = true, clickOnSpace = true, ...props }) { 34868 const ref = (0, import_react49.useRef)(null); 34869 const [isNativeButton, setIsNativeButton] = (0, import_react49.useState)(false); 34870 const type = props.type; 34871 (0, import_react49.useEffect)(() => { 34872 const element = ref.current; 34873 if (!element) return; 34874 const nativeButton = isButton(element); 34875 if (type !== void 0 && nativeButton && element.type === "button") return; 34876 setIsNativeButton(nativeButton); 34877 }, [type]); 34878 const [active, setActive] = (0, import_react49.useState)(false); 34879 const activeRef = (0, import_react49.useRef)(false); 34880 const disabled2 = disabledFromProps(props); 34881 const [isDuplicate, metadataProps] = useMetadataProps(props, symbol, true); 34882 useSafeLayoutEffect(() => { 34883 if (!disabled2) return; 34884 activeRef.current = false; 34885 setActive(false); 34886 }, [disabled2]); 34887 const onKeyDownProp = props.onKeyDown; 34888 const onKeyDown = useEvent((event) => { 34889 onKeyDownProp?.(event); 34890 const element = event.currentTarget; 34891 if (event.defaultPrevented) return; 34892 if (isDuplicate) return; 34893 if (disabled2) return; 34894 if (!isSelfTarget(event)) return; 34895 if (isTextField(element)) return; 34896 if (element.isContentEditable) return; 34897 const isEnter = clickOnEnter && event.key === "Enter"; 34898 const isSpace = clickOnSpace && event.key === " "; 34899 const shouldPreventEnter = event.key === "Enter" && !clickOnEnter; 34900 const shouldPreventSpace = event.key === " " && !clickOnSpace; 34901 if (shouldPreventEnter || shouldPreventSpace) { 34902 event.preventDefault(); 34903 return; 34904 } 34905 if (isEnter || isSpace) { 34906 const nativeClick = isNativeClick(event); 34907 if (isEnter) { 34908 if (!nativeClick) { 34909 event.preventDefault(); 34910 const { view, ...eventInit } = event; 34911 const click = () => fireClickEvent(element, eventInit); 34912 if (isFirefox()) queueBeforeEvent(element, "keyup", click); 34913 else queueMicrotask(click); 34914 } 34915 } else if (isSpace) { 34916 activeRef.current = true; 34917 if (!nativeClick) { 34918 event.preventDefault(); 34919 setActive(true); 34920 } 34921 } 34922 } 34923 }); 34924 const onKeyUpProp = props.onKeyUp; 34925 const onKeyUp = useEvent((event) => { 34926 onKeyUpProp?.(event); 34927 if (isDuplicate) return; 34928 const isSpace = clickOnSpace && event.key === " "; 34929 if (!activeRef.current || !isSpace) return; 34930 const nativeClick = isNativeClick(event); 34931 activeRef.current = false; 34932 if (!nativeClick) setActive(false); 34933 if (event.defaultPrevented) return; 34934 if (!isSelfTarget(event)) return; 34935 if (disabled2) return; 34936 if (event.metaKey) return; 34937 if (nativeClick) return; 34938 event.preventDefault(); 34939 const element = event.currentTarget; 34940 const { view, ...eventInit } = event; 34941 queueMicrotask(() => fireClickEvent(element, eventInit)); 34942 }); 34943 const onBlurProp = props.onBlur; 34944 const onBlur = useEvent((event) => { 34945 onBlurProp?.(event); 34946 if (!activeRef.current) return; 34947 activeRef.current = false; 34948 setActive(false); 34949 }); 34950 props = { 34951 "data-active": active || void 0, 34952 type: isNativeButton ? "button" : void 0, 34953 ...metadataProps, 34954 ...props, 34955 ref: useMergeRefs5(ref, props.ref), 34956 onKeyDown, 34957 onKeyUp, 34958 onBlur 34959 }; 34960 props = useFocusable(props); 34961 return props; 34962 }); 34963 var Command = forwardRef89(function Command2(props) { 34964 const htmlProps = useCommand(withDefaultButtonType(props)); 34965 return createElement3(TagName2, htmlProps); 34966 }); 34967 34968 // node_modules/@ariakit/react-components/dist/collection/collection-context.js 34969 var ctx = createStoreContext(); 34970 var useCollectionContext = ctx.useContext; 34971 var useCollectionScopedContext = ctx.useScopedContext; 34972 var useCollectionProviderContext = ctx.useProviderContext; 34973 var CollectionContextProvider = ctx.ContextProvider; 34974 var CollectionScopedContextProvider = ctx.ScopedContextProvider; 34975 34976 // node_modules/@ariakit/react-components/dist/collection/collection-item.js 34977 var import_react50 = __toESM(require_react(), 1); 34978 var TagName3 = "div"; 34979 var useCollectionItem = createHook(function useCollectionItem2({ store, shouldRegisterItem = true, getItem = identity, element, ...props }) { 34980 const context = useCollectionContext(); 34981 store = store || context; 34982 const id = useId7(props.id); 34983 const ref = (0, import_react50.useRef)(element); 34984 (0, import_react50.useEffect)(() => { 34985 const element2 = ref.current; 34986 if (!id) return; 34987 if (!element2) return; 34988 if (!shouldRegisterItem) return; 34989 const item = getItem({ 34990 id, 34991 element: element2 34992 }); 34993 return store?.renderItem(item); 34994 }, [ 34995 id, 34996 shouldRegisterItem, 34997 getItem, 34998 store 34999 ]); 35000 props = { 35001 ...props, 35002 ref: useMergeRefs5(ref, props.ref) 35003 }; 35004 return props; 35005 }); 35006 var CollectionItem = forwardRef89(function CollectionItem2(props) { 35007 const htmlProps = useCollectionItem(props); 35008 return createElement3(TagName3, htmlProps); 35009 }); 35010 35011 // node_modules/@ariakit/react-components/dist/composite/composite-context.js 35012 var import_react51 = __toESM(require_react(), 1); 35013 var ctx2 = createStoreContext([CollectionContextProvider], [CollectionScopedContextProvider]); 35014 var useCompositeContext = ctx2.useContext; 35015 var useCompositeScopedContext = ctx2.useScopedContext; 35016 var useCompositeProviderContext = ctx2.useProviderContext; 35017 var CompositeContextProvider = ctx2.ContextProvider; 35018 var CompositeScopedContextProvider = ctx2.ScopedContextProvider; 35019 var CompositeItemContext = (0, import_react51.createContext)(void 0); 35020 var CompositeRowContext = (0, import_react51.createContext)(void 0); 35021 35022 // node_modules/@ariakit/react-components/dist/composite/utils.js 35023 var import_react52 = __toESM(require_react(), 1); 35024 35025 // node_modules/@ariakit/store/dist/index.js 35026 function getInternal(store, key) { 35027 const internals = store.__unstableInternals; 35028 invariant(internals, "Invalid store"); 35029 return internals[key]; 35030 } 35031 function hasUpdatedKey(keys, updatedKey) { 35032 if (!keys) return true; 35033 for (const currentKey of keys) if (updatedKey instanceof Set) { 35034 if (updatedKey.has(currentKey)) return true; 35035 } else if (isSameValue(currentKey, updatedKey)) return true; 35036 return false; 35037 } 35038 function isSameValue(value, other) { 35039 return value === other || value !== value && other !== other; 35040 } 35041 function getCleanupPrevState(prevState, state, stateBeforeCleanup, updatedKey) { 35042 let cleanupPrevState; 35043 for (const key of getKeys(state)) { 35044 if (isSameValue(state[key], stateBeforeCleanup[key])) continue; 35045 if (updatedKey !== void 0 && hasUpdatedKey([key], updatedKey)) continue; 35046 cleanupPrevState ??= { ...prevState }; 35047 cleanupPrevState[key] = state[key]; 35048 } 35049 return cleanupPrevState; 35050 } 35051 var MAX_REPAIR_PASSES = 100; 35052 function addKeyedListener(map, keys, listener) { 35053 if (!keys) return; 35054 for (const key of keys) { 35055 let listeners = map.get(key); 35056 if (!listeners) { 35057 listeners = /* @__PURE__ */ new Set(); 35058 map.set(key, listeners); 35059 } 35060 listeners.add(listener); 35061 } 35062 } 35063 function deleteKeyedListener(map, keys, listener) { 35064 if (!map) return; 35065 if (!keys) return; 35066 for (const key of keys) { 35067 const listeners = map.get(key); 35068 if (!listeners) continue; 35069 listeners.delete(listener); 35070 if (!listeners.size) map.delete(key); 35071 } 35072 } 35073 function getFastPathNotifiedListeners(frame) { 35074 const notifiedListeners = /* @__PURE__ */ new Set(); 35075 const currentListener = frame.currentListener; 35076 if (!currentListener) return notifiedListeners; 35077 for (const listener of frame.keyedListeners) { 35078 notifiedListeners.add(listener); 35079 if (listener === currentListener) return notifiedListeners; 35080 } 35081 notifiedListeners.clear(); 35082 notifiedListeners.add(currentListener); 35083 return notifiedListeners; 35084 } 35085 function preserveFastPathNotifiedListeners(frame) { 35086 frame.notifiedListeners ??= getFastPathNotifiedListeners(frame); 35087 } 35088 function hasFastPathPassedListener(frame, listener) { 35089 if (!frame.currentListener) return false; 35090 let foundCurrentKeyedListener = false; 35091 for (const currentListener of frame.keyedListeners) { 35092 if (currentListener === frame.currentListener) { 35093 foundCurrentKeyedListener = true; 35094 continue; 35095 } 35096 if (!foundCurrentKeyedListener) continue; 35097 if (currentListener === listener) return false; 35098 } 35099 let foundListener = false; 35100 for (const currentListener of frame.group.listeners) { 35101 if (currentListener === frame.currentListener) return foundListener; 35102 if (currentListener === listener) foundListener = true; 35103 } 35104 return false; 35105 } 35106 function preserveFastPathFrames(fastPathFrames, group, listener) { 35107 for (const frame of fastPathFrames) { 35108 if (frame.group !== group) continue; 35109 if (frame.recovering) continue; 35110 if (listener && !frame.keyedListeners.has(listener)) continue; 35111 preserveFastPathNotifiedListeners(frame); 35112 for (const currentListener of frame.group.listeners) { 35113 if (currentListener === frame.currentListener) break; 35114 if (!hasFastPathPassedListener(frame, currentListener)) continue; 35115 frame.notifiedListeners?.add(currentListener); 35116 } 35117 } 35118 } 35119 function preserveFastPathPassedListeners(fastPathFrames, group, listener) { 35120 for (const frame of fastPathFrames) { 35121 if (frame.group !== group) continue; 35122 if (frame.recovering) continue; 35123 if (!hasFastPathPassedListener(frame, listener)) continue; 35124 preserveFastPathNotifiedListeners(frame); 35125 frame.notifiedListeners?.add(listener); 35126 } 35127 } 35128 function preserveFastPathPassedKeyedListeners({ fastPathFrames, group, keys, listener }) { 35129 const wasRegistered = group.listeners.has(listener); 35130 for (const frame of fastPathFrames) { 35131 if (frame.group !== group) continue; 35132 if (frame.recovering) continue; 35133 if (!keys.includes(frame.updatedKey)) continue; 35134 if (hasFastPathPassedListener(frame, listener)) { 35135 preserveFastPathNotifiedListeners(frame); 35136 frame.notifiedListeners?.add(listener); 35137 } else if (wasRegistered) { 35138 preserveFastPathNotifiedListeners(frame); 35139 frame.recoverToLive = true; 35140 } 35141 } 35142 } 35143 function clearFastPathNotifiedListener(fastPathFrames, group, listener) { 35144 for (const frame of fastPathFrames) { 35145 if (frame.group !== group) continue; 35146 frame.notifiedListeners?.delete(listener); 35147 } 35148 } 35149 function addFastPathKeyedListener({ fastPathFrames, group, keys, listener }) { 35150 for (const frame of fastPathFrames) { 35151 if (frame.group !== group) continue; 35152 if (frame.recovering) continue; 35153 if (!keys.includes(frame.updatedKey)) continue; 35154 frame.keyedListeners.add(listener); 35155 } 35156 } 35157 function runPendingCleanup(group, listener) { 35158 if (!group.disposables.size) return; 35159 const cleanup = group.disposables.get(listener); 35160 if (!cleanup) return; 35161 group.disposables.delete(listener); 35162 cleanup(); 35163 } 35164 function setListenerCleanup(group, listener, cleanup) { 35165 const currentCleanup = group.disposables.get(listener); 35166 if (!currentCleanup) { 35167 group.disposables.set(listener, cleanup); 35168 return; 35169 } 35170 group.disposables.set(listener, () => { 35171 currentCleanup(); 35172 cleanup(); 35173 }); 35174 } 35175 function notifyStoreListener(group, listener, state, prevState, getState, updatedKey) { 35176 if (group.suspendCounts?.has(listener)) return; 35177 const { disposables } = group; 35178 const cleanup = disposables.size ? disposables.get(listener) : void 0; 35179 if (cleanup) { 35180 disposables.delete(listener); 35181 const stateBeforeCleanup = state; 35182 cleanup(); 35183 state = getState?.() ?? state; 35184 if (state !== stateBeforeCleanup) prevState = getCleanupPrevState(prevState, state, stateBeforeCleanup, updatedKey) ?? prevState; 35185 } 35186 const result = listener(state, prevState); 35187 if (result) setListenerCleanup(group, listener, result); 35188 } 35189 function runLiveListeners({ group, getState, prevState, updatedKey, notifiedListeners }) { 35190 const allKeysListeners = group.allKeysListeners; 35191 for (const listener of group.listeners) { 35192 if (notifiedListeners?.has(listener)) continue; 35193 if (!allKeysListeners?.has(listener)) { 35194 if (!hasUpdatedKey(group.listenerKeys.get(listener), updatedKey)) continue; 35195 } 35196 notifiedListeners?.add(listener); 35197 notifyStoreListener(group, listener, getState(), prevState, getState, updatedKey); 35198 } 35199 } 35200 function createStore(initialState, ...stores) { 35201 let state = initialState; 35202 let prevStateBatch = state; 35203 let destroy = noop5; 35204 let batchPending = false; 35205 let inDispatch = false; 35206 let updatedKeys = /* @__PURE__ */ new Set(); 35207 const instances = /* @__PURE__ */ new Set(); 35208 const setups = /* @__PURE__ */ new Set(); 35209 const syncListenerGroup = { 35210 listeners: /* @__PURE__ */ new Set(), 35211 disposables: /* @__PURE__ */ new Map(), 35212 listenerKeys: /* @__PURE__ */ new WeakMap() 35213 }; 35214 const batchListenerGroup = { 35215 listeners: /* @__PURE__ */ new Set(), 35216 disposables: /* @__PURE__ */ new Map(), 35217 listenerKeys: /* @__PURE__ */ new WeakMap() 35218 }; 35219 const storeSetup = (callback) => { 35220 setups.add(callback); 35221 return () => setups.delete(callback); 35222 }; 35223 const storeInit = () => { 35224 const initializedInstances = instances.size; 35225 const instance = /* @__PURE__ */ Symbol(); 35226 instances.add(instance); 35227 const maybeDestroy = () => { 35228 if (!instances.delete(instance)) return; 35229 if (instances.size) return; 35230 destroy(); 35231 }; 35232 if (initializedInstances) return maybeDestroy; 35233 const stateKeys = getKeys(state); 35234 const desyncs = []; 35235 for (const store of stores) { 35236 const storeState = store?.getState?.(); 35237 if (!storeState) continue; 35238 const keys = stateKeys.filter((key) => hasOwnProperty(storeState, key)); 35239 if (!keys.length) continue; 35240 if (stores.length === 1 || keys.length === stateKeys.length) { 35241 for (const key of keys) desyncs.push(sync(store, [key], (state2) => { 35242 setState(key, state2[key], true); 35243 })); 35244 continue; 35245 } 35246 desyncs.push(subscribe(store, keys, (state2, prevState) => { 35247 for (const key of keys) { 35248 if (state2[key] === prevState[key]) continue; 35249 setState(key, state2[key], true); 35250 } 35251 })); 35252 for (const key of keys) { 35253 const liveState = store?.getState?.(); 35254 if (!liveState) continue; 35255 setState(key, liveState[key], true); 35256 } 35257 } 35258 const teardowns = []; 35259 for (const setup2 of setups) teardowns.push(setup2()); 35260 const cleanups = stores.map(init); 35261 destroy = chain(...desyncs, ...teardowns, ...cleanups); 35262 return maybeDestroy; 35263 }; 35264 const deleteListenerIndexes = (group, listener, keys) => { 35265 if (keys === void 0) return; 35266 if (keys) deleteKeyedListener(group.listenersByKey, keys, listener); 35267 else group.allKeysListeners?.delete(listener); 35268 }; 35269 const fastPathFrames = []; 35270 const registerListener = (keys, listener, group = syncListenerGroup) => { 35271 const listenerKeysValue = keys ? [...keys] : null; 35272 const wasRegistered = group.listeners.has(listener); 35273 if (!wasRegistered) clearFastPathNotifiedListener(fastPathFrames, group, listener); 35274 if (!listenerKeysValue) { 35275 if (wasRegistered) preserveFastPathFrames(fastPathFrames, group); 35276 preserveFastPathPassedListeners(fastPathFrames, group, listener); 35277 } else preserveFastPathPassedKeyedListeners({ 35278 fastPathFrames, 35279 group, 35280 keys: listenerKeysValue, 35281 listener 35282 }); 35283 if (wasRegistered) { 35284 preserveFastPathFrames(fastPathFrames, group, listener); 35285 deleteListenerIndexes(group, listener, group.listenerKeys.get(listener)); 35286 } 35287 group.listeners.add(listener); 35288 if (listenerKeysValue) { 35289 group.listenersByKey ??= /* @__PURE__ */ new Map(); 35290 addKeyedListener(group.listenersByKey, listenerKeysValue, listener); 35291 addFastPathKeyedListener({ 35292 fastPathFrames, 35293 group, 35294 keys: listenerKeysValue, 35295 listener 35296 }); 35297 } else { 35298 group.allKeysListeners ??= /* @__PURE__ */ new Set(); 35299 group.allKeysListeners.add(listener); 35300 } 35301 group.listenerKeys.set(listener, listenerKeysValue); 35302 return () => { 35303 const cleanup = group.disposables.get(listener); 35304 group.disposables.delete(listener); 35305 preserveFastPathFrames(fastPathFrames, group, listener); 35306 const currentKeys = group.listenerKeys.get(listener); 35307 deleteListenerIndexes(group, listener, listenerKeysValue); 35308 if (currentKeys !== listenerKeysValue) deleteListenerIndexes(group, listener, currentKeys); 35309 group.listenerKeys.delete(listener); 35310 group.listeners.delete(listener); 35311 cleanup?.(); 35312 }; 35313 }; 35314 const storeSubscribe = (keys, listener) => registerListener(keys, listener); 35315 const runInitialListener = (group, listener, prevState) => { 35316 const shouldSuspend = group.listeners.has(listener); 35317 if (shouldSuspend) { 35318 group.suspendCounts ??= /* @__PURE__ */ new Map(); 35319 const count = group.suspendCounts.get(listener) ?? 0; 35320 group.suspendCounts.set(listener, count + 1); 35321 } 35322 let cleanupPrevState; 35323 try { 35324 const stateBeforeCleanups = state; 35325 runPendingCleanup(group, listener); 35326 if (state !== stateBeforeCleanups) cleanupPrevState = getCleanupPrevState(prevState, state, stateBeforeCleanups); 35327 const cleanup = listener(state, cleanupPrevState ?? prevState); 35328 if (cleanup) setListenerCleanup(group, listener, cleanup); 35329 } finally { 35330 if (shouldSuspend) { 35331 const suspendCounts = group.suspendCounts; 35332 const count = suspendCounts?.get(listener); 35333 if (count && count > 1) suspendCounts?.set(listener, count - 1); 35334 else suspendCounts?.delete(listener); 35335 if (!suspendCounts?.size) delete group.suspendCounts; 35336 } 35337 } 35338 }; 35339 const storeSync = (keys, listener) => { 35340 runInitialListener(syncListenerGroup, listener, state); 35341 return registerListener(keys, listener); 35342 }; 35343 const storeBatch = (keys, listener) => { 35344 if (!batchListenerGroup.listeners.size && !inDispatch) prevStateBatch = state; 35345 runInitialListener(batchListenerGroup, listener, prevStateBatch); 35346 return registerListener(keys, listener, batchListenerGroup); 35347 }; 35348 const storePick = (keys) => createStore(pick(state, keys), finalStore); 35349 const storeOmit = (keys) => createStore(omit(state, keys), finalStore); 35350 const getState = () => state; 35351 const runListeners = (group, prevState, updatedKey) => { 35352 if (!(updatedKey instanceof Set) && !group.allKeysListeners?.size) { 35353 const keyedListeners = group.listenersByKey?.get(updatedKey); 35354 if (!keyedListeners) return; 35355 const frame = { 35356 group, 35357 keyedListeners, 35358 updatedKey, 35359 currentListener: null 35360 }; 35361 fastPathFrames.push(frame); 35362 try { 35363 for (const listener of keyedListeners) { 35364 if (frame.notifiedListeners?.has(listener)) continue; 35365 frame.currentListener = listener; 35366 frame.notifiedListeners?.add(listener); 35367 notifyStoreListener(group, listener, state, prevState, getState, updatedKey); 35368 if (!group.allKeysListeners?.size && !frame.recoverToLive) continue; 35369 const notifiedListeners = frame.notifiedListeners ?? getFastPathNotifiedListeners(frame); 35370 frame.notifiedListeners = notifiedListeners; 35371 frame.recovering = true; 35372 runLiveListeners({ 35373 group, 35374 getState, 35375 prevState, 35376 updatedKey, 35377 notifiedListeners 35378 }); 35379 return; 35380 } 35381 } finally { 35382 fastPathFrames.pop(); 35383 } 35384 return; 35385 } 35386 runLiveListeners({ 35387 group, 35388 getState, 35389 prevState, 35390 updatedKey 35391 }); 35392 }; 35393 const setState = (key, value, fromStores = false) => { 35394 if (!hasOwnProperty(state, key)) return; 35395 const currentValue = state[key]; 35396 const nextValue = applyState(value, () => currentValue); 35397 if (isSameValue(nextValue, currentValue)) return; 35398 const wasInDispatch = inDispatch; 35399 inDispatch = true; 35400 const prevState = state; 35401 const nextState = { 35402 ...state, 35403 [key]: nextValue 35404 }; 35405 state = nextState; 35406 let superseded = false; 35407 try { 35408 if (!fromStores && stores.length) { 35409 for (const store of stores) { 35410 store?.setState?.(key, nextValue); 35411 if (isSameValue(state[key], nextValue)) continue; 35412 superseded = true; 35413 break; 35414 } 35415 if (superseded) { 35416 let pass = 0; 35417 for (; pass < MAX_REPAIR_PASSES; pass += 1) { 35418 let changed = false; 35419 for (const store of stores) { 35420 const previousValue = state[key]; 35421 store?.setState?.(key, previousValue); 35422 if (!isSameValue(state[key], previousValue)) changed = true; 35423 } 35424 if (!changed) break; 35425 } 35426 if (pass === MAX_REPAIR_PASSES) console.warn("Parent stores did not converge after a superseded fan-out; a parent listener may be rewriting this key in a cycle."); 35427 } 35428 } 35429 if (!superseded) { 35430 const listenerPrevState = state === nextState ? prevState : { 35431 ...state, 35432 [key]: prevState[key] 35433 }; 35434 runListeners(syncListenerGroup, listenerPrevState, key); 35435 } 35436 } finally { 35437 inDispatch = wasInDispatch; 35438 } 35439 if (!batchListenerGroup.listeners.size) { 35440 if (!inDispatch) prevStateBatch = state; 35441 return; 35442 } 35443 updatedKeys.add(key); 35444 if (batchPending) return; 35445 batchPending = true; 35446 queueMicrotask(() => { 35447 batchPending = false; 35448 const snapshot = state; 35449 const updatedKeysSnapshot = updatedKeys; 35450 updatedKeys = /* @__PURE__ */ new Set(); 35451 const prevStateBatchBefore = prevStateBatch; 35452 runListeners(batchListenerGroup, prevStateBatchBefore, updatedKeysSnapshot); 35453 if (prevStateBatch === prevStateBatchBefore) prevStateBatch = snapshot; 35454 }); 35455 }; 35456 const finalStore = { 35457 getState, 35458 setState, 35459 __unstableInternals: { 35460 setup: storeSetup, 35461 init: storeInit, 35462 subscribe: storeSubscribe, 35463 sync: storeSync, 35464 batch: storeBatch, 35465 pick: storePick, 35466 omit: storeOmit 35467 } 35468 }; 35469 return finalStore; 35470 } 35471 function setup(store, ...args) { 35472 if (!store) return; 35473 return getInternal(store, "setup")(...args); 35474 } 35475 function init(store, ...args) { 35476 if (!store) return; 35477 return getInternal(store, "init")(...args); 35478 } 35479 function subscribe(store, ...args) { 35480 if (!store) return; 35481 return getInternal(store, "subscribe")(...args); 35482 } 35483 function sync(store, ...args) { 35484 if (!store) return; 35485 return getInternal(store, "sync")(...args); 35486 } 35487 function batch(store, ...args) { 35488 if (!store) return; 35489 return getInternal(store, "batch")(...args); 35490 } 35491 function omit2(store, ...args) { 35492 if (!store) return; 35493 return getInternal(store, "omit")(...args); 35494 } 35495 function pick2(store, ...args) { 35496 if (!store) return; 35497 return getInternal(store, "pick")(...args); 35498 } 35499 function mergeStore(...stores) { 35500 const initialState = {}; 35501 for (const store2 of stores) { 35502 const nextState = store2?.getState?.(); 35503 if (nextState) Object.assign(initialState, nextState); 35504 } 35505 const store = createStore(initialState, ...stores); 35506 return Object.assign({}, ...stores, store); 35507 } 35508 function throwOnConflictingProps(props, store) { 35509 if (false) return; 35510 if (!store) return; 35511 const defaultKeys = Object.entries(props).filter(([key, value]) => key.startsWith("default") && value !== void 0).map(([key]) => { 35512 const stateKey = key.replace("default", ""); 35513 return `$stateKey[0]?.toLowerCase() || ""}$stateKey.slice(1)}`; 35514 }); 35515 if (!defaultKeys.length) return; 35516 const storeState = store.getState(); 35517 if (!defaultKeys.filter((key) => hasOwnProperty(storeState, key)).length) return; 35518 throw new Error(`Passing a store prop in conjunction with a default state is not supported. 35519 35520 const store = useSelectStore(); 35521 <SelectProvider store={store} defaultValue="Apple" /> 35522 ^ ^ 35523 35524 Instead, pass the default state to the topmost store: 35525 35526 const store = useSelectStore({ defaultValue: "Apple" }); 35527 <SelectProvider store={store} /> 35528 35529 See https://github.com/ariakit/ariakit/pull/2745 for more details. 35530 35531 If there's a particular need for this, please submit a feature request at https://github.com/ariakit/ariakit 35532 `); 35533 } 35534 35535 // node_modules/@ariakit/components/dist/collection/collection-store.js 35536 function getCommonParent(items) { 35537 const firstItem = items.find((item) => !!item.element); 35538 const lastElement = [...items].reverse().find((item) => !!item.element)?.element; 35539 let parentElement = firstItem?.element?.parentElement; 35540 if (!lastElement) return getDocument(parentElement).body; 35541 while (parentElement) { 35542 if (parentElement.contains(lastElement)) return parentElement; 35543 parentElement = parentElement.parentElement; 35544 } 35545 return getDocument(parentElement).body; 35546 } 35547 function getPrivateStore(store) { 35548 return store?.__unstablePrivateStore; 35549 } 35550 var itemIdCacheThreshold = 64; 35551 function getCachedItemIds(items, cache) { 35552 if (items.length < itemIdCacheThreshold) { 35553 if (cache.ids) { 35554 cache.items = void 0; 35555 cache.ids = void 0; 35556 } 35557 return; 35558 } 35559 if (cache.items === items) return cache.ids; 35560 const ids = /* @__PURE__ */ new Set(); 35561 for (const item of items) ids.add(item.id); 35562 cache.items = items; 35563 cache.ids = ids; 35564 return ids; 35565 } 35566 function setCachedItemIds(items, cache, ids) { 35567 if (items.length < itemIdCacheThreshold) { 35568 if (cache.ids) { 35569 cache.items = void 0; 35570 cache.ids = void 0; 35571 } 35572 return; 35573 } 35574 if (!ids) { 35575 ids = /* @__PURE__ */ new Set(); 35576 for (const item of items) ids.add(item.id); 35577 } 35578 cache.items = items; 35579 cache.ids = ids; 35580 } 35581 function createCollectionStore(props = {}) { 35582 throwOnConflictingProps(props, props.store); 35583 const syncState = props.store?.getState(); 35584 const items = defaultValue(props.items, syncState?.items, props.defaultItems, []); 35585 const syncPrivateStore = getPrivateStore(props.store); 35586 const collectionLookup = syncPrivateStore?.__unstableCollectionLookup ?? { 35587 controlledItems: new Map(items.map((item) => [item.id, item])), 35588 registeredItems: /* @__PURE__ */ new Map(), 35589 controlledItemsSource: items, 35590 propagatedItems: items 35591 }; 35592 const { controlledItems, registeredItems } = collectionLookup; 35593 const itemIdCache = {}; 35594 const renderedItemIdCache = {}; 35595 const initialState = { 35596 items, 35597 renderedItems: defaultValue(syncState?.renderedItems, []) 35598 }; 35599 const collection = createStore(initialState, props.store); 35600 const privateStore = Object.assign(createStore({ 35601 items, 35602 renderedItems: initialState.renderedItems 35603 }, syncPrivateStore), { __unstableCollectionLookup: collectionLookup }); 35604 const sortItems = (renderedItems) => { 35605 const sortedItems = sortBasedOnDOMPosition(renderedItems, (i2) => i2.element); 35606 privateStore.setState("renderedItems", sortedItems); 35607 collection.setState("renderedItems", sortedItems); 35608 }; 35609 const indexControlledItems = (items2) => { 35610 if (items2 === collectionLookup.controlledItemsSource) return; 35611 collectionLookup.controlledItemsSource = items2; 35612 controlledItems.clear(); 35613 for (const item of items2) controlledItems.set(item.id, item); 35614 }; 35615 const setState = (key, value) => { 35616 if (key !== "items") { 35617 collection.setState(key, value); 35618 return; 35619 } 35620 collection.setState("items", (items2) => { 35621 const nextItems = applyState(value, items2); 35622 if (nextItems === items2) return items2; 35623 collectionLookup.propagatedItems = nextItems; 35624 indexControlledItems(nextItems); 35625 return nextItems; 35626 }); 35627 }; 35628 setup(collection, () => init(privateStore)); 35629 if (!syncPrivateStore) { 35630 subscribe(collection, ["items"], ({ items: items2 }) => { 35631 if (items2 === collectionLookup.propagatedItems) return; 35632 collectionLookup.propagatedItems = items2; 35633 indexControlledItems(items2); 35634 }); 35635 setup(privateStore, () => { 35636 return batch(privateStore, ["items"], ({ items: items2 }) => { 35637 collectionLookup.propagatedItems = items2; 35638 collection.setState("items", items2); 35639 }); 35640 }); 35641 } 35642 setup(privateStore, () => { 35643 return batch(privateStore, ["renderedItems"], (state) => { 35644 let firstRun = true; 35645 let raf = requestAnimationFrame(() => { 35646 const { renderedItems } = collection.getState(); 35647 if (state.renderedItems === renderedItems) return; 35648 sortItems(state.renderedItems); 35649 }); 35650 if (typeof IntersectionObserver !== "function") return () => cancelAnimationFrame(raf); 35651 const ioCallback = () => { 35652 if (firstRun) { 35653 firstRun = false; 35654 return; 35655 } 35656 cancelAnimationFrame(raf); 35657 raf = requestAnimationFrame(() => sortItems(state.renderedItems)); 35658 }; 35659 const root = getCommonParent(state.renderedItems); 35660 const observer = new IntersectionObserver(ioCallback, { root }); 35661 for (const item of state.renderedItems) { 35662 if (!item.element) continue; 35663 observer.observe(item.element); 35664 } 35665 return () => { 35666 cancelAnimationFrame(raf); 35667 observer.disconnect(); 35668 }; 35669 }); 35670 }); 35671 const createMergeItem = (key, cache, lookup) => { 35672 const registeredItems2 = lookup?.registeredItems; 35673 const controlledItems2 = lookup?.controlledItems; 35674 return (item) => { 35675 const previousRegisteredItem = registeredItems2?.get(item.id); 35676 const wasKnown = !!previousRegisteredItem || !!controlledItems2?.has(item.id); 35677 let prevItem; 35678 privateStore.setState(key, (items2) => { 35679 const ids = !!cache.ids || items2.length >= itemIdCacheThreshold && !wasKnown ? getCachedItemIds(items2, cache) : void 0; 35680 const index2 = ids && !ids.has(item.id) ? -1 : items2.findIndex(({ id }) => id === item.id); 35681 const nextItems = items2.slice(); 35682 if (index2 !== -1) { 35683 prevItem = items2[index2]; 35684 const nextItem = { 35685 ...prevItem, 35686 ...item 35687 }; 35688 nextItems[index2] = nextItem; 35689 registeredItems2?.set(item.id, nextItem); 35690 } else { 35691 nextItems.push(item); 35692 registeredItems2?.set(item.id, item); 35693 ids?.add(item.id); 35694 } 35695 if (cache.ids || index2 === -1 && nextItems.length >= itemIdCacheThreshold) setCachedItemIds(nextItems, cache, ids); 35696 return nextItems; 35697 }); 35698 const unmergeItem = () => { 35699 if (registeredItems2) { 35700 if (previousRegisteredItem) registeredItems2.set(item.id, previousRegisteredItem); 35701 else registeredItems2.delete(item.id); 35702 } 35703 privateStore.setState(key, (items2) => { 35704 const ids = cache.ids ? getCachedItemIds(items2, cache) : void 0; 35705 if (!prevItem) { 35706 const nextItems2 = items2.filter(({ id }) => id !== item.id); 35707 ids?.delete(item.id); 35708 if (cache.ids) setCachedItemIds(nextItems2, cache, ids); 35709 return nextItems2; 35710 } 35711 const index2 = items2.findIndex(({ id }) => id === item.id); 35712 if (index2 === -1) return items2; 35713 const nextItems = items2.slice(); 35714 nextItems[index2] = prevItem; 35715 if (cache.ids) setCachedItemIds(nextItems, cache, ids); 35716 return nextItems; 35717 }); 35718 }; 35719 return unmergeItem; 35720 }; 35721 }; 35722 const registerItem = createMergeItem("items", itemIdCache, collectionLookup); 35723 const mergeRenderedItem = createMergeItem("renderedItems", renderedItemIdCache); 35724 return { 35725 ...collection, 35726 setState, 35727 registerItem, 35728 renderItem: (item) => chain(registerItem(item), mergeRenderedItem(item)), 35729 item: (id) => { 35730 if (!id) return null; 35731 if (!registeredItems.size) return controlledItems.get(id) ?? null; 35732 return registeredItems.get(id) ?? controlledItems.get(id) ?? null; 35733 }, 35734 __unstablePrivateStore: privateStore 35735 }; 35736 } 35737 35738 // node_modules/@ariakit/components/dist/composite/composite-store.js 35739 var NULL_ITEM = { id: null }; 35740 function findFirstEnabledItem(items, excludeId) { 35741 return items.find((item) => { 35742 if (excludeId) return !item.disabled && item.id !== excludeId; 35743 return !item.disabled; 35744 }); 35745 } 35746 function findLastEnabledItem(items) { 35747 for (let i2 = items.length - 1; i2 >= 0; i2 -= 1) { 35748 const item = items[i2]; 35749 if (!item) continue; 35750 if (item.disabled) continue; 35751 return item; 35752 } 35753 } 35754 function getEnabledItems(items, excludeId) { 35755 return items.filter((item) => { 35756 if (excludeId) return !item.disabled && item.id !== excludeId; 35757 return !item.disabled; 35758 }); 35759 } 35760 function getItemsInRow(items, rowId) { 35761 return items.filter((item) => item.rowId === rowId); 35762 } 35763 function findEnabledItemId({ items, fromIndex, step, rowId, excludeId }) { 35764 for (let i2 = fromIndex; i2 >= 0 && i2 < items.length; i2 += step) { 35765 const item = items[i2]; 35766 if (!item) continue; 35767 if (item.rowId !== rowId) continue; 35768 if (item.disabled) continue; 35769 const itemId = item.id; 35770 if (excludeId != null && itemId === excludeId) continue; 35771 return itemId; 35772 } 35773 } 35774 function flipItems(items, activeId, shouldInsertNullItem = false) { 35775 const index2 = items.findIndex((item) => item.id === activeId); 35776 return [ 35777 ...items.slice(index2 + 1), 35778 ...shouldInsertNullItem ? [NULL_ITEM] : [], 35779 ...items.slice(0, index2) 35780 ]; 35781 } 35782 var rowMapItemThreshold = 48; 35783 var rowMapRowThreshold = 4; 35784 function groupSmallItemsByRows(items) { 35785 const rows = []; 35786 let previousRow; 35787 let previousRowId; 35788 for (const item of items) { 35789 const rowId = item.rowId; 35790 if (previousRow && previousRowId === rowId) { 35791 previousRow.push(item); 35792 continue; 35793 } 35794 const row = rows.find((currentRow) => currentRow[0]?.rowId === rowId); 35795 if (row) { 35796 row.push(item); 35797 previousRow = row; 35798 } else { 35799 previousRow = [item]; 35800 rows.push(previousRow); 35801 } 35802 previousRowId = rowId; 35803 } 35804 return rows; 35805 } 35806 function groupLargeItemsByRows(items) { 35807 const firstItem = items[0]; 35808 if (!firstItem) return []; 35809 let itemIndex = 1; 35810 while (itemIndex < items.length && items[itemIndex]?.rowId === firstItem.rowId) itemIndex += 1; 35811 const firstRow = items.slice(0, itemIndex); 35812 if (itemIndex === items.length) return [firstRow]; 35813 const rows = [firstRow]; 35814 let rowsById; 35815 for (; itemIndex < items.length; itemIndex += 1) { 35816 const item = items[itemIndex]; 35817 if (!item) continue; 35818 const row = rowsById ? rowsById.get(item.rowId) : rows.find((currentRow) => currentRow[0]?.rowId === item.rowId); 35819 if (row) { 35820 row.push(item); 35821 continue; 35822 } 35823 const newRow = [item]; 35824 rows.push(newRow); 35825 if (rowsById) rowsById.set(item.rowId, newRow); 35826 else if (rows.length === rowMapRowThreshold) rowsById = new Map(rows.map((currentRow) => [currentRow[0]?.rowId, currentRow])); 35827 } 35828 return rows; 35829 } 35830 function groupItemsByRows(items) { 35831 if (items.length >= rowMapItemThreshold) return groupLargeItemsByRows(items); 35832 return groupSmallItemsByRows(items); 35833 } 35834 function getMaxRowLength(array) { 35835 let maxLength = 0; 35836 for (const { length } of array) if (length > maxLength) maxLength = length; 35837 return maxLength; 35838 } 35839 function createEmptyItem(rowId) { 35840 return { 35841 id: "__EMPTY_ITEM__", 35842 disabled: true, 35843 rowId 35844 }; 35845 } 35846 function normalizeRows(rows, activeId, focusShift) { 35847 const maxLength = getMaxRowLength(rows); 35848 for (const row of rows) for (let i2 = 0; i2 < maxLength; i2 += 1) { 35849 const item = row[i2]; 35850 if (!item || focusShift && item.disabled) { 35851 const previousItem = i2 === 0 && focusShift ? findFirstEnabledItem(row) : row[i2 - 1]; 35852 row[i2] = previousItem && activeId !== previousItem.id && focusShift ? previousItem : createEmptyItem(previousItem?.rowId); 35853 } 35854 } 35855 return rows; 35856 } 35857 function verticalizeItems(items) { 35858 const rows = groupItemsByRows(items); 35859 const maxLength = getMaxRowLength(rows); 35860 const verticalized = []; 35861 for (let i2 = 0; i2 < maxLength; i2 += 1) for (const row of rows) { 35862 const item = row[i2]; 35863 if (item) verticalized.push({ 35864 ...item, 35865 rowId: item.rowId ? `$i2}` : void 0 35866 }); 35867 } 35868 return verticalized; 35869 } 35870 function createCompositeStore(props = {}) { 35871 const syncState = props.store?.getState(); 35872 const collection = createCollectionStore(props); 35873 const activeId = defaultValue(props.activeId, syncState?.activeId, props.defaultActiveId); 35874 const compositeElement = defaultValue(syncState?.compositeElement, syncState?.baseElement, null); 35875 const compositeElementInFocusOrder = defaultValue(props.compositeElementInFocusOrder, props.includesBaseElement, syncState?.compositeElementInFocusOrder, syncState?.includesBaseElement, activeId === null); 35876 const initialState = { 35877 ...collection.getState(), 35878 id: defaultValue(props.id, syncState?.id) ?? `id-$Math.random().toString(36).slice(2, 8)}`, 35879 activeId, 35880 compositeElement, 35881 baseElement: compositeElement, 35882 compositeElementInFocusOrder, 35883 includesBaseElement: compositeElementInFocusOrder, 35884 moves: defaultValue(syncState?.moves, 0), 35885 orientation: defaultValue(props.orientation, syncState?.orientation, "both"), 35886 rtl: defaultValue(props.rtl, syncState?.rtl, false), 35887 virtualFocus: defaultValue(props.virtualFocus, syncState?.virtualFocus, false), 35888 focusLoop: defaultValue(props.focusLoop, syncState?.focusLoop, false), 35889 focusWrap: defaultValue(props.focusWrap, syncState?.focusWrap, false), 35890 focusShift: defaultValue(props.focusShift, syncState?.focusShift, false) 35891 }; 35892 const composite = createStore(initialState, collection, props.store); 35893 setup(composite, () => chain(sync(composite, ["compositeElement"], (state) => { 35894 composite.setState("baseElement", state.compositeElement); 35895 }), sync(composite, ["baseElement"], (state) => { 35896 composite.setState("compositeElement", state.baseElement); 35897 }), sync(composite, ["compositeElementInFocusOrder"], (state) => { 35898 composite.setState("includesBaseElement", state.compositeElementInFocusOrder); 35899 }), sync(composite, ["includesBaseElement"], (state) => { 35900 composite.setState("compositeElementInFocusOrder", state.includesBaseElement); 35901 }))); 35902 setup(composite, () => sync(composite, ["renderedItems", "activeId"], (state) => { 35903 composite.setState("activeId", (activeId2) => { 35904 if (activeId2 !== void 0) return activeId2; 35905 return findFirstEnabledItem(state.renderedItems)?.id; 35906 }); 35907 })); 35908 const getNextId = (direction = "next", options = {}) => { 35909 const defaultState = composite.getState(); 35910 const compositeElementInFocusOrder2 = defaultValue(options.compositeElementInFocusOrder, options.includesBaseElement, defaultState.compositeElementInFocusOrder); 35911 const { skip = 0, activeId: activeId2 = defaultState.activeId, focusShift = defaultState.focusShift, focusLoop = defaultState.focusLoop, focusWrap = defaultState.focusWrap, renderedItems = defaultState.renderedItems, rtl = defaultState.rtl } = options; 35912 const isVerticalDirection = direction === "up" || direction === "down"; 35913 const isNextDirection = direction === "next" || direction === "down"; 35914 const canReverse = isNextDirection ? rtl && !isVerticalDirection : !rtl || isVerticalDirection; 35915 const canShift = focusShift && !skip; 35916 if (!skip && !focusWrap && !compositeElementInFocusOrder2 && activeId2 != null) { 35917 if (!isVerticalDirection ? true : !canShift && !renderedItems.some((item) => item.rowId != null)) { 35918 let activeIndex2 = -1; 35919 if (renderedItems === defaultState.renderedItems) { 35920 const firstItem = renderedItems[0]; 35921 if (firstItem && collection.item(firstItem.id) === firstItem) { 35922 const registeredItem = collection.item(activeId2); 35923 if (registeredItem?.id === activeId2) activeIndex2 = renderedItems.indexOf(registeredItem); 35924 } 35925 } 35926 if (activeIndex2 === -1) activeIndex2 = renderedItems.findIndex((item) => item.id === activeId2); 35927 const activeItem2 = renderedItems[activeIndex2]; 35928 if (activeItem2) { 35929 const step = canReverse ? -1 : 1; 35930 const nextId = findEnabledItemId({ 35931 items: renderedItems, 35932 fromIndex: activeIndex2 + step, 35933 step, 35934 rowId: activeItem2.rowId, 35935 excludeId: activeId2 35936 }); 35937 if (nextId !== void 0) return nextId; 35938 if (!(focusLoop && (isVerticalDirection ? focusLoop !== "horizontal" : focusLoop !== "vertical"))) return void 0; 35939 return findEnabledItemId({ 35940 items: renderedItems, 35941 fromIndex: step === 1 ? 0 : renderedItems.length - 1, 35942 step, 35943 rowId: activeItem2.rowId, 35944 excludeId: activeId2 35945 }); 35946 } 35947 } 35948 } 35949 let items = !isVerticalDirection ? renderedItems : flatten2DArray(normalizeRows(groupItemsByRows(renderedItems), activeId2, canShift)); 35950 items = canReverse ? reverseArray(items) : items; 35951 items = isVerticalDirection ? verticalizeItems(items) : items; 35952 if (activeId2 == null) return findFirstEnabledItem(items)?.id; 35953 const activeItem = items.find((item) => item.id === activeId2); 35954 if (!activeItem) return findFirstEnabledItem(items)?.id; 35955 const isGrid2 = items.some((item) => item.rowId); 35956 const activeIndex = items.indexOf(activeItem); 35957 const nextItems = items.slice(activeIndex + 1); 35958 const nextItemsInRow = getItemsInRow(nextItems, activeItem.rowId); 35959 if (skip) { 35960 const nextEnabledItemsInRow = getEnabledItems(nextItemsInRow, activeId2); 35961 return (nextEnabledItemsInRow.slice(skip)[0] || nextEnabledItemsInRow[nextEnabledItemsInRow.length - 1])?.id; 35962 } 35963 const canLoop = focusLoop && (isVerticalDirection ? focusLoop !== "horizontal" : focusLoop !== "vertical"); 35964 const canWrap = isGrid2 && focusWrap && (isVerticalDirection ? focusWrap !== "horizontal" : focusWrap !== "vertical"); 35965 const hasNullItem = isNextDirection ? (!isGrid2 || isVerticalDirection) && canLoop && compositeElementInFocusOrder2 : isVerticalDirection ? compositeElementInFocusOrder2 : false; 35966 if (canLoop) return findFirstEnabledItem(flipItems(canWrap && !hasNullItem ? items : getItemsInRow(items, activeItem.rowId), activeId2, hasNullItem), activeId2)?.id; 35967 if (canWrap) { 35968 const nextItem2 = findFirstEnabledItem(hasNullItem ? nextItemsInRow : nextItems, activeId2); 35969 return hasNullItem ? nextItem2?.id || null : nextItem2?.id; 35970 } 35971 const nextItem = findFirstEnabledItem(nextItemsInRow, activeId2); 35972 if (!nextItem && hasNullItem) return null; 35973 return nextItem?.id; 35974 }; 35975 const getNextIdFromOptions = (direction, options) => { 35976 if (typeof options === "number") return getNextId(direction, { skip: options }); 35977 return getNextId(direction, options); 35978 }; 35979 return { 35980 ...collection, 35981 ...composite, 35982 setCompositeElement: (element) => composite.setState("compositeElement", element), 35983 setBaseElement: (element) => composite.setState("compositeElement", element), 35984 setActiveId: (id) => composite.setState("activeId", id), 35985 move: (id) => { 35986 if (id === void 0) return; 35987 composite.setState("activeId", id); 35988 composite.setState("moves", (moves) => moves + 1); 35989 }, 35990 first: () => findFirstEnabledItem(composite.getState().renderedItems)?.id, 35991 last: () => findLastEnabledItem(composite.getState().renderedItems)?.id, 35992 next: (options) => getNextIdFromOptions("next", options), 35993 previous: (options) => getNextIdFromOptions("previous", options), 35994 down: (options) => getNextIdFromOptions("down", options), 35995 up: (options) => getNextIdFromOptions("up", options) 35996 }; 35997 } 35998 35999 // node_modules/@ariakit/react-components/dist/composite/utils.js 36000 var findFirstEnabledItem2 = findFirstEnabledItem; 36001 var groupItemsByRows2 = groupItemsByRows; 36002 var unmountingItems = /* @__PURE__ */ new WeakSet(); 36003 function markItemUnmounting(element) { 36004 if (getActiveElement(element) !== element) return; 36005 unmountingItems.add(element); 36006 queueMicrotask(() => unmountingItems.delete(element)); 36007 } 36008 function markItemMounted(element) { 36009 unmountingItems.delete(element); 36010 } 36011 function withCompositeScrollPreserved(store, callback) { 36012 const { virtualFocus, compositeElement } = store.getState(); 36013 if (!virtualFocus || !compositeElement || !isTextField(compositeElement)) { 36014 callback(); 36015 return; 36016 } 36017 const savedScrollLeft = compositeElement.scrollLeft; 36018 const savedScrollTop = compositeElement.scrollTop; 36019 callback(); 36020 compositeElement.scrollLeft = savedScrollLeft; 36021 compositeElement.scrollTop = savedScrollTop; 36022 } 36023 function getPopupElement(store) { 36024 const state = store.getState(); 36025 if (!("contentElement" in state)) return null; 36026 return state.contentElement; 36027 } 36028 function ownsFocus(store) { 36029 const { compositeElement } = store.getState(); 36030 const activeElement2 = getActiveElement(compositeElement); 36031 if (!activeElement2) return false; 36032 if (compositeElement?.contains(activeElement2)) return true; 36033 if (isItem(store, activeElement2)) return true; 36034 return !!getPopupElement(store)?.contains(activeElement2); 36035 } 36036 function presentItem({ store, id, focus, markedOnly, requireFocus, scrollIntoView }) { 36037 let element = null; 36038 let resolvedId; 36039 let focused = false; 36040 let focusLeftElement = false; 36041 let done = false; 36042 let wasMounted = false; 36043 let wasOpen = false; 36044 const compositeAtStart = store.getState().compositeElement; 36045 const activeAtStart = getActiveElement(compositeAtStart); 36046 const owner = requireFocus ? activeAtStart : null; 36047 const startedOnComposite = !!compositeAtStart?.contains(activeAtStart); 36048 const stillOwnsFocus = (target) => { 36049 if (!owner) return true; 36050 const activeElement2 = getActiveElement(owner); 36051 if (activeElement2 === owner) return true; 36052 if (activeElement2 === target) return true; 36053 return ownsFocus(store); 36054 }; 36055 const abandonedByState = (state) => { 36056 if ("mounted" in state) { 36057 if (state.mounted) wasMounted = true; 36058 else if (wasMounted) return true; 36059 } 36060 if ("open" in state) { 36061 if (state.open) wasOpen = true; 36062 else if (wasOpen) return true; 36063 } 36064 return id != null && state.activeId != null && state.activeId !== id; 36065 }; 36066 const entersClosedPopup = (state, target) => { 36067 if (!("open" in state)) return false; 36068 if (state.open) return false; 36069 const popup = getPopupElement(store); 36070 if (!popup?.contains(target)) return false; 36071 const { compositeElement } = state; 36072 if (!compositeElement) return false; 36073 if (popup.contains(compositeElement)) return false; 36074 return isVisible(target); 36075 }; 36076 const resolveElement = (state) => { 36077 const item = getEnabledItem(store, resolvedId ?? (id === void 0 ? state.activeId : id)); 36078 if (!item?.element?.isConnected) return null; 36079 resolvedId = item.id; 36080 return item.element; 36081 }; 36082 let removeFocusListeners; 36083 let unsubscribe; 36084 const cancel = () => { 36085 done = true; 36086 removeFocusListeners?.(); 36087 unsubscribe?.(); 36088 }; 36089 const present = () => { 36090 if (done) return; 36091 const state = store.getState(); 36092 if (abandonedByState(state)) return cancel(); 36093 let restoreFocus = false; 36094 if (!element) { 36095 element = resolveElement(state); 36096 if (!element) return; 36097 } else if (!element.isConnected) { 36098 restoreFocus = focused && !focusLeftElement && getActiveElement(element) === getDocument(element).body; 36099 element = resolveElement(state); 36100 if (!element) return cancel(); 36101 } 36102 if (restoreFocus) focused = false; 36103 else if (!stillOwnsFocus(element)) return cancel(); 36104 const focusWithheld = focus && startedOnComposite && entersClosedPopup(state, element); 36105 if (focusWithheld) { 36106 const { activeId } = state; 36107 if (activeId != null && activeId !== resolvedId) return cancel(); 36108 } 36109 if (focus && !focused && !focusWithheld) { 36110 focused = true; 36111 focusLeftElement = false; 36112 const itemElement = element; 36113 removeFocusListeners?.(); 36114 const onBlur = () => { 36115 focusLeftElement = !unmountingItems.has(itemElement); 36116 }; 36117 const onFocus = () => { 36118 focusLeftElement = false; 36119 }; 36120 itemElement.addEventListener("blur", onBlur); 36121 itemElement.addEventListener("focus", onFocus); 36122 removeFocusListeners = () => { 36123 itemElement.removeEventListener("blur", onBlur); 36124 itemElement.removeEventListener("focus", onFocus); 36125 }; 36126 withCompositeScrollPreserved(store, () => { 36127 itemElement.focus({ preventScroll: true }); 36128 }); 36129 if (done) return; 36130 } 36131 if (markedOnly && !element.hasAttribute("data-autofocus")) { 36132 if (focusWithheld) return; 36133 return cancel(); 36134 } 36135 if (!isVisible(element)) return; 36136 if ("unstable_placing" in state && state.unstable_placing) return; 36137 if (!focusWithheld) cancel(); 36138 if (scrollIntoView) { 36139 scrollIntoView(element); 36140 return; 36141 } 36142 element.scrollIntoView({ 36143 block: "nearest", 36144 inline: "nearest" 36145 }); 36146 }; 36147 unsubscribe = subscribe(store, [ 36148 "activeId", 36149 "items", 36150 "mounted", 36151 "open", 36152 "unstable_placing" 36153 ], present); 36154 present(); 36155 return cancel; 36156 } 36157 function usePresentItem(store) { 36158 const cancelRef = (0, import_react52.useRef)(null); 36159 const ownerRef = (0, import_react52.useRef)(store); 36160 const cancel = (0, import_react52.useCallback)(() => { 36161 cancelRef.current?.(); 36162 cancelRef.current = null; 36163 }, []); 36164 const present = (0, import_react52.useCallback)((params) => { 36165 if (!store) return; 36166 if (ownerRef.current !== store) return; 36167 cancel(); 36168 const cancelCurrent = presentItem({ 36169 store, 36170 ...params 36171 }); 36172 cancelRef.current = cancelCurrent; 36173 return cancelCurrent; 36174 }, [store, cancel]); 36175 useSafeLayoutEffect(() => { 36176 ownerRef.current = store; 36177 return () => { 36178 ownerRef.current = void 0; 36179 cancel(); 36180 }; 36181 }, [store, cancel]); 36182 return present; 36183 } 36184 function getEnabledItem(store, id) { 36185 if (!id) return null; 36186 return store.item(id) || null; 36187 } 36188 function selectTextField(element, collapseToEnd = false) { 36189 if (isTextField(element)) element.setSelectionRange(collapseToEnd ? element.value.length : 0, element.value.length); 36190 else if (element.isContentEditable) { 36191 const selection = getDocument(element).getSelection(); 36192 selection?.selectAllChildren(element); 36193 if (collapseToEnd) selection?.collapseToEnd(); 36194 } 36195 } 36196 var FOCUS_SILENTLY = /* @__PURE__ */ Symbol("FOCUS_SILENTLY"); 36197 function focusSilently(element) { 36198 element[FOCUS_SILENTLY] = true; 36199 element.focus({ preventScroll: true }); 36200 } 36201 function silentlyFocused(element) { 36202 const isSilentlyFocused = element[FOCUS_SILENTLY]; 36203 delete element[FOCUS_SILENTLY]; 36204 return isSilentlyFocused; 36205 } 36206 function isItem(store, element, exclude) { 36207 if (!element) return false; 36208 if (element === exclude) return false; 36209 const item = store.item(element.id); 36210 if (!item) return false; 36211 if (exclude && item.element === exclude) return false; 36212 return true; 36213 } 36214 36215 // node_modules/@ariakit/react-components/dist/composite/composite-item.js 36216 var import_react53 = __toESM(require_react(), 1); 36217 var import_jsx_runtime143 = __toESM(require_jsx_runtime(), 1); 36218 36219 // node_modules/@ariakit/react-store/dist/index.js 36220 var React146 = __toESM(require_react(), 1); 36221 var import_shim3 = __toESM(require_shim(), 1); 36222 var noopSubscribe = () => () => { 36223 }; 36224 function isStoreKeyArray(value) { 36225 return Array.isArray(value); 36226 } 36227 function isSameValue2(value, other) { 36228 return value === other || value !== value && other !== other; 36229 } 36230 function hasSameStoreKeys(keys, otherKeys) { 36231 if (keys?.length !== otherKeys.length) return false; 36232 for (let index2 = 0; index2 < keys.length; index2 += 1) { 36233 const key = keys[index2]; 36234 if (key === void 0) return false; 36235 if (isSameValue2(key, otherKeys[index2])) continue; 36236 return false; 36237 } 36238 return true; 36239 } 36240 function useStableStoreKeys(keys) { 36241 const keysRef = React146.useRef(null); 36242 const currentKeys = keysRef.current; 36243 if (keys === null) { 36244 keysRef.current = null; 36245 return null; 36246 } 36247 if (hasSameStoreKeys(currentKeys, keys)) return currentKeys; 36248 const nextKeys = [...keys]; 36249 keysRef.current = nextKeys; 36250 return nextKeys; 36251 } 36252 function useStoreState(store, keyOrKeysOrSelector = identity, selector2) { 36253 const subscriptionKeys = useStableStoreKeys(isStoreKeyArray(keyOrKeysOrSelector) ? keyOrKeysOrSelector : typeof keyOrKeysOrSelector === "function" ? null : [keyOrKeysOrSelector]); 36254 const storeSubscribe = React146.useCallback((callback) => { 36255 if (!store) return noopSubscribe(); 36256 if (subscriptionKeys?.length === 0) return noopSubscribe(); 36257 return subscribe(store, subscriptionKeys, callback); 36258 }, [store, subscriptionKeys]); 36259 const getSnapshot = () => { 36260 const state = store?.getState(); 36261 if (isStoreKeyArray(keyOrKeysOrSelector)) return selector2?.(state); 36262 if (typeof keyOrKeysOrSelector === "function") return keyOrKeysOrSelector(state); 36263 if (!state) return; 36264 if (!hasOwnProperty(state, keyOrKeysOrSelector)) return; 36265 return state[keyOrKeysOrSelector]; 36266 }; 36267 return (0, import_shim3.useSyncExternalStore)(storeSubscribe, getSnapshot, getSnapshot); 36268 } 36269 function getStoreStateObjectKeys(object, selectorKeys) { 36270 const keys = []; 36271 let hasSelector = false; 36272 for (const prop in object) { 36273 const keyOrSelector = object[prop]; 36274 if (keyOrSelector === void 0) continue; 36275 if (typeof keyOrSelector === "function") { 36276 hasSelector = true; 36277 continue; 36278 } 36279 if (keys.includes(keyOrSelector)) continue; 36280 keys.push(keyOrSelector); 36281 } 36282 if (!hasSelector) return keys; 36283 if (!selectorKeys) return null; 36284 for (const key of selectorKeys) { 36285 if (keys.includes(key)) continue; 36286 keys.push(key); 36287 } 36288 return keys; 36289 } 36290 function useStoreStateObject(store, objectOrKeys, object) { 36291 const stateObject = isStoreKeyArray(objectOrKeys) ? object ?? {} : objectOrKeys; 36292 const selectorKeys = isStoreKeyArray(objectOrKeys) ? objectOrKeys : void 0; 36293 const objRef = React146.useRef({}); 36294 const subscriptionKeys = useStableStoreKeys(getStoreStateObjectKeys(stateObject, selectorKeys)); 36295 const storeSubscribe = React146.useCallback((callback) => { 36296 if (!store) return noopSubscribe(); 36297 if (subscriptionKeys?.length === 0) return noopSubscribe(); 36298 return subscribe(store, subscriptionKeys, callback); 36299 }, [store, subscriptionKeys]); 36300 const getSnapshot = () => { 36301 const state = store?.getState(); 36302 let updated = false; 36303 const obj = objRef.current; 36304 for (const prop in stateObject) { 36305 const keyOrSelector = stateObject[prop]; 36306 if (keyOrSelector === void 0) continue; 36307 if (typeof keyOrSelector === "function") { 36308 const value2 = keyOrSelector(state); 36309 if (!Object.is(value2, obj[prop])) { 36310 obj[prop] = value2; 36311 updated = true; 36312 } 36313 } 36314 if (typeof keyOrSelector === "function") continue; 36315 const value = state && hasOwnProperty(state, keyOrSelector) ? state[keyOrSelector] : void 0; 36316 if (!Object.is(value, obj[prop])) { 36317 obj[prop] = value; 36318 updated = true; 36319 } 36320 } 36321 if (updated) objRef.current = { ...obj }; 36322 return objRef.current; 36323 }; 36324 return (0, import_shim3.useSyncExternalStore)(storeSubscribe, getSnapshot, getSnapshot); 36325 } 36326 function useStoreProps(store, props, key, setKey) { 36327 const value = hasOwnProperty(props, key) ? props[key] : void 0; 36328 const setValue = setKey ? props[setKey] : void 0; 36329 const hasSetValue = !!setValue; 36330 const propsRef = useLiveRef({ 36331 value, 36332 setValue 36333 }); 36334 useSafeLayoutEffect(() => { 36335 if (!hasSetValue) return; 36336 return subscribe(store, [key], (state, prev) => { 36337 const { value: value2, setValue: setValue2 } = propsRef.current; 36338 if (!setValue2) return; 36339 if (isSameValue2(state[key], prev[key])) return; 36340 if (isSameValue2(state[key], value2)) return; 36341 setValue2(state[key]); 36342 }); 36343 }, [ 36344 store, 36345 key, 36346 hasSetValue 36347 ]); 36348 useSafeLayoutEffect(() => { 36349 if (value === void 0) return; 36350 store.setState(key, value); 36351 return batch(store, [key], () => { 36352 if (value === void 0) return; 36353 store.setState(key, value); 36354 }); 36355 }); 36356 } 36357 function useStore2(createStore2, props) { 36358 const [store, setStore] = React146.useState(() => createStore2(props)); 36359 useSafeLayoutEffect(() => init(store), [store]); 36360 const useState58 = React146.useCallback((keyOrSelector) => useStoreState(store, keyOrSelector), [store]); 36361 return [React146.useMemo(() => ({ 36362 ...store, 36363 useState: useState58 36364 }), [store, useState58]), useEvent(() => { 36365 setStore((store2) => createStore2({ 36366 ...props, 36367 ...store2.getState() 36368 })); 36369 })]; 36370 } 36371 36372 // node_modules/@ariakit/react-components/dist/composite/composite-item.js 36373 var TagName4 = "button"; 36374 function isEditableElement(element) { 36375 if (isTextbox(element)) return true; 36376 return element.tagName === "INPUT" && !isButton(element); 36377 } 36378 function getNextPageOffset(scrollingElement, pageUp = false) { 36379 const height = scrollingElement.clientHeight; 36380 const { top } = scrollingElement.getBoundingClientRect(); 36381 const pageSize = Math.max(height * 0.875, height - 40) * 1.5; 36382 const pageOffset = pageUp ? height - pageSize + top : pageSize + top; 36383 if (scrollingElement.tagName === "HTML") return pageOffset + scrollingElement.scrollTop; 36384 return pageOffset; 36385 } 36386 function getItemOffset(itemElement, pageUp = false) { 36387 const { top } = itemElement.getBoundingClientRect(); 36388 if (pageUp) return top + itemElement.clientHeight; 36389 return top; 36390 } 36391 function findNextPageItemId(element, store, next, pageUp = false) { 36392 if (!store) return; 36393 if (!next) return; 36394 const { renderedItems } = store.getState(); 36395 const scrollingElement = getScrollingElement(element); 36396 if (!scrollingElement) return; 36397 const nextPageOffset = getNextPageOffset(scrollingElement, pageUp); 36398 let id; 36399 let prevDifference; 36400 for (let i2 = 0; i2 < renderedItems.length; i2 += 1) { 36401 const previousId = id; 36402 id = next(i2); 36403 if (!id) break; 36404 if (id === previousId) continue; 36405 const itemElement = getEnabledItem(store, id)?.element; 36406 if (!itemElement) continue; 36407 const difference = getItemOffset(itemElement, pageUp) - nextPageOffset; 36408 const absDifference = Math.abs(difference); 36409 if (pageUp && difference <= 0 || !pageUp && difference >= 0) { 36410 if (prevDifference !== void 0 && prevDifference < absDifference) id = previousId; 36411 break; 36412 } 36413 prevDifference = absDifference; 36414 } 36415 return id; 36416 } 36417 function targetIsAnotherItem(event, store) { 36418 if (isSelfTarget(event)) return false; 36419 return isItem(store, event.target); 36420 } 36421 var useCompositeItem2 = createHook(function useCompositeItem3({ store, rowId: rowIdProp, preventScrollOnKeyDown = false, moveOnKeyPress = true, tabbable: tabbable2 = false, getItem: getItemProp, typeaheadText, "aria-setsize": ariaSetSizeProp, "aria-posinset": ariaPosInSetProp, unstable_scrollIntoView: scrollIntoView, ...props }) { 36422 const context = useCompositeScopedContext(); 36423 store = store || context; 36424 const id = useId7(props.id); 36425 const ref = (0, import_react53.useRef)(null); 36426 const mountedElementRef = (0, import_react53.useRef)(null); 36427 const markUnmountingRef = (0, import_react53.useCallback)((element) => { 36428 const mountedElement = mountedElementRef.current; 36429 if (!element && mountedElement) markItemUnmounting(mountedElement); 36430 if (element) markItemMounted(element); 36431 mountedElementRef.current = element; 36432 }, []); 36433 const row = (0, import_react53.useContext)(CompositeRowContext); 36434 const trulyDisabled = disabledFromProps(props) && !props.accessibleWhenDisabled; 36435 const shouldRegisterItem = props.shouldRegisterItem; 36436 const getRowId = (state) => { 36437 if (rowIdProp) return rowIdProp; 36438 if (!state) return; 36439 if (!row?.compositeElement) return; 36440 if (row.compositeElement !== state.compositeElement) return; 36441 return row.id; 36442 }; 36443 const { rowId, compositeElement, ariaSetSize, ariaPosInSet } = useStoreStateObject(store, ["compositeElement", "renderedItems"], { 36444 rowId: getRowId, 36445 compositeElement(state) { 36446 return state?.compositeElement || void 0; 36447 }, 36448 ariaSetSize(state) { 36449 if (ariaSetSizeProp != null) return ariaSetSizeProp; 36450 if (!state) return; 36451 if (!row?.ariaSetSize) return; 36452 if (row.compositeElement !== state.compositeElement) return; 36453 return row.ariaSetSize; 36454 }, 36455 ariaPosInSet(state) { 36456 if (ariaPosInSetProp != null) return ariaPosInSetProp; 36457 if (!state) return; 36458 if (!row?.ariaPosInSet) return; 36459 if (row.compositeElement !== state.compositeElement) return; 36460 const rowId2 = getRowId(state); 36461 const itemsInRow = state.renderedItems.filter((item) => item.rowId === rowId2); 36462 return row.ariaPosInSet + itemsInRow.findIndex((item) => item.id === id); 36463 } 36464 }); 36465 const { isActiveItem, isTabbable: isTabbable2 } = useStoreStateObject(store, [ 36466 "activeId", 36467 "compositeElement", 36468 "renderedItems", 36469 "virtualFocus", 36470 "items" 36471 ], { 36472 isActiveItem(state) { 36473 return !!state && state.activeId === id; 36474 }, 36475 isTabbable(state) { 36476 if (!state) return true; 36477 if (!state.compositeElement && !state.renderedItems.length) return true; 36478 if (state.virtualFocus) return false; 36479 if (!state.renderedItems.length) return true; 36480 if (tabbable2) return true; 36481 if (state.activeId === null) return false; 36482 const item = store?.item(state.activeId); 36483 if (item?.disabled) return true; 36484 if (!item?.element) return true; 36485 return state.activeId === id; 36486 } 36487 }); 36488 const getItem = (0, import_react53.useCallback)((item) => { 36489 const nextItem = { 36490 ...item, 36491 id: id || item.id, 36492 rowId, 36493 disabled: trulyDisabled, 36494 children: item.element?.textContent, 36495 typeaheadText 36496 }; 36497 if (getItemProp) return getItemProp(nextItem); 36498 return nextItem; 36499 }, [ 36500 id, 36501 rowId, 36502 trulyDisabled, 36503 typeaheadText, 36504 getItemProp 36505 ]); 36506 const onFocusProp = props.onFocus; 36507 const hasFocusedComposite = (0, import_react53.useRef)(false); 36508 const cancelScheduledFocusRedirectRef = (0, import_react53.useRef)(null); 36509 const present = usePresentItem(store); 36510 const onFocus = useEvent((event) => { 36511 onFocusProp?.(event); 36512 if (event.defaultPrevented) return; 36513 if (isPortalEvent(event)) return; 36514 if (!id) return; 36515 if (!store) return; 36516 if (targetIsAnotherItem(event, store)) return; 36517 const { virtualFocus, compositeElement: compositeElement2 } = store.getState(); 36518 store.setActiveId(id); 36519 if (isTextbox(event.currentTarget)) selectTextField(event.currentTarget); 36520 if (!virtualFocus) { 36521 if (isSelfTarget(event) && store.item(id)) present({ 36522 id, 36523 markedOnly: true, 36524 requireFocus: true, 36525 scrollIntoView 36526 }); 36527 return; 36528 } 36529 if (!isSelfTarget(event)) return; 36530 if (isEditableElement(event.currentTarget)) return; 36531 const redirectFocusToCompositeElement = (relatedTarget2, compositeElement3) => { 36532 if (!isFocusable(compositeElement3)) { 36533 if (true) warnOnce("A composite widget with `virtualFocus` enabled requires a focusable composite element. Set the `focusable` prop to `true` or the `virtualFocus` option to `false`.", compositeElement3); 36534 return; 36535 } 36536 const fromComposite = relatedTarget2 === compositeElement3 || isItem(store, relatedTarget2); 36537 if (store.item(id)) present({ 36538 id, 36539 markedOnly: true, 36540 requireFocus: true, 36541 scrollIntoView 36542 }); 36543 hasFocusedComposite.current = true; 36544 if (fromComposite) focusSilently(compositeElement3); 36545 else compositeElement3.focus({ preventScroll: true }); 36546 }; 36547 if (compositeElement2?.isConnected) { 36548 redirectFocusToCompositeElement(event.relatedTarget, compositeElement2); 36549 return; 36550 } 36551 if (shouldRegisterItem === false) return; 36552 const { currentTarget, relatedTarget } = event; 36553 const cancelScheduledFocusRedirect = () => { 36554 cancelScheduledFocusRedirectRef.current?.(); 36555 cancelScheduledFocusRedirectRef.current = null; 36556 }; 36557 cancelScheduledFocusRedirect(); 36558 cancelScheduledFocusRedirectRef.current = subscribe(store, null, () => { 36559 if (getActiveElement(currentTarget) !== currentTarget) { 36560 cancelScheduledFocusRedirect(); 36561 return; 36562 } 36563 const state = store.getState(); 36564 const nextCompositeElement = state.compositeElement; 36565 if (!nextCompositeElement?.isConnected) return; 36566 cancelScheduledFocusRedirect(); 36567 if (!state.virtualFocus) return; 36568 redirectFocusToCompositeElement(relatedTarget, nextCompositeElement); 36569 }); 36570 }); 36571 const onBlurCaptureProp = props.onBlurCapture; 36572 const onBlurCapture = useEvent((event) => { 36573 onBlurCaptureProp?.(event); 36574 if (event.defaultPrevented) return; 36575 if (store?.getState()?.virtualFocus && hasFocusedComposite.current) { 36576 hasFocusedComposite.current = false; 36577 event.preventDefault(); 36578 event.stopPropagation(); 36579 } 36580 }); 36581 const onKeyDownProp = props.onKeyDown; 36582 const preventScrollOnKeyDownProp = useBooleanEvent(preventScrollOnKeyDown); 36583 const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); 36584 const onKeyDown = useEvent((event) => { 36585 onKeyDownProp?.(event); 36586 if (event.defaultPrevented) return; 36587 if (!isSelfTarget(event)) return; 36588 if (!store) return; 36589 const { currentTarget } = event; 36590 const state = store.getState(); 36591 const isGrid2 = !!store.item(id)?.rowId; 36592 const isVertical = state.orientation !== "horizontal"; 36593 const isHorizontal = state.orientation !== "vertical"; 36594 const canHomeEnd = () => { 36595 if (isGrid2) return true; 36596 if (isHorizontal) return true; 36597 if (!state.compositeElement) return true; 36598 if (!isTextField(state.compositeElement)) return true; 36599 return false; 36600 }; 36601 const action = { 36602 ArrowUp: (isGrid2 || isVertical) && store.up, 36603 ArrowRight: (isGrid2 || isHorizontal) && store.next, 36604 ArrowDown: (isGrid2 || isVertical) && store.down, 36605 ArrowLeft: (isGrid2 || isHorizontal) && store.previous, 36606 Home: () => { 36607 if (!canHomeEnd()) return; 36608 if (!isGrid2 || event.ctrlKey) return store?.first(); 36609 return store?.previous(-1); 36610 }, 36611 End: () => { 36612 if (!canHomeEnd()) return; 36613 if (!isGrid2 || event.ctrlKey) return store?.last(); 36614 return store?.next(-1); 36615 }, 36616 PageUp: () => { 36617 return findNextPageItemId(currentTarget, store, store?.up, true); 36618 }, 36619 PageDown: () => { 36620 return findNextPageItemId(currentTarget, store, store?.down); 36621 } 36622 }[event.key]; 36623 if (action) { 36624 if (isTextbox(currentTarget)) { 36625 const selection = getTextboxSelection(currentTarget); 36626 const isLeft = isHorizontal && event.key === "ArrowLeft"; 36627 const isRight = isHorizontal && event.key === "ArrowRight"; 36628 const isUp = isVertical && event.key === "ArrowUp"; 36629 const isDown = isVertical && event.key === "ArrowDown"; 36630 if (isRight || isDown) { 36631 const { length: valueLength } = getTextboxValue(currentTarget); 36632 if (selection.end !== valueLength) return; 36633 } else if ((isLeft || isUp) && selection.start !== 0) return; 36634 } 36635 const nextId = action(); 36636 if (preventScrollOnKeyDownProp(event) || nextId !== void 0) { 36637 if (!moveOnKeyPressProp(event)) return; 36638 event.preventDefault(); 36639 store.move(nextId); 36640 } 36641 } 36642 }); 36643 const providerValue = (0, import_react53.useMemo)(() => ({ 36644 id, 36645 compositeElement 36646 }), [id, compositeElement]); 36647 props = useWrapElement(props, (element) => /* @__PURE__ */ (0, import_jsx_runtime143.jsx)(CompositeItemContext.Provider, { 36648 value: providerValue, 36649 children: element 36650 }), [providerValue]); 36651 props = { 36652 "data-active-item": isActiveItem || void 0, 36653 ...props, 36654 id, 36655 ref: useMergeRefs5(ref, markUnmountingRef, props.ref), 36656 tabIndex: isTabbable2 ? props.tabIndex : -1, 36657 onFocus, 36658 onBlurCapture, 36659 onKeyDown 36660 }; 36661 props = useCommand(props); 36662 props = useCollectionItem({ 36663 store, 36664 ...props, 36665 getItem, 36666 shouldRegisterItem: id ? shouldRegisterItem : false 36667 }); 36668 return { 36669 ...props, 36670 "aria-setsize": ariaSetSize, 36671 "aria-posinset": ariaPosInSet 36672 }; 36673 }); 36674 var CompositeItem2 = memo4(forwardRef89(function CompositeItem3(props) { 36675 const htmlProps = useCompositeItem2(withDefaultButtonType(props)); 36676 return createElement3(TagName4, htmlProps); 36677 })); 36678 36679 // node_modules/@ariakit/react-components/dist/composite/composite.js 36680 var import_react54 = __toESM(require_react(), 1); 36681 var import_jsx_runtime144 = __toESM(require_jsx_runtime(), 1); 36682 var TagName5 = "div"; 36683 function isGrid(items) { 36684 return items.some((item) => !!item.rowId); 36685 } 36686 function isPrintableKey(event) { 36687 const target = event.target; 36688 if (target && !isTextField(target)) return false; 36689 return event.key.length === 1 && !event.ctrlKey && !event.metaKey; 36690 } 36691 function isModifierKey(event) { 36692 return event.key === "Shift" || event.key === "Control" || event.key === "Alt" || event.key === "Meta"; 36693 } 36694 function useKeyboardEventProxy(store, onKeyboardEvent, previousElementRef) { 36695 return useEvent((event) => { 36696 onKeyboardEvent?.(event); 36697 if (event.defaultPrevented) return; 36698 if (event.isPropagationStopped()) return; 36699 if (!isSelfTarget(event)) return; 36700 if (isModifierKey(event)) return; 36701 if (isPrintableKey(event)) return; 36702 const state = store.getState(); 36703 const activeElement2 = getEnabledItem(store, state.activeId)?.element; 36704 if (!activeElement2) return; 36705 const { view, ...eventInit } = event; 36706 if (activeElement2 !== previousElementRef?.current) activeElement2.focus({ preventScroll: true }); 36707 if (!fireKeyboardEvent(activeElement2, event.type, eventInit)) event.preventDefault(); 36708 if (event.currentTarget.contains(activeElement2)) event.stopPropagation(); 36709 }); 36710 } 36711 function findFirstEnabledItemInTheLastRow(items) { 36712 return findFirstEnabledItem2(flatten2DArray(reverseArray(groupItemsByRows2(items)))); 36713 } 36714 var CompositeFocusOnMove = memo4(function CompositeFocusOnMove2({ store, focusOnMove, previousElementRef, present, scrollIntoView }) { 36715 const moves = useStoreState(store, "moves"); 36716 const compositeElement = useStoreState(store, "compositeElement"); 36717 (0, import_react54.useEffect)(() => { 36718 if (!moves) return; 36719 if (!focusOnMove) return; 36720 const { activeId } = store.getState(); 36721 if (activeId == null) return; 36722 return present({ 36723 id: activeId, 36724 requireFocus: ownsFocus(store), 36725 focus: true, 36726 scrollIntoView 36727 }); 36728 }, [ 36729 store, 36730 moves, 36731 focusOnMove, 36732 compositeElement, 36733 present, 36734 scrollIntoView 36735 ]); 36736 useSafeLayoutEffect(() => { 36737 if (!moves) return; 36738 if (!compositeElement) return; 36739 const { activeId } = store.getState(); 36740 if (!(activeId === null)) return; 36741 const previousElement = previousElementRef.current; 36742 previousElementRef.current = null; 36743 if (previousElement) fireBlurEvent(previousElement, { relatedTarget: compositeElement }); 36744 if (!hasFocus(compositeElement)) { 36745 if (isFocusable(compositeElement)) compositeElement.scrollIntoView({ 36746 block: "nearest", 36747 inline: "nearest" 36748 }); 36749 compositeElement.focus({ preventScroll: true }); 36750 } 36751 }, [ 36752 store, 36753 moves, 36754 compositeElement 36755 ]); 36756 return null; 36757 }); 36758 var useComposite = createHook(function useComposite2({ store, composite = true, focusOnMove = composite, moveOnKeyPress = true, unstable_scrollIntoView: scrollIntoView, ...props }) { 36759 const context = useCompositeProviderContext(); 36760 store = store || context; 36761 invariant(store, "Composite must receive a `store` prop or be wrapped in a CompositeProvider component."); 36762 const ref = (0, import_react54.useRef)(null); 36763 const previousElementRef = (0, import_react54.useRef)(null); 36764 const present = usePresentItem(store); 36765 const [, setCompositeElement] = useTransactionState(composite ? store.setCompositeElement : null); 36766 const virtualFocus = useStoreState(store, "virtualFocus"); 36767 const activeId = useStoreState(store, composite && virtualFocus ? ["activeId"] : [], (state) => composite && virtualFocus ? state.activeId : null); 36768 useSafeLayoutEffect(() => { 36769 if (!store) return; 36770 if (!composite) return; 36771 if (!virtualFocus) return; 36772 const previousElement = previousElementRef.current; 36773 previousElementRef.current = null; 36774 if (!previousElement) return; 36775 const relatedTarget = getEnabledItem(store, activeId)?.element || getActiveElement(previousElement); 36776 if (relatedTarget === previousElement) return; 36777 fireBlurEvent(previousElement, { relatedTarget }); 36778 }, [ 36779 store, 36780 activeId, 36781 virtualFocus, 36782 composite 36783 ]); 36784 const onKeyDownCapture = useKeyboardEventProxy(store, props.onKeyDownCapture, previousElementRef); 36785 const onKeyUpCapture = useKeyboardEventProxy(store, props.onKeyUpCapture, previousElementRef); 36786 const onFocusCaptureProp = props.onFocusCapture; 36787 const onFocusCapture = useEvent((event) => { 36788 onFocusCaptureProp?.(event); 36789 if (event.defaultPrevented) return; 36790 if (!store) return; 36791 const { virtualFocus: virtualFocus2 } = store.getState(); 36792 if (!virtualFocus2) return; 36793 const previousActiveElement = event.relatedTarget; 36794 const isSilentlyFocused = silentlyFocused(event.currentTarget); 36795 if (isSelfTarget(event) && isSilentlyFocused) { 36796 event.stopPropagation(); 36797 previousElementRef.current = previousActiveElement; 36798 } 36799 }); 36800 const onFocusProp = props.onFocus; 36801 const onFocus = useEvent((event) => { 36802 onFocusProp?.(event); 36803 if (event.defaultPrevented) return; 36804 if (!composite) return; 36805 if (!store) return; 36806 const { relatedTarget } = event; 36807 const { virtualFocus: virtualFocus2 } = store.getState(); 36808 if (virtualFocus2) { 36809 if (isSelfTarget(event) && !isItem(store, relatedTarget)) queueMicrotask(() => present({ 36810 focus: true, 36811 markedOnly: true, 36812 requireFocus: true, 36813 scrollIntoView 36814 })); 36815 } else if (isSelfTarget(event)) { 36816 if (!isItem(store, relatedTarget)) { 36817 const { activeId: activeId2 } = store.getState(); 36818 if (activeId2 != null) present({ 36819 id: activeId2, 36820 markedOnly: true, 36821 requireFocus: true, 36822 scrollIntoView 36823 }); 36824 } 36825 store.setActiveId(null); 36826 } 36827 }); 36828 const onBlurCaptureProp = props.onBlurCapture; 36829 const onBlurCapture = useEvent((event) => { 36830 onBlurCaptureProp?.(event); 36831 if (event.defaultPrevented) return; 36832 if (!store) return; 36833 const { virtualFocus: virtualFocus2, activeId: activeId2, compositeElement } = store.getState(); 36834 if (!virtualFocus2) return; 36835 if (event.currentTarget !== compositeElement) return; 36836 const activeElement2 = getEnabledItem(store, activeId2)?.element; 36837 const nextActiveElement = event.relatedTarget; 36838 const nextActiveElementIsItem = isItem(store, nextActiveElement); 36839 const previousElement = previousElementRef.current; 36840 previousElementRef.current = null; 36841 if (isSelfTarget(event) && nextActiveElementIsItem) { 36842 if (nextActiveElement === activeElement2) { 36843 if (previousElement && previousElement !== nextActiveElement) fireBlurEvent(previousElement, event); 36844 } else if (activeElement2) fireBlurEvent(activeElement2, event); 36845 else if (previousElement) fireBlurEvent(previousElement, event); 36846 event.stopPropagation(); 36847 } else if (!isItem(store, event.target) && activeElement2) fireBlurEvent(activeElement2, event); 36848 }); 36849 const onKeyDownProp = props.onKeyDown; 36850 const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); 36851 const onKeyDown = useEvent((event) => { 36852 onKeyDownProp?.(event); 36853 if (event.nativeEvent.isComposing) return; 36854 if (event.defaultPrevented) return; 36855 if (!store) return; 36856 if (!isSelfTarget(event)) return; 36857 const { orientation, items, renderedItems, activeId: activeId2, rtl } = store.getState(); 36858 const activeItem = getEnabledItem(store, activeId2); 36859 if (activeItem?.element?.isConnected) return; 36860 const elementlessActiveItem = activeItem && activeId2 != null; 36861 const movementItems = elementlessActiveItem ? items : renderedItems; 36862 const isVertical = orientation !== "horizontal"; 36863 const isHorizontal = orientation !== "vertical"; 36864 const grid = isGrid(movementItems); 36865 if ((event.key === "ArrowLeft" || event.key === "ArrowRight" || event.key === "Home" || event.key === "End") && isTextField(event.currentTarget)) return; 36866 const up = () => { 36867 if (elementlessActiveItem) return store.up({ 36868 activeId: activeId2, 36869 renderedItems: movementItems 36870 }); 36871 if (grid) return findFirstEnabledItemInTheLastRow(renderedItems)?.id; 36872 return store?.last(); 36873 }; 36874 const right = () => { 36875 if (elementlessActiveItem) return store.next({ 36876 activeId: activeId2, 36877 renderedItems: movementItems 36878 }); 36879 return rtl ? store.last() : store.first(); 36880 }; 36881 const down = () => { 36882 if (elementlessActiveItem) return store.down({ 36883 activeId: activeId2, 36884 renderedItems: movementItems 36885 }); 36886 return store.first(); 36887 }; 36888 const left = () => { 36889 if (elementlessActiveItem) return store.previous({ 36890 activeId: activeId2, 36891 renderedItems: movementItems 36892 }); 36893 return rtl ? store.first() : store.last(); 36894 }; 36895 const action = { 36896 ArrowUp: (grid || isVertical) && up, 36897 ArrowRight: (grid || isHorizontal) && right, 36898 ArrowDown: (grid || isVertical) && down, 36899 ArrowLeft: (grid || isHorizontal) && left, 36900 Home: store.first, 36901 End: store.last, 36902 PageUp: store.first, 36903 PageDown: store.last 36904 }[event.key]; 36905 if (action) { 36906 const id = action(); 36907 if (id !== void 0) { 36908 if (!moveOnKeyPressProp(event)) return; 36909 event.preventDefault(); 36910 store.move(id); 36911 } 36912 } 36913 }); 36914 props = useWrapElement(props, (element) => /* @__PURE__ */ (0, import_jsx_runtime144.jsxs)(CompositeScopedContextProvider, { 36915 value: store, 36916 children: [element, composite && /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(CompositeFocusOnMove, { 36917 store, 36918 focusOnMove, 36919 previousElementRef, 36920 present, 36921 scrollIntoView 36922 })] 36923 }), [ 36924 store, 36925 composite, 36926 focusOnMove, 36927 present 36928 ]); 36929 props = { 36930 "aria-activedescendant": useStoreState(store, composite && virtualFocus ? ["items"] : [], () => { 36931 if (!store) return; 36932 if (!composite) return; 36933 if (!virtualFocus) return; 36934 return getEnabledItem(store, activeId)?.id; 36935 }), 36936 ...props, 36937 ref: useMergeRefs5(ref, setCompositeElement, props.ref), 36938 onKeyDownCapture, 36939 onKeyUpCapture, 36940 onFocusCapture, 36941 onFocus, 36942 onBlurCapture, 36943 onKeyDown 36944 }; 36945 const focusable2 = useStoreState(store, composite && !virtualFocus ? ["activeId"] : [], (state) => composite && (virtualFocus || state.activeId === null)); 36946 props = useFocusable({ 36947 focusable: focusable2, 36948 ...props 36949 }); 36950 return props; 36951 }); 36952 var Composite6 = forwardRef89(function Composite7(props) { 36953 const htmlProps = useComposite(props); 36954 return createElement3(TagName5, htmlProps); 36955 }); 36956 36957 // node_modules/@ariakit/react-components/dist/disclosure/disclosure-context.js 36958 var ctx3 = createStoreContext(); 36959 var useDisclosureContext = ctx3.useContext; 36960 var useDisclosureScopedContext = ctx3.useScopedContext; 36961 var useDisclosureProviderContext = ctx3.useProviderContext; 36962 var DisclosureContextProvider = ctx3.ContextProvider; 36963 var DisclosureScopedContextProvider = ctx3.ScopedContextProvider; 36964 36965 // node_modules/@ariakit/react-components/dist/dialog/dialog-context.js 36966 var import_react55 = __toESM(require_react(), 1); 36967 var ctx4 = createStoreContext([DisclosureContextProvider], [DisclosureScopedContextProvider]); 36968 var useDialogContext = ctx4.useContext; 36969 var useDialogScopedContext = ctx4.useScopedContext; 36970 var useDialogProviderContext = ctx4.useProviderContext; 36971 var DialogContextProvider = ctx4.ContextProvider; 36972 var DialogScopedContextProvider = ctx4.ScopedContextProvider; 36973 var DialogHeadingContext = (0, import_react55.createContext)(void 0); 36974 var DialogDescriptionContext = (0, import_react55.createContext)(void 0); 36975 36976 // node_modules/@ariakit/react-components/dist/disclosure/disclosure-content.js 36977 var import_react56 = __toESM(require_react(), 1); 36978 var import_jsx_runtime145 = __toESM(require_jsx_runtime(), 1); 36979 var import_react_dom3 = __toESM(require_react_dom(), 1); 36980 var TagName6 = "div"; 36981 function afterTimeout(timeoutMs, cb) { 36982 const timeoutId = setTimeout(cb, timeoutMs); 36983 return () => clearTimeout(timeoutId); 36984 } 36985 function parseCSSTime(time) { 36986 const value = time?.trim() || "0s"; 36987 const multiplier = value.endsWith("ms") ? 1 : 1e3; 36988 const parsed = Number.parseFloat(value) * multiplier; 36989 return Number.isNaN(parsed) ? 0 : parsed; 36990 } 36991 function getEndTime(names, delays, durations) { 36992 const nameList = names.split(","); 36993 const delayList = delays.split(","); 36994 const durationList = durations.split(","); 36995 let endTime = 0; 36996 for (const [index2, name] of nameList.entries()) { 36997 if (name.trim() === "none") continue; 36998 const delay = parseCSSTime(delayList[index2 % delayList.length]); 36999 const duration = parseCSSTime(durationList[index2 % durationList.length]); 37000 endTime = Math.max(endTime, delay + duration); 37001 } 37002 return endTime; 37003 } 37004 function getElementEndTime(element) { 37005 const { transitionProperty, transitionDuration, transitionDelay, animationName, animationDuration, animationDelay } = getComputedStyle(element); 37006 return Math.max(getEndTime(transitionProperty, transitionDelay, transitionDuration), getEndTime(animationName, animationDelay, animationDuration)); 37007 } 37008 function isHidden(mounted, hidden, alwaysVisible) { 37009 return !alwaysVisible && hidden !== false && (!mounted || !!hidden); 37010 } 37011 var useDisclosureContent = createHook(function useDisclosureContent2({ store, alwaysVisible, unstable_otherElementRef: otherElementRef, ...props }) { 37012 const context = useDisclosureProviderContext(); 37013 store = store || context; 37014 invariant(store, "DisclosureContent must receive a `store` prop or be wrapped in a DisclosureProvider component."); 37015 const ref = (0, import_react56.useRef)(null); 37016 const id = useId7(props.id); 37017 const [transition, setTransition] = (0, import_react56.useState)(null); 37018 const { open, mounted, animated, contentElement } = useStoreStateObject(store, { 37019 open: "open", 37020 mounted: "mounted", 37021 animated: "animated", 37022 contentElement: "contentElement" 37023 }); 37024 const otherElement = useStoreState(store.disclosure, "contentElement"); 37025 const hasClosedRef = (0, import_react56.useRef)(false); 37026 useSafeLayoutEffect(() => { 37027 if (!ref.current) return; 37028 store?.setContentElement(ref.current); 37029 }, [store]); 37030 useSafeLayoutEffect(() => { 37031 let previousAnimated; 37032 store?.setState("animated", (animated2) => { 37033 previousAnimated = animated2; 37034 return true; 37035 }); 37036 return () => { 37037 if (previousAnimated === void 0) return; 37038 store?.setState("animated", previousAnimated); 37039 }; 37040 }, [store]); 37041 useSafeLayoutEffect(() => { 37042 if (!animated) { 37043 if (!open) { 37044 hasClosedRef.current = true; 37045 setTransition(null); 37046 } else if (hasClosedRef.current) { 37047 hasClosedRef.current = false; 37048 setTransition("enter"); 37049 } 37050 return; 37051 } 37052 if (!contentElement?.isConnected) { 37053 setTransition(null); 37054 return; 37055 } 37056 return afterPaint(() => { 37057 setTransition(open ? "enter" : mounted ? "leave" : null); 37058 }); 37059 }, [ 37060 animated, 37061 contentElement, 37062 open, 37063 mounted 37064 ]); 37065 useSafeLayoutEffect(() => { 37066 if (!store) return; 37067 if (!animated) return; 37068 if (!transition) return; 37069 if (!contentElement) return; 37070 const stopAnimation = () => store?.setState("animating", false); 37071 const stopAnimationSync = () => (0, import_react_dom3.flushSync)(stopAnimation); 37072 if (transition === "leave" && open) return; 37073 if (transition === "enter" && !open) return; 37074 if (typeof animated === "number") return afterTimeout(animated, stopAnimationSync); 37075 const elements = [contentElement]; 37076 if (otherElement) elements.push(otherElement); 37077 const relatedElement = otherElementRef?.current; 37078 if (relatedElement) elements.push(relatedElement); 37079 const timeout = Math.max(...elements.map(getElementEndTime)); 37080 if (!timeout) { 37081 if (transition === "enter") store.setState("animated", false); 37082 stopAnimation(); 37083 return; 37084 } 37085 return afterTimeout(Math.max(timeout - 1e3 / 60, 0), stopAnimationSync); 37086 }, [ 37087 store, 37088 animated, 37089 contentElement, 37090 otherElement, 37091 otherElementRef, 37092 open, 37093 transition 37094 ]); 37095 props = useWrapElement(props, (element) => /* @__PURE__ */ (0, import_jsx_runtime145.jsx)(DialogScopedContextProvider, { 37096 value: store, 37097 children: element 37098 }), [store]); 37099 const hidden = isHidden(mounted, props.hidden, alwaysVisible); 37100 const styleProp = props.style; 37101 const style = (0, import_react56.useMemo)(() => { 37102 if (hidden) return { 37103 ...styleProp, 37104 display: "none" 37105 }; 37106 return styleProp; 37107 }, [hidden, styleProp]); 37108 props = { 37109 "data-open": open || void 0, 37110 "data-enter": transition === "enter" || void 0, 37111 "data-leave": transition === "leave" || void 0, 37112 hidden, 37113 ...props, 37114 id, 37115 ref: useMergeRefs5(id ? store.setContentElement : null, ref, props.ref), 37116 style 37117 }; 37118 return removeUndefinedValues(props); 37119 }); 37120 var DisclosureContentImpl = forwardRef89(function DisclosureContentImpl2(props) { 37121 const htmlProps = useDisclosureContent(props); 37122 return createElement3(TagName6, htmlProps); 37123 }); 37124 var DisclosureContent = forwardRef89(function DisclosureContent2({ unmountOnHide, ...props }) { 37125 const context = useDisclosureProviderContext(); 37126 const store = props.store || context; 37127 if (useStoreState(store, ["mounted"], (state) => !unmountOnHide || state?.mounted) === false) return null; 37128 return /* @__PURE__ */ (0, import_jsx_runtime145.jsx)(DisclosureContentImpl, { ...props }); 37129 }); 37130 37131 // node_modules/@ariakit/components/dist/disclosure/disclosure-store.js 37132 function createDisclosureStore(props = {}) { 37133 const store = props.store || props.disclosure ? mergeStore(props.store, omit2(props.disclosure, ["contentElement", "disclosureElement"])) : void 0; 37134 throwOnConflictingProps(props, store); 37135 const syncState = store?.getState(); 37136 const open = defaultValue(props.open, syncState?.open, props.defaultOpen, false); 37137 const animated = defaultValue(props.animated, syncState?.animated, false); 37138 const initialState = { 37139 open, 37140 animated, 37141 animating: !!animated && open, 37142 mounted: open, 37143 contentElement: defaultValue(syncState?.contentElement, null), 37144 disclosureElement: defaultValue(syncState?.disclosureElement, null) 37145 }; 37146 const disclosure = store ? createStore(initialState, store) : createStore(initialState); 37147 setup(disclosure, () => sync(disclosure, ["animated", "animating"], (state) => { 37148 if (state.animated) return; 37149 disclosure.setState("animating", false); 37150 })); 37151 setup(disclosure, () => subscribe(disclosure, ["open"], () => { 37152 if (!disclosure.getState().animated) return; 37153 disclosure.setState("animating", true); 37154 })); 37155 setup(disclosure, () => sync(disclosure, ["open", "animating"], (state) => { 37156 disclosure.setState("mounted", state.open || state.animating); 37157 })); 37158 return { 37159 ...disclosure, 37160 disclosure: props.disclosure, 37161 setOpen: (value) => disclosure.setState("open", value), 37162 show: () => disclosure.setState("open", true), 37163 hide: () => disclosure.setState("open", false), 37164 toggle: () => disclosure.setState("open", (open2) => !open2), 37165 stopAnimation: () => disclosure.setState("animating", false), 37166 setContentElement: (value) => disclosure.setState("contentElement", value), 37167 setDisclosureElement: (value) => disclosure.setState("disclosureElement", value) 37168 }; 37169 } 37170 37171 // node_modules/@ariakit/react-components/dist/disclosure/disclosure-store.js 37172 function useDisclosureStoreProps(store, update2, props) { 37173 useUpdateEffect(update2, [props.store, props.disclosure]); 37174 useStoreProps(store, props, "open", "setOpen"); 37175 useStoreProps(store, props, "mounted", "setMounted"); 37176 useStoreProps(store, props, "animated"); 37177 return Object.assign(store, { disclosure: props.disclosure }); 37178 } 37179 37180 // node_modules/@ariakit/react-components/dist/popover/popover-context.js 37181 var ctx5 = createStoreContext([DialogContextProvider], [DialogScopedContextProvider]); 37182 var usePopoverContext = ctx5.useContext; 37183 var usePopoverScopedContext = ctx5.useScopedContext; 37184 var usePopoverProviderContext = ctx5.useProviderContext; 37185 var PopoverContextProvider = ctx5.ContextProvider; 37186 var PopoverScopedContextProvider = ctx5.ScopedContextProvider; 37187 37188 // node_modules/@ariakit/react-components/dist/combobox/combobox-context.js 37189 var import_react57 = __toESM(require_react(), 1); 37190 var ComboboxListRoleContext = (0, import_react57.createContext)(void 0); 37191 var ctx6 = createStoreContext([PopoverContextProvider, CompositeContextProvider], [PopoverScopedContextProvider, CompositeScopedContextProvider]); 37192 var useComboboxContext = ctx6.useContext; 37193 var useComboboxScopedContext = ctx6.useScopedContext; 37194 var useComboboxProviderContext = ctx6.useProviderContext; 37195 var ComboboxContextProvider = ctx6.ContextProvider; 37196 var ComboboxScopedContextProvider = ctx6.ScopedContextProvider; 37197 var ComboboxItemValueContext = (0, import_react57.createContext)(void 0); 37198 var ComboboxItemCheckedContext = (0, import_react57.createContext)(false); 37199 var ComboboxHeadingContext = (0, import_react57.createContext)(null); 37200 37201 // node_modules/@ariakit/react-components/dist/collection/collection-store.js 37202 function useCollectionStoreProps(store, update2, props) { 37203 useUpdateEffect(update2, [props.store]); 37204 useStoreProps(store, props, "items", "setItems"); 37205 return store; 37206 } 37207 37208 // node_modules/@ariakit/react-components/dist/composite/composite-store.js 37209 function useCompositeStoreOptions(props) { 37210 return { 37211 id: useId7(props.id), 37212 ...props 37213 }; 37214 } 37215 function useCompositeStoreProps(store, update2, props) { 37216 store = useCollectionStoreProps(store, update2, props); 37217 useStoreProps(store, props, "activeId", "setActiveId"); 37218 const focusOrderProps = { compositeElementInFocusOrder: props.compositeElementInFocusOrder ?? props.includesBaseElement }; 37219 useStoreProps(store, focusOrderProps, "compositeElementInFocusOrder"); 37220 useStoreProps(store, props, "virtualFocus"); 37221 useStoreProps(store, props, "orientation"); 37222 useStoreProps(store, props, "rtl"); 37223 useStoreProps(store, props, "focusLoop"); 37224 useStoreProps(store, props, "focusWrap"); 37225 useStoreProps(store, props, "focusShift"); 37226 return store; 37227 } 37228 37229 // node_modules/@ariakit/components/dist/dialog/dialog-store.js 37230 function createDialogStore(props = {}) { 37231 return createDisclosureStore(props); 37232 } 37233 37234 // node_modules/@ariakit/react-components/dist/dialog/dialog-store.js 37235 function useDialogStoreProps(store, update2, props) { 37236 return useDisclosureStoreProps(store, update2, props); 37237 } 37238 37239 // node_modules/@ariakit/components/dist/popover/popover-store.js 37240 function createPopoverStore({ popover: otherPopover, ...props } = {}) { 37241 const store = mergeStore(props.store, omit2(otherPopover, [ 37242 "arrowElement", 37243 "anchorElement", 37244 "contentElement", 37245 "popoverElement", 37246 "disclosureElement", 37247 "unstable_placing" 37248 ])); 37249 throwOnConflictingProps(props, store); 37250 const syncState = store?.getState(); 37251 const dialog = createDialogStore({ 37252 ...props, 37253 store 37254 }); 37255 const placement = defaultValue(props.placement, syncState?.placement, "bottom"); 37256 const initialState = { 37257 ...dialog.getState(), 37258 placement, 37259 currentPlacement: placement, 37260 anchorElement: defaultValue(syncState?.anchorElement, null), 37261 popoverElement: defaultValue(syncState?.popoverElement, null), 37262 arrowElement: defaultValue(syncState?.arrowElement, null), 37263 rendered: /* @__PURE__ */ Symbol("rendered"), 37264 unstable_placing: false 37265 }; 37266 const popover = createStore(initialState, dialog, store); 37267 let syncedAnchorElement = initialState.anchorElement === initialState.disclosureElement ? initialState.anchorElement : null; 37268 setup(popover, () => sync(popover, ["anchorElement", "disclosureElement"], (state) => { 37269 if (state.anchorElement && state.anchorElement !== syncedAnchorElement) { 37270 syncedAnchorElement = null; 37271 return; 37272 } 37273 syncedAnchorElement = state.disclosureElement; 37274 popover.setState("anchorElement", syncedAnchorElement); 37275 })); 37276 return { 37277 ...dialog, 37278 ...popover, 37279 setAnchorElement: (element) => popover.setState("anchorElement", element), 37280 setPopoverElement: (element) => popover.setState("popoverElement", element), 37281 setArrowElement: (element) => popover.setState("arrowElement", element), 37282 render: () => popover.setState("rendered", /* @__PURE__ */ Symbol("rendered")) 37283 }; 37284 } 37285 37286 // node_modules/@ariakit/react-components/dist/popover/popover-store.js 37287 function usePopoverStoreProps(store, update2, props) { 37288 useUpdateEffect(update2, [props.popover]); 37289 useStoreProps(store, props, "placement"); 37290 return useDialogStoreProps(store, update2, props); 37291 } 37292 37293 // node_modules/@ariakit/react-components/dist/composite/composite-hover.js 37294 var import_react58 = __toESM(require_react(), 1); 37295 var TagName7 = "div"; 37296 function hoveringInside(event) { 37297 const nextElement = event.relatedTarget; 37298 if (!isElement2(nextElement)) return false; 37299 return contains2(event.currentTarget, nextElement); 37300 } 37301 var symbol2 = /* @__PURE__ */ Symbol("composite-hover"); 37302 function movingToAnotherItem(event) { 37303 const { relatedTarget } = event; 37304 if (!isElement2(relatedTarget)) return false; 37305 let dest = relatedTarget; 37306 do { 37307 if (hasOwnProperty(dest, symbol2) && dest[symbol2]) return true; 37308 dest = dest.parentElement; 37309 } while (dest); 37310 return false; 37311 } 37312 var useCompositeHover = createHook(function useCompositeHover2({ store, focusOnHover = true, blurOnHoverEnd = !!focusOnHover, ...props }) { 37313 const context = useCompositeScopedContext(); 37314 store = store || context; 37315 invariant(store, "CompositeHover must be wrapped in a Composite component."); 37316 const isMouseMoving = useIsMouseMoving(); 37317 const onMouseMoveProp = props.onMouseMove; 37318 const focusOnHoverProp = useBooleanEvent(focusOnHover); 37319 const onMouseMove = useEvent((event) => { 37320 onMouseMoveProp?.(event); 37321 if (event.defaultPrevented) return; 37322 if (!isMouseMoving()) return; 37323 if (!focusOnHoverProp(event)) return; 37324 if (!hasFocusWithin(event.currentTarget)) { 37325 const compositeElement = store?.getState().compositeElement; 37326 if (compositeElement && !hasFocus(compositeElement)) compositeElement.focus({ preventScroll: true }); 37327 } 37328 store?.setActiveId(event.currentTarget.id); 37329 }); 37330 const onMouseLeaveProp = props.onMouseLeave; 37331 const blurOnHoverEndProp = useBooleanEvent(blurOnHoverEnd); 37332 const onMouseLeave = useEvent((event) => { 37333 onMouseLeaveProp?.(event); 37334 if (event.defaultPrevented) return; 37335 if (!isMouseMoving()) return; 37336 if (hoveringInside(event)) return; 37337 if (movingToAnotherItem(event)) return; 37338 if (!focusOnHoverProp(event)) return; 37339 if (!blurOnHoverEndProp(event)) return; 37340 store?.setActiveId(null); 37341 store?.getState().compositeElement?.focus({ preventScroll: true }); 37342 }); 37343 const ref = (0, import_react58.useCallback)((element) => { 37344 if (!element) return; 37345 element[symbol2] = true; 37346 }, []); 37347 props = { 37348 ...props, 37349 ref: useMergeRefs5(ref, props.ref), 37350 onMouseMove, 37351 onMouseLeave 37352 }; 37353 return props; 37354 }); 37355 var CompositeHover = memo4(forwardRef89(function CompositeHover2(props) { 37356 const htmlProps = useCompositeHover(props); 37357 return createElement3(TagName7, htmlProps); 37358 })); 37359 37360 // node_modules/@ariakit/react-components/dist/__chunks/DSBYX_BC.js 37361 var openingMovesByStore = /* @__PURE__ */ new WeakMap(); 37362 var scrollItemIntoViewByStore = /* @__PURE__ */ new WeakMap(); 37363 function scrollIntoViewNearest(element) { 37364 element.scrollIntoView({ 37365 block: "nearest", 37366 inline: "nearest" 37367 }); 37368 } 37369 function getSingleVerticalScrollport(element, popup) { 37370 const view = element.ownerDocument.defaultView; 37371 if (!view) return null; 37372 if (!view.getComputedStyle(popup).writingMode.startsWith("horizontal")) return null; 37373 let scrollport = null; 37374 let inlineScrollport = null; 37375 let current = element.parentElement; 37376 while (current && popup.contains(current)) { 37377 const style = view.getComputedStyle(current); 37378 if (style.overflowY !== "visible" && style.overflowY !== "clip" && current.scrollHeight > current.clientHeight) { 37379 if (scrollport) return null; 37380 scrollport = current; 37381 } 37382 if (style.overflowX !== "visible" && style.overflowX !== "clip" && current.scrollWidth > current.clientWidth) { 37383 if (inlineScrollport) return null; 37384 inlineScrollport = current; 37385 } 37386 if (current === popup) break; 37387 current = current.parentElement; 37388 } 37389 if (inlineScrollport && inlineScrollport !== scrollport) return null; 37390 return scrollport; 37391 } 37392 function centerItemInScrollport(element, scrollport) { 37393 const elementRect = element.getBoundingClientRect(); 37394 const scrollportRect = scrollport.getBoundingClientRect(); 37395 const scaleX = scrollportRect.width / scrollport.offsetWidth || 1; 37396 const scrollportLeft = scrollportRect.left + scrollport.clientLeft * scaleX; 37397 const scrollportRight = scrollportLeft + scrollport.clientWidth * scaleX; 37398 const scrollportWidth = scrollport.clientWidth * scaleX; 37399 const elementLeftOutside = elementRect.left < scrollportLeft; 37400 const elementRightOutside = elementRect.right > scrollportRight; 37401 const alignLeft = elementLeftOutside && !elementRightOutside && elementRect.width < scrollportWidth || elementRightOutside && !elementLeftOutside && elementRect.width > scrollportWidth; 37402 const alignRight = elementLeftOutside && !elementRightOutside && elementRect.width > scrollportWidth || elementRightOutside && !elementLeftOutside && elementRect.width < scrollportWidth; 37403 let left = 0; 37404 if (alignLeft) left = (elementRect.left - scrollportLeft) / scaleX; 37405 else if (alignRight) left = (elementRect.right - scrollportRight) / scaleX; 37406 const scaleY = scrollportRect.height / scrollport.offsetHeight || 1; 37407 const top = (elementRect.top + elementRect.height / 2 - (scrollportRect.top + (scrollport.clientTop + scrollport.clientHeight / 2) * scaleY)) / scaleY; 37408 scrollport.scrollBy({ 37409 left, 37410 top 37411 }); 37412 } 37413 function getScrollItemIntoView(store) { 37414 if (!store) return scrollIntoViewNearest; 37415 const cached = scrollItemIntoViewByStore.get(store); 37416 if (cached) return cached; 37417 const scrollItemIntoView = (element) => { 37418 const { contentElement, moves, selectElement } = store.getState(); 37419 if (!selectElement) return scrollIntoViewNearest(element); 37420 if (moves !== openingMovesByStore.get(store)) return scrollIntoViewNearest(element); 37421 if (!contentElement?.contains(element)) return scrollIntoViewNearest(element); 37422 const scrollport = getSingleVerticalScrollport(element, contentElement); 37423 if (!scrollport) return scrollIntoViewNearest(element); 37424 centerItemInScrollport(element, scrollport); 37425 }; 37426 scrollItemIntoViewByStore.set(store, scrollItemIntoView); 37427 return scrollItemIntoView; 37428 } 37429 37430 // node_modules/@ariakit/react-components/dist/combobox/combobox.js 37431 var import_react59 = __toESM(require_react(), 1); 37432 var import_jsx_runtime146 = __toESM(require_jsx_runtime(), 1); 37433 var TagName8 = "input"; 37434 function isFirstItemAutoSelected(items, activeValue, autoSelect) { 37435 if (!autoSelect) return false; 37436 return items.find((item) => !item.disabled && item.value)?.value === activeValue; 37437 } 37438 function hasCompletionString(value, activeValue) { 37439 if (!activeValue) return false; 37440 if (value == null) return false; 37441 const normalizedValue = normalizeString(value); 37442 const normalizedActiveValue = normalizeString(activeValue); 37443 if (normalizedValue.length !== value.length) return false; 37444 if (normalizedActiveValue.length !== activeValue.length) return false; 37445 return normalizedActiveValue.length > normalizedValue.length && normalizedActiveValue.toLowerCase().startsWith(normalizedValue.toLowerCase()); 37446 } 37447 function isAriaAutoCompleteValue(value) { 37448 return value === "inline" || value === "list" || value === "both" || value === "none"; 37449 } 37450 function getDefaultAutoSelectId(items) { 37451 return items.find((item) => { 37452 if (item.disabled) return false; 37453 return item.element?.getAttribute("role") !== "tab"; 37454 })?.id; 37455 } 37456 var useCombobox = createHook(function useCombobox2({ store, focusable: focusable2 = true, autoSelect: autoSelectProp = false, getAutoSelectId, setValueOnChange, showMinLength = 0, showOnChange, showOnMouseDown, showOnClick = showOnMouseDown, showOnKeyDown, showOnKeyPress = showOnKeyDown, blurActiveItemOnClick, setValueOnClick = true, moveOnKeyPress = true, autoComplete = "list", name, form, disabled: disabled2, ...props }) { 37457 const scopedContext = useComboboxScopedContext(true); 37458 const context = useComboboxProviderContext(); 37459 store = store || context || scopedContext; 37460 invariant(store, "Combobox must receive a `store` prop or be wrapped in a ComboboxProvider component."); 37461 const ref = (0, import_react59.useRef)(null); 37462 const [valueUpdated, forceValueUpdate] = useForceUpdate(); 37463 const canAutoSelectRef = (0, import_react59.useRef)(false); 37464 const composingRef = (0, import_react59.useRef)(false); 37465 const compositionEndFrameRef = (0, import_react59.useRef)(null); 37466 const cancelCompositionEndFrame = () => { 37467 const frame = compositionEndFrameRef.current; 37468 if (frame == null) return; 37469 cancelAnimationFrame(frame); 37470 compositionEndFrameRef.current = null; 37471 }; 37472 const autoSelect = useStoreState(store, ["virtualFocus"], (state) => state.virtualFocus && autoSelectProp); 37473 const inline4 = autoComplete === "inline" || autoComplete === "both"; 37474 const [canInline, setCanInline] = (0, import_react59.useState)(inline4); 37475 useUpdateLayoutEffect(() => { 37476 if (!inline4) return; 37477 setCanInline(true); 37478 }, [inline4]); 37479 const storeInputValue = useStoreState(store, "inputValue"); 37480 const selectedValue = useStoreState(store, ["selectedValue"], (state) => { 37481 if (!name) return; 37482 if (!Array.isArray(state.selectedValue)) return; 37483 return state.selectedValue; 37484 }); 37485 const multiSelectable = Array.isArray(selectedValue); 37486 const prevSelectedValueRef = (0, import_react59.useRef)(void 0); 37487 (0, import_react59.useEffect)(() => { 37488 return sync(store, ["selectedValue", "activeId"], (_, prev) => { 37489 prevSelectedValueRef.current = prev.selectedValue; 37490 }); 37491 }, [store]); 37492 const inlineActiveValue = useStoreState(store, [ 37493 "activeValue", 37494 "selectedValue", 37495 "activeId" 37496 ], (state) => { 37497 if (!inline4) return; 37498 if (!canInline) return; 37499 if (state.activeValue && Array.isArray(state.selectedValue)) { 37500 if (state.selectedValue.includes(state.activeValue)) return; 37501 if (prevSelectedValueRef.current?.includes(state.activeValue)) return; 37502 } 37503 return state.activeValue; 37504 }); 37505 const items = useStoreState(store, "renderedItems"); 37506 const open = useStoreState(store, "open"); 37507 const contentElement = useStoreState(store, "contentElement"); 37508 const placing = useStoreState(store, "unstable_placing"); 37509 const firstItemAutoSelected = isFirstItemAutoSelected(items, inlineActiveValue, autoSelect); 37510 const inputValue = (0, import_react59.useMemo)(() => { 37511 if (!inline4) return storeInputValue; 37512 if (!canInline) return storeInputValue; 37513 if (firstItemAutoSelected) { 37514 if (hasCompletionString(storeInputValue, inlineActiveValue)) { 37515 const slice = inlineActiveValue?.slice(storeInputValue.length) || ""; 37516 return storeInputValue + slice; 37517 } 37518 return storeInputValue; 37519 } 37520 return inlineActiveValue || storeInputValue; 37521 }, [ 37522 inline4, 37523 canInline, 37524 firstItemAutoSelected, 37525 inlineActiveValue, 37526 storeInputValue 37527 ]); 37528 (0, import_react59.useEffect)(() => { 37529 const element = ref.current; 37530 if (!element) return; 37531 const onCompositeItemMove = () => setCanInline(true); 37532 element.addEventListener("combobox-item-move", onCompositeItemMove); 37533 return () => { 37534 element.removeEventListener("combobox-item-move", onCompositeItemMove); 37535 }; 37536 }, []); 37537 (0, import_react59.useEffect)(() => { 37538 if (!inline4) return; 37539 if (!canInline) return; 37540 if (!inlineActiveValue) return; 37541 if (!firstItemAutoSelected) return; 37542 if (!hasCompletionString(storeInputValue, inlineActiveValue)) return; 37543 let cleanup = noop5; 37544 queueMicrotask(() => { 37545 const element = ref.current; 37546 if (!element) return; 37547 const { start: prevStart, end: prevEnd } = getTextboxSelection(element); 37548 const nextStart = storeInputValue.length; 37549 const nextEnd = inlineActiveValue.length; 37550 setSelectionRange(element, nextStart, nextEnd); 37551 cleanup = () => { 37552 if (!hasFocus(element)) return; 37553 const { start, end } = getTextboxSelection(element); 37554 if (start !== nextStart) return; 37555 if (end !== nextEnd) return; 37556 setSelectionRange(element, prevStart, prevEnd); 37557 }; 37558 }); 37559 return () => cleanup(); 37560 }, [ 37561 valueUpdated, 37562 inline4, 37563 canInline, 37564 inlineActiveValue, 37565 firstItemAutoSelected, 37566 storeInputValue 37567 ]); 37568 const getAutoSelectIdProp = useEvent(getAutoSelectId); 37569 const autoSelectIdRef = (0, import_react59.useRef)(null); 37570 const autoSelectMovedRef = (0, import_react59.useRef)(void 0); 37571 const userScrolledRef = (0, import_react59.useRef)(false); 37572 const isAutoScrollingRef = (0, import_react59.useRef)(false); 37573 (0, import_react59.useEffect)(() => { 37574 if (!open) return; 37575 if (!contentElement) return; 37576 const scrollingElement = getScrollingElement(contentElement); 37577 if (!scrollingElement) return; 37578 const onUserScroll = () => { 37579 canAutoSelectRef.current = false; 37580 userScrolledRef.current = true; 37581 }; 37582 const onScroll = () => { 37583 if (!isAutoScrollingRef.current) userScrolledRef.current = true; 37584 if (!store) return; 37585 if (!canAutoSelectRef.current) return; 37586 const { activeId } = store.getState(); 37587 if (activeId === null) return; 37588 if (activeId === autoSelectIdRef.current) return; 37589 canAutoSelectRef.current = false; 37590 }; 37591 const options = { 37592 passive: true, 37593 capture: true 37594 }; 37595 scrollingElement.addEventListener("wheel", onUserScroll, options); 37596 scrollingElement.addEventListener("touchmove", onUserScroll, options); 37597 scrollingElement.addEventListener("scroll", onScroll, options); 37598 return () => { 37599 scrollingElement.removeEventListener("wheel", onUserScroll, true); 37600 scrollingElement.removeEventListener("touchmove", onUserScroll, true); 37601 scrollingElement.removeEventListener("scroll", onScroll, true); 37602 }; 37603 }, [ 37604 open, 37605 contentElement, 37606 store 37607 ]); 37608 useSafeLayoutEffect(() => { 37609 userScrolledRef.current = false; 37610 if (!storeInputValue) return; 37611 if (composingRef.current) return; 37612 canAutoSelectRef.current = true; 37613 }, [storeInputValue]); 37614 useSafeLayoutEffect(() => { 37615 if (autoSelect !== "always" && open) return; 37616 canAutoSelectRef.current = open; 37617 }, [autoSelect, open]); 37618 useSafeLayoutEffect(() => { 37619 if (open) return; 37620 autoSelectMovedRef.current = void 0; 37621 }, [open]); 37622 const resetValueOnSelect = useStoreState(store, "resetValueOnSelect"); 37623 useUpdateEffect(() => { 37624 const canAutoSelect = canAutoSelectRef.current; 37625 if (!store) return; 37626 if (!open) return; 37627 if (composingRef.current) return; 37628 if (!canAutoSelect && (!resetValueOnSelect || userScrolledRef.current)) return; 37629 const state = store.getState(); 37630 const { compositeElement: compositeElement2, activeId, selectElement, selectedValue: selectedValue2 } = state; 37631 if (compositeElement2 && !hasFocus(compositeElement2)) return; 37632 if (state.unstable_placing) return; 37633 const activeValue = store.item(activeId)?.value; 37634 const activeValueSelected = activeValue != null && (Array.isArray(selectedValue2) ? selectedValue2.includes(activeValue) : selectedValue2 === activeValue); 37635 if (autoSelect && canAutoSelect && !(!!selectElement && !storeInputValue && activeValueSelected)) { 37636 const userAutoSelectId = getAutoSelectIdProp(items); 37637 const autoSelectId = userAutoSelectId !== void 0 ? userAutoSelectId : getDefaultAutoSelectId(items) ?? store.first(); 37638 autoSelectIdRef.current = autoSelectId; 37639 const nextActiveId = autoSelectId ?? null; 37640 const nextActiveValue = store.item(nextActiveId)?.value; 37641 const moved = autoSelectMovedRef.current; 37642 if (nextActiveId !== activeId || moved?.id !== nextActiveId || moved?.value !== nextActiveValue) { 37643 autoSelectMovedRef.current = { 37644 id: nextActiveId, 37645 value: nextActiveValue 37646 }; 37647 store.move(nextActiveId); 37648 } else store.setState("activeValue", nextActiveValue); 37649 } else { 37650 const element = store.item(activeId || store.first())?.element; 37651 if (element && "scrollIntoView" in element) { 37652 isAutoScrollingRef.current = true; 37653 element.scrollIntoView({ 37654 block: "nearest", 37655 inline: "nearest" 37656 }); 37657 requestAnimationFrame(() => { 37658 isAutoScrollingRef.current = false; 37659 }); 37660 } 37661 } 37662 }, [ 37663 store, 37664 open, 37665 placing, 37666 valueUpdated, 37667 storeInputValue, 37668 autoSelect, 37669 resetValueOnSelect, 37670 getAutoSelectIdProp, 37671 items 37672 ]); 37673 (0, import_react59.useEffect)(() => { 37674 if (!inline4) return; 37675 const combobox = ref.current; 37676 if (!combobox) return; 37677 const elements = [combobox, contentElement].filter((value) => !!value); 37678 const onBlur2 = (event) => { 37679 if (elements.every((el) => isFocusEventOutside(event, el))) store?.setInputValue(inputValue); 37680 }; 37681 for (const element of elements) element.addEventListener("focusout", onBlur2); 37682 return () => { 37683 for (const element of elements) element.removeEventListener("focusout", onBlur2); 37684 }; 37685 }, [ 37686 inline4, 37687 contentElement, 37688 store, 37689 inputValue 37690 ]); 37691 const canShow = (event) => { 37692 return event.currentTarget.value.length >= showMinLength; 37693 }; 37694 const onChangeProp = props.onChange; 37695 const showOnChangeProp = useBooleanEvent(showOnChange ?? canShow); 37696 const setValueOnChangeProp = useBooleanEvent(setValueOnChange ?? !store.tag); 37697 const onChange = useEvent((event) => { 37698 onChangeProp?.(event); 37699 if (event.defaultPrevented) return; 37700 if (!store) return; 37701 const currentTarget = event.currentTarget; 37702 const { value, selectionStart, selectionEnd } = currentTarget; 37703 const nativeEvent = event.nativeEvent; 37704 canAutoSelectRef.current = true; 37705 if (isInputEvent(nativeEvent)) { 37706 if (nativeEvent.isComposing) { 37707 canAutoSelectRef.current = false; 37708 composingRef.current = true; 37709 } 37710 if (inline4) { 37711 const textInserted = nativeEvent.inputType === "insertText" || nativeEvent.inputType === "insertCompositionText"; 37712 const caretAtEnd = selectionStart === value.length; 37713 setCanInline(textInserted && caretAtEnd); 37714 } 37715 } 37716 if (setValueOnChangeProp(event)) { 37717 const isSameValue3 = value === store.getState().inputValue; 37718 store.setInputValue(value); 37719 queueMicrotask(() => { 37720 setSelectionRange(currentTarget, selectionStart, selectionEnd); 37721 }); 37722 if (inline4 && autoSelect && isSameValue3) forceValueUpdate(); 37723 } 37724 if (showOnChangeProp(event)) store.show(); 37725 if (!autoSelect || !canAutoSelectRef.current) store.setActiveId(null); 37726 }); 37727 (0, import_react59.useEffect)(() => cancelCompositionEndFrame, []); 37728 const onCompositionStartProp = props.onCompositionStart; 37729 const onCompositionStart = useEvent((event) => { 37730 cancelCompositionEndFrame(); 37731 canAutoSelectRef.current = false; 37732 composingRef.current = true; 37733 onCompositionStartProp?.(event); 37734 }); 37735 const onCompositionEndProp = props.onCompositionEnd; 37736 const onCompositionEnd = useEvent((event) => { 37737 canAutoSelectRef.current = true; 37738 composingRef.current = false; 37739 onCompositionEndProp?.(event); 37740 if (event.defaultPrevented) return; 37741 if (!autoSelect) return; 37742 cancelCompositionEndFrame(); 37743 compositionEndFrameRef.current = requestAnimationFrame(() => { 37744 compositionEndFrameRef.current = null; 37745 if (composingRef.current) return; 37746 forceValueUpdate(); 37747 }); 37748 }); 37749 const onMouseDownProp = props.onMouseDown; 37750 const blurActiveItemOnClickProp = useBooleanEvent(blurActiveItemOnClick ?? (() => store.getState().compositeElementInFocusOrder)); 37751 const setValueOnClickProp = useBooleanEvent(setValueOnClick); 37752 const showOnClickProp = useBooleanEvent(showOnClick ?? canShow); 37753 const onMouseDown = useEvent((event) => { 37754 onMouseDownProp?.(event); 37755 if (event.defaultPrevented) return; 37756 if (event.button) return; 37757 if (event.ctrlKey) return; 37758 if (!store) return; 37759 if (blurActiveItemOnClickProp(event)) store.setActiveId(null); 37760 if (setValueOnClickProp(event)) store.setInputValue(inputValue); 37761 if (showOnClickProp(event)) queueBeforeEvent(event.currentTarget, "mouseup", store.show); 37762 }); 37763 const onKeyDownProp = props.onKeyDown; 37764 const showOnKeyPressProp = useBooleanEvent(showOnKeyPress ?? canShow); 37765 const onKeyDown = useEvent((event) => { 37766 onKeyDownProp?.(event); 37767 if (!event.repeat) canAutoSelectRef.current = false; 37768 if (event.defaultPrevented) return; 37769 if (!store) return; 37770 const { open: open2 } = store.getState(); 37771 if (open2 && event.key === "Enter") { 37772 event.preventDefault(); 37773 return; 37774 } 37775 if (event.ctrlKey) return; 37776 if (event.altKey) return; 37777 if (event.shiftKey) return; 37778 if (event.metaKey) return; 37779 if (open2) return; 37780 if (event.key === "ArrowUp" || event.key === "ArrowDown") { 37781 if (showOnKeyPressProp(event)) { 37782 event.preventDefault(); 37783 store.show(); 37784 } 37785 } 37786 }); 37787 const onBlurProp = props.onBlur; 37788 const onBlur = useEvent((event) => { 37789 canAutoSelectRef.current = false; 37790 onBlurProp?.(event); 37791 }); 37792 const id = useId7(props.id); 37793 const ariaAutoComplete = isAriaAutoCompleteValue(autoComplete) ? autoComplete : void 0; 37794 const isActiveItem = useStoreState(store, ["activeId"], (state) => state.activeId === null); 37795 const formDisabled = disabledFromProps({ 37796 disabled: disabled2, 37797 "aria-disabled": props["aria-disabled"] 37798 }); 37799 const composite = props.composite !== false; 37800 const [, setCompositeElement] = useTransactionState(composite ? null : store.setCompositeElement); 37801 const compositeElement = useStoreState(store, multiSelectable ? ["compositeElement"] : [], (state) => multiSelectable ? state.compositeElement : null); 37802 props = useWrapElement(props, (element) => { 37803 if (!name) return element; 37804 if (!Array.isArray(selectedValue)) return element; 37805 if (composite && !compositeElement) return element; 37806 return /* @__PURE__ */ (0, import_jsx_runtime146.jsxs)(import_jsx_runtime146.Fragment, { children: [element, selectedValue.map((value, index2) => /* @__PURE__ */ (0, import_jsx_runtime146.jsx)("input", { 37807 type: "hidden", 37808 name, 37809 form, 37810 disabled: formDisabled, 37811 value 37812 }, index2))] }); 37813 }, [ 37814 name, 37815 form, 37816 formDisabled, 37817 composite, 37818 compositeElement, 37819 selectedValue 37820 ]); 37821 props = { 37822 role: "combobox", 37823 "aria-autocomplete": ariaAutoComplete, 37824 "aria-haspopup": getPopupRole(contentElement, "listbox"), 37825 "aria-expanded": open, 37826 "aria-controls": contentElement?.id, 37827 "data-active-item": isActiveItem || void 0, 37828 value: inputValue, 37829 ...props, 37830 id, 37831 name: multiSelectable ? void 0 : name, 37832 form, 37833 disabled: disabled2, 37834 ref: useMergeRefs5(ref, store.setInputElement, composite ? void 0 : setCompositeElement, props.ref), 37835 onChange, 37836 onCompositionStart, 37837 onCompositionEnd, 37838 onMouseDown, 37839 onKeyDown, 37840 onBlur 37841 }; 37842 const scrollItemIntoView = getScrollItemIntoView(store); 37843 props = useComposite({ 37844 store, 37845 unstable_scrollIntoView: scrollItemIntoView, 37846 focusable: focusable2, 37847 ...props, 37848 moveOnKeyPress: (event) => { 37849 if (isFalsyBooleanCallback(moveOnKeyPress, event)) return false; 37850 if (inline4) setCanInline(true); 37851 return true; 37852 } 37853 }); 37854 return { 37855 autoComplete: "off", 37856 ...props 37857 }; 37858 }); 37859 var Combobox = forwardRef89(function Combobox2(props) { 37860 const htmlProps = useCombobox(props); 37861 return createElement3(TagName8, htmlProps); 37862 }); 37863 37864 // node_modules/@ariakit/react-components/dist/combobox/combobox-item.js 37865 var import_react60 = __toESM(require_react(), 1); 37866 var import_jsx_runtime147 = __toESM(require_jsx_runtime(), 1); 37867 var TagName9 = "div"; 37868 function isSelected(storeValue, itemValue) { 37869 if (itemValue == null) return; 37870 if (storeValue == null) return false; 37871 if (Array.isArray(storeValue)) return storeValue.includes(itemValue); 37872 return storeValue === itemValue; 37873 } 37874 function getItemRole(popupRole) { 37875 return getItemRoleByPopupRole(popupRole) ?? "option"; 37876 } 37877 var useComboboxItem = createHook(function useComboboxItem2({ store, value, hideOnClick, setValueOnClick, selectValueOnClick = true, resetValueOnSelect, focusOnHover, moveOnKeyPress = true, preventScrollOnKeyDown, getItem: getItemProp, ...props }) { 37878 const context = useComboboxScopedContext(); 37879 store = store || context; 37880 invariant(store, "ComboboxItem must be wrapped in a ComboboxList or ComboboxPopover component."); 37881 const id = useId7(props.id); 37882 const { resetValueOnSelectState, multiSelectable, selected, autoFocusSelected, selectElement } = useStoreStateObject(store, ["selectedValue"], { 37883 resetValueOnSelectState: "resetValueOnSelect", 37884 multiSelectable(state) { 37885 return Array.isArray(state.selectedValue); 37886 }, 37887 selected(state) { 37888 return isSelected(state.selectedValue, value); 37889 }, 37890 autoFocusSelected(state) { 37891 if (value == null) return false; 37892 if (!Array.isArray(state.selectedValue)) return state.selectedValue === value; 37893 return state.selectedValue[state.selectedValue.length - 1] === value; 37894 }, 37895 selectElement: "selectElement" 37896 }); 37897 const autoFocusSelectedItem = !!selectElement; 37898 const selectMode = !!selectElement; 37899 const disabled2 = disabledFromProps(props); 37900 const getItem = (0, import_react60.useCallback)((item) => { 37901 const nextItem = { 37902 ...item, 37903 value: selectMode && disabled2 ? void 0 : value 37904 }; 37905 if (getItemProp) return getItemProp(nextItem); 37906 return nextItem; 37907 }, [ 37908 selectMode, 37909 disabled2, 37910 value, 37911 getItemProp 37912 ]); 37913 setValueOnClick = setValueOnClick ?? (!selectMode && !multiSelectable); 37914 hideOnClick = hideOnClick ?? (value != null && !multiSelectable); 37915 preventScrollOnKeyDown = preventScrollOnKeyDown ?? selectMode; 37916 const role = getItemRole((0, import_react60.useContext)(ComboboxListRoleContext)); 37917 const onClickProp = props.onClick; 37918 const setValueOnClickProp = useBooleanEvent(setValueOnClick); 37919 const selectValueOnClickProp = useBooleanEvent(selectValueOnClick); 37920 const resetValueOnSelectProp = useBooleanEvent(resetValueOnSelect ?? resetValueOnSelectState); 37921 const hideOnClickProp = useBooleanEvent(hideOnClick); 37922 const onClick = useEvent((event) => { 37923 onClickProp?.(event); 37924 if (event.defaultPrevented) return; 37925 if (isDownloading(event)) return; 37926 if (isOpeningInNewTab(event)) return; 37927 if (value != null) { 37928 if (selectValueOnClickProp(event)) { 37929 if (resetValueOnSelectProp(event)) store?.resetInputValue(); 37930 store?.setSelectedValue((prevValue) => { 37931 if (!Array.isArray(prevValue)) return value; 37932 if (prevValue.includes(value)) return prevValue.filter((v2) => v2 !== value); 37933 return [...prevValue, value]; 37934 }); 37935 } 37936 if (setValueOnClickProp(event)) store?.setInputValue(value); 37937 } 37938 if (hideOnClickProp(event)) store?.hide(); 37939 }); 37940 const onKeyDownProp = props.onKeyDown; 37941 const onKeyDown = useEvent((event) => { 37942 onKeyDownProp?.(event); 37943 if (event.defaultPrevented) return; 37944 const compositeElement = store?.getState().compositeElement; 37945 if (!compositeElement) return; 37946 if (hasFocus(compositeElement)) return; 37947 const printable = event.key.length === 1 && !event.ctrlKey && !event.metaKey; 37948 const paste = (!isApple() ? event.ctrlKey : event.metaKey) && event.key.toLowerCase() === "v"; 37949 const deleteKey = event.key === "Backspace" || event.key === "Delete"; 37950 if (printable || paste || deleteKey) { 37951 if (compositeElement === selectElement) return; 37952 if (isTextField(compositeElement)) { 37953 queueMicrotask(() => compositeElement.focus()); 37954 store?.setInputValue(compositeElement.value); 37955 return; 37956 } 37957 compositeElement.focus(); 37958 if ("value" in compositeElement && typeof compositeElement.value === "string") store?.setInputValue(compositeElement.value); 37959 } 37960 }); 37961 if ((selectMode || multiSelectable) && selected != null) props = { 37962 "aria-selected": selected, 37963 ...props 37964 }; 37965 props = useWrapElement(props, (element) => /* @__PURE__ */ (0, import_jsx_runtime147.jsx)(ComboboxItemValueContext.Provider, { 37966 value, 37967 children: /* @__PURE__ */ (0, import_jsx_runtime147.jsx)(ComboboxItemCheckedContext.Provider, { 37968 value: selected ?? false, 37969 children: element 37970 }) 37971 }), [value, selected]); 37972 const defaultAutoFocus = autoFocusSelectedItem ? autoFocusSelected : void 0; 37973 props = { 37974 role, 37975 children: value, 37976 ...props, 37977 id, 37978 onClick, 37979 onKeyDown 37980 }; 37981 if (props.autoFocus === void 0 && defaultAutoFocus !== void 0) { 37982 props.autoFocus = false; 37983 props["data-autofocus"] = defaultAutoFocus || void 0; 37984 } 37985 const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress); 37986 const scrollItemIntoView = getScrollItemIntoView(store); 37987 props = useCompositeItem2({ 37988 store, 37989 unstable_scrollIntoView: scrollItemIntoView, 37990 ...props, 37991 getItem, 37992 preventScrollOnKeyDown, 37993 moveOnKeyPress: (event) => { 37994 if (!moveOnKeyPressProp(event)) return false; 37995 const moveEvent = new Event("combobox-item-move"); 37996 store?.getState().compositeElement?.dispatchEvent(moveEvent); 37997 return true; 37998 } 37999 }); 38000 const focusOnHoverProp = useBooleanEvent(focusOnHover ?? false); 38001 props = useCompositeHover({ 38002 store, 38003 ...props, 38004 focusOnHover(event) { 38005 if (focusOnHover !== void 0) return focusOnHoverProp(event); 38006 return selectMode && store.getState().open; 38007 } 38008 }); 38009 return props; 38010 }); 38011 var ComboboxItem = memo4(forwardRef89(function ComboboxItem2(props) { 38012 const htmlProps = useComboboxItem(props); 38013 return createElement3(TagName9, htmlProps); 38014 })); 38015 38016 // node_modules/@ariakit/react-components/dist/combobox/combobox-item-value.js 38017 var import_react61 = __toESM(require_react(), 1); 38018 var import_jsx_runtime148 = __toESM(require_jsx_runtime(), 1); 38019 var TagName10 = "span"; 38020 function normalizeValue(value) { 38021 return normalizeString(value).toLowerCase(); 38022 } 38023 function getOffsets(string, values) { 38024 const offsets = []; 38025 for (const value of values) { 38026 if (!value) continue; 38027 let pos = 0; 38028 const length = value.length; 38029 let index2 = string.indexOf(value, pos); 38030 while (index2 !== -1) { 38031 offsets.push([index2, length]); 38032 pos = index2 + 1; 38033 index2 = string.indexOf(value, pos); 38034 } 38035 } 38036 return offsets; 38037 } 38038 function mergeOverlappingOffsets(offsets) { 38039 offsets.sort(([a2], [b2]) => a2 - b2); 38040 const merged = []; 38041 for (const [offset4, length] of offsets) { 38042 const last = merged[merged.length - 1]; 38043 if (last && offset4 < last[0] + last[1]) last[1] = Math.max(last[1], offset4 + length - last[0]); 38044 else merged.push([offset4, length]); 38045 } 38046 return merged; 38047 } 38048 function getNormalizedIndexes(itemValue) { 38049 const starts = []; 38050 const ends = []; 38051 let index2 = 0; 38052 for (const char of itemValue) { 38053 const normalizedLength = normalizeValue(char).length; 38054 for (let i2 = 0; i2 < normalizedLength; i2 += 1) { 38055 starts.push(i2 === 0 ? index2 : -1); 38056 ends.push(index2); 38057 } 38058 index2 += char.length; 38059 } 38060 starts.push(itemValue.length); 38061 ends.push(itemValue.length); 38062 let nextBoundary = itemValue.length; 38063 for (let i2 = starts.length - 1; i2 >= 0; i2 -= 1) { 38064 const start = starts[i2]; 38065 if (start == null) continue; 38066 if (start === -1) starts[i2] = nextBoundary; 38067 else nextBoundary = start; 38068 } 38069 return { 38070 starts, 38071 ends 38072 }; 38073 } 38074 function toOriginalOffsets(itemValue, normalizedOffsets) { 38075 if (!normalizedOffsets.length) return normalizedOffsets; 38076 const { starts, ends } = getNormalizedIndexes(itemValue); 38077 const offsets = []; 38078 for (const [normalizedOffset, normalizedLength] of normalizedOffsets) { 38079 const start = starts[normalizedOffset]; 38080 const end = ends[normalizedOffset + normalizedLength]; 38081 if (start == null || end == null) continue; 38082 if (end <= start) continue; 38083 offsets.push([start, end - start]); 38084 } 38085 return offsets; 38086 } 38087 function splitValue(itemValue, userValue) { 38088 if (!itemValue) return itemValue; 38089 if (!userValue) return itemValue; 38090 const userValues = toArray(userValue).map(normalizeValue); 38091 const parts = []; 38092 const span = (value, autocomplete = false) => /* @__PURE__ */ (0, import_jsx_runtime148.jsx)("span", { 38093 "data-autocomplete-value": autocomplete ? "" : void 0, 38094 "data-user-value": autocomplete ? void 0 : "", 38095 children: value 38096 }, parts.length); 38097 const offsets = toOriginalOffsets(itemValue, mergeOverlappingOffsets(getOffsets(normalizeValue(itemValue), new Set(userValues)))); 38098 const firstEntry = offsets[0]; 38099 if (!firstEntry) { 38100 parts.push(span(itemValue, true)); 38101 return parts; 38102 } 38103 const [firstOffset] = firstEntry; 38104 [itemValue.slice(0, firstOffset), ...offsets.flatMap(([offset4, length], i2) => { 38105 const value = itemValue.slice(offset4, offset4 + length); 38106 const nextOffset = offsets[i2 + 1]?.[0]; 38107 return [value, itemValue.slice(offset4 + length, nextOffset)]; 38108 })].forEach((value, i2) => { 38109 if (!value) return; 38110 parts.push(span(value, i2 % 2 === 0)); 38111 }); 38112 return parts; 38113 } 38114 var useComboboxItemValue = createHook(function useComboboxItemValue2({ store, value, userValue, ...props }) { 38115 const context = useComboboxScopedContext(); 38116 store = store || context; 38117 const itemContext = (0, import_react61.useContext)(ComboboxItemValueContext); 38118 const itemValue = value ?? itemContext; 38119 const inputValue = useStoreState(store, ["inputValue"], (state) => userValue ?? state?.inputValue); 38120 props = { 38121 children: (0, import_react61.useMemo)(() => { 38122 if (!itemValue) return; 38123 if (!inputValue) return itemValue; 38124 return splitValue(itemValue, inputValue); 38125 }, [itemValue, inputValue]), 38126 ...props 38127 }; 38128 return props; 38129 }); 38130 var ComboboxItemValue = forwardRef89(function ComboboxItemValue2(props) { 38131 const htmlProps = useComboboxItemValue(props); 38132 return createElement3(TagName10, htmlProps); 38133 }); 38134 38135 // node_modules/@ariakit/react-components/dist/combobox/combobox-label.js 38136 var TagName11 = "label"; 38137 var useComboboxLabel = createHook(function useComboboxLabel2({ store, ...props }) { 38138 const scopedContext = useComboboxScopedContext(true); 38139 const context = useComboboxProviderContext(); 38140 store = store || context || scopedContext; 38141 invariant(store, "ComboboxLabel must receive a `store` prop or be wrapped in a ComboboxProvider component."); 38142 const inputElement = useStoreState(store, "inputElement"); 38143 useAttribute(inputElement, "id"); 38144 const comboboxId = inputElement?.id; 38145 const id = useId7(props.id); 38146 props = { 38147 htmlFor: comboboxId, 38148 ...props, 38149 id, 38150 ref: useMergeRefs5(store.setLabelElement, props.ref) 38151 }; 38152 return props; 38153 }); 38154 var ComboboxLabel = memo4(forwardRef89(function ComboboxLabel2(props) { 38155 const htmlProps = useComboboxLabel(props); 38156 return createElement3(TagName11, htmlProps); 38157 })); 38158 38159 // node_modules/@ariakit/react-components/dist/combobox/combobox-list.js 38160 var import_react62 = __toESM(require_react(), 1); 38161 var import_jsx_runtime149 = __toESM(require_jsx_runtime(), 1); 38162 var TagName12 = "div"; 38163 var useComboboxList = createHook(function useComboboxList2({ store, alwaysVisible, ...props }) { 38164 const scopedContext = useComboboxScopedContext(true); 38165 const context = useComboboxContext(); 38166 store = store || context; 38167 const scopedContextSameStore = !!store && store === scopedContext; 38168 invariant(store, "ComboboxList must receive a `store` prop or be wrapped in a ComboboxProvider component."); 38169 const onFocusProp = props.onFocus; 38170 const onFocus = useEvent((event) => { 38171 onFocusProp?.(event); 38172 if (event.defaultPrevented) return; 38173 if (!isSelfTarget(event)) return; 38174 const compositeElement = store.getState().compositeElement; 38175 if (!compositeElement) return; 38176 if (!isFocusable(compositeElement)) return; 38177 const list = event.currentTarget; 38178 queueMicrotask(() => { 38179 if (getDocument(list).activeElement !== list) return; 38180 compositeElement.focus(); 38181 }); 38182 }); 38183 const ref = (0, import_react62.useRef)(null); 38184 const id = useId7(props.id); 38185 const mounted = useStoreState(store, "mounted"); 38186 const hidden = isHidden(mounted, props.hidden, alwaysVisible); 38187 const style = hidden ? { 38188 ...props.style, 38189 display: "none" 38190 } : props.style; 38191 const multiSelectable = useStoreState(store, ["selectedValue"], (state) => Array.isArray(state.selectedValue)); 38192 const role = useAttribute(ref, "role", props.role); 38193 const ariaMultiSelectable = role === "listbox" || role === "tree" || role === "grid" ? multiSelectable || void 0 : void 0; 38194 const [hasListboxInside, setHasListboxInside] = (0, import_react62.useState)(false); 38195 const contentElement = useStoreState(store, "contentElement"); 38196 const parentHeadingContext = (0, import_react62.useContext)(ComboboxHeadingContext); 38197 const headingState = (0, import_react62.useState)(); 38198 const [headingId, setHeadingId] = parentHeadingContext || headingState; 38199 const headingContext = (0, import_react62.useMemo)(() => [headingId, setHeadingId], [headingId, setHeadingId]); 38200 useSafeLayoutEffect(() => { 38201 if (!mounted) return; 38202 const element = ref.current; 38203 if (!element) return; 38204 if (contentElement !== element) return; 38205 const callback = () => { 38206 setHasListboxInside(!!element.querySelector("[role='listbox']")); 38207 }; 38208 const observer = new MutationObserver(callback); 38209 observer.observe(element, { 38210 subtree: true, 38211 childList: true, 38212 attributeFilter: ["role"] 38213 }); 38214 callback(); 38215 return () => observer.disconnect(); 38216 }, [mounted, contentElement]); 38217 if (!hasListboxInside) props = { 38218 role: "listbox", 38219 "aria-multiselectable": ariaMultiSelectable, 38220 ...props 38221 }; 38222 props = useWrapElement(props, (element) => /* @__PURE__ */ (0, import_jsx_runtime149.jsx)(ComboboxScopedContextProvider, { 38223 value: store, 38224 children: /* @__PURE__ */ (0, import_jsx_runtime149.jsx)(ComboboxHeadingContext.Provider, { 38225 value: headingContext, 38226 children: /* @__PURE__ */ (0, import_jsx_runtime149.jsx)(DialogHeadingContext.Provider, { 38227 value: setHeadingId, 38228 children: /* @__PURE__ */ (0, import_jsx_runtime149.jsx)(ComboboxListRoleContext.Provider, { 38229 value: role, 38230 children: element 38231 }) 38232 }) 38233 }) 38234 }), [ 38235 store, 38236 role, 38237 headingContext 38238 ]); 38239 const setContentElement = id && (!scopedContext || !scopedContextSameStore) ? store.setContentElement : null; 38240 const labelElement = useStoreState(store, ["labelElement", "selectLabelElement"], (state) => { 38241 if (headingId) return null; 38242 return state.selectLabelElement || state.labelElement; 38243 }); 38244 useAttribute(labelElement, "id"); 38245 const labelId = headingId || labelElement?.id; 38246 props = { 38247 "aria-labelledby": props["aria-label"] != null ? void 0 : labelId, 38248 hidden, 38249 ...props, 38250 id, 38251 onFocus, 38252 ref: useMergeRefs5(setContentElement, ref, props.ref), 38253 style, 38254 tabIndex: -1 38255 }; 38256 return props; 38257 }); 38258 var ComboboxList = forwardRef89(function ComboboxList2(props) { 38259 const htmlProps = useComboboxList(props); 38260 return createElement3(TagName12, htmlProps); 38261 }); 38262 38263 // node_modules/@ariakit/react-components/dist/tag/tag-context.js 38264 var import_react63 = __toESM(require_react(), 1); 38265 var TagValueContext = (0, import_react63.createContext)(null); 38266 var TagRemoveIdContext = (0, import_react63.createContext)(null); 38267 var ctx7 = createStoreContext([CompositeContextProvider], [CompositeScopedContextProvider]); 38268 var useTagContext = ctx7.useContext; 38269 var useTagScopedContext = ctx7.useScopedContext; 38270 var useTagProviderContext = ctx7.useProviderContext; 38271 var TagContextProvider = ctx7.ContextProvider; 38272 var TagScopedContextProvider = ctx7.ScopedContextProvider; 38273 38274 // node_modules/@ariakit/components/dist/combobox/combobox-store.js 38275 var isTouchSafari = isSafari() && isTouchDevice(); 38276 function createComboboxStore({ tag, ...props } = {}) { 38277 const store = mergeStore(props.store, pick2(tag, ["value", "rtl"])); 38278 const defaultInputValue = defaultValue(props.defaultInputValue, props.defaultValue); 38279 throwOnConflictingProps({ 38280 ...props, 38281 defaultInputValue, 38282 defaultValue: defaultInputValue 38283 }, store); 38284 const tagState = tag?.getState(); 38285 const syncState = store?.getState(); 38286 const activeId = defaultValue(props.activeId, syncState?.activeId, props.defaultActiveId, null); 38287 const composite = createCompositeStore({ 38288 ...props, 38289 activeId, 38290 compositeElementInFocusOrder: defaultValue(props.compositeElementInFocusOrder, props.includesBaseElement, syncState?.compositeElementInFocusOrder, syncState?.includesBaseElement, true), 38291 orientation: defaultValue(props.orientation, syncState?.orientation, "vertical"), 38292 focusLoop: defaultValue(props.focusLoop, syncState?.focusLoop, true), 38293 focusWrap: defaultValue(props.focusWrap, syncState?.focusWrap, true), 38294 virtualFocus: defaultValue(props.virtualFocus, syncState?.virtualFocus, true) 38295 }); 38296 const popover = createPopoverStore({ 38297 ...props, 38298 placement: defaultValue(props.placement, syncState?.placement, "bottom-start") 38299 }); 38300 const inputValue = defaultValue(props.inputValue, props.value, syncState?.inputValue, syncState?.value, defaultInputValue, ""); 38301 const selectedValue = defaultValue(props.selectedValue, syncState?.selectedValue, tagState?.values, props.defaultSelectedValue, ""); 38302 let shouldSetDefaultSelectedValue = props.selectedValue === void 0 && syncState?.selectedValue === void 0 && tagState?.values === void 0 && props.defaultSelectedValue === void 0; 38303 const multiSelectable = Array.isArray(selectedValue); 38304 const initialState = { 38305 ...composite.getState(), 38306 ...popover.getState(), 38307 inputValue, 38308 value: inputValue, 38309 selectedValue, 38310 resetValueOnSelect: defaultValue(props.resetValueOnSelect, syncState?.resetValueOnSelect, multiSelectable), 38311 resetValueOnHide: defaultValue(props.resetValueOnHide, syncState?.resetValueOnHide, multiSelectable && !tag), 38312 selectOnMove: defaultValue(props.selectOnMove, syncState?.selectOnMove, false), 38313 activeValue: syncState?.activeValue, 38314 inputElement: defaultValue(syncState?.inputElement, null), 38315 labelElement: defaultValue(syncState?.labelElement, null), 38316 selectElement: defaultValue(syncState?.selectElement, null), 38317 selectLabelElement: defaultValue(syncState?.selectLabelElement, null) 38318 }; 38319 const combobox = createStore(initialState, composite, popover, store); 38320 setup(combobox, () => chain(sync(combobox, ["inputValue"], (state) => { 38321 combobox.setState("value", state.inputValue); 38322 }), sync(combobox, ["value"], (state) => { 38323 combobox.setState("inputValue", state.value); 38324 }))); 38325 let resolveSelectedItemOnOpen = false; 38326 const selectDefaultOptions = /* @__PURE__ */ new Set(); 38327 if (props.focusLoop === void 0 && syncState?.focusLoop === void 0) selectDefaultOptions.add("focusLoop"); 38328 if (props.focusWrap === void 0 && syncState?.focusWrap === void 0) selectDefaultOptions.add("focusWrap"); 38329 if (props.compositeElementInFocusOrder === void 0 && props.includesBaseElement === void 0 && syncState?.compositeElementInFocusOrder === void 0 && syncState?.includesBaseElement === void 0) selectDefaultOptions.add("compositeElementInFocusOrder"); 38330 if (props.resetValueOnSelect === void 0 && syncState?.resetValueOnSelect === void 0) selectDefaultOptions.add("resetValueOnSelect"); 38331 let syncedSelectElement = initialState.compositeElement === initialState.selectElement ? initialState.selectElement : null; 38332 const initialFallback = initialState.selectElement || initialState.compositeElement || initialState.disclosureElement; 38333 let syncedAnchorElement = initialState.anchorElement === initialFallback ? initialState.anchorElement : null; 38334 setup(combobox, () => sync(combobox, ["compositeElement", "selectElement"], (state) => { 38335 if (!state.selectElement && !syncedSelectElement) return; 38336 if (state.compositeElement && state.compositeElement === state.selectElement) { 38337 syncedSelectElement = state.selectElement; 38338 return; 38339 } 38340 if (state.compositeElement && state.compositeElement !== syncedSelectElement) { 38341 syncedSelectElement = null; 38342 return; 38343 } 38344 syncedSelectElement = state.selectElement; 38345 combobox.setState("compositeElement", syncedSelectElement); 38346 })); 38347 setup(combobox, () => sync(combobox, ["selectElement"], (state) => { 38348 if (!state.selectElement) return; 38349 const { focusLoop, focusWrap, compositeElementInFocusOrder, resetValueOnSelect } = combobox.getState(); 38350 if (selectDefaultOptions.has("focusLoop")) composite.setState("focusLoop", false); 38351 if (selectDefaultOptions.has("focusWrap")) composite.setState("focusWrap", false); 38352 if (selectDefaultOptions.has("compositeElementInFocusOrder")) composite.setState("compositeElementInFocusOrder", false); 38353 if (selectDefaultOptions.has("resetValueOnSelect")) combobox.setState("resetValueOnSelect", true); 38354 return () => { 38355 const current = combobox.getState(); 38356 if (selectDefaultOptions.has("focusLoop") && !current.focusLoop) composite.setState("focusLoop", focusLoop); 38357 if (selectDefaultOptions.has("focusWrap") && !current.focusWrap) composite.setState("focusWrap", focusWrap); 38358 if (selectDefaultOptions.has("compositeElementInFocusOrder") && !current.compositeElementInFocusOrder) composite.setState("compositeElementInFocusOrder", compositeElementInFocusOrder); 38359 if (selectDefaultOptions.has("resetValueOnSelect") && current.resetValueOnSelect) combobox.setState("resetValueOnSelect", resetValueOnSelect); 38360 }; 38361 })); 38362 setup(combobox, () => sync(combobox, [ 38363 "anchorElement", 38364 "compositeElement", 38365 "disclosureElement", 38366 "selectElement" 38367 ], (state) => { 38368 if (state.anchorElement && state.anchorElement !== syncedAnchorElement) { 38369 syncedAnchorElement = null; 38370 return; 38371 } 38372 syncedAnchorElement = state.selectElement || state.compositeElement || state.disclosureElement; 38373 combobox.setState("anchorElement", syncedAnchorElement); 38374 })); 38375 setup(combobox, () => sync(combobox, [ 38376 "items", 38377 "selectedValue", 38378 "selectElement" 38379 ], (state, prevState) => { 38380 if (!shouldSetDefaultSelectedValue) return; 38381 if (state.selectedValue !== prevState.selectedValue) { 38382 shouldSetDefaultSelectedValue = false; 38383 return; 38384 } 38385 if (!state.selectElement) return; 38386 queueMicrotask(() => { 38387 if (!shouldSetDefaultSelectedValue) return; 38388 const state2 = combobox.getState(); 38389 if (!state2.selectElement) return; 38390 const item = state2.items.find((item2) => !item2.disabled && item2.value != null); 38391 if (item?.value == null) return; 38392 shouldSetDefaultSelectedValue = false; 38393 combobox.setState("selectedValue", item.value); 38394 }); 38395 })); 38396 if (isTouchSafari) setup(combobox, () => sync(combobox, ["virtualFocus"], () => { 38397 combobox.setState("virtualFocus", false); 38398 })); 38399 setup(combobox, () => { 38400 if (!tag) return; 38401 return chain(sync(combobox, ["selectedValue"], (state) => { 38402 if (!Array.isArray(state.selectedValue)) return; 38403 tag.setValues(state.selectedValue); 38404 }), sync(tag, ["values"], (state) => { 38405 combobox.setState("selectedValue", state.values); 38406 })); 38407 }); 38408 setup(combobox, () => sync(combobox, ["resetValueOnHide", "mounted"], (state) => { 38409 if (!state.resetValueOnHide) return; 38410 if (state.mounted) return; 38411 combobox.setState("inputValue", inputValue); 38412 })); 38413 setup(combobox, () => sync(combobox, ["open"], (state) => { 38414 if (state.open) { 38415 resolveSelectedItemOnOpen = true; 38416 return; 38417 } 38418 resolveSelectedItemOnOpen = false; 38419 combobox.setState("activeId", activeId); 38420 combobox.setState("moves", 0); 38421 })); 38422 setup(combobox, () => sync(combobox, ["moves", "activeId"], (state, prevState) => { 38423 if (state.moves !== prevState.moves) resolveSelectedItemOnOpen = false; 38424 if (state.activeId !== prevState.activeId) resolveSelectedItemOnOpen = false; 38425 if (state.moves === prevState.moves) combobox.setState("activeValue", void 0); 38426 })); 38427 setup(combobox, () => batch(combobox, ["moves", "renderedItems"], (state, prev) => { 38428 if (state.moves === prev.moves) return; 38429 const { activeId: activeId2 } = combobox.getState(); 38430 const activeItem = composite.item(activeId2); 38431 combobox.setState("activeValue", activeItem?.value); 38432 })); 38433 setup(combobox, () => sync(combobox, [ 38434 "items", 38435 "mounted", 38436 "open", 38437 "selectedValue", 38438 "selectElement" 38439 ], (state) => { 38440 if (!state.selectElement) return; 38441 if (state.mounted && !resolveSelectedItemOnOpen) return; 38442 const values = Array.isArray(state.selectedValue) ? state.selectedValue : [state.selectedValue]; 38443 const lastValue = values[values.length - 1]; 38444 if (lastValue == null) return; 38445 const item = state.items.find((item2) => !item2.disabled && item2.value === lastValue); 38446 if (!item) return; 38447 resolveSelectedItemOnOpen = false; 38448 combobox.setState("activeId", item.id); 38449 })); 38450 setup(combobox, () => batch(combobox, ["selectOnMove", "moves"], (state) => { 38451 const { activeId: activeId2, open, selectedValue: selectedValue2, selectElement } = combobox.getState(); 38452 if (!selectElement) return; 38453 if (!state.selectOnMove && open) return; 38454 if (Array.isArray(selectedValue2)) return; 38455 if (!state.moves) return; 38456 if (!activeId2) return; 38457 const item = composite.item(activeId2); 38458 if (!item || item.disabled || item.value == null) return; 38459 combobox.setState("selectedValue", item.value); 38460 })); 38461 const setInputValue = (value) => { 38462 combobox.setState("inputValue", value); 38463 }; 38464 const resetInputValue = () => setInputValue(initialState.inputValue); 38465 const setState = (key, value) => { 38466 selectDefaultOptions.delete(key); 38467 if (key === "includesBaseElement") selectDefaultOptions.delete("compositeElementInFocusOrder"); 38468 if (key === "selectedValue") shouldSetDefaultSelectedValue = false; 38469 combobox.setState(key, value); 38470 }; 38471 return { 38472 ...popover, 38473 ...composite, 38474 ...combobox, 38475 setState, 38476 tag, 38477 setInputValue, 38478 resetInputValue, 38479 setValue: setInputValue, 38480 resetValue: resetInputValue, 38481 setSelectedValue: (selectedValue2) => setState("selectedValue", selectedValue2), 38482 setInputElement: (element) => combobox.setState("inputElement", element), 38483 setLabelElement: (element) => combobox.setState("labelElement", element), 38484 setSelectElement: (element) => combobox.setState("selectElement", element), 38485 setSelectLabelElement: (element) => combobox.setState("selectLabelElement", element) 38486 }; 38487 } 38488 38489 // node_modules/@ariakit/react-components/dist/combobox/combobox-store.js 38490 function useComboboxStoreOptions(props) { 38491 const tag = useTagContext(); 38492 props = { 38493 ...props, 38494 tag: props.tag !== void 0 ? props.tag : tag 38495 }; 38496 return useCompositeStoreOptions(props); 38497 } 38498 function useComboboxStoreProps(store, update2, props) { 38499 useUpdateEffect(update2, [props.tag]); 38500 const inputValueProps = { 38501 inputValue: props.inputValue ?? props.value, 38502 setInputValue: props.setInputValue ?? props.setValue 38503 }; 38504 useStoreProps(store, inputValueProps, "inputValue", "setInputValue"); 38505 useStoreProps(store, props, "selectedValue", "setSelectedValue"); 38506 useStoreProps(store, props, "selectOnMove"); 38507 useStoreProps(store, props, "resetValueOnHide"); 38508 useStoreProps(store, props, "resetValueOnSelect"); 38509 return Object.assign(useCompositeStoreProps(usePopoverStoreProps(store, update2, props), update2, props), { tag: props.tag }); 38510 } 38511 function useComboboxStore(props = {}) { 38512 props = useComboboxStoreOptions(props); 38513 const [store, update2] = useStore2(createComboboxStore, props); 38514 return useComboboxStoreProps(store, update2, props); 38515 } 38516 38517 // node_modules/@ariakit/react-components/dist/combobox/combobox-provider.js 38518 var import_jsx_runtime150 = __toESM(require_jsx_runtime(), 1); 38519 function ComboboxProvider(props = {}) { 38520 const store = useComboboxStore(props); 38521 return /* @__PURE__ */ (0, import_jsx_runtime150.jsx)(ComboboxContextProvider, { 38522 value: store, 38523 children: props.children 38524 }); 38525 } 38526 38527 // packages/dataviews/build-module/components/dataviews-filters/search-widget.mjs 38528 var import_remove_accents = __toESM(require_remove_accents(), 1); 38529 var import_compose12 = __toESM(require_compose(), 1); 38530 var import_i18n39 = __toESM(require_i18n(), 1); 38531 var import_element98 = __toESM(require_element(), 1); 38532 var import_components21 = __toESM(require_components(), 1); 38533 38534 // packages/dataviews/build-module/components/dataviews-filters/utils.mjs 38535 var EMPTY_ARRAY3 = []; 38536 var getCurrentValue = (filterDefinition, currentFilter) => { 38537 if (filterDefinition.singleSelection) { 38538 return currentFilter?.value; 38539 } 38540 if (Array.isArray(currentFilter?.value)) { 38541 return currentFilter.value; 38542 } 38543 if (!Array.isArray(currentFilter?.value) && !!currentFilter?.value) { 38544 return [currentFilter.value]; 38545 } 38546 return EMPTY_ARRAY3; 38547 }; 38548 38549 // packages/dataviews/build-module/hooks/use-elements.mjs 38550 var import_element97 = __toESM(require_element(), 1); 38551 var EMPTY_ARRAY4 = []; 38552 function useElements({ 38553 elements, 38554 getElements 38555 }) { 38556 const staticElements = Array.isArray(elements) && elements.length > 0 ? elements : EMPTY_ARRAY4; 38557 const [records, setRecords] = (0, import_element97.useState)(staticElements); 38558 const [isLoading, setIsLoading] = (0, import_element97.useState)(false); 38559 (0, import_element97.useEffect)(() => { 38560 if (!getElements) { 38561 setRecords(staticElements); 38562 return; 38563 } 38564 let cancelled = false; 38565 setIsLoading(true); 38566 getElements().then((fetchedElements) => { 38567 if (!cancelled) { 38568 const dynamicElements = Array.isArray(fetchedElements) && fetchedElements.length > 0 ? fetchedElements : staticElements; 38569 setRecords(dynamicElements); 38570 } 38571 }).catch(() => { 38572 if (!cancelled) { 38573 setRecords(staticElements); 38574 } 38575 }).finally(() => { 38576 if (!cancelled) { 38577 setIsLoading(false); 38578 } 38579 }); 38580 return () => { 38581 cancelled = true; 38582 }; 38583 }, [getElements, staticElements]); 38584 return { 38585 elements: records, 38586 isLoading 38587 }; 38588 } 38589 38590 // packages/dataviews/build-module/components/dataviews-filters/search-widget.mjs 38591 var import_jsx_runtime151 = __toESM(require_jsx_runtime(), 1); 38592 function normalizeSearchInput(input = "") { 38593 return (0, import_remove_accents.default)(input.trim().toLowerCase()); 38594 } 38595 var getNewValue = (filterDefinition, currentFilter, value) => { 38596 if (filterDefinition.singleSelection) { 38597 return value; 38598 } 38599 if (Array.isArray(currentFilter?.value)) { 38600 return currentFilter.value.includes(value) ? currentFilter.value.filter((v2) => v2 !== value) : [...currentFilter.value, value]; 38601 } 38602 return [value]; 38603 }; 38604 function generateFilterElementCompositeItemId(prefix, filterElementValue) { 38605 return `$prefix}-$filterElementValue}`; 38606 } 38607 var MultiSelectionOption = ({ selected }) => { 38608 return /* @__PURE__ */ (0, import_jsx_runtime151.jsx)( 38609 "span", 38610 { 38611 className: clsx_default( 38612 "dataviews-filters__search-widget-listitem-multi-selection", 38613 { "is-selected": selected } 38614 ), 38615 children: selected && /* @__PURE__ */ (0, import_jsx_runtime151.jsx)(import_components21.Icon, { icon: check_default }) 38616 } 38617 ); 38618 }; 38619 var SingleSelectionOption = ({ selected }) => { 38620 return /* @__PURE__ */ (0, import_jsx_runtime151.jsx)( 38621 "span", 38622 { 38623 className: clsx_default( 38624 "dataviews-filters__search-widget-listitem-single-selection", 38625 { "is-selected": selected } 38626 ) 38627 } 38628 ); 38629 }; 38630 function ListBox({ view, filter, onChangeView }) { 38631 const baseId = (0, import_compose12.useInstanceId)(ListBox, "dataviews-filter-list-box"); 38632 const [activeCompositeId, setActiveCompositeId] = (0, import_element98.useState)( 38633 // When there are one or less operators, the first item is set as active 38634 // (by setting the initial `activeId` to `undefined`). 38635 // With 2 or more operators, the focus is moved on the operators control 38636 // (by setting the initial `activeId` to `null`), meaning that there won't 38637 // be an active item initially. Focus is then managed via the 38638 // `onFocusVisible` callback. 38639 filter.operators?.length === 1 ? void 0 : null 38640 ); 38641 const currentFilter = view.filters?.find( 38642 (f2) => f2.field === filter.field 38643 ); 38644 const currentValue = getCurrentValue(filter, currentFilter); 38645 return /* @__PURE__ */ (0, import_jsx_runtime151.jsx)( 38646 import_components21.Composite, 38647 { 38648 virtualFocus: true, 38649 focusLoop: true, 38650 activeId: activeCompositeId, 38651 setActiveId: setActiveCompositeId, 38652 role: "listbox", 38653 className: "dataviews-filters__search-widget-listbox", 38654 "aria-label": (0, import_i18n39.sprintf)( 38655 /* translators: List of items for a filter. 1: Filter name. e.g.: "List of: Author". */ 38656 (0, import_i18n39.__)("List of: %1$s"), 38657 filter.name 38658 ), 38659 onFocusVisible: () => { 38660 if (!activeCompositeId && filter.elements.length) { 38661 setActiveCompositeId( 38662 generateFilterElementCompositeItemId( 38663 baseId, 38664 filter.elements[0].value 38665 ) 38666 ); 38667 } 38668 }, 38669 render: /* @__PURE__ */ (0, import_jsx_runtime151.jsx)(import_components21.Composite.Typeahead, {}), 38670 children: filter.elements.map((element) => /* @__PURE__ */ (0, import_jsx_runtime151.jsxs)( 38671 import_components21.Composite.Hover, 38672 { 38673 render: /* @__PURE__ */ (0, import_jsx_runtime151.jsx)( 38674 import_components21.Composite.Item, 38675 { 38676 id: generateFilterElementCompositeItemId( 38677 baseId, 38678 element.value 38679 ), 38680 render: /* @__PURE__ */ (0, import_jsx_runtime151.jsx)( 38681 "div", 38682 { 38683 "aria-label": element.label, 38684 role: "option", 38685 className: "dataviews-filters__search-widget-listitem" 38686 } 38687 ), 38688 onClick: () => { 38689 const newFilters = currentFilter ? [ 38690 ...(view.filters ?? []).map( 38691 (_filter) => { 38692 if (_filter.field === filter.field) { 38693 return { 38694 ..._filter, 38695 operator: currentFilter.operator || filter.operators[0], 38696 value: getNewValue( 38697 filter, 38698 currentFilter, 38699 element.value 38700 ) 38701 }; 38702 } 38703 return _filter; 38704 } 38705 ) 38706 ] : [ 38707 ...view.filters ?? [], 38708 { 38709 field: filter.field, 38710 operator: filter.operators[0], 38711 value: getNewValue( 38712 filter, 38713 currentFilter, 38714 element.value 38715 ) 38716 } 38717 ]; 38718 onChangeView({ 38719 ...view, 38720 page: 1, 38721 filters: newFilters 38722 }); 38723 } 38724 } 38725 ), 38726 children: [ 38727 filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime151.jsx)( 38728 SingleSelectionOption, 38729 { 38730 selected: currentValue === element.value 38731 } 38732 ), 38733 !filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime151.jsx)( 38734 MultiSelectionOption, 38735 { 38736 selected: currentValue.includes(element.value) 38737 } 38738 ), 38739 /* @__PURE__ */ (0, import_jsx_runtime151.jsx)( 38740 "span", 38741 { 38742 className: "dataviews-filters__search-widget-listitem-value", 38743 title: element.label, 38744 children: element.label 38745 } 38746 ) 38747 ] 38748 }, 38749 element.value 38750 )) 38751 } 38752 ); 38753 } 38754 function ComboboxList22({ view, filter, onChangeView }) { 38755 const [searchValue, setSearchValue] = (0, import_element98.useState)(""); 38756 const deferredSearchValue = (0, import_element98.useDeferredValue)(searchValue); 38757 const currentFilter = view.filters?.find( 38758 (_filter) => _filter.field === filter.field 38759 ); 38760 const currentValue = getCurrentValue(filter, currentFilter); 38761 const matches = (0, import_element98.useMemo)(() => { 38762 const normalizedSearch = normalizeSearchInput(deferredSearchValue); 38763 return filter.elements.filter( 38764 (item) => normalizeSearchInput(item.label).includes(normalizedSearch) 38765 ); 38766 }, [filter.elements, deferredSearchValue]); 38767 return /* @__PURE__ */ (0, import_jsx_runtime151.jsxs)( 38768 ComboboxProvider, 38769 { 38770 selectedValue: currentValue, 38771 setSelectedValue: (value) => { 38772 const newFilters = currentFilter ? [ 38773 ...(view.filters ?? []).map((_filter) => { 38774 if (_filter.field === filter.field) { 38775 return { 38776 ..._filter, 38777 operator: currentFilter.operator || filter.operators[0], 38778 value 38779 }; 38780 } 38781 return _filter; 38782 }) 38783 ] : [ 38784 ...view.filters ?? [], 38785 { 38786 field: filter.field, 38787 operator: filter.operators[0], 38788 value 38789 } 38790 ]; 38791 onChangeView({ 38792 ...view, 38793 page: 1, 38794 filters: newFilters 38795 }); 38796 }, 38797 setValue: setSearchValue, 38798 children: [ 38799 /* @__PURE__ */ (0, import_jsx_runtime151.jsxs)("div", { className: "dataviews-filters__search-widget-filter-combobox__wrapper", children: [ 38800 /* @__PURE__ */ (0, import_jsx_runtime151.jsx)(VisuallyHidden, { render: /* @__PURE__ */ (0, import_jsx_runtime151.jsx)(ComboboxLabel, {}), children: (0, import_i18n39.__)("Search items") }), 38801 /* @__PURE__ */ (0, import_jsx_runtime151.jsx)( 38802 Combobox, 38803 { 38804 autoSelect: "always", 38805 placeholder: (0, import_i18n39.__)("Search"), 38806 className: "dataviews-filters__search-widget-filter-combobox__input" 38807 } 38808 ), 38809 /* @__PURE__ */ (0, import_jsx_runtime151.jsx)("div", { className: "dataviews-filters__search-widget-filter-combobox__icon", children: /* @__PURE__ */ (0, import_jsx_runtime151.jsx)(import_components21.Icon, { icon: search_default }) }) 38810 ] }), 38811 /* @__PURE__ */ (0, import_jsx_runtime151.jsxs)( 38812 ComboboxList, 38813 { 38814 className: "dataviews-filters__search-widget-filter-combobox-list", 38815 alwaysVisible: true, 38816 children: [ 38817 matches.map((element) => { 38818 return /* @__PURE__ */ (0, import_jsx_runtime151.jsxs)( 38819 ComboboxItem, 38820 { 38821 resetValueOnSelect: false, 38822 value: element.value, 38823 className: "dataviews-filters__search-widget-listitem", 38824 hideOnClick: false, 38825 setValueOnClick: false, 38826 focusOnHover: true, 38827 children: [ 38828 filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime151.jsx)( 38829 SingleSelectionOption, 38830 { 38831 selected: currentValue === element.value 38832 } 38833 ), 38834 !filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime151.jsx)( 38835 MultiSelectionOption, 38836 { 38837 selected: currentValue.includes( 38838 element.value 38839 ) 38840 } 38841 ), 38842 /* @__PURE__ */ (0, import_jsx_runtime151.jsxs)( 38843 "span", 38844 { 38845 className: "dataviews-filters__search-widget-listitem-value", 38846 title: element.label, 38847 children: [ 38848 /* @__PURE__ */ (0, import_jsx_runtime151.jsx)( 38849 ComboboxItemValue, 38850 { 38851 className: "dataviews-filters__search-widget-filter-combobox-item-value", 38852 value: element.label 38853 } 38854 ), 38855 !!element.description && /* @__PURE__ */ (0, import_jsx_runtime151.jsx)("span", { className: "dataviews-filters__search-widget-listitem-description", children: element.description }) 38856 ] 38857 } 38858 ) 38859 ] 38860 }, 38861 element.value 38862 ); 38863 }), 38864 !matches.length && /* @__PURE__ */ (0, import_jsx_runtime151.jsx)("p", { children: (0, import_i18n39.__)("No results found") }) 38865 ] 38866 } 38867 ) 38868 ] 38869 } 38870 ); 38871 } 38872 function SearchWidget(props) { 38873 const { elements, isLoading } = useElements({ 38874 elements: props.filter.elements, 38875 getElements: props.filter.getElements 38876 }); 38877 if (isLoading) { 38878 return /* @__PURE__ */ (0, import_jsx_runtime151.jsx)("div", { className: "dataviews-filters__search-widget-no-elements", children: /* @__PURE__ */ (0, import_jsx_runtime151.jsx)(import_components21.Spinner, {}) }); 38879 } 38880 if (elements.length === 0) { 38881 return /* @__PURE__ */ (0, import_jsx_runtime151.jsx)("div", { className: "dataviews-filters__search-widget-no-elements", children: (0, import_i18n39.__)("No elements found") }); 38882 } 38883 const Widget = elements.length > 10 ? ComboboxList22 : ListBox; 38884 return /* @__PURE__ */ (0, import_jsx_runtime151.jsx)(Widget, { ...props, filter: { ...props.filter, elements } }); 38885 } 38886 38887 // packages/dataviews/build-module/components/dataviews-filters/input-widget.mjs 38888 var import_es6 = __toESM(require_es6(), 1); 38889 var import_compose13 = __toESM(require_compose(), 1); 38890 var import_element99 = __toESM(require_element(), 1); 38891 var import_components22 = __toESM(require_components(), 1); 38892 var import_jsx_runtime152 = __toESM(require_jsx_runtime(), 1); 38893 function InputWidget({ 38894 filter, 38895 view, 38896 onChangeView, 38897 fields 38898 }) { 38899 const currentFilter = view.filters?.find( 38900 (f2) => f2.field === filter.field 38901 ); 38902 const currentValue = getCurrentValue(filter, currentFilter); 38903 const field = (0, import_element99.useMemo)(() => { 38904 const currentField = fields.find((f2) => f2.id === filter.field); 38905 if (currentField) { 38906 return { 38907 ...currentField, 38908 // Deactivate validation for filters. 38909 isValid: {}, 38910 // Filter controls are always enabled. 38911 isDisabled: () => false, 38912 // Filter controls are always visible. 38913 isVisible: () => true, 38914 // Configure getValue/setValue as if Item was a plain object. 38915 getValue: ({ item }) => item[currentField.id], 38916 setValue: ({ value }) => ({ 38917 [currentField.id]: value 38918 }) 38919 }; 38920 } 38921 return currentField; 38922 }, [fields, filter.field]); 38923 const data = (0, import_element99.useMemo)(() => { 38924 return (view.filters ?? []).reduce( 38925 (acc, activeFilter) => { 38926 acc[activeFilter.field] = activeFilter.value; 38927 return acc; 38928 }, 38929 {} 38930 ); 38931 }, [view.filters]); 38932 const handleChange = (0, import_compose13.useEvent)((updatedData) => { 38933 if (!field || !currentFilter) { 38934 return; 38935 } 38936 const nextValue = field.getValue({ item: updatedData }); 38937 if ((0, import_es6.default)(nextValue, currentValue)) { 38938 return; 38939 } 38940 onChangeView({ 38941 ...view, 38942 filters: (view.filters ?? []).map( 38943 (_filter) => _filter.field === filter.field ? { 38944 ..._filter, 38945 operator: currentFilter.operator || filter.operators[0], 38946 // Consider empty strings as undefined: 38947 // 38948 // - undefined as value means the filter is unset: the filter widget displays no value and the search returns all records 38949 // - empty string as value means "search empty string": returns only the records that have an empty string as value 38950 // 38951 // In practice, this means the filter will not be able to find an empty string as the value. 38952 value: nextValue === "" ? void 0 : nextValue 38953 } : _filter 38954 ) 38955 }); 38956 }); 38957 if (!field || !field.Edit || !currentFilter) { 38958 return null; 38959 } 38960 return /* @__PURE__ */ (0, import_jsx_runtime152.jsx)( 38961 import_components22.Flex, 38962 { 38963 className: "dataviews-filters__user-input-widget", 38964 gap: 2.5, 38965 direction: "column", 38966 children: /* @__PURE__ */ (0, import_jsx_runtime152.jsx)( 38967 field.Edit, 38968 { 38969 hideLabelFromVision: true, 38970 data, 38971 field, 38972 operator: currentFilter.operator, 38973 onChange: handleChange 38974 } 38975 ) 38976 } 38977 ); 38978 } 38979 38980 // packages/dataviews/build-module/utils/operators.mjs 38981 var import_i18n40 = __toESM(require_i18n(), 1); 38982 var import_element100 = __toESM(require_element(), 1); 38983 var import_date2 = __toESM(require_date(), 1); 38984 38985 // packages/dataviews/build-module/field-types/utils/parse-time.mjs 38986 var ZONE_DESIGNATOR = /(?:[Zz]|[+-](?:[01]\d|2[0-3]):?[0-5]\d)$/; 38987 var TIME_FORMATS = ["HH:mm", "HH:mm:ss"]; 38988 var REFERENCE_DATE = new Date(2e3, 0, 1); 38989 function parseTime2(value) { 38990 if (typeof value !== "string") { 38991 return null; 38992 } 38993 const time = value.trim().replace(ZONE_DESIGNATOR, ""); 38994 for (const timeFormat of TIME_FORMATS) { 38995 const parsed = parse(time, timeFormat, REFERENCE_DATE); 38996 if (isValid(parsed)) { 38997 return parsed.getHours() * 3600 + parsed.getMinutes() * 60 + parsed.getSeconds(); 38998 } 38999 } 39000 return null; 39001 } 39002 39003 // packages/dataviews/build-module/utils/operators.mjs 39004 var import_jsx_runtime153 = __toESM(require_jsx_runtime(), 1); 39005 var filterTextWrappers = { 39006 Name: /* @__PURE__ */ (0, import_jsx_runtime153.jsx)("span", { className: "dataviews-filters__summary-filter-text-name" }), 39007 Value: /* @__PURE__ */ (0, import_jsx_runtime153.jsx)("span", { className: "dataviews-filters__summary-filter-text-value" }) 39008 }; 39009 function toComparableTemporals(fieldValue, filterValue) { 39010 const filterTime = parseTime2(filterValue); 39011 if (filterTime !== null) { 39012 return [parseTime2(fieldValue) ?? NaN, filterTime]; 39013 } 39014 return [ 39015 (0, import_date2.getDate)(fieldValue).getTime(), 39016 (0, import_date2.getDate)(filterValue).getTime() 39017 ]; 39018 } 39019 function getRelativeDate(value, unit) { 39020 switch (unit) { 39021 case "days": 39022 return subDays(/* @__PURE__ */ new Date(), value); 39023 case "weeks": 39024 return subWeeks(/* @__PURE__ */ new Date(), value); 39025 case "months": 39026 return subMonths(/* @__PURE__ */ new Date(), value); 39027 case "years": 39028 return subYears(/* @__PURE__ */ new Date(), value); 39029 default: 39030 return /* @__PURE__ */ new Date(); 39031 } 39032 } 39033 var isNoneOperatorDefinition = { 39034 /* translators: DataViews operator name */ 39035 label: (0, import_i18n40.__)("Is none of"), 39036 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39037 (0, import_i18n40.sprintf)( 39038 /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is none of: Admin, Editor". */ 39039 (0, import_i18n40.__)("<Name>%1$s is none of: </Name><Value>%2$s</Value>"), 39040 filter.name, 39041 activeElements.map((element) => element.label).join(", ") 39042 ), 39043 filterTextWrappers 39044 ), 39045 filter: ((item, field, filterValue) => { 39046 if (!filterValue?.length) { 39047 return true; 39048 } 39049 const fieldValue = field.getValue({ item }); 39050 if (Array.isArray(fieldValue)) { 39051 return !filterValue.some( 39052 (fv) => fieldValue.includes(fv) 39053 ); 39054 } else if (typeof fieldValue === "string" || typeof fieldValue === "number") { 39055 return !filterValue.includes(fieldValue); 39056 } 39057 return false; 39058 }), 39059 selection: "multi" 39060 }; 39061 var OPERATORS = [ 39062 { 39063 name: OPERATOR_IS_ANY, 39064 /* translators: DataViews operator name */ 39065 label: (0, import_i18n40.__)("Includes"), 39066 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39067 (0, import_i18n40.sprintf)( 39068 /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is any: Admin, Editor". */ 39069 (0, import_i18n40.__)("<Name>%1$s includes: </Name><Value>%2$s</Value>"), 39070 filter.name, 39071 activeElements.map((element) => element.label).join(", ") 39072 ), 39073 filterTextWrappers 39074 ), 39075 filter(item, field, filterValue) { 39076 if (!filterValue?.length) { 39077 return true; 39078 } 39079 const fieldValue = field.getValue({ item }); 39080 if (Array.isArray(fieldValue)) { 39081 return filterValue.some( 39082 (fv) => fieldValue.includes(fv) 39083 ); 39084 } else if (typeof fieldValue === "string" || typeof fieldValue === "number") { 39085 return filterValue.includes(fieldValue); 39086 } 39087 return false; 39088 }, 39089 selection: "multi" 39090 }, 39091 { 39092 name: OPERATOR_IS_NONE, 39093 ...isNoneOperatorDefinition 39094 }, 39095 { 39096 name: OPERATOR_IS_ALL, 39097 /* translators: DataViews operator name */ 39098 label: (0, import_i18n40.__)("Includes all"), 39099 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39100 (0, import_i18n40.sprintf)( 39101 /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author includes all: Admin, Editor". */ 39102 (0, import_i18n40.__)("<Name>%1$s includes all: </Name><Value>%2$s</Value>"), 39103 filter.name, 39104 activeElements.map((element) => element.label).join(", ") 39105 ), 39106 filterTextWrappers 39107 ), 39108 filter(item, field, filterValue) { 39109 if (!filterValue?.length) { 39110 return true; 39111 } 39112 const fieldValue = field.getValue({ item }); 39113 if (!Array.isArray(fieldValue)) { 39114 return false; 39115 } 39116 return filterValue.every( 39117 (value) => fieldValue.includes(value) 39118 ); 39119 }, 39120 selection: "multi" 39121 }, 39122 { 39123 name: OPERATOR_IS_NOT_ALL, 39124 ...isNoneOperatorDefinition 39125 }, 39126 { 39127 name: OPERATOR_BETWEEN, 39128 /* translators: DataViews operator name */ 39129 label: (0, import_i18n40.__)("Between (inc)"), 39130 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39131 (0, import_i18n40.sprintf)( 39132 /* 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". */ 39133 (0, import_i18n40.__)( 39134 "<Name>%1$s between (inc): </Name><Value>%2$s and %3$s</Value>" 39135 ), 39136 filter.name, 39137 activeElements[0].label[0], 39138 activeElements[0].label[1] 39139 ), 39140 filterTextWrappers 39141 ), 39142 filter(item, field, filterValue) { 39143 if (!Array.isArray(filterValue) || filterValue.length !== 2 || // An unfilled bound is `undefined` from the controls, `''` 39144 // when it arrives from a persisted view, or `null` once 39145 // `undefined` round-trips through JSON persistence. 39146 filterValue.includes(void 0) || filterValue.includes("") || filterValue.includes(null)) { 39147 return true; 39148 } 39149 const fieldValue = field.getValue({ item }); 39150 const [min3, max3] = filterValue.map(parseTime2); 39151 if (min3 !== null && max3 !== null) { 39152 const value = parseTime2(fieldValue); 39153 return value !== null && value >= min3 && value <= max3; 39154 } 39155 if (typeof fieldValue === "number" || fieldValue instanceof Date || typeof fieldValue === "string") { 39156 return fieldValue >= filterValue[0] && fieldValue <= filterValue[1]; 39157 } 39158 return false; 39159 }, 39160 selection: "custom" 39161 }, 39162 { 39163 name: OPERATOR_IN_THE_PAST, 39164 /* translators: DataViews operator name */ 39165 label: (0, import_i18n40.__)("In the past"), 39166 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39167 (0, import_i18n40.sprintf)( 39168 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is in the past: 7 days". */ 39169 (0, import_i18n40.__)( 39170 "<Name>%1$s is in the past: </Name><Value>%2$s</Value>" 39171 ), 39172 filter.name, 39173 `$activeElements[0].value.value} $activeElements[0].value.unit}` 39174 ), 39175 filterTextWrappers 39176 ), 39177 filter(item, field, filterValue) { 39178 if (filterValue?.value === void 0 || filterValue?.unit === void 0) { 39179 return true; 39180 } 39181 const targetDate = getRelativeDate( 39182 filterValue.value, 39183 filterValue.unit 39184 ); 39185 const fieldValue = (0, import_date2.getDate)(field.getValue({ item })); 39186 return fieldValue >= targetDate && fieldValue <= /* @__PURE__ */ new Date(); 39187 }, 39188 selection: "custom" 39189 }, 39190 { 39191 name: OPERATOR_OVER, 39192 /* translators: DataViews operator name */ 39193 label: (0, import_i18n40.__)("Over"), 39194 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39195 (0, import_i18n40.sprintf)( 39196 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is over: 7 days". */ 39197 (0, import_i18n40.__)("<Name>%1$s is over: </Name><Value>%2$s</Value>"), 39198 filter.name, 39199 `$activeElements[0].value.value} $activeElements[0].value.unit}` 39200 ), 39201 filterTextWrappers 39202 ), 39203 filter(item, field, filterValue) { 39204 if (filterValue?.value === void 0 || filterValue?.unit === void 0) { 39205 return true; 39206 } 39207 const targetDate = getRelativeDate( 39208 filterValue.value, 39209 filterValue.unit 39210 ); 39211 const fieldValue = (0, import_date2.getDate)(field.getValue({ item })); 39212 return fieldValue < targetDate; 39213 }, 39214 selection: "custom" 39215 }, 39216 { 39217 name: OPERATOR_IS, 39218 /* translators: DataViews operator name */ 39219 label: (0, import_i18n40.__)("Is"), 39220 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39221 (0, import_i18n40.sprintf)( 39222 /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is: Admin". */ 39223 (0, import_i18n40.__)("<Name>%1$s is: </Name><Value>%2$s</Value>"), 39224 filter.name, 39225 activeElements[0].label 39226 ), 39227 filterTextWrappers 39228 ), 39229 filter(item, field, filterValue) { 39230 return filterValue === field.getValue({ item }) || filterValue === void 0; 39231 }, 39232 selection: "single" 39233 }, 39234 { 39235 name: OPERATOR_IS_NOT, 39236 /* translators: DataViews operator name */ 39237 label: (0, import_i18n40.__)("Is not"), 39238 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39239 (0, import_i18n40.sprintf)( 39240 /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is not: Admin". */ 39241 (0, import_i18n40.__)("<Name>%1$s is not: </Name><Value>%2$s</Value>"), 39242 filter.name, 39243 activeElements[0].label 39244 ), 39245 filterTextWrappers 39246 ), 39247 filter(item, field, filterValue) { 39248 return filterValue !== field.getValue({ item }); 39249 }, 39250 selection: "single" 39251 }, 39252 { 39253 name: OPERATOR_LESS_THAN, 39254 /* translators: DataViews operator name */ 39255 label: (0, import_i18n40.__)("Less than"), 39256 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39257 (0, import_i18n40.sprintf)( 39258 /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than: 10". */ 39259 (0, import_i18n40.__)("<Name>%1$s is less than: </Name><Value>%2$s</Value>"), 39260 filter.name, 39261 activeElements[0].label 39262 ), 39263 filterTextWrappers 39264 ), 39265 filter(item, field, filterValue) { 39266 if (filterValue === void 0) { 39267 return true; 39268 } 39269 const fieldValue = field.getValue({ item }); 39270 return fieldValue < filterValue; 39271 }, 39272 selection: "single" 39273 }, 39274 { 39275 name: OPERATOR_GREATER_THAN, 39276 /* translators: DataViews operator name */ 39277 label: (0, import_i18n40.__)("Greater than"), 39278 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39279 (0, import_i18n40.sprintf)( 39280 /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than: 10". */ 39281 (0, import_i18n40.__)( 39282 "<Name>%1$s is greater than: </Name><Value>%2$s</Value>" 39283 ), 39284 filter.name, 39285 activeElements[0].label 39286 ), 39287 filterTextWrappers 39288 ), 39289 filter(item, field, filterValue) { 39290 if (filterValue === void 0) { 39291 return true; 39292 } 39293 const fieldValue = field.getValue({ item }); 39294 return fieldValue > filterValue; 39295 }, 39296 selection: "single" 39297 }, 39298 { 39299 name: OPERATOR_LESS_THAN_OR_EQUAL, 39300 /* translators: DataViews operator name */ 39301 label: (0, import_i18n40.__)("Less than or equal"), 39302 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39303 (0, import_i18n40.sprintf)( 39304 /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than or equal to: 10". */ 39305 (0, import_i18n40.__)( 39306 "<Name>%1$s is less than or equal to: </Name><Value>%2$s</Value>" 39307 ), 39308 filter.name, 39309 activeElements[0].label 39310 ), 39311 filterTextWrappers 39312 ), 39313 filter(item, field, filterValue) { 39314 if (filterValue === void 0) { 39315 return true; 39316 } 39317 const fieldValue = field.getValue({ item }); 39318 return fieldValue <= filterValue; 39319 }, 39320 selection: "single" 39321 }, 39322 { 39323 name: OPERATOR_GREATER_THAN_OR_EQUAL, 39324 /* translators: DataViews operator name */ 39325 label: (0, import_i18n40.__)("Greater than or equal"), 39326 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39327 (0, import_i18n40.sprintf)( 39328 /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than or equal to: 10". */ 39329 (0, import_i18n40.__)( 39330 "<Name>%1$s is greater than or equal to: </Name><Value>%2$s</Value>" 39331 ), 39332 filter.name, 39333 activeElements[0].label 39334 ), 39335 filterTextWrappers 39336 ), 39337 filter(item, field, filterValue) { 39338 if (filterValue === void 0) { 39339 return true; 39340 } 39341 const fieldValue = field.getValue({ item }); 39342 return fieldValue >= filterValue; 39343 }, 39344 selection: "single" 39345 }, 39346 { 39347 name: OPERATOR_BEFORE, 39348 /* translators: DataViews operator name */ 39349 label: (0, import_i18n40.__)("Before"), 39350 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39351 (0, import_i18n40.sprintf)( 39352 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is before: 2024-01-01". */ 39353 (0, import_i18n40.__)("<Name>%1$s is before: </Name><Value>%2$s</Value>"), 39354 filter.name, 39355 activeElements[0].label 39356 ), 39357 filterTextWrappers 39358 ), 39359 filter(item, field, filterValue) { 39360 if (filterValue === void 0) { 39361 return true; 39362 } 39363 const [fieldTemporal, filterTemporal] = toComparableTemporals( 39364 field.getValue({ item }), 39365 filterValue 39366 ); 39367 return fieldTemporal < filterTemporal; 39368 }, 39369 selection: "single" 39370 }, 39371 { 39372 name: OPERATOR_AFTER, 39373 /* translators: DataViews operator name */ 39374 label: (0, import_i18n40.__)("After"), 39375 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39376 (0, import_i18n40.sprintf)( 39377 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is after: 2024-01-01". */ 39378 (0, import_i18n40.__)("<Name>%1$s is after: </Name><Value>%2$s</Value>"), 39379 filter.name, 39380 activeElements[0].label 39381 ), 39382 filterTextWrappers 39383 ), 39384 filter(item, field, filterValue) { 39385 if (filterValue === void 0) { 39386 return true; 39387 } 39388 const [fieldTemporal, filterTemporal] = toComparableTemporals( 39389 field.getValue({ item }), 39390 filterValue 39391 ); 39392 return fieldTemporal > filterTemporal; 39393 }, 39394 selection: "single" 39395 }, 39396 { 39397 name: OPERATOR_BEFORE_INC, 39398 /* translators: DataViews operator name */ 39399 label: (0, import_i18n40.__)("Before (inc)"), 39400 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39401 (0, import_i18n40.sprintf)( 39402 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or before: 2024-01-01". */ 39403 (0, import_i18n40.__)( 39404 "<Name>%1$s is on or before: </Name><Value>%2$s</Value>" 39405 ), 39406 filter.name, 39407 activeElements[0].label 39408 ), 39409 filterTextWrappers 39410 ), 39411 filter(item, field, filterValue) { 39412 if (filterValue === void 0) { 39413 return true; 39414 } 39415 const [fieldTemporal, filterTemporal] = toComparableTemporals( 39416 field.getValue({ item }), 39417 filterValue 39418 ); 39419 return fieldTemporal <= filterTemporal; 39420 }, 39421 selection: "single" 39422 }, 39423 { 39424 name: OPERATOR_AFTER_INC, 39425 /* translators: DataViews operator name */ 39426 label: (0, import_i18n40.__)("After (inc)"), 39427 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39428 (0, import_i18n40.sprintf)( 39429 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or after: 2024-01-01". */ 39430 (0, import_i18n40.__)( 39431 "<Name>%1$s is on or after: </Name><Value>%2$s</Value>" 39432 ), 39433 filter.name, 39434 activeElements[0].label 39435 ), 39436 filterTextWrappers 39437 ), 39438 filter(item, field, filterValue) { 39439 if (filterValue === void 0) { 39440 return true; 39441 } 39442 const [fieldTemporal, filterTemporal] = toComparableTemporals( 39443 field.getValue({ item }), 39444 filterValue 39445 ); 39446 return fieldTemporal >= filterTemporal; 39447 }, 39448 selection: "single" 39449 }, 39450 { 39451 name: OPERATOR_CONTAINS, 39452 /* translators: DataViews operator name */ 39453 label: (0, import_i18n40.__)("Contains"), 39454 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39455 (0, import_i18n40.sprintf)( 39456 /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title contains: Hello". */ 39457 (0, import_i18n40.__)("<Name>%1$s contains: </Name><Value>%2$s</Value>"), 39458 filter.name, 39459 activeElements[0].label 39460 ), 39461 filterTextWrappers 39462 ), 39463 filter(item, field, filterValue) { 39464 if (filterValue === void 0) { 39465 return true; 39466 } 39467 const fieldValue = field.getValue({ item }); 39468 return typeof fieldValue === "string" && filterValue && fieldValue.toLowerCase().includes(String(filterValue).toLowerCase()); 39469 }, 39470 selection: "single" 39471 }, 39472 { 39473 name: OPERATOR_NOT_CONTAINS, 39474 /* translators: DataViews operator name */ 39475 label: (0, import_i18n40.__)("Doesn't contain"), 39476 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39477 (0, import_i18n40.sprintf)( 39478 /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title doesn't contain: Hello". */ 39479 (0, import_i18n40.__)( 39480 "<Name>%1$s doesn't contain: </Name><Value>%2$s</Value>" 39481 ), 39482 filter.name, 39483 activeElements[0].label 39484 ), 39485 filterTextWrappers 39486 ), 39487 filter(item, field, filterValue) { 39488 if (filterValue === void 0) { 39489 return true; 39490 } 39491 const fieldValue = field.getValue({ item }); 39492 return typeof fieldValue === "string" && filterValue && !fieldValue.toLowerCase().includes(String(filterValue).toLowerCase()); 39493 }, 39494 selection: "single" 39495 }, 39496 { 39497 name: OPERATOR_STARTS_WITH, 39498 /* translators: DataViews operator name */ 39499 label: (0, import_i18n40.__)("Starts with"), 39500 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39501 (0, import_i18n40.sprintf)( 39502 /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title starts with: Hello". */ 39503 (0, import_i18n40.__)("<Name>%1$s starts with: </Name><Value>%2$s</Value>"), 39504 filter.name, 39505 activeElements[0].label 39506 ), 39507 filterTextWrappers 39508 ), 39509 filter(item, field, filterValue) { 39510 if (filterValue === void 0) { 39511 return true; 39512 } 39513 const fieldValue = field.getValue({ item }); 39514 return typeof fieldValue === "string" && filterValue && fieldValue.toLowerCase().startsWith(String(filterValue).toLowerCase()); 39515 }, 39516 selection: "single" 39517 }, 39518 { 39519 name: OPERATOR_ON, 39520 /* translators: DataViews operator name */ 39521 label: (0, import_i18n40.__)("On"), 39522 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39523 (0, import_i18n40.sprintf)( 39524 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is: 2024-01-01". */ 39525 (0, import_i18n40.__)("<Name>%1$s is: </Name><Value>%2$s</Value>"), 39526 filter.name, 39527 activeElements[0].label 39528 ), 39529 filterTextWrappers 39530 ), 39531 filter(item, field, filterValue) { 39532 if (filterValue === void 0) { 39533 return true; 39534 } 39535 const [fieldTemporal, filterTemporal] = toComparableTemporals( 39536 field.getValue({ item }), 39537 filterValue 39538 ); 39539 return fieldTemporal === filterTemporal; 39540 }, 39541 selection: "single" 39542 }, 39543 { 39544 name: OPERATOR_NOT_ON, 39545 /* translators: DataViews operator name */ 39546 label: (0, import_i18n40.__)("Not on"), 39547 filterText: (filter, activeElements) => (0, import_element100.createInterpolateElement)( 39548 (0, import_i18n40.sprintf)( 39549 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is not: 2024-01-01". */ 39550 (0, import_i18n40.__)("<Name>%1$s is not: </Name><Value>%2$s</Value>"), 39551 filter.name, 39552 activeElements[0].label 39553 ), 39554 filterTextWrappers 39555 ), 39556 filter(item, field, filterValue) { 39557 if (filterValue === void 0) { 39558 return true; 39559 } 39560 const [fieldTemporal, filterTemporal] = toComparableTemporals( 39561 field.getValue({ item }), 39562 filterValue 39563 ); 39564 return fieldTemporal !== filterTemporal; 39565 }, 39566 selection: "single" 39567 } 39568 ]; 39569 var getOperatorByName = (name) => OPERATORS.find((op) => op.name === name); 39570 var getAllOperatorNames = () => OPERATORS.map((op) => op.name); 39571 var isSingleSelectionOperator = (name) => OPERATORS.filter((op) => op.selection === "single").some( 39572 (op) => op.name === name 39573 ); 39574 var isRegisteredOperator = (name) => OPERATORS.some((op) => op.name === name); 39575 39576 // packages/dataviews/build-module/components/dataviews-filters/filter.mjs 39577 var import_jsx_runtime154 = __toESM(require_jsx_runtime(), 1); 39578 var ENTER = "Enter"; 39579 var SPACE = " "; 39580 var FilterText = ({ 39581 activeElements, 39582 filterInView, 39583 filter 39584 }) => { 39585 if (activeElements === void 0 || activeElements.length === 0) { 39586 return filter.name; 39587 } 39588 const operator = getOperatorByName(filterInView?.operator); 39589 if (operator !== void 0) { 39590 return operator.filterText(filter, activeElements); 39591 } 39592 return (0, import_i18n41.sprintf)( 39593 /* translators: 1: Filter name e.g.: "Unknown status for Author". */ 39594 (0, import_i18n41.__)("Unknown status for %1$s"), 39595 filter.name 39596 ); 39597 }; 39598 function OperatorSelector({ 39599 filter, 39600 view, 39601 onChangeView 39602 }) { 39603 const operatorOptions = filter.operators?.map((operator) => ({ 39604 value: operator, 39605 label: getOperatorByName(operator)?.label || operator 39606 })); 39607 const currentFilter = view.filters?.find( 39608 (_filter) => _filter.field === filter.field 39609 ); 39610 const value = currentFilter?.operator || filter.operators[0]; 39611 return operatorOptions.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime154.jsxs)( 39612 Stack, 39613 { 39614 direction: "row", 39615 gap: "sm", 39616 justify: "flex-start", 39617 className: "dataviews-filters__summary-operators-container", 39618 align: "center", 39619 children: [ 39620 /* @__PURE__ */ (0, import_jsx_runtime154.jsx)(import_components23.FlexItem, { className: "dataviews-filters__summary-operators-filter-name", children: filter.name }), 39621 /* @__PURE__ */ (0, import_jsx_runtime154.jsx)( 39622 import_components23.SelectControl, 39623 { 39624 className: "dataviews-filters__summary-operators-filter-select", 39625 label: (0, import_i18n41.__)("Conditions"), 39626 value, 39627 options: operatorOptions, 39628 onChange: (newValue) => { 39629 const newOperator = newValue; 39630 const currentOperator = currentFilter?.operator; 39631 const newFilters = currentFilter ? [ 39632 ...(view.filters ?? []).map( 39633 (_filter) => { 39634 if (_filter.field === filter.field) { 39635 const currentOpSelectionModel = getOperatorByName( 39636 currentOperator 39637 )?.selection; 39638 const newOpSelectionModel = getOperatorByName( 39639 newOperator 39640 )?.selection; 39641 const shouldResetValue = currentOpSelectionModel !== newOpSelectionModel || [ 39642 currentOpSelectionModel, 39643 newOpSelectionModel 39644 ].includes("custom"); 39645 return { 39646 ..._filter, 39647 value: shouldResetValue ? void 0 : _filter.value, 39648 operator: newOperator 39649 }; 39650 } 39651 return _filter; 39652 } 39653 ) 39654 ] : [ 39655 ...view.filters ?? [], 39656 { 39657 field: filter.field, 39658 operator: newOperator, 39659 value: void 0 39660 } 39661 ]; 39662 onChangeView({ 39663 ...view, 39664 page: 1, 39665 filters: newFilters 39666 }); 39667 }, 39668 size: "small", 39669 variant: "minimal", 39670 hideLabelFromVision: true 39671 } 39672 ) 39673 ] 39674 } 39675 ); 39676 } 39677 function Filter({ 39678 addFilterRef, 39679 openedFilter, 39680 fields, 39681 ...commonProps 39682 }) { 39683 const toggleRef = (0, import_element101.useRef)(null); 39684 const { filter, view, onChangeView } = commonProps; 39685 const filterInView = view.filters?.find( 39686 (f2) => f2.field === filter.field 39687 ); 39688 let activeElements = []; 39689 const field = (0, import_element101.useMemo)(() => { 39690 const currentField = fields.find((f2) => f2.id === filter.field); 39691 if (currentField) { 39692 return { 39693 ...currentField, 39694 // Configure getValue as if Item was a plain object. 39695 // See related input-widget.tsx 39696 getValue: ({ item }) => item[currentField.id] 39697 }; 39698 } 39699 return currentField; 39700 }, [fields, filter.field]); 39701 const { elements } = useElements({ 39702 elements: filter.elements, 39703 getElements: filter.getElements 39704 }); 39705 if (elements.length > 0) { 39706 activeElements = elements.filter((element) => { 39707 if (filter.singleSelection) { 39708 return element.value === filterInView?.value; 39709 } 39710 return filterInView?.value?.includes(element.value); 39711 }); 39712 } else if (Array.isArray(filterInView?.value)) { 39713 const isComplete = !filterInView.value.some( 39714 (v2) => v2 === void 0 || v2 === null || v2 === "" 39715 ); 39716 if (isComplete) { 39717 const label = filterInView.value.map((v2) => { 39718 const formattedValue = field?.getValueFormatted({ 39719 item: { [field.id]: v2 }, 39720 field 39721 }); 39722 return formattedValue || String(v2); 39723 }); 39724 activeElements = [ 39725 { 39726 value: filterInView.value, 39727 // @ts-expect-error `label` is a `string[]` here, but the element type expects a `string`. 39728 label 39729 } 39730 ]; 39731 } 39732 } else if (typeof filterInView?.value === "object") { 39733 activeElements = [ 39734 { value: filterInView.value, label: filterInView.value } 39735 ]; 39736 } else if (filterInView?.value !== void 0) { 39737 const label = field !== void 0 ? field.getValueFormatted({ 39738 item: { [field.id]: filterInView.value }, 39739 field 39740 }) : String(filterInView.value); 39741 activeElements = [ 39742 { 39743 value: filterInView.value, 39744 label 39745 } 39746 ]; 39747 } 39748 const isPrimary = filter.isPrimary; 39749 const isLocked = filterInView?.isLocked; 39750 const hasValues = !isLocked && filterInView?.value !== void 0; 39751 const canResetOrRemove = !isLocked && (!isPrimary || hasValues); 39752 const resetOrRemoveLabel = isPrimary ? (0, import_i18n41.__)("Reset") : (0, import_i18n41.__)("Remove"); 39753 return /* @__PURE__ */ (0, import_jsx_runtime154.jsx)( 39754 import_components23.Dropdown, 39755 { 39756 defaultOpen: openedFilter === filter.field, 39757 contentClassName: "dataviews-filters__summary-popover", 39758 popoverProps: { placement: "bottom-start", role: "dialog" }, 39759 onClose: () => { 39760 toggleRef.current?.focus(); 39761 }, 39762 renderToggle: ({ isOpen, onToggle }) => /* @__PURE__ */ (0, import_jsx_runtime154.jsxs)("div", { className: "dataviews-filters__summary-chip-container", children: [ 39763 /* @__PURE__ */ (0, import_jsx_runtime154.jsxs)(tooltip_exports.Root, { children: [ 39764 /* @__PURE__ */ (0, import_jsx_runtime154.jsx)( 39765 tooltip_exports.Trigger, 39766 { 39767 render: /* @__PURE__ */ (0, import_jsx_runtime154.jsx)( 39768 "div", 39769 { 39770 className: clsx_default( 39771 "dataviews-filters__summary-chip", 39772 { 39773 "has-reset": canResetOrRemove, 39774 "has-values": hasValues, 39775 "is-not-clickable": isLocked 39776 } 39777 ), 39778 role: "button", 39779 tabIndex: isLocked ? -1 : 0, 39780 onClick: () => { 39781 if (!isLocked) { 39782 onToggle(); 39783 } 39784 }, 39785 onKeyDown: (event) => { 39786 if (!isLocked && [ENTER, SPACE].includes( 39787 event.key 39788 )) { 39789 onToggle(); 39790 event.preventDefault(); 39791 } 39792 }, 39793 "aria-disabled": isLocked, 39794 "aria-pressed": isOpen, 39795 "aria-expanded": isOpen, 39796 ref: toggleRef, 39797 children: /* @__PURE__ */ (0, import_jsx_runtime154.jsx)( 39798 FilterText, 39799 { 39800 activeElements, 39801 filterInView, 39802 filter 39803 } 39804 ) 39805 } 39806 ) 39807 } 39808 ), 39809 /* @__PURE__ */ (0, import_jsx_runtime154.jsx)(tooltip_exports.Popup, { children: (0, import_i18n41.sprintf)( 39810 /* translators: 1: Filter name. */ 39811 (0, import_i18n41.__)("Filter by: %1$s"), 39812 filter.name.toLowerCase() 39813 ) }) 39814 ] }), 39815 canResetOrRemove && /* @__PURE__ */ (0, import_jsx_runtime154.jsxs)(tooltip_exports.Root, { children: [ 39816 /* @__PURE__ */ (0, import_jsx_runtime154.jsx)( 39817 tooltip_exports.Trigger, 39818 { 39819 render: /* @__PURE__ */ (0, import_jsx_runtime154.jsx)( 39820 "button", 39821 { 39822 className: clsx_default( 39823 "dataviews-filters__summary-chip-remove", 39824 { "has-values": hasValues } 39825 ), 39826 "aria-label": resetOrRemoveLabel, 39827 onClick: () => { 39828 onChangeView({ 39829 ...view, 39830 page: 1, 39831 filters: view.filters?.filter( 39832 (_filter) => _filter.field !== filter.field 39833 ) 39834 }); 39835 if (!isPrimary) { 39836 addFilterRef.current?.focus(); 39837 } else { 39838 toggleRef.current?.focus(); 39839 } 39840 }, 39841 children: /* @__PURE__ */ (0, import_jsx_runtime154.jsx)(import_components23.Icon, { icon: close_small_default }) 39842 } 39843 ) 39844 } 39845 ), 39846 /* @__PURE__ */ (0, import_jsx_runtime154.jsx)(tooltip_exports.Popup, { children: resetOrRemoveLabel }) 39847 ] }) 39848 ] }), 39849 renderContent: () => { 39850 return /* @__PURE__ */ (0, import_jsx_runtime154.jsxs)(Stack, { direction: "column", justify: "flex-start", children: [ 39851 /* @__PURE__ */ (0, import_jsx_runtime154.jsx)(OperatorSelector, { ...commonProps }), 39852 commonProps.filter.hasElements ? /* @__PURE__ */ (0, import_jsx_runtime154.jsx)( 39853 SearchWidget, 39854 { 39855 ...commonProps, 39856 filter: { 39857 ...commonProps.filter, 39858 elements 39859 } 39860 } 39861 ) : /* @__PURE__ */ (0, import_jsx_runtime154.jsx)(InputWidget, { ...commonProps, fields }) 39862 ] }); 39863 } 39864 } 39865 ); 39866 } 39867 39868 // packages/dataviews/build-module/components/dataviews-filters/add-filter.mjs 39869 var import_components24 = __toESM(require_components(), 1); 39870 var import_i18n42 = __toESM(require_i18n(), 1); 39871 var import_element102 = __toESM(require_element(), 1); 39872 var import_jsx_runtime155 = __toESM(require_jsx_runtime(), 1); 39873 function AddFilterMenu({ 39874 filters, 39875 view, 39876 onChangeView, 39877 setOpenedFilter, 39878 triggerProps 39879 }) { 39880 const inactiveFilters = filters.filter((filter) => !filter.isVisible); 39881 return ( 39882 // The `disabled` prop on `Menu.Root` (rather than on the trigger) 39883 // keeps the menu from opening while letting the trigger button stay 39884 // focusable via its own `accessibleWhenDisabled`. 39885 /* @__PURE__ */ (0, import_jsx_runtime155.jsxs)(menu_exports.Root, { disabled: !inactiveFilters.length, children: [ 39886 /* @__PURE__ */ (0, import_jsx_runtime155.jsx)(menu_exports.Trigger, { ...triggerProps }), 39887 /* @__PURE__ */ (0, import_jsx_runtime155.jsx)(menu_exports.Popup, { children: inactiveFilters.map((filter) => { 39888 return /* @__PURE__ */ (0, import_jsx_runtime155.jsx)( 39889 menu_exports.Item, 39890 { 39891 onClick: () => { 39892 setOpenedFilter(filter.field); 39893 onChangeView({ 39894 ...view, 39895 page: 1, 39896 filters: [ 39897 ...view.filters || [], 39898 { 39899 field: filter.field, 39900 value: void 0, 39901 operator: filter.operators[0] 39902 } 39903 ] 39904 }); 39905 }, 39906 children: /* @__PURE__ */ (0, import_jsx_runtime155.jsx)(menu_exports.ItemLabel, { children: filter.name }) 39907 }, 39908 filter.field 39909 ); 39910 }) }) 39911 ] }) 39912 ); 39913 } 39914 function AddFilter({ filters, view, onChangeView, setOpenedFilter }, ref) { 39915 if (!filters.length || filters.every(({ isPrimary }) => isPrimary)) { 39916 return null; 39917 } 39918 const inactiveFilters = filters.filter((filter) => !filter.isVisible); 39919 return /* @__PURE__ */ (0, import_jsx_runtime155.jsx)( 39920 AddFilterMenu, 39921 { 39922 triggerProps: { 39923 render: /* @__PURE__ */ (0, import_jsx_runtime155.jsx)( 39924 import_components24.Button, 39925 { 39926 accessibleWhenDisabled: true, 39927 size: "compact", 39928 className: "dataviews-filters-button", 39929 variant: "tertiary", 39930 disabled: !inactiveFilters.length, 39931 ref 39932 } 39933 ), 39934 children: (0, import_i18n42.__)("Add filter") 39935 }, 39936 ...{ filters, view, onChangeView, setOpenedFilter } 39937 } 39938 ); 39939 } 39940 var add_filter_default = (0, import_element102.forwardRef)(AddFilter); 39941 39942 // packages/dataviews/build-module/components/dataviews-filters/reset-filters.mjs 39943 var import_components25 = __toESM(require_components(), 1); 39944 var import_i18n43 = __toESM(require_i18n(), 1); 39945 var import_jsx_runtime156 = __toESM(require_jsx_runtime(), 1); 39946 function ResetFilter({ 39947 filters, 39948 view, 39949 onChangeView 39950 }) { 39951 const isPrimary = (field) => filters.some( 39952 (_filter) => _filter.field === field && _filter.isPrimary 39953 ); 39954 const isDisabled = !view.search && !view.filters?.some( 39955 (_filter) => !_filter.isLocked && (_filter.value !== void 0 || !isPrimary(_filter.field)) 39956 ); 39957 return /* @__PURE__ */ (0, import_jsx_runtime156.jsx)( 39958 import_components25.Button, 39959 { 39960 disabled: isDisabled, 39961 accessibleWhenDisabled: true, 39962 size: "compact", 39963 variant: "tertiary", 39964 className: "dataviews-filters__reset-button", 39965 onClick: () => { 39966 onChangeView({ 39967 ...view, 39968 page: 1, 39969 search: "", 39970 filters: view.filters?.filter((f2) => !!f2.isLocked) || [] 39971 }); 39972 }, 39973 children: (0, import_i18n43.__)("Reset") 39974 } 39975 ); 39976 } 39977 39978 // packages/dataviews/build-module/components/dataviews-filters/use-filters.mjs 39979 var import_element103 = __toESM(require_element(), 1); 39980 function useFilters(fields, view) { 39981 return (0, import_element103.useMemo)(() => { 39982 const filters = []; 39983 fields.forEach((field) => { 39984 if (field.filterBy === false || !field.hasElements && !field.Edit) { 39985 return; 39986 } 39987 const operators = field.filterBy.operators; 39988 const isPrimary = !!field.filterBy?.isPrimary; 39989 const isLocked = view.filters?.some( 39990 (f2) => f2.field === field.id && !!f2.isLocked 39991 ) ?? false; 39992 filters.push({ 39993 field: field.id, 39994 name: field.label, 39995 elements: field.elements, 39996 getElements: field.getElements, 39997 hasElements: field.hasElements, 39998 singleSelection: operators.some( 39999 (op) => isSingleSelectionOperator(op) 40000 ), 40001 operators, 40002 isVisible: isLocked || isPrimary || !!view.filters?.some( 40003 (f2) => f2.field === field.id && isRegisteredOperator(f2.operator) 40004 ), 40005 isPrimary, 40006 isLocked 40007 }); 40008 }); 40009 filters.sort((a2, b2) => { 40010 if (a2.isLocked && !b2.isLocked) { 40011 return -1; 40012 } 40013 if (!a2.isLocked && b2.isLocked) { 40014 return 1; 40015 } 40016 if (a2.isPrimary && !b2.isPrimary) { 40017 return -1; 40018 } 40019 if (!a2.isPrimary && b2.isPrimary) { 40020 return 1; 40021 } 40022 return a2.name.localeCompare(b2.name); 40023 }); 40024 return filters; 40025 }, [fields, view]); 40026 } 40027 var use_filters_default = useFilters; 40028 40029 // packages/dataviews/build-module/components/dataviews-filters/filters.mjs 40030 var import_jsx_runtime157 = __toESM(require_jsx_runtime(), 1); 40031 function Filters({ className }) { 40032 const { fields, view, onChangeView, openedFilter, setOpenedFilter } = (0, import_element104.useContext)(dataviews_context_default); 40033 const addFilterRef = (0, import_element104.useRef)(null); 40034 const filters = use_filters_default(fields, view); 40035 const addFilter = /* @__PURE__ */ (0, import_jsx_runtime157.jsx)( 40036 add_filter_default, 40037 { 40038 filters, 40039 view, 40040 onChangeView, 40041 ref: addFilterRef, 40042 setOpenedFilter 40043 }, 40044 "add-filter" 40045 ); 40046 const visibleFilters = filters.filter((filter) => filter.isVisible); 40047 if (visibleFilters.length === 0) { 40048 return null; 40049 } 40050 const filterComponents = [ 40051 ...visibleFilters.map((filter) => { 40052 return /* @__PURE__ */ (0, import_jsx_runtime157.jsx)( 40053 Filter, 40054 { 40055 filter, 40056 view, 40057 fields, 40058 onChangeView, 40059 addFilterRef, 40060 openedFilter 40061 }, 40062 filter.field 40063 ); 40064 }), 40065 addFilter 40066 ]; 40067 filterComponents.push( 40068 /* @__PURE__ */ (0, import_jsx_runtime157.jsx)( 40069 ResetFilter, 40070 { 40071 filters, 40072 view, 40073 onChangeView 40074 }, 40075 "reset-filters" 40076 ) 40077 ); 40078 return /* @__PURE__ */ (0, import_jsx_runtime157.jsx)( 40079 Stack, 40080 { 40081 direction: "row", 40082 justify: "flex-start", 40083 gap: "sm", 40084 style: { width: "fit-content" }, 40085 wrap: "wrap", 40086 className, 40087 children: filterComponents 40088 } 40089 ); 40090 } 40091 var filters_default = (0, import_element104.memo)(Filters); 40092 40093 // packages/dataviews/build-module/components/dataviews-filters/toggle.mjs 40094 var import_element105 = __toESM(require_element(), 1); 40095 var import_components26 = __toESM(require_components(), 1); 40096 var import_i18n44 = __toESM(require_i18n(), 1); 40097 var import_jsx_runtime158 = __toESM(require_jsx_runtime(), 1); 40098 function FiltersToggle() { 40099 const { 40100 filters, 40101 view, 40102 onChangeView, 40103 setOpenedFilter, 40104 isShowingFilter, 40105 setIsShowingFilter 40106 } = (0, import_element105.useContext)(dataviews_context_default); 40107 const buttonRef = (0, import_element105.useRef)(null); 40108 const onChangeViewWithFilterVisibility = (0, import_element105.useCallback)( 40109 (_view) => { 40110 onChangeView(_view); 40111 setIsShowingFilter(true); 40112 }, 40113 [onChangeView, setIsShowingFilter] 40114 ); 40115 if (filters.length === 0) { 40116 return null; 40117 } 40118 const hasVisibleFilters = filters.some((filter) => filter.isVisible); 40119 const addFilterButtonProps = { 40120 label: (0, import_i18n44.__)("Add filter"), 40121 "aria-expanded": false, 40122 isPressed: false 40123 }; 40124 const toggleFiltersButtonProps = { 40125 label: (0, import_i18n44._x)("Filter", "verb"), 40126 "aria-expanded": isShowingFilter, 40127 isPressed: isShowingFilter, 40128 onClick: () => { 40129 if (!isShowingFilter) { 40130 setOpenedFilter(null); 40131 } 40132 setIsShowingFilter(!isShowingFilter); 40133 } 40134 }; 40135 const hasPrimaryOrLockedFilters = filters.some( 40136 (filter) => filter.isPrimary || filter.isLocked 40137 ); 40138 const buttonComponent = /* @__PURE__ */ (0, import_jsx_runtime158.jsx)( 40139 import_components26.Button, 40140 { 40141 ref: buttonRef, 40142 className: "dataviews-filters__visibility-toggle", 40143 size: "compact", 40144 icon: funnel_default, 40145 disabled: hasPrimaryOrLockedFilters, 40146 accessibleWhenDisabled: true, 40147 ...hasVisibleFilters ? toggleFiltersButtonProps : addFilterButtonProps 40148 } 40149 ); 40150 return /* @__PURE__ */ (0, import_jsx_runtime158.jsx)("div", { className: "dataviews-filters__container-visibility-toggle", children: !hasVisibleFilters ? /* @__PURE__ */ (0, import_jsx_runtime158.jsx)( 40151 AddFilterMenu, 40152 { 40153 filters, 40154 view, 40155 onChangeView: onChangeViewWithFilterVisibility, 40156 setOpenedFilter, 40157 triggerProps: { render: buttonComponent } 40158 } 40159 ) : /* @__PURE__ */ (0, import_jsx_runtime158.jsx)( 40160 FilterVisibilityToggle, 40161 { 40162 buttonRef, 40163 filtersCount: view.filters?.length, 40164 children: buttonComponent 40165 } 40166 ) }); 40167 } 40168 function FilterVisibilityToggle({ 40169 buttonRef, 40170 filtersCount, 40171 children 40172 }) { 40173 (0, import_element105.useEffect)( 40174 () => () => { 40175 buttonRef.current?.focus(); 40176 }, 40177 [buttonRef] 40178 ); 40179 return /* @__PURE__ */ (0, import_jsx_runtime158.jsxs)(import_jsx_runtime158.Fragment, { children: [ 40180 children, 40181 !!filtersCount && /* @__PURE__ */ (0, import_jsx_runtime158.jsx)("span", { className: "dataviews-filters-toggle__count", children: filtersCount }) 40182 ] }); 40183 } 40184 var toggle_default = FiltersToggle; 40185 40186 // packages/dataviews/build-module/components/dataviews-filters/filters-toggled.mjs 40187 var import_element106 = __toESM(require_element(), 1); 40188 var import_jsx_runtime159 = __toESM(require_jsx_runtime(), 1); 40189 function FiltersToggled(props) { 40190 const { isShowingFilter } = (0, import_element106.useContext)(dataviews_context_default); 40191 if (!isShowingFilter) { 40192 return null; 40193 } 40194 return /* @__PURE__ */ (0, import_jsx_runtime159.jsx)(filters_default, { ...props }); 40195 } 40196 var filters_toggled_default = FiltersToggled; 40197 40198 // packages/dataviews/build-module/components/dataviews-layout/index.mjs 40199 var import_element107 = __toESM(require_element(), 1); 40200 var import_components27 = __toESM(require_components(), 1); 40201 var import_i18n45 = __toESM(require_i18n(), 1); 40202 var import_jsx_runtime160 = __toESM(require_jsx_runtime(), 1); 40203 function DataViewsLayout({ className }) { 40204 const { 40205 actions = [], 40206 data, 40207 fields, 40208 getItemId, 40209 getItemLevel, 40210 hasInitiallyLoaded, 40211 isLoading, 40212 view, 40213 onChangeView, 40214 selection, 40215 onChangeSelection, 40216 setOpenedFilter, 40217 onClickItem, 40218 isItemClickable: isItemClickable2, 40219 renderItemLink, 40220 defaultLayouts: defaultLayouts2, 40221 containerRef, 40222 empty = /* @__PURE__ */ (0, import_jsx_runtime160.jsx)("p", { children: (0, import_i18n45.__)("No results") }) 40223 } = (0, import_element107.useContext)(dataviews_context_default); 40224 const isDelayedInitialLoading = useDelayedLoading(!hasInitiallyLoaded, { 40225 delay: 200 40226 }); 40227 if (!hasInitiallyLoaded) { 40228 if (!isDelayedInitialLoading) { 40229 return null; 40230 } 40231 return /* @__PURE__ */ (0, import_jsx_runtime160.jsx)("div", { className: "dataviews-loading", children: /* @__PURE__ */ (0, import_jsx_runtime160.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime160.jsx)(import_components27.Spinner, {}) }) }); 40232 } 40233 const ViewComponent = VIEW_LAYOUTS.find( 40234 (v2) => v2.type === view.type && defaultLayouts2[v2.type] 40235 )?.component; 40236 return /* @__PURE__ */ (0, import_jsx_runtime160.jsx)("div", { className: "dataviews-layout__container", ref: containerRef, children: /* @__PURE__ */ (0, import_jsx_runtime160.jsx)( 40237 ViewComponent, 40238 { 40239 className, 40240 actions, 40241 data, 40242 fields, 40243 getItemId, 40244 getItemLevel, 40245 isLoading, 40246 onChangeView, 40247 onChangeSelection, 40248 selection, 40249 setOpenedFilter, 40250 onClickItem, 40251 renderItemLink, 40252 isItemClickable: isItemClickable2, 40253 view, 40254 empty 40255 } 40256 ) }); 40257 } 40258 40259 // packages/dataviews/build-module/components/dataviews-search/index.mjs 40260 var import_i18n46 = __toESM(require_i18n(), 1); 40261 var import_element108 = __toESM(require_element(), 1); 40262 var import_components28 = __toESM(require_components(), 1); 40263 var import_compose14 = __toESM(require_compose(), 1); 40264 var import_jsx_runtime161 = __toESM(require_jsx_runtime(), 1); 40265 var DataViewsSearch = (0, import_element108.memo)(function Search({ label }) { 40266 const { view, onChangeView } = (0, import_element108.useContext)(dataviews_context_default); 40267 const [search, setSearch, debouncedSearch] = (0, import_compose14.useDebouncedInput)( 40268 view.search 40269 ); 40270 (0, import_element108.useEffect)(() => { 40271 if (view.search !== debouncedSearch) { 40272 setSearch(view.search ?? ""); 40273 } 40274 }, [view.search, setSearch]); 40275 const onChangeViewRef = (0, import_element108.useRef)(onChangeView); 40276 const viewRef = (0, import_element108.useRef)(view); 40277 (0, import_element108.useEffect)(() => { 40278 onChangeViewRef.current = onChangeView; 40279 viewRef.current = view; 40280 }, [onChangeView, view]); 40281 (0, import_element108.useEffect)(() => { 40282 if (debouncedSearch !== viewRef.current?.search) { 40283 onChangeViewRef.current({ 40284 ...viewRef.current, 40285 page: view.page ? 1 : void 0, 40286 startPosition: view.startPosition ? 1 : void 0, 40287 search: debouncedSearch 40288 }); 40289 } 40290 }, [debouncedSearch]); 40291 const searchLabel = label || (0, import_i18n46.__)("Search"); 40292 return /* @__PURE__ */ (0, import_jsx_runtime161.jsx)( 40293 import_components28.SearchControl, 40294 { 40295 className: "dataviews-search", 40296 onChange: setSearch, 40297 value: search, 40298 label: searchLabel, 40299 placeholder: searchLabel, 40300 size: "compact" 40301 } 40302 ); 40303 }); 40304 var dataviews_search_default = DataViewsSearch; 40305 40306 // packages/dataviews/build-module/components/dataviews-view-config/index.mjs 40307 var import_components29 = __toESM(require_components(), 1); 40308 var import_i18n47 = __toESM(require_i18n(), 1); 40309 var import_element109 = __toESM(require_element(), 1); 40310 var import_warning = __toESM(require_warning(), 1); 40311 var import_compose15 = __toESM(require_compose(), 1); 40312 var import_jsx_runtime162 = __toESM(require_jsx_runtime(), 1); 40313 var DATAVIEWS_CONFIG_POPOVER_PROPS = { 40314 className: "dataviews-config__popover", 40315 placement: "bottom-end", 40316 offset: 9 40317 }; 40318 function ViewTypeMenu() { 40319 const { view, onChangeView, defaultLayouts: defaultLayouts2 } = (0, import_element109.useContext)(dataviews_context_default); 40320 const availableLayouts = Object.keys(defaultLayouts2); 40321 if (availableLayouts.length <= 1) { 40322 return null; 40323 } 40324 const activeView = VIEW_LAYOUTS.find((v2) => view.type === v2.type); 40325 return /* @__PURE__ */ (0, import_jsx_runtime162.jsxs)(menu_exports.Root, { children: [ 40326 /* @__PURE__ */ (0, import_jsx_runtime162.jsx)( 40327 menu_exports.Trigger, 40328 { 40329 render: /* @__PURE__ */ (0, import_jsx_runtime162.jsx)( 40330 import_components29.Button, 40331 { 40332 size: "compact", 40333 icon: activeView?.icon, 40334 label: (0, import_i18n47.__)("Layout") 40335 } 40336 ) 40337 } 40338 ), 40339 /* @__PURE__ */ (0, import_jsx_runtime162.jsx)(menu_exports.Popup, { children: /* @__PURE__ */ (0, import_jsx_runtime162.jsx)( 40340 menu_exports.RadioGroup, 40341 { 40342 value: view.type, 40343 onValueChange: (value) => { 40344 switch (value) { 40345 case "list": 40346 case "grid": 40347 case "table": 40348 case "pickerGrid": 40349 case "pickerTable": 40350 case "pickerActivity": 40351 case "activity": 40352 const viewWithoutLayout = { ...view }; 40353 if ("layout" in viewWithoutLayout) { 40354 delete viewWithoutLayout.layout; 40355 } 40356 return onChangeView({ 40357 ...viewWithoutLayout, 40358 type: value, 40359 ...defaultLayouts2[value] 40360 }); 40361 } 40362 (0, import_warning.default)("Invalid dataview"); 40363 }, 40364 children: availableLayouts.map((layout) => { 40365 const config = VIEW_LAYOUTS.find( 40366 (v2) => v2.type === layout 40367 ); 40368 if (!config) { 40369 return null; 40370 } 40371 return /* @__PURE__ */ (0, import_jsx_runtime162.jsx)( 40372 menu_exports.RadioItem, 40373 { 40374 value: layout, 40375 closeOnClick: true, 40376 children: /* @__PURE__ */ (0, import_jsx_runtime162.jsx)(menu_exports.ItemLabel, { children: config.label }) 40377 }, 40378 layout 40379 ); 40380 }) 40381 } 40382 ) }) 40383 ] }); 40384 } 40385 function SortFieldControl() { 40386 const { view, fields, onChangeView } = (0, import_element109.useContext)(dataviews_context_default); 40387 const orderOptions = (0, import_element109.useMemo)(() => { 40388 const sortableFields = fields.filter( 40389 (field) => field.enableSorting !== false 40390 ); 40391 return sortableFields.map((field) => { 40392 return { 40393 label: field.label, 40394 value: field.id 40395 }; 40396 }); 40397 }, [fields]); 40398 return /* @__PURE__ */ (0, import_jsx_runtime162.jsx)( 40399 import_components29.SelectControl, 40400 { 40401 label: (0, import_i18n47.__)("Sort by"), 40402 value: view.sort?.field, 40403 options: orderOptions, 40404 onChange: (value) => { 40405 onChangeView({ 40406 ...view, 40407 sort: { 40408 direction: view?.sort?.direction || "desc", 40409 field: value 40410 }, 40411 showLevels: false 40412 }); 40413 } 40414 } 40415 ); 40416 } 40417 function SortDirectionControl() { 40418 const { view, fields, onChangeView } = (0, import_element109.useContext)(dataviews_context_default); 40419 const sortableFields = fields.filter( 40420 (field) => field.enableSorting !== false 40421 ); 40422 if (sortableFields.length === 0) { 40423 return null; 40424 } 40425 let value = view.sort?.direction; 40426 if (!value && view.sort?.field) { 40427 value = "desc"; 40428 } 40429 return /* @__PURE__ */ (0, import_jsx_runtime162.jsx)( 40430 import_components29.__experimentalToggleGroupControl, 40431 { 40432 className: "dataviews-view-config__sort-direction", 40433 isBlock: true, 40434 label: (0, import_i18n47.__)("Order"), 40435 value, 40436 onChange: (newDirection) => { 40437 if (newDirection === "asc" || newDirection === "desc") { 40438 onChangeView({ 40439 ...view, 40440 sort: { 40441 direction: newDirection, 40442 field: view.sort?.field || // If there is no field assigned as the sorting field assign the first sortable field. 40443 fields.find( 40444 (field) => field.enableSorting !== false 40445 )?.id || "" 40446 }, 40447 showLevels: false 40448 }); 40449 return; 40450 } 40451 (0, import_warning.default)("Invalid direction"); 40452 }, 40453 children: SORTING_DIRECTIONS.map((direction) => { 40454 return /* @__PURE__ */ (0, import_jsx_runtime162.jsx)( 40455 import_components29.__experimentalToggleGroupControlOptionIcon, 40456 { 40457 value: direction, 40458 icon: sortIcons[direction], 40459 label: sortLabels[direction] 40460 }, 40461 direction 40462 ); 40463 }) 40464 } 40465 ); 40466 } 40467 function ItemsPerPageControl() { 40468 const { view, config, onChangeView } = (0, import_element109.useContext)(dataviews_context_default); 40469 const { infiniteScrollEnabled } = view; 40470 if (!config || !config.perPageSizes || config.perPageSizes.length < 2 || config.perPageSizes.length > 6 || infiniteScrollEnabled) { 40471 return null; 40472 } 40473 return /* @__PURE__ */ (0, import_jsx_runtime162.jsx)( 40474 import_components29.__experimentalToggleGroupControl, 40475 { 40476 isBlock: true, 40477 label: (0, import_i18n47.__)("Items per page"), 40478 value: view.perPage || 10, 40479 disabled: !view?.sort?.field, 40480 onChange: (newItemsPerPage) => { 40481 const newItemsPerPageNumber = typeof newItemsPerPage === "number" || newItemsPerPage === void 0 ? newItemsPerPage : parseInt(newItemsPerPage, 10); 40482 onChangeView({ 40483 ...view, 40484 perPage: newItemsPerPageNumber, 40485 page: 1 40486 }); 40487 }, 40488 children: config.perPageSizes.map((value) => { 40489 return /* @__PURE__ */ (0, import_jsx_runtime162.jsx)( 40490 import_components29.__experimentalToggleGroupControlOption, 40491 { 40492 value, 40493 label: value.toString() 40494 }, 40495 value 40496 ); 40497 }) 40498 } 40499 ); 40500 } 40501 function ResetViewButton() { 40502 const { onReset } = (0, import_element109.useContext)(dataviews_context_default); 40503 if (onReset === void 0) { 40504 return null; 40505 } 40506 const isDisabled = onReset === false; 40507 return /* @__PURE__ */ (0, import_jsx_runtime162.jsx)( 40508 import_components29.Button, 40509 { 40510 variant: "tertiary", 40511 size: "compact", 40512 disabled: isDisabled, 40513 accessibleWhenDisabled: true, 40514 className: "dataviews-view-config__reset-button", 40515 onClick: () => { 40516 if (typeof onReset === "function") { 40517 onReset(); 40518 } 40519 }, 40520 children: (0, import_i18n47.__)("Reset view") 40521 } 40522 ); 40523 } 40524 function DataviewsViewConfigDropdown() { 40525 const { view, onReset } = (0, import_element109.useContext)(dataviews_context_default); 40526 const popoverId = (0, import_compose15.useInstanceId)( 40527 _DataViewsViewConfig, 40528 "dataviews-view-config-dropdown" 40529 ); 40530 const activeLayout = VIEW_LAYOUTS.find( 40531 (layout) => layout.type === view.type 40532 ); 40533 const isModified = typeof onReset === "function"; 40534 return /* @__PURE__ */ (0, import_jsx_runtime162.jsx)( 40535 import_components29.Dropdown, 40536 { 40537 expandOnMobile: true, 40538 popoverProps: { 40539 ...DATAVIEWS_CONFIG_POPOVER_PROPS, 40540 id: popoverId 40541 }, 40542 renderToggle: ({ onToggle, isOpen }) => { 40543 return /* @__PURE__ */ (0, import_jsx_runtime162.jsxs)("div", { className: "dataviews-view-config__toggle-wrapper", children: [ 40544 /* @__PURE__ */ (0, import_jsx_runtime162.jsx)( 40545 import_components29.Button, 40546 { 40547 size: "compact", 40548 icon: cog_default, 40549 label: (0, import_i18n47._x)( 40550 "View options", 40551 "View is used as a noun" 40552 ), 40553 onClick: onToggle, 40554 "aria-expanded": isOpen ? "true" : "false", 40555 "aria-controls": popoverId 40556 } 40557 ), 40558 isModified && /* @__PURE__ */ (0, import_jsx_runtime162.jsx)("span", { className: "dataviews-view-config__modified-indicator" }) 40559 ] }); 40560 }, 40561 renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime162.jsx)( 40562 import_components29.__experimentalDropdownContentWrapper, 40563 { 40564 paddingSize: "medium", 40565 className: "dataviews-config__popover-content-wrapper", 40566 children: /* @__PURE__ */ (0, import_jsx_runtime162.jsxs)( 40567 Stack, 40568 { 40569 direction: "column", 40570 className: "dataviews-view-config", 40571 gap: "xl", 40572 children: [ 40573 /* @__PURE__ */ (0, import_jsx_runtime162.jsxs)( 40574 Stack, 40575 { 40576 direction: "row", 40577 justify: "space-between", 40578 align: "center", 40579 className: "dataviews-view-config__header", 40580 children: [ 40581 /* @__PURE__ */ (0, import_jsx_runtime162.jsx)( 40582 import_components29.__experimentalHeading, 40583 { 40584 level: 2, 40585 className: "dataviews-settings-section__title", 40586 children: (0, import_i18n47.__)("Appearance") 40587 } 40588 ), 40589 /* @__PURE__ */ (0, import_jsx_runtime162.jsx)(ResetViewButton, {}) 40590 ] 40591 } 40592 ), 40593 /* @__PURE__ */ (0, import_jsx_runtime162.jsxs)(Stack, { direction: "column", gap: "lg", children: [ 40594 /* @__PURE__ */ (0, import_jsx_runtime162.jsxs)( 40595 Stack, 40596 { 40597 direction: "row", 40598 gap: "sm", 40599 className: "dataviews-view-config__sort-controls", 40600 children: [ 40601 /* @__PURE__ */ (0, import_jsx_runtime162.jsx)(SortFieldControl, {}), 40602 /* @__PURE__ */ (0, import_jsx_runtime162.jsx)(SortDirectionControl, {}) 40603 ] 40604 } 40605 ), 40606 !!activeLayout?.viewConfigOptions && /* @__PURE__ */ (0, import_jsx_runtime162.jsx)(activeLayout.viewConfigOptions, {}), 40607 /* @__PURE__ */ (0, import_jsx_runtime162.jsx)(ItemsPerPageControl, {}), 40608 /* @__PURE__ */ (0, import_jsx_runtime162.jsx)(PropertiesSection, {}) 40609 ] }) 40610 ] 40611 } 40612 ) 40613 } 40614 ) 40615 } 40616 ); 40617 } 40618 function _DataViewsViewConfig() { 40619 return /* @__PURE__ */ (0, import_jsx_runtime162.jsxs)(import_jsx_runtime162.Fragment, { children: [ 40620 /* @__PURE__ */ (0, import_jsx_runtime162.jsx)(ViewTypeMenu, {}), 40621 /* @__PURE__ */ (0, import_jsx_runtime162.jsx)(DataviewsViewConfigDropdown, {}) 40622 ] }); 40623 } 40624 var DataViewsViewConfig = (0, import_element109.memo)(_DataViewsViewConfig); 40625 var dataviews_view_config_default = DataViewsViewConfig; 40626 40627 // packages/dataviews/build-module/components/dataform-controls/checkbox.mjs 40628 var import_element118 = __toESM(require_element(), 1); 40629 40630 // packages/dataviews/build-module/components/validated-form-controls/checkbox-control.mjs 40631 var import_element110 = __toESM(require_element(), 1); 40632 var import_compose16 = __toESM(require_compose(), 1); 40633 var import_components30 = __toESM(require_components(), 1); 40634 var import_jsx_runtime163 = __toESM(require_jsx_runtime(), 1); 40635 var UnforwardedValidatedCheckboxControl = ({ 40636 required, 40637 customValidity, 40638 markWhenOptional, 40639 ...restProps 40640 }, forwardedRef) => { 40641 const validityTargetRef = (0, import_element110.useRef)(null); 40642 const mergedRefs = (0, import_compose16.useMergeRefs)([forwardedRef, validityTargetRef]); 40643 return /* @__PURE__ */ (0, import_jsx_runtime163.jsx)( 40644 ControlWithError, 40645 { 40646 className: "dataviews-validated-control", 40647 required, 40648 markWhenOptional, 40649 ref: mergedRefs, 40650 customValidity, 40651 getValidityTarget: () => validityTargetRef.current?.querySelector( 40652 'input[type="checkbox"]' 40653 ), 40654 children: /* @__PURE__ */ (0, import_jsx_runtime163.jsx)( 40655 import_components30.CheckboxControl, 40656 { 40657 ...restProps 40658 } 40659 ) 40660 } 40661 ); 40662 }; 40663 var ValidatedCheckboxControl = (0, import_element110.forwardRef)(UnforwardedValidatedCheckboxControl); 40664 ValidatedCheckboxControl.displayName = "ValidatedCheckboxControl"; 40665 40666 // packages/dataviews/build-module/components/validated-form-controls/combobox-control.mjs 40667 var import_element111 = __toESM(require_element(), 1); 40668 var import_compose17 = __toESM(require_compose(), 1); 40669 var import_components31 = __toESM(require_components(), 1); 40670 var import_jsx_runtime164 = __toESM(require_jsx_runtime(), 1); 40671 var UnforwardedValidatedComboboxControl = ({ 40672 required, 40673 customValidity, 40674 markWhenOptional, 40675 ...restProps 40676 }, forwardedRef) => { 40677 const validityTargetRef = (0, import_element111.useRef)(null); 40678 const mergedRefs = (0, import_compose17.useMergeRefs)([forwardedRef, validityTargetRef]); 40679 (0, import_element111.useEffect)(() => { 40680 const input = validityTargetRef.current?.querySelector( 40681 'input[role="combobox"]' 40682 ); 40683 if (input) { 40684 input.required = required ?? false; 40685 } 40686 }, [required]); 40687 return ( 40688 // TODO: Bug - Missing value error is not cleared immediately on change, waits for blur. 40689 /* @__PURE__ */ (0, import_jsx_runtime164.jsx)( 40690 ControlWithError, 40691 { 40692 className: "dataviews-validated-control", 40693 required, 40694 markWhenOptional, 40695 ref: mergedRefs, 40696 customValidity, 40697 getValidityTarget: () => validityTargetRef.current?.querySelector( 40698 'input[role="combobox"]' 40699 ), 40700 children: /* @__PURE__ */ (0, import_jsx_runtime164.jsx)(import_components31.ComboboxControl, { ...restProps }) 40701 } 40702 ) 40703 ); 40704 }; 40705 var ValidatedComboboxControl = (0, import_element111.forwardRef)(UnforwardedValidatedComboboxControl); 40706 ValidatedComboboxControl.displayName = "ValidatedComboboxControl"; 40707 40708 // packages/dataviews/build-module/components/validated-form-controls/form-token-field.mjs 40709 var import_element112 = __toESM(require_element(), 1); 40710 var import_components32 = __toESM(require_components(), 1); 40711 var import_jsx_runtime165 = __toESM(require_jsx_runtime(), 1); 40712 var UnforwardedValidatedFormTokenField = ({ 40713 required, 40714 customValidity, 40715 markWhenOptional, 40716 ...restProps 40717 }, forwardedRef) => { 40718 const validityTargetRef = (0, import_element112.useRef)(null); 40719 return /* @__PURE__ */ (0, import_jsx_runtime165.jsxs)( 40720 "div", 40721 { 40722 className: "dataviews-validated-control__wrapper-with-error-delegate", 40723 ref: forwardedRef, 40724 children: [ 40725 /* @__PURE__ */ (0, import_jsx_runtime165.jsx)( 40726 ControlWithError, 40727 { 40728 className: "dataviews-validated-control", 40729 required, 40730 markWhenOptional, 40731 customValidity, 40732 getValidityTarget: () => validityTargetRef.current, 40733 children: /* @__PURE__ */ (0, import_jsx_runtime165.jsx)(import_components32.FormTokenField, { ...restProps }) 40734 } 40735 ), 40736 /* @__PURE__ */ (0, import_jsx_runtime165.jsx)( 40737 "input", 40738 { 40739 className: "dataviews-validated-control__error-delegate", 40740 type: "text", 40741 ref: validityTargetRef, 40742 required, 40743 value: restProps.value && restProps.value.length > 0 ? "hasvalue" : "", 40744 tabIndex: -1, 40745 onChange: () => { 40746 }, 40747 onFocus: (e2) => { 40748 e2.target.previousElementSibling?.querySelector( 40749 'input[type="text"]' 40750 )?.focus(); 40751 } 40752 } 40753 ) 40754 ] 40755 } 40756 ); 40757 }; 40758 var ValidatedFormTokenField = (0, import_element112.forwardRef)(UnforwardedValidatedFormTokenField); 40759 ValidatedFormTokenField.displayName = "ValidatedFormTokenField"; 40760 40761 // packages/dataviews/build-module/components/validated-form-controls/number-control.mjs 40762 var import_element113 = __toESM(require_element(), 1); 40763 var import_compose18 = __toESM(require_compose(), 1); 40764 var import_components33 = __toESM(require_components(), 1); 40765 var import_jsx_runtime166 = __toESM(require_jsx_runtime(), 1); 40766 var UnforwardedValidatedNumberControl = ({ 40767 required, 40768 customValidity, 40769 markWhenOptional, 40770 ...restProps 40771 }, forwardedRef) => { 40772 const validityTargetRef = (0, import_element113.useRef)(null); 40773 const mergedRefs = (0, import_compose18.useMergeRefs)([forwardedRef, validityTargetRef]); 40774 return /* @__PURE__ */ (0, import_jsx_runtime166.jsx)( 40775 ControlWithError, 40776 { 40777 className: "dataviews-validated-control", 40778 required, 40779 markWhenOptional, 40780 customValidity, 40781 getValidityTarget: () => validityTargetRef.current, 40782 children: /* @__PURE__ */ (0, import_jsx_runtime166.jsx)(import_components33.__experimentalNumberControl, { ref: mergedRefs, ...restProps }) 40783 } 40784 ); 40785 }; 40786 var ValidatedNumberControl = (0, import_element113.forwardRef)(UnforwardedValidatedNumberControl); 40787 ValidatedNumberControl.displayName = "ValidatedNumberControl"; 40788 40789 // packages/dataviews/build-module/components/validated-form-controls/radio-control.mjs 40790 var import_element114 = __toESM(require_element(), 1); 40791 var import_compose19 = __toESM(require_compose(), 1); 40792 var import_components34 = __toESM(require_components(), 1); 40793 var import_jsx_runtime167 = __toESM(require_jsx_runtime(), 1); 40794 var UnforwardedValidatedRadioControl = ({ 40795 required, 40796 customValidity, 40797 markWhenOptional, 40798 ...restProps 40799 }, forwardedRef) => { 40800 const validityTargetRef = (0, import_element114.useRef)(null); 40801 const mergedRefs = (0, import_compose19.useMergeRefs)([forwardedRef, validityTargetRef]); 40802 return /* @__PURE__ */ (0, import_jsx_runtime167.jsx)( 40803 ControlWithError, 40804 { 40805 className: "dataviews-validated-control", 40806 required, 40807 markWhenOptional, 40808 ref: mergedRefs, 40809 customValidity, 40810 getValidityTarget: () => validityTargetRef.current?.querySelector( 40811 'input[type="radio"]' 40812 ), 40813 children: /* @__PURE__ */ (0, import_jsx_runtime167.jsx)(import_components34.RadioControl, { ...restProps }) 40814 } 40815 ); 40816 }; 40817 var ValidatedRadioControl = (0, import_element114.forwardRef)(UnforwardedValidatedRadioControl); 40818 ValidatedRadioControl.displayName = "ValidatedRadioControl"; 40819 40820 // packages/dataviews/build-module/components/validated-form-controls/select-control.mjs 40821 var import_element115 = __toESM(require_element(), 1); 40822 var import_compose20 = __toESM(require_compose(), 1); 40823 var import_components35 = __toESM(require_components(), 1); 40824 var import_jsx_runtime168 = __toESM(require_jsx_runtime(), 1); 40825 var UnforwardedValidatedSelectControl = ({ 40826 required, 40827 customValidity, 40828 markWhenOptional, 40829 ...restProps 40830 }, forwardedRef) => { 40831 const validityTargetRef = (0, import_element115.useRef)(null); 40832 const mergedRefs = (0, import_compose20.useMergeRefs)([forwardedRef, validityTargetRef]); 40833 return /* @__PURE__ */ (0, import_jsx_runtime168.jsx)( 40834 ControlWithError, 40835 { 40836 className: "dataviews-validated-control", 40837 required, 40838 markWhenOptional, 40839 customValidity, 40840 getValidityTarget: () => validityTargetRef.current, 40841 children: /* @__PURE__ */ (0, import_jsx_runtime168.jsx)( 40842 import_components35.SelectControl, 40843 { 40844 ref: mergedRefs, 40845 // A runtime boolean cannot statically discriminate 40846 // SelectControl's single/multiple props union. 40847 ...restProps 40848 } 40849 ) 40850 } 40851 ); 40852 }; 40853 var ValidatedSelectControl = (0, import_element115.forwardRef)(UnforwardedValidatedSelectControl); 40854 ValidatedSelectControl.displayName = "ValidatedSelectControl"; 40855 40856 // packages/dataviews/build-module/components/validated-form-controls/toggle-control.mjs 40857 var import_element116 = __toESM(require_element(), 1); 40858 var import_compose21 = __toESM(require_compose(), 1); 40859 var import_components36 = __toESM(require_components(), 1); 40860 var import_jsx_runtime169 = __toESM(require_jsx_runtime(), 1); 40861 var UnforwardedValidatedToggleControl = ({ 40862 required, 40863 customValidity, 40864 markWhenOptional, 40865 ...restProps 40866 }, forwardedRef) => { 40867 const validityTargetRef = (0, import_element116.useRef)(null); 40868 const mergedRefs = (0, import_compose21.useMergeRefs)([forwardedRef, validityTargetRef]); 40869 return /* @__PURE__ */ (0, import_jsx_runtime169.jsx)( 40870 ControlWithError, 40871 { 40872 className: "dataviews-validated-control", 40873 required, 40874 markWhenOptional, 40875 customValidity, 40876 getValidityTarget: () => validityTargetRef.current, 40877 children: /* @__PURE__ */ (0, import_jsx_runtime169.jsx)( 40878 import_components36.ToggleControl, 40879 { 40880 ref: mergedRefs, 40881 required, 40882 ...restProps 40883 } 40884 ) 40885 } 40886 ); 40887 }; 40888 var ValidatedToggleControl = (0, import_element116.forwardRef)(UnforwardedValidatedToggleControl); 40889 ValidatedToggleControl.displayName = "ValidatedToggleControl"; 40890 40891 // packages/dataviews/build-module/components/validated-form-controls/toggle-group-control.mjs 40892 var import_element117 = __toESM(require_element(), 1); 40893 var import_components37 = __toESM(require_components(), 1); 40894 var import_jsx_runtime170 = __toESM(require_jsx_runtime(), 1); 40895 var UnforwardedValidatedToggleGroupControl = ({ 40896 required, 40897 customValidity, 40898 markWhenOptional, 40899 ...restProps 40900 }, forwardedRef) => { 40901 const validityTargetRef = (0, import_element117.useRef)(null); 40902 const nameAttr = (0, import_element117.useId)(); 40903 return /* @__PURE__ */ (0, import_jsx_runtime170.jsxs)("div", { className: "dataviews-validated-control__wrapper-with-error-delegate", children: [ 40904 /* @__PURE__ */ (0, import_jsx_runtime170.jsx)( 40905 ControlWithError, 40906 { 40907 className: "dataviews-validated-control", 40908 required, 40909 markWhenOptional, 40910 customValidity, 40911 getValidityTarget: () => validityTargetRef.current, 40912 children: /* @__PURE__ */ (0, import_jsx_runtime170.jsx)(import_components37.__experimentalToggleGroupControl, { ref: forwardedRef, ...restProps }) 40913 } 40914 ), 40915 /* @__PURE__ */ (0, import_jsx_runtime170.jsx)( 40916 "input", 40917 { 40918 className: "dataviews-validated-control__error-delegate", 40919 type: "radio", 40920 ref: validityTargetRef, 40921 required, 40922 checked: restProps.value !== void 0, 40923 tabIndex: -1, 40924 name: nameAttr, 40925 onChange: () => { 40926 }, 40927 onFocus: (e2) => { 40928 e2.target.previousElementSibling?.querySelector( 40929 '[data-active-item="true"]' 40930 )?.focus(); 40931 } 40932 } 40933 ) 40934 ] }); 40935 }; 40936 var ValidatedToggleGroupControl = (0, import_element117.forwardRef)(UnforwardedValidatedToggleGroupControl); 40937 ValidatedToggleGroupControl.displayName = "ValidatedToggleGroupControl"; 40938 40939 // packages/dataviews/build-module/components/dataform-controls/utils/get-custom-validity.mjs 40940 function getCustomValidity(isValid2, validity) { 40941 let customValidity; 40942 if (isValid2?.required && validity?.required) { 40943 customValidity = validity.required.message ? { 40944 type: validity.required.type, 40945 message: validity.required.message 40946 } : void 0; 40947 } else if (isValid2?.pattern && validity?.pattern) { 40948 customValidity = validity.pattern; 40949 } else if (isValid2?.min && validity?.min) { 40950 customValidity = validity.min; 40951 } else if (isValid2?.max && validity?.max) { 40952 customValidity = validity.max; 40953 } else if (isValid2?.minLength && validity?.minLength) { 40954 customValidity = validity.minLength; 40955 } else if (isValid2?.maxLength && validity?.maxLength) { 40956 customValidity = validity.maxLength; 40957 } else if (isValid2?.elements && validity?.elements) { 40958 customValidity = validity.elements; 40959 } else if (validity?.custom) { 40960 customValidity = validity.custom; 40961 } 40962 return customValidity; 40963 } 40964 40965 // packages/dataviews/build-module/components/dataform-controls/checkbox.mjs 40966 var import_jsx_runtime171 = __toESM(require_jsx_runtime(), 1); 40967 function Checkbox({ 40968 field, 40969 onChange, 40970 data, 40971 hideLabelFromVision, 40972 markWhenOptional, 40973 validity 40974 }) { 40975 const { getValue, setValue, label, description, isValid: isValid2 } = field; 40976 const disabled2 = field.isDisabled({ item: data, field }); 40977 const onChangeControl = (0, import_element118.useCallback)(() => { 40978 onChange( 40979 setValue({ item: data, value: !getValue({ item: data }) }) 40980 ); 40981 }, [data, getValue, onChange, setValue]); 40982 return /* @__PURE__ */ (0, import_jsx_runtime171.jsx)( 40983 ValidatedCheckboxControl, 40984 { 40985 required: !!field.isValid?.required, 40986 markWhenOptional, 40987 customValidity: getCustomValidity(isValid2, validity), 40988 hidden: hideLabelFromVision, 40989 label, 40990 help: description, 40991 checked: getValue({ item: data }), 40992 onChange: onChangeControl, 40993 disabled: disabled2 40994 } 40995 ); 40996 } 40997 40998 // packages/dataviews/build-module/components/dataform-controls/combobox.mjs 40999 var import_components38 = __toESM(require_components(), 1); 41000 var import_element119 = __toESM(require_element(), 1); 41001 var import_jsx_runtime172 = __toESM(require_jsx_runtime(), 1); 41002 function Combobox3({ 41003 data, 41004 field, 41005 onChange, 41006 hideLabelFromVision, 41007 validity 41008 }) { 41009 const { label, description, placeholder, getValue, setValue, isValid: isValid2 } = field; 41010 const value = getValue({ item: data }) ?? ""; 41011 const onChangeControl = (0, import_element119.useCallback)( 41012 (newValue) => onChange(setValue({ item: data, value: newValue ?? "" })), 41013 [data, onChange, setValue] 41014 ); 41015 const { elements, isLoading } = useElements({ 41016 elements: field.elements, 41017 getElements: field.getElements 41018 }); 41019 if (isLoading) { 41020 return /* @__PURE__ */ (0, import_jsx_runtime172.jsx)(import_components38.Spinner, {}); 41021 } 41022 return /* @__PURE__ */ (0, import_jsx_runtime172.jsx)( 41023 ValidatedComboboxControl, 41024 { 41025 required: !!field.isValid?.required, 41026 customValidity: getCustomValidity(isValid2, validity), 41027 label, 41028 value, 41029 help: description, 41030 placeholder, 41031 options: elements, 41032 onChange: onChangeControl, 41033 hideLabelFromVision, 41034 allowReset: true, 41035 expandOnFocus: true 41036 } 41037 ); 41038 } 41039 41040 // packages/dataviews/build-module/components/dataform-controls/datetime.mjs 41041 var import_components40 = __toESM(require_components(), 1); 41042 var import_element122 = __toESM(require_element(), 1); 41043 var import_i18n50 = __toESM(require_i18n(), 1); 41044 var import_a11y2 = __toESM(require_a11y(), 1); 41045 var import_date5 = __toESM(require_date(), 1); 41046 41047 // packages/dataviews/build-module/components/dataform-controls/utils/relative-date-control.mjs 41048 var import_components39 = __toESM(require_components(), 1); 41049 var import_element120 = __toESM(require_element(), 1); 41050 var import_i18n48 = __toESM(require_i18n(), 1); 41051 var import_jsx_runtime173 = __toESM(require_jsx_runtime(), 1); 41052 var TIME_UNITS_OPTIONS = { 41053 [OPERATOR_IN_THE_PAST]: [ 41054 { value: "days", label: (0, import_i18n48.__)("Days") }, 41055 { value: "weeks", label: (0, import_i18n48.__)("Weeks") }, 41056 { value: "months", label: (0, import_i18n48.__)("Months") }, 41057 { value: "years", label: (0, import_i18n48.__)("Years") } 41058 ], 41059 [OPERATOR_OVER]: [ 41060 { value: "days", label: (0, import_i18n48.__)("Days ago") }, 41061 { value: "weeks", label: (0, import_i18n48.__)("Weeks ago") }, 41062 { value: "months", label: (0, import_i18n48.__)("Months ago") }, 41063 { value: "years", label: (0, import_i18n48.__)("Years ago") } 41064 ] 41065 }; 41066 function RelativeDateControl({ 41067 className, 41068 data, 41069 field, 41070 onChange, 41071 hideLabelFromVision, 41072 operator 41073 }) { 41074 const options = TIME_UNITS_OPTIONS[operator === OPERATOR_IN_THE_PAST ? "inThePast" : "over"]; 41075 const { id, label, description, getValue, setValue } = field; 41076 const disabled2 = field.isDisabled({ item: data, field }); 41077 const fieldValue = getValue({ item: data }); 41078 const { value: relValue = "", unit = options[0].value } = fieldValue && typeof fieldValue === "object" ? fieldValue : {}; 41079 const onChangeValue = (0, import_element120.useCallback)( 41080 (newValue) => onChange( 41081 setValue({ 41082 item: data, 41083 value: { value: Number(newValue), unit } 41084 }) 41085 ), 41086 [onChange, setValue, data, unit] 41087 ); 41088 const onChangeUnit = (0, import_element120.useCallback)( 41089 (newUnit) => onChange( 41090 setValue({ 41091 item: data, 41092 value: { value: relValue, unit: newUnit } 41093 }) 41094 ), 41095 [onChange, setValue, data, relValue] 41096 ); 41097 return /* @__PURE__ */ (0, import_jsx_runtime173.jsx)( 41098 import_components39.BaseControl, 41099 { 41100 id, 41101 className: clsx_default(className, "dataviews-controls__relative-date"), 41102 label, 41103 hideLabelFromVision, 41104 help: description, 41105 children: /* @__PURE__ */ (0, import_jsx_runtime173.jsxs)(Stack, { direction: "row", gap: "sm", children: [ 41106 /* @__PURE__ */ (0, import_jsx_runtime173.jsx)( 41107 import_components39.__experimentalNumberControl, 41108 { 41109 className: "dataviews-controls__relative-date-number", 41110 spinControls: "none", 41111 min: 1, 41112 step: 1, 41113 value: relValue, 41114 onChange: onChangeValue, 41115 disabled: disabled2 41116 } 41117 ), 41118 /* @__PURE__ */ (0, import_jsx_runtime173.jsx)( 41119 import_components39.SelectControl, 41120 { 41121 className: "dataviews-controls__relative-date-unit", 41122 label: (0, import_i18n48.__)("Unit"), 41123 value: unit, 41124 options, 41125 onChange: onChangeUnit, 41126 hideLabelFromVision: true, 41127 disabled: disabled2 41128 } 41129 ) 41130 ] }) 41131 } 41132 ); 41133 } 41134 41135 // packages/dataviews/build-module/components/dataform-controls/utils/to-calendar-date.mjs 41136 function toCalendarDate(date, timeZone) { 41137 return timeZone ? new TZDate(date, timeZone) : date; 41138 } 41139 41140 // packages/dataviews/build-module/components/dataform-controls/utils/use-disabled-date-matchers.mjs 41141 var import_element121 = __toESM(require_element(), 1); 41142 function useDisabledDateMatchers(isValid2, parseDateFn) { 41143 const minConstraint = typeof isValid2.min?.constraint === "string" ? isValid2.min.constraint : void 0; 41144 const maxConstraint = typeof isValid2.max?.constraint === "string" ? isValid2.max.constraint : void 0; 41145 const disabledMatchers = (0, import_element121.useMemo)(() => { 41146 const matchers = []; 41147 if (minConstraint) { 41148 const minDate = parseDateFn(minConstraint); 41149 if (minDate) { 41150 matchers.push({ before: minDate }); 41151 } 41152 } 41153 if (maxConstraint) { 41154 const maxDate = parseDateFn(maxConstraint); 41155 if (maxDate) { 41156 matchers.push({ after: maxDate }); 41157 } 41158 } 41159 return matchers.length > 0 ? matchers : void 0; 41160 }, [minConstraint, maxConstraint, parseDateFn]); 41161 return { minConstraint, maxConstraint, disabledMatchers }; 41162 } 41163 41164 // packages/dataviews/build-module/components/dataform-controls/utils/get-calendar-locale.mjs 41165 var LANGUAGE_ALIASES = { 41166 ary: "ar-MA", 41167 // Moroccan Arabic. 41168 haz: "fa" 41169 // Hazaragi, a variety of Persian. 41170 }; 41171 function getCalendarLocale(wpLocale) { 41172 const subtags = wpLocale?.trim().split(/[_-]/) ?? []; 41173 const language = subtags.shift()?.toLowerCase(); 41174 if (!language) { 41175 return void 0; 41176 } 41177 const normalized = [LANGUAGE_ALIASES[language] ?? language]; 41178 for (const subtag of subtags) { 41179 if (/^[a-z]{4}$/i.test(subtag) || /^([a-z]{2}|\d{3})$/i.test(subtag)) { 41180 normalized.push(subtag); 41181 } 41182 } 41183 return normalized.join("-"); 41184 } 41185 41186 // packages/dataviews/build-module/components/dataform-controls/utils/get-timezone-description.mjs 41187 var import_date3 = __toESM(require_date(), 1); 41188 var import_i18n49 = __toESM(require_i18n(), 1); 41189 function getTimezoneDescription() { 41190 const { timezone } = (0, import_date3.getSettings)(); 41191 const userTimezoneOffset = -1 * ((/* @__PURE__ */ new Date()).getTimezoneOffset() / 60); 41192 if (Number(timezone.offset) === userTimezoneOffset) { 41193 return void 0; 41194 } 41195 const offsetSymbol = Number(timezone.offset) >= 0 ? "+" : ""; 41196 const zoneAbbr = "" !== timezone.abbr && isNaN(Number(timezone.abbr)) ? timezone.abbr : `UTC$offsetSymbol}$timezone.offsetFormatted}`; 41197 const prettyTimezoneString = timezone.string.replaceAll("_", " "); 41198 let timezoneDetail = zoneAbbr; 41199 if ("UTC" === timezone.string) { 41200 timezoneDetail = (0, import_i18n49.__)("Coordinated Universal Time"); 41201 } else if (prettyTimezoneString.trim().length > 0) { 41202 timezoneDetail = `($zoneAbbr}) $prettyTimezoneString}`; 41203 } 41204 return (0, import_i18n49.sprintf)( 41205 /* translators: %s: timezone detail, e.g. "(CEST) Europe/Madrid" or "UTC+3". */ 41206 (0, import_i18n49.__)("Timezone: %s"), 41207 timezoneDetail 41208 ); 41209 } 41210 41211 // packages/dataviews/build-module/field-types/utils/parse-date-time.mjs 41212 var import_date4 = __toESM(require_date(), 1); 41213 function parseDateTime(dateTimeString) { 41214 if (!dateTimeString) { 41215 return null; 41216 } 41217 const parsed = (0, import_date4.getDate)(dateTimeString); 41218 return parsed && isValid(parsed) ? parsed : null; 41219 } 41220 41221 // packages/dataviews/build-module/components/dataform-controls/datetime.mjs 41222 var import_jsx_runtime174 = __toESM(require_jsx_runtime(), 1); 41223 var formatDateTime = (value) => { 41224 if (!value) { 41225 return ""; 41226 } 41227 return (0, import_date5.dateI18n)("Y-m-d\\TH:i", (0, import_date5.getDate)(value)); 41228 }; 41229 function CalendarDateTimeControl({ 41230 data, 41231 field, 41232 onChange, 41233 hideLabelFromVision, 41234 markWhenOptional, 41235 validity, 41236 config 41237 }) { 41238 const { compact } = config || {}; 41239 const { id, label, description, setValue, getValue, isValid: isValid2 } = field; 41240 const disabled2 = field.isDisabled({ item: data, field }); 41241 const fieldValue = getValue({ item: data }); 41242 const value = typeof fieldValue === "string" ? fieldValue : void 0; 41243 const { timezone } = (0, import_date5.getSettings)(); 41244 const timeZone = timezone.string || (0, import_date5.dateI18n)("P"); 41245 const [calendarMonth, setCalendarMonth] = (0, import_element122.useState)(() => { 41246 const parsedDate = parseDateTime(value); 41247 return toCalendarDate(parsedDate || /* @__PURE__ */ new Date(), timeZone); 41248 }); 41249 (0, import_element122.useEffect)(() => { 41250 const parsedDate = parseDateTime(value); 41251 if (parsedDate) { 41252 const targetMonth = toCalendarDate(parsedDate, timeZone); 41253 setCalendarMonth( 41254 (currentMonth) => isSameMonth( 41255 targetMonth, 41256 toCalendarDate(currentMonth, timeZone) 41257 ) ? currentMonth : targetMonth 41258 ); 41259 } 41260 }, [timeZone, value]); 41261 const inputControlRef = (0, import_element122.useRef)(null); 41262 const validationTimeoutRef = (0, import_element122.useRef)(void 0); 41263 const { minConstraint, maxConstraint, disabledMatchers } = useDisabledDateMatchers(isValid2, parseDateTime); 41264 const onChangeCallback = (0, import_element122.useCallback)( 41265 (newValue) => onChange(setValue({ item: data, value: newValue })), 41266 [data, onChange, setValue] 41267 ); 41268 (0, import_element122.useEffect)(() => { 41269 return () => clearTimeout(validationTimeoutRef.current); 41270 }, []); 41271 const onSelectDate = (0, import_element122.useCallback)( 41272 (newDate) => { 41273 if (newDate) { 41274 const wpDate = (0, import_date5.dateI18n)("Y-m-d", newDate); 41275 const wpTime = value ? (0, import_date5.dateI18n)("H:i", (0, import_date5.getDate)(value)) : "00:00"; 41276 const finalDateTime = (0, import_date5.getDate)(`$wpDate}T$wpTime}`); 41277 onChangeCallback(finalDateTime.toISOString()); 41278 } else { 41279 onChangeCallback(void 0); 41280 } 41281 clearTimeout(validationTimeoutRef.current); 41282 validationTimeoutRef.current = setTimeout(() => { 41283 const input = inputControlRef.current; 41284 if (!input) { 41285 return; 41286 } 41287 input.dispatchEvent( 41288 new Event("invalid", { cancelable: true }) 41289 ); 41290 if (input.validationMessage) { 41291 (0, import_a11y2.speak)(input.validationMessage); 41292 } 41293 }, 0); 41294 }, 41295 [onChangeCallback, value] 41296 ); 41297 const handleManualDateTimeChange = (0, import_element122.useCallback)( 41298 (newValue) => { 41299 if (newValue) { 41300 const dateTime = (0, import_date5.getDate)(newValue); 41301 onChangeCallback(dateTime.toISOString()); 41302 const parsedDate = parseDateTime(dateTime.toISOString()); 41303 if (parsedDate) { 41304 setCalendarMonth(toCalendarDate(parsedDate, timeZone)); 41305 } 41306 } else { 41307 onChangeCallback(void 0); 41308 } 41309 }, 41310 [onChangeCallback, timeZone] 41311 ); 41312 const { format: fieldFormat } = field; 41313 const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date5.getSettings)().l10n.startOfWeek; 41314 const locale = getCalendarLocale((0, import_date5.getSettings)().l10n.locale); 41315 let displayLabel = label; 41316 if (isValid2?.required && !markWhenOptional && !hideLabelFromVision) { 41317 displayLabel = `$label} (${(0, import_i18n50.__)("Required")})`; 41318 } else if (!isValid2?.required && markWhenOptional && !hideLabelFromVision) { 41319 displayLabel = `$label} (${(0, import_i18n50.__)("Optional")})`; 41320 } 41321 return /* @__PURE__ */ (0, import_jsx_runtime174.jsx)( 41322 import_components40.BaseControl, 41323 { 41324 id, 41325 label: displayLabel, 41326 help: description, 41327 hideLabelFromVision, 41328 children: /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)(Stack, { direction: "column", gap: "lg", children: [ 41329 /* @__PURE__ */ (0, import_jsx_runtime174.jsx)( 41330 ValidatedInputControl, 41331 { 41332 ref: inputControlRef, 41333 required: !!isValid2?.required, 41334 customValidity: getCustomValidity(isValid2, validity), 41335 type: "datetime-local", 41336 label: (0, import_i18n50.__)("Date time"), 41337 hideLabelFromVision: true, 41338 value: formatDateTime(value), 41339 onValueChange: handleManualDateTimeChange, 41340 disabled: disabled2, 41341 description: getTimezoneDescription(), 41342 min: minConstraint ? formatDateTime(minConstraint) : void 0, 41343 max: maxConstraint ? formatDateTime(maxConstraint) : void 0 41344 } 41345 ), 41346 !compact && /* @__PURE__ */ (0, import_jsx_runtime174.jsx)( 41347 Calendar, 41348 { 41349 style: { width: "100%" }, 41350 value: value ? parseDateTime(value) : null, 41351 onValueChange: onSelectDate, 41352 month: calendarMonth, 41353 onMonthChange: setCalendarMonth, 41354 timeZone, 41355 locale, 41356 dir: (0, import_i18n50.isRTL)() ? "rtl" : "ltr", 41357 weekStartsOn, 41358 disabled: disabled2 || disabledMatchers 41359 } 41360 ) 41361 ] }) 41362 } 41363 ); 41364 } 41365 function DateTime({ 41366 data, 41367 field, 41368 onChange, 41369 hideLabelFromVision, 41370 markWhenOptional, 41371 operator, 41372 validity, 41373 config 41374 }) { 41375 if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) { 41376 return /* @__PURE__ */ (0, import_jsx_runtime174.jsx)( 41377 RelativeDateControl, 41378 { 41379 className: "dataviews-controls__datetime", 41380 data, 41381 field, 41382 onChange, 41383 hideLabelFromVision, 41384 operator 41385 } 41386 ); 41387 } 41388 return /* @__PURE__ */ (0, import_jsx_runtime174.jsx)( 41389 CalendarDateTimeControl, 41390 { 41391 data, 41392 field, 41393 onChange, 41394 hideLabelFromVision, 41395 markWhenOptional, 41396 validity, 41397 config 41398 } 41399 ); 41400 } 41401 41402 // packages/dataviews/build-module/components/dataform-controls/date.mjs 41403 var import_components41 = __toESM(require_components(), 1); 41404 var import_a11y3 = __toESM(require_a11y(), 1); 41405 var import_element123 = __toESM(require_element(), 1); 41406 var import_i18n51 = __toESM(require_i18n(), 1); 41407 var import_date6 = __toESM(require_date(), 1); 41408 var import_jsx_runtime175 = __toESM(require_jsx_runtime(), 1); 41409 var DATE_PRESETS = [ 41410 { 41411 id: "today", 41412 label: (0, import_i18n51.__)("Today"), 41413 getValue: () => (0, import_date6.getDate)(null) 41414 }, 41415 { 41416 id: "yesterday", 41417 label: (0, import_i18n51.__)("Yesterday"), 41418 getValue: () => { 41419 const today = (0, import_date6.getDate)(null); 41420 return subDays(today, 1); 41421 } 41422 }, 41423 { 41424 id: "past-week", 41425 label: (0, import_i18n51.__)("Past week"), 41426 getValue: () => { 41427 const today = (0, import_date6.getDate)(null); 41428 return subDays(today, 7); 41429 } 41430 }, 41431 { 41432 id: "past-month", 41433 label: (0, import_i18n51.__)("Past month"), 41434 getValue: () => { 41435 const today = (0, import_date6.getDate)(null); 41436 return subMonths(today, 1); 41437 } 41438 } 41439 ]; 41440 var DATE_RANGE_PRESETS = [ 41441 { 41442 id: "last-7-days", 41443 label: (0, import_i18n51.__)("Last 7 days"), 41444 getValue: () => { 41445 const today = (0, import_date6.getDate)(null); 41446 return [subDays(today, 7), today]; 41447 } 41448 }, 41449 { 41450 id: "last-30-days", 41451 label: (0, import_i18n51.__)("Last 30 days"), 41452 getValue: () => { 41453 const today = (0, import_date6.getDate)(null); 41454 return [subDays(today, 30), today]; 41455 } 41456 }, 41457 { 41458 id: "month-to-date", 41459 label: (0, import_i18n51.__)("Month to date"), 41460 getValue: () => { 41461 const today = (0, import_date6.getDate)(null); 41462 return [startOfMonth(today), today]; 41463 } 41464 }, 41465 { 41466 id: "last-year", 41467 label: (0, import_i18n51.__)("Last year"), 41468 getValue: () => { 41469 const today = (0, import_date6.getDate)(null); 41470 return [subYears(today, 1), today]; 41471 } 41472 }, 41473 { 41474 id: "year-to-date", 41475 label: (0, import_i18n51.__)("Year to date"), 41476 getValue: () => { 41477 const today = (0, import_date6.getDate)(null); 41478 return [startOfYear(today), today]; 41479 } 41480 } 41481 ]; 41482 var parseDate2 = (dateString) => { 41483 if (!dateString) { 41484 return null; 41485 } 41486 const parsed = parseISO(dateString); 41487 return isValid(parsed) ? parsed : null; 41488 }; 41489 var formatDate = (date) => { 41490 if (!date) { 41491 return ""; 41492 } 41493 return typeof date === "string" ? date : format(date, "yyyy-MM-dd"); 41494 }; 41495 function ValidatedDateControl({ 41496 field, 41497 validity, 41498 inputRefs, 41499 isTouched, 41500 setIsTouched, 41501 children 41502 }) { 41503 const { isValid: isValid2 } = field; 41504 const [customValidity, setCustomValidity] = (0, import_element123.useState)(void 0); 41505 const validateRefs = (0, import_element123.useCallback)(() => { 41506 const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; 41507 for (const ref of refs) { 41508 const input = ref.current; 41509 if (input && !input.validity.valid) { 41510 setCustomValidity({ 41511 type: "invalid", 41512 message: input.validationMessage 41513 }); 41514 return; 41515 } 41516 } 41517 setCustomValidity(void 0); 41518 }, [inputRefs]); 41519 (0, import_element123.useEffect)(() => { 41520 const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; 41521 const result = validity ? getCustomValidity(isValid2, validity) : void 0; 41522 for (const ref of refs) { 41523 const input = ref.current; 41524 if (input) { 41525 input.setCustomValidity( 41526 result?.type === "invalid" && result.message ? result.message : "" 41527 ); 41528 } 41529 } 41530 }, [inputRefs, isValid2, validity]); 41531 (0, import_element123.useEffect)(() => { 41532 const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs]; 41533 const handleInvalid = (event) => { 41534 event.preventDefault(); 41535 setIsTouched(true); 41536 }; 41537 for (const ref of refs) { 41538 ref.current?.addEventListener("invalid", handleInvalid); 41539 } 41540 return () => { 41541 for (const ref of refs) { 41542 ref.current?.removeEventListener("invalid", handleInvalid); 41543 } 41544 }; 41545 }, [inputRefs, setIsTouched]); 41546 (0, import_element123.useEffect)(() => { 41547 if (!isTouched) { 41548 return; 41549 } 41550 const result = validity ? getCustomValidity(isValid2, validity) : void 0; 41551 if (result) { 41552 setCustomValidity(result); 41553 } else { 41554 validateRefs(); 41555 } 41556 }, [isTouched, isValid2, validity, validateRefs]); 41557 (0, import_element123.useEffect)(() => { 41558 if (isTouched && customValidity?.message) { 41559 (0, import_a11y3.speak)(customValidity.message); 41560 } 41561 }, [isTouched, customValidity?.message]); 41562 const onBlur = (event) => { 41563 if (isTouched) { 41564 return; 41565 } 41566 if (!event.relatedTarget || !event.currentTarget.contains(event.relatedTarget)) { 41567 setIsTouched(true); 41568 } 41569 }; 41570 return /* @__PURE__ */ (0, import_jsx_runtime175.jsxs)(Stack, { direction: "column", gap: "sm", onBlur, children: [ 41571 children, 41572 customValidity && /* @__PURE__ */ (0, import_jsx_runtime175.jsx)( 41573 ValidityIndicator, 41574 { 41575 type: customValidity.type, 41576 message: customValidity.message 41577 } 41578 ) 41579 ] }); 41580 } 41581 function CalendarDateControl({ 41582 data, 41583 field, 41584 onChange, 41585 hideLabelFromVision, 41586 markWhenOptional, 41587 validity 41588 }) { 41589 const { 41590 id, 41591 label, 41592 description, 41593 setValue, 41594 getValue, 41595 isValid: isValid2, 41596 format: fieldFormat 41597 } = field; 41598 const disabled2 = field.isDisabled({ item: data, field }); 41599 const [selectedPresetId, setSelectedPresetId] = (0, import_element123.useState)( 41600 null 41601 ); 41602 const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date6.getSettings)().l10n.startOfWeek; 41603 const locale = getCalendarLocale((0, import_date6.getSettings)().l10n.locale); 41604 const fieldValue = getValue({ item: data }); 41605 const value = typeof fieldValue === "string" ? fieldValue : void 0; 41606 const [calendarMonth, setCalendarMonth] = (0, import_element123.useState)(() => { 41607 const parsedDate = parseDate2(value); 41608 return parsedDate || /* @__PURE__ */ new Date(); 41609 }); 41610 (0, import_element123.useEffect)(() => { 41611 const parsedDate = parseDate2(value); 41612 if (parsedDate) { 41613 setCalendarMonth( 41614 (currentMonth) => isSameMonth(parsedDate, currentMonth) ? currentMonth : parsedDate 41615 ); 41616 } 41617 }, [value]); 41618 const [isTouched, setIsTouched] = (0, import_element123.useState)(false); 41619 const validityTargetRef = (0, import_element123.useRef)(null); 41620 const { minConstraint, maxConstraint, disabledMatchers } = useDisabledDateMatchers(isValid2, parseDate2); 41621 const onChangeCallback = (0, import_element123.useCallback)( 41622 (newValue) => onChange(setValue({ item: data, value: newValue })), 41623 [data, onChange, setValue] 41624 ); 41625 const onSelectDate = (0, import_element123.useCallback)( 41626 (newDate) => { 41627 const dateValue = newDate ? formatDate(newDate) : void 0; 41628 onChangeCallback(dateValue); 41629 setSelectedPresetId(null); 41630 setIsTouched(true); 41631 }, 41632 [onChangeCallback] 41633 ); 41634 const handlePresetClick = (0, import_element123.useCallback)( 41635 (preset) => { 41636 const presetDate = preset.getValue(); 41637 const dateValue = formatDate(presetDate); 41638 setCalendarMonth(presetDate); 41639 onChangeCallback(dateValue); 41640 setSelectedPresetId(preset.id); 41641 setIsTouched(true); 41642 }, 41643 [onChangeCallback] 41644 ); 41645 const handleManualDateChange = (0, import_element123.useCallback)( 41646 (newValue) => { 41647 onChangeCallback(newValue); 41648 if (newValue) { 41649 const parsedDate = parseDate2(newValue); 41650 if (parsedDate) { 41651 setCalendarMonth(parsedDate); 41652 } 41653 } 41654 setSelectedPresetId(null); 41655 setIsTouched(true); 41656 }, 41657 [onChangeCallback] 41658 ); 41659 let displayLabel = label; 41660 if (isValid2?.required && !markWhenOptional) { 41661 displayLabel = `$label} (${(0, import_i18n51.__)("Required")})`; 41662 } else if (!isValid2?.required && markWhenOptional) { 41663 displayLabel = `$label} (${(0, import_i18n51.__)("Optional")})`; 41664 } 41665 return /* @__PURE__ */ (0, import_jsx_runtime175.jsx)( 41666 ValidatedDateControl, 41667 { 41668 field, 41669 validity, 41670 inputRefs: validityTargetRef, 41671 isTouched, 41672 setIsTouched, 41673 children: /* @__PURE__ */ (0, import_jsx_runtime175.jsx)( 41674 import_components41.BaseControl, 41675 { 41676 id, 41677 className: "dataviews-controls__date", 41678 label: displayLabel, 41679 help: description, 41680 hideLabelFromVision, 41681 children: /* @__PURE__ */ (0, import_jsx_runtime175.jsxs)(Stack, { direction: "column", gap: "lg", children: [ 41682 /* @__PURE__ */ (0, import_jsx_runtime175.jsxs)( 41683 Stack, 41684 { 41685 direction: "row", 41686 gap: "sm", 41687 wrap: "wrap", 41688 justify: "flex-start", 41689 children: [ 41690 DATE_PRESETS.map((preset) => { 41691 const isSelected2 = selectedPresetId === preset.id; 41692 return /* @__PURE__ */ (0, import_jsx_runtime175.jsx)( 41693 import_components41.Button, 41694 { 41695 className: "dataviews-controls__date-preset", 41696 variant: "tertiary", 41697 isPressed: isSelected2, 41698 size: "small", 41699 disabled: disabled2, 41700 accessibleWhenDisabled: true, 41701 onClick: () => handlePresetClick(preset), 41702 children: preset.label 41703 }, 41704 preset.id 41705 ); 41706 }), 41707 /* @__PURE__ */ (0, import_jsx_runtime175.jsx)( 41708 import_components41.Button, 41709 { 41710 className: "dataviews-controls__date-preset", 41711 variant: "tertiary", 41712 isPressed: !selectedPresetId, 41713 size: "small", 41714 disabled: !!selectedPresetId || disabled2, 41715 accessibleWhenDisabled: true, 41716 children: (0, import_i18n51.__)("Custom") 41717 } 41718 ) 41719 ] 41720 } 41721 ), 41722 /* @__PURE__ */ (0, import_jsx_runtime175.jsx)( 41723 import_components41.__experimentalInputControl, 41724 { 41725 ref: validityTargetRef, 41726 type: "date", 41727 label: (0, import_i18n51.__)("Date"), 41728 hideLabelFromVision: true, 41729 value, 41730 onChange: handleManualDateChange, 41731 required: !!field.isValid?.required, 41732 disabled: disabled2, 41733 min: minConstraint, 41734 max: maxConstraint 41735 } 41736 ), 41737 /* @__PURE__ */ (0, import_jsx_runtime175.jsx)( 41738 Calendar, 41739 { 41740 style: { width: "100%" }, 41741 value: value ? parseDate2(value) : null, 41742 onValueChange: onSelectDate, 41743 month: calendarMonth, 41744 onMonthChange: setCalendarMonth, 41745 locale, 41746 dir: (0, import_i18n51.isRTL)() ? "rtl" : "ltr", 41747 weekStartsOn, 41748 disabled: disabled2 || disabledMatchers, 41749 disableNavigation: disabled2 41750 } 41751 ) 41752 ] }) 41753 } 41754 ) 41755 } 41756 ); 41757 } 41758 function CalendarDateRangeControl({ 41759 data, 41760 field, 41761 onChange, 41762 hideLabelFromVision, 41763 markWhenOptional, 41764 validity 41765 }) { 41766 const { 41767 id, 41768 label, 41769 description, 41770 getValue, 41771 setValue, 41772 isValid: isValid2, 41773 format: fieldFormat 41774 } = field; 41775 const disabled2 = field.isDisabled({ item: data, field }); 41776 let value; 41777 const fieldValue = getValue({ item: data }); 41778 if (Array.isArray(fieldValue) && fieldValue.length === 2 && fieldValue.every((date) => typeof date === "string")) { 41779 value = fieldValue; 41780 } 41781 const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date6.getSettings)().l10n.startOfWeek; 41782 const locale = getCalendarLocale((0, import_date6.getSettings)().l10n.locale); 41783 const { minConstraint, maxConstraint, disabledMatchers } = useDisabledDateMatchers(isValid2, parseDate2); 41784 const onChangeCallback = (0, import_element123.useCallback)( 41785 (newValue) => { 41786 onChange( 41787 setValue({ 41788 item: data, 41789 value: newValue 41790 }) 41791 ); 41792 }, 41793 [data, onChange, setValue] 41794 ); 41795 const [selectedPresetId, setSelectedPresetId] = (0, import_element123.useState)( 41796 null 41797 ); 41798 const selectedRange = (0, import_element123.useMemo)(() => { 41799 if (!value) { 41800 return null; 41801 } 41802 const [from, to] = value; 41803 return { 41804 from: parseDate2(from) || void 0, 41805 to: parseDate2(to) || void 0 41806 }; 41807 }, [value]); 41808 const [calendarMonth, setCalendarMonth] = (0, import_element123.useState)(() => { 41809 return selectedRange?.from || /* @__PURE__ */ new Date(); 41810 }); 41811 const [fromValue, toValue] = value ?? []; 41812 (0, import_element123.useEffect)(() => { 41813 setCalendarMonth((currentMonth) => { 41814 const from = parseDate2(fromValue); 41815 const to = parseDate2(toValue); 41816 const targetMonth = from ?? to; 41817 const isRangeVisible = from && to ? areIntervalsOverlapping( 41818 { start: from, end: to }, 41819 { 41820 start: startOfMonth(currentMonth), 41821 end: endOfMonth(currentMonth) 41822 }, 41823 { inclusive: true } 41824 ) : [from, to].some( 41825 (date) => date && isSameMonth(date, currentMonth) 41826 ); 41827 return targetMonth && !isRangeVisible ? targetMonth : currentMonth; 41828 }); 41829 }, [fromValue, toValue]); 41830 const [isTouched, setIsTouched] = (0, import_element123.useState)(false); 41831 const fromInputRef = (0, import_element123.useRef)(null); 41832 const toInputRef = (0, import_element123.useRef)(null); 41833 const updateDateRange = (0, import_element123.useCallback)( 41834 (fromDate, toDate2) => { 41835 if (!fromDate && !toDate2) { 41836 onChangeCallback(void 0); 41837 return; 41838 } 41839 onChangeCallback([ 41840 formatDate(fromDate), 41841 formatDate(toDate2) 41842 ]); 41843 }, 41844 [onChangeCallback] 41845 ); 41846 const onSelectCalendarRange = (0, import_element123.useCallback)( 41847 (newRange) => { 41848 updateDateRange(newRange?.from, newRange?.to); 41849 setSelectedPresetId(null); 41850 setIsTouched(true); 41851 }, 41852 [updateDateRange] 41853 ); 41854 const handlePresetClick = (0, import_element123.useCallback)( 41855 (preset) => { 41856 const [startDate, endDate] = preset.getValue(); 41857 setCalendarMonth(startDate); 41858 updateDateRange(startDate, endDate); 41859 setSelectedPresetId(preset.id); 41860 setIsTouched(true); 41861 }, 41862 [updateDateRange] 41863 ); 41864 const handleManualDateChange = (0, import_element123.useCallback)( 41865 (fromOrTo, newValue) => { 41866 const [currentFrom, currentTo] = value || [ 41867 void 0, 41868 void 0 41869 ]; 41870 const updatedFrom = fromOrTo === "from" ? newValue : currentFrom; 41871 const updatedTo = fromOrTo === "to" ? newValue : currentTo; 41872 updateDateRange(updatedFrom, updatedTo); 41873 if (newValue) { 41874 const parsedDate = parseDate2(newValue); 41875 if (parsedDate) { 41876 setCalendarMonth(parsedDate); 41877 } 41878 } 41879 setSelectedPresetId(null); 41880 setIsTouched(true); 41881 }, 41882 [value, updateDateRange] 41883 ); 41884 let displayLabel = label; 41885 if (field.isValid?.required && !markWhenOptional) { 41886 displayLabel = `$label} (${(0, import_i18n51.__)("Required")})`; 41887 } else if (!field.isValid?.required && markWhenOptional) { 41888 displayLabel = `$label} (${(0, import_i18n51.__)("Optional")})`; 41889 } 41890 return /* @__PURE__ */ (0, import_jsx_runtime175.jsx)( 41891 ValidatedDateControl, 41892 { 41893 field, 41894 validity, 41895 inputRefs: [fromInputRef, toInputRef], 41896 isTouched, 41897 setIsTouched, 41898 children: /* @__PURE__ */ (0, import_jsx_runtime175.jsx)( 41899 import_components41.BaseControl, 41900 { 41901 id, 41902 className: "dataviews-controls__date", 41903 label: displayLabel, 41904 help: description, 41905 hideLabelFromVision, 41906 children: /* @__PURE__ */ (0, import_jsx_runtime175.jsxs)(Stack, { direction: "column", gap: "lg", children: [ 41907 /* @__PURE__ */ (0, import_jsx_runtime175.jsxs)( 41908 Stack, 41909 { 41910 direction: "row", 41911 gap: "sm", 41912 wrap: "wrap", 41913 justify: "flex-start", 41914 children: [ 41915 DATE_RANGE_PRESETS.map((preset) => { 41916 const isSelected2 = selectedPresetId === preset.id; 41917 return /* @__PURE__ */ (0, import_jsx_runtime175.jsx)( 41918 import_components41.Button, 41919 { 41920 className: "dataviews-controls__date-preset", 41921 variant: "tertiary", 41922 isPressed: isSelected2, 41923 size: "small", 41924 disabled: disabled2, 41925 accessibleWhenDisabled: true, 41926 onClick: () => handlePresetClick(preset), 41927 children: preset.label 41928 }, 41929 preset.id 41930 ); 41931 }), 41932 /* @__PURE__ */ (0, import_jsx_runtime175.jsx)( 41933 import_components41.Button, 41934 { 41935 className: "dataviews-controls__date-preset", 41936 variant: "tertiary", 41937 isPressed: !selectedPresetId, 41938 size: "small", 41939 accessibleWhenDisabled: true, 41940 disabled: !!selectedPresetId || disabled2, 41941 children: (0, import_i18n51.__)("Custom") 41942 } 41943 ) 41944 ] 41945 } 41946 ), 41947 /* @__PURE__ */ (0, import_jsx_runtime175.jsxs)( 41948 Stack, 41949 { 41950 direction: "row", 41951 gap: "sm", 41952 justify: "space-between", 41953 className: "dataviews-controls__date-range-inputs", 41954 children: [ 41955 /* @__PURE__ */ (0, import_jsx_runtime175.jsx)( 41956 import_components41.__experimentalInputControl, 41957 { 41958 ref: fromInputRef, 41959 type: "date", 41960 label: (0, import_i18n51.__)("From"), 41961 hideLabelFromVision: true, 41962 value: value?.[0], 41963 onChange: (newValue) => handleManualDateChange("from", newValue), 41964 required: !!field.isValid?.required, 41965 disabled: disabled2, 41966 min: minConstraint, 41967 max: maxConstraint 41968 } 41969 ), 41970 /* @__PURE__ */ (0, import_jsx_runtime175.jsx)( 41971 import_components41.__experimentalInputControl, 41972 { 41973 ref: toInputRef, 41974 type: "date", 41975 label: (0, import_i18n51.__)("To"), 41976 hideLabelFromVision: true, 41977 value: value?.[1], 41978 onChange: (newValue) => handleManualDateChange("to", newValue), 41979 required: !!field.isValid?.required, 41980 disabled: disabled2, 41981 min: minConstraint, 41982 max: maxConstraint 41983 } 41984 ) 41985 ] 41986 } 41987 ), 41988 /* @__PURE__ */ (0, import_jsx_runtime175.jsx)( 41989 RangeCalendar, 41990 { 41991 style: { width: "100%" }, 41992 value: selectedRange, 41993 onValueChange: onSelectCalendarRange, 41994 month: calendarMonth, 41995 onMonthChange: setCalendarMonth, 41996 locale, 41997 dir: (0, import_i18n51.isRTL)() ? "rtl" : "ltr", 41998 weekStartsOn, 41999 disabled: disabled2 || disabledMatchers 42000 } 42001 ) 42002 ] }) 42003 } 42004 ) 42005 } 42006 ); 42007 } 42008 function DateControl({ 42009 data, 42010 field, 42011 onChange, 42012 hideLabelFromVision, 42013 markWhenOptional, 42014 operator, 42015 validity 42016 }) { 42017 if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) { 42018 return /* @__PURE__ */ (0, import_jsx_runtime175.jsx)( 42019 RelativeDateControl, 42020 { 42021 className: "dataviews-controls__date", 42022 data, 42023 field, 42024 onChange, 42025 hideLabelFromVision, 42026 operator 42027 } 42028 ); 42029 } 42030 if (operator === OPERATOR_BETWEEN) { 42031 return /* @__PURE__ */ (0, import_jsx_runtime175.jsx)( 42032 CalendarDateRangeControl, 42033 { 42034 data, 42035 field, 42036 onChange, 42037 hideLabelFromVision, 42038 markWhenOptional, 42039 validity 42040 } 42041 ); 42042 } 42043 return /* @__PURE__ */ (0, import_jsx_runtime175.jsx)( 42044 CalendarDateControl, 42045 { 42046 data, 42047 field, 42048 onChange, 42049 hideLabelFromVision, 42050 markWhenOptional, 42051 validity 42052 } 42053 ); 42054 } 42055 42056 // packages/dataviews/build-module/components/dataform-controls/select.mjs 42057 var import_components42 = __toESM(require_components(), 1); 42058 var import_element124 = __toESM(require_element(), 1); 42059 var import_jsx_runtime176 = __toESM(require_jsx_runtime(), 1); 42060 function Select2({ 42061 data, 42062 field, 42063 onChange, 42064 hideLabelFromVision, 42065 markWhenOptional, 42066 validity 42067 }) { 42068 const { type, label, description, getValue, setValue, isValid: isValid2 } = field; 42069 const disabled2 = field.isDisabled({ item: data, field }); 42070 const isMultiple = type === "array"; 42071 const value = getValue({ item: data }) ?? (isMultiple ? [] : ""); 42072 const onChangeControl = (0, import_element124.useCallback)( 42073 (newValue) => onChange(setValue({ item: data, value: newValue })), 42074 [data, onChange, setValue] 42075 ); 42076 const { elements, isLoading } = useElements({ 42077 elements: field.elements, 42078 getElements: field.getElements 42079 }); 42080 if (isLoading) { 42081 return /* @__PURE__ */ (0, import_jsx_runtime176.jsx)(import_components42.Spinner, {}); 42082 } 42083 return /* @__PURE__ */ (0, import_jsx_runtime176.jsx)( 42084 ValidatedSelectControl, 42085 { 42086 required: !!field.isValid?.required, 42087 markWhenOptional, 42088 customValidity: getCustomValidity(isValid2, validity), 42089 label, 42090 value, 42091 help: description, 42092 options: elements, 42093 onChange: onChangeControl, 42094 hideLabelFromVision, 42095 multiple: isMultiple, 42096 disabled: disabled2 42097 } 42098 ); 42099 } 42100 42101 // packages/dataviews/build-module/components/dataform-controls/adaptive-select.mjs 42102 var import_jsx_runtime177 = __toESM(require_jsx_runtime(), 1); 42103 var ELEMENTS_THRESHOLD = 10; 42104 function AdaptiveSelect(props) { 42105 const { field } = props; 42106 const { elements } = useElements({ 42107 elements: field.elements, 42108 getElements: field.getElements 42109 }); 42110 if (elements.length >= ELEMENTS_THRESHOLD) { 42111 return /* @__PURE__ */ (0, import_jsx_runtime177.jsx)(Combobox3, { ...props }); 42112 } 42113 return /* @__PURE__ */ (0, import_jsx_runtime177.jsx)(Select2, { ...props }); 42114 } 42115 42116 // packages/dataviews/build-module/components/dataform-controls/utils/validated-input.mjs 42117 var import_element125 = __toESM(require_element(), 1); 42118 var import_jsx_runtime178 = __toESM(require_jsx_runtime(), 1); 42119 function ValidatedText({ 42120 data, 42121 field, 42122 onChange, 42123 hideLabelFromVision, 42124 markWhenOptional, 42125 type, 42126 prefix, 42127 suffix, 42128 validity 42129 }) { 42130 const { label, placeholder, description, getValue, setValue, isValid: isValid2 } = field; 42131 const value = getValue({ item: data }); 42132 const disabled2 = field.isDisabled({ item: data, field }); 42133 const onValueChangeControl = (0, import_element125.useCallback)( 42134 (newValue) => onChange( 42135 setValue({ 42136 item: data, 42137 value: newValue 42138 }) 42139 ), 42140 [data, setValue, onChange] 42141 ); 42142 return /* @__PURE__ */ (0, import_jsx_runtime178.jsx)( 42143 ValidatedInputControl, 42144 { 42145 required: !!isValid2.required, 42146 markWhenOptional, 42147 customValidity: getCustomValidity(isValid2, validity), 42148 label, 42149 placeholder, 42150 value: value ?? "", 42151 description: typeof description === "string" ? description : void 0, 42152 details: typeof description === "string" ? void 0 : description, 42153 onValueChange: onValueChangeControl, 42154 hideLabelFromVision, 42155 type, 42156 prefix, 42157 suffix, 42158 disabled: disabled2, 42159 pattern: isValid2.pattern ? isValid2.pattern.constraint : void 0, 42160 minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0, 42161 maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0 42162 } 42163 ); 42164 } 42165 42166 // packages/dataviews/build-module/components/dataform-controls/email.mjs 42167 var import_jsx_runtime179 = __toESM(require_jsx_runtime(), 1); 42168 function Email({ 42169 data, 42170 field, 42171 onChange, 42172 hideLabelFromVision, 42173 markWhenOptional, 42174 validity 42175 }) { 42176 return /* @__PURE__ */ (0, import_jsx_runtime179.jsx)( 42177 ValidatedText, 42178 { 42179 ...{ 42180 data, 42181 field, 42182 onChange, 42183 hideLabelFromVision, 42184 markWhenOptional, 42185 validity, 42186 type: "email", 42187 prefix: /* @__PURE__ */ (0, import_jsx_runtime179.jsx)(InputLayout3.Slot, { padding: "minimal", children: /* @__PURE__ */ (0, import_jsx_runtime179.jsx)(Icon, { icon: envelope_default }) }) 42188 } 42189 } 42190 ); 42191 } 42192 42193 // packages/dataviews/build-module/components/dataform-controls/telephone.mjs 42194 var import_jsx_runtime180 = __toESM(require_jsx_runtime(), 1); 42195 function Telephone({ 42196 data, 42197 field, 42198 onChange, 42199 hideLabelFromVision, 42200 markWhenOptional, 42201 validity 42202 }) { 42203 return /* @__PURE__ */ (0, import_jsx_runtime180.jsx)( 42204 ValidatedText, 42205 { 42206 ...{ 42207 data, 42208 field, 42209 onChange, 42210 hideLabelFromVision, 42211 markWhenOptional, 42212 validity, 42213 type: "tel", 42214 prefix: /* @__PURE__ */ (0, import_jsx_runtime180.jsx)(InputLayout3.Slot, { padding: "minimal", children: /* @__PURE__ */ (0, import_jsx_runtime180.jsx)(Icon, { icon: mobile_default }) }) 42215 } 42216 } 42217 ); 42218 } 42219 42220 // packages/dataviews/build-module/components/dataform-controls/url.mjs 42221 var import_jsx_runtime181 = __toESM(require_jsx_runtime(), 1); 42222 function Url({ 42223 data, 42224 field, 42225 onChange, 42226 hideLabelFromVision, 42227 markWhenOptional, 42228 validity 42229 }) { 42230 return /* @__PURE__ */ (0, import_jsx_runtime181.jsx)( 42231 ValidatedText, 42232 { 42233 ...{ 42234 data, 42235 field, 42236 onChange, 42237 hideLabelFromVision, 42238 markWhenOptional, 42239 validity, 42240 type: "url", 42241 prefix: /* @__PURE__ */ (0, import_jsx_runtime181.jsx)(InputLayout3.Slot, { padding: "minimal", children: /* @__PURE__ */ (0, import_jsx_runtime181.jsx)(Icon, { icon: link_default }) }) 42242 } 42243 } 42244 ); 42245 } 42246 42247 // packages/dataviews/build-module/components/dataform-controls/utils/validated-number.mjs 42248 var import_components43 = __toESM(require_components(), 1); 42249 var import_element126 = __toESM(require_element(), 1); 42250 var import_i18n52 = __toESM(require_i18n(), 1); 42251 var import_jsx_runtime182 = __toESM(require_jsx_runtime(), 1); 42252 function toNumberOrEmpty(value) { 42253 if (value === "" || value === void 0) { 42254 return ""; 42255 } 42256 const number = Number(value); 42257 return Number.isFinite(number) ? number : ""; 42258 } 42259 function BetweenControls({ 42260 value, 42261 onChange, 42262 hideLabelFromVision, 42263 step 42264 }) { 42265 const [min3 = "", max3 = ""] = value; 42266 const onChangeMin = (0, import_element126.useCallback)( 42267 (newValue) => onChange([toNumberOrEmpty(newValue), max3]), 42268 [onChange, max3] 42269 ); 42270 const onChangeMax = (0, import_element126.useCallback)( 42271 (newValue) => onChange([min3, toNumberOrEmpty(newValue)]), 42272 [onChange, min3] 42273 ); 42274 return /* @__PURE__ */ (0, import_jsx_runtime182.jsx)( 42275 import_components43.BaseControl, 42276 { 42277 help: (0, import_i18n52.__)("The max. value must be greater than the min. value."), 42278 children: /* @__PURE__ */ (0, import_jsx_runtime182.jsxs)(import_components43.Flex, { direction: "row", gap: 4, children: [ 42279 /* @__PURE__ */ (0, import_jsx_runtime182.jsx)( 42280 import_components43.__experimentalNumberControl, 42281 { 42282 label: (0, import_i18n52.__)("Min."), 42283 value: min3, 42284 max: max3 ? Number(max3) - step : void 0, 42285 onChange: onChangeMin, 42286 hideLabelFromVision, 42287 step 42288 } 42289 ), 42290 /* @__PURE__ */ (0, import_jsx_runtime182.jsx)( 42291 import_components43.__experimentalNumberControl, 42292 { 42293 label: (0, import_i18n52.__)("Max."), 42294 value: max3, 42295 min: min3 ? Number(min3) + step : void 0, 42296 onChange: onChangeMax, 42297 hideLabelFromVision, 42298 step 42299 } 42300 ) 42301 ] }) 42302 } 42303 ); 42304 } 42305 function ValidatedNumber({ 42306 data, 42307 field, 42308 onChange, 42309 hideLabelFromVision, 42310 markWhenOptional, 42311 operator, 42312 validity 42313 }) { 42314 const decimals = field.format?.decimals ?? 0; 42315 const step = Math.pow(10, Math.abs(decimals) * -1); 42316 const { label, description, getValue, setValue, isValid: isValid2 } = field; 42317 const value = getValue({ item: data }) ?? ""; 42318 const disabled2 = field.isDisabled({ item: data, field }); 42319 const onChangeControl = (0, import_element126.useCallback)( 42320 (newValue) => { 42321 onChange( 42322 setValue({ 42323 item: data, 42324 // Do not convert an empty string or undefined to a number, 42325 // otherwise there's a mismatch between the UI control (empty) 42326 // and the data relied by onChange (0). 42327 value: ["", void 0].includes(newValue) ? void 0 : Number(newValue) 42328 }) 42329 ); 42330 }, 42331 [data, onChange, setValue] 42332 ); 42333 const onChangeBetweenControls = (0, import_element126.useCallback)( 42334 (newValue) => { 42335 onChange( 42336 setValue({ 42337 item: data, 42338 value: newValue 42339 }) 42340 ); 42341 }, 42342 [data, onChange, setValue] 42343 ); 42344 if (operator === OPERATOR_BETWEEN) { 42345 let valueBetween = ["", ""]; 42346 if (Array.isArray(value) && value.length === 2 && value.every( 42347 (element) => typeof element === "number" || element === "" 42348 )) { 42349 valueBetween = value; 42350 } 42351 return /* @__PURE__ */ (0, import_jsx_runtime182.jsx)( 42352 BetweenControls, 42353 { 42354 value: valueBetween, 42355 onChange: onChangeBetweenControls, 42356 hideLabelFromVision, 42357 step 42358 } 42359 ); 42360 } 42361 return /* @__PURE__ */ (0, import_jsx_runtime182.jsx)( 42362 ValidatedNumberControl, 42363 { 42364 required: !!isValid2.required, 42365 markWhenOptional, 42366 customValidity: getCustomValidity(isValid2, validity), 42367 label, 42368 help: description, 42369 value, 42370 onChange: onChangeControl, 42371 hideLabelFromVision, 42372 step, 42373 min: typeof isValid2.min?.constraint === "number" ? isValid2.min.constraint : void 0, 42374 max: typeof isValid2.max?.constraint === "number" ? isValid2.max.constraint : void 0, 42375 disabled: disabled2 42376 } 42377 ); 42378 } 42379 42380 // packages/dataviews/build-module/components/dataform-controls/integer.mjs 42381 var import_jsx_runtime183 = __toESM(require_jsx_runtime(), 1); 42382 function Integer(props) { 42383 return /* @__PURE__ */ (0, import_jsx_runtime183.jsx)(ValidatedNumber, { ...props }); 42384 } 42385 42386 // packages/dataviews/build-module/components/dataform-controls/number.mjs 42387 var import_jsx_runtime184 = __toESM(require_jsx_runtime(), 1); 42388 function Number2(props) { 42389 return /* @__PURE__ */ (0, import_jsx_runtime184.jsx)(ValidatedNumber, { ...props }); 42390 } 42391 42392 // packages/dataviews/build-module/components/dataform-controls/radio.mjs 42393 var import_components44 = __toESM(require_components(), 1); 42394 var import_element127 = __toESM(require_element(), 1); 42395 var import_jsx_runtime185 = __toESM(require_jsx_runtime(), 1); 42396 function Radio({ 42397 data, 42398 field, 42399 onChange, 42400 hideLabelFromVision, 42401 markWhenOptional, 42402 validity 42403 }) { 42404 const { label, description, getValue, setValue, isValid: isValid2 } = field; 42405 const disabled2 = field.isDisabled({ item: data, field }); 42406 const { elements, isLoading } = useElements({ 42407 elements: field.elements, 42408 getElements: field.getElements 42409 }); 42410 const value = getValue({ item: data }); 42411 const onChangeControl = (0, import_element127.useCallback)( 42412 (newValue) => onChange(setValue({ item: data, value: newValue })), 42413 [data, onChange, setValue] 42414 ); 42415 if (isLoading) { 42416 return /* @__PURE__ */ (0, import_jsx_runtime185.jsx)(import_components44.Spinner, {}); 42417 } 42418 return /* @__PURE__ */ (0, import_jsx_runtime185.jsx)( 42419 ValidatedRadioControl, 42420 { 42421 required: !!field.isValid?.required, 42422 markWhenOptional, 42423 customValidity: getCustomValidity(isValid2, validity), 42424 label, 42425 help: description, 42426 onChange: onChangeControl, 42427 options: elements, 42428 selected: value, 42429 hideLabelFromVision, 42430 disabled: disabled2 42431 } 42432 ); 42433 } 42434 42435 // packages/dataviews/build-module/components/dataform-controls/text.mjs 42436 var import_element128 = __toESM(require_element(), 1); 42437 var import_jsx_runtime186 = __toESM(require_jsx_runtime(), 1); 42438 function Text3({ 42439 data, 42440 field, 42441 onChange, 42442 hideLabelFromVision, 42443 markWhenOptional, 42444 config, 42445 validity 42446 }) { 42447 const { prefix, suffix } = config || {}; 42448 return /* @__PURE__ */ (0, import_jsx_runtime186.jsx)( 42449 ValidatedText, 42450 { 42451 ...{ 42452 data, 42453 field, 42454 onChange, 42455 hideLabelFromVision, 42456 markWhenOptional, 42457 validity, 42458 prefix: prefix ? (0, import_element128.createElement)(prefix) : void 0, 42459 suffix: suffix ? (0, import_element128.createElement)(suffix) : void 0 42460 } 42461 } 42462 ); 42463 } 42464 42465 // packages/dataviews/build-module/components/dataform-controls/time.mjs 42466 var import_components45 = __toESM(require_components(), 1); 42467 var import_element129 = __toESM(require_element(), 1); 42468 var import_i18n53 = __toESM(require_i18n(), 1); 42469 var import_jsx_runtime187 = __toESM(require_jsx_runtime(), 1); 42470 function getStep(timeFormat, values) { 42471 const tokens = (timeFormat ?? "").replace(/\\./g, ""); 42472 const hasSeconds = tokens.includes("s") || values.some((value) => (parseTime2(value) ?? 0) % 60 !== 0); 42473 return hasSeconds ? 1 : void 0; 42474 } 42475 function toInputValue(value) { 42476 const seconds = parseTime2(value); 42477 if (seconds === null) { 42478 return ""; 42479 } 42480 const parts = [ 42481 Math.floor(seconds / 3600), 42482 Math.floor(seconds % 3600 / 60) 42483 ]; 42484 if (seconds % 60 !== 0) { 42485 parts.push(seconds % 60); 42486 } 42487 return parts.map((part) => String(part).padStart(2, "0")).join(":"); 42488 } 42489 function BetweenControls2({ 42490 value, 42491 onChange, 42492 hideLabelFromVision, 42493 disabled: disabled2, 42494 step, 42495 min: min3, 42496 max: max3 42497 }) { 42498 const [from = "", to = ""] = value; 42499 const onChangeFrom = (0, import_element129.useCallback)( 42500 (newValue) => onChange([newValue ?? "", to]), 42501 [onChange, to] 42502 ); 42503 const onChangeTo = (0, import_element129.useCallback)( 42504 (newValue) => onChange([from, newValue ?? ""]), 42505 [onChange, from] 42506 ); 42507 return /* @__PURE__ */ (0, import_jsx_runtime187.jsx)( 42508 import_components45.BaseControl, 42509 { 42510 help: (0, import_i18n53.__)("The end time must be later than the start time."), 42511 children: /* @__PURE__ */ (0, import_jsx_runtime187.jsxs)(Stack, { direction: "row", gap: "sm", justify: "space-between", children: [ 42512 /* @__PURE__ */ (0, import_jsx_runtime187.jsx)( 42513 ValidatedInputControl, 42514 { 42515 type: "time", 42516 label: (0, import_i18n53.__)("From"), 42517 value: from, 42518 onValueChange: onChangeFrom, 42519 hideLabelFromVision, 42520 disabled: disabled2, 42521 step, 42522 min: min3, 42523 max: to || max3 42524 } 42525 ), 42526 /* @__PURE__ */ (0, import_jsx_runtime187.jsx)( 42527 ValidatedInputControl, 42528 { 42529 type: "time", 42530 label: (0, import_i18n53.__)("To"), 42531 value: to, 42532 onValueChange: onChangeTo, 42533 hideLabelFromVision, 42534 disabled: disabled2, 42535 step, 42536 min: from || min3, 42537 max: max3 42538 } 42539 ) 42540 ] }) 42541 } 42542 ); 42543 } 42544 function Time({ 42545 data, 42546 field, 42547 onChange, 42548 hideLabelFromVision, 42549 markWhenOptional, 42550 operator, 42551 validity 42552 }) { 42553 const { label, placeholder, description, getValue, setValue, isValid: isValid2 } = field; 42554 const value = getValue({ item: data }); 42555 const disabled2 = field.isDisabled({ item: data, field }); 42556 const timeFormat = field.format?.time; 42557 const min3 = typeof isValid2.min?.constraint === "string" ? isValid2.min.constraint : void 0; 42558 const max3 = typeof isValid2.max?.constraint === "string" ? isValid2.max.constraint : void 0; 42559 const onChangeControl = (0, import_element129.useCallback)( 42560 (newValue) => onChange( 42561 setValue({ 42562 item: data, 42563 value: newValue === "" ? void 0 : newValue 42564 }) 42565 ), 42566 [data, onChange, setValue] 42567 ); 42568 const onChangeBetweenControls = (0, import_element129.useCallback)( 42569 ([from, to]) => onChange( 42570 setValue({ 42571 item: data, 42572 // An unfilled bound is stored as `undefined`, which the 42573 // `between` operator reads as "do not apply the filter". 42574 value: [from || void 0, to || void 0] 42575 }) 42576 ), 42577 [data, onChange, setValue] 42578 ); 42579 if (operator === OPERATOR_BETWEEN) { 42580 let valueBetween = ["", ""]; 42581 if (Array.isArray(value) && value.length === 2) { 42582 valueBetween = [ 42583 toInputValue(value[0]), 42584 toInputValue(value[1]) 42585 ]; 42586 } 42587 return /* @__PURE__ */ (0, import_jsx_runtime187.jsx)( 42588 BetweenControls2, 42589 { 42590 value: valueBetween, 42591 onChange: onChangeBetweenControls, 42592 hideLabelFromVision, 42593 disabled: disabled2, 42594 step: getStep(timeFormat, valueBetween), 42595 min: min3, 42596 max: max3 42597 } 42598 ); 42599 } 42600 return /* @__PURE__ */ (0, import_jsx_runtime187.jsx)( 42601 ValidatedInputControl, 42602 { 42603 required: !!isValid2.required, 42604 markWhenOptional, 42605 customValidity: getCustomValidity(isValid2, validity), 42606 type: "time", 42607 label, 42608 placeholder, 42609 description: typeof description === "string" ? description : void 0, 42610 details: typeof description === "string" ? void 0 : description, 42611 value: toInputValue(value), 42612 onValueChange: onChangeControl, 42613 hideLabelFromVision, 42614 disabled: disabled2, 42615 step: getStep(timeFormat, [value]), 42616 min: min3, 42617 max: max3 42618 } 42619 ); 42620 } 42621 42622 // packages/dataviews/build-module/components/dataform-controls/toggle.mjs 42623 var import_element130 = __toESM(require_element(), 1); 42624 var import_jsx_runtime188 = __toESM(require_jsx_runtime(), 1); 42625 function Toggle({ 42626 field, 42627 onChange, 42628 data, 42629 hideLabelFromVision, 42630 markWhenOptional, 42631 validity 42632 }) { 42633 const { label, description, getValue, setValue, isValid: isValid2 } = field; 42634 const disabled2 = field.isDisabled({ item: data, field }); 42635 const onChangeControl = (0, import_element130.useCallback)(() => { 42636 onChange( 42637 setValue({ item: data, value: !getValue({ item: data }) }) 42638 ); 42639 }, [onChange, setValue, data, getValue]); 42640 return /* @__PURE__ */ (0, import_jsx_runtime188.jsx)( 42641 ValidatedToggleControl, 42642 { 42643 required: !!isValid2.required, 42644 markWhenOptional, 42645 customValidity: getCustomValidity(isValid2, validity), 42646 hidden: hideLabelFromVision, 42647 label, 42648 help: description, 42649 checked: getValue({ item: data }), 42650 onChange: onChangeControl, 42651 disabled: disabled2 42652 } 42653 ); 42654 } 42655 42656 // packages/dataviews/build-module/components/dataform-controls/textarea.mjs 42657 var import_element131 = __toESM(require_element(), 1); 42658 var import_jsx_runtime189 = __toESM(require_jsx_runtime(), 1); 42659 function Textarea3({ 42660 data, 42661 field, 42662 onChange, 42663 hideLabelFromVision, 42664 markWhenOptional, 42665 config, 42666 validity 42667 }) { 42668 const { rows = 4 } = config || {}; 42669 const disabled2 = field.isDisabled({ item: data, field }); 42670 const { label, placeholder, description, setValue, isValid: isValid2 } = field; 42671 const value = field.getValue({ item: data }); 42672 const onValueChangeControl = (0, import_element131.useCallback)( 42673 (newValue) => onChange(setValue({ item: data, value: newValue })), 42674 [data, onChange, setValue] 42675 ); 42676 return /* @__PURE__ */ (0, import_jsx_runtime189.jsx)( 42677 ValidatedTextareaControl, 42678 { 42679 required: !!isValid2.required, 42680 markWhenOptional, 42681 customValidity: getCustomValidity(isValid2, validity), 42682 label, 42683 placeholder, 42684 value: value ?? "", 42685 description: typeof description === "string" ? description : void 0, 42686 details: typeof description === "string" ? void 0 : description, 42687 onValueChange: onValueChangeControl, 42688 rows, 42689 disabled: disabled2, 42690 minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0, 42691 maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0, 42692 hideLabelFromVision 42693 } 42694 ); 42695 } 42696 42697 // packages/dataviews/build-module/components/dataform-controls/toggle-group.mjs 42698 var import_components46 = __toESM(require_components(), 1); 42699 var import_element132 = __toESM(require_element(), 1); 42700 var import_jsx_runtime190 = __toESM(require_jsx_runtime(), 1); 42701 function ToggleGroup({ 42702 data, 42703 field, 42704 onChange, 42705 hideLabelFromVision, 42706 markWhenOptional, 42707 validity 42708 }) { 42709 const { getValue, setValue, isValid: isValid2 } = field; 42710 const disabled2 = field.isDisabled({ item: data, field }); 42711 const value = getValue({ item: data }); 42712 const onChangeControl = (0, import_element132.useCallback)( 42713 (newValue) => onChange(setValue({ item: data, value: newValue })), 42714 [data, onChange, setValue] 42715 ); 42716 const { elements, isLoading } = useElements({ 42717 elements: field.elements, 42718 getElements: field.getElements 42719 }); 42720 if (isLoading) { 42721 return /* @__PURE__ */ (0, import_jsx_runtime190.jsx)(import_components46.Spinner, {}); 42722 } 42723 if (elements.length === 0) { 42724 return null; 42725 } 42726 const selectedOption = elements.find((el) => el.value === value); 42727 return /* @__PURE__ */ (0, import_jsx_runtime190.jsx)( 42728 ValidatedToggleGroupControl, 42729 { 42730 required: !!field.isValid?.required, 42731 markWhenOptional, 42732 customValidity: getCustomValidity(isValid2, validity), 42733 isBlock: true, 42734 label: field.label, 42735 help: selectedOption?.description || field.description, 42736 onChange: onChangeControl, 42737 value, 42738 hideLabelFromVision, 42739 children: elements.map((el) => /* @__PURE__ */ (0, import_jsx_runtime190.jsx)( 42740 import_components46.__experimentalToggleGroupControlOption, 42741 { 42742 label: el.label, 42743 value: el.value, 42744 disabled: disabled2 42745 }, 42746 el.value 42747 )) 42748 } 42749 ); 42750 } 42751 42752 // packages/dataviews/build-module/components/dataform-controls/array.mjs 42753 var import_components47 = __toESM(require_components(), 1); 42754 var import_element133 = __toESM(require_element(), 1); 42755 var import_jsx_runtime191 = __toESM(require_jsx_runtime(), 1); 42756 function ArrayControl({ 42757 data, 42758 field, 42759 onChange, 42760 hideLabelFromVision, 42761 markWhenOptional, 42762 validity 42763 }) { 42764 const { label, placeholder, description, getValue, setValue, isValid: isValid2 } = field; 42765 const value = getValue({ item: data }); 42766 const disabled2 = field.isDisabled({ item: data, field }); 42767 const { elements, isLoading } = useElements({ 42768 elements: field.elements, 42769 getElements: field.getElements 42770 }); 42771 const arrayValueAsElements = (0, import_element133.useMemo)( 42772 () => Array.isArray(value) ? value.map((token) => { 42773 const element = elements?.find( 42774 (suggestion) => suggestion.value === token 42775 ); 42776 return element || { value: token, label: token }; 42777 }) : [], 42778 [value, elements] 42779 ); 42780 const onChangeControl = (0, import_element133.useCallback)( 42781 (tokens) => { 42782 const valueTokens = tokens.map((token) => { 42783 if (typeof token === "object" && "value" in token) { 42784 return token.value; 42785 } 42786 return token; 42787 }); 42788 onChange(setValue({ item: data, value: valueTokens })); 42789 }, 42790 [onChange, setValue, data] 42791 ); 42792 if (isLoading) { 42793 return /* @__PURE__ */ (0, import_jsx_runtime191.jsx)(import_components47.Spinner, {}); 42794 } 42795 return /* @__PURE__ */ (0, import_jsx_runtime191.jsx)( 42796 ValidatedFormTokenField, 42797 { 42798 required: !!isValid2?.required, 42799 markWhenOptional, 42800 customValidity: getCustomValidity(isValid2, validity), 42801 label: hideLabelFromVision ? void 0 : label, 42802 value: arrayValueAsElements, 42803 onChange: onChangeControl, 42804 placeholder, 42805 suggestions: elements?.map((element) => element.value), 42806 disabled: disabled2, 42807 __experimentalValidateInput: (token) => { 42808 if (field.isValid?.elements && elements) { 42809 return elements.some( 42810 (element) => element.value === token || element.label === token 42811 ); 42812 } 42813 return true; 42814 }, 42815 __experimentalExpandOnFocus: elements && elements.length > 0, 42816 help: description ?? (field.isValid?.elements ? "" : void 0), 42817 displayTransform: (token) => { 42818 if (typeof token === "object" && "label" in token) { 42819 return token.label; 42820 } 42821 if (typeof token === "string" && elements) { 42822 const element = elements.find( 42823 (el) => el.value === token 42824 ); 42825 return element?.label || token; 42826 } 42827 return token; 42828 }, 42829 __experimentalRenderItem: ({ item }) => { 42830 if (typeof item === "string" && elements) { 42831 const element = elements.find( 42832 (el) => el.value === item 42833 ); 42834 return /* @__PURE__ */ (0, import_jsx_runtime191.jsx)("span", { children: element?.label || item }); 42835 } 42836 return /* @__PURE__ */ (0, import_jsx_runtime191.jsx)("span", { children: item }); 42837 } 42838 } 42839 ); 42840 } 42841 42842 // node_modules/colord/index.mjs 42843 var r2 = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) }; 42844 var t = function(r3) { 42845 return "string" == typeof r3 ? r3.length > 0 : "number" == typeof r3; 42846 }; 42847 var n = function(r3, t2, n2) { 42848 return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = Math.pow(10, t2)), Math.round(n2 * r3) / n2 + 0; 42849 }; 42850 var e = function(r3, t2, n2) { 42851 return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = 1), r3 > n2 ? n2 : r3 > t2 ? r3 : t2; 42852 }; 42853 var u = function(r3) { 42854 return (r3 = isFinite(r3) ? r3 % 360 : 0) > 0 ? r3 : r3 + 360; 42855 }; 42856 var a = function(r3) { 42857 return { r: e(r3.r, 0, 255), g: e(r3.g, 0, 255), b: e(r3.b, 0, 255), a: e(r3.a) }; 42858 }; 42859 var o = function(r3) { 42860 return { r: n(r3.r), g: n(r3.g), b: n(r3.b), a: n(r3.a, 3) }; 42861 }; 42862 var i = /^#([0-9a-f]{3,8})$/i; 42863 var s = function(r3) { 42864 var t2 = r3.toString(16); 42865 return t2.length < 2 ? "0" + t2 : t2; 42866 }; 42867 var h = function(r3) { 42868 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; 42869 return { h: 60 * (i2 < 0 ? i2 + 6 : i2), s: a2 ? o2 / a2 * 100 : 0, v: a2 / 255 * 100, a: u2 }; 42870 }; 42871 var b = function(r3) { 42872 var t2 = r3.h, n2 = r3.s, e2 = r3.v, u2 = r3.a; 42873 t2 = t2 / 360 * 6, n2 /= 100, e2 /= 100; 42874 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; 42875 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 }; 42876 }; 42877 var g = function(r3) { 42878 return { h: u(r3.h), s: e(r3.s, 0, 100), l: e(r3.l, 0, 100), a: e(r3.a) }; 42879 }; 42880 var d = function(r3) { 42881 return { h: n(r3.h), s: n(r3.s), l: n(r3.l), a: n(r3.a, 3) }; 42882 }; 42883 var f = function(r3) { 42884 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 })); 42885 var t2, n2, e2; 42886 }; 42887 var c = function(r3) { 42888 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 }; 42889 var t2, n2, e2, u2; 42890 }; 42891 var l = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; 42892 var p = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; 42893 var v = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; 42894 var m = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i; 42895 var y = { string: [[function(r3) { 42896 var t2 = i.exec(r3); 42897 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; 42898 }, "hex"], [function(r3) { 42899 var t2 = v.exec(r3) || m.exec(r3); 42900 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; 42901 }, "rgb"], [function(t2) { 42902 var n2 = l.exec(t2) || p.exec(t2); 42903 if (!n2) return null; 42904 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) }); 42905 return f(a2); 42906 }, "hsl"]], object: [[function(r3) { 42907 var n2 = r3.r, e2 = r3.g, u2 = r3.b, o2 = r3.a, i2 = void 0 === o2 ? 1 : o2; 42908 return t(n2) && t(e2) && t(u2) ? a({ r: Number(n2), g: Number(e2), b: Number(u2), a: Number(i2) }) : null; 42909 }, "rgb"], [function(r3) { 42910 var n2 = r3.h, e2 = r3.s, u2 = r3.l, a2 = r3.a, o2 = void 0 === a2 ? 1 : a2; 42911 if (!t(n2) || !t(e2) || !t(u2)) return null; 42912 var i2 = g({ h: Number(n2), s: Number(e2), l: Number(u2), a: Number(o2) }); 42913 return f(i2); 42914 }, "hsl"], [function(r3) { 42915 var n2 = r3.h, a2 = r3.s, o2 = r3.v, i2 = r3.a, s2 = void 0 === i2 ? 1 : i2; 42916 if (!t(n2) || !t(a2) || !t(o2)) return null; 42917 var h2 = (function(r4) { 42918 return { h: u(r4.h), s: e(r4.s, 0, 100), v: e(r4.v, 0, 100), a: e(r4.a) }; 42919 })({ h: Number(n2), s: Number(a2), v: Number(o2), a: Number(s2) }); 42920 return b(h2); 42921 }, "hsv"]] }; 42922 var N = function(r3, t2) { 42923 for (var n2 = 0; n2 < t2.length; n2++) { 42924 var e2 = t2[n2][0](r3); 42925 if (e2) return [e2, t2[n2][1]]; 42926 } 42927 return [null, void 0]; 42928 }; 42929 var x = function(r3) { 42930 return "string" == typeof r3 ? N(r3.trim(), y.string) : "object" == typeof r3 && null !== r3 ? N(r3, y.object) : [null, void 0]; 42931 }; 42932 var M = function(r3, t2) { 42933 var n2 = c(r3); 42934 return { h: n2.h, s: e(n2.s + 100 * t2, 0, 100), l: n2.l, a: n2.a }; 42935 }; 42936 var H = function(r3) { 42937 return (299 * r3.r + 587 * r3.g + 114 * r3.b) / 1e3 / 255; 42938 }; 42939 var $ = function(r3, t2) { 42940 var n2 = c(r3); 42941 return { h: n2.h, s: n2.s, l: e(n2.l + 100 * t2, 0, 100), a: n2.a }; 42942 }; 42943 var j = (function() { 42944 function r3(r4) { 42945 this.parsed = x(r4)[0], this.rgba = this.parsed || { r: 0, g: 0, b: 0, a: 1 }; 42946 } 42947 return r3.prototype.isValid = function() { 42948 return null !== this.parsed; 42949 }, r3.prototype.brightness = function() { 42950 return n(H(this.rgba), 2); 42951 }, r3.prototype.isDark = function() { 42952 return H(this.rgba) < 0.5; 42953 }, r3.prototype.isLight = function() { 42954 return H(this.rgba) >= 0.5; 42955 }, r3.prototype.toHex = function() { 42956 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; 42957 var r4, t2, e2, u2, a2, i2; 42958 }, r3.prototype.toRgb = function() { 42959 return o(this.rgba); 42960 }, r3.prototype.toRgbString = function() { 42961 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 + ")"; 42962 var r4, t2, n2, e2, u2; 42963 }, r3.prototype.toHsl = function() { 42964 return d(c(this.rgba)); 42965 }, r3.prototype.toHslString = function() { 42966 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 + "%)"; 42967 var r4, t2, n2, e2, u2; 42968 }, r3.prototype.toHsv = function() { 42969 return r4 = h(this.rgba), { h: n(r4.h), s: n(r4.s), v: n(r4.v), a: n(r4.a, 3) }; 42970 var r4; 42971 }, r3.prototype.invert = function() { 42972 return w({ r: 255 - (r4 = this.rgba).r, g: 255 - r4.g, b: 255 - r4.b, a: r4.a }); 42973 var r4; 42974 }, r3.prototype.saturate = function(r4) { 42975 return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, r4)); 42976 }, r3.prototype.desaturate = function(r4) { 42977 return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, -r4)); 42978 }, r3.prototype.grayscale = function() { 42979 return w(M(this.rgba, -1)); 42980 }, r3.prototype.lighten = function(r4) { 42981 return void 0 === r4 && (r4 = 0.1), w($(this.rgba, r4)); 42982 }, r3.prototype.darken = function(r4) { 42983 return void 0 === r4 && (r4 = 0.1), w($(this.rgba, -r4)); 42984 }, r3.prototype.rotate = function(r4) { 42985 return void 0 === r4 && (r4 = 15), this.hue(this.hue() + r4); 42986 }, r3.prototype.alpha = function(r4) { 42987 return "number" == typeof r4 ? w({ r: (t2 = this.rgba).r, g: t2.g, b: t2.b, a: r4 }) : n(this.rgba.a, 3); 42988 var t2; 42989 }, r3.prototype.hue = function(r4) { 42990 var t2 = c(this.rgba); 42991 return "number" == typeof r4 ? w({ h: r4, s: t2.s, l: t2.l, a: t2.a }) : n(t2.h); 42992 }, r3.prototype.isEqual = function(r4) { 42993 return this.toHex() === w(r4).toHex(); 42994 }, r3; 42995 })(); 42996 var w = function(r3) { 42997 return r3 instanceof j ? r3 : new j(r3); 42998 }; 42999 43000 // packages/dataviews/build-module/components/dataform-controls/color.mjs 43001 var import_components48 = __toESM(require_components(), 1); 43002 var import_element134 = __toESM(require_element(), 1); 43003 var import_i18n54 = __toESM(require_i18n(), 1); 43004 var import_jsx_runtime192 = __toESM(require_jsx_runtime(), 1); 43005 var ColorPickerDropdown = ({ 43006 color, 43007 onColorChange, 43008 disabled: disabled2 43009 }) => { 43010 const validColor = color && w(color).isValid() ? color : "#ffffff"; 43011 return /* @__PURE__ */ (0, import_jsx_runtime192.jsx)( 43012 import_components48.Dropdown, 43013 { 43014 className: "dataviews-controls__color-picker-dropdown", 43015 popoverProps: { resize: false }, 43016 renderToggle: ({ onToggle }) => /* @__PURE__ */ (0, import_jsx_runtime192.jsx)( 43017 import_components48.Button, 43018 { 43019 onClick: onToggle, 43020 "aria-label": (0, import_i18n54.__)("Open color picker"), 43021 size: "small", 43022 disabled: disabled2, 43023 accessibleWhenDisabled: true, 43024 icon: () => /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_components48.ColorIndicator, { colorValue: validColor }) 43025 } 43026 ), 43027 renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_components48.__experimentalDropdownContentWrapper, { paddingSize: "none", children: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)( 43028 import_components48.ColorPicker, 43029 { 43030 color: validColor, 43031 onChange: onColorChange, 43032 enableAlpha: true 43033 } 43034 ) }) 43035 } 43036 ); 43037 }; 43038 function Color({ 43039 data, 43040 field, 43041 onChange, 43042 hideLabelFromVision, 43043 markWhenOptional, 43044 validity 43045 }) { 43046 const { label, placeholder, description, setValue, isValid: isValid2 } = field; 43047 const disabled2 = field.isDisabled({ item: data, field }); 43048 const value = field.getValue({ item: data }) || ""; 43049 const handleColorChange = (0, import_element134.useCallback)( 43050 (newColor) => { 43051 onChange(setValue({ item: data, value: newColor })); 43052 }, 43053 [data, onChange, setValue] 43054 ); 43055 const handleInputChange = (0, import_element134.useCallback)( 43056 (newValue) => { 43057 onChange(setValue({ item: data, value: newValue || "" })); 43058 }, 43059 [data, onChange, setValue] 43060 ); 43061 return /* @__PURE__ */ (0, import_jsx_runtime192.jsx)( 43062 ValidatedInputControl, 43063 { 43064 required: !!field.isValid?.required, 43065 markWhenOptional, 43066 customValidity: getCustomValidity(isValid2, validity), 43067 label, 43068 placeholder, 43069 value, 43070 description: typeof description === "string" ? description : void 0, 43071 details: typeof description === "string" ? void 0 : description, 43072 onValueChange: handleInputChange, 43073 hideLabelFromVision, 43074 type: "text", 43075 disabled: disabled2, 43076 prefix: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(InputLayout3.Slot, { padding: "minimal", children: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)( 43077 ColorPickerDropdown, 43078 { 43079 color: value, 43080 onColorChange: handleColorChange, 43081 disabled: disabled2 43082 } 43083 ) }) 43084 } 43085 ); 43086 } 43087 43088 // packages/dataviews/build-module/components/dataform-controls/password.mjs 43089 var import_components49 = __toESM(require_components(), 1); 43090 var import_element135 = __toESM(require_element(), 1); 43091 var import_i18n55 = __toESM(require_i18n(), 1); 43092 var import_jsx_runtime193 = __toESM(require_jsx_runtime(), 1); 43093 function Password({ 43094 data, 43095 field, 43096 onChange, 43097 hideLabelFromVision, 43098 markWhenOptional, 43099 validity 43100 }) { 43101 const [isVisible2, setIsVisible] = (0, import_element135.useState)(false); 43102 const disabled2 = field.isDisabled({ item: data, field }); 43103 const toggleVisibility = (0, import_element135.useCallback)(() => { 43104 setIsVisible((prev) => !prev); 43105 }, []); 43106 return /* @__PURE__ */ (0, import_jsx_runtime193.jsx)( 43107 ValidatedText, 43108 { 43109 ...{ 43110 data, 43111 field, 43112 onChange, 43113 hideLabelFromVision, 43114 markWhenOptional, 43115 validity, 43116 type: isVisible2 ? "text" : "password", 43117 suffix: /* @__PURE__ */ (0, import_jsx_runtime193.jsx)(InputLayout3.Slot, { padding: "minimal", children: /* @__PURE__ */ (0, import_jsx_runtime193.jsx)( 43118 import_components49.Button, 43119 { 43120 icon: isVisible2 ? unseen_default : seen_default, 43121 onClick: toggleVisibility, 43122 size: "small", 43123 label: isVisible2 ? (0, import_i18n55.__)("Hide password") : (0, import_i18n55.__)("Show password"), 43124 disabled: disabled2, 43125 accessibleWhenDisabled: true 43126 } 43127 ) }) 43128 } 43129 } 43130 ); 43131 } 43132 43133 // packages/dataviews/build-module/field-types/utils/has-elements.mjs 43134 function hasElements(field) { 43135 return Array.isArray(field.elements) && field.elements.length > 0 || typeof field.getElements === "function"; 43136 } 43137 43138 // packages/dataviews/build-module/components/dataform-controls/index.mjs 43139 var import_jsx_runtime194 = __toESM(require_jsx_runtime(), 1); 43140 var FORM_CONTROLS = { 43141 adaptiveSelect: AdaptiveSelect, 43142 array: ArrayControl, 43143 checkbox: Checkbox, 43144 color: Color, 43145 combobox: Combobox3, 43146 datetime: DateTime, 43147 date: DateControl, 43148 email: Email, 43149 telephone: Telephone, 43150 url: Url, 43151 integer: Integer, 43152 number: Number2, 43153 password: Password, 43154 radio: Radio, 43155 select: Select2, 43156 text: Text3, 43157 time: Time, 43158 toggle: Toggle, 43159 textarea: Textarea3, 43160 toggleGroup: ToggleGroup 43161 }; 43162 function isEditConfig(value) { 43163 return value && typeof value === "object" && typeof value.control === "string"; 43164 } 43165 function createConfiguredControl(config) { 43166 const { control, ...controlConfig } = config; 43167 const BaseControlType = getControlByType(control); 43168 if (BaseControlType === null) { 43169 return null; 43170 } 43171 return function ConfiguredControl(props) { 43172 return /* @__PURE__ */ (0, import_jsx_runtime194.jsx)(BaseControlType, { ...props, config: controlConfig }); 43173 }; 43174 } 43175 function getControl(field, fallback) { 43176 if (typeof field.Edit === "function") { 43177 return field.Edit; 43178 } 43179 if (typeof field.Edit === "string") { 43180 return getControlByType(field.Edit); 43181 } 43182 if (isEditConfig(field.Edit)) { 43183 return createConfiguredControl(field.Edit); 43184 } 43185 if (hasElements(field) && field.type !== "array") { 43186 return getControlByType("adaptiveSelect"); 43187 } 43188 if (fallback === null) { 43189 return null; 43190 } 43191 return getControlByType(fallback); 43192 } 43193 function getControlByType(type) { 43194 if (Object.keys(FORM_CONTROLS).includes(type)) { 43195 return FORM_CONTROLS[type]; 43196 } 43197 return null; 43198 } 43199 43200 // packages/dataviews/build-module/field-types/utils/get-filter-by.mjs 43201 function getFilterBy(field, defaultOperators, validOperators) { 43202 if (field.filterBy === false) { 43203 return false; 43204 } 43205 const operators = field.filterBy?.operators?.filter( 43206 (op) => validOperators.includes(op) 43207 ) ?? defaultOperators; 43208 if (operators.length === 0) { 43209 return false; 43210 } 43211 return { 43212 isPrimary: !!field.filterBy?.isPrimary, 43213 operators 43214 }; 43215 } 43216 var get_filter_by_default = getFilterBy; 43217 43218 // packages/dataviews/build-module/field-types/utils/get-value-from-id.mjs 43219 var getValueFromId = (id) => ({ item }) => { 43220 const path = id.split("."); 43221 let value = item; 43222 for (const segment of path) { 43223 if (value.hasOwnProperty(segment)) { 43224 value = value[segment]; 43225 } else { 43226 value = void 0; 43227 } 43228 } 43229 return value; 43230 }; 43231 var get_value_from_id_default = getValueFromId; 43232 43233 // packages/dataviews/build-module/field-types/utils/set-value-from-id.mjs 43234 var setValueFromId = (id) => ({ value }) => { 43235 const path = id.split("."); 43236 const result = {}; 43237 let current = result; 43238 for (const segment of path.slice(0, -1)) { 43239 current[segment] = {}; 43240 current = current[segment]; 43241 } 43242 current[path.at(-1)] = value; 43243 return result; 43244 }; 43245 var set_value_from_id_default = setValueFromId; 43246 43247 // packages/dataviews/build-module/field-types/email.mjs 43248 var import_i18n56 = __toESM(require_i18n(), 1); 43249 43250 // packages/dataviews/build-module/field-types/utils/render-from-elements.mjs 43251 function RenderFromElements({ 43252 item, 43253 field 43254 }) { 43255 const { elements, isLoading } = useElements({ 43256 elements: field.elements, 43257 getElements: field.getElements 43258 }); 43259 const value = field.getValue({ item }); 43260 if (isLoading) { 43261 return value; 43262 } 43263 if (elements.length === 0) { 43264 return value; 43265 } 43266 return elements?.find((element) => element.value === value)?.label || field.getValue({ item }); 43267 } 43268 43269 // packages/dataviews/build-module/field-types/utils/render-default.mjs 43270 var import_jsx_runtime195 = __toESM(require_jsx_runtime(), 1); 43271 function render({ 43272 item, 43273 field 43274 }) { 43275 if (field.hasElements) { 43276 return /* @__PURE__ */ (0, import_jsx_runtime195.jsx)(RenderFromElements, { item, field }); 43277 } 43278 return field.getValueFormatted({ item, field }); 43279 } 43280 43281 // packages/dataviews/build-module/field-types/utils/sort-text.mjs 43282 var sort_text_default = (a2, b2, direction) => { 43283 return direction === "asc" ? a2.localeCompare(b2) : b2.localeCompare(a2); 43284 }; 43285 43286 // packages/dataviews/build-module/field-types/utils/is-valid-required.mjs 43287 function isValidRequired(item, field) { 43288 const value = field.getValue({ item }); 43289 return ![void 0, "", null].includes(value); 43290 } 43291 43292 // packages/dataviews/build-module/field-types/utils/is-valid-min-length.mjs 43293 function isValidMinLength(item, field) { 43294 if (typeof field.isValid.minLength?.constraint !== "number") { 43295 return false; 43296 } 43297 const value = field.getValue({ item }); 43298 if ([void 0, "", null].includes(value)) { 43299 return true; 43300 } 43301 return String(value).length >= field.isValid.minLength.constraint; 43302 } 43303 43304 // packages/dataviews/build-module/field-types/utils/is-valid-max-length.mjs 43305 function isValidMaxLength(item, field) { 43306 if (typeof field.isValid.maxLength?.constraint !== "number") { 43307 return false; 43308 } 43309 const value = field.getValue({ item }); 43310 if ([void 0, "", null].includes(value)) { 43311 return true; 43312 } 43313 return String(value).length <= field.isValid.maxLength.constraint; 43314 } 43315 43316 // packages/dataviews/build-module/field-types/utils/is-valid-pattern.mjs 43317 function isValidPattern(item, field) { 43318 if (field.isValid.pattern?.constraint === void 0) { 43319 return true; 43320 } 43321 try { 43322 const regexp = new RegExp(field.isValid.pattern.constraint); 43323 const value = field.getValue({ item }); 43324 if ([void 0, "", null].includes(value)) { 43325 return true; 43326 } 43327 return regexp.test(String(value)); 43328 } catch { 43329 return false; 43330 } 43331 } 43332 43333 // packages/dataviews/build-module/field-types/utils/is-valid-elements.mjs 43334 function isValidElements(item, field) { 43335 const elements = field.elements ?? []; 43336 const validValues = elements.map((el) => el.value); 43337 if (validValues.length === 0) { 43338 return true; 43339 } 43340 const value = field.getValue({ item }); 43341 return [].concat(value).every((v2) => validValues.includes(v2)); 43342 } 43343 43344 // packages/dataviews/build-module/field-types/utils/get-value-formatted-default.mjs 43345 function getValueFormatted({ 43346 item, 43347 field 43348 }) { 43349 return field.getValue({ item }); 43350 } 43351 var get_value_formatted_default_default = getValueFormatted; 43352 43353 // packages/dataviews/build-module/field-types/email.mjs 43354 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])?)*$/; 43355 function isValidCustom(item, field) { 43356 const value = field.getValue({ item }); 43357 if (![void 0, "", null].includes(value) && !emailRegex.test(value)) { 43358 return (0, import_i18n56.__)("Value must be a valid email address."); 43359 } 43360 return null; 43361 } 43362 var email_default = { 43363 type: "email", 43364 render, 43365 Edit: "email", 43366 sort: sort_text_default, 43367 enableSorting: true, 43368 enableGlobalSearch: false, 43369 defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], 43370 validOperators: [ 43371 OPERATOR_IS, 43372 OPERATOR_IS_NOT, 43373 OPERATOR_CONTAINS, 43374 OPERATOR_NOT_CONTAINS, 43375 OPERATOR_STARTS_WITH, 43376 // Multiple selection 43377 OPERATOR_IS_ANY, 43378 OPERATOR_IS_NONE, 43379 OPERATOR_IS_NOT_ALL 43380 ], 43381 format: {}, 43382 getValueFormatted: get_value_formatted_default_default, 43383 validate: { 43384 required: isValidRequired, 43385 pattern: isValidPattern, 43386 minLength: isValidMinLength, 43387 maxLength: isValidMaxLength, 43388 elements: isValidElements, 43389 custom: isValidCustom 43390 } 43391 }; 43392 43393 // packages/dataviews/build-module/field-types/integer.mjs 43394 var import_i18n57 = __toESM(require_i18n(), 1); 43395 43396 // packages/dataviews/build-module/field-types/utils/sort-number.mjs 43397 var sort_number_default = (a2, b2, direction) => { 43398 return direction === "asc" ? a2 - b2 : b2 - a2; 43399 }; 43400 43401 // packages/dataviews/build-module/field-types/utils/is-valid-min.mjs 43402 function isValidMin(item, field) { 43403 if (typeof field.isValid.min?.constraint !== "number") { 43404 return false; 43405 } 43406 const value = field.getValue({ item }); 43407 if ([void 0, "", null].includes(value)) { 43408 return true; 43409 } 43410 return Number(value) >= field.isValid.min.constraint; 43411 } 43412 43413 // packages/dataviews/build-module/field-types/utils/is-valid-max.mjs 43414 function isValidMax(item, field) { 43415 if (typeof field.isValid.max?.constraint !== "number") { 43416 return false; 43417 } 43418 const value = field.getValue({ item }); 43419 if ([void 0, "", null].includes(value)) { 43420 return true; 43421 } 43422 return Number(value) <= field.isValid.max.constraint; 43423 } 43424 43425 // packages/dataviews/build-module/field-types/integer.mjs 43426 var format2 = { 43427 separatorThousand: "," 43428 }; 43429 function getValueFormatted2({ 43430 item, 43431 field 43432 }) { 43433 let value = field.getValue({ item }); 43434 if (value === null || value === void 0) { 43435 return ""; 43436 } 43437 value = Number(value); 43438 if (!Number.isFinite(value)) { 43439 return String(value); 43440 } 43441 let formatInteger; 43442 if (field.type !== "integer") { 43443 formatInteger = format2; 43444 } else { 43445 formatInteger = field.format; 43446 } 43447 const { separatorThousand } = formatInteger; 43448 const integerValue = Math.trunc(value); 43449 if (!separatorThousand) { 43450 return String(integerValue); 43451 } 43452 return String(integerValue).replace( 43453 /\B(?=(\d{3})+(?!\d))/g, 43454 separatorThousand 43455 ); 43456 } 43457 function isValidCustom2(item, field) { 43458 const value = field.getValue({ item }); 43459 if (![void 0, "", null].includes(value) && !Number.isInteger(value)) { 43460 return (0, import_i18n57.__)("Value must be an integer."); 43461 } 43462 return null; 43463 } 43464 var integer_default = { 43465 type: "integer", 43466 render, 43467 Edit: "integer", 43468 sort: sort_number_default, 43469 enableSorting: true, 43470 enableGlobalSearch: false, 43471 defaultOperators: [ 43472 OPERATOR_IS, 43473 OPERATOR_IS_NOT, 43474 OPERATOR_LESS_THAN, 43475 OPERATOR_GREATER_THAN, 43476 OPERATOR_LESS_THAN_OR_EQUAL, 43477 OPERATOR_GREATER_THAN_OR_EQUAL, 43478 OPERATOR_BETWEEN 43479 ], 43480 validOperators: [ 43481 // Single-selection 43482 OPERATOR_IS, 43483 OPERATOR_IS_NOT, 43484 OPERATOR_LESS_THAN, 43485 OPERATOR_GREATER_THAN, 43486 OPERATOR_LESS_THAN_OR_EQUAL, 43487 OPERATOR_GREATER_THAN_OR_EQUAL, 43488 OPERATOR_BETWEEN, 43489 // Multiple-selection 43490 OPERATOR_IS_ANY, 43491 OPERATOR_IS_NONE, 43492 OPERATOR_IS_NOT_ALL 43493 ], 43494 format: format2, 43495 getValueFormatted: getValueFormatted2, 43496 validate: { 43497 required: isValidRequired, 43498 min: isValidMin, 43499 max: isValidMax, 43500 elements: isValidElements, 43501 custom: isValidCustom2 43502 } 43503 }; 43504 43505 // packages/dataviews/build-module/field-types/number.mjs 43506 var import_i18n58 = __toESM(require_i18n(), 1); 43507 var format3 = { 43508 separatorThousand: ",", 43509 separatorDecimal: ".", 43510 decimals: 2 43511 }; 43512 function getValueFormatted3({ 43513 item, 43514 field 43515 }) { 43516 let value = field.getValue({ item }); 43517 if (value === null || value === void 0) { 43518 return ""; 43519 } 43520 value = Number(value); 43521 if (!Number.isFinite(value)) { 43522 return String(value); 43523 } 43524 let formatNumber; 43525 if (field.type !== "number") { 43526 formatNumber = format3; 43527 } else { 43528 formatNumber = field.format; 43529 } 43530 const { separatorThousand, separatorDecimal, decimals } = formatNumber; 43531 const fixedValue = value.toFixed(decimals); 43532 const [integerPart, decimalPart] = fixedValue.split("."); 43533 const formattedInteger = separatorThousand ? integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, separatorThousand) : integerPart; 43534 return decimals === 0 ? formattedInteger : formattedInteger + separatorDecimal + decimalPart; 43535 } 43536 function isEmpty(value) { 43537 return value === "" || value === void 0 || value === null; 43538 } 43539 function isValidCustom3(item, field) { 43540 const value = field.getValue({ item }); 43541 if (!isEmpty(value) && !Number.isFinite(value)) { 43542 return (0, import_i18n58.__)("Value must be a number."); 43543 } 43544 return null; 43545 } 43546 var number_default = { 43547 type: "number", 43548 render, 43549 Edit: "number", 43550 sort: sort_number_default, 43551 enableSorting: true, 43552 enableGlobalSearch: false, 43553 defaultOperators: [ 43554 OPERATOR_IS, 43555 OPERATOR_IS_NOT, 43556 OPERATOR_LESS_THAN, 43557 OPERATOR_GREATER_THAN, 43558 OPERATOR_LESS_THAN_OR_EQUAL, 43559 OPERATOR_GREATER_THAN_OR_EQUAL, 43560 OPERATOR_BETWEEN 43561 ], 43562 validOperators: [ 43563 // Single-selection 43564 OPERATOR_IS, 43565 OPERATOR_IS_NOT, 43566 OPERATOR_LESS_THAN, 43567 OPERATOR_GREATER_THAN, 43568 OPERATOR_LESS_THAN_OR_EQUAL, 43569 OPERATOR_GREATER_THAN_OR_EQUAL, 43570 OPERATOR_BETWEEN, 43571 // Multiple-selection 43572 OPERATOR_IS_ANY, 43573 OPERATOR_IS_NONE, 43574 OPERATOR_IS_NOT_ALL 43575 ], 43576 format: format3, 43577 getValueFormatted: getValueFormatted3, 43578 validate: { 43579 required: isValidRequired, 43580 min: isValidMin, 43581 max: isValidMax, 43582 elements: isValidElements, 43583 custom: isValidCustom3 43584 } 43585 }; 43586 43587 // packages/dataviews/build-module/field-types/text.mjs 43588 var text_default = { 43589 type: "text", 43590 render, 43591 Edit: "text", 43592 sort: sort_text_default, 43593 enableSorting: true, 43594 enableGlobalSearch: false, 43595 defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], 43596 validOperators: [ 43597 // Single selection 43598 OPERATOR_IS, 43599 OPERATOR_IS_NOT, 43600 OPERATOR_CONTAINS, 43601 OPERATOR_NOT_CONTAINS, 43602 OPERATOR_STARTS_WITH, 43603 // Multiple selection 43604 OPERATOR_IS_ANY, 43605 OPERATOR_IS_NONE, 43606 OPERATOR_IS_NOT_ALL 43607 ], 43608 format: {}, 43609 getValueFormatted: get_value_formatted_default_default, 43610 validate: { 43611 required: isValidRequired, 43612 pattern: isValidPattern, 43613 minLength: isValidMinLength, 43614 maxLength: isValidMaxLength, 43615 elements: isValidElements 43616 } 43617 }; 43618 43619 // packages/dataviews/build-module/field-types/datetime.mjs 43620 var import_date9 = __toESM(require_date(), 1); 43621 43622 // packages/dataviews/build-module/field-types/utils/is-valid-boundary.mjs 43623 var import_date8 = __toESM(require_date(), 1); 43624 function parseDateLike(value) { 43625 if (!isValid(new Date(value))) { 43626 return null; 43627 } 43628 const parsed = (0, import_date8.getDate)(value); 43629 return parsed && isValid(parsed) ? parsed.getTime() : null; 43630 } 43631 function validateBoundary(item, field, boundary, parse2) { 43632 const constraint = field.isValid[boundary]?.constraint; 43633 if (typeof constraint !== "string") { 43634 return false; 43635 } 43636 const value = field.getValue({ item }); 43637 const boundaryValue = Array.isArray(value) ? value[boundary === "min" ? 0 : value.length - 1] : value; 43638 if (boundaryValue === void 0 || boundaryValue === null || boundaryValue === "") { 43639 return true; 43640 } 43641 const parsedConstraint = parse2(constraint); 43642 const parsedValue = parse2(String(boundaryValue)); 43643 if (parsedConstraint === null || parsedValue === null) { 43644 return false; 43645 } 43646 return boundary === "min" ? parsedValue >= parsedConstraint : parsedValue <= parsedConstraint; 43647 } 43648 function isValidMinDate(item, field) { 43649 return validateBoundary(item, field, "min", parseDateLike); 43650 } 43651 function isValidMaxDate(item, field) { 43652 return validateBoundary(item, field, "max", parseDateLike); 43653 } 43654 function isValidMinTime(item, field) { 43655 return validateBoundary(item, field, "min", parseTime2); 43656 } 43657 function isValidMaxTime(item, field) { 43658 return validateBoundary(item, field, "max", parseTime2); 43659 } 43660 43661 // packages/dataviews/build-module/field-types/datetime.mjs 43662 var format4 = { 43663 datetime: (0, import_date9.getSettings)().formats.datetime, 43664 weekStartsOn: (0, import_date9.getSettings)().l10n.startOfWeek 43665 }; 43666 function getValueFormatted4({ 43667 item, 43668 field 43669 }) { 43670 const value = field.getValue({ item }); 43671 if (["", void 0, null].includes(value)) { 43672 return ""; 43673 } 43674 let formatDatetime; 43675 if (field.type !== "datetime") { 43676 formatDatetime = format4; 43677 } else { 43678 formatDatetime = field.format; 43679 } 43680 return (0, import_date9.dateI18n)(formatDatetime.datetime, (0, import_date9.getDate)(value)); 43681 } 43682 var sort = (a2, b2, direction) => { 43683 const timeA = new Date(a2).getTime(); 43684 const timeB = new Date(b2).getTime(); 43685 return direction === "asc" ? timeA - timeB : timeB - timeA; 43686 }; 43687 var datetime_default = { 43688 type: "datetime", 43689 render, 43690 Edit: "datetime", 43691 sort, 43692 enableSorting: true, 43693 enableGlobalSearch: false, 43694 defaultOperators: [ 43695 OPERATOR_ON, 43696 OPERATOR_NOT_ON, 43697 OPERATOR_BEFORE, 43698 OPERATOR_AFTER, 43699 OPERATOR_BEFORE_INC, 43700 OPERATOR_AFTER_INC, 43701 OPERATOR_IN_THE_PAST, 43702 OPERATOR_OVER 43703 ], 43704 validOperators: [ 43705 OPERATOR_ON, 43706 OPERATOR_NOT_ON, 43707 OPERATOR_BEFORE, 43708 OPERATOR_AFTER, 43709 OPERATOR_BEFORE_INC, 43710 OPERATOR_AFTER_INC, 43711 OPERATOR_IN_THE_PAST, 43712 OPERATOR_OVER 43713 ], 43714 format: format4, 43715 getValueFormatted: getValueFormatted4, 43716 validate: { 43717 required: isValidRequired, 43718 elements: isValidElements, 43719 min: isValidMinDate, 43720 max: isValidMaxDate 43721 } 43722 }; 43723 43724 // packages/dataviews/build-module/field-types/date.mjs 43725 var import_date10 = __toESM(require_date(), 1); 43726 var format5 = { 43727 date: (0, import_date10.getSettings)().formats.date, 43728 weekStartsOn: (0, import_date10.getSettings)().l10n.startOfWeek 43729 }; 43730 function getValueFormatted5({ 43731 item, 43732 field 43733 }) { 43734 const value = field.getValue({ item }); 43735 if (["", void 0, null].includes(value)) { 43736 return ""; 43737 } 43738 let formatDate2; 43739 if (field.type !== "date") { 43740 formatDate2 = format5; 43741 } else { 43742 formatDate2 = field.format; 43743 } 43744 return (0, import_date10.dateI18n)(formatDate2.date, (0, import_date10.getDate)(value)); 43745 } 43746 var sort2 = (a2, b2, direction) => { 43747 const timeA = new Date(a2).getTime(); 43748 const timeB = new Date(b2).getTime(); 43749 return direction === "asc" ? timeA - timeB : timeB - timeA; 43750 }; 43751 var date_default = { 43752 type: "date", 43753 render, 43754 Edit: "date", 43755 sort: sort2, 43756 enableSorting: true, 43757 enableGlobalSearch: false, 43758 defaultOperators: [ 43759 OPERATOR_ON, 43760 OPERATOR_NOT_ON, 43761 OPERATOR_BEFORE, 43762 OPERATOR_AFTER, 43763 OPERATOR_BEFORE_INC, 43764 OPERATOR_AFTER_INC, 43765 OPERATOR_IN_THE_PAST, 43766 OPERATOR_OVER, 43767 OPERATOR_BETWEEN 43768 ], 43769 validOperators: [ 43770 OPERATOR_ON, 43771 OPERATOR_NOT_ON, 43772 OPERATOR_BEFORE, 43773 OPERATOR_AFTER, 43774 OPERATOR_BEFORE_INC, 43775 OPERATOR_AFTER_INC, 43776 OPERATOR_IN_THE_PAST, 43777 OPERATOR_OVER, 43778 OPERATOR_BETWEEN 43779 ], 43780 format: format5, 43781 getValueFormatted: getValueFormatted5, 43782 validate: { 43783 required: isValidRequired, 43784 elements: isValidElements, 43785 min: isValidMinDate, 43786 max: isValidMaxDate 43787 } 43788 }; 43789 43790 // packages/dataviews/build-module/field-types/time.mjs 43791 var import_date11 = __toESM(require_date(), 1); 43792 var format6 = { 43793 time: (0, import_date11.getSettings)().formats.time 43794 }; 43795 var ANCHOR_DATE = "2000-01-01"; 43796 function toAnchoredDate(secondsSinceMidnight) { 43797 const hours = Math.floor(secondsSinceMidnight / 3600); 43798 const minutes = Math.floor(secondsSinceMidnight % 3600 / 60); 43799 const seconds = secondsSinceMidnight % 60; 43800 const time = [hours, minutes, seconds].map((part) => String(part).padStart(2, "0")).join(":"); 43801 return (0, import_date11.getDate)(`$ANCHOR_DATE}T$time}`); 43802 } 43803 function getValueFormatted6({ 43804 item, 43805 field 43806 }) { 43807 const secondsSinceMidnight = parseTime2(field.getValue({ item })); 43808 if (secondsSinceMidnight === null) { 43809 return ""; 43810 } 43811 let formatTime; 43812 if (field.type !== "time") { 43813 formatTime = format6; 43814 } else { 43815 formatTime = field.format; 43816 } 43817 return (0, import_date11.dateI18n)(formatTime.time, toAnchoredDate(secondsSinceMidnight)); 43818 } 43819 var sort3 = (a2, b2, direction) => { 43820 const timeA = parseTime2(a2); 43821 const timeB = parseTime2(b2); 43822 if (timeA === null || timeB === null) { 43823 if (timeA === timeB) { 43824 return 0; 43825 } 43826 return timeA === null ? 1 : -1; 43827 } 43828 return direction === "asc" ? timeA - timeB : timeB - timeA; 43829 }; 43830 var time_default = { 43831 type: "time", 43832 render, 43833 Edit: "time", 43834 sort: sort3, 43835 enableSorting: true, 43836 enableGlobalSearch: false, 43837 defaultOperators: [ 43838 OPERATOR_ON, 43839 OPERATOR_NOT_ON, 43840 OPERATOR_BEFORE, 43841 OPERATOR_AFTER, 43842 OPERATOR_BEFORE_INC, 43843 OPERATOR_AFTER_INC, 43844 OPERATOR_BETWEEN 43845 ], 43846 validOperators: [ 43847 OPERATOR_ON, 43848 OPERATOR_NOT_ON, 43849 OPERATOR_BEFORE, 43850 OPERATOR_AFTER, 43851 OPERATOR_BEFORE_INC, 43852 OPERATOR_AFTER_INC, 43853 OPERATOR_BETWEEN 43854 ], 43855 format: format6, 43856 getValueFormatted: getValueFormatted6, 43857 validate: { 43858 required: isValidRequired, 43859 elements: isValidElements, 43860 min: isValidMinTime, 43861 max: isValidMaxTime 43862 } 43863 }; 43864 43865 // packages/dataviews/build-module/field-types/boolean.mjs 43866 var import_i18n59 = __toESM(require_i18n(), 1); 43867 43868 // packages/dataviews/build-module/field-types/utils/is-valid-required-for-bool.mjs 43869 function isValidRequiredForBool(item, field) { 43870 const value = field.getValue({ item }); 43871 return value === true; 43872 } 43873 43874 // packages/dataviews/build-module/field-types/boolean.mjs 43875 function getValueFormatted7({ 43876 item, 43877 field 43878 }) { 43879 const value = field.getValue({ item }); 43880 if (value === true) { 43881 return (0, import_i18n59.__)("True"); 43882 } 43883 if (value === false) { 43884 return (0, import_i18n59.__)("False"); 43885 } 43886 return ""; 43887 } 43888 function isValidCustom4(item, field) { 43889 const value = field.getValue({ item }); 43890 if (![void 0, "", null].includes(value) && ![true, false].includes(value)) { 43891 return (0, import_i18n59.__)("Value must be true, false, or undefined"); 43892 } 43893 return null; 43894 } 43895 var sort4 = (a2, b2, direction) => { 43896 const boolA = Boolean(a2); 43897 const boolB = Boolean(b2); 43898 if (boolA === boolB) { 43899 return 0; 43900 } 43901 if (direction === "asc") { 43902 return boolA ? 1 : -1; 43903 } 43904 return boolA ? -1 : 1; 43905 }; 43906 var boolean_default = { 43907 type: "boolean", 43908 render, 43909 Edit: "checkbox", 43910 sort: sort4, 43911 validate: { 43912 required: isValidRequiredForBool, 43913 elements: isValidElements, 43914 custom: isValidCustom4 43915 }, 43916 enableSorting: true, 43917 enableGlobalSearch: false, 43918 defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT], 43919 validOperators: [OPERATOR_IS, OPERATOR_IS_NOT], 43920 format: {}, 43921 getValueFormatted: getValueFormatted7 43922 }; 43923 43924 // packages/dataviews/build-module/field-types/media.mjs 43925 var media_default = { 43926 type: "media", 43927 render: () => null, 43928 Edit: null, 43929 sort: () => 0, 43930 enableSorting: false, 43931 enableGlobalSearch: false, 43932 defaultOperators: [], 43933 validOperators: [], 43934 format: {}, 43935 getValueFormatted: get_value_formatted_default_default, 43936 // cannot validate any constraint, so 43937 // the only available validation for the field author 43938 // would be providing a custom validator. 43939 validate: {} 43940 }; 43941 43942 // packages/dataviews/build-module/field-types/array.mjs 43943 var import_i18n60 = __toESM(require_i18n(), 1); 43944 43945 // packages/dataviews/build-module/field-types/utils/is-valid-required-for-array.mjs 43946 function isValidRequiredForArray(item, field) { 43947 const value = field.getValue({ item }); 43948 return Array.isArray(value) && value.length > 0 && value.every( 43949 (element) => ![void 0, "", null].includes(element) 43950 ); 43951 } 43952 43953 // packages/dataviews/build-module/field-types/array.mjs 43954 function getValueFormatted8({ 43955 item, 43956 field 43957 }) { 43958 const value = field.getValue({ item }); 43959 const arr = Array.isArray(value) ? value : []; 43960 return arr.join(", "); 43961 } 43962 function render2({ item, field }) { 43963 return getValueFormatted8({ item, field }); 43964 } 43965 function isValidCustom5(item, field) { 43966 const value = field.getValue({ item }); 43967 if ([void 0, "", null].includes(value)) { 43968 return null; 43969 } 43970 if (!Array.isArray(value)) { 43971 return (0, import_i18n60.__)("Value must be an array."); 43972 } 43973 if (!value.every((v2) => typeof v2 === "string")) { 43974 return (0, import_i18n60.__)("Every value must be a string."); 43975 } 43976 return null; 43977 } 43978 var sort5 = (a2, b2, direction) => { 43979 const arrA = Array.isArray(a2) ? a2 : []; 43980 const arrB = Array.isArray(b2) ? b2 : []; 43981 if (arrA.length !== arrB.length) { 43982 return direction === "asc" ? arrA.length - arrB.length : arrB.length - arrA.length; 43983 } 43984 const joinedA = arrA.join(","); 43985 const joinedB = arrB.join(","); 43986 return direction === "asc" ? joinedA.localeCompare(joinedB) : joinedB.localeCompare(joinedA); 43987 }; 43988 var array_default = { 43989 type: "array", 43990 render: render2, 43991 Edit: "array", 43992 sort: sort5, 43993 enableSorting: true, 43994 enableGlobalSearch: false, 43995 defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], 43996 validOperators: [ 43997 OPERATOR_IS_ANY, 43998 OPERATOR_IS_NONE, 43999 OPERATOR_IS_ALL, 44000 OPERATOR_IS_NOT_ALL 44001 ], 44002 format: {}, 44003 getValueFormatted: getValueFormatted8, 44004 validate: { 44005 required: isValidRequiredForArray, 44006 elements: isValidElements, 44007 custom: isValidCustom5 44008 } 44009 }; 44010 44011 // packages/dataviews/build-module/field-types/password.mjs 44012 function getValueFormatted9({ 44013 item, 44014 field 44015 }) { 44016 return field.getValue({ item }) ? "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" : ""; 44017 } 44018 var password_default = { 44019 type: "password", 44020 render, 44021 Edit: "password", 44022 sort: () => 0, 44023 // Passwords should not be sortable for security reasons 44024 enableSorting: false, 44025 enableGlobalSearch: false, 44026 defaultOperators: [], 44027 validOperators: [], 44028 format: {}, 44029 getValueFormatted: getValueFormatted9, 44030 validate: { 44031 required: isValidRequired, 44032 pattern: isValidPattern, 44033 minLength: isValidMinLength, 44034 maxLength: isValidMaxLength, 44035 elements: isValidElements 44036 } 44037 }; 44038 44039 // packages/dataviews/build-module/field-types/telephone.mjs 44040 var telephone_default = { 44041 type: "telephone", 44042 render, 44043 Edit: "telephone", 44044 sort: sort_text_default, 44045 enableSorting: true, 44046 enableGlobalSearch: false, 44047 defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], 44048 validOperators: [ 44049 OPERATOR_IS, 44050 OPERATOR_IS_NOT, 44051 OPERATOR_CONTAINS, 44052 OPERATOR_NOT_CONTAINS, 44053 OPERATOR_STARTS_WITH, 44054 // Multiple selection 44055 OPERATOR_IS_ANY, 44056 OPERATOR_IS_NONE, 44057 OPERATOR_IS_NOT_ALL 44058 ], 44059 format: {}, 44060 getValueFormatted: get_value_formatted_default_default, 44061 validate: { 44062 required: isValidRequired, 44063 pattern: isValidPattern, 44064 minLength: isValidMinLength, 44065 maxLength: isValidMaxLength, 44066 elements: isValidElements 44067 } 44068 }; 44069 44070 // packages/dataviews/build-module/field-types/color.mjs 44071 var import_i18n61 = __toESM(require_i18n(), 1); 44072 var import_jsx_runtime196 = __toESM(require_jsx_runtime(), 1); 44073 function render3({ item, field }) { 44074 if (field.hasElements) { 44075 return /* @__PURE__ */ (0, import_jsx_runtime196.jsx)(RenderFromElements, { item, field }); 44076 } 44077 const value = get_value_formatted_default_default({ item, field }); 44078 if (!value || !w(value).isValid()) { 44079 return value; 44080 } 44081 return /* @__PURE__ */ (0, import_jsx_runtime196.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [ 44082 /* @__PURE__ */ (0, import_jsx_runtime196.jsx)( 44083 "div", 44084 { 44085 style: { 44086 width: "16px", 44087 height: "16px", 44088 borderRadius: "50%", 44089 backgroundColor: value, 44090 border: "1px solid #ddd", 44091 flexShrink: 0 44092 } 44093 } 44094 ), 44095 /* @__PURE__ */ (0, import_jsx_runtime196.jsx)("span", { children: value }) 44096 ] }); 44097 } 44098 function isValidCustom6(item, field) { 44099 const value = field.getValue({ item }); 44100 if (![void 0, "", null].includes(value) && !w(value).isValid()) { 44101 return (0, import_i18n61.__)("Value must be a valid color."); 44102 } 44103 return null; 44104 } 44105 var sort6 = (a2, b2, direction) => { 44106 const colorA = w(a2); 44107 const colorB = w(b2); 44108 if (!colorA.isValid() && !colorB.isValid()) { 44109 return 0; 44110 } 44111 if (!colorA.isValid()) { 44112 return direction === "asc" ? 1 : -1; 44113 } 44114 if (!colorB.isValid()) { 44115 return direction === "asc" ? -1 : 1; 44116 } 44117 const hslA = colorA.toHsl(); 44118 const hslB = colorB.toHsl(); 44119 if (hslA.h !== hslB.h) { 44120 return direction === "asc" ? hslA.h - hslB.h : hslB.h - hslA.h; 44121 } 44122 if (hslA.s !== hslB.s) { 44123 return direction === "asc" ? hslA.s - hslB.s : hslB.s - hslA.s; 44124 } 44125 return direction === "asc" ? hslA.l - hslB.l : hslB.l - hslA.l; 44126 }; 44127 var color_default = { 44128 type: "color", 44129 render: render3, 44130 Edit: "color", 44131 sort: sort6, 44132 enableSorting: true, 44133 enableGlobalSearch: false, 44134 defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], 44135 validOperators: [ 44136 OPERATOR_IS, 44137 OPERATOR_IS_NOT, 44138 OPERATOR_IS_ANY, 44139 OPERATOR_IS_NONE 44140 ], 44141 format: {}, 44142 getValueFormatted: get_value_formatted_default_default, 44143 validate: { 44144 required: isValidRequired, 44145 elements: isValidElements, 44146 custom: isValidCustom6 44147 } 44148 }; 44149 44150 // packages/dataviews/build-module/field-types/url.mjs 44151 var url_default = { 44152 type: "url", 44153 render, 44154 Edit: "url", 44155 sort: sort_text_default, 44156 enableSorting: true, 44157 enableGlobalSearch: false, 44158 defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE], 44159 validOperators: [ 44160 OPERATOR_IS, 44161 OPERATOR_IS_NOT, 44162 OPERATOR_CONTAINS, 44163 OPERATOR_NOT_CONTAINS, 44164 OPERATOR_STARTS_WITH, 44165 // Multiple selection 44166 OPERATOR_IS_ANY, 44167 OPERATOR_IS_NONE, 44168 OPERATOR_IS_NOT_ALL 44169 ], 44170 format: {}, 44171 getValueFormatted: get_value_formatted_default_default, 44172 validate: { 44173 required: isValidRequired, 44174 pattern: isValidPattern, 44175 minLength: isValidMinLength, 44176 maxLength: isValidMaxLength, 44177 elements: isValidElements 44178 } 44179 }; 44180 44181 // packages/dataviews/build-module/field-types/no-type.mjs 44182 var sort7 = (a2, b2, direction) => { 44183 if (typeof a2 === "number" && typeof b2 === "number") { 44184 return sort_number_default(a2, b2, direction); 44185 } 44186 return sort_text_default(a2, b2, direction); 44187 }; 44188 var no_type_default = { 44189 // type: no type for this one 44190 render, 44191 Edit: null, 44192 sort: sort7, 44193 enableSorting: true, 44194 enableGlobalSearch: false, 44195 defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT], 44196 validOperators: getAllOperatorNames(), 44197 format: {}, 44198 getValueFormatted: get_value_formatted_default_default, 44199 validate: { 44200 required: isValidRequired, 44201 elements: isValidElements 44202 } 44203 }; 44204 44205 // packages/dataviews/build-module/field-types/utils/get-is-valid.mjs 44206 function supportsNumericRangeConstraint(type) { 44207 return type === "integer" || type === "number"; 44208 } 44209 function supportsStringRangeConstraint(type) { 44210 return type === "date" || type === "datetime" || type === "time"; 44211 } 44212 function normalizeRangeRule(value, fieldType, key) { 44213 const validator = fieldType.validate[key]; 44214 if (validator && (typeof value === "number" && supportsNumericRangeConstraint(fieldType.type) || typeof value === "string" && supportsStringRangeConstraint(fieldType.type))) { 44215 return { constraint: value, validate: validator }; 44216 } 44217 return void 0; 44218 } 44219 function getIsValid(field, fieldType) { 44220 const rules = field.isValid; 44221 let required; 44222 if (rules?.required === true && fieldType.validate.required !== void 0) { 44223 required = { 44224 constraint: true, 44225 validate: fieldType.validate.required 44226 }; 44227 } 44228 let elements; 44229 if ((rules?.elements === true || // elements is enabled unless the field opts-out 44230 rules?.elements === void 0 && (!!field.elements || !!field.getElements)) && fieldType.validate.elements !== void 0) { 44231 elements = { 44232 constraint: true, 44233 validate: fieldType.validate.elements 44234 }; 44235 } 44236 const min3 = normalizeRangeRule(rules?.min, fieldType, "min"); 44237 const max3 = normalizeRangeRule(rules?.max, fieldType, "max"); 44238 const minLengthValue = rules?.minLength; 44239 let minLength; 44240 if (typeof minLengthValue === "number" && fieldType.validate.minLength !== void 0) { 44241 minLength = { 44242 constraint: minLengthValue, 44243 validate: fieldType.validate.minLength 44244 }; 44245 } 44246 const maxLengthValue = rules?.maxLength; 44247 let maxLength; 44248 if (typeof maxLengthValue === "number" && fieldType.validate.maxLength !== void 0) { 44249 maxLength = { 44250 constraint: maxLengthValue, 44251 validate: fieldType.validate.maxLength 44252 }; 44253 } 44254 const patternValue = rules?.pattern; 44255 let pattern; 44256 if (patternValue !== void 0 && fieldType.validate.pattern !== void 0) { 44257 pattern = { 44258 constraint: patternValue, 44259 validate: fieldType.validate.pattern 44260 }; 44261 } 44262 const custom = rules?.custom ?? fieldType.validate.custom; 44263 return { 44264 required, 44265 elements, 44266 min: min3, 44267 max: max3, 44268 minLength, 44269 maxLength, 44270 pattern, 44271 custom 44272 }; 44273 } 44274 44275 // packages/dataviews/build-module/field-types/utils/get-filter.mjs 44276 function getFilter(fieldType) { 44277 return fieldType.validOperators.reduce((accumulator, operator) => { 44278 const operatorObj = getOperatorByName(operator); 44279 if (operatorObj?.filter) { 44280 accumulator[operator] = operatorObj.filter; 44281 } 44282 return accumulator; 44283 }, {}); 44284 } 44285 44286 // packages/dataviews/build-module/field-types/utils/get-format.mjs 44287 function getFormat(field, fieldType) { 44288 return { 44289 ...fieldType.format, 44290 ...field.format 44291 }; 44292 } 44293 var get_format_default = getFormat; 44294 44295 // packages/dataviews/build-module/field-types/index.mjs 44296 function getFieldTypeByName(type) { 44297 const found = [ 44298 email_default, 44299 integer_default, 44300 number_default, 44301 text_default, 44302 datetime_default, 44303 date_default, 44304 time_default, 44305 boolean_default, 44306 media_default, 44307 array_default, 44308 password_default, 44309 telephone_default, 44310 color_default, 44311 url_default 44312 ].find((fieldType) => fieldType?.type === type); 44313 if (!!found) { 44314 return found; 44315 } 44316 return no_type_default; 44317 } 44318 function normalizeFields(fields) { 44319 return fields.map((field) => { 44320 const fieldType = getFieldTypeByName(field.type); 44321 const getValue = field.getValue || get_value_from_id_default(field.id); 44322 const sort8 = function(a2, b2, direction) { 44323 const aValue = getValue({ item: a2 }); 44324 const bValue = getValue({ item: b2 }); 44325 return field.sort ? field.sort(aValue, bValue, direction) : fieldType.sort(aValue, bValue, direction); 44326 }; 44327 return { 44328 id: field.id, 44329 label: field.label || field.id, 44330 header: field.header || field.label || field.id, 44331 description: field.description, 44332 placeholder: field.placeholder, 44333 getValue, 44334 setValue: field.setValue || set_value_from_id_default(field.id), 44335 elements: field.elements, 44336 getElements: field.getElements, 44337 hasElements: hasElements(field), 44338 isVisible: field.isVisible, 44339 isDisabled: typeof field.isDisabled === "function" ? field.isDisabled : () => !!field.isDisabled, 44340 enableHiding: field.enableHiding ?? true, 44341 readOnly: field.readOnly ?? false, 44342 // The type provides defaults for the following props 44343 type: fieldType.type, 44344 render: field.render ?? fieldType.render, 44345 Edit: getControl(field, fieldType.Edit), 44346 sort: sort8, 44347 enableSorting: field.enableSorting ?? fieldType.enableSorting, 44348 enableGlobalSearch: field.enableGlobalSearch ?? fieldType.enableGlobalSearch, 44349 isValid: getIsValid(field, fieldType), 44350 filterBy: get_filter_by_default( 44351 field, 44352 fieldType.defaultOperators, 44353 fieldType.validOperators 44354 ), 44355 filter: getFilter(fieldType), 44356 format: get_format_default(field, fieldType), 44357 getValueFormatted: field.getValueFormatted ?? fieldType.getValueFormatted 44358 }; 44359 }); 44360 } 44361 44362 // packages/dataviews/build-module/hooks/use-data.mjs 44363 var import_element136 = __toESM(require_element(), 1); 44364 function useData({ 44365 view, 44366 data: shownData, 44367 getItemId, 44368 isLoading, 44369 paginationInfo, 44370 selection 44371 }) { 44372 const isInfiniteScrollEnabled = view.infiniteScrollEnabled; 44373 const [hasInitiallyLoaded, setHasInitiallyLoaded] = (0, import_element136.useState)( 44374 !isLoading 44375 ); 44376 (0, import_element136.useEffect)(() => { 44377 if (!isLoading) { 44378 setHasInitiallyLoaded(true); 44379 } 44380 }, [isLoading]); 44381 const previousDataRef = (0, import_element136.useRef)(shownData); 44382 const previousPaginationInfoRef = (0, import_element136.useRef)(paginationInfo); 44383 (0, import_element136.useEffect)(() => { 44384 if (!isLoading) { 44385 previousDataRef.current = shownData; 44386 previousPaginationInfoRef.current = paginationInfo; 44387 } 44388 }, [shownData, isLoading, paginationInfo]); 44389 const [visibleEntries, setVisibleEntries] = (0, import_element136.useState)([]); 44390 const positionMapRef = (0, import_element136.useRef)(/* @__PURE__ */ new Map()); 44391 const allLoadedRecordsRef = (0, import_element136.useRef)([]); 44392 const prevViewParamsRef = (0, import_element136.useRef)({ 44393 search: void 0, 44394 filters: void 0, 44395 perPage: void 0 44396 }); 44397 const scrollDirectionRef = (0, import_element136.useRef)(void 0); 44398 const prevStartPositionRef = (0, import_element136.useRef)(void 0); 44399 const hasInitializedRef = (0, import_element136.useRef)(false); 44400 const allLoadedRecords = (0, import_element136.useMemo)(() => { 44401 if (view.startPosition !== void 0 && prevStartPositionRef.current !== void 0) { 44402 if (view.startPosition < prevStartPositionRef.current) { 44403 scrollDirectionRef.current = "up"; 44404 } else if (view.startPosition > prevStartPositionRef.current) { 44405 scrollDirectionRef.current = "down"; 44406 } 44407 } 44408 prevStartPositionRef.current = view.startPosition; 44409 const currentFiltersKey = JSON.stringify(view.filters ?? []); 44410 const prevFiltersKey = prevViewParamsRef.current.filters; 44411 const shouldReset = !hasInitializedRef.current || !view.infiniteScrollEnabled || view.search !== prevViewParamsRef.current.search || currentFiltersKey !== prevFiltersKey || view.perPage !== prevViewParamsRef.current.perPage; 44412 hasInitializedRef.current = true; 44413 prevViewParamsRef.current = { 44414 search: view.search, 44415 filters: currentFiltersKey, 44416 perPage: view.perPage 44417 }; 44418 if (shouldReset) { 44419 positionMapRef.current.clear(); 44420 scrollDirectionRef.current = void 0; 44421 const startPosition = view.search ? 1 : view.startPosition ?? 1; 44422 const records = shownData.map((record, index2) => { 44423 const position = startPosition + index2; 44424 positionMapRef.current.set(getItemId(record), position); 44425 return { 44426 ...record, 44427 position 44428 }; 44429 }); 44430 allLoadedRecordsRef.current = records; 44431 return records; 44432 } 44433 const prev = allLoadedRecordsRef.current; 44434 const shownDataIds = new Set(shownData.map(getItemId)); 44435 const scrollDirection = scrollDirectionRef.current; 44436 const basePosition = view.search ? 1 : view.startPosition ?? 1; 44437 const newRecords = shownData.map((record, index2) => { 44438 const itemId = getItemId(record); 44439 const position = view.infiniteScrollEnabled ? basePosition + index2 : void 0; 44440 if (position !== void 0) { 44441 positionMapRef.current.set(itemId, position); 44442 } 44443 return { 44444 ...record, 44445 position 44446 }; 44447 }); 44448 if (newRecords.length === 0) { 44449 return prev; 44450 } 44451 const prevWithoutDuplicates = prev.filter( 44452 (record) => !shownDataIds.has(getItemId(record)) 44453 ); 44454 const allRecords = scrollDirection === "up" ? [...newRecords, ...prevWithoutDuplicates] : [...prevWithoutDuplicates, ...newRecords]; 44455 allRecords.sort((a2, b2) => { 44456 const posA = a2.position; 44457 const posB = b2.position; 44458 return posA - posB; 44459 }); 44460 let result = allRecords; 44461 if (visibleEntries.length > 0) { 44462 const visibleMin = Math.min(...visibleEntries); 44463 const visibleMax = Math.max(...visibleEntries); 44464 const buffer = 20; 44465 const recordPositions = allRecords.map( 44466 (r3) => r3.position 44467 ); 44468 const minRecordPos = Math.min(...recordPositions); 44469 const maxRecordPos = Math.max(...recordPositions); 44470 const hasOverlap = !(maxRecordPos < visibleMin - buffer || minRecordPos > visibleMax + buffer); 44471 if (hasOverlap) { 44472 result = allRecords.filter((record) => { 44473 const itemId = getItemId(record); 44474 const isSelected2 = selection?.includes(itemId); 44475 if (isSelected2) { 44476 return true; 44477 } 44478 const itemPosition = record.position; 44479 if (scrollDirection === "up") { 44480 return itemPosition <= visibleMax + buffer; 44481 } else if (scrollDirection === "down") { 44482 return itemPosition >= visibleMin - buffer; 44483 } 44484 return itemPosition >= visibleMin - buffer && itemPosition <= visibleMax + buffer; 44485 }); 44486 } 44487 } 44488 allLoadedRecordsRef.current = result; 44489 return result; 44490 }, [ 44491 shownData, 44492 view.search, 44493 view.filters, 44494 view.perPage, 44495 view.startPosition, 44496 view.infiniteScrollEnabled, 44497 visibleEntries, 44498 selection, 44499 getItemId 44500 ]); 44501 if (!isInfiniteScrollEnabled) { 44502 const dataToReturn = isLoading && previousDataRef.current?.length ? previousDataRef.current : shownData; 44503 return { 44504 data: dataToReturn.map((item) => ({ 44505 ...item, 44506 position: void 0 44507 })), 44508 paginationInfo: isLoading && previousDataRef.current?.length ? previousPaginationInfoRef.current : paginationInfo, 44509 hasInitiallyLoaded, 44510 setVisibleEntries: void 0 44511 }; 44512 } 44513 return { 44514 data: allLoadedRecords, 44515 paginationInfo, 44516 hasInitiallyLoaded, 44517 setVisibleEntries 44518 }; 44519 } 44520 44521 // packages/dataviews/build-module/hooks/use-infinite-scroll.mjs 44522 var import_element137 = __toESM(require_element(), 1); 44523 var import_compose22 = __toESM(require_compose(), 1); 44524 function captureAnchorElement(container, anchorElementRef, direction) { 44525 const containerRect = container.getBoundingClientRect(); 44526 const centerY = containerRect.top + containerRect.height / 2; 44527 const items = Array.from(container.querySelectorAll("[aria-posinset]")); 44528 if (items.length === 0) { 44529 return false; 44530 } 44531 const bestAnchor = items.reduce((best, item) => { 44532 const itemRect = item.getBoundingClientRect(); 44533 const itemCenterY = itemRect.top + itemRect.height / 2; 44534 const distance = Math.abs(itemCenterY - centerY); 44535 const bestRect = best.getBoundingClientRect(); 44536 const bestCenterY = bestRect.top + bestRect.height / 2; 44537 const bestDistance = Math.abs(bestCenterY - centerY); 44538 return distance < bestDistance ? item : best; 44539 }); 44540 const posinset = Number(bestAnchor.getAttribute("aria-posinset")); 44541 const anchorRect = bestAnchor.getBoundingClientRect(); 44542 anchorElementRef.current = { 44543 posinset, 44544 viewportOffset: anchorRect.top - containerRect.top, 44545 scrollTop: container.scrollTop, 44546 direction 44547 }; 44548 return true; 44549 } 44550 function useInfiniteScroll({ 44551 view, 44552 onChangeView, 44553 isLoading, 44554 paginationInfo, 44555 containerRef, 44556 setVisibleEntries 44557 }) { 44558 const anchorElementRef = (0, import_element137.useRef)(null); 44559 const viewRef = (0, import_element137.useRef)(view); 44560 const isLoadingRef = (0, import_element137.useRef)(isLoading); 44561 const onChangeViewRef = (0, import_element137.useRef)(onChangeView); 44562 const totalItemsRef = (0, import_element137.useRef)(paginationInfo.totalItems); 44563 (0, import_element137.useLayoutEffect)(() => { 44564 viewRef.current = view; 44565 isLoadingRef.current = isLoading; 44566 onChangeViewRef.current = onChangeView; 44567 totalItemsRef.current = paginationInfo.totalItems; 44568 }, [view, isLoading, onChangeView, paginationInfo.totalItems]); 44569 const intersectionObserverCallback = (0, import_element137.useCallback)( 44570 (entries) => { 44571 if (!setVisibleEntries) { 44572 return; 44573 } 44574 setVisibleEntries((prev) => { 44575 const newVisibleEntries = new Set(prev); 44576 let hasChanged = false; 44577 entries.forEach((entry) => { 44578 const posInSet = Number( 44579 entry.target?.attributes?.getNamedItem( 44580 "aria-posinset" 44581 )?.value 44582 ); 44583 if (isNaN(posInSet)) { 44584 return; 44585 } 44586 if (entry.isIntersecting) { 44587 if (!newVisibleEntries.has(posInSet)) { 44588 newVisibleEntries.add(posInSet); 44589 hasChanged = true; 44590 } 44591 } else if (newVisibleEntries.has(posInSet)) { 44592 newVisibleEntries.delete(posInSet); 44593 hasChanged = true; 44594 } 44595 }); 44596 return hasChanged ? Array.from(newVisibleEntries).sort() : prev; 44597 }); 44598 }, 44599 [setVisibleEntries] 44600 ); 44601 (0, import_element137.useLayoutEffect)(() => { 44602 const container = containerRef.current; 44603 const anchor = anchorElementRef.current; 44604 if (!container || !view.infiniteScrollEnabled || !anchor || isLoading) { 44605 return; 44606 } 44607 const anchorElement = container.querySelector( 44608 `[aria-posinset="$anchor.posinset}"]` 44609 ); 44610 if (anchorElement) { 44611 const containerRect = container.getBoundingClientRect(); 44612 const anchorRect = anchorElement.getBoundingClientRect(); 44613 const currentOffset = anchorRect.top - containerRect.top; 44614 const scrollAdjustment = currentOffset - anchor.viewportOffset + (container.scrollTop - anchor.scrollTop); 44615 if (Math.abs(scrollAdjustment) > 1) { 44616 container.scrollTop += scrollAdjustment; 44617 } 44618 } 44619 anchorElementRef.current = null; 44620 }, [containerRef, isLoading, view.infiniteScrollEnabled]); 44621 const intersectionObserverRef = (0, import_element137.useRef)( 44622 null 44623 ); 44624 (0, import_element137.useEffect)(() => { 44625 if (!view.infiniteScrollEnabled || !intersectionObserverCallback) { 44626 if (intersectionObserverRef.current) { 44627 intersectionObserverRef.current.disconnect(); 44628 intersectionObserverRef.current = null; 44629 } 44630 return; 44631 } 44632 intersectionObserverRef.current = new IntersectionObserver( 44633 intersectionObserverCallback, 44634 { root: null, rootMargin: "0px", threshold: 0.1 } 44635 ); 44636 return () => { 44637 if (intersectionObserverRef.current) { 44638 intersectionObserverRef.current.disconnect(); 44639 intersectionObserverRef.current = null; 44640 } 44641 }; 44642 }, [view.infiniteScrollEnabled, intersectionObserverCallback]); 44643 (0, import_element137.useEffect)(() => { 44644 if (!view.infiniteScrollEnabled || !containerRef.current) { 44645 return; 44646 } 44647 let lastScrollTop = 0; 44648 const BOTTOM_THRESHOLD = 600; 44649 const TOP_THRESHOLD = 800; 44650 const handleScroll = (0, import_compose22.throttle)((event) => { 44651 const currentView = viewRef.current; 44652 const totalItems = totalItemsRef.current; 44653 const target = event.target; 44654 const scrollTop = target.scrollTop; 44655 const scrollHeight = target.scrollHeight; 44656 const clientHeight = target.clientHeight; 44657 const scrollDirection = scrollTop > lastScrollTop ? "down" : "up"; 44658 lastScrollTop = scrollTop; 44659 if (isLoadingRef.current) { 44660 return; 44661 } 44662 const currentStartPosition = currentView.startPosition || 1; 44663 const batchSize = currentView.perPage || 10; 44664 const currentEndPosition = Math.min( 44665 currentStartPosition + batchSize, 44666 totalItems 44667 ); 44668 if (scrollDirection === "down" && scrollTop + clientHeight >= scrollHeight - BOTTOM_THRESHOLD) { 44669 if (currentEndPosition < totalItems) { 44670 const newStartPosition = currentEndPosition; 44671 captureAnchorElement(target, anchorElementRef, "down"); 44672 onChangeViewRef.current({ 44673 ...currentView, 44674 startPosition: newStartPosition 44675 }); 44676 } 44677 } 44678 if (scrollDirection === "up" && scrollTop <= TOP_THRESHOLD) { 44679 if (currentStartPosition > 1) { 44680 const calculatedStartPosition = currentStartPosition - batchSize; 44681 const newStartPosition = calculatedStartPosition < 6 ? 1 : calculatedStartPosition; 44682 captureAnchorElement(target, anchorElementRef, "up"); 44683 onChangeViewRef.current({ 44684 ...currentView, 44685 startPosition: newStartPosition 44686 }); 44687 } 44688 } 44689 }, 50); 44690 const container = containerRef.current; 44691 container.addEventListener("scroll", handleScroll); 44692 return () => { 44693 container.removeEventListener("scroll", handleScroll); 44694 handleScroll.cancel(); 44695 }; 44696 }, [containerRef, view.infiniteScrollEnabled]); 44697 return { 44698 intersectionObserver: intersectionObserverRef.current 44699 }; 44700 } 44701 44702 // packages/dataviews/build-module/hooks/use-page-clamp.mjs 44703 var import_element138 = __toESM(require_element(), 1); 44704 var import_compose23 = __toESM(require_compose(), 1); 44705 function usePageClamp({ 44706 view, 44707 onChangeView, 44708 isLoading, 44709 totalPages 44710 }) { 44711 const lastPage = typeof totalPages === "number" && Number.isFinite(totalPages) ? Math.max(totalPages, 1) : null; 44712 const page = view.page; 44713 const goToLastPage = (0, import_compose23.useEvent)(() => { 44714 if (lastPage !== null) { 44715 onChangeView({ ...view, page: lastPage }); 44716 } 44717 }); 44718 (0, import_element138.useEffect)(() => { 44719 if (isLoading || lastPage === null || !page || page <= lastPage) { 44720 return; 44721 } 44722 goToLastPage(); 44723 }, [isLoading, lastPage, page, goToLastPage]); 44724 } 44725 44726 // packages/dataviews/build-module/dataviews-picker/index.mjs 44727 var import_element139 = __toESM(require_element(), 1); 44728 var import_compose24 = __toESM(require_compose(), 1); 44729 var import_jsx_runtime197 = __toESM(require_jsx_runtime(), 1); 44730 var isItemClickable = () => false; 44731 var dataViewsPickerLayouts = VIEW_LAYOUTS.filter( 44732 (viewLayout) => viewLayout.isPicker 44733 ); 44734 var defaultGetItemId = (item) => item.id; 44735 var EMPTY_ARRAY5 = []; 44736 var DEFAULT_PICKER_LAYOUTS = { 44737 pickerGrid: true, 44738 pickerTable: true 44739 }; 44740 function DefaultUI({ 44741 search = true, 44742 searchLabel = void 0 44743 }) { 44744 const { view } = (0, import_element139.useContext)(dataviews_context_default); 44745 const isInfiniteScroll = view.infiniteScrollEnabled; 44746 return /* @__PURE__ */ (0, import_jsx_runtime197.jsxs)(import_jsx_runtime197.Fragment, { children: [ 44747 /* @__PURE__ */ (0, import_jsx_runtime197.jsxs)( 44748 Stack, 44749 { 44750 direction: "row", 44751 align: "top", 44752 justify: "space-between", 44753 className: clsx_default("dataviews__view-actions", { 44754 "dataviews__view-actions--infinite-scroll": isInfiniteScroll 44755 }), 44756 gap: "xs", 44757 children: [ 44758 /* @__PURE__ */ (0, import_jsx_runtime197.jsxs)( 44759 Stack, 44760 { 44761 direction: "row", 44762 gap: "sm", 44763 justify: "start", 44764 className: "dataviews__search", 44765 children: [ 44766 search && /* @__PURE__ */ (0, import_jsx_runtime197.jsx)(dataviews_search_default, { label: searchLabel }), 44767 /* @__PURE__ */ (0, import_jsx_runtime197.jsx)(toggle_default, {}) 44768 ] 44769 } 44770 ), 44771 /* @__PURE__ */ (0, import_jsx_runtime197.jsx)(Stack, { direction: "row", gap: "xs", style: { flexShrink: 0 }, children: /* @__PURE__ */ (0, import_jsx_runtime197.jsx)(dataviews_view_config_default, {}) }) 44772 ] 44773 } 44774 ), 44775 /* @__PURE__ */ (0, import_jsx_runtime197.jsx)(filters_toggled_default, { className: "dataviews-filters__container" }), 44776 /* @__PURE__ */ (0, import_jsx_runtime197.jsx)(DataViewsLayout, {}), 44777 /* @__PURE__ */ (0, import_jsx_runtime197.jsx)(DataViewsPickerFooter, {}) 44778 ] }); 44779 } 44780 function DataViewsPicker({ 44781 view, 44782 onChangeView, 44783 fields, 44784 search = true, 44785 searchLabel = void 0, 44786 actions = EMPTY_ARRAY5, 44787 data, 44788 getItemId = defaultGetItemId, 44789 isLoading = false, 44790 paginationInfo, 44791 defaultLayouts: defaultLayoutsProperty = DEFAULT_PICKER_LAYOUTS, 44792 selection, 44793 onChangeSelection, 44794 children, 44795 config = { perPageSizes: [10, 20, 50, 100] }, 44796 itemListLabel, 44797 empty, 44798 onReset 44799 }) { 44800 const { data: displayData, setVisibleEntries } = useData({ 44801 view, 44802 data, 44803 getItemId, 44804 selection, 44805 paginationInfo 44806 }); 44807 const containerRef = (0, import_element139.useRef)(null); 44808 const [containerWidth, setContainerWidth] = (0, import_element139.useState)(0); 44809 const resizeObserverRef = (0, import_compose24.useResizeObserver)( 44810 (resizeObserverEntries) => { 44811 setContainerWidth( 44812 resizeObserverEntries[0].borderBoxSize[0].inlineSize 44813 ); 44814 }, 44815 { box: "border-box" } 44816 ); 44817 const [openedFilter, setOpenedFilter] = (0, import_element139.useState)(null); 44818 function setSelectionWithChange(value) { 44819 const newValue = typeof value === "function" ? value(selection) : value; 44820 if (onChangeSelection) { 44821 onChangeSelection(newValue); 44822 } 44823 } 44824 const _fields = (0, import_element139.useMemo)(() => normalizeFields(fields), [fields]); 44825 const filters = use_filters_default(_fields, view); 44826 const hasPrimaryOrLockedFilters = (0, import_element139.useMemo)( 44827 () => (filters || []).some( 44828 (filter) => filter.isPrimary || filter.isLocked 44829 ), 44830 [filters] 44831 ); 44832 const [isShowingFilter, setIsShowingFilter] = (0, import_element139.useState)( 44833 hasPrimaryOrLockedFilters 44834 ); 44835 const { intersectionObserver } = useInfiniteScroll({ 44836 view, 44837 onChangeView, 44838 isLoading, 44839 paginationInfo, 44840 containerRef, 44841 setVisibleEntries 44842 }); 44843 usePageClamp({ 44844 view, 44845 onChangeView, 44846 isLoading, 44847 totalPages: paginationInfo.totalPages 44848 }); 44849 (0, import_element139.useEffect)(() => { 44850 if (hasPrimaryOrLockedFilters && !isShowingFilter) { 44851 setIsShowingFilter(true); 44852 } 44853 }, [hasPrimaryOrLockedFilters, isShowingFilter]); 44854 const defaultLayouts2 = (0, import_element139.useMemo)( 44855 () => Object.fromEntries( 44856 Object.entries(defaultLayoutsProperty).filter(([layoutType]) => { 44857 return dataViewsPickerLayouts.some( 44858 (viewLayout) => viewLayout.type === layoutType 44859 ); 44860 }).map(([key, value]) => [ 44861 key, 44862 value === true ? {} : value 44863 ]) 44864 ), 44865 [defaultLayoutsProperty] 44866 ); 44867 if (!defaultLayouts2[view.type]) { 44868 return null; 44869 } 44870 return /* @__PURE__ */ (0, import_jsx_runtime197.jsx)( 44871 dataviews_context_default.Provider, 44872 { 44873 value: { 44874 view, 44875 onChangeView, 44876 fields: _fields, 44877 actions, 44878 data: displayData, 44879 isLoading, 44880 paginationInfo, 44881 isItemClickable, 44882 selection, 44883 onChangeSelection: setSelectionWithChange, 44884 openedFilter, 44885 setOpenedFilter, 44886 getItemId, 44887 containerWidth, 44888 containerRef, 44889 resizeObserverRef, 44890 defaultLayouts: defaultLayouts2, 44891 filters, 44892 isShowingFilter, 44893 setIsShowingFilter, 44894 config, 44895 itemListLabel, 44896 empty, 44897 onReset, 44898 hasInitiallyLoaded: true, 44899 intersectionObserver 44900 }, 44901 children: /* @__PURE__ */ (0, import_jsx_runtime197.jsx)("div", { className: "dataviews-picker-wrapper", children: children ?? /* @__PURE__ */ (0, import_jsx_runtime197.jsx)(DefaultUI, { search, searchLabel }) }) 44902 } 44903 ); 44904 } 44905 var DataViewsPickerSubComponents = DataViewsPicker; 44906 DataViewsPickerSubComponents.BulkActionToolbar = DataViewsPickerBulkActionToolbar; 44907 DataViewsPickerSubComponents.Footer = DataViewsPickerFooter; 44908 DataViewsPickerSubComponents.Filters = filters_default; 44909 DataViewsPickerSubComponents.FiltersToggled = filters_toggled_default; 44910 DataViewsPickerSubComponents.FiltersToggle = toggle_default; 44911 DataViewsPickerSubComponents.Layout = DataViewsLayout; 44912 DataViewsPickerSubComponents.LayoutSwitcher = ViewTypeMenu; 44913 DataViewsPickerSubComponents.Pagination = DataViewsPagination; 44914 DataViewsPickerSubComponents.Search = dataviews_search_default; 44915 DataViewsPickerSubComponents.ViewConfig = DataviewsViewConfigDropdown; 44916 var dataviews_picker_default = DataViewsPickerSubComponents; 44917 44918 // node_modules/dequal/dist/index.mjs 44919 var has = Object.prototype.hasOwnProperty; 44920 function find(iter, tar, key) { 44921 for (key of iter.keys()) { 44922 if (dequal(key, tar)) return key; 44923 } 44924 } 44925 function dequal(foo, bar) { 44926 var ctor, len, tmp; 44927 if (foo === bar) return true; 44928 if (foo && bar && (ctor = foo.constructor) === bar.constructor) { 44929 if (ctor === Date) return foo.getTime() === bar.getTime(); 44930 if (ctor === RegExp) return foo.toString() === bar.toString(); 44931 if (ctor === Array) { 44932 if ((len = foo.length) === bar.length) { 44933 while (len-- && dequal(foo[len], bar[len])) ; 44934 } 44935 return len === -1; 44936 } 44937 if (ctor === Set) { 44938 if (foo.size !== bar.size) { 44939 return false; 44940 } 44941 for (len of foo) { 44942 tmp = len; 44943 if (tmp && typeof tmp === "object") { 44944 tmp = find(bar, tmp); 44945 if (!tmp) return false; 44946 } 44947 if (!bar.has(tmp)) return false; 44948 } 44949 return true; 44950 } 44951 if (ctor === Map) { 44952 if (foo.size !== bar.size) { 44953 return false; 44954 } 44955 for (len of foo) { 44956 tmp = len[0]; 44957 if (tmp && typeof tmp === "object") { 44958 tmp = find(bar, tmp); 44959 if (!tmp) return false; 44960 } 44961 if (!dequal(len[1], bar.get(tmp))) { 44962 return false; 44963 } 44964 } 44965 return true; 44966 } 44967 if (ctor === ArrayBuffer) { 44968 foo = new Uint8Array(foo); 44969 bar = new Uint8Array(bar); 44970 } else if (ctor === DataView) { 44971 if ((len = foo.byteLength) === bar.byteLength) { 44972 while (len-- && foo.getInt8(len) === bar.getInt8(len)) ; 44973 } 44974 return len === -1; 44975 } 44976 if (ArrayBuffer.isView(foo)) { 44977 if ((len = foo.byteLength) === bar.byteLength) { 44978 while (len-- && foo[len] === bar[len]) ; 44979 } 44980 return len === -1; 44981 } 44982 if (!ctor || typeof foo === "object") { 44983 len = 0; 44984 for (ctor in foo) { 44985 if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false; 44986 if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false; 44987 } 44988 return Object.keys(bar).length === len; 44989 } 44990 } 44991 return foo !== foo && bar !== bar; 44992 } 44993 44994 // packages/views/build-module/use-view.mjs 44995 var import_element140 = __toESM(require_element(), 1); 44996 var import_data7 = __toESM(require_data(), 1); 44997 var import_preferences = __toESM(require_preferences(), 1); 44998 44999 // packages/views/build-module/preference-keys.mjs 45000 function generatePreferenceKey(kind, name, slug) { 45001 return `dataviews-$kind}-$name}-$slug}`; 45002 } 45003 45004 // packages/views/build-module/resolve-view.mjs 45005 var QUERY_PARAMS = ["page", "search"]; 45006 function isPlainObject2(value) { 45007 return typeof value === "object" && value !== null && !Array.isArray(value); 45008 } 45009 function withoutQueryParams(layer) { 45010 const result = isPlainObject2(layer) ? { ...layer } : {}; 45011 for (const key of QUERY_PARAMS) { 45012 delete result[key]; 45013 } 45014 return result; 45015 } 45016 function mergeLayer(lower, upper) { 45017 const result = { ...lower }; 45018 for (const key of Object.keys(upper)) { 45019 const value = upper[key]; 45020 const current = result[key]; 45021 result[key] = isPlainObject2(current) && isPlainObject2(value) ? mergeLayer(current, value) : value; 45022 } 45023 return result; 45024 } 45025 function diffLayer(value, base, persisted = {}) { 45026 const result = {}; 45027 for (const key of Object.keys(value)) { 45028 const next = value[key]; 45029 const current = base[key]; 45030 const prev = persisted[key]; 45031 if (next === void 0) { 45032 continue; 45033 } 45034 if (isPlainObject2(next) && isPlainObject2(current)) { 45035 const nested = diffLayer( 45036 next, 45037 current, 45038 isPlainObject2(prev) ? prev : {} 45039 ); 45040 if (Object.keys(nested).length > 0) { 45041 result[key] = nested; 45042 } 45043 } else if (!dequal(next, current)) { 45044 result[key] = next; 45045 } else if (prev !== void 0 && dequal(next, prev)) { 45046 result[key] = prev; 45047 } 45048 } 45049 return result; 45050 } 45051 function getLockedFilters(overrides) { 45052 return (overrides?.filters ?? []).filter((filter) => filter.isLocked); 45053 } 45054 function applyLockedFilters(view, overrides) { 45055 const locked = getLockedFilters(overrides); 45056 if (locked.length === 0) { 45057 return view; 45058 } 45059 const rest = (view.filters ?? []).filter( 45060 (filter) => !locked.some((f2) => f2.field === filter.field) 45061 ); 45062 return { ...view, filters: [...locked, ...rest] }; 45063 } 45064 function resolveBaseView(layers, effectiveType) { 45065 const { defaultView: defaultView2, defaultLayouts: defaultLayouts2, activeViewOverrides } = layers; 45066 const layoutDefaults = defaultLayouts2?.[effectiveType]; 45067 return applyLockedFilters( 45068 [layoutDefaults, activeViewOverrides].reduce( 45069 (lower, upper) => mergeLayer(lower, withoutQueryParams(upper)), 45070 withoutQueryParams(defaultView2) 45071 ), 45072 activeViewOverrides 45073 ); 45074 } 45075 function resolveView(args) { 45076 const { defaultView: defaultView2, activeViewOverrides, persistedView, page, search } = args; 45077 const effectiveType = persistedView?.type ?? activeViewOverrides?.type ?? defaultView2?.type; 45078 const baseView = resolveBaseView(args, effectiveType); 45079 const view = { 45080 ...applyLockedFilters( 45081 mergeLayer(baseView, withoutQueryParams(persistedView)), 45082 activeViewOverrides 45083 ), 45084 page: Number(page ?? 1), 45085 search: search ?? "" 45086 }; 45087 return view; 45088 } 45089 function getUserModifications(newView, layers) { 45090 const { activeViewOverrides, persistedView } = layers; 45091 const baseView = resolveBaseView(layers, newView.type); 45092 const modifications = diffLayer( 45093 withoutQueryParams(newView), 45094 withoutQueryParams(baseView), 45095 withoutQueryParams(persistedView) 45096 ); 45097 const locked = getLockedFilters(activeViewOverrides); 45098 if (locked.length > 0 && Array.isArray(modifications.filters)) { 45099 modifications.filters = modifications.filters.filter( 45100 (filter) => !locked.some((f2) => f2.field === filter.field) 45101 ); 45102 } 45103 return Object.keys(modifications).length > 0 ? modifications : void 0; 45104 } 45105 45106 // packages/views/build-module/use-view.mjs 45107 function useView(config) { 45108 const { 45109 kind, 45110 name, 45111 slug, 45112 defaultView: defaultView2, 45113 defaultLayouts: defaultLayouts2, 45114 activeViewOverrides, 45115 queryParams, 45116 onChangeQueryParams 45117 } = config; 45118 const preferenceKey = generatePreferenceKey(kind, name, slug); 45119 const persistedView = (0, import_data7.useSelect)( 45120 (select3) => { 45121 return select3(import_preferences.store).get( 45122 "core/views", 45123 preferenceKey 45124 ); 45125 }, 45126 [preferenceKey] 45127 ); 45128 const { set: set3 } = (0, import_data7.useDispatch)(import_preferences.store); 45129 const page = Number(queryParams?.page ?? 1); 45130 const search = queryParams?.search ?? ""; 45131 const view = (0, import_element140.useMemo)( 45132 () => resolveView({ 45133 defaultView: defaultView2, 45134 defaultLayouts: defaultLayouts2, 45135 activeViewOverrides, 45136 persistedView, 45137 page, 45138 search 45139 }), 45140 [ 45141 defaultView2, 45142 defaultLayouts2, 45143 activeViewOverrides, 45144 persistedView, 45145 page, 45146 search 45147 ] 45148 ); 45149 const isModified = !!persistedView && Object.keys(persistedView).length > 0; 45150 const updateView = (0, import_element140.useCallback)( 45151 (newView) => { 45152 const newQueryParams = { 45153 page: Number(newView?.page ?? 1), 45154 search: newView?.search ?? "" 45155 }; 45156 if (onChangeQueryParams && !dequal(newQueryParams, { page, search })) { 45157 onChangeQueryParams(newQueryParams); 45158 } 45159 const modifications = getUserModifications(newView, { 45160 defaultView: defaultView2, 45161 defaultLayouts: defaultLayouts2, 45162 activeViewOverrides, 45163 persistedView 45164 }); 45165 if (!dequal(modifications, persistedView)) { 45166 set3("core/views", preferenceKey, modifications); 45167 } 45168 }, 45169 [ 45170 onChangeQueryParams, 45171 page, 45172 search, 45173 defaultView2, 45174 defaultLayouts2, 45175 activeViewOverrides, 45176 persistedView, 45177 set3, 45178 preferenceKey 45179 ] 45180 ); 45181 const resetToDefault = (0, import_element140.useCallback)(() => { 45182 set3("core/views", preferenceKey, void 0); 45183 }, [preferenceKey, set3]); 45184 return { 45185 view, 45186 isModified, 45187 updateView, 45188 resetToDefault 45189 }; 45190 } 45191 45192 // packages/views/build-module/load-view.mjs 45193 var import_data8 = __toESM(require_data(), 1); 45194 var import_preferences2 = __toESM(require_preferences(), 1); 45195 45196 // packages/views/build-module/use-view-config.mjs 45197 var import_data9 = __toESM(require_data(), 1); 45198 var import_core_data2 = __toESM(require_core_data(), 1); 45199 45200 // packages/views/build-module/lock-unlock.mjs 45201 var import_private_apis2 = __toESM(require_private_apis(), 1); 45202 var { lock: lock2, unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( 45203 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", 45204 "@wordpress/views" 45205 ); 45206 45207 // packages/media-fields/build-module/alt_text/index.mjs 45208 var import_i18n62 = __toESM(require_i18n(), 1); 45209 var import_jsx_runtime198 = __toESM(require_jsx_runtime(), 1); 45210 var altTextField = { 45211 id: "alt_text", 45212 type: "text", 45213 label: (0, import_i18n62.__)("Alt text"), 45214 description: /* @__PURE__ */ (0, import_jsx_runtime198.jsxs)(import_jsx_runtime198.Fragment, { children: [ 45215 /* @__PURE__ */ (0, import_jsx_runtime198.jsx)( 45216 Link, 45217 { 45218 href: ( 45219 // translators: Localized tutorial, if one exists. W3C Web Accessibility Initiative link has list of existing translations. 45220 (0, import_i18n62.__)( 45221 "https://www.w3.org/WAI/tutorials/images/decision-tree/" 45222 ) 45223 ), 45224 openInNewTab: true, 45225 children: (0, import_i18n62.__)("Describe the purpose of the image.") 45226 } 45227 ), 45228 /* @__PURE__ */ (0, import_jsx_runtime198.jsx)("br", {}), 45229 (0, import_i18n62.__)("Leave empty if decorative.") 45230 ] }), 45231 isVisible: (item) => item?.media_type === "image", 45232 render: ({ item }) => item?.alt_text || "-", 45233 Edit: { 45234 control: "textarea", 45235 rows: 2 45236 }, 45237 enableSorting: false, 45238 filterBy: false 45239 }; 45240 var alt_text_default = altTextField; 45241 45242 // packages/media-fields/build-module/attached_to/index.mjs 45243 var import_i18n65 = __toESM(require_i18n(), 1); 45244 45245 // packages/media-fields/build-module/attached_to/view.mjs 45246 var import_element141 = __toESM(require_element(), 1); 45247 var import_i18n63 = __toESM(require_i18n(), 1); 45248 45249 // packages/media-fields/build-module/utils/get-rendered-content.mjs 45250 function getRenderedContent(content) { 45251 if (!content) { 45252 return ""; 45253 } 45254 if (typeof content === "string") { 45255 return content; 45256 } 45257 if (typeof content === "object") { 45258 return content.rendered || content.raw || ""; 45259 } 45260 return ""; 45261 } 45262 45263 // packages/media-fields/build-module/attached_to/view.mjs 45264 var import_jsx_runtime199 = __toESM(require_jsx_runtime(), 1); 45265 function MediaAttachedToView({ 45266 item 45267 }) { 45268 const [attachedPostTitle, setAttachedPostTitle] = (0, import_element141.useState)(null); 45269 const parentId = item.post; 45270 const embeddedPostId = item._embedded?.["wp:attached-to"]?.[0]?.id; 45271 const embeddedPostTitle = item._embedded?.["wp:attached-to"]?.[0]?.title; 45272 (0, import_element141.useEffect)(() => { 45273 if (!!parentId && parentId === embeddedPostId) { 45274 setAttachedPostTitle( 45275 getRenderedContent(embeddedPostTitle) || (0, import_i18n63.__)("(no title)") 45276 ); 45277 } 45278 if (!parentId) { 45279 setAttachedPostTitle((0, import_i18n63.__)("(Unattached)")); 45280 } 45281 }, [parentId, embeddedPostId, embeddedPostTitle]); 45282 return /* @__PURE__ */ (0, import_jsx_runtime199.jsx)(import_jsx_runtime199.Fragment, { children: attachedPostTitle }); 45283 } 45284 45285 // packages/media-fields/build-module/attached_to/edit.mjs 45286 var import_core_data3 = __toESM(require_core_data(), 1); 45287 var import_components50 = __toESM(require_components(), 1); 45288 var import_i18n64 = __toESM(require_i18n(), 1); 45289 var import_element142 = __toESM(require_element(), 1); 45290 var import_compose25 = __toESM(require_compose(), 1); 45291 var import_data10 = __toESM(require_data(), 1); 45292 var import_jsx_runtime200 = __toESM(require_jsx_runtime(), 1); 45293 function MediaAttachedToEdit({ 45294 data, 45295 onChange 45296 }) { 45297 const defaultPost = !!data.post && !!data?._embedded?.["wp:attached-to"]?.[0] ? [ 45298 { 45299 label: getRenderedContent( 45300 data._embedded?.["wp:attached-to"]?.[0]?.title 45301 ), 45302 value: data.post.toString() 45303 } 45304 ] : []; 45305 const [options, setOptions] = (0, import_element142.useState)(defaultPost); 45306 const [searchResults, setSearchResults] = (0, import_element142.useState)( 45307 [] 45308 ); 45309 const [isLoading, setIsLoading] = (0, import_element142.useState)(false); 45310 const [value, setValue] = (0, import_element142.useState)( 45311 data?.post?.toString() ?? null 45312 ); 45313 const postTypes = (0, import_data10.useSelect)( 45314 (select3) => select3(import_core_data3.store).getPostTypes(), 45315 [] 45316 ); 45317 const handleDetach = () => { 45318 onChange({ 45319 post: 0, 45320 _embedded: { ...data?._embedded, "wp:attached-to": void 0 } 45321 }); 45322 setValue(null); 45323 }; 45324 const onValueChange = async (filterValue) => { 45325 setIsLoading(true); 45326 const results = await (0, import_core_data3.__experimentalFetchLinkSuggestions)( 45327 filterValue, 45328 /* 45329 * @TODO `fetchLinkSuggestions()` should accept `perPage` as an option argument. 45330 * `isInitialSuggestions` limits the result to 3, otherwise it's hardcoded to 20. 45331 */ 45332 { type: "post", isInitialSuggestions: true }, 45333 {} 45334 ); 45335 setSearchResults(results); 45336 const suggestions = results.map((result) => { 45337 return { 45338 label: result.title, 45339 value: result.id.toString() 45340 }; 45341 }); 45342 const includeCurrent = !filterValue && suggestions.findIndex((s2) => s2.value === value) === -1; 45343 setOptions(suggestions.concat(includeCurrent ? defaultPost : [])); 45344 setIsLoading(false); 45345 }; 45346 const debouncedValueChange = (0, import_compose25.useDebounce)((0, import_compose25.useEvent)(onValueChange), 300); 45347 const handleSelectOption = (selectedPostId) => { 45348 if (!selectedPostId) { 45349 handleDetach(); 45350 return; 45351 } 45352 setValue(selectedPostId); 45353 if (selectedPostId) { 45354 const selectedPost = searchResults.find( 45355 (result) => result.id === Number(selectedPostId) 45356 ); 45357 if (selectedPost && postTypes) { 45358 const postType = postTypes.find( 45359 (_postType) => _postType.slug === selectedPost?.type 45360 ); 45361 const attachedTo = { 45362 ...postType && { type: postType.slug }, 45363 id: Number(selectedPostId), 45364 title: { 45365 raw: selectedPost.title, 45366 rendered: selectedPost.title 45367 } 45368 }; 45369 onChange({ 45370 post: Number(selectedPostId), 45371 _embedded: { 45372 ...data?._embedded, 45373 "wp:attached-to": [attachedTo] 45374 } 45375 }); 45376 } 45377 } 45378 }; 45379 return /* @__PURE__ */ (0, import_jsx_runtime200.jsx)( 45380 import_components50.ComboboxControl, 45381 { 45382 className: "dataviews-media-field__attached-to", 45383 isLoading, 45384 label: (0, import_i18n64.__)("Attached to"), 45385 help: (0, import_i18n64.__)("Attach this file to a single post or page."), 45386 value, 45387 options, 45388 onFilterValueChange: (filterValue) => debouncedValueChange(filterValue), 45389 onChange: handleSelectOption, 45390 hideLabelFromVision: true, 45391 expandOnFocus: false 45392 } 45393 ); 45394 } 45395 45396 // packages/media-fields/build-module/attached_to/index.mjs 45397 var attachedToField = { 45398 id: "attached_to", 45399 type: "text", 45400 label: (0, import_i18n65.__)("Attached to"), 45401 Edit: MediaAttachedToEdit, 45402 render: MediaAttachedToView, 45403 enableSorting: false, 45404 filterBy: false 45405 }; 45406 var attached_to_default = attachedToField; 45407 45408 // packages/media-fields/build-module/author/index.mjs 45409 var import_i18n67 = __toESM(require_i18n(), 1); 45410 var import_data11 = __toESM(require_data(), 1); 45411 var import_core_data4 = __toESM(require_core_data(), 1); 45412 45413 // packages/media-fields/build-module/author/view.mjs 45414 var import_i18n66 = __toESM(require_i18n(), 1); 45415 var import_element143 = __toESM(require_element(), 1); 45416 var import_components51 = __toESM(require_components(), 1); 45417 var import_jsx_runtime201 = __toESM(require_jsx_runtime(), 1); 45418 function AuthorView({ 45419 item 45420 }) { 45421 const author = item?._embedded?.author?.[0]; 45422 const text = author?.name; 45423 const imageUrl = author?.avatar_urls?.[48]; 45424 const [loadingState, setLoadingState] = (0, import_element143.useState)("loading"); 45425 (0, import_element143.useEffect)(() => { 45426 setLoadingState("loading"); 45427 }, [imageUrl]); 45428 const imgRef = (0, import_element143.useCallback)((img) => { 45429 if (img?.complete) { 45430 setLoadingState("instant"); 45431 } 45432 }, []); 45433 const handleLoad = () => { 45434 if (loadingState === "loading") { 45435 setLoadingState("loaded"); 45436 } 45437 }; 45438 return /* @__PURE__ */ (0, import_jsx_runtime201.jsxs)(import_components51.__experimentalHStack, { alignment: "left", spacing: 0, children: [ 45439 !!imageUrl && /* @__PURE__ */ (0, import_jsx_runtime201.jsx)( 45440 "div", 45441 { 45442 className: clsx_default("media-author-field__avatar", { 45443 "is-loading": loadingState === "loading", 45444 "is-loaded": loadingState === "loaded" 45445 }), 45446 children: /* @__PURE__ */ (0, import_jsx_runtime201.jsx)( 45447 "img", 45448 { 45449 ref: imgRef, 45450 onLoad: handleLoad, 45451 alt: (0, import_i18n66.__)("Author avatar"), 45452 src: imageUrl 45453 } 45454 ) 45455 } 45456 ), 45457 !imageUrl && /* @__PURE__ */ (0, import_jsx_runtime201.jsx)("div", { className: "media-author-field__icon", children: /* @__PURE__ */ (0, import_jsx_runtime201.jsx)(import_components51.Icon, { icon: comment_author_avatar_default }) }), 45458 /* @__PURE__ */ (0, import_jsx_runtime201.jsx)("span", { className: "media-author-field__name", children: text }) 45459 ] }); 45460 } 45461 45462 // packages/media-fields/build-module/author/index.mjs 45463 var authorField = { 45464 label: (0, import_i18n67.__)("Author"), 45465 id: "author", 45466 type: "integer", 45467 getElements: async () => { 45468 const authors = await (0, import_data11.resolveSelect)(import_core_data4.store).getEntityRecords( 45469 "root", 45470 "user", 45471 { 45472 per_page: -1, 45473 who: "authors", 45474 _fields: "id,name", 45475 context: "view" 45476 } 45477 ) ?? []; 45478 return authors.map(({ id, name }) => ({ 45479 value: id, 45480 label: name 45481 })); 45482 }, 45483 render: AuthorView, 45484 filterBy: { 45485 operators: ["isAny", "isNone"] 45486 }, 45487 readOnly: true 45488 }; 45489 var author_default = authorField; 45490 45491 // packages/media-fields/build-module/caption/index.mjs 45492 var import_i18n68 = __toESM(require_i18n(), 1); 45493 45494 // packages/media-fields/build-module/utils/get-raw-content.mjs 45495 function getRawContent(content) { 45496 if (!content) { 45497 return ""; 45498 } 45499 if (typeof content === "string") { 45500 return content; 45501 } 45502 if (typeof content === "object" && "raw" in content) { 45503 return content.raw || ""; 45504 } 45505 return ""; 45506 } 45507 45508 // packages/media-fields/build-module/caption/index.mjs 45509 var captionField = { 45510 id: "caption", 45511 type: "text", 45512 label: (0, import_i18n68.__)("Caption"), 45513 getValue: ({ item }) => getRawContent(item?.caption), 45514 render: ({ item }) => getRawContent(item?.caption) || "-", 45515 Edit: { 45516 control: "textarea", 45517 rows: 2 45518 }, 45519 enableSorting: false, 45520 filterBy: false 45521 }; 45522 var caption_default = captionField; 45523 45524 // packages/media-fields/build-module/date_added/index.mjs 45525 var import_i18n69 = __toESM(require_i18n(), 1); 45526 var dateAddedField = { 45527 id: "date", 45528 type: "datetime", 45529 label: (0, import_i18n69.__)("Date added"), 45530 filterBy: { 45531 operators: ["before", "after"] 45532 }, 45533 readOnly: true 45534 }; 45535 var date_added_default = dateAddedField; 45536 45537 // packages/media-fields/build-module/date_modified/index.mjs 45538 var import_i18n70 = __toESM(require_i18n(), 1); 45539 var dateModifiedField = { 45540 id: "modified", 45541 type: "datetime", 45542 label: (0, import_i18n70.__)("Date modified"), 45543 filterBy: { 45544 operators: ["before", "after"] 45545 }, 45546 readOnly: true 45547 }; 45548 var date_modified_default = dateModifiedField; 45549 45550 // packages/media-fields/build-module/description/index.mjs 45551 var import_i18n71 = __toESM(require_i18n(), 1); 45552 var import_jsx_runtime202 = __toESM(require_jsx_runtime(), 1); 45553 var descriptionField = { 45554 id: "description", 45555 type: "text", 45556 label: (0, import_i18n71.__)("Description"), 45557 getValue: ({ item }) => getRawContent(item?.description), 45558 render: ({ item }) => /* @__PURE__ */ (0, import_jsx_runtime202.jsx)("div", { children: getRawContent(item?.description) || "-" }), 45559 Edit: { 45560 control: "textarea", 45561 rows: 5 45562 }, 45563 enableSorting: false, 45564 filterBy: false 45565 }; 45566 var description_default = descriptionField; 45567 45568 // packages/media-fields/build-module/filename/index.mjs 45569 var import_i18n72 = __toESM(require_i18n(), 1); 45570 var import_url4 = __toESM(require_url(), 1); 45571 45572 // packages/media-fields/build-module/filename/view.mjs 45573 var import_element144 = __toESM(require_element(), 1); 45574 var import_url3 = __toESM(require_url(), 1); 45575 var import_jsx_runtime203 = __toESM(require_jsx_runtime(), 1); 45576 var TRUNCATE_LENGTH = 15; 45577 function FileNameView({ 45578 item 45579 }) { 45580 const fileName = (0, import_element144.useMemo)( 45581 () => item?.source_url ? (0, import_url3.getFilename)(item.source_url) : null, 45582 [item?.source_url] 45583 ); 45584 if (!fileName) { 45585 return ""; 45586 } 45587 if (fileName.length <= TRUNCATE_LENGTH) { 45588 return /* @__PURE__ */ (0, import_jsx_runtime203.jsx)("span", { className: "dataviews-media-field__filename", children: fileName }); 45589 } 45590 return /* @__PURE__ */ (0, import_jsx_runtime203.jsxs)(tooltip_exports.Root, { children: [ 45591 /* @__PURE__ */ (0, import_jsx_runtime203.jsx)( 45592 tooltip_exports.Trigger, 45593 { 45594 render: /* @__PURE__ */ (0, import_jsx_runtime203.jsx)("span", { className: "dataviews-media-field__filename", children: fileName }) 45595 } 45596 ), 45597 /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(tooltip_exports.Popup, { children: fileName }) 45598 ] }); 45599 } 45600 45601 // packages/media-fields/build-module/filename/index.mjs 45602 var filenameField = { 45603 id: "filename", 45604 type: "text", 45605 label: (0, import_i18n72.__)("File name"), 45606 getValue: ({ item }) => (0, import_url4.getFilename)(item?.source_url || ""), 45607 render: FileNameView, 45608 enableSorting: false, 45609 filterBy: false, 45610 readOnly: true 45611 }; 45612 var filename_default = filenameField; 45613 45614 // packages/media-fields/build-module/filesize/index.mjs 45615 var import_i18n73 = __toESM(require_i18n(), 1); 45616 var KB_IN_BYTES = 1024; 45617 var MB_IN_BYTES = 1024 * KB_IN_BYTES; 45618 var GB_IN_BYTES = 1024 * MB_IN_BYTES; 45619 var TB_IN_BYTES = 1024 * GB_IN_BYTES; 45620 var PB_IN_BYTES = 1024 * TB_IN_BYTES; 45621 var EB_IN_BYTES = 1024 * PB_IN_BYTES; 45622 var ZB_IN_BYTES = 1024 * EB_IN_BYTES; 45623 var YB_IN_BYTES = 1024 * ZB_IN_BYTES; 45624 function getBytesString(bytes, unitSymbol, decimals = 2) { 45625 return (0, import_i18n73.sprintf)( 45626 // translators: 1: Actual bytes of a file. 2: The unit symbol (e.g. MB). 45627 (0, import_i18n73._x)("%1$s %2$s", "file size"), 45628 bytes.toLocaleString(void 0, { 45629 minimumFractionDigits: 0, 45630 maximumFractionDigits: decimals 45631 }), 45632 unitSymbol 45633 ); 45634 } 45635 function formatFileSize(bytes, decimals = 2) { 45636 if (bytes === 0) { 45637 return getBytesString(0, (0, import_i18n73._x)("B", "unit symbol"), decimals); 45638 } 45639 const quant = { 45640 /* translators: Unit symbol for yottabyte. */ 45641 [(0, import_i18n73._x)("YB", "unit symbol")]: YB_IN_BYTES, 45642 /* translators: Unit symbol for zettabyte. */ 45643 [(0, import_i18n73._x)("ZB", "unit symbol")]: ZB_IN_BYTES, 45644 /* translators: Unit symbol for exabyte. */ 45645 [(0, import_i18n73._x)("EB", "unit symbol")]: EB_IN_BYTES, 45646 /* translators: Unit symbol for petabyte. */ 45647 [(0, import_i18n73._x)("PB", "unit symbol")]: PB_IN_BYTES, 45648 /* translators: Unit symbol for terabyte. */ 45649 [(0, import_i18n73._x)("TB", "unit symbol")]: TB_IN_BYTES, 45650 /* translators: Unit symbol for gigabyte. */ 45651 [(0, import_i18n73._x)("GB", "unit symbol")]: GB_IN_BYTES, 45652 /* translators: Unit symbol for megabyte. */ 45653 [(0, import_i18n73._x)("MB", "unit symbol")]: MB_IN_BYTES, 45654 /* translators: Unit symbol for kilobyte. */ 45655 [(0, import_i18n73._x)("KB", "unit symbol")]: KB_IN_BYTES, 45656 /* translators: Unit symbol for byte. */ 45657 [(0, import_i18n73._x)("B", "unit symbol")]: 1 45658 }; 45659 for (const [unit, mag] of Object.entries(quant)) { 45660 if (bytes >= mag) { 45661 return getBytesString(bytes / mag, unit, decimals); 45662 } 45663 } 45664 return ""; 45665 } 45666 var filesizeField = { 45667 id: "filesize", 45668 type: "text", 45669 label: (0, import_i18n73.__)("File size"), 45670 getValue: ({ item }) => item?.media_details?.filesize ? formatFileSize(item?.media_details?.filesize) : "", 45671 isVisible: (item) => { 45672 return !!item?.media_details?.filesize; 45673 }, 45674 enableSorting: false, 45675 filterBy: false, 45676 readOnly: true 45677 }; 45678 var filesize_default = filesizeField; 45679 45680 // packages/media-fields/build-module/media_dimensions/index.mjs 45681 var import_i18n74 = __toESM(require_i18n(), 1); 45682 var mediaDimensionsField = { 45683 id: "media_dimensions", 45684 type: "text", 45685 label: (0, import_i18n74.__)("Dimensions"), 45686 getValue: ({ item }) => item?.media_details?.width && item?.media_details?.height ? (0, import_i18n74.sprintf)( 45687 // translators: 1: Width. 2: Height. 45688 (0, import_i18n74._x)("%1$s \xD7 %2$s", "image dimensions"), 45689 item?.media_details?.width?.toString(), 45690 item?.media_details?.height?.toString() 45691 ) : "", 45692 isVisible: (item) => { 45693 return !!(item?.media_details?.width && item?.media_details?.height); 45694 }, 45695 enableSorting: false, 45696 filterBy: false, 45697 readOnly: true 45698 }; 45699 var media_dimensions_default = mediaDimensionsField; 45700 45701 // packages/media-fields/build-module/media_thumbnail/index.mjs 45702 var import_i18n76 = __toESM(require_i18n(), 1); 45703 45704 // packages/media-fields/build-module/media_thumbnail/view.mjs 45705 var import_data12 = __toESM(require_data(), 1); 45706 var import_core_data5 = __toESM(require_core_data(), 1); 45707 var import_components52 = __toESM(require_components(), 1); 45708 var import_element145 = __toESM(require_element(), 1); 45709 var import_url5 = __toESM(require_url(), 1); 45710 45711 // packages/media-fields/build-module/utils/get-media-type-from-mime-type.mjs 45712 var import_i18n75 = __toESM(require_i18n(), 1); 45713 function getMediaTypeFromMimeType(mimeType) { 45714 if (mimeType.startsWith("image/")) { 45715 return { 45716 type: "image", 45717 label: (0, import_i18n75.__)("Image"), 45718 icon: image_default 45719 }; 45720 } 45721 if (mimeType.startsWith("video/")) { 45722 return { 45723 type: "video", 45724 label: (0, import_i18n75.__)("Video"), 45725 icon: video_default 45726 }; 45727 } 45728 if (mimeType.startsWith("audio/")) { 45729 return { 45730 type: "audio", 45731 label: (0, import_i18n75.__)("Audio"), 45732 icon: audio_default 45733 }; 45734 } 45735 return { 45736 type: "application", 45737 label: (0, import_i18n75.__)("Application"), 45738 icon: file_default 45739 }; 45740 } 45741 45742 // packages/media-fields/build-module/media_thumbnail/view.mjs 45743 var import_jsx_runtime204 = __toESM(require_jsx_runtime(), 1); 45744 function getBestImageUrl(featuredMedia, configSizes) { 45745 const sizes = featuredMedia?.media_details?.sizes; 45746 if (!sizes) { 45747 return featuredMedia.source_url; 45748 } 45749 const sizeEntries = Object.values(sizes); 45750 if (!sizeEntries.length) { 45751 return featuredMedia.source_url; 45752 } 45753 const targetWidth = configSizes ? parseInt(configSizes, 10) : NaN; 45754 if (!Number.isNaN(targetWidth)) { 45755 const validEntries = sizeEntries.filter( 45756 (s2) => typeof s2.width === "number" && !Number.isNaN(s2.width) 45757 ); 45758 if (!validEntries.length) { 45759 return featuredMedia.source_url; 45760 } 45761 const sorted = [...validEntries].sort( 45762 (a2, b2) => a2.width - b2.width 45763 ); 45764 const match2 = sorted.find((s2) => s2.width >= targetWidth); 45765 if (match2) { 45766 return match2.source_url; 45767 } 45768 return sorted[sorted.length - 1].source_url; 45769 } 45770 return featuredMedia.source_url; 45771 } 45772 function FallbackView({ 45773 item, 45774 filename 45775 }) { 45776 return /* @__PURE__ */ (0, import_jsx_runtime204.jsx)("div", { className: "dataviews-media-field__media-thumbnail", children: /* @__PURE__ */ (0, import_jsx_runtime204.jsxs)( 45777 import_components52.__experimentalVStack, 45778 { 45779 justify: "center", 45780 alignment: "center", 45781 className: "dataviews-media-field__media-thumbnail__stack", 45782 spacing: 0, 45783 children: [ 45784 /* @__PURE__ */ (0, import_jsx_runtime204.jsx)( 45785 import_components52.Icon, 45786 { 45787 className: "dataviews-media-field__media-thumbnail--icon", 45788 icon: getMediaTypeFromMimeType(item.mime_type).icon, 45789 size: 24 45790 } 45791 ), 45792 !!filename && /* @__PURE__ */ (0, import_jsx_runtime204.jsx)("div", { className: "dataviews-media-field__media-thumbnail__filename", children: /* @__PURE__ */ (0, import_jsx_runtime204.jsx)(import_components52.__experimentalTruncate, { className: "dataviews-media-field__media-thumbnail__filename__truncate", children: filename }) }) 45793 ] 45794 } 45795 ) }); 45796 } 45797 function ImageView({ 45798 item, 45799 configSizes, 45800 onError 45801 }) { 45802 const imageUrl = getBestImageUrl(item, configSizes); 45803 const imgRef = (0, import_element145.useRef)(null); 45804 const [loadingState, setLoadingState] = (0, import_element145.useState)("loading"); 45805 (0, import_element145.useLayoutEffect)(() => { 45806 if (imgRef.current?.complete) { 45807 setLoadingState("instant"); 45808 } else { 45809 setLoadingState("loading"); 45810 } 45811 }, [imageUrl]); 45812 const handleLoad = () => { 45813 if (loadingState === "loading") { 45814 setLoadingState("loaded"); 45815 } 45816 }; 45817 return /* @__PURE__ */ (0, import_jsx_runtime204.jsx)( 45818 "div", 45819 { 45820 className: clsx_default("dataviews-media-field__media-thumbnail", { 45821 "is-loading": loadingState === "loading", 45822 "is-loaded": loadingState === "loaded" 45823 }), 45824 children: /* @__PURE__ */ (0, import_jsx_runtime204.jsx)( 45825 "img", 45826 { 45827 ref: imgRef, 45828 className: "dataviews-media-field__media-thumbnail--image", 45829 src: imageUrl, 45830 alt: item.alt_text || item.title.raw, 45831 onLoad: handleLoad, 45832 onError, 45833 loading: "lazy" 45834 } 45835 ) 45836 } 45837 ); 45838 } 45839 function MediaThumbnailView({ 45840 item, 45841 config 45842 }) { 45843 const [imageError, setImageError] = (0, import_element145.useState)(false); 45844 const _featuredMedia = (0, import_data12.useSelect)( 45845 (select3) => { 45846 if (!item.featured_media) { 45847 return; 45848 } 45849 return select3(import_core_data5.store).getEntityRecord( 45850 "postType", 45851 "attachment", 45852 item.featured_media 45853 ); 45854 }, 45855 [item.featured_media] 45856 ); 45857 const featuredMedia = item.featured_media ? _featuredMedia : item; 45858 if (!featuredMedia) { 45859 return null; 45860 } 45861 const filename = (0, import_url5.getFilename)(featuredMedia.source_url || ""); 45862 if (imageError || getMediaTypeFromMimeType(featuredMedia.mime_type).type !== "image") { 45863 return /* @__PURE__ */ (0, import_jsx_runtime204.jsx)(FallbackView, { item: featuredMedia, filename: filename || "" }); 45864 } 45865 return /* @__PURE__ */ (0, import_jsx_runtime204.jsx)( 45866 ImageView, 45867 { 45868 item: featuredMedia, 45869 configSizes: config?.sizes, 45870 onError: () => setImageError(true) 45871 } 45872 ); 45873 } 45874 45875 // packages/media-fields/build-module/media_thumbnail/index.mjs 45876 var mediaThumbnailField = { 45877 id: "media_thumbnail", 45878 type: "media", 45879 label: (0, import_i18n76.__)("Thumbnail"), 45880 render: MediaThumbnailView, 45881 enableSorting: false, 45882 filterBy: false 45883 }; 45884 var media_thumbnail_default = mediaThumbnailField; 45885 45886 // packages/media-fields/build-module/mime_type/index.mjs 45887 var import_i18n77 = __toESM(require_i18n(), 1); 45888 var mimeTypeField = { 45889 id: "mime_type", 45890 type: "text", 45891 label: (0, import_i18n77.__)("File type"), 45892 getValue: ({ item }) => item?.mime_type || "", 45893 render: ({ item }) => item?.mime_type || "-", 45894 // Disable sorting until REST API support for ordering my `mime_type` is added. 45895 // See: https://core.trac.wordpress.org/ticket/64073 45896 enableSorting: false, 45897 filterBy: false, 45898 readOnly: true 45899 }; 45900 var mime_type_default = mimeTypeField; 45901 45902 // packages/media-utils/build-module/components/media-upload-modal/index.mjs 45903 var import_notices = __toESM(require_notices(), 1); 45904 45905 // packages/media-utils/build-module/lock-unlock.mjs 45906 var import_private_apis3 = __toESM(require_private_apis(), 1); 45907 var { lock: lock3, unlock: unlock3 } = (0, import_private_apis3.__dangerousOptInToUnstableAPIsOnlyForCoreModules)( 45908 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.", 45909 "@wordpress/media-utils" 45910 ); 45911 45912 // packages/media-utils/build-module/components/media-upload-modal/upload-status-popover.mjs 45913 var import_element146 = __toESM(require_element(), 1); 45914 var import_i18n78 = __toESM(require_i18n(), 1); 45915 var import_components53 = __toESM(require_components(), 1); 45916 var import_jsx_runtime205 = __toESM(require_jsx_runtime(), 1); 45917 function UploadStatusPopover({ 45918 uploadingFiles, 45919 onDismissError, 45920 onOpenChange 45921 }) { 45922 const [isOpen, setIsOpen] = (0, import_element146.useState)(false); 45923 const [prevHadErrors, setPrevHadErrors] = (0, import_element146.useState)(false); 45924 const triggerRef = (0, import_element146.useRef)(null); 45925 const updateIsOpen = (0, import_element146.useCallback)( 45926 (open) => { 45927 setIsOpen(open); 45928 onOpenChange?.(open); 45929 }, 45930 [onOpenChange] 45931 ); 45932 const activeFiles = uploadingFiles.filter( 45933 (file) => file.status === "uploading" 45934 ); 45935 const errorFiles = uploadingFiles.filter( 45936 (file) => file.status === "error" 45937 ); 45938 const hasErrors = errorFiles.length > 0; 45939 const isUploading = activeFiles.length > 0; 45940 (0, import_element146.useEffect)(() => { 45941 if (hasErrors && !prevHadErrors) { 45942 updateIsOpen(true); 45943 } 45944 setPrevHadErrors(hasErrors); 45945 }, [hasErrors, prevHadErrors, updateIsOpen]); 45946 if (uploadingFiles.length === 0) { 45947 return null; 45948 } 45949 let buttonLabel, popoverHeading; 45950 if (isUploading) { 45951 buttonLabel = (0, import_i18n78.sprintf)( 45952 // translators: %s: number of files being uploaded 45953 (0, import_i18n78._n)("Uploading %s file", "Uploading %s files", activeFiles.length), 45954 activeFiles.length.toLocaleString() 45955 ); 45956 popoverHeading = (0, import_i18n78.__)("Uploading"); 45957 } else if (hasErrors) { 45958 buttonLabel = (0, import_i18n78.sprintf)( 45959 // translators: %s: number of upload errors 45960 (0, import_i18n78._n)("%s upload error", "%s upload errors", errorFiles.length), 45961 errorFiles.length.toLocaleString() 45962 ); 45963 popoverHeading = (0, import_i18n78.__)("Upload errors"); 45964 } else { 45965 buttonLabel = (0, import_i18n78.__)("Upload complete"); 45966 popoverHeading = (0, import_i18n78.__)("Upload complete"); 45967 } 45968 return /* @__PURE__ */ (0, import_jsx_runtime205.jsxs)("div", { className: "media-upload-modal__upload-status", children: [ 45969 isUploading && /* @__PURE__ */ (0, import_jsx_runtime205.jsx)(import_components53.Spinner, {}), 45970 /* @__PURE__ */ (0, import_jsx_runtime205.jsx)( 45971 import_components53.Button, 45972 { 45973 className: "media-upload-modal__upload-status__trigger", 45974 size: "compact", 45975 icon: chevron_down_default, 45976 iconPosition: "right", 45977 onClick: () => updateIsOpen(!isOpen), 45978 "aria-expanded": isOpen, 45979 ref: triggerRef, 45980 children: buttonLabel 45981 } 45982 ), 45983 isOpen && /* @__PURE__ */ (0, import_jsx_runtime205.jsxs)( 45984 import_components53.Popover, 45985 { 45986 className: "media-upload-modal__upload-status__popover", 45987 placement: "top-start", 45988 offset: 8, 45989 anchor: triggerRef.current, 45990 focusOnMount: true, 45991 onClose: () => { 45992 if (triggerRef.current?.contains( 45993 triggerRef.current.ownerDocument.activeElement 45994 )) { 45995 return; 45996 } 45997 updateIsOpen(false); 45998 }, 45999 children: [ 46000 /* @__PURE__ */ (0, import_jsx_runtime205.jsx)("div", { className: "media-upload-modal__upload-status__header", children: /* @__PURE__ */ (0, import_jsx_runtime205.jsx)("h3", { children: popoverHeading }) }), 46001 /* @__PURE__ */ (0, import_jsx_runtime205.jsx)("ul", { className: "media-upload-modal__upload-status__list", children: uploadingFiles.map((file) => /* @__PURE__ */ (0, import_jsx_runtime205.jsxs)( 46002 "li", 46003 { 46004 className: "media-upload-modal__upload-status__item", 46005 children: [ 46006 file.status === "uploading" && /* @__PURE__ */ (0, import_jsx_runtime205.jsx)(import_components53.Spinner, {}), 46007 file.status === "uploaded" && /* @__PURE__ */ (0, import_jsx_runtime205.jsx)(import_components53.Icon, { icon: check_default, size: 16 }), 46008 (file.status === "uploading" || file.status === "uploaded") && /* @__PURE__ */ (0, import_jsx_runtime205.jsx)( 46009 "span", 46010 { 46011 className: "media-upload-modal__upload-status__filename", 46012 title: file.name, 46013 children: file.name 46014 } 46015 ), 46016 file.status === "error" && /* @__PURE__ */ (0, import_jsx_runtime205.jsxs)( 46017 import_components53.Notice, 46018 { 46019 status: "error", 46020 isDismissible: !!onDismissError, 46021 onRemove: () => onDismissError?.(file.id), 46022 children: [ 46023 file.name, 46024 ": ", 46025 file.error 46026 ] 46027 } 46028 ) 46029 ] 46030 }, 46031 file.id 46032 )) }) 46033 ] 46034 } 46035 ) 46036 ] }); 46037 } 46038 46039 // packages/media-utils/build-module/components/media-upload-modal/use-invalidate-attachment-resolutions.mjs 46040 var import_element147 = __toESM(require_element(), 1); 46041 var import_data13 = __toESM(require_data(), 1); 46042 function useInvalidateAttachmentResolutions() { 46043 const registry = (0, import_data13.useRegistry)(); 46044 return (0, import_element147.useCallback)( 46045 () => invalidateAttachmentResolutions(registry), 46046 [registry] 46047 ); 46048 } 46049 46050 // packages/media-utils/build-module/components/media-upload-modal/use-upload-status.mjs 46051 var import_element148 = __toESM(require_element(), 1); 46052 var import_blob2 = __toESM(require_blob(), 1); 46053 var idCounter = 0; 46054 var batchIdCounter = 0; 46055 function useUploadStatus({ 46056 onBatchComplete 46057 } = {}) { 46058 const [uploadingFiles, setUploadingFiles] = (0, import_element148.useState)( 46059 [] 46060 ); 46061 const clearCompleted = (0, import_element148.useCallback)(() => { 46062 setUploadingFiles( 46063 (prev) => prev.filter((item) => item.status !== "uploaded") 46064 ); 46065 }, []); 46066 const dismissError = (0, import_element148.useCallback)((fileId) => { 46067 setUploadingFiles( 46068 (prev) => prev.filter((item) => item.id !== fileId) 46069 ); 46070 }, []); 46071 const registerBatch = (0, import_element148.useCallback)( 46072 (files) => { 46073 const batchId = String(++batchIdCounter); 46074 const batchSize = files.length; 46075 const newEntries = files.map((file) => ({ 46076 id: String(++idCounter), 46077 batchId, 46078 name: file.name, 46079 status: "uploading" 46080 })); 46081 setUploadingFiles((prev) => [...prev, ...newEntries]); 46082 let successCount = 0; 46083 let errorCount = 0; 46084 let batchDone = false; 46085 let successAttachments = []; 46086 const completeBatchIfDone = () => { 46087 if (batchDone || successCount + errorCount < batchSize) { 46088 return; 46089 } 46090 batchDone = true; 46091 setUploadingFiles( 46092 (prev) => prev.map( 46093 (item) => item.batchId === batchId && item.status === "uploading" ? { 46094 ...item, 46095 status: "uploaded" 46096 } : item 46097 ) 46098 ); 46099 onBatchComplete?.(successAttachments); 46100 }; 46101 const onFileChange = (attachments) => { 46102 if (batchDone) { 46103 return; 46104 } 46105 const allReal = attachments.every( 46106 (attachment) => attachment.id && attachment.url && !(0, import_blob2.isBlobURL)(attachment.url) 46107 ); 46108 if (!allReal) { 46109 return; 46110 } 46111 successCount = attachments.length; 46112 successAttachments = attachments; 46113 completeBatchIfDone(); 46114 }; 46115 const onError = (error2) => { 46116 const fileName = error2 instanceof UploadError ? error2.file.name : void 0; 46117 setUploadingFiles((prev) => { 46118 let matched = false; 46119 return prev.map((item) => { 46120 if (!matched && item.batchId === batchId && item.status === "uploading" && (!fileName || item.name === fileName)) { 46121 matched = true; 46122 return { 46123 ...item, 46124 status: "error", 46125 error: error2.message 46126 }; 46127 } 46128 return item; 46129 }); 46130 }); 46131 errorCount++; 46132 completeBatchIfDone(); 46133 }; 46134 return { onFileChange, onError }; 46135 }, 46136 [onBatchComplete] 46137 ); 46138 const allComplete = uploadingFiles.length > 0 && uploadingFiles.every((item) => item.status !== "uploading"); 46139 return { 46140 uploadingFiles, 46141 registerBatch, 46142 dismissError, 46143 clearCompleted, 46144 allComplete 46145 }; 46146 } 46147 46148 // packages/media-utils/build-module/components/media-upload-modal/index.mjs 46149 var import_jsx_runtime206 = __toESM(require_jsx_runtime(), 1); 46150 var { useEntityRecordsWithPermissions } = unlock3(import_core_data6.privateApis); 46151 var LAYOUT_PICKER_GRID2 = "pickerGrid"; 46152 var LAYOUT_PICKER_TABLE2 = "pickerTable"; 46153 var NOTICES_CONTEXT = "media-modal"; 46154 var NOTICE_ID_UPLOAD_PROGRESS = "media-modal-upload-progress"; 46155 var ATTACHED_TO_FIELD = "attached_to"; 46156 var defaultQueryParams = { 46157 page: 1, 46158 search: "" 46159 }; 46160 function getSelectionFromValue(value) { 46161 if (!value) { 46162 return []; 46163 } 46164 return Array.isArray(value) ? value.map(String) : [String(value)]; 46165 } 46166 var defaultView = { 46167 type: LAYOUT_PICKER_GRID2, 46168 fields: [], 46169 showTitle: false, 46170 titleField: "title", 46171 mediaField: "media_thumbnail", 46172 perPage: 50, 46173 filters: [], 46174 layout: { 46175 previewSize: 170, 46176 density: "compact", 46177 // Fit each thumbnail inside its square cell rather than cropping it, 46178 // so the media's own orientation is visible before it's inserted. 46179 // Users can switch back to cropped in the view options. 46180 mediaFit: "contain" 46181 } 46182 }; 46183 var defaultLayouts = { 46184 [LAYOUT_PICKER_GRID2]: { 46185 fields: [], 46186 showTitle: false, 46187 layout: { 46188 previewSize: 170, 46189 density: "compact", 46190 mediaFit: "contain" 46191 } 46192 }, 46193 [LAYOUT_PICKER_TABLE2]: { 46194 fields: [ 46195 "filename", 46196 "filesize", 46197 "media_dimensions", 46198 "author", 46199 "date" 46200 ], 46201 showTitle: true 46202 } 46203 }; 46204 var dataViewsConfig = { 46205 // Repeats `DataViewsPicker`'s own default, which passing `config` at all 46206 // would otherwise replace. 46207 perPageSizes: [10, 20, 50, 100], 46208 // Seeing whether a media item is portrait or landscape before inserting 46209 // it matters here, so offer the crop/fit switch in the view options. 46210 mediaFitControl: true 46211 }; 46212 function MediaUploadModal({ 46213 allowedTypes, 46214 multiple = false, 46215 value, 46216 onSelect, 46217 onClose, 46218 onUpload, 46219 title = (0, import_i18n79.__)("Select Media"), 46220 isOpen, 46221 isDismissible = true, 46222 modalClass, 46223 search = true, 46224 searchLabel = (0, import_i18n79.__)("Search media"), 46225 postId, 46226 postType 46227 }) { 46228 const attachedToPostId = Number.isInteger(postId) ? postId : void 0; 46229 const uploadedToLabel = (0, import_data14.useSelect)( 46230 (select3) => attachedToPostId && postType ? select3(import_core_data6.store).getPostType(postType)?.labels?.uploaded_to_this_item : void 0, 46231 [attachedToPostId, postType] 46232 ); 46233 const [selection, setSelection] = (0, import_element149.useState)( 46234 () => getSelectionFromValue(value) 46235 ); 46236 const { createSuccessNotice, removeAllNotices } = (0, import_data14.useDispatch)(import_notices.store); 46237 const invalidateAttachmentResolutions2 = useInvalidateAttachmentResolutions(); 46238 const [queryParams, setQueryParams] = (0, import_element149.useState)( 46239 () => defaultQueryParams 46240 ); 46241 const { 46242 view: persistedView, 46243 updateView, 46244 isModified, 46245 resetToDefault 46246 } = useView({ 46247 kind: "postType", 46248 name: "attachment", 46249 slug: "media-modal", 46250 defaultView, 46251 queryParams, 46252 onChangeQueryParams: setQueryParams 46253 }); 46254 const [attachedToFilter, setAttachedToFilter] = (0, import_element149.useState)(); 46255 const view = (0, import_element149.useMemo)(() => { 46256 const filters = (persistedView.filters ?? []).filter( 46257 ({ field }) => field !== ATTACHED_TO_FIELD 46258 ); 46259 return { 46260 ...persistedView, 46261 filters: attachedToFilter ? [...filters, attachedToFilter] : filters 46262 }; 46263 }, [persistedView, attachedToFilter]); 46264 const handleChangeView = (0, import_element149.useCallback)( 46265 (nextView) => { 46266 const normalizedView = { ...nextView }; 46267 if (normalizedView.startPosition === void 0) { 46268 delete normalizedView.startPosition; 46269 } 46270 setAttachedToFilter( 46271 normalizedView.filters?.find( 46272 ({ field }) => field === ATTACHED_TO_FIELD 46273 ) 46274 ); 46275 updateView({ 46276 ...normalizedView, 46277 filters: normalizedView.filters?.filter( 46278 ({ field }) => field !== ATTACHED_TO_FIELD 46279 ) 46280 }); 46281 }, 46282 [updateView] 46283 ); 46284 const handleReset = (0, import_element149.useCallback)(() => { 46285 setAttachedToFilter(void 0); 46286 resetToDefault(); 46287 }, [resetToDefault]); 46288 const queryArgs = (0, import_element149.useMemo)(() => { 46289 const filters = {}; 46290 view.filters?.forEach((filter) => { 46291 if (filter.field === "media_type") { 46292 filters.media_type = filter.value; 46293 } 46294 if (filter.field === "author") { 46295 if (filter.operator === "isAny") { 46296 filters.author = filter.value; 46297 } else if (filter.operator === "isNone") { 46298 filters.author_exclude = filter.value; 46299 } 46300 } 46301 if (filter.field === "date" || filter.field === "modified") { 46302 if (filter.operator === "before") { 46303 filters.before = filter.value; 46304 } else if (filter.operator === "after") { 46305 filters.after = filter.value; 46306 } 46307 } 46308 if (filter.field === "mime_type") { 46309 filters.mime_type = filter.value; 46310 } 46311 if (filter.field === ATTACHED_TO_FIELD && filter.operator === "isAny") { 46312 const parents = (Array.isArray(filter.value) ? filter.value : []).map((optionValue) => { 46313 if (optionValue === "unattached") { 46314 return 0; 46315 } 46316 return optionValue === "current" ? attachedToPostId : void 0; 46317 }).filter((parent) => parent !== void 0); 46318 if (parents.length) { 46319 filters.parent = parents; 46320 } 46321 } 46322 }); 46323 if (!filters.media_type && !filters.mime_type && allowedTypes && !allowedTypes.includes("*")) { 46324 const { mediaTypes, mimeTypes } = allowedTypes.reduce( 46325 (acc, type) => { 46326 if (type.endsWith("/*")) { 46327 acc.mediaTypes.push(type.replace("/*", "")); 46328 } else if (type.includes("/")) { 46329 acc.mimeTypes.push(type); 46330 } else { 46331 acc.mediaTypes.push(type); 46332 } 46333 return acc; 46334 }, 46335 { mediaTypes: [], mimeTypes: [] } 46336 ); 46337 if (mediaTypes.length) { 46338 filters.media_type = mediaTypes; 46339 } 46340 if (mimeTypes.length) { 46341 filters.mime_type = mimeTypes; 46342 } 46343 } 46344 return { 46345 per_page: view.perPage || 20, 46346 page: view.page || 1, 46347 status: "inherit", 46348 order: view.sort?.direction, 46349 orderby: view.sort?.field, 46350 search: view.search, 46351 _embed: "author,wp:attached-to", 46352 ...filters 46353 }; 46354 }, [view, allowedTypes, attachedToPostId]); 46355 const handleBatchComplete = (0, import_element149.useCallback)( 46356 (attachments) => { 46357 const uploadedIds = attachments.map((attachment) => String(attachment.id)).filter(Boolean); 46358 if (multiple) { 46359 setSelection((prev) => { 46360 const existing = new Set(prev); 46361 const newIds = uploadedIds.filter( 46362 (id) => !existing.has(id) 46363 ); 46364 return [...prev, ...newIds]; 46365 }); 46366 } else { 46367 setSelection(uploadedIds.slice(0, 1)); 46368 } 46369 invalidateAttachmentResolutions2(); 46370 }, 46371 [multiple, invalidateAttachmentResolutions2] 46372 ); 46373 const { 46374 uploadingFiles, 46375 registerBatch, 46376 dismissError, 46377 clearCompleted, 46378 allComplete 46379 } = useUploadStatus({ onBatchComplete: handleBatchComplete }); 46380 const isPopoverOpenRef = (0, import_element149.useRef)(false); 46381 const handlePopoverOpenChange = (0, import_element149.useCallback)( 46382 (open) => { 46383 isPopoverOpenRef.current = open; 46384 if (!open) { 46385 clearCompleted(); 46386 } 46387 }, 46388 [clearCompleted] 46389 ); 46390 const { 46391 records: mediaRecords, 46392 isResolving: isLoading, 46393 totalItems, 46394 totalPages 46395 } = useEntityRecordsWithPermissions("postType", "attachment", queryArgs); 46396 const fields = (0, import_element149.useMemo)( 46397 () => [ 46398 // Media field definitions from @wordpress/media-fields 46399 // Cast is safe because RestAttachment has the same properties as Attachment 46400 { 46401 ...media_thumbnail_default, 46402 enableHiding: false 46403 // Within the modal, the thumbnail should always be shown. 46404 }, 46405 { 46406 id: "title", 46407 type: "text", 46408 label: (0, import_i18n79.__)("Title"), 46409 getValue: ({ item }) => { 46410 const titleValue = item.title.raw || item.title.rendered; 46411 return titleValue || (0, import_i18n79.__)("(no title)"); 46412 } 46413 }, 46414 alt_text_default, 46415 caption_default, 46416 description_default, 46417 date_added_default, 46418 date_modified_default, 46419 author_default, 46420 filename_default, 46421 filesize_default, 46422 media_dimensions_default, 46423 mime_type_default, 46424 { 46425 ...attached_to_default, 46426 // The shared field definition is not filterable, because the 46427 // "Uploaded to this post" option only makes sense with the modal's 46428 // post context. Values name options, and `queryArgs` above 46429 // translates them to `parent`. 46430 elements: [ 46431 ...attachedToPostId ? [ 46432 { 46433 value: "current", 46434 label: uploadedToLabel ?? (0, import_i18n79.__)("Uploaded to this item") 46435 } 46436 ] : [], 46437 { 46438 value: "unattached", 46439 label: (0, import_i18n79._x)("Unattached", "media items") 46440 } 46441 ], 46442 filterBy: { operators: ["isAny"] } 46443 } 46444 ], 46445 [attachedToPostId, uploadedToLabel] 46446 ); 46447 const actions = (0, import_element149.useMemo)( 46448 () => [ 46449 { 46450 id: "select", 46451 label: (0, import_i18n79.__)("Select"), 46452 isPrimary: true, 46453 supportsBulk: multiple, 46454 async callback() { 46455 if (selection.length === 0) { 46456 return; 46457 } 46458 const selectedPostsQuery = { 46459 include: selection, 46460 per_page: -1 46461 }; 46462 const selectedPosts = await (0, import_data14.resolveSelect)( 46463 import_core_data6.store 46464 ).getEntityRecords( 46465 "postType", 46466 "attachment", 46467 selectedPostsQuery 46468 ); 46469 const transformedPosts = (selectedPosts ?? []).map(transformAttachment).filter(Boolean); 46470 const selectedItems = multiple ? transformedPosts : transformedPosts?.[0]; 46471 removeAllNotices("snackbar", NOTICES_CONTEXT); 46472 onSelect(selectedItems); 46473 } 46474 } 46475 ], 46476 [multiple, onSelect, selection, removeAllNotices] 46477 ); 46478 const handleModalClose = (0, import_element149.useCallback)(() => { 46479 removeAllNotices("snackbar", NOTICES_CONTEXT); 46480 onClose?.(); 46481 }, [removeAllNotices, onClose]); 46482 const valueRef = (0, import_element149.useRef)(value); 46483 (0, import_element149.useEffect)(() => { 46484 valueRef.current = value; 46485 }, [value]); 46486 (0, import_element149.useEffect)(() => { 46487 if (isOpen) { 46488 setSelection(getSelectionFromValue(valueRef.current)); 46489 } else { 46490 setQueryParams(defaultQueryParams); 46491 } 46492 }, [isOpen]); 46493 const handleUpload = onUpload || uploadMedia; 46494 const prevAllCompleteRef = (0, import_element149.useRef)(false); 46495 (0, import_element149.useEffect)(() => { 46496 if (allComplete && !prevAllCompleteRef.current) { 46497 const completeCount = uploadingFiles.filter( 46498 (file) => file.status === "uploaded" 46499 ).length; 46500 if (completeCount > 0) { 46501 createSuccessNotice( 46502 (0, import_i18n79.sprintf)( 46503 // translators: %s: number of files 46504 (0, import_i18n79._n)( 46505 "Uploaded %s file", 46506 "Uploaded %s files", 46507 completeCount 46508 ), 46509 completeCount.toLocaleString() 46510 ), 46511 { 46512 type: "snackbar", 46513 context: NOTICES_CONTEXT, 46514 id: NOTICE_ID_UPLOAD_PROGRESS 46515 } 46516 ); 46517 } 46518 if (!isPopoverOpenRef.current) { 46519 clearCompleted(); 46520 } 46521 } 46522 prevAllCompleteRef.current = allComplete; 46523 }, [allComplete, uploadingFiles, createSuccessNotice, clearCompleted]); 46524 const handleFileSelect = (0, import_element149.useCallback)( 46525 (event) => { 46526 const files = event.target.files; 46527 if (files && files.length > 0) { 46528 const filesArray = Array.from(files); 46529 const { onFileChange, onError } = registerBatch(filesArray); 46530 handleUpload({ 46531 allowedTypes, 46532 filesList: filesArray, 46533 onFileChange, 46534 onError 46535 }); 46536 } 46537 }, 46538 [allowedTypes, handleUpload, registerBatch] 46539 ); 46540 const paginationInfo = (0, import_element149.useMemo)( 46541 () => ({ 46542 totalItems, 46543 totalPages 46544 }), 46545 [totalItems, totalPages] 46546 ); 46547 const acceptTypes = (0, import_element149.useMemo)(() => { 46548 if (allowedTypes?.includes("*")) { 46549 return void 0; 46550 } 46551 return allowedTypes?.join(","); 46552 }, [allowedTypes]); 46553 if (!isOpen) { 46554 return null; 46555 } 46556 return /* @__PURE__ */ (0, import_jsx_runtime206.jsxs)( 46557 import_components54.Modal, 46558 { 46559 title, 46560 onRequestClose: handleModalClose, 46561 isDismissible, 46562 className: modalClass, 46563 overlayClassName: "media-upload-modal", 46564 size: "fill", 46565 headerActions: /* @__PURE__ */ (0, import_jsx_runtime206.jsx)( 46566 import_components54.FormFileUpload, 46567 { 46568 accept: acceptTypes, 46569 multiple: true, 46570 onChange: handleFileSelect, 46571 render: ({ openFileDialog }) => /* @__PURE__ */ (0, import_jsx_runtime206.jsx)( 46572 import_components54.Button, 46573 { 46574 onClick: openFileDialog, 46575 icon: upload_default, 46576 __next40pxDefaultSize: true, 46577 children: (0, import_i18n79.__)("Upload media") 46578 } 46579 ) 46580 } 46581 ), 46582 children: [ 46583 /* @__PURE__ */ (0, import_jsx_runtime206.jsx)( 46584 import_components54.DropZone, 46585 { 46586 onFilesDrop: (files) => { 46587 let filteredFiles = files; 46588 if (allowedTypes && !allowedTypes.includes("*")) { 46589 filteredFiles = files.filter( 46590 (file) => allowedTypes.some((allowedType) => { 46591 return file.type === allowedType || file.type.startsWith( 46592 allowedType.replace("*", "") 46593 ); 46594 }) 46595 ); 46596 } 46597 if (filteredFiles.length > 0) { 46598 const { onFileChange, onError } = registerBatch(filteredFiles); 46599 handleUpload({ 46600 allowedTypes, 46601 filesList: filteredFiles, 46602 onFileChange, 46603 onError 46604 }); 46605 } 46606 }, 46607 label: (0, import_i18n79.__)("Drop files to upload") 46608 } 46609 ), 46610 /* @__PURE__ */ (0, import_jsx_runtime206.jsxs)( 46611 dataviews_picker_default, 46612 { 46613 data: mediaRecords || [], 46614 fields, 46615 view, 46616 onChangeView: handleChangeView, 46617 actions, 46618 selection, 46619 onChangeSelection: setSelection, 46620 isLoading, 46621 paginationInfo, 46622 defaultLayouts, 46623 config: dataViewsConfig, 46624 getItemId: (item) => String(item.id), 46625 itemListLabel: (0, import_i18n79.__)("Media items"), 46626 onReset: isModified || attachedToFilter ? handleReset : false, 46627 children: [ 46628 /* @__PURE__ */ (0, import_jsx_runtime206.jsxs)( 46629 Stack, 46630 { 46631 direction: "row", 46632 align: "top", 46633 justify: "space-between", 46634 className: "dataviews__view-actions", 46635 gap: "xs", 46636 children: [ 46637 /* @__PURE__ */ (0, import_jsx_runtime206.jsxs)( 46638 Stack, 46639 { 46640 direction: "row", 46641 gap: "sm", 46642 justify: "start", 46643 className: "dataviews__search", 46644 children: [ 46645 search && /* @__PURE__ */ (0, import_jsx_runtime206.jsx)(dataviews_picker_default.Search, { label: searchLabel }), 46646 /* @__PURE__ */ (0, import_jsx_runtime206.jsx)(dataviews_picker_default.FiltersToggle, {}) 46647 ] 46648 } 46649 ), 46650 /* @__PURE__ */ (0, import_jsx_runtime206.jsxs)(Stack, { direction: "row", gap: "xs", style: { flexShrink: 0 }, children: [ 46651 /* @__PURE__ */ (0, import_jsx_runtime206.jsx)(dataviews_picker_default.LayoutSwitcher, {}), 46652 /* @__PURE__ */ (0, import_jsx_runtime206.jsx)(dataviews_picker_default.ViewConfig, {}) 46653 ] }) 46654 ] 46655 } 46656 ), 46657 /* @__PURE__ */ (0, import_jsx_runtime206.jsx)(dataviews_picker_default.FiltersToggled, { className: "dataviews-filters__container" }), 46658 /* @__PURE__ */ (0, import_jsx_runtime206.jsx)(dataviews_picker_default.Layout, {}), 46659 /* @__PURE__ */ (0, import_jsx_runtime206.jsxs)( 46660 "div", 46661 { 46662 className: clsx_default("media-upload-modal__footer", { 46663 "is-uploading": uploadingFiles.length > 0 46664 }), 46665 children: [ 46666 /* @__PURE__ */ (0, import_jsx_runtime206.jsx)( 46667 UploadStatusPopover, 46668 { 46669 uploadingFiles, 46670 onDismissError: dismissError, 46671 onOpenChange: handlePopoverOpenChange 46672 } 46673 ), 46674 /* @__PURE__ */ (0, import_jsx_runtime206.jsx)(dataviews_picker_default.Footer, {}) 46675 ] 46676 } 46677 ) 46678 ] 46679 } 46680 ), 46681 (0, import_element149.createPortal)( 46682 /* @__PURE__ */ (0, import_jsx_runtime206.jsx)( 46683 import_notices.SnackbarNotices, 46684 { 46685 className: "media-upload-modal__snackbar", 46686 context: NOTICES_CONTEXT 46687 } 46688 ), 46689 document.body 46690 ) 46691 ] 46692 } 46693 ); 46694 } 46695 46696 // packages/media-utils/build-module/private-apis.mjs 46697 var privateApis = {}; 46698 lock3(privateApis, { 46699 sideloadMedia, 46700 MediaUploadModal 46701 }); 46702 return __toCommonJS(index_exports); 46703 })(); 46704 /*! Bundled license information: 46705 46706 use-sync-external-store/cjs/use-sync-external-store-shim.development.js: 46707 (** 46708 * @license React 46709 * use-sync-external-store-shim.development.js 46710 * 46711 * Copyright (c) Meta Platforms, Inc. and affiliates. 46712 * 46713 * This source code is licensed under the MIT license found in the 46714 * LICENSE file in the root directory of this source tree. 46715 *) 46716 46717 use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js: 46718 (** 46719 * @license React 46720 * use-sync-external-store-shim/with-selector.development.js 46721 * 46722 * Copyright (c) Meta Platforms, Inc. and affiliates. 46723 * 46724 * This source code is licensed under the MIT license found in the 46725 * LICENSE file in the root directory of this source tree. 46726 *) 46727 */ 46728 (window.wp ||= {}).mediaUtils = wp.mediaUtils; 46729 })();
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated : Mon Sep 14 08:20:31 2026 | Cross-referenced by PHPXref |