PluginProbe
Gutenberg / trunk
Gutenberg vtrunk
24.1.0 24.0.0 23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 All 404 releases
gutenberg / build / routes / template-list / route.js

route.js in Gutenberg trunk, at build/routes/template-list/route.js

25,619 lines 921.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 var __create = Object.create;
2 var __defProp = Object.defineProperty;
3 var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4 var __getOwnPropNames = Object.getOwnPropertyNames;
5 var __getProtoOf = Object.getPrototypeOf;
6 var __hasOwnProp = Object.prototype.hasOwnProperty;
7 var __commonJS = (cb, mod) => function __require() {
8 return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
9 };
10 var __export = (target, all) => {
11 for (var name in all)
12 __defProp(target, name, { get: all[name], enumerable: true });
13 };
14 var __copyProps = (to, from, except, desc) => {
15 if (from && typeof from === "object" || typeof from === "function") {
16 for (let key of __getOwnPropNames(from))
17 if (!__hasOwnProp.call(to, key) && key !== except)
18 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19 }
20 return to;
21 };
22 var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23 // If the importer is in node compatibility mode or this is not an ESM
24 // file that has been converted to a CommonJS file using a Babel-
25 // compatible transform (i.e. "__esModule" has not been set), then set
26 // "default" to the CommonJS "module.exports" for node compatibility.
27 isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
28 mod
29 ));
30
31 // package-external:@wordpress/data
32 var require_data = __commonJS({
33 "package-external:@wordpress/data"(exports, module) {
34 module.exports = window.wp.data;
35 }
36 });
37
38 // package-external:@wordpress/core-data
39 var require_core_data = __commonJS({
40 "package-external:@wordpress/core-data"(exports, module) {
41 module.exports = window.wp.coreData;
42 }
43 });
44
45 // package-external:@wordpress/element
46 var require_element = __commonJS({
47 "package-external:@wordpress/element"(exports, module) {
48 module.exports = window.wp.element;
49 }
50 });
51
52 // package-external:@wordpress/compose
53 var require_compose = __commonJS({
54 "package-external:@wordpress/compose"(exports, module) {
55 module.exports = window.wp.compose;
56 }
57 });
58
59 // vendor-external:react
60 var require_react = __commonJS({
61 "vendor-external:react"(exports, module) {
62 module.exports = window.React;
63 }
64 });
65
66 // vendor-external:react/jsx-runtime
67 var require_jsx_runtime = __commonJS({
68 "vendor-external:react/jsx-runtime"(exports, module) {
69 module.exports = window.ReactJSXRuntime;
70 }
71 });
72
73 // vendor-external:react-dom
74 var require_react_dom = __commonJS({
75 "vendor-external:react-dom"(exports, module) {
76 module.exports = window.ReactDOM;
77 }
78 });
79
80 // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js
81 var require_use_sync_external_store_shim_development = __commonJS({
82 "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(exports) {
83 "use strict";
84 (function() {
85 function is(x2, y2) {
86 return x2 === y2 && (0 !== x2 || 1 / x2 === 1 / y2) || x2 !== x2 && y2 !== y2;
87 }
88 function useSyncExternalStore$2(subscribe, getSnapshot) {
89 didWarnOld18Alpha || void 0 === React97.startTransition || (didWarnOld18Alpha = true, console.error(
90 "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."
91 ));
92 var value = getSnapshot();
93 if (!didWarnUncachedGetSnapshot) {
94 var cachedValue = getSnapshot();
95 objectIs(value, cachedValue) || (console.error(
96 "The result of getSnapshot should be cached to avoid an infinite loop"
97 ), didWarnUncachedGetSnapshot = true);
98 }
99 cachedValue = useState25({
100 inst: { value, getSnapshot }
101 });
102 var inst = cachedValue[0].inst, forceUpdate = cachedValue[1];
103 useLayoutEffect4(
104 function() {
105 inst.value = value;
106 inst.getSnapshot = getSnapshot;
107 checkIfSnapshotChanged(inst) && forceUpdate({ inst });
108 },
109 [subscribe, value, getSnapshot]
110 );
111 useEffect22(
112 function() {
113 checkIfSnapshotChanged(inst) && forceUpdate({ inst });
114 return subscribe(function() {
115 checkIfSnapshotChanged(inst) && forceUpdate({ inst });
116 });
117 },
118 [subscribe]
119 );
120 useDebugValue2(value);
121 return value;
122 }
123 function checkIfSnapshotChanged(inst) {
124 var latestGetSnapshot = inst.getSnapshot;
125 inst = inst.value;
126 try {
127 var nextValue = latestGetSnapshot();
128 return !objectIs(inst, nextValue);
129 } catch (error2) {
130 return true;
131 }
132 }
133 function useSyncExternalStore$1(subscribe, getSnapshot) {
134 return getSnapshot();
135 }
136 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
137 var React97 = require_react(), objectIs = "function" === typeof Object.is ? Object.is : is, useState25 = React97.useState, useEffect22 = React97.useEffect, useLayoutEffect4 = React97.useLayoutEffect, useDebugValue2 = React97.useDebugValue, didWarnOld18Alpha = false, didWarnUncachedGetSnapshot = false, shim = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2;
138 exports.useSyncExternalStore = void 0 !== React97.useSyncExternalStore ? React97.useSyncExternalStore : shim;
139 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
140 })();
141 }
142 });
143
144 // node_modules/use-sync-external-store/shim/index.js
145 var require_shim = __commonJS({
146 "node_modules/use-sync-external-store/shim/index.js"(exports, module) {
147 "use strict";
148 if (false) {
149 module.exports = null;
150 } else {
151 module.exports = require_use_sync_external_store_shim_development();
152 }
153 }
154 });
155
156 // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js
157 var require_with_selector_development = __commonJS({
158 "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js"(exports) {
159 "use strict";
160 (function() {
161 function is(x2, y2) {
162 return x2 === y2 && (0 !== x2 || 1 / x2 === 1 / y2) || x2 !== x2 && y2 !== y2;
163 }
164 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
165 var React97 = require_react(), shim = require_shim(), objectIs = "function" === typeof Object.is ? Object.is : is, useSyncExternalStore3 = shim.useSyncExternalStore, useRef44 = React97.useRef, useEffect22 = React97.useEffect, useMemo31 = React97.useMemo, useDebugValue2 = React97.useDebugValue;
166 exports.useSyncExternalStoreWithSelector = function(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) {
167 var instRef = useRef44(null);
168 if (null === instRef.current) {
169 var inst = { hasValue: false, value: null };
170 instRef.current = inst;
171 } else inst = instRef.current;
172 instRef = useMemo31(
173 function() {
174 function memoizedSelector(nextSnapshot) {
175 if (!hasMemo) {
176 hasMemo = true;
177 memoizedSnapshot = nextSnapshot;
178 nextSnapshot = selector(nextSnapshot);
179 if (void 0 !== isEqual && inst.hasValue) {
180 var currentSelection = inst.value;
181 if (isEqual(currentSelection, nextSnapshot))
182 return memoizedSelection = currentSelection;
183 }
184 return memoizedSelection = nextSnapshot;
185 }
186 currentSelection = memoizedSelection;
187 if (objectIs(memoizedSnapshot, nextSnapshot))
188 return currentSelection;
189 var nextSelection = selector(nextSnapshot);
190 if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))
191 return memoizedSnapshot = nextSnapshot, currentSelection;
192 memoizedSnapshot = nextSnapshot;
193 return memoizedSelection = nextSelection;
194 }
195 var hasMemo = false, memoizedSnapshot, memoizedSelection, maybeGetServerSnapshot = void 0 === getServerSnapshot ? null : getServerSnapshot;
196 return [
197 function() {
198 return memoizedSelector(getSnapshot());
199 },
200 null === maybeGetServerSnapshot ? void 0 : function() {
201 return memoizedSelector(maybeGetServerSnapshot());
202 }
203 ];
204 },
205 [getSnapshot, getServerSnapshot, selector, isEqual]
206 );
207 var value = useSyncExternalStore3(subscribe, instRef[0], instRef[1]);
208 useEffect22(
209 function() {
210 inst.hasValue = true;
211 inst.value = value;
212 },
213 [value]
214 );
215 useDebugValue2(value);
216 return value;
217 };
218 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
219 })();
220 }
221 });
222
223 // node_modules/use-sync-external-store/shim/with-selector.js
224 var require_with_selector = __commonJS({
225 "node_modules/use-sync-external-store/shim/with-selector.js"(exports, module) {
226 "use strict";
227 if (false) {
228 module.exports = null;
229 } else {
230 module.exports = require_with_selector_development();
231 }
232 }
233 });
234
235 // package-external:@wordpress/theme
236 var require_theme = __commonJS({
237 "package-external:@wordpress/theme"(exports, module) {
238 module.exports = window.wp.theme;
239 }
240 });
241
242 // package-external:@wordpress/private-apis
243 var require_private_apis = __commonJS({
244 "package-external:@wordpress/private-apis"(exports, module) {
245 module.exports = window.wp.privateApis;
246 }
247 });
248
249 // package-external:@wordpress/i18n
250 var require_i18n = __commonJS({
251 "package-external:@wordpress/i18n"(exports, module) {
252 module.exports = window.wp.i18n;
253 }
254 });
255
256 // package-external:@wordpress/primitives
257 var require_primitives = __commonJS({
258 "package-external:@wordpress/primitives"(exports, module) {
259 module.exports = window.wp.primitives;
260 }
261 });
262
263 // package-external:@wordpress/components
264 var require_components = __commonJS({
265 "package-external:@wordpress/components"(exports, module) {
266 module.exports = window.wp.components;
267 }
268 });
269
270 // node_modules/remove-accents/index.js
271 var require_remove_accents = __commonJS({
272 "node_modules/remove-accents/index.js"(exports, module) {
273 var characterMap = {
274 "\xC0": "A",
275 "\xC1": "A",
276 "\xC2": "A",
277 "\xC3": "A",
278 "\xC4": "A",
279 "\xC5": "A",
280 "\u1EA4": "A",
281 "\u1EAE": "A",
282 "\u1EB2": "A",
283 "\u1EB4": "A",
284 "\u1EB6": "A",
285 "\xC6": "AE",
286 "\u1EA6": "A",
287 "\u1EB0": "A",
288 "\u0202": "A",
289 "\u1EA2": "A",
290 "\u1EA0": "A",
291 "\u1EA8": "A",
292 "\u1EAA": "A",
293 "\u1EAC": "A",
294 "\xC7": "C",
295 "\u1E08": "C",
296 "\xC8": "E",
297 "\xC9": "E",
298 "\xCA": "E",
299 "\xCB": "E",
300 "\u1EBE": "E",
301 "\u1E16": "E",
302 "\u1EC0": "E",
303 "\u1E14": "E",
304 "\u1E1C": "E",
305 "\u0206": "E",
306 "\u1EBA": "E",
307 "\u1EBC": "E",
308 "\u1EB8": "E",
309 "\u1EC2": "E",
310 "\u1EC4": "E",
311 "\u1EC6": "E",
312 "\xCC": "I",
313 "\xCD": "I",
314 "\xCE": "I",
315 "\xCF": "I",
316 "\u1E2E": "I",
317 "\u020A": "I",
318 "\u1EC8": "I",
319 "\u1ECA": "I",
320 "\xD0": "D",
321 "\xD1": "N",
322 "\xD2": "O",
323 "\xD3": "O",
324 "\xD4": "O",
325 "\xD5": "O",
326 "\xD6": "O",
327 "\xD8": "O",
328 "\u1ED0": "O",
329 "\u1E4C": "O",
330 "\u1E52": "O",
331 "\u020E": "O",
332 "\u1ECE": "O",
333 "\u1ECC": "O",
334 "\u1ED4": "O",
335 "\u1ED6": "O",
336 "\u1ED8": "O",
337 "\u1EDC": "O",
338 "\u1EDE": "O",
339 "\u1EE0": "O",
340 "\u1EDA": "O",
341 "\u1EE2": "O",
342 "\xD9": "U",
343 "\xDA": "U",
344 "\xDB": "U",
345 "\xDC": "U",
346 "\u1EE6": "U",
347 "\u1EE4": "U",
348 "\u1EEC": "U",
349 "\u1EEE": "U",
350 "\u1EF0": "U",
351 "\xDD": "Y",
352 "\xE0": "a",
353 "\xE1": "a",
354 "\xE2": "a",
355 "\xE3": "a",
356 "\xE4": "a",
357 "\xE5": "a",
358 "\u1EA5": "a",
359 "\u1EAF": "a",
360 "\u1EB3": "a",
361 "\u1EB5": "a",
362 "\u1EB7": "a",
363 "\xE6": "ae",
364 "\u1EA7": "a",
365 "\u1EB1": "a",
366 "\u0203": "a",
367 "\u1EA3": "a",
368 "\u1EA1": "a",
369 "\u1EA9": "a",
370 "\u1EAB": "a",
371 "\u1EAD": "a",
372 "\xE7": "c",
373 "\u1E09": "c",
374 "\xE8": "e",
375 "\xE9": "e",
376 "\xEA": "e",
377 "\xEB": "e",
378 "\u1EBF": "e",
379 "\u1E17": "e",
380 "\u1EC1": "e",
381 "\u1E15": "e",
382 "\u1E1D": "e",
383 "\u0207": "e",
384 "\u1EBB": "e",
385 "\u1EBD": "e",
386 "\u1EB9": "e",
387 "\u1EC3": "e",
388 "\u1EC5": "e",
389 "\u1EC7": "e",
390 "\xEC": "i",
391 "\xED": "i",
392 "\xEE": "i",
393 "\xEF": "i",
394 "\u1E2F": "i",
395 "\u020B": "i",
396 "\u1EC9": "i",
397 "\u1ECB": "i",
398 "\xF0": "d",
399 "\xF1": "n",
400 "\xF2": "o",
401 "\xF3": "o",
402 "\xF4": "o",
403 "\xF5": "o",
404 "\xF6": "o",
405 "\xF8": "o",
406 "\u1ED1": "o",
407 "\u1E4D": "o",
408 "\u1E53": "o",
409 "\u020F": "o",
410 "\u1ECF": "o",
411 "\u1ECD": "o",
412 "\u1ED5": "o",
413 "\u1ED7": "o",
414 "\u1ED9": "o",
415 "\u1EDD": "o",
416 "\u1EDF": "o",
417 "\u1EE1": "o",
418 "\u1EDB": "o",
419 "\u1EE3": "o",
420 "\xF9": "u",
421 "\xFA": "u",
422 "\xFB": "u",
423 "\xFC": "u",
424 "\u1EE7": "u",
425 "\u1EE5": "u",
426 "\u1EED": "u",
427 "\u1EEF": "u",
428 "\u1EF1": "u",
429 "\xFD": "y",
430 "\xFF": "y",
431 "\u0100": "A",
432 "\u0101": "a",
433 "\u0102": "A",
434 "\u0103": "a",
435 "\u0104": "A",
436 "\u0105": "a",
437 "\u0106": "C",
438 "\u0107": "c",
439 "\u0108": "C",
440 "\u0109": "c",
441 "\u010A": "C",
442 "\u010B": "c",
443 "\u010C": "C",
444 "\u010D": "c",
445 "C\u0306": "C",
446 "c\u0306": "c",
447 "\u010E": "D",
448 "\u010F": "d",
449 "\u0110": "D",
450 "\u0111": "d",
451 "\u0112": "E",
452 "\u0113": "e",
453 "\u0114": "E",
454 "\u0115": "e",
455 "\u0116": "E",
456 "\u0117": "e",
457 "\u0118": "E",
458 "\u0119": "e",
459 "\u011A": "E",
460 "\u011B": "e",
461 "\u011C": "G",
462 "\u01F4": "G",
463 "\u011D": "g",
464 "\u01F5": "g",
465 "\u011E": "G",
466 "\u011F": "g",
467 "\u0120": "G",
468 "\u0121": "g",
469 "\u0122": "G",
470 "\u0123": "g",
471 "\u0124": "H",
472 "\u0125": "h",
473 "\u0126": "H",
474 "\u0127": "h",
475 "\u1E2A": "H",
476 "\u1E2B": "h",
477 "\u0128": "I",
478 "\u0129": "i",
479 "\u012A": "I",
480 "\u012B": "i",
481 "\u012C": "I",
482 "\u012D": "i",
483 "\u012E": "I",
484 "\u012F": "i",
485 "\u0130": "I",
486 "\u0131": "i",
487 "\u0132": "IJ",
488 "\u0133": "ij",
489 "\u0134": "J",
490 "\u0135": "j",
491 "\u0136": "K",
492 "\u0137": "k",
493 "\u1E30": "K",
494 "\u1E31": "k",
495 "K\u0306": "K",
496 "k\u0306": "k",
497 "\u0139": "L",
498 "\u013A": "l",
499 "\u013B": "L",
500 "\u013C": "l",
501 "\u013D": "L",
502 "\u013E": "l",
503 "\u013F": "L",
504 "\u0140": "l",
505 "\u0141": "l",
506 "\u0142": "l",
507 "\u1E3E": "M",
508 "\u1E3F": "m",
509 "M\u0306": "M",
510 "m\u0306": "m",
511 "\u0143": "N",
512 "\u0144": "n",
513 "\u0145": "N",
514 "\u0146": "n",
515 "\u0147": "N",
516 "\u0148": "n",
517 "\u0149": "n",
518 "N\u0306": "N",
519 "n\u0306": "n",
520 "\u014C": "O",
521 "\u014D": "o",
522 "\u014E": "O",
523 "\u014F": "o",
524 "\u0150": "O",
525 "\u0151": "o",
526 "\u0152": "OE",
527 "\u0153": "oe",
528 "P\u0306": "P",
529 "p\u0306": "p",
530 "\u0154": "R",
531 "\u0155": "r",
532 "\u0156": "R",
533 "\u0157": "r",
534 "\u0158": "R",
535 "\u0159": "r",
536 "R\u0306": "R",
537 "r\u0306": "r",
538 "\u0212": "R",
539 "\u0213": "r",
540 "\u015A": "S",
541 "\u015B": "s",
542 "\u015C": "S",
543 "\u015D": "s",
544 "\u015E": "S",
545 "\u0218": "S",
546 "\u0219": "s",
547 "\u015F": "s",
548 "\u0160": "S",
549 "\u0161": "s",
550 "\u0162": "T",
551 "\u0163": "t",
552 "\u021B": "t",
553 "\u021A": "T",
554 "\u0164": "T",
555 "\u0165": "t",
556 "\u0166": "T",
557 "\u0167": "t",
558 "T\u0306": "T",
559 "t\u0306": "t",
560 "\u0168": "U",
561 "\u0169": "u",
562 "\u016A": "U",
563 "\u016B": "u",
564 "\u016C": "U",
565 "\u016D": "u",
566 "\u016E": "U",
567 "\u016F": "u",
568 "\u0170": "U",
569 "\u0171": "u",
570 "\u0172": "U",
571 "\u0173": "u",
572 "\u0216": "U",
573 "\u0217": "u",
574 "V\u0306": "V",
575 "v\u0306": "v",
576 "\u0174": "W",
577 "\u0175": "w",
578 "\u1E82": "W",
579 "\u1E83": "w",
580 "X\u0306": "X",
581 "x\u0306": "x",
582 "\u0176": "Y",
583 "\u0177": "y",
584 "\u0178": "Y",
585 "Y\u0306": "Y",
586 "y\u0306": "y",
587 "\u0179": "Z",
588 "\u017A": "z",
589 "\u017B": "Z",
590 "\u017C": "z",
591 "\u017D": "Z",
592 "\u017E": "z",
593 "\u017F": "s",
594 "\u0192": "f",
595 "\u01A0": "O",
596 "\u01A1": "o",
597 "\u01AF": "U",
598 "\u01B0": "u",
599 "\u01CD": "A",
600 "\u01CE": "a",
601 "\u01CF": "I",
602 "\u01D0": "i",
603 "\u01D1": "O",
604 "\u01D2": "o",
605 "\u01D3": "U",
606 "\u01D4": "u",
607 "\u01D5": "U",
608 "\u01D6": "u",
609 "\u01D7": "U",
610 "\u01D8": "u",
611 "\u01D9": "U",
612 "\u01DA": "u",
613 "\u01DB": "U",
614 "\u01DC": "u",
615 "\u1EE8": "U",
616 "\u1EE9": "u",
617 "\u1E78": "U",
618 "\u1E79": "u",
619 "\u01FA": "A",
620 "\u01FB": "a",
621 "\u01FC": "AE",
622 "\u01FD": "ae",
623 "\u01FE": "O",
624 "\u01FF": "o",
625 "\xDE": "TH",
626 "\xFE": "th",
627 "\u1E54": "P",
628 "\u1E55": "p",
629 "\u1E64": "S",
630 "\u1E65": "s",
631 "X\u0301": "X",
632 "x\u0301": "x",
633 "\u0403": "\u0413",
634 "\u0453": "\u0433",
635 "\u040C": "\u041A",
636 "\u045C": "\u043A",
637 "A\u030B": "A",
638 "a\u030B": "a",
639 "E\u030B": "E",
640 "e\u030B": "e",
641 "I\u030B": "I",
642 "i\u030B": "i",
643 "\u01F8": "N",
644 "\u01F9": "n",
645 "\u1ED2": "O",
646 "\u1ED3": "o",
647 "\u1E50": "O",
648 "\u1E51": "o",
649 "\u1EEA": "U",
650 "\u1EEB": "u",
651 "\u1E80": "W",
652 "\u1E81": "w",
653 "\u1EF2": "Y",
654 "\u1EF3": "y",
655 "\u0200": "A",
656 "\u0201": "a",
657 "\u0204": "E",
658 "\u0205": "e",
659 "\u0208": "I",
660 "\u0209": "i",
661 "\u020C": "O",
662 "\u020D": "o",
663 "\u0210": "R",
664 "\u0211": "r",
665 "\u0214": "U",
666 "\u0215": "u",
667 "B\u030C": "B",
668 "b\u030C": "b",
669 "\u010C\u0323": "C",
670 "\u010D\u0323": "c",
671 "\xCA\u030C": "E",
672 "\xEA\u030C": "e",
673 "F\u030C": "F",
674 "f\u030C": "f",
675 "\u01E6": "G",
676 "\u01E7": "g",
677 "\u021E": "H",
678 "\u021F": "h",
679 "J\u030C": "J",
680 "\u01F0": "j",
681 "\u01E8": "K",
682 "\u01E9": "k",
683 "M\u030C": "M",
684 "m\u030C": "m",
685 "P\u030C": "P",
686 "p\u030C": "p",
687 "Q\u030C": "Q",
688 "q\u030C": "q",
689 "\u0158\u0329": "R",
690 "\u0159\u0329": "r",
691 "\u1E66": "S",
692 "\u1E67": "s",
693 "V\u030C": "V",
694 "v\u030C": "v",
695 "W\u030C": "W",
696 "w\u030C": "w",
697 "X\u030C": "X",
698 "x\u030C": "x",
699 "Y\u030C": "Y",
700 "y\u030C": "y",
701 "A\u0327": "A",
702 "a\u0327": "a",
703 "B\u0327": "B",
704 "b\u0327": "b",
705 "\u1E10": "D",
706 "\u1E11": "d",
707 "\u0228": "E",
708 "\u0229": "e",
709 "\u0190\u0327": "E",
710 "\u025B\u0327": "e",
711 "\u1E28": "H",
712 "\u1E29": "h",
713 "I\u0327": "I",
714 "i\u0327": "i",
715 "\u0197\u0327": "I",
716 "\u0268\u0327": "i",
717 "M\u0327": "M",
718 "m\u0327": "m",
719 "O\u0327": "O",
720 "o\u0327": "o",
721 "Q\u0327": "Q",
722 "q\u0327": "q",
723 "U\u0327": "U",
724 "u\u0327": "u",
725 "X\u0327": "X",
726 "x\u0327": "x",
727 "Z\u0327": "Z",
728 "z\u0327": "z",
729 "\u0439": "\u0438",
730 "\u0419": "\u0418",
731 "\u0451": "\u0435",
732 "\u0401": "\u0415"
733 };
734 var chars = Object.keys(characterMap).join("|");
735 var allAccents = new RegExp(chars, "g");
736 var firstAccent = new RegExp(chars, "");
737 function matcher(match2) {
738 return characterMap[match2];
739 }
740 var removeAccents2 = function(string) {
741 return string.replace(allAccents, matcher);
742 };
743 var hasAccents = function(string) {
744 return !!string.match(firstAccent);
745 };
746 module.exports = removeAccents2;
747 module.exports.has = hasAccents;
748 module.exports.remove = removeAccents2;
749 }
750 });
751
752 // package-external:@wordpress/date
753 var require_date = __commonJS({
754 "package-external:@wordpress/date"(exports, module) {
755 module.exports = window.wp.date;
756 }
757 });
758
759 // package-external:@wordpress/deprecated
760 var require_deprecated = __commonJS({
761 "package-external:@wordpress/deprecated"(exports, module) {
762 module.exports = window.wp.deprecated;
763 }
764 });
765
766 // package-external:@wordpress/preferences
767 var require_preferences = __commonJS({
768 "package-external:@wordpress/preferences"(exports, module) {
769 module.exports = window.wp.preferences;
770 }
771 });
772
773 // package-external:@wordpress/editor
774 var require_editor = __commonJS({
775 "package-external:@wordpress/editor"(exports, module) {
776 module.exports = window.wp.editor;
777 }
778 });
779
780 // routes/template-list/route.ts
781 var import_data5 = __toESM(require_data());
782 var import_core_data3 = __toESM(require_core_data());
783
784 // node_modules/clsx/dist/clsx.mjs
785 function r(e) {
786 var t, f, n = "";
787 if ("string" == typeof e || "number" == typeof e) n += e;
788 else if ("object" == typeof e) if (Array.isArray(e)) {
789 var o = e.length;
790 for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
791 } else for (f in e) e[f] && (n && (n += " "), n += f);
792 return n;
793 }
794 function clsx() {
795 for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
796 return n;
797 }
798 var clsx_default = clsx;
799
800 // node_modules/@base-ui/utils/useControlled.mjs
801 var React = __toESM(require_react(), 1);
802
803 // node_modules/@base-ui/utils/createLogOnce.mjs
804 var loggedMessages;
805 if (true) {
806 loggedMessages = /* @__PURE__ */ new Set();
807 }
808 function createLogOnce(severity, prefix) {
809 return function logOnce(...messages) {
810 if (true) {
811 const message2 = messages.join(" ");
812 const output = prefix ? `${prefix}: ${message2}` : message2;
813 const key = `${severity}:${output}`;
814 if (!loggedMessages.has(key)) {
815 loggedMessages.add(key);
816 if (severity === "warn") {
817 console.warn(output);
818 } else {
819 console.error(output);
820 }
821 }
822 }
823 };
824 }
825
826 // node_modules/@base-ui/utils/error.mjs
827 var error = createLogOnce("error", "Base UI");
828
829 // node_modules/@base-ui/utils/useControlled.mjs
830 function useControlled({
831 controlled,
832 default: defaultProp,
833 name,
834 state = "value"
835 }) {
836 const {
837 current: isControlled
838 } = React.useRef(controlled !== void 0);
839 const [valueState, setValue] = React.useState(defaultProp);
840 const value = isControlled && controlled !== void 0 ? controlled : valueState;
841 if (true) {
842 React.useEffect(() => {
843 if (isControlled !== (controlled !== void 0)) {
844 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"));
845 }
846 }, [state, name, controlled]);
847 const {
848 current: defaultValue
849 } = React.useRef(defaultProp);
850 React.useEffect(() => {
851 if (!isControlled && serializeToDevModeString(defaultValue) !== serializeToDevModeString(defaultProp)) {
852 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"));
853 }
854 }, [defaultProp]);
855 }
856 const setValueIfUncontrolled = React.useCallback((newValue) => {
857 if (!isControlled) {
858 setValue(newValue);
859 }
860 }, []);
861 return [value, setValueIfUncontrolled];
862 }
863 function serializeToDevModeString(input) {
864 let nextId = 0;
865 const seen = /* @__PURE__ */ new WeakMap();
866 try {
867 const result = JSON.stringify(input, function replacer(key, value) {
868 if (key === "_owner" && this != null && typeof this === "object" && "$$typeof" in this) {
869 return void 0;
870 }
871 if (typeof value === "bigint") {
872 return `__bigint__:${value}`;
873 }
874 if (value !== null && typeof value === "object") {
875 const id = seen.get(value);
876 if (id !== void 0) {
877 return `__object__:${id}`;
878 }
879 seen.set(value, nextId);
880 nextId += 1;
881 }
882 return value;
883 });
884 return result ?? `__top__:${typeof input}`;
885 } catch {
886 return "__unserializable__";
887 }
888 }
889
890 // node_modules/@base-ui/utils/safeReact.mjs
891 var React2 = __toESM(require_react(), 1);
892 var SafeReact = {
893 ...React2
894 };
895
896 // node_modules/@base-ui/utils/useRefWithInit.mjs
897 var React3 = __toESM(require_react(), 1);
898 var UNINITIALIZED = {};
899 function useRefWithInit(init, initArg) {
900 const ref = React3.useRef(UNINITIALIZED);
901 if (ref.current === UNINITIALIZED) {
902 ref.current = init(initArg);
903 }
904 return ref;
905 }
906
907 // node_modules/@base-ui/utils/useStableCallback.mjs
908 var useInsertionEffect = SafeReact.useInsertionEffect;
909 var useSafeInsertionEffect = (
910 // React 17 doesn't have useInsertionEffect.
911 useInsertionEffect && // Preact replaces useInsertionEffect with useLayoutEffect and fires too late.
912 useInsertionEffect !== SafeReact.useLayoutEffect ? useInsertionEffect : (fn) => fn()
913 );
914 function useStableCallback(callback) {
915 const stable = useRefWithInit(createStableCallback).current;
916 stable.next = callback;
917 useSafeInsertionEffect(stable.effect);
918 return stable.trampoline;
919 }
920 function createStableCallback() {
921 const stable = {
922 next: void 0,
923 callback: assertNotCalled,
924 trampoline: (...args) => stable.callback?.(...args),
925 effect: () => {
926 stable.callback = stable.next;
927 }
928 };
929 return stable;
930 }
931 function assertNotCalled() {
932 if (true) {
933 throw (
934 /* minify-error-disabled */
935 new Error("Base UI: Cannot call an event handler while rendering.")
936 );
937 }
938 }
939
940 // node_modules/@base-ui/utils/warn.mjs
941 var warn = createLogOnce("warn", "Base UI");
942
943 // node_modules/@base-ui/utils/empty.mjs
944 function NOOP() {
945 }
946 var EMPTY_ARRAY = Object.freeze([]);
947 var EMPTY_OBJECT = Object.freeze({});
948
949 // node_modules/@base-ui/utils/useIsoLayoutEffect.mjs
950 var React4 = __toESM(require_react(), 1);
951 var noop = () => {
952 };
953 var useIsoLayoutEffect = typeof document !== "undefined" ? React4.useLayoutEffect : noop;
954
955 // node_modules/@base-ui/react/internals/useRenderElement.mjs
956 var React7 = __toESM(require_react(), 1);
957
958 // node_modules/@base-ui/utils/useMergedRefs.mjs
959 function useMergedRefs(a, b, c2, d) {
960 const forkRef = useRefWithInit(createForkRef).current;
961 if (didChange(forkRef, a, b, c2, d)) {
962 update(forkRef, [a, b, c2, d]);
963 }
964 return forkRef.callback;
965 }
966 function useMergedRefsN(refs) {
967 const forkRef = useRefWithInit(createForkRef).current;
968 if (didChangeN(forkRef, refs)) {
969 update(forkRef, refs);
970 }
971 return forkRef.callback;
972 }
973 function createForkRef() {
974 return {
975 callback: null,
976 cleanup: null,
977 refs: []
978 };
979 }
980 function didChange(forkRef, a, b, c2, d) {
981 return forkRef.refs[0] !== a || forkRef.refs[1] !== b || forkRef.refs[2] !== c2 || forkRef.refs[3] !== d;
982 }
983 function didChangeN(forkRef, newRefs) {
984 return forkRef.refs.length !== newRefs.length || forkRef.refs.some((ref, index2) => ref !== newRefs[index2]);
985 }
986 function update(forkRef, refs) {
987 forkRef.refs = refs;
988 if (refs.every((ref) => ref == null)) {
989 forkRef.callback = null;
990 return;
991 }
992 forkRef.callback = (instance) => {
993 if (forkRef.cleanup) {
994 forkRef.cleanup();
995 forkRef.cleanup = null;
996 }
997 if (instance != null) {
998 const cleanupCallbacks = Array(refs.length).fill(null);
999 for (let i = 0; i < refs.length; i += 1) {
1000 const ref = refs[i];
1001 if (ref == null) {
1002 continue;
1003 }
1004 switch (typeof ref) {
1005 case "function": {
1006 const refCleanup = ref(instance);
1007 if (typeof refCleanup === "function") {
1008 cleanupCallbacks[i] = refCleanup;
1009 }
1010 break;
1011 }
1012 case "object": {
1013 ref.current = instance;
1014 break;
1015 }
1016 default:
1017 }
1018 }
1019 forkRef.cleanup = () => {
1020 for (let i = 0; i < refs.length; i += 1) {
1021 const ref = refs[i];
1022 if (ref == null) {
1023 continue;
1024 }
1025 switch (typeof ref) {
1026 case "function": {
1027 const cleanupCallback = cleanupCallbacks[i];
1028 if (typeof cleanupCallback === "function") {
1029 cleanupCallback();
1030 } else {
1031 void ref(null);
1032 }
1033 break;
1034 }
1035 case "object": {
1036 ref.current = null;
1037 break;
1038 }
1039 default:
1040 }
1041 }
1042 };
1043 }
1044 };
1045 }
1046
1047 // node_modules/@base-ui/utils/getReactElementRef.mjs
1048 var React6 = __toESM(require_react(), 1);
1049
1050 // node_modules/@base-ui/utils/reactVersion.mjs
1051 var React5 = __toESM(require_react(), 1);
1052 var majorVersion = parseInt(React5.version, 10);
1053 function isReactVersionAtLeast(reactVersionToCheck) {
1054 return majorVersion >= reactVersionToCheck;
1055 }
1056
1057 // node_modules/@base-ui/utils/getReactElementRef.mjs
1058 function getReactElementRef(element) {
1059 if (!/* @__PURE__ */ React6.isValidElement(element)) {
1060 return null;
1061 }
1062 const reactElement = element;
1063 const propsWithRef = reactElement.props;
1064 return (isReactVersionAtLeast(19) ? propsWithRef?.ref : reactElement.ref) ?? null;
1065 }
1066
1067 // node_modules/@base-ui/utils/mergeObjects.mjs
1068 function mergeObjects(a, b) {
1069 if (a && !b) {
1070 return a;
1071 }
1072 if (!a && b) {
1073 return b;
1074 }
1075 if (a || b) {
1076 return {
1077 ...a,
1078 ...b
1079 };
1080 }
1081 return void 0;
1082 }
1083
1084 // node_modules/@base-ui/react/internals/getStateAttributesProps.mjs
1085 function getStateAttributesProps(state, customMapping) {
1086 const props = {};
1087 for (const key in state) {
1088 const value = state[key];
1089 if (customMapping?.hasOwnProperty(key)) {
1090 const customProps = customMapping[key](value);
1091 if (customProps != null) {
1092 Object.assign(props, customProps);
1093 }
1094 continue;
1095 }
1096 if (value === true) {
1097 props[`data-${key.toLowerCase()}`] = "";
1098 } else if (value) {
1099 props[`data-${key.toLowerCase()}`] = value.toString();
1100 }
1101 }
1102 return props;
1103 }
1104
1105 // node_modules/@base-ui/react/utils/resolveClassName.mjs
1106 function resolveClassName(className, state) {
1107 return typeof className === "function" ? className(state) : className;
1108 }
1109
1110 // node_modules/@base-ui/react/utils/resolveStyle.mjs
1111 function resolveStyle(style, state) {
1112 return typeof style === "function" ? style(state) : style;
1113 }
1114
1115 // node_modules/@base-ui/react/merge-props/mergeProps.mjs
1116 var EMPTY_PROPS = {};
1117 function mergeProps(a, b, c2, d, e) {
1118 if (!c2 && !d && !e && !a) {
1119 return createInitialMergedProps(b);
1120 }
1121 let merged = createInitialMergedProps(a);
1122 if (b) {
1123 merged = mergeInto(merged, b);
1124 }
1125 if (c2) {
1126 merged = mergeInto(merged, c2);
1127 }
1128 if (d) {
1129 merged = mergeInto(merged, d);
1130 }
1131 if (e) {
1132 merged = mergeInto(merged, e);
1133 }
1134 return merged;
1135 }
1136 function mergePropsN(props) {
1137 if (props.length === 0) {
1138 return EMPTY_PROPS;
1139 }
1140 if (props.length === 1) {
1141 return createInitialMergedProps(props[0]);
1142 }
1143 let merged = createInitialMergedProps(props[0]);
1144 for (let i = 1; i < props.length; i += 1) {
1145 merged = mergeInto(merged, props[i]);
1146 }
1147 return merged;
1148 }
1149 function createInitialMergedProps(inputProps) {
1150 if (isPropsGetter(inputProps)) {
1151 return {
1152 ...resolvePropsGetter(inputProps, EMPTY_PROPS)
1153 };
1154 }
1155 return copyInitialProps(inputProps);
1156 }
1157 function mergeInto(merged, inputProps) {
1158 if (isPropsGetter(inputProps)) {
1159 return resolvePropsGetter(inputProps, merged);
1160 }
1161 return mutablyMergeInto(merged, inputProps);
1162 }
1163 function copyInitialProps(inputProps) {
1164 const copiedProps = {
1165 ...inputProps
1166 };
1167 for (const propName in copiedProps) {
1168 const propValue = copiedProps[propName];
1169 if (isEventHandler(propName, propValue)) {
1170 copiedProps[propName] = wrapEventHandler(propValue);
1171 }
1172 }
1173 return copiedProps;
1174 }
1175 function mutablyMergeInto(mergedProps, externalProps) {
1176 if (!externalProps) {
1177 return mergedProps;
1178 }
1179 for (const propName in externalProps) {
1180 const externalPropValue = externalProps[propName];
1181 switch (propName) {
1182 case "style": {
1183 mergedProps[propName] = mergeObjects(mergedProps.style, externalPropValue);
1184 break;
1185 }
1186 case "className": {
1187 mergedProps[propName] = mergeClassNames(mergedProps.className, externalPropValue);
1188 break;
1189 }
1190 default: {
1191 if (isEventHandler(propName, externalPropValue)) {
1192 mergedProps[propName] = mergeEventHandlers(mergedProps[propName], externalPropValue);
1193 } else {
1194 mergedProps[propName] = externalPropValue;
1195 }
1196 }
1197 }
1198 }
1199 return mergedProps;
1200 }
1201 function isEventHandler(key, value) {
1202 const code0 = key.charCodeAt(0);
1203 const code1 = key.charCodeAt(1);
1204 const code2 = key.charCodeAt(2);
1205 return code0 === 111 && code1 === 110 && code2 >= 65 && code2 <= 90 && (typeof value === "function" || typeof value === "undefined");
1206 }
1207 function isPropsGetter(inputProps) {
1208 return typeof inputProps === "function";
1209 }
1210 function resolvePropsGetter(inputProps, previousProps) {
1211 if (isPropsGetter(inputProps)) {
1212 return inputProps(previousProps);
1213 }
1214 return inputProps ?? EMPTY_PROPS;
1215 }
1216 function mergeEventHandlers(ourHandler, theirHandler) {
1217 if (!theirHandler) {
1218 return ourHandler;
1219 }
1220 if (!ourHandler) {
1221 return wrapEventHandler(theirHandler);
1222 }
1223 return (...args) => {
1224 const event = args[0];
1225 if (isSyntheticEvent(event)) {
1226 const baseUIEvent = event;
1227 makeEventPreventable(baseUIEvent);
1228 const result2 = theirHandler(...args);
1229 if (!baseUIEvent.baseUIHandlerPrevented) {
1230 ourHandler?.(...args);
1231 }
1232 return result2;
1233 }
1234 const result = theirHandler(...args);
1235 ourHandler?.(...args);
1236 return result;
1237 };
1238 }
1239 function wrapEventHandler(handler) {
1240 if (!handler) {
1241 return handler;
1242 }
1243 return (...args) => {
1244 const event = args[0];
1245 if (isSyntheticEvent(event)) {
1246 makeEventPreventable(event);
1247 }
1248 return handler(...args);
1249 };
1250 }
1251 function makeEventPreventable(event) {
1252 event.preventBaseUIHandler = () => {
1253 event.baseUIHandlerPrevented = true;
1254 };
1255 return event;
1256 }
1257 function mergeClassNames(ourClassName, theirClassName) {
1258 if (theirClassName) {
1259 if (ourClassName) {
1260 return theirClassName + " " + ourClassName;
1261 }
1262 return theirClassName;
1263 }
1264 return ourClassName;
1265 }
1266 function isSyntheticEvent(event) {
1267 return event != null && typeof event === "object" && "nativeEvent" in event;
1268 }
1269
1270 // node_modules/@base-ui/react/internals/useRenderElement.mjs
1271 var import_react = __toESM(require_react(), 1);
1272 function useRenderElement(element, componentProps, params = {}) {
1273 let renderProp = componentProps.render;
1274 if (params.enabled !== false) {
1275 renderProp = unwrapLazyRenderProp(renderProp);
1276 }
1277 const outProps = useRenderElementProps(componentProps, params, renderProp);
1278 if (params.enabled === false) {
1279 return null;
1280 }
1281 const state = params.state ?? EMPTY_OBJECT;
1282 return evaluateRenderProp(element, renderProp, outProps, state);
1283 }
1284 function useRenderElementProps(componentProps, params, renderProp) {
1285 const {
1286 className: classNameProp,
1287 style: styleProp
1288 } = componentProps;
1289 const {
1290 state = EMPTY_OBJECT,
1291 ref,
1292 props,
1293 stateAttributesMapping: stateAttributesMapping2,
1294 enabled = true
1295 } = params;
1296 const className = enabled ? resolveClassName(classNameProp, state) : void 0;
1297 const style = enabled ? resolveStyle(styleProp, state) : void 0;
1298 const stateProps = enabled ? getStateAttributesProps(state, stateAttributesMapping2) : EMPTY_OBJECT;
1299 const resolvedProps = enabled && props ? resolveRenderFunctionProps(props) : void 0;
1300 const outProps = enabled ? mergeObjects(stateProps, resolvedProps) ?? {} : EMPTY_OBJECT;
1301 if (typeof document !== "undefined") {
1302 if (!enabled) {
1303 void useMergedRefs(null, null);
1304 } else if (Array.isArray(ref)) {
1305 outProps.ref = useMergedRefsN([outProps.ref, getReactElementRef(renderProp), ...ref]);
1306 } else {
1307 outProps.ref = useMergedRefs(outProps.ref, getReactElementRef(renderProp), ref);
1308 }
1309 }
1310 if (!enabled) {
1311 return EMPTY_OBJECT;
1312 }
1313 if (className !== void 0) {
1314 outProps.className = mergeClassNames(outProps.className, className);
1315 }
1316 if (style !== void 0) {
1317 outProps.style = mergeObjects(outProps.style, style);
1318 }
1319 return outProps;
1320 }
1321 function resolveRenderFunctionProps(props) {
1322 if (Array.isArray(props)) {
1323 return mergePropsN(props);
1324 }
1325 return mergeProps(void 0, props);
1326 }
1327 var REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for("react.lazy");
1328 var COMPONENT_IDENTIFIER_PATTERN = /^[A-Z][A-Za-z0-9$]*$/;
1329 var LOWERCASE_CHARACTER_PATTERN = /[a-z]/;
1330 function unwrapLazyRenderProp(render4) {
1331 if (render4?.$$typeof !== REACT_LAZY_TYPE) {
1332 return render4;
1333 }
1334 const unwrapped = React7.Children.toArray(render4)[0];
1335 return /* @__PURE__ */ React7.isValidElement(unwrapped) ? unwrapped : render4;
1336 }
1337 function evaluateRenderProp(element, render4, props, state) {
1338 if (render4) {
1339 if (typeof render4 === "function") {
1340 if (true) {
1341 warnIfRenderPropLooksLikeComponent(render4);
1342 }
1343 return render4(props, state);
1344 }
1345 const mergedProps = mergeProps(props, render4.props);
1346 mergedProps.ref = props.ref;
1347 if (true) {
1348 if (!/* @__PURE__ */ React7.isValidElement(render4)) {
1349 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"));
1350 }
1351 }
1352 return /* @__PURE__ */ React7.cloneElement(render4, mergedProps);
1353 }
1354 if (element) {
1355 if (typeof element === "string") {
1356 return renderTag(element, props);
1357 }
1358 }
1359 throw new Error(true ? "Base UI: Render element or function are not defined." : formatErrorMessage_default(8));
1360 }
1361 function warnIfRenderPropLooksLikeComponent(renderFn) {
1362 const functionName = renderFn.name;
1363 if (functionName.length === 0) {
1364 return;
1365 }
1366 if (!COMPONENT_IDENTIFIER_PATTERN.test(functionName)) {
1367 return;
1368 }
1369 if (!LOWERCASE_CHARACTER_PATTERN.test(functionName)) {
1370 return;
1371 }
1372 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");
1373 }
1374 function renderTag(Tag, props) {
1375 if (Tag === "button") {
1376 return /* @__PURE__ */ (0, import_react.createElement)("button", {
1377 type: "button",
1378 ...props,
1379 key: props.key
1380 });
1381 }
1382 if (Tag === "img") {
1383 return /* @__PURE__ */ (0, import_react.createElement)("img", {
1384 alt: "",
1385 ...props,
1386 key: props.key
1387 });
1388 }
1389 return /* @__PURE__ */ React7.createElement(Tag, props);
1390 }
1391
1392 // node_modules/@base-ui/utils/useId.mjs
1393 var React8 = __toESM(require_react(), 1);
1394 var globalId = 0;
1395 function useGlobalId(idOverride, prefix = "mui") {
1396 const [defaultId, setDefaultId] = React8.useState(idOverride);
1397 const id = idOverride || defaultId;
1398 React8.useEffect(() => {
1399 if (defaultId == null) {
1400 globalId += 1;
1401 setDefaultId(`${prefix}-${globalId}`);
1402 }
1403 }, [defaultId, prefix]);
1404 return id;
1405 }
1406 var maybeReactUseId = SafeReact.useId;
1407 function useId(idOverride, prefix) {
1408 if (maybeReactUseId !== void 0) {
1409 const reactId = maybeReactUseId();
1410 return idOverride ?? (prefix ? `${prefix}-${reactId}` : reactId);
1411 }
1412 return useGlobalId(idOverride, prefix);
1413 }
1414
1415 // node_modules/@base-ui/react/internals/useBaseUiId.mjs
1416 function useBaseUiId(idOverride) {
1417 return useId(idOverride, "base-ui");
1418 }
1419
1420 // node_modules/@base-ui/react/internals/reason-parts.mjs
1421 var reason_parts_exports = {};
1422 __export(reason_parts_exports, {
1423 cancelOpen: () => cancelOpen,
1424 chipRemovePress: () => chipRemovePress,
1425 clearPress: () => clearPress,
1426 closePress: () => closePress,
1427 closeWatcher: () => closeWatcher,
1428 decrementPress: () => decrementPress,
1429 disabled: () => disabled,
1430 drag: () => drag,
1431 escapeKey: () => escapeKey,
1432 focusOut: () => focusOut,
1433 imperativeAction: () => imperativeAction,
1434 incrementPress: () => incrementPress,
1435 initial: () => initial,
1436 inputBlur: () => inputBlur,
1437 inputChange: () => inputChange,
1438 inputClear: () => inputClear,
1439 inputPaste: () => inputPaste,
1440 inputPress: () => inputPress,
1441 itemPress: () => itemPress,
1442 keyboard: () => keyboard,
1443 linkPress: () => linkPress,
1444 listNavigation: () => listNavigation,
1445 missing: () => missing,
1446 none: () => none,
1447 outsidePress: () => outsidePress,
1448 pointer: () => pointer,
1449 scrub: () => scrub,
1450 siblingOpen: () => siblingOpen,
1451 swipe: () => swipe,
1452 trackPress: () => trackPress,
1453 triggerFocus: () => triggerFocus,
1454 triggerHover: () => triggerHover,
1455 triggerPress: () => triggerPress,
1456 wheel: () => wheel,
1457 windowResize: () => windowResize
1458 });
1459 var none = "none";
1460 var triggerPress = "trigger-press";
1461 var triggerHover = "trigger-hover";
1462 var triggerFocus = "trigger-focus";
1463 var outsidePress = "outside-press";
1464 var itemPress = "item-press";
1465 var closePress = "close-press";
1466 var linkPress = "link-press";
1467 var clearPress = "clear-press";
1468 var chipRemovePress = "chip-remove-press";
1469 var trackPress = "track-press";
1470 var incrementPress = "increment-press";
1471 var decrementPress = "decrement-press";
1472 var inputChange = "input-change";
1473 var inputClear = "input-clear";
1474 var inputBlur = "input-blur";
1475 var inputPaste = "input-paste";
1476 var inputPress = "input-press";
1477 var focusOut = "focus-out";
1478 var escapeKey = "escape-key";
1479 var closeWatcher = "close-watcher";
1480 var listNavigation = "list-navigation";
1481 var keyboard = "keyboard";
1482 var pointer = "pointer";
1483 var drag = "drag";
1484 var wheel = "wheel";
1485 var scrub = "scrub";
1486 var cancelOpen = "cancel-open";
1487 var siblingOpen = "sibling-open";
1488 var disabled = "disabled";
1489 var missing = "missing";
1490 var initial = "initial";
1491 var imperativeAction = "imperative-action";
1492 var swipe = "swipe";
1493 var windowResize = "window-resize";
1494
1495 // node_modules/@base-ui/react/internals/createBaseUIEventDetails.mjs
1496 function createChangeEventDetails(reason, event, trigger, customProperties) {
1497 let canceled = false;
1498 let allowPropagation = false;
1499 const custom = customProperties ?? EMPTY_OBJECT;
1500 const details = {
1501 reason,
1502 event: event ?? new Event("base-ui"),
1503 cancel() {
1504 canceled = true;
1505 },
1506 allowPropagation() {
1507 allowPropagation = true;
1508 },
1509 get isCanceled() {
1510 return canceled;
1511 },
1512 get isPropagationAllowed() {
1513 return allowPropagation;
1514 },
1515 trigger,
1516 ...custom
1517 };
1518 return details;
1519 }
1520
1521 // node_modules/@base-ui/react/internals/useTransitionStatus.mjs
1522 var React10 = __toESM(require_react(), 1);
1523
1524 // node_modules/@base-ui/utils/useOnMount.mjs
1525 var React9 = __toESM(require_react(), 1);
1526 function useOnMount(fn) {
1527 React9.useEffect(fn, EMPTY_ARRAY);
1528 }
1529
1530 // node_modules/@base-ui/utils/useAnimationFrame.mjs
1531 var EMPTY = null;
1532 var LAST_RAF = globalThis.requestAnimationFrame;
1533 var Scheduler = class {
1534 /* This implementation uses an array as a backing data-structure for frame callbacks.
1535 * It allows `O(1)` callback cancelling by inserting a `null` in the array, though it
1536 * never calls the native `cancelAnimationFrame` if there are no frames left. This can
1537 * be much more efficient if there is a call pattern that alterns as
1538 * "request-cancel-request-cancel-…".
1539 * But in the case of "request-request-…-cancel-cancel-…", it leaves the final animation
1540 * frame to run anyway. We turn that frame into a `O(1)` no-op via `callbacksCount`. */
1541 callbacks = [];
1542 callbacksCount = 0;
1543 nextId = 1;
1544 startId = 1;
1545 isScheduled = false;
1546 tick = (timestamp) => {
1547 this.isScheduled = false;
1548 const currentCallbacks = this.callbacks;
1549 const currentCallbacksCount = this.callbacksCount;
1550 this.callbacks = [];
1551 this.callbacksCount = 0;
1552 this.startId = this.nextId;
1553 if (currentCallbacksCount > 0) {
1554 for (let i = 0; i < currentCallbacks.length; i += 1) {
1555 currentCallbacks[i]?.(timestamp);
1556 }
1557 }
1558 };
1559 request(fn) {
1560 const id = this.nextId;
1561 this.nextId += 1;
1562 this.callbacks.push(fn);
1563 this.callbacksCount += 1;
1564 const didRAFChange = LAST_RAF !== requestAnimationFrame && (LAST_RAF = requestAnimationFrame, true);
1565 if (!this.isScheduled || didRAFChange) {
1566 requestAnimationFrame(this.tick);
1567 this.isScheduled = true;
1568 }
1569 return id;
1570 }
1571 cancel(id) {
1572 const index2 = id - this.startId;
1573 if (index2 < 0 || index2 >= this.callbacks.length) {
1574 return;
1575 }
1576 if (this.callbacks[index2] === null) {
1577 return;
1578 }
1579 this.callbacks[index2] = null;
1580 this.callbacksCount -= 1;
1581 }
1582 };
1583 var scheduler = new Scheduler();
1584 var AnimationFrame = class _AnimationFrame {
1585 static create() {
1586 return new _AnimationFrame();
1587 }
1588 static request(fn) {
1589 return scheduler.request(fn);
1590 }
1591 static cancel(id) {
1592 return scheduler.cancel(id);
1593 }
1594 currentId = EMPTY;
1595 /**
1596 * Executes `fn` after `delay`, clearing any previously scheduled call.
1597 */
1598 request(fn) {
1599 this.cancel();
1600 this.currentId = scheduler.request(() => {
1601 this.currentId = EMPTY;
1602 fn();
1603 });
1604 }
1605 cancel = () => {
1606 if (this.currentId !== EMPTY) {
1607 scheduler.cancel(this.currentId);
1608 this.currentId = EMPTY;
1609 }
1610 };
1611 disposeEffect = () => {
1612 return this.cancel;
1613 };
1614 };
1615 function useAnimationFrame() {
1616 const timeout = useRefWithInit(AnimationFrame.create).current;
1617 useOnMount(timeout.disposeEffect);
1618 return timeout;
1619 }
1620
1621 // node_modules/@base-ui/react/internals/useTransitionStatus.mjs
1622 function useTransitionStatus(open2, enableIdleState = false, deferEndingState = false, animateInitialOpen = false) {
1623 const [transitionStatus, setTransitionStatus] = React10.useState(open2 && enableIdleState ? "idle" : void 0);
1624 const [mounted, setMounted] = React10.useState(open2 && !animateInitialOpen);
1625 if (open2 && !mounted) {
1626 setMounted(true);
1627 setTransitionStatus("starting");
1628 }
1629 if (!open2 && mounted && transitionStatus !== "ending" && !deferEndingState) {
1630 setTransitionStatus("ending");
1631 }
1632 if (!open2 && !mounted && transitionStatus === "ending") {
1633 setTransitionStatus(void 0);
1634 }
1635 useIsoLayoutEffect(() => {
1636 if (!open2 && mounted && transitionStatus !== "ending" && deferEndingState) {
1637 const frame = AnimationFrame.request(() => {
1638 setTransitionStatus("ending");
1639 });
1640 return () => {
1641 AnimationFrame.cancel(frame);
1642 };
1643 }
1644 return void 0;
1645 }, [open2, mounted, transitionStatus, deferEndingState]);
1646 useIsoLayoutEffect(() => {
1647 if (!open2 || enableIdleState) {
1648 return void 0;
1649 }
1650 const frame = AnimationFrame.request(() => {
1651 setTransitionStatus(void 0);
1652 });
1653 return () => {
1654 AnimationFrame.cancel(frame);
1655 };
1656 }, [enableIdleState, open2]);
1657 useIsoLayoutEffect(() => {
1658 if (!open2 || !enableIdleState) {
1659 return void 0;
1660 }
1661 if (open2 && mounted && transitionStatus !== "idle") {
1662 setTransitionStatus("starting");
1663 }
1664 const frame = AnimationFrame.request(() => {
1665 setTransitionStatus("idle");
1666 });
1667 return () => {
1668 AnimationFrame.cancel(frame);
1669 };
1670 }, [enableIdleState, open2, mounted, transitionStatus]);
1671 return {
1672 mounted,
1673 setMounted,
1674 transitionStatus
1675 };
1676 }
1677
1678 // node_modules/@base-ui/react/internals/TransitionStatusDataAttributes.mjs
1679 var startingStyle = "data-starting-style";
1680 var endingStyle = "data-ending-style";
1681
1682 // node_modules/@base-ui/react/internals/stateAttributesMapping.mjs
1683 var STARTING_HOOK = {
1684 [startingStyle]: ""
1685 };
1686 var ENDING_HOOK = {
1687 [endingStyle]: ""
1688 };
1689 var transitionStatusMapping = {
1690 transitionStatus(value) {
1691 if (value === "starting") {
1692 return STARTING_HOOK;
1693 }
1694 if (value === "ending") {
1695 return ENDING_HOOK;
1696 }
1697 return null;
1698 }
1699 };
1700
1701 // node_modules/@base-ui/react/internals/use-button/useButton.mjs
1702 var React13 = __toESM(require_react(), 1);
1703
1704 // node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs
1705 function hasWindow() {
1706 return typeof window !== "undefined";
1707 }
1708 function getNodeName(node) {
1709 if (isNode(node)) {
1710 return (node.nodeName || "").toLowerCase();
1711 }
1712 return "#document";
1713 }
1714 function getWindow(node) {
1715 var _node$ownerDocument;
1716 return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;
1717 }
1718 function getDocumentElement(node) {
1719 var _ref;
1720 return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;
1721 }
1722 function isNode(value) {
1723 if (!hasWindow()) {
1724 return false;
1725 }
1726 return value instanceof Node || value instanceof getWindow(value).Node;
1727 }
1728 function isElement(value) {
1729 if (!hasWindow()) {
1730 return false;
1731 }
1732 return value instanceof Element || value instanceof getWindow(value).Element;
1733 }
1734 function isHTMLElement(value) {
1735 if (!hasWindow()) {
1736 return false;
1737 }
1738 return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;
1739 }
1740 function isShadowRoot(value) {
1741 if (!hasWindow() || typeof ShadowRoot === "undefined") {
1742 return false;
1743 }
1744 return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;
1745 }
1746 function isOverflowElement(element) {
1747 const {
1748 overflow,
1749 overflowX,
1750 overflowY,
1751 display
1752 } = getComputedStyle2(element);
1753 return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== "inline" && display !== "contents";
1754 }
1755 function isTableElement(element) {
1756 return /^(table|td|th)$/.test(getNodeName(element));
1757 }
1758 function isTopLayer(element) {
1759 try {
1760 if (element.matches(":popover-open")) {
1761 return true;
1762 }
1763 } catch (_e) {
1764 }
1765 try {
1766 return element.matches(":modal");
1767 } catch (_e) {
1768 return false;
1769 }
1770 }
1771 var willChangeRe = /transform|translate|scale|rotate|perspective|filter/;
1772 var containRe = /paint|layout|strict|content/;
1773 var isNotNone = (value) => !!value && value !== "none";
1774 var isWebKitValue;
1775 function isContainingBlock(elementOrCss) {
1776 const css = isElement(elementOrCss) ? getComputedStyle2(elementOrCss) : elementOrCss;
1777 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 || "");
1778 }
1779 function getContainingBlock(element) {
1780 let currentNode = getParentNode(element);
1781 while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {
1782 if (isContainingBlock(currentNode)) {
1783 return currentNode;
1784 } else if (isTopLayer(currentNode)) {
1785 return null;
1786 }
1787 currentNode = getParentNode(currentNode);
1788 }
1789 return null;
1790 }
1791 function isWebKit() {
1792 if (isWebKitValue == null) {
1793 isWebKitValue = typeof CSS !== "undefined" && CSS.supports && CSS.supports("-webkit-backdrop-filter", "none");
1794 }
1795 return isWebKitValue;
1796 }
1797 function isLastTraversableNode(node) {
1798 return /^(html|body|#document)$/.test(getNodeName(node));
1799 }
1800 function getComputedStyle2(element) {
1801 return getWindow(element).getComputedStyle(element);
1802 }
1803 function getNodeScroll(element) {
1804 if (isElement(element)) {
1805 return {
1806 scrollLeft: element.scrollLeft,
1807 scrollTop: element.scrollTop
1808 };
1809 }
1810 return {
1811 scrollLeft: element.scrollX,
1812 scrollTop: element.scrollY
1813 };
1814 }
1815 function getParentNode(node) {
1816 if (getNodeName(node) === "html") {
1817 return node;
1818 }
1819 const result = (
1820 // Step into the shadow DOM of the parent of a slotted node.
1821 node.assignedSlot || // DOM Element detected.
1822 node.parentNode || // ShadowRoot detected.
1823 isShadowRoot(node) && node.host || // Fallback.
1824 getDocumentElement(node)
1825 );
1826 return isShadowRoot(result) ? result.host : result;
1827 }
1828 function getNearestOverflowAncestor(node) {
1829 const parentNode = getParentNode(node);
1830 if (isLastTraversableNode(parentNode)) {
1831 return (node.ownerDocument || node).body;
1832 }
1833 if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {
1834 return parentNode;
1835 }
1836 return getNearestOverflowAncestor(parentNode);
1837 }
1838 function getOverflowAncestors(node, list, traverseIframes) {
1839 var _node$ownerDocument2;
1840 if (list === void 0) {
1841 list = [];
1842 }
1843 if (traverseIframes === void 0) {
1844 traverseIframes = true;
1845 }
1846 const scrollableAncestor = getNearestOverflowAncestor(node);
1847 const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);
1848 const win = getWindow(scrollableAncestor);
1849 if (isBody) {
1850 const frameElement = getFrameElement(win);
1851 return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);
1852 } else {
1853 return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));
1854 }
1855 }
1856 function getFrameElement(win) {
1857 return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;
1858 }
1859
1860 // node_modules/@base-ui/react/internals/composite/root/CompositeRootContext.mjs
1861 var React11 = __toESM(require_react(), 1);
1862 var CompositeRootContext = /* @__PURE__ */ React11.createContext(void 0);
1863 if (true) CompositeRootContext.displayName = "CompositeRootContext";
1864 function useCompositeRootContext(optional = false) {
1865 const context = React11.useContext(CompositeRootContext);
1866 if (context === void 0 && !optional) {
1867 throw new Error(true ? "Base UI: CompositeRootContext is missing. Composite parts must be placed within <Composite.Root>." : formatErrorMessage_default(16));
1868 }
1869 return context;
1870 }
1871
1872 // node_modules/@base-ui/react/utils/useFocusableWhenDisabled.mjs
1873 var React12 = __toESM(require_react(), 1);
1874 function useFocusableWhenDisabled(parameters) {
1875 const {
1876 focusableWhenDisabled,
1877 disabled: disabled2,
1878 composite = false,
1879 tabIndex: tabIndexProp = 0,
1880 isNativeButton
1881 } = parameters;
1882 const isFocusableComposite = composite && focusableWhenDisabled !== false;
1883 const isNonFocusableComposite = composite && focusableWhenDisabled === false;
1884 const props = React12.useMemo(() => {
1885 const additionalProps = {
1886 // allow Tabbing away from focusableWhenDisabled elements
1887 onKeyDown(event) {
1888 if (disabled2 && focusableWhenDisabled && event.key !== "Tab") {
1889 event.preventDefault();
1890 }
1891 }
1892 };
1893 if (!composite) {
1894 additionalProps.tabIndex = tabIndexProp;
1895 if (!isNativeButton && disabled2) {
1896 additionalProps.tabIndex = focusableWhenDisabled ? tabIndexProp : -1;
1897 }
1898 }
1899 if (isNativeButton && (focusableWhenDisabled || isFocusableComposite) || !isNativeButton && disabled2) {
1900 additionalProps["aria-disabled"] = disabled2;
1901 }
1902 if (isNativeButton && (!focusableWhenDisabled || isNonFocusableComposite)) {
1903 additionalProps.disabled = disabled2;
1904 }
1905 return additionalProps;
1906 }, [composite, disabled2, focusableWhenDisabled, isFocusableComposite, isNonFocusableComposite, isNativeButton, tabIndexProp]);
1907 return {
1908 props
1909 };
1910 }
1911
1912 // node_modules/@base-ui/utils/owner.mjs
1913 function ownerDocument(node) {
1914 return node?.ownerDocument || document;
1915 }
1916
1917 // node_modules/@base-ui/react/utils/dispatchClickWithModifiers.mjs
1918 function dispatchClickWithModifiers(target, sourceEvent, {
1919 detail = 0
1920 } = {}) {
1921 target.dispatchEvent(new (getWindow(target)).PointerEvent("click", {
1922 bubbles: true,
1923 cancelable: true,
1924 composed: true,
1925 detail,
1926 shiftKey: sourceEvent.shiftKey,
1927 ctrlKey: sourceEvent.ctrlKey,
1928 altKey: sourceEvent.altKey,
1929 metaKey: sourceEvent.metaKey
1930 }));
1931 }
1932
1933 // node_modules/@base-ui/react/internals/use-button/useButton.mjs
1934 function useButton(parameters = {}) {
1935 const {
1936 disabled: disabled2 = false,
1937 focusableWhenDisabled,
1938 tabIndex = 0,
1939 native: isNativeButton = true,
1940 composite: compositeProp
1941 } = parameters;
1942 const elementRef = React13.useRef(null);
1943 const compositeRootContext = useCompositeRootContext(true);
1944 const isCompositeItem = compositeProp ?? compositeRootContext !== void 0;
1945 const {
1946 props: focusableWhenDisabledProps
1947 } = useFocusableWhenDisabled({
1948 focusableWhenDisabled,
1949 disabled: disabled2,
1950 composite: isCompositeItem,
1951 tabIndex,
1952 isNativeButton
1953 });
1954 if (true) {
1955 React13.useEffect(() => {
1956 if (!elementRef.current) {
1957 return;
1958 }
1959 const isButtonTag = isButtonElement(elementRef.current);
1960 if (isNativeButton) {
1961 if (!isButtonTag) {
1962 const ownerStackMessage = SafeReact.captureOwnerStack?.() || "";
1963 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`.";
1964 error(`${message2}${ownerStackMessage}`);
1965 }
1966 } else if (isButtonTag) {
1967 const ownerStackMessage = SafeReact.captureOwnerStack?.() || "";
1968 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`.";
1969 error(`${message2}${ownerStackMessage}`);
1970 }
1971 }, [isNativeButton]);
1972 }
1973 const updateDisabled = React13.useCallback(() => {
1974 const element = elementRef.current;
1975 if (!isButtonElement(element)) {
1976 return;
1977 }
1978 if (isCompositeItem && disabled2 && focusableWhenDisabledProps.disabled === void 0 && element.disabled) {
1979 element.disabled = false;
1980 }
1981 }, [disabled2, focusableWhenDisabledProps.disabled, isCompositeItem]);
1982 useIsoLayoutEffect(updateDisabled, [updateDisabled]);
1983 const getButtonProps = React13.useCallback((externalProps = {}) => {
1984 const {
1985 onClick: externalOnClick,
1986 onMouseDown: externalOnMouseDown,
1987 onKeyUp: externalOnKeyUp,
1988 onKeyDown: externalOnKeyDown,
1989 onPointerDown: externalOnPointerDown,
1990 ...otherExternalProps
1991 } = externalProps;
1992 return mergeProps({
1993 onClick(event) {
1994 if (disabled2) {
1995 event.preventDefault();
1996 return;
1997 }
1998 externalOnClick?.(event);
1999 },
2000 onMouseDown(event) {
2001 if (!disabled2) {
2002 externalOnMouseDown?.(event);
2003 }
2004 },
2005 onKeyDown(event) {
2006 if (disabled2) {
2007 return;
2008 }
2009 makeEventPreventable(event);
2010 externalOnKeyDown?.(event);
2011 if (event.baseUIHandlerPrevented) {
2012 return;
2013 }
2014 const isCurrentTarget = event.target === event.currentTarget;
2015 const currentTarget = event.currentTarget;
2016 const isButton = isButtonElement(currentTarget);
2017 const isLink = !isNativeButton && isValidLinkElement(currentTarget);
2018 const shouldClick = isCurrentTarget && (isNativeButton ? isButton : !isLink);
2019 const isEnterKey = event.key === "Enter";
2020 const isSpaceKey = event.key === " ";
2021 const role = currentTarget.getAttribute("role");
2022 const isTextNavigationRole = role?.startsWith("menuitem") || role === "option" || role === "gridcell";
2023 if (isCurrentTarget && isCompositeItem && isSpaceKey) {
2024 if (event.defaultPrevented && isTextNavigationRole) {
2025 return;
2026 }
2027 event.preventDefault();
2028 if (!isNativeButton || isButton) {
2029 event.preventBaseUIHandler();
2030 dispatchClickWithModifiers(currentTarget, event);
2031 }
2032 return;
2033 }
2034 if (!shouldClick || isNativeButton || !isSpaceKey && !isEnterKey) {
2035 if (isCurrentTarget && isLink && isSpaceKey) {
2036 event.preventDefault();
2037 }
2038 return;
2039 }
2040 if (event.defaultPrevented) {
2041 return;
2042 }
2043 event.preventDefault();
2044 if (isEnterKey) {
2045 event.preventBaseUIHandler();
2046 dispatchClickWithModifiers(currentTarget, event);
2047 }
2048 },
2049 onKeyUp(event) {
2050 if (disabled2) {
2051 return;
2052 }
2053 makeEventPreventable(event);
2054 externalOnKeyUp?.(event);
2055 if (event.target === event.currentTarget && isNativeButton && isCompositeItem && isButtonElement(event.currentTarget) && event.key === " ") {
2056 event.preventDefault();
2057 return;
2058 }
2059 if (event.baseUIHandlerPrevented) {
2060 return;
2061 }
2062 if (event.target === event.currentTarget && !isNativeButton && !isCompositeItem && !event.defaultPrevented && event.key === " ") {
2063 event.preventBaseUIHandler();
2064 dispatchClickWithModifiers(event.currentTarget, event);
2065 }
2066 },
2067 onPointerDown(event) {
2068 if (disabled2) {
2069 event.preventDefault();
2070 return;
2071 }
2072 externalOnPointerDown?.(event);
2073 }
2074 }, isNativeButton ? {
2075 type: "button"
2076 } : {
2077 role: "button"
2078 }, focusableWhenDisabledProps, otherExternalProps);
2079 }, [disabled2, focusableWhenDisabledProps, isCompositeItem, isNativeButton]);
2080 const buttonRef = useStableCallback((element) => {
2081 elementRef.current = element;
2082 updateDisabled();
2083 });
2084 return {
2085 getButtonProps,
2086 buttonRef
2087 };
2088 }
2089 function isButtonElement(elem) {
2090 return isHTMLElement(elem) && elem.tagName === "BUTTON";
2091 }
2092 function isValidLinkElement(elem) {
2093 return isHTMLElement(elem) && elem.tagName === "A" && Boolean(elem.href);
2094 }
2095
2096 // node_modules/@base-ui/utils/addEventListener.mjs
2097 function addEventListener(target, type, listener, options) {
2098 target.addEventListener(type, listener, options);
2099 return () => {
2100 target.removeEventListener(type, listener, options);
2101 };
2102 }
2103
2104 // node_modules/@base-ui/utils/useValueAsRef.mjs
2105 function useValueAsRef(value) {
2106 const latest = useRefWithInit(createLatestRef, value).current;
2107 latest.next = value;
2108 useIsoLayoutEffect(latest.effect);
2109 return latest;
2110 }
2111 function createLatestRef(value) {
2112 const latest = {
2113 current: value,
2114 next: value,
2115 effect: () => {
2116 latest.current = latest.next;
2117 }
2118 };
2119 return latest;
2120 }
2121
2122 // node_modules/@base-ui/react/internals/useOpenChangeComplete.mjs
2123 var React14 = __toESM(require_react(), 1);
2124
2125 // node_modules/@base-ui/react/internals/useAnimationsFinished.mjs
2126 var ReactDOM = __toESM(require_react_dom(), 1);
2127
2128 // node_modules/@base-ui/react/utils/resolveRef.mjs
2129 function resolveRef(maybeRef) {
2130 if (maybeRef == null) {
2131 return maybeRef;
2132 }
2133 return "current" in maybeRef ? maybeRef.current : maybeRef;
2134 }
2135
2136 // node_modules/@base-ui/react/internals/useAnimationsFinished.mjs
2137 var pendingCallbacks = null;
2138 function flushBeforePaint(fn) {
2139 if (!pendingCallbacks) {
2140 const callbacks = [];
2141 pendingCallbacks = callbacks;
2142 queueMicrotask(() => {
2143 pendingCallbacks = null;
2144 ReactDOM.flushSync(() => {
2145 for (const callback of callbacks) {
2146 callback();
2147 }
2148 });
2149 });
2150 }
2151 pendingCallbacks.push(fn);
2152 }
2153 function useAnimationsFinished(elementOrRef, waitForStartingStyleRemoved = false, batch = false) {
2154 const frame = useAnimationFrame();
2155 return useStableCallback((fnToExecute, signal = null) => {
2156 frame.cancel();
2157 const element = resolveRef(elementOrRef);
2158 if (element == null) {
2159 return;
2160 }
2161 const resolvedElement = element;
2162 const done = () => {
2163 if (!batch) {
2164 ReactDOM.flushSync(fnToExecute);
2165 return;
2166 }
2167 flushBeforePaint(() => {
2168 if (!signal?.aborted) {
2169 fnToExecute();
2170 }
2171 });
2172 };
2173 if (typeof resolvedElement.getAnimations !== "function" || globalThis.BASE_UI_ANIMATIONS_DISABLED) {
2174 fnToExecute();
2175 return;
2176 }
2177 function exec() {
2178 Promise.all(resolvedElement.getAnimations().map((animation) => animation.finished)).then(() => {
2179 if (!signal?.aborted) {
2180 done();
2181 }
2182 }, () => {
2183 if (signal?.aborted) {
2184 return;
2185 }
2186 const currentAnimations = resolvedElement.getAnimations();
2187 if (currentAnimations.some((animation) => animation.pending || animation.playState !== "finished")) {
2188 exec();
2189 return;
2190 }
2191 done();
2192 });
2193 }
2194 if (waitForStartingStyleRemoved) {
2195 const startingStyleAttribute = startingStyle;
2196 if (!resolvedElement.hasAttribute(startingStyleAttribute)) {
2197 frame.request(exec);
2198 return;
2199 }
2200 const attributeObserver = new MutationObserver(() => {
2201 if (!resolvedElement.hasAttribute(startingStyleAttribute)) {
2202 attributeObserver.disconnect();
2203 exec();
2204 }
2205 });
2206 attributeObserver.observe(resolvedElement, {
2207 attributes: true,
2208 attributeFilter: [startingStyleAttribute]
2209 });
2210 signal?.addEventListener("abort", () => attributeObserver.disconnect(), {
2211 once: true
2212 });
2213 return;
2214 }
2215 frame.request(exec);
2216 });
2217 }
2218
2219 // node_modules/@base-ui/react/internals/useOpenChangeComplete.mjs
2220 function useOpenChangeComplete(parameters) {
2221 const {
2222 enabled = true,
2223 open: open2,
2224 ref,
2225 batch = false,
2226 onComplete: onCompleteParam
2227 } = parameters;
2228 const onComplete = useStableCallback(onCompleteParam);
2229 const runOnceAnimationsFinish = useAnimationsFinished(ref, open2, batch);
2230 React14.useEffect(() => {
2231 if (!enabled) {
2232 return void 0;
2233 }
2234 const abortController = new AbortController();
2235 runOnceAnimationsFinish(onComplete, abortController.signal);
2236 return () => {
2237 abortController.abort();
2238 };
2239 }, [enabled, open2, onComplete, runOnceAnimationsFinish]);
2240 }
2241
2242 // node_modules/@base-ui/utils/platform/parts.mjs
2243 var parts_exports = {};
2244 __export(parts_exports, {
2245 engine: () => engine_exports,
2246 env: () => env_exports,
2247 mediaQuery: () => media_query_exports,
2248 os: () => os_exports,
2249 screenReader: () => screen_reader_exports
2250 });
2251
2252 // node_modules/@base-ui/utils/platform/os.mjs
2253 var os_exports = {};
2254 __export(os_exports, {
2255 android: () => android,
2256 apple: () => apple,
2257 ios: () => ios,
2258 linux: () => linux,
2259 mac: () => mac,
2260 windows: () => windows
2261 });
2262
2263 // node_modules/@base-ui/utils/platform/shared.mjs
2264 function readRawData() {
2265 if (typeof navigator === "undefined") {
2266 return {
2267 userAgent: "",
2268 platform: "",
2269 maxTouchPoints: 0
2270 };
2271 }
2272 if (true) {
2273 const uaData = navigator.userAgentData;
2274 if (uaData && Array.isArray(uaData.brands)) {
2275 return {
2276 userAgent: uaData.brands.map(({
2277 brand,
2278 version: version2
2279 }) => `${brand}/${version2}`).join(" "),
2280 platform: uaData.platform ?? navigator.platform ?? "",
2281 maxTouchPoints: navigator.maxTouchPoints ?? 0
2282 };
2283 }
2284 }
2285 return {
2286 userAgent: navigator.userAgent,
2287 platform: navigator.platform ?? "",
2288 maxTouchPoints: navigator.maxTouchPoints ?? 0
2289 };
2290 }
2291 var {
2292 userAgent,
2293 platform,
2294 maxTouchPoints
2295 } = readRawData();
2296 var lowerUserAgent = userAgent.toLowerCase();
2297 var lowerPlatform = platform.toLowerCase();
2298
2299 // node_modules/@base-ui/utils/platform/os.mjs
2300 var ios = /^i(os$|p)/.test(lowerPlatform) || lowerPlatform === "macintel" && maxTouchPoints > 1;
2301 var ANDROID_STRING = "android";
2302 var android = lowerPlatform === ANDROID_STRING || lowerUserAgent.includes(ANDROID_STRING);
2303 var mac = !ios && lowerPlatform.startsWith("mac");
2304 var windows = lowerPlatform.startsWith("win");
2305 var linux = !android && /^(linux|chrome os)/.test(lowerPlatform);
2306 var apple = mac || ios;
2307
2308 // node_modules/@base-ui/utils/platform/engine.mjs
2309 var engine_exports = {};
2310 __export(engine_exports, {
2311 blink: () => blink,
2312 gecko: () => gecko,
2313 webkit: () => webkit
2314 });
2315 var webkit = typeof CSS !== "undefined" && !!CSS.supports?.("-webkit-backdrop-filter:none");
2316 var gecko = !webkit && lowerUserAgent.includes("firefox");
2317 var blink = !webkit && lowerUserAgent.includes("chrom");
2318
2319 // node_modules/@base-ui/utils/platform/screen-reader.mjs
2320 var screen_reader_exports = {};
2321 __export(screen_reader_exports, {
2322 voiceOver: () => voiceOver
2323 });
2324 var voiceOver = apple;
2325
2326 // node_modules/@base-ui/utils/platform/env.mjs
2327 var env_exports = {};
2328 __export(env_exports, {
2329 jsdom: () => jsdom
2330 });
2331 var jsdom = /jsdom|happydom/.test(lowerUserAgent);
2332
2333 // node_modules/@base-ui/utils/platform/media-query.mjs
2334 var media_query_exports = {};
2335 __export(media_query_exports, {
2336 iOS: () => iOS
2337 });
2338 var iOS = "@supports (-webkit-touch-callout: none)";
2339
2340 // node_modules/@base-ui/utils/useTimeout.mjs
2341 var EMPTY2 = 0;
2342 var Timeout = class _Timeout {
2343 static create() {
2344 return new _Timeout();
2345 }
2346 currentId = EMPTY2;
2347 /**
2348 * Executes `fn` after `delay`, clearing any previously scheduled call.
2349 */
2350 start(delay, fn) {
2351 this.clear();
2352 this.currentId = setTimeout(() => {
2353 this.currentId = EMPTY2;
2354 fn();
2355 }, delay);
2356 }
2357 isStarted() {
2358 return this.currentId !== EMPTY2;
2359 }
2360 clear = () => {
2361 if (this.currentId !== EMPTY2) {
2362 clearTimeout(this.currentId);
2363 this.currentId = EMPTY2;
2364 }
2365 };
2366 disposeEffect = () => {
2367 return this.clear;
2368 };
2369 };
2370 function useTimeout() {
2371 const timeout = useRefWithInit(Timeout.create).current;
2372 useOnMount(timeout.disposeEffect);
2373 return timeout;
2374 }
2375
2376 // node_modules/@base-ui/react/floating-ui-react/components/FloatingDelayGroup.mjs
2377 var React15 = __toESM(require_react(), 1);
2378
2379 // node_modules/@base-ui/react/floating-ui-react/utils/event.mjs
2380 function isReactEvent(event) {
2381 return "nativeEvent" in event;
2382 }
2383 function isVirtualClick(event) {
2384 if (event.pointerType === "" && event.isTrusted) {
2385 return true;
2386 }
2387 if (parts_exports.os.android && event.pointerType) {
2388 return event.type === "click" && event.buttons === 1;
2389 }
2390 return event.detail === 0 && !event.pointerType;
2391 }
2392 function isMouseLikePointerType(pointerType, strict) {
2393 const values = ["mouse", "pen"];
2394 if (!strict) {
2395 values.push("", void 0);
2396 }
2397 return values.includes(pointerType);
2398 }
2399 function isClickLikeEvent(event) {
2400 const type = event.type;
2401 return type === "click" || type === "mousedown" || type === "keydown" || type === "keyup";
2402 }
2403
2404 // node_modules/@base-ui/utils/shadowDom.mjs
2405 function activeElement(doc) {
2406 let element = doc.activeElement;
2407 while (element?.shadowRoot?.activeElement != null) {
2408 element = element.shadowRoot.activeElement;
2409 }
2410 return element;
2411 }
2412 function contains(parent, child) {
2413 if (!parent || !child) {
2414 return false;
2415 }
2416 const rootNode = child.getRootNode?.();
2417 if (parent.contains(child)) {
2418 return true;
2419 }
2420 if (rootNode && isShadowRoot(rootNode)) {
2421 let next = child;
2422 while (next) {
2423 if (parent === next) {
2424 return true;
2425 }
2426 next = next.parentNode || next.host;
2427 }
2428 }
2429 return false;
2430 }
2431 function getTarget(event) {
2432 if ("composedPath" in event) {
2433 return event.composedPath()[0] ?? event.target;
2434 }
2435 return event.target;
2436 }
2437
2438 // node_modules/@base-ui/react/floating-ui-react/utils/constants.mjs
2439 var FOCUSABLE_ATTRIBUTE = "data-base-ui-focusable";
2440 var TYPEABLE_SELECTOR = "input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])";
2441
2442 // node_modules/@base-ui/react/utils/CommonPopupDataAttributes.mjs
2443 var open = "data-open";
2444 var closed = "data-closed";
2445 var anchorHidden = "data-anchor-hidden";
2446
2447 // node_modules/@base-ui/react/utils/CommonTriggerDataAttributes.mjs
2448 var CommonTriggerDataAttributes_exports = {};
2449 __export(CommonTriggerDataAttributes_exports, {
2450 popupOpen: () => popupOpen,
2451 pressed: () => pressed
2452 });
2453 var popupOpen = "data-popup-open";
2454 var pressed = "data-pressed";
2455
2456 // node_modules/@base-ui/react/utils/popupStateMapping.mjs
2457 var TRIGGER_HOOK = {
2458 [popupOpen]: ""
2459 };
2460 var PRESSABLE_TRIGGER_HOOK = {
2461 [popupOpen]: "",
2462 [pressed]: ""
2463 };
2464 var POPUP_OPEN_HOOK = {
2465 [open]: ""
2466 };
2467 var POPUP_CLOSED_HOOK = {
2468 [closed]: ""
2469 };
2470 var ANCHOR_HIDDEN_HOOK = {
2471 [anchorHidden]: ""
2472 };
2473 var triggerOpenStateMapping = {
2474 open(value) {
2475 if (value) {
2476 return TRIGGER_HOOK;
2477 }
2478 return null;
2479 }
2480 };
2481 var popupStateMapping = {
2482 open(value) {
2483 if (value) {
2484 return POPUP_OPEN_HOOK;
2485 }
2486 return POPUP_CLOSED_HOOK;
2487 },
2488 anchorHidden(value) {
2489 if (value) {
2490 return ANCHOR_HIDDEN_HOOK;
2491 }
2492 return null;
2493 }
2494 };
2495 var popupTransitionStateMapping = {
2496 ...popupStateMapping,
2497 ...transitionStatusMapping
2498 };
2499
2500 // node_modules/@base-ui/react/tooltip/trigger/TooltipTriggerDataAttributes.mjs
2501 var popupOpen2 = CommonTriggerDataAttributes_exports.popupOpen;
2502 var triggerDisabled = "data-trigger-disabled";
2503
2504 // node_modules/@base-ui/react/floating-ui-react/utils/element.mjs
2505 function isTargetInsideEnabledTrigger(target, triggerElements) {
2506 if (!isElement(target)) {
2507 return false;
2508 }
2509 const targetElement = target;
2510 if (triggerElements.hasElement(targetElement)) {
2511 return !targetElement.hasAttribute(triggerDisabled);
2512 }
2513 for (const [, trigger] of triggerElements.entries()) {
2514 if (contains(trigger, targetElement)) {
2515 return !trigger.hasAttribute(triggerDisabled);
2516 }
2517 }
2518 return false;
2519 }
2520 function isEventTargetWithin(event, node) {
2521 if (node == null) {
2522 return false;
2523 }
2524 if ("composedPath" in event) {
2525 return event.composedPath().includes(node);
2526 }
2527 const eventAgain = event;
2528 return eventAgain.target != null && node.contains(eventAgain.target);
2529 }
2530 function isRootElement(element) {
2531 return element.matches("html,body");
2532 }
2533 function isTypeableElement(element) {
2534 return isHTMLElement(element) && element.matches(TYPEABLE_SELECTOR);
2535 }
2536 function isInteractiveElement(element) {
2537 return element?.closest(`button,a[href],[role="button"],select,[tabindex]:not([tabindex="-1"]),${TYPEABLE_SELECTOR}`) != null;
2538 }
2539 function matchesFocusVisible(element) {
2540 if (!element || parts_exports.env.jsdom) {
2541 return true;
2542 }
2543 try {
2544 return element.matches(":focus-visible");
2545 } catch (_e) {
2546 return true;
2547 }
2548 }
2549
2550 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverShared.mjs
2551 function resolveValue(value, pointerType) {
2552 if (pointerType != null && !isMouseLikePointerType(pointerType)) {
2553 return 0;
2554 }
2555 if (typeof value === "function") {
2556 return value();
2557 }
2558 return value;
2559 }
2560 function getDelay(value, prop, pointerType) {
2561 const result = resolveValue(value, pointerType);
2562 if (typeof result === "number") {
2563 return result;
2564 }
2565 return result?.[prop];
2566 }
2567 function getRestMs(value) {
2568 if (typeof value === "function") {
2569 return value();
2570 }
2571 return value;
2572 }
2573 function isClickLikeOpenEvent(openEventType, interactedInside) {
2574 return interactedInside || openEventType === "click" || openEventType === "mousedown";
2575 }
2576 function isHoverOpenEvent(openEventType) {
2577 return openEventType?.includes("mouse") && openEventType !== "mousedown";
2578 }
2579
2580 // node_modules/@base-ui/react/floating-ui-react/components/FloatingDelayGroup.mjs
2581 var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
2582 var FloatingDelayGroupContext = /* @__PURE__ */ React15.createContext({
2583 hasProvider: false,
2584 timeoutMs: 0,
2585 delayRef: {
2586 current: 0
2587 },
2588 initialDelayRef: {
2589 current: 0
2590 },
2591 timeout: new Timeout(),
2592 currentIdRef: {
2593 current: null
2594 },
2595 currentContextRef: {
2596 current: null
2597 }
2598 });
2599 if (true) FloatingDelayGroupContext.displayName = "FloatingDelayGroupContext";
2600 function resetDelayRef(delayRef, initialDelayRef) {
2601 delayRef.current = initialDelayRef.current;
2602 }
2603 function FloatingDelayGroup(props) {
2604 const {
2605 children,
2606 delay,
2607 timeoutMs = 0
2608 } = props;
2609 const delayRef = React15.useRef(delay);
2610 const initialDelayRef = React15.useRef(delay);
2611 const currentIdRef = React15.useRef(null);
2612 const currentContextRef = React15.useRef(null);
2613 const timeout = useTimeout();
2614 useIsoLayoutEffect(() => {
2615 initialDelayRef.current = delay;
2616 if (!currentIdRef.current) {
2617 delayRef.current = delay;
2618 return;
2619 }
2620 delayRef.current = {
2621 open: getDelay(delayRef.current, "open"),
2622 close: getDelay(delay, "close")
2623 };
2624 }, [delay, currentIdRef, delayRef, initialDelayRef]);
2625 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FloatingDelayGroupContext.Provider, {
2626 value: React15.useMemo(() => ({
2627 hasProvider: true,
2628 delayRef,
2629 initialDelayRef,
2630 currentIdRef,
2631 timeoutMs,
2632 currentContextRef,
2633 timeout
2634 }), [timeoutMs, timeout]),
2635 children
2636 });
2637 }
2638 function useDelayGroup(context, options = {
2639 open: false
2640 }) {
2641 const {
2642 open: open2
2643 } = options;
2644 const store = "rootStore" in context ? context.rootStore : context;
2645 const floatingId = store.useState("floatingId");
2646 const groupContext = React15.useContext(FloatingDelayGroupContext);
2647 const {
2648 currentIdRef,
2649 delayRef,
2650 timeoutMs,
2651 initialDelayRef,
2652 currentContextRef,
2653 hasProvider,
2654 timeout
2655 } = groupContext;
2656 const [isInstantPhase, setIsInstantPhase] = React15.useState(false);
2657 const openRef = React15.useRef(open2);
2658 useIsoLayoutEffect(() => {
2659 openRef.current = open2;
2660 }, [open2]);
2661 useIsoLayoutEffect(() => {
2662 function unset() {
2663 currentContextRef.current?.setIsInstantPhase(false);
2664 currentIdRef.current = null;
2665 currentContextRef.current = null;
2666 delayRef.current = initialDelayRef.current;
2667 timeout.clear();
2668 }
2669 if (!currentIdRef.current) {
2670 return void 0;
2671 }
2672 if (!open2 && currentIdRef.current === floatingId) {
2673 setIsInstantPhase(false);
2674 if (timeoutMs) {
2675 const closingId = floatingId;
2676 timeout.start(timeoutMs, () => {
2677 if (store.select("open") || currentIdRef.current && currentIdRef.current !== closingId) {
2678 return;
2679 }
2680 unset();
2681 });
2682 return () => {
2683 if (openRef.current || currentIdRef.current !== closingId) {
2684 timeout.clear();
2685 }
2686 };
2687 }
2688 unset();
2689 }
2690 return void 0;
2691 }, [open2, floatingId, currentIdRef, delayRef, timeoutMs, initialDelayRef, currentContextRef, timeout, store]);
2692 useIsoLayoutEffect(() => {
2693 if (!open2) {
2694 return;
2695 }
2696 const prevContext = currentContextRef.current;
2697 const prevId = currentIdRef.current;
2698 timeout.clear();
2699 currentContextRef.current = {
2700 onOpenChange: store.setOpen,
2701 setIsInstantPhase
2702 };
2703 currentIdRef.current = floatingId;
2704 delayRef.current = {
2705 open: 0,
2706 close: getDelay(initialDelayRef.current, "close")
2707 };
2708 if (prevId !== null && prevId !== floatingId) {
2709 setIsInstantPhase(true);
2710 prevContext?.setIsInstantPhase(true);
2711 prevContext?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.none));
2712 } else {
2713 setIsInstantPhase(false);
2714 prevContext?.setIsInstantPhase(false);
2715 }
2716 }, [open2, floatingId, store, currentIdRef, delayRef, initialDelayRef, currentContextRef, timeout]);
2717 useIsoLayoutEffect(() => {
2718 return () => {
2719 if (currentIdRef.current === floatingId) {
2720 currentContextRef.current = null;
2721 if (!openRef.current) {
2722 return;
2723 }
2724 currentIdRef.current = null;
2725 resetDelayRef(delayRef, initialDelayRef);
2726 timeout.clear();
2727 }
2728 };
2729 }, [currentContextRef, currentIdRef, delayRef, floatingId, initialDelayRef, timeout]);
2730 return React15.useMemo(() => ({
2731 activeIdRef: currentIdRef,
2732 hasProvider,
2733 delayRef,
2734 isInstantPhase
2735 }), [currentIdRef, hasProvider, delayRef, isInstantPhase]);
2736 }
2737
2738 // node_modules/@base-ui/utils/mergeCleanups.mjs
2739 function mergeCleanups(...cleanups) {
2740 return () => {
2741 for (let i = 0; i < cleanups.length; i += 1) {
2742 const cleanup = cleanups[i];
2743 if (cleanup) {
2744 cleanup();
2745 }
2746 }
2747 };
2748 }
2749
2750 // node_modules/@base-ui/react/utils/FocusGuard.mjs
2751 var React16 = __toESM(require_react(), 1);
2752
2753 // node_modules/@base-ui/utils/visuallyHidden.mjs
2754 var visuallyHiddenBase = {
2755 clipPath: "inset(50%)",
2756 overflow: "hidden",
2757 whiteSpace: "nowrap",
2758 border: 0,
2759 padding: 0,
2760 width: 1,
2761 height: 1,
2762 margin: -1
2763 };
2764 var visuallyHidden = {
2765 ...visuallyHiddenBase,
2766 position: "fixed",
2767 top: 0,
2768 left: 0
2769 };
2770 var visuallyHiddenInput = {
2771 ...visuallyHiddenBase,
2772 position: "absolute"
2773 };
2774
2775 // node_modules/@base-ui/react/utils/FocusGuard.mjs
2776 var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1);
2777 var FocusGuard = /* @__PURE__ */ React16.forwardRef(function FocusGuard2(props, ref) {
2778 const [role, setRole] = React16.useState();
2779 useIsoLayoutEffect(() => {
2780 if (parts_exports.screenReader.voiceOver && parts_exports.engine.webkit) {
2781 setRole("button");
2782 }
2783 }, []);
2784 const restProps = {
2785 tabIndex: 0,
2786 // Role is only for VoiceOver
2787 role
2788 };
2789 return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", {
2790 ...props,
2791 ref,
2792 style: visuallyHidden,
2793 "aria-hidden": role ? void 0 : true,
2794 ...restProps,
2795 "data-base-ui-focus-guard": ""
2796 });
2797 });
2798 if (true) FocusGuard.displayName = "FocusGuard";
2799
2800 // node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs
2801 var min = Math.min;
2802 var max = Math.max;
2803 var round = Math.round;
2804 var floor = Math.floor;
2805 var createCoords = (v2) => ({
2806 x: v2,
2807 y: v2
2808 });
2809 var oppositeSideMap = {
2810 left: "right",
2811 right: "left",
2812 bottom: "top",
2813 top: "bottom"
2814 };
2815 function clamp(start, value, end) {
2816 return max(start, min(value, end));
2817 }
2818 function evaluate(value, param) {
2819 return typeof value === "function" ? value(param) : value;
2820 }
2821 function getSide(placement) {
2822 return placement.split("-")[0];
2823 }
2824 function getAlignment(placement) {
2825 return placement.split("-")[1];
2826 }
2827 function getOppositeAxis(axis) {
2828 return axis === "x" ? "y" : "x";
2829 }
2830 function getAxisLength(axis) {
2831 return axis === "y" ? "height" : "width";
2832 }
2833 function getSideAxis(placement) {
2834 const firstChar = placement[0];
2835 return firstChar === "t" || firstChar === "b" ? "y" : "x";
2836 }
2837 function getAlignmentAxis(placement) {
2838 return getOppositeAxis(getSideAxis(placement));
2839 }
2840 function getAlignmentSides(placement, rects, rtl) {
2841 if (rtl === void 0) {
2842 rtl = false;
2843 }
2844 const alignment = getAlignment(placement);
2845 const alignmentAxis = getAlignmentAxis(placement);
2846 const length = getAxisLength(alignmentAxis);
2847 let mainAlignmentSide = alignmentAxis === "x" ? alignment === (rtl ? "end" : "start") ? "right" : "left" : alignment === "start" ? "bottom" : "top";
2848 if (rects.reference[length] > rects.floating[length]) {
2849 mainAlignmentSide = getOppositePlacement(mainAlignmentSide);
2850 }
2851 return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];
2852 }
2853 function getExpandedPlacements(placement) {
2854 const oppositePlacement = getOppositePlacement(placement);
2855 return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];
2856 }
2857 function getOppositeAlignmentPlacement(placement) {
2858 return placement.includes("start") ? placement.replace("start", "end") : placement.replace("end", "start");
2859 }
2860 var lrPlacement = ["left", "right"];
2861 var rlPlacement = ["right", "left"];
2862 var tbPlacement = ["top", "bottom"];
2863 var btPlacement = ["bottom", "top"];
2864 function getSideList(side, isStart, rtl) {
2865 switch (side) {
2866 case "top":
2867 case "bottom":
2868 if (rtl) return isStart ? rlPlacement : lrPlacement;
2869 return isStart ? lrPlacement : rlPlacement;
2870 case "left":
2871 case "right":
2872 return isStart ? tbPlacement : btPlacement;
2873 default:
2874 return [];
2875 }
2876 }
2877 function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {
2878 const alignment = getAlignment(placement);
2879 let list = getSideList(getSide(placement), direction === "start", rtl);
2880 if (alignment) {
2881 list = list.map((side) => side + "-" + alignment);
2882 if (flipAlignment) {
2883 list = list.concat(list.map(getOppositeAlignmentPlacement));
2884 }
2885 }
2886 return list;
2887 }
2888 function getOppositePlacement(placement) {
2889 const side = getSide(placement);
2890 return oppositeSideMap[side] + placement.slice(side.length);
2891 }
2892 function expandPaddingObject(padding) {
2893 var _padding$top, _padding$right, _padding$bottom, _padding$left;
2894 return {
2895 top: (_padding$top = padding.top) != null ? _padding$top : 0,
2896 right: (_padding$right = padding.right) != null ? _padding$right : 0,
2897 bottom: (_padding$bottom = padding.bottom) != null ? _padding$bottom : 0,
2898 left: (_padding$left = padding.left) != null ? _padding$left : 0
2899 };
2900 }
2901 function getPaddingObject(padding) {
2902 return typeof padding !== "number" ? expandPaddingObject(padding) : {
2903 top: padding,
2904 right: padding,
2905 bottom: padding,
2906 left: padding
2907 };
2908 }
2909 function rectToClientRect(rect) {
2910 const {
2911 x: x2,
2912 y: y2,
2913 width,
2914 height
2915 } = rect;
2916 return {
2917 width,
2918 height,
2919 top: y2,
2920 left: x2,
2921 right: x2 + width,
2922 bottom: y2 + height,
2923 x: x2,
2924 y: y2
2925 };
2926 }
2927
2928 // node_modules/@base-ui/react/floating-ui-react/utils/composite.mjs
2929 function isHiddenByStyles(styles) {
2930 return styles.visibility === "hidden" || styles.visibility === "collapse";
2931 }
2932 function isElementVisible(element, styles = element ? getComputedStyle2(element) : null) {
2933 if (!element || !element.isConnected || !styles || isHiddenByStyles(styles)) {
2934 return false;
2935 }
2936 if (typeof element.checkVisibility === "function") {
2937 return element.checkVisibility();
2938 }
2939 return styles.display !== "none" && styles.display !== "contents";
2940 }
2941
2942 // node_modules/@base-ui/react/floating-ui-react/utils/tabbable.mjs
2943 var CANDIDATE_SELECTOR = 'a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable="false"]),audio[controls],video[controls]';
2944 function getParentElement(element) {
2945 const assignedSlot = element.assignedSlot;
2946 if (assignedSlot) {
2947 return assignedSlot;
2948 }
2949 if (element.parentElement) {
2950 return element.parentElement;
2951 }
2952 const rootNode = element.getRootNode();
2953 return isShadowRoot(rootNode) ? rootNode.host : null;
2954 }
2955 function getDetailsSummary(details) {
2956 for (const child of Array.from(details.children)) {
2957 if (getNodeName(child) === "summary") {
2958 return child;
2959 }
2960 }
2961 return null;
2962 }
2963 function isWithinOpenDetailsSummary(element, details) {
2964 const summary = getDetailsSummary(details);
2965 return !!summary && (element === summary || contains(summary, element));
2966 }
2967 function isFocusableCandidate(element) {
2968 const nodeName = element ? getNodeName(element) : "";
2969 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");
2970 }
2971 function isFocusableElement(element) {
2972 if (!isFocusableCandidate(element) || !element.isConnected || element.matches(":disabled")) {
2973 return false;
2974 }
2975 for (let current = element; current; current = getParentElement(current)) {
2976 const isAncestor = current !== element;
2977 const isSlot = getNodeName(current) === "slot";
2978 if (current.hasAttribute("inert")) {
2979 return false;
2980 }
2981 if (isAncestor && getNodeName(current) === "details" && !current.open && !isWithinOpenDetailsSummary(element, current) || current.hasAttribute("hidden") || !isSlot && !isVisibleInTabbableTree(current, isAncestor)) {
2982 return false;
2983 }
2984 }
2985 return true;
2986 }
2987 function isVisibleInTabbableTree(element, isAncestor) {
2988 const styles = getComputedStyle2(element);
2989 if (!isAncestor) {
2990 return isElementVisible(element, styles);
2991 }
2992 return styles.display !== "none";
2993 }
2994 function getTabIndex(element) {
2995 const tabIndex = element.tabIndex;
2996 if (tabIndex < 0) {
2997 const nodeName = getNodeName(element);
2998 if (nodeName === "details" || nodeName === "audio" || nodeName === "video" || isHTMLElement(element) && element.isContentEditable) {
2999 return 0;
3000 }
3001 }
3002 return tabIndex;
3003 }
3004 function getNamedRadioInput(element) {
3005 if (getNodeName(element) !== "input") {
3006 return null;
3007 }
3008 const input = element;
3009 return input.type === "radio" && input.name !== "" ? input : null;
3010 }
3011 function isTabbableRadio(element, candidates) {
3012 const input = getNamedRadioInput(element);
3013 if (!input) {
3014 return true;
3015 }
3016 const checkedRadio = candidates.find((candidate) => {
3017 const radio = getNamedRadioInput(candidate);
3018 return radio?.name === input.name && radio.form === input.form && radio.checked;
3019 });
3020 if (checkedRadio) {
3021 return checkedRadio === input;
3022 }
3023 return candidates.find((candidate) => {
3024 const radio = getNamedRadioInput(candidate);
3025 return radio?.name === input.name && radio.form === input.form;
3026 }) === input;
3027 }
3028 function getComposedChildren(container) {
3029 if (isHTMLElement(container) && getNodeName(container) === "slot") {
3030 const assignedElements = container.assignedElements({
3031 flatten: true
3032 });
3033 if (assignedElements.length > 0) {
3034 return assignedElements;
3035 }
3036 }
3037 if (isHTMLElement(container) && container.shadowRoot) {
3038 return Array.from(container.shadowRoot.children);
3039 }
3040 return Array.from(container.children);
3041 }
3042 function appendCandidates(container, list) {
3043 getComposedChildren(container).forEach((child) => {
3044 if (isFocusableCandidate(child)) {
3045 list.push(child);
3046 }
3047 appendCandidates(child, list);
3048 });
3049 }
3050 function appendMatchingElements(container, selector, list) {
3051 getComposedChildren(container).forEach((child) => {
3052 if (isHTMLElement(child) && child.matches(selector)) {
3053 list.push(child);
3054 }
3055 appendMatchingElements(child, selector, list);
3056 });
3057 }
3058 function focusable(container) {
3059 const candidates = [];
3060 appendCandidates(container, candidates);
3061 return candidates.filter(isFocusableElement);
3062 }
3063 function tabbable(container) {
3064 const candidates = focusable(container);
3065 return candidates.filter((element) => getTabIndex(element) >= 0 && isTabbableRadio(element, candidates));
3066 }
3067 function getTabbableIn(container, dir) {
3068 const list = tabbable(container);
3069 const len = list.length;
3070 if (len === 0) {
3071 return void 0;
3072 }
3073 const active = activeElement(ownerDocument(container));
3074 const index2 = list.indexOf(active);
3075 const nextIndex = index2 === -1 ? dir === 1 ? 0 : len - 1 : index2 + dir;
3076 return list[nextIndex];
3077 }
3078 function getNextTabbable(referenceElement) {
3079 return getTabbableIn(ownerDocument(referenceElement).body, 1) || referenceElement;
3080 }
3081 function getPreviousTabbable(referenceElement) {
3082 return getTabbableIn(ownerDocument(referenceElement).body, -1) || referenceElement;
3083 }
3084 function isOutsideEvent(event, container) {
3085 const containerElement = container || event.currentTarget;
3086 const relatedTarget = event.relatedTarget;
3087 return !relatedTarget || !contains(containerElement, relatedTarget);
3088 }
3089 function disableFocusInside(container) {
3090 const tabbableElements = tabbable(container);
3091 tabbableElements.forEach((element) => {
3092 element.dataset.tabindex = element.getAttribute("tabindex") || "";
3093 element.setAttribute("tabindex", "-1");
3094 });
3095 }
3096 function enableFocusInside(container) {
3097 const elements = [];
3098 appendMatchingElements(container, "[data-tabindex]", elements);
3099 elements.forEach((element) => {
3100 const tabindex = element.dataset.tabindex;
3101 delete element.dataset.tabindex;
3102 if (tabindex) {
3103 element.setAttribute("tabindex", tabindex);
3104 } else {
3105 element.removeAttribute("tabindex");
3106 }
3107 });
3108 }
3109
3110 // node_modules/@base-ui/react/floating-ui-react/utils/nodes.mjs
3111 function getNodeChildren(nodes, id, onlyOpenChildren = true) {
3112 const directChildren = nodes.filter((node) => node.parentId === id);
3113 return directChildren.flatMap((child) => [...!onlyOpenChildren || child.context?.open ? [child] : [], ...getNodeChildren(nodes, child.id, onlyOpenChildren)]);
3114 }
3115
3116 // node_modules/@base-ui/react/floating-ui-react/utils/createAttribute.mjs
3117 function createAttribute(name) {
3118 return `data-base-ui-${name}`;
3119 }
3120
3121 // node_modules/@base-ui/react/floating-ui-react/components/FloatingPortal.mjs
3122 var React17 = __toESM(require_react(), 1);
3123 var ReactDOM2 = __toESM(require_react_dom(), 1);
3124
3125 // node_modules/@base-ui/react/internals/constants.mjs
3126 var DISABLED_TRANSITIONS_STYLE = {
3127 style: {
3128 transition: "none"
3129 }
3130 };
3131 var BASE_UI_SWIPE_IGNORE_ATTRIBUTE = "data-base-ui-swipe-ignore";
3132 var LEGACY_SWIPE_IGNORE_ATTRIBUTE = "data-swipe-ignore";
3133 var BASE_UI_SWIPE_IGNORE_SELECTOR = `[${BASE_UI_SWIPE_IGNORE_ATTRIBUTE}]`;
3134 var LEGACY_SWIPE_IGNORE_SELECTOR = `[${LEGACY_SWIPE_IGNORE_ATTRIBUTE}]`;
3135 var POPUP_COLLISION_AVOIDANCE = {
3136 fallbackAxisSide: "end"
3137 };
3138 var ownerVisuallyHidden = {
3139 clipPath: "inset(50%)",
3140 position: "fixed",
3141 top: 0,
3142 left: 0
3143 };
3144
3145 // node_modules/@base-ui/react/floating-ui-react/components/FloatingPortal.mjs
3146 var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1);
3147 var PortalContext = /* @__PURE__ */ React17.createContext(null);
3148 if (true) PortalContext.displayName = "PortalContext";
3149 var usePortalContext = () => React17.useContext(PortalContext);
3150 var attr = createAttribute("portal");
3151 function useFloatingPortalNode(props = {}) {
3152 const {
3153 ref,
3154 container: containerProp,
3155 componentProps = EMPTY_OBJECT,
3156 elementProps
3157 } = props;
3158 const uniqueId = useId();
3159 const portalContext = usePortalContext();
3160 const parentPortalNode = portalContext?.portalNode;
3161 const [containerElement, setContainerElement] = React17.useState(null);
3162 const [portalNode, setPortalNode] = React17.useState(null);
3163 const setPortalNodeRef = useStableCallback((node) => {
3164 if (node !== null) {
3165 setPortalNode(node);
3166 }
3167 });
3168 const containerRef = React17.useRef(null);
3169 useIsoLayoutEffect(() => {
3170 if (containerProp === null) {
3171 if (containerRef.current) {
3172 containerRef.current = null;
3173 setPortalNode(null);
3174 setContainerElement(null);
3175 }
3176 return;
3177 }
3178 const resolvedContainer = (containerProp && (isNode(containerProp) ? containerProp : containerProp.current)) ?? parentPortalNode ?? document.body;
3179 if (resolvedContainer == null) {
3180 if (containerRef.current) {
3181 containerRef.current = null;
3182 setPortalNode(null);
3183 setContainerElement(null);
3184 }
3185 return;
3186 }
3187 if (containerRef.current !== resolvedContainer) {
3188 containerRef.current = resolvedContainer;
3189 setPortalNode(null);
3190 setContainerElement(resolvedContainer);
3191 }
3192 }, [containerProp, parentPortalNode]);
3193 const portalElement = useRenderElement("div", componentProps, {
3194 ref: [ref, setPortalNodeRef],
3195 props: [{
3196 id: uniqueId,
3197 [attr]: ""
3198 }, elementProps]
3199 });
3200 const portalSubtree = containerElement && portalElement ? /* @__PURE__ */ ReactDOM2.createPortal(portalElement, containerElement) : null;
3201 return {
3202 node: portalNode,
3203 // `id` and `render` props can override or remove the generated ID. Use the exact
3204 // rendered value so `aria-owns` never points at an ID absent from the DOM.
3205 nodeId: /* @__PURE__ */ React17.isValidElement(portalElement) ? portalElement.props.id : void 0,
3206 subtree: portalSubtree
3207 };
3208 }
3209 var FloatingPortal = /* @__PURE__ */ React17.forwardRef(function FloatingPortal2(componentProps, forwardedRef) {
3210 const {
3211 render: render4,
3212 className,
3213 style,
3214 children,
3215 container,
3216 portalOwnerRole,
3217 ...elementProps
3218 } = componentProps;
3219 const {
3220 node: portalNode,
3221 nodeId: portalNodeId,
3222 subtree: portalSubtree
3223 } = useFloatingPortalNode({
3224 container,
3225 ref: forwardedRef,
3226 componentProps,
3227 elementProps
3228 });
3229 const beforeOutsideRef = React17.useRef(null);
3230 const afterOutsideRef = React17.useRef(null);
3231 const beforeInsideRef = React17.useRef(null);
3232 const afterInsideRef = React17.useRef(null);
3233 const [focusManagerState, setFocusManagerState] = React17.useState(null);
3234 const focusInsideDisabledRef = React17.useRef(false);
3235 const modal = focusManagerState?.modal;
3236 const open2 = focusManagerState?.open;
3237 const shouldRenderGuards = !!focusManagerState && !focusManagerState.modal && focusManagerState.open && !!portalNode;
3238 React17.useEffect(() => {
3239 if (!portalNode || modal) {
3240 return void 0;
3241 }
3242 function onFocus(event) {
3243 if (portalNode && event.relatedTarget && isOutsideEvent(event)) {
3244 if (event.type === "focusin") {
3245 if (focusInsideDisabledRef.current) {
3246 enableFocusInside(portalNode);
3247 focusInsideDisabledRef.current = false;
3248 }
3249 } else {
3250 disableFocusInside(portalNode);
3251 focusInsideDisabledRef.current = true;
3252 }
3253 }
3254 }
3255 return mergeCleanups(addEventListener(portalNode, "focusin", onFocus, true), addEventListener(portalNode, "focusout", onFocus, true));
3256 }, [portalNode, modal]);
3257 useIsoLayoutEffect(() => {
3258 if (!portalNode || open2 !== true || !focusInsideDisabledRef.current) {
3259 return;
3260 }
3261 enableFocusInside(portalNode);
3262 focusInsideDisabledRef.current = false;
3263 }, [open2, portalNode]);
3264 const portalContextValue = React17.useMemo(() => ({
3265 beforeOutsideRef,
3266 afterOutsideRef,
3267 beforeInsideRef,
3268 afterInsideRef,
3269 portalNode,
3270 setFocusManagerState
3271 }), [portalNode]);
3272 return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(React17.Fragment, {
3273 children: [portalSubtree, /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(PortalContext.Provider, {
3274 value: portalContextValue,
3275 children: [shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(FocusGuard, {
3276 "data-type": "outside",
3277 ref: beforeOutsideRef,
3278 onFocus: (event) => {
3279 if (isOutsideEvent(event, portalNode)) {
3280 beforeInsideRef.current?.focus();
3281 } else {
3282 const domReference = focusManagerState ? focusManagerState.domReference : null;
3283 const prevTabbable = getPreviousTabbable(domReference);
3284 prevTabbable?.focus();
3285 }
3286 }
3287 }), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", {
3288 role: portalOwnerRole,
3289 "aria-owns": portalNodeId,
3290 style: ownerVisuallyHidden
3291 }), portalNode && /* @__PURE__ */ ReactDOM2.createPortal(children, portalNode), shouldRenderGuards && portalNode && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(FocusGuard, {
3292 "data-type": "outside",
3293 ref: afterOutsideRef,
3294 onFocus: (event) => {
3295 if (isOutsideEvent(event, portalNode)) {
3296 afterInsideRef.current?.focus();
3297 } else {
3298 const domReference = focusManagerState ? focusManagerState.domReference : null;
3299 const nextTabbable = getNextTabbable(domReference);
3300 nextTabbable?.focus();
3301 if (focusManagerState?.closeOnFocusOut) {
3302 focusManagerState?.onOpenChange(false, createChangeEventDetails(reason_parts_exports.focusOut, event.nativeEvent));
3303 }
3304 }
3305 }
3306 })]
3307 })]
3308 });
3309 });
3310 if (true) FloatingPortal.displayName = "FloatingPortal";
3311
3312 // node_modules/@base-ui/react/floating-ui-react/components/FloatingTree.mjs
3313 var React18 = __toESM(require_react(), 1);
3314
3315 // node_modules/@base-ui/react/floating-ui-react/utils/createEventEmitter.mjs
3316 function createEventEmitter() {
3317 const map = /* @__PURE__ */ new Map();
3318 return {
3319 emit(event, data) {
3320 map.get(event)?.forEach((listener) => listener(data));
3321 },
3322 on(event, listener) {
3323 if (!map.has(event)) {
3324 map.set(event, /* @__PURE__ */ new Set());
3325 }
3326 map.get(event).add(listener);
3327 },
3328 off(event, listener) {
3329 map.get(event)?.delete(listener);
3330 }
3331 };
3332 }
3333
3334 // node_modules/@base-ui/react/floating-ui-react/components/FloatingTree.mjs
3335 var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1);
3336 var FloatingNodeContext = /* @__PURE__ */ React18.createContext(null);
3337 if (true) FloatingNodeContext.displayName = "FloatingNodeContext";
3338 var FloatingTreeContext = /* @__PURE__ */ React18.createContext(null);
3339 if (true) FloatingTreeContext.displayName = "FloatingTreeContext";
3340 var useFloatingParentNodeId = () => React18.useContext(FloatingNodeContext)?.id || null;
3341 var useFloatingTree = (externalTree) => {
3342 const contextTree = React18.useContext(FloatingTreeContext);
3343 return externalTree ?? contextTree;
3344 };
3345
3346 // node_modules/@base-ui/react/floating-ui-react/hooks/useClientPoint.mjs
3347 var React19 = __toESM(require_react(), 1);
3348 function createVirtualElement(domElement, data) {
3349 let offsetX = null;
3350 let offsetY = null;
3351 let isAutoUpdateEvent = false;
3352 return {
3353 contextElement: domElement || void 0,
3354 getBoundingClientRect() {
3355 const domRect = domElement?.getBoundingClientRect() || {
3356 width: 0,
3357 height: 0,
3358 x: 0,
3359 y: 0
3360 };
3361 const isXAxis = data.axis === "x" || data.axis === "both";
3362 const isYAxis = data.axis === "y" || data.axis === "both";
3363 const canTrackCursorOnAutoUpdate = ["mouseenter", "mousemove"].includes(data.dataRef.current.openEvent?.type || "") && data.pointerType !== "touch";
3364 let width = domRect.width;
3365 let height = domRect.height;
3366 let x2 = domRect.x;
3367 let y2 = domRect.y;
3368 if (offsetX == null && data.x && isXAxis) {
3369 offsetX = domRect.x - data.x;
3370 }
3371 if (offsetY == null && data.y && isYAxis) {
3372 offsetY = domRect.y - data.y;
3373 }
3374 x2 -= offsetX || 0;
3375 y2 -= offsetY || 0;
3376 width = 0;
3377 height = 0;
3378 if (!isAutoUpdateEvent || canTrackCursorOnAutoUpdate) {
3379 width = data.axis === "y" ? domRect.width : 0;
3380 height = data.axis === "x" ? domRect.height : 0;
3381 x2 = isXAxis && data.x != null ? data.x : x2;
3382 y2 = isYAxis && data.y != null ? data.y : y2;
3383 } else if (isAutoUpdateEvent && !canTrackCursorOnAutoUpdate) {
3384 height = data.axis === "x" ? domRect.height : height;
3385 width = data.axis === "y" ? domRect.width : width;
3386 }
3387 isAutoUpdateEvent = true;
3388 return {
3389 width,
3390 height,
3391 x: x2,
3392 y: y2,
3393 top: y2,
3394 right: x2 + width,
3395 bottom: y2 + height,
3396 left: x2
3397 };
3398 }
3399 };
3400 }
3401 function isMouseBasedEvent(event) {
3402 return event != null && event.clientX != null;
3403 }
3404 function useClientPoint(context, props = {}) {
3405 const {
3406 enabled = true,
3407 axis = "both"
3408 } = props;
3409 const store = "rootStore" in context ? context.rootStore : context;
3410 const open2 = store.useState("open");
3411 const floating = store.useState("floatingElement");
3412 const domReference = store.useState("domReferenceElement");
3413 const dataRef = store.context.dataRef;
3414 const initialRef = React19.useRef(false);
3415 const cleanupListenerRef = React19.useRef(null);
3416 const [pointerType, setPointerType] = React19.useState();
3417 const [reactive, setReactive] = React19.useState([]);
3418 const resetReference = useStableCallback((reference2) => {
3419 store.set("positionReference", reference2);
3420 });
3421 const setReference = useStableCallback((newX, newY, referenceElement) => {
3422 if (initialRef.current) {
3423 return;
3424 }
3425 if (dataRef.current.openEvent && !isMouseBasedEvent(dataRef.current.openEvent)) {
3426 return;
3427 }
3428 store.set("positionReference", createVirtualElement(referenceElement ?? domReference, {
3429 x: newX,
3430 y: newY,
3431 axis,
3432 dataRef,
3433 pointerType
3434 }));
3435 });
3436 const handleReferenceEnterOrMove = useStableCallback((event) => {
3437 if (!open2) {
3438 setReference(event.clientX, event.clientY, event.currentTarget);
3439 } else if (!cleanupListenerRef.current) {
3440 setReference(event.clientX, event.clientY, event.currentTarget);
3441 setReactive([]);
3442 }
3443 });
3444 const openCheck = isMouseLikePointerType(pointerType) ? floating : open2;
3445 React19.useEffect(() => {
3446 if (!enabled) {
3447 resetReference(domReference);
3448 return void 0;
3449 }
3450 if (!openCheck) {
3451 return void 0;
3452 }
3453 function cleanupListener() {
3454 cleanupListenerRef.current?.();
3455 cleanupListenerRef.current = null;
3456 }
3457 const win = getWindow(floating);
3458 function handleMouseMove(event) {
3459 const target = getTarget(event);
3460 if (!contains(floating, target)) {
3461 setReference(event.clientX, event.clientY);
3462 } else {
3463 cleanupListener();
3464 }
3465 }
3466 if (!dataRef.current.openEvent || isMouseBasedEvent(dataRef.current.openEvent)) {
3467 cleanupListenerRef.current = addEventListener(win, "mousemove", handleMouseMove);
3468 } else {
3469 resetReference(domReference);
3470 }
3471 return cleanupListener;
3472 }, [openCheck, enabled, floating, dataRef, domReference, store, setReference, resetReference, reactive]);
3473 React19.useEffect(() => () => {
3474 store.set("positionReference", null);
3475 }, [store]);
3476 React19.useEffect(() => {
3477 if (enabled && !floating) {
3478 initialRef.current = false;
3479 }
3480 }, [enabled, floating]);
3481 React19.useEffect(() => {
3482 if (!enabled && open2) {
3483 initialRef.current = true;
3484 }
3485 }, [enabled, open2]);
3486 const reference = React19.useMemo(() => {
3487 function setPointerTypeRef(event) {
3488 setPointerType(event.pointerType);
3489 }
3490 return {
3491 onPointerDown: setPointerTypeRef,
3492 onPointerEnter: setPointerTypeRef,
3493 onMouseMove: handleReferenceEnterOrMove,
3494 onMouseEnter: handleReferenceEnterOrMove
3495 };
3496 }, [handleReferenceEnterOrMove]);
3497 return React19.useMemo(() => enabled ? {
3498 reference,
3499 trigger: reference
3500 } : {}, [enabled, reference]);
3501 }
3502
3503 // node_modules/@base-ui/react/floating-ui-react/hooks/useDismiss.mjs
3504 var React20 = __toESM(require_react(), 1);
3505 function alwaysFalse() {
3506 return false;
3507 }
3508 function normalizeProp(normalizable) {
3509 return {
3510 escapeKey: typeof normalizable === "boolean" ? normalizable : normalizable?.escapeKey ?? false,
3511 outsidePress: typeof normalizable === "boolean" ? normalizable : normalizable?.outsidePress ?? true
3512 };
3513 }
3514 function useDismiss(context, props = {}) {
3515 const {
3516 enabled = true,
3517 escapeKey: escapeKey2 = true,
3518 outsidePress: outsidePressProp = true,
3519 outsidePressEvent = "sloppy",
3520 referencePress = alwaysFalse,
3521 bubbles,
3522 externalTree
3523 } = props;
3524 const store = "rootStore" in context ? context.rootStore : context;
3525 const open2 = store.useState("open");
3526 const floatingElement = store.useState("floatingElement");
3527 const {
3528 dataRef,
3529 events
3530 } = store.context;
3531 const tree = useFloatingTree(externalTree);
3532 const outsidePressFn = useStableCallback(typeof outsidePressProp === "function" ? outsidePressProp : () => false);
3533 const outsidePress2 = typeof outsidePressProp === "function" ? outsidePressFn : outsidePressProp;
3534 const outsidePressEnabled = outsidePress2 !== false;
3535 const getOutsidePressEventProp = useStableCallback(() => outsidePressEvent);
3536 const {
3537 escapeKey: escapeKeyBubbles,
3538 outsidePress: outsidePressBubbles
3539 } = normalizeProp(bubbles);
3540 const pressStartedInsideRef = React20.useRef(false);
3541 const pressStartPreventedRef = React20.useRef(false);
3542 const suppressNextOutsideClickRef = React20.useRef(false);
3543 const sawPressWhileOpenRef = React20.useRef(false);
3544 const isComposingRef = React20.useRef(false);
3545 const currentPointerTypeRef = React20.useRef("");
3546 const touchStateRef = React20.useRef(null);
3547 const cancelDismissOnEndTimeout = useTimeout();
3548 const clearInsideReactTreeTimeout = useTimeout();
3549 const clearInsideReactTree = useStableCallback(() => {
3550 clearInsideReactTreeTimeout.clear();
3551 dataRef.current.insideReactTree = false;
3552 });
3553 const hasBlockingChild = useStableCallback((bubbleKey) => {
3554 const nodeId = dataRef.current.floatingContext?.nodeId;
3555 const children = tree ? getNodeChildren(tree.nodesRef.current, nodeId) : [];
3556 return children.some((child) => child.context?.open && !child.context.dataRef.current[bubbleKey]);
3557 });
3558 const isEventWithinOwnElements = useStableCallback((event) => {
3559 return isEventTargetWithin(event, store.select("floatingElement")) || isEventTargetWithin(event, store.select("domReferenceElement"));
3560 });
3561 const closeOnReferencePress = useStableCallback((event) => {
3562 if (!referencePress()) {
3563 return;
3564 }
3565 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerPress, event.nativeEvent));
3566 });
3567 const closeOnEscapeKeyDown = useStableCallback((event) => {
3568 if (!open2 || !enabled || !escapeKey2 || event.key !== "Escape") {
3569 return;
3570 }
3571 if (isComposingRef.current) {
3572 return;
3573 }
3574 if (!escapeKeyBubbles && hasBlockingChild("__escapeKeyBubbles")) {
3575 return;
3576 }
3577 const native = isReactEvent(event) ? event.nativeEvent : event;
3578 const eventDetails = createChangeEventDetails(reason_parts_exports.escapeKey, native);
3579 store.setOpen(false, eventDetails);
3580 if (!eventDetails.isCanceled) {
3581 event.preventDefault();
3582 }
3583 if (!escapeKeyBubbles && !eventDetails.isPropagationAllowed) {
3584 event.stopPropagation();
3585 }
3586 });
3587 const markInsideReactTree = useStableCallback(() => {
3588 dataRef.current.insideReactTree = true;
3589 clearInsideReactTreeTimeout.start(0, clearInsideReactTree);
3590 });
3591 const markPressStartedInsideReactTree = useStableCallback((event) => {
3592 if (!open2 || !enabled || event.button !== 0) {
3593 return;
3594 }
3595 const target = getTarget(event.nativeEvent);
3596 if (!contains(store.select("floatingElement"), target)) {
3597 return;
3598 }
3599 if (!pressStartedInsideRef.current) {
3600 pressStartedInsideRef.current = true;
3601 pressStartPreventedRef.current = false;
3602 }
3603 });
3604 const markInsidePressStartPrevented = useStableCallback((event) => {
3605 if (!open2 || !enabled) {
3606 return;
3607 }
3608 if (!(event.defaultPrevented || event.nativeEvent.defaultPrevented)) {
3609 return;
3610 }
3611 if (pressStartedInsideRef.current) {
3612 pressStartPreventedRef.current = true;
3613 }
3614 });
3615 React20.useEffect(() => {
3616 function handleOpenChange(details) {
3617 if (!details.open) {
3618 sawPressWhileOpenRef.current = false;
3619 }
3620 }
3621 events.on("openchange", handleOpenChange);
3622 return () => {
3623 events.off("openchange", handleOpenChange);
3624 };
3625 }, [events]);
3626 React20.useEffect(() => {
3627 if (!open2 || !enabled) {
3628 if (!open2) {
3629 sawPressWhileOpenRef.current = false;
3630 }
3631 return clearInsideReactTree;
3632 }
3633 dataRef.current.__escapeKeyBubbles = escapeKeyBubbles;
3634 dataRef.current.__outsidePressBubbles = outsidePressBubbles;
3635 const compositionTimeout = new Timeout();
3636 const preventedPressSuppressionTimeout = new Timeout();
3637 const doc = ownerDocument(floatingElement);
3638 function handleCompositionStart() {
3639 compositionTimeout.clear();
3640 isComposingRef.current = true;
3641 }
3642 function handleCompositionEnd() {
3643 compositionTimeout.start(
3644 // 0ms or 1ms don't work in Safari. 5ms appears to consistently work.
3645 // Only apply to WebKit for the test to remain 0ms.
3646 parts_exports.engine.webkit ? 5 : 0,
3647 () => {
3648 isComposingRef.current = false;
3649 }
3650 );
3651 }
3652 function suppressImmediateOutsideClickAfterPreventedStart() {
3653 suppressNextOutsideClickRef.current = true;
3654 preventedPressSuppressionTimeout.start(0, () => {
3655 suppressNextOutsideClickRef.current = false;
3656 });
3657 }
3658 function resetPressStartState() {
3659 pressStartedInsideRef.current = false;
3660 pressStartPreventedRef.current = false;
3661 }
3662 function getOutsidePressEvent() {
3663 const type = currentPointerTypeRef.current;
3664 const computedType = type === "pen" || !type ? "mouse" : type;
3665 const outsidePressEventValue = getOutsidePressEventProp();
3666 const resolved = typeof outsidePressEventValue === "function" ? outsidePressEventValue() : outsidePressEventValue;
3667 if (typeof resolved === "string") {
3668 return resolved;
3669 }
3670 return resolved[computedType];
3671 }
3672 function shouldIgnoreEvent(event) {
3673 const computedOutsidePressEvent = getOutsidePressEvent();
3674 return computedOutsidePressEvent === "intentional" && event.type !== "click" || computedOutsidePressEvent === "sloppy" && event.type === "click";
3675 }
3676 function isEventWithinFloatingTree(event) {
3677 const nodeId = dataRef.current.floatingContext?.nodeId;
3678 const targetIsInsideChildren = tree && getNodeChildren(tree.nodesRef.current, nodeId).some((node) => isEventTargetWithin(event, node.context?.elements.floating));
3679 return isEventWithinOwnElements(event) || targetIsInsideChildren;
3680 }
3681 function closeOnPressOutside(event) {
3682 if (shouldIgnoreEvent(event)) {
3683 if (event.type !== "click" && !isEventWithinOwnElements(event)) {
3684 preventedPressSuppressionTimeout.clear();
3685 suppressNextOutsideClickRef.current = false;
3686 }
3687 clearInsideReactTree();
3688 return;
3689 }
3690 if (dataRef.current.insideReactTree) {
3691 clearInsideReactTree();
3692 return;
3693 }
3694 const target = getTarget(event);
3695 const inertSelector = `[${createAttribute("inert")}]`;
3696 const targetRoot = isElement(target) ? target.getRootNode() : null;
3697 const markers = Array.from((isShadowRoot(targetRoot) ? targetRoot : ownerDocument(store.select("floatingElement"))).querySelectorAll(inertSelector));
3698 const triggers = store.context.triggerElements;
3699 if (target && (triggers.hasElement(target) || triggers.hasMatchingElement((trigger) => contains(trigger, target)))) {
3700 return;
3701 }
3702 let targetRootAncestor = isElement(target) ? target : null;
3703 while (targetRootAncestor && !isLastTraversableNode(targetRootAncestor)) {
3704 const nextParent = getParentNode(targetRootAncestor);
3705 if (isLastTraversableNode(nextParent) || !isElement(nextParent)) {
3706 break;
3707 }
3708 targetRootAncestor = nextParent;
3709 }
3710 if (markers.length && isElement(target) && !isRootElement(target) && // Clicked on a direct ancestor (e.g. FloatingOverlay).
3711 !contains(target, store.select("floatingElement")) && // If the target root element contains none of the markers, then the
3712 // element was injected after the floating element rendered.
3713 markers.every((marker) => !contains(targetRootAncestor, marker))) {
3714 return;
3715 }
3716 if (isHTMLElement(target) && !("touches" in event)) {
3717 const lastTraversableNode = isLastTraversableNode(target);
3718 const style = getComputedStyle2(target);
3719 const scrollRe = /auto|scroll/;
3720 const isScrollableX = lastTraversableNode || scrollRe.test(style.overflowX);
3721 const isScrollableY = lastTraversableNode || scrollRe.test(style.overflowY);
3722 const canScrollX = isScrollableX && target.clientWidth > 0 && target.scrollWidth > target.clientWidth;
3723 const canScrollY = isScrollableY && target.clientHeight > 0 && target.scrollHeight > target.clientHeight;
3724 const isRTL6 = style.direction === "rtl";
3725 const pressedVerticalScrollbar = canScrollY && (isRTL6 ? event.offsetX <= target.offsetWidth - target.clientWidth : event.offsetX > target.clientWidth);
3726 const pressedHorizontalScrollbar = canScrollX && event.offsetY > target.clientHeight;
3727 if (pressedVerticalScrollbar || pressedHorizontalScrollbar) {
3728 return;
3729 }
3730 }
3731 if (isEventWithinFloatingTree(event)) {
3732 return;
3733 }
3734 if (getOutsidePressEvent() === "intentional") {
3735 if (event.detail !== 0 && !isVirtualClick(event) && !sawPressWhileOpenRef.current) {
3736 return;
3737 }
3738 if (suppressNextOutsideClickRef.current) {
3739 preventedPressSuppressionTimeout.clear();
3740 suppressNextOutsideClickRef.current = false;
3741 return;
3742 }
3743 }
3744 if (typeof outsidePress2 === "function" && !outsidePress2(event)) {
3745 return;
3746 }
3747 if (hasBlockingChild("__outsidePressBubbles")) {
3748 return;
3749 }
3750 store.setOpen(false, createChangeEventDetails(reason_parts_exports.outsidePress, event));
3751 clearInsideReactTree();
3752 }
3753 function handlePointerDown(event) {
3754 if (getOutsidePressEvent() !== "sloppy" || event.pointerType === "touch" || !store.select("open") || !enabled || isEventWithinOwnElements(event)) {
3755 return;
3756 }
3757 closeOnPressOutside(event);
3758 }
3759 function handleTouchStart(event) {
3760 if (getOutsidePressEvent() !== "sloppy" || !store.select("open") || !enabled || isEventWithinOwnElements(event)) {
3761 return;
3762 }
3763 const touch = event.touches[0];
3764 if (touch) {
3765 touchStateRef.current = {
3766 startTime: Date.now(),
3767 startX: touch.clientX,
3768 startY: touch.clientY,
3769 dismissOnTouchEnd: false,
3770 dismissOnMouseDown: true
3771 };
3772 cancelDismissOnEndTimeout.start(1e3, () => {
3773 if (touchStateRef.current) {
3774 touchStateRef.current.dismissOnTouchEnd = false;
3775 touchStateRef.current.dismissOnMouseDown = false;
3776 }
3777 });
3778 }
3779 }
3780 function addTargetEventListenerOnce(event, listener) {
3781 const target = getTarget(event);
3782 if (!target) {
3783 return;
3784 }
3785 const unsubscribe2 = addEventListener(target, event.type, () => {
3786 listener(event);
3787 unsubscribe2();
3788 });
3789 }
3790 function handleTouchStartCapture(event) {
3791 currentPointerTypeRef.current = "touch";
3792 addTargetEventListenerOnce(event, handleTouchStart);
3793 }
3794 function closeOnPressOutsideCapture(event) {
3795 cancelDismissOnEndTimeout.clear();
3796 if (event.type === "pointerdown") {
3797 if (event.button === 0) {
3798 sawPressWhileOpenRef.current = true;
3799 }
3800 currentPointerTypeRef.current = event.pointerType;
3801 }
3802 if (event.type === "mousedown" && touchStateRef.current && !touchStateRef.current.dismissOnMouseDown) {
3803 return;
3804 }
3805 addTargetEventListenerOnce(event, (targetEvent) => {
3806 if (targetEvent.type === "pointerdown") {
3807 handlePointerDown(targetEvent);
3808 } else {
3809 closeOnPressOutside(targetEvent);
3810 }
3811 });
3812 }
3813 function handlePressEndCapture(event) {
3814 if (event.type === "pointercancel") {
3815 sawPressWhileOpenRef.current = false;
3816 }
3817 if (!pressStartedInsideRef.current) {
3818 return;
3819 }
3820 const pressStartedInsideDefaultPrevented = pressStartPreventedRef.current;
3821 resetPressStartState();
3822 if (getOutsidePressEvent() !== "intentional") {
3823 return;
3824 }
3825 if (event.type === "pointercancel") {
3826 if (pressStartedInsideDefaultPrevented) {
3827 suppressImmediateOutsideClickAfterPreventedStart();
3828 }
3829 return;
3830 }
3831 if (isEventWithinFloatingTree(event)) {
3832 return;
3833 }
3834 if (pressStartedInsideDefaultPrevented) {
3835 suppressImmediateOutsideClickAfterPreventedStart();
3836 return;
3837 }
3838 if (typeof outsidePress2 === "function" && !outsidePress2(event)) {
3839 return;
3840 }
3841 preventedPressSuppressionTimeout.clear();
3842 suppressNextOutsideClickRef.current = true;
3843 clearInsideReactTree();
3844 }
3845 function handleTouchMove(event) {
3846 if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) {
3847 return;
3848 }
3849 const touch = event.touches[0];
3850 if (!touch) {
3851 return;
3852 }
3853 const deltaX = Math.abs(touch.clientX - touchStateRef.current.startX);
3854 const deltaY = Math.abs(touch.clientY - touchStateRef.current.startY);
3855 const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
3856 if (distance > 5) {
3857 touchStateRef.current.dismissOnTouchEnd = true;
3858 }
3859 if (distance > 10) {
3860 closeOnPressOutside(event);
3861 cancelDismissOnEndTimeout.clear();
3862 touchStateRef.current = null;
3863 }
3864 }
3865 function handleTouchMoveCapture(event) {
3866 addTargetEventListenerOnce(event, handleTouchMove);
3867 }
3868 function handleTouchEnd(event) {
3869 if (getOutsidePressEvent() !== "sloppy" || !touchStateRef.current || isEventWithinOwnElements(event)) {
3870 return;
3871 }
3872 if (touchStateRef.current.dismissOnTouchEnd) {
3873 closeOnPressOutside(event);
3874 }
3875 cancelDismissOnEndTimeout.clear();
3876 touchStateRef.current = null;
3877 }
3878 function handleTouchEndCapture(event) {
3879 addTargetEventListenerOnce(event, handleTouchEnd);
3880 }
3881 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, {
3882 capture: true,
3883 passive: true
3884 }), addEventListener(doc, "touchmove", handleTouchMoveCapture, {
3885 capture: true,
3886 passive: true
3887 }), addEventListener(doc, "touchend", handleTouchEndCapture, {
3888 capture: true,
3889 passive: true
3890 })));
3891 return () => {
3892 unsubscribe();
3893 compositionTimeout.clear();
3894 preventedPressSuppressionTimeout.clear();
3895 resetPressStartState();
3896 suppressNextOutsideClickRef.current = false;
3897 clearInsideReactTree();
3898 };
3899 }, [dataRef, floatingElement, escapeKey2, outsidePressEnabled, outsidePress2, open2, enabled, escapeKeyBubbles, outsidePressBubbles, closeOnEscapeKeyDown, clearInsideReactTree, getOutsidePressEventProp, hasBlockingChild, isEventWithinOwnElements, tree, store, cancelDismissOnEndTimeout]);
3900 const reference = React20.useMemo(() => ({
3901 onKeyDown: closeOnEscapeKeyDown,
3902 onPointerDown: closeOnReferencePress,
3903 onClick: closeOnReferencePress
3904 }), [closeOnEscapeKeyDown, closeOnReferencePress]);
3905 const floating = React20.useMemo(() => ({
3906 onKeyDown: closeOnEscapeKeyDown,
3907 // `onMouseDown` may be blocked if `event.preventDefault()` is called in
3908 // `onPointerDown`, such as with <NumberField.ScrubArea>.
3909 // See https://github.com/mui/base-ui/pull/3379
3910 onPointerDown: markInsidePressStartPrevented,
3911 onMouseDown: markInsidePressStartPrevented,
3912 onClickCapture: markInsideReactTree,
3913 onMouseDownCapture(event) {
3914 markInsideReactTree();
3915 markPressStartedInsideReactTree(event);
3916 },
3917 onPointerDownCapture(event) {
3918 markInsideReactTree();
3919 markPressStartedInsideReactTree(event);
3920 },
3921 onMouseUpCapture: markInsideReactTree,
3922 onTouchEndCapture: markInsideReactTree,
3923 onTouchMoveCapture: markInsideReactTree
3924 }), [closeOnEscapeKeyDown, markInsideReactTree, markPressStartedInsideReactTree, markInsidePressStartPrevented]);
3925 return React20.useMemo(() => enabled ? {
3926 reference,
3927 floating,
3928 trigger: reference
3929 } : {}, [enabled, reference, floating]);
3930 }
3931
3932 // node_modules/@base-ui/react/floating-ui-react/hooks/useFloating.mjs
3933 var React28 = __toESM(require_react(), 1);
3934
3935 // node_modules/@floating-ui/core/dist/floating-ui.core.mjs
3936 function computeCoordsFromPlacement(_ref, placement, rtl) {
3937 let {
3938 reference,
3939 floating
3940 } = _ref;
3941 const sideAxis = getSideAxis(placement);
3942 const alignmentAxis = getAlignmentAxis(placement);
3943 const alignLength = getAxisLength(alignmentAxis);
3944 const side = getSide(placement);
3945 const isVertical = sideAxis === "y";
3946 const commonX = reference.x + reference.width / 2 - floating.width / 2;
3947 const commonY = reference.y + reference.height / 2 - floating.height / 2;
3948 const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;
3949 let coords;
3950 switch (side) {
3951 case "top":
3952 coords = {
3953 x: commonX,
3954 y: reference.y - floating.height
3955 };
3956 break;
3957 case "bottom":
3958 coords = {
3959 x: commonX,
3960 y: reference.y + reference.height
3961 };
3962 break;
3963 case "right":
3964 coords = {
3965 x: reference.x + reference.width,
3966 y: commonY
3967 };
3968 break;
3969 case "left":
3970 coords = {
3971 x: reference.x - floating.width,
3972 y: commonY
3973 };
3974 break;
3975 default:
3976 coords = {
3977 x: reference.x,
3978 y: reference.y
3979 };
3980 }
3981 const alignment = getAlignment(placement);
3982 if (alignment) {
3983 coords[alignmentAxis] += commonAlign * (alignment === "end" ? 1 : -1) * (rtl && isVertical ? -1 : 1);
3984 }
3985 return coords;
3986 }
3987 async function detectOverflow(state, options) {
3988 var _await$platform$isEle;
3989 if (options === void 0) {
3990 options = {};
3991 }
3992 const {
3993 x: x2,
3994 y: y2,
3995 platform: platform3,
3996 rects,
3997 elements,
3998 strategy
3999 } = state;
4000 const {
4001 boundary = "clippingAncestors",
4002 rootBoundary = "viewport",
4003 elementContext = "floating",
4004 altBoundary = false,
4005 padding = 0
4006 } = evaluate(options, state);
4007 const paddingObject = getPaddingObject(padding);
4008 const altContext = elementContext === "floating" ? "reference" : "floating";
4009 const element = elements[altBoundary ? altContext : elementContext];
4010 const clippingClientRect = rectToClientRect(await platform3.getClippingRect({
4011 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)),
4012 boundary,
4013 rootBoundary,
4014 strategy
4015 }));
4016 const rect = elementContext === "floating" ? {
4017 x: x2,
4018 y: y2,
4019 width: rects.floating.width,
4020 height: rects.floating.height
4021 } : rects.reference;
4022 const offsetParent = await (platform3.getOffsetParent == null ? void 0 : platform3.getOffsetParent(elements.floating));
4023 const offsetScale = await (platform3.isElement == null ? void 0 : platform3.isElement(offsetParent)) && await (platform3.getScale == null ? void 0 : platform3.getScale(offsetParent)) || {
4024 x: 1,
4025 y: 1
4026 };
4027 const elementClientRect = rectToClientRect(platform3.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform3.convertOffsetParentRelativeRectToViewportRelativeRect({
4028 elements,
4029 rect,
4030 offsetParent,
4031 strategy
4032 }) : rect);
4033 return {
4034 top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,
4035 bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,
4036 left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,
4037 right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x
4038 };
4039 }
4040 var MAX_RESET_COUNT = 50;
4041 var computePosition = async (reference, floating, config) => {
4042 const {
4043 placement = "bottom",
4044 strategy = "absolute",
4045 middleware = [],
4046 platform: platform3
4047 } = config;
4048 const platformWithDetectOverflow = platform3.detectOverflow ? platform3 : {
4049 ...platform3,
4050 detectOverflow
4051 };
4052 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(floating));
4053 let rects = await platform3.getElementRects({
4054 reference,
4055 floating,
4056 strategy
4057 });
4058 let {
4059 x: x2,
4060 y: y2
4061 } = computeCoordsFromPlacement(rects, placement, rtl);
4062 let statefulPlacement = placement;
4063 let resetCount = 0;
4064 const middlewareData = {};
4065 for (let i = 0; i < middleware.length; i++) {
4066 const currentMiddleware = middleware[i];
4067 if (!currentMiddleware) {
4068 continue;
4069 }
4070 const {
4071 name,
4072 fn
4073 } = currentMiddleware;
4074 const {
4075 x: nextX,
4076 y: nextY,
4077 data,
4078 reset
4079 } = await fn({
4080 x: x2,
4081 y: y2,
4082 initialPlacement: placement,
4083 placement: statefulPlacement,
4084 strategy,
4085 middlewareData,
4086 rects,
4087 platform: platformWithDetectOverflow,
4088 elements: {
4089 reference,
4090 floating
4091 }
4092 });
4093 x2 = nextX != null ? nextX : x2;
4094 y2 = nextY != null ? nextY : y2;
4095 middlewareData[name] = {
4096 ...middlewareData[name],
4097 ...data
4098 };
4099 if (reset && resetCount < MAX_RESET_COUNT) {
4100 resetCount++;
4101 if (typeof reset === "object") {
4102 if (reset.placement) {
4103 statefulPlacement = reset.placement;
4104 }
4105 if (reset.rects) {
4106 rects = reset.rects === true ? await platform3.getElementRects({
4107 reference,
4108 floating,
4109 strategy
4110 }) : reset.rects;
4111 }
4112 ({
4113 x: x2,
4114 y: y2
4115 } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));
4116 }
4117 i = -1;
4118 }
4119 }
4120 return {
4121 x: x2,
4122 y: y2,
4123 placement: statefulPlacement,
4124 strategy,
4125 middlewareData
4126 };
4127 };
4128 var flip = function(options) {
4129 if (options === void 0) {
4130 options = {};
4131 }
4132 return {
4133 name: "flip",
4134 options,
4135 async fn(state) {
4136 var _middlewareData$arrow, _middlewareData$flip;
4137 const {
4138 placement,
4139 middlewareData,
4140 rects,
4141 initialPlacement,
4142 platform: platform3,
4143 elements
4144 } = state;
4145 const {
4146 mainAxis: checkMainAxis = true,
4147 crossAxis: checkCrossAxis = true,
4148 fallbackPlacements: specifiedFallbackPlacements,
4149 fallbackStrategy = "bestFit",
4150 fallbackAxisSideDirection = "none",
4151 flipAlignment = true,
4152 ...detectOverflowOptions
4153 } = evaluate(options, state);
4154 if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
4155 return {};
4156 }
4157 const side = getSide(placement);
4158 const initialSideAxis = getSideAxis(initialPlacement);
4159 const isBasePlacement = getSide(initialPlacement) === initialPlacement;
4160 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating));
4161 const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));
4162 const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== "none";
4163 if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {
4164 fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));
4165 }
4166 const placements2 = [initialPlacement, ...fallbackPlacements];
4167 const overflow = await platform3.detectOverflow(state, detectOverflowOptions);
4168 const overflows = [];
4169 let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];
4170 if (checkMainAxis) {
4171 overflows.push(overflow[side]);
4172 }
4173 if (checkCrossAxis) {
4174 const sides2 = getAlignmentSides(placement, rects, rtl);
4175 overflows.push(overflow[sides2[0]], overflow[sides2[1]]);
4176 }
4177 overflowsData = [...overflowsData, {
4178 placement,
4179 overflows
4180 }];
4181 if (!overflows.every((side2) => side2 <= 0)) {
4182 var _middlewareData$flip2, _overflowsData$filter;
4183 const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;
4184 const nextPlacement = placements2[nextIndex];
4185 if (nextPlacement) {
4186 const ignoreCrossAxisOverflow = checkCrossAxis === "alignment" ? initialSideAxis !== getSideAxis(nextPlacement) : false;
4187 if (!ignoreCrossAxisOverflow || // We leave the current main axis only if every placement on that axis
4188 // overflows the main axis.
4189 overflowsData.every((d) => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {
4190 return {
4191 data: {
4192 index: nextIndex,
4193 overflows: overflowsData
4194 },
4195 reset: {
4196 placement: nextPlacement
4197 }
4198 };
4199 }
4200 }
4201 let resetPlacement = (_overflowsData$filter = overflowsData.filter((d) => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;
4202 if (!resetPlacement) {
4203 switch (fallbackStrategy) {
4204 case "bestFit": {
4205 var _overflowsData$filter2;
4206 const placement2 = (_overflowsData$filter2 = overflowsData.filter((d) => {
4207 if (hasFallbackAxisSideDirection) {
4208 const currentSideAxis = getSideAxis(d.placement);
4209 return currentSideAxis === initialSideAxis || // Create a bias to the `y` side axis due to horizontal
4210 // reading directions favoring greater width.
4211 currentSideAxis === "y";
4212 }
4213 return true;
4214 }).map((d) => [d.placement, d.overflows.filter((overflow2) => overflow2 > 0).reduce((acc, overflow2) => acc + overflow2, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];
4215 if (placement2) {
4216 resetPlacement = placement2;
4217 }
4218 break;
4219 }
4220 case "initialPlacement":
4221 resetPlacement = initialPlacement;
4222 break;
4223 }
4224 }
4225 if (placement !== resetPlacement) {
4226 return {
4227 reset: {
4228 placement: resetPlacement
4229 }
4230 };
4231 }
4232 }
4233 return {};
4234 }
4235 };
4236 };
4237 var originSides = /* @__PURE__ */ new Set(["left", "top"]);
4238 async function convertValueToCoords(state, options) {
4239 const {
4240 placement,
4241 platform: platform3,
4242 elements
4243 } = state;
4244 const rtl = await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating));
4245 const side = getSide(placement);
4246 const alignment = getAlignment(placement);
4247 const isVertical = getSideAxis(placement) === "y";
4248 const mainAxisMulti = originSides.has(side) ? -1 : 1;
4249 const crossAxisMulti = rtl && isVertical ? -1 : 1;
4250 const rawValue = evaluate(options, state);
4251 let {
4252 mainAxis,
4253 crossAxis,
4254 alignmentAxis
4255 } = typeof rawValue === "number" ? {
4256 mainAxis: rawValue,
4257 crossAxis: 0,
4258 alignmentAxis: null
4259 } : {
4260 mainAxis: rawValue.mainAxis || 0,
4261 crossAxis: rawValue.crossAxis || 0,
4262 alignmentAxis: rawValue.alignmentAxis
4263 };
4264 if (alignment && typeof alignmentAxis === "number") {
4265 crossAxis = alignment === "end" ? alignmentAxis * -1 : alignmentAxis;
4266 }
4267 return isVertical ? {
4268 x: crossAxis * crossAxisMulti,
4269 y: mainAxis * mainAxisMulti
4270 } : {
4271 x: mainAxis * mainAxisMulti,
4272 y: crossAxis * crossAxisMulti
4273 };
4274 }
4275 var offset = function(options) {
4276 if (options === void 0) {
4277 options = 0;
4278 }
4279 return {
4280 name: "offset",
4281 options,
4282 async fn(state) {
4283 var _middlewareData$offse, _middlewareData$arrow;
4284 const {
4285 x: x2,
4286 y: y2,
4287 placement,
4288 middlewareData
4289 } = state;
4290 const diffCoords = await convertValueToCoords(state, options);
4291 if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {
4292 return {};
4293 }
4294 return {
4295 x: x2 + diffCoords.x,
4296 y: y2 + diffCoords.y,
4297 data: {
4298 ...diffCoords,
4299 placement
4300 }
4301 };
4302 }
4303 };
4304 };
4305 var shift = function(options) {
4306 if (options === void 0) {
4307 options = {};
4308 }
4309 return {
4310 name: "shift",
4311 options,
4312 async fn(state) {
4313 const {
4314 x: x2,
4315 y: y2,
4316 placement,
4317 platform: platform3
4318 } = state;
4319 const {
4320 mainAxis: checkMainAxis = true,
4321 crossAxis: checkCrossAxis = false,
4322 limiter = {
4323 fn: (_ref) => {
4324 let {
4325 x: x3,
4326 y: y3
4327 } = _ref;
4328 return {
4329 x: x3,
4330 y: y3
4331 };
4332 }
4333 },
4334 ...detectOverflowOptions
4335 } = evaluate(options, state);
4336 const coords = {
4337 x: x2,
4338 y: y2
4339 };
4340 const overflow = await platform3.detectOverflow(state, detectOverflowOptions);
4341 const crossAxis = getSideAxis(placement);
4342 const mainAxis = getOppositeAxis(crossAxis);
4343 let mainAxisCoord = coords[mainAxis];
4344 let crossAxisCoord = coords[crossAxis];
4345 const clampCoord = (axis, coord) => clamp(coord + overflow[axis === "y" ? "top" : "left"], coord, coord - overflow[axis === "y" ? "bottom" : "right"]);
4346 if (checkMainAxis) {
4347 mainAxisCoord = clampCoord(mainAxis, mainAxisCoord);
4348 }
4349 if (checkCrossAxis) {
4350 crossAxisCoord = clampCoord(crossAxis, crossAxisCoord);
4351 }
4352 const limitedCoords = limiter.fn({
4353 ...state,
4354 [mainAxis]: mainAxisCoord,
4355 [crossAxis]: crossAxisCoord
4356 });
4357 return {
4358 ...limitedCoords,
4359 data: {
4360 x: limitedCoords.x - x2,
4361 y: limitedCoords.y - y2,
4362 enabled: {
4363 [mainAxis]: checkMainAxis,
4364 [crossAxis]: checkCrossAxis
4365 }
4366 }
4367 };
4368 }
4369 };
4370 };
4371 var limitShift = function(options) {
4372 if (options === void 0) {
4373 options = {};
4374 }
4375 return {
4376 options,
4377 fn(state) {
4378 var _rawOffset$mainAxis, _rawOffset$crossAxis;
4379 const {
4380 x: x2,
4381 y: y2,
4382 placement,
4383 rects,
4384 middlewareData
4385 } = state;
4386 const {
4387 offset: offset4 = 0,
4388 mainAxis: checkMainAxis = true,
4389 crossAxis: checkCrossAxis = true
4390 } = evaluate(options, state);
4391 const coords = {
4392 x: x2,
4393 y: y2
4394 };
4395 const crossAxis = getSideAxis(placement);
4396 const mainAxis = getOppositeAxis(crossAxis);
4397 let mainAxisCoord = coords[mainAxis];
4398 let crossAxisCoord = coords[crossAxis];
4399 const rawOffset = evaluate(offset4, state);
4400 const computedOffset = typeof rawOffset === "number" ? {
4401 mainAxis: rawOffset,
4402 crossAxis: 0
4403 } : {
4404 mainAxis: (_rawOffset$mainAxis = rawOffset.mainAxis) != null ? _rawOffset$mainAxis : 0,
4405 crossAxis: (_rawOffset$crossAxis = rawOffset.crossAxis) != null ? _rawOffset$crossAxis : 0
4406 };
4407 if (checkMainAxis) {
4408 const len = mainAxis === "y" ? "height" : "width";
4409 const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;
4410 const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;
4411 if (mainAxisCoord < limitMin) {
4412 mainAxisCoord = limitMin;
4413 } else if (mainAxisCoord > limitMax) {
4414 mainAxisCoord = limitMax;
4415 }
4416 }
4417 if (checkCrossAxis) {
4418 var _middlewareData$offse, _middlewareData$offse2;
4419 const len = mainAxis === "y" ? "width" : "height";
4420 const isOriginSide = originSides.has(getSide(placement));
4421 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);
4422 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);
4423 if (crossAxisCoord < limitMin) {
4424 crossAxisCoord = limitMin;
4425 } else if (crossAxisCoord > limitMax) {
4426 crossAxisCoord = limitMax;
4427 }
4428 }
4429 return {
4430 [mainAxis]: mainAxisCoord,
4431 [crossAxis]: crossAxisCoord
4432 };
4433 }
4434 };
4435 };
4436 var size = function(options) {
4437 if (options === void 0) {
4438 options = {};
4439 }
4440 return {
4441 name: "size",
4442 options,
4443 async fn(state) {
4444 const {
4445 placement,
4446 rects,
4447 platform: platform3,
4448 elements
4449 } = state;
4450 const {
4451 apply = () => {
4452 },
4453 ...detectOverflowOptions
4454 } = evaluate(options, state);
4455 const overflow = await platform3.detectOverflow(state, detectOverflowOptions);
4456 const side = getSide(placement);
4457 const alignment = getAlignment(placement);
4458 const isYAxis = getSideAxis(placement) === "y";
4459 const {
4460 width,
4461 height
4462 } = rects.floating;
4463 let heightSide;
4464 let widthSide;
4465 if (side === "top" || side === "bottom") {
4466 heightSide = side;
4467 widthSide = alignment === (await (platform3.isRTL == null ? void 0 : platform3.isRTL(elements.floating)) ? "start" : "end") ? "left" : "right";
4468 } else {
4469 widthSide = side;
4470 heightSide = alignment === "end" ? "top" : "bottom";
4471 }
4472 const maximumClippingHeight = height - overflow.top - overflow.bottom;
4473 const maximumClippingWidth = width - overflow.left - overflow.right;
4474 const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);
4475 const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);
4476 const shiftData = state.middlewareData.shift;
4477 const noShift = !shiftData;
4478 let availableHeight2 = overflowAvailableHeight;
4479 let availableWidth2 = overflowAvailableWidth;
4480 if (shiftData != null && shiftData.enabled.x) {
4481 availableWidth2 = maximumClippingWidth;
4482 }
4483 if (shiftData != null && shiftData.enabled.y) {
4484 availableHeight2 = maximumClippingHeight;
4485 }
4486 if (noShift && !alignment) {
4487 if (isYAxis) {
4488 availableWidth2 = width - 2 * max(overflow.left, overflow.right);
4489 } else {
4490 availableHeight2 = height - 2 * max(overflow.top, overflow.bottom);
4491 }
4492 }
4493 await apply({
4494 ...state,
4495 availableWidth: availableWidth2,
4496 availableHeight: availableHeight2
4497 });
4498 const nextDimensions = await platform3.getDimensions(elements.floating);
4499 if (width !== nextDimensions.width || height !== nextDimensions.height) {
4500 return {
4501 reset: {
4502 rects: true
4503 }
4504 };
4505 }
4506 return {};
4507 }
4508 };
4509 };
4510
4511 // node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs
4512 function getCssDimensions(element) {
4513 const css = getComputedStyle2(element);
4514 let width = parseFloat(css.width) || 0;
4515 let height = parseFloat(css.height) || 0;
4516 const hasOffset = isHTMLElement(element);
4517 const offsetWidth = hasOffset ? element.offsetWidth : width;
4518 const offsetHeight = hasOffset ? element.offsetHeight : height;
4519 const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;
4520 if (shouldFallback) {
4521 width = offsetWidth;
4522 height = offsetHeight;
4523 }
4524 return {
4525 width,
4526 height,
4527 $: shouldFallback
4528 };
4529 }
4530 function unwrapElement(element) {
4531 return !isElement(element) ? element.contextElement : element;
4532 }
4533 function getScale(element) {
4534 const domElement = unwrapElement(element);
4535 if (!isHTMLElement(domElement)) {
4536 return createCoords(1);
4537 }
4538 const rect = domElement.getBoundingClientRect();
4539 const {
4540 width,
4541 height,
4542 $: $2
4543 } = getCssDimensions(domElement);
4544 let x2 = ($2 ? round(rect.width) : rect.width) / width;
4545 let y2 = ($2 ? round(rect.height) : rect.height) / height;
4546 if (!x2 || !Number.isFinite(x2)) {
4547 x2 = 1;
4548 }
4549 if (!y2 || !Number.isFinite(y2)) {
4550 y2 = 1;
4551 }
4552 return {
4553 x: x2,
4554 y: y2
4555 };
4556 }
4557 var noOffsets = /* @__PURE__ */ createCoords(0);
4558 function getVisualOffsets(element) {
4559 const win = getWindow(element);
4560 if (!isWebKit() || !win.visualViewport) {
4561 return noOffsets;
4562 }
4563 return {
4564 x: win.visualViewport.offsetLeft,
4565 y: win.visualViewport.offsetTop
4566 };
4567 }
4568 function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {
4569 if (isFixed === void 0) {
4570 isFixed = false;
4571 }
4572 return !!floatingOffsetParent && isFixed && floatingOffsetParent === getWindow(element);
4573 }
4574 function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {
4575 if (includeScale === void 0) {
4576 includeScale = false;
4577 }
4578 if (isFixedStrategy === void 0) {
4579 isFixedStrategy = false;
4580 }
4581 const clientRect = element.getBoundingClientRect();
4582 const domElement = unwrapElement(element);
4583 let scale = createCoords(1);
4584 if (includeScale) {
4585 if (offsetParent) {
4586 if (isElement(offsetParent)) {
4587 scale = getScale(offsetParent);
4588 }
4589 } else {
4590 scale = getScale(element);
4591 }
4592 }
4593 const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);
4594 let x2 = (clientRect.left + visualOffsets.x) / scale.x;
4595 let y2 = (clientRect.top + visualOffsets.y) / scale.y;
4596 let width = clientRect.width / scale.x;
4597 let height = clientRect.height / scale.y;
4598 if (domElement && offsetParent) {
4599 const win = getWindow(domElement);
4600 const offsetWin = isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;
4601 let currentWin = win;
4602 let currentIFrame = getFrameElement(currentWin);
4603 while (currentIFrame && offsetWin !== currentWin) {
4604 const iframeScale = getScale(currentIFrame);
4605 const iframeRect = currentIFrame.getBoundingClientRect();
4606 const css = getComputedStyle2(currentIFrame);
4607 const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;
4608 const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;
4609 x2 *= iframeScale.x;
4610 y2 *= iframeScale.y;
4611 width *= iframeScale.x;
4612 height *= iframeScale.y;
4613 x2 += left;
4614 y2 += top;
4615 currentWin = getWindow(currentIFrame);
4616 currentIFrame = getFrameElement(currentWin);
4617 }
4618 }
4619 return rectToClientRect({
4620 width,
4621 height,
4622 x: x2,
4623 y: y2
4624 });
4625 }
4626 function getWindowScrollBarX(element, rect) {
4627 const leftScroll = getNodeScroll(element).scrollLeft;
4628 if (!rect) {
4629 return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;
4630 }
4631 return rect.left + leftScroll;
4632 }
4633 function getHTMLOffset(documentElement, scroll) {
4634 const htmlRect = documentElement.getBoundingClientRect();
4635 const x2 = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);
4636 const y2 = htmlRect.top + scroll.scrollTop;
4637 return {
4638 x: x2,
4639 y: y2
4640 };
4641 }
4642 function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
4643 let {
4644 elements,
4645 rect,
4646 offsetParent,
4647 strategy
4648 } = _ref;
4649 const isFixed = strategy === "fixed";
4650 const documentElement = getDocumentElement(offsetParent);
4651 const topLayer = elements ? isTopLayer(elements.floating) : false;
4652 if (offsetParent === documentElement || topLayer && isFixed) {
4653 return rect;
4654 }
4655 let scroll = {
4656 scrollLeft: 0,
4657 scrollTop: 0
4658 };
4659 let scale = createCoords(1);
4660 const offsets = createCoords(0);
4661 const isOffsetParentAnElement = isHTMLElement(offsetParent);
4662 if (isOffsetParentAnElement || !isFixed) {
4663 if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) {
4664 scroll = getNodeScroll(offsetParent);
4665 }
4666 if (isOffsetParentAnElement) {
4667 const offsetRect = getBoundingClientRect(offsetParent);
4668 scale = getScale(offsetParent);
4669 offsets.x = offsetRect.x + offsetParent.clientLeft;
4670 offsets.y = offsetRect.y + offsetParent.clientTop;
4671 }
4672 }
4673 const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
4674 return {
4675 width: rect.width * scale.x,
4676 height: rect.height * scale.y,
4677 x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,
4678 y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y
4679 };
4680 }
4681 function getClientRects(element) {
4682 return element.getClientRects ? Array.from(element.getClientRects()) : [];
4683 }
4684 function getDocumentRect(html) {
4685 const scroll = getNodeScroll(html);
4686 const body = html.ownerDocument.body;
4687 const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);
4688 const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);
4689 let x2 = -scroll.scrollLeft + getWindowScrollBarX(html);
4690 const y2 = -scroll.scrollTop;
4691 if (getComputedStyle2(body).direction === "rtl") {
4692 x2 += max(html.clientWidth, body.clientWidth) - width;
4693 }
4694 return {
4695 width,
4696 height,
4697 x: x2,
4698 y: y2
4699 };
4700 }
4701 var SCROLLBAR_MAX = 25;
4702 function getViewportRect(element, strategy, rootBoundary) {
4703 if (rootBoundary === void 0) {
4704 rootBoundary = "viewport";
4705 }
4706 const isLayoutViewport = rootBoundary === "layoutViewport";
4707 const win = getWindow(element);
4708 const html = getDocumentElement(element);
4709 const visualViewport = win.visualViewport;
4710 let width = html.clientWidth;
4711 let height = html.clientHeight;
4712 let x2 = 0;
4713 let y2 = 0;
4714 if (visualViewport) {
4715 const layoutRelativeClientCoords = !isWebKit() || strategy === "fixed";
4716 if (isLayoutViewport) {
4717 if (!layoutRelativeClientCoords) {
4718 x2 = -visualViewport.offsetLeft;
4719 y2 = -visualViewport.offsetTop;
4720 }
4721 } else {
4722 width = visualViewport.width;
4723 height = visualViewport.height;
4724 if (layoutRelativeClientCoords) {
4725 x2 = visualViewport.offsetLeft;
4726 y2 = visualViewport.offsetTop;
4727 }
4728 }
4729 }
4730 const windowScrollbarX = getWindowScrollBarX(html);
4731 if (windowScrollbarX <= 0) {
4732 const doc = html.ownerDocument;
4733 const body = doc.body;
4734 const bodyStyles = getComputedStyle(body);
4735 const bodyMarginInline = doc.compatMode === "CSS1Compat" ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;
4736 const reservedWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);
4737 const gutter = getComputedStyle(html).scrollbarGutter === "stable both-edges" ? reservedWidth / 2 : reservedWidth;
4738 if (gutter <= SCROLLBAR_MAX) {
4739 width -= gutter;
4740 }
4741 }
4742 return {
4743 width,
4744 height,
4745 x: x2,
4746 y: y2
4747 };
4748 }
4749 function getInnerBoundingClientRect(element, strategy) {
4750 const clientRect = getBoundingClientRect(element, true, strategy === "fixed");
4751 const top = clientRect.top + element.clientTop;
4752 const left = clientRect.left + element.clientLeft;
4753 const scale = getScale(element);
4754 const width = element.clientWidth * scale.x;
4755 const height = element.clientHeight * scale.y;
4756 const x2 = left * scale.x;
4757 const y2 = top * scale.y;
4758 return {
4759 width,
4760 height,
4761 x: x2,
4762 y: y2
4763 };
4764 }
4765 function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {
4766 let rect;
4767 if (clippingAncestor === "viewport" || clippingAncestor === "layoutViewport") {
4768 rect = getViewportRect(element, strategy, clippingAncestor);
4769 } else if (clippingAncestor === "document") {
4770 rect = getDocumentRect(getDocumentElement(element));
4771 } else if (isElement(clippingAncestor)) {
4772 rect = getInnerBoundingClientRect(clippingAncestor, strategy);
4773 } else {
4774 const visualOffsets = getVisualOffsets(element);
4775 rect = {
4776 x: clippingAncestor.x - visualOffsets.x,
4777 y: clippingAncestor.y - visualOffsets.y,
4778 width: clippingAncestor.width,
4779 height: clippingAncestor.height
4780 };
4781 }
4782 return rectToClientRect(rect);
4783 }
4784 function getClippingElementAncestors(element, cache) {
4785 const cachedResult = cache.get(element);
4786 if (cachedResult) {
4787 return cachedResult;
4788 }
4789 let result = getOverflowAncestors(element, [], false).filter((el) => isElement(el) && getNodeName(el) !== "body");
4790 let lastKeptComputedStyle = null;
4791 const elementIsFixed = getComputedStyle2(element).position === "fixed";
4792 let currentNode = elementIsFixed ? getParentNode(element) : element;
4793 while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {
4794 const computedStyle = getComputedStyle2(currentNode);
4795 const currentNodeIsContaining = isContainingBlock(currentNode);
4796 const lastPosition = lastKeptComputedStyle ? lastKeptComputedStyle.position : elementIsFixed ? "fixed" : "";
4797 const shouldDropCurrentNode = !currentNodeIsContaining && (lastPosition === "fixed" || lastPosition === "absolute" && computedStyle.position === "static");
4798 if (shouldDropCurrentNode) {
4799 result = result.filter((ancestor) => ancestor !== currentNode);
4800 } else {
4801 lastKeptComputedStyle = computedStyle;
4802 }
4803 currentNode = getParentNode(currentNode);
4804 }
4805 cache.set(element, result);
4806 return result;
4807 }
4808 function getClippingRect(_ref) {
4809 let {
4810 element,
4811 boundary,
4812 rootBoundary,
4813 strategy
4814 } = _ref;
4815 const elementClippingAncestors = boundary === "clippingAncestors" ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);
4816 const clippingAncestors = [...elementClippingAncestors, rootBoundary];
4817 const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);
4818 let top = firstRect.top;
4819 let right = firstRect.right;
4820 let bottom = firstRect.bottom;
4821 let left = firstRect.left;
4822 for (let i = 1; i < clippingAncestors.length; i++) {
4823 const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);
4824 top = max(rect.top, top);
4825 right = min(rect.right, right);
4826 bottom = min(rect.bottom, bottom);
4827 left = max(rect.left, left);
4828 }
4829 return {
4830 width: right - left,
4831 height: bottom - top,
4832 x: left,
4833 y: top
4834 };
4835 }
4836 function getDimensions(element) {
4837 const {
4838 width,
4839 height
4840 } = getCssDimensions(element);
4841 return {
4842 width,
4843 height
4844 };
4845 }
4846 function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
4847 const isOffsetParentAnElement = isHTMLElement(offsetParent);
4848 const documentElement = getDocumentElement(offsetParent);
4849 const isFixed = strategy === "fixed";
4850 const rect = getBoundingClientRect(element, true, isFixed, offsetParent);
4851 let scroll = {
4852 scrollLeft: 0,
4853 scrollTop: 0
4854 };
4855 const offsets = createCoords(0);
4856 if (isOffsetParentAnElement || !isFixed) {
4857 if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) {
4858 scroll = getNodeScroll(offsetParent);
4859 }
4860 if (isOffsetParentAnElement) {
4861 const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);
4862 offsets.x = offsetRect.x + offsetParent.clientLeft;
4863 offsets.y = offsetRect.y + offsetParent.clientTop;
4864 }
4865 }
4866 if (!isOffsetParentAnElement && documentElement) {
4867 offsets.x = getWindowScrollBarX(documentElement);
4868 }
4869 const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
4870 const x2 = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;
4871 const y2 = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;
4872 return {
4873 x: x2,
4874 y: y2,
4875 width: rect.width,
4876 height: rect.height
4877 };
4878 }
4879 function isStaticPositioned(element) {
4880 return getComputedStyle2(element).position === "static";
4881 }
4882 function getTrueOffsetParent(element, polyfill) {
4883 if (!isHTMLElement(element) || getComputedStyle2(element).position === "fixed") {
4884 return null;
4885 }
4886 if (polyfill) {
4887 return polyfill(element);
4888 }
4889 let rawOffsetParent = element.offsetParent;
4890 if (getDocumentElement(element) === rawOffsetParent) {
4891 rawOffsetParent = rawOffsetParent.ownerDocument.body;
4892 }
4893 return rawOffsetParent;
4894 }
4895 function getOffsetParent(element, polyfill) {
4896 const win = getWindow(element);
4897 if (isTopLayer(element)) {
4898 return win;
4899 }
4900 if (!isHTMLElement(element)) {
4901 let svgOffsetParent = getParentNode(element);
4902 while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {
4903 if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {
4904 return svgOffsetParent;
4905 }
4906 svgOffsetParent = getParentNode(svgOffsetParent);
4907 }
4908 return win;
4909 }
4910 let offsetParent = getTrueOffsetParent(element, polyfill);
4911 while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {
4912 offsetParent = getTrueOffsetParent(offsetParent, polyfill);
4913 }
4914 if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {
4915 return win;
4916 }
4917 return offsetParent || getContainingBlock(element) || win;
4918 }
4919 var getElementRects = async function(data) {
4920 const getOffsetParentFn = this.getOffsetParent || getOffsetParent;
4921 const getDimensionsFn = this.getDimensions;
4922 const floatingDimensions = await getDimensionsFn(data.floating);
4923 return {
4924 reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),
4925 floating: {
4926 x: 0,
4927 y: 0,
4928 width: floatingDimensions.width,
4929 height: floatingDimensions.height
4930 }
4931 };
4932 };
4933 function isRTL(element) {
4934 return getComputedStyle2(element).direction === "rtl";
4935 }
4936 var platform2 = {
4937 convertOffsetParentRelativeRectToViewportRelativeRect,
4938 getDocumentElement,
4939 getClippingRect,
4940 getOffsetParent,
4941 getElementRects,
4942 getClientRects,
4943 getDimensions,
4944 getScale,
4945 isElement,
4946 isRTL
4947 };
4948 function rectsAreEqual(a, b) {
4949 return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;
4950 }
4951 function observeMove(element, onMove, ancestorResize) {
4952 let io = null;
4953 let timeoutId;
4954 const root = getDocumentElement(element);
4955 function cleanup() {
4956 var _io;
4957 clearTimeout(timeoutId);
4958 (_io = io) == null || _io.disconnect();
4959 io = null;
4960 }
4961 function refresh(skip, threshold) {
4962 if (skip === void 0) {
4963 skip = false;
4964 }
4965 if (threshold === void 0) {
4966 threshold = 1;
4967 }
4968 cleanup();
4969 const elementRectForRootMargin = element.getBoundingClientRect();
4970 const {
4971 left,
4972 top,
4973 width,
4974 height
4975 } = elementRectForRootMargin;
4976 if (!skip) {
4977 onMove();
4978 }
4979 if (!width || !height) {
4980 return;
4981 }
4982 const insetTop = floor(top);
4983 const insetRight = floor(root.clientWidth - (left + width));
4984 const insetBottom = floor(root.clientHeight - (top + height));
4985 const insetLeft = floor(left);
4986 const rootMargin = -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px";
4987 const options = {
4988 rootMargin,
4989 threshold: max(0, min(1, threshold)) || 1
4990 };
4991 let isFirstUpdate = true;
4992 function handleObserve(entries) {
4993 const ratio = entries[0].intersectionRatio;
4994 if (!rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {
4995 return refresh();
4996 }
4997 if (ratio !== threshold) {
4998 if (!isFirstUpdate) {
4999 return refresh();
5000 }
5001 if (!ratio) {
5002 timeoutId = setTimeout(() => {
5003 refresh(false, 1e-7);
5004 }, 1e3);
5005 } else {
5006 refresh(false, ratio);
5007 }
5008 }
5009 isFirstUpdate = false;
5010 }
5011 try {
5012 io = new IntersectionObserver(handleObserve, {
5013 ...options,
5014 // Handle <iframe>s
5015 root: root.ownerDocument
5016 });
5017 } catch (_e) {
5018 io = new IntersectionObserver(handleObserve, options);
5019 }
5020 io.observe(element);
5021 }
5022 const win = getWindow(element);
5023 const handleResize = () => refresh(ancestorResize);
5024 win.addEventListener("resize", handleResize);
5025 refresh(true);
5026 return () => {
5027 win.removeEventListener("resize", handleResize);
5028 cleanup();
5029 };
5030 }
5031 function autoUpdate(reference, floating, update2, options) {
5032 if (options === void 0) {
5033 options = {};
5034 }
5035 const {
5036 ancestorScroll = true,
5037 ancestorResize = true,
5038 elementResize = typeof ResizeObserver === "function",
5039 layoutShift = typeof IntersectionObserver === "function",
5040 animationFrame = false
5041 } = options;
5042 const referenceEl = unwrapElement(reference);
5043 const ancestors = ancestorScroll || ancestorResize ? [...referenceEl ? getOverflowAncestors(referenceEl) : [], ...floating ? getOverflowAncestors(floating) : []] : [];
5044 ancestors.forEach((ancestor) => {
5045 ancestorScroll && ancestor.addEventListener("scroll", update2);
5046 ancestorResize && ancestor.addEventListener("resize", update2);
5047 });
5048 const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update2, ancestorResize) : null;
5049 let reobserveFrame = -1;
5050 let resizeObserver = null;
5051 if (elementResize) {
5052 resizeObserver = new ResizeObserver((_ref) => {
5053 let [firstEntry] = _ref;
5054 if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {
5055 resizeObserver.unobserve(floating);
5056 cancelAnimationFrame(reobserveFrame);
5057 reobserveFrame = requestAnimationFrame(() => {
5058 var _resizeObserver;
5059 (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);
5060 });
5061 }
5062 update2();
5063 });
5064 if (referenceEl && !animationFrame) {
5065 resizeObserver.observe(referenceEl);
5066 }
5067 if (floating) {
5068 resizeObserver.observe(floating);
5069 }
5070 }
5071 let frameId;
5072 let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;
5073 if (animationFrame) {
5074 frameLoop();
5075 }
5076 function frameLoop() {
5077 const nextRefRect = getBoundingClientRect(reference);
5078 if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {
5079 update2();
5080 }
5081 prevRefRect = nextRefRect;
5082 frameId = requestAnimationFrame(frameLoop);
5083 }
5084 update2();
5085 return () => {
5086 var _resizeObserver2;
5087 ancestors.forEach((ancestor) => {
5088 ancestorScroll && ancestor.removeEventListener("scroll", update2);
5089 ancestorResize && ancestor.removeEventListener("resize", update2);
5090 });
5091 cleanupIo == null || cleanupIo();
5092 (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();
5093 resizeObserver = null;
5094 if (animationFrame) {
5095 cancelAnimationFrame(frameId);
5096 }
5097 };
5098 }
5099 var offset2 = offset;
5100 var shift2 = shift;
5101 var flip2 = flip;
5102 var size2 = size;
5103 var limitShift2 = limitShift;
5104 var computePosition2 = (reference, floating, options) => {
5105 const cache = /* @__PURE__ */ new Map();
5106 const mergedOptions = options != null ? options : {};
5107 const platformWithCache = {
5108 ...platform2,
5109 ...mergedOptions.platform,
5110 _c: cache
5111 };
5112 return computePosition(reference, floating, {
5113 ...mergedOptions,
5114 platform: platformWithCache
5115 });
5116 };
5117
5118 // node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs
5119 var React21 = __toESM(require_react(), 1);
5120 var import_react2 = __toESM(require_react(), 1);
5121 var ReactDOM3 = __toESM(require_react_dom(), 1);
5122 var isClient = typeof document !== "undefined";
5123 var noop2 = function noop3() {
5124 };
5125 var index = isClient ? import_react2.useLayoutEffect : noop2;
5126 function deepEqual(a, b) {
5127 if (a === b) {
5128 return true;
5129 }
5130 if (typeof a !== typeof b) {
5131 return false;
5132 }
5133 if (typeof a === "function" && a.toString() === b.toString()) {
5134 return true;
5135 }
5136 let length;
5137 let i;
5138 let keys;
5139 if (a && b && typeof a === "object") {
5140 if (Array.isArray(a)) {
5141 length = a.length;
5142 if (length !== b.length) return false;
5143 for (i = length; i-- !== 0; ) {
5144 if (!deepEqual(a[i], b[i])) {
5145 return false;
5146 }
5147 }
5148 return true;
5149 }
5150 keys = Object.keys(a);
5151 length = keys.length;
5152 if (length !== Object.keys(b).length) {
5153 return false;
5154 }
5155 for (i = length; i-- !== 0; ) {
5156 if (!{}.hasOwnProperty.call(b, keys[i])) {
5157 return false;
5158 }
5159 }
5160 for (i = length; i-- !== 0; ) {
5161 const key = keys[i];
5162 if (key === "_owner" && a.$$typeof) {
5163 continue;
5164 }
5165 if (!deepEqual(a[key], b[key])) {
5166 return false;
5167 }
5168 }
5169 return true;
5170 }
5171 return a !== a && b !== b;
5172 }
5173 function getDPR(element) {
5174 if (typeof window === "undefined") {
5175 return 1;
5176 }
5177 const win = element.ownerDocument.defaultView || window;
5178 return win.devicePixelRatio || 1;
5179 }
5180 function roundByDPR(element, value) {
5181 const dpr = getDPR(element);
5182 return Math.round(value * dpr) / dpr;
5183 }
5184 function useLatestRef(value) {
5185 const ref = React21.useRef(value);
5186 index(() => {
5187 ref.current = value;
5188 });
5189 return ref;
5190 }
5191 function useFloating(options) {
5192 if (options === void 0) {
5193 options = {};
5194 }
5195 const {
5196 placement = "bottom",
5197 strategy = "absolute",
5198 middleware = [],
5199 platform: platform3,
5200 elements: {
5201 reference: externalReference,
5202 floating: externalFloating
5203 } = {},
5204 transform = true,
5205 whileElementsMounted,
5206 open: open2
5207 } = options;
5208 const [data, setData] = React21.useState({
5209 x: 0,
5210 y: 0,
5211 strategy,
5212 placement,
5213 middlewareData: {},
5214 isPositioned: false
5215 });
5216 const [latestMiddleware, setLatestMiddleware] = React21.useState(middleware);
5217 if (!deepEqual(latestMiddleware, middleware)) {
5218 setLatestMiddleware(middleware);
5219 }
5220 const [_reference, _setReference] = React21.useState(null);
5221 const [_floating, _setFloating] = React21.useState(null);
5222 const setReference = React21.useCallback((node) => {
5223 if (node !== referenceRef.current) {
5224 referenceRef.current = node;
5225 _setReference(node);
5226 }
5227 }, []);
5228 const setFloating = React21.useCallback((node) => {
5229 if (node !== floatingRef.current) {
5230 floatingRef.current = node;
5231 _setFloating(node);
5232 }
5233 }, []);
5234 const referenceEl = externalReference || _reference;
5235 const floatingEl = externalFloating || _floating;
5236 const referenceRef = React21.useRef(null);
5237 const floatingRef = React21.useRef(null);
5238 const dataRef = React21.useRef(data);
5239 const hasWhileElementsMounted = whileElementsMounted != null;
5240 const whileElementsMountedRef = useLatestRef(whileElementsMounted);
5241 const platformRef = useLatestRef(platform3);
5242 const openRef = useLatestRef(open2);
5243 const update2 = React21.useCallback(() => {
5244 if (!referenceRef.current || !floatingRef.current) {
5245 return;
5246 }
5247 const config = {
5248 placement,
5249 strategy,
5250 middleware: latestMiddleware
5251 };
5252 if (platformRef.current) {
5253 config.platform = platformRef.current;
5254 }
5255 computePosition2(referenceRef.current, floatingRef.current, config).then((data2) => {
5256 const fullData = {
5257 ...data2,
5258 // The floating element's position may be recomputed while it's closed
5259 // but still mounted (such as when transitioning out). To ensure
5260 // `isPositioned` will be `false` initially on the next open, avoid
5261 // setting it to `true` when `open === false` (must be specified).
5262 isPositioned: openRef.current !== false
5263 };
5264 if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {
5265 dataRef.current = fullData;
5266 ReactDOM3.flushSync(() => {
5267 setData(fullData);
5268 });
5269 }
5270 });
5271 }, [latestMiddleware, placement, strategy, platformRef, openRef]);
5272 index(() => {
5273 if (open2 === false && dataRef.current.isPositioned) {
5274 dataRef.current.isPositioned = false;
5275 setData((data2) => ({
5276 ...data2,
5277 isPositioned: false
5278 }));
5279 }
5280 }, [open2]);
5281 const isMountedRef = React21.useRef(false);
5282 index(() => {
5283 isMountedRef.current = true;
5284 return () => {
5285 isMountedRef.current = false;
5286 };
5287 }, []);
5288 index(() => {
5289 if (referenceEl) referenceRef.current = referenceEl;
5290 if (floatingEl) floatingRef.current = floatingEl;
5291 if (referenceEl && floatingEl) {
5292 if (whileElementsMountedRef.current) {
5293 return whileElementsMountedRef.current(referenceEl, floatingEl, update2);
5294 }
5295 update2();
5296 }
5297 }, [referenceEl, floatingEl, update2, whileElementsMountedRef, hasWhileElementsMounted]);
5298 const refs = React21.useMemo(() => ({
5299 reference: referenceRef,
5300 floating: floatingRef,
5301 setReference,
5302 setFloating
5303 }), [setReference, setFloating]);
5304 const elements = React21.useMemo(() => ({
5305 reference: referenceEl,
5306 floating: floatingEl
5307 }), [referenceEl, floatingEl]);
5308 const floatingStyles = React21.useMemo(() => {
5309 const initialStyles = {
5310 position: strategy,
5311 left: 0,
5312 top: 0
5313 };
5314 if (!elements.floating) {
5315 return initialStyles;
5316 }
5317 const x2 = roundByDPR(elements.floating, data.x);
5318 const y2 = roundByDPR(elements.floating, data.y);
5319 if (transform) {
5320 return {
5321 ...initialStyles,
5322 transform: "translate(" + x2 + "px, " + y2 + "px)",
5323 ...getDPR(elements.floating) >= 1.5 && {
5324 willChange: "transform"
5325 }
5326 };
5327 }
5328 return {
5329 position: strategy,
5330 left: x2,
5331 top: y2
5332 };
5333 }, [strategy, transform, elements.floating, data.x, data.y]);
5334 return React21.useMemo(() => ({
5335 ...data,
5336 update: update2,
5337 refs,
5338 elements,
5339 floatingStyles
5340 }), [data, update2, refs, elements, floatingStyles]);
5341 }
5342 var offset3 = (options, deps) => {
5343 const result = offset2(options);
5344 return {
5345 name: result.name,
5346 fn: result.fn,
5347 options: [options, deps]
5348 };
5349 };
5350 var shift3 = (options, deps) => {
5351 const result = shift2(options);
5352 return {
5353 name: result.name,
5354 fn: result.fn,
5355 options: [options, deps]
5356 };
5357 };
5358 var limitShift3 = (options, deps) => {
5359 const result = limitShift2(options);
5360 return {
5361 fn: result.fn,
5362 options: [options, deps]
5363 };
5364 };
5365 var flip3 = (options, deps) => {
5366 const result = flip2(options);
5367 return {
5368 name: result.name,
5369 fn: result.fn,
5370 options: [options, deps]
5371 };
5372 };
5373 var size3 = (options, deps) => {
5374 const result = size2(options);
5375 return {
5376 name: result.name,
5377 fn: result.fn,
5378 options: [options, deps]
5379 };
5380 };
5381
5382 // node_modules/@base-ui/react/utils/popups/popupHandle.mjs
5383 var BasePopupHandle = class {
5384 /**
5385 * Stores of every root currently using this handle, in attach order. A handle is meant to be used
5386 * by a single mounted root, but roots can transiently overlap (e.g. during an animated route
5387 * transition), so this stack lets `attachStore`'s cleanup restore the previous root instead of
5388 * leaving a still-mounted root uncontrollable when a newer overlapping root detaches first.
5389 */
5390 attachedStores = [];
5391 /**
5392 * Store of the root that currently controls the handle: the most recently attached one still
5393 * mounted, or `null` when no root is attached. Imperative methods are no-ops while this is `null`.
5394 */
5395 attachedStoreValue = null;
5396 /**
5397 * Listeners notified when `attachedStore` changes, so detached triggers can follow the store pointer.
5398 */
5399 storeListeners = /* @__PURE__ */ new Set();
5400 /**
5401 * Creates a handle backed by the store used while no root is attached.
5402 *
5403 * @param fallbackStore Inert, closed store handed to detached triggers while no root is attached,
5404 * so they can render and register without a mounted root. Triggers register into whichever store
5405 * `store` currently resolves to, so while detached they live in this store's trigger map and
5406 * migrate themselves to the root's store (and back) as it attaches/detaches.
5407 * @param componentName Component name used to prefix dev warnings, e.g. `'Menu'` produces
5408 * `MenuHandle.open()` in warning text.
5409 * @param throwOnMissingTrigger Whether `open(triggerId)` throws when no trigger with that id is
5410 * registered. Anchored popups (Menu, Popover, Tooltip, PreviewCard) need a trigger to anchor to,
5411 * so they throw; Dialog is not anchored and instead opens unassociated with a dev warning.
5412 */
5413 constructor(fallbackStore, componentName, throwOnMissingTrigger = true) {
5414 this.fallbackStore = fallbackStore;
5415 this.componentName = componentName;
5416 this.throwOnMissingTrigger = throwOnMissingTrigger;
5417 }
5418 get attachedStore() {
5419 return this.attachedStoreValue;
5420 }
5421 /**
5422 * Store that detached triggers read from: the attached root's store, or an inert fallback store
5423 * used while no root is attached.
5424 * @internal
5425 */
5426 get store() {
5427 return this.attachedStoreValue ?? this.fallbackStore;
5428 }
5429 /**
5430 * Stable fallback store used for server rendering and hydration. Root stores cannot be recorded on
5431 * the handle during render because a handle can be shared by concurrent server-rendered requests.
5432 * @internal
5433 */
5434 get serverStore() {
5435 return this.fallbackStore;
5436 }
5437 /**
5438 * Subscribes to changes of the attached store pointer so detached triggers re-render and re-bind
5439 * when a root attaches or detaches. Returns a function that removes the listener.
5440 * @internal
5441 */
5442 subscribeStore(listener) {
5443 this.storeListeners.add(listener);
5444 return () => {
5445 this.storeListeners.delete(listener);
5446 };
5447 }
5448 /**
5449 * Points the handle at a root's store and notifies subscribers so detached triggers re-render and
5450 * re-register into it (their registration effect migrates them when the store pointer changes).
5451 * Returns a cleanup function that detaches the store again.
5452 * @internal
5453 */
5454 attachStore(newStore) {
5455 this.attachedStores.push(newStore);
5456 this.setActiveStore(newStore);
5457 if (true) {
5458 if (this.attachedStores.length > 1) {
5459 const dev = this;
5460 (dev.overlapWarningFrame ??= AnimationFrame.create()).request(() => {
5461 if (this.attachedStores.length > 1) {
5462 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.");
5463 }
5464 });
5465 }
5466 }
5467 return () => {
5468 const index2 = this.attachedStores.lastIndexOf(newStore);
5469 if (index2 !== -1) {
5470 this.attachedStores.splice(index2, 1);
5471 }
5472 this.setActiveStore(this.attachedStores[this.attachedStores.length - 1] ?? null);
5473 };
5474 }
5475 /**
5476 * Sets the store that currently controls the handle and notifies subscribers when it changes, so
5477 * detached triggers re-render and migrate their registration to the new store.
5478 */
5479 setActiveStore(store) {
5480 if (this.attachedStoreValue !== store) {
5481 this.attachedStoreValue = store;
5482 this.storeListeners.forEach((listener) => {
5483 listener();
5484 });
5485 }
5486 }
5487 /**
5488 * Opens the attached root's store and associates it with the trigger with the given id, or a
5489 * no-op (with a dev warning) while no root is attached. Shared by every concrete handle's public
5490 * `open()` method, which only narrows the parameter type.
5491 *
5492 * When a trigger id is given but no matching trigger is registered, anchored popups throw (see
5493 * `throwOnMissingTrigger`); Dialog opens unassociated with a dev warning instead.
5494 *
5495 * This method should only be called in an event handler or an effect (not during rendering).
5496 *
5497 * @param triggerId ID of the trigger to associate with the popup, or `null`/`undefined` to open
5498 * without associating any trigger.
5499 */
5500 openByTrigger(triggerId) {
5501 const attachedStore = this.attachedStore;
5502 if (attachedStore === null) {
5503 if (true) {
5504 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.`);
5505 }
5506 return;
5507 }
5508 let triggerElement;
5509 if (triggerId) {
5510 for (let i = this.attachedStores.length - 1; i >= 0 && !triggerElement; i -= 1) {
5511 triggerElement = this.attachedStores[i].context.triggerElements.getById(triggerId);
5512 }
5513 triggerElement ??= this.fallbackStore.context.triggerElements.getById(triggerId);
5514 }
5515 if (triggerId && !triggerElement) {
5516 if (this.throwOnMissingTrigger) {
5517 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));
5518 }
5519 if (true) {
5520 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.`);
5521 }
5522 }
5523 attachedStore.setOpen(true, createChangeEventDetails(reason_parts_exports.imperativeAction, void 0, triggerElement));
5524 }
5525 /**
5526 * Closes the popup by setting the attached root's store to closed, or a no-op (with a dev warning)
5527 * while no root is attached. Shared by every concrete handle's public `close()` method.
5528 *
5529 * This method should only be called in an event handler or an effect (not during rendering).
5530 */
5531 closePopup() {
5532 const attachedStore = this.attachedStore;
5533 if (attachedStore === null) {
5534 if (true) {
5535 console.warn(`Base UI: ${this.componentName}Handle.close() was called while no root using this handle is mounted. The call was ignored.`);
5536 }
5537 return;
5538 }
5539 attachedStore.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction));
5540 }
5541 };
5542
5543 // node_modules/@base-ui/react/utils/popups/popupStoreUtils.mjs
5544 var React26 = __toESM(require_react(), 1);
5545 var ReactDOM4 = __toESM(require_react_dom(), 1);
5546
5547 // node_modules/@base-ui/react/floating-ui-react/hooks/useSyncedFloatingRootContext.mjs
5548 var React25 = __toESM(require_react(), 1);
5549
5550 // node_modules/@base-ui/utils/store/useStore.mjs
5551 var React23 = __toESM(require_react(), 1);
5552 var import_shim = __toESM(require_shim(), 1);
5553 var import_with_selector = __toESM(require_with_selector(), 1);
5554
5555 // node_modules/@base-ui/utils/fastHooks.mjs
5556 var React22 = __toESM(require_react(), 1);
5557 var hooks = [];
5558 var currentInstance = void 0;
5559 function getInstance() {
5560 return currentInstance;
5561 }
5562 function register(hook) {
5563 hooks.push(hook);
5564 }
5565 function fastComponent(fn) {
5566 const FastComponent = (props, forwardedRef) => {
5567 const instance = useRefWithInit(createInstance).current;
5568 let result;
5569 try {
5570 currentInstance = instance;
5571 for (const hook of hooks) {
5572 hook.before(instance);
5573 }
5574 result = fn(props, forwardedRef);
5575 for (const hook of hooks) {
5576 hook.after(instance);
5577 }
5578 instance.didInitialize = true;
5579 } finally {
5580 currentInstance = void 0;
5581 }
5582 return result;
5583 };
5584 FastComponent.displayName = fn.displayName || fn.name;
5585 return FastComponent;
5586 }
5587 function fastComponentRef(fn) {
5588 return /* @__PURE__ */ React22.forwardRef(fastComponent(fn));
5589 }
5590 function createInstance() {
5591 return {
5592 didInitialize: false
5593 };
5594 }
5595
5596 // node_modules/@base-ui/utils/store/useStore.mjs
5597 var canUseRawUseSyncExternalStore = isReactVersionAtLeast(19);
5598 var useStoreImplementation = canUseRawUseSyncExternalStore ? useStoreFast : useStoreLegacy;
5599 function useStore(store, selector, a1, a2, a3) {
5600 return useStoreImplementation(store, selector, a1, a2, a3);
5601 }
5602 function useStoreR19(store, selector, a1, a2, a3) {
5603 const getSelection = React23.useCallback(() => selector(store.getSnapshot(), a1, a2, a3), [store, selector, a1, a2, a3]);
5604 return (0, import_shim.useSyncExternalStore)(store.subscribe, getSelection, getSelection);
5605 }
5606 register({
5607 before(instance) {
5608 instance.syncIndex = 0;
5609 if (!instance.didInitialize) {
5610 instance.syncTick = 1;
5611 instance.syncHooks = [];
5612 instance.didChangeStore = true;
5613 instance.getSnapshot = () => {
5614 let didChange2 = false;
5615 for (let i = 0; i < instance.syncHooks.length; i += 1) {
5616 const hook = instance.syncHooks[i];
5617 const value = hook.selector(hook.store.state, hook.a1, hook.a2, hook.a3);
5618 if (!Object.is(hook.value, value)) {
5619 didChange2 = true;
5620 hook.value = value;
5621 }
5622 }
5623 if (didChange2) {
5624 instance.syncTick += 1;
5625 }
5626 return instance.syncTick;
5627 };
5628 }
5629 },
5630 after(instance) {
5631 if (instance.syncHooks.length > 0) {
5632 if (instance.didChangeStore) {
5633 instance.didChangeStore = false;
5634 instance.subscribe = (onStoreChange) => {
5635 const stores = /* @__PURE__ */ new Set();
5636 for (const hook of instance.syncHooks) {
5637 stores.add(hook.store);
5638 }
5639 const unsubscribes = [];
5640 for (const store of stores) {
5641 unsubscribes.push(store.subscribe(onStoreChange));
5642 }
5643 return () => {
5644 for (const unsubscribe of unsubscribes) {
5645 unsubscribe();
5646 }
5647 };
5648 };
5649 }
5650 (0, import_shim.useSyncExternalStore)(instance.subscribe, instance.getSnapshot, instance.getSnapshot);
5651 }
5652 }
5653 });
5654 function useStoreFast(store, selector, a1, a2, a3) {
5655 const instance = getInstance();
5656 if (!instance) {
5657 return useStoreR19(store, selector, a1, a2, a3);
5658 }
5659 const index2 = instance.syncIndex;
5660 instance.syncIndex += 1;
5661 let hook;
5662 if (!instance.didInitialize) {
5663 hook = {
5664 store,
5665 selector,
5666 a1,
5667 a2,
5668 a3,
5669 value: selector(store.getSnapshot(), a1, a2, a3)
5670 };
5671 instance.syncHooks.push(hook);
5672 } else {
5673 hook = instance.syncHooks[index2];
5674 if (hook.store !== store || hook.selector !== selector || !Object.is(hook.a1, a1) || !Object.is(hook.a2, a2) || !Object.is(hook.a3, a3)) {
5675 if (hook.store !== store) {
5676 instance.didChangeStore = true;
5677 }
5678 hook.store = store;
5679 hook.selector = selector;
5680 hook.a1 = a1;
5681 hook.a2 = a2;
5682 hook.a3 = a3;
5683 hook.value = selector(store.getSnapshot(), a1, a2, a3);
5684 }
5685 }
5686 return hook.value;
5687 }
5688 function useStoreLegacy(store, selector, a1, a2, a3) {
5689 return (0, import_with_selector.useSyncExternalStoreWithSelector)(store.subscribe, store.getSnapshot, store.getSnapshot, (state) => selector(state, a1, a2, a3));
5690 }
5691
5692 // node_modules/@base-ui/utils/store/Store.mjs
5693 var Store = class {
5694 /**
5695 * Creates a store with the given initial state, constructing the class it is called on.
5696 * Calling it on a generic base class (e.g. `ReactStore.create(...)`) constructs that
5697 * class but degrades the inferred instance type to `Store`; use `new` there instead.
5698 */
5699 static create(state) {
5700 return new this(state);
5701 }
5702 /**
5703 * The current state of the store.
5704 * This property is updated immediately when the state changes as a result of calling {@link setState}, {@link update}, or {@link set}.
5705 * 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).
5706 * The values can be used directly (to avoid subscribing to the store) in effects or event handlers.
5707 *
5708 * Do not modify properties in state directly. Instead, use the provided methods to ensure proper state management and listener notification.
5709 */
5710 // Internal state to handle recursive `setState()` calls
5711 constructor(state) {
5712 this.state = state;
5713 this.listeners = /* @__PURE__ */ new Set();
5714 this.updateTick = 0;
5715 }
5716 /**
5717 * Registers a listener that will be called whenever the store's state changes.
5718 *
5719 * @param fn The listener function to be called on state changes.
5720 * @returns A function to unsubscribe the listener.
5721 */
5722 subscribe = (fn) => {
5723 this.listeners.add(fn);
5724 return () => {
5725 this.listeners.delete(fn);
5726 };
5727 };
5728 /**
5729 * Returns the current state of the store.
5730 */
5731 getSnapshot = () => {
5732 return this.state;
5733 };
5734 /**
5735 * Updates the entire store's state and notifies all registered listeners.
5736 *
5737 * @param newState The new state to set for the store.
5738 */
5739 setState(newState) {
5740 if (this.state === newState) {
5741 return;
5742 }
5743 this.state = newState;
5744 this.updateTick += 1;
5745 const currentTick = this.updateTick;
5746 for (const listener of this.listeners) {
5747 if (currentTick !== this.updateTick) {
5748 return;
5749 }
5750 listener(newState);
5751 }
5752 }
5753 /**
5754 * Merges the provided changes into the current state and notifies listeners if there are changes.
5755 * Each value must match its state key. Pass an exact known subset rather than a broad
5756 * `Partial<State>`, which may contain `undefined` for required state fields.
5757 *
5758 * @param changes An object containing the changes to apply to the current state.
5759 */
5760 update(changes) {
5761 for (const key in changes) {
5762 if (!Object.is(this.state[key], changes[key])) {
5763 this.setState({
5764 ...this.state,
5765 ...changes
5766 });
5767 return;
5768 }
5769 }
5770 }
5771 /**
5772 * Sets a specific key in the store's state to a new value and notifies listeners if the value has changed.
5773 *
5774 * @param key The key in the store's state to update.
5775 * @param value The new value to set for the specified key.
5776 */
5777 set(key, value) {
5778 if (!Object.is(this.state[key], value)) {
5779 this.setState({
5780 ...this.state,
5781 [key]: value
5782 });
5783 }
5784 }
5785 /**
5786 * Gives the state a new reference and updates all registered listeners.
5787 */
5788 notifyAll() {
5789 const newState = {
5790 ...this.state
5791 };
5792 this.setState(newState);
5793 }
5794 use(selector, a1, a2, a3) {
5795 return useStore(this, selector, a1, a2, a3);
5796 }
5797 };
5798
5799 // node_modules/@base-ui/utils/store/ReactStore.mjs
5800 var React24 = __toESM(require_react(), 1);
5801 var ReactStore = class extends Store {
5802 /**
5803 * Creates a new ReactStore instance.
5804 *
5805 * @param state Initial state of the store.
5806 * @param context Non-reactive context values.
5807 * @param selectors Optional selectors for use with `useState`.
5808 */
5809 constructor(state, context = {}, selectors3) {
5810 super(state);
5811 this.context = context;
5812 this.selectors = selectors3;
5813 }
5814 /**
5815 * Non-reactive values such as refs, callbacks, etc.
5816 */
5817 /**
5818 * Synchronizes a single external value into the store.
5819 *
5820 * Note that the while the value in `state` is updated immediately, the value returned
5821 * by `useState` is updated before the next render (similarly to React's `useState`).
5822 */
5823 useSyncedValue(key, value) {
5824 React24.useDebugValue(key);
5825 const store = this;
5826 useIsoLayoutEffect(() => {
5827 if (store.state[key] !== value) {
5828 store.set(key, value);
5829 }
5830 }, [store, key, value]);
5831 }
5832 /**
5833 * Synchronizes a single external value into the store and
5834 * cleans it up (sets to `undefined`) on unmount.
5835 *
5836 * Note that the while the value in `state` is updated immediately, the value returned
5837 * by `useState` is updated before the next render (similarly to React's `useState`).
5838 */
5839 useSyncedValueWithCleanup(key, value) {
5840 const store = this;
5841 useIsoLayoutEffect(() => {
5842 if (store.state[key] !== value) {
5843 store.set(key, value);
5844 }
5845 return () => {
5846 store.set(key, void 0);
5847 };
5848 }, [store, key, value]);
5849 }
5850 /**
5851 * Synchronizes multiple external values into the store.
5852 * Each value must match its state key. Pass an exact known subset rather than a broad
5853 * `Partial<State>`, which may contain `undefined` for required state fields.
5854 *
5855 * Note that the while the values in `state` are updated immediately, the values returned
5856 * by `useState` are updated before the next render (similarly to React's `useState`).
5857 *
5858 * @param statePart An exact subset of state fields to synchronize. Unknown keys are not accepted.
5859 */
5860 useSyncedValues(statePart) {
5861 const store = this;
5862 if (true) {
5863 React24.useDebugValue(statePart, (p2) => Object.keys(p2));
5864 const keys = React24.useRef(Object.keys(statePart)).current;
5865 const nextKeys = Object.keys(statePart);
5866 if (keys.length !== nextKeys.length || keys.some((key, index2) => key !== nextKeys[index2])) {
5867 console.error("ReactStore.useSyncedValues expects the same prop keys on every render. Keys should be stable.");
5868 }
5869 }
5870 const dependencies = Object.values(statePart);
5871 useIsoLayoutEffect(() => {
5872 store.update(statePart);
5873 }, [store, ...dependencies]);
5874 }
5875 /**
5876 * Registers a controllable prop pair (`controlled`, `defaultValue`) for a specific key. If `controlled`
5877 * is non-undefined, the store's state at `key` is updated to match `controlled`.
5878 */
5879 useControlledProp(key, controlled) {
5880 React24.useDebugValue(key);
5881 const store = this;
5882 const isControlled = controlled !== void 0;
5883 useIsoLayoutEffect(() => {
5884 if (isControlled && !Object.is(store.state[key], controlled)) {
5885 store.setState({
5886 ...store.state,
5887 [key]: controlled
5888 });
5889 }
5890 }, [store, key, controlled, isControlled]);
5891 if (true) {
5892 const cache = this.controlledValues ??= /* @__PURE__ */ new Map();
5893 if (!cache.has(key)) {
5894 cache.set(key, isControlled);
5895 }
5896 const previouslyControlled = cache.get(key);
5897 if (previouslyControlled !== void 0 && previouslyControlled !== isControlled) {
5898 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).`);
5899 }
5900 }
5901 }
5902 /** Gets the current value from the store using a selector with the provided key.
5903 *
5904 * @param key Key of the selector to use.
5905 */
5906 select(key, a1, a2, a3) {
5907 const selector = this.selectors[key];
5908 return selector(this.state, a1, a2, a3);
5909 }
5910 /**
5911 * Returns a value from the store's state using a selector function.
5912 * Used to subscribe to specific parts of the state.
5913 * This methods causes a rerender whenever the selected state changes.
5914 *
5915 * @param key Key of the selector to use.
5916 */
5917 useState(key, a1, a2, a3) {
5918 React24.useDebugValue(key);
5919 return useStore(this, this.selectors[key], a1, a2, a3);
5920 }
5921 /**
5922 * Wraps a function with `useStableCallback` to ensure it has a stable reference
5923 * and assigns it to the context.
5924 *
5925 * @param key Key of the event callback. Must be a function in the context.
5926 * @param fn Function to assign.
5927 */
5928 useContextCallback(key, fn) {
5929 React24.useDebugValue(key);
5930 const stableFunction = useStableCallback(fn ?? NOOP);
5931 this.context[key] = stableFunction;
5932 }
5933 /**
5934 * Returns a stable setter function for a specific key in the store's state.
5935 * It's commonly used to pass as a ref callback to React elements.
5936 *
5937 * @param key Key of the state to set.
5938 */
5939 useStateSetter(key) {
5940 const ref = React24.useRef(void 0);
5941 if (ref.current === void 0) {
5942 ref.current = (value) => {
5943 this.set(key, value);
5944 };
5945 }
5946 return ref.current;
5947 }
5948 /**
5949 * Observes changes derived from the store's selectors and calls the listener when the selected value changes.
5950 *
5951 * @param key Key of the selector to observe.
5952 * @param listener Listener function called when the selector result changes.
5953 */
5954 observe(selector, listener) {
5955 let selectFn;
5956 if (typeof selector === "function") {
5957 selectFn = selector;
5958 } else {
5959 selectFn = this.selectors[selector];
5960 }
5961 let prevValue = selectFn(this.state);
5962 listener(prevValue, prevValue, this);
5963 return this.subscribe((nextState) => {
5964 const nextValue = selectFn(nextState);
5965 if (!Object.is(prevValue, nextValue)) {
5966 const oldValue = prevValue;
5967 prevValue = nextValue;
5968 listener(nextValue, oldValue, this);
5969 }
5970 });
5971 }
5972 };
5973
5974 // node_modules/@base-ui/react/floating-ui-react/components/FloatingRootStore.mjs
5975 var selectors = {
5976 open: (state) => state.open,
5977 transitionStatus: (state) => state.transitionStatus,
5978 domReferenceElement: (state) => state.domReferenceElement,
5979 referenceElement: (state) => state.positionReference ?? state.referenceElement,
5980 floatingElement: (state) => state.floatingElement,
5981 floatingId: (state) => state.floatingId
5982 };
5983 var FloatingRootStore = class extends ReactStore {
5984 constructor(options) {
5985 const {
5986 syncOnly,
5987 nested,
5988 onOpenChange,
5989 triggerElements,
5990 ...initialState
5991 } = options;
5992 super({
5993 ...initialState,
5994 positionReference: initialState.referenceElement,
5995 domReferenceElement: initialState.referenceElement
5996 }, {
5997 onOpenChange,
5998 dataRef: {
5999 current: {}
6000 },
6001 events: createEventEmitter(),
6002 nested,
6003 triggerElements
6004 }, selectors);
6005 this.syncOnly = syncOnly;
6006 }
6007 /**
6008 * Syncs the event used by hover logic to distinguish hover-open from click-like interaction.
6009 */
6010 syncOpenEvent = (newOpen, event) => {
6011 if (!newOpen || !this.state.open || // Prevent a pending hover-open from overwriting a click-open event, while allowing
6012 // click events to upgrade a hover-open.
6013 event != null && isClickLikeEvent(event)) {
6014 this.context.dataRef.current.openEvent = newOpen ? event : void 0;
6015 }
6016 };
6017 /**
6018 * Runs the root-owned side effects for an open state change.
6019 */
6020 dispatchOpenChange = (newOpen, eventDetails) => {
6021 this.syncOpenEvent(newOpen, eventDetails.event);
6022 const details = {
6023 open: newOpen,
6024 reason: eventDetails.reason,
6025 nativeEvent: eventDetails.event,
6026 nested: this.context.nested,
6027 triggerElement: eventDetails.trigger
6028 };
6029 this.context.events.emit("openchange", details);
6030 };
6031 /**
6032 * Emits the `openchange` event through the internal event emitter and calls the `onOpenChange` handler with the provided arguments.
6033 *
6034 * @param newOpen The new open state.
6035 * @param eventDetails Details about the event that triggered the open state change.
6036 */
6037 setOpen = (newOpen, eventDetails) => {
6038 if (this.syncOnly) {
6039 this.context.onOpenChange?.(newOpen, eventDetails);
6040 return;
6041 }
6042 this.dispatchOpenChange(newOpen, eventDetails);
6043 this.context.onOpenChange?.(newOpen, eventDetails);
6044 };
6045 };
6046
6047 // node_modules/@base-ui/react/floating-ui-react/hooks/useSyncedFloatingRootContext.mjs
6048 function useSyncedFloatingRootContext(options) {
6049 const {
6050 popupStore,
6051 treatPopupAsFloatingElement = false,
6052 floatingRootContext: floatingRootContextProp,
6053 floatingId,
6054 nested,
6055 onOpenChange
6056 } = options;
6057 const open2 = popupStore.useState("open");
6058 const referenceElement = popupStore.useState("activeTriggerElement");
6059 const floatingElement = popupStore.useState(treatPopupAsFloatingElement ? "popupElement" : "positionerElement");
6060 const triggerElements = popupStore.context.triggerElements;
6061 const handleOpenChange = onOpenChange;
6062 const internalStoreRef = React25.useRef(null);
6063 if (floatingRootContextProp === void 0 && internalStoreRef.current === null) {
6064 internalStoreRef.current = new FloatingRootStore({
6065 open: open2,
6066 transitionStatus: void 0,
6067 referenceElement,
6068 floatingElement,
6069 triggerElements,
6070 onOpenChange: handleOpenChange,
6071 floatingId,
6072 syncOnly: true,
6073 nested
6074 });
6075 }
6076 const store = floatingRootContextProp ?? internalStoreRef.current;
6077 popupStore.useSyncedValue("floatingId", floatingId);
6078 useIsoLayoutEffect(() => {
6079 const valuesToSync = {
6080 open: open2,
6081 floatingId,
6082 referenceElement,
6083 floatingElement
6084 };
6085 if (isElement(referenceElement)) {
6086 valuesToSync.domReferenceElement = referenceElement;
6087 }
6088 if (store.state.positionReference === store.state.referenceElement) {
6089 valuesToSync.positionReference = referenceElement;
6090 }
6091 store.update(valuesToSync);
6092 }, [open2, floatingId, referenceElement, floatingElement, store]);
6093 store.context.onOpenChange = handleOpenChange;
6094 store.context.nested = nested;
6095 return store;
6096 }
6097
6098 // node_modules/@base-ui/react/utils/popups/popupStoreUtils.mjs
6099 var FOCUSABLE_POPUP_PROPS = {
6100 tabIndex: -1,
6101 [FOCUSABLE_ATTRIBUTE]: ""
6102 };
6103 function usePopupRootStore(createStore, treatPopupAsFloatingElement = false) {
6104 const floatingId = useId();
6105 const nested = useFloatingParentNodeId() != null;
6106 const store = useRefWithInit(() => createStore(floatingId, nested)).current;
6107 useSyncedFloatingRootContext({
6108 popupStore: store,
6109 treatPopupAsFloatingElement,
6110 floatingRootContext: store.state.floatingRootContext,
6111 floatingId,
6112 nested,
6113 onOpenChange: store.setOpen
6114 });
6115 return store;
6116 }
6117 function PopupHandleAttachment({
6118 handle,
6119 store
6120 }) {
6121 useIsoLayoutEffect(() => {
6122 return handle.attachStore(store);
6123 }, [handle, store]);
6124 return null;
6125 }
6126 function syncTriggerCount(store) {
6127 const triggerCount = store.context.triggerElements.size;
6128 if (store.select("open") && store.state.triggerCount !== triggerCount) {
6129 store.set("triggerCount", triggerCount);
6130 }
6131 }
6132 function useTriggerRegistration(id, store) {
6133 const registrationRef = React26.useRef(null);
6134 return useStableCallback((element) => {
6135 const registration = registrationRef.current;
6136 if (registration !== null) {
6137 if (registration.element === element && registration.store === store && registration.id === id) {
6138 return;
6139 }
6140 registrationRef.current = null;
6141 const registeredStore = registration.store;
6142 if (registeredStore.context.triggerElements.getById(registration.id) === registration.element) {
6143 registeredStore.context.triggerElements.delete(registration.id);
6144 syncTriggerCount(registeredStore);
6145 }
6146 }
6147 if (element !== null && id !== void 0) {
6148 registrationRef.current = {
6149 store,
6150 id,
6151 element
6152 };
6153 store.context.triggerElements.add(id, element);
6154 syncTriggerCount(store);
6155 }
6156 });
6157 }
6158 function createPopupOpenState(state, open2, trigger, preventUnmountOnClose = false) {
6159 let preventUnmountingOnClose = state.preventUnmountingOnClose;
6160 if (open2) {
6161 preventUnmountingOnClose = false;
6162 } else if (preventUnmountOnClose) {
6163 preventUnmountingOnClose = true;
6164 }
6165 const triggerId = trigger?.id ?? null;
6166 let activeTriggerId = state.activeTriggerId;
6167 let activeTriggerElement = state.activeTriggerElement;
6168 if (triggerId || open2) {
6169 activeTriggerId = triggerId;
6170 activeTriggerElement = trigger ?? null;
6171 }
6172 return {
6173 open: open2,
6174 preventUnmountingOnClose,
6175 activeTriggerId,
6176 activeTriggerElement
6177 };
6178 }
6179 function attachPreventUnmountOnClose(eventDetails) {
6180 let preventUnmountOnClose = false;
6181 eventDetails.preventUnmountOnClose = () => {
6182 preventUnmountOnClose = true;
6183 };
6184 return () => preventUnmountOnClose;
6185 }
6186 function applyPopupOpenChange(store, nextOpen, eventDetails, options = {}) {
6187 const reason = eventDetails.reason;
6188 const isHover = reason === reason_parts_exports.triggerHover;
6189 const isFocusOpen = nextOpen && reason === reason_parts_exports.triggerFocus;
6190 const isDismissClose = !nextOpen && (reason === reason_parts_exports.triggerPress || reason === reason_parts_exports.escapeKey);
6191 const shouldPreventUnmountOnClose = attachPreventUnmountOnClose(eventDetails);
6192 store.context.onOpenChange?.(nextOpen, eventDetails);
6193 if (eventDetails.isCanceled) {
6194 return;
6195 }
6196 options.onBeforeDispatch?.();
6197 store.state.floatingRootContext.dispatchOpenChange(nextOpen, eventDetails);
6198 const changeState = () => {
6199 const popupOpenState = createPopupOpenState(store.state, nextOpen, eventDetails.trigger, shouldPreventUnmountOnClose());
6200 const updatedState = {
6201 ...options.extraState,
6202 ...popupOpenState
6203 };
6204 if (isFocusOpen) {
6205 updatedState.instantType = "focus";
6206 } else if (isDismissClose) {
6207 updatedState.instantType = "dismiss";
6208 } else if (isHover) {
6209 updatedState.instantType = void 0;
6210 }
6211 store.update(updatedState);
6212 };
6213 if (isHover) {
6214 ReactDOM4.flushSync(changeState);
6215 } else {
6216 changeState();
6217 }
6218 }
6219 function useTriggerDataForwarding(triggerId, triggerElementRef, store, stateUpdates) {
6220 const isMountedByThisTrigger = store.useState("isMountedByTrigger", triggerId);
6221 const baseRegisterTrigger = useTriggerRegistration(triggerId, store);
6222 const applyTriggerData = useStableCallback((element) => {
6223 const open2 = store.select("open");
6224 const activeTriggerId = store.select("activeTriggerId");
6225 if (activeTriggerId === triggerId) {
6226 const changes = {
6227 activeTriggerElement: element,
6228 ...open2 ? stateUpdates : null
6229 };
6230 store.update(changes);
6231 return;
6232 }
6233 if (activeTriggerId == null && open2) {
6234 const changes = {
6235 activeTriggerId: triggerId ?? null,
6236 activeTriggerElement: element,
6237 ...stateUpdates
6238 };
6239 store.update(changes);
6240 }
6241 });
6242 const registerTrigger = useStableCallback((element) => {
6243 baseRegisterTrigger(element);
6244 if (element) {
6245 applyTriggerData(element);
6246 }
6247 });
6248 useIsoLayoutEffect(() => {
6249 registerTrigger(triggerElementRef.current);
6250 return () => registerTrigger(null);
6251 }, [registerTrigger, triggerElementRef, store, triggerId]);
6252 useIsoLayoutEffect(() => {
6253 if (isMountedByThisTrigger) {
6254 const changes = {
6255 activeTriggerElement: triggerElementRef.current,
6256 ...stateUpdates
6257 };
6258 store.update(changes);
6259 }
6260 }, [isMountedByThisTrigger, store, triggerElementRef, ...Object.values(stateUpdates)]);
6261 return {
6262 registerTrigger,
6263 isMountedByThisTrigger
6264 };
6265 }
6266 function useImplicitActiveTrigger(store, options = {}) {
6267 const {
6268 closeOnActiveTriggerUnmount = false
6269 } = options;
6270 const resolvedActiveTriggerIdRef = React26.useRef(null);
6271 const open2 = store.useState("open");
6272 const reactiveTriggerCount = store.useState("triggerCount");
6273 const activeTriggerId = store.useState("activeTriggerId");
6274 const reactiveActiveTriggerElement = store.useState("activeTriggerElement");
6275 useIsoLayoutEffect(() => {
6276 if (!open2) {
6277 resolvedActiveTriggerIdRef.current = null;
6278 if (store.state.triggerCount !== 0) {
6279 store.set("triggerCount", 0);
6280 }
6281 return;
6282 }
6283 const triggerCount = store.context.triggerElements.size;
6284 const stateUpdates = {};
6285 if (store.state.triggerCount !== triggerCount) {
6286 stateUpdates.triggerCount = triggerCount;
6287 }
6288 const currentActiveTriggerId = store.select("activeTriggerId");
6289 let lostActiveTriggerId = null;
6290 if (currentActiveTriggerId) {
6291 const activeTriggerElement = store.context.triggerElements.getById(currentActiveTriggerId);
6292 if (!activeTriggerElement) {
6293 for (const [triggerId, triggerElement] of store.context.triggerElements.entries()) {
6294 if (triggerElement === store.state.activeTriggerElement) {
6295 stateUpdates.activeTriggerId = triggerId;
6296 stateUpdates.activeTriggerElement = triggerElement;
6297 resolvedActiveTriggerIdRef.current = triggerId;
6298 break;
6299 }
6300 }
6301 if (stateUpdates.activeTriggerId === void 0) {
6302 if (resolvedActiveTriggerIdRef.current === currentActiveTriggerId) {
6303 lostActiveTriggerId = currentActiveTriggerId;
6304 } else {
6305 resolvedActiveTriggerIdRef.current = null;
6306 }
6307 }
6308 } else {
6309 resolvedActiveTriggerIdRef.current = currentActiveTriggerId;
6310 if (activeTriggerElement !== store.state.activeTriggerElement) {
6311 stateUpdates.activeTriggerElement = activeTriggerElement;
6312 }
6313 }
6314 } else {
6315 resolvedActiveTriggerIdRef.current = null;
6316 }
6317 if (!lostActiveTriggerId && !currentActiveTriggerId && triggerCount === 1) {
6318 const iteratorResult = store.context.triggerElements.entries().next();
6319 if (!iteratorResult.done) {
6320 const [implicitTriggerId, implicitTriggerElement] = iteratorResult.value;
6321 stateUpdates.activeTriggerId = implicitTriggerId;
6322 stateUpdates.activeTriggerElement = implicitTriggerElement;
6323 resolvedActiveTriggerIdRef.current = implicitTriggerId;
6324 }
6325 }
6326 if (stateUpdates.triggerCount !== void 0 || stateUpdates.activeTriggerId !== void 0 || stateUpdates.activeTriggerElement !== void 0) {
6327 store.update(stateUpdates);
6328 }
6329 if (lostActiveTriggerId) {
6330 if (closeOnActiveTriggerUnmount) {
6331 queueMicrotask(() => {
6332 if (store.select("open") && store.select("activeTriggerId") === lostActiveTriggerId && !store.context.triggerElements.getById(lostActiveTriggerId)) {
6333 const eventDetails = createChangeEventDetails(reason_parts_exports.none);
6334 store.setOpen(false, eventDetails);
6335 if (!eventDetails.isCanceled) {
6336 store.update({
6337 activeTriggerId: null,
6338 activeTriggerElement: null
6339 });
6340 }
6341 }
6342 });
6343 }
6344 }
6345 }, [open2, store, reactiveTriggerCount, activeTriggerId, reactiveActiveTriggerElement, closeOnActiveTriggerUnmount]);
6346 }
6347 function useOpenStateTransitions(open2, store, onUnmount, animateInitialOpen) {
6348 const {
6349 mounted,
6350 setMounted,
6351 transitionStatus
6352 } = useTransitionStatus(open2, false, false, animateInitialOpen);
6353 const preventUnmountingOnClose = store.useState("preventUnmountingOnClose");
6354 const syncedPreventUnmountingOnClose = open2 ? false : preventUnmountingOnClose;
6355 store.useSyncedValues({
6356 mounted,
6357 transitionStatus,
6358 preventUnmountingOnClose: syncedPreventUnmountingOnClose
6359 });
6360 const forceUnmount = useStableCallback(() => {
6361 setMounted(false);
6362 store.update({
6363 activeTriggerId: null,
6364 activeTriggerElement: null,
6365 mounted: false,
6366 preventUnmountingOnClose: false
6367 });
6368 onUnmount?.();
6369 store.context.onOpenChangeComplete?.(false);
6370 });
6371 useOpenChangeComplete({
6372 enabled: mounted && !open2 && !syncedPreventUnmountingOnClose,
6373 open: open2,
6374 ref: store.context.popupRef,
6375 onComplete() {
6376 if (!open2) {
6377 forceUnmount();
6378 }
6379 }
6380 });
6381 return {
6382 forceUnmount,
6383 transitionStatus
6384 };
6385 }
6386 function usePopupInteractionProps(store, statePart) {
6387 store.useSyncedValues(statePart);
6388 useIsoLayoutEffect(() => () => {
6389 store.update({
6390 activeTriggerProps: EMPTY_OBJECT,
6391 inactiveTriggerProps: EMPTY_OBJECT,
6392 popupProps: EMPTY_OBJECT
6393 });
6394 }, [store]);
6395 }
6396
6397 // node_modules/@base-ui/react/utils/popups/popupTriggerMap.mjs
6398 var devElementIdsByMap;
6399 function getDevElementIds(map) {
6400 devElementIdsByMap ??= /* @__PURE__ */ new WeakMap();
6401 let elementIds = devElementIdsByMap.get(map);
6402 if (!elementIds) {
6403 elementIds = /* @__PURE__ */ new WeakMap();
6404 devElementIdsByMap.set(map, elementIds);
6405 }
6406 return elementIds;
6407 }
6408 var PopupTriggerMap = class {
6409 constructor() {
6410 this.idMap = /* @__PURE__ */ new Map();
6411 }
6412 /**
6413 * Adds a trigger element with the given ID.
6414 *
6415 * Note: The provided element is assumed to not be registered under multiple IDs.
6416 */
6417 add(id, element) {
6418 if (true) {
6419 const elementIds = getDevElementIds(this);
6420 const existingId = elementIds.get(element);
6421 if (existingId !== void 0 && existingId !== id) {
6422 throw new Error("Base UI: A trigger element cannot be registered under multiple IDs in PopupTriggerMap.");
6423 }
6424 const previousElement = this.idMap.get(id);
6425 if (previousElement !== void 0 && previousElement !== element) {
6426 elementIds.delete(previousElement);
6427 }
6428 elementIds.set(element, id);
6429 }
6430 this.idMap.set(id, element);
6431 }
6432 /**
6433 * Removes the trigger element with the given ID.
6434 */
6435 delete(id) {
6436 if (true) {
6437 const element = this.idMap.get(id);
6438 if (element !== void 0) {
6439 devElementIdsByMap?.get(this)?.delete(element);
6440 }
6441 }
6442 this.idMap.delete(id);
6443 }
6444 /**
6445 * Whether the given element is registered as a trigger.
6446 */
6447 hasElement(element) {
6448 for (const registered of this.idMap.values()) {
6449 if (registered === element) {
6450 return true;
6451 }
6452 }
6453 return false;
6454 }
6455 /**
6456 * Whether there is a registered trigger element matching the given predicate.
6457 */
6458 hasMatchingElement(predicate) {
6459 for (const element of this.idMap.values()) {
6460 if (predicate(element)) {
6461 return true;
6462 }
6463 }
6464 return false;
6465 }
6466 /**
6467 * Returns the trigger element associated with the given ID, or undefined if no such element exists.
6468 */
6469 getById(id) {
6470 return this.idMap.get(id);
6471 }
6472 /**
6473 * Returns an iterable of all registered trigger entries, where each entry is a tuple of [id, element].
6474 */
6475 entries() {
6476 return this.idMap.entries();
6477 }
6478 /**
6479 * Returns an iterable of all registered trigger elements.
6480 */
6481 elements() {
6482 return this.idMap.values();
6483 }
6484 /**
6485 * Returns the number of registered trigger elements.
6486 */
6487 get size() {
6488 return this.idMap.size;
6489 }
6490 };
6491
6492 // node_modules/@base-ui/react/utils/popups/store.mjs
6493 function createInitialPopupStoreState(triggerElements, floatingId, nested = false) {
6494 return {
6495 open: false,
6496 openProp: void 0,
6497 mounted: false,
6498 transitionStatus: void 0,
6499 floatingRootContext: new FloatingRootStore({
6500 open: false,
6501 transitionStatus: void 0,
6502 floatingElement: null,
6503 referenceElement: null,
6504 triggerElements,
6505 floatingId,
6506 syncOnly: true,
6507 nested,
6508 onOpenChange: void 0
6509 }),
6510 floatingId,
6511 triggerCount: 0,
6512 preventUnmountingOnClose: false,
6513 payload: void 0,
6514 activeTriggerId: null,
6515 activeTriggerElement: null,
6516 triggerIdProp: void 0,
6517 popupElement: null,
6518 positionerElement: null,
6519 activeTriggerProps: EMPTY_OBJECT,
6520 inactiveTriggerProps: EMPTY_OBJECT,
6521 popupProps: EMPTY_OBJECT
6522 };
6523 }
6524 var activeTriggerIdSelector = (state) => state.triggerIdProp ?? state.activeTriggerId;
6525 var openSelector = (state) => state.openProp ?? state.open;
6526 var popupIdSelector = (state) => {
6527 const popupId = state.popupElement?.id ?? state.floatingId;
6528 return popupId || void 0;
6529 };
6530 function triggerOwnsOpenPopup(state, triggerId) {
6531 return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) === triggerId;
6532 }
6533 function triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) {
6534 if (triggerOwnsOpenPopup(state, triggerId)) {
6535 return true;
6536 }
6537 return triggerId !== void 0 && openSelector(state) && activeTriggerIdSelector(state) == null && state.triggerCount === 1;
6538 }
6539 var popupStoreSelectors = {
6540 open: openSelector,
6541 mounted: (state) => state.mounted,
6542 transitionStatus: (state) => state.transitionStatus,
6543 floatingRootContext: (state) => state.floatingRootContext,
6544 triggerCount: (state) => state.triggerCount,
6545 preventUnmountingOnClose: (state) => state.preventUnmountingOnClose,
6546 payload: (state) => state.payload,
6547 activeTriggerId: activeTriggerIdSelector,
6548 activeTriggerElement: (state) => state.mounted ? state.activeTriggerElement : null,
6549 popupId: popupIdSelector,
6550 /**
6551 * Whether the trigger with the given ID was used to open the popup.
6552 */
6553 isTriggerActive: (state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId,
6554 /**
6555 * Whether the popup is open and was activated by a trigger with the given ID.
6556 */
6557 isOpenedByTrigger: (state, triggerId) => triggerOwnsOpenPopup(state, triggerId),
6558 /**
6559 * Whether the popup is mounted and was activated by a trigger with the given ID.
6560 */
6561 isMountedByTrigger: (state, triggerId) => triggerId !== void 0 && activeTriggerIdSelector(state) === triggerId && state.mounted,
6562 triggerProps: (state, isActive) => isActive ? state.activeTriggerProps : state.inactiveTriggerProps,
6563 /**
6564 * Popup id for the trigger that currently owns the open popup.
6565 */
6566 triggerPopupId: (state, triggerId) => triggerOwnsOpenPopupOrIsOnlyTrigger(state, triggerId) ? popupIdSelector(state) : void 0,
6567 popupProps: (state) => state.popupProps,
6568 popupElement: (state) => state.popupElement,
6569 positionerElement: (state) => state.positionerElement
6570 };
6571
6572 // node_modules/@base-ui/react/utils/popups/usePopupHandleStore.mjs
6573 var React27 = __toESM(require_react(), 1);
6574 var import_shim2 = __toESM(require_shim(), 1);
6575 function usePopupHandleStore(handle) {
6576 const subscribe = React27.useCallback((listener) => {
6577 if (handle === void 0) {
6578 return NOOP;
6579 }
6580 return handle.subscribeStore(listener);
6581 }, [handle]);
6582 const getSnapshot = React27.useCallback(() => {
6583 return handle === void 0 ? void 0 : handle.store;
6584 }, [handle]);
6585 return (0, import_shim2.useSyncExternalStore)(subscribe, getSnapshot, () => handle?.serverStore);
6586 }
6587
6588 // node_modules/@base-ui/react/floating-ui-react/hooks/useFloating.mjs
6589 function useBaseUIFloating(options) {
6590 return useFloatingWithStore(options, options.rootContext);
6591 }
6592 function useFloatingWithStore(options, store) {
6593 const {
6594 nodeId,
6595 externalTree
6596 } = options;
6597 const referenceElement = store.useState("referenceElement");
6598 const floatingElement = store.useState("floatingElement");
6599 const domReferenceElement = store.useState("domReferenceElement");
6600 const open2 = store.useState("open");
6601 const floatingId = store.useState("floatingId");
6602 const [positionReference, setPositionReferenceRaw] = React28.useState(null);
6603 const [localDomReference, setLocalDomReference] = React28.useState(void 0);
6604 const [localFloatingElement, setLocalFloatingElement] = React28.useState(void 0);
6605 const domReferenceRef = React28.useRef(null);
6606 const tree = useFloatingTree(externalTree);
6607 const storeElements = React28.useMemo(() => ({
6608 reference: referenceElement,
6609 floating: floatingElement,
6610 domReference: domReferenceElement
6611 }), [referenceElement, floatingElement, domReferenceElement]);
6612 const position = useFloating({
6613 ...options,
6614 elements: {
6615 ...storeElements,
6616 ...positionReference && {
6617 reference: positionReference
6618 }
6619 }
6620 });
6621 const localDomReferenceElement = isElement(localDomReference) ? localDomReference : null;
6622 const syncedFloatingElement = localFloatingElement === void 0 ? store.state.floatingElement : localFloatingElement;
6623 store.useSyncedValue("referenceElement", localDomReference ?? null);
6624 store.useSyncedValue("domReferenceElement", localDomReference === void 0 ? domReferenceElement : localDomReferenceElement);
6625 store.useSyncedValue("floatingElement", syncedFloatingElement);
6626 const setPositionReference = React28.useCallback((node) => {
6627 const computedPositionReference = isElement(node) ? {
6628 getBoundingClientRect: () => node.getBoundingClientRect(),
6629 getClientRects: () => node.getClientRects(),
6630 contextElement: node
6631 } : node;
6632 setPositionReferenceRaw(computedPositionReference);
6633 position.refs.setReference(computedPositionReference);
6634 }, [position.refs]);
6635 const setReference = React28.useCallback((node) => {
6636 if (isElement(node) || node === null) {
6637 domReferenceRef.current = node;
6638 setLocalDomReference(node);
6639 }
6640 if (isElement(position.refs.reference.current) || position.refs.reference.current === null || // Don't allow setting virtual elements using the old technique back to
6641 // `null` to support `positionReference` + an unstable `reference`
6642 // callback ref.
6643 node !== null && !isElement(node)) {
6644 position.refs.setReference(node);
6645 }
6646 }, [position.refs, setLocalDomReference]);
6647 const setFloating = React28.useCallback((node) => {
6648 setLocalFloatingElement(node);
6649 position.refs.setFloating(node);
6650 }, [position.refs]);
6651 const refs = React28.useMemo(() => ({
6652 ...position.refs,
6653 setReference,
6654 setFloating,
6655 setPositionReference,
6656 domReference: domReferenceRef
6657 }), [position.refs, setReference, setFloating, setPositionReference]);
6658 const elements = React28.useMemo(() => ({
6659 ...position.elements,
6660 domReference: domReferenceElement
6661 }), [position.elements, domReferenceElement]);
6662 const context = React28.useMemo(() => ({
6663 ...position,
6664 dataRef: store.context.dataRef,
6665 open: open2,
6666 onOpenChange: store.setOpen,
6667 events: store.context.events,
6668 floatingId,
6669 refs,
6670 elements,
6671 nodeId,
6672 rootStore: store
6673 }), [position, refs, elements, nodeId, store, open2, floatingId]);
6674 useIsoLayoutEffect(() => {
6675 if (domReferenceElement) {
6676 domReferenceRef.current = domReferenceElement;
6677 }
6678 }, [domReferenceElement]);
6679 useIsoLayoutEffect(() => {
6680 store.context.dataRef.current.floatingContext = context;
6681 const node = tree?.nodesRef.current.find((n) => n.id === nodeId);
6682 if (node) {
6683 node.context = context;
6684 }
6685 });
6686 return React28.useMemo(() => ({
6687 ...position,
6688 context,
6689 refs,
6690 elements,
6691 rootStore: store
6692 }), [position, refs, elements, context, store]);
6693 }
6694
6695 // node_modules/@base-ui/react/floating-ui-react/hooks/useFocus.mjs
6696 var React29 = __toESM(require_react(), 1);
6697 var isMacSafari = parts_exports.os.mac && parts_exports.engine.webkit;
6698 function useFocus(context, props = {}) {
6699 const {
6700 enabled = true,
6701 delay
6702 } = props;
6703 const store = "rootStore" in context ? context.rootStore : context;
6704 const {
6705 events,
6706 dataRef
6707 } = store.context;
6708 const blockFocusRef = React29.useRef(false);
6709 const blockedReferenceRef = React29.useRef(null);
6710 const keyboardModalityRef = React29.useRef(true);
6711 const timeout = useTimeout();
6712 React29.useEffect(() => {
6713 const domReference = store.select("domReferenceElement");
6714 if (!enabled) {
6715 return void 0;
6716 }
6717 const win = getWindow(domReference);
6718 function onBlur() {
6719 const currentDomReference = store.select("domReferenceElement");
6720 if (!store.select("open") && isHTMLElement(currentDomReference) && currentDomReference === activeElement(ownerDocument(currentDomReference))) {
6721 blockFocusRef.current = true;
6722 blockedReferenceRef.current = currentDomReference;
6723 }
6724 }
6725 function onKeyDown() {
6726 keyboardModalityRef.current = true;
6727 }
6728 function onPointerDown() {
6729 keyboardModalityRef.current = false;
6730 }
6731 return mergeCleanups(addEventListener(win, "blur", onBlur), isMacSafari && addEventListener(win, "keydown", onKeyDown, true), isMacSafari && addEventListener(win, "pointerdown", onPointerDown, true));
6732 }, [store, enabled]);
6733 React29.useEffect(() => {
6734 if (!enabled) {
6735 return void 0;
6736 }
6737 function onOpenChangeLocal(details) {
6738 if (details.reason === reason_parts_exports.triggerPress || details.reason === reason_parts_exports.escapeKey) {
6739 const referenceElement = store.select("domReferenceElement");
6740 if (isElement(referenceElement)) {
6741 blockedReferenceRef.current = referenceElement;
6742 blockFocusRef.current = true;
6743 }
6744 }
6745 }
6746 events.on("openchange", onOpenChangeLocal);
6747 return () => {
6748 events.off("openchange", onOpenChangeLocal);
6749 };
6750 }, [events, enabled, store]);
6751 const reference = React29.useMemo(() => {
6752 function resetBlockedFocus() {
6753 blockFocusRef.current = false;
6754 blockedReferenceRef.current = null;
6755 }
6756 return {
6757 onMouseLeave() {
6758 resetBlockedFocus();
6759 },
6760 onFocus(event) {
6761 const focusTarget = event.currentTarget;
6762 if (blockFocusRef.current) {
6763 if (blockedReferenceRef.current === focusTarget) {
6764 return;
6765 }
6766 resetBlockedFocus();
6767 }
6768 const target = getTarget(event.nativeEvent);
6769 if (isElement(target)) {
6770 if (isMacSafari && !event.relatedTarget) {
6771 if (!keyboardModalityRef.current && !isTypeableElement(target)) {
6772 return;
6773 }
6774 } else if (!matchesFocusVisible(target)) {
6775 return;
6776 }
6777 }
6778 const movedFromOtherEnabledTrigger = isTargetInsideEnabledTrigger(event.relatedTarget, store.context.triggerElements);
6779 const {
6780 nativeEvent,
6781 currentTarget
6782 } = event;
6783 const delayValue = typeof delay === "function" ? delay() : delay;
6784 if (store.select("open") && movedFromOtherEnabledTrigger || delayValue === 0 || delayValue === void 0) {
6785 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget));
6786 return;
6787 }
6788 timeout.start(delayValue, () => {
6789 if (blockFocusRef.current) {
6790 return;
6791 }
6792 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent, currentTarget));
6793 });
6794 },
6795 onBlur(event) {
6796 resetBlockedFocus();
6797 const relatedTarget = event.relatedTarget;
6798 const nativeEvent = event.nativeEvent;
6799 const movedToFocusGuard = isElement(relatedTarget) && relatedTarget.hasAttribute(createAttribute("focus-guard")) && relatedTarget.getAttribute("data-type") === "outside";
6800 timeout.start(0, () => {
6801 const domReference = store.select("domReferenceElement");
6802 const activeEl = activeElement(ownerDocument(domReference));
6803 if (!relatedTarget && activeEl === domReference) {
6804 return;
6805 }
6806 if (contains(dataRef.current.floatingContext?.refs.floating.current, activeEl) || contains(domReference, activeEl) || movedToFocusGuard) {
6807 return;
6808 }
6809 const nextFocusedElement = relatedTarget ?? activeEl;
6810 if (isTargetInsideEnabledTrigger(nextFocusedElement, store.context.triggerElements)) {
6811 return;
6812 }
6813 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerFocus, nativeEvent));
6814 });
6815 }
6816 };
6817 }, [dataRef, delay, store, timeout]);
6818 return React29.useMemo(() => enabled ? {
6819 reference,
6820 trigger: reference
6821 } : {}, [enabled, reference]);
6822 }
6823
6824 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverFloatingInteraction.mjs
6825 var React30 = __toESM(require_react(), 1);
6826
6827 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverInteractionSharedState.mjs
6828 var HoverInteraction = class _HoverInteraction {
6829 constructor() {
6830 this.pointerType = void 0;
6831 this.interactedInside = false;
6832 this.handler = void 0;
6833 this.blockMouseMove = true;
6834 this.performedPointerEventsMutation = false;
6835 this.pointerEventsScopeElement = null;
6836 this.pointerEventsReferenceElement = null;
6837 this.pointerEventsFloatingElement = null;
6838 this.restTimeoutPending = false;
6839 this.openChangeTimeout = new Timeout();
6840 this.restTimeout = new Timeout();
6841 this.handleCloseOptions = void 0;
6842 }
6843 static create() {
6844 return new _HoverInteraction();
6845 }
6846 dispose = () => {
6847 this.openChangeTimeout.clear();
6848 this.restTimeout.clear();
6849 };
6850 disposeEffect = () => {
6851 return this.dispose;
6852 };
6853 };
6854 var pointerEventsMutationOwnerByScopeElement = /* @__PURE__ */ new WeakMap();
6855 function clearSafePolygonPointerEventsMutation(instance) {
6856 if (!instance.performedPointerEventsMutation) {
6857 return;
6858 }
6859 const scopeElement = instance.pointerEventsScopeElement;
6860 if (scopeElement && pointerEventsMutationOwnerByScopeElement.get(scopeElement) === instance) {
6861 instance.pointerEventsScopeElement?.style.removeProperty("pointer-events");
6862 instance.pointerEventsReferenceElement?.style.removeProperty("pointer-events");
6863 instance.pointerEventsFloatingElement?.style.removeProperty("pointer-events");
6864 pointerEventsMutationOwnerByScopeElement.delete(scopeElement);
6865 }
6866 instance.performedPointerEventsMutation = false;
6867 instance.pointerEventsScopeElement = null;
6868 instance.pointerEventsReferenceElement = null;
6869 instance.pointerEventsFloatingElement = null;
6870 }
6871 function applySafePolygonPointerEventsMutation(instance, options) {
6872 const {
6873 scopeElement,
6874 referenceElement,
6875 floatingElement
6876 } = options;
6877 const existingOwner = pointerEventsMutationOwnerByScopeElement.get(scopeElement);
6878 if (existingOwner && existingOwner !== instance) {
6879 clearSafePolygonPointerEventsMutation(existingOwner);
6880 }
6881 clearSafePolygonPointerEventsMutation(instance);
6882 instance.performedPointerEventsMutation = true;
6883 instance.pointerEventsScopeElement = scopeElement;
6884 instance.pointerEventsReferenceElement = referenceElement;
6885 instance.pointerEventsFloatingElement = floatingElement;
6886 pointerEventsMutationOwnerByScopeElement.set(scopeElement, instance);
6887 scopeElement.style.pointerEvents = "none";
6888 referenceElement.style.pointerEvents = "auto";
6889 floatingElement.style.pointerEvents = "auto";
6890 }
6891 function useHoverInteractionSharedState(store) {
6892 const data = store.context.dataRef.current;
6893 const instance = useRefWithInit(() => data.hoverInteractionState ?? HoverInteraction.create()).current;
6894 if (!data.hoverInteractionState) {
6895 data.hoverInteractionState = instance;
6896 }
6897 useOnMount(data.hoverInteractionState.disposeEffect);
6898 return data.hoverInteractionState;
6899 }
6900
6901 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverFloatingInteraction.mjs
6902 function useHoverFloatingInteraction(context, parameters = {}) {
6903 const {
6904 enabled = true,
6905 closeDelay: closeDelayProp = 0,
6906 nodeId: nodeIdProp
6907 } = parameters;
6908 const store = "rootStore" in context ? context.rootStore : context;
6909 const open2 = store.useState("open");
6910 const floatingElement = store.useState("floatingElement");
6911 const domReferenceElement = store.useState("domReferenceElement");
6912 const {
6913 dataRef
6914 } = store.context;
6915 const tree = useFloatingTree();
6916 const parentId = useFloatingParentNodeId();
6917 const instance = useHoverInteractionSharedState(store);
6918 const childClosedTimeout = useTimeout();
6919 const isClickLikeOpenEvent2 = useStableCallback(() => {
6920 return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside);
6921 });
6922 const isHoverOpen = useStableCallback(() => {
6923 return isHoverOpenEvent(dataRef.current.openEvent?.type);
6924 });
6925 const clearPointerEvents = useStableCallback(() => {
6926 clearSafePolygonPointerEventsMutation(instance);
6927 });
6928 useIsoLayoutEffect(() => {
6929 if (!open2) {
6930 instance.pointerType = void 0;
6931 instance.restTimeoutPending = false;
6932 instance.interactedInside = false;
6933 clearPointerEvents();
6934 }
6935 }, [open2, instance, clearPointerEvents]);
6936 React30.useEffect(() => {
6937 return clearPointerEvents;
6938 }, [clearPointerEvents]);
6939 useIsoLayoutEffect(() => {
6940 if (!enabled) {
6941 return void 0;
6942 }
6943 if (open2 && instance.handleCloseOptions?.blockPointerEvents && isHoverOpen() && isElement(domReferenceElement) && floatingElement) {
6944 const ref = domReferenceElement;
6945 const floatingEl = floatingElement;
6946 const doc = ownerDocument(floatingElement);
6947 const parentFloating = tree?.nodesRef.current.find((node) => node.id === parentId)?.context?.elements.floating;
6948 if (parentFloating) {
6949 parentFloating.style.pointerEvents = "";
6950 }
6951 const cachedScopeElement = instance.pointerEventsScopeElement !== floatingEl ? instance.pointerEventsScopeElement : null;
6952 const parentScopeElement = parentFloating !== floatingEl ? parentFloating : null;
6953 const scopeElement = instance.handleCloseOptions?.getScope?.() ?? cachedScopeElement ?? parentScopeElement ?? ref.closest("[data-rootownerid]") ?? doc.body;
6954 applySafePolygonPointerEventsMutation(instance, {
6955 scopeElement,
6956 referenceElement: ref,
6957 floatingElement: floatingEl
6958 });
6959 return () => {
6960 clearPointerEvents();
6961 };
6962 }
6963 return void 0;
6964 }, [enabled, open2, domReferenceElement, floatingElement, instance, isHoverOpen, tree, parentId, clearPointerEvents]);
6965 React30.useEffect(() => {
6966 if (!enabled) {
6967 return void 0;
6968 }
6969 function hasParentChildren() {
6970 return !!(tree && parentId && getNodeChildren(tree.nodesRef.current, parentId).length > 0);
6971 }
6972 function closeWithDelay(event) {
6973 const closeDelay = getDelay(closeDelayProp, "close", instance.pointerType);
6974 const close = () => {
6975 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
6976 tree?.events.emit("floating.closed", event);
6977 };
6978 if (closeDelay) {
6979 instance.openChangeTimeout.start(closeDelay, close);
6980 } else {
6981 instance.openChangeTimeout.clear();
6982 close();
6983 }
6984 }
6985 function handleInteractInside(event) {
6986 const target = getTarget(event);
6987 if (!isInteractiveElement(target)) {
6988 instance.interactedInside = false;
6989 return;
6990 }
6991 instance.interactedInside = target?.closest("[aria-haspopup]") != null;
6992 }
6993 function onFloatingMouseEnter() {
6994 instance.openChangeTimeout.clear();
6995 childClosedTimeout.clear();
6996 tree?.events.off("floating.closed", onNodeClosed);
6997 clearPointerEvents();
6998 }
6999 function onFloatingMouseLeave(event) {
7000 if (hasParentChildren() && tree) {
7001 tree.events.on("floating.closed", onNodeClosed);
7002 return;
7003 }
7004 if (isTargetInsideEnabledTrigger(event.relatedTarget, store.context.triggerElements)) {
7005 return;
7006 }
7007 const currentNodeId = dataRef.current.floatingContext?.nodeId ?? nodeIdProp;
7008 const relatedTarget = event.relatedTarget;
7009 const isMovingIntoDescendantFloating = tree && currentNodeId && isElement(relatedTarget) && getNodeChildren(tree.nodesRef.current, currentNodeId, false).some((node) => contains(node.context?.elements.floating, relatedTarget));
7010 if (isMovingIntoDescendantFloating) {
7011 return;
7012 }
7013 if (instance.handler) {
7014 instance.handler(event);
7015 return;
7016 }
7017 clearPointerEvents();
7018 if (isHoverOpen() && !isClickLikeOpenEvent2()) {
7019 closeWithDelay(event);
7020 }
7021 }
7022 function onNodeClosed(event) {
7023 if (!tree || !parentId || hasParentChildren()) {
7024 return;
7025 }
7026 childClosedTimeout.start(0, () => {
7027 tree.events.off("floating.closed", onNodeClosed);
7028 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
7029 tree.events.emit("floating.closed", event);
7030 });
7031 }
7032 const floating = floatingElement;
7033 return mergeCleanups(floating && addEventListener(floating, "mouseenter", onFloatingMouseEnter), floating && addEventListener(floating, "mouseleave", onFloatingMouseLeave), floating && addEventListener(floating, "pointerdown", handleInteractInside, true), () => {
7034 tree?.events.off("floating.closed", onNodeClosed);
7035 });
7036 }, [enabled, floatingElement, store, dataRef, closeDelayProp, nodeIdProp, isHoverOpen, isClickLikeOpenEvent2, clearPointerEvents, instance, tree, parentId, childClosedTimeout]);
7037 }
7038
7039 // node_modules/@base-ui/react/floating-ui-react/hooks/useHoverReferenceInteraction.mjs
7040 var React31 = __toESM(require_react(), 1);
7041 var ReactDOM5 = __toESM(require_react_dom(), 1);
7042 var EMPTY_REF = {
7043 current: null
7044 };
7045 function useHoverReferenceInteraction(context, props = {}) {
7046 const {
7047 enabled = true,
7048 delay = 0,
7049 handleClose = null,
7050 mouseOnly = false,
7051 restMs = 0,
7052 move = true,
7053 triggerElementRef = EMPTY_REF,
7054 externalTree,
7055 isActiveTrigger = true,
7056 getHandleCloseContext,
7057 isClosing,
7058 shouldOpen: shouldOpenProp,
7059 guardStaleOpen = false
7060 } = props;
7061 const store = "rootStore" in context ? context.rootStore : context;
7062 const {
7063 dataRef,
7064 events
7065 } = store.context;
7066 const tree = useFloatingTree(externalTree);
7067 const instance = useHoverInteractionSharedState(store);
7068 const isHoverCloseActiveRef = React31.useRef(false);
7069 const handleCloseRef = useValueAsRef(handleClose);
7070 const delayRef = useValueAsRef(delay);
7071 const restMsRef = useValueAsRef(restMs);
7072 const enabledRef = useValueAsRef(enabled);
7073 const shouldOpenRef = useValueAsRef(shouldOpenProp);
7074 const isClosingRef = useValueAsRef(isClosing);
7075 const isClickLikeOpenEvent2 = useStableCallback(() => {
7076 return isClickLikeOpenEvent(dataRef.current.openEvent?.type, instance.interactedInside);
7077 });
7078 const checkShouldOpen = useStableCallback(() => {
7079 return shouldOpenRef.current?.() !== false;
7080 });
7081 const isOverInactiveTrigger = useStableCallback((currentDomReference, currentTarget, target) => {
7082 const allTriggers = store.context.triggerElements;
7083 if (allTriggers.hasElement(currentTarget)) {
7084 return !currentDomReference || !contains(currentDomReference, currentTarget);
7085 }
7086 if (!isElement(target)) {
7087 return false;
7088 }
7089 const targetElement = target;
7090 return allTriggers.hasMatchingElement((trigger) => contains(trigger, targetElement)) && (!currentDomReference || !contains(currentDomReference, targetElement));
7091 });
7092 const cleanupMouseMoveHandler = useStableCallback(() => {
7093 if (!instance.handler) {
7094 return;
7095 }
7096 const doc = ownerDocument(store.select("domReferenceElement"));
7097 doc.removeEventListener("mousemove", instance.handler);
7098 instance.handler = void 0;
7099 });
7100 const clearPointerEvents = useStableCallback(() => {
7101 clearSafePolygonPointerEventsMutation(instance);
7102 });
7103 if (isActiveTrigger) {
7104 instance.handleCloseOptions = handleClose?.__options;
7105 }
7106 React31.useEffect(() => cleanupMouseMoveHandler, [cleanupMouseMoveHandler]);
7107 React31.useEffect(() => {
7108 if (!enabled) {
7109 return void 0;
7110 }
7111 function onOpenChangeLocal(details) {
7112 if (!details.open) {
7113 isHoverCloseActiveRef.current = details.reason === reason_parts_exports.triggerHover;
7114 cleanupMouseMoveHandler();
7115 instance.openChangeTimeout.clear();
7116 instance.restTimeout.clear();
7117 instance.blockMouseMove = true;
7118 instance.restTimeoutPending = false;
7119 } else {
7120 isHoverCloseActiveRef.current = false;
7121 }
7122 }
7123 events.on("openchange", onOpenChangeLocal);
7124 return () => {
7125 events.off("openchange", onOpenChangeLocal);
7126 };
7127 }, [enabled, events, instance, cleanupMouseMoveHandler]);
7128 React31.useEffect(() => {
7129 if (!enabled) {
7130 return void 0;
7131 }
7132 function closeWithDelay(event, runElseBranch = true) {
7133 const closeDelay = getDelay(delayRef.current, "close", instance.pointerType);
7134 if (closeDelay) {
7135 instance.openChangeTimeout.start(closeDelay, () => {
7136 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
7137 tree?.events.emit("floating.closed", event);
7138 });
7139 } else if (runElseBranch) {
7140 instance.openChangeTimeout.clear();
7141 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
7142 tree?.events.emit("floating.closed", event);
7143 }
7144 }
7145 const trigger = triggerElementRef.current ?? (isActiveTrigger ? store.select("domReferenceElement") : null);
7146 if (!isElement(trigger)) {
7147 return void 0;
7148 }
7149 function onMouseEnter(event) {
7150 instance.openChangeTimeout.clear();
7151 instance.blockMouseMove = false;
7152 if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) {
7153 return;
7154 }
7155 const restMsValue = getRestMs(restMsRef.current);
7156 const openDelay = getDelay(delayRef.current, "open", instance.pointerType);
7157 const eventTarget = getTarget(event);
7158 const currentTarget = event.currentTarget ?? null;
7159 const currentDomReference = store.select("domReferenceElement");
7160 let triggerNode = currentTarget;
7161 if (isElement(eventTarget) && !store.context.triggerElements.hasElement(eventTarget)) {
7162 for (const triggerElement of store.context.triggerElements.elements()) {
7163 if (contains(triggerElement, eventTarget)) {
7164 triggerNode = triggerElement;
7165 break;
7166 }
7167 }
7168 }
7169 if (isElement(currentTarget) && isElement(currentDomReference) && !store.context.triggerElements.hasElement(currentTarget) && contains(currentTarget, currentDomReference)) {
7170 triggerNode = currentDomReference;
7171 }
7172 const isOverInactive = triggerNode == null ? false : isOverInactiveTrigger(currentDomReference, triggerNode, eventTarget);
7173 const isOpen = store.select("open");
7174 const isInClosingTransition = isClosingRef.current?.() ?? store.select("transitionStatus") === "ending";
7175 const isHoverCloseTransition = !isOpen && isInClosingTransition && isHoverCloseActiveRef.current;
7176 const isReenteringSameTriggerDuringCloseTransition = !isOverInactive && isElement(triggerNode) && isElement(currentDomReference) && contains(currentDomReference, triggerNode) && isHoverCloseTransition;
7177 const isRestOnlyDelay = restMsValue > 0 && !openDelay;
7178 const shouldOpenImmediately = isOverInactive && (isOpen || isHoverCloseTransition) || isReenteringSameTriggerDuringCloseTransition;
7179 const shouldOpen = !isOpen || isOverInactive;
7180 if (shouldOpenImmediately) {
7181 if (checkShouldOpen()) {
7182 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode));
7183 }
7184 return;
7185 }
7186 if (isRestOnlyDelay) {
7187 return;
7188 }
7189 if (openDelay) {
7190 instance.openChangeTimeout.start(openDelay, () => {
7191 if (shouldOpen && checkShouldOpen()) {
7192 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode));
7193 }
7194 });
7195 } else if (shouldOpen) {
7196 if (checkShouldOpen()) {
7197 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerNode));
7198 }
7199 }
7200 }
7201 function onMouseLeave(event) {
7202 if (isClickLikeOpenEvent2()) {
7203 clearPointerEvents();
7204 return;
7205 }
7206 cleanupMouseMoveHandler();
7207 const domReferenceElement = store.select("domReferenceElement");
7208 const doc = ownerDocument(domReferenceElement);
7209 instance.restTimeout.clear();
7210 instance.restTimeoutPending = false;
7211 const handleCloseContextBase = dataRef.current.floatingContext ?? getHandleCloseContext?.();
7212 if (isTargetInsideEnabledTrigger(event.relatedTarget, store.context.triggerElements)) {
7213 return;
7214 }
7215 if (handleCloseRef.current && handleCloseContextBase) {
7216 if (!store.select("open")) {
7217 instance.openChangeTimeout.clear();
7218 }
7219 const currentTrigger = triggerElementRef.current;
7220 instance.handler = handleCloseRef.current({
7221 ...handleCloseContextBase,
7222 tree,
7223 x: event.clientX,
7224 y: event.clientY,
7225 onClose() {
7226 clearPointerEvents();
7227 cleanupMouseMoveHandler();
7228 if (enabledRef.current && !isClickLikeOpenEvent2() && currentTrigger === store.select("domReferenceElement")) {
7229 closeWithDelay(event, true);
7230 }
7231 }
7232 });
7233 doc.addEventListener("mousemove", instance.handler);
7234 instance.handler(event);
7235 return;
7236 }
7237 const shouldClose = instance.pointerType === "touch" ? !contains(store.select("floatingElement"), event.relatedTarget) : true;
7238 if (shouldClose) {
7239 closeWithDelay(event);
7240 }
7241 }
7242 function onMouseOut(event) {
7243 if (contains(trigger, event.relatedTarget)) {
7244 return;
7245 }
7246 instance.openChangeTimeout.clear();
7247 instance.restTimeout.clear();
7248 instance.restTimeoutPending = false;
7249 }
7250 const staleOpenGuard = guardStaleOpen ? addEventListener(trigger, "mouseout", onMouseOut) : void 0;
7251 if (move) {
7252 return mergeCleanups(addEventListener(trigger, "mousemove", onMouseEnter, {
7253 once: true
7254 }), addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave), staleOpenGuard);
7255 }
7256 return mergeCleanups(addEventListener(trigger, "mouseenter", onMouseEnter), addEventListener(trigger, "mouseleave", onMouseLeave), staleOpenGuard);
7257 }, [cleanupMouseMoveHandler, clearPointerEvents, dataRef, delayRef, store, enabled, handleCloseRef, instance, isActiveTrigger, isOverInactiveTrigger, isClickLikeOpenEvent2, mouseOnly, move, restMsRef, triggerElementRef, tree, enabledRef, getHandleCloseContext, isClosingRef, checkShouldOpen, guardStaleOpen]);
7258 return React31.useMemo(() => {
7259 if (!enabled) {
7260 return void 0;
7261 }
7262 function setPointerRef(event) {
7263 instance.pointerType = event.pointerType;
7264 }
7265 return {
7266 onPointerDown: setPointerRef,
7267 onPointerEnter: setPointerRef,
7268 onMouseMove(event) {
7269 const {
7270 nativeEvent
7271 } = event;
7272 const trigger = event.currentTarget;
7273 const currentDomReference = store.select("domReferenceElement");
7274 const currentOpen = store.select("open");
7275 const isOverInactive = isOverInactiveTrigger(currentDomReference, trigger, event.target);
7276 if (mouseOnly && !isMouseLikePointerType(instance.pointerType)) {
7277 return;
7278 }
7279 if (currentOpen && isOverInactive && instance.handleCloseOptions?.blockPointerEvents) {
7280 const floatingElement = store.select("floatingElement");
7281 if (floatingElement) {
7282 const scopeElement = instance.handleCloseOptions?.getScope?.() ?? trigger.ownerDocument.body;
7283 applySafePolygonPointerEventsMutation(instance, {
7284 scopeElement,
7285 referenceElement: trigger,
7286 floatingElement
7287 });
7288 }
7289 }
7290 const restMsValue = getRestMs(restMsRef.current);
7291 if (currentOpen && !isOverInactive || restMsValue === 0) {
7292 return;
7293 }
7294 if (!isOverInactive && instance.restTimeoutPending && event.movementX ** 2 + event.movementY ** 2 < 2) {
7295 return;
7296 }
7297 instance.restTimeout.clear();
7298 function handleMouseMove() {
7299 instance.restTimeoutPending = false;
7300 if (isClickLikeOpenEvent2()) {
7301 return;
7302 }
7303 const latestOpen = store.select("open");
7304 if (!instance.blockMouseMove && (!latestOpen || isOverInactive) && checkShouldOpen()) {
7305 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, nativeEvent, trigger));
7306 }
7307 }
7308 if (instance.pointerType === "touch") {
7309 ReactDOM5.flushSync(() => {
7310 handleMouseMove();
7311 });
7312 } else if (isOverInactive && currentOpen) {
7313 handleMouseMove();
7314 } else {
7315 instance.restTimeoutPending = true;
7316 instance.restTimeout.start(restMsValue, handleMouseMove);
7317 }
7318 }
7319 };
7320 }, [enabled, instance, isClickLikeOpenEvent2, isOverInactiveTrigger, mouseOnly, store, restMsRef, checkShouldOpen]);
7321 }
7322
7323 // node_modules/@base-ui/react/floating-ui-react/safePolygon.mjs
7324 var CURSOR_SPEED_THRESHOLD = 0.1;
7325 var CURSOR_SPEED_THRESHOLD_SQUARED = CURSOR_SPEED_THRESHOLD * CURSOR_SPEED_THRESHOLD;
7326 var POLYGON_BUFFER = 0.5;
7327 function hasIntersectingEdge(pointX, pointY, xi, yi, xj, yj) {
7328 return yi >= pointY !== yj >= pointY && pointX <= (xj - xi) * (pointY - yi) / (yj - yi) + xi;
7329 }
7330 function isPointInQuadrilateral(pointX, pointY, x1, y1, x2, y2, x3, y3, x4, y4) {
7331 let isInsideValue = false;
7332 if (hasIntersectingEdge(pointX, pointY, x1, y1, x2, y2)) {
7333 isInsideValue = !isInsideValue;
7334 }
7335 if (hasIntersectingEdge(pointX, pointY, x2, y2, x3, y3)) {
7336 isInsideValue = !isInsideValue;
7337 }
7338 if (hasIntersectingEdge(pointX, pointY, x3, y3, x4, y4)) {
7339 isInsideValue = !isInsideValue;
7340 }
7341 if (hasIntersectingEdge(pointX, pointY, x4, y4, x1, y1)) {
7342 isInsideValue = !isInsideValue;
7343 }
7344 return isInsideValue;
7345 }
7346 function isInsideRect(pointX, pointY, rect) {
7347 return pointX >= rect.x && pointX <= rect.x + rect.width && pointY >= rect.y && pointY <= rect.y + rect.height;
7348 }
7349 function isInsideAxisAlignedRect(pointX, pointY, x1, y1, x2, y2) {
7350 const minX = Math.min(x1, x2);
7351 const maxX = Math.max(x1, x2);
7352 const minY = Math.min(y1, y2);
7353 const maxY = Math.max(y1, y2);
7354 return pointX >= minX && pointX <= maxX && pointY >= minY && pointY <= maxY;
7355 }
7356 function safePolygon(options = {}) {
7357 const {
7358 blockPointerEvents = false
7359 } = options;
7360 const timeout = new Timeout();
7361 const fn = ({
7362 x: x2,
7363 y: y2,
7364 placement,
7365 elements,
7366 onClose,
7367 nodeId,
7368 tree
7369 }) => {
7370 const side = placement?.split("-")[0];
7371 let hasLanded = false;
7372 let lastX = null;
7373 let lastY = null;
7374 let lastCursorTime = typeof performance !== "undefined" ? performance.now() : 0;
7375 function isCursorMovingSlowly(nextX, nextY) {
7376 const currentTime = performance.now();
7377 const elapsedTime = currentTime - lastCursorTime;
7378 if (lastX === null || lastY === null || elapsedTime === 0) {
7379 lastX = nextX;
7380 lastY = nextY;
7381 lastCursorTime = currentTime;
7382 return false;
7383 }
7384 const deltaX = nextX - lastX;
7385 const deltaY = nextY - lastY;
7386 const distanceSquared = deltaX * deltaX + deltaY * deltaY;
7387 const thresholdSquared = elapsedTime * elapsedTime * CURSOR_SPEED_THRESHOLD_SQUARED;
7388 lastX = nextX;
7389 lastY = nextY;
7390 lastCursorTime = currentTime;
7391 return distanceSquared < thresholdSquared;
7392 }
7393 function close() {
7394 timeout.clear();
7395 onClose();
7396 }
7397 return function onMouseMove(event) {
7398 timeout.clear();
7399 const domReference = elements.domReference;
7400 const floating = elements.floating;
7401 if (!domReference || !floating || side == null || x2 == null || y2 == null) {
7402 return void 0;
7403 }
7404 const {
7405 clientX,
7406 clientY
7407 } = event;
7408 const target = getTarget(event);
7409 const isLeave = event.type === "mouseleave";
7410 const isOverFloatingEl = contains(floating, target);
7411 const isOverReferenceEl = contains(domReference, target);
7412 if (isOverFloatingEl) {
7413 hasLanded = true;
7414 if (!isLeave) {
7415 return void 0;
7416 }
7417 }
7418 if (isOverReferenceEl) {
7419 hasLanded = false;
7420 if (!isLeave) {
7421 hasLanded = true;
7422 return void 0;
7423 }
7424 }
7425 if (isLeave && isElement(event.relatedTarget) && contains(floating, event.relatedTarget)) {
7426 return void 0;
7427 }
7428 function hasOpenChildNode() {
7429 return Boolean(tree && getNodeChildren(tree.nodesRef.current, nodeId).length > 0);
7430 }
7431 function closeIfNoOpenChild() {
7432 if (!hasOpenChildNode()) {
7433 close();
7434 }
7435 }
7436 if (hasOpenChildNode()) {
7437 return void 0;
7438 }
7439 const refRect = domReference.getBoundingClientRect();
7440 const rect = floating.getBoundingClientRect();
7441 const cursorLeaveFromRight = x2 > rect.right - rect.width / 2;
7442 const cursorLeaveFromBottom = y2 > rect.bottom - rect.height / 2;
7443 const isFloatingWider = rect.width > refRect.width;
7444 const isFloatingTaller = rect.height > refRect.height;
7445 const left = (isFloatingWider ? refRect : rect).left;
7446 const right = (isFloatingWider ? refRect : rect).right;
7447 const top = (isFloatingTaller ? refRect : rect).top;
7448 const bottom = (isFloatingTaller ? refRect : rect).bottom;
7449 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) {
7450 closeIfNoOpenChild();
7451 return void 0;
7452 }
7453 let isInsideTroughRect = false;
7454 switch (side) {
7455 case "top":
7456 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, refRect.top + 1, right, rect.bottom - 1);
7457 break;
7458 case "bottom":
7459 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, left, rect.top + 1, right, refRect.bottom - 1);
7460 break;
7461 case "left":
7462 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, rect.right - 1, bottom, refRect.left + 1, top);
7463 break;
7464 case "right":
7465 isInsideTroughRect = isInsideAxisAlignedRect(clientX, clientY, refRect.right - 1, bottom, rect.left + 1, top);
7466 break;
7467 default:
7468 }
7469 if (isInsideTroughRect) {
7470 return void 0;
7471 }
7472 if (hasLanded && !isInsideRect(clientX, clientY, refRect)) {
7473 closeIfNoOpenChild();
7474 return void 0;
7475 }
7476 if (!isLeave && isCursorMovingSlowly(clientX, clientY)) {
7477 closeIfNoOpenChild();
7478 return void 0;
7479 }
7480 let isInsidePolygon = false;
7481 switch (side) {
7482 case "top": {
7483 const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
7484 const cursorPointOneX = isFloatingWider ? x2 + cursorXOffset : cursorLeaveFromRight ? x2 + cursorXOffset : x2 - cursorXOffset;
7485 const cursorPointTwoX = isFloatingWider ? x2 - cursorXOffset : cursorLeaveFromRight ? x2 + cursorXOffset : x2 - cursorXOffset;
7486 const cursorPointY = y2 + POLYGON_BUFFER + 1;
7487 const commonYLeft = cursorLeaveFromRight ? rect.bottom - POLYGON_BUFFER : isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top;
7488 const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.bottom - POLYGON_BUFFER : rect.top : rect.bottom - POLYGON_BUFFER;
7489 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight);
7490 break;
7491 }
7492 case "bottom": {
7493 const cursorXOffset = isFloatingWider ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
7494 const cursorPointOneX = isFloatingWider ? x2 + cursorXOffset : cursorLeaveFromRight ? x2 + cursorXOffset : x2 - cursorXOffset;
7495 const cursorPointTwoX = isFloatingWider ? x2 - cursorXOffset : cursorLeaveFromRight ? x2 + cursorXOffset : x2 - cursorXOffset;
7496 const cursorPointY = y2 - POLYGON_BUFFER;
7497 const commonYLeft = cursorLeaveFromRight ? rect.top + POLYGON_BUFFER : isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom;
7498 const commonYRight = cursorLeaveFromRight ? isFloatingWider ? rect.top + POLYGON_BUFFER : rect.bottom : rect.top + POLYGON_BUFFER;
7499 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointOneX, cursorPointY, cursorPointTwoX, cursorPointY, rect.left, commonYLeft, rect.right, commonYRight);
7500 break;
7501 }
7502 case "left": {
7503 const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
7504 const cursorPointOneY = isFloatingTaller ? y2 + cursorYOffset : cursorLeaveFromBottom ? y2 + cursorYOffset : y2 - cursorYOffset;
7505 const cursorPointTwoY = isFloatingTaller ? y2 - cursorYOffset : cursorLeaveFromBottom ? y2 + cursorYOffset : y2 - cursorYOffset;
7506 const cursorPointX = x2 + POLYGON_BUFFER + 1;
7507 const commonXTop = cursorLeaveFromBottom ? rect.right - POLYGON_BUFFER : isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left;
7508 const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.right - POLYGON_BUFFER : rect.left : rect.right - POLYGON_BUFFER;
7509 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, commonXTop, rect.top, commonXBottom, rect.bottom, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY);
7510 break;
7511 }
7512 case "right": {
7513 const cursorYOffset = isFloatingTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
7514 const cursorPointOneY = isFloatingTaller ? y2 + cursorYOffset : cursorLeaveFromBottom ? y2 + cursorYOffset : y2 - cursorYOffset;
7515 const cursorPointTwoY = isFloatingTaller ? y2 - cursorYOffset : cursorLeaveFromBottom ? y2 + cursorYOffset : y2 - cursorYOffset;
7516 const cursorPointX = x2 - POLYGON_BUFFER;
7517 const commonXTop = cursorLeaveFromBottom ? rect.left + POLYGON_BUFFER : isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right;
7518 const commonXBottom = cursorLeaveFromBottom ? isFloatingTaller ? rect.left + POLYGON_BUFFER : rect.right : rect.left + POLYGON_BUFFER;
7519 isInsidePolygon = isPointInQuadrilateral(clientX, clientY, cursorPointX, cursorPointOneY, cursorPointX, cursorPointTwoY, commonXTop, rect.top, commonXBottom, rect.bottom);
7520 break;
7521 }
7522 default:
7523 }
7524 if (!isInsidePolygon) {
7525 closeIfNoOpenChild();
7526 } else if (!hasLanded) {
7527 timeout.start(40, closeIfNoOpenChild);
7528 }
7529 return void 0;
7530 };
7531 };
7532 fn.__options = {
7533 ...options,
7534 blockPointerEvents
7535 };
7536 return fn;
7537 }
7538
7539 // node_modules/@base-ui/react/utils/NullStore.mjs
7540 var NullStore = class extends ReactStore {
7541 // `update`/`set`/`notifyAll` funnel through `setState` in the base `Store`, so overriding
7542 // `setState` alone would neutralize them today. They are overridden explicitly so the store stays
7543 // inert even if a future base-class change stops routing a mutator through `setState`.
7544 setState(_newState) {
7545 }
7546 update(_changes) {
7547 }
7548 set(_key, _value) {
7549 }
7550 notifyAll() {
7551 }
7552 };
7553
7554 // node_modules/@base-ui/utils/inertValue.mjs
7555 function inertValue(value) {
7556 if (isReactVersionAtLeast(19)) {
7557 return value;
7558 }
7559 return value ? "true" : void 0;
7560 }
7561
7562 // node_modules/@base-ui/react/internals/useValueChanged.mjs
7563 var React32 = __toESM(require_react(), 1);
7564 function useValueChanged(value, onChange) {
7565 const valueRef = React32.useRef(value);
7566 const onChangeCallback = useStableCallback(onChange);
7567 useIsoLayoutEffect(() => {
7568 if (valueRef.current !== value) {
7569 onChangeCallback(valueRef.current);
7570 }
7571 valueRef.current = value;
7572 }, [value, onChangeCallback]);
7573 }
7574
7575 // node_modules/@base-ui/react/internals/field-root-context/FieldRootContext.mjs
7576 var React33 = __toESM(require_react(), 1);
7577
7578 // node_modules/@base-ui/react/field/control/FieldControlDataAttributes.mjs
7579 var valid = "data-valid";
7580 var invalid = "data-invalid";
7581
7582 // node_modules/@base-ui/react/internals/field-constants/constants.mjs
7583 var DEFAULT_VALIDITY_STATE = {
7584 badInput: false,
7585 customError: false,
7586 patternMismatch: false,
7587 rangeOverflow: false,
7588 rangeUnderflow: false,
7589 stepMismatch: false,
7590 tooLong: false,
7591 tooShort: false,
7592 typeMismatch: false,
7593 valid: null,
7594 valueMissing: false
7595 };
7596 var DEFAULT_FIELD_STATE_ATTRIBUTES = {
7597 valid: null,
7598 touched: false,
7599 dirty: false,
7600 filled: false,
7601 focused: false
7602 };
7603 var DEFAULT_FIELD_ROOT_STATE = {
7604 disabled: false,
7605 ...DEFAULT_FIELD_STATE_ATTRIBUTES
7606 };
7607 var fieldValidityMapping = {
7608 valid(value) {
7609 if (value === null) {
7610 return null;
7611 }
7612 if (value) {
7613 return {
7614 [valid]: ""
7615 };
7616 }
7617 return {
7618 [invalid]: ""
7619 };
7620 }
7621 };
7622
7623 // node_modules/@base-ui/react/internals/field-root-context/FieldRootContext.mjs
7624 var DEFAULT_FIELD_ROOT_CONTEXT = {
7625 invalid: void 0,
7626 name: void 0,
7627 validityData: {
7628 state: DEFAULT_VALIDITY_STATE,
7629 errors: [],
7630 error: "",
7631 value: "",
7632 initialValue: null
7633 },
7634 setValidityData: NOOP,
7635 disabled: void 0,
7636 setTouched: NOOP,
7637 setDirty: NOOP,
7638 setFilled: NOOP,
7639 setFocused: NOOP,
7640 validationMode: "onSubmit",
7641 shouldValidateOnChange: () => false,
7642 state: DEFAULT_FIELD_ROOT_STATE,
7643 registerFieldControl: NOOP,
7644 validation: {
7645 getValidationProps: (_disabled, props = EMPTY_OBJECT) => props,
7646 inputRef: {
7647 current: null
7648 },
7649 registeredInputs: /* @__PURE__ */ new Map(),
7650 registerInput: NOOP,
7651 getInputControl: () => null,
7652 commit: async () => {
7653 },
7654 change: NOOP
7655 }
7656 };
7657 var FieldRootContext = /* @__PURE__ */ React33.createContext(DEFAULT_FIELD_ROOT_CONTEXT);
7658 if (true) FieldRootContext.displayName = "FieldRootContext";
7659 function useFieldRootContext(optional = true) {
7660 const context = React33.useContext(FieldRootContext);
7661 if (context.setValidityData === NOOP && !optional) {
7662 throw new Error(true ? "Base UI: FieldRootContext is missing. Field parts must be placed within <Field.Root>." : formatErrorMessage_default(28));
7663 }
7664 return context;
7665 }
7666
7667 // node_modules/@base-ui/react/internals/field-register-control/useRegisterFieldControl.mjs
7668 function useRegisterFieldControl(controlRef, id, value, getFormValueOverride, enabled = true, name) {
7669 const {
7670 registerFieldControl
7671 } = useFieldRootContext();
7672 const sourceRef = useRefWithInit(() => /* @__PURE__ */ Symbol());
7673 useIsoLayoutEffect(() => {
7674 const source = sourceRef.current;
7675 if (!enabled) {
7676 registerFieldControl(source, void 0);
7677 return;
7678 }
7679 const registration = {
7680 controlRef,
7681 getValue: getFormValueOverride,
7682 id,
7683 name,
7684 value
7685 };
7686 registerFieldControl(source, registration);
7687 }, [controlRef, enabled, getFormValueOverride, id, name, registerFieldControl, sourceRef, value]);
7688 useIsoLayoutEffect(() => {
7689 const source = sourceRef.current;
7690 return () => {
7691 registerFieldControl(source, void 0);
7692 };
7693 }, [registerFieldControl, sourceRef]);
7694 }
7695
7696 // node_modules/@base-ui/react/internals/form-context/FormContext.mjs
7697 var React34 = __toESM(require_react(), 1);
7698 var FormContext = /* @__PURE__ */ React34.createContext({
7699 elementRef: {
7700 current: null
7701 },
7702 formRef: {
7703 current: {
7704 fields: /* @__PURE__ */ new Map()
7705 }
7706 },
7707 errors: {},
7708 clearErrors: NOOP,
7709 validationMode: "onSubmit",
7710 submitCountRef: {
7711 current: 0
7712 }
7713 });
7714 if (true) FormContext.displayName = "FormContext";
7715 function useFormContext() {
7716 return React34.useContext(FormContext);
7717 }
7718
7719 // node_modules/@base-ui/react/internals/labelable-provider/useLabelableId.mjs
7720 var React36 = __toESM(require_react(), 1);
7721
7722 // node_modules/@base-ui/react/internals/labelable-provider/LabelableContext.mjs
7723 var React35 = __toESM(require_react(), 1);
7724 var LabelableContext = /* @__PURE__ */ React35.createContext({
7725 controlId: void 0,
7726 registerControlId: NOOP,
7727 resetControlId: NOOP,
7728 labelId: void 0,
7729 setLabelId: NOOP,
7730 messageIds: [],
7731 setMessageIds: NOOP,
7732 getDescriptionProps: (externalProps) => externalProps
7733 });
7734 if (true) LabelableContext.displayName = "LabelableContext";
7735 function useLabelableContext() {
7736 return React35.useContext(LabelableContext);
7737 }
7738
7739 // node_modules/@base-ui/react/internals/labelable-provider/useLabelableId.mjs
7740 function useLabelableId(params = {}) {
7741 const {
7742 id,
7743 enabled = true
7744 } = params;
7745 const {
7746 controlId,
7747 registerControlId,
7748 resetControlId
7749 } = useLabelableContext();
7750 const defaultId = useBaseUiId();
7751 const controlSourceRef = useRefWithInit(() => /* @__PURE__ */ Symbol());
7752 const hasRegisteredRef = React36.useRef(false);
7753 const hadExplicitIdRef = React36.useRef(false);
7754 const unregisterControlId = useStableCallback(() => {
7755 if (!hasRegisteredRef.current || registerControlId === NOOP) {
7756 return;
7757 }
7758 hasRegisteredRef.current = false;
7759 registerControlId(controlSourceRef.current, void 0);
7760 });
7761 useIsoLayoutEffect(() => {
7762 if (!enabled || registerControlId === NOOP) {
7763 unregisterControlId();
7764 return void 0;
7765 }
7766 let nextId;
7767 if (id !== void 0) {
7768 hadExplicitIdRef.current = true;
7769 nextId = id;
7770 } else if (hadExplicitIdRef.current) {
7771 nextId = defaultId;
7772 } else {
7773 resetControlId();
7774 return void 0;
7775 }
7776 if (nextId === void 0) {
7777 unregisterControlId();
7778 return void 0;
7779 }
7780 hasRegisteredRef.current = true;
7781 registerControlId(controlSourceRef.current, nextId);
7782 return void 0;
7783 }, [id, enabled, registerControlId, resetControlId, defaultId, controlSourceRef, unregisterControlId]);
7784 useIsoLayoutEffect(() => {
7785 return unregisterControlId;
7786 }, [unregisterControlId]);
7787 return (enabled ? controlId : void 0) ?? id ?? defaultId;
7788 }
7789
7790 // node_modules/@base-ui/react/internals/direction-context/DirectionContext.mjs
7791 var React37 = __toESM(require_react(), 1);
7792 var DirectionContext = /* @__PURE__ */ React37.createContext(void 0);
7793 if (true) DirectionContext.displayName = "DirectionContext";
7794 function useDirection() {
7795 const context = React37.useContext(DirectionContext);
7796 return context?.direction ?? "ltr";
7797 }
7798
7799 // node_modules/@base-ui/react/internals/useAnchorPositioning.mjs
7800 var React38 = __toESM(require_react(), 1);
7801
7802 // node_modules/@base-ui/react/floating-ui-react/middleware/arrow.mjs
7803 var baseArrow = (options) => ({
7804 name: "arrow",
7805 options,
7806 async fn(state) {
7807 const {
7808 x: x2,
7809 y: y2,
7810 placement,
7811 rects,
7812 platform: platform3,
7813 elements,
7814 middlewareData
7815 } = state;
7816 const {
7817 element,
7818 padding = 0,
7819 offsetParent = "real"
7820 } = evaluate(options, state) || {};
7821 if (element == null) {
7822 return {};
7823 }
7824 const paddingObject = getPaddingObject(padding);
7825 const coords = {
7826 x: x2,
7827 y: y2
7828 };
7829 const axis = getAlignmentAxis(placement);
7830 const length = getAxisLength(axis);
7831 const arrowDimensions = await platform3.getDimensions(element);
7832 const isYAxis = axis === "y";
7833 const minProp = isYAxis ? "top" : "left";
7834 const maxProp = isYAxis ? "bottom" : "right";
7835 const clientProp = isYAxis ? "clientHeight" : "clientWidth";
7836 const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];
7837 const startDiff = coords[axis] - rects.reference[axis];
7838 const arrowOffsetParent = offsetParent === "real" ? await platform3.getOffsetParent?.(element) : elements.floating;
7839 let clientSize = elements.floating[clientProp] || rects.floating[length];
7840 if (!clientSize || !await platform3.isElement?.(arrowOffsetParent)) {
7841 clientSize = elements.floating[clientProp] || rects.floating[length];
7842 }
7843 const centerToReference = endDiff / 2 - startDiff / 2;
7844 const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;
7845 const minPadding = Math.min(paddingObject[minProp], largestPossiblePadding);
7846 const maxPadding = Math.min(paddingObject[maxProp], largestPossiblePadding);
7847 const min3 = minPadding;
7848 const max3 = clientSize - arrowDimensions[length] - maxPadding;
7849 const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;
7850 const offset4 = clamp(min3, center, max3);
7851 const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset4 && rects.reference[length] / 2 - (center < min3 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;
7852 const alignmentOffset = shouldAddOffset ? center < min3 ? center - min3 : center - max3 : 0;
7853 return {
7854 [axis]: coords[axis] + alignmentOffset,
7855 data: {
7856 [axis]: offset4,
7857 centerOffset: center - offset4 - alignmentOffset,
7858 ...shouldAddOffset && {
7859 alignmentOffset
7860 }
7861 },
7862 reset: shouldAddOffset
7863 };
7864 }
7865 });
7866 var arrow4 = (options, deps) => {
7867 const {
7868 name,
7869 fn
7870 } = baseArrow(options);
7871 return {
7872 name,
7873 fn,
7874 options: [options, deps]
7875 };
7876 };
7877
7878 // node_modules/@base-ui/react/utils/hideMiddleware.mjs
7879 var hide4 = {
7880 name: "hide",
7881 async fn(state) {
7882 const {
7883 width,
7884 height,
7885 x: x2,
7886 y: y2
7887 } = state.rects.reference;
7888 const anchorHidden2 = width === 0 && height === 0 && x2 === 0 && y2 === 0;
7889 const overflow = await state.platform.detectOverflow(state, {
7890 elementContext: "reference"
7891 });
7892 const referenceHidden = overflow.top - height >= 0 || overflow.right - width >= 0 || overflow.bottom - height >= 0 || overflow.left - width >= 0;
7893 return {
7894 data: {
7895 referenceHidden: referenceHidden || anchorHidden2
7896 }
7897 };
7898 }
7899 };
7900
7901 // node_modules/@base-ui/react/utils/adaptiveOriginConstants.mjs
7902 var DEFAULT_SIDES = {
7903 sideX: "left",
7904 sideY: "top"
7905 };
7906
7907 // node_modules/@base-ui/react/utils/CommonPositionerCssVars.mjs
7908 var availableWidth = "--available-width";
7909 var availableHeight = "--available-height";
7910 var anchorWidth = "--anchor-width";
7911 var anchorHeight = "--anchor-height";
7912 var transformOrigin = "--transform-origin";
7913 var positionerWidth = "--positioner-width";
7914 var positionerHeight = "--positioner-height";
7915
7916 // node_modules/@base-ui/react/internals/useAnchorPositioning.mjs
7917 var AVAILABLE_WIDTH_VAR = availableWidth;
7918 var AVAILABLE_HEIGHT_VAR = availableHeight;
7919 function getLogicalSide(sideParam, renderedSide, isRtl) {
7920 const isLogicalSideParam = sideParam === "inline-start" || sideParam === "inline-end";
7921 const logicalRight = isRtl ? "inline-start" : "inline-end";
7922 const logicalLeft = isRtl ? "inline-end" : "inline-start";
7923 return {
7924 top: "top",
7925 right: isLogicalSideParam ? logicalRight : "right",
7926 bottom: "bottom",
7927 left: isLogicalSideParam ? logicalLeft : "left"
7928 }[renderedSide];
7929 }
7930 function getOffsetData(state, sideParam, isRtl) {
7931 const {
7932 rects,
7933 placement
7934 } = state;
7935 const data = {
7936 side: getLogicalSide(sideParam, getSide(placement), isRtl),
7937 align: getAlignment(placement) || "center",
7938 anchor: {
7939 width: rects.reference.width,
7940 height: rects.reference.height
7941 },
7942 positioner: {
7943 width: rects.floating.width,
7944 height: rects.floating.height
7945 }
7946 };
7947 return data;
7948 }
7949 function useAnchorPositioning(params) {
7950 return useAnchorPositioningWithHook(params, useBaseUIFloating);
7951 }
7952 function useAnchorPositioningWithHook(params, useFloatingHook) {
7953 const {
7954 // Public parameters
7955 anchor,
7956 positionMethod = "absolute",
7957 side: sideParam = "bottom",
7958 sideOffset = 0,
7959 align = "center",
7960 alignOffset = 0,
7961 collisionBoundary,
7962 collisionPadding: collisionPaddingParam = 5,
7963 sticky = false,
7964 arrowPadding = 5,
7965 disableAnchorTracking = false,
7966 inline: inlineMiddleware,
7967 // Private parameters
7968 keepMounted = false,
7969 floatingRootContext,
7970 mounted,
7971 collisionAvoidance,
7972 shift: shift4,
7973 nodeId,
7974 adaptiveOrigin: adaptiveOrigin2,
7975 lazyFlip = false,
7976 externalTree
7977 } = params;
7978 const [mountSide, setMountSide] = React38.useState(null);
7979 if (!mounted && mountSide !== null) {
7980 setMountSide(null);
7981 }
7982 const collisionAvoidanceSide = collisionAvoidance.side || "flip";
7983 const collisionAvoidanceAlign = collisionAvoidance.align || "flip";
7984 const collisionAvoidanceFallbackAxisSide = collisionAvoidance.fallbackAxisSide || "end";
7985 const shiftCrossAxis = shift4?.crossAxis ?? false;
7986 const shiftRootBoundary = shift4?.rootBoundary;
7987 const anchorFn = typeof anchor === "function" ? anchor : void 0;
7988 const anchorFnCallback = useStableCallback(anchorFn);
7989 const anchorDep = anchorFn ? anchorFnCallback : anchor;
7990 const anchorValueRef = useValueAsRef(anchor);
7991 const mountedRef = useValueAsRef(mounted);
7992 const direction = useDirection();
7993 const isRtl = direction === "rtl";
7994 const side = mountSide || {
7995 top: "top",
7996 right: "right",
7997 bottom: "bottom",
7998 left: "left",
7999 "inline-end": isRtl ? "left" : "right",
8000 "inline-start": isRtl ? "right" : "left"
8001 }[sideParam];
8002 const placement = align === "center" ? side : `${side}-${align}`;
8003 let collisionPadding = collisionPaddingParam;
8004 if (typeof collisionPadding === "number") {
8005 collisionPadding = {
8006 top: collisionPadding,
8007 right: collisionPadding,
8008 bottom: collisionPadding,
8009 left: collisionPadding
8010 };
8011 } else if (collisionPadding) {
8012 collisionPadding = {
8013 top: collisionPadding.top || 0,
8014 right: collisionPadding.right || 0,
8015 bottom: collisionPadding.bottom || 0,
8016 left: collisionPadding.left || 0
8017 };
8018 }
8019 const bias = 1;
8020 const biasTop = sideParam === "bottom" ? bias : 0;
8021 const biasBottom = sideParam === "top" ? bias : 0;
8022 const biasLeft = sideParam === "right" ? bias : 0;
8023 const biasRight = sideParam === "left" ? bias : 0;
8024 const commonCollisionProps = {
8025 boundary: collisionBoundary === "clipping-ancestors" ? "clippingAncestors" : collisionBoundary,
8026 padding: collisionPadding
8027 };
8028 const arrowRef = React38.useRef(null);
8029 const sideOffsetRef = useValueAsRef(sideOffset);
8030 const alignOffsetRef = useValueAsRef(alignOffset);
8031 const sideOffsetDep = typeof sideOffset !== "function" ? sideOffset : 0;
8032 const alignOffsetDep = typeof alignOffset !== "function" ? alignOffset : 0;
8033 const middleware = [];
8034 if (inlineMiddleware) {
8035 middleware.push(inlineMiddleware);
8036 }
8037 middleware.push(offset3((state) => {
8038 const data = getOffsetData(state, sideParam, isRtl);
8039 const sideAxis = typeof sideOffsetRef.current === "function" ? sideOffsetRef.current(data) : sideOffsetRef.current;
8040 const alignAxis = typeof alignOffsetRef.current === "function" ? alignOffsetRef.current(data) : alignOffsetRef.current;
8041 return {
8042 mainAxis: sideAxis,
8043 crossAxis: alignAxis,
8044 alignmentAxis: alignAxis
8045 };
8046 }, [sideOffsetDep, alignOffsetDep, isRtl, sideParam]));
8047 const shiftDisabled = collisionAvoidanceAlign === "none" && collisionAvoidanceSide !== "shift";
8048 const crossAxisShiftEnabled = !shiftDisabled && (sticky || shiftCrossAxis || collisionAvoidanceSide === "shift");
8049 const flipMiddleware = collisionAvoidanceSide === "none" ? null : flip3({
8050 ...commonCollisionProps,
8051 // Ensure the popup flips if it's been limited by its --available-height and it resizes.
8052 // Since the size() padding is smaller than the flip() padding, flip() will take precedence.
8053 padding: {
8054 top: collisionPadding.top + bias + biasTop,
8055 right: collisionPadding.right + bias + biasRight,
8056 bottom: collisionPadding.bottom + bias + biasBottom,
8057 left: collisionPadding.left + bias + biasLeft
8058 },
8059 mainAxis: !shiftCrossAxis && collisionAvoidanceSide === "flip",
8060 crossAxis: collisionAvoidanceAlign === "flip" ? "alignment" : false,
8061 fallbackAxisSideDirection: collisionAvoidanceFallbackAxisSide
8062 });
8063 const shiftMiddleware = shiftDisabled ? null : shift3({
8064 ...commonCollisionProps,
8065 // Use the Layout Viewport to avoid shifting around when pinch-zooming.
8066 rootBoundary: shiftRootBoundary,
8067 mainAxis: collisionAvoidanceAlign !== "none",
8068 crossAxis: crossAxisShiftEnabled,
8069 limiter: sticky || shiftCrossAxis ? void 0 : limitShift3((limitData) => {
8070 if (!arrowRef.current) {
8071 return {};
8072 }
8073 const {
8074 width,
8075 height
8076 } = arrowRef.current.getBoundingClientRect();
8077 const sideAxis = getSideAxis(getSide(limitData.placement));
8078 const arrowSize = sideAxis === "y" ? width : height;
8079 const offsetAmount = sideAxis === "y" ? collisionPadding.left + collisionPadding.right : collisionPadding.top + collisionPadding.bottom;
8080 return {
8081 offset: arrowSize / 2 + offsetAmount / 2
8082 };
8083 })
8084 }, [commonCollisionProps, sticky, shiftCrossAxis, shiftRootBoundary, collisionPadding, collisionAvoidanceAlign]);
8085 if (collisionAvoidanceSide === "shift" || collisionAvoidanceAlign === "shift" || align === "center") {
8086 middleware.push(shiftMiddleware, flipMiddleware);
8087 } else {
8088 middleware.push(flipMiddleware, shiftMiddleware);
8089 }
8090 middleware.push(size3({
8091 ...commonCollisionProps,
8092 apply({
8093 elements: {
8094 floating
8095 },
8096 availableWidth: availableWidth2,
8097 availableHeight: availableHeight2,
8098 rects
8099 }) {
8100 if (!mountedRef.current) {
8101 return;
8102 }
8103 const floatingStyle = floating.style;
8104 floatingStyle.setProperty(AVAILABLE_WIDTH_VAR, `${availableWidth2}px`);
8105 floatingStyle.setProperty(AVAILABLE_HEIGHT_VAR, `${availableHeight2}px`);
8106 const dpr = getWindow(floating).devicePixelRatio || 1;
8107 const {
8108 x: x3,
8109 y: y3,
8110 width,
8111 height
8112 } = rects.reference;
8113 const anchorWidth2 = (Math.round((x3 + width) * dpr) - Math.round(x3 * dpr)) / dpr;
8114 const anchorHeight2 = (Math.round((y3 + height) * dpr) - Math.round(y3 * dpr)) / dpr;
8115 floatingStyle.setProperty(anchorWidth, `${anchorWidth2}px`);
8116 floatingStyle.setProperty(anchorHeight, `${anchorHeight2}px`);
8117 }
8118 }), arrow4((state) => ({
8119 // `transform-origin` calculations rely on an element existing. If the arrow hasn't been set,
8120 // we'll create a fake element.
8121 element: arrowRef.current || ownerDocument(state.elements.floating).createElement("div"),
8122 // No padding for the fake arrow: it would displace aligned popups on narrow anchors.
8123 padding: arrowRef.current ? arrowPadding : 0,
8124 offsetParent: "floating"
8125 }), [arrowPadding]), {
8126 name: "transformOrigin",
8127 fn(state) {
8128 const {
8129 elements: {
8130 floating
8131 },
8132 middlewareData: middlewareData2,
8133 placement: renderedPlacement2,
8134 platform: platform3,
8135 rects,
8136 y: y3
8137 } = state;
8138 const renderedSide2 = getSide(renderedPlacement2);
8139 const renderedAlign2 = getAlignment(renderedPlacement2);
8140 const isVertical = getSideAxis(renderedSide2) === "y";
8141 const arrowEl = arrowRef.current;
8142 const sideOffsetValue = typeof sideOffset === "function" ? sideOffset(getOffsetData(state, sideParam, isRtl)) : sideOffset;
8143 let crossOrigin;
8144 if (!arrowEl && renderedAlign2 && Math.abs(isVertical ? middlewareData2.shift?.x || 0 : middlewareData2.shift?.y || 0) <= 1) {
8145 crossOrigin = renderedAlign2 === "start" === (isVertical && platform3.isRTL?.(floating) === true) ? "100%" : "0%";
8146 } else {
8147 const arrowOffset = isVertical ? middlewareData2.arrow?.x || 0 : middlewareData2.arrow?.y || 0;
8148 const arrowSize = isVertical ? arrowEl?.clientWidth || 0 : arrowEl?.clientHeight || 0;
8149 crossOrigin = `${arrowOffset + arrowSize / 2}px`;
8150 }
8151 let sideOrigin = renderedSide2 === "top" || renderedSide2 === "left" ? `calc(100% + ${sideOffsetValue}px)` : `${-sideOffsetValue}px`;
8152 if (crossAxisShiftEnabled && isVertical && Math.abs(middlewareData2.shift?.y || 0) > sideOffsetValue) {
8153 sideOrigin = `${rects.reference.y + rects.reference.height / 2 - y3}px`;
8154 }
8155 floating.style.setProperty(transformOrigin, isVertical ? `${crossOrigin} ${sideOrigin}` : `${sideOrigin} ${crossOrigin}`);
8156 return {};
8157 }
8158 }, hide4, adaptiveOrigin2);
8159 useIsoLayoutEffect(() => {
8160 if (!mounted && floatingRootContext) {
8161 floatingRootContext.update({
8162 referenceElement: null,
8163 floatingElement: null,
8164 domReferenceElement: null,
8165 positionReference: null
8166 });
8167 }
8168 }, [mounted, floatingRootContext]);
8169 const autoUpdateOptions = React38.useMemo(() => ({
8170 ancestorScroll: !disableAnchorTracking,
8171 elementResize: !disableAnchorTracking && typeof ResizeObserver !== "undefined",
8172 layoutShift: !disableAnchorTracking && typeof IntersectionObserver !== "undefined"
8173 }), [disableAnchorTracking]);
8174 const {
8175 refs,
8176 elements,
8177 x: x2,
8178 y: y2,
8179 middlewareData,
8180 update: update2,
8181 placement: renderedPlacement,
8182 context,
8183 isPositioned,
8184 floatingStyles: originalFloatingStyles
8185 } = useFloatingHook({
8186 rootContext: floatingRootContext,
8187 open: keepMounted ? mounted : void 0,
8188 placement,
8189 middleware,
8190 strategy: positionMethod,
8191 whileElementsMounted: keepMounted ? void 0 : (...args) => autoUpdate(...args, autoUpdateOptions),
8192 nodeId,
8193 externalTree
8194 });
8195 const {
8196 sideX,
8197 sideY
8198 } = middlewareData.adaptiveOrigin || DEFAULT_SIDES;
8199 const resolvedPosition = isPositioned ? positionMethod : "fixed";
8200 const floatingStyles = React38.useMemo(() => {
8201 let base;
8202 if (!isPositioned) {
8203 base = {
8204 position: resolvedPosition,
8205 top: 0,
8206 left: 0
8207 };
8208 } else if (adaptiveOrigin2) {
8209 base = {
8210 position: resolvedPosition,
8211 [sideX]: x2,
8212 [sideY]: y2
8213 };
8214 } else {
8215 base = {
8216 ...originalFloatingStyles,
8217 position: resolvedPosition
8218 };
8219 }
8220 base[AVAILABLE_WIDTH_VAR] = "100vw";
8221 base[AVAILABLE_HEIGHT_VAR] = "100vh";
8222 if (!isPositioned) {
8223 base.opacity = 0;
8224 }
8225 return base;
8226 }, [adaptiveOrigin2, resolvedPosition, sideX, x2, sideY, y2, originalFloatingStyles, isPositioned]);
8227 const registeredPositionReferenceRef = React38.useRef(null);
8228 useIsoLayoutEffect(() => {
8229 if (!mounted) {
8230 return;
8231 }
8232 const anchorValue = anchorValueRef.current;
8233 const resolvedAnchor = typeof anchorValue === "function" ? anchorValue() : anchorValue;
8234 const unwrappedElement = (isRef(resolvedAnchor) ? resolvedAnchor.current : resolvedAnchor) || null;
8235 const finalAnchor = unwrappedElement || null;
8236 if (finalAnchor !== registeredPositionReferenceRef.current) {
8237 refs.setPositionReference(finalAnchor);
8238 registeredPositionReferenceRef.current = finalAnchor;
8239 }
8240 }, [mounted, refs, anchorDep, anchorValueRef]);
8241 React38.useEffect(() => {
8242 if (!mounted) {
8243 return;
8244 }
8245 const anchorValue = anchorValueRef.current;
8246 if (typeof anchorValue === "function") {
8247 return;
8248 }
8249 if (isRef(anchorValue) && anchorValue.current !== registeredPositionReferenceRef.current) {
8250 refs.setPositionReference(anchorValue.current);
8251 registeredPositionReferenceRef.current = anchorValue.current;
8252 }
8253 }, [mounted, refs, anchorDep, anchorValueRef]);
8254 React38.useEffect(() => {
8255 if (keepMounted && mounted && elements.reference && elements.floating) {
8256 return autoUpdate(elements.reference, elements.floating, update2, autoUpdateOptions);
8257 }
8258 return void 0;
8259 }, [keepMounted, mounted, elements, update2, autoUpdateOptions]);
8260 const renderedSide = getSide(renderedPlacement);
8261 const logicalRenderedSide = getLogicalSide(sideParam, renderedSide, isRtl);
8262 const renderedAlign = getAlignment(renderedPlacement) || "center";
8263 const anchorHidden2 = Boolean(middlewareData.hide?.referenceHidden);
8264 useIsoLayoutEffect(() => {
8265 if (lazyFlip && mounted && isPositioned && renderedSide !== side) {
8266 setMountSide(renderedSide);
8267 }
8268 }, [lazyFlip, mounted, isPositioned, renderedSide, side]);
8269 const arrowStyles = React38.useMemo(() => ({
8270 position: "absolute",
8271 top: middlewareData.arrow?.y,
8272 left: middlewareData.arrow?.x
8273 }), [middlewareData.arrow]);
8274 const arrowUncentered = middlewareData.arrow?.centerOffset !== 0;
8275 return React38.useMemo(() => ({
8276 positionerStyles: floatingStyles,
8277 arrowStyles,
8278 arrowRef,
8279 arrowUncentered,
8280 side: logicalRenderedSide,
8281 align: renderedAlign,
8282 physicalSide: renderedSide,
8283 anchorHidden: anchorHidden2,
8284 refs,
8285 context,
8286 isPositioned,
8287 update: update2
8288 }), [floatingStyles, arrowStyles, arrowRef, arrowUncentered, logicalRenderedSide, renderedAlign, renderedSide, anchorHidden2, refs, context, isPositioned, update2]);
8289 }
8290 function isRef(param) {
8291 return param != null && "current" in param;
8292 }
8293
8294 // node_modules/@base-ui/react/internals/getDisabledMountTransitionStyles.mjs
8295 function getDisabledMountTransitionStyles(transitionStatus) {
8296 return transitionStatus === "starting" ? DISABLED_TRANSITIONS_STYLE : EMPTY_OBJECT;
8297 }
8298
8299 // node_modules/@base-ui/react/utils/usePositioner.mjs
8300 function usePositioner(componentProps, state, {
8301 styles,
8302 transitionStatus,
8303 props,
8304 refs,
8305 hidden,
8306 inert = false
8307 }) {
8308 const style = {
8309 ...styles
8310 };
8311 if (inert) {
8312 style.pointerEvents = "none";
8313 }
8314 return useRenderElement("div", componentProps, {
8315 state,
8316 ref: refs,
8317 props: [{
8318 role: "presentation",
8319 hidden,
8320 style
8321 }, getDisabledMountTransitionStyles(transitionStatus), props],
8322 stateAttributesMapping: popupStateMapping
8323 });
8324 }
8325
8326 // node_modules/@base-ui/react/button/Button.mjs
8327 var React39 = __toESM(require_react(), 1);
8328 var Button = /* @__PURE__ */ React39.forwardRef(function Button2(componentProps, forwardedRef) {
8329 const {
8330 render: render4,
8331 className,
8332 disabled: disabled2 = false,
8333 focusableWhenDisabled = false,
8334 nativeButton = true,
8335 style,
8336 ...elementProps
8337 } = componentProps;
8338 const {
8339 getButtonProps,
8340 buttonRef
8341 } = useButton({
8342 disabled: disabled2,
8343 focusableWhenDisabled,
8344 native: nativeButton
8345 });
8346 const state = {
8347 disabled: disabled2
8348 };
8349 return useRenderElement("button", componentProps, {
8350 state,
8351 ref: [forwardedRef, buttonRef],
8352 props: [elementProps, getButtonProps]
8353 });
8354 });
8355 if (true) Button.displayName = "Button";
8356
8357 // node_modules/@base-ui/react/field/item/FieldItemContext.mjs
8358 var React40 = __toESM(require_react(), 1);
8359 var FieldItemContext = /* @__PURE__ */ React40.createContext({
8360 disabled: false
8361 });
8362 if (true) FieldItemContext.displayName = "FieldItemContext";
8363 function useFieldItemContext() {
8364 const context = React40.useContext(FieldItemContext);
8365 return context;
8366 }
8367
8368 // node_modules/@base-ui/react/field/root/useFieldValidation.mjs
8369 var React41 = __toESM(require_react(), 1);
8370
8371 // node_modules/@base-ui/react/field/utils/getCombinedFieldValidityData.mjs
8372 function getCombinedFieldValidityData(validityData, invalid2) {
8373 return {
8374 ...validityData,
8375 state: {
8376 ...validityData.state,
8377 valid: !invalid2 && validityData.state.valid
8378 }
8379 };
8380 }
8381
8382 // node_modules/@base-ui/react/field/root/useFieldValidation.mjs
8383 var validityKeys = Object.keys(DEFAULT_VALIDITY_STATE);
8384 function isEligibleInput(input, formElement) {
8385 if (input.matches(":disabled")) {
8386 return false;
8387 }
8388 if (!formElement || input.form === formElement) {
8389 return true;
8390 }
8391 return input.form === null && !input.hasAttribute("form");
8392 }
8393 function findRepresentativeInput(inputs, formElement) {
8394 let fallback = null;
8395 for (const input of inputs.keys()) {
8396 if (!isEligibleInput(input, formElement)) {
8397 continue;
8398 }
8399 if (!input.validity.valid) {
8400 return input;
8401 }
8402 fallback ??= input;
8403 }
8404 return fallback;
8405 }
8406 function makeState(customError) {
8407 return {
8408 ...DEFAULT_VALIDITY_STATE,
8409 valid: !customError,
8410 customError
8411 };
8412 }
8413 function getNativeErrors(element) {
8414 return element && element.validationMessage ? [element.validationMessage] : [];
8415 }
8416 function useFieldValidation(params) {
8417 const {
8418 elementRef,
8419 formRef
8420 } = useFormContext();
8421 const {
8422 setValidityData,
8423 validate,
8424 validityData,
8425 validationDebounceTime,
8426 invalid: invalid2,
8427 markedDirtyRef,
8428 state,
8429 shouldValidateOnChange,
8430 validationMode,
8431 registeredFieldIdRef
8432 } = params;
8433 const {
8434 controlId,
8435 getDescriptionProps
8436 } = useLabelableContext();
8437 const timeout = useTimeout();
8438 const inputRef = React41.useRef(null);
8439 const registeredInputs = useRefWithInit(() => /* @__PURE__ */ new Map()).current;
8440 const validationCommitIdRef = React41.useRef(0);
8441 const customValidityRef = React41.useRef(null);
8442 const registerInput = React41.useCallback((element, registration) => {
8443 registeredInputs.set(element, registration);
8444 return () => {
8445 registeredInputs.delete(element);
8446 };
8447 }, [registeredInputs]);
8448 const getInputControl = useStableCallback(() => {
8449 const element = findRepresentativeInput(registeredInputs, elementRef.current);
8450 return element && registeredInputs.get(element)?.controlRef.current || null;
8451 });
8452 const commit = useStableCallback(async (value, revalidate = false) => {
8453 validationCommitIdRef.current += 1;
8454 const validationCommitId = validationCommitIdRef.current;
8455 function updateRegisteredFieldValidity(nextValidityData, externalInvalid = invalid2) {
8456 const fieldId = registeredFieldIdRef.current ?? controlId;
8457 if (fieldId == null) {
8458 return;
8459 }
8460 const currentFieldData = formRef.current.fields.get(fieldId);
8461 if (!currentFieldData) {
8462 return;
8463 }
8464 const validityDataWithFormErrors = getCombinedFieldValidityData(nextValidityData, externalInvalid);
8465 formRef.current.fields.set(fieldId, {
8466 ...currentFieldData,
8467 validityData: validityDataWithFormErrors
8468 });
8469 }
8470 function makeValidityData(validityState, errorMessages) {
8471 const errors = validityState.valid === false ? errorMessages : [];
8472 return {
8473 value,
8474 state: validityState,
8475 error: errors[0] ?? "",
8476 errors,
8477 initialValue: validityData.initialValue
8478 };
8479 }
8480 function setCustomValidity(element2, message2) {
8481 const displaced = element2.validity.customError ? element2.validationMessage : "";
8482 const ownedMessage = message2.replace(/\r\n?/g, "\n");
8483 element2.setCustomValidity(ownedMessage);
8484 customValidityRef.current = [element2, ownedMessage, displaced];
8485 }
8486 function clearCustomValidity() {
8487 const record = customValidityRef.current;
8488 customValidityRef.current = null;
8489 if (record && (!record[0].willValidate || record[0].validationMessage === record[1])) {
8490 record[0].setCustomValidity(record[2]);
8491 }
8492 }
8493 function publish(validityState, errorMessages, externalInvalid) {
8494 const nextValidityData = makeValidityData(validityState, errorMessages);
8495 updateRegisteredFieldValidity(nextValidityData, externalInvalid);
8496 setValidityData(nextValidityData);
8497 }
8498 function getState(el) {
8499 const computedState = validityKeys.reduce((acc, key) => {
8500 acc[key] = el.validity[key];
8501 return acc;
8502 }, {});
8503 let hasOnlyValueMissingError = false;
8504 for (const key of validityKeys) {
8505 if (key === "valid") {
8506 continue;
8507 }
8508 if (key === "valueMissing" && computedState[key]) {
8509 hasOnlyValueMissingError = true;
8510 } else if (computedState[key]) {
8511 return computedState;
8512 }
8513 }
8514 if (hasOnlyValueMissingError && !markedDirtyRef.current) {
8515 computedState.valid = true;
8516 computedState.valueMissing = false;
8517 }
8518 return computedState;
8519 }
8520 function resolveRepresentativeInput() {
8521 return registeredInputs.size > 0 ? findRepresentativeInput(registeredInputs, elementRef.current) : inputRef.current;
8522 }
8523 let element = resolveRepresentativeInput();
8524 function refreshState() {
8525 element = resolveRepresentativeInput();
8526 return element?.willValidate ? getState(element) : makeState(false);
8527 }
8528 if (revalidate) {
8529 if (state.valid !== false || !element) {
8530 return;
8531 }
8532 if (!element.validity.valueMissing) {
8533 clearCustomValidity();
8534 const currentElement = resolveRepresentativeInput();
8535 const foreign = currentElement?.validity.customError ? getNativeErrors(currentElement) : [];
8536 publish(makeState(foreign.length > 0), foreign, false);
8537 return;
8538 }
8539 for (const key of validityKeys) {
8540 if (key !== "valid" && key !== "valueMissing" && key !== "customError" && element.validity[key]) {
8541 return;
8542 }
8543 }
8544 }
8545 timeout.clear();
8546 clearCustomValidity();
8547 let nextState = refreshState();
8548 let validationErrors = getNativeErrors(element);
8549 const isValidatingOnChange = shouldValidateOnChange();
8550 if (validationErrors.length === 0 || isValidatingOnChange) {
8551 const formValues = Array.from(formRef.current.fields.values()).reduce((acc, field) => {
8552 if (field.name) {
8553 acc[field.name] = field.getValue();
8554 }
8555 return acc;
8556 }, {});
8557 const resultOrPromise = validate(value, formValues);
8558 let result;
8559 if (typeof resultOrPromise === "object" && resultOrPromise !== null && "then" in resultOrPromise) {
8560 if (nextState.valid === false) {
8561 publish(nextState, validationErrors);
8562 } else if (validationMode === "onSubmit" || !validityData.state.customError) {
8563 nextState.valid = null;
8564 publish(nextState, validationErrors);
8565 }
8566 result = await resultOrPromise;
8567 if (validationCommitId !== validationCommitIdRef.current) {
8568 return;
8569 }
8570 nextState = refreshState();
8571 } else {
8572 result = resultOrPromise;
8573 }
8574 validationErrors = result ? [].concat(result).filter(Boolean) : [];
8575 if (validationErrors.length > 0) {
8576 nextState.valid = false;
8577 nextState.customError = true;
8578 if (element?.willValidate) {
8579 setCustomValidity(element, validationErrors.join("\n"));
8580 }
8581 } else {
8582 validationErrors = getNativeErrors(element);
8583 }
8584 }
8585 publish(nextState, validationErrors);
8586 });
8587 const change = useStableCallback((value, cancelPending = false) => {
8588 timeout.clear();
8589 validationCommitIdRef.current += 1;
8590 if (cancelPending) {
8591 return;
8592 }
8593 const validateOnChange = shouldValidateOnChange();
8594 if (validateOnChange && value !== "" && validationDebounceTime) {
8595 timeout.start(validationDebounceTime, () => {
8596 commit(value);
8597 });
8598 } else {
8599 commit(value, !validateOnChange);
8600 }
8601 });
8602 const getValidationProps = React41.useCallback((disabled2, externalProps = {}) => mergeProps(getDescriptionProps(externalProps), state.valid === false && !state.disabled && !disabled2 ? {
8603 "aria-invalid": true
8604 } : EMPTY_OBJECT), [getDescriptionProps, state.disabled, state.valid]);
8605 return React41.useMemo(() => ({
8606 getValidationProps,
8607 inputRef,
8608 registeredInputs,
8609 registerInput,
8610 getInputControl,
8611 commit,
8612 change
8613 }), [getValidationProps, registeredInputs, registerInput, getInputControl, commit, change]);
8614 }
8615
8616 // node_modules/@base-ui/react/utils/useRegisteredLabelId.mjs
8617 function useRegisteredLabelId(idProp, setLabelId) {
8618 const id = useBaseUiId(idProp);
8619 useIsoLayoutEffect(() => {
8620 setLabelId(id);
8621 return () => {
8622 setLabelId((currentId) => currentId === id ? void 0 : currentId);
8623 };
8624 }, [id, setLabelId]);
8625 return id;
8626 }
8627
8628 // node_modules/@base-ui/react/internals/labelable-provider/useLabel.mjs
8629 function useLabel(params = {}) {
8630 const {
8631 id: idProp,
8632 fallbackControlId,
8633 native = false,
8634 setLabelId: setLabelIdProp,
8635 focusControl: focusControlProp
8636 } = params;
8637 const {
8638 controlId: contextControlId,
8639 setLabelId: setContextLabelId
8640 } = useLabelableContext();
8641 const syncLabelId = useStableCallback((nextLabelId) => {
8642 setContextLabelId(nextLabelId);
8643 setLabelIdProp?.(nextLabelId);
8644 });
8645 const id = useRegisteredLabelId(idProp, syncLabelId);
8646 const resolvedControlId = contextControlId ?? fallbackControlId;
8647 function focusControl(event) {
8648 if (focusControlProp) {
8649 focusControlProp(event, resolvedControlId);
8650 return;
8651 }
8652 if (!resolvedControlId) {
8653 return;
8654 }
8655 const controlElement = ownerDocument(event.currentTarget).getElementById(resolvedControlId);
8656 if (isHTMLElement(controlElement)) {
8657 focusElementWithVisible(controlElement);
8658 }
8659 }
8660 function handleInteraction(event) {
8661 const target = getTarget(event.nativeEvent);
8662 if (target?.closest("button,input,select,textarea")) {
8663 return;
8664 }
8665 if (!event.defaultPrevented && event.detail > 1) {
8666 event.preventDefault();
8667 }
8668 if (native) {
8669 return;
8670 }
8671 focusControl(event);
8672 }
8673 return native ? {
8674 id,
8675 htmlFor: resolvedControlId,
8676 onMouseDown: handleInteraction
8677 } : {
8678 id,
8679 onClick: handleInteraction,
8680 onPointerDown(event) {
8681 event.preventDefault();
8682 }
8683 };
8684 }
8685 function focusElementWithVisible(element) {
8686 element.focus({
8687 // Available from Chrome 144+ (January 2026).
8688 // Safari and Firefox already support it.
8689 focusVisible: true
8690 });
8691 }
8692
8693 // node_modules/@base-ui/react/utils/usePopupViewport.mjs
8694 var React45 = __toESM(require_react(), 1);
8695 var ReactDOM6 = __toESM(require_react_dom(), 1);
8696
8697 // node_modules/@base-ui/utils/usePreviousValue.mjs
8698 var React42 = __toESM(require_react(), 1);
8699 function usePreviousValue(value) {
8700 const [state, setState] = React42.useState({
8701 current: value,
8702 previous: null
8703 });
8704 if (!Object.is(value, state.current)) {
8705 setState({
8706 current: value,
8707 previous: state.current
8708 });
8709 }
8710 return state.previous;
8711 }
8712
8713 // node_modules/@base-ui/react/utils/usePopupAutoResize.mjs
8714 var React43 = __toESM(require_react(), 1);
8715
8716 // node_modules/@base-ui/react/utils/getCssDimensions.mjs
8717 function getCssDimensions2(element) {
8718 const css = getComputedStyle2(element);
8719 let width = parseFloat(css.width) || 0;
8720 let height = parseFloat(css.height) || 0;
8721 const hasOffset = isHTMLElement(element);
8722 const offsetWidth = hasOffset ? element.offsetWidth : width;
8723 const offsetHeight = hasOffset ? element.offsetHeight : height;
8724 const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;
8725 if (shouldFallback) {
8726 width = offsetWidth;
8727 height = offsetHeight;
8728 }
8729 return {
8730 width,
8731 height
8732 };
8733 }
8734
8735 // node_modules/@base-ui/react/utils/CommonPopupCssVars.mjs
8736 var popupWidth = "--popup-width";
8737 var popupHeight = "--popup-height";
8738
8739 // node_modules/@base-ui/react/utils/usePopupAutoResize.mjs
8740 function usePopupAutoResize(parameters) {
8741 const {
8742 popupElement,
8743 positionerElement,
8744 content,
8745 mounted,
8746 onMeasureLayout: onMeasureLayoutParam,
8747 onMeasureLayoutComplete: onMeasureLayoutCompleteParam,
8748 side,
8749 direction
8750 } = parameters;
8751 const runOnceAnimationsFinish = useAnimationsFinished(popupElement, true);
8752 const animationFrame = useAnimationFrame();
8753 const committedDimensionsRef = React43.useRef(null);
8754 const isInitialRenderRef = React43.useRef(true);
8755 const restoreAnchoringStylesRef = React43.useRef(NOOP);
8756 const onMeasureLayout = useStableCallback(onMeasureLayoutParam);
8757 const onMeasureLayoutComplete = useStableCallback(onMeasureLayoutCompleteParam);
8758 const anchoringStyles = React43.useMemo(() => getPopupAnchoringStyles(side, direction), [side, direction]);
8759 useIsoLayoutEffect(() => {
8760 if (!mounted) {
8761 restoreAnchoringStylesRef.current = NOOP;
8762 isInitialRenderRef.current = true;
8763 committedDimensionsRef.current = null;
8764 return void 0;
8765 }
8766 if (!popupElement || !positionerElement) {
8767 return void 0;
8768 }
8769 restoreAnchoringStylesRef.current = applyElementStyles(popupElement, anchoringStyles);
8770 setPopupCssSize(popupElement, "auto");
8771 const restorePopupPosition = overrideElementStyle(popupElement, "position", "static");
8772 const restorePopupTransform = overrideElementStyle(popupElement, "transform", "none");
8773 const restorePopupScale = overrideElementStyle(popupElement, "scale", "1");
8774 const restorePositionerAvailableSize = applyElementStyles(positionerElement, {
8775 [availableWidth]: "max-content",
8776 [availableHeight]: "max-content"
8777 });
8778 function restoreMeasurementOverrides() {
8779 restorePopupPosition();
8780 restorePopupTransform();
8781 restorePositionerAvailableSize();
8782 }
8783 function restoreMeasurementOverridesIncludingScale() {
8784 restoreMeasurementOverrides();
8785 restorePopupScale();
8786 }
8787 onMeasureLayout?.();
8788 if (isInitialRenderRef.current || committedDimensionsRef.current === null) {
8789 setPositionerCssSize(positionerElement, "max-content");
8790 const dimensions = getCssDimensions2(popupElement);
8791 committedDimensionsRef.current = dimensions;
8792 setPositionerCssSize(positionerElement, dimensions);
8793 restoreMeasurementOverridesIncludingScale();
8794 onMeasureLayoutComplete?.(null, dimensions);
8795 isInitialRenderRef.current = false;
8796 return () => {
8797 restoreAnchoringStylesRef.current();
8798 restoreAnchoringStylesRef.current = NOOP;
8799 };
8800 }
8801 setPositionerCssSize(positionerElement, "max-content");
8802 const previousDimensions = committedDimensionsRef.current;
8803 const newDimensions = getCssDimensions2(popupElement);
8804 committedDimensionsRef.current = newDimensions;
8805 setPopupCssSize(popupElement, previousDimensions);
8806 restoreMeasurementOverridesIncludingScale();
8807 onMeasureLayoutComplete?.(previousDimensions, newDimensions);
8808 setPositionerCssSize(positionerElement, newDimensions);
8809 const abortController = new AbortController();
8810 animationFrame.request(() => {
8811 setPopupCssSize(popupElement, newDimensions);
8812 runOnceAnimationsFinish(() => {
8813 popupElement.style.setProperty(popupWidth, "auto");
8814 popupElement.style.setProperty(popupHeight, "auto");
8815 }, abortController.signal);
8816 });
8817 return () => {
8818 abortController.abort();
8819 animationFrame.cancel();
8820 restoreAnchoringStylesRef.current();
8821 restoreAnchoringStylesRef.current = NOOP;
8822 };
8823 }, [content, popupElement, positionerElement, runOnceAnimationsFinish, animationFrame, mounted, onMeasureLayout, onMeasureLayoutComplete, anchoringStyles]);
8824 }
8825 function getPopupAnchoringStyles(side, direction) {
8826 const isPhysicalTop = side === "top";
8827 const isPhysicalLeft = side === "left" || side === (direction === "rtl" ? "inline-end" : "inline-start");
8828 if (!isPhysicalTop && !isPhysicalLeft) {
8829 return EMPTY_OBJECT;
8830 }
8831 return {
8832 position: "absolute",
8833 [isPhysicalTop ? "bottom" : "top"]: "0",
8834 [isPhysicalLeft ? "right" : "left"]: "0"
8835 };
8836 }
8837 function overrideElementStyle(element, property, value) {
8838 const originalValue = element.style.getPropertyValue(property);
8839 element.style.setProperty(property, value);
8840 return () => {
8841 element.style.setProperty(property, originalValue);
8842 };
8843 }
8844 function applyElementStyles(element, styles) {
8845 const restorers = [];
8846 for (const [key, value] of Object.entries(styles)) {
8847 restorers.push(overrideElementStyle(element, key, value));
8848 }
8849 return restorers.length ? () => {
8850 restorers.forEach((restore) => restore());
8851 } : NOOP;
8852 }
8853 function setPopupCssSize(popupElement, size4) {
8854 const width = size4 === "auto" ? "auto" : `${size4.width}px`;
8855 const height = size4 === "auto" ? "auto" : `${size4.height}px`;
8856 popupElement.style.setProperty(popupWidth, width);
8857 popupElement.style.setProperty(popupHeight, height);
8858 }
8859 function setPositionerCssSize(positionerElement, size4) {
8860 const width = size4 === "max-content" ? "max-content" : `${size4.width}px`;
8861 const height = size4 === "max-content" ? "max-content" : `${size4.height}px`;
8862 positionerElement.style.setProperty(positionerWidth, width);
8863 positionerElement.style.setProperty(positionerHeight, height);
8864 }
8865
8866 // node_modules/@base-ui/react/direction-provider/DirectionProvider.mjs
8867 var React44 = __toESM(require_react(), 1);
8868 var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1);
8869 var DirectionProvider = function DirectionProvider2(props) {
8870 const {
8871 direction = "ltr"
8872 } = props;
8873 const contextValue = React44.useMemo(() => ({
8874 direction
8875 }), [direction]);
8876 return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DirectionContext.Provider, {
8877 value: contextValue,
8878 children: props.children
8879 });
8880 };
8881 if (true) DirectionProvider.displayName = "DirectionProvider";
8882
8883 // node_modules/@base-ui/react/utils/adaptiveOriginMiddleware.mjs
8884 var adaptiveOrigin = {
8885 name: "adaptiveOrigin",
8886 async fn(state) {
8887 const {
8888 x: rawX,
8889 y: rawY,
8890 rects: {
8891 floating: floatRect
8892 },
8893 elements: {
8894 floating
8895 },
8896 platform: platform3,
8897 strategy,
8898 placement
8899 } = state;
8900 const win = getWindow(floating);
8901 const styles = win.getComputedStyle(floating);
8902 const hasTransition = styles.transitionDuration !== "0s" && styles.transitionDuration !== "";
8903 if (!hasTransition) {
8904 return {
8905 x: rawX,
8906 y: rawY,
8907 data: DEFAULT_SIDES
8908 };
8909 }
8910 const offsetParent = await platform3.getOffsetParent?.(floating);
8911 let offsetDimensions = {
8912 width: 0,
8913 height: 0
8914 };
8915 if (strategy === "fixed" && win?.visualViewport) {
8916 offsetDimensions = {
8917 width: win.visualViewport.width,
8918 height: win.visualViewport.height
8919 };
8920 } else if (offsetParent === win) {
8921 const doc = ownerDocument(floating);
8922 offsetDimensions = {
8923 width: doc.documentElement.clientWidth,
8924 height: doc.documentElement.clientHeight
8925 };
8926 } else if (await platform3.isElement?.(offsetParent)) {
8927 offsetDimensions = await platform3.getDimensions(offsetParent);
8928 }
8929 const currentSide = getSide(placement);
8930 let x2 = rawX;
8931 let y2 = rawY;
8932 if (currentSide === "left") {
8933 x2 = offsetDimensions.width - (rawX + floatRect.width);
8934 }
8935 if (currentSide === "top") {
8936 y2 = offsetDimensions.height - (rawY + floatRect.height);
8937 }
8938 const sideX = currentSide === "left" ? "right" : DEFAULT_SIDES.sideX;
8939 const sideY = currentSide === "top" ? "bottom" : DEFAULT_SIDES.sideY;
8940 return {
8941 x: x2,
8942 y: y2,
8943 data: {
8944 sideX,
8945 sideY
8946 }
8947 };
8948 }
8949 };
8950
8951 // node_modules/@base-ui/react/utils/CommonViewportDataAttributes.mjs
8952 var activationDirection = "data-activation-direction";
8953
8954 // node_modules/@base-ui/react/utils/usePopupViewport.mjs
8955 var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1);
8956 var popupViewportStateMapping = {
8957 activationDirection: (value) => value ? {
8958 [activationDirection]: value
8959 } : null
8960 };
8961 function usePopupViewport(parameters) {
8962 const {
8963 store,
8964 side,
8965 children
8966 } = parameters;
8967 const direction = useDirection();
8968 const activeTrigger = store.useState("activeTriggerElement");
8969 const activeTriggerId = store.useState("activeTriggerId");
8970 const open2 = store.useState("open");
8971 const payload = store.useState("payload");
8972 const mounted = store.useState("mounted");
8973 const popupElement = store.useState("popupElement");
8974 const positionerElement = store.useState("positionerElement");
8975 const previousActiveTrigger = usePreviousValue(open2 ? activeTrigger : null);
8976 const currentContentKey = usePopupContentKey(activeTriggerId, payload);
8977 const capturedNodeRef = React45.useRef(null);
8978 const [previousContentNode, setPreviousContentNode] = React45.useState(null);
8979 const [newTriggerOffset, setNewTriggerOffset] = React45.useState(null);
8980 const currentContainerRef = React45.useRef(null);
8981 const previousContainerRef = React45.useRef(null);
8982 const onAnimationsFinished = useAnimationsFinished(currentContainerRef, true);
8983 const cleanupFrame = useAnimationFrame();
8984 const cleanupControllerRef = React45.useRef(null);
8985 const [previousContentDimensions, setPreviousContentDimensions] = React45.useState(null);
8986 const [showStartingStyleAttribute, setShowStartingStyleAttribute] = React45.useState(false);
8987 useIsoLayoutEffect(() => {
8988 store.set("adaptiveOrigin", adaptiveOrigin);
8989 return () => {
8990 store.set("adaptiveOrigin", void 0);
8991 };
8992 }, [store]);
8993 const handleMeasureLayout = useStableCallback(() => {
8994 currentContainerRef.current?.style.setProperty("animation", "none");
8995 currentContainerRef.current?.style.setProperty("transition", "none");
8996 previousContainerRef.current?.style.setProperty("display", "none");
8997 });
8998 const handleMeasureLayoutComplete = useStableCallback((previousDimensions) => {
8999 currentContainerRef.current?.style.removeProperty("animation");
9000 currentContainerRef.current?.style.removeProperty("transition");
9001 previousContainerRef.current?.style.removeProperty("display");
9002 if (previousDimensions) {
9003 setPreviousContentDimensions(previousDimensions);
9004 }
9005 });
9006 const armViewportCleanup = useStableCallback(() => {
9007 cleanupControllerRef.current?.abort();
9008 const controller = new AbortController();
9009 cleanupControllerRef.current = controller;
9010 onAnimationsFinished(() => {
9011 setPreviousContentNode(null);
9012 setPreviousContentDimensions(null);
9013 capturedNodeRef.current = null;
9014 }, controller.signal);
9015 });
9016 const lastHandledTriggerRef = React45.useRef(null);
9017 useIsoLayoutEffect(() => {
9018 if (!open2 || !mounted) {
9019 lastHandledTriggerRef.current = null;
9020 }
9021 }, [open2, mounted]);
9022 useIsoLayoutEffect(() => {
9023 if (activeTrigger && previousActiveTrigger && activeTrigger !== previousActiveTrigger && lastHandledTriggerRef.current !== activeTrigger && capturedNodeRef.current) {
9024 setPreviousContentNode(capturedNodeRef.current);
9025 setShowStartingStyleAttribute(true);
9026 const offset4 = calculateRelativePosition(previousActiveTrigger, activeTrigger);
9027 setNewTriggerOffset(offset4);
9028 lastHandledTriggerRef.current = activeTrigger;
9029 }
9030 }, [activeTrigger, previousActiveTrigger]);
9031 useIsoLayoutEffect(() => {
9032 if (previousContentNode == null) {
9033 return;
9034 }
9035 cleanupControllerRef.current?.abort();
9036 setShowStartingStyleAttribute(true);
9037 cleanupFrame.request(() => {
9038 ReactDOM6.flushSync(() => {
9039 setShowStartingStyleAttribute(false);
9040 });
9041 armViewportCleanup();
9042 });
9043 }, [currentContentKey, previousContentNode, armViewportCleanup, cleanupFrame]);
9044 useIsoLayoutEffect(() => {
9045 const source = currentContainerRef.current;
9046 if (!source) {
9047 return;
9048 }
9049 const wrapper = ownerDocument(source).createElement("div");
9050 for (const child of Array.from(source.childNodes)) {
9051 wrapper.appendChild(child.cloneNode(true));
9052 }
9053 capturedNodeRef.current = wrapper;
9054 });
9055 const isTransitioning = previousContentNode != null;
9056 let childrenToRender;
9057 if (!isTransitioning) {
9058 childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", {
9059 "data-current": true,
9060 ref: currentContainerRef,
9061 children
9062 }, currentContentKey);
9063 } else {
9064 childrenToRender = /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(React45.Fragment, {
9065 children: [/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", {
9066 "data-previous": true,
9067 inert: inertValue(true),
9068 ref: previousContainerRef,
9069 style: {
9070 ...previousContentDimensions ? {
9071 [popupWidth]: `${previousContentDimensions.width}px`,
9072 [popupHeight]: `${previousContentDimensions.height}px`
9073 } : null,
9074 position: "absolute"
9075 },
9076 "data-ending-style": showStartingStyleAttribute ? void 0 : ""
9077 }, "previous"), /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", {
9078 "data-current": true,
9079 ref: currentContainerRef,
9080 "data-starting-style": showStartingStyleAttribute ? "" : void 0,
9081 children
9082 }, currentContentKey)]
9083 });
9084 }
9085 useIsoLayoutEffect(() => {
9086 const container = previousContainerRef.current;
9087 if (!container || !previousContentNode) {
9088 return;
9089 }
9090 container.replaceChildren(...Array.from(previousContentNode.childNodes));
9091 }, [previousContentNode]);
9092 usePopupAutoResize({
9093 popupElement,
9094 positionerElement,
9095 mounted,
9096 content: payload,
9097 onMeasureLayout: handleMeasureLayout,
9098 onMeasureLayoutComplete: handleMeasureLayoutComplete,
9099 side,
9100 direction
9101 });
9102 const state = {
9103 activationDirection: getActivationDirection(newTriggerOffset),
9104 transitioning: isTransitioning
9105 };
9106 return {
9107 children: childrenToRender,
9108 state
9109 };
9110 }
9111 function getActivationDirection(offset4) {
9112 if (!offset4) {
9113 return void 0;
9114 }
9115 return `${getValueWithTolerance(offset4.horizontal, 5, "right", "left")} ${getValueWithTolerance(offset4.vertical, 5, "down", "up")}`;
9116 }
9117 function getValueWithTolerance(value, tolerance, positiveLabel, negativeLabel) {
9118 if (value > tolerance) {
9119 return positiveLabel;
9120 }
9121 if (value < -tolerance) {
9122 return negativeLabel;
9123 }
9124 return "";
9125 }
9126 function calculateRelativePosition(from, to) {
9127 const fromRect = from.getBoundingClientRect();
9128 const toRect = to.getBoundingClientRect();
9129 const fromCenter = {
9130 x: fromRect.left + fromRect.width / 2,
9131 y: fromRect.top + fromRect.height / 2
9132 };
9133 const toCenter = {
9134 x: toRect.left + toRect.width / 2,
9135 y: toRect.top + toRect.height / 2
9136 };
9137 return {
9138 horizontal: toCenter.x - fromCenter.x,
9139 vertical: toCenter.y - fromCenter.y
9140 };
9141 }
9142 function usePopupContentKey(activeTriggerId, payload) {
9143 const [contentKey, setContentKey] = React45.useState(0);
9144 const previousActiveTriggerIdRef = React45.useRef(activeTriggerId);
9145 const previousPayloadRef = React45.useRef(payload);
9146 const pendingPayloadUpdateRef = React45.useRef(false);
9147 useIsoLayoutEffect(() => {
9148 const previousActiveTriggerId = previousActiveTriggerIdRef.current;
9149 const previousPayload = previousPayloadRef.current;
9150 const triggerIdChanged = activeTriggerId !== previousActiveTriggerId;
9151 const payloadChanged = payload !== previousPayload;
9152 if (triggerIdChanged) {
9153 setContentKey((value) => value + 1);
9154 pendingPayloadUpdateRef.current = !payloadChanged;
9155 } else if (pendingPayloadUpdateRef.current && payloadChanged) {
9156 setContentKey((value) => value + 1);
9157 pendingPayloadUpdateRef.current = false;
9158 }
9159 previousActiveTriggerIdRef.current = activeTriggerId;
9160 previousPayloadRef.current = payload;
9161 }, [activeTriggerId, payload]);
9162 return `${activeTriggerId ?? "current"}-${contentKey}`;
9163 }
9164
9165 // node_modules/@base-ui/react/field/index.parts.mjs
9166 var index_parts_exports = {};
9167 __export(index_parts_exports, {
9168 Control: () => FieldControl,
9169 Description: () => FieldDescription,
9170 Error: () => FieldError,
9171 Item: () => FieldItem,
9172 Label: () => FieldLabel,
9173 Root: () => FieldRoot,
9174 Validity: () => FieldValidity
9175 });
9176
9177 // node_modules/@base-ui/react/field/root/FieldRoot.mjs
9178 var React49 = __toESM(require_react(), 1);
9179
9180 // node_modules/@base-ui/react/fieldset/root/FieldsetRootContext.mjs
9181 var React46 = __toESM(require_react(), 1);
9182 var FieldsetRootContext = /* @__PURE__ */ React46.createContext(void 0);
9183 if (true) FieldsetRootContext.displayName = "FieldsetRootContext";
9184 function useFieldsetRootContext(optional = false) {
9185 const context = React46.useContext(FieldsetRootContext);
9186 if (!context && !optional) {
9187 throw new Error(true ? "Base UI: FieldsetRootContext is missing. Fieldset parts must be placed within <Fieldset.Root>." : formatErrorMessage_default(86));
9188 }
9189 return context;
9190 }
9191
9192 // node_modules/@base-ui/react/internals/labelable-provider/LabelableProvider.mjs
9193 var React47 = __toESM(require_react(), 1);
9194 var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1);
9195 var LabelableProvider = function LabelableProvider2(props) {
9196 const defaultId = useBaseUiId();
9197 const [controlIdState, setControlIdState] = React47.useState(defaultId);
9198 const [labelId, setLabelId] = React47.useState();
9199 const [messageIds, setMessageIds] = React47.useState([]);
9200 const controlId = controlIdState === void 0 ? defaultId : controlIdState;
9201 const registrationsRef = useRefWithInit(() => /* @__PURE__ */ new Map());
9202 const {
9203 messageIds: parentMessageIds
9204 } = useLabelableContext();
9205 const registerControlId = useStableCallback((source, nextId) => {
9206 const registrations = registrationsRef.current;
9207 if (nextId === void 0) {
9208 registrations.delete(source);
9209 } else {
9210 registrations.set(source, nextId);
9211 }
9212 setControlIdState((prev) => {
9213 if (registrations.size === 0) {
9214 return prev;
9215 }
9216 let nextControlId;
9217 for (const id of registrations.values()) {
9218 if (id === prev) {
9219 return prev;
9220 }
9221 if (nextControlId === void 0) {
9222 nextControlId = id;
9223 }
9224 }
9225 return nextControlId;
9226 });
9227 });
9228 const resetControlId = useStableCallback(() => {
9229 if (registrationsRef.current.size === 0) {
9230 setControlIdState(defaultId);
9231 }
9232 });
9233 const getDescriptionProps = React47.useCallback((externalProps) => {
9234 const ids = externalProps["aria-describedby"] ? externalProps["aria-describedby"].split(" ") : [];
9235 ids.push(...parentMessageIds, ...messageIds);
9236 return {
9237 ...externalProps,
9238 "aria-describedby": Array.from(new Set(ids)).join(" ") || void 0
9239 };
9240 }, [parentMessageIds, messageIds]);
9241 const contextValue = React47.useMemo(() => ({
9242 controlId,
9243 registerControlId,
9244 resetControlId,
9245 labelId,
9246 setLabelId,
9247 messageIds,
9248 setMessageIds,
9249 getDescriptionProps
9250 }), [controlId, registerControlId, resetControlId, labelId, setLabelId, messageIds, setMessageIds, getDescriptionProps]);
9251 return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(LabelableContext.Provider, {
9252 value: contextValue,
9253 children: props.children
9254 });
9255 };
9256 if (true) LabelableProvider.displayName = "LabelableProvider";
9257
9258 // node_modules/@base-ui/react/internals/field-register-control/useFieldControlRegistration.mjs
9259 var React48 = __toESM(require_react(), 1);
9260 function useFieldControlRegistration(params) {
9261 const {
9262 change,
9263 commit,
9264 invalid: invalid2,
9265 markedDirtyRef,
9266 name,
9267 setRegisteredFieldName,
9268 registeredFieldIdRef,
9269 setValidityData,
9270 validityData
9271 } = params;
9272 const {
9273 formRef
9274 } = useFormContext();
9275 const activeFieldControlSourceRef = React48.useRef(null);
9276 const registrationRef = React48.useRef(null);
9277 const initialValueCapturedRef = React48.useRef(false);
9278 const getValueForForm = useStableCallback(() => {
9279 const registration = registrationRef.current;
9280 if (!registration) {
9281 return void 0;
9282 }
9283 if (registration.getValue) {
9284 return registration.getValue();
9285 }
9286 return registration.value;
9287 });
9288 function getRegistrationValue(registration) {
9289 return registration.value === void 0 ? getValueForForm() : registration.value;
9290 }
9291 const validate = useStableCallback(() => {
9292 const registration = registrationRef.current;
9293 markedDirtyRef.current = true;
9294 if (!registration) {
9295 commit(validityData.value);
9296 return;
9297 }
9298 commit(getRegistrationValue(registration));
9299 });
9300 function refreshRegistration() {
9301 const registration = registrationRef.current;
9302 if (!registration || !registration.id) {
9303 return;
9304 }
9305 formRef.current.fields.set(registration.id, {
9306 getValue: getValueForForm,
9307 name: name ?? registration.name,
9308 controlRef: registration.controlRef,
9309 validityData: getCombinedFieldValidityData(validityData, invalid2),
9310 validate
9311 });
9312 }
9313 function deleteRegistration(id = registrationRef.current?.id) {
9314 if (id) {
9315 formRef.current.fields.delete(id);
9316 }
9317 }
9318 function captureInitialValue(registration) {
9319 if (initialValueCapturedRef.current) {
9320 return;
9321 }
9322 initialValueCapturedRef.current = true;
9323 const initialValue = getRegistrationValue(registration);
9324 setValidityData((prev) => prev.initialValue === initialValue ? prev : {
9325 ...prev,
9326 initialValue
9327 });
9328 }
9329 useIsoLayoutEffect(() => {
9330 const registration = registrationRef.current;
9331 if (!registration || !registration.id) {
9332 return;
9333 }
9334 setRegisteredFieldName(name ? void 0 : registration.name);
9335 formRef.current.fields.set(registration.id, {
9336 getValue: getValueForForm,
9337 name: name ?? registration.name,
9338 controlRef: registration.controlRef,
9339 validityData: getCombinedFieldValidityData(validityData, invalid2),
9340 validate
9341 });
9342 }, [formRef, getValueForForm, invalid2, name, setRegisteredFieldName, validate, validityData]);
9343 useIsoLayoutEffect(() => {
9344 const fields = formRef.current.fields;
9345 return () => {
9346 const id = registrationRef.current?.id;
9347 if (id) {
9348 fields.delete(id);
9349 }
9350 };
9351 }, [formRef]);
9352 const register2 = useStableCallback((source, registration) => {
9353 if (!registration) {
9354 if (activeFieldControlSourceRef.current === source) {
9355 activeFieldControlSourceRef.current = null;
9356 change(void 0, true);
9357 deleteRegistration();
9358 registrationRef.current = null;
9359 setRegisteredFieldName(void 0);
9360 registeredFieldIdRef.current = void 0;
9361 }
9362 return;
9363 }
9364 const previousId = registrationRef.current?.id;
9365 const previousSource = activeFieldControlSourceRef.current;
9366 if (previousSource && previousSource !== source) {
9367 change(void 0, true);
9368 }
9369 activeFieldControlSourceRef.current = source;
9370 registrationRef.current = registration;
9371 if (!name) {
9372 setRegisteredFieldName(registration.name);
9373 }
9374 registeredFieldIdRef.current = registration.id;
9375 if (previousId && previousId !== registration.id) {
9376 deleteRegistration(previousId);
9377 }
9378 captureInitialValue(registration);
9379 refreshRegistration();
9380 });
9381 return [validate, register2];
9382 }
9383
9384 // node_modules/@base-ui/react/field/root/FieldRoot.mjs
9385 var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1);
9386 var FieldRootInner = /* @__PURE__ */ React49.forwardRef(function FieldRootInner2(componentProps, forwardedRef) {
9387 const {
9388 errors,
9389 validationMode: formValidationMode,
9390 submitCountRef
9391 } = useFormContext();
9392 const {
9393 render: render4,
9394 className,
9395 validate: validateProp,
9396 validationDebounceTime = 0,
9397 validationMode = formValidationMode,
9398 name,
9399 disabled: disabledProp = false,
9400 invalid: invalidProp,
9401 dirty: dirtyProp,
9402 touched: touchedProp,
9403 actionsRef,
9404 style,
9405 ...elementProps
9406 } = componentProps;
9407 const disabledFieldset = useFieldsetRootContext(true)?.disabled;
9408 const validate = useStableCallback(validateProp || (() => null));
9409 const disabled2 = disabledFieldset || disabledProp;
9410 const [touchedState, setTouchedUnwrapped] = React49.useState(false);
9411 const [dirtyState, setDirtyUnwrapped] = React49.useState(false);
9412 const [filled, setFilled] = React49.useState(false);
9413 const [focused, setFocused] = React49.useState(false);
9414 const dirty = dirtyProp ?? dirtyState;
9415 const touched = touchedProp ?? touchedState;
9416 const markedDirtyRef = React49.useRef(dirty);
9417 const registeredFieldIdRef = React49.useRef(void 0);
9418 const [registeredFieldName, setRegisteredFieldName] = React49.useState();
9419 const effectiveName = name ?? registeredFieldName;
9420 useIsoLayoutEffect(() => {
9421 if (dirtyProp !== void 0) {
9422 markedDirtyRef.current = dirtyProp;
9423 }
9424 }, [dirtyProp]);
9425 const setDirty = useStableCallback((value) => {
9426 if (dirtyProp !== void 0) {
9427 return;
9428 }
9429 if (value) {
9430 markedDirtyRef.current = true;
9431 }
9432 setDirtyUnwrapped(value);
9433 });
9434 const setTouched = useStableCallback((value) => {
9435 if (touchedProp !== void 0) {
9436 return;
9437 }
9438 setTouchedUnwrapped(value);
9439 });
9440 const shouldValidateOnChange = useStableCallback(() => validationMode === "onChange" || validationMode === "onSubmit" && submitCountRef.current > 0);
9441 const formError = effectiveName && Object.hasOwn(errors, effectiveName) ? errors[effectiveName] : null;
9442 const hasFormError = !!(Array.isArray(formError) ? formError.length : formError);
9443 const invalid2 = invalidProp === true || hasFormError;
9444 const [validityData, setValidityData] = React49.useState({
9445 state: DEFAULT_VALIDITY_STATE,
9446 error: "",
9447 errors: [],
9448 value: null,
9449 initialValue: null
9450 });
9451 const valid2 = !invalid2 && (disabled2 ? null : validityData.state.valid);
9452 const state = React49.useMemo(() => ({
9453 disabled: disabled2,
9454 touched,
9455 dirty,
9456 valid: valid2,
9457 filled,
9458 focused
9459 }), [disabled2, touched, dirty, valid2, filled, focused]);
9460 const validation = useFieldValidation({
9461 setValidityData,
9462 validate,
9463 validityData,
9464 validationDebounceTime,
9465 invalid: invalid2,
9466 markedDirtyRef,
9467 state,
9468 shouldValidateOnChange,
9469 validationMode,
9470 registeredFieldIdRef
9471 });
9472 const [validateFieldControl, registerFieldControl] = useFieldControlRegistration({
9473 change: validation.change,
9474 commit: validation.commit,
9475 invalid: invalid2,
9476 markedDirtyRef,
9477 name,
9478 setRegisteredFieldName,
9479 registeredFieldIdRef,
9480 setValidityData,
9481 validityData
9482 });
9483 React49.useImperativeHandle(actionsRef, () => ({
9484 validate: validateFieldControl
9485 }), [validateFieldControl]);
9486 const contextValue = React49.useMemo(() => ({
9487 invalid: invalid2,
9488 name: effectiveName,
9489 validityData,
9490 setValidityData,
9491 disabled: disabled2,
9492 setTouched,
9493 setDirty,
9494 setFilled,
9495 setFocused,
9496 validationMode,
9497 shouldValidateOnChange,
9498 state,
9499 registerFieldControl,
9500 validation
9501 }), [invalid2, effectiveName, validityData, disabled2, setTouched, setDirty, setFilled, setFocused, validationMode, shouldValidateOnChange, state, registerFieldControl, validation]);
9502 const element = useRenderElement("div", componentProps, {
9503 ref: forwardedRef,
9504 state,
9505 props: elementProps,
9506 stateAttributesMapping: fieldValidityMapping
9507 });
9508 return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(FieldRootContext.Provider, {
9509 value: contextValue,
9510 children: element
9511 });
9512 });
9513 if (true) FieldRootInner.displayName = "FieldRootInner";
9514 var FieldRoot = /* @__PURE__ */ React49.forwardRef(function FieldRoot2(componentProps, forwardedRef) {
9515 return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(LabelableProvider, {
9516 children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(FieldRootInner, {
9517 ...componentProps,
9518 ref: forwardedRef
9519 })
9520 });
9521 });
9522 if (true) FieldRoot.displayName = "FieldRoot";
9523
9524 // node_modules/@base-ui/react/field/label/FieldLabel.mjs
9525 var React50 = __toESM(require_react(), 1);
9526 var FieldLabel = /* @__PURE__ */ React50.forwardRef(function FieldLabel2(componentProps, forwardedRef) {
9527 const {
9528 render: render4,
9529 className,
9530 style,
9531 id: idProp,
9532 nativeLabel = true,
9533 ...elementProps
9534 } = componentProps;
9535 const fieldRootContext = useFieldRootContext(false);
9536 const fieldItemContext = useFieldItemContext();
9537 const {
9538 labelId
9539 } = useLabelableContext();
9540 const state = {
9541 ...fieldRootContext.state,
9542 disabled: fieldRootContext.disabled || fieldItemContext.disabled
9543 };
9544 const labelRef = React50.useRef(null);
9545 const labelProps = useLabel({
9546 id: labelId ?? idProp,
9547 native: nativeLabel
9548 });
9549 if (true) {
9550 React50.useEffect(() => {
9551 if (!labelRef.current) {
9552 return;
9553 }
9554 const isLabelTag = labelRef.current.tagName === "LABEL";
9555 if (nativeLabel) {
9556 if (!isLabelTag) {
9557 const ownerStackMessage = SafeReact.captureOwnerStack?.() || "";
9558 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`.";
9559 error(`${message2}${ownerStackMessage}`);
9560 }
9561 } else if (isLabelTag) {
9562 const ownerStackMessage = SafeReact.captureOwnerStack?.() || "";
9563 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`.";
9564 error(`${message2}${ownerStackMessage}`);
9565 }
9566 }, [nativeLabel]);
9567 }
9568 const element = useRenderElement("label", componentProps, {
9569 ref: [forwardedRef, labelRef],
9570 state,
9571 props: [labelProps, elementProps],
9572 stateAttributesMapping: fieldValidityMapping
9573 });
9574 return element;
9575 });
9576 if (true) FieldLabel.displayName = "FieldLabel";
9577
9578 // node_modules/@base-ui/react/field/error/FieldError.mjs
9579 var React51 = __toESM(require_react(), 1);
9580 var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1);
9581 var stateAttributesMapping = {
9582 ...fieldValidityMapping,
9583 ...transitionStatusMapping
9584 };
9585 var FieldError = /* @__PURE__ */ React51.forwardRef(function FieldError2(componentProps, forwardedRef) {
9586 const {
9587 render: render4,
9588 id: idProp,
9589 className,
9590 match: match2,
9591 style,
9592 ...elementProps
9593 } = componentProps;
9594 const id = useBaseUiId(idProp);
9595 const {
9596 validityData,
9597 state: fieldState,
9598 name
9599 } = useFieldRootContext(false);
9600 const {
9601 setMessageIds
9602 } = useLabelableContext();
9603 const {
9604 errors
9605 } = useFormContext();
9606 const formError = name && Object.hasOwn(errors, name) ? errors[name] : null;
9607 const hasFormError = !!(Array.isArray(formError) ? formError.length : formError);
9608 const hasSpecificMatch = typeof match2 === "string";
9609 let rendered = false;
9610 if (match2 === true) {
9611 rendered = true;
9612 } else if (fieldState.disabled) {
9613 rendered = false;
9614 } else if (hasSpecificMatch) {
9615 rendered = Boolean(validityData.state[match2]);
9616 } else {
9617 rendered = hasFormError || validityData.state.valid === false;
9618 }
9619 const {
9620 mounted,
9621 transitionStatus,
9622 setMounted
9623 } = useTransitionStatus(rendered);
9624 useIsoLayoutEffect(() => {
9625 if (!rendered || !id) {
9626 return void 0;
9627 }
9628 setMessageIds((v2) => v2.concat(id));
9629 return () => {
9630 setMessageIds((v2) => v2.filter((item) => item !== id));
9631 };
9632 }, [rendered, id, setMessageIds]);
9633 const errorRef = React51.useRef(null);
9634 const [lastRenderedMessage, setLastRenderedMessage] = React51.useState(null);
9635 const [lastRenderedMessageKey, setLastRenderedMessageKey] = React51.useState(null);
9636 let error2 = validityData.error;
9637 if (!hasSpecificMatch && hasFormError) {
9638 error2 = formError;
9639 } else if (validityData.errors.length > 1) {
9640 error2 = validityData.errors;
9641 }
9642 let errorMessage = error2;
9643 if (Array.isArray(error2)) {
9644 errorMessage = error2.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("ul", {
9645 children: error2.map((message2) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("li", {
9646 children: message2
9647 }, message2))
9648 }) : error2[0];
9649 }
9650 const errorKey = Array.isArray(error2) ? JSON.stringify(error2) : error2;
9651 if (rendered && errorKey !== lastRenderedMessageKey) {
9652 setLastRenderedMessageKey(errorKey);
9653 setLastRenderedMessage(errorMessage);
9654 }
9655 useOpenChangeComplete({
9656 open: rendered,
9657 ref: errorRef,
9658 onComplete() {
9659 if (!rendered) {
9660 setMounted(false);
9661 }
9662 }
9663 });
9664 const state = {
9665 ...fieldState,
9666 transitionStatus
9667 };
9668 const element = useRenderElement("div", componentProps, {
9669 ref: [forwardedRef, errorRef],
9670 state,
9671 props: [{
9672 id,
9673 children: rendered ? errorMessage : lastRenderedMessage
9674 }, elementProps],
9675 stateAttributesMapping,
9676 enabled: mounted
9677 });
9678 if (!mounted) {
9679 return null;
9680 }
9681 return element;
9682 });
9683 if (true) FieldError.displayName = "FieldError";
9684
9685 // node_modules/@base-ui/react/field/description/FieldDescription.mjs
9686 var React52 = __toESM(require_react(), 1);
9687 var FieldDescription = /* @__PURE__ */ React52.forwardRef(function FieldDescription2(componentProps, forwardedRef) {
9688 const {
9689 render: render4,
9690 id: idProp,
9691 className,
9692 style,
9693 ...elementProps
9694 } = componentProps;
9695 const id = useBaseUiId(idProp);
9696 const fieldRootContext = useFieldRootContext(false);
9697 const fieldItemContext = useFieldItemContext();
9698 const {
9699 setMessageIds
9700 } = useLabelableContext();
9701 const state = {
9702 ...fieldRootContext.state,
9703 disabled: fieldRootContext.disabled || fieldItemContext.disabled
9704 };
9705 useIsoLayoutEffect(() => {
9706 if (!id) {
9707 return void 0;
9708 }
9709 setMessageIds((v2) => v2.concat(id));
9710 return () => {
9711 setMessageIds((v2) => v2.filter((item) => item !== id));
9712 };
9713 }, [id, setMessageIds]);
9714 const element = useRenderElement("p", componentProps, {
9715 ref: forwardedRef,
9716 state,
9717 props: [{
9718 id
9719 }, elementProps],
9720 stateAttributesMapping: fieldValidityMapping
9721 });
9722 return element;
9723 });
9724 if (true) FieldDescription.displayName = "FieldDescription";
9725
9726 // node_modules/@base-ui/react/field/control/FieldControl.mjs
9727 var React53 = __toESM(require_react(), 1);
9728 var FieldControl = /* @__PURE__ */ React53.forwardRef(function FieldControl2(componentProps, forwardedRef) {
9729 const {
9730 render: render4,
9731 className,
9732 id: idProp,
9733 name: nameProp,
9734 value: valueProp,
9735 disabled: disabledProp = false,
9736 onValueChange,
9737 defaultValue,
9738 autoFocus = false,
9739 style,
9740 ...elementProps
9741 } = componentProps;
9742 const {
9743 state: fieldState,
9744 name: fieldName,
9745 disabled: fieldDisabled,
9746 setTouched,
9747 setDirty,
9748 validityData,
9749 setFocused,
9750 setFilled,
9751 validationMode,
9752 validation
9753 } = useFieldRootContext();
9754 const {
9755 clearErrors,
9756 elementRef: formElementRef,
9757 submitCountRef
9758 } = useFormContext();
9759 const disabled2 = fieldDisabled || disabledProp;
9760 const name = fieldName ?? nameProp;
9761 const state = {
9762 ...fieldState,
9763 disabled: disabled2
9764 };
9765 const {
9766 labelId
9767 } = useLabelableContext();
9768 const id = useLabelableId({
9769 id: idProp
9770 });
9771 const [valueUnwrapped] = useControlled({
9772 controlled: valueProp,
9773 default: defaultValue,
9774 name: "FieldControl",
9775 state: "value"
9776 });
9777 const isControlled = valueProp !== void 0;
9778 const value = isControlled ? valueUnwrapped : void 0;
9779 const serializedValue = value == null ? void 0 : String(value);
9780 const getValueFromInput = useStableCallback(() => validation.inputRef.current?.value);
9781 useRegisterFieldControl(validation.inputRef, id, serializedValue, getValueFromInput, !disabled2, nameProp);
9782 useIsoLayoutEffect(() => {
9783 const currentValue = serializedValue ?? validation.inputRef.current?.value;
9784 if (currentValue !== void 0) {
9785 setFilled(currentValue !== "");
9786 }
9787 }, [serializedValue, validation.inputRef, setFilled]);
9788 useValueChanged(serializedValue, () => {
9789 if (serializedValue === void 0) {
9790 return;
9791 }
9792 clearErrors(name);
9793 setDirty(serializedValue !== (validityData.initialValue ?? ""));
9794 validation.change(serializedValue);
9795 });
9796 const inputRef = React53.useRef(null);
9797 const enterValidationTimeout = useTimeout();
9798 useIsoLayoutEffect(() => {
9799 if (autoFocus && inputRef.current === activeElement(ownerDocument(inputRef.current))) {
9800 setFocused(true);
9801 }
9802 }, [autoFocus, setFocused]);
9803 const element = useRenderElement("input", componentProps, {
9804 ref: [forwardedRef, inputRef],
9805 state,
9806 props: [{
9807 id,
9808 disabled: disabled2,
9809 name,
9810 ref: validation.inputRef,
9811 "aria-labelledby": labelId,
9812 autoFocus,
9813 ...isControlled ? {
9814 value
9815 } : {
9816 defaultValue
9817 },
9818 onChange(event) {
9819 const inputValue = event.currentTarget.value;
9820 const details = createChangeEventDetails(reason_parts_exports.none, event.nativeEvent);
9821 onValueChange?.(inputValue, details);
9822 if (isControlled) {
9823 return;
9824 }
9825 setDirty(inputValue !== (validityData.initialValue ?? ""));
9826 setFilled(inputValue !== "");
9827 if (!event.nativeEvent.defaultPrevented && !details.isCanceled) {
9828 clearErrors(name);
9829 validation.change(inputValue);
9830 }
9831 },
9832 onFocus() {
9833 setFocused(true);
9834 },
9835 onBlur(event) {
9836 setTouched(true);
9837 setFocused(false);
9838 if (validationMode === "onBlur") {
9839 const inputValue = event.currentTarget.value;
9840 validation.commit(inputValue);
9841 if (isControlled) {
9842 queueMicrotask(() => {
9843 const nextValue = validation.inputRef.current?.value;
9844 if (nextValue !== void 0 && nextValue !== inputValue && nextValue !== (validityData.initialValue ?? "")) {
9845 validation.commit(nextValue);
9846 }
9847 });
9848 }
9849 }
9850 },
9851 onKeyDown(event) {
9852 if (event.currentTarget.tagName === "INPUT" && event.key === "Enter") {
9853 setTouched(true);
9854 const value2 = event.currentTarget.value;
9855 const form = event.currentTarget.form;
9856 if (form && form === formElementRef.current && !event.defaultPrevented) {
9857 const input = event.currentTarget;
9858 const submitCount = submitCountRef.current;
9859 enterValidationTimeout.start(0, () => {
9860 if (submitCountRef.current === submitCount) {
9861 validation.commit(input.value);
9862 }
9863 });
9864 } else {
9865 validation.commit(value2);
9866 }
9867 }
9868 }
9869 }, elementProps, (props) => validation.getValidationProps(disabled2, props)],
9870 stateAttributesMapping: fieldValidityMapping
9871 });
9872 return element;
9873 });
9874 if (true) FieldControl.displayName = "FieldControl";
9875
9876 // node_modules/@base-ui/react/field/validity/FieldValidity.mjs
9877 var React54 = __toESM(require_react(), 1);
9878 var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1);
9879 var FieldValidity = function FieldValidity2(props) {
9880 const {
9881 children
9882 } = props;
9883 const {
9884 validityData,
9885 invalid: invalid2
9886 } = useFieldRootContext(false);
9887 const combinedFieldValidityData = React54.useMemo(() => getCombinedFieldValidityData(validityData, invalid2), [validityData, invalid2]);
9888 const isInvalid = combinedFieldValidityData.state.valid === false;
9889 const {
9890 transitionStatus
9891 } = useTransitionStatus(isInvalid);
9892 const fieldValidityState = React54.useMemo(() => {
9893 return {
9894 ...combinedFieldValidityData,
9895 validity: combinedFieldValidityData.state,
9896 transitionStatus
9897 };
9898 }, [combinedFieldValidityData, transitionStatus]);
9899 return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(React54.Fragment, {
9900 children: children(fieldValidityState)
9901 });
9902 };
9903 if (true) FieldValidity.displayName = "FieldValidity";
9904
9905 // node_modules/@base-ui/react/field/item/FieldItem.mjs
9906 var React55 = __toESM(require_react(), 1);
9907 var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1);
9908 var FieldItem = /* @__PURE__ */ React55.forwardRef(function FieldItem2(componentProps, forwardedRef) {
9909 const {
9910 render: render4,
9911 className,
9912 style,
9913 disabled: disabledProp = false,
9914 ...elementProps
9915 } = componentProps;
9916 const {
9917 state: fieldState,
9918 disabled: rootDisabled
9919 } = useFieldRootContext(false);
9920 const disabled2 = rootDisabled || disabledProp;
9921 const state = {
9922 ...fieldState,
9923 disabled: disabled2
9924 };
9925 const fieldItemContext = React55.useMemo(() => ({
9926 disabled: disabled2
9927 }), [disabled2]);
9928 const element = useRenderElement("div", componentProps, {
9929 ref: forwardedRef,
9930 state,
9931 props: elementProps,
9932 stateAttributesMapping: fieldValidityMapping
9933 });
9934 return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(LabelableProvider, {
9935 children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(FieldItemContext.Provider, {
9936 value: fieldItemContext,
9937 children: element
9938 })
9939 });
9940 });
9941 if (true) FieldItem.displayName = "FieldItem";
9942
9943 // node_modules/@base-ui/react/input/Input.mjs
9944 var React56 = __toESM(require_react(), 1);
9945 var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1);
9946 var Input = /* @__PURE__ */ React56.forwardRef(function Input2(props, forwardedRef) {
9947 return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(index_parts_exports.Control, {
9948 ref: forwardedRef,
9949 ...props
9950 });
9951 });
9952 if (true) Input.displayName = "Input";
9953
9954 // node_modules/@base-ui/react/utils/FloatingPortalLite.mjs
9955 var React57 = __toESM(require_react(), 1);
9956 var ReactDOM7 = __toESM(require_react_dom(), 1);
9957 var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1);
9958 var FloatingPortalLite = /* @__PURE__ */ React57.forwardRef(function FloatingPortalLite2(componentProps, forwardedRef) {
9959 const {
9960 children,
9961 container,
9962 className,
9963 render: render4,
9964 style,
9965 ...elementProps
9966 } = componentProps;
9967 const {
9968 node: portalNode,
9969 subtree: portalSubtree
9970 } = useFloatingPortalNode({
9971 container,
9972 ref: forwardedRef,
9973 componentProps,
9974 elementProps
9975 });
9976 if (!portalSubtree && !portalNode) {
9977 return null;
9978 }
9979 return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(React57.Fragment, {
9980 children: [portalSubtree, portalNode && /* @__PURE__ */ ReactDOM7.createPortal(children, portalNode)]
9981 });
9982 });
9983 if (true) FloatingPortalLite.displayName = "FloatingPortalLite";
9984
9985 // node_modules/@base-ui/react/tooltip/index.parts.mjs
9986 var index_parts_exports2 = {};
9987 __export(index_parts_exports2, {
9988 Arrow: () => TooltipArrow,
9989 Handle: () => TooltipHandle,
9990 Popup: () => TooltipPopup,
9991 Portal: () => TooltipPortal,
9992 Positioner: () => TooltipPositioner,
9993 Provider: () => TooltipProvider,
9994 Root: () => TooltipRoot,
9995 Trigger: () => TooltipTrigger,
9996 Viewport: () => TooltipViewport,
9997 createHandle: () => createTooltipHandle
9998 });
9999
10000 // node_modules/@base-ui/react/tooltip/root/TooltipRoot.mjs
10001 var React60 = __toESM(require_react(), 1);
10002
10003 // node_modules/@base-ui/react/tooltip/root/TooltipRootContext.mjs
10004 var React58 = __toESM(require_react(), 1);
10005 var TooltipRootContext = /* @__PURE__ */ React58.createContext(void 0);
10006 if (true) TooltipRootContext.displayName = "TooltipRootContext";
10007 function useTooltipRootContext(optional) {
10008 const context = React58.useContext(TooltipRootContext);
10009 if (context === void 0 && !optional) {
10010 throw new Error(true ? "Base UI: TooltipRootContext is missing. Tooltip parts must be placed within <Tooltip.Root>." : formatErrorMessage_default(72));
10011 }
10012 return context;
10013 }
10014
10015 // node_modules/@base-ui/react/tooltip/store/TooltipStore.mjs
10016 var React59 = __toESM(require_react(), 1);
10017 var selectors2 = {
10018 ...popupStoreSelectors,
10019 disabled: (state) => state.disabled,
10020 instantType: (state) => state.instantType,
10021 isInstantPhase: (state) => state.isInstantPhase,
10022 trackCursorAxis: (state) => state.trackCursorAxis,
10023 disableHoverablePopup: (state) => state.disableHoverablePopup,
10024 lastOpenChangeReason: (state) => state.openChangeReason,
10025 closeOnClick: (state) => state.closeOnClick,
10026 closeDelay: (state) => state.closeDelay,
10027 adaptiveOrigin: (state) => state.adaptiveOrigin
10028 };
10029 var TooltipStore = class extends ReactStore {
10030 constructor(initialState, floatingId, nested) {
10031 const triggerElements = new PopupTriggerMap();
10032 super(createInitialState(initialState, triggerElements, floatingId, nested), createInitialContext(triggerElements), selectors2);
10033 }
10034 setOpen = (nextOpen, eventDetails) => {
10035 applyPopupOpenChange(this, nextOpen, eventDetails, {
10036 extraState: {
10037 openChangeReason: eventDetails.reason
10038 }
10039 });
10040 };
10041 // Used by trigger clicks to clear a delayed hover open without reporting a public open-state change.
10042 cancelPendingOpen(event) {
10043 this.state.floatingRootContext.dispatchOpenChange(false, createChangeEventDetails(reason_parts_exports.triggerPress, event));
10044 }
10045 };
10046 function createNullTooltipStore() {
10047 const triggerElements = new PopupTriggerMap();
10048 const store = new NullStore(Object.freeze(createInitialState(void 0, triggerElements)), Object.freeze(createInitialContext(triggerElements)), selectors2);
10049 return Object.assign(store, {
10050 setOpen: NOOP,
10051 cancelPendingOpen: NOOP
10052 });
10053 }
10054 function createInitialState(initialState, triggerElements, floatingId, nested = false) {
10055 const state = {
10056 ...createInitialPopupStoreState(triggerElements, floatingId, nested),
10057 disabled: false,
10058 instantType: void 0,
10059 isInstantPhase: false,
10060 trackCursorAxis: "none",
10061 disableHoverablePopup: false,
10062 openChangeReason: null,
10063 closeOnClick: true,
10064 closeDelay: 0,
10065 adaptiveOrigin: void 0,
10066 ...initialState
10067 };
10068 return state;
10069 }
10070 function createInitialContext(triggerElements) {
10071 return {
10072 popupRef: /* @__PURE__ */ React59.createRef(),
10073 onOpenChange: void 0,
10074 onOpenChangeComplete: void 0,
10075 triggerElements
10076 };
10077 }
10078
10079 // node_modules/@base-ui/react/tooltip/root/TooltipRoot.mjs
10080 var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1);
10081 var TooltipRoot = fastComponent(function TooltipRoot2(props) {
10082 const {
10083 disabled: disabled2 = false,
10084 defaultOpen = false,
10085 open: openProp,
10086 disableHoverablePopup = false,
10087 trackCursorAxis = "none",
10088 actionsRef,
10089 onOpenChange,
10090 onOpenChangeComplete,
10091 handle,
10092 triggerId: triggerIdProp,
10093 defaultTriggerId: defaultTriggerIdProp = null,
10094 children
10095 } = props;
10096 const store = usePopupRootStore((floatingId, nested) => new TooltipStore({
10097 open: defaultOpen,
10098 openProp,
10099 activeTriggerId: defaultTriggerIdProp,
10100 triggerIdProp
10101 }, floatingId, nested));
10102 store.useControlledProp("openProp", openProp);
10103 store.useControlledProp("triggerIdProp", triggerIdProp);
10104 store.useContextCallback("onOpenChange", onOpenChange);
10105 store.useContextCallback("onOpenChangeComplete", onOpenChangeComplete);
10106 const openState = store.useState("open");
10107 const open2 = !disabled2 && openState;
10108 const activeTriggerId = store.useState("activeTriggerId");
10109 const mounted = store.useState("mounted");
10110 const payload = store.useState("payload");
10111 store.useSyncedValues({
10112 trackCursorAxis,
10113 disableHoverablePopup,
10114 disabled: disabled2
10115 });
10116 useImplicitActiveTrigger(store, {
10117 closeOnActiveTriggerUnmount: true
10118 });
10119 const {
10120 forceUnmount,
10121 transitionStatus
10122 } = useOpenStateTransitions(open2, store);
10123 const isInstantPhase = store.useState("isInstantPhase");
10124 const instantType = store.useState("instantType");
10125 const lastOpenChangeReason = store.useState("lastOpenChangeReason");
10126 const previousInstantTypeRef = React60.useRef(null);
10127 useIsoLayoutEffect(() => {
10128 if (openState && disabled2) {
10129 store.setOpen(false, createChangeEventDetails(reason_parts_exports.disabled));
10130 }
10131 }, [openState, disabled2, store]);
10132 useIsoLayoutEffect(() => {
10133 if (transitionStatus === "ending" && lastOpenChangeReason === reason_parts_exports.none || transitionStatus !== "ending" && isInstantPhase) {
10134 if (instantType !== "delay") {
10135 previousInstantTypeRef.current = instantType;
10136 }
10137 store.set("instantType", "delay");
10138 } else if (previousInstantTypeRef.current !== null) {
10139 store.set("instantType", previousInstantTypeRef.current);
10140 previousInstantTypeRef.current = null;
10141 }
10142 }, [transitionStatus, isInstantPhase, lastOpenChangeReason, instantType, store]);
10143 useIsoLayoutEffect(() => {
10144 if (open2) {
10145 if (activeTriggerId == null) {
10146 store.set("payload", void 0);
10147 }
10148 }
10149 }, [store, activeTriggerId, open2]);
10150 React60.useImperativeHandle(actionsRef, () => ({
10151 unmount: forceUnmount,
10152 close: () => store.setOpen(false, createChangeEventDetails(reason_parts_exports.imperativeAction))
10153 }), [forceUnmount, store]);
10154 const shouldRenderInteractions = open2 || mounted || !disabled2 && trackCursorAxis !== "none";
10155 return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(TooltipRootContext.Provider, {
10156 value: store,
10157 children: [handle && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(PopupHandleAttachment, {
10158 handle,
10159 store
10160 }), shouldRenderInteractions && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(TooltipInteractions, {
10161 store,
10162 disabled: disabled2,
10163 trackCursorAxis
10164 }), typeof children === "function" ? children({
10165 payload
10166 }) : children]
10167 });
10168 });
10169 if (true) TooltipRoot.displayName = "TooltipRoot";
10170 function TooltipInteractions({
10171 store,
10172 disabled: disabled2,
10173 trackCursorAxis
10174 }) {
10175 const floatingRootContext = store.useState("floatingRootContext");
10176 const dismiss = useDismiss(floatingRootContext, {
10177 enabled: !disabled2,
10178 referencePress: () => store.select("closeOnClick")
10179 });
10180 const clientPoint = useClientPoint(floatingRootContext, {
10181 enabled: !disabled2 && trackCursorAxis !== "none",
10182 axis: trackCursorAxis === "none" ? void 0 : trackCursorAxis
10183 });
10184 const triggerProps = React60.useMemo(() => mergeProps(clientPoint.reference, dismiss.reference), [clientPoint.reference, dismiss.reference]);
10185 usePopupInteractionProps(store, {
10186 activeTriggerProps: triggerProps,
10187 inactiveTriggerProps: triggerProps,
10188 popupProps: dismiss.floating ?? EMPTY_OBJECT
10189 });
10190 return null;
10191 }
10192
10193 // node_modules/@base-ui/react/tooltip/trigger/TooltipTrigger.mjs
10194 var React62 = __toESM(require_react(), 1);
10195
10196 // node_modules/@base-ui/react/tooltip/provider/TooltipProviderContext.mjs
10197 var React61 = __toESM(require_react(), 1);
10198 var TooltipProviderContext = /* @__PURE__ */ React61.createContext(void 0);
10199 if (true) TooltipProviderContext.displayName = "TooltipProviderContext";
10200 function useTooltipProviderContext() {
10201 return React61.useContext(TooltipProviderContext);
10202 }
10203
10204 // node_modules/@base-ui/react/tooltip/utils/constants.mjs
10205 var OPEN_DELAY = 600;
10206
10207 // node_modules/@base-ui/react/tooltip/trigger/TooltipTrigger.mjs
10208 var TOOLTIP_TRIGGER_IDENTIFIER = "data-base-ui-tooltip-trigger";
10209 function getTargetElement(event) {
10210 if ("composedPath" in event) {
10211 const path = event.composedPath();
10212 for (let i = 0; i < path.length; i += 1) {
10213 const element = path[i];
10214 if (isElement(element)) {
10215 return element;
10216 }
10217 }
10218 }
10219 const target = event.target;
10220 if (isElement(target)) {
10221 return target;
10222 }
10223 return null;
10224 }
10225 function closestEnabledTooltipTrigger(element) {
10226 let current = element;
10227 while (current) {
10228 const trigger = current.closest(`[${TOOLTIP_TRIGGER_IDENTIFIER}]`);
10229 if (trigger) {
10230 return trigger;
10231 }
10232 const root = current.getRootNode();
10233 current = "host" in root && isElement(root.host) ? root.host : null;
10234 }
10235 return null;
10236 }
10237 var TooltipTrigger = fastComponentRef(function TooltipTrigger2(componentProps, forwardedRef) {
10238 const {
10239 render: render4,
10240 className,
10241 style,
10242 handle,
10243 payload,
10244 disabled: disabledProp,
10245 delay,
10246 closeOnClick = true,
10247 closeDelay,
10248 id: idProp,
10249 ...elementProps
10250 } = componentProps;
10251 const rootContext = useTooltipRootContext(true);
10252 const handleStore = usePopupHandleStore(handle);
10253 const store = handleStore ?? rootContext;
10254 if (!store) {
10255 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));
10256 }
10257 const thisTriggerId = useBaseUiId(idProp);
10258 const isTriggerActive = store.useState("isTriggerActive", thisTriggerId);
10259 const isOpenedByThisTrigger = store.useState("isOpenedByTrigger", thisTriggerId);
10260 const floatingRootContext = store.useState("floatingRootContext");
10261 const triggerElementRef = React62.useRef(null);
10262 const closeDelayWithDefault = closeDelay ?? 0;
10263 const {
10264 registerTrigger,
10265 isMountedByThisTrigger
10266 } = useTriggerDataForwarding(thisTriggerId, triggerElementRef, store, {
10267 payload,
10268 closeOnClick,
10269 closeDelay: closeDelayWithDefault
10270 });
10271 const providerDelay = useTooltipProviderContext();
10272 const {
10273 activeIdRef,
10274 delayRef,
10275 isInstantPhase,
10276 hasProvider
10277 } = useDelayGroup(floatingRootContext, {
10278 open: isOpenedByThisTrigger
10279 });
10280 const hoverInteraction = useHoverInteractionSharedState(floatingRootContext);
10281 store.useSyncedValue("isInstantPhase", isInstantPhase);
10282 const rootDisabled = store.useState("disabled");
10283 const disabled2 = disabledProp ?? rootDisabled;
10284 const disabledRef = useValueAsRef(disabled2);
10285 const trackCursorAxis = store.useState("trackCursorAxis");
10286 const disableHoverablePopup = store.useState("disableHoverablePopup");
10287 const isNestedTriggerHoveredRef = React62.useRef(false);
10288 const nestedTriggerOpenTimeout = useTimeout();
10289 const pointerTypeRef = React62.useRef(void 0);
10290 function getOpenDelay() {
10291 if (hasProvider && activeIdRef.current != null) {
10292 return 0;
10293 }
10294 return delay ?? providerDelay ?? OPEN_DELAY;
10295 }
10296 function isEnabledNestedTriggerTarget(target) {
10297 const triggerEl = triggerElementRef.current;
10298 if (!triggerEl || !target) {
10299 return false;
10300 }
10301 const nearestTrigger = closestEnabledTooltipTrigger(target);
10302 return nearestTrigger !== null && nearestTrigger !== triggerEl && contains(triggerEl, nearestTrigger);
10303 }
10304 function detectNestedTriggerHover(target) {
10305 const nestedTriggerHovered = isEnabledNestedTriggerTarget(target);
10306 isNestedTriggerHoveredRef.current = nestedTriggerHovered;
10307 if (nestedTriggerHovered) {
10308 hoverInteraction.openChangeTimeout.clear();
10309 hoverInteraction.restTimeout.clear();
10310 hoverInteraction.restTimeoutPending = false;
10311 nestedTriggerOpenTimeout.clear();
10312 }
10313 return nestedTriggerHovered;
10314 }
10315 const hoverProps = useHoverReferenceInteraction(floatingRootContext, {
10316 enabled: !disabled2,
10317 mouseOnly: true,
10318 move: false,
10319 handleClose: !disableHoverablePopup && trackCursorAxis !== "both" ? safePolygon() : null,
10320 restMs: getOpenDelay,
10321 delay() {
10322 if (closeDelay == null && hasProvider) {
10323 return {
10324 close: getDelay(delayRef.current, "close")
10325 };
10326 }
10327 return {
10328 close: closeDelayWithDefault
10329 };
10330 },
10331 triggerElementRef,
10332 isActiveTrigger: isTriggerActive,
10333 isClosing: () => store.select("transitionStatus") === "ending",
10334 shouldOpen() {
10335 return !isNestedTriggerHoveredRef.current;
10336 }
10337 });
10338 const focusProps = useFocus(floatingRootContext, {
10339 enabled: !disabled2
10340 }).reference;
10341 const handleNestedTriggerHover = (event) => {
10342 const wasNestedTriggerHovered = isNestedTriggerHoveredRef.current;
10343 const target = getTargetElement(event);
10344 const nestedTriggerHovered = detectNestedTriggerHover(target);
10345 const triggerEl = triggerElementRef.current;
10346 const targetInsideTrigger = triggerEl && target && contains(triggerEl, target);
10347 if (nestedTriggerHovered && store.select("open") && store.select("lastOpenChangeReason") === reason_parts_exports.triggerHover) {
10348 store.setOpen(false, createChangeEventDetails(reason_parts_exports.triggerHover, event));
10349 return;
10350 }
10351 if (wasNestedTriggerHovered && !nestedTriggerHovered && targetInsideTrigger && !disabledRef.current && !store.select("open") && triggerEl && // Match the hover hook's non-strict mouse fallback for mouse-only event sequences.
10352 isMouseLikePointerType(pointerTypeRef.current)) {
10353 const open2 = () => {
10354 if (!isNestedTriggerHoveredRef.current && !disabledRef.current && !store.select("open")) {
10355 store.setOpen(true, createChangeEventDetails(reason_parts_exports.triggerHover, event, triggerEl));
10356 }
10357 };
10358 const openDelay = getOpenDelay();
10359 if (openDelay === 0) {
10360 nestedTriggerOpenTimeout.clear();
10361 open2();
10362 } else {
10363 nestedTriggerOpenTimeout.start(openDelay, open2);
10364 }
10365 }
10366 };
10367 const rootTriggerProps = store.useState("triggerProps", isMountedByThisTrigger);
10368 const shouldApplyRootTriggerProps = isMountedByThisTrigger || trackCursorAxis !== "none";
10369 const state = {
10370 open: isOpenedByThisTrigger
10371 };
10372 const element = useRenderElement("button", componentProps, {
10373 state,
10374 ref: [forwardedRef, registerTrigger, triggerElementRef],
10375 props: [hoverProps, focusProps, shouldApplyRootTriggerProps ? rootTriggerProps : void 0, {
10376 onMouseOver(event) {
10377 handleNestedTriggerHover(event.nativeEvent);
10378 },
10379 onFocus(event) {
10380 if (isEnabledNestedTriggerTarget(getTargetElement(event.nativeEvent))) {
10381 event.preventBaseUIHandler();
10382 }
10383 },
10384 onMouseLeave() {
10385 isNestedTriggerHoveredRef.current = false;
10386 nestedTriggerOpenTimeout.clear();
10387 pointerTypeRef.current = void 0;
10388 },
10389 onPointerEnter(event) {
10390 pointerTypeRef.current = event.pointerType;
10391 },
10392 onPointerDown(event) {
10393 pointerTypeRef.current = event.pointerType;
10394 store.set("closeOnClick", closeOnClick);
10395 if (closeOnClick && !store.select("open")) {
10396 store.cancelPendingOpen(event.nativeEvent);
10397 }
10398 },
10399 onClick(event) {
10400 if (closeOnClick && !store.select("open")) {
10401 store.cancelPendingOpen(event.nativeEvent);
10402 }
10403 },
10404 id: thisTriggerId,
10405 [triggerDisabled]: disabled2 ? "" : void 0,
10406 [TOOLTIP_TRIGGER_IDENTIFIER]: disabled2 ? void 0 : ""
10407 }, elementProps],
10408 stateAttributesMapping: triggerOpenStateMapping
10409 });
10410 return element;
10411 });
10412 if (true) TooltipTrigger.displayName = "TooltipTrigger";
10413
10414 // node_modules/@base-ui/react/tooltip/portal/TooltipPortal.mjs
10415 var React64 = __toESM(require_react(), 1);
10416
10417 // node_modules/@base-ui/react/tooltip/portal/TooltipPortalContext.mjs
10418 var React63 = __toESM(require_react(), 1);
10419 var TooltipPortalContext = /* @__PURE__ */ React63.createContext(void 0);
10420 if (true) TooltipPortalContext.displayName = "TooltipPortalContext";
10421 function useTooltipPortalContext() {
10422 const value = React63.useContext(TooltipPortalContext);
10423 if (value === void 0) {
10424 throw new Error(true ? "Base UI: <Tooltip.Portal> is missing." : formatErrorMessage_default(70));
10425 }
10426 return value;
10427 }
10428
10429 // node_modules/@base-ui/react/tooltip/portal/TooltipPortal.mjs
10430 var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1);
10431 var TooltipPortal = /* @__PURE__ */ React64.forwardRef(function TooltipPortal2(props, forwardedRef) {
10432 const {
10433 keepMounted = false,
10434 ...portalProps
10435 } = props;
10436 const store = useTooltipRootContext();
10437 const mounted = store.useState("mounted");
10438 const shouldRender = mounted || keepMounted;
10439 if (!shouldRender) {
10440 return null;
10441 }
10442 return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(TooltipPortalContext.Provider, {
10443 value: keepMounted,
10444 children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FloatingPortalLite, {
10445 ref: forwardedRef,
10446 ...portalProps
10447 })
10448 });
10449 });
10450 if (true) TooltipPortal.displayName = "TooltipPortal";
10451
10452 // node_modules/@base-ui/react/tooltip/positioner/TooltipPositioner.mjs
10453 var React66 = __toESM(require_react(), 1);
10454
10455 // node_modules/@base-ui/react/tooltip/positioner/TooltipPositionerContext.mjs
10456 var React65 = __toESM(require_react(), 1);
10457 var TooltipPositionerContext = /* @__PURE__ */ React65.createContext(void 0);
10458 if (true) TooltipPositionerContext.displayName = "TooltipPositionerContext";
10459 function useTooltipPositionerContext() {
10460 const context = React65.useContext(TooltipPositionerContext);
10461 if (context === void 0) {
10462 throw new Error(true ? "Base UI: TooltipPositionerContext is missing. TooltipPositioner parts must be placed within <Tooltip.Positioner>." : formatErrorMessage_default(71));
10463 }
10464 return context;
10465 }
10466
10467 // node_modules/@base-ui/react/tooltip/positioner/TooltipPositioner.mjs
10468 var import_jsx_runtime16 = __toESM(require_jsx_runtime(), 1);
10469 var TooltipPositioner = /* @__PURE__ */ React66.forwardRef(function TooltipPositioner2(componentProps, forwardedRef) {
10470 const {
10471 render: render4,
10472 className,
10473 anchor,
10474 positionMethod = "absolute",
10475 side = "top",
10476 align = "center",
10477 sideOffset = 0,
10478 alignOffset = 0,
10479 collisionBoundary = "clipping-ancestors",
10480 collisionPadding = 5,
10481 arrowPadding = 5,
10482 sticky = false,
10483 disableAnchorTracking = false,
10484 collisionAvoidance = POPUP_COLLISION_AVOIDANCE,
10485 style,
10486 ...elementProps
10487 } = componentProps;
10488 const store = useTooltipRootContext();
10489 const keepMounted = useTooltipPortalContext();
10490 const open2 = store.useState("open");
10491 const mounted = store.useState("mounted");
10492 const trackCursorAxis = store.useState("trackCursorAxis");
10493 const disableHoverablePopup = store.useState("disableHoverablePopup");
10494 const floatingRootContext = store.useState("floatingRootContext");
10495 const instantType = store.useState("instantType");
10496 const transitionStatus = store.useState("transitionStatus");
10497 const adaptiveOrigin2 = store.useState("adaptiveOrigin");
10498 const positioning = useAnchorPositioning({
10499 anchor,
10500 positionMethod,
10501 floatingRootContext,
10502 mounted,
10503 side,
10504 sideOffset,
10505 align,
10506 alignOffset,
10507 collisionBoundary,
10508 collisionPadding,
10509 sticky,
10510 arrowPadding,
10511 disableAnchorTracking,
10512 keepMounted,
10513 collisionAvoidance,
10514 adaptiveOrigin: adaptiveOrigin2
10515 });
10516 const state = React66.useMemo(() => ({
10517 open: open2,
10518 side: positioning.side,
10519 align: positioning.align,
10520 anchorHidden: positioning.anchorHidden,
10521 instant: trackCursorAxis !== "none" ? "tracking-cursor" : instantType
10522 }), [open2, positioning.side, positioning.align, positioning.anchorHidden, trackCursorAxis, instantType]);
10523 const element = usePositioner(componentProps, state, {
10524 styles: positioning.positionerStyles,
10525 transitionStatus,
10526 props: elementProps,
10527 refs: [forwardedRef, store.useStateSetter("positionerElement")],
10528 hidden: !mounted,
10529 inert: !open2 || trackCursorAxis === "both" || disableHoverablePopup
10530 });
10531 return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(TooltipPositionerContext.Provider, {
10532 value: positioning,
10533 children: element
10534 });
10535 });
10536 if (true) TooltipPositioner.displayName = "TooltipPositioner";
10537
10538 // node_modules/@base-ui/react/tooltip/popup/TooltipPopup.mjs
10539 var React67 = __toESM(require_react(), 1);
10540 var TooltipPopup = /* @__PURE__ */ React67.forwardRef(function TooltipPopup2(componentProps, forwardedRef) {
10541 const {
10542 render: render4,
10543 className,
10544 style,
10545 ...elementProps
10546 } = componentProps;
10547 const store = useTooltipRootContext();
10548 const {
10549 side,
10550 align
10551 } = useTooltipPositionerContext();
10552 const open2 = store.useState("open");
10553 const instantType = store.useState("instantType");
10554 const transitionStatus = store.useState("transitionStatus");
10555 const popupProps = store.useState("popupProps");
10556 const floatingContext = store.useState("floatingRootContext");
10557 const disabled2 = store.useState("disabled");
10558 const closeDelay = store.useState("closeDelay");
10559 useOpenChangeComplete({
10560 open: open2,
10561 ref: store.context.popupRef,
10562 onComplete() {
10563 if (open2) {
10564 store.context.onOpenChangeComplete?.(true);
10565 }
10566 }
10567 });
10568 useHoverFloatingInteraction(floatingContext, {
10569 enabled: !disabled2,
10570 closeDelay
10571 });
10572 const setPopupElement = store.useStateSetter("popupElement");
10573 const state = {
10574 open: open2,
10575 side,
10576 align,
10577 instant: instantType,
10578 transitionStatus
10579 };
10580 const element = useRenderElement("div", componentProps, {
10581 state,
10582 ref: [forwardedRef, store.context.popupRef, setPopupElement],
10583 props: [FOCUSABLE_POPUP_PROPS, popupProps, getDisabledMountTransitionStyles(transitionStatus), elementProps],
10584 stateAttributesMapping: popupTransitionStateMapping
10585 });
10586 return element;
10587 });
10588 if (true) TooltipPopup.displayName = "TooltipPopup";
10589
10590 // node_modules/@base-ui/react/tooltip/arrow/TooltipArrow.mjs
10591 var React68 = __toESM(require_react(), 1);
10592 var TooltipArrow = /* @__PURE__ */ React68.forwardRef(function TooltipArrow2(componentProps, forwardedRef) {
10593 const {
10594 render: render4,
10595 className,
10596 style,
10597 ...elementProps
10598 } = componentProps;
10599 const store = useTooltipRootContext();
10600 const {
10601 arrowRef,
10602 side,
10603 align,
10604 arrowUncentered,
10605 arrowStyles
10606 } = useTooltipPositionerContext();
10607 const open2 = store.useState("open");
10608 const instantType = store.useState("instantType");
10609 const state = {
10610 open: open2,
10611 side,
10612 align,
10613 uncentered: arrowUncentered,
10614 instant: instantType
10615 };
10616 const element = useRenderElement("div", componentProps, {
10617 state,
10618 ref: [forwardedRef, arrowRef],
10619 props: [{
10620 style: arrowStyles,
10621 "aria-hidden": true
10622 }, elementProps],
10623 stateAttributesMapping: popupStateMapping
10624 });
10625 return element;
10626 });
10627 if (true) TooltipArrow.displayName = "TooltipArrow";
10628
10629 // node_modules/@base-ui/react/tooltip/provider/TooltipProvider.mjs
10630 var React69 = __toESM(require_react(), 1);
10631 var import_jsx_runtime17 = __toESM(require_jsx_runtime(), 1);
10632 var TooltipProvider = function TooltipProvider2(props) {
10633 const {
10634 delay,
10635 closeDelay,
10636 timeout = 400
10637 } = props;
10638 const delayValue = React69.useMemo(() => ({
10639 open: delay,
10640 close: closeDelay
10641 }), [delay, closeDelay]);
10642 return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TooltipProviderContext.Provider, {
10643 value: delay,
10644 children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(FloatingDelayGroup, {
10645 delay: delayValue,
10646 timeoutMs: timeout,
10647 children: props.children
10648 })
10649 });
10650 };
10651 if (true) TooltipProvider.displayName = "TooltipProvider";
10652
10653 // node_modules/@base-ui/react/tooltip/viewport/TooltipViewport.mjs
10654 var React70 = __toESM(require_react(), 1);
10655 var TooltipViewport = /* @__PURE__ */ React70.forwardRef(function TooltipViewport2(componentProps, forwardedRef) {
10656 const {
10657 render: render4,
10658 className,
10659 style,
10660 children,
10661 ...elementProps
10662 } = componentProps;
10663 const store = useTooltipRootContext();
10664 const positioner = useTooltipPositionerContext();
10665 const instantType = store.useState("instantType");
10666 const {
10667 children: childrenToRender,
10668 state: viewportState
10669 } = usePopupViewport({
10670 store,
10671 side: positioner.side,
10672 children
10673 });
10674 const state = {
10675 activationDirection: viewportState.activationDirection,
10676 transitioning: viewportState.transitioning,
10677 instant: instantType
10678 };
10679 return useRenderElement("div", componentProps, {
10680 state,
10681 ref: forwardedRef,
10682 props: [elementProps, {
10683 children: childrenToRender
10684 }],
10685 stateAttributesMapping: popupViewportStateMapping
10686 });
10687 });
10688 if (true) TooltipViewport.displayName = "TooltipViewport";
10689
10690 // node_modules/@base-ui/react/tooltip/store/TooltipHandle.mjs
10691 var TooltipHandle = class extends BasePopupHandle {
10692 constructor() {
10693 super(createNullTooltipStore(), "Tooltip");
10694 }
10695 /**
10696 * Opens the tooltip and associates it with the trigger with the given id.
10697 *
10698 * This method should only be called in an event handler or an effect (not during rendering).
10699 *
10700 * @param triggerId ID of the trigger to associate with the tooltip. The trigger must be a matching
10701 * `Tooltip.Trigger` with this handle passed as a prop.
10702 */
10703 open(triggerId) {
10704 this.openByTrigger(triggerId);
10705 }
10706 /**
10707 * Closes the tooltip.
10708 *
10709 * This method should only be called in an event handler or an effect (not during rendering).
10710 */
10711 close() {
10712 this.closePopup();
10713 }
10714 /**
10715 * Whether the tooltip is currently open. Returns `false` while no root is attached to the handle.
10716 */
10717 get isOpen() {
10718 return this.attachedStore?.select("open") ?? false;
10719 }
10720 };
10721 function createTooltipHandle() {
10722 return new TooltipHandle();
10723 }
10724
10725 // node_modules/@base-ui/react/use-render/useRender.mjs
10726 function useRender(params) {
10727 return useRenderElement(params.defaultTagName ?? "div", params, params);
10728 }
10729
10730 // packages/ui/build-module/tooltip/popup.mjs
10731 var import_element13 = __toESM(require_element(), 1);
10732
10733 // packages/ui/build-module/tooltip/portal.mjs
10734 var import_element10 = __toESM(require_element(), 1);
10735
10736 // packages/ui/build-module/utils/wp-compat-overlay-slot.mjs
10737 var STYLE_HASH_ATTRIBUTE = "data-wp-hash";
10738 function getRuntime() {
10739 const globalScope = globalThis;
10740 if (globalScope.__wpStyleRuntime) {
10741 return globalScope.__wpStyleRuntime;
10742 }
10743 globalScope.__wpStyleRuntime = {
10744 documents: /* @__PURE__ */ new Map(),
10745 styles: /* @__PURE__ */ new Map(),
10746 injectedStyles: /* @__PURE__ */ new WeakMap()
10747 };
10748 if (typeof document !== "undefined") {
10749 registerDocument(document);
10750 }
10751 return globalScope.__wpStyleRuntime;
10752 }
10753 function documentContainsStyleHash(targetDocument, hash) {
10754 if (!targetDocument.head) {
10755 return false;
10756 }
10757 for (const style of targetDocument.head.querySelectorAll(
10758 `style[${STYLE_HASH_ATTRIBUTE}]`
10759 )) {
10760 if (style.getAttribute(STYLE_HASH_ATTRIBUTE) === hash) {
10761 return true;
10762 }
10763 }
10764 return false;
10765 }
10766 function injectStyle(targetDocument, hash, css) {
10767 if (!targetDocument.head) {
10768 return;
10769 }
10770 const runtime = getRuntime();
10771 let injectedStyles = runtime.injectedStyles.get(targetDocument);
10772 if (!injectedStyles) {
10773 injectedStyles = /* @__PURE__ */ new Set();
10774 runtime.injectedStyles.set(targetDocument, injectedStyles);
10775 }
10776 if (injectedStyles.has(hash)) {
10777 return;
10778 }
10779 if (documentContainsStyleHash(targetDocument, hash)) {
10780 injectedStyles.add(hash);
10781 return;
10782 }
10783 const style = targetDocument.createElement("style");
10784 style.setAttribute(STYLE_HASH_ATTRIBUTE, hash);
10785 style.appendChild(targetDocument.createTextNode(css));
10786 targetDocument.head.appendChild(style);
10787 injectedStyles.add(hash);
10788 }
10789 function registerDocument(targetDocument) {
10790 const runtime = getRuntime();
10791 runtime.documents.set(
10792 targetDocument,
10793 (runtime.documents.get(targetDocument) ?? 0) + 1
10794 );
10795 for (const [hash, css] of runtime.styles) {
10796 injectStyle(targetDocument, hash, css);
10797 }
10798 return () => {
10799 const count = runtime.documents.get(targetDocument);
10800 if (count === void 0) {
10801 return;
10802 }
10803 if (count <= 1) {
10804 runtime.documents.delete(targetDocument);
10805 return;
10806 }
10807 runtime.documents.set(targetDocument, count - 1);
10808 };
10809 }
10810 function registerStyle(hash, css) {
10811 const runtime = getRuntime();
10812 runtime.styles.set(hash, css);
10813 for (const targetDocument of runtime.documents.keys()) {
10814 injectStyle(targetDocument, hash, css);
10815 }
10816 }
10817 if (typeof process === "undefined" || true) {
10818 registerStyle("be37f31c1e", "._11fc52b637ff8a7e__slot{inset:0;isolation:isolate;pointer-events:none;position:fixed;z-index:1000000003}@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._11fc52b637ff8a7e__slot>*{pointer-events:auto}}}");
10819 }
10820 var wp_compat_overlay_slot_default = { "slot": "_11fc52b637ff8a7e__slot" };
10821 var WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE = "data-wp-compat-overlay-slot";
10822 function resolveOwnerDocument() {
10823 return typeof document === "undefined" ? null : document;
10824 }
10825 function isInWordPressEnvironment() {
10826 let topWp;
10827 try {
10828 topWp = window.top?.wp;
10829 } catch {
10830 }
10831 const wp = topWp ?? window.wp;
10832 return typeof wp?.components === "object" && wp.components !== null;
10833 }
10834 var cachedSlot = null;
10835 function ensureSlotIsAccessible(element) {
10836 element.setAttribute("aria-hidden", "false");
10837 return element;
10838 }
10839 function createSlot(ownerDocument2) {
10840 const element = ownerDocument2.createElement("div");
10841 element.setAttribute(WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE, "");
10842 if (wp_compat_overlay_slot_default.slot) {
10843 element.classList.add(wp_compat_overlay_slot_default.slot);
10844 }
10845 ownerDocument2.body.appendChild(element);
10846 return element;
10847 }
10848 function getWpCompatOverlaySlot() {
10849 if (typeof window === "undefined") {
10850 return void 0;
10851 }
10852 if (!isInWordPressEnvironment() && window.__wpUiCompatOverlaySlotEnabled !== true) {
10853 return void 0;
10854 }
10855 const ownerDocument2 = resolveOwnerDocument();
10856 if (!ownerDocument2 || !ownerDocument2.body) {
10857 return void 0;
10858 }
10859 if (cachedSlot && cachedSlot.ownerDocument === ownerDocument2 && cachedSlot.isConnected) {
10860 return ensureSlotIsAccessible(cachedSlot);
10861 }
10862 const existing = ownerDocument2.querySelector(
10863 `[${WP_COMPAT_OVERLAY_SLOT_ATTRIBUTE}]`
10864 );
10865 if (existing instanceof HTMLDivElement) {
10866 cachedSlot = ensureSlotIsAccessible(existing);
10867 return cachedSlot;
10868 }
10869 if (cachedSlot?.isConnected) {
10870 cachedSlot.remove();
10871 }
10872 cachedSlot = ensureSlotIsAccessible(createSlot(ownerDocument2));
10873 return cachedSlot;
10874 }
10875
10876 // packages/ui/build-module/tooltip/portal.mjs
10877 var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1);
10878 var Portal = (0, import_element10.forwardRef)(
10879 function TooltipPortal3({ container, ...restProps }, ref) {
10880 return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
10881 index_parts_exports2.Portal,
10882 {
10883 container: container ?? getWpCompatOverlaySlot(),
10884 ...restProps,
10885 ref
10886 }
10887 );
10888 }
10889 );
10890
10891 // packages/ui/build-module/tooltip/positioner.mjs
10892 var import_element11 = __toESM(require_element(), 1);
10893 var import_jsx_runtime19 = __toESM(require_jsx_runtime(), 1);
10894 var STYLE_HASH_ATTRIBUTE2 = "data-wp-hash";
10895 function getRuntime2() {
10896 const globalScope = globalThis;
10897 if (globalScope.__wpStyleRuntime) {
10898 return globalScope.__wpStyleRuntime;
10899 }
10900 globalScope.__wpStyleRuntime = {
10901 documents: /* @__PURE__ */ new Map(),
10902 styles: /* @__PURE__ */ new Map(),
10903 injectedStyles: /* @__PURE__ */ new WeakMap()
10904 };
10905 if (typeof document !== "undefined") {
10906 registerDocument2(document);
10907 }
10908 return globalScope.__wpStyleRuntime;
10909 }
10910 function documentContainsStyleHash2(targetDocument, hash) {
10911 if (!targetDocument.head) {
10912 return false;
10913 }
10914 for (const style of targetDocument.head.querySelectorAll(
10915 `style[${STYLE_HASH_ATTRIBUTE2}]`
10916 )) {
10917 if (style.getAttribute(STYLE_HASH_ATTRIBUTE2) === hash) {
10918 return true;
10919 }
10920 }
10921 return false;
10922 }
10923 function injectStyle2(targetDocument, hash, css) {
10924 if (!targetDocument.head) {
10925 return;
10926 }
10927 const runtime = getRuntime2();
10928 let injectedStyles = runtime.injectedStyles.get(targetDocument);
10929 if (!injectedStyles) {
10930 injectedStyles = /* @__PURE__ */ new Set();
10931 runtime.injectedStyles.set(targetDocument, injectedStyles);
10932 }
10933 if (injectedStyles.has(hash)) {
10934 return;
10935 }
10936 if (documentContainsStyleHash2(targetDocument, hash)) {
10937 injectedStyles.add(hash);
10938 return;
10939 }
10940 const style = targetDocument.createElement("style");
10941 style.setAttribute(STYLE_HASH_ATTRIBUTE2, hash);
10942 style.appendChild(targetDocument.createTextNode(css));
10943 targetDocument.head.appendChild(style);
10944 injectedStyles.add(hash);
10945 }
10946 function registerDocument2(targetDocument) {
10947 const runtime = getRuntime2();
10948 runtime.documents.set(
10949 targetDocument,
10950 (runtime.documents.get(targetDocument) ?? 0) + 1
10951 );
10952 for (const [hash, css] of runtime.styles) {
10953 injectStyle2(targetDocument, hash, css);
10954 }
10955 return () => {
10956 const count = runtime.documents.get(targetDocument);
10957 if (count === void 0) {
10958 return;
10959 }
10960 if (count <= 1) {
10961 runtime.documents.delete(targetDocument);
10962 return;
10963 }
10964 runtime.documents.set(targetDocument, count - 1);
10965 };
10966 }
10967 function registerStyle2(hash, css) {
10968 const runtime = getRuntime2();
10969 runtime.styles.set(hash, css);
10970 for (const targetDocument of runtime.documents.keys()) {
10971 injectStyle2(targetDocument, hash, css);
10972 }
10973 }
10974 if (typeof process === "undefined" || true) {
10975 registerStyle2("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}");
10976 }
10977 var resets_default = { "box-sizing": "_336cd3e4e743482f__box-sizing" };
10978 if (typeof process === "undefined" || true) {
10979 registerStyle2("19fcc06039", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._480b748dd3510e64__positioner{z-index:var(--wp-ui-tooltip-z-index,initial)}._50096b232db7709d__popup{--_wp-ui-elevation-sm:0 1px 2px rgba(0,0,0,.05),0 2px 3px rgba(0,0,0,.04),0 6px 6px rgba(0,0,0,.03),0 8px 8px rgba(0,0,0,.02);background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-elevation-sm);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:1.4;padding:var(--wpds-dimension-padding-xs,4px) var(--wpds-dimension-padding-sm,8px);@media (forced-colors:active){border-bottom-color:CanvasText;border-bottom-style:solid;border-bottom-width:1px;border-left-color:CanvasText;border-left-style:solid;border-left-width:1px;border-right-color:CanvasText;border-right-style:solid;border-right-width:1px;border-top-color:CanvasText;border-top-style:solid;border-top-width:1px}}}}');
10980 }
10981 var style_default = { "positioner": "_480b748dd3510e64__positioner", "popup": "_50096b232db7709d__popup" };
10982 var Positioner = (0, import_element11.forwardRef)(
10983 function TooltipPositioner3({ align = "center", className, side = "top", sideOffset = 4, ...props }, ref) {
10984 return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
10985 index_parts_exports2.Positioner,
10986 {
10987 ref,
10988 align,
10989 side,
10990 sideOffset,
10991 ...props,
10992 className: clsx_default(
10993 resets_default["box-sizing"],
10994 style_default.positioner,
10995 className
10996 )
10997 }
10998 );
10999 }
11000 );
11001
11002 // packages/ui/build-module/utils/render-slot-with-children.mjs
11003 var import_element12 = __toESM(require_element(), 1);
11004 function renderSlotWithChildren(slot, defaultSlot, children) {
11005 return (0, import_element12.cloneElement)(slot ?? defaultSlot, { children });
11006 }
11007
11008 // packages/ui/build-module/utils/theme-provider.mjs
11009 var theme = __toESM(require_theme(), 1);
11010
11011 // packages/ui/build-module/lock-unlock.mjs
11012 var import_private_apis = __toESM(require_private_apis(), 1);
11013 var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(
11014 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
11015 "@wordpress/ui"
11016 );
11017
11018 // packages/ui/build-module/utils/theme-provider.mjs
11019 function getThemeProvider() {
11020 const themePackage = theme;
11021 if (themePackage.ThemeProvider) {
11022 return themePackage.ThemeProvider;
11023 }
11024 if (!themePackage.privateApis) {
11025 throw new Error(
11026 "@wordpress/ui: @wordpress/theme must expose `ThemeProvider` or `privateApis.ThemeProvider`."
11027 );
11028 }
11029 return unlock(
11030 themePackage.privateApis
11031 ).ThemeProvider;
11032 }
11033 var ThemeProvider = getThemeProvider();
11034
11035 // packages/ui/build-module/tooltip/popup.mjs
11036 var import_jsx_runtime20 = __toESM(require_jsx_runtime(), 1);
11037 var STYLE_HASH_ATTRIBUTE3 = "data-wp-hash";
11038 function getRuntime3() {
11039 const globalScope = globalThis;
11040 if (globalScope.__wpStyleRuntime) {
11041 return globalScope.__wpStyleRuntime;
11042 }
11043 globalScope.__wpStyleRuntime = {
11044 documents: /* @__PURE__ */ new Map(),
11045 styles: /* @__PURE__ */ new Map(),
11046 injectedStyles: /* @__PURE__ */ new WeakMap()
11047 };
11048 if (typeof document !== "undefined") {
11049 registerDocument3(document);
11050 }
11051 return globalScope.__wpStyleRuntime;
11052 }
11053 function documentContainsStyleHash3(targetDocument, hash) {
11054 if (!targetDocument.head) {
11055 return false;
11056 }
11057 for (const style of targetDocument.head.querySelectorAll(
11058 `style[${STYLE_HASH_ATTRIBUTE3}]`
11059 )) {
11060 if (style.getAttribute(STYLE_HASH_ATTRIBUTE3) === hash) {
11061 return true;
11062 }
11063 }
11064 return false;
11065 }
11066 function injectStyle3(targetDocument, hash, css) {
11067 if (!targetDocument.head) {
11068 return;
11069 }
11070 const runtime = getRuntime3();
11071 let injectedStyles = runtime.injectedStyles.get(targetDocument);
11072 if (!injectedStyles) {
11073 injectedStyles = /* @__PURE__ */ new Set();
11074 runtime.injectedStyles.set(targetDocument, injectedStyles);
11075 }
11076 if (injectedStyles.has(hash)) {
11077 return;
11078 }
11079 if (documentContainsStyleHash3(targetDocument, hash)) {
11080 injectedStyles.add(hash);
11081 return;
11082 }
11083 const style = targetDocument.createElement("style");
11084 style.setAttribute(STYLE_HASH_ATTRIBUTE3, hash);
11085 style.appendChild(targetDocument.createTextNode(css));
11086 targetDocument.head.appendChild(style);
11087 injectedStyles.add(hash);
11088 }
11089 function registerDocument3(targetDocument) {
11090 const runtime = getRuntime3();
11091 runtime.documents.set(
11092 targetDocument,
11093 (runtime.documents.get(targetDocument) ?? 0) + 1
11094 );
11095 for (const [hash, css] of runtime.styles) {
11096 injectStyle3(targetDocument, hash, css);
11097 }
11098 return () => {
11099 const count = runtime.documents.get(targetDocument);
11100 if (count === void 0) {
11101 return;
11102 }
11103 if (count <= 1) {
11104 runtime.documents.delete(targetDocument);
11105 return;
11106 }
11107 runtime.documents.set(targetDocument, count - 1);
11108 };
11109 }
11110 function registerStyle3(hash, css) {
11111 const runtime = getRuntime3();
11112 runtime.styles.set(hash, css);
11113 for (const targetDocument of runtime.documents.keys()) {
11114 injectStyle3(targetDocument, hash, css);
11115 }
11116 }
11117 if (typeof process === "undefined" || true) {
11118 registerStyle3("19fcc06039", '@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._480b748dd3510e64__positioner{z-index:var(--wp-ui-tooltip-z-index,initial)}._50096b232db7709d__popup{--_wp-ui-elevation-sm:0 1px 2px rgba(0,0,0,.05),0 2px 3px rgba(0,0,0,.04),0 6px 6px rgba(0,0,0,.03),0 8px 8px rgba(0,0,0,.02);background-color:var(--wpds-color-background-surface-neutral-strong,#fff);border-radius:var(--wpds-border-radius-md,4px);box-shadow:var(--_wp-ui-elevation-sm);color:var(--wpds-color-foreground-content-neutral,#1e1e1e);font-family:var(--wpds-typography-font-family-body,-apple-system,system-ui,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif);font-size:var(--wpds-typography-font-size-sm,12px);line-height:1.4;padding:var(--wpds-dimension-padding-xs,4px) var(--wpds-dimension-padding-sm,8px);@media (forced-colors:active){border-bottom-color:CanvasText;border-bottom-style:solid;border-bottom-width:1px;border-left-color:CanvasText;border-left-style:solid;border-left-width:1px;border-right-color:CanvasText;border-right-style:solid;border-right-width:1px;border-top-color:CanvasText;border-top-style:solid;border-top-width:1px}}}}');
11119 }
11120 var style_default2 = { "positioner": "_480b748dd3510e64__positioner", "popup": "_50096b232db7709d__popup" };
11121 var POPUP_COLOR = { background: "#1e1e1e" };
11122 var Popup = (0, import_element13.forwardRef)(function TooltipPopup3({ portal, positioner, children, className, ...props }, ref) {
11123 const popupContent = /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(ThemeProvider, { color: POPUP_COLOR, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
11124 index_parts_exports2.Popup,
11125 {
11126 ref,
11127 className: clsx_default(style_default2.popup, className),
11128 ...props,
11129 children
11130 }
11131 ) });
11132 const positionedPopup = renderSlotWithChildren(
11133 positioner,
11134 /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Positioner, {}),
11135 popupContent
11136 );
11137 return renderSlotWithChildren(portal, /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Portal, {}), positionedPopup);
11138 });
11139
11140 // packages/ui/build-module/tooltip/trigger.mjs
11141 var import_element14 = __toESM(require_element(), 1);
11142 var import_jsx_runtime21 = __toESM(require_jsx_runtime(), 1);
11143 var Trigger = (0, import_element14.forwardRef)(
11144 function TooltipTrigger3(props, ref) {
11145 return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(index_parts_exports2.Trigger, { ref, ...props });
11146 }
11147 );
11148
11149 // packages/ui/build-module/utils/direction-provider.mjs
11150 var import_i18n = __toESM(require_i18n(), 1);
11151 var import_jsx_runtime22 = __toESM(require_jsx_runtime(), 1);
11152 function DirectionProvider3({ children }) {
11153 return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DirectionProvider, { direction: (0, import_i18n.isRTL)() ? "rtl" : "ltr", children });
11154 }
11155
11156 // packages/ui/build-module/tooltip/root.mjs
11157 var import_jsx_runtime23 = __toESM(require_jsx_runtime(), 1);
11158 function Root(props) {
11159 return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(DirectionProvider3, { children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(index_parts_exports2.Root, { ...props }) });
11160 }
11161
11162 // packages/icons/build-module/library/chevron-left.mjs
11163 var import_primitives = __toESM(require_primitives(), 1);
11164 var import_jsx_runtime24 = __toESM(require_jsx_runtime(), 1);
11165 var chevron_left_default = /* @__PURE__ */ (0, import_jsx_runtime24.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_runtime24.jsx)(import_primitives.Path, { d: "M14 6.5L9 12L14 17.5", vectorEffect: "non-scaling-stroke" }) });
11166
11167 // packages/icons/build-module/library/chevron-right.mjs
11168 var import_primitives2 = __toESM(require_primitives(), 1);
11169 var import_jsx_runtime25 = __toESM(require_jsx_runtime(), 1);
11170 var chevron_right_default = /* @__PURE__ */ (0, import_jsx_runtime25.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_runtime25.jsx)(import_primitives2.Path, { d: "M10 6.5L15 12L10 17.5", vectorEffect: "non-scaling-stroke" }) });
11171
11172 // packages/icons/build-module/library/envelope.mjs
11173 var import_primitives3 = __toESM(require_primitives(), 1);
11174 var import_jsx_runtime26 = __toESM(require_jsx_runtime(), 1);
11175 var envelope_default = /* @__PURE__ */ (0, import_jsx_runtime26.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_runtime26.jsx)(import_primitives3.Path, { d: "M20.25 8.5V7C20.25 6.30964 19.6904 5.75 19 5.75H5C4.30964 5.75 3.75 6.30964 3.75 7V8.5M20.25 8.5V17C20.25 17.6904 19.6904 18.25 19 18.25H5C4.30964 18.25 3.75 17.6904 3.75 17V8.5M20.25 8.5L12 14.5L3.75 8.5", vectorEffect: "non-scaling-stroke" }) });
11176
11177 // packages/icons/build-module/library/error.mjs
11178 var import_primitives4 = __toESM(require_primitives(), 1);
11179 var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1);
11180 var error_default = /* @__PURE__ */ (0, import_jsx_runtime27.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_runtime27.jsx)(import_primitives4.Path, { d: "M12 9L12 14M12 15.5V17M11.1284 5.04947L3.83827 18.0097C3.46331 18.6763 3.94502 19.5 4.70985 19.5H19.2902C20.055 19.5 20.5367 18.6763 20.1617 18.0097L12.8716 5.04947C12.4893 4.36982 11.5107 4.36982 11.1284 5.04947Z", vectorEffect: "non-scaling-stroke" }) });
11181
11182 // packages/icons/build-module/library/link.mjs
11183 var import_primitives5 = __toESM(require_primitives(), 1);
11184 var import_jsx_runtime28 = __toESM(require_jsx_runtime(), 1);
11185 var link_default = /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_primitives5.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_primitives5.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" }) });
11186
11187 // packages/icons/build-module/library/mobile.mjs
11188 var import_primitives6 = __toESM(require_primitives(), 1);
11189 var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1);
11190 var mobile_default = /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_primitives6.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_runtime29.jsx)(import_primitives6.Path, { d: "M11 16.5H13M16.25 18V6C16.25 5.30964 15.6904 4.75 15 4.75H9C8.30964 4.75 7.75 5.30964 7.75 6L7.75 18C7.75 18.6904 8.30964 19.25 9 19.25H15C15.6904 19.25 16.25 18.6904 16.25 18Z", vectorEffect: "non-scaling-stroke" }) });
11191
11192 // packages/icons/build-module/library/published.mjs
11193 var import_primitives7 = __toESM(require_primitives(), 1);
11194 var import_jsx_runtime30 = __toESM(require_jsx_runtime(), 1);
11195 var published_default = /* @__PURE__ */ (0, import_jsx_runtime30.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: [
11196 /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_primitives7.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" }),
11197 /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_primitives7.Path, { d: "M9 12L11 14L15 10", vectorEffect: "non-scaling-stroke" })
11198 ] });
11199
11200 // packages/icons/build-module/library/seen.mjs
11201 var import_primitives8 = __toESM(require_primitives(), 1);
11202 var import_jsx_runtime31 = __toESM(require_jsx_runtime(), 1);
11203 var seen_default = /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_primitives8.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: [
11204 /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_primitives8.Path, { d: "M20.0645 13C18.5918 10.0366 15.5337 8 12 8C8.46631 8 5.40825 10.0366 3.93555 13", vectorEffect: "non-scaling-stroke" }),
11205 /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_primitives8.Circle, { cx: "12", cy: "12.5", r: "3", fill: "currentColor", vectorEffect: "non-scaling-stroke" })
11206 ] });
11207
11208 // packages/icons/build-module/library/unseen.mjs
11209 var import_primitives9 = __toESM(require_primitives(), 1);
11210 var import_jsx_runtime32 = __toESM(require_jsx_runtime(), 1);
11211 var unseen_default = /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_primitives9.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", style: { fill: "none" }, stroke: "currentColor", strokeWidth: "1.5", children: [
11212 /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_primitives9.Path, { d: "M8 21L10.6587 15.1842M13.1523 9.72929L13.8553 8.19144L16 3.5M20.0645 13C19.2118 11.2841 17.8276 9.87898 16.1272 9M3.93555 13C5.40825 10.0366 8.46631 8 12 8C12.636 8 13.2566 8.06597 13.8553 8.19144M13.1523 9.72929C12.7975 9.58156 12.4083 9.5 12 9.5C10.3431 9.5 9 10.8431 9 12.5C9 13.6747 9.67519 14.6917 10.6587 15.1842M13.1523 9.72929L10.6587 15.1842M13.1755 15.261C14.2481 14.8037 15 13.7397 15 12.5C15 12.1819 14.9505 11.8753 14.8587 11.5876", vectorEffect: "non-scaling-stroke" }),
11213 /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_primitives9.Path, { d: "M12 9.5C10.3431 9.5 9 10.8431 9 12.5C9 13.6747 9.67519 14.6917 10.6587 15.1842L13.1523 9.72929C12.7975 9.58156 12.4083 9.5 12 9.5Z", fill: "currentColor", vectorEffect: "non-scaling-stroke" })
11214 ] });
11215
11216 // packages/ui/build-module/icon/icon.mjs
11217 var import_element15 = __toESM(require_element(), 1);
11218 var import_primitives10 = __toESM(require_primitives(), 1);
11219 var import_jsx_runtime33 = __toESM(require_jsx_runtime(), 1);
11220 var Icon = (0, import_element15.forwardRef)(function Icon2({ icon, size: size4 = 24, style, ...restProps }, ref) {
11221 const mergedStyle = icon.props.style || style ? { ...icon.props.style, ...style } : void 0;
11222 return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
11223 import_primitives10.SVG,
11224 {
11225 ref,
11226 ...icon.props,
11227 ...restProps,
11228 ...mergedStyle ? { style: mergedStyle } : {},
11229 width: size4,
11230 height: size4
11231 }
11232 );
11233 });
11234
11235 // packages/ui/build-module/utils/keyboard-shortcut.mjs
11236 var import_element17 = __toESM(require_element(), 1);
11237 var import_i18n2 = __toESM(require_i18n(), 1);
11238
11239 // packages/ui/build-module/visually-hidden/visually-hidden.mjs
11240 var import_element16 = __toESM(require_element(), 1);
11241 var STYLE_HASH_ATTRIBUTE4 = "data-wp-hash";
11242 function getRuntime4() {
11243 const globalScope = globalThis;
11244 if (globalScope.__wpStyleRuntime) {
11245 return globalScope.__wpStyleRuntime;
11246 }
11247 globalScope.__wpStyleRuntime = {
11248 documents: /* @__PURE__ */ new Map(),
11249 styles: /* @__PURE__ */ new Map(),
11250 injectedStyles: /* @__PURE__ */ new WeakMap()
11251 };
11252 if (typeof document !== "undefined") {
11253 registerDocument4(document);
11254 }
11255 return globalScope.__wpStyleRuntime;
11256 }
11257 function documentContainsStyleHash4(targetDocument, hash) {
11258 if (!targetDocument.head) {
11259 return false;
11260 }
11261 for (const style of targetDocument.head.querySelectorAll(
11262 `style[${STYLE_HASH_ATTRIBUTE4}]`
11263 )) {
11264 if (style.getAttribute(STYLE_HASH_ATTRIBUTE4) === hash) {
11265 return true;
11266 }
11267 }
11268 return false;
11269 }
11270 function injectStyle4(targetDocument, hash, css) {
11271 if (!targetDocument.head) {
11272 return;
11273 }
11274 const runtime = getRuntime4();
11275 let injectedStyles = runtime.injectedStyles.get(targetDocument);
11276 if (!injectedStyles) {
11277 injectedStyles = /* @__PURE__ */ new Set();
11278 runtime.injectedStyles.set(targetDocument, injectedStyles);
11279 }
11280 if (injectedStyles.has(hash)) {
11281 return;
11282 }
11283 if (documentContainsStyleHash4(targetDocument, hash)) {
11284 injectedStyles.add(hash);
11285 return;
11286 }
11287 const style = targetDocument.createElement("style");
11288 style.setAttribute(STYLE_HASH_ATTRIBUTE4, hash);
11289 style.appendChild(targetDocument.createTextNode(css));
11290 targetDocument.head.appendChild(style);
11291 injectedStyles.add(hash);
11292 }
11293 function registerDocument4(targetDocument) {
11294 const runtime = getRuntime4();
11295 runtime.documents.set(
11296 targetDocument,
11297 (runtime.documents.get(targetDocument) ?? 0) + 1
11298 );
11299 for (const [hash, css] of runtime.styles) {
11300 injectStyle4(targetDocument, hash, css);
11301 }
11302 return () => {
11303 const count = runtime.documents.get(targetDocument);
11304 if (count === void 0) {
11305 return;
11306 }
11307 if (count <= 1) {
11308 runtime.documents.delete(targetDocument);
11309 return;
11310 }
11311 runtime.documents.set(targetDocument, count - 1);
11312 };
11313 }
11314 function registerStyle4(hash, css) {
11315 const runtime = getRuntime4();
11316 runtime.styles.set(hash, css);
11317 for (const targetDocument of runtime.documents.keys()) {
11318 injectStyle4(targetDocument, hash, css);
11319 }
11320 }
11321 if (typeof process === "undefined" || true) {
11322 registerStyle4("f4df7461e9", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{.f37b9e2e191ebd66__visually-hidden{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;overflow-wrap:normal;padding:0;position:absolute;width:1px;word-break:normal}}}");
11323 }
11324 var style_default3 = { "visually-hidden": "f37b9e2e191ebd66__visually-hidden" };
11325 var VisuallyHidden = (0, import_element16.forwardRef)(
11326 function VisuallyHidden2({ render: render4, ...restProps }, ref) {
11327 const element = useRender({
11328 render: render4,
11329 ref,
11330 props: mergeProps(
11331 { className: style_default3["visually-hidden"] },
11332 restProps,
11333 {
11334 // @ts-expect-error Arbitrary data-* attributes aren't indexable on the typed div props. Kept hardcoded so consumers can't change or remove it.
11335 "data-visually-hidden": ""
11336 }
11337 )
11338 });
11339 return element;
11340 }
11341 );
11342
11343 // packages/ui/build-module/utils/keyboard-shortcut.mjs
11344 var import_jsx_runtime34 = __toESM(require_jsx_runtime(), 1);
11345 function useKeyboardShortcutProps({
11346 "aria-describedby": ariaDescribedBy,
11347 "aria-keyshortcuts": ariaKeyShortcuts,
11348 shortcut
11349 }) {
11350 const generatedDescriptionId = (0, import_element17.useId)();
11351 const descriptionId = shortcut ? generatedDescriptionId : void 0;
11352 const describedBy = [ariaDescribedBy, descriptionId].filter(Boolean).join(" ");
11353 return {
11354 descriptionId,
11355 targetProps: {
11356 "aria-describedby": describedBy || void 0,
11357 "aria-keyshortcuts": shortcut?.ariaKeyShortcut ?? ariaKeyShortcuts
11358 }
11359 };
11360 }
11361 var KeyboardShortcutDescription = (0, import_element17.forwardRef)(function KeyboardShortcutDescription2({ descriptionId, shortcut }, ref) {
11362 return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
11363 VisuallyHidden,
11364 {
11365 id: descriptionId,
11366 "aria-hidden": "true",
11367 render: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { ref }),
11368 children: (0, import_i18n2.sprintf)(
11369 /* translators: %s: keyboard shortcut. */
11370 (0, import_i18n2.__)("Keyboard shortcut: %s"),
11371 shortcut.label ?? shortcut.ariaKeyShortcut
11372 )
11373 }
11374 );
11375 });
11376 var KeyboardShortcutDisplay = (0, import_element17.forwardRef)(function KeyboardShortcutDisplay2({ className, shortcut }, ref) {
11377 return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { ref, "aria-hidden": "true", className, dir: "ltr", children: shortcut.displayShortcut });
11378 });
11379
11380 // packages/ui/build-module/button/button.mjs
11381 var import_element18 = __toESM(require_element(), 1);
11382 var import_i18n3 = __toESM(require_i18n(), 1);
11383 var import_jsx_runtime35 = __toESM(require_jsx_runtime(), 1);
11384 import { speak } from "@wordpress/a11y";
11385 var STYLE_HASH_ATTRIBUTE5 = "data-wp-hash";
11386 function getRuntime5() {
11387 const globalScope = globalThis;
11388 if (globalScope.__wpStyleRuntime) {
11389 return globalScope.__wpStyleRuntime;
11390 }
11391 globalScope.__wpStyleRuntime = {
11392 documents: /* @__PURE__ */ new Map(),
11393 styles: /* @__PURE__ */ new Map(),
11394 injectedStyles: /* @__PURE__ */ new WeakMap()
11395 };
11396 if (typeof document !== "undefined") {
11397 registerDocument5(document);
11398 }
11399 return globalScope.__wpStyleRuntime;
11400 }
11401 function documentContainsStyleHash5(targetDocument, hash) {
11402 if (!targetDocument.head) {
11403 return false;
11404 }
11405 for (const style of targetDocument.head.querySelectorAll(
11406 `style[${STYLE_HASH_ATTRIBUTE5}]`
11407 )) {
11408 if (style.getAttribute(STYLE_HASH_ATTRIBUTE5) === hash) {
11409 return true;
11410 }
11411 }
11412 return false;
11413 }
11414 function injectStyle5(targetDocument, hash, css) {
11415 if (!targetDocument.head) {
11416 return;
11417 }
11418 const runtime = getRuntime5();
11419 let injectedStyles = runtime.injectedStyles.get(targetDocument);
11420 if (!injectedStyles) {
11421 injectedStyles = /* @__PURE__ */ new Set();
11422 runtime.injectedStyles.set(targetDocument, injectedStyles);
11423 }
11424 if (injectedStyles.has(hash)) {
11425 return;
11426 }
11427 if (documentContainsStyleHash5(targetDocument, hash)) {
11428 injectedStyles.add(hash);
11429 return;
11430 }
11431 const style = targetDocument.createElement("style");
11432 style.setAttribute(STYLE_HASH_ATTRIBUTE5, hash);
11433 style.appendChild(targetDocument.createTextNode(css));
11434 targetDocument.head.appendChild(style);
11435 injectedStyles.add(hash);
11436 }
11437 function registerDocument5(targetDocument) {
11438 const runtime = getRuntime5();
11439 runtime.documents.set(
11440 targetDocument,
11441 (runtime.documents.get(targetDocument) ?? 0) + 1
11442 );
11443 for (const [hash, css] of runtime.styles) {
11444 injectStyle5(targetDocument, hash, css);
11445 }
11446 return () => {
11447 const count = runtime.documents.get(targetDocument);
11448 if (count === void 0) {
11449 return;
11450 }
11451 if (count <= 1) {
11452 runtime.documents.delete(targetDocument);
11453 return;
11454 }
11455 runtime.documents.set(targetDocument, count - 1);
11456 };
11457 }
11458 function registerStyle5(hash, css) {
11459 const runtime = getRuntime5();
11460 runtime.styles.set(hash, css);
11461 for (const targetDocument of runtime.documents.keys()) {
11462 injectStyle5(targetDocument, hash, css);
11463 }
11464 }
11465 if (typeof process === "undefined" || true) {
11466 registerStyle5("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)}}}');
11467 }
11468 var style_default4 = { "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" };
11469 if (typeof process === "undefined" || true) {
11470 registerStyle5("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}");
11471 }
11472 var resets_default2 = { "box-sizing": "_336cd3e4e743482f__box-sizing" };
11473 if (typeof process === "undefined" || true) {
11474 registerStyle5("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))}}}");
11475 }
11476 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" };
11477 if (typeof process === "undefined" || true) {
11478 registerStyle5("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)}");
11479 }
11480 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" };
11481 var Button3 = (0, import_element18.forwardRef)(
11482 function Button22({
11483 tone = "brand",
11484 variant = "solid",
11485 size: size4 = "default",
11486 className,
11487 focusableWhenDisabled = true,
11488 disabled: disabled2,
11489 loading,
11490 loadingAnnouncement = (0, import_i18n3.__)("Loading"),
11491 children,
11492 ...props
11493 }, ref) {
11494 const mergedClassName = clsx_default(
11495 global_css_defense_default.button,
11496 resets_default2["box-sizing"],
11497 focus_module_default["outset-ring--focus-except-active"],
11498 variant !== "unstyled" && style_default4.button,
11499 style_default4[`is-${tone}`],
11500 style_default4[`is-${variant}`],
11501 style_default4[`is-${size4}`],
11502 loading && style_default4["is-loading"],
11503 className
11504 );
11505 (0, import_element18.useEffect)(() => {
11506 if (loading && loadingAnnouncement) {
11507 speak(loadingAnnouncement);
11508 }
11509 }, [loading, loadingAnnouncement]);
11510 return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
11511 Button,
11512 {
11513 ref,
11514 className: mergedClassName,
11515 focusableWhenDisabled,
11516 disabled: disabled2 ?? loading,
11517 ...props,
11518 children
11519 }
11520 );
11521 }
11522 );
11523
11524 // packages/ui/build-module/button/icon.mjs
11525 var import_element19 = __toESM(require_element(), 1);
11526 var import_jsx_runtime36 = __toESM(require_jsx_runtime(), 1);
11527 var STYLE_HASH_ATTRIBUTE6 = "data-wp-hash";
11528 function getRuntime6() {
11529 const globalScope = globalThis;
11530 if (globalScope.__wpStyleRuntime) {
11531 return globalScope.__wpStyleRuntime;
11532 }
11533 globalScope.__wpStyleRuntime = {
11534 documents: /* @__PURE__ */ new Map(),
11535 styles: /* @__PURE__ */ new Map(),
11536 injectedStyles: /* @__PURE__ */ new WeakMap()
11537 };
11538 if (typeof document !== "undefined") {
11539 registerDocument6(document);
11540 }
11541 return globalScope.__wpStyleRuntime;
11542 }
11543 function documentContainsStyleHash6(targetDocument, hash) {
11544 if (!targetDocument.head) {
11545 return false;
11546 }
11547 for (const style of targetDocument.head.querySelectorAll(
11548 `style[${STYLE_HASH_ATTRIBUTE6}]`
11549 )) {
11550 if (style.getAttribute(STYLE_HASH_ATTRIBUTE6) === hash) {
11551 return true;
11552 }
11553 }
11554 return false;
11555 }
11556 function injectStyle6(targetDocument, hash, css) {
11557 if (!targetDocument.head) {
11558 return;
11559 }
11560 const runtime = getRuntime6();
11561 let injectedStyles = runtime.injectedStyles.get(targetDocument);
11562 if (!injectedStyles) {
11563 injectedStyles = /* @__PURE__ */ new Set();
11564 runtime.injectedStyles.set(targetDocument, injectedStyles);
11565 }
11566 if (injectedStyles.has(hash)) {
11567 return;
11568 }
11569 if (documentContainsStyleHash6(targetDocument, hash)) {
11570 injectedStyles.add(hash);
11571 return;
11572 }
11573 const style = targetDocument.createElement("style");
11574 style.setAttribute(STYLE_HASH_ATTRIBUTE6, hash);
11575 style.appendChild(targetDocument.createTextNode(css));
11576 targetDocument.head.appendChild(style);
11577 injectedStyles.add(hash);
11578 }
11579 function registerDocument6(targetDocument) {
11580 const runtime = getRuntime6();
11581 runtime.documents.set(
11582 targetDocument,
11583 (runtime.documents.get(targetDocument) ?? 0) + 1
11584 );
11585 for (const [hash, css] of runtime.styles) {
11586 injectStyle6(targetDocument, hash, css);
11587 }
11588 return () => {
11589 const count = runtime.documents.get(targetDocument);
11590 if (count === void 0) {
11591 return;
11592 }
11593 if (count <= 1) {
11594 runtime.documents.delete(targetDocument);
11595 return;
11596 }
11597 runtime.documents.set(targetDocument, count - 1);
11598 };
11599 }
11600 function registerStyle6(hash, css) {
11601 const runtime = getRuntime6();
11602 runtime.styles.set(hash, css);
11603 for (const targetDocument of runtime.documents.keys()) {
11604 injectStyle6(targetDocument, hash, css);
11605 }
11606 }
11607 if (typeof process === "undefined" || true) {
11608 registerStyle6("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)}}}');
11609 }
11610 var style_default5 = { "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" };
11611 var ButtonIcon = (0, import_element19.forwardRef)(
11612 function ButtonIcon2({ className, icon, ...props }, ref) {
11613 return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
11614 Icon,
11615 {
11616 ref,
11617 icon,
11618 className: clsx_default(style_default5.icon, className),
11619 size: 24,
11620 ...props
11621 }
11622 );
11623 }
11624 );
11625
11626 // packages/ui/build-module/button/index.mjs
11627 ButtonIcon.displayName = "Button.Icon";
11628 var Button4 = Object.assign(Button3, {
11629 /**
11630 * An icon component specifically designed to work well when rendered inside
11631 * a `Button` component.
11632 */
11633 Icon: ButtonIcon
11634 });
11635
11636 // node_modules/@date-fns/tz/tzName/index.js
11637 function tzName(timeZone, date, format7 = "long") {
11638 return new Intl.DateTimeFormat("en-US", {
11639 // Enforces engine to render the time. Without the option JavaScriptCore omits it.
11640 hour: "numeric",
11641 timeZone,
11642 timeZoneName: format7
11643 }).format(date).split(/\s/g).slice(2).join(" ");
11644 }
11645
11646 // node_modules/@date-fns/tz/tzOffset/index.js
11647 var offsetFormatCache = {};
11648 var offsetCache = {};
11649 function tzOffset(timeZone, date) {
11650 try {
11651 const format7 = offsetFormatCache[timeZone] ||= new Intl.DateTimeFormat("en-US", {
11652 timeZone,
11653 timeZoneName: "longOffset"
11654 }).format;
11655 const offsetStr = format7(date).split("GMT")[1];
11656 if (offsetStr in offsetCache) return offsetCache[offsetStr];
11657 return calcOffset(offsetStr, offsetStr.split(":"));
11658 } catch {
11659 if (timeZone in offsetCache) return offsetCache[timeZone];
11660 const captures = timeZone?.match(offsetRe);
11661 if (captures) return calcOffset(timeZone, captures.slice(1));
11662 return NaN;
11663 }
11664 }
11665 var offsetRe = /([+-]\d\d):?(\d\d)?/;
11666 function calcOffset(cacheStr, values) {
11667 const hours = +(values[0] || 0);
11668 const minutes = +(values[1] || 0);
11669 const seconds = +(values[2] || 0) / 60;
11670 return offsetCache[cacheStr] = hours * 60 + minutes > 0 ? hours * 60 + minutes + seconds : hours * 60 - minutes - seconds;
11671 }
11672
11673 // node_modules/@date-fns/tz/date/mini.js
11674 var TZDateMini = class _TZDateMini extends Date {
11675 //#region static
11676 constructor(...args) {
11677 super();
11678 if (args.length > 1 && typeof args[args.length - 1] === "string") {
11679 this.timeZone = args.pop();
11680 }
11681 this.internal = /* @__PURE__ */ new Date();
11682 if (isNaN(tzOffset(this.timeZone, this))) {
11683 this.setTime(NaN);
11684 } else {
11685 if (!args.length) {
11686 this.setTime(Date.now());
11687 } else if (typeof args[0] === "number" && (args.length === 1 || args.length === 2 && typeof args[1] !== "number")) {
11688 this.setTime(args[0]);
11689 } else if (typeof args[0] === "string") {
11690 this.setTime(+new Date(args[0]));
11691 } else if (args[0] instanceof Date) {
11692 this.setTime(+args[0]);
11693 } else {
11694 this.setTime(+new Date(...args));
11695 adjustToSystemTZ(this, args);
11696 }
11697 }
11698 }
11699 static tz(tz, ...args) {
11700 return args.length ? new _TZDateMini(...args, tz) : new _TZDateMini(Date.now(), tz);
11701 }
11702 //#endregion
11703 //#region time zone
11704 withTimeZone(timeZone) {
11705 return new _TZDateMini(+this, timeZone);
11706 }
11707 getTimezoneOffset() {
11708 const offset4 = -tzOffset(this.timeZone, this);
11709 return offset4 > 0 ? Math.floor(offset4) : Math.ceil(offset4);
11710 }
11711 //#endregion
11712 //#region time
11713 setTime(_time) {
11714 Date.prototype.setTime.apply(this, arguments);
11715 syncToInternal(this);
11716 return +this;
11717 }
11718 //#endregion
11719 //#region date-fns integration
11720 [/* @__PURE__ */ Symbol.for("constructDateFrom")](date) {
11721 return new _TZDateMini(+new Date(date), this.timeZone);
11722 }
11723 //#endregion
11724 };
11725 var re = /^(get|set)(?!UTC)/;
11726 Object.getOwnPropertyNames(Date.prototype).forEach((method) => {
11727 if (!re.test(method)) return;
11728 const utcMethod = method.replace(re, "$1UTC");
11729 if (!TZDateMini.prototype[utcMethod]) return;
11730 if (method.startsWith("get")) {
11731 TZDateMini.prototype[method] = function() {
11732 return this.internal[utcMethod]();
11733 };
11734 } else {
11735 TZDateMini.prototype[method] = function() {
11736 Date.prototype[utcMethod].apply(this.internal, arguments);
11737 syncFromInternal(this);
11738 return +this;
11739 };
11740 TZDateMini.prototype[utcMethod] = function() {
11741 Date.prototype[utcMethod].apply(this, arguments);
11742 syncToInternal(this);
11743 return +this;
11744 };
11745 }
11746 });
11747 function syncToInternal(date) {
11748 date.internal.setTime(+date);
11749 date.internal.setUTCSeconds(date.internal.getUTCSeconds() - // Round after converting minutes to seconds to avoid fractional offset
11750 // precision errors from historical offsets.
11751 Math.round(-tzOffset(date.timeZone, date) * 60));
11752 }
11753 function syncFromInternal(date) {
11754 Date.prototype.setFullYear.call(date, date.internal.getUTCFullYear(), date.internal.getUTCMonth(), date.internal.getUTCDate());
11755 Date.prototype.setHours.call(date, date.internal.getUTCHours(), date.internal.getUTCMinutes(), date.internal.getUTCSeconds(), date.internal.getUTCMilliseconds());
11756 adjustToSystemTZ(date);
11757 }
11758 function adjustToSystemTZ(date, constructorArgs) {
11759 const expectedInternalTime = Array.isArray(constructorArgs) ? constructorArgsToInternalTime(constructorArgs) : +date.internal;
11760 const offsetWithSeconds = tzOffset(date.timeZone, date);
11761 const offset4 = offsetWithSeconds > 0 ? Math.floor(offsetWithSeconds) : Math.ceil(offsetWithSeconds);
11762 const prevHour = /* @__PURE__ */ new Date(+date);
11763 prevHour.setUTCHours(prevHour.getUTCHours() - 1);
11764 const systemOffset = -(/* @__PURE__ */ new Date(+date)).getTimezoneOffset();
11765 const prevHourSystemOffset = -(/* @__PURE__ */ new Date(+prevHour)).getTimezoneOffset();
11766 const systemDSTChange = systemOffset - prevHourSystemOffset;
11767 let systemOffsetForDiff = systemOffset;
11768 if (systemDSTChange && systemOffset !== offset4) {
11769 const systemHour = Date.prototype.getHours.apply(date);
11770 const expectedHour = Array.isArray(constructorArgs) ? constructorArgs[3] || 0 : date.internal.getUTCHours();
11771 if (systemHour !== expectedHour) {
11772 const testDate = /* @__PURE__ */ new Date(+date);
11773 const testOffsetDiff = systemOffset - offset4;
11774 if (testOffsetDiff) testDate.setUTCMinutes(testDate.getUTCMinutes() + testOffsetDiff);
11775 const testOffsetWithSeconds = tzOffset(date.timeZone, testDate);
11776 const testOffset = testOffsetWithSeconds > 0 ? Math.floor(testOffsetWithSeconds) : Math.ceil(testOffsetWithSeconds);
11777 if (testOffset === offset4) systemOffsetForDiff = prevHourSystemOffset;
11778 }
11779 }
11780 const offsetDiff = systemOffsetForDiff - offset4;
11781 if (offsetDiff)
11782 Date.prototype.setUTCMinutes.call(date, Date.prototype.getUTCMinutes.call(date) + offsetDiff);
11783 const systemDate = /* @__PURE__ */ new Date(+date);
11784 systemDate.setUTCSeconds(0);
11785 const systemSecondsOffset = systemOffset > 0 ? systemDate.getSeconds() : (systemDate.getSeconds() - 60) % 60;
11786 const secondsOffset = Math.round(-(tzOffset(date.timeZone, date) * 60)) % 60;
11787 if (secondsOffset || systemSecondsOffset)
11788 Date.prototype.setUTCSeconds.call(date, Date.prototype.getUTCSeconds.call(date) + secondsOffset + systemSecondsOffset);
11789 const postOffsetWithSeconds = tzOffset(date.timeZone, date);
11790 const postOffset = postOffsetWithSeconds > 0 ? Math.floor(postOffsetWithSeconds) : Math.ceil(postOffsetWithSeconds);
11791 const postSystemOffset = -(/* @__PURE__ */ new Date(+date)).getTimezoneOffset();
11792 const postOffsetDiff = postSystemOffset - postOffset;
11793 const offsetChanged = postOffset !== offset4;
11794 const postDiff = postOffsetDiff - offsetDiff;
11795 const targetDSTShift = postOffset - offset4;
11796 const postOffsetCandidate = expectedInternalTime - postOffset * 60 * 1e3;
11797 const normalizedTargetDSTGap = targetDSTShift > 0 && targetInternalTime(date) - expectedInternalTime === targetDSTShift * 60 * 1e3 && targetInternalTime(date, postOffsetCandidate) !== expectedInternalTime;
11798 if (offsetChanged && postDiff && !normalizedTargetDSTGap) {
11799 Date.prototype.setUTCMinutes.call(date, Date.prototype.getUTCMinutes.call(date) + postDiff);
11800 const newOffsetWithSeconds = tzOffset(date.timeZone, date);
11801 const newOffset = newOffsetWithSeconds > 0 ? Math.floor(newOffsetWithSeconds) : Math.ceil(newOffsetWithSeconds);
11802 const offsetChange = postOffset - newOffset;
11803 if (offsetChange && postDiff < 0) {
11804 Date.prototype.setUTCMinutes.call(date, Date.prototype.getUTCMinutes.call(date) + offsetChange);
11805 }
11806 }
11807 syncToInternal(date);
11808 const expectedTime = constructorArgs ? expectedInternalTime : expectedInternalTime + secondsOffset * 1e3;
11809 const drift = expectedTime - +date.internal;
11810 if (drift && Math.abs(drift) < 30 * 60 * 1e3) {
11811 Date.prototype.setTime.call(date, +date + drift);
11812 syncToInternal(date);
11813 }
11814 }
11815 function constructorArgsToInternalTime(args) {
11816 return Date.UTC(args[0], args.length > 1 ? args[1] : 0, args.length > 2 ? args[2] : 1, ...args.slice(3));
11817 }
11818 function targetInternalTime(date, time) {
11819 const internal = new Date(time ?? +date);
11820 internal.setUTCSeconds(internal.getUTCSeconds() - Math.round(-tzOffset(date.timeZone, internal) * 60));
11821 return +internal;
11822 }
11823
11824 // node_modules/@date-fns/tz/date/index.js
11825 var TZDate = class _TZDate extends TZDateMini {
11826 //#region static
11827 static tz(tz, ...args) {
11828 return args.length ? new _TZDate(...args, tz) : new _TZDate(Date.now(), tz);
11829 }
11830 //#endregion
11831 //#region representation
11832 toISOString() {
11833 const [sign, hours, minutes] = this.tzComponents();
11834 const tz = `${sign}${hours}:${minutes}`;
11835 return this.internal.toISOString().slice(0, -1) + tz;
11836 }
11837 toString() {
11838 return `${this.toDateString()} ${this.toTimeString()}`;
11839 }
11840 toDateString() {
11841 const [day, date, month, year] = this.internal.toUTCString().split(" ");
11842 return `${day?.slice(0, -1)} ${month} ${date} ${year}`;
11843 }
11844 toTimeString() {
11845 const time = this.internal.toUTCString().split(" ")[4];
11846 const [sign, hours, minutes] = this.tzComponents();
11847 return `${time} GMT${sign}${hours}${minutes} (${tzName(this.timeZone, this)})`;
11848 }
11849 toLocaleString(locales, options) {
11850 return Date.prototype.toLocaleString.call(this, locales, {
11851 ...options,
11852 timeZone: options?.timeZone || this.timeZone
11853 });
11854 }
11855 toLocaleDateString(locales, options) {
11856 return Date.prototype.toLocaleDateString.call(this, locales, {
11857 ...options,
11858 timeZone: options?.timeZone || this.timeZone
11859 });
11860 }
11861 toLocaleTimeString(locales, options) {
11862 return Date.prototype.toLocaleTimeString.call(this, locales, {
11863 ...options,
11864 timeZone: options?.timeZone || this.timeZone
11865 });
11866 }
11867 //#endregion
11868 //#region private
11869 tzComponents() {
11870 const offset4 = this.getTimezoneOffset();
11871 const sign = offset4 > 0 ? "-" : "+";
11872 const hours = String(Math.floor(Math.abs(offset4) / 60)).padStart(2, "0");
11873 const minutes = String(Math.abs(offset4) % 60).padStart(2, "0");
11874 return [sign, hours, minutes];
11875 }
11876 //#endregion
11877 withTimeZone(timeZone) {
11878 return new _TZDate(+this, timeZone);
11879 }
11880 //#region date-fns integration
11881 [/* @__PURE__ */ Symbol.for("constructDateFrom")](date) {
11882 return new _TZDate(+new Date(date), this.timeZone);
11883 }
11884 //#endregion
11885 };
11886
11887 // node_modules/date-fns/constants.js
11888 var daysInYear = 365.2425;
11889 var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1e3;
11890 var minTime = -maxTime;
11891 var millisecondsInWeek = 6048e5;
11892 var millisecondsInDay = 864e5;
11893 var millisecondsInMinute = 6e4;
11894 var millisecondsInHour = 36e5;
11895 var millisecondsInSecond = 1e3;
11896 var secondsInHour = 3600;
11897 var secondsInDay = secondsInHour * 24;
11898 var secondsInWeek = secondsInDay * 7;
11899 var secondsInYear = secondsInDay * daysInYear;
11900 var secondsInMonth = secondsInYear / 12;
11901 var secondsInQuarter = secondsInMonth * 3;
11902 var constructFromSymbol = /* @__PURE__ */ Symbol.for("constructDateFrom");
11903
11904 // node_modules/date-fns/constructFrom.js
11905 function constructFrom(date, value) {
11906 if (typeof date === "function") return date(value);
11907 if (date && typeof date === "object" && constructFromSymbol in date)
11908 return date[constructFromSymbol](value);
11909 if (date instanceof Date) return new date.constructor(value);
11910 return new Date(value);
11911 }
11912
11913 // node_modules/date-fns/toDate.js
11914 function toDate(argument, context) {
11915 return constructFrom(context || argument, argument);
11916 }
11917
11918 // node_modules/date-fns/addDays.js
11919 function addDays(date, amount, options) {
11920 const _date = toDate(date, options?.in);
11921 if (isNaN(amount)) return constructFrom(options?.in || date, NaN);
11922 if (!amount) return _date;
11923 _date.setDate(_date.getDate() + amount);
11924 return _date;
11925 }
11926
11927 // node_modules/date-fns/addMonths.js
11928 function addMonths(date, amount, options) {
11929 const _date = toDate(date, options?.in);
11930 if (isNaN(amount)) return constructFrom(options?.in || date, NaN);
11931 if (!amount) {
11932 return _date;
11933 }
11934 const dayOfMonth = _date.getDate();
11935 const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime());
11936 endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);
11937 const daysInMonth = endOfDesiredMonth.getDate();
11938 if (dayOfMonth >= daysInMonth) {
11939 return endOfDesiredMonth;
11940 } else {
11941 _date.setFullYear(
11942 endOfDesiredMonth.getFullYear(),
11943 endOfDesiredMonth.getMonth(),
11944 dayOfMonth
11945 );
11946 return _date;
11947 }
11948 }
11949
11950 // node_modules/date-fns/_lib/defaultOptions.js
11951 var defaultOptions = {};
11952 function getDefaultOptions() {
11953 return defaultOptions;
11954 }
11955
11956 // node_modules/date-fns/startOfWeek.js
11957 function startOfWeek(date, options) {
11958 const defaultOptions2 = getDefaultOptions();
11959 const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0;
11960 const _date = toDate(date, options?.in);
11961 const day = _date.getDay();
11962 const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;
11963 _date.setDate(_date.getDate() - diff);
11964 _date.setHours(0, 0, 0, 0);
11965 return _date;
11966 }
11967
11968 // node_modules/date-fns/startOfISOWeek.js
11969 function startOfISOWeek(date, options) {
11970 return startOfWeek(date, { ...options, weekStartsOn: 1 });
11971 }
11972
11973 // node_modules/date-fns/getISOWeekYear.js
11974 function getISOWeekYear(date, options) {
11975 const _date = toDate(date, options?.in);
11976 const year = _date.getFullYear();
11977 const fourthOfJanuaryOfNextYear = constructFrom(_date, 0);
11978 fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);
11979 fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);
11980 const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);
11981 const fourthOfJanuaryOfThisYear = constructFrom(_date, 0);
11982 fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);
11983 fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);
11984 const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);
11985 if (_date.getTime() >= startOfNextYear.getTime()) {
11986 return year + 1;
11987 } else if (_date.getTime() >= startOfThisYear.getTime()) {
11988 return year;
11989 } else {
11990 return year - 1;
11991 }
11992 }
11993
11994 // node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js
11995 function getTimezoneOffsetInMilliseconds(date) {
11996 const _date = toDate(date);
11997 const utcDate = new Date(
11998 Date.UTC(
11999 _date.getFullYear(),
12000 _date.getMonth(),
12001 _date.getDate(),
12002 _date.getHours(),
12003 _date.getMinutes(),
12004 _date.getSeconds(),
12005 _date.getMilliseconds()
12006 )
12007 );
12008 utcDate.setUTCFullYear(_date.getFullYear());
12009 return +date - +utcDate;
12010 }
12011
12012 // node_modules/date-fns/_lib/normalizeDates.js
12013 function normalizeDates(context, ...dates) {
12014 const normalize = constructFrom.bind(
12015 null,
12016 context || dates.find((date) => typeof date === "object")
12017 );
12018 return dates.map(normalize);
12019 }
12020
12021 // node_modules/date-fns/startOfDay.js
12022 function startOfDay(date, options) {
12023 const _date = toDate(date, options?.in);
12024 _date.setHours(0, 0, 0, 0);
12025 return _date;
12026 }
12027
12028 // node_modules/date-fns/differenceInCalendarDays.js
12029 function differenceInCalendarDays(laterDate, earlierDate, options) {
12030 const [laterDate_, earlierDate_] = normalizeDates(
12031 options?.in,
12032 laterDate,
12033 earlierDate
12034 );
12035 const laterStartOfDay = startOfDay(laterDate_);
12036 const earlierStartOfDay = startOfDay(earlierDate_);
12037 const laterTimestamp = +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay);
12038 const earlierTimestamp = +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay);
12039 return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay);
12040 }
12041
12042 // node_modules/date-fns/startOfISOWeekYear.js
12043 function startOfISOWeekYear(date, options) {
12044 const year = getISOWeekYear(date, options);
12045 const fourthOfJanuary = constructFrom(options?.in || date, 0);
12046 fourthOfJanuary.setFullYear(year, 0, 4);
12047 fourthOfJanuary.setHours(0, 0, 0, 0);
12048 return startOfISOWeek(fourthOfJanuary);
12049 }
12050
12051 // node_modules/date-fns/addWeeks.js
12052 function addWeeks(date, amount, options) {
12053 return addDays(date, amount * 7, options);
12054 }
12055
12056 // node_modules/date-fns/addYears.js
12057 function addYears(date, amount, options) {
12058 return addMonths(date, amount * 12, options);
12059 }
12060
12061 // node_modules/date-fns/areIntervalsOverlapping.js
12062 function areIntervalsOverlapping(intervalLeft, intervalRight, options) {
12063 const [leftStartTime, leftEndTime] = [
12064 +toDate(intervalLeft.start, options?.in),
12065 +toDate(intervalLeft.end, options?.in)
12066 ].sort((a, b) => a - b);
12067 const [rightStartTime, rightEndTime] = [
12068 +toDate(intervalRight.start, options?.in),
12069 +toDate(intervalRight.end, options?.in)
12070 ].sort((a, b) => a - b);
12071 if (options?.inclusive)
12072 return leftStartTime <= rightEndTime && rightStartTime <= leftEndTime;
12073 return leftStartTime < rightEndTime && rightStartTime < leftEndTime;
12074 }
12075
12076 // node_modules/date-fns/max.js
12077 function max2(dates, options) {
12078 let result;
12079 let context = options?.in;
12080 dates.forEach((date) => {
12081 if (!context && typeof date === "object")
12082 context = constructFrom.bind(null, date);
12083 const date_ = toDate(date, context);
12084 if (!result || result < date_ || isNaN(+date_)) result = date_;
12085 });
12086 return constructFrom(context, result || NaN);
12087 }
12088
12089 // node_modules/date-fns/min.js
12090 function min2(dates, options) {
12091 let result;
12092 let context = options?.in;
12093 dates.forEach((date) => {
12094 if (!context && typeof date === "object")
12095 context = constructFrom.bind(null, date);
12096 const date_ = toDate(date, context);
12097 if (!result || result > date_ || isNaN(+date_)) result = date_;
12098 });
12099 return constructFrom(context, result || NaN);
12100 }
12101
12102 // node_modules/date-fns/isSameDay.js
12103 function isSameDay(laterDate, earlierDate, options) {
12104 const [dateLeft_, dateRight_] = normalizeDates(
12105 options?.in,
12106 laterDate,
12107 earlierDate
12108 );
12109 return +startOfDay(dateLeft_) === +startOfDay(dateRight_);
12110 }
12111
12112 // node_modules/date-fns/isDate.js
12113 function isDate(value) {
12114 return value instanceof Date || typeof value === "object" && Object.prototype.toString.call(value) === "[object Date]";
12115 }
12116
12117 // node_modules/date-fns/isValid.js
12118 function isValid(date) {
12119 return !(!isDate(date) && typeof date !== "number" || isNaN(+toDate(date)));
12120 }
12121
12122 // node_modules/date-fns/differenceInCalendarMonths.js
12123 function differenceInCalendarMonths(laterDate, earlierDate, options) {
12124 const [laterDate_, earlierDate_] = normalizeDates(
12125 options?.in,
12126 laterDate,
12127 earlierDate
12128 );
12129 const yearsDiff = laterDate_.getFullYear() - earlierDate_.getFullYear();
12130 const monthsDiff = laterDate_.getMonth() - earlierDate_.getMonth();
12131 return yearsDiff * 12 + monthsDiff;
12132 }
12133
12134 // node_modules/date-fns/endOfMonth.js
12135 function endOfMonth(date, options) {
12136 const _date = toDate(date, options?.in);
12137 const month = _date.getMonth();
12138 _date.setFullYear(_date.getFullYear(), month + 1, 0);
12139 _date.setHours(23, 59, 59, 999);
12140 return _date;
12141 }
12142
12143 // node_modules/date-fns/_lib/normalizeInterval.js
12144 function normalizeInterval(context, interval) {
12145 const [start, end] = normalizeDates(context, interval.start, interval.end);
12146 return { start, end };
12147 }
12148
12149 // node_modules/date-fns/eachMonthOfInterval.js
12150 function eachMonthOfInterval(interval, options) {
12151 const { start, end } = normalizeInterval(options?.in, interval);
12152 let reversed = +start > +end;
12153 const endTime = reversed ? +start : +end;
12154 const date = reversed ? end : start;
12155 date.setHours(0, 0, 0, 0);
12156 date.setDate(1);
12157 let step = options?.step ?? 1;
12158 if (!step) return [];
12159 if (step < 0) {
12160 step = -step;
12161 reversed = !reversed;
12162 }
12163 const dates = [];
12164 while (+date <= endTime) {
12165 dates.push(constructFrom(start, date));
12166 date.setMonth(date.getMonth() + step);
12167 }
12168 return reversed ? dates.reverse() : dates;
12169 }
12170
12171 // node_modules/date-fns/startOfMonth.js
12172 function startOfMonth(date, options) {
12173 const _date = toDate(date, options?.in);
12174 _date.setDate(1);
12175 _date.setHours(0, 0, 0, 0);
12176 return _date;
12177 }
12178
12179 // node_modules/date-fns/endOfYear.js
12180 function endOfYear(date, options) {
12181 const _date = toDate(date, options?.in);
12182 const year = _date.getFullYear();
12183 _date.setFullYear(year + 1, 0, 0);
12184 _date.setHours(23, 59, 59, 999);
12185 return _date;
12186 }
12187
12188 // node_modules/date-fns/startOfYear.js
12189 function startOfYear(date, options) {
12190 const date_ = toDate(date, options?.in);
12191 date_.setFullYear(date_.getFullYear(), 0, 1);
12192 date_.setHours(0, 0, 0, 0);
12193 return date_;
12194 }
12195
12196 // node_modules/date-fns/eachYearOfInterval.js
12197 function eachYearOfInterval(interval, options) {
12198 const { start, end } = normalizeInterval(options?.in, interval);
12199 let reversed = +start > +end;
12200 const endTime = reversed ? +start : +end;
12201 const date = reversed ? end : start;
12202 date.setHours(0, 0, 0, 0);
12203 date.setMonth(0, 1);
12204 let step = options?.step ?? 1;
12205 if (!step) return [];
12206 if (step < 0) {
12207 step = -step;
12208 reversed = !reversed;
12209 }
12210 const dates = [];
12211 while (+date <= endTime) {
12212 dates.push(constructFrom(start, date));
12213 date.setFullYear(date.getFullYear() + step);
12214 }
12215 return reversed ? dates.reverse() : dates;
12216 }
12217
12218 // node_modules/date-fns/endOfWeek.js
12219 function endOfWeek(date, options) {
12220 const defaultOptions2 = getDefaultOptions();
12221 const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0;
12222 const _date = toDate(date, options?.in);
12223 const day = _date.getDay();
12224 const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);
12225 _date.setDate(_date.getDate() + diff);
12226 _date.setHours(23, 59, 59, 999);
12227 return _date;
12228 }
12229
12230 // node_modules/date-fns/endOfISOWeek.js
12231 function endOfISOWeek(date, options) {
12232 return endOfWeek(date, { ...options, weekStartsOn: 1 });
12233 }
12234
12235 // node_modules/date-fns/locale/en-US/_lib/formatDistance.js
12236 var formatDistanceLocale = {
12237 lessThanXSeconds: {
12238 one: "less than a second",
12239 other: "less than {{count}} seconds"
12240 },
12241 xSeconds: {
12242 one: "1 second",
12243 other: "{{count}} seconds"
12244 },
12245 halfAMinute: "half a minute",
12246 lessThanXMinutes: {
12247 one: "less than a minute",
12248 other: "less than {{count}} minutes"
12249 },
12250 xMinutes: {
12251 one: "1 minute",
12252 other: "{{count}} minutes"
12253 },
12254 aboutXHours: {
12255 one: "about 1 hour",
12256 other: "about {{count}} hours"
12257 },
12258 xHours: {
12259 one: "1 hour",
12260 other: "{{count}} hours"
12261 },
12262 xDays: {
12263 one: "1 day",
12264 other: "{{count}} days"
12265 },
12266 aboutXWeeks: {
12267 one: "about 1 week",
12268 other: "about {{count}} weeks"
12269 },
12270 xWeeks: {
12271 one: "1 week",
12272 other: "{{count}} weeks"
12273 },
12274 aboutXMonths: {
12275 one: "about 1 month",
12276 other: "about {{count}} months"
12277 },
12278 xMonths: {
12279 one: "1 month",
12280 other: "{{count}} months"
12281 },
12282 aboutXYears: {
12283 one: "about 1 year",
12284 other: "about {{count}} years"
12285 },
12286 xYears: {
12287 one: "1 year",
12288 other: "{{count}} years"
12289 },
12290 overXYears: {
12291 one: "over 1 year",
12292 other: "over {{count}} years"
12293 },
12294 almostXYears: {
12295 one: "almost 1 year",
12296 other: "almost {{count}} years"
12297 }
12298 };
12299 var formatDistance = (token, count, options) => {
12300 let result;
12301 const tokenValue = formatDistanceLocale[token];
12302 if (typeof tokenValue === "string") {
12303 result = tokenValue;
12304 } else if (count === 1) {
12305 result = tokenValue.one;
12306 } else {
12307 result = tokenValue.other.replace("{{count}}", count.toString());
12308 }
12309 if (options?.addSuffix) {
12310 if (options.comparison && options.comparison > 0) {
12311 return "in " + result;
12312 } else {
12313 return result + " ago";
12314 }
12315 }
12316 return result;
12317 };
12318
12319 // node_modules/date-fns/locale/_lib/buildFormatLongFn.js
12320 function buildFormatLongFn(args) {
12321 return (options = {}) => {
12322 const width = options.width ? String(options.width) : args.defaultWidth;
12323 const format7 = args.formats[width] || args.formats[args.defaultWidth];
12324 return format7;
12325 };
12326 }
12327
12328 // node_modules/date-fns/locale/en-US/_lib/formatLong.js
12329 var dateFormats = {
12330 full: "EEEE, MMMM do, y",
12331 long: "MMMM do, y",
12332 medium: "MMM d, y",
12333 short: "MM/dd/yyyy"
12334 };
12335 var timeFormats = {
12336 full: "h:mm:ss a zzzz",
12337 long: "h:mm:ss a z",
12338 medium: "h:mm:ss a",
12339 short: "h:mm a"
12340 };
12341 var dateTimeFormats = {
12342 full: "{{date}} 'at' {{time}}",
12343 long: "{{date}} 'at' {{time}}",
12344 medium: "{{date}}, {{time}}",
12345 short: "{{date}}, {{time}}"
12346 };
12347 var formatLong = {
12348 date: buildFormatLongFn({
12349 formats: dateFormats,
12350 defaultWidth: "full"
12351 }),
12352 time: buildFormatLongFn({
12353 formats: timeFormats,
12354 defaultWidth: "full"
12355 }),
12356 dateTime: buildFormatLongFn({
12357 formats: dateTimeFormats,
12358 defaultWidth: "full"
12359 })
12360 };
12361
12362 // node_modules/date-fns/locale/en-US/_lib/formatRelative.js
12363 var formatRelativeLocale = {
12364 lastWeek: "'last' eeee 'at' p",
12365 yesterday: "'yesterday at' p",
12366 today: "'today at' p",
12367 tomorrow: "'tomorrow at' p",
12368 nextWeek: "eeee 'at' p",
12369 other: "P"
12370 };
12371 var formatRelative = (token, _date, _baseDate, _options) => formatRelativeLocale[token];
12372
12373 // node_modules/date-fns/locale/_lib/buildLocalizeFn.js
12374 function buildLocalizeFn(args) {
12375 return (value, options) => {
12376 const context = options?.context ? String(options.context) : "standalone";
12377 let valuesArray;
12378 if (context === "formatting" && args.formattingValues) {
12379 const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;
12380 const width = options?.width ? String(options.width) : defaultWidth;
12381 valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];
12382 } else {
12383 const defaultWidth = args.defaultWidth;
12384 const width = options?.width ? String(options.width) : args.defaultWidth;
12385 valuesArray = args.values[width] || args.values[defaultWidth];
12386 }
12387 const index2 = args.argumentCallback ? args.argumentCallback(value) : value;
12388 return valuesArray[index2];
12389 };
12390 }
12391
12392 // node_modules/date-fns/locale/en-US/_lib/localize.js
12393 var eraValues = {
12394 narrow: ["B", "A"],
12395 abbreviated: ["BC", "AD"],
12396 wide: ["Before Christ", "Anno Domini"]
12397 };
12398 var quarterValues = {
12399 narrow: ["1", "2", "3", "4"],
12400 abbreviated: ["Q1", "Q2", "Q3", "Q4"],
12401 wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"]
12402 };
12403 var monthValues = {
12404 narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"],
12405 abbreviated: [
12406 "Jan",
12407 "Feb",
12408 "Mar",
12409 "Apr",
12410 "May",
12411 "Jun",
12412 "Jul",
12413 "Aug",
12414 "Sep",
12415 "Oct",
12416 "Nov",
12417 "Dec"
12418 ],
12419 wide: [
12420 "January",
12421 "February",
12422 "March",
12423 "April",
12424 "May",
12425 "June",
12426 "July",
12427 "August",
12428 "September",
12429 "October",
12430 "November",
12431 "December"
12432 ]
12433 };
12434 var dayValues = {
12435 narrow: ["S", "M", "T", "W", "T", "F", "S"],
12436 short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
12437 abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
12438 wide: [
12439 "Sunday",
12440 "Monday",
12441 "Tuesday",
12442 "Wednesday",
12443 "Thursday",
12444 "Friday",
12445 "Saturday"
12446 ]
12447 };
12448 var dayPeriodValues = {
12449 narrow: {
12450 am: "a",
12451 pm: "p",
12452 midnight: "mi",
12453 noon: "n",
12454 morning: "morning",
12455 afternoon: "afternoon",
12456 evening: "evening",
12457 night: "night"
12458 },
12459 abbreviated: {
12460 am: "AM",
12461 pm: "PM",
12462 midnight: "midnight",
12463 noon: "noon",
12464 morning: "morning",
12465 afternoon: "afternoon",
12466 evening: "evening",
12467 night: "night"
12468 },
12469 wide: {
12470 am: "a.m.",
12471 pm: "p.m.",
12472 midnight: "midnight",
12473 noon: "noon",
12474 morning: "morning",
12475 afternoon: "afternoon",
12476 evening: "evening",
12477 night: "night"
12478 }
12479 };
12480 var formattingDayPeriodValues = {
12481 narrow: {
12482 am: "a",
12483 pm: "p",
12484 midnight: "mi",
12485 noon: "n",
12486 morning: "in the morning",
12487 afternoon: "in the afternoon",
12488 evening: "in the evening",
12489 night: "at night"
12490 },
12491 abbreviated: {
12492 am: "AM",
12493 pm: "PM",
12494 midnight: "midnight",
12495 noon: "noon",
12496 morning: "in the morning",
12497 afternoon: "in the afternoon",
12498 evening: "in the evening",
12499 night: "at night"
12500 },
12501 wide: {
12502 am: "a.m.",
12503 pm: "p.m.",
12504 midnight: "midnight",
12505 noon: "noon",
12506 morning: "in the morning",
12507 afternoon: "in the afternoon",
12508 evening: "in the evening",
12509 night: "at night"
12510 }
12511 };
12512 var ordinalNumber = (dirtyNumber, _options) => {
12513 const number = Number(dirtyNumber);
12514 const rem100 = number % 100;
12515 if (rem100 > 20 || rem100 < 10) {
12516 switch (rem100 % 10) {
12517 case 1:
12518 return number + "st";
12519 case 2:
12520 return number + "nd";
12521 case 3:
12522 return number + "rd";
12523 }
12524 }
12525 return number + "th";
12526 };
12527 var localize = {
12528 ordinalNumber,
12529 era: buildLocalizeFn({
12530 values: eraValues,
12531 defaultWidth: "wide"
12532 }),
12533 quarter: buildLocalizeFn({
12534 values: quarterValues,
12535 defaultWidth: "wide",
12536 argumentCallback: (quarter) => quarter - 1
12537 }),
12538 month: buildLocalizeFn({
12539 values: monthValues,
12540 defaultWidth: "wide"
12541 }),
12542 day: buildLocalizeFn({
12543 values: dayValues,
12544 defaultWidth: "wide"
12545 }),
12546 dayPeriod: buildLocalizeFn({
12547 values: dayPeriodValues,
12548 defaultWidth: "wide",
12549 formattingValues: formattingDayPeriodValues,
12550 defaultFormattingWidth: "wide"
12551 })
12552 };
12553
12554 // node_modules/date-fns/locale/_lib/buildMatchFn.js
12555 function buildMatchFn(args) {
12556 return (string, options = {}) => {
12557 const width = options.width;
12558 const matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];
12559 const matchResult = string.match(matchPattern);
12560 if (!matchResult) {
12561 return null;
12562 }
12563 const matchedString = matchResult[0];
12564 const parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];
12565 const key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString)) : (
12566 // [TODO] -- I challenge you to fix the type
12567 findKey(parsePatterns, (pattern) => pattern.test(matchedString))
12568 );
12569 let value;
12570 value = args.valueCallback ? args.valueCallback(key) : key;
12571 value = options.valueCallback ? (
12572 // [TODO] -- I challenge you to fix the type
12573 options.valueCallback(value)
12574 ) : value;
12575 const rest = string.slice(matchedString.length);
12576 return { value, rest };
12577 };
12578 }
12579 function findKey(object, predicate) {
12580 for (const key in object) {
12581 if (Object.prototype.hasOwnProperty.call(object, key) && predicate(object[key])) {
12582 return key;
12583 }
12584 }
12585 return void 0;
12586 }
12587 function findIndex(array, predicate) {
12588 for (let key = 0; key < array.length; key++) {
12589 if (predicate(array[key])) {
12590 return key;
12591 }
12592 }
12593 return void 0;
12594 }
12595
12596 // node_modules/date-fns/locale/_lib/buildMatchPatternFn.js
12597 function buildMatchPatternFn(args) {
12598 return (string, options = {}) => {
12599 const matchResult = string.match(args.matchPattern);
12600 if (!matchResult) return null;
12601 const matchedString = matchResult[0];
12602 const parseResult = string.match(args.parsePattern);
12603 if (!parseResult) return null;
12604 let value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];
12605 value = options.valueCallback ? options.valueCallback(value) : value;
12606 const rest = string.slice(matchedString.length);
12607 return { value, rest };
12608 };
12609 }
12610
12611 // node_modules/date-fns/locale/en-US/_lib/match.js
12612 var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i;
12613 var parseOrdinalNumberPattern = /\d+/i;
12614 var matchEraPatterns = {
12615 narrow: /^(b|a)/i,
12616 abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,
12617 wide: /^(before christ|before common era|anno domini|common era)/i
12618 };
12619 var parseEraPatterns = {
12620 any: [/^b/i, /^(a|c)/i]
12621 };
12622 var matchQuarterPatterns = {
12623 narrow: /^[1234]/i,
12624 abbreviated: /^q[1234]/i,
12625 wide: /^[1234](th|st|nd|rd)? quarter/i
12626 };
12627 var parseQuarterPatterns = {
12628 any: [/1/i, /2/i, /3/i, /4/i]
12629 };
12630 var matchMonthPatterns = {
12631 narrow: /^[jfmasond]/i,
12632 abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,
12633 wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i
12634 };
12635 var parseMonthPatterns = {
12636 narrow: [
12637 /^j/i,
12638 /^f/i,
12639 /^m/i,
12640 /^a/i,
12641 /^m/i,
12642 /^j/i,
12643 /^j/i,
12644 /^a/i,
12645 /^s/i,
12646 /^o/i,
12647 /^n/i,
12648 /^d/i
12649 ],
12650 any: [
12651 /^ja/i,
12652 /^f/i,
12653 /^mar/i,
12654 /^ap/i,
12655 /^may/i,
12656 /^jun/i,
12657 /^jul/i,
12658 /^au/i,
12659 /^s/i,
12660 /^o/i,
12661 /^n/i,
12662 /^d/i
12663 ]
12664 };
12665 var matchDayPatterns = {
12666 narrow: /^[smtwf]/i,
12667 short: /^(su|mo|tu|we|th|fr|sa)/i,
12668 abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,
12669 wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i
12670 };
12671 var parseDayPatterns = {
12672 narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],
12673 any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]
12674 };
12675 var matchDayPeriodPatterns = {
12676 narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,
12677 any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i
12678 };
12679 var parseDayPeriodPatterns = {
12680 any: {
12681 am: /^a/i,
12682 pm: /^p/i,
12683 midnight: /^mi/i,
12684 noon: /^no/i,
12685 morning: /morning/i,
12686 afternoon: /afternoon/i,
12687 evening: /evening/i,
12688 night: /night/i
12689 }
12690 };
12691 var match = {
12692 ordinalNumber: buildMatchPatternFn({
12693 matchPattern: matchOrdinalNumberPattern,
12694 parsePattern: parseOrdinalNumberPattern,
12695 valueCallback: (value) => parseInt(value, 10)
12696 }),
12697 era: buildMatchFn({
12698 matchPatterns: matchEraPatterns,
12699 defaultMatchWidth: "wide",
12700 parsePatterns: parseEraPatterns,
12701 defaultParseWidth: "any"
12702 }),
12703 quarter: buildMatchFn({
12704 matchPatterns: matchQuarterPatterns,
12705 defaultMatchWidth: "wide",
12706 parsePatterns: parseQuarterPatterns,
12707 defaultParseWidth: "any",
12708 valueCallback: (index2) => index2 + 1
12709 }),
12710 month: buildMatchFn({
12711 matchPatterns: matchMonthPatterns,
12712 defaultMatchWidth: "wide",
12713 parsePatterns: parseMonthPatterns,
12714 defaultParseWidth: "any"
12715 }),
12716 day: buildMatchFn({
12717 matchPatterns: matchDayPatterns,
12718 defaultMatchWidth: "wide",
12719 parsePatterns: parseDayPatterns,
12720 defaultParseWidth: "any"
12721 }),
12722 dayPeriod: buildMatchFn({
12723 matchPatterns: matchDayPeriodPatterns,
12724 defaultMatchWidth: "any",
12725 parsePatterns: parseDayPeriodPatterns,
12726 defaultParseWidth: "any"
12727 })
12728 };
12729
12730 // node_modules/date-fns/locale/en-US.js
12731 var enUS = {
12732 code: "en-US",
12733 formatDistance,
12734 formatLong,
12735 formatRelative,
12736 localize,
12737 match,
12738 options: {
12739 weekStartsOn: 0,
12740 firstWeekContainsDate: 1
12741 }
12742 };
12743
12744 // node_modules/date-fns/getDayOfYear.js
12745 function getDayOfYear(date, options) {
12746 const _date = toDate(date, options?.in);
12747 const diff = differenceInCalendarDays(_date, startOfYear(_date));
12748 const dayOfYear = diff + 1;
12749 return dayOfYear;
12750 }
12751
12752 // node_modules/date-fns/getISOWeek.js
12753 function getISOWeek(date, options) {
12754 const _date = toDate(date, options?.in);
12755 const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);
12756 return Math.round(diff / millisecondsInWeek) + 1;
12757 }
12758
12759 // node_modules/date-fns/getWeekYear.js
12760 function getWeekYear(date, options) {
12761 const _date = toDate(date, options?.in);
12762 const year = _date.getFullYear();
12763 const defaultOptions2 = getDefaultOptions();
12764 const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1;
12765 const firstWeekOfNextYear = constructFrom(options?.in || date, 0);
12766 firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);
12767 firstWeekOfNextYear.setHours(0, 0, 0, 0);
12768 const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);
12769 const firstWeekOfThisYear = constructFrom(options?.in || date, 0);
12770 firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);
12771 firstWeekOfThisYear.setHours(0, 0, 0, 0);
12772 const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);
12773 if (+_date >= +startOfNextYear) {
12774 return year + 1;
12775 } else if (+_date >= +startOfThisYear) {
12776 return year;
12777 } else {
12778 return year - 1;
12779 }
12780 }
12781
12782 // node_modules/date-fns/startOfWeekYear.js
12783 function startOfWeekYear(date, options) {
12784 const defaultOptions2 = getDefaultOptions();
12785 const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1;
12786 const year = getWeekYear(date, options);
12787 const firstWeek = constructFrom(options?.in || date, 0);
12788 firstWeek.setFullYear(year, 0, firstWeekContainsDate);
12789 firstWeek.setHours(0, 0, 0, 0);
12790 const _date = startOfWeek(firstWeek, options);
12791 return _date;
12792 }
12793
12794 // node_modules/date-fns/getWeek.js
12795 function getWeek(date, options) {
12796 const _date = toDate(date, options?.in);
12797 const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);
12798 return Math.round(diff / millisecondsInWeek) + 1;
12799 }
12800
12801 // node_modules/date-fns/_lib/addLeadingZeros.js
12802 function addLeadingZeros(number, targetLength) {
12803 const sign = number < 0 ? "-" : "";
12804 const output = Math.abs(number).toString().padStart(targetLength, "0");
12805 return sign + output;
12806 }
12807
12808 // node_modules/date-fns/_lib/format/lightFormatters.js
12809 var lightFormatters = {
12810 // Year
12811 y(date, token) {
12812 const signedYear = date.getFullYear();
12813 const year = signedYear > 0 ? signedYear : 1 - signedYear;
12814 return addLeadingZeros(token === "yy" ? year % 100 : year, token.length);
12815 },
12816 // Month
12817 M(date, token) {
12818 const month = date.getMonth();
12819 return token === "M" ? String(month + 1) : addLeadingZeros(month + 1, 2);
12820 },
12821 // Day of the month
12822 d(date, token) {
12823 return addLeadingZeros(date.getDate(), token.length);
12824 },
12825 // AM or PM
12826 a(date, token) {
12827 const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? "pm" : "am";
12828 switch (token) {
12829 case "a":
12830 case "aa":
12831 return dayPeriodEnumValue.toUpperCase();
12832 case "aaa":
12833 return dayPeriodEnumValue;
12834 case "aaaaa":
12835 return dayPeriodEnumValue[0];
12836 case "aaaa":
12837 default:
12838 return dayPeriodEnumValue === "am" ? "a.m." : "p.m.";
12839 }
12840 },
12841 // Hour [1-12]
12842 h(date, token) {
12843 return addLeadingZeros(date.getHours() % 12 || 12, token.length);
12844 },
12845 // Hour [0-23]
12846 H(date, token) {
12847 return addLeadingZeros(date.getHours(), token.length);
12848 },
12849 // Minute
12850 m(date, token) {
12851 return addLeadingZeros(date.getMinutes(), token.length);
12852 },
12853 // Second
12854 s(date, token) {
12855 return addLeadingZeros(date.getSeconds(), token.length);
12856 },
12857 // Fraction of second
12858 S(date, token) {
12859 const numberOfDigits = token.length;
12860 const milliseconds = date.getMilliseconds();
12861 const fractionalSeconds = Math.trunc(
12862 milliseconds * Math.pow(10, numberOfDigits - 3)
12863 );
12864 return addLeadingZeros(fractionalSeconds, token.length);
12865 }
12866 };
12867
12868 // node_modules/date-fns/_lib/format/formatters.js
12869 var dayPeriodEnum = {
12870 am: "am",
12871 pm: "pm",
12872 midnight: "midnight",
12873 noon: "noon",
12874 morning: "morning",
12875 afternoon: "afternoon",
12876 evening: "evening",
12877 night: "night"
12878 };
12879 var formatters = {
12880 // Era
12881 G: function(date, token, localize2) {
12882 const era = date.getFullYear() > 0 ? 1 : 0;
12883 switch (token) {
12884 // AD, BC
12885 case "G":
12886 case "GG":
12887 case "GGG":
12888 return localize2.era(era, { width: "abbreviated" });
12889 // A, B
12890 case "GGGGG":
12891 return localize2.era(era, { width: "narrow" });
12892 // Anno Domini, Before Christ
12893 case "GGGG":
12894 default:
12895 return localize2.era(era, { width: "wide" });
12896 }
12897 },
12898 // Year
12899 y: function(date, token, localize2) {
12900 if (token === "yo") {
12901 const signedYear = date.getFullYear();
12902 const year = signedYear > 0 ? signedYear : 1 - signedYear;
12903 return localize2.ordinalNumber(year, { unit: "year" });
12904 }
12905 return lightFormatters.y(date, token);
12906 },
12907 // Local week-numbering year
12908 Y: function(date, token, localize2, options) {
12909 const signedWeekYear = getWeekYear(date, options);
12910 const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;
12911 if (token === "YY") {
12912 const twoDigitYear = weekYear % 100;
12913 return addLeadingZeros(twoDigitYear, 2);
12914 }
12915 if (token === "Yo") {
12916 return localize2.ordinalNumber(weekYear, { unit: "year" });
12917 }
12918 return addLeadingZeros(weekYear, token.length);
12919 },
12920 // ISO week-numbering year
12921 R: function(date, token) {
12922 const isoWeekYear = getISOWeekYear(date);
12923 return addLeadingZeros(isoWeekYear, token.length);
12924 },
12925 // Extended year. This is a single number designating the year of this calendar system.
12926 // The main difference between `y` and `u` localizers are B.C. years:
12927 // | Year | `y` | `u` |
12928 // |------|-----|-----|
12929 // | AC 1 | 1 | 1 |
12930 // | BC 1 | 1 | 0 |
12931 // | BC 2 | 2 | -1 |
12932 // Also `yy` always returns the last two digits of a year,
12933 // while `uu` pads single digit years to 2 characters and returns other years unchanged.
12934 u: function(date, token) {
12935 const year = date.getFullYear();
12936 return addLeadingZeros(year, token.length);
12937 },
12938 // Quarter
12939 Q: function(date, token, localize2) {
12940 const quarter = Math.ceil((date.getMonth() + 1) / 3);
12941 switch (token) {
12942 // 1, 2, 3, 4
12943 case "Q":
12944 return String(quarter);
12945 // 01, 02, 03, 04
12946 case "QQ":
12947 return addLeadingZeros(quarter, 2);
12948 // 1st, 2nd, 3rd, 4th
12949 case "Qo":
12950 return localize2.ordinalNumber(quarter, { unit: "quarter" });
12951 // Q1, Q2, Q3, Q4
12952 case "QQQ":
12953 return localize2.quarter(quarter, {
12954 width: "abbreviated",
12955 context: "formatting"
12956 });
12957 // 1, 2, 3, 4 (narrow quarter; could be not numerical)
12958 case "QQQQQ":
12959 return localize2.quarter(quarter, {
12960 width: "narrow",
12961 context: "formatting"
12962 });
12963 // 1st quarter, 2nd quarter, ...
12964 case "QQQQ":
12965 default:
12966 return localize2.quarter(quarter, {
12967 width: "wide",
12968 context: "formatting"
12969 });
12970 }
12971 },
12972 // Stand-alone quarter
12973 q: function(date, token, localize2) {
12974 const quarter = Math.ceil((date.getMonth() + 1) / 3);
12975 switch (token) {
12976 // 1, 2, 3, 4
12977 case "q":
12978 return String(quarter);
12979 // 01, 02, 03, 04
12980 case "qq":
12981 return addLeadingZeros(quarter, 2);
12982 // 1st, 2nd, 3rd, 4th
12983 case "qo":
12984 return localize2.ordinalNumber(quarter, { unit: "quarter" });
12985 // Q1, Q2, Q3, Q4
12986 case "qqq":
12987 return localize2.quarter(quarter, {
12988 width: "abbreviated",
12989 context: "standalone"
12990 });
12991 // 1, 2, 3, 4 (narrow quarter; could be not numerical)
12992 case "qqqqq":
12993 return localize2.quarter(quarter, {
12994 width: "narrow",
12995 context: "standalone"
12996 });
12997 // 1st quarter, 2nd quarter, ...
12998 case "qqqq":
12999 default:
13000 return localize2.quarter(quarter, {
13001 width: "wide",
13002 context: "standalone"
13003 });
13004 }
13005 },
13006 // Month
13007 M: function(date, token, localize2) {
13008 const month = date.getMonth();
13009 switch (token) {
13010 case "M":
13011 case "MM":
13012 return lightFormatters.M(date, token);
13013 // 1st, 2nd, ..., 12th
13014 case "Mo":
13015 return localize2.ordinalNumber(month + 1, { unit: "month" });
13016 // Jan, Feb, ..., Dec
13017 case "MMM":
13018 return localize2.month(month, {
13019 width: "abbreviated",
13020 context: "formatting"
13021 });
13022 // J, F, ..., D
13023 case "MMMMM":
13024 return localize2.month(month, {
13025 width: "narrow",
13026 context: "formatting"
13027 });
13028 // January, February, ..., December
13029 case "MMMM":
13030 default:
13031 return localize2.month(month, { width: "wide", context: "formatting" });
13032 }
13033 },
13034 // Stand-alone month
13035 L: function(date, token, localize2) {
13036 const month = date.getMonth();
13037 switch (token) {
13038 // 1, 2, ..., 12
13039 case "L":
13040 return String(month + 1);
13041 // 01, 02, ..., 12
13042 case "LL":
13043 return addLeadingZeros(month + 1, 2);
13044 // 1st, 2nd, ..., 12th
13045 case "Lo":
13046 return localize2.ordinalNumber(month + 1, { unit: "month" });
13047 // Jan, Feb, ..., Dec
13048 case "LLL":
13049 return localize2.month(month, {
13050 width: "abbreviated",
13051 context: "standalone"
13052 });
13053 // J, F, ..., D
13054 case "LLLLL":
13055 return localize2.month(month, {
13056 width: "narrow",
13057 context: "standalone"
13058 });
13059 // January, February, ..., December
13060 case "LLLL":
13061 default:
13062 return localize2.month(month, { width: "wide", context: "standalone" });
13063 }
13064 },
13065 // Local week of year
13066 w: function(date, token, localize2, options) {
13067 const week = getWeek(date, options);
13068 if (token === "wo") {
13069 return localize2.ordinalNumber(week, { unit: "week" });
13070 }
13071 return addLeadingZeros(week, token.length);
13072 },
13073 // ISO week of year
13074 I: function(date, token, localize2) {
13075 const isoWeek = getISOWeek(date);
13076 if (token === "Io") {
13077 return localize2.ordinalNumber(isoWeek, { unit: "week" });
13078 }
13079 return addLeadingZeros(isoWeek, token.length);
13080 },
13081 // Day of the month
13082 d: function(date, token, localize2) {
13083 if (token === "do") {
13084 return localize2.ordinalNumber(date.getDate(), { unit: "date" });
13085 }
13086 return lightFormatters.d(date, token);
13087 },
13088 // Day of year
13089 D: function(date, token, localize2) {
13090 const dayOfYear = getDayOfYear(date);
13091 if (token === "Do") {
13092 return localize2.ordinalNumber(dayOfYear, { unit: "dayOfYear" });
13093 }
13094 return addLeadingZeros(dayOfYear, token.length);
13095 },
13096 // Day of week
13097 E: function(date, token, localize2) {
13098 const dayOfWeek = date.getDay();
13099 switch (token) {
13100 // Tue
13101 case "E":
13102 case "EE":
13103 case "EEE":
13104 return localize2.day(dayOfWeek, {
13105 width: "abbreviated",
13106 context: "formatting"
13107 });
13108 // T
13109 case "EEEEE":
13110 return localize2.day(dayOfWeek, {
13111 width: "narrow",
13112 context: "formatting"
13113 });
13114 // Tu
13115 case "EEEEEE":
13116 return localize2.day(dayOfWeek, {
13117 width: "short",
13118 context: "formatting"
13119 });
13120 // Tuesday
13121 case "EEEE":
13122 default:
13123 return localize2.day(dayOfWeek, {
13124 width: "wide",
13125 context: "formatting"
13126 });
13127 }
13128 },
13129 // Local day of week
13130 e: function(date, token, localize2, options) {
13131 const dayOfWeek = date.getDay();
13132 const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;
13133 switch (token) {
13134 // Numerical value (Nth day of week with current locale or weekStartsOn)
13135 case "e":
13136 return String(localDayOfWeek);
13137 // Padded numerical value
13138 case "ee":
13139 return addLeadingZeros(localDayOfWeek, 2);
13140 // 1st, 2nd, ..., 7th
13141 case "eo":
13142 return localize2.ordinalNumber(localDayOfWeek, { unit: "day" });
13143 case "eee":
13144 return localize2.day(dayOfWeek, {
13145 width: "abbreviated",
13146 context: "formatting"
13147 });
13148 // T
13149 case "eeeee":
13150 return localize2.day(dayOfWeek, {
13151 width: "narrow",
13152 context: "formatting"
13153 });
13154 // Tu
13155 case "eeeeee":
13156 return localize2.day(dayOfWeek, {
13157 width: "short",
13158 context: "formatting"
13159 });
13160 // Tuesday
13161 case "eeee":
13162 default:
13163 return localize2.day(dayOfWeek, {
13164 width: "wide",
13165 context: "formatting"
13166 });
13167 }
13168 },
13169 // Stand-alone local day of week
13170 c: function(date, token, localize2, options) {
13171 const dayOfWeek = date.getDay();
13172 const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;
13173 switch (token) {
13174 // Numerical value (same as in `e`)
13175 case "c":
13176 return String(localDayOfWeek);
13177 // Padded numerical value
13178 case "cc":
13179 return addLeadingZeros(localDayOfWeek, token.length);
13180 // 1st, 2nd, ..., 7th
13181 case "co":
13182 return localize2.ordinalNumber(localDayOfWeek, { unit: "day" });
13183 case "ccc":
13184 return localize2.day(dayOfWeek, {
13185 width: "abbreviated",
13186 context: "standalone"
13187 });
13188 // T
13189 case "ccccc":
13190 return localize2.day(dayOfWeek, {
13191 width: "narrow",
13192 context: "standalone"
13193 });
13194 // Tu
13195 case "cccccc":
13196 return localize2.day(dayOfWeek, {
13197 width: "short",
13198 context: "standalone"
13199 });
13200 // Tuesday
13201 case "cccc":
13202 default:
13203 return localize2.day(dayOfWeek, {
13204 width: "wide",
13205 context: "standalone"
13206 });
13207 }
13208 },
13209 // ISO day of week
13210 i: function(date, token, localize2) {
13211 const dayOfWeek = date.getDay();
13212 const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;
13213 switch (token) {
13214 // 2
13215 case "i":
13216 return String(isoDayOfWeek);
13217 // 02
13218 case "ii":
13219 return addLeadingZeros(isoDayOfWeek, token.length);
13220 // 2nd
13221 case "io":
13222 return localize2.ordinalNumber(isoDayOfWeek, { unit: "day" });
13223 // Tue
13224 case "iii":
13225 return localize2.day(dayOfWeek, {
13226 width: "abbreviated",
13227 context: "formatting"
13228 });
13229 // T
13230 case "iiiii":
13231 return localize2.day(dayOfWeek, {
13232 width: "narrow",
13233 context: "formatting"
13234 });
13235 // Tu
13236 case "iiiiii":
13237 return localize2.day(dayOfWeek, {
13238 width: "short",
13239 context: "formatting"
13240 });
13241 // Tuesday
13242 case "iiii":
13243 default:
13244 return localize2.day(dayOfWeek, {
13245 width: "wide",
13246 context: "formatting"
13247 });
13248 }
13249 },
13250 // AM or PM
13251 a: function(date, token, localize2) {
13252 const hours = date.getHours();
13253 const dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am";
13254 switch (token) {
13255 case "a":
13256 case "aa":
13257 return localize2.dayPeriod(dayPeriodEnumValue, {
13258 width: "abbreviated",
13259 context: "formatting"
13260 });
13261 case "aaa":
13262 return localize2.dayPeriod(dayPeriodEnumValue, {
13263 width: "abbreviated",
13264 context: "formatting"
13265 }).toLowerCase();
13266 case "aaaaa":
13267 return localize2.dayPeriod(dayPeriodEnumValue, {
13268 width: "narrow",
13269 context: "formatting"
13270 });
13271 case "aaaa":
13272 default:
13273 return localize2.dayPeriod(dayPeriodEnumValue, {
13274 width: "wide",
13275 context: "formatting"
13276 });
13277 }
13278 },
13279 // AM, PM, midnight, noon
13280 b: function(date, token, localize2) {
13281 const hours = date.getHours();
13282 let dayPeriodEnumValue;
13283 if (hours === 12) {
13284 dayPeriodEnumValue = dayPeriodEnum.noon;
13285 } else if (hours === 0) {
13286 dayPeriodEnumValue = dayPeriodEnum.midnight;
13287 } else {
13288 dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am";
13289 }
13290 switch (token) {
13291 case "b":
13292 case "bb":
13293 return localize2.dayPeriod(dayPeriodEnumValue, {
13294 width: "abbreviated",
13295 context: "formatting"
13296 });
13297 case "bbb":
13298 return localize2.dayPeriod(dayPeriodEnumValue, {
13299 width: "abbreviated",
13300 context: "formatting"
13301 }).toLowerCase();
13302 case "bbbbb":
13303 return localize2.dayPeriod(dayPeriodEnumValue, {
13304 width: "narrow",
13305 context: "formatting"
13306 });
13307 case "bbbb":
13308 default:
13309 return localize2.dayPeriod(dayPeriodEnumValue, {
13310 width: "wide",
13311 context: "formatting"
13312 });
13313 }
13314 },
13315 // in the morning, in the afternoon, in the evening, at night
13316 B: function(date, token, localize2) {
13317 const hours = date.getHours();
13318 let dayPeriodEnumValue;
13319 if (hours >= 17) {
13320 dayPeriodEnumValue = dayPeriodEnum.evening;
13321 } else if (hours >= 12) {
13322 dayPeriodEnumValue = dayPeriodEnum.afternoon;
13323 } else if (hours >= 4) {
13324 dayPeriodEnumValue = dayPeriodEnum.morning;
13325 } else {
13326 dayPeriodEnumValue = dayPeriodEnum.night;
13327 }
13328 switch (token) {
13329 case "B":
13330 case "BB":
13331 case "BBB":
13332 return localize2.dayPeriod(dayPeriodEnumValue, {
13333 width: "abbreviated",
13334 context: "formatting"
13335 });
13336 case "BBBBB":
13337 return localize2.dayPeriod(dayPeriodEnumValue, {
13338 width: "narrow",
13339 context: "formatting"
13340 });
13341 case "BBBB":
13342 default:
13343 return localize2.dayPeriod(dayPeriodEnumValue, {
13344 width: "wide",
13345 context: "formatting"
13346 });
13347 }
13348 },
13349 // Hour [1-12]
13350 h: function(date, token, localize2) {
13351 if (token === "ho") {
13352 let hours = date.getHours() % 12;
13353 if (hours === 0) hours = 12;
13354 return localize2.ordinalNumber(hours, { unit: "hour" });
13355 }
13356 return lightFormatters.h(date, token);
13357 },
13358 // Hour [0-23]
13359 H: function(date, token, localize2) {
13360 if (token === "Ho") {
13361 return localize2.ordinalNumber(date.getHours(), { unit: "hour" });
13362 }
13363 return lightFormatters.H(date, token);
13364 },
13365 // Hour [0-11]
13366 K: function(date, token, localize2) {
13367 const hours = date.getHours() % 12;
13368 if (token === "Ko") {
13369 return localize2.ordinalNumber(hours, { unit: "hour" });
13370 }
13371 return addLeadingZeros(hours, token.length);
13372 },
13373 // Hour [1-24]
13374 k: function(date, token, localize2) {
13375 let hours = date.getHours();
13376 if (hours === 0) hours = 24;
13377 if (token === "ko") {
13378 return localize2.ordinalNumber(hours, { unit: "hour" });
13379 }
13380 return addLeadingZeros(hours, token.length);
13381 },
13382 // Minute
13383 m: function(date, token, localize2) {
13384 if (token === "mo") {
13385 return localize2.ordinalNumber(date.getMinutes(), { unit: "minute" });
13386 }
13387 return lightFormatters.m(date, token);
13388 },
13389 // Second
13390 s: function(date, token, localize2) {
13391 if (token === "so") {
13392 return localize2.ordinalNumber(date.getSeconds(), { unit: "second" });
13393 }
13394 return lightFormatters.s(date, token);
13395 },
13396 // Fraction of second
13397 S: function(date, token) {
13398 return lightFormatters.S(date, token);
13399 },
13400 // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)
13401 X: function(date, token, _localize) {
13402 const timezoneOffset = date.getTimezoneOffset();
13403 if (timezoneOffset === 0) {
13404 return "Z";
13405 }
13406 switch (token) {
13407 // Hours and optional minutes
13408 case "X":
13409 return formatTimezoneWithOptionalMinutes(timezoneOffset);
13410 // Hours, minutes and optional seconds without `:` delimiter
13411 // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
13412 // so this token always has the same output as `XX`
13413 case "XXXX":
13414 case "XX":
13415 return formatTimezone(timezoneOffset);
13416 // Hours, minutes and optional seconds with `:` delimiter
13417 // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
13418 // so this token always has the same output as `XXX`
13419 case "XXXXX":
13420 case "XXX":
13421 // Hours and minutes with `:` delimiter
13422 default:
13423 return formatTimezone(timezoneOffset, ":");
13424 }
13425 },
13426 // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)
13427 x: function(date, token, _localize) {
13428 const timezoneOffset = date.getTimezoneOffset();
13429 switch (token) {
13430 // Hours and optional minutes
13431 case "x":
13432 return formatTimezoneWithOptionalMinutes(timezoneOffset);
13433 // Hours, minutes and optional seconds without `:` delimiter
13434 // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
13435 // so this token always has the same output as `xx`
13436 case "xxxx":
13437 case "xx":
13438 return formatTimezone(timezoneOffset);
13439 // Hours, minutes and optional seconds with `:` delimiter
13440 // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
13441 // so this token always has the same output as `xxx`
13442 case "xxxxx":
13443 case "xxx":
13444 // Hours and minutes with `:` delimiter
13445 default:
13446 return formatTimezone(timezoneOffset, ":");
13447 }
13448 },
13449 // Timezone (GMT)
13450 O: function(date, token, _localize) {
13451 const timezoneOffset = date.getTimezoneOffset();
13452 switch (token) {
13453 // Short
13454 case "O":
13455 case "OO":
13456 case "OOO":
13457 return "GMT" + formatTimezoneShort(timezoneOffset, ":");
13458 // Long
13459 case "OOOO":
13460 default:
13461 return "GMT" + formatTimezone(timezoneOffset, ":");
13462 }
13463 },
13464 // Timezone (specific non-location)
13465 z: function(date, token, _localize) {
13466 const timezoneOffset = date.getTimezoneOffset();
13467 switch (token) {
13468 // Short
13469 case "z":
13470 case "zz":
13471 case "zzz":
13472 return "GMT" + formatTimezoneShort(timezoneOffset, ":");
13473 // Long
13474 case "zzzz":
13475 default:
13476 return "GMT" + formatTimezone(timezoneOffset, ":");
13477 }
13478 },
13479 // Seconds timestamp
13480 t: function(date, token, _localize) {
13481 const timestamp = Math.trunc(+date / 1e3);
13482 return addLeadingZeros(timestamp, token.length);
13483 },
13484 // Milliseconds timestamp
13485 T: function(date, token, _localize) {
13486 return addLeadingZeros(+date, token.length);
13487 }
13488 };
13489 function formatTimezoneShort(offset4, delimiter = "") {
13490 const sign = offset4 > 0 ? "-" : "+";
13491 const absOffset = Math.abs(offset4);
13492 const hours = Math.trunc(absOffset / 60);
13493 const minutes = absOffset % 60;
13494 if (minutes === 0) {
13495 return sign + String(hours);
13496 }
13497 return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);
13498 }
13499 function formatTimezoneWithOptionalMinutes(offset4, delimiter) {
13500 if (offset4 % 60 === 0) {
13501 const sign = offset4 > 0 ? "-" : "+";
13502 return sign + addLeadingZeros(Math.abs(offset4) / 60, 2);
13503 }
13504 return formatTimezone(offset4, delimiter);
13505 }
13506 function formatTimezone(offset4, delimiter = "") {
13507 const sign = offset4 > 0 ? "-" : "+";
13508 const absOffset = Math.abs(offset4);
13509 const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);
13510 const minutes = addLeadingZeros(absOffset % 60, 2);
13511 return sign + hours + delimiter + minutes;
13512 }
13513
13514 // node_modules/date-fns/_lib/format/longFormatters.js
13515 var dateLongFormatter = (pattern, formatLong2) => {
13516 switch (pattern) {
13517 case "P":
13518 return formatLong2.date({ width: "short" });
13519 case "PP":
13520 return formatLong2.date({ width: "medium" });
13521 case "PPP":
13522 return formatLong2.date({ width: "long" });
13523 case "PPPP":
13524 default:
13525 return formatLong2.date({ width: "full" });
13526 }
13527 };
13528 var timeLongFormatter = (pattern, formatLong2) => {
13529 switch (pattern) {
13530 case "p":
13531 return formatLong2.time({ width: "short" });
13532 case "pp":
13533 return formatLong2.time({ width: "medium" });
13534 case "ppp":
13535 return formatLong2.time({ width: "long" });
13536 case "pppp":
13537 default:
13538 return formatLong2.time({ width: "full" });
13539 }
13540 };
13541 var dateTimeLongFormatter = (pattern, formatLong2) => {
13542 const matchResult = pattern.match(/(P+)(p+)?/) || [];
13543 const datePattern = matchResult[1];
13544 const timePattern = matchResult[2];
13545 if (!timePattern) {
13546 return dateLongFormatter(pattern, formatLong2);
13547 }
13548 let dateTimeFormat;
13549 switch (datePattern) {
13550 case "P":
13551 dateTimeFormat = formatLong2.dateTime({ width: "short" });
13552 break;
13553 case "PP":
13554 dateTimeFormat = formatLong2.dateTime({ width: "medium" });
13555 break;
13556 case "PPP":
13557 dateTimeFormat = formatLong2.dateTime({ width: "long" });
13558 break;
13559 case "PPPP":
13560 default:
13561 dateTimeFormat = formatLong2.dateTime({ width: "full" });
13562 break;
13563 }
13564 return dateTimeFormat.replace("{{date}}", dateLongFormatter(datePattern, formatLong2)).replace("{{time}}", timeLongFormatter(timePattern, formatLong2));
13565 };
13566 var longFormatters = {
13567 p: timeLongFormatter,
13568 P: dateTimeLongFormatter
13569 };
13570
13571 // node_modules/date-fns/_lib/protectedTokens.js
13572 var dayOfYearTokenRE = /^D+$/;
13573 var weekYearTokenRE = /^Y+$/;
13574 var throwTokens = ["D", "DD", "YY", "YYYY"];
13575 function isProtectedDayOfYearToken(token) {
13576 return dayOfYearTokenRE.test(token);
13577 }
13578 function isProtectedWeekYearToken(token) {
13579 return weekYearTokenRE.test(token);
13580 }
13581 function warnOrThrowProtectedError(token, format7, input) {
13582 const _message = message(token, format7, input);
13583 console.warn(_message);
13584 if (throwTokens.includes(token)) throw new RangeError(_message);
13585 }
13586 function message(token, format7, input) {
13587 const subject = token[0] === "Y" ? "years" : "days of the month";
13588 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`;
13589 }
13590
13591 // node_modules/date-fns/format.js
13592 var formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g;
13593 var longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;
13594 var escapedStringRegExp = /^'([^]*?)'?$/;
13595 var doubleQuoteRegExp = /''/g;
13596 var unescapedLatinCharacterRegExp = /[a-zA-Z]/;
13597 function format(date, formatStr, options) {
13598 const defaultOptions2 = getDefaultOptions();
13599 const locale = options?.locale ?? defaultOptions2.locale ?? enUS;
13600 const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1;
13601 const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0;
13602 const originalDate = toDate(date, options?.in);
13603 if (!isValid(originalDate)) {
13604 throw new RangeError("Invalid time value");
13605 }
13606 let parts = formatStr.match(longFormattingTokensRegExp).map((substring) => {
13607 const firstCharacter = substring[0];
13608 if (firstCharacter === "p" || firstCharacter === "P") {
13609 const longFormatter = longFormatters[firstCharacter];
13610 return longFormatter(substring, locale.formatLong);
13611 }
13612 return substring;
13613 }).join("").match(formattingTokensRegExp).map((substring) => {
13614 if (substring === "''") {
13615 return { isToken: false, value: "'" };
13616 }
13617 const firstCharacter = substring[0];
13618 if (firstCharacter === "'") {
13619 return { isToken: false, value: cleanEscapedString(substring) };
13620 }
13621 if (formatters[firstCharacter]) {
13622 return { isToken: true, value: substring };
13623 }
13624 if (firstCharacter.match(unescapedLatinCharacterRegExp)) {
13625 throw new RangeError(
13626 "Format string contains an unescaped latin alphabet character `" + firstCharacter + "`"
13627 );
13628 }
13629 return { isToken: false, value: substring };
13630 });
13631 if (locale.localize.preprocessor) {
13632 parts = locale.localize.preprocessor(originalDate, parts);
13633 }
13634 const formatterOptions = {
13635 firstWeekContainsDate,
13636 weekStartsOn,
13637 locale
13638 };
13639 return parts.map((part) => {
13640 if (!part.isToken) return part.value;
13641 const token = part.value;
13642 if (!options?.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token) || !options?.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) {
13643 warnOrThrowProtectedError(token, formatStr, String(date));
13644 }
13645 const formatter = formatters[token[0]];
13646 return formatter(originalDate, token, locale.localize, formatterOptions);
13647 }).join("");
13648 }
13649 function cleanEscapedString(input) {
13650 const matched = input.match(escapedStringRegExp);
13651 if (!matched) {
13652 return input;
13653 }
13654 return matched[1].replace(doubleQuoteRegExp, "'");
13655 }
13656
13657 // node_modules/date-fns/getDaysInMonth.js
13658 function getDaysInMonth(date, options) {
13659 const _date = toDate(date, options?.in);
13660 const year = _date.getFullYear();
13661 const monthIndex = _date.getMonth();
13662 const lastDayOfMonth = constructFrom(_date, 0);
13663 lastDayOfMonth.setFullYear(year, monthIndex + 1, 0);
13664 lastDayOfMonth.setHours(0, 0, 0, 0);
13665 return lastDayOfMonth.getDate();
13666 }
13667
13668 // node_modules/date-fns/getDefaultOptions.js
13669 function getDefaultOptions2() {
13670 return Object.assign({}, getDefaultOptions());
13671 }
13672
13673 // node_modules/date-fns/getISODay.js
13674 function getISODay(date, options) {
13675 const day = toDate(date, options?.in).getDay();
13676 return day === 0 ? 7 : day;
13677 }
13678
13679 // node_modules/date-fns/getMonth.js
13680 function getMonth(date, options) {
13681 return toDate(date, options?.in).getMonth();
13682 }
13683
13684 // node_modules/date-fns/getYear.js
13685 function getYear(date, options) {
13686 return toDate(date, options?.in).getFullYear();
13687 }
13688
13689 // node_modules/date-fns/isAfter.js
13690 function isAfter(date, dateToCompare) {
13691 return +toDate(date) > +toDate(dateToCompare);
13692 }
13693
13694 // node_modules/date-fns/isBefore.js
13695 function isBefore(date, dateToCompare) {
13696 return +toDate(date) < +toDate(dateToCompare);
13697 }
13698
13699 // node_modules/date-fns/transpose.js
13700 function transpose(date, constructor) {
13701 const date_ = isConstructor(constructor) ? new constructor(0) : constructFrom(constructor, 0);
13702 date_.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());
13703 date_.setHours(
13704 date.getHours(),
13705 date.getMinutes(),
13706 date.getSeconds(),
13707 date.getMilliseconds()
13708 );
13709 return date_;
13710 }
13711 function isConstructor(constructor) {
13712 return typeof constructor === "function" && constructor.prototype?.constructor === constructor;
13713 }
13714
13715 // node_modules/date-fns/parse/_lib/Setter.js
13716 var TIMEZONE_UNIT_PRIORITY = 10;
13717 var Setter = class {
13718 subPriority = 0;
13719 validate(_utcDate, _options) {
13720 return true;
13721 }
13722 };
13723 var ValueSetter = class extends Setter {
13724 constructor(value, validateValue, setValue, priority, subPriority) {
13725 super();
13726 this.value = value;
13727 this.validateValue = validateValue;
13728 this.setValue = setValue;
13729 this.priority = priority;
13730 if (subPriority) {
13731 this.subPriority = subPriority;
13732 }
13733 }
13734 validate(date, options) {
13735 return this.validateValue(date, this.value, options);
13736 }
13737 set(date, flags, options) {
13738 return this.setValue(date, flags, this.value, options);
13739 }
13740 };
13741 var DateTimezoneSetter = class extends Setter {
13742 priority = TIMEZONE_UNIT_PRIORITY;
13743 subPriority = -1;
13744 constructor(context, reference) {
13745 super();
13746 this.context = context || ((date) => constructFrom(reference, date));
13747 }
13748 set(date, flags) {
13749 if (flags.timestampIsSet) return date;
13750 return constructFrom(date, transpose(date, this.context));
13751 }
13752 };
13753
13754 // node_modules/date-fns/parse/_lib/Parser.js
13755 var Parser = class {
13756 run(dateString, token, match2, options) {
13757 const result = this.parse(dateString, token, match2, options);
13758 if (!result) {
13759 return null;
13760 }
13761 return {
13762 setter: new ValueSetter(
13763 result.value,
13764 this.validate,
13765 this.set,
13766 this.priority,
13767 this.subPriority
13768 ),
13769 rest: result.rest
13770 };
13771 }
13772 validate(_utcDate, _value, _options) {
13773 return true;
13774 }
13775 };
13776
13777 // node_modules/date-fns/parse/_lib/parsers/EraParser.js
13778 var EraParser = class extends Parser {
13779 priority = 140;
13780 parse(dateString, token, match2) {
13781 switch (token) {
13782 // AD, BC
13783 case "G":
13784 case "GG":
13785 case "GGG":
13786 return match2.era(dateString, { width: "abbreviated" }) || match2.era(dateString, { width: "narrow" });
13787 // A, B
13788 case "GGGGG":
13789 return match2.era(dateString, { width: "narrow" });
13790 // Anno Domini, Before Christ
13791 case "GGGG":
13792 default:
13793 return match2.era(dateString, { width: "wide" }) || match2.era(dateString, { width: "abbreviated" }) || match2.era(dateString, { width: "narrow" });
13794 }
13795 }
13796 set(date, flags, value) {
13797 flags.era = value;
13798 date.setFullYear(value, 0, 1);
13799 date.setHours(0, 0, 0, 0);
13800 return date;
13801 }
13802 incompatibleTokens = ["R", "u", "t", "T"];
13803 };
13804
13805 // node_modules/date-fns/parse/_lib/constants.js
13806 var numericPatterns = {
13807 month: /^(1[0-2]|0?\d)/,
13808 // 0 to 12
13809 date: /^(3[0-1]|[0-2]?\d)/,
13810 // 0 to 31
13811 dayOfYear: /^(36[0-6]|3[0-5]\d|[0-2]?\d?\d)/,
13812 // 0 to 366
13813 week: /^(5[0-3]|[0-4]?\d)/,
13814 // 0 to 53
13815 hour23h: /^(2[0-3]|[0-1]?\d)/,
13816 // 0 to 23
13817 hour24h: /^(2[0-4]|[0-1]?\d)/,
13818 // 0 to 24
13819 hour11h: /^(1[0-1]|0?\d)/,
13820 // 0 to 11
13821 hour12h: /^(1[0-2]|0?\d)/,
13822 // 0 to 12
13823 minute: /^[0-5]?\d/,
13824 // 0 to 59
13825 second: /^[0-5]?\d/,
13826 // 0 to 59
13827 singleDigit: /^\d/,
13828 // 0 to 9
13829 twoDigits: /^\d{1,2}/,
13830 // 0 to 99
13831 threeDigits: /^\d{1,3}/,
13832 // 0 to 999
13833 fourDigits: /^\d{1,4}/,
13834 // 0 to 9999
13835 anyDigitsSigned: /^-?\d+/,
13836 singleDigitSigned: /^-?\d/,
13837 // 0 to 9, -0 to -9
13838 twoDigitsSigned: /^-?\d{1,2}/,
13839 // 0 to 99, -0 to -99
13840 threeDigitsSigned: /^-?\d{1,3}/,
13841 // 0 to 999, -0 to -999
13842 fourDigitsSigned: /^-?\d{1,4}/
13843 // 0 to 9999, -0 to -9999
13844 };
13845 var timezonePatterns = {
13846 basicOptionalMinutes: /^([+-])(\d{2})(\d{2})?|Z/,
13847 basic: /^([+-])(\d{2})(\d{2})|Z/,
13848 basicOptionalSeconds: /^([+-])(\d{2})(\d{2})((\d{2}))?|Z/,
13849 extended: /^([+-])(\d{2}):(\d{2})|Z/,
13850 extendedOptionalSeconds: /^([+-])(\d{2}):(\d{2})(:(\d{2}))?|Z/
13851 };
13852
13853 // node_modules/date-fns/parse/_lib/utils.js
13854 function mapValue(parseFnResult, mapFn) {
13855 if (!parseFnResult) {
13856 return parseFnResult;
13857 }
13858 return {
13859 value: mapFn(parseFnResult.value),
13860 rest: parseFnResult.rest
13861 };
13862 }
13863 function parseNumericPattern(pattern, dateString) {
13864 const matchResult = dateString.match(pattern);
13865 if (!matchResult) {
13866 return null;
13867 }
13868 return {
13869 value: parseInt(matchResult[0], 10),
13870 rest: dateString.slice(matchResult[0].length)
13871 };
13872 }
13873 function parseTimezonePattern(pattern, dateString) {
13874 const matchResult = dateString.match(pattern);
13875 if (!matchResult) {
13876 return null;
13877 }
13878 if (matchResult[0] === "Z") {
13879 return {
13880 value: 0,
13881 rest: dateString.slice(1)
13882 };
13883 }
13884 const sign = matchResult[1] === "+" ? 1 : -1;
13885 const hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;
13886 const minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;
13887 const seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;
13888 return {
13889 value: sign * (hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * millisecondsInSecond),
13890 rest: dateString.slice(matchResult[0].length)
13891 };
13892 }
13893 function parseAnyDigitsSigned(dateString) {
13894 return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);
13895 }
13896 function parseNDigits(n, dateString) {
13897 switch (n) {
13898 case 1:
13899 return parseNumericPattern(numericPatterns.singleDigit, dateString);
13900 case 2:
13901 return parseNumericPattern(numericPatterns.twoDigits, dateString);
13902 case 3:
13903 return parseNumericPattern(numericPatterns.threeDigits, dateString);
13904 case 4:
13905 return parseNumericPattern(numericPatterns.fourDigits, dateString);
13906 default:
13907 return parseNumericPattern(new RegExp("^\\d{1," + n + "}"), dateString);
13908 }
13909 }
13910 function parseNDigitsSigned(n, dateString) {
13911 switch (n) {
13912 case 1:
13913 return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);
13914 case 2:
13915 return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);
13916 case 3:
13917 return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);
13918 case 4:
13919 return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);
13920 default:
13921 return parseNumericPattern(new RegExp("^-?\\d{1," + n + "}"), dateString);
13922 }
13923 }
13924 function dayPeriodEnumToHours(dayPeriod) {
13925 switch (dayPeriod) {
13926 case "morning":
13927 return 4;
13928 case "evening":
13929 return 17;
13930 case "pm":
13931 case "noon":
13932 case "afternoon":
13933 return 12;
13934 case "am":
13935 case "midnight":
13936 case "night":
13937 default:
13938 return 0;
13939 }
13940 }
13941 function normalizeTwoDigitYear(twoDigitYear, currentYear) {
13942 const isCommonEra = currentYear > 0;
13943 const absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;
13944 let result;
13945 if (absCurrentYear <= 50) {
13946 result = twoDigitYear || 100;
13947 } else {
13948 const rangeEnd = absCurrentYear + 50;
13949 const rangeEndCentury = Math.trunc(rangeEnd / 100) * 100;
13950 const isPreviousCentury = twoDigitYear >= rangeEnd % 100;
13951 result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);
13952 }
13953 return isCommonEra ? result : 1 - result;
13954 }
13955 function isLeapYearIndex(year) {
13956 return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;
13957 }
13958
13959 // node_modules/date-fns/parse/_lib/parsers/YearParser.js
13960 var YearParser = class extends Parser {
13961 priority = 130;
13962 incompatibleTokens = ["Y", "R", "u", "w", "I", "i", "e", "c", "t", "T"];
13963 parse(dateString, token, match2) {
13964 const valueCallback = (year) => ({
13965 year,
13966 isTwoDigitYear: token === "yy"
13967 });
13968 switch (token) {
13969 case "y":
13970 return mapValue(parseNDigits(4, dateString), valueCallback);
13971 case "yo":
13972 return mapValue(
13973 match2.ordinalNumber(dateString, {
13974 unit: "year"
13975 }),
13976 valueCallback
13977 );
13978 default:
13979 return mapValue(parseNDigits(token.length, dateString), valueCallback);
13980 }
13981 }
13982 validate(_date, value) {
13983 return value.isTwoDigitYear || value.year > 0;
13984 }
13985 set(date, flags, value) {
13986 const currentYear = date.getFullYear();
13987 if (value.isTwoDigitYear) {
13988 const normalizedTwoDigitYear = normalizeTwoDigitYear(
13989 value.year,
13990 currentYear
13991 );
13992 date.setFullYear(normalizedTwoDigitYear, 0, 1);
13993 date.setHours(0, 0, 0, 0);
13994 return date;
13995 }
13996 const year = !("era" in flags) || flags.era === 1 ? value.year : 1 - value.year;
13997 date.setFullYear(year, 0, 1);
13998 date.setHours(0, 0, 0, 0);
13999 return date;
14000 }
14001 };
14002
14003 // node_modules/date-fns/parse/_lib/parsers/LocalWeekYearParser.js
14004 var LocalWeekYearParser = class extends Parser {
14005 priority = 130;
14006 parse(dateString, token, match2) {
14007 const valueCallback = (year) => ({
14008 year,
14009 isTwoDigitYear: token === "YY"
14010 });
14011 switch (token) {
14012 case "Y":
14013 return mapValue(parseNDigits(4, dateString), valueCallback);
14014 case "Yo":
14015 return mapValue(
14016 match2.ordinalNumber(dateString, {
14017 unit: "year"
14018 }),
14019 valueCallback
14020 );
14021 default:
14022 return mapValue(parseNDigits(token.length, dateString), valueCallback);
14023 }
14024 }
14025 validate(_date, value) {
14026 return value.isTwoDigitYear || value.year > 0;
14027 }
14028 set(date, flags, value, options) {
14029 const currentYear = getWeekYear(date, options);
14030 if (value.isTwoDigitYear) {
14031 const normalizedTwoDigitYear = normalizeTwoDigitYear(
14032 value.year,
14033 currentYear
14034 );
14035 date.setFullYear(
14036 normalizedTwoDigitYear,
14037 0,
14038 options.firstWeekContainsDate
14039 );
14040 date.setHours(0, 0, 0, 0);
14041 return startOfWeek(date, options);
14042 }
14043 const year = !("era" in flags) || flags.era === 1 ? value.year : 1 - value.year;
14044 date.setFullYear(year, 0, options.firstWeekContainsDate);
14045 date.setHours(0, 0, 0, 0);
14046 return startOfWeek(date, options);
14047 }
14048 incompatibleTokens = [
14049 "y",
14050 "R",
14051 "u",
14052 "Q",
14053 "q",
14054 "M",
14055 "L",
14056 "I",
14057 "d",
14058 "D",
14059 "i",
14060 "t",
14061 "T"
14062 ];
14063 };
14064
14065 // node_modules/date-fns/parse/_lib/parsers/ISOWeekYearParser.js
14066 var ISOWeekYearParser = class extends Parser {
14067 priority = 130;
14068 parse(dateString, token) {
14069 if (token === "R") {
14070 return parseNDigitsSigned(4, dateString);
14071 }
14072 return parseNDigitsSigned(token.length, dateString);
14073 }
14074 set(date, _flags, value) {
14075 const firstWeekOfYear = constructFrom(date, 0);
14076 firstWeekOfYear.setFullYear(value, 0, 4);
14077 firstWeekOfYear.setHours(0, 0, 0, 0);
14078 return startOfISOWeek(firstWeekOfYear);
14079 }
14080 incompatibleTokens = [
14081 "G",
14082 "y",
14083 "Y",
14084 "u",
14085 "Q",
14086 "q",
14087 "M",
14088 "L",
14089 "w",
14090 "d",
14091 "D",
14092 "e",
14093 "c",
14094 "t",
14095 "T"
14096 ];
14097 };
14098
14099 // node_modules/date-fns/parse/_lib/parsers/ExtendedYearParser.js
14100 var ExtendedYearParser = class extends Parser {
14101 priority = 130;
14102 parse(dateString, token) {
14103 if (token === "u") {
14104 return parseNDigitsSigned(4, dateString);
14105 }
14106 return parseNDigitsSigned(token.length, dateString);
14107 }
14108 set(date, _flags, value) {
14109 date.setFullYear(value, 0, 1);
14110 date.setHours(0, 0, 0, 0);
14111 return date;
14112 }
14113 incompatibleTokens = ["G", "y", "Y", "R", "w", "I", "i", "e", "c", "t", "T"];
14114 };
14115
14116 // node_modules/date-fns/parse/_lib/parsers/QuarterParser.js
14117 var QuarterParser = class extends Parser {
14118 priority = 120;
14119 parse(dateString, token, match2) {
14120 switch (token) {
14121 // 1, 2, 3, 4
14122 case "Q":
14123 case "QQ":
14124 return parseNDigits(token.length, dateString);
14125 // 1st, 2nd, 3rd, 4th
14126 case "Qo":
14127 return match2.ordinalNumber(dateString, { unit: "quarter" });
14128 // Q1, Q2, Q3, Q4
14129 case "QQQ":
14130 return match2.quarter(dateString, {
14131 width: "abbreviated",
14132 context: "formatting"
14133 }) || match2.quarter(dateString, {
14134 width: "narrow",
14135 context: "formatting"
14136 });
14137 // 1, 2, 3, 4 (narrow quarter; could be not numerical)
14138 case "QQQQQ":
14139 return match2.quarter(dateString, {
14140 width: "narrow",
14141 context: "formatting"
14142 });
14143 // 1st quarter, 2nd quarter, ...
14144 case "QQQQ":
14145 default:
14146 return match2.quarter(dateString, {
14147 width: "wide",
14148 context: "formatting"
14149 }) || match2.quarter(dateString, {
14150 width: "abbreviated",
14151 context: "formatting"
14152 }) || match2.quarter(dateString, {
14153 width: "narrow",
14154 context: "formatting"
14155 });
14156 }
14157 }
14158 validate(_date, value) {
14159 return value >= 1 && value <= 4;
14160 }
14161 set(date, _flags, value) {
14162 date.setMonth((value - 1) * 3, 1);
14163 date.setHours(0, 0, 0, 0);
14164 return date;
14165 }
14166 incompatibleTokens = [
14167 "Y",
14168 "R",
14169 "q",
14170 "M",
14171 "L",
14172 "w",
14173 "I",
14174 "d",
14175 "D",
14176 "i",
14177 "e",
14178 "c",
14179 "t",
14180 "T"
14181 ];
14182 };
14183
14184 // node_modules/date-fns/parse/_lib/parsers/StandAloneQuarterParser.js
14185 var StandAloneQuarterParser = class extends Parser {
14186 priority = 120;
14187 parse(dateString, token, match2) {
14188 switch (token) {
14189 // 1, 2, 3, 4
14190 case "q":
14191 case "qq":
14192 return parseNDigits(token.length, dateString);
14193 // 1st, 2nd, 3rd, 4th
14194 case "qo":
14195 return match2.ordinalNumber(dateString, { unit: "quarter" });
14196 // Q1, Q2, Q3, Q4
14197 case "qqq":
14198 return match2.quarter(dateString, {
14199 width: "abbreviated",
14200 context: "standalone"
14201 }) || match2.quarter(dateString, {
14202 width: "narrow",
14203 context: "standalone"
14204 });
14205 // 1, 2, 3, 4 (narrow quarter; could be not numerical)
14206 case "qqqqq":
14207 return match2.quarter(dateString, {
14208 width: "narrow",
14209 context: "standalone"
14210 });
14211 // 1st quarter, 2nd quarter, ...
14212 case "qqqq":
14213 default:
14214 return match2.quarter(dateString, {
14215 width: "wide",
14216 context: "standalone"
14217 }) || match2.quarter(dateString, {
14218 width: "abbreviated",
14219 context: "standalone"
14220 }) || match2.quarter(dateString, {
14221 width: "narrow",
14222 context: "standalone"
14223 });
14224 }
14225 }
14226 validate(_date, value) {
14227 return value >= 1 && value <= 4;
14228 }
14229 set(date, _flags, value) {
14230 date.setMonth((value - 1) * 3, 1);
14231 date.setHours(0, 0, 0, 0);
14232 return date;
14233 }
14234 incompatibleTokens = [
14235 "Y",
14236 "R",
14237 "Q",
14238 "M",
14239 "L",
14240 "w",
14241 "I",
14242 "d",
14243 "D",
14244 "i",
14245 "e",
14246 "c",
14247 "t",
14248 "T"
14249 ];
14250 };
14251
14252 // node_modules/date-fns/parse/_lib/parsers/MonthParser.js
14253 var MonthParser = class extends Parser {
14254 incompatibleTokens = [
14255 "Y",
14256 "R",
14257 "q",
14258 "Q",
14259 "L",
14260 "w",
14261 "I",
14262 "D",
14263 "i",
14264 "e",
14265 "c",
14266 "t",
14267 "T"
14268 ];
14269 priority = 110;
14270 parse(dateString, token, match2) {
14271 const valueCallback = (value) => value - 1;
14272 switch (token) {
14273 // 1, 2, ..., 12
14274 case "M":
14275 return mapValue(
14276 parseNumericPattern(numericPatterns.month, dateString),
14277 valueCallback
14278 );
14279 // 01, 02, ..., 12
14280 case "MM":
14281 return mapValue(parseNDigits(2, dateString), valueCallback);
14282 // 1st, 2nd, ..., 12th
14283 case "Mo":
14284 return mapValue(
14285 match2.ordinalNumber(dateString, {
14286 unit: "month"
14287 }),
14288 valueCallback
14289 );
14290 // Jan, Feb, ..., Dec
14291 case "MMM":
14292 return match2.month(dateString, {
14293 width: "abbreviated",
14294 context: "formatting"
14295 }) || match2.month(dateString, { width: "narrow", context: "formatting" });
14296 // J, F, ..., D
14297 case "MMMMM":
14298 return match2.month(dateString, {
14299 width: "narrow",
14300 context: "formatting"
14301 });
14302 // January, February, ..., December
14303 case "MMMM":
14304 default:
14305 return match2.month(dateString, { width: "wide", context: "formatting" }) || match2.month(dateString, {
14306 width: "abbreviated",
14307 context: "formatting"
14308 }) || match2.month(dateString, { width: "narrow", context: "formatting" });
14309 }
14310 }
14311 validate(_date, value) {
14312 return value >= 0 && value <= 11;
14313 }
14314 set(date, _flags, value) {
14315 date.setMonth(value, 1);
14316 date.setHours(0, 0, 0, 0);
14317 return date;
14318 }
14319 };
14320
14321 // node_modules/date-fns/parse/_lib/parsers/StandAloneMonthParser.js
14322 var StandAloneMonthParser = class extends Parser {
14323 priority = 110;
14324 parse(dateString, token, match2) {
14325 const valueCallback = (value) => value - 1;
14326 switch (token) {
14327 // 1, 2, ..., 12
14328 case "L":
14329 return mapValue(
14330 parseNumericPattern(numericPatterns.month, dateString),
14331 valueCallback
14332 );
14333 // 01, 02, ..., 12
14334 case "LL":
14335 return mapValue(parseNDigits(2, dateString), valueCallback);
14336 // 1st, 2nd, ..., 12th
14337 case "Lo":
14338 return mapValue(
14339 match2.ordinalNumber(dateString, {
14340 unit: "month"
14341 }),
14342 valueCallback
14343 );
14344 // Jan, Feb, ..., Dec
14345 case "LLL":
14346 return match2.month(dateString, {
14347 width: "abbreviated",
14348 context: "standalone"
14349 }) || match2.month(dateString, { width: "narrow", context: "standalone" });
14350 // J, F, ..., D
14351 case "LLLLL":
14352 return match2.month(dateString, {
14353 width: "narrow",
14354 context: "standalone"
14355 });
14356 // January, February, ..., December
14357 case "LLLL":
14358 default:
14359 return match2.month(dateString, { width: "wide", context: "standalone" }) || match2.month(dateString, {
14360 width: "abbreviated",
14361 context: "standalone"
14362 }) || match2.month(dateString, { width: "narrow", context: "standalone" });
14363 }
14364 }
14365 validate(_date, value) {
14366 return value >= 0 && value <= 11;
14367 }
14368 set(date, _flags, value) {
14369 date.setMonth(value, 1);
14370 date.setHours(0, 0, 0, 0);
14371 return date;
14372 }
14373 incompatibleTokens = [
14374 "Y",
14375 "R",
14376 "q",
14377 "Q",
14378 "M",
14379 "w",
14380 "I",
14381 "D",
14382 "i",
14383 "e",
14384 "c",
14385 "t",
14386 "T"
14387 ];
14388 };
14389
14390 // node_modules/date-fns/setWeek.js
14391 function setWeek(date, week, options) {
14392 const date_ = toDate(date, options?.in);
14393 const diff = getWeek(date_, options) - week;
14394 date_.setDate(date_.getDate() - diff * 7);
14395 return toDate(date_, options?.in);
14396 }
14397
14398 // node_modules/date-fns/parse/_lib/parsers/LocalWeekParser.js
14399 var LocalWeekParser = class extends Parser {
14400 priority = 100;
14401 parse(dateString, token, match2) {
14402 switch (token) {
14403 case "w":
14404 return parseNumericPattern(numericPatterns.week, dateString);
14405 case "wo":
14406 return match2.ordinalNumber(dateString, { unit: "week" });
14407 default:
14408 return parseNDigits(token.length, dateString);
14409 }
14410 }
14411 validate(_date, value) {
14412 return value >= 1 && value <= 53;
14413 }
14414 set(date, _flags, value, options) {
14415 return startOfWeek(setWeek(date, value, options), options);
14416 }
14417 incompatibleTokens = [
14418 "y",
14419 "R",
14420 "u",
14421 "q",
14422 "Q",
14423 "M",
14424 "L",
14425 "I",
14426 "d",
14427 "D",
14428 "i",
14429 "t",
14430 "T"
14431 ];
14432 };
14433
14434 // node_modules/date-fns/setISOWeek.js
14435 function setISOWeek(date, week, options) {
14436 const _date = toDate(date, options?.in);
14437 const diff = getISOWeek(_date, options) - week;
14438 _date.setDate(_date.getDate() - diff * 7);
14439 return _date;
14440 }
14441
14442 // node_modules/date-fns/parse/_lib/parsers/ISOWeekParser.js
14443 var ISOWeekParser = class extends Parser {
14444 priority = 100;
14445 parse(dateString, token, match2) {
14446 switch (token) {
14447 case "I":
14448 return parseNumericPattern(numericPatterns.week, dateString);
14449 case "Io":
14450 return match2.ordinalNumber(dateString, { unit: "week" });
14451 default:
14452 return parseNDigits(token.length, dateString);
14453 }
14454 }
14455 validate(_date, value) {
14456 return value >= 1 && value <= 53;
14457 }
14458 set(date, _flags, value) {
14459 return startOfISOWeek(setISOWeek(date, value));
14460 }
14461 incompatibleTokens = [
14462 "y",
14463 "Y",
14464 "u",
14465 "q",
14466 "Q",
14467 "M",
14468 "L",
14469 "w",
14470 "d",
14471 "D",
14472 "e",
14473 "c",
14474 "t",
14475 "T"
14476 ];
14477 };
14478
14479 // node_modules/date-fns/parse/_lib/parsers/DateParser.js
14480 var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
14481 var DAYS_IN_MONTH_LEAP_YEAR = [
14482 31,
14483 29,
14484 31,
14485 30,
14486 31,
14487 30,
14488 31,
14489 31,
14490 30,
14491 31,
14492 30,
14493 31
14494 ];
14495 var DateParser = class extends Parser {
14496 priority = 90;
14497 subPriority = 1;
14498 parse(dateString, token, match2) {
14499 switch (token) {
14500 case "d":
14501 return parseNumericPattern(numericPatterns.date, dateString);
14502 case "do":
14503 return match2.ordinalNumber(dateString, { unit: "date" });
14504 default:
14505 return parseNDigits(token.length, dateString);
14506 }
14507 }
14508 validate(date, value) {
14509 const year = date.getFullYear();
14510 const isLeapYear = isLeapYearIndex(year);
14511 const month = date.getMonth();
14512 if (isLeapYear) {
14513 return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];
14514 } else {
14515 return value >= 1 && value <= DAYS_IN_MONTH[month];
14516 }
14517 }
14518 set(date, _flags, value) {
14519 date.setDate(value);
14520 date.setHours(0, 0, 0, 0);
14521 return date;
14522 }
14523 incompatibleTokens = [
14524 "Y",
14525 "R",
14526 "q",
14527 "Q",
14528 "w",
14529 "I",
14530 "D",
14531 "i",
14532 "e",
14533 "c",
14534 "t",
14535 "T"
14536 ];
14537 };
14538
14539 // node_modules/date-fns/parse/_lib/parsers/DayOfYearParser.js
14540 var DayOfYearParser = class extends Parser {
14541 priority = 90;
14542 subpriority = 1;
14543 parse(dateString, token, match2) {
14544 switch (token) {
14545 case "D":
14546 case "DD":
14547 return parseNumericPattern(numericPatterns.dayOfYear, dateString);
14548 case "Do":
14549 return match2.ordinalNumber(dateString, { unit: "date" });
14550 default:
14551 return parseNDigits(token.length, dateString);
14552 }
14553 }
14554 validate(date, value) {
14555 const year = date.getFullYear();
14556 const isLeapYear = isLeapYearIndex(year);
14557 if (isLeapYear) {
14558 return value >= 1 && value <= 366;
14559 } else {
14560 return value >= 1 && value <= 365;
14561 }
14562 }
14563 set(date, _flags, value) {
14564 date.setMonth(0, value);
14565 date.setHours(0, 0, 0, 0);
14566 return date;
14567 }
14568 incompatibleTokens = [
14569 "Y",
14570 "R",
14571 "q",
14572 "Q",
14573 "M",
14574 "L",
14575 "w",
14576 "I",
14577 "d",
14578 "E",
14579 "i",
14580 "e",
14581 "c",
14582 "t",
14583 "T"
14584 ];
14585 };
14586
14587 // node_modules/date-fns/setDay.js
14588 function setDay(date, day, options) {
14589 const defaultOptions2 = getDefaultOptions();
14590 const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0;
14591 const date_ = toDate(date, options?.in);
14592 const currentDay = date_.getDay();
14593 const remainder = day % 7;
14594 const dayIndex = (remainder + 7) % 7;
14595 const delta = 7 - weekStartsOn;
14596 const diff = day < 0 || day > 6 ? day - (currentDay + delta) % 7 : (dayIndex + delta) % 7 - (currentDay + delta) % 7;
14597 return addDays(date_, diff, options);
14598 }
14599
14600 // node_modules/date-fns/parse/_lib/parsers/DayParser.js
14601 var DayParser = class extends Parser {
14602 priority = 90;
14603 parse(dateString, token, match2) {
14604 switch (token) {
14605 // Tue
14606 case "E":
14607 case "EE":
14608 case "EEE":
14609 return match2.day(dateString, {
14610 width: "abbreviated",
14611 context: "formatting"
14612 }) || match2.day(dateString, { width: "short", context: "formatting" }) || match2.day(dateString, { width: "narrow", context: "formatting" });
14613 // T
14614 case "EEEEE":
14615 return match2.day(dateString, {
14616 width: "narrow",
14617 context: "formatting"
14618 });
14619 // Tu
14620 case "EEEEEE":
14621 return match2.day(dateString, { width: "short", context: "formatting" }) || match2.day(dateString, { width: "narrow", context: "formatting" });
14622 // Tuesday
14623 case "EEEE":
14624 default:
14625 return match2.day(dateString, { width: "wide", context: "formatting" }) || match2.day(dateString, {
14626 width: "abbreviated",
14627 context: "formatting"
14628 }) || match2.day(dateString, { width: "short", context: "formatting" }) || match2.day(dateString, { width: "narrow", context: "formatting" });
14629 }
14630 }
14631 validate(_date, value) {
14632 return value >= 0 && value <= 6;
14633 }
14634 set(date, _flags, value, options) {
14635 date = setDay(date, value, options);
14636 date.setHours(0, 0, 0, 0);
14637 return date;
14638 }
14639 incompatibleTokens = ["D", "i", "e", "c", "t", "T"];
14640 };
14641
14642 // node_modules/date-fns/parse/_lib/parsers/LocalDayParser.js
14643 var LocalDayParser = class extends Parser {
14644 priority = 90;
14645 parse(dateString, token, match2, options) {
14646 const valueCallback = (value) => {
14647 const wholeWeekDays = Math.floor((value - 1) / 7) * 7;
14648 return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;
14649 };
14650 switch (token) {
14651 // 3
14652 case "e":
14653 case "ee":
14654 return mapValue(parseNDigits(token.length, dateString), valueCallback);
14655 // 3rd
14656 case "eo":
14657 return mapValue(
14658 match2.ordinalNumber(dateString, {
14659 unit: "day"
14660 }),
14661 valueCallback
14662 );
14663 // Tue
14664 case "eee":
14665 return match2.day(dateString, {
14666 width: "abbreviated",
14667 context: "formatting"
14668 }) || match2.day(dateString, { width: "short", context: "formatting" }) || match2.day(dateString, { width: "narrow", context: "formatting" });
14669 // T
14670 case "eeeee":
14671 return match2.day(dateString, {
14672 width: "narrow",
14673 context: "formatting"
14674 });
14675 // Tu
14676 case "eeeeee":
14677 return match2.day(dateString, { width: "short", context: "formatting" }) || match2.day(dateString, { width: "narrow", context: "formatting" });
14678 // Tuesday
14679 case "eeee":
14680 default:
14681 return match2.day(dateString, { width: "wide", context: "formatting" }) || match2.day(dateString, {
14682 width: "abbreviated",
14683 context: "formatting"
14684 }) || match2.day(dateString, { width: "short", context: "formatting" }) || match2.day(dateString, { width: "narrow", context: "formatting" });
14685 }
14686 }
14687 validate(_date, value) {
14688 return value >= 0 && value <= 6;
14689 }
14690 set(date, _flags, value, options) {
14691 date = setDay(date, value, options);
14692 date.setHours(0, 0, 0, 0);
14693 return date;
14694 }
14695 incompatibleTokens = [
14696 "y",
14697 "R",
14698 "u",
14699 "q",
14700 "Q",
14701 "M",
14702 "L",
14703 "I",
14704 "d",
14705 "D",
14706 "E",
14707 "i",
14708 "c",
14709 "t",
14710 "T"
14711 ];
14712 };
14713
14714 // node_modules/date-fns/parse/_lib/parsers/StandAloneLocalDayParser.js
14715 var StandAloneLocalDayParser = class extends Parser {
14716 priority = 90;
14717 parse(dateString, token, match2, options) {
14718 const valueCallback = (value) => {
14719 const wholeWeekDays = Math.floor((value - 1) / 7) * 7;
14720 return (value + options.weekStartsOn + 6) % 7 + wholeWeekDays;
14721 };
14722 switch (token) {
14723 // 3
14724 case "c":
14725 case "cc":
14726 return mapValue(parseNDigits(token.length, dateString), valueCallback);
14727 // 3rd
14728 case "co":
14729 return mapValue(
14730 match2.ordinalNumber(dateString, {
14731 unit: "day"
14732 }),
14733 valueCallback
14734 );
14735 // Tue
14736 case "ccc":
14737 return match2.day(dateString, {
14738 width: "abbreviated",
14739 context: "standalone"
14740 }) || match2.day(dateString, { width: "short", context: "standalone" }) || match2.day(dateString, { width: "narrow", context: "standalone" });
14741 // T
14742 case "ccccc":
14743 return match2.day(dateString, {
14744 width: "narrow",
14745 context: "standalone"
14746 });
14747 // Tu
14748 case "cccccc":
14749 return match2.day(dateString, { width: "short", context: "standalone" }) || match2.day(dateString, { width: "narrow", context: "standalone" });
14750 // Tuesday
14751 case "cccc":
14752 default:
14753 return match2.day(dateString, { width: "wide", context: "standalone" }) || match2.day(dateString, {
14754 width: "abbreviated",
14755 context: "standalone"
14756 }) || match2.day(dateString, { width: "short", context: "standalone" }) || match2.day(dateString, { width: "narrow", context: "standalone" });
14757 }
14758 }
14759 validate(_date, value) {
14760 return value >= 0 && value <= 6;
14761 }
14762 set(date, _flags, value, options) {
14763 date = setDay(date, value, options);
14764 date.setHours(0, 0, 0, 0);
14765 return date;
14766 }
14767 incompatibleTokens = [
14768 "y",
14769 "R",
14770 "u",
14771 "q",
14772 "Q",
14773 "M",
14774 "L",
14775 "I",
14776 "d",
14777 "D",
14778 "E",
14779 "i",
14780 "e",
14781 "t",
14782 "T"
14783 ];
14784 };
14785
14786 // node_modules/date-fns/setISODay.js
14787 function setISODay(date, day, options) {
14788 const date_ = toDate(date, options?.in);
14789 const currentDay = getISODay(date_, options);
14790 const diff = day - currentDay;
14791 return addDays(date_, diff, options);
14792 }
14793
14794 // node_modules/date-fns/parse/_lib/parsers/ISODayParser.js
14795 var ISODayParser = class extends Parser {
14796 priority = 90;
14797 parse(dateString, token, match2) {
14798 const valueCallback = (value) => {
14799 if (value === 0) {
14800 return 7;
14801 }
14802 return value;
14803 };
14804 switch (token) {
14805 // 2
14806 case "i":
14807 case "ii":
14808 return parseNDigits(token.length, dateString);
14809 // 2nd
14810 case "io":
14811 return match2.ordinalNumber(dateString, { unit: "day" });
14812 // Tue
14813 case "iii":
14814 return mapValue(
14815 match2.day(dateString, {
14816 width: "abbreviated",
14817 context: "formatting"
14818 }) || match2.day(dateString, {
14819 width: "short",
14820 context: "formatting"
14821 }) || match2.day(dateString, {
14822 width: "narrow",
14823 context: "formatting"
14824 }),
14825 valueCallback
14826 );
14827 // T
14828 case "iiiii":
14829 return mapValue(
14830 match2.day(dateString, {
14831 width: "narrow",
14832 context: "formatting"
14833 }),
14834 valueCallback
14835 );
14836 // Tu
14837 case "iiiiii":
14838 return mapValue(
14839 match2.day(dateString, {
14840 width: "short",
14841 context: "formatting"
14842 }) || match2.day(dateString, {
14843 width: "narrow",
14844 context: "formatting"
14845 }),
14846 valueCallback
14847 );
14848 // Tuesday
14849 case "iiii":
14850 default:
14851 return mapValue(
14852 match2.day(dateString, {
14853 width: "wide",
14854 context: "formatting"
14855 }) || match2.day(dateString, {
14856 width: "abbreviated",
14857 context: "formatting"
14858 }) || match2.day(dateString, {
14859 width: "short",
14860 context: "formatting"
14861 }) || match2.day(dateString, {
14862 width: "narrow",
14863 context: "formatting"
14864 }),
14865 valueCallback
14866 );
14867 }
14868 }
14869 validate(_date, value) {
14870 return value >= 1 && value <= 7;
14871 }
14872 set(date, _flags, value) {
14873 date = setISODay(date, value);
14874 date.setHours(0, 0, 0, 0);
14875 return date;
14876 }
14877 incompatibleTokens = [
14878 "y",
14879 "Y",
14880 "u",
14881 "q",
14882 "Q",
14883 "M",
14884 "L",
14885 "w",
14886 "d",
14887 "D",
14888 "E",
14889 "e",
14890 "c",
14891 "t",
14892 "T"
14893 ];
14894 };
14895
14896 // node_modules/date-fns/parse/_lib/parsers/AMPMParser.js
14897 var AMPMParser = class extends Parser {
14898 priority = 80;
14899 parse(dateString, token, match2) {
14900 switch (token) {
14901 case "a":
14902 case "aa":
14903 case "aaa":
14904 return match2.dayPeriod(dateString, {
14905 width: "abbreviated",
14906 context: "formatting"
14907 }) || match2.dayPeriod(dateString, {
14908 width: "narrow",
14909 context: "formatting"
14910 });
14911 case "aaaaa":
14912 return match2.dayPeriod(dateString, {
14913 width: "narrow",
14914 context: "formatting"
14915 });
14916 case "aaaa":
14917 default:
14918 return match2.dayPeriod(dateString, {
14919 width: "wide",
14920 context: "formatting"
14921 }) || match2.dayPeriod(dateString, {
14922 width: "abbreviated",
14923 context: "formatting"
14924 }) || match2.dayPeriod(dateString, {
14925 width: "narrow",
14926 context: "formatting"
14927 });
14928 }
14929 }
14930 set(date, _flags, value) {
14931 date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);
14932 return date;
14933 }
14934 incompatibleTokens = ["b", "B", "H", "k", "t", "T"];
14935 };
14936
14937 // node_modules/date-fns/parse/_lib/parsers/AMPMMidnightParser.js
14938 var AMPMMidnightParser = class extends Parser {
14939 priority = 80;
14940 parse(dateString, token, match2) {
14941 switch (token) {
14942 case "b":
14943 case "bb":
14944 case "bbb":
14945 return match2.dayPeriod(dateString, {
14946 width: "abbreviated",
14947 context: "formatting"
14948 }) || match2.dayPeriod(dateString, {
14949 width: "narrow",
14950 context: "formatting"
14951 });
14952 case "bbbbb":
14953 return match2.dayPeriod(dateString, {
14954 width: "narrow",
14955 context: "formatting"
14956 });
14957 case "bbbb":
14958 default:
14959 return match2.dayPeriod(dateString, {
14960 width: "wide",
14961 context: "formatting"
14962 }) || match2.dayPeriod(dateString, {
14963 width: "abbreviated",
14964 context: "formatting"
14965 }) || match2.dayPeriod(dateString, {
14966 width: "narrow",
14967 context: "formatting"
14968 });
14969 }
14970 }
14971 set(date, _flags, value) {
14972 date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);
14973 return date;
14974 }
14975 incompatibleTokens = ["a", "B", "H", "k", "t", "T"];
14976 };
14977
14978 // node_modules/date-fns/parse/_lib/parsers/DayPeriodParser.js
14979 var DayPeriodParser = class extends Parser {
14980 priority = 80;
14981 parse(dateString, token, match2) {
14982 switch (token) {
14983 case "B":
14984 case "BB":
14985 case "BBB":
14986 return match2.dayPeriod(dateString, {
14987 width: "abbreviated",
14988 context: "formatting"
14989 }) || match2.dayPeriod(dateString, {
14990 width: "narrow",
14991 context: "formatting"
14992 });
14993 case "BBBBB":
14994 return match2.dayPeriod(dateString, {
14995 width: "narrow",
14996 context: "formatting"
14997 });
14998 case "BBBB":
14999 default:
15000 return match2.dayPeriod(dateString, {
15001 width: "wide",
15002 context: "formatting"
15003 }) || match2.dayPeriod(dateString, {
15004 width: "abbreviated",
15005 context: "formatting"
15006 }) || match2.dayPeriod(dateString, {
15007 width: "narrow",
15008 context: "formatting"
15009 });
15010 }
15011 }
15012 set(date, _flags, value) {
15013 date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);
15014 return date;
15015 }
15016 incompatibleTokens = ["a", "b", "t", "T"];
15017 };
15018
15019 // node_modules/date-fns/parse/_lib/parsers/Hour1to12Parser.js
15020 var Hour1to12Parser = class extends Parser {
15021 priority = 70;
15022 parse(dateString, token, match2) {
15023 switch (token) {
15024 case "h":
15025 return parseNumericPattern(numericPatterns.hour12h, dateString);
15026 case "ho":
15027 return match2.ordinalNumber(dateString, { unit: "hour" });
15028 default:
15029 return parseNDigits(token.length, dateString);
15030 }
15031 }
15032 validate(_date, value) {
15033 return value >= 1 && value <= 12;
15034 }
15035 set(date, _flags, value) {
15036 const isPM = date.getHours() >= 12;
15037 if (isPM && value < 12) {
15038 date.setHours(value + 12, 0, 0, 0);
15039 } else if (!isPM && value === 12) {
15040 date.setHours(0, 0, 0, 0);
15041 } else {
15042 date.setHours(value, 0, 0, 0);
15043 }
15044 return date;
15045 }
15046 incompatibleTokens = ["H", "K", "k", "t", "T"];
15047 };
15048
15049 // node_modules/date-fns/parse/_lib/parsers/Hour0to23Parser.js
15050 var Hour0to23Parser = class extends Parser {
15051 priority = 70;
15052 parse(dateString, token, match2) {
15053 switch (token) {
15054 case "H":
15055 return parseNumericPattern(numericPatterns.hour23h, dateString);
15056 case "Ho":
15057 return match2.ordinalNumber(dateString, { unit: "hour" });
15058 default:
15059 return parseNDigits(token.length, dateString);
15060 }
15061 }
15062 validate(_date, value) {
15063 return value >= 0 && value <= 23;
15064 }
15065 set(date, _flags, value) {
15066 date.setHours(value, 0, 0, 0);
15067 return date;
15068 }
15069 incompatibleTokens = ["a", "b", "h", "K", "k", "t", "T"];
15070 };
15071
15072 // node_modules/date-fns/parse/_lib/parsers/Hour0To11Parser.js
15073 var Hour0To11Parser = class extends Parser {
15074 priority = 70;
15075 parse(dateString, token, match2) {
15076 switch (token) {
15077 case "K":
15078 return parseNumericPattern(numericPatterns.hour11h, dateString);
15079 case "Ko":
15080 return match2.ordinalNumber(dateString, { unit: "hour" });
15081 default:
15082 return parseNDigits(token.length, dateString);
15083 }
15084 }
15085 validate(_date, value) {
15086 return value >= 0 && value <= 11;
15087 }
15088 set(date, _flags, value) {
15089 const isPM = date.getHours() >= 12;
15090 if (isPM && value < 12) {
15091 date.setHours(value + 12, 0, 0, 0);
15092 } else {
15093 date.setHours(value, 0, 0, 0);
15094 }
15095 return date;
15096 }
15097 incompatibleTokens = ["h", "H", "k", "t", "T"];
15098 };
15099
15100 // node_modules/date-fns/parse/_lib/parsers/Hour1To24Parser.js
15101 var Hour1To24Parser = class extends Parser {
15102 priority = 70;
15103 parse(dateString, token, match2) {
15104 switch (token) {
15105 case "k":
15106 return parseNumericPattern(numericPatterns.hour24h, dateString);
15107 case "ko":
15108 return match2.ordinalNumber(dateString, { unit: "hour" });
15109 default:
15110 return parseNDigits(token.length, dateString);
15111 }
15112 }
15113 validate(_date, value) {
15114 return value >= 1 && value <= 24;
15115 }
15116 set(date, _flags, value) {
15117 const hours = value <= 24 ? value % 24 : value;
15118 date.setHours(hours, 0, 0, 0);
15119 return date;
15120 }
15121 incompatibleTokens = ["a", "b", "h", "H", "K", "t", "T"];
15122 };
15123
15124 // node_modules/date-fns/parse/_lib/parsers/MinuteParser.js
15125 var MinuteParser = class extends Parser {
15126 priority = 60;
15127 parse(dateString, token, match2) {
15128 switch (token) {
15129 case "m":
15130 return parseNumericPattern(numericPatterns.minute, dateString);
15131 case "mo":
15132 return match2.ordinalNumber(dateString, { unit: "minute" });
15133 default:
15134 return parseNDigits(token.length, dateString);
15135 }
15136 }
15137 validate(_date, value) {
15138 return value >= 0 && value <= 59;
15139 }
15140 set(date, _flags, value) {
15141 date.setMinutes(value, 0, 0);
15142 return date;
15143 }
15144 incompatibleTokens = ["t", "T"];
15145 };
15146
15147 // node_modules/date-fns/parse/_lib/parsers/SecondParser.js
15148 var SecondParser = class extends Parser {
15149 priority = 50;
15150 parse(dateString, token, match2) {
15151 switch (token) {
15152 case "s":
15153 return parseNumericPattern(numericPatterns.second, dateString);
15154 case "so":
15155 return match2.ordinalNumber(dateString, { unit: "second" });
15156 default:
15157 return parseNDigits(token.length, dateString);
15158 }
15159 }
15160 validate(_date, value) {
15161 return value >= 0 && value <= 59;
15162 }
15163 set(date, _flags, value) {
15164 date.setSeconds(value, 0);
15165 return date;
15166 }
15167 incompatibleTokens = ["t", "T"];
15168 };
15169
15170 // node_modules/date-fns/parse/_lib/parsers/FractionOfSecondParser.js
15171 var FractionOfSecondParser = class extends Parser {
15172 priority = 30;
15173 parse(dateString, token) {
15174 const valueCallback = (value) => Math.trunc(value * Math.pow(10, -token.length + 3));
15175 return mapValue(parseNDigits(token.length, dateString), valueCallback);
15176 }
15177 set(date, _flags, value) {
15178 date.setMilliseconds(value);
15179 return date;
15180 }
15181 incompatibleTokens = ["t", "T"];
15182 };
15183
15184 // node_modules/date-fns/parse/_lib/parsers/ISOTimezoneWithZParser.js
15185 var ISOTimezoneWithZParser = class extends Parser {
15186 priority = 10;
15187 parse(dateString, token) {
15188 switch (token) {
15189 case "X":
15190 return parseTimezonePattern(
15191 timezonePatterns.basicOptionalMinutes,
15192 dateString
15193 );
15194 case "XX":
15195 return parseTimezonePattern(timezonePatterns.basic, dateString);
15196 case "XXXX":
15197 return parseTimezonePattern(
15198 timezonePatterns.basicOptionalSeconds,
15199 dateString
15200 );
15201 case "XXXXX":
15202 return parseTimezonePattern(
15203 timezonePatterns.extendedOptionalSeconds,
15204 dateString
15205 );
15206 case "XXX":
15207 default:
15208 return parseTimezonePattern(timezonePatterns.extended, dateString);
15209 }
15210 }
15211 set(date, flags, value) {
15212 if (flags.timestampIsSet) return date;
15213 return constructFrom(
15214 date,
15215 date.getTime() - getTimezoneOffsetInMilliseconds(date) - value
15216 );
15217 }
15218 incompatibleTokens = ["t", "T", "x"];
15219 };
15220
15221 // node_modules/date-fns/parse/_lib/parsers/ISOTimezoneParser.js
15222 var ISOTimezoneParser = class extends Parser {
15223 priority = 10;
15224 parse(dateString, token) {
15225 switch (token) {
15226 case "x":
15227 return parseTimezonePattern(
15228 timezonePatterns.basicOptionalMinutes,
15229 dateString
15230 );
15231 case "xx":
15232 return parseTimezonePattern(timezonePatterns.basic, dateString);
15233 case "xxxx":
15234 return parseTimezonePattern(
15235 timezonePatterns.basicOptionalSeconds,
15236 dateString
15237 );
15238 case "xxxxx":
15239 return parseTimezonePattern(
15240 timezonePatterns.extendedOptionalSeconds,
15241 dateString
15242 );
15243 case "xxx":
15244 default:
15245 return parseTimezonePattern(timezonePatterns.extended, dateString);
15246 }
15247 }
15248 set(date, flags, value) {
15249 if (flags.timestampIsSet) return date;
15250 return constructFrom(
15251 date,
15252 date.getTime() - getTimezoneOffsetInMilliseconds(date) - value
15253 );
15254 }
15255 incompatibleTokens = ["t", "T", "X"];
15256 };
15257
15258 // node_modules/date-fns/parse/_lib/parsers/TimestampSecondsParser.js
15259 var TimestampSecondsParser = class extends Parser {
15260 priority = 40;
15261 parse(dateString) {
15262 return parseAnyDigitsSigned(dateString);
15263 }
15264 set(date, _flags, value) {
15265 return [constructFrom(date, value * 1e3), { timestampIsSet: true }];
15266 }
15267 incompatibleTokens = "*";
15268 };
15269
15270 // node_modules/date-fns/parse/_lib/parsers/TimestampMillisecondsParser.js
15271 var TimestampMillisecondsParser = class extends Parser {
15272 priority = 20;
15273 parse(dateString) {
15274 return parseAnyDigitsSigned(dateString);
15275 }
15276 set(date, _flags, value) {
15277 return [constructFrom(date, value), { timestampIsSet: true }];
15278 }
15279 incompatibleTokens = "*";
15280 };
15281
15282 // node_modules/date-fns/parse/_lib/parsers.js
15283 var parsers = {
15284 G: new EraParser(),
15285 y: new YearParser(),
15286 Y: new LocalWeekYearParser(),
15287 R: new ISOWeekYearParser(),
15288 u: new ExtendedYearParser(),
15289 Q: new QuarterParser(),
15290 q: new StandAloneQuarterParser(),
15291 M: new MonthParser(),
15292 L: new StandAloneMonthParser(),
15293 w: new LocalWeekParser(),
15294 I: new ISOWeekParser(),
15295 d: new DateParser(),
15296 D: new DayOfYearParser(),
15297 E: new DayParser(),
15298 e: new LocalDayParser(),
15299 c: new StandAloneLocalDayParser(),
15300 i: new ISODayParser(),
15301 a: new AMPMParser(),
15302 b: new AMPMMidnightParser(),
15303 B: new DayPeriodParser(),
15304 h: new Hour1to12Parser(),
15305 H: new Hour0to23Parser(),
15306 K: new Hour0To11Parser(),
15307 k: new Hour1To24Parser(),
15308 m: new MinuteParser(),
15309 s: new SecondParser(),
15310 S: new FractionOfSecondParser(),
15311 X: new ISOTimezoneWithZParser(),
15312 x: new ISOTimezoneParser(),
15313 t: new TimestampSecondsParser(),
15314 T: new TimestampMillisecondsParser()
15315 };
15316
15317 // node_modules/date-fns/parse.js
15318 var formattingTokensRegExp2 = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g;
15319 var longFormattingTokensRegExp2 = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;
15320 var escapedStringRegExp2 = /^'([^]*?)'?$/;
15321 var doubleQuoteRegExp2 = /''/g;
15322 var notWhitespaceRegExp = /\S/;
15323 var unescapedLatinCharacterRegExp2 = /[a-zA-Z]/;
15324 function parse(dateStr, formatStr, referenceDate, options) {
15325 const invalidDate = () => constructFrom(options?.in || referenceDate, NaN);
15326 const defaultOptions2 = getDefaultOptions2();
15327 const locale = options?.locale ?? defaultOptions2.locale ?? enUS;
15328 const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1;
15329 const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0;
15330 if (!formatStr)
15331 return dateStr ? invalidDate() : toDate(referenceDate, options?.in);
15332 const subFnOptions = {
15333 firstWeekContainsDate,
15334 weekStartsOn,
15335 locale
15336 };
15337 const setters = [new DateTimezoneSetter(options?.in, referenceDate)];
15338 const tokens = formatStr.match(longFormattingTokensRegExp2).map((substring) => {
15339 const firstCharacter = substring[0];
15340 if (firstCharacter in longFormatters) {
15341 const longFormatter = longFormatters[firstCharacter];
15342 return longFormatter(substring, locale.formatLong);
15343 }
15344 return substring;
15345 }).join("").match(formattingTokensRegExp2);
15346 const usedTokens = [];
15347 for (let token of tokens) {
15348 if (!options?.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token)) {
15349 warnOrThrowProtectedError(token, formatStr, dateStr);
15350 }
15351 if (!options?.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) {
15352 warnOrThrowProtectedError(token, formatStr, dateStr);
15353 }
15354 const firstCharacter = token[0];
15355 const parser = parsers[firstCharacter];
15356 if (parser) {
15357 const { incompatibleTokens } = parser;
15358 if (Array.isArray(incompatibleTokens)) {
15359 const incompatibleToken = usedTokens.find(
15360 (usedToken) => incompatibleTokens.includes(usedToken.token) || usedToken.token === firstCharacter
15361 );
15362 if (incompatibleToken) {
15363 throw new RangeError(
15364 `The format string mustn't contain \`${incompatibleToken.fullToken}\` and \`${token}\` at the same time`
15365 );
15366 }
15367 } else if (parser.incompatibleTokens === "*" && usedTokens.length > 0) {
15368 throw new RangeError(
15369 `The format string mustn't contain \`${token}\` and any other token at the same time`
15370 );
15371 }
15372 usedTokens.push({ token: firstCharacter, fullToken: token });
15373 const parseResult = parser.run(
15374 dateStr,
15375 token,
15376 locale.match,
15377 subFnOptions
15378 );
15379 if (!parseResult) {
15380 return invalidDate();
15381 }
15382 setters.push(parseResult.setter);
15383 dateStr = parseResult.rest;
15384 } else {
15385 if (firstCharacter.match(unescapedLatinCharacterRegExp2)) {
15386 throw new RangeError(
15387 "Format string contains an unescaped latin alphabet character `" + firstCharacter + "`"
15388 );
15389 }
15390 if (token === "''") {
15391 token = "'";
15392 } else if (firstCharacter === "'") {
15393 token = cleanEscapedString2(token);
15394 }
15395 if (dateStr.indexOf(token) === 0) {
15396 dateStr = dateStr.slice(token.length);
15397 } else {
15398 return invalidDate();
15399 }
15400 }
15401 }
15402 if (dateStr.length > 0 && notWhitespaceRegExp.test(dateStr)) {
15403 return invalidDate();
15404 }
15405 const uniquePrioritySetters = setters.map((setter) => setter.priority).sort((a, b) => b - a).filter((priority, index2, array) => array.indexOf(priority) === index2).map(
15406 (priority) => setters.filter((setter) => setter.priority === priority).sort((a, b) => b.subPriority - a.subPriority)
15407 ).map((setterArray) => setterArray[0]);
15408 let date = toDate(referenceDate, options?.in);
15409 if (isNaN(+date)) return invalidDate();
15410 const flags = {};
15411 for (const setter of uniquePrioritySetters) {
15412 if (!setter.validate(date, subFnOptions)) {
15413 return invalidDate();
15414 }
15415 const result = setter.set(date, flags, subFnOptions);
15416 if (Array.isArray(result)) {
15417 date = result[0];
15418 Object.assign(flags, result[1]);
15419 } else {
15420 date = result;
15421 }
15422 }
15423 return date;
15424 }
15425 function cleanEscapedString2(input) {
15426 return input.match(escapedStringRegExp2)[1].replace(doubleQuoteRegExp2, "'");
15427 }
15428
15429 // node_modules/date-fns/isSameMonth.js
15430 function isSameMonth(laterDate, earlierDate, options) {
15431 const [laterDate_, earlierDate_] = normalizeDates(
15432 options?.in,
15433 laterDate,
15434 earlierDate
15435 );
15436 return laterDate_.getFullYear() === earlierDate_.getFullYear() && laterDate_.getMonth() === earlierDate_.getMonth();
15437 }
15438
15439 // node_modules/date-fns/isSameYear.js
15440 function isSameYear(laterDate, earlierDate, options) {
15441 const [laterDate_, earlierDate_] = normalizeDates(
15442 options?.in,
15443 laterDate,
15444 earlierDate
15445 );
15446 return laterDate_.getFullYear() === earlierDate_.getFullYear();
15447 }
15448
15449 // node_modules/date-fns/subDays.js
15450 function subDays(date, amount, options) {
15451 return addDays(date, -amount, options);
15452 }
15453
15454 // node_modules/date-fns/parseISO.js
15455 function parseISO(argument, options) {
15456 const invalidDate = () => constructFrom(options?.in, NaN);
15457 const additionalDigits = options?.additionalDigits ?? 2;
15458 const dateStrings = splitDateString(argument);
15459 let date;
15460 if (dateStrings.date) {
15461 const parseYearResult = parseYear(dateStrings.date, additionalDigits);
15462 date = parseDate(parseYearResult.restDateString, parseYearResult.year);
15463 }
15464 if (!date || isNaN(+date)) return invalidDate();
15465 const timestamp = +date;
15466 let time = 0;
15467 let offset4;
15468 if (dateStrings.time) {
15469 time = parseTime(dateStrings.time);
15470 if (isNaN(time)) return invalidDate();
15471 }
15472 if (dateStrings.timezone) {
15473 offset4 = parseTimezone(dateStrings.timezone);
15474 if (isNaN(offset4)) return invalidDate();
15475 } else {
15476 const tmpDate = new Date(timestamp + time);
15477 const result = toDate(0, options?.in);
15478 result.setFullYear(
15479 tmpDate.getUTCFullYear(),
15480 tmpDate.getUTCMonth(),
15481 tmpDate.getUTCDate()
15482 );
15483 result.setHours(
15484 tmpDate.getUTCHours(),
15485 tmpDate.getUTCMinutes(),
15486 tmpDate.getUTCSeconds(),
15487 tmpDate.getUTCMilliseconds()
15488 );
15489 return result;
15490 }
15491 return toDate(timestamp + time + offset4, options?.in);
15492 }
15493 var patterns = {
15494 dateTimeDelimiter: /[T ]/,
15495 timeZoneDelimiter: /[Z ]/i,
15496 timezone: /([Z+-].*)$/
15497 };
15498 var dateRegex = /^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/;
15499 var timeRegex = /^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/;
15500 var timezoneRegex = /^([+-])(\d{2})(?::?(\d{2}))?$/;
15501 function splitDateString(dateString) {
15502 const dateStrings = {};
15503 const array = dateString.split(patterns.dateTimeDelimiter);
15504 let timeString;
15505 if (array.length > 2) {
15506 return dateStrings;
15507 }
15508 if (/:/.test(array[0])) {
15509 timeString = array[0];
15510 } else {
15511 dateStrings.date = array[0];
15512 timeString = array[1];
15513 if (patterns.timeZoneDelimiter.test(dateStrings.date)) {
15514 dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];
15515 timeString = dateString.substr(
15516 dateStrings.date.length,
15517 dateString.length
15518 );
15519 }
15520 }
15521 if (timeString) {
15522 const token = patterns.timezone.exec(timeString);
15523 if (token) {
15524 dateStrings.time = timeString.replace(token[1], "");
15525 dateStrings.timezone = token[1];
15526 } else {
15527 dateStrings.time = timeString;
15528 }
15529 }
15530 return dateStrings;
15531 }
15532 function parseYear(dateString, additionalDigits) {
15533 const regex = new RegExp(
15534 "^(?:(\\d{4}|[+-]\\d{" + (4 + additionalDigits) + "})|(\\d{2}|[+-]\\d{" + (2 + additionalDigits) + "})$)"
15535 );
15536 const captures = dateString.match(regex);
15537 if (!captures) return { year: NaN, restDateString: "" };
15538 const year = captures[1] ? parseInt(captures[1]) : null;
15539 const century = captures[2] ? parseInt(captures[2]) : null;
15540 return {
15541 year: century === null ? year : century * 100,
15542 restDateString: dateString.slice((captures[1] || captures[2]).length)
15543 };
15544 }
15545 function parseDate(dateString, year) {
15546 if (year === null) return /* @__PURE__ */ new Date(NaN);
15547 const captures = dateString.match(dateRegex);
15548 if (!captures) return /* @__PURE__ */ new Date(NaN);
15549 const isWeekDate = !!captures[4];
15550 const dayOfYear = parseDateUnit(captures[1]);
15551 const month = parseDateUnit(captures[2]) - 1;
15552 const day = parseDateUnit(captures[3]);
15553 const week = parseDateUnit(captures[4]);
15554 const dayOfWeek = parseDateUnit(captures[5]) - 1;
15555 if (isWeekDate) {
15556 if (!validateWeekDate(year, week, dayOfWeek)) {
15557 return /* @__PURE__ */ new Date(NaN);
15558 }
15559 return dayOfISOWeekYear(year, week, dayOfWeek);
15560 } else {
15561 const date = /* @__PURE__ */ new Date(0);
15562 if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) {
15563 return /* @__PURE__ */ new Date(NaN);
15564 }
15565 date.setUTCFullYear(year, month, Math.max(dayOfYear, day));
15566 return date;
15567 }
15568 }
15569 function parseDateUnit(value) {
15570 return value ? parseInt(value) : 1;
15571 }
15572 function parseTime(timeString) {
15573 const captures = timeString.match(timeRegex);
15574 if (!captures) return NaN;
15575 const hours = parseTimeUnit(captures[1]);
15576 const minutes = parseTimeUnit(captures[2]);
15577 const seconds = parseTimeUnit(captures[3]);
15578 if (!validateTime(hours, minutes, seconds)) {
15579 return NaN;
15580 }
15581 return hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1e3;
15582 }
15583 function parseTimeUnit(value) {
15584 return value && parseFloat(value.replace(",", ".")) || 0;
15585 }
15586 function parseTimezone(timezoneString) {
15587 if (timezoneString === "Z") return 0;
15588 const captures = timezoneString.match(timezoneRegex);
15589 if (!captures) return 0;
15590 const sign = captures[1] === "+" ? -1 : 1;
15591 const hours = parseInt(captures[2]);
15592 const minutes = captures[3] && parseInt(captures[3]) || 0;
15593 if (!validateTimezone(hours, minutes)) {
15594 return NaN;
15595 }
15596 return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);
15597 }
15598 function dayOfISOWeekYear(isoWeekYear, week, day) {
15599 const date = /* @__PURE__ */ new Date(0);
15600 date.setUTCFullYear(isoWeekYear, 0, 4);
15601 const fourthOfJanuaryDay = date.getUTCDay() || 7;
15602 const diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;
15603 date.setUTCDate(date.getUTCDate() + diff);
15604 return date;
15605 }
15606 var daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
15607 function isLeapYearIndex2(year) {
15608 return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;
15609 }
15610 function validateDate(year, month, date) {
15611 return month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex2(year) ? 29 : 28));
15612 }
15613 function validateDayOfYearDate(year, dayOfYear) {
15614 return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex2(year) ? 366 : 365);
15615 }
15616 function validateWeekDate(_year, week, day) {
15617 return week >= 1 && week <= 53 && day >= 0 && day <= 6;
15618 }
15619 function validateTime(hours, minutes, seconds) {
15620 if (hours === 24) {
15621 return minutes === 0 && seconds === 0;
15622 }
15623 return seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25;
15624 }
15625 function validateTimezone(_hours, minutes) {
15626 return minutes >= 0 && minutes <= 59;
15627 }
15628
15629 // node_modules/date-fns/setMonth.js
15630 function setMonth(date, month, options) {
15631 const _date = toDate(date, options?.in);
15632 const year = _date.getFullYear();
15633 const day = _date.getDate();
15634 const midMonth = constructFrom(options?.in || date, 0);
15635 midMonth.setFullYear(year, month, 15);
15636 midMonth.setHours(0, 0, 0, 0);
15637 const daysInMonth = getDaysInMonth(midMonth);
15638 _date.setMonth(month, Math.min(day, daysInMonth));
15639 return _date;
15640 }
15641
15642 // node_modules/date-fns/setYear.js
15643 function setYear(date, year, options) {
15644 const date_ = toDate(date, options?.in);
15645 if (isNaN(+date_)) return constructFrom(options?.in || date, NaN);
15646 date_.setFullYear(year);
15647 return date_;
15648 }
15649
15650 // node_modules/date-fns/subMonths.js
15651 function subMonths(date, amount, options) {
15652 return addMonths(date, -amount, options);
15653 }
15654
15655 // node_modules/date-fns/subWeeks.js
15656 function subWeeks(date, amount, options) {
15657 return addWeeks(date, -amount, options);
15658 }
15659
15660 // node_modules/date-fns/subYears.js
15661 function subYears(date, amount, options) {
15662 return addYears(date, -amount, options);
15663 }
15664
15665 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getBroadcastWeeksInMonth.js
15666 var FIVE_WEEKS = 5;
15667 var FOUR_WEEKS = 4;
15668 function getBroadcastWeeksInMonth(month, dateLib) {
15669 const firstDayOfMonth = dateLib.startOfMonth(month);
15670 const firstDayOfWeek = firstDayOfMonth.getDay() > 0 ? firstDayOfMonth.getDay() : 7;
15671 const broadcastStartDate = dateLib.addDays(month, -firstDayOfWeek + 1);
15672 const lastDateOfLastWeek = dateLib.addDays(broadcastStartDate, FIVE_WEEKS * 7 - 1);
15673 const numberOfWeeks = dateLib.getMonth(month) === dateLib.getMonth(lastDateOfLastWeek) ? FIVE_WEEKS : FOUR_WEEKS;
15674 return numberOfWeeks;
15675 }
15676
15677 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/startOfBroadcastWeek.js
15678 function startOfBroadcastWeek(date, dateLib) {
15679 const firstOfMonth = dateLib.startOfMonth(date);
15680 const dayOfWeek = firstOfMonth.getDay();
15681 if (dayOfWeek === 1) {
15682 return firstOfMonth;
15683 } else if (dayOfWeek === 0) {
15684 return dateLib.addDays(firstOfMonth, -1 * 6);
15685 } else {
15686 return dateLib.addDays(firstOfMonth, -1 * (dayOfWeek - 1));
15687 }
15688 }
15689
15690 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/endOfBroadcastWeek.js
15691 function endOfBroadcastWeek(date, dateLib) {
15692 const startDate = startOfBroadcastWeek(date, dateLib);
15693 const numberOfWeeks = getBroadcastWeeksInMonth(date, dateLib);
15694 const endDate = dateLib.addDays(startDate, numberOfWeeks * 7 - 1);
15695 return endDate;
15696 }
15697
15698 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/locale/en-US.js
15699 var enUS2 = {
15700 ...enUS,
15701 labels: {
15702 labelDayButton: (date, modifiers, options, dateLib) => {
15703 let formatDate2;
15704 if (dateLib && typeof dateLib.format === "function") {
15705 formatDate2 = dateLib.format.bind(dateLib);
15706 } else {
15707 formatDate2 = (d, pattern) => format(d, pattern, { locale: enUS, ...options });
15708 }
15709 let label = formatDate2(date, "PPPP");
15710 if (modifiers.today)
15711 label = `Today, ${label}`;
15712 if (modifiers.selected)
15713 label = `${label}, selected`;
15714 return label;
15715 },
15716 labelMonthDropdown: "Choose the Month",
15717 labelNext: "Go to the Next Month",
15718 labelPrevious: "Go to the Previous Month",
15719 labelWeekNumber: (weekNumber) => `Week ${weekNumber}`,
15720 labelYearDropdown: "Choose the Year",
15721 labelGrid: (date, options, dateLib) => {
15722 let formatDate2;
15723 if (dateLib && typeof dateLib.format === "function") {
15724 formatDate2 = dateLib.format.bind(dateLib);
15725 } else {
15726 formatDate2 = (d, pattern) => format(d, pattern, { locale: enUS, ...options });
15727 }
15728 return formatDate2(date, "LLLL yyyy");
15729 },
15730 labelGridcell: (date, modifiers, options, dateLib) => {
15731 let formatDate2;
15732 if (dateLib && typeof dateLib.format === "function") {
15733 formatDate2 = dateLib.format.bind(dateLib);
15734 } else {
15735 formatDate2 = (d, pattern) => format(d, pattern, { locale: enUS, ...options });
15736 }
15737 let label = formatDate2(date, "PPPP");
15738 if (modifiers?.today) {
15739 label = `Today, ${label}`;
15740 }
15741 return label;
15742 },
15743 labelNav: "Navigation bar",
15744 labelWeekNumberHeader: "Week Number",
15745 labelWeekday: (date, options, dateLib) => {
15746 let formatDate2;
15747 if (dateLib && typeof dateLib.format === "function") {
15748 formatDate2 = dateLib.format.bind(dateLib);
15749 } else {
15750 formatDate2 = (d, pattern) => format(d, pattern, { locale: enUS, ...options });
15751 }
15752 return formatDate2(date, "cccc");
15753 }
15754 }
15755 };
15756
15757 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/classes/DateLib.js
15758 var DateLib = class _DateLib {
15759 /**
15760 * Creates an instance of `DateLib`.
15761 *
15762 * @param options Configuration options for the date library.
15763 * @param overrides Custom overrides for the date library functions.
15764 */
15765 constructor(options, overrides) {
15766 this.today = () => {
15767 if (this.overrides?.today) {
15768 return this.overrides.today();
15769 }
15770 if (this.options.timeZone) {
15771 return TZDate.tz(this.options.timeZone);
15772 }
15773 const DateCtor = this.options.Date ?? Date;
15774 return new DateCtor();
15775 };
15776 this.newDate = (year, monthIndex, date) => {
15777 if (this.overrides?.newDate) {
15778 return this.overrides.newDate(year, monthIndex, date);
15779 }
15780 if (this.options.timeZone) {
15781 return new TZDate(year, monthIndex, date, this.options.timeZone);
15782 }
15783 return new Date(year, monthIndex, date);
15784 };
15785 this.addDays = (date, amount) => {
15786 return this.overrides?.addDays ? this.overrides.addDays(date, amount) : addDays(date, amount);
15787 };
15788 this.addMonths = (date, amount) => {
15789 return this.overrides?.addMonths ? this.overrides.addMonths(date, amount) : addMonths(date, amount);
15790 };
15791 this.addWeeks = (date, amount) => {
15792 return this.overrides?.addWeeks ? this.overrides.addWeeks(date, amount) : addWeeks(date, amount);
15793 };
15794 this.addYears = (date, amount) => {
15795 return this.overrides?.addYears ? this.overrides.addYears(date, amount) : addYears(date, amount);
15796 };
15797 this.differenceInCalendarDays = (dateLeft, dateRight) => {
15798 return this.overrides?.differenceInCalendarDays ? this.overrides.differenceInCalendarDays(dateLeft, dateRight) : differenceInCalendarDays(dateLeft, dateRight);
15799 };
15800 this.differenceInCalendarMonths = (dateLeft, dateRight) => {
15801 return this.overrides?.differenceInCalendarMonths ? this.overrides.differenceInCalendarMonths(dateLeft, dateRight) : differenceInCalendarMonths(dateLeft, dateRight);
15802 };
15803 this.eachMonthOfInterval = (interval) => {
15804 return this.overrides?.eachMonthOfInterval ? this.overrides.eachMonthOfInterval(interval) : eachMonthOfInterval(interval);
15805 };
15806 this.eachYearOfInterval = (interval) => {
15807 const years = this.overrides?.eachYearOfInterval ? this.overrides.eachYearOfInterval(interval) : eachYearOfInterval(interval);
15808 const uniqueYears = new Set(years.map((d) => this.getYear(d)));
15809 if (uniqueYears.size === years.length) {
15810 return years;
15811 }
15812 const yearsArray = [];
15813 uniqueYears.forEach((y2) => {
15814 yearsArray.push(new Date(y2, 0, 1));
15815 });
15816 return yearsArray;
15817 };
15818 this.endOfBroadcastWeek = (date) => {
15819 return this.overrides?.endOfBroadcastWeek ? this.overrides.endOfBroadcastWeek(date) : endOfBroadcastWeek(date, this);
15820 };
15821 this.endOfISOWeek = (date) => {
15822 return this.overrides?.endOfISOWeek ? this.overrides.endOfISOWeek(date) : endOfISOWeek(date);
15823 };
15824 this.endOfMonth = (date) => {
15825 return this.overrides?.endOfMonth ? this.overrides.endOfMonth(date) : endOfMonth(date);
15826 };
15827 this.endOfWeek = (date, options2) => {
15828 return this.overrides?.endOfWeek ? this.overrides.endOfWeek(date, options2) : endOfWeek(date, this.options);
15829 };
15830 this.endOfYear = (date) => {
15831 return this.overrides?.endOfYear ? this.overrides.endOfYear(date) : endOfYear(date);
15832 };
15833 this.format = (date, formatStr, _options) => {
15834 const formatted = this.overrides?.format ? this.overrides.format(date, formatStr, this.options) : format(date, formatStr, this.options);
15835 if (this.options.numerals && this.options.numerals !== "latn") {
15836 return this.replaceDigits(formatted);
15837 }
15838 return formatted;
15839 };
15840 this.getISOWeek = (date) => {
15841 return this.overrides?.getISOWeek ? this.overrides.getISOWeek(date) : getISOWeek(date);
15842 };
15843 this.getMonth = (date, _options) => {
15844 return this.overrides?.getMonth ? this.overrides.getMonth(date, this.options) : getMonth(date, this.options);
15845 };
15846 this.getYear = (date, _options) => {
15847 return this.overrides?.getYear ? this.overrides.getYear(date, this.options) : getYear(date, this.options);
15848 };
15849 this.getWeek = (date, _options) => {
15850 return this.overrides?.getWeek ? this.overrides.getWeek(date, this.options) : getWeek(date, this.options);
15851 };
15852 this.isAfter = (date, dateToCompare) => {
15853 return this.overrides?.isAfter ? this.overrides.isAfter(date, dateToCompare) : isAfter(date, dateToCompare);
15854 };
15855 this.isBefore = (date, dateToCompare) => {
15856 return this.overrides?.isBefore ? this.overrides.isBefore(date, dateToCompare) : isBefore(date, dateToCompare);
15857 };
15858 this.isDate = (value) => {
15859 return this.overrides?.isDate ? this.overrides.isDate(value) : isDate(value);
15860 };
15861 this.isSameDay = (dateLeft, dateRight) => {
15862 return this.overrides?.isSameDay ? this.overrides.isSameDay(dateLeft, dateRight) : isSameDay(dateLeft, dateRight);
15863 };
15864 this.isSameMonth = (dateLeft, dateRight) => {
15865 return this.overrides?.isSameMonth ? this.overrides.isSameMonth(dateLeft, dateRight) : isSameMonth(dateLeft, dateRight);
15866 };
15867 this.isSameYear = (dateLeft, dateRight) => {
15868 return this.overrides?.isSameYear ? this.overrides.isSameYear(dateLeft, dateRight) : isSameYear(dateLeft, dateRight);
15869 };
15870 this.max = (dates) => {
15871 return this.overrides?.max ? this.overrides.max(dates) : max2(dates);
15872 };
15873 this.min = (dates) => {
15874 return this.overrides?.min ? this.overrides.min(dates) : min2(dates);
15875 };
15876 this.setMonth = (date, month) => {
15877 return this.overrides?.setMonth ? this.overrides.setMonth(date, month) : setMonth(date, month);
15878 };
15879 this.setYear = (date, year) => {
15880 return this.overrides?.setYear ? this.overrides.setYear(date, year) : setYear(date, year);
15881 };
15882 this.startOfBroadcastWeek = (date, _dateLib) => {
15883 return this.overrides?.startOfBroadcastWeek ? this.overrides.startOfBroadcastWeek(date, this) : startOfBroadcastWeek(date, this);
15884 };
15885 this.startOfDay = (date) => {
15886 return this.overrides?.startOfDay ? this.overrides.startOfDay(date) : startOfDay(date);
15887 };
15888 this.startOfISOWeek = (date) => {
15889 return this.overrides?.startOfISOWeek ? this.overrides.startOfISOWeek(date) : startOfISOWeek(date);
15890 };
15891 this.startOfMonth = (date) => {
15892 return this.overrides?.startOfMonth ? this.overrides.startOfMonth(date) : startOfMonth(date);
15893 };
15894 this.startOfWeek = (date, _options) => {
15895 return this.overrides?.startOfWeek ? this.overrides.startOfWeek(date, this.options) : startOfWeek(date, this.options);
15896 };
15897 this.startOfYear = (date) => {
15898 return this.overrides?.startOfYear ? this.overrides.startOfYear(date) : startOfYear(date);
15899 };
15900 this.options = { locale: enUS2, ...options };
15901 this.overrides = overrides;
15902 }
15903 /**
15904 * Generates a mapping of Arabic digits (0-9) to the target numbering system
15905 * digits.
15906 *
15907 * @since 9.5.0
15908 * @returns A record mapping Arabic digits to the target numerals.
15909 */
15910 getDigitMap() {
15911 const { numerals = "latn" } = this.options;
15912 const formatter = new Intl.NumberFormat("en-US", {
15913 numberingSystem: numerals
15914 });
15915 const digitMap = {};
15916 for (let i = 0; i < 10; i++) {
15917 digitMap[i.toString()] = formatter.format(i);
15918 }
15919 return digitMap;
15920 }
15921 /**
15922 * Replaces Arabic digits in a string with the target numbering system digits.
15923 *
15924 * @since 9.5.0
15925 * @param input The string containing Arabic digits.
15926 * @returns The string with digits replaced.
15927 */
15928 replaceDigits(input) {
15929 const digitMap = this.getDigitMap();
15930 return input.replace(/\d/g, (digit) => digitMap[digit] || digit);
15931 }
15932 /**
15933 * Formats a number using the configured numbering system.
15934 *
15935 * @since 9.5.0
15936 * @param value The number to format.
15937 * @returns The formatted number as a string.
15938 */
15939 formatNumber(value) {
15940 return this.replaceDigits(value.toString());
15941 }
15942 /**
15943 * Returns the preferred ordering for month and year labels for the current
15944 * locale.
15945 */
15946 getMonthYearOrder() {
15947 const code = this.options.locale?.code;
15948 if (!code) {
15949 return "month-first";
15950 }
15951 return _DateLib.yearFirstLocales.has(code) ? "year-first" : "month-first";
15952 }
15953 /**
15954 * Formats the month/year pair respecting locale conventions.
15955 *
15956 * @since 9.11.0
15957 */
15958 formatMonthYear(date) {
15959 const { locale, timeZone, numerals } = this.options;
15960 const localeCode = locale?.code;
15961 if (localeCode && _DateLib.yearFirstLocales.has(localeCode)) {
15962 try {
15963 const intl = new Intl.DateTimeFormat(localeCode, {
15964 month: "long",
15965 year: "numeric",
15966 timeZone,
15967 numberingSystem: numerals
15968 });
15969 const formatted = intl.format(date);
15970 return formatted;
15971 } catch {
15972 }
15973 }
15974 const pattern = this.getMonthYearOrder() === "year-first" ? "y LLLL" : "LLLL y";
15975 return this.format(date, pattern);
15976 }
15977 };
15978 DateLib.yearFirstLocales = /* @__PURE__ */ new Set([
15979 "eu",
15980 "hu",
15981 "ja",
15982 "ja-Hira",
15983 "ja-JP",
15984 "ko",
15985 "ko-KR",
15986 "lt",
15987 "lt-LT",
15988 "lv",
15989 "lv-LV",
15990 "mn",
15991 "mn-MN",
15992 "zh",
15993 "zh-CN",
15994 "zh-HK",
15995 "zh-TW"
15996 ]);
15997 var defaultDateLib = new DateLib();
15998
15999 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/classes/CalendarDay.js
16000 var CalendarDay = class {
16001 constructor(date, displayMonth, dateLib = defaultDateLib) {
16002 this.date = date;
16003 this.displayMonth = displayMonth;
16004 this.outside = Boolean(displayMonth && !dateLib.isSameMonth(date, displayMonth));
16005 this.dateLib = dateLib;
16006 this.isoDate = dateLib.format(date, "yyyy-MM-dd");
16007 this.displayMonthId = dateLib.format(displayMonth, "yyyy-MM");
16008 this.dateMonthId = dateLib.format(date, "yyyy-MM");
16009 }
16010 /**
16011 * Checks if this day is equal to another `CalendarDay`, considering both the
16012 * date and the displayed month.
16013 *
16014 * @param day The `CalendarDay` to compare with.
16015 * @returns `true` if the days are equal, otherwise `false`.
16016 */
16017 isEqualTo(day) {
16018 return this.dateLib.isSameDay(day.date, this.date) && this.dateLib.isSameMonth(day.displayMonth, this.displayMonth);
16019 }
16020 };
16021
16022 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/classes/CalendarMonth.js
16023 var CalendarMonth = class {
16024 constructor(month, weeks) {
16025 this.date = month;
16026 this.weeks = weeks;
16027 }
16028 };
16029
16030 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/classes/CalendarWeek.js
16031 var CalendarWeek = class {
16032 constructor(weekNumber, days) {
16033 this.days = days;
16034 this.weekNumber = weekNumber;
16035 }
16036 };
16037
16038 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/custom-components.js
16039 var custom_components_exports = {};
16040 __export(custom_components_exports, {
16041 CaptionLabel: () => CaptionLabel,
16042 Chevron: () => Chevron,
16043 Day: () => Day,
16044 DayButton: () => DayButton,
16045 Dropdown: () => Dropdown,
16046 DropdownNav: () => DropdownNav,
16047 Footer: () => Footer,
16048 Month: () => Month,
16049 MonthCaption: () => MonthCaption,
16050 MonthGrid: () => MonthGrid,
16051 Months: () => Months,
16052 MonthsDropdown: () => MonthsDropdown,
16053 Nav: () => Nav,
16054 NextMonthButton: () => NextMonthButton,
16055 Option: () => Option,
16056 PreviousMonthButton: () => PreviousMonthButton,
16057 Root: () => Root2,
16058 Select: () => Select,
16059 Week: () => Week,
16060 WeekNumber: () => WeekNumber,
16061 WeekNumberHeader: () => WeekNumberHeader,
16062 Weekday: () => Weekday,
16063 Weekdays: () => Weekdays,
16064 Weeks: () => Weeks,
16065 YearsDropdown: () => YearsDropdown
16066 });
16067
16068 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/CaptionLabel.js
16069 var import_react4 = __toESM(require_react(), 1);
16070 function CaptionLabel(props) {
16071 return import_react4.default.createElement("span", { ...props });
16072 }
16073
16074 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Chevron.js
16075 var import_react5 = __toESM(require_react(), 1);
16076 function Chevron(props) {
16077 const { size: size4 = 24, orientation = "left", className, style } = props;
16078 return import_react5.default.createElement(
16079 "svg",
16080 { className, style, width: size4, height: size4, viewBox: "0 0 24 24" },
16081 orientation === "up" && import_react5.default.createElement("polygon", { points: "6.77 17 12.5 11.43 18.24 17 20 15.28 12.5 8 5 15.28" }),
16082 orientation === "down" && import_react5.default.createElement("polygon", { points: "6.77 8 12.5 13.57 18.24 8 20 9.72 12.5 17 5 9.72" }),
16083 orientation === "left" && import_react5.default.createElement("polygon", { points: "16 18.112 9.81111111 12 16 5.87733333 14.0888889 4 6 12 14.0888889 20" }),
16084 orientation === "right" && import_react5.default.createElement("polygon", { points: "8 18.112 14.18888889 12 8 5.87733333 9.91111111 4 18 12 9.91111111 20" })
16085 );
16086 }
16087
16088 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Day.js
16089 var import_react6 = __toESM(require_react(), 1);
16090 function Day(props) {
16091 const { day, modifiers, ...tdProps } = props;
16092 return import_react6.default.createElement("td", { ...tdProps });
16093 }
16094
16095 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/DayButton.js
16096 var import_react7 = __toESM(require_react(), 1);
16097 function DayButton(props) {
16098 const { day, modifiers, ...buttonProps } = props;
16099 const ref = import_react7.default.useRef(null);
16100 import_react7.default.useEffect(() => {
16101 if (modifiers.focused)
16102 ref.current?.focus();
16103 }, [modifiers.focused]);
16104 return import_react7.default.createElement("button", { ref, ...buttonProps });
16105 }
16106
16107 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Dropdown.js
16108 var import_react9 = __toESM(require_react(), 1);
16109
16110 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/UI.js
16111 var UI;
16112 (function(UI2) {
16113 UI2["Root"] = "root";
16114 UI2["Chevron"] = "chevron";
16115 UI2["Day"] = "day";
16116 UI2["DayButton"] = "day_button";
16117 UI2["CaptionLabel"] = "caption_label";
16118 UI2["Dropdowns"] = "dropdowns";
16119 UI2["Dropdown"] = "dropdown";
16120 UI2["DropdownRoot"] = "dropdown_root";
16121 UI2["Footer"] = "footer";
16122 UI2["MonthGrid"] = "month_grid";
16123 UI2["MonthCaption"] = "month_caption";
16124 UI2["MonthsDropdown"] = "months_dropdown";
16125 UI2["Month"] = "month";
16126 UI2["Months"] = "months";
16127 UI2["Nav"] = "nav";
16128 UI2["NextMonthButton"] = "button_next";
16129 UI2["PreviousMonthButton"] = "button_previous";
16130 UI2["Week"] = "week";
16131 UI2["Weeks"] = "weeks";
16132 UI2["Weekday"] = "weekday";
16133 UI2["Weekdays"] = "weekdays";
16134 UI2["WeekNumber"] = "week_number";
16135 UI2["WeekNumberHeader"] = "week_number_header";
16136 UI2["YearsDropdown"] = "years_dropdown";
16137 })(UI || (UI = {}));
16138 var DayFlag;
16139 (function(DayFlag2) {
16140 DayFlag2["disabled"] = "disabled";
16141 DayFlag2["hidden"] = "hidden";
16142 DayFlag2["outside"] = "outside";
16143 DayFlag2["focused"] = "focused";
16144 DayFlag2["today"] = "today";
16145 })(DayFlag || (DayFlag = {}));
16146 var SelectionState;
16147 (function(SelectionState2) {
16148 SelectionState2["range_end"] = "range_end";
16149 SelectionState2["range_middle"] = "range_middle";
16150 SelectionState2["range_start"] = "range_start";
16151 SelectionState2["selected"] = "selected";
16152 })(SelectionState || (SelectionState = {}));
16153 var Animation;
16154 (function(Animation2) {
16155 Animation2["weeks_before_enter"] = "weeks_before_enter";
16156 Animation2["weeks_before_exit"] = "weeks_before_exit";
16157 Animation2["weeks_after_enter"] = "weeks_after_enter";
16158 Animation2["weeks_after_exit"] = "weeks_after_exit";
16159 Animation2["caption_after_enter"] = "caption_after_enter";
16160 Animation2["caption_after_exit"] = "caption_after_exit";
16161 Animation2["caption_before_enter"] = "caption_before_enter";
16162 Animation2["caption_before_exit"] = "caption_before_exit";
16163 })(Animation || (Animation = {}));
16164
16165 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/useDayPicker.js
16166 var import_react8 = __toESM(require_react(), 1);
16167 var dayPickerContext = (0, import_react8.createContext)(void 0);
16168 function useDayPicker() {
16169 const context = (0, import_react8.useContext)(dayPickerContext);
16170 if (context === void 0) {
16171 throw new Error("useDayPicker() must be used within a custom component.");
16172 }
16173 return context;
16174 }
16175
16176 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Dropdown.js
16177 function Dropdown(props) {
16178 const { options, className, ...selectProps } = props;
16179 const { classNames, components, styles } = useDayPicker();
16180 const cssClassSelect = [classNames[UI.Dropdown], className].join(" ");
16181 const selectedOption = options?.find(({ value }) => value === selectProps.value);
16182 return import_react9.default.createElement(
16183 "span",
16184 { "data-disabled": selectProps.disabled, className: classNames[UI.DropdownRoot], style: styles?.[UI.DropdownRoot] },
16185 import_react9.default.createElement(components.Select, { className: cssClassSelect, ...selectProps }, options?.map(({ value, label, disabled: disabled2 }) => import_react9.default.createElement(components.Option, { key: value, value, disabled: disabled2 }, label))),
16186 import_react9.default.createElement(
16187 "span",
16188 { className: classNames[UI.CaptionLabel], style: styles?.[UI.CaptionLabel], "aria-hidden": true },
16189 selectedOption?.label,
16190 import_react9.default.createElement(components.Chevron, { orientation: "down", size: 18, className: classNames[UI.Chevron], style: styles?.[UI.Chevron] })
16191 )
16192 );
16193 }
16194
16195 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/DropdownNav.js
16196 var import_react10 = __toESM(require_react(), 1);
16197 function DropdownNav(props) {
16198 return import_react10.default.createElement("div", { ...props });
16199 }
16200
16201 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Footer.js
16202 var import_react11 = __toESM(require_react(), 1);
16203 function Footer(props) {
16204 return import_react11.default.createElement("div", { ...props });
16205 }
16206
16207 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Month.js
16208 var import_react12 = __toESM(require_react(), 1);
16209 function Month(props) {
16210 const { calendarMonth, displayIndex, ...divProps } = props;
16211 return import_react12.default.createElement("div", { ...divProps }, props.children);
16212 }
16213
16214 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/MonthCaption.js
16215 var import_react13 = __toESM(require_react(), 1);
16216 function MonthCaption(props) {
16217 const { calendarMonth, displayIndex, ...divProps } = props;
16218 return import_react13.default.createElement("div", { ...divProps });
16219 }
16220
16221 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/MonthGrid.js
16222 var import_react14 = __toESM(require_react(), 1);
16223 function MonthGrid(props) {
16224 return import_react14.default.createElement("table", { ...props });
16225 }
16226
16227 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Months.js
16228 var import_react15 = __toESM(require_react(), 1);
16229 function Months(props) {
16230 return import_react15.default.createElement("div", { ...props });
16231 }
16232
16233 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/MonthsDropdown.js
16234 var import_react16 = __toESM(require_react(), 1);
16235 function MonthsDropdown(props) {
16236 const { components } = useDayPicker();
16237 return import_react16.default.createElement(components.Dropdown, { ...props });
16238 }
16239
16240 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Nav.js
16241 var import_react17 = __toESM(require_react(), 1);
16242 function Nav(props) {
16243 const { onPreviousClick, onNextClick, previousMonth, nextMonth, ...navProps } = props;
16244 const { components, classNames, styles, labels: { labelPrevious: labelPrevious2, labelNext: labelNext2 } } = useDayPicker();
16245 const handleNextClick = (0, import_react17.useCallback)((e) => {
16246 if (nextMonth) {
16247 onNextClick?.(e);
16248 }
16249 }, [nextMonth, onNextClick]);
16250 const handlePreviousClick = (0, import_react17.useCallback)((e) => {
16251 if (previousMonth) {
16252 onPreviousClick?.(e);
16253 }
16254 }, [previousMonth, onPreviousClick]);
16255 return import_react17.default.createElement(
16256 "nav",
16257 { ...navProps },
16258 import_react17.default.createElement(
16259 components.PreviousMonthButton,
16260 { 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 },
16261 import_react17.default.createElement(components.Chevron, { disabled: previousMonth ? void 0 : true, className: classNames[UI.Chevron], style: styles?.[UI.Chevron], orientation: "left" })
16262 ),
16263 import_react17.default.createElement(
16264 components.NextMonthButton,
16265 { 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 },
16266 import_react17.default.createElement(components.Chevron, { disabled: nextMonth ? void 0 : true, orientation: "right", className: classNames[UI.Chevron], style: styles?.[UI.Chevron] })
16267 )
16268 );
16269 }
16270
16271 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/NextMonthButton.js
16272 var import_react18 = __toESM(require_react(), 1);
16273 function NextMonthButton(props) {
16274 return import_react18.default.createElement("button", { ...props });
16275 }
16276
16277 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Option.js
16278 var import_react19 = __toESM(require_react(), 1);
16279 function Option(props) {
16280 return import_react19.default.createElement("option", { ...props });
16281 }
16282
16283 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/PreviousMonthButton.js
16284 var import_react20 = __toESM(require_react(), 1);
16285 function PreviousMonthButton(props) {
16286 return import_react20.default.createElement("button", { ...props });
16287 }
16288
16289 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Root.js
16290 var import_react21 = __toESM(require_react(), 1);
16291 function Root2(props) {
16292 const { rootRef, ...rest } = props;
16293 return import_react21.default.createElement("div", { ...rest, ref: rootRef });
16294 }
16295
16296 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Select.js
16297 var import_react22 = __toESM(require_react(), 1);
16298 function Select(props) {
16299 return import_react22.default.createElement("select", { ...props });
16300 }
16301
16302 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Week.js
16303 var import_react23 = __toESM(require_react(), 1);
16304 function Week(props) {
16305 const { week, ...trProps } = props;
16306 return import_react23.default.createElement("tr", { ...trProps });
16307 }
16308
16309 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Weekday.js
16310 var import_react24 = __toESM(require_react(), 1);
16311 function Weekday(props) {
16312 return import_react24.default.createElement("th", { ...props });
16313 }
16314
16315 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Weekdays.js
16316 var import_react25 = __toESM(require_react(), 1);
16317 function Weekdays(props) {
16318 return import_react25.default.createElement(
16319 "thead",
16320 { "aria-hidden": true },
16321 import_react25.default.createElement("tr", { ...props })
16322 );
16323 }
16324
16325 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/WeekNumber.js
16326 var import_react26 = __toESM(require_react(), 1);
16327 function WeekNumber(props) {
16328 const { week, ...thProps } = props;
16329 return import_react26.default.createElement("th", { ...thProps });
16330 }
16331
16332 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/WeekNumberHeader.js
16333 var import_react27 = __toESM(require_react(), 1);
16334 function WeekNumberHeader(props) {
16335 return import_react27.default.createElement("th", { ...props });
16336 }
16337
16338 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/Weeks.js
16339 var import_react28 = __toESM(require_react(), 1);
16340 function Weeks(props) {
16341 return import_react28.default.createElement("tbody", { ...props });
16342 }
16343
16344 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/components/YearsDropdown.js
16345 var import_react29 = __toESM(require_react(), 1);
16346 function YearsDropdown(props) {
16347 const { components } = useDayPicker();
16348 return import_react29.default.createElement(components.Dropdown, { ...props });
16349 }
16350
16351 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/DayPicker.js
16352 var import_react34 = __toESM(require_react(), 1);
16353
16354 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/utils/rangeIncludesDate.js
16355 function rangeIncludesDate(range, date, excludeEnds = false, dateLib = defaultDateLib) {
16356 let { from, to } = range;
16357 const { differenceInCalendarDays: differenceInCalendarDays2, isSameDay: isSameDay2 } = dateLib;
16358 if (from && to) {
16359 const isRangeInverted = differenceInCalendarDays2(to, from) < 0;
16360 if (isRangeInverted) {
16361 [from, to] = [to, from];
16362 }
16363 const isInRange = differenceInCalendarDays2(date, from) >= (excludeEnds ? 1 : 0) && differenceInCalendarDays2(to, date) >= (excludeEnds ? 1 : 0);
16364 return isInRange;
16365 }
16366 if (!excludeEnds && to) {
16367 return isSameDay2(to, date);
16368 }
16369 if (!excludeEnds && from) {
16370 return isSameDay2(from, date);
16371 }
16372 return false;
16373 }
16374
16375 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/utils/typeguards.js
16376 function isDateInterval(matcher) {
16377 return Boolean(matcher && typeof matcher === "object" && "before" in matcher && "after" in matcher);
16378 }
16379 function isDateRange(value) {
16380 return Boolean(value && typeof value === "object" && "from" in value);
16381 }
16382 function isDateAfterType(value) {
16383 return Boolean(value && typeof value === "object" && "after" in value);
16384 }
16385 function isDateBeforeType(value) {
16386 return Boolean(value && typeof value === "object" && "before" in value);
16387 }
16388 function isDayOfWeekType(value) {
16389 return Boolean(value && typeof value === "object" && "dayOfWeek" in value);
16390 }
16391 function isDatesArray(value, dateLib) {
16392 return Array.isArray(value) && value.every(dateLib.isDate);
16393 }
16394
16395 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/utils/dateMatchModifiers.js
16396 function dateMatchModifiers(date, matchers, dateLib = defaultDateLib) {
16397 const matchersArr = !Array.isArray(matchers) ? [matchers] : matchers;
16398 const { isSameDay: isSameDay2, differenceInCalendarDays: differenceInCalendarDays2, isAfter: isAfter2 } = dateLib;
16399 return matchersArr.some((matcher) => {
16400 if (typeof matcher === "boolean") {
16401 return matcher;
16402 }
16403 if (dateLib.isDate(matcher)) {
16404 return isSameDay2(date, matcher);
16405 }
16406 if (isDatesArray(matcher, dateLib)) {
16407 return matcher.some((matcherDate) => isSameDay2(date, matcherDate));
16408 }
16409 if (isDateRange(matcher)) {
16410 return rangeIncludesDate(matcher, date, false, dateLib);
16411 }
16412 if (isDayOfWeekType(matcher)) {
16413 if (!Array.isArray(matcher.dayOfWeek)) {
16414 return matcher.dayOfWeek === date.getDay();
16415 }
16416 return matcher.dayOfWeek.includes(date.getDay());
16417 }
16418 if (isDateInterval(matcher)) {
16419 const diffBefore = differenceInCalendarDays2(matcher.before, date);
16420 const diffAfter = differenceInCalendarDays2(matcher.after, date);
16421 const isDayBefore = diffBefore > 0;
16422 const isDayAfter = diffAfter < 0;
16423 const isClosedInterval = isAfter2(matcher.before, matcher.after);
16424 if (isClosedInterval) {
16425 return isDayAfter && isDayBefore;
16426 } else {
16427 return isDayBefore || isDayAfter;
16428 }
16429 }
16430 if (isDateAfterType(matcher)) {
16431 return differenceInCalendarDays2(date, matcher.after) > 0;
16432 }
16433 if (isDateBeforeType(matcher)) {
16434 return differenceInCalendarDays2(matcher.before, date) > 0;
16435 }
16436 if (typeof matcher === "function") {
16437 return matcher(date);
16438 }
16439 return false;
16440 });
16441 }
16442
16443 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/createGetModifiers.js
16444 function createGetModifiers(days, props, navStart, navEnd, dateLib) {
16445 const { disabled: disabled2, hidden, modifiers, showOutsideDays, broadcastCalendar, today = dateLib.today() } = props;
16446 const { isSameDay: isSameDay2, isSameMonth: isSameMonth2, startOfMonth: startOfMonth2, isBefore: isBefore2, endOfMonth: endOfMonth2, isAfter: isAfter2 } = dateLib;
16447 const computedNavStart = navStart && startOfMonth2(navStart);
16448 const computedNavEnd = navEnd && endOfMonth2(navEnd);
16449 const internalModifiersMap = {
16450 [DayFlag.focused]: [],
16451 [DayFlag.outside]: [],
16452 [DayFlag.disabled]: [],
16453 [DayFlag.hidden]: [],
16454 [DayFlag.today]: []
16455 };
16456 const customModifiersMap = {};
16457 for (const day of days) {
16458 const { date, displayMonth } = day;
16459 const isOutside = Boolean(displayMonth && !isSameMonth2(date, displayMonth));
16460 const isBeforeNavStart = Boolean(computedNavStart && isBefore2(date, computedNavStart));
16461 const isAfterNavEnd = Boolean(computedNavEnd && isAfter2(date, computedNavEnd));
16462 const isDisabled = Boolean(disabled2 && dateMatchModifiers(date, disabled2, dateLib));
16463 const isHidden = Boolean(hidden && dateMatchModifiers(date, hidden, dateLib)) || isBeforeNavStart || isAfterNavEnd || // Broadcast calendar will show outside days as default
16464 !broadcastCalendar && !showOutsideDays && isOutside || broadcastCalendar && showOutsideDays === false && isOutside;
16465 const isToday = isSameDay2(date, today);
16466 if (isOutside)
16467 internalModifiersMap.outside.push(day);
16468 if (isDisabled)
16469 internalModifiersMap.disabled.push(day);
16470 if (isHidden)
16471 internalModifiersMap.hidden.push(day);
16472 if (isToday)
16473 internalModifiersMap.today.push(day);
16474 if (modifiers) {
16475 Object.keys(modifiers).forEach((name) => {
16476 const modifierValue = modifiers?.[name];
16477 const isMatch = modifierValue ? dateMatchModifiers(date, modifierValue, dateLib) : false;
16478 if (!isMatch)
16479 return;
16480 if (customModifiersMap[name]) {
16481 customModifiersMap[name].push(day);
16482 } else {
16483 customModifiersMap[name] = [day];
16484 }
16485 });
16486 }
16487 }
16488 return (day) => {
16489 const dayFlags = {
16490 [DayFlag.focused]: false,
16491 [DayFlag.disabled]: false,
16492 [DayFlag.hidden]: false,
16493 [DayFlag.outside]: false,
16494 [DayFlag.today]: false
16495 };
16496 const customModifiers = {};
16497 for (const name in internalModifiersMap) {
16498 const days2 = internalModifiersMap[name];
16499 dayFlags[name] = days2.some((d) => d === day);
16500 }
16501 for (const name in customModifiersMap) {
16502 customModifiers[name] = customModifiersMap[name].some((d) => d === day);
16503 }
16504 return {
16505 ...dayFlags,
16506 // custom modifiers should override all the previous ones
16507 ...customModifiers
16508 };
16509 };
16510 }
16511
16512 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getClassNamesForModifiers.js
16513 function getClassNamesForModifiers(modifiers, classNames, modifiersClassNames = {}) {
16514 const modifierClassNames = Object.entries(modifiers).filter(([, active]) => active === true).reduce((previousValue, [key]) => {
16515 if (modifiersClassNames[key]) {
16516 previousValue.push(modifiersClassNames[key]);
16517 } else if (classNames[DayFlag[key]]) {
16518 previousValue.push(classNames[DayFlag[key]]);
16519 } else if (classNames[SelectionState[key]]) {
16520 previousValue.push(classNames[SelectionState[key]]);
16521 }
16522 return previousValue;
16523 }, [classNames[UI.Day]]);
16524 return modifierClassNames;
16525 }
16526
16527 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getComponents.js
16528 function getComponents(customComponents) {
16529 return {
16530 ...custom_components_exports,
16531 ...customComponents
16532 };
16533 }
16534
16535 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getDataAttributes.js
16536 function getDataAttributes(props) {
16537 const dataAttributes = {
16538 "data-mode": props.mode ?? void 0,
16539 "data-required": "required" in props ? props.required : void 0,
16540 "data-multiple-months": props.numberOfMonths && props.numberOfMonths > 1 || void 0,
16541 "data-week-numbers": props.showWeekNumber || void 0,
16542 "data-broadcast-calendar": props.broadcastCalendar || void 0,
16543 "data-nav-layout": props.navLayout || void 0
16544 };
16545 Object.entries(props).forEach(([key, val]) => {
16546 if (key.startsWith("data-")) {
16547 dataAttributes[key] = val;
16548 }
16549 });
16550 return dataAttributes;
16551 }
16552
16553 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getDefaultClassNames.js
16554 function getDefaultClassNames() {
16555 const classNames = {};
16556 for (const key in UI) {
16557 classNames[UI[key]] = `rdp-${UI[key]}`;
16558 }
16559 for (const key in DayFlag) {
16560 classNames[DayFlag[key]] = `rdp-${DayFlag[key]}`;
16561 }
16562 for (const key in SelectionState) {
16563 classNames[SelectionState[key]] = `rdp-${SelectionState[key]}`;
16564 }
16565 for (const key in Animation) {
16566 classNames[Animation[key]] = `rdp-${Animation[key]}`;
16567 }
16568 return classNames;
16569 }
16570
16571 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/formatters/index.js
16572 var formatters_exports = {};
16573 __export(formatters_exports, {
16574 formatCaption: () => formatCaption,
16575 formatDay: () => formatDay,
16576 formatMonthDropdown: () => formatMonthDropdown,
16577 formatWeekNumber: () => formatWeekNumber,
16578 formatWeekNumberHeader: () => formatWeekNumberHeader,
16579 formatWeekdayName: () => formatWeekdayName,
16580 formatYearDropdown: () => formatYearDropdown
16581 });
16582
16583 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/formatters/formatCaption.js
16584 function formatCaption(month, options, dateLib) {
16585 const lib = dateLib ?? new DateLib(options);
16586 return lib.formatMonthYear(month);
16587 }
16588
16589 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/formatters/formatDay.js
16590 function formatDay(date, options, dateLib) {
16591 return (dateLib ?? new DateLib(options)).format(date, "d");
16592 }
16593
16594 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/formatters/formatMonthDropdown.js
16595 function formatMonthDropdown(month, dateLib = defaultDateLib) {
16596 return dateLib.format(month, "LLLL");
16597 }
16598
16599 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/formatters/formatWeekdayName.js
16600 function formatWeekdayName(weekday, options, dateLib) {
16601 return (dateLib ?? new DateLib(options)).format(weekday, "cccccc");
16602 }
16603
16604 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/formatters/formatWeekNumber.js
16605 function formatWeekNumber(weekNumber, dateLib = defaultDateLib) {
16606 if (weekNumber < 10) {
16607 return dateLib.formatNumber(`0${weekNumber.toLocaleString()}`);
16608 }
16609 return dateLib.formatNumber(`${weekNumber.toLocaleString()}`);
16610 }
16611
16612 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/formatters/formatWeekNumberHeader.js
16613 function formatWeekNumberHeader() {
16614 return ``;
16615 }
16616
16617 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/formatters/formatYearDropdown.js
16618 function formatYearDropdown(year, dateLib = defaultDateLib) {
16619 return dateLib.format(year, "yyyy");
16620 }
16621
16622 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getFormatters.js
16623 function getFormatters(customFormatters) {
16624 return {
16625 ...formatters_exports,
16626 ...customFormatters
16627 };
16628 }
16629
16630 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/index.js
16631 var labels_exports = {};
16632 __export(labels_exports, {
16633 labelDayButton: () => labelDayButton,
16634 labelGrid: () => labelGrid,
16635 labelGridcell: () => labelGridcell,
16636 labelMonthDropdown: () => labelMonthDropdown,
16637 labelNav: () => labelNav,
16638 labelNext: () => labelNext,
16639 labelPrevious: () => labelPrevious,
16640 labelWeekNumber: () => labelWeekNumber,
16641 labelWeekNumberHeader: () => labelWeekNumberHeader,
16642 labelWeekday: () => labelWeekday,
16643 labelYearDropdown: () => labelYearDropdown
16644 });
16645
16646 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelDayButton.js
16647 function labelDayButton(date, modifiers, options, dateLib) {
16648 let label = (dateLib ?? new DateLib(options)).format(date, "PPPP");
16649 if (modifiers.today)
16650 label = `Today, ${label}`;
16651 if (modifiers.selected)
16652 label = `${label}, selected`;
16653 return label;
16654 }
16655
16656 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelGrid.js
16657 function labelGrid(date, options, dateLib) {
16658 const lib = dateLib ?? new DateLib(options);
16659 return lib.formatMonthYear(date);
16660 }
16661
16662 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelGridcell.js
16663 function labelGridcell(date, modifiers, options, dateLib) {
16664 let label = (dateLib ?? new DateLib(options)).format(date, "PPPP");
16665 if (modifiers?.today) {
16666 label = `Today, ${label}`;
16667 }
16668 return label;
16669 }
16670
16671 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelMonthDropdown.js
16672 function labelMonthDropdown(_options) {
16673 return "Choose the Month";
16674 }
16675
16676 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelNav.js
16677 function labelNav() {
16678 return "";
16679 }
16680
16681 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelNext.js
16682 var defaultLabel = "Go to the Next Month";
16683 function labelNext(_month, _options) {
16684 return defaultLabel;
16685 }
16686
16687 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelPrevious.js
16688 function labelPrevious(_month) {
16689 return "Go to the Previous Month";
16690 }
16691
16692 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelWeekday.js
16693 function labelWeekday(date, options, dateLib) {
16694 return (dateLib ?? new DateLib(options)).format(date, "cccc");
16695 }
16696
16697 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelWeekNumber.js
16698 function labelWeekNumber(weekNumber, _options) {
16699 return `Week ${weekNumber}`;
16700 }
16701
16702 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelWeekNumberHeader.js
16703 function labelWeekNumberHeader(_options) {
16704 return "Week Number";
16705 }
16706
16707 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/labels/labelYearDropdown.js
16708 function labelYearDropdown(_options) {
16709 return "Choose the Year";
16710 }
16711
16712 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getLabels.js
16713 var resolveLabel = (defaultLabel2, customLabel, localeLabel) => {
16714 if (customLabel)
16715 return customLabel;
16716 if (localeLabel) {
16717 return typeof localeLabel === "function" ? localeLabel : (..._args) => localeLabel;
16718 }
16719 return defaultLabel2;
16720 };
16721 function getLabels(customLabels, options) {
16722 const localeLabels = options.locale?.labels ?? {};
16723 return {
16724 ...labels_exports,
16725 ...customLabels ?? {},
16726 labelDayButton: resolveLabel(labelDayButton, customLabels?.labelDayButton, localeLabels.labelDayButton),
16727 labelMonthDropdown: resolveLabel(labelMonthDropdown, customLabels?.labelMonthDropdown, localeLabels.labelMonthDropdown),
16728 labelNext: resolveLabel(labelNext, customLabels?.labelNext, localeLabels.labelNext),
16729 labelPrevious: resolveLabel(labelPrevious, customLabels?.labelPrevious, localeLabels.labelPrevious),
16730 labelWeekNumber: resolveLabel(labelWeekNumber, customLabels?.labelWeekNumber, localeLabels.labelWeekNumber),
16731 labelYearDropdown: resolveLabel(labelYearDropdown, customLabels?.labelYearDropdown, localeLabels.labelYearDropdown),
16732 labelGrid: resolveLabel(labelGrid, customLabels?.labelGrid, localeLabels.labelGrid),
16733 labelGridcell: resolveLabel(labelGridcell, customLabels?.labelGridcell, localeLabels.labelGridcell),
16734 labelNav: resolveLabel(labelNav, customLabels?.labelNav, localeLabels.labelNav),
16735 labelWeekNumberHeader: resolveLabel(labelWeekNumberHeader, customLabels?.labelWeekNumberHeader, localeLabels.labelWeekNumberHeader),
16736 labelWeekday: resolveLabel(labelWeekday, customLabels?.labelWeekday, localeLabels.labelWeekday)
16737 };
16738 }
16739
16740 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getMonthOptions.js
16741 function getMonthOptions(displayMonth, navStart, navEnd, formatters2, dateLib) {
16742 const { startOfMonth: startOfMonth2, startOfYear: startOfYear2, endOfYear: endOfYear2, eachMonthOfInterval: eachMonthOfInterval2, getMonth: getMonth2 } = dateLib;
16743 const months = eachMonthOfInterval2({
16744 start: startOfYear2(displayMonth),
16745 end: endOfYear2(displayMonth)
16746 });
16747 const options = months.map((month) => {
16748 const label = formatters2.formatMonthDropdown(month, dateLib);
16749 const value = getMonth2(month);
16750 const disabled2 = navStart && month < startOfMonth2(navStart) || navEnd && month > startOfMonth2(navEnd) || false;
16751 return { value, label, disabled: disabled2 };
16752 });
16753 return options;
16754 }
16755
16756 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getStyleForModifiers.js
16757 function getStyleForModifiers(dayModifiers, styles = {}, modifiersStyles = {}) {
16758 let style = { ...styles?.[UI.Day] };
16759 Object.entries(dayModifiers).filter(([, active]) => active === true).forEach(([modifier]) => {
16760 style = {
16761 ...style,
16762 ...modifiersStyles?.[modifier]
16763 };
16764 });
16765 return style;
16766 }
16767
16768 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getWeekdays.js
16769 function getWeekdays(dateLib, ISOWeek, broadcastCalendar, today) {
16770 const referenceToday = today ?? dateLib.today();
16771 const start = broadcastCalendar ? dateLib.startOfBroadcastWeek(referenceToday, dateLib) : ISOWeek ? dateLib.startOfISOWeek(referenceToday) : dateLib.startOfWeek(referenceToday);
16772 const days = [];
16773 for (let i = 0; i < 7; i++) {
16774 const day = dateLib.addDays(start, i);
16775 days.push(day);
16776 }
16777 return days;
16778 }
16779
16780 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getYearOptions.js
16781 function getYearOptions(navStart, navEnd, formatters2, dateLib, reverse = false) {
16782 if (!navStart)
16783 return void 0;
16784 if (!navEnd)
16785 return void 0;
16786 const { startOfYear: startOfYear2, endOfYear: endOfYear2, eachYearOfInterval: eachYearOfInterval2, getYear: getYear2 } = dateLib;
16787 const firstNavYear = startOfYear2(navStart);
16788 const lastNavYear = endOfYear2(navEnd);
16789 const years = eachYearOfInterval2({ start: firstNavYear, end: lastNavYear });
16790 if (reverse)
16791 years.reverse();
16792 return years.map((year) => {
16793 const label = formatters2.formatYearDropdown(year, dateLib);
16794 return {
16795 value: getYear2(year),
16796 label,
16797 disabled: false
16798 };
16799 });
16800 }
16801
16802 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/noonDateLib.js
16803 function createNoonOverrides(timeZone, options = {}) {
16804 const { weekStartsOn, locale } = options;
16805 const fallbackWeekStartsOn = weekStartsOn ?? locale?.options?.weekStartsOn ?? 0;
16806 const toNoonTZDate = (date) => {
16807 const normalizedDate = typeof date === "number" || typeof date === "string" ? new Date(date) : date;
16808 return new TZDate(normalizedDate.getFullYear(), normalizedDate.getMonth(), normalizedDate.getDate(), 12, 0, 0, timeZone);
16809 };
16810 const toCalendarDate2 = (date) => {
16811 const zoned = toNoonTZDate(date);
16812 return new Date(zoned.getFullYear(), zoned.getMonth(), zoned.getDate(), 0, 0, 0, 0);
16813 };
16814 return {
16815 today: () => {
16816 return toNoonTZDate(TZDate.tz(timeZone));
16817 },
16818 newDate: (year, monthIndex, date) => {
16819 return new TZDate(year, monthIndex, date, 12, 0, 0, timeZone);
16820 },
16821 startOfDay: (date) => {
16822 return toNoonTZDate(date);
16823 },
16824 startOfWeek: (date, options2) => {
16825 const base = toNoonTZDate(date);
16826 const weekStartsOnValue = options2?.weekStartsOn ?? fallbackWeekStartsOn;
16827 const diff = (base.getDay() - weekStartsOnValue + 7) % 7;
16828 base.setDate(base.getDate() - diff);
16829 return base;
16830 },
16831 startOfISOWeek: (date) => {
16832 const base = toNoonTZDate(date);
16833 const diff = (base.getDay() - 1 + 7) % 7;
16834 base.setDate(base.getDate() - diff);
16835 return base;
16836 },
16837 startOfMonth: (date) => {
16838 const base = toNoonTZDate(date);
16839 base.setDate(1);
16840 return base;
16841 },
16842 startOfYear: (date) => {
16843 const base = toNoonTZDate(date);
16844 base.setMonth(0, 1);
16845 return base;
16846 },
16847 endOfWeek: (date, options2) => {
16848 const base = toNoonTZDate(date);
16849 const weekStartsOnValue = options2?.weekStartsOn ?? fallbackWeekStartsOn;
16850 const endDow = (weekStartsOnValue + 6) % 7;
16851 const diff = (endDow - base.getDay() + 7) % 7;
16852 base.setDate(base.getDate() + diff);
16853 return base;
16854 },
16855 endOfISOWeek: (date) => {
16856 const base = toNoonTZDate(date);
16857 const diff = (7 - base.getDay()) % 7;
16858 base.setDate(base.getDate() + diff);
16859 return base;
16860 },
16861 endOfMonth: (date) => {
16862 const base = toNoonTZDate(date);
16863 base.setMonth(base.getMonth() + 1, 0);
16864 return base;
16865 },
16866 endOfYear: (date) => {
16867 const base = toNoonTZDate(date);
16868 base.setMonth(11, 31);
16869 return base;
16870 },
16871 eachMonthOfInterval: (interval) => {
16872 const start = toNoonTZDate(interval.start);
16873 const end = toNoonTZDate(interval.end);
16874 const result = [];
16875 const cursor = new TZDate(start.getFullYear(), start.getMonth(), 1, 12, 0, 0, timeZone);
16876 const endKey = end.getFullYear() * 12 + end.getMonth();
16877 while (cursor.getFullYear() * 12 + cursor.getMonth() <= endKey) {
16878 result.push(new TZDate(cursor, timeZone));
16879 cursor.setMonth(cursor.getMonth() + 1, 1);
16880 }
16881 return result;
16882 },
16883 // Normalize to noon once before arithmetic (avoid DST/midnight edge cases),
16884 // mutate the same TZDate, and return it.
16885 addDays: (date, amount) => {
16886 const base = toNoonTZDate(date);
16887 base.setDate(base.getDate() + amount);
16888 return base;
16889 },
16890 addWeeks: (date, amount) => {
16891 const base = toNoonTZDate(date);
16892 base.setDate(base.getDate() + amount * 7);
16893 return base;
16894 },
16895 addMonths: (date, amount) => {
16896 const base = toNoonTZDate(date);
16897 base.setMonth(base.getMonth() + amount);
16898 return base;
16899 },
16900 addYears: (date, amount) => {
16901 const base = toNoonTZDate(date);
16902 base.setFullYear(base.getFullYear() + amount);
16903 return base;
16904 },
16905 eachYearOfInterval: (interval) => {
16906 const start = toNoonTZDate(interval.start);
16907 const end = toNoonTZDate(interval.end);
16908 const years = [];
16909 const cursor = new TZDate(start.getFullYear(), 0, 1, 12, 0, 0, timeZone);
16910 while (cursor.getFullYear() <= end.getFullYear()) {
16911 years.push(new TZDate(cursor, timeZone));
16912 cursor.setFullYear(cursor.getFullYear() + 1, 0, 1);
16913 }
16914 return years;
16915 },
16916 getWeek: (date, options2) => {
16917 const base = toCalendarDate2(date);
16918 return getWeek(base, {
16919 weekStartsOn: options2?.weekStartsOn ?? fallbackWeekStartsOn,
16920 firstWeekContainsDate: options2?.firstWeekContainsDate ?? locale?.options?.firstWeekContainsDate ?? 1
16921 });
16922 },
16923 getISOWeek: (date) => {
16924 const base = toCalendarDate2(date);
16925 return getISOWeek(base);
16926 },
16927 differenceInCalendarDays: (dateLeft, dateRight) => {
16928 const left = toCalendarDate2(dateLeft);
16929 const right = toCalendarDate2(dateRight);
16930 return differenceInCalendarDays(left, right);
16931 },
16932 differenceInCalendarMonths: (dateLeft, dateRight) => {
16933 const left = toCalendarDate2(dateLeft);
16934 const right = toCalendarDate2(dateRight);
16935 return differenceInCalendarMonths(left, right);
16936 }
16937 };
16938 }
16939
16940 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/useAnimation.js
16941 var import_react30 = __toESM(require_react(), 1);
16942 var asHtmlElement = (element) => {
16943 if (element instanceof HTMLElement)
16944 return element;
16945 return null;
16946 };
16947 var queryMonthEls = (element) => [
16948 ...element.querySelectorAll("[data-animated-month]") ?? []
16949 ];
16950 var queryMonthEl = (element) => asHtmlElement(element.querySelector("[data-animated-month]"));
16951 var queryCaptionEl = (element) => asHtmlElement(element.querySelector("[data-animated-caption]"));
16952 var queryWeeksEl = (element) => asHtmlElement(element.querySelector("[data-animated-weeks]"));
16953 var queryNavEl = (element) => asHtmlElement(element.querySelector("[data-animated-nav]"));
16954 var queryWeekdaysEl = (element) => asHtmlElement(element.querySelector("[data-animated-weekdays]"));
16955 function useAnimation(rootElRef, enabled, { classNames, months, focused, dateLib }) {
16956 const previousRootElSnapshotRef = (0, import_react30.useRef)(null);
16957 const previousMonthsRef = (0, import_react30.useRef)(months);
16958 const animatingRef = (0, import_react30.useRef)(false);
16959 (0, import_react30.useLayoutEffect)(() => {
16960 const previousMonths = previousMonthsRef.current;
16961 previousMonthsRef.current = months;
16962 if (!enabled || !rootElRef.current || // safety check because the ref can be set to anything by consumers
16963 !(rootElRef.current instanceof HTMLElement) || // validation required for the animation to work as expected
16964 months.length === 0 || previousMonths.length === 0 || months.length !== previousMonths.length) {
16965 return;
16966 }
16967 const isSameMonth2 = dateLib.isSameMonth(months[0].date, previousMonths[0].date);
16968 const isAfterPreviousMonth = dateLib.isAfter(months[0].date, previousMonths[0].date);
16969 const captionAnimationClass = isAfterPreviousMonth ? classNames[Animation.caption_after_enter] : classNames[Animation.caption_before_enter];
16970 const weeksAnimationClass = isAfterPreviousMonth ? classNames[Animation.weeks_after_enter] : classNames[Animation.weeks_before_enter];
16971 const previousRootElSnapshot = previousRootElSnapshotRef.current;
16972 const rootElSnapshot = rootElRef.current.cloneNode(true);
16973 if (rootElSnapshot instanceof HTMLElement) {
16974 const currentMonthElsSnapshot = queryMonthEls(rootElSnapshot);
16975 currentMonthElsSnapshot.forEach((currentMonthElSnapshot) => {
16976 if (!(currentMonthElSnapshot instanceof HTMLElement))
16977 return;
16978 const previousMonthElSnapshot = queryMonthEl(currentMonthElSnapshot);
16979 if (previousMonthElSnapshot && currentMonthElSnapshot.contains(previousMonthElSnapshot)) {
16980 currentMonthElSnapshot.removeChild(previousMonthElSnapshot);
16981 }
16982 const captionEl = queryCaptionEl(currentMonthElSnapshot);
16983 if (captionEl) {
16984 captionEl.classList.remove(captionAnimationClass);
16985 }
16986 const weeksEl = queryWeeksEl(currentMonthElSnapshot);
16987 if (weeksEl) {
16988 weeksEl.classList.remove(weeksAnimationClass);
16989 }
16990 });
16991 previousRootElSnapshotRef.current = rootElSnapshot;
16992 } else {
16993 previousRootElSnapshotRef.current = null;
16994 }
16995 if (animatingRef.current || isSameMonth2 || // skip animation if a day is focused because it can cause issues to the animation and is better for a11y
16996 focused) {
16997 return;
16998 }
16999 const previousMonthEls = previousRootElSnapshot instanceof HTMLElement ? queryMonthEls(previousRootElSnapshot) : [];
17000 const currentMonthEls = queryMonthEls(rootElRef.current);
17001 if (currentMonthEls?.every((el) => el instanceof HTMLElement) && previousMonthEls?.every((el) => el instanceof HTMLElement)) {
17002 animatingRef.current = true;
17003 const cleanUpFunctions = [];
17004 rootElRef.current.style.isolation = "isolate";
17005 const navEl = queryNavEl(rootElRef.current);
17006 if (navEl) {
17007 navEl.style.zIndex = "1";
17008 }
17009 currentMonthEls.forEach((currentMonthEl, index2) => {
17010 const previousMonthEl = previousMonthEls[index2];
17011 if (!previousMonthEl) {
17012 return;
17013 }
17014 currentMonthEl.style.position = "relative";
17015 currentMonthEl.style.overflow = "hidden";
17016 const captionEl = queryCaptionEl(currentMonthEl);
17017 if (captionEl) {
17018 captionEl.classList.add(captionAnimationClass);
17019 }
17020 const weeksEl = queryWeeksEl(currentMonthEl);
17021 if (weeksEl) {
17022 weeksEl.classList.add(weeksAnimationClass);
17023 }
17024 const cleanUp = () => {
17025 animatingRef.current = false;
17026 if (rootElRef.current) {
17027 rootElRef.current.style.isolation = "";
17028 }
17029 if (navEl) {
17030 navEl.style.zIndex = "";
17031 }
17032 if (captionEl) {
17033 captionEl.classList.remove(captionAnimationClass);
17034 }
17035 if (weeksEl) {
17036 weeksEl.classList.remove(weeksAnimationClass);
17037 }
17038 currentMonthEl.style.position = "";
17039 currentMonthEl.style.overflow = "";
17040 if (currentMonthEl.contains(previousMonthEl)) {
17041 currentMonthEl.removeChild(previousMonthEl);
17042 }
17043 };
17044 cleanUpFunctions.push(cleanUp);
17045 previousMonthEl.style.pointerEvents = "none";
17046 previousMonthEl.style.position = "absolute";
17047 previousMonthEl.style.overflow = "hidden";
17048 previousMonthEl.setAttribute("aria-hidden", "true");
17049 const previousWeekdaysEl = queryWeekdaysEl(previousMonthEl);
17050 if (previousWeekdaysEl) {
17051 previousWeekdaysEl.style.opacity = "0";
17052 }
17053 const previousCaptionEl = queryCaptionEl(previousMonthEl);
17054 if (previousCaptionEl) {
17055 previousCaptionEl.classList.add(isAfterPreviousMonth ? classNames[Animation.caption_before_exit] : classNames[Animation.caption_after_exit]);
17056 previousCaptionEl.addEventListener("animationend", cleanUp);
17057 }
17058 const previousWeeksEl = queryWeeksEl(previousMonthEl);
17059 if (previousWeeksEl) {
17060 previousWeeksEl.classList.add(isAfterPreviousMonth ? classNames[Animation.weeks_before_exit] : classNames[Animation.weeks_after_exit]);
17061 }
17062 currentMonthEl.insertBefore(previousMonthEl, currentMonthEl.firstChild);
17063 });
17064 }
17065 });
17066 }
17067
17068 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/useCalendar.js
17069 var import_react32 = __toESM(require_react(), 1);
17070
17071 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getDates.js
17072 function getDates(displayMonths, maxDate, props, dateLib) {
17073 const firstMonth = displayMonths[0];
17074 const lastMonth = displayMonths[displayMonths.length - 1];
17075 const { ISOWeek, fixedWeeks, broadcastCalendar } = props ?? {};
17076 const { addDays: addDays2, differenceInCalendarDays: differenceInCalendarDays2, differenceInCalendarMonths: differenceInCalendarMonths2, endOfBroadcastWeek: endOfBroadcastWeek2, endOfISOWeek: endOfISOWeek2, endOfMonth: endOfMonth2, endOfWeek: endOfWeek2, isAfter: isAfter2, startOfBroadcastWeek: startOfBroadcastWeek2, startOfISOWeek: startOfISOWeek2, startOfWeek: startOfWeek2 } = dateLib;
17077 const startWeekFirstDate = broadcastCalendar ? startOfBroadcastWeek2(firstMonth, dateLib) : ISOWeek ? startOfISOWeek2(firstMonth) : startOfWeek2(firstMonth);
17078 const displayMonthsWeekEnd = broadcastCalendar ? endOfBroadcastWeek2(lastMonth) : ISOWeek ? endOfISOWeek2(endOfMonth2(lastMonth)) : endOfWeek2(endOfMonth2(lastMonth));
17079 const constraintWeekEnd = maxDate && (broadcastCalendar ? endOfBroadcastWeek2(maxDate) : ISOWeek ? endOfISOWeek2(maxDate) : endOfWeek2(maxDate));
17080 const gridEndDate = constraintWeekEnd && isAfter2(displayMonthsWeekEnd, constraintWeekEnd) ? constraintWeekEnd : displayMonthsWeekEnd;
17081 const nOfDays = differenceInCalendarDays2(gridEndDate, startWeekFirstDate);
17082 const nOfMonths = differenceInCalendarMonths2(lastMonth, firstMonth) + 1;
17083 const dates = [];
17084 for (let i = 0; i <= nOfDays; i++) {
17085 const date = addDays2(startWeekFirstDate, i);
17086 dates.push(date);
17087 }
17088 const nrOfDaysWithFixedWeeks = broadcastCalendar ? 35 : 42;
17089 const extraDates = nrOfDaysWithFixedWeeks * nOfMonths;
17090 if (fixedWeeks && dates.length < extraDates) {
17091 const daysToAdd = extraDates - dates.length;
17092 for (let i = 0; i < daysToAdd; i++) {
17093 const date = addDays2(dates[dates.length - 1], 1);
17094 dates.push(date);
17095 }
17096 }
17097 return dates;
17098 }
17099
17100 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getDays.js
17101 function getDays(calendarMonths) {
17102 const initialDays = [];
17103 return calendarMonths.reduce((days, month) => {
17104 const weekDays = month.weeks.reduce((weekDays2, week) => {
17105 return weekDays2.concat(week.days.slice());
17106 }, initialDays.slice());
17107 return days.concat(weekDays.slice());
17108 }, initialDays.slice());
17109 }
17110
17111 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getDisplayMonths.js
17112 function getDisplayMonths(firstDisplayedMonth, calendarEndMonth, props, dateLib) {
17113 const { numberOfMonths = 1 } = props;
17114 const months = [];
17115 for (let i = 0; i < numberOfMonths; i++) {
17116 const month = dateLib.addMonths(firstDisplayedMonth, i);
17117 if (calendarEndMonth && month > calendarEndMonth) {
17118 break;
17119 }
17120 months.push(month);
17121 }
17122 return months;
17123 }
17124
17125 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getInitialMonth.js
17126 function getInitialMonth(props, navStart, navEnd, dateLib) {
17127 const { month, defaultMonth, today = dateLib.today(), numberOfMonths = 1 } = props;
17128 let initialMonth = month || defaultMonth || today;
17129 const { differenceInCalendarMonths: differenceInCalendarMonths2, addMonths: addMonths2, startOfMonth: startOfMonth2 } = dateLib;
17130 if (navEnd && differenceInCalendarMonths2(navEnd, initialMonth) < numberOfMonths - 1) {
17131 const offset4 = -1 * (numberOfMonths - 1);
17132 initialMonth = addMonths2(navEnd, offset4);
17133 }
17134 if (navStart && differenceInCalendarMonths2(initialMonth, navStart) < 0) {
17135 initialMonth = navStart;
17136 }
17137 return startOfMonth2(initialMonth);
17138 }
17139
17140 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getMonths.js
17141 function getMonths(displayMonths, dates, props, dateLib) {
17142 const { addDays: addDays2, endOfBroadcastWeek: endOfBroadcastWeek2, endOfISOWeek: endOfISOWeek2, endOfMonth: endOfMonth2, endOfWeek: endOfWeek2, getISOWeek: getISOWeek2, getWeek: getWeek2, startOfBroadcastWeek: startOfBroadcastWeek2, startOfISOWeek: startOfISOWeek2, startOfWeek: startOfWeek2 } = dateLib;
17143 const dayPickerMonths = displayMonths.reduce((months, month) => {
17144 const firstDateOfFirstWeek = props.broadcastCalendar ? startOfBroadcastWeek2(month, dateLib) : props.ISOWeek ? startOfISOWeek2(month) : startOfWeek2(month);
17145 const lastDateOfLastWeek = props.broadcastCalendar ? endOfBroadcastWeek2(month) : props.ISOWeek ? endOfISOWeek2(endOfMonth2(month)) : endOfWeek2(endOfMonth2(month));
17146 const monthDates = dates.filter((date) => {
17147 return date >= firstDateOfFirstWeek && date <= lastDateOfLastWeek;
17148 });
17149 const nrOfDaysWithFixedWeeks = props.broadcastCalendar ? 35 : 42;
17150 if (props.fixedWeeks && monthDates.length < nrOfDaysWithFixedWeeks) {
17151 const extraDates = dates.filter((date) => {
17152 const daysToAdd = nrOfDaysWithFixedWeeks - monthDates.length;
17153 return date > lastDateOfLastWeek && date <= addDays2(lastDateOfLastWeek, daysToAdd);
17154 });
17155 monthDates.push(...extraDates);
17156 }
17157 const weeks = monthDates.reduce((weeks2, date) => {
17158 const weekNumber = props.ISOWeek ? getISOWeek2(date) : getWeek2(date);
17159 const week = weeks2.find((week2) => week2.weekNumber === weekNumber);
17160 const day = new CalendarDay(date, month, dateLib);
17161 if (!week) {
17162 weeks2.push(new CalendarWeek(weekNumber, [day]));
17163 } else {
17164 week.days.push(day);
17165 }
17166 return weeks2;
17167 }, []);
17168 const dayPickerMonth = new CalendarMonth(month, weeks);
17169 months.push(dayPickerMonth);
17170 return months;
17171 }, []);
17172 if (!props.reverseMonths) {
17173 return dayPickerMonths;
17174 } else {
17175 return dayPickerMonths.reverse();
17176 }
17177 }
17178
17179 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getNavMonth.js
17180 function getNavMonths(props, dateLib) {
17181 let { startMonth, endMonth } = props;
17182 const { startOfYear: startOfYear2, startOfDay: startOfDay2, startOfMonth: startOfMonth2, endOfMonth: endOfMonth2, addYears: addYears2, endOfYear: endOfYear2, today } = dateLib;
17183 const hasYearDropdown = props.captionLayout === "dropdown" || props.captionLayout === "dropdown-years";
17184 if (startMonth) {
17185 startMonth = startOfMonth2(startMonth);
17186 } else if (!startMonth && hasYearDropdown) {
17187 startMonth = startOfYear2(addYears2(props.today ?? today(), -100));
17188 }
17189 if (endMonth) {
17190 endMonth = endOfMonth2(endMonth);
17191 } else if (!endMonth && hasYearDropdown) {
17192 endMonth = endOfYear2(props.today ?? today());
17193 }
17194 return [
17195 startMonth ? startOfDay2(startMonth) : startMonth,
17196 endMonth ? startOfDay2(endMonth) : endMonth
17197 ];
17198 }
17199
17200 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getNextMonth.js
17201 function getNextMonth(firstDisplayedMonth, calendarEndMonth, options, dateLib) {
17202 if (options.disableNavigation) {
17203 return void 0;
17204 }
17205 const { pagedNavigation, numberOfMonths = 1 } = options;
17206 const { startOfMonth: startOfMonth2, addMonths: addMonths2, differenceInCalendarMonths: differenceInCalendarMonths2 } = dateLib;
17207 const offset4 = pagedNavigation ? numberOfMonths : 1;
17208 const month = startOfMonth2(firstDisplayedMonth);
17209 if (!calendarEndMonth) {
17210 return addMonths2(month, offset4);
17211 }
17212 const monthsDiff = differenceInCalendarMonths2(calendarEndMonth, firstDisplayedMonth);
17213 if (monthsDiff < numberOfMonths) {
17214 return void 0;
17215 }
17216 return addMonths2(month, offset4);
17217 }
17218
17219 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getPreviousMonth.js
17220 function getPreviousMonth(firstDisplayedMonth, calendarStartMonth, options, dateLib) {
17221 if (options.disableNavigation) {
17222 return void 0;
17223 }
17224 const { pagedNavigation, numberOfMonths } = options;
17225 const { startOfMonth: startOfMonth2, addMonths: addMonths2, differenceInCalendarMonths: differenceInCalendarMonths2 } = dateLib;
17226 const offset4 = pagedNavigation ? numberOfMonths ?? 1 : 1;
17227 const month = startOfMonth2(firstDisplayedMonth);
17228 if (!calendarStartMonth) {
17229 return addMonths2(month, -offset4);
17230 }
17231 const monthsDiff = differenceInCalendarMonths2(month, calendarStartMonth);
17232 if (monthsDiff <= 0) {
17233 return void 0;
17234 }
17235 return addMonths2(month, -offset4);
17236 }
17237
17238 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getWeeks.js
17239 function getWeeks(months) {
17240 const initialWeeks = [];
17241 return months.reduce((weeks, month) => {
17242 return weeks.concat(month.weeks.slice());
17243 }, initialWeeks.slice());
17244 }
17245
17246 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/useControlledValue.js
17247 var import_react31 = __toESM(require_react(), 1);
17248 function useControlledValue(defaultValue, controlledValue) {
17249 const [uncontrolledValue, setValue] = (0, import_react31.useState)(defaultValue);
17250 const value = controlledValue === void 0 ? uncontrolledValue : controlledValue;
17251 return [value, setValue];
17252 }
17253
17254 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/useCalendar.js
17255 function useCalendar(props, dateLib) {
17256 const [navStart, navEnd] = getNavMonths(props, dateLib);
17257 const { startOfMonth: startOfMonth2, endOfMonth: endOfMonth2 } = dateLib;
17258 const initialMonth = getInitialMonth(props, navStart, navEnd, dateLib);
17259 const [firstMonth, setFirstMonth] = useControlledValue(
17260 initialMonth,
17261 // initialMonth is always computed from props.month if provided
17262 props.month ? initialMonth : void 0
17263 );
17264 (0, import_react32.useEffect)(() => {
17265 const newInitialMonth = getInitialMonth(props, navStart, navEnd, dateLib);
17266 setFirstMonth(newInitialMonth);
17267 }, [props.timeZone]);
17268 const { months, weeks, days, previousMonth, nextMonth } = (0, import_react32.useMemo)(() => {
17269 const displayMonths = getDisplayMonths(firstMonth, navEnd, { numberOfMonths: props.numberOfMonths }, dateLib);
17270 const dates = getDates(displayMonths, props.endMonth ? endOfMonth2(props.endMonth) : void 0, {
17271 ISOWeek: props.ISOWeek,
17272 fixedWeeks: props.fixedWeeks,
17273 broadcastCalendar: props.broadcastCalendar
17274 }, dateLib);
17275 const months2 = getMonths(displayMonths, dates, {
17276 broadcastCalendar: props.broadcastCalendar,
17277 fixedWeeks: props.fixedWeeks,
17278 ISOWeek: props.ISOWeek,
17279 reverseMonths: props.reverseMonths
17280 }, dateLib);
17281 const weeks2 = getWeeks(months2);
17282 const days2 = getDays(months2);
17283 const previousMonth2 = getPreviousMonth(firstMonth, navStart, props, dateLib);
17284 const nextMonth2 = getNextMonth(firstMonth, navEnd, props, dateLib);
17285 return {
17286 months: months2,
17287 weeks: weeks2,
17288 days: days2,
17289 previousMonth: previousMonth2,
17290 nextMonth: nextMonth2
17291 };
17292 }, [
17293 dateLib,
17294 firstMonth.getTime(),
17295 navEnd?.getTime(),
17296 navStart?.getTime(),
17297 props.disableNavigation,
17298 props.broadcastCalendar,
17299 props.endMonth?.getTime(),
17300 props.fixedWeeks,
17301 props.ISOWeek,
17302 props.numberOfMonths,
17303 props.pagedNavigation,
17304 props.reverseMonths
17305 ]);
17306 const { disableNavigation, onMonthChange } = props;
17307 const isDayInCalendar = (day) => weeks.some((week) => week.days.some((d) => d.isEqualTo(day)));
17308 const goToMonth = (date) => {
17309 if (disableNavigation) {
17310 return;
17311 }
17312 let newMonth = startOfMonth2(date);
17313 if (navStart && newMonth < startOfMonth2(navStart)) {
17314 newMonth = startOfMonth2(navStart);
17315 }
17316 if (navEnd && newMonth > startOfMonth2(navEnd)) {
17317 newMonth = startOfMonth2(navEnd);
17318 }
17319 setFirstMonth(newMonth);
17320 onMonthChange?.(newMonth);
17321 };
17322 const goToDay = (day) => {
17323 if (isDayInCalendar(day)) {
17324 return;
17325 }
17326 goToMonth(day.date);
17327 };
17328 const calendar = {
17329 months,
17330 weeks,
17331 days,
17332 navStart,
17333 navEnd,
17334 previousMonth,
17335 nextMonth,
17336 goToMonth,
17337 goToDay
17338 };
17339 return calendar;
17340 }
17341
17342 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/useFocus.js
17343 var import_react33 = __toESM(require_react(), 1);
17344
17345 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/calculateFocusTarget.js
17346 var FocusTargetPriority;
17347 (function(FocusTargetPriority2) {
17348 FocusTargetPriority2[FocusTargetPriority2["Today"] = 0] = "Today";
17349 FocusTargetPriority2[FocusTargetPriority2["Selected"] = 1] = "Selected";
17350 FocusTargetPriority2[FocusTargetPriority2["LastFocused"] = 2] = "LastFocused";
17351 FocusTargetPriority2[FocusTargetPriority2["FocusedModifier"] = 3] = "FocusedModifier";
17352 })(FocusTargetPriority || (FocusTargetPriority = {}));
17353 function isFocusableDay(modifiers) {
17354 return !modifiers[DayFlag.disabled] && !modifiers[DayFlag.hidden] && !modifiers[DayFlag.outside];
17355 }
17356 function calculateFocusTarget(days, getModifiers, isSelected, lastFocused) {
17357 let focusTarget;
17358 let foundFocusTargetPriority = -1;
17359 for (const day of days) {
17360 const modifiers = getModifiers(day);
17361 if (isFocusableDay(modifiers)) {
17362 if (modifiers[DayFlag.focused] && foundFocusTargetPriority < FocusTargetPriority.FocusedModifier) {
17363 focusTarget = day;
17364 foundFocusTargetPriority = FocusTargetPriority.FocusedModifier;
17365 } else if (lastFocused?.isEqualTo(day) && foundFocusTargetPriority < FocusTargetPriority.LastFocused) {
17366 focusTarget = day;
17367 foundFocusTargetPriority = FocusTargetPriority.LastFocused;
17368 } else if (isSelected(day.date) && foundFocusTargetPriority < FocusTargetPriority.Selected) {
17369 focusTarget = day;
17370 foundFocusTargetPriority = FocusTargetPriority.Selected;
17371 } else if (modifiers[DayFlag.today] && foundFocusTargetPriority < FocusTargetPriority.Today) {
17372 focusTarget = day;
17373 foundFocusTargetPriority = FocusTargetPriority.Today;
17374 }
17375 }
17376 }
17377 if (!focusTarget) {
17378 focusTarget = days.find((day) => isFocusableDay(getModifiers(day)));
17379 }
17380 return focusTarget;
17381 }
17382
17383 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getFocusableDate.js
17384 function getFocusableDate(moveBy, moveDir, refDate, navStart, navEnd, props, dateLib) {
17385 const { ISOWeek, broadcastCalendar } = props;
17386 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;
17387 const moveFns = {
17388 day: addDays2,
17389 week: addWeeks2,
17390 month: addMonths2,
17391 year: addYears2,
17392 startOfWeek: (date) => broadcastCalendar ? startOfBroadcastWeek2(date, dateLib) : ISOWeek ? startOfISOWeek2(date) : startOfWeek2(date),
17393 endOfWeek: (date) => broadcastCalendar ? endOfBroadcastWeek2(date) : ISOWeek ? endOfISOWeek2(date) : endOfWeek2(date)
17394 };
17395 let focusableDate = moveFns[moveBy](refDate, moveDir === "after" ? 1 : -1);
17396 if (moveDir === "before" && navStart) {
17397 focusableDate = max3([navStart, focusableDate]);
17398 } else if (moveDir === "after" && navEnd) {
17399 focusableDate = min3([navEnd, focusableDate]);
17400 }
17401 return focusableDate;
17402 }
17403
17404 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/helpers/getNextFocus.js
17405 function getNextFocus(moveBy, moveDir, refDay, calendarStartMonth, calendarEndMonth, props, dateLib, attempt = 0) {
17406 if (attempt > 365) {
17407 return void 0;
17408 }
17409 const focusableDate = getFocusableDate(moveBy, moveDir, refDay.date, calendarStartMonth, calendarEndMonth, props, dateLib);
17410 const isDisabled = Boolean(props.disabled && dateMatchModifiers(focusableDate, props.disabled, dateLib));
17411 const isHidden = Boolean(props.hidden && dateMatchModifiers(focusableDate, props.hidden, dateLib));
17412 const targetMonth = focusableDate;
17413 const focusDay = new CalendarDay(focusableDate, targetMonth, dateLib);
17414 if (!isDisabled && !isHidden) {
17415 return focusDay;
17416 }
17417 return getNextFocus(moveBy, moveDir, focusDay, calendarStartMonth, calendarEndMonth, props, dateLib, attempt + 1);
17418 }
17419
17420 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/useFocus.js
17421 function useFocus2(props, calendar, getModifiers, isSelected, dateLib) {
17422 const { autoFocus } = props;
17423 const [lastFocused, setLastFocused] = (0, import_react33.useState)();
17424 const focusTarget = calculateFocusTarget(calendar.days, getModifiers, isSelected || (() => false), lastFocused);
17425 const [focusedDay, setFocused] = (0, import_react33.useState)(autoFocus ? focusTarget : void 0);
17426 const blur = () => {
17427 setLastFocused(focusedDay);
17428 setFocused(void 0);
17429 };
17430 const moveFocus = (moveBy, moveDir) => {
17431 if (!focusedDay)
17432 return;
17433 const nextFocus = getNextFocus(moveBy, moveDir, focusedDay, calendar.navStart, calendar.navEnd, props, dateLib);
17434 if (!nextFocus)
17435 return;
17436 if (props.disableNavigation) {
17437 const isNextInCalendar = calendar.days.some((day) => day.isEqualTo(nextFocus));
17438 if (!isNextInCalendar) {
17439 return;
17440 }
17441 }
17442 calendar.goToDay(nextFocus);
17443 setFocused(nextFocus);
17444 };
17445 const isFocusTarget = (day) => {
17446 return Boolean(focusTarget?.isEqualTo(day));
17447 };
17448 const useFocus3 = {
17449 isFocusTarget,
17450 setFocused,
17451 focused: focusedDay,
17452 blur,
17453 moveFocus
17454 };
17455 return useFocus3;
17456 }
17457
17458 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/selection/useMulti.js
17459 function useMulti(props, dateLib) {
17460 const { selected: initiallySelected, required, onSelect } = props;
17461 const [internallySelected, setSelected] = useControlledValue(initiallySelected, onSelect ? initiallySelected : void 0);
17462 const selected = !onSelect ? internallySelected : initiallySelected;
17463 const { isSameDay: isSameDay2 } = dateLib;
17464 const isSelected = (date) => {
17465 return selected?.some((d) => isSameDay2(d, date)) ?? false;
17466 };
17467 const { min: min3, max: max3 } = props;
17468 const select3 = (triggerDate, modifiers, e) => {
17469 let newDates = [...selected ?? []];
17470 if (isSelected(triggerDate)) {
17471 if (selected?.length === min3) {
17472 return;
17473 }
17474 if (required && selected?.length === 1) {
17475 return;
17476 }
17477 newDates = selected?.filter((d) => !isSameDay2(d, triggerDate));
17478 } else {
17479 if (selected?.length === max3) {
17480 newDates = [triggerDate];
17481 } else {
17482 newDates = [...newDates, triggerDate];
17483 }
17484 }
17485 if (!onSelect) {
17486 setSelected(newDates);
17487 }
17488 onSelect?.(newDates, triggerDate, modifiers, e);
17489 return newDates;
17490 };
17491 return {
17492 selected,
17493 select: select3,
17494 isSelected
17495 };
17496 }
17497
17498 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/utils/addToRange.js
17499 function addToRange(date, initialRange, min3 = 0, max3 = 0, required = false, dateLib = defaultDateLib) {
17500 const { from, to } = initialRange || {};
17501 const { isSameDay: isSameDay2, isAfter: isAfter2, isBefore: isBefore2 } = dateLib;
17502 let range;
17503 if (!from && !to) {
17504 range = { from: date, to: min3 > 0 ? void 0 : date };
17505 } else if (from && !to) {
17506 if (isSameDay2(from, date)) {
17507 if (min3 === 0) {
17508 range = { from, to: date };
17509 } else if (required) {
17510 range = { from, to: void 0 };
17511 } else {
17512 range = void 0;
17513 }
17514 } else if (isBefore2(date, from)) {
17515 range = { from: date, to: from };
17516 } else {
17517 range = { from, to: date };
17518 }
17519 } else if (from && to) {
17520 if (isSameDay2(from, date) && isSameDay2(to, date)) {
17521 if (required) {
17522 range = { from, to };
17523 } else {
17524 range = void 0;
17525 }
17526 } else if (isSameDay2(from, date)) {
17527 range = { from, to: min3 > 0 ? void 0 : date };
17528 } else if (isSameDay2(to, date)) {
17529 range = { from: date, to: min3 > 0 ? void 0 : date };
17530 } else if (isBefore2(date, from)) {
17531 range = { from: date, to };
17532 } else if (isAfter2(date, from)) {
17533 range = { from, to: date };
17534 } else if (isAfter2(date, to)) {
17535 range = { from, to: date };
17536 } else {
17537 throw new Error("Invalid range");
17538 }
17539 }
17540 if (range?.from && range?.to) {
17541 const diff = dateLib.differenceInCalendarDays(range.to, range.from);
17542 if (max3 > 0 && diff > max3) {
17543 range = { from: date, to: void 0 };
17544 } else if (min3 > 1 && diff < min3) {
17545 range = { from: date, to: void 0 };
17546 }
17547 }
17548 return range;
17549 }
17550
17551 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/utils/rangeContainsDayOfWeek.js
17552 function rangeContainsDayOfWeek(range, dayOfWeek, dateLib = defaultDateLib) {
17553 const dayOfWeekArr = !Array.isArray(dayOfWeek) ? [dayOfWeek] : dayOfWeek;
17554 let date = range.from;
17555 const totalDays = dateLib.differenceInCalendarDays(range.to, range.from);
17556 const totalDaysLimit = Math.min(totalDays, 6);
17557 for (let i = 0; i <= totalDaysLimit; i++) {
17558 if (dayOfWeekArr.includes(date.getDay())) {
17559 return true;
17560 }
17561 date = dateLib.addDays(date, 1);
17562 }
17563 return false;
17564 }
17565
17566 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/utils/rangeOverlaps.js
17567 function rangeOverlaps(rangeLeft, rangeRight, dateLib = defaultDateLib) {
17568 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);
17569 }
17570
17571 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/utils/rangeContainsModifiers.js
17572 function rangeContainsModifiers(range, modifiers, dateLib = defaultDateLib) {
17573 const matchers = Array.isArray(modifiers) ? modifiers : [modifiers];
17574 const nonFunctionMatchers = matchers.filter((matcher) => typeof matcher !== "function");
17575 const nonFunctionMatchersResult = nonFunctionMatchers.some((matcher) => {
17576 if (typeof matcher === "boolean")
17577 return matcher;
17578 if (dateLib.isDate(matcher)) {
17579 return rangeIncludesDate(range, matcher, false, dateLib);
17580 }
17581 if (isDatesArray(matcher, dateLib)) {
17582 return matcher.some((date) => rangeIncludesDate(range, date, false, dateLib));
17583 }
17584 if (isDateRange(matcher)) {
17585 if (matcher.from && matcher.to) {
17586 return rangeOverlaps(range, { from: matcher.from, to: matcher.to }, dateLib);
17587 }
17588 return false;
17589 }
17590 if (isDayOfWeekType(matcher)) {
17591 return rangeContainsDayOfWeek(range, matcher.dayOfWeek, dateLib);
17592 }
17593 if (isDateInterval(matcher)) {
17594 const isClosedInterval = dateLib.isAfter(matcher.before, matcher.after);
17595 if (isClosedInterval) {
17596 return rangeOverlaps(range, {
17597 from: dateLib.addDays(matcher.after, 1),
17598 to: dateLib.addDays(matcher.before, -1)
17599 }, dateLib);
17600 }
17601 return dateMatchModifiers(range.from, matcher, dateLib) || dateMatchModifiers(range.to, matcher, dateLib);
17602 }
17603 if (isDateAfterType(matcher) || isDateBeforeType(matcher)) {
17604 return dateMatchModifiers(range.from, matcher, dateLib) || dateMatchModifiers(range.to, matcher, dateLib);
17605 }
17606 return false;
17607 });
17608 if (nonFunctionMatchersResult) {
17609 return true;
17610 }
17611 const functionMatchers = matchers.filter((matcher) => typeof matcher === "function");
17612 if (functionMatchers.length) {
17613 let date = range.from;
17614 const totalDays = dateLib.differenceInCalendarDays(range.to, range.from);
17615 for (let i = 0; i <= totalDays; i++) {
17616 if (functionMatchers.some((matcher) => matcher(date))) {
17617 return true;
17618 }
17619 date = dateLib.addDays(date, 1);
17620 }
17621 }
17622 return false;
17623 }
17624
17625 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/selection/useRange.js
17626 function useRange(props, dateLib) {
17627 const { disabled: disabled2, excludeDisabled, resetOnSelect, selected: initiallySelected, required, onSelect } = props;
17628 const [internallySelected, setSelected] = useControlledValue(initiallySelected, onSelect ? initiallySelected : void 0);
17629 const selected = !onSelect ? internallySelected : initiallySelected;
17630 const isSelected = (date) => selected && rangeIncludesDate(selected, date, false, dateLib);
17631 const select3 = (triggerDate, modifiers, e) => {
17632 const { min: min3, max: max3 } = props;
17633 let newRange;
17634 if (triggerDate) {
17635 const selectedFrom = selected?.from;
17636 const selectedTo = selected?.to;
17637 const hasFullRange = !!selectedFrom && !!selectedTo;
17638 const isClickingSingleDayRange = !!selectedFrom && !!selectedTo && dateLib.isSameDay(selectedFrom, selectedTo) && dateLib.isSameDay(triggerDate, selectedFrom);
17639 if (resetOnSelect && (hasFullRange || !selected?.from)) {
17640 if (!required && isClickingSingleDayRange) {
17641 newRange = void 0;
17642 } else {
17643 newRange = { from: triggerDate, to: void 0 };
17644 }
17645 } else {
17646 newRange = addToRange(triggerDate, selected, min3, max3, required, dateLib);
17647 }
17648 }
17649 if (excludeDisabled && disabled2 && newRange?.from && newRange.to) {
17650 if (rangeContainsModifiers({ from: newRange.from, to: newRange.to }, disabled2, dateLib)) {
17651 newRange.from = triggerDate;
17652 newRange.to = void 0;
17653 }
17654 }
17655 if (!onSelect) {
17656 setSelected(newRange);
17657 }
17658 onSelect?.(newRange, triggerDate, modifiers, e);
17659 return newRange;
17660 };
17661 return {
17662 selected,
17663 select: select3,
17664 isSelected
17665 };
17666 }
17667
17668 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/selection/useSingle.js
17669 function useSingle(props, dateLib) {
17670 const { selected: initiallySelected, required, onSelect } = props;
17671 const [internallySelected, setSelected] = useControlledValue(initiallySelected, onSelect ? initiallySelected : void 0);
17672 const selected = !onSelect ? internallySelected : initiallySelected;
17673 const { isSameDay: isSameDay2 } = dateLib;
17674 const isSelected = (compareDate) => {
17675 return selected ? isSameDay2(selected, compareDate) : false;
17676 };
17677 const select3 = (triggerDate, modifiers, e) => {
17678 let newDate = triggerDate;
17679 if (!required && selected && selected && isSameDay2(triggerDate, selected)) {
17680 newDate = void 0;
17681 }
17682 if (!onSelect) {
17683 setSelected(newDate);
17684 }
17685 if (required) {
17686 onSelect?.(newDate, triggerDate, modifiers, e);
17687 } else {
17688 onSelect?.(newDate, triggerDate, modifiers, e);
17689 }
17690 return newDate;
17691 };
17692 return {
17693 selected,
17694 select: select3,
17695 isSelected
17696 };
17697 }
17698
17699 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/useSelection.js
17700 function useSelection(props, dateLib) {
17701 const single = useSingle(props, dateLib);
17702 const multi = useMulti(props, dateLib);
17703 const range = useRange(props, dateLib);
17704 switch (props.mode) {
17705 case "single":
17706 return single;
17707 case "multiple":
17708 return multi;
17709 case "range":
17710 return range;
17711 default:
17712 return void 0;
17713 }
17714 }
17715
17716 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/utils/toTimeZone.js
17717 function toTimeZone(date, timeZone) {
17718 if (date instanceof TZDate && date.timeZone === timeZone) {
17719 return date;
17720 }
17721 return new TZDate(date, timeZone);
17722 }
17723
17724 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/utils/convertMatchersToTimeZone.js
17725 function toZoneNoon(date, timeZone, noonSafe) {
17726 if (!noonSafe)
17727 return toTimeZone(date, timeZone);
17728 const zoned = toTimeZone(date, timeZone);
17729 const noonZoned = new TZDate(zoned.getFullYear(), zoned.getMonth(), zoned.getDate(), 12, 0, 0, timeZone);
17730 return new Date(noonZoned.getTime());
17731 }
17732 function convertMatcher(matcher, timeZone, noonSafe) {
17733 if (typeof matcher === "boolean" || typeof matcher === "function") {
17734 return matcher;
17735 }
17736 if (matcher instanceof Date) {
17737 return toZoneNoon(matcher, timeZone, noonSafe);
17738 }
17739 if (Array.isArray(matcher)) {
17740 return matcher.map((value) => value instanceof Date ? toZoneNoon(value, timeZone, noonSafe) : value);
17741 }
17742 if (isDateRange(matcher)) {
17743 return {
17744 ...matcher,
17745 from: matcher.from ? toTimeZone(matcher.from, timeZone) : matcher.from,
17746 to: matcher.to ? toTimeZone(matcher.to, timeZone) : matcher.to
17747 };
17748 }
17749 if (isDateInterval(matcher)) {
17750 return {
17751 before: toZoneNoon(matcher.before, timeZone, noonSafe),
17752 after: toZoneNoon(matcher.after, timeZone, noonSafe)
17753 };
17754 }
17755 if (isDateAfterType(matcher)) {
17756 return {
17757 after: toZoneNoon(matcher.after, timeZone, noonSafe)
17758 };
17759 }
17760 if (isDateBeforeType(matcher)) {
17761 return {
17762 before: toZoneNoon(matcher.before, timeZone, noonSafe)
17763 };
17764 }
17765 return matcher;
17766 }
17767 function convertMatchersToTimeZone(matchers, timeZone, noonSafe) {
17768 if (!matchers) {
17769 return matchers;
17770 }
17771 if (Array.isArray(matchers)) {
17772 return matchers.map((matcher) => convertMatcher(matcher, timeZone, noonSafe));
17773 }
17774 return convertMatcher(matchers, timeZone, noonSafe);
17775 }
17776
17777 // node_modules/@daypicker/react/node_modules/react-day-picker/dist/esm/DayPicker.js
17778 function DayPicker(initialProps) {
17779 let props = initialProps;
17780 const timeZone = props.timeZone;
17781 if (timeZone) {
17782 props = {
17783 ...initialProps,
17784 timeZone
17785 };
17786 if (props.today) {
17787 props.today = toTimeZone(props.today, timeZone);
17788 }
17789 if (props.month) {
17790 props.month = toTimeZone(props.month, timeZone);
17791 }
17792 if (props.defaultMonth) {
17793 props.defaultMonth = toTimeZone(props.defaultMonth, timeZone);
17794 }
17795 if (props.startMonth) {
17796 props.startMonth = toTimeZone(props.startMonth, timeZone);
17797 }
17798 if (props.endMonth) {
17799 props.endMonth = toTimeZone(props.endMonth, timeZone);
17800 }
17801 if (props.mode === "single" && props.selected) {
17802 props.selected = toTimeZone(props.selected, timeZone);
17803 } else if (props.mode === "multiple" && props.selected) {
17804 props.selected = props.selected?.map((date) => toTimeZone(date, timeZone));
17805 } else if (props.mode === "range" && props.selected) {
17806 props.selected = {
17807 from: props.selected.from ? toTimeZone(props.selected.from, timeZone) : props.selected.from,
17808 to: props.selected.to ? toTimeZone(props.selected.to, timeZone) : props.selected.to
17809 };
17810 }
17811 if (props.disabled !== void 0) {
17812 props.disabled = convertMatchersToTimeZone(props.disabled, timeZone);
17813 }
17814 if (props.hidden !== void 0) {
17815 props.hidden = convertMatchersToTimeZone(props.hidden, timeZone);
17816 }
17817 if (props.modifiers) {
17818 const nextModifiers = {};
17819 Object.keys(props.modifiers).forEach((key) => {
17820 nextModifiers[key] = convertMatchersToTimeZone(props.modifiers?.[key], timeZone);
17821 });
17822 props.modifiers = nextModifiers;
17823 }
17824 }
17825 const { components, formatters: formatters2, labels, dateLib, locale, classNames } = (0, import_react34.useMemo)(() => {
17826 const locale2 = { ...enUS2, ...props.locale };
17827 const weekStartsOn = props.broadcastCalendar ? 1 : props.weekStartsOn;
17828 const noonOverrides = props.noonSafe && props.timeZone ? createNoonOverrides(props.timeZone, {
17829 weekStartsOn,
17830 locale: locale2
17831 }) : void 0;
17832 const overrides = props.dateLib && noonOverrides ? { ...noonOverrides, ...props.dateLib } : props.dateLib ?? noonOverrides;
17833 const dateLib2 = new DateLib({
17834 locale: locale2,
17835 weekStartsOn,
17836 firstWeekContainsDate: props.firstWeekContainsDate,
17837 useAdditionalWeekYearTokens: props.useAdditionalWeekYearTokens,
17838 useAdditionalDayOfYearTokens: props.useAdditionalDayOfYearTokens,
17839 timeZone: props.timeZone,
17840 numerals: props.numerals
17841 }, overrides);
17842 return {
17843 dateLib: dateLib2,
17844 components: getComponents(props.components),
17845 formatters: getFormatters(props.formatters),
17846 labels: getLabels(props.labels, dateLib2.options),
17847 locale: locale2,
17848 classNames: { ...getDefaultClassNames(), ...props.classNames }
17849 };
17850 }, [
17851 props.locale,
17852 props.broadcastCalendar,
17853 props.weekStartsOn,
17854 props.firstWeekContainsDate,
17855 props.useAdditionalWeekYearTokens,
17856 props.useAdditionalDayOfYearTokens,
17857 props.timeZone,
17858 props.numerals,
17859 props.dateLib,
17860 props.noonSafe,
17861 props.components,
17862 props.formatters,
17863 props.labels,
17864 props.classNames
17865 ]);
17866 if (!props.today) {
17867 props = { ...props, today: dateLib.today() };
17868 }
17869 const { captionLayout, mode, navLayout, numberOfMonths = 1, onDayBlur, onDayClick, onDayFocus, onDayKeyDown, onDayMouseEnter, onDayMouseLeave, onNextClick, onPrevClick, showWeekNumber, styles } = props;
17870 const { formatCaption: formatCaption2, formatDay: formatDay2, formatMonthDropdown: formatMonthDropdown2, formatWeekNumber: formatWeekNumber2, formatWeekNumberHeader: formatWeekNumberHeader2, formatWeekdayName: formatWeekdayName2, formatYearDropdown: formatYearDropdown2 } = formatters2;
17871 const calendar = useCalendar(props, dateLib);
17872 const { days, months, navStart, navEnd, previousMonth, nextMonth, goToMonth } = calendar;
17873 const getModifiers = createGetModifiers(days, props, navStart, navEnd, dateLib);
17874 const { isSelected, select: select3, selected: selectedValue } = useSelection(props, dateLib) ?? {};
17875 const { blur, focused, isFocusTarget, moveFocus, setFocused } = useFocus2(props, calendar, getModifiers, isSelected ?? (() => false), dateLib);
17876 const { labelDayButton: labelDayButton2, labelGridcell: labelGridcell2, labelGrid: labelGrid2, labelMonthDropdown: labelMonthDropdown2, labelNav: labelNav2, labelPrevious: labelPrevious2, labelNext: labelNext2, labelWeekday: labelWeekday2, labelWeekNumber: labelWeekNumber2, labelWeekNumberHeader: labelWeekNumberHeader2, labelYearDropdown: labelYearDropdown2 } = labels;
17877 const weekdays = (0, import_react34.useMemo)(() => getWeekdays(dateLib, props.ISOWeek, props.broadcastCalendar, props.today), [dateLib, props.ISOWeek, props.broadcastCalendar, props.today]);
17878 const isInteractive = mode !== void 0 || onDayClick !== void 0;
17879 const handlePreviousClick = (0, import_react34.useCallback)(() => {
17880 if (!previousMonth)
17881 return;
17882 goToMonth(previousMonth);
17883 onPrevClick?.(previousMonth);
17884 }, [previousMonth, goToMonth, onPrevClick]);
17885 const handleNextClick = (0, import_react34.useCallback)(() => {
17886 if (!nextMonth)
17887 return;
17888 goToMonth(nextMonth);
17889 onNextClick?.(nextMonth);
17890 }, [goToMonth, nextMonth, onNextClick]);
17891 const handleDayClick = (0, import_react34.useCallback)((day, m2) => (e) => {
17892 e.preventDefault();
17893 e.stopPropagation();
17894 setFocused(day);
17895 if (m2.disabled) {
17896 return;
17897 }
17898 select3?.(day.date, m2, e);
17899 onDayClick?.(day.date, m2, e);
17900 }, [select3, onDayClick, setFocused]);
17901 const handleDayFocus = (0, import_react34.useCallback)((day, m2) => (e) => {
17902 setFocused(day);
17903 onDayFocus?.(day.date, m2, e);
17904 }, [onDayFocus, setFocused]);
17905 const handleDayBlur = (0, import_react34.useCallback)((day, m2) => (e) => {
17906 blur();
17907 onDayBlur?.(day.date, m2, e);
17908 }, [blur, onDayBlur]);
17909 const handleDayKeyDown = (0, import_react34.useCallback)((day, modifiers) => (e) => {
17910 const keyMap = {
17911 ArrowLeft: [
17912 e.shiftKey ? "month" : "day",
17913 props.dir === "rtl" ? "after" : "before"
17914 ],
17915 ArrowRight: [
17916 e.shiftKey ? "month" : "day",
17917 props.dir === "rtl" ? "before" : "after"
17918 ],
17919 ArrowDown: [e.shiftKey ? "year" : "week", "after"],
17920 ArrowUp: [e.shiftKey ? "year" : "week", "before"],
17921 PageUp: [e.shiftKey ? "year" : "month", "before"],
17922 PageDown: [e.shiftKey ? "year" : "month", "after"],
17923 Home: ["startOfWeek", "before"],
17924 End: ["endOfWeek", "after"]
17925 };
17926 if (keyMap[e.key]) {
17927 e.preventDefault();
17928 e.stopPropagation();
17929 const [moveBy, moveDir] = keyMap[e.key];
17930 moveFocus(moveBy, moveDir);
17931 }
17932 onDayKeyDown?.(day.date, modifiers, e);
17933 }, [moveFocus, onDayKeyDown, props.dir]);
17934 const handleDayMouseEnter = (0, import_react34.useCallback)((day, modifiers) => (e) => {
17935 onDayMouseEnter?.(day.date, modifiers, e);
17936 }, [onDayMouseEnter]);
17937 const handleDayMouseLeave = (0, import_react34.useCallback)((day, modifiers) => (e) => {
17938 onDayMouseLeave?.(day.date, modifiers, e);
17939 }, [onDayMouseLeave]);
17940 const handleMonthChange = (0, import_react34.useCallback)((date, monthOffset) => (e) => {
17941 const selectedMonth = Number(e.target.value);
17942 const month = dateLib.setMonth(dateLib.startOfMonth(date), selectedMonth);
17943 goToMonth(dateLib.addMonths(month, -monthOffset));
17944 }, [dateLib, goToMonth]);
17945 const handleYearChange = (0, import_react34.useCallback)((date, monthOffset) => (e) => {
17946 const selectedYear = Number(e.target.value);
17947 const month = dateLib.setYear(dateLib.startOfMonth(date), selectedYear);
17948 goToMonth(dateLib.addMonths(month, -monthOffset));
17949 }, [dateLib, goToMonth]);
17950 const { className, style } = (0, import_react34.useMemo)(() => ({
17951 className: [classNames[UI.Root], props.className].filter(Boolean).join(" "),
17952 style: { ...styles?.[UI.Root], ...props.style }
17953 }), [classNames, props.className, props.style, styles]);
17954 const dataAttributes = getDataAttributes(props);
17955 const getDropdownStyle = (dropdown) => {
17956 const dropdownStyle = styles?.[UI.Dropdown];
17957 const specificDropdownStyle = styles?.[dropdown];
17958 if (!dropdownStyle && !specificDropdownStyle) {
17959 return void 0;
17960 }
17961 return {
17962 ...dropdownStyle,
17963 ...specificDropdownStyle
17964 };
17965 };
17966 const rootElRef = (0, import_react34.useRef)(null);
17967 useAnimation(rootElRef, Boolean(props.animate), {
17968 classNames,
17969 months,
17970 focused,
17971 dateLib
17972 });
17973 const contextValue = {
17974 dayPickerProps: props,
17975 selected: selectedValue,
17976 select: select3,
17977 isSelected,
17978 months,
17979 nextMonth,
17980 previousMonth,
17981 goToMonth,
17982 getModifiers,
17983 components,
17984 classNames,
17985 styles,
17986 labels,
17987 formatters: formatters2
17988 };
17989 return import_react34.default.createElement(
17990 dayPickerContext.Provider,
17991 { value: contextValue },
17992 import_react34.default.createElement(
17993 components.Root,
17994 { 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 },
17995 import_react34.default.createElement(
17996 components.Months,
17997 { className: classNames[UI.Months], style: styles?.[UI.Months] },
17998 !props.hideNavigation && !navLayout && import_react34.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 }),
17999 months.map((calendarMonth, displayIndex) => {
18000 const monthOffset = props.reverseMonths ? months.length - 1 - displayIndex : displayIndex;
18001 return import_react34.default.createElement(
18002 components.Month,
18003 {
18004 "data-animated-month": props.animate ? "true" : void 0,
18005 className: classNames[UI.Month],
18006 style: styles?.[UI.Month],
18007 // biome-ignore lint/suspicious/noArrayIndexKey: breaks animation
18008 key: displayIndex,
18009 displayIndex,
18010 calendarMonth
18011 },
18012 navLayout === "around" && !props.hideNavigation && displayIndex === 0 && import_react34.default.createElement(
18013 components.PreviousMonthButton,
18014 { 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 },
18015 import_react34.default.createElement(components.Chevron, { disabled: previousMonth ? void 0 : true, className: classNames[UI.Chevron], style: styles?.[UI.Chevron], orientation: props.dir === "rtl" ? "right" : "left" })
18016 ),
18017 import_react34.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_react34.default.createElement(
18018 components.DropdownNav,
18019 { className: classNames[UI.Dropdowns], style: styles?.[UI.Dropdowns] },
18020 (() => {
18021 const monthControl = captionLayout === "dropdown" || captionLayout === "dropdown-months" ? import_react34.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_react34.default.createElement("span", { key: "month" }, formatMonthDropdown2(calendarMonth.date, dateLib));
18022 const yearControl = captionLayout === "dropdown" || captionLayout === "dropdown-years" ? import_react34.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_react34.default.createElement("span", { key: "year" }, formatYearDropdown2(calendarMonth.date, dateLib));
18023 const controls = dateLib.getMonthYearOrder() === "year-first" ? [yearControl, monthControl] : [monthControl, yearControl];
18024 return controls;
18025 })(),
18026 import_react34.default.createElement("span", { role: "status", "aria-live": "polite", style: {
18027 border: 0,
18028 clip: "rect(0 0 0 0)",
18029 height: "1px",
18030 margin: "-1px",
18031 overflow: "hidden",
18032 padding: 0,
18033 position: "absolute",
18034 width: "1px",
18035 whiteSpace: "nowrap",
18036 wordWrap: "normal"
18037 } }, formatCaption2(calendarMonth.date, dateLib.options, dateLib))
18038 ) : import_react34.default.createElement(components.CaptionLabel, { className: classNames[UI.CaptionLabel], style: styles?.[UI.CaptionLabel], role: "status", "aria-live": "polite" }, formatCaption2(calendarMonth.date, dateLib.options, dateLib))),
18039 navLayout === "around" && !props.hideNavigation && displayIndex === numberOfMonths - 1 && import_react34.default.createElement(
18040 components.NextMonthButton,
18041 { 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 },
18042 import_react34.default.createElement(components.Chevron, { disabled: nextMonth ? void 0 : true, className: classNames[UI.Chevron], style: styles?.[UI.Chevron], orientation: props.dir === "rtl" ? "left" : "right" })
18043 ),
18044 displayIndex === numberOfMonths - 1 && navLayout === "after" && !props.hideNavigation && import_react34.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 }),
18045 import_react34.default.createElement(
18046 components.MonthGrid,
18047 { 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] },
18048 !props.hideWeekdays && import_react34.default.createElement(
18049 components.Weekdays,
18050 { "data-animated-weekdays": props.animate ? "true" : void 0, className: classNames[UI.Weekdays], style: styles?.[UI.Weekdays] },
18051 showWeekNumber && import_react34.default.createElement(components.WeekNumberHeader, { "aria-label": labelWeekNumberHeader2(dateLib.options), className: classNames[UI.WeekNumberHeader], style: styles?.[UI.WeekNumberHeader], scope: "col" }, formatWeekNumberHeader2()),
18052 weekdays.map((weekday) => import_react34.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)))
18053 ),
18054 import_react34.default.createElement(components.Weeks, { "data-animated-weeks": props.animate ? "true" : void 0, className: classNames[UI.Weeks], style: styles?.[UI.Weeks] }, calendarMonth.weeks.map((week) => {
18055 return import_react34.default.createElement(
18056 components.Week,
18057 { className: classNames[UI.Week], key: week.weekNumber, style: styles?.[UI.Week], week },
18058 showWeekNumber && import_react34.default.createElement(components.WeekNumber, { week, style: styles?.[UI.WeekNumber], "aria-label": labelWeekNumber2(week.weekNumber, {
18059 locale
18060 }), className: classNames[UI.WeekNumber], scope: "row", role: "rowheader" }, formatWeekNumber2(week.weekNumber, dateLib)),
18061 week.days.map((day) => {
18062 const { date } = day;
18063 const modifiers = getModifiers(day);
18064 modifiers[DayFlag.focused] = !modifiers.hidden && Boolean(focused?.isEqualTo(day));
18065 modifiers[SelectionState.selected] = isSelected?.(date) || modifiers.selected;
18066 if (isDateRange(selectedValue)) {
18067 const { from, to } = selectedValue;
18068 modifiers[SelectionState.range_start] = Boolean(from && to && dateLib.isSameDay(date, from));
18069 modifiers[SelectionState.range_end] = Boolean(from && to && dateLib.isSameDay(date, to));
18070 modifiers[SelectionState.range_middle] = rangeIncludesDate(selectedValue, date, true, dateLib);
18071 }
18072 const style2 = getStyleForModifiers(modifiers, styles, props.modifiersStyles);
18073 const className2 = getClassNamesForModifiers(modifiers, classNames, props.modifiersClassNames);
18074 const ariaLabel = !isInteractive && !modifiers.hidden ? labelGridcell2(date, modifiers, dateLib.options, dateLib) : void 0;
18075 return import_react34.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_react34.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));
18076 })
18077 );
18078 }))
18079 )
18080 );
18081 })
18082 ),
18083 props.footer && import_react34.default.createElement(components.Footer, { className: classNames[UI.Footer], style: styles?.[UI.Footer], role: "status", "aria-live": "polite" }, props.footer)
18084 )
18085 );
18086 }
18087
18088 // packages/ui/build-module/calendar/calendar.mjs
18089 var import_element26 = __toESM(require_element(), 1);
18090
18091 // packages/ui/build-module/calendar/utils/components.mjs
18092 var import_element22 = __toESM(require_element(), 1);
18093 var import_compose = __toESM(require_compose(), 1);
18094 var import_i18n4 = __toESM(require_i18n(), 1);
18095
18096 // packages/ui/build-module/icon-button/icon-button.mjs
18097 var import_element20 = __toESM(require_element(), 1);
18098 var import_jsx_runtime37 = __toESM(require_jsx_runtime(), 1);
18099 var STYLE_HASH_ATTRIBUTE7 = "data-wp-hash";
18100 function getRuntime7() {
18101 const globalScope = globalThis;
18102 if (globalScope.__wpStyleRuntime) {
18103 return globalScope.__wpStyleRuntime;
18104 }
18105 globalScope.__wpStyleRuntime = {
18106 documents: /* @__PURE__ */ new Map(),
18107 styles: /* @__PURE__ */ new Map(),
18108 injectedStyles: /* @__PURE__ */ new WeakMap()
18109 };
18110 if (typeof document !== "undefined") {
18111 registerDocument7(document);
18112 }
18113 return globalScope.__wpStyleRuntime;
18114 }
18115 function documentContainsStyleHash7(targetDocument, hash) {
18116 if (!targetDocument.head) {
18117 return false;
18118 }
18119 for (const style of targetDocument.head.querySelectorAll(
18120 `style[${STYLE_HASH_ATTRIBUTE7}]`
18121 )) {
18122 if (style.getAttribute(STYLE_HASH_ATTRIBUTE7) === hash) {
18123 return true;
18124 }
18125 }
18126 return false;
18127 }
18128 function injectStyle7(targetDocument, hash, css) {
18129 if (!targetDocument.head) {
18130 return;
18131 }
18132 const runtime = getRuntime7();
18133 let injectedStyles = runtime.injectedStyles.get(targetDocument);
18134 if (!injectedStyles) {
18135 injectedStyles = /* @__PURE__ */ new Set();
18136 runtime.injectedStyles.set(targetDocument, injectedStyles);
18137 }
18138 if (injectedStyles.has(hash)) {
18139 return;
18140 }
18141 if (documentContainsStyleHash7(targetDocument, hash)) {
18142 injectedStyles.add(hash);
18143 return;
18144 }
18145 const style = targetDocument.createElement("style");
18146 style.setAttribute(STYLE_HASH_ATTRIBUTE7, hash);
18147 style.appendChild(targetDocument.createTextNode(css));
18148 targetDocument.head.appendChild(style);
18149 injectedStyles.add(hash);
18150 }
18151 function registerDocument7(targetDocument) {
18152 const runtime = getRuntime7();
18153 runtime.documents.set(
18154 targetDocument,
18155 (runtime.documents.get(targetDocument) ?? 0) + 1
18156 );
18157 for (const [hash, css] of runtime.styles) {
18158 injectStyle7(targetDocument, hash, css);
18159 }
18160 return () => {
18161 const count = runtime.documents.get(targetDocument);
18162 if (count === void 0) {
18163 return;
18164 }
18165 if (count <= 1) {
18166 runtime.documents.delete(targetDocument);
18167 return;
18168 }
18169 runtime.documents.set(targetDocument, count - 1);
18170 };
18171 }
18172 function registerStyle7(hash, css) {
18173 const runtime = getRuntime7();
18174 runtime.styles.set(hash, css);
18175 for (const targetDocument of runtime.documents.keys()) {
18176 injectStyle7(targetDocument, hash, css);
18177 }
18178 }
18179 if (typeof process === "undefined" || true) {
18180 registerStyle7("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}}}");
18181 }
18182 var style_default6 = { "icon-button": "_28cfdc260e755391__icon-button", "icon": "f1c70d719989a85a__icon" };
18183 var IconButton = (0, import_element20.forwardRef)(
18184 function IconButton2({
18185 label,
18186 className,
18187 // Prevent accidental forwarding of `children`
18188 children: _children,
18189 disabled: disabled2,
18190 focusableWhenDisabled = true,
18191 icon,
18192 size: size4,
18193 shortcut,
18194 positioner,
18195 "aria-describedby": ariaDescribedBy,
18196 "aria-keyshortcuts": ariaKeyShortcuts,
18197 ...restProps
18198 }, ref) {
18199 const classes = clsx_default(style_default6["icon-button"], className);
18200 const { descriptionId, targetProps } = useKeyboardShortcutProps({
18201 "aria-describedby": ariaDescribedBy,
18202 "aria-keyshortcuts": ariaKeyShortcuts,
18203 shortcut
18204 });
18205 return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(Root, { children: [
18206 /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
18207 Trigger,
18208 {
18209 ref,
18210 ...targetProps,
18211 disabled: disabled2 && !focusableWhenDisabled,
18212 render: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
18213 Button4,
18214 {
18215 ...restProps,
18216 size: size4,
18217 "aria-label": label,
18218 disabled: disabled2,
18219 focusableWhenDisabled
18220 }
18221 ),
18222 className: classes,
18223 children: [
18224 /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Icon, { icon, size: 24, className: style_default6.icon }),
18225 shortcut && descriptionId && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
18226 KeyboardShortcutDescription,
18227 {
18228 descriptionId,
18229 shortcut
18230 }
18231 )
18232 ]
18233 }
18234 ),
18235 /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(Popup, { positioner, children: [
18236 label,
18237 shortcut && /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
18238 " ",
18239 /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(KeyboardShortcutDisplay, { shortcut })
18240 ] })
18241 ] })
18242 ] });
18243 }
18244 );
18245
18246 // packages/ui/build-module/calendar/utils/root-context.mjs
18247 var import_element21 = __toESM(require_element(), 1);
18248 var RootContext = (0, import_element21.createContext)({});
18249
18250 // packages/ui/build-module/calendar/utils/components.mjs
18251 var import_jsx_runtime38 = __toESM(require_jsx_runtime(), 1);
18252 var PreviewDashStartAndEnd = () => {
18253 return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
18254 "svg",
18255 {
18256 viewBox: "0 0 32 32",
18257 xmlns: "http://www.w3.org/2000/svg",
18258 fill: "none",
18259 stroke: "currentColor",
18260 strokeDasharray: "3.7677",
18261 strokeDashoffset: "3.2",
18262 strokeWidth: "1",
18263 children: /* @__PURE__ */ (0, import_jsx_runtime38.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" })
18264 }
18265 );
18266 };
18267 var PreviewDashStart = () => {
18268 return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
18269 "svg",
18270 {
18271 viewBox: "0 0 32 32",
18272 xmlns: "http://www.w3.org/2000/svg",
18273 fill: "none",
18274 stroke: "currentColor",
18275 strokeDasharray: "3.84516",
18276 strokeDashoffset: "1.9226",
18277 strokeWidth: "1",
18278 children: /* @__PURE__ */ (0, import_jsx_runtime38.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" })
18279 }
18280 );
18281 };
18282 var PreviewDashMiddle = () => {
18283 return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
18284 "svg",
18285 {
18286 viewBox: "0 0 32 32",
18287 xmlns: "http://www.w3.org/2000/svg",
18288 fill: "none",
18289 stroke: "currentColor",
18290 strokeDasharray: "3.9 4",
18291 strokeDashoffset: "2",
18292 strokeWidth: "1",
18293 children: [
18294 /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("line", { x1: "0", y1: "0.5", x2: "100", y2: "0.5" }),
18295 /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("line", { x1: "0", y1: "31.5", x2: "100", y2: "31.5" })
18296 ]
18297 }
18298 );
18299 };
18300 var PreviewDashEnd = () => {
18301 return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
18302 "svg",
18303 {
18304 viewBox: "0 0 32 32",
18305 xmlns: "http://www.w3.org/2000/svg",
18306 fill: "none",
18307 stroke: "currentColor",
18308 strokeDasharray: "3.84516",
18309 strokeDashoffset: "1.9226",
18310 strokeWidth: "1",
18311 children: /* @__PURE__ */ (0, import_jsx_runtime38.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" })
18312 }
18313 );
18314 };
18315 function Day2(props) {
18316 const { day, modifiers, children, ...tdProps } = props;
18317 let PreviewDash;
18318 if (modifiers.preview_start && modifiers.preview_end) {
18319 PreviewDash = PreviewDashStartAndEnd;
18320 } else if (modifiers.preview_start) {
18321 PreviewDash = PreviewDashStart;
18322 } else if (modifiers.preview_end) {
18323 PreviewDash = PreviewDashEnd;
18324 } else if (modifiers.preview) {
18325 PreviewDash = PreviewDashMiddle;
18326 }
18327 return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("td", { ...tdProps, children: [
18328 PreviewDash && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(PreviewDash, {}),
18329 children
18330 ] });
18331 }
18332 function Root3({ rootRef, ...props }) {
18333 const { render: render4, ref, role, defaultAriaLabel } = (0, import_element22.useContext)(RootContext);
18334 const { months, labels } = useDayPicker();
18335 const hasExplicitLabel = props["aria-label"] !== void 0 || props["aria-labelledby"] !== void 0;
18336 let ariaLabel = props["aria-label"];
18337 if (!hasExplicitLabel && defaultAriaLabel && role === "application") {
18338 const currentMonth = months[0];
18339 ariaLabel = currentMonth ? (0, import_i18n4.sprintf)(
18340 // translators: 1: Calendar type. 2: Current month and year.
18341 (0, import_i18n4.__)("%1$s, %2$s"),
18342 defaultAriaLabel,
18343 labels.labelGrid(currentMonth.date)
18344 ) : defaultAriaLabel;
18345 }
18346 const mergedRef = (0, import_compose.useMergeRefs)([rootRef ?? null, ref ?? null]);
18347 return useRender({
18348 render: render4,
18349 defaultTagName: "div",
18350 ref: mergedRef,
18351 props: { ...props, role, "aria-label": ariaLabel }
18352 });
18353 }
18354 function NavButton({
18355 icon,
18356 className,
18357 children: _children,
18358 "aria-label": label,
18359 "aria-disabled": ariaDisabled,
18360 ...props
18361 }) {
18362 return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
18363 IconButton,
18364 {
18365 ...props,
18366 className,
18367 label,
18368 icon,
18369 variant: "minimal",
18370 tone: "neutral",
18371 size: "compact",
18372 disabled: ariaDisabled === true || ariaDisabled === "true",
18373 focusableWhenDisabled: true
18374 }
18375 );
18376 }
18377 function PreviousMonthButton2(props) {
18378 return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(NavButton, { ...props, icon: chevron_left_default });
18379 }
18380 function NextMonthButton2(props) {
18381 return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(NavButton, { ...props, icon: chevron_right_default });
18382 }
18383
18384 // packages/ui/build-module/calendar/utils/constants.mjs
18385 var STYLE_HASH_ATTRIBUTE8 = "data-wp-hash";
18386 function getRuntime8() {
18387 const globalScope = globalThis;
18388 if (globalScope.__wpStyleRuntime) {
18389 return globalScope.__wpStyleRuntime;
18390 }
18391 globalScope.__wpStyleRuntime = {
18392 documents: /* @__PURE__ */ new Map(),
18393 styles: /* @__PURE__ */ new Map(),
18394 injectedStyles: /* @__PURE__ */ new WeakMap()
18395 };
18396 if (typeof document !== "undefined") {
18397 registerDocument8(document);
18398 }
18399 return globalScope.__wpStyleRuntime;
18400 }
18401 function documentContainsStyleHash8(targetDocument, hash) {
18402 if (!targetDocument.head) {
18403 return false;
18404 }
18405 for (const style of targetDocument.head.querySelectorAll(
18406 `style[${STYLE_HASH_ATTRIBUTE8}]`
18407 )) {
18408 if (style.getAttribute(STYLE_HASH_ATTRIBUTE8) === hash) {
18409 return true;
18410 }
18411 }
18412 return false;
18413 }
18414 function injectStyle8(targetDocument, hash, css) {
18415 if (!targetDocument.head) {
18416 return;
18417 }
18418 const runtime = getRuntime8();
18419 let injectedStyles = runtime.injectedStyles.get(targetDocument);
18420 if (!injectedStyles) {
18421 injectedStyles = /* @__PURE__ */ new Set();
18422 runtime.injectedStyles.set(targetDocument, injectedStyles);
18423 }
18424 if (injectedStyles.has(hash)) {
18425 return;
18426 }
18427 if (documentContainsStyleHash8(targetDocument, hash)) {
18428 injectedStyles.add(hash);
18429 return;
18430 }
18431 const style = targetDocument.createElement("style");
18432 style.setAttribute(STYLE_HASH_ATTRIBUTE8, hash);
18433 style.appendChild(targetDocument.createTextNode(css));
18434 targetDocument.head.appendChild(style);
18435 injectedStyles.add(hash);
18436 }
18437 function registerDocument8(targetDocument) {
18438 const runtime = getRuntime8();
18439 runtime.documents.set(
18440 targetDocument,
18441 (runtime.documents.get(targetDocument) ?? 0) + 1
18442 );
18443 for (const [hash, css] of runtime.styles) {
18444 injectStyle8(targetDocument, hash, css);
18445 }
18446 return () => {
18447 const count = runtime.documents.get(targetDocument);
18448 if (count === void 0) {
18449 return;
18450 }
18451 if (count <= 1) {
18452 runtime.documents.delete(targetDocument);
18453 return;
18454 }
18455 runtime.documents.set(targetDocument, count - 1);
18456 };
18457 }
18458 function registerStyle8(hash, css) {
18459 const runtime = getRuntime8();
18460 runtime.styles.set(hash, css);
18461 for (const targetDocument of runtime.documents.keys()) {
18462 injectStyle8(targetDocument, hash, css);
18463 }
18464 }
18465 if (typeof process === "undefined" || true) {
18466 registerStyle8("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}}}');
18467 }
18468 var style_default7 = { "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" };
18469 if (typeof process === "undefined" || true) {
18470 registerStyle8("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}");
18471 }
18472 var resets_default3 = { "box-sizing": "_336cd3e4e743482f__box-sizing" };
18473 if (typeof process === "undefined" || true) {
18474 registerStyle8("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))}}}");
18475 }
18476 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" };
18477 if (typeof process === "undefined" || true) {
18478 registerStyle8("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)}");
18479 }
18480 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" };
18481 var CLASSNAMES = {
18482 root: clsx_default(style_default7.root, resets_default3["box-sizing"]),
18483 day: style_default7.day,
18484 day_button: clsx_default(
18485 style_default7["day-button"],
18486 global_css_defense_default2.button,
18487 focus_module_default2["outset-ring--focus-visible"]
18488 ),
18489 outside: style_default7.outside,
18490 caption_label: style_default7["caption-label"],
18491 button_next: style_default7["nav-button"],
18492 button_previous: style_default7["nav-button"],
18493 nav: style_default7.nav,
18494 month_caption: style_default7["month-caption"],
18495 months: style_default7.months,
18496 month_grid: style_default7["month-grid"],
18497 weekday: style_default7.weekday,
18498 today: style_default7.today,
18499 selected: style_default7.selected,
18500 /*
18501 * Disabled days are styled through `:has(.day-button:disabled)` rather than
18502 * a modifier class on the cell, because the two are not equivalent: the
18503 * focused day keeps its button enabled so it stays reachable. Mapped to
18504 * `undefined` on purpose, so `@daypicker/react` doesn't fall back to its
18505 * own `rdp-disabled` class for a modifier we don't style.
18506 */
18507 disabled: void 0,
18508 hidden: style_default7.hidden,
18509 range_start: style_default7["range-start"],
18510 range_end: style_default7["range-end"],
18511 range_middle: style_default7["range-middle"],
18512 weeks_before_enter: style_default7["weeks-before-enter"],
18513 weeks_before_exit: style_default7["weeks-before-exit"],
18514 weeks_after_enter: style_default7["weeks-after-enter"],
18515 weeks_after_exit: style_default7["weeks-after-exit"],
18516 caption_after_enter: style_default7["caption-after-enter"],
18517 caption_after_exit: style_default7["caption-after-exit"],
18518 caption_before_enter: style_default7["caption-before-enter"],
18519 caption_before_exit: style_default7["caption-before-exit"]
18520 };
18521 var MODIFIER_CLASSNAMES = {
18522 preview: style_default7.preview
18523 };
18524 var COMMON_PROPS = {
18525 animate: true,
18526 // Only show days in the current month
18527 showOutsideDays: false,
18528 // Hide week number column
18529 showWeekNumber: false,
18530 // Show weekdays row
18531 hideWeekdays: false,
18532 // Month and year caption are not interactive
18533 captionLayout: "label",
18534 // Show a variable number of weeks depending on the month
18535 fixedWeeks: false,
18536 // Show navigation buttons
18537 hideNavigation: false,
18538 // Class names
18539 classNames: CLASSNAMES,
18540 components: {
18541 Day: Day2,
18542 Root: Root3,
18543 PreviousMonthButton: PreviousMonthButton2,
18544 NextMonthButton: NextMonthButton2
18545 }
18546 };
18547
18548 // packages/ui/build-module/calendar/utils/misc.mjs
18549 function clampNumberOfMonths(numberOfMonths) {
18550 return Math.min(3, Math.max(1, numberOfMonths));
18551 }
18552
18553 // packages/ui/build-module/calendar/utils/use-controlled-value.mjs
18554 var import_element23 = __toESM(require_element(), 1);
18555 function useControlledValue2({
18556 defaultValue,
18557 onChange,
18558 value: valueProp
18559 }) {
18560 const hasValue = typeof valueProp !== "undefined";
18561 const initialValue = hasValue ? valueProp : defaultValue;
18562 const [state, setState] = (0, import_element23.useState)(initialValue);
18563 const value = hasValue ? valueProp : state;
18564 const uncontrolledSetValue = (0, import_element23.useCallback)(
18565 (nextValue, ...args) => {
18566 setState(nextValue);
18567 onChange?.(nextValue, ...args);
18568 },
18569 [onChange]
18570 );
18571 let setValue;
18572 if (hasValue && typeof onChange === "function") {
18573 setValue = onChange;
18574 } else if (!hasValue && typeof onChange === "function") {
18575 setValue = uncontrolledSetValue;
18576 } else {
18577 setValue = setState;
18578 }
18579 return [value, setValue];
18580 }
18581
18582 // packages/ui/build-module/calendar/utils/use-localization-props.mjs
18583 var import_i18n5 = __toESM(require_i18n(), 1);
18584 var import_element24 = __toESM(require_element(), 1);
18585 function isLocaleRTL(locale) {
18586 const direction = (locale.getTextInfo?.() ?? locale.textInfo)?.direction;
18587 if (direction) {
18588 return direction === "rtl";
18589 }
18590 return [
18591 "ar",
18592 // Arabic
18593 "he",
18594 // Hebrew
18595 "fa",
18596 // Persian (Farsi)
18597 "ur",
18598 // Urdu
18599 "ps",
18600 // Pashto
18601 "syr",
18602 // Syriac
18603 "dv",
18604 // Divehi
18605 "ku",
18606 // Kurdish (Sorani)
18607 "ckb",
18608 // Central Kurdish (Sorani)
18609 "ug",
18610 // Uyghur
18611 "yi"
18612 // Yiddish
18613 ].includes(locale.language);
18614 }
18615 function getSupportedLocaleCode(localeCode) {
18616 if (!localeCode) {
18617 return;
18618 }
18619 let supportedLocaleCode;
18620 try {
18621 supportedLocaleCode = Intl.DateTimeFormat.supportedLocalesOf([
18622 localeCode
18623 ])[0];
18624 } catch {
18625 }
18626 return supportedLocaleCode;
18627 }
18628 function getWeekStartsOn(locale) {
18629 const firstDay = (locale.getWeekInfo?.() ?? locale.weekInfo)?.firstDay;
18630 if (firstDay === void 0 || firstDay < 1 || firstDay > 7) {
18631 return;
18632 }
18633 return firstDay % 7;
18634 }
18635 var useLocalizationProps = ({
18636 locale,
18637 timeZone,
18638 mode
18639 }) => {
18640 return (0, import_element24.useMemo)(() => {
18641 const isLocaleString = typeof locale === "string";
18642 const dateFnsLocale = isLocaleString || locale === void 0 ? enUS : locale;
18643 const supportedLocaleCode = getSupportedLocaleCode(
18644 isLocaleString ? locale : locale?.code
18645 );
18646 const localeCode = supportedLocaleCode ?? "en-US";
18647 const intlLocale = new Intl.Locale(localeCode);
18648 const isRightToLeft = supportedLocaleCode !== void 0 ? isLocaleRTL(intlLocale) : (0, import_i18n5.isRTL)();
18649 const weekStartsOn = isLocaleString || supportedLocaleCode !== void 0 ? getWeekStartsOn(intlLocale) : void 0;
18650 const monthNameFormatter = new Intl.DateTimeFormat(localeCode, {
18651 calendar: "gregory",
18652 year: "numeric",
18653 month: "long",
18654 timeZone
18655 });
18656 const weekdayNarrowFormatter = new Intl.DateTimeFormat(localeCode, {
18657 calendar: "gregory",
18658 weekday: "narrow",
18659 timeZone
18660 });
18661 const weekdayLongFormatter = new Intl.DateTimeFormat(localeCode, {
18662 calendar: "gregory",
18663 weekday: "long",
18664 timeZone
18665 });
18666 const fullDateFormatter = new Intl.DateTimeFormat(localeCode, {
18667 calendar: "gregory",
18668 weekday: "long",
18669 year: "numeric",
18670 month: "long",
18671 day: "numeric",
18672 timeZone
18673 });
18674 const dayNumberFormatter = new Intl.DateTimeFormat(localeCode, {
18675 calendar: "gregory",
18676 day: "numeric",
18677 timeZone
18678 });
18679 return {
18680 "aria-label": mode === "single" ? (0, import_i18n5.__)("Date calendar") : (0, import_i18n5.__)("Date range calendar"),
18681 labels: {
18682 /** The label for the navigation toolbar. */
18683 labelNav: () => (0, import_i18n5.__)("Navigation bar"),
18684 /**
18685 * The label for the month grid.
18686 * @param date
18687 */
18688 labelGrid: monthNameFormatter.format,
18689 /**
18690 * The label for the gridcell, when the calendar is not interactive.
18691 * @param date
18692 * @param modifiers
18693 */
18694 labelGridcell: (date, modifiers) => {
18695 const formattedDate = fullDateFormatter.format(date);
18696 let label = formattedDate;
18697 if (modifiers?.today) {
18698 label = (0, import_i18n5.sprintf)(
18699 // translators: %s is the full date (e.g. "Monday, April 29, 2025")
18700 (0, import_i18n5.__)("Today, %s"),
18701 formattedDate
18702 );
18703 }
18704 return label;
18705 },
18706 /** The label for the "next month" button. */
18707 labelNext: () => (0, import_i18n5.__)("Next month"),
18708 /** The label for the "previous month" button. */
18709 labelPrevious: () => (0, import_i18n5.__)("Previous month"),
18710 /**
18711 * The label for the day button.
18712 * @param date
18713 * @param modifiers
18714 */
18715 labelDayButton: (date, modifiers) => {
18716 const formattedDate = fullDateFormatter.format(date);
18717 let label = formattedDate;
18718 if (modifiers?.today && modifiers?.selected) {
18719 return (0, import_i18n5.sprintf)(
18720 // translators: %s is the full date (e.g. "Monday, April 29, 2025")
18721 (0, import_i18n5.__)("Today, %s, selected"),
18722 formattedDate
18723 );
18724 }
18725 if (modifiers?.today) {
18726 label = (0, import_i18n5.sprintf)(
18727 // translators: %s is the full date (e.g. "Monday, April 29, 2025")
18728 (0, import_i18n5.__)("Today, %s"),
18729 formattedDate
18730 );
18731 }
18732 if (modifiers?.selected) {
18733 label = (0, import_i18n5.sprintf)(
18734 // translators: %s is the full date (e.g. "Monday, April 29, 2025")
18735 (0, import_i18n5.__)("%s, selected"),
18736 formattedDate
18737 );
18738 }
18739 return label;
18740 },
18741 /**
18742 * The label for the weekday.
18743 * @param date
18744 */
18745 labelWeekday: weekdayLongFormatter.format
18746 },
18747 locale: dateFnsLocale,
18748 lang: localeCode,
18749 dir: isRightToLeft ? "rtl" : "ltr",
18750 ...weekStartsOn === void 0 ? {} : { weekStartsOn },
18751 formatters: {
18752 formatDay: dayNumberFormatter.format,
18753 formatWeekdayName: weekdayNarrowFormatter.format,
18754 formatCaption: monthNameFormatter.format
18755 },
18756 timeZone
18757 };
18758 }, [locale, timeZone, mode]);
18759 };
18760
18761 // packages/ui/build-module/calendar/utils/use-preserve-day-focus.mjs
18762 var import_compose2 = __toESM(require_compose(), 1);
18763 var import_element25 = __toESM(require_element(), 1);
18764 function usePreserveDayFocus(forwardedRef, month) {
18765 const rootRef = (0, import_element25.useRef)(null);
18766 const hadDayFocusRef = (0, import_element25.useRef)(false);
18767 const mergedRef = (0, import_compose2.useMergeRefs)([rootRef, forwardedRef]);
18768 const monthIndex = month ? month.getFullYear() * 12 + month.getMonth() : void 0;
18769 const onDayFocus = (0, import_element25.useCallback)(() => {
18770 hadDayFocusRef.current = true;
18771 }, []);
18772 const onDayBlur = (0, import_element25.useCallback)(() => {
18773 hadDayFocusRef.current = false;
18774 }, []);
18775 (0, import_element25.useEffect)(() => {
18776 if (!hadDayFocusRef.current) {
18777 return;
18778 }
18779 const root = rootRef.current;
18780 if (!root) {
18781 return;
18782 }
18783 const { activeElement: activeElement2, body } = root.ownerDocument;
18784 if (activeElement2 !== body) {
18785 const grid = activeElement2?.closest('[role="grid"]');
18786 hadDayFocusRef.current = !!grid && root.contains(grid);
18787 return;
18788 }
18789 hadDayFocusRef.current = false;
18790 const focusTarget = root.querySelector(
18791 '[role="grid"] button[tabindex="0"]:not(:disabled)'
18792 );
18793 const enabledControl = root.querySelector(
18794 'button:not(:disabled):not([aria-disabled="true"])'
18795 );
18796 const focusableControl = root.querySelector(
18797 "button:not(:disabled)"
18798 );
18799 (focusTarget ?? enabledControl ?? focusableControl)?.focus();
18800 }, [monthIndex]);
18801 return { ref: mergedRef, onDayFocus, onDayBlur };
18802 }
18803
18804 // packages/ui/build-module/calendar/calendar.mjs
18805 var import_jsx_runtime39 = __toESM(require_jsx_runtime(), 1);
18806 var Calendar = (0, import_element26.forwardRef)(
18807 function Calendar2({
18808 defaultValue,
18809 value: valueProp,
18810 onValueChange,
18811 numberOfMonths = 1,
18812 locale,
18813 timeZone,
18814 month,
18815 render: render4,
18816 role = "application",
18817 "aria-label": ariaLabel,
18818 labels: customLabels,
18819 ...props
18820 }, ref) {
18821 const { "aria-label": defaultAriaLabel, ...localizationProps } = useLocalizationProps({
18822 locale,
18823 timeZone,
18824 mode: "single"
18825 });
18826 const labels = (0, import_element26.useMemo)(
18827 () => customLabels ? { ...localizationProps.labels, ...customLabels } : localizationProps.labels,
18828 [localizationProps.labels, customLabels]
18829 );
18830 const onChange = (0, import_element26.useCallback)(
18831 (selected2, triggerDate, modifiers, e) => {
18832 onValueChange?.(
18833 selected2 ?? null,
18834 triggerDate,
18835 modifiers,
18836 e
18837 );
18838 },
18839 [onValueChange]
18840 );
18841 const [selected, setSelected] = useControlledValue2({
18842 defaultValue,
18843 value: valueProp,
18844 onChange
18845 });
18846 const dayFocusProps = usePreserveDayFocus(ref, month);
18847 const rootContextValue = (0, import_element26.useMemo)(
18848 () => ({
18849 render: render4,
18850 ref: dayFocusProps.ref,
18851 role,
18852 defaultAriaLabel
18853 }),
18854 [render4, dayFocusProps.ref, role, defaultAriaLabel]
18855 );
18856 return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(RootContext.Provider, { value: rootContextValue, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
18857 DayPicker,
18858 {
18859 ...COMMON_PROPS,
18860 ...localizationProps,
18861 ...props,
18862 "aria-label": ariaLabel,
18863 mode: "single",
18864 month,
18865 numberOfMonths: clampNumberOfMonths(numberOfMonths),
18866 labels,
18867 selected: selected ?? void 0,
18868 onSelect: setSelected,
18869 onDayFocus: dayFocusProps.onDayFocus,
18870 onDayBlur: dayFocusProps.onDayBlur
18871 }
18872 ) });
18873 }
18874 );
18875
18876 // packages/ui/build-module/calendar/range-calendar.mjs
18877 var import_element27 = __toESM(require_element(), 1);
18878 var import_jsx_runtime40 = __toESM(require_jsx_runtime(), 1);
18879 function usePreviewRange({
18880 value,
18881 hoveredDate,
18882 excludeDisabled,
18883 resetOnSelect,
18884 min: min3,
18885 max: max3,
18886 disabled: disabled2
18887 }) {
18888 return (0, import_element27.useMemo)(() => {
18889 if (!hoveredDate || !value?.from) {
18890 return;
18891 }
18892 if (resetOnSelect && value.to) {
18893 return {
18894 from: hoveredDate,
18895 to: hoveredDate
18896 };
18897 }
18898 let previewHighlight;
18899 let potentialNewRange;
18900 if (hoveredDate < value.from) {
18901 previewHighlight = {
18902 from: hoveredDate,
18903 to: value.from
18904 };
18905 potentialNewRange = {
18906 from: hoveredDate,
18907 to: value.to ?? value.from
18908 };
18909 } else if (value.to && hoveredDate > value.from && hoveredDate < value.to) {
18910 previewHighlight = {
18911 from: value.from,
18912 to: hoveredDate
18913 };
18914 potentialNewRange = {
18915 from: value.from,
18916 to: hoveredDate
18917 };
18918 } else if (hoveredDate > value.from) {
18919 previewHighlight = {
18920 from: value.to ?? value.from,
18921 to: hoveredDate
18922 };
18923 potentialNewRange = {
18924 from: value.from,
18925 to: hoveredDate
18926 };
18927 }
18928 if (min3 !== void 0 && min3 > 0 && potentialNewRange && differenceInCalendarDays(
18929 potentialNewRange.to,
18930 potentialNewRange.from
18931 ) < min3) {
18932 previewHighlight = {
18933 from: hoveredDate,
18934 to: hoveredDate
18935 };
18936 }
18937 if (max3 !== void 0 && max3 > 0 && potentialNewRange && differenceInCalendarDays(
18938 potentialNewRange.to,
18939 potentialNewRange.from
18940 ) > max3) {
18941 previewHighlight = {
18942 from: hoveredDate,
18943 to: hoveredDate
18944 };
18945 }
18946 if (excludeDisabled && disabled2 && potentialNewRange && rangeContainsModifiers(potentialNewRange, disabled2)) {
18947 previewHighlight = {
18948 from: hoveredDate,
18949 to: hoveredDate
18950 };
18951 }
18952 return previewHighlight;
18953 }, [
18954 value,
18955 hoveredDate,
18956 excludeDisabled,
18957 resetOnSelect,
18958 min3,
18959 max3,
18960 disabled2
18961 ]);
18962 }
18963 var RangeCalendar = (0, import_element27.forwardRef)(
18964 function RangeCalendar2({
18965 defaultValue,
18966 value: valueProp,
18967 onValueChange,
18968 numberOfMonths = 1,
18969 excludeDisabled,
18970 resetOnSelect = true,
18971 min: min3,
18972 max: max3,
18973 disabled: disabled2,
18974 locale,
18975 timeZone,
18976 month,
18977 render: render4,
18978 role = "application",
18979 "aria-label": ariaLabel,
18980 labels: customLabels,
18981 ...props
18982 }, ref) {
18983 const { "aria-label": defaultAriaLabel, ...localizationProps } = useLocalizationProps({
18984 locale,
18985 timeZone,
18986 mode: "range"
18987 });
18988 const labels = (0, import_element27.useMemo)(
18989 () => customLabels ? { ...localizationProps.labels, ...customLabels } : localizationProps.labels,
18990 [localizationProps.labels, customLabels]
18991 );
18992 const onChange = (0, import_element27.useCallback)(
18993 (selected2, triggerDate, modifiers2, e) => {
18994 onValueChange?.(
18995 selected2 ?? null,
18996 triggerDate,
18997 modifiers2,
18998 e
18999 );
19000 },
19001 [onValueChange]
19002 );
19003 const [selected, setSelected] = useControlledValue2({
19004 defaultValue,
19005 value: valueProp,
19006 onChange
19007 });
19008 const dayFocusProps = usePreserveDayFocus(ref, month);
19009 const [hoveredDate, setHoveredDate] = (0, import_element27.useState)(
19010 void 0
19011 );
19012 const previewRange = usePreviewRange({
19013 value: selected,
19014 hoveredDate,
19015 excludeDisabled,
19016 resetOnSelect,
19017 min: min3,
19018 max: max3,
19019 disabled: disabled2
19020 });
19021 const modifiers = (0, import_element27.useMemo)(() => {
19022 return {
19023 preview: previewRange,
19024 preview_start: previewRange?.from,
19025 preview_end: previewRange?.to
19026 };
19027 }, [previewRange]);
19028 const rootContextValue = (0, import_element27.useMemo)(
19029 () => ({
19030 render: render4,
19031 ref: dayFocusProps.ref,
19032 role,
19033 defaultAriaLabel
19034 }),
19035 [render4, dayFocusProps.ref, role, defaultAriaLabel]
19036 );
19037 return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(RootContext.Provider, { value: rootContextValue, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
19038 DayPicker,
19039 {
19040 ...COMMON_PROPS,
19041 ...localizationProps,
19042 ...props,
19043 "aria-label": ariaLabel,
19044 mode: "range",
19045 month,
19046 numberOfMonths: clampNumberOfMonths(numberOfMonths),
19047 disabled: disabled2,
19048 excludeDisabled,
19049 resetOnSelect,
19050 min: min3,
19051 max: max3,
19052 labels,
19053 selected: selected ?? void 0,
19054 onSelect: setSelected,
19055 onDayFocus: dayFocusProps.onDayFocus,
19056 onDayBlur: dayFocusProps.onDayBlur,
19057 onDayMouseEnter: (date) => setHoveredDate(date),
19058 onDayMouseLeave: () => setHoveredDate(void 0),
19059 modifiers,
19060 modifiersClassNames: MODIFIER_CLASSNAMES
19061 }
19062 ) });
19063 }
19064 );
19065
19066 // packages/ui/build-module/stack/stack.mjs
19067 var import_element28 = __toESM(require_element(), 1);
19068 var STYLE_HASH_ATTRIBUTE9 = "data-wp-hash";
19069 function getRuntime9() {
19070 const globalScope = globalThis;
19071 if (globalScope.__wpStyleRuntime) {
19072 return globalScope.__wpStyleRuntime;
19073 }
19074 globalScope.__wpStyleRuntime = {
19075 documents: /* @__PURE__ */ new Map(),
19076 styles: /* @__PURE__ */ new Map(),
19077 injectedStyles: /* @__PURE__ */ new WeakMap()
19078 };
19079 if (typeof document !== "undefined") {
19080 registerDocument9(document);
19081 }
19082 return globalScope.__wpStyleRuntime;
19083 }
19084 function documentContainsStyleHash9(targetDocument, hash) {
19085 if (!targetDocument.head) {
19086 return false;
19087 }
19088 for (const style of targetDocument.head.querySelectorAll(
19089 `style[${STYLE_HASH_ATTRIBUTE9}]`
19090 )) {
19091 if (style.getAttribute(STYLE_HASH_ATTRIBUTE9) === hash) {
19092 return true;
19093 }
19094 }
19095 return false;
19096 }
19097 function injectStyle9(targetDocument, hash, css) {
19098 if (!targetDocument.head) {
19099 return;
19100 }
19101 const runtime = getRuntime9();
19102 let injectedStyles = runtime.injectedStyles.get(targetDocument);
19103 if (!injectedStyles) {
19104 injectedStyles = /* @__PURE__ */ new Set();
19105 runtime.injectedStyles.set(targetDocument, injectedStyles);
19106 }
19107 if (injectedStyles.has(hash)) {
19108 return;
19109 }
19110 if (documentContainsStyleHash9(targetDocument, hash)) {
19111 injectedStyles.add(hash);
19112 return;
19113 }
19114 const style = targetDocument.createElement("style");
19115 style.setAttribute(STYLE_HASH_ATTRIBUTE9, hash);
19116 style.appendChild(targetDocument.createTextNode(css));
19117 targetDocument.head.appendChild(style);
19118 injectedStyles.add(hash);
19119 }
19120 function registerDocument9(targetDocument) {
19121 const runtime = getRuntime9();
19122 runtime.documents.set(
19123 targetDocument,
19124 (runtime.documents.get(targetDocument) ?? 0) + 1
19125 );
19126 for (const [hash, css] of runtime.styles) {
19127 injectStyle9(targetDocument, hash, css);
19128 }
19129 return () => {
19130 const count = runtime.documents.get(targetDocument);
19131 if (count === void 0) {
19132 return;
19133 }
19134 if (count <= 1) {
19135 runtime.documents.delete(targetDocument);
19136 return;
19137 }
19138 runtime.documents.set(targetDocument, count - 1);
19139 };
19140 }
19141 function registerStyle9(hash, css) {
19142 const runtime = getRuntime9();
19143 runtime.styles.set(hash, css);
19144 for (const targetDocument of runtime.documents.keys()) {
19145 injectStyle9(targetDocument, hash, css);
19146 }
19147 }
19148 if (typeof process === "undefined" || true) {
19149 registerStyle9("32aba35fe1", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer components{._19ce0419607e1896__stack{display:flex}}}");
19150 }
19151 var style_default8 = { "stack": "_19ce0419607e1896__stack" };
19152 var gapTokens = {
19153 xs: "var(--wpds-dimension-gap-xs, 4px)",
19154 sm: "var(--wpds-dimension-gap-sm, 8px)",
19155 md: "var(--wpds-dimension-gap-md, 12px)",
19156 lg: "var(--wpds-dimension-gap-lg, 16px)",
19157 xl: "var(--wpds-dimension-gap-xl, 24px)",
19158 "2xl": "var(--wpds-dimension-gap-2xl, 32px)",
19159 "3xl": "var(--wpds-dimension-gap-3xl, 40px)"
19160 };
19161 var Stack = (0, import_element28.forwardRef)(function Stack2({ direction, gap, align, justify, wrap, render: render4, ...props }, ref) {
19162 const style = {
19163 gap: gap && gapTokens[gap],
19164 alignItems: align,
19165 justifyContent: justify,
19166 flexDirection: direction,
19167 flexWrap: wrap
19168 };
19169 const element = useRender({
19170 render: render4,
19171 ref,
19172 props: mergeProps(props, { style, className: style_default8.stack })
19173 });
19174 return element;
19175 });
19176
19177 // packages/ui/build-module/form/primitives/input/input.mjs
19178 var import_element31 = __toESM(require_element(), 1);
19179
19180 // packages/ui/build-module/form/primitives/input-layout/input-layout.mjs
19181 var import_element29 = __toESM(require_element(), 1);
19182 var import_jsx_runtime41 = __toESM(require_jsx_runtime(), 1);
19183 var STYLE_HASH_ATTRIBUTE10 = "data-wp-hash";
19184 function getRuntime10() {
19185 const globalScope = globalThis;
19186 if (globalScope.__wpStyleRuntime) {
19187 return globalScope.__wpStyleRuntime;
19188 }
19189 globalScope.__wpStyleRuntime = {
19190 documents: /* @__PURE__ */ new Map(),
19191 styles: /* @__PURE__ */ new Map(),
19192 injectedStyles: /* @__PURE__ */ new WeakMap()
19193 };
19194 if (typeof document !== "undefined") {
19195 registerDocument10(document);
19196 }
19197 return globalScope.__wpStyleRuntime;
19198 }
19199 function documentContainsStyleHash10(targetDocument, hash) {
19200 if (!targetDocument.head) {
19201 return false;
19202 }
19203 for (const style of targetDocument.head.querySelectorAll(
19204 `style[${STYLE_HASH_ATTRIBUTE10}]`
19205 )) {
19206 if (style.getAttribute(STYLE_HASH_ATTRIBUTE10) === hash) {
19207 return true;
19208 }
19209 }
19210 return false;
19211 }
19212 function injectStyle10(targetDocument, hash, css) {
19213 if (!targetDocument.head) {
19214 return;
19215 }
19216 const runtime = getRuntime10();
19217 let injectedStyles = runtime.injectedStyles.get(targetDocument);
19218 if (!injectedStyles) {
19219 injectedStyles = /* @__PURE__ */ new Set();
19220 runtime.injectedStyles.set(targetDocument, injectedStyles);
19221 }
19222 if (injectedStyles.has(hash)) {
19223 return;
19224 }
19225 if (documentContainsStyleHash10(targetDocument, hash)) {
19226 injectedStyles.add(hash);
19227 return;
19228 }
19229 const style = targetDocument.createElement("style");
19230 style.setAttribute(STYLE_HASH_ATTRIBUTE10, hash);
19231 style.appendChild(targetDocument.createTextNode(css));
19232 targetDocument.head.appendChild(style);
19233 injectedStyles.add(hash);
19234 }
19235 function registerDocument10(targetDocument) {
19236 const runtime = getRuntime10();
19237 runtime.documents.set(
19238 targetDocument,
19239 (runtime.documents.get(targetDocument) ?? 0) + 1
19240 );
19241 for (const [hash, css] of runtime.styles) {
19242 injectStyle10(targetDocument, hash, css);
19243 }
19244 return () => {
19245 const count = runtime.documents.get(targetDocument);
19246 if (count === void 0) {
19247 return;
19248 }
19249 if (count <= 1) {
19250 runtime.documents.delete(targetDocument);
19251 return;
19252 }
19253 runtime.documents.set(targetDocument, count - 1);
19254 };
19255 }
19256 function registerStyle10(hash, css) {
19257 const runtime = getRuntime10();
19258 runtime.styles.set(hash, css);
19259 for (const targetDocument of runtime.documents.keys()) {
19260 injectStyle10(targetDocument, hash, css);
19261 }
19262 }
19263 if (typeof process === "undefined" || true) {
19264 registerStyle10("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)}");
19265 }
19266 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" };
19267 if (typeof process === "undefined" || true) {
19268 registerStyle10("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}");
19269 }
19270 var resets_default4 = { "box-sizing": "_336cd3e4e743482f__box-sizing" };
19271 if (typeof process === "undefined" || true) {
19272 registerStyle10("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))}}}}');
19273 }
19274 var style_default9 = { "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" };
19275 var InputLayout = (0, import_element29.forwardRef)(
19276 function InputLayout2({
19277 className,
19278 children,
19279 visuallyDisabled,
19280 size: size4 = "default",
19281 isBorderless,
19282 prefix,
19283 suffix,
19284 ...restProps
19285 }, ref) {
19286 return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
19287 "div",
19288 {
19289 ref,
19290 className: clsx_default(
19291 global_css_defense_default3.div,
19292 resets_default4["box-sizing"],
19293 style_default9["input-layout"],
19294 style_default9[`is-size-${size4}`],
19295 visuallyDisabled && style_default9["is-disabled"],
19296 isBorderless && style_default9["is-borderless"],
19297 className
19298 ),
19299 ...restProps,
19300 children: [
19301 import_element29.Children.count(prefix) > 0 && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
19302 "div",
19303 {
19304 className: style_default9["slot-wrapper"],
19305 "data-slot-type": "prefix",
19306 children: prefix
19307 }
19308 ),
19309 children,
19310 import_element29.Children.count(suffix) > 0 && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
19311 "div",
19312 {
19313 className: style_default9["slot-wrapper"],
19314 "data-slot-type": "suffix",
19315 children: suffix
19316 }
19317 )
19318 ]
19319 }
19320 );
19321 }
19322 );
19323
19324 // packages/ui/build-module/form/primitives/input-layout/slot.mjs
19325 var import_element30 = __toESM(require_element(), 1);
19326 var import_jsx_runtime42 = __toESM(require_jsx_runtime(), 1);
19327 var STYLE_HASH_ATTRIBUTE11 = "data-wp-hash";
19328 function getRuntime11() {
19329 const globalScope = globalThis;
19330 if (globalScope.__wpStyleRuntime) {
19331 return globalScope.__wpStyleRuntime;
19332 }
19333 globalScope.__wpStyleRuntime = {
19334 documents: /* @__PURE__ */ new Map(),
19335 styles: /* @__PURE__ */ new Map(),
19336 injectedStyles: /* @__PURE__ */ new WeakMap()
19337 };
19338 if (typeof document !== "undefined") {
19339 registerDocument11(document);
19340 }
19341 return globalScope.__wpStyleRuntime;
19342 }
19343 function documentContainsStyleHash11(targetDocument, hash) {
19344 if (!targetDocument.head) {
19345 return false;
19346 }
19347 for (const style of targetDocument.head.querySelectorAll(
19348 `style[${STYLE_HASH_ATTRIBUTE11}]`
19349 )) {
19350 if (style.getAttribute(STYLE_HASH_ATTRIBUTE11) === hash) {
19351 return true;
19352 }
19353 }
19354 return false;
19355 }
19356 function injectStyle11(targetDocument, hash, css) {
19357 if (!targetDocument.head) {
19358 return;
19359 }
19360 const runtime = getRuntime11();
19361 let injectedStyles = runtime.injectedStyles.get(targetDocument);
19362 if (!injectedStyles) {
19363 injectedStyles = /* @__PURE__ */ new Set();
19364 runtime.injectedStyles.set(targetDocument, injectedStyles);
19365 }
19366 if (injectedStyles.has(hash)) {
19367 return;
19368 }
19369 if (documentContainsStyleHash11(targetDocument, hash)) {
19370 injectedStyles.add(hash);
19371 return;
19372 }
19373 const style = targetDocument.createElement("style");
19374 style.setAttribute(STYLE_HASH_ATTRIBUTE11, hash);
19375 style.appendChild(targetDocument.createTextNode(css));
19376 targetDocument.head.appendChild(style);
19377 injectedStyles.add(hash);
19378 }
19379 function registerDocument11(targetDocument) {
19380 const runtime = getRuntime11();
19381 runtime.documents.set(
19382 targetDocument,
19383 (runtime.documents.get(targetDocument) ?? 0) + 1
19384 );
19385 for (const [hash, css] of runtime.styles) {
19386 injectStyle11(targetDocument, hash, css);
19387 }
19388 return () => {
19389 const count = runtime.documents.get(targetDocument);
19390 if (count === void 0) {
19391 return;
19392 }
19393 if (count <= 1) {
19394 runtime.documents.delete(targetDocument);
19395 return;
19396 }
19397 runtime.documents.set(targetDocument, count - 1);
19398 };
19399 }
19400 function registerStyle11(hash, css) {
19401 const runtime = getRuntime11();
19402 runtime.styles.set(hash, css);
19403 for (const targetDocument of runtime.documents.keys()) {
19404 injectStyle11(targetDocument, hash, css);
19405 }
19406 }
19407 if (typeof process === "undefined" || true) {
19408 registerStyle11("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))}}}}');
19409 }
19410 var style_default10 = { "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" };
19411 var InputLayoutSlot = (0, import_element30.forwardRef)(function InputLayoutSlot2({ padding = "default", className, ...restProps }, ref) {
19412 return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
19413 "div",
19414 {
19415 ref,
19416 className: clsx_default(
19417 style_default10["input-layout-slot"],
19418 style_default10[`is-padding-${padding}`],
19419 className
19420 ),
19421 ...restProps
19422 }
19423 );
19424 });
19425 InputLayoutSlot.displayName = "InputLayout.Slot";
19426
19427 // packages/ui/build-module/form/primitives/input-layout/index.mjs
19428 var InputLayout3 = Object.assign(InputLayout, {
19429 Slot: InputLayoutSlot
19430 });
19431
19432 // packages/ui/build-module/form/primitives/input/input.mjs
19433 var import_jsx_runtime43 = __toESM(require_jsx_runtime(), 1);
19434 var STYLE_HASH_ATTRIBUTE12 = "data-wp-hash";
19435 function getRuntime12() {
19436 const globalScope = globalThis;
19437 if (globalScope.__wpStyleRuntime) {
19438 return globalScope.__wpStyleRuntime;
19439 }
19440 globalScope.__wpStyleRuntime = {
19441 documents: /* @__PURE__ */ new Map(),
19442 styles: /* @__PURE__ */ new Map(),
19443 injectedStyles: /* @__PURE__ */ new WeakMap()
19444 };
19445 if (typeof document !== "undefined") {
19446 registerDocument12(document);
19447 }
19448 return globalScope.__wpStyleRuntime;
19449 }
19450 function documentContainsStyleHash12(targetDocument, hash) {
19451 if (!targetDocument.head) {
19452 return false;
19453 }
19454 for (const style of targetDocument.head.querySelectorAll(
19455 `style[${STYLE_HASH_ATTRIBUTE12}]`
19456 )) {
19457 if (style.getAttribute(STYLE_HASH_ATTRIBUTE12) === hash) {
19458 return true;
19459 }
19460 }
19461 return false;
19462 }
19463 function injectStyle12(targetDocument, hash, css) {
19464 if (!targetDocument.head) {
19465 return;
19466 }
19467 const runtime = getRuntime12();
19468 let injectedStyles = runtime.injectedStyles.get(targetDocument);
19469 if (!injectedStyles) {
19470 injectedStyles = /* @__PURE__ */ new Set();
19471 runtime.injectedStyles.set(targetDocument, injectedStyles);
19472 }
19473 if (injectedStyles.has(hash)) {
19474 return;
19475 }
19476 if (documentContainsStyleHash12(targetDocument, hash)) {
19477 injectedStyles.add(hash);
19478 return;
19479 }
19480 const style = targetDocument.createElement("style");
19481 style.setAttribute(STYLE_HASH_ATTRIBUTE12, hash);
19482 style.appendChild(targetDocument.createTextNode(css));
19483 targetDocument.head.appendChild(style);
19484 injectedStyles.add(hash);
19485 }
19486 function registerDocument12(targetDocument) {
19487 const runtime = getRuntime12();
19488 runtime.documents.set(
19489 targetDocument,
19490 (runtime.documents.get(targetDocument) ?? 0) + 1
19491 );
19492 for (const [hash, css] of runtime.styles) {
19493 injectStyle12(targetDocument, hash, css);
19494 }
19495 return () => {
19496 const count = runtime.documents.get(targetDocument);
19497 if (count === void 0) {
19498 return;
19499 }
19500 if (count <= 1) {
19501 runtime.documents.delete(targetDocument);
19502 return;
19503 }
19504 runtime.documents.set(targetDocument, count - 1);
19505 };
19506 }
19507 function registerStyle12(hash, css) {
19508 const runtime = getRuntime12();
19509 runtime.styles.set(hash, css);
19510 for (const targetDocument of runtime.documents.keys()) {
19511 injectStyle12(targetDocument, hash, css);
19512 }
19513 }
19514 if (typeof process === "undefined" || true) {
19515 registerStyle12("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)}");
19516 }
19517 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" };
19518 if (typeof process === "undefined" || true) {
19519 registerStyle12("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))}}}");
19520 }
19521 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" };
19522 if (typeof process === "undefined" || true) {
19523 registerStyle12("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}}}}}");
19524 }
19525 var style_default11 = { "input": "_2ae7be2fc1bb17a3__input" };
19526 var Input3 = (0, import_element31.forwardRef)(function Input22({ className, size: size4 = "default", prefix, suffix, style, ...restProps }, ref) {
19527 return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
19528 InputLayout3,
19529 {
19530 className: clsx_default(
19531 focus_module_default3["outset-ring--focus-within"],
19532 className
19533 ),
19534 style,
19535 size: size4,
19536 visuallyDisabled: restProps.disabled,
19537 prefix,
19538 suffix,
19539 children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
19540 Input,
19541 {
19542 ref,
19543 className: clsx_default(global_css_defense_default4.input, style_default11.input),
19544 ...restProps
19545 }
19546 )
19547 }
19548 );
19549 });
19550
19551 // packages/ui/build-module/form/primitives/control-with-error/control-with-error.mjs
19552 var import_i18n6 = __toESM(require_i18n(), 1);
19553 var import_element33 = __toESM(require_element(), 1);
19554
19555 // packages/ui/build-module/spinner/spinner.mjs
19556 var import_element32 = __toESM(require_element(), 1);
19557 var import_jsx_runtime44 = __toESM(require_jsx_runtime(), 1);
19558 var STYLE_HASH_ATTRIBUTE13 = "data-wp-hash";
19559 function getRuntime13() {
19560 const globalScope = globalThis;
19561 if (globalScope.__wpStyleRuntime) {
19562 return globalScope.__wpStyleRuntime;
19563 }
19564 globalScope.__wpStyleRuntime = {
19565 documents: /* @__PURE__ */ new Map(),
19566 styles: /* @__PURE__ */ new Map(),
19567 injectedStyles: /* @__PURE__ */ new WeakMap()
19568 };
19569 if (typeof document !== "undefined") {
19570 registerDocument13(document);
19571 }
19572 return globalScope.__wpStyleRuntime;
19573 }
19574 function documentContainsStyleHash13(targetDocument, hash) {
19575 if (!targetDocument.head) {
19576 return false;
19577 }
19578 for (const style of targetDocument.head.querySelectorAll(
19579 `style[${STYLE_HASH_ATTRIBUTE13}]`
19580 )) {
19581 if (style.getAttribute(STYLE_HASH_ATTRIBUTE13) === hash) {
19582 return true;
19583 }
19584 }
19585 return false;
19586 }
19587 function injectStyle13(targetDocument, hash, css) {
19588 if (!targetDocument.head) {
19589 return;
19590 }
19591 const runtime = getRuntime13();
19592 let injectedStyles = runtime.injectedStyles.get(targetDocument);
19593 if (!injectedStyles) {
19594 injectedStyles = /* @__PURE__ */ new Set();
19595 runtime.injectedStyles.set(targetDocument, injectedStyles);
19596 }
19597 if (injectedStyles.has(hash)) {
19598 return;
19599 }
19600 if (documentContainsStyleHash13(targetDocument, hash)) {
19601 injectedStyles.add(hash);
19602 return;
19603 }
19604 const style = targetDocument.createElement("style");
19605 style.setAttribute(STYLE_HASH_ATTRIBUTE13, hash);
19606 style.appendChild(targetDocument.createTextNode(css));
19607 targetDocument.head.appendChild(style);
19608 injectedStyles.add(hash);
19609 }
19610 function registerDocument13(targetDocument) {
19611 const runtime = getRuntime13();
19612 runtime.documents.set(
19613 targetDocument,
19614 (runtime.documents.get(targetDocument) ?? 0) + 1
19615 );
19616 for (const [hash, css] of runtime.styles) {
19617 injectStyle13(targetDocument, hash, css);
19618 }
19619 return () => {
19620 const count = runtime.documents.get(targetDocument);
19621 if (count === void 0) {
19622 return;
19623 }
19624 if (count <= 1) {
19625 runtime.documents.delete(targetDocument);
19626 return;
19627 }
19628 runtime.documents.set(targetDocument, count - 1);
19629 };
19630 }
19631 function registerStyle13(hash, css) {
19632 const runtime = getRuntime13();
19633 runtime.styles.set(hash, css);
19634 for (const targetDocument of runtime.documents.keys()) {
19635 injectStyle13(targetDocument, hash, css);
19636 }
19637 }
19638 if (typeof process === "undefined" || true) {
19639 registerStyle13("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)}}}}");
19640 }
19641 var style_default12 = { "spinner": "ab4d64c07c0ba587__spinner", "track": "dc51f80c84b35fe2__track", "indicator": "a7654e10245bb7d2__indicator", "spinner-spin": "_02322d973909703c__spinner-spin" };
19642 var Spinner = (0, import_element32.forwardRef)(
19643 function Spinner2({ className, ...props }, ref) {
19644 return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
19645 "svg",
19646 {
19647 className: clsx_default(style_default12.spinner, className),
19648 viewBox: "0 0 100 100",
19649 xmlns: "http://www.w3.org/2000/svg",
19650 role: "presentation",
19651 focusable: "false",
19652 ...props,
19653 ref,
19654 children: [
19655 /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
19656 "circle",
19657 {
19658 className: style_default12.track,
19659 cx: "50",
19660 cy: "50",
19661 r: "50",
19662 vectorEffect: "non-scaling-stroke"
19663 }
19664 ),
19665 /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
19666 "path",
19667 {
19668 className: style_default12.indicator,
19669 d: "m 50 0 a 50 50 0 0 1 50 50",
19670 vectorEffect: "non-scaling-stroke"
19671 }
19672 )
19673 ]
19674 }
19675 );
19676 }
19677 );
19678
19679 // packages/ui/build-module/form/primitives/validity-indicator/validity-indicator.mjs
19680 var import_jsx_runtime45 = __toESM(require_jsx_runtime(), 1);
19681 var STYLE_HASH_ATTRIBUTE14 = "data-wp-hash";
19682 function getRuntime14() {
19683 const globalScope = globalThis;
19684 if (globalScope.__wpStyleRuntime) {
19685 return globalScope.__wpStyleRuntime;
19686 }
19687 globalScope.__wpStyleRuntime = {
19688 documents: /* @__PURE__ */ new Map(),
19689 styles: /* @__PURE__ */ new Map(),
19690 injectedStyles: /* @__PURE__ */ new WeakMap()
19691 };
19692 if (typeof document !== "undefined") {
19693 registerDocument14(document);
19694 }
19695 return globalScope.__wpStyleRuntime;
19696 }
19697 function documentContainsStyleHash14(targetDocument, hash) {
19698 if (!targetDocument.head) {
19699 return false;
19700 }
19701 for (const style of targetDocument.head.querySelectorAll(
19702 `style[${STYLE_HASH_ATTRIBUTE14}]`
19703 )) {
19704 if (style.getAttribute(STYLE_HASH_ATTRIBUTE14) === hash) {
19705 return true;
19706 }
19707 }
19708 return false;
19709 }
19710 function injectStyle14(targetDocument, hash, css) {
19711 if (!targetDocument.head) {
19712 return;
19713 }
19714 const runtime = getRuntime14();
19715 let injectedStyles = runtime.injectedStyles.get(targetDocument);
19716 if (!injectedStyles) {
19717 injectedStyles = /* @__PURE__ */ new Set();
19718 runtime.injectedStyles.set(targetDocument, injectedStyles);
19719 }
19720 if (injectedStyles.has(hash)) {
19721 return;
19722 }
19723 if (documentContainsStyleHash14(targetDocument, hash)) {
19724 injectedStyles.add(hash);
19725 return;
19726 }
19727 const style = targetDocument.createElement("style");
19728 style.setAttribute(STYLE_HASH_ATTRIBUTE14, hash);
19729 style.appendChild(targetDocument.createTextNode(css));
19730 targetDocument.head.appendChild(style);
19731 injectedStyles.add(hash);
19732 }
19733 function registerDocument14(targetDocument) {
19734 const runtime = getRuntime14();
19735 runtime.documents.set(
19736 targetDocument,
19737 (runtime.documents.get(targetDocument) ?? 0) + 1
19738 );
19739 for (const [hash, css] of runtime.styles) {
19740 injectStyle14(targetDocument, hash, css);
19741 }
19742 return () => {
19743 const count = runtime.documents.get(targetDocument);
19744 if (count === void 0) {
19745 return;
19746 }
19747 if (count <= 1) {
19748 runtime.documents.delete(targetDocument);
19749 return;
19750 }
19751 runtime.documents.set(targetDocument, count - 1);
19752 };
19753 }
19754 function registerStyle14(hash, css) {
19755 const runtime = getRuntime14();
19756 runtime.styles.set(hash, css);
19757 for (const targetDocument of runtime.documents.keys()) {
19758 injectStyle14(targetDocument, hash, css);
19759 }
19760 }
19761 if (typeof process === "undefined" || true) {
19762 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)}");
19763 }
19764 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" };
19765 if (typeof process === "undefined" || true) {
19766 registerStyle14("d11816833c", '@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,#008030)}.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)}}}}');
19767 }
19768 var style_default13 = { "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" };
19769 var ICON = {
19770 valid: published_default,
19771 invalid: error_default
19772 };
19773 function ValidityIndicator({
19774 id,
19775 type,
19776 message: message2
19777 }) {
19778 return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
19779 "p",
19780 {
19781 id,
19782 className: clsx_default(
19783 global_css_defense_default5.p,
19784 style_default13.indicator,
19785 style_default13[`is-${type}`]
19786 ),
19787 children: [
19788 type === "validating" ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Spinner, { className: style_default13["indicator-spinner"] }) : /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
19789 Icon,
19790 {
19791 className: style_default13["indicator-icon"],
19792 icon: ICON[type],
19793 size: 16,
19794 fill: "currentColor"
19795 }
19796 ),
19797 message2
19798 ]
19799 }
19800 );
19801 }
19802
19803 // packages/ui/build-module/form/primitives/control-with-error/control-with-error.mjs
19804 var import_jsx_runtime46 = __toESM(require_jsx_runtime(), 1);
19805 var DEFAULT_RENDER = (props) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Stack, { ...props, direction: "column", gap: "sm" });
19806 function appendRequiredIndicator(label, required, markWhenOptional) {
19807 let suffix;
19808 if (required && !markWhenOptional) {
19809 suffix = `(${(0, import_i18n6.__)("Required")})`;
19810 } else if (!required && markWhenOptional) {
19811 suffix = `(${(0, import_i18n6.__)("Optional")})`;
19812 }
19813 if (!suffix) {
19814 return label;
19815 }
19816 if (typeof label === "string") {
19817 return `${label} ${suffix}`;
19818 }
19819 return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment, { children: [
19820 label,
19821 " ",
19822 suffix
19823 ] });
19824 }
19825 var VALIDITY_VISIBLE_ATTRIBUTE = "data-validity-visible";
19826 var ControlWithError = (0, import_element33.forwardRef)(function ControlWithError2({
19827 required,
19828 markWhenOptional,
19829 customValidity,
19830 getValidityTarget,
19831 children,
19832 render: render4 = DEFAULT_RENDER,
19833 ...restProps
19834 }, forwardedRef) {
19835 const [errorMessage, setErrorMessage] = (0, import_element33.useState)();
19836 const [statusMessage, setStatusMessage] = (0, import_element33.useState)();
19837 const [showMessage, setShowMessage] = (0, import_element33.useState)(false);
19838 const [isTouched, setIsTouched] = (0, import_element33.useState)(false);
19839 const wrapperRef = (0, import_element33.useRef)(null);
19840 (0, import_element33.useEffect)(() => {
19841 const validityTarget = getValidityTarget();
19842 const handler = () => {
19843 if (customValidity?.type !== "validating") {
19844 setErrorMessage(validityTarget?.validationMessage);
19845 }
19846 setShowMessage(true);
19847 validityTarget?.setAttribute(VALIDITY_VISIBLE_ATTRIBUTE, "");
19848 };
19849 validityTarget?.addEventListener("invalid", handler);
19850 return () => validityTarget?.removeEventListener("invalid", handler);
19851 }, [customValidity?.type, getValidityTarget]);
19852 (0, import_element33.useEffect)(() => {
19853 const validityTarget = getValidityTarget();
19854 const suppressNativePopover = (event) => {
19855 event.preventDefault();
19856 if (!event.isTrusted) {
19857 return;
19858 }
19859 const target = event.target;
19860 const firstErrorInForm = Array.from(
19861 target.form?.elements ?? []
19862 ).find((el) => !el.validity.valid);
19863 if (!target.form || firstErrorInForm === target) {
19864 target.focus();
19865 }
19866 };
19867 const radioSiblings = validityTarget?.type === "radio" && validityTarget?.name ? Array.from(
19868 wrapperRef.current?.querySelectorAll(
19869 `input[type="radio"][name="${validityTarget?.name}"]`
19870 ) ?? []
19871 ).filter((sibling) => sibling !== validityTarget) : [];
19872 validityTarget?.addEventListener("invalid", suppressNativePopover);
19873 radioSiblings.forEach(
19874 (sibling) => sibling.addEventListener("invalid", suppressNativePopover)
19875 );
19876 return () => {
19877 validityTarget?.removeEventListener(
19878 "invalid",
19879 suppressNativePopover
19880 );
19881 radioSiblings.forEach(
19882 (sibling) => sibling.removeEventListener("invalid", suppressNativePopover)
19883 );
19884 };
19885 }, [getValidityTarget]);
19886 (0, import_element33.useEffect)(() => {
19887 const validityTarget = getValidityTarget();
19888 if (!customValidity?.type) {
19889 validityTarget?.setCustomValidity("");
19890 setErrorMessage(validityTarget?.validationMessage);
19891 setStatusMessage(void 0);
19892 return;
19893 }
19894 switch (customValidity.type) {
19895 case "validating": {
19896 validityTarget?.setCustomValidity("");
19897 setErrorMessage(void 0);
19898 setStatusMessage({
19899 type: "validating",
19900 message: customValidity.message
19901 });
19902 break;
19903 }
19904 case "valid": {
19905 validityTarget?.setCustomValidity("");
19906 setErrorMessage(validityTarget?.validationMessage);
19907 setStatusMessage({
19908 type: "valid",
19909 message: customValidity.message
19910 });
19911 break;
19912 }
19913 case "invalid": {
19914 validityTarget?.setCustomValidity(
19915 customValidity.message ?? ""
19916 );
19917 setErrorMessage(validityTarget?.validationMessage);
19918 setStatusMessage(void 0);
19919 break;
19920 }
19921 }
19922 }, [customValidity, getValidityTarget]);
19923 (0, import_element33.useEffect)(() => {
19924 if (!isTouched || showMessage) {
19925 return;
19926 }
19927 if (customValidity?.type === "validating") {
19928 const timer = setTimeout(() => {
19929 setShowMessage(true);
19930 }, 1e3);
19931 return () => clearTimeout(timer);
19932 }
19933 setShowMessage(true);
19934 }, [isTouched, customValidity?.type, showMessage]);
19935 const onBlur = (event) => {
19936 if (event.relatedTarget && event.currentTarget.contains(event.relatedTarget)) {
19937 return;
19938 }
19939 if (!isTouched) {
19940 setIsTouched(true);
19941 getValidityTarget()?.setAttribute(VALIDITY_VISIBLE_ATTRIBUTE, "");
19942 }
19943 const validityTarget = getValidityTarget();
19944 const isValidating = customValidity?.type === "validating";
19945 window.queueMicrotask(() => {
19946 if (!isValidating) {
19947 setErrorMessage(validityTarget?.validationMessage);
19948 }
19949 });
19950 };
19951 const messageId = (0, import_element33.useId)();
19952 const message2 = (() => {
19953 if (errorMessage) {
19954 return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
19955 ValidityIndicator,
19956 {
19957 id: messageId,
19958 type: "invalid",
19959 message: errorMessage
19960 }
19961 );
19962 }
19963 if (statusMessage?.type) {
19964 return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
19965 ValidityIndicator,
19966 {
19967 id: messageId,
19968 type: statusMessage.type,
19969 message: statusMessage.message
19970 }
19971 );
19972 }
19973 return null;
19974 })();
19975 const visibleMessage = showMessage ? message2 : null;
19976 (0, import_element33.useEffect)(() => {
19977 const target = getValidityTarget();
19978 if (!target) {
19979 return;
19980 }
19981 function setDescribedBy(el, shouldAdd) {
19982 const ids = (el.getAttribute("aria-describedby") ?? "").split(" ").filter((id) => id && id !== messageId);
19983 if (shouldAdd) {
19984 ids.push(messageId);
19985 }
19986 if (ids.length) {
19987 el.setAttribute("aria-describedby", ids.join(" "));
19988 } else {
19989 el.removeAttribute("aria-describedby");
19990 }
19991 }
19992 setDescribedBy(target, !!visibleMessage);
19993 return () => setDescribedBy(target, false);
19994 }, [visibleMessage, messageId, getValidityTarget]);
19995 return useRender({
19996 render: render4,
19997 ref: [forwardedRef, wrapperRef],
19998 props: mergeProps(restProps, {
19999 onBlur,
20000 children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment, { children: [
20001 (0, import_element33.cloneElement)(children, {
20002 label: appendRequiredIndicator(
20003 children.props.label,
20004 required,
20005 markWhenOptional
20006 ),
20007 required
20008 }),
20009 visibleMessage
20010 ] })
20011 })
20012 });
20013 });
20014
20015 // packages/ui/build-module/form/primitives/field/index.mjs
20016 var field_exports = {};
20017 __export(field_exports, {
20018 Control: () => Control,
20019 Description: () => Description,
20020 Details: () => Details,
20021 Item: () => Item,
20022 Label: () => Label,
20023 Root: () => Root4,
20024 VisualLabel: () => VisualLabel
20025 });
20026
20027 // packages/ui/build-module/form/primitives/field/root.mjs
20028 var import_element34 = __toESM(require_element(), 1);
20029 var import_jsx_runtime47 = __toESM(require_jsx_runtime(), 1);
20030 var STYLE_HASH_ATTRIBUTE15 = "data-wp-hash";
20031 function getRuntime15() {
20032 const globalScope = globalThis;
20033 if (globalScope.__wpStyleRuntime) {
20034 return globalScope.__wpStyleRuntime;
20035 }
20036 globalScope.__wpStyleRuntime = {
20037 documents: /* @__PURE__ */ new Map(),
20038 styles: /* @__PURE__ */ new Map(),
20039 injectedStyles: /* @__PURE__ */ new WeakMap()
20040 };
20041 if (typeof document !== "undefined") {
20042 registerDocument15(document);
20043 }
20044 return globalScope.__wpStyleRuntime;
20045 }
20046 function documentContainsStyleHash15(targetDocument, hash) {
20047 if (!targetDocument.head) {
20048 return false;
20049 }
20050 for (const style of targetDocument.head.querySelectorAll(
20051 `style[${STYLE_HASH_ATTRIBUTE15}]`
20052 )) {
20053 if (style.getAttribute(STYLE_HASH_ATTRIBUTE15) === hash) {
20054 return true;
20055 }
20056 }
20057 return false;
20058 }
20059 function injectStyle15(targetDocument, hash, css) {
20060 if (!targetDocument.head) {
20061 return;
20062 }
20063 const runtime = getRuntime15();
20064 let injectedStyles = runtime.injectedStyles.get(targetDocument);
20065 if (!injectedStyles) {
20066 injectedStyles = /* @__PURE__ */ new Set();
20067 runtime.injectedStyles.set(targetDocument, injectedStyles);
20068 }
20069 if (injectedStyles.has(hash)) {
20070 return;
20071 }
20072 if (documentContainsStyleHash15(targetDocument, hash)) {
20073 injectedStyles.add(hash);
20074 return;
20075 }
20076 const style = targetDocument.createElement("style");
20077 style.setAttribute(STYLE_HASH_ATTRIBUTE15, hash);
20078 style.appendChild(targetDocument.createTextNode(css));
20079 targetDocument.head.appendChild(style);
20080 injectedStyles.add(hash);
20081 }
20082 function registerDocument15(targetDocument) {
20083 const runtime = getRuntime15();
20084 runtime.documents.set(
20085 targetDocument,
20086 (runtime.documents.get(targetDocument) ?? 0) + 1
20087 );
20088 for (const [hash, css] of runtime.styles) {
20089 injectStyle15(targetDocument, hash, css);
20090 }
20091 return () => {
20092 const count = runtime.documents.get(targetDocument);
20093 if (count === void 0) {
20094 return;
20095 }
20096 if (count <= 1) {
20097 runtime.documents.delete(targetDocument);
20098 return;
20099 }
20100 runtime.documents.set(targetDocument, count - 1);
20101 };
20102 }
20103 function registerStyle15(hash, css) {
20104 const runtime = getRuntime15();
20105 runtime.styles.set(hash, css);
20106 for (const targetDocument of runtime.documents.keys()) {
20107 injectStyle15(targetDocument, hash, css);
20108 }
20109 }
20110 if (typeof process === "undefined" || true) {
20111 registerStyle15("10f3806643", "@layer wp-ui{@layer utilities, components, compositions, overrides;@layer utilities{._336cd3e4e743482f__box-sizing{box-sizing:border-box;*,:after,:before{box-sizing:inherit}}}}");
20112 }
20113 var resets_default5 = { "box-sizing": "_336cd3e4e743482f__box-sizing" };
20114 var DEFAULT_RENDER2 = (props) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Stack, { ...props, direction: "column", gap: "sm" });
20115 var Root4 = (0, import_element34.forwardRef)(function Root22({ className, render: render4 = DEFAULT_RENDER2, ...restProps }, ref) {
20116 return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
20117 index_parts_exports.Root,
20118 {
20119 ref,
20120 className: clsx_default(resets_default5["box-sizing"], className),
20121 render: render4,
20122 ...restProps
20123 }
20124 );
20125 });
20126
20127 // packages/ui/build-module/form/primitives/field/item.mjs
20128 var import_element35 = __toESM(require_element(), 1);
20129 var import_jsx_runtime48 = __toESM(require_jsx_runtime(), 1);
20130 var Item = (0, import_element35.forwardRef)(function Item2(props, ref) {
20131 return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(index_parts_exports.Item, { ref, ...props });
20132 });
20133
20134 // packages/ui/build-module/form/primitives/field/label.mjs
20135 var import_element36 = __toESM(require_element(), 1);
20136 var import_jsx_runtime49 = __toESM(require_jsx_runtime(), 1);
20137 var STYLE_HASH_ATTRIBUTE16 = "data-wp-hash";
20138 function getRuntime16() {
20139 const globalScope = globalThis;
20140 if (globalScope.__wpStyleRuntime) {
20141 return globalScope.__wpStyleRuntime;
20142 }
20143 globalScope.__wpStyleRuntime = {
20144 documents: /* @__PURE__ */ new Map(),
20145 styles: /* @__PURE__ */ new Map(),
20146 injectedStyles: /* @__PURE__ */ new WeakMap()
20147 };
20148 if (typeof document !== "undefined") {
20149 registerDocument16(document);
20150 }
20151 return globalScope.__wpStyleRuntime;
20152 }
20153 function documentContainsStyleHash16(targetDocument, hash) {
20154 if (!targetDocument.head) {
20155 return false;
20156 }
20157 for (const style of targetDocument.head.querySelectorAll(
20158 `style[${STYLE_HASH_ATTRIBUTE16}]`
20159 )) {
20160 if (style.getAttribute(STYLE_HASH_ATTRIBUTE16) === hash) {
20161 return true;
20162 }
20163 }
20164 return false;
20165 }
20166 function injectStyle16(targetDocument, hash, css) {
20167 if (!targetDocument.head) {
20168 return;
20169 }
20170 const runtime = getRuntime16();
20171 let injectedStyles = runtime.injectedStyles.get(targetDocument);
20172 if (!injectedStyles) {
20173 injectedStyles = /* @__PURE__ */ new Set();
20174 runtime.injectedStyles.set(targetDocument, injectedStyles);
20175 }
20176 if (injectedStyles.has(hash)) {
20177 return;
20178 }
20179 if (documentContainsStyleHash16(targetDocument, hash)) {
20180 injectedStyles.add(hash);
20181 return;
20182 }
20183 const style = targetDocument.createElement("style");
20184 style.setAttribute(STYLE_HASH_ATTRIBUTE16, hash);
20185 style.appendChild(targetDocument.createTextNode(css));
20186 targetDocument.head.appendChild(style);
20187 injectedStyles.add(hash);
20188 }
20189 function registerDocument16(targetDocument) {
20190 const runtime = getRuntime16();
20191 runtime.documents.set(
20192 targetDocument,
20193 (runtime.documents.get(targetDocument) ?? 0) + 1
20194 );
20195 for (const [hash, css] of runtime.styles) {
20196 injectStyle16(targetDocument, hash, css);
20197 }
20198 return () => {
20199 const count = runtime.documents.get(targetDocument);
20200 if (count === void 0) {
20201 return;
20202 }
20203 if (count <= 1) {
20204 runtime.documents.delete(targetDocument);
20205 return;
20206 }
20207 runtime.documents.set(targetDocument, count - 1);
20208 };
20209 }
20210 function registerStyle16(hash, css) {
20211 const runtime = getRuntime16();
20212 runtime.styles.set(hash, css);
20213 for (const targetDocument of runtime.documents.keys()) {
20214 injectStyle16(targetDocument, hash, css);
20215 }
20216 }
20217 if (typeof process === "undefined" || true) {
20218 registerStyle16("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)}}}');
20219 }
20220 var field_default = { "label": "_2d5ad850b2f90964__label", "is-plain": "_17c4214649230bea__is-plain", "description": "_08a3750500e0233f__description" };
20221 var Label = (0, import_element36.forwardRef)(
20222 function Label2({ className, hideFromVision, variant, ...restProps }, ref) {
20223 const label = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
20224 index_parts_exports.Label,
20225 {
20226 ref,
20227 className: clsx_default(
20228 field_default.label,
20229 variant && field_default[`is-${variant}`],
20230 className
20231 ),
20232 ...restProps
20233 }
20234 );
20235 if (hideFromVision) {
20236 return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(VisuallyHidden, { render: label });
20237 }
20238 return label;
20239 }
20240 );
20241
20242 // packages/ui/build-module/form/primitives/field/description.mjs
20243 var import_element37 = __toESM(require_element(), 1);
20244 var import_jsx_runtime50 = __toESM(require_jsx_runtime(), 1);
20245 var STYLE_HASH_ATTRIBUTE17 = "data-wp-hash";
20246 function getRuntime17() {
20247 const globalScope = globalThis;
20248 if (globalScope.__wpStyleRuntime) {
20249 return globalScope.__wpStyleRuntime;
20250 }
20251 globalScope.__wpStyleRuntime = {
20252 documents: /* @__PURE__ */ new Map(),
20253 styles: /* @__PURE__ */ new Map(),
20254 injectedStyles: /* @__PURE__ */ new WeakMap()
20255 };
20256 if (typeof document !== "undefined") {
20257 registerDocument17(document);
20258 }
20259 return globalScope.__wpStyleRuntime;
20260 }
20261 function documentContainsStyleHash17(targetDocument, hash) {
20262 if (!targetDocument.head) {
20263 return false;
20264 }
20265 for (const style of targetDocument.head.querySelectorAll(
20266 `style[${STYLE_HASH_ATTRIBUTE17}]`
20267 )) {
20268 if (style.getAttribute(STYLE_HASH_ATTRIBUTE17) === hash) {
20269 return true;
20270 }
20271 }
20272 return false;
20273 }
20274 function injectStyle17(targetDocument, hash, css) {
20275 if (!targetDocument.head) {
20276 return;
20277 }
20278 const runtime = getRuntime17();
20279 let injectedStyles = runtime.injectedStyles.get(targetDocument);
20280 if (!injectedStyles) {
20281 injectedStyles = /* @__PURE__ */ new Set();
20282 runtime.injectedStyles.set(targetDocument, injectedStyles);
20283 }
20284 if (injectedStyles.has(hash)) {
20285 return;
20286 }
20287 if (documentContainsStyleHash17(targetDocument, hash)) {
20288 injectedStyles.add(hash);
20289 return;
20290 }
20291 const style = targetDocument.createElement("style");
20292 style.setAttribute(STYLE_HASH_ATTRIBUTE17, hash);
20293 style.appendChild(targetDocument.createTextNode(css));
20294 targetDocument.head.appendChild(style);
20295 injectedStyles.add(hash);
20296 }
20297 function registerDocument17(targetDocument) {
20298 const runtime = getRuntime17();
20299 runtime.documents.set(
20300 targetDocument,
20301 (runtime.documents.get(targetDocument) ?? 0) + 1
20302 );
20303 for (const [hash, css] of runtime.styles) {
20304 injectStyle17(targetDocument, hash, css);
20305 }
20306 return () => {
20307 const count = runtime.documents.get(targetDocument);
20308 if (count === void 0) {
20309 return;
20310 }
20311 if (count <= 1) {
20312 runtime.documents.delete(targetDocument);
20313 return;
20314 }
20315 runtime.documents.set(targetDocument, count - 1);
20316 };
20317 }
20318 function registerStyle17(hash, css) {
20319 const runtime = getRuntime17();
20320 runtime.styles.set(hash, css);
20321 for (const targetDocument of runtime.documents.keys()) {
20322 injectStyle17(targetDocument, hash, css);
20323 }
20324 }
20325 if (typeof process === "undefined" || true) {
20326 registerStyle17("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)}");
20327 }
20328 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" };
20329 if (typeof process === "undefined" || true) {
20330 registerStyle17("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)}}}');
20331 }
20332 var field_default2 = { "label": "_2d5ad850b2f90964__label", "is-plain": "_17c4214649230bea__is-plain", "description": "_08a3750500e0233f__description" };
20333 var Description = (0, import_element37.forwardRef)(function Description2({ className, ...restProps }, ref) {
20334 return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
20335 index_parts_exports.Description,
20336 {
20337 ref,
20338 className: clsx_default(
20339 global_css_defense_default6.p,
20340 field_default2.description,
20341 className
20342 ),
20343 ...restProps
20344 }
20345 );
20346 });
20347
20348 // packages/ui/build-module/form/primitives/field/details.mjs
20349 var import_element38 = __toESM(require_element(), 1);
20350 var import_i18n7 = __toESM(require_i18n(), 1);
20351 var import_jsx_runtime51 = __toESM(require_jsx_runtime(), 1);
20352 var STYLE_HASH_ATTRIBUTE18 = "data-wp-hash";
20353 function getRuntime18() {
20354 const globalScope = globalThis;
20355 if (globalScope.__wpStyleRuntime) {
20356 return globalScope.__wpStyleRuntime;
20357 }
20358 globalScope.__wpStyleRuntime = {
20359 documents: /* @__PURE__ */ new Map(),
20360 styles: /* @__PURE__ */ new Map(),
20361 injectedStyles: /* @__PURE__ */ new WeakMap()
20362 };
20363 if (typeof document !== "undefined") {
20364 registerDocument18(document);
20365 }
20366 return globalScope.__wpStyleRuntime;
20367 }
20368 function documentContainsStyleHash18(targetDocument, hash) {
20369 if (!targetDocument.head) {
20370 return false;
20371 }
20372 for (const style of targetDocument.head.querySelectorAll(
20373 `style[${STYLE_HASH_ATTRIBUTE18}]`
20374 )) {
20375 if (style.getAttribute(STYLE_HASH_ATTRIBUTE18) === hash) {
20376 return true;
20377 }
20378 }
20379 return false;
20380 }
20381 function injectStyle18(targetDocument, hash, css) {
20382 if (!targetDocument.head) {
20383 return;
20384 }
20385 const runtime = getRuntime18();
20386 let injectedStyles = runtime.injectedStyles.get(targetDocument);
20387 if (!injectedStyles) {
20388 injectedStyles = /* @__PURE__ */ new Set();
20389 runtime.injectedStyles.set(targetDocument, injectedStyles);
20390 }
20391 if (injectedStyles.has(hash)) {
20392 return;
20393 }
20394 if (documentContainsStyleHash18(targetDocument, hash)) {
20395 injectedStyles.add(hash);
20396 return;
20397 }
20398 const style = targetDocument.createElement("style");
20399 style.setAttribute(STYLE_HASH_ATTRIBUTE18, hash);
20400 style.appendChild(targetDocument.createTextNode(css));
20401 targetDocument.head.appendChild(style);
20402 injectedStyles.add(hash);
20403 }
20404 function registerDocument18(targetDocument) {
20405 const runtime = getRuntime18();
20406 runtime.documents.set(
20407 targetDocument,
20408 (runtime.documents.get(targetDocument) ?? 0) + 1
20409 );
20410 for (const [hash, css] of runtime.styles) {
20411 injectStyle18(targetDocument, hash, css);
20412 }
20413 return () => {
20414 const count = runtime.documents.get(targetDocument);
20415 if (count === void 0) {
20416 return;
20417 }
20418 if (count <= 1) {
20419 runtime.documents.delete(targetDocument);
20420 return;
20421 }
20422 runtime.documents.set(targetDocument, count - 1);
20423 };
20424 }
20425 function registerStyle18(hash, css) {
20426 const runtime = getRuntime18();
20427 runtime.styles.set(hash, css);
20428 for (const targetDocument of runtime.documents.keys()) {
20429 injectStyle18(targetDocument, hash, css);
20430 }
20431 }
20432 if (typeof process === "undefined" || true) {
20433 registerStyle18("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)}}}');
20434 }
20435 var field_default3 = { "label": "_2d5ad850b2f90964__label", "is-plain": "_17c4214649230bea__is-plain", "description": "_08a3750500e0233f__description" };
20436 var Details = (0, import_element38.forwardRef)(
20437 function Details2({ className, ...restProps }, ref) {
20438 return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_jsx_runtime51.Fragment, { children: [
20439 /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(VisuallyHidden, { render: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(index_parts_exports.Description, {}), children: (0, import_i18n7.__)("More details follow the field.") }),
20440 /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
20441 "div",
20442 {
20443 ref,
20444 className: clsx_default(field_default3.description, className),
20445 ...restProps
20446 }
20447 )
20448 ] });
20449 }
20450 );
20451
20452 // packages/ui/build-module/form/primitives/field/control.mjs
20453 var import_element39 = __toESM(require_element(), 1);
20454 var import_jsx_runtime52 = __toESM(require_jsx_runtime(), 1);
20455 var Control = (0, import_element39.forwardRef)(
20456 function Control2(props, ref) {
20457 return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(index_parts_exports.Control, { ref, ...props });
20458 }
20459 );
20460
20461 // packages/ui/build-module/form/primitives/field/visual-label.mjs
20462 var import_element40 = __toESM(require_element(), 1);
20463 var STYLE_HASH_ATTRIBUTE19 = "data-wp-hash";
20464 function getRuntime19() {
20465 const globalScope = globalThis;
20466 if (globalScope.__wpStyleRuntime) {
20467 return globalScope.__wpStyleRuntime;
20468 }
20469 globalScope.__wpStyleRuntime = {
20470 documents: /* @__PURE__ */ new Map(),
20471 styles: /* @__PURE__ */ new Map(),
20472 injectedStyles: /* @__PURE__ */ new WeakMap()
20473 };
20474 if (typeof document !== "undefined") {
20475 registerDocument19(document);
20476 }
20477 return globalScope.__wpStyleRuntime;
20478 }
20479 function documentContainsStyleHash19(targetDocument, hash) {
20480 if (!targetDocument.head) {
20481 return false;
20482 }
20483 for (const style of targetDocument.head.querySelectorAll(
20484 `style[${STYLE_HASH_ATTRIBUTE19}]`
20485 )) {
20486 if (style.getAttribute(STYLE_HASH_ATTRIBUTE19) === hash) {
20487 return true;
20488 }
20489 }
20490 return false;
20491 }
20492 function injectStyle19(targetDocument, hash, css) {
20493 if (!targetDocument.head) {
20494 return;
20495 }
20496 const runtime = getRuntime19();
20497 let injectedStyles = runtime.injectedStyles.get(targetDocument);
20498 if (!injectedStyles) {
20499 injectedStyles = /* @__PURE__ */ new Set();
20500 runtime.injectedStyles.set(targetDocument, injectedStyles);
20501 }
20502 if (injectedStyles.has(hash)) {
20503 return;
20504 }
20505 if (documentContainsStyleHash19(targetDocument, hash)) {
20506 injectedStyles.add(hash);
20507 return;
20508 }
20509 const style = targetDocument.createElement("style");
20510 style.setAttribute(STYLE_HASH_ATTRIBUTE19, hash);
20511 style.appendChild(targetDocument.createTextNode(css));
20512 targetDocument.head.appendChild(style);
20513 injectedStyles.add(hash);
20514 }
20515 function registerDocument19(targetDocument) {
20516 const runtime = getRuntime19();
20517 runtime.documents.set(
20518 targetDocument,
20519 (runtime.documents.get(targetDocument) ?? 0) + 1
20520 );
20521 for (const [hash, css] of runtime.styles) {
20522 injectStyle19(targetDocument, hash, css);
20523 }
20524 return () => {
20525 const count = runtime.documents.get(targetDocument);
20526 if (count === void 0) {
20527 return;
20528 }
20529 if (count <= 1) {
20530 runtime.documents.delete(targetDocument);
20531 return;
20532 }
20533 runtime.documents.set(targetDocument, count - 1);
20534 };
20535 }
20536 function registerStyle19(hash, css) {
20537 const runtime = getRuntime19();
20538 runtime.styles.set(hash, css);
20539 for (const targetDocument of runtime.documents.keys()) {
20540 injectStyle19(targetDocument, hash, css);
20541 }
20542 }
20543 if (typeof process === "undefined" || true) {
20544 registerStyle19("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)}}}');
20545 }
20546 var field_default4 = { "label": "_2d5ad850b2f90964__label", "is-plain": "_17c4214649230bea__is-plain", "description": "_08a3750500e0233f__description" };
20547 var VisualLabel = (0, import_element40.forwardRef)(
20548 function VisualLabel2({ className, render: render4, variant, ...restProps }, ref) {
20549 return useRender({
20550 defaultTagName: "span",
20551 render: render4,
20552 ref,
20553 props: mergeProps(restProps, {
20554 className: clsx_default(
20555 field_default4.label,
20556 variant && field_default4[`is-${variant}`],
20557 className
20558 )
20559 })
20560 });
20561 }
20562 );
20563 VisualLabel.displayName = "Field.VisualLabel";
20564
20565 // packages/ui/build-module/form/primitives/textarea/textarea.mjs
20566 var import_element41 = __toESM(require_element(), 1);
20567 var import_jsx_runtime53 = __toESM(require_jsx_runtime(), 1);
20568 var STYLE_HASH_ATTRIBUTE20 = "data-wp-hash";
20569 function getRuntime20() {
20570 const globalScope = globalThis;
20571 if (globalScope.__wpStyleRuntime) {
20572 return globalScope.__wpStyleRuntime;
20573 }
20574 globalScope.__wpStyleRuntime = {
20575 documents: /* @__PURE__ */ new Map(),
20576 styles: /* @__PURE__ */ new Map(),
20577 injectedStyles: /* @__PURE__ */ new WeakMap()
20578 };
20579 if (typeof document !== "undefined") {
20580 registerDocument20(document);
20581 }
20582 return globalScope.__wpStyleRuntime;
20583 }
20584 function documentContainsStyleHash20(targetDocument, hash) {
20585 if (!targetDocument.head) {
20586 return false;
20587 }
20588 for (const style of targetDocument.head.querySelectorAll(
20589 `style[${STYLE_HASH_ATTRIBUTE20}]`
20590 )) {
20591 if (style.getAttribute(STYLE_HASH_ATTRIBUTE20) === hash) {
20592 return true;
20593 }
20594 }
20595 return false;
20596 }
20597 function injectStyle20(targetDocument, hash, css) {
20598 if (!targetDocument.head) {
20599 return;
20600 }
20601 const runtime = getRuntime20();
20602 let injectedStyles = runtime.injectedStyles.get(targetDocument);
20603 if (!injectedStyles) {
20604 injectedStyles = /* @__PURE__ */ new Set();
20605 runtime.injectedStyles.set(targetDocument, injectedStyles);
20606 }
20607 if (injectedStyles.has(hash)) {
20608 return;
20609 }
20610 if (documentContainsStyleHash20(targetDocument, hash)) {
20611 injectedStyles.add(hash);
20612 return;
20613 }
20614 const style = targetDocument.createElement("style");
20615 style.setAttribute(STYLE_HASH_ATTRIBUTE20, hash);
20616 style.appendChild(targetDocument.createTextNode(css));
20617 targetDocument.head.appendChild(style);
20618 injectedStyles.add(hash);
20619 }
20620 function registerDocument20(targetDocument) {
20621 const runtime = getRuntime20();
20622 runtime.documents.set(
20623 targetDocument,
20624 (runtime.documents.get(targetDocument) ?? 0) + 1
20625 );
20626 for (const [hash, css] of runtime.styles) {
20627 injectStyle20(targetDocument, hash, css);
20628 }
20629 return () => {
20630 const count = runtime.documents.get(targetDocument);
20631 if (count === void 0) {
20632 return;
20633 }
20634 if (count <= 1) {
20635 runtime.documents.delete(targetDocument);
20636 return;
20637 }
20638 runtime.documents.set(targetDocument, count - 1);
20639 };
20640 }
20641 function registerStyle20(hash, css) {
20642 const runtime = getRuntime20();
20643 runtime.styles.set(hash, css);
20644 for (const targetDocument of runtime.documents.keys()) {
20645 injectStyle20(targetDocument, hash, css);
20646 }
20647 }
20648 if (typeof process === "undefined" || true) {
20649 registerStyle20("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}}}");
20650 }
20651 var style_default14 = { "wrapper": "_1e441c22c9dc5d28__wrapper", "textarea": "_414844876c32ecee__textarea" };
20652 if (typeof process === "undefined" || true) {
20653 registerStyle20("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)}");
20654 }
20655 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" };
20656 var wrappedRender = (render4, restProps) => {
20657 return function textareaRender(props) {
20658 return typeof render4 === "function" ? render4(mergeProps(props, restProps)) : (0, import_element41.cloneElement)(render4, mergeProps(props, restProps));
20659 };
20660 };
20661 var Textarea = (0, import_element41.forwardRef)(
20662 function Textarea2({
20663 className,
20664 defaultValue,
20665 disabled: disabled2,
20666 onValueChange,
20667 render: render4,
20668 rows = 4,
20669 style,
20670 value,
20671 ...restProps
20672 }, ref) {
20673 return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
20674 Input3,
20675 {
20676 className: clsx_default(style_default14.wrapper, className),
20677 style,
20678 render: wrappedRender(
20679 render4 || ((props) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("textarea", { ...props })),
20680 {
20681 className: clsx_default(
20682 global_css_defense_default7.textarea,
20683 style_default14.textarea
20684 ),
20685 ref,
20686 rows,
20687 ...restProps
20688 }
20689 ),
20690 value,
20691 defaultValue,
20692 onValueChange,
20693 disabled: disabled2
20694 }
20695 );
20696 }
20697 );
20698
20699 // packages/ui/build-module/form/input-control/input-control.mjs
20700 var import_element42 = __toESM(require_element(), 1);
20701 var import_jsx_runtime54 = __toESM(require_jsx_runtime(), 1);
20702 var STYLE_HASH_ATTRIBUTE21 = "data-wp-hash";
20703 function getRuntime21() {
20704 const globalScope = globalThis;
20705 if (globalScope.__wpStyleRuntime) {
20706 return globalScope.__wpStyleRuntime;
20707 }
20708 globalScope.__wpStyleRuntime = {
20709 documents: /* @__PURE__ */ new Map(),
20710 styles: /* @__PURE__ */ new Map(),
20711 injectedStyles: /* @__PURE__ */ new WeakMap()
20712 };
20713 if (typeof document !== "undefined") {
20714 registerDocument21(document);
20715 }
20716 return globalScope.__wpStyleRuntime;
20717 }
20718 function documentContainsStyleHash21(targetDocument, hash) {
20719 if (!targetDocument.head) {
20720 return false;
20721 }
20722 for (const style of targetDocument.head.querySelectorAll(
20723 `style[${STYLE_HASH_ATTRIBUTE21}]`
20724 )) {
20725 if (style.getAttribute(STYLE_HASH_ATTRIBUTE21) === hash) {
20726 return true;
20727 }
20728 }
20729 return false;
20730 }
20731 function injectStyle21(targetDocument, hash, css) {
20732 if (!targetDocument.head) {
20733 return;
20734 }
20735 const runtime = getRuntime21();
20736 let injectedStyles = runtime.injectedStyles.get(targetDocument);
20737 if (!injectedStyles) {
20738 injectedStyles = /* @__PURE__ */ new Set();
20739 runtime.injectedStyles.set(targetDocument, injectedStyles);
20740 }
20741 if (injectedStyles.has(hash)) {
20742 return;
20743 }
20744 if (documentContainsStyleHash21(targetDocument, hash)) {
20745 injectedStyles.add(hash);
20746 return;
20747 }
20748 const style = targetDocument.createElement("style");
20749 style.setAttribute(STYLE_HASH_ATTRIBUTE21, hash);
20750 style.appendChild(targetDocument.createTextNode(css));
20751 targetDocument.head.appendChild(style);
20752 injectedStyles.add(hash);
20753 }
20754 function registerDocument21(targetDocument) {
20755 const runtime = getRuntime21();
20756 runtime.documents.set(
20757 targetDocument,
20758 (runtime.documents.get(targetDocument) ?? 0) + 1
20759 );
20760 for (const [hash, css] of runtime.styles) {
20761 injectStyle21(targetDocument, hash, css);
20762 }
20763 return () => {
20764 const count = runtime.documents.get(targetDocument);
20765 if (count === void 0) {
20766 return;
20767 }
20768 if (count <= 1) {
20769 runtime.documents.delete(targetDocument);
20770 return;
20771 }
20772 runtime.documents.set(targetDocument, count - 1);
20773 };
20774 }
20775 function registerStyle21(hash, css) {
20776 const runtime = getRuntime21();
20777 runtime.styles.set(hash, css);
20778 for (const targetDocument of runtime.documents.keys()) {
20779 injectStyle21(targetDocument, hash, css);
20780 }
20781 }
20782 if (typeof process === "undefined" || true) {
20783 registerStyle21("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}}}}}");
20784 }
20785 var style_default15 = { "root": "a9211a7e6af24bed__root" };
20786 var InputControl = (0, import_element42.forwardRef)(
20787 function InputControl2({
20788 className,
20789 label,
20790 description,
20791 details,
20792 hideLabelFromVision,
20793 ...restProps
20794 }, ref) {
20795 return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(field_exports.Root, { className: clsx_default(style_default15.root, className), children: [
20796 /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(field_exports.Label, { hideFromVision: hideLabelFromVision, children: label }),
20797 /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Input3, { ref, ...restProps }),
20798 description && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(field_exports.Description, { children: description }),
20799 details && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(field_exports.Details, { children: details })
20800 ] });
20801 }
20802 );
20803
20804 // packages/ui/build-module/form/textarea-control/textarea-control.mjs
20805 var import_element43 = __toESM(require_element(), 1);
20806 var import_jsx_runtime55 = __toESM(require_jsx_runtime(), 1);
20807 var TextareaControl = (0, import_element43.forwardRef)(function TextareaControl2({
20808 className,
20809 label,
20810 description,
20811 details,
20812 hideLabelFromVision,
20813 ...restProps
20814 }, ref) {
20815 return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(field_exports.Root, { className, children: [
20816 /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(field_exports.Label, { hideFromVision: hideLabelFromVision, children: label }),
20817 /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Textarea, { ref, ...restProps }),
20818 description && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(field_exports.Description, { children: description }),
20819 details && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(field_exports.Details, { children: details })
20820 ] });
20821 });
20822
20823 // packages/ui/build-module/form/with-validation/validated-input-control/validated-input-control.mjs
20824 var import_element44 = __toESM(require_element(), 1);
20825 var import_compose3 = __toESM(require_compose(), 1);
20826 var import_jsx_runtime56 = __toESM(require_jsx_runtime(), 1);
20827 var ValidatedInputControl = (0, import_element44.forwardRef)(function ValidatedInputControl2({ required, markWhenOptional, customValidity, ...restProps }, forwardedRef) {
20828 const validityTargetRef = (0, import_element44.useRef)(null);
20829 const mergedRefs = (0, import_compose3.useMergeRefs)([forwardedRef, validityTargetRef]);
20830 return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
20831 ControlWithError,
20832 {
20833 required,
20834 markWhenOptional,
20835 customValidity,
20836 getValidityTarget: () => validityTargetRef.current,
20837 children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(InputControl, { ref: mergedRefs, ...restProps })
20838 }
20839 );
20840 });
20841
20842 // packages/ui/build-module/form/with-validation/validated-textarea-control/validated-textarea-control.mjs
20843 var import_element45 = __toESM(require_element(), 1);
20844 var import_compose4 = __toESM(require_compose(), 1);
20845 var import_jsx_runtime57 = __toESM(require_jsx_runtime(), 1);
20846 var ValidatedTextareaControl = (0, import_element45.forwardRef)(function ValidatedTextareaControl2({ required, markWhenOptional, customValidity, ...restProps }, forwardedRef) {
20847 const validityTargetRef = (0, import_element45.useRef)(null);
20848 const mergedRefs = (0, import_compose4.useMergeRefs)([forwardedRef, validityTargetRef]);
20849 return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
20850 ControlWithError,
20851 {
20852 required,
20853 markWhenOptional,
20854 customValidity,
20855 getValidityTarget: () => validityTargetRef.current,
20856 children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(TextareaControl, { ref: mergedRefs, ...restProps })
20857 }
20858 );
20859 });
20860
20861 // packages/dataviews/build-module/constants.mjs
20862 var import_i18n8 = __toESM(require_i18n(), 1);
20863 var OPERATOR_IS_ANY = "isAny";
20864 var OPERATOR_IS_NONE = "isNone";
20865 var OPERATOR_IS_ALL = "isAll";
20866 var OPERATOR_IS_NOT_ALL = "isNotAll";
20867 var OPERATOR_BETWEEN = "between";
20868 var OPERATOR_IN_THE_PAST = "inThePast";
20869 var OPERATOR_OVER = "over";
20870 var OPERATOR_IS = "is";
20871 var OPERATOR_IS_NOT = "isNot";
20872 var OPERATOR_LESS_THAN = "lessThan";
20873 var OPERATOR_GREATER_THAN = "greaterThan";
20874 var OPERATOR_LESS_THAN_OR_EQUAL = "lessThanOrEqual";
20875 var OPERATOR_GREATER_THAN_OR_EQUAL = "greaterThanOrEqual";
20876 var OPERATOR_BEFORE = "before";
20877 var OPERATOR_AFTER = "after";
20878 var OPERATOR_BEFORE_INC = "beforeInc";
20879 var OPERATOR_AFTER_INC = "afterInc";
20880 var OPERATOR_CONTAINS = "contains";
20881 var OPERATOR_NOT_CONTAINS = "notContains";
20882 var OPERATOR_STARTS_WITH = "startsWith";
20883 var OPERATOR_ON = "on";
20884 var OPERATOR_NOT_ON = "notOn";
20885 var sortLabels = {
20886 asc: (0, import_i18n8.__)("Sort ascending"),
20887 desc: (0, import_i18n8.__)("Sort descending")
20888 };
20889
20890 // packages/dataviews/build-module/hooks/use-elements.mjs
20891 var import_element46 = __toESM(require_element(), 1);
20892 var EMPTY_ARRAY2 = [];
20893 function useElements({
20894 elements,
20895 getElements
20896 }) {
20897 const staticElements = Array.isArray(elements) && elements.length > 0 ? elements : EMPTY_ARRAY2;
20898 const [records, setRecords] = (0, import_element46.useState)(staticElements);
20899 const [isLoading, setIsLoading] = (0, import_element46.useState)(false);
20900 (0, import_element46.useEffect)(() => {
20901 if (!getElements) {
20902 setRecords(staticElements);
20903 return;
20904 }
20905 let cancelled = false;
20906 setIsLoading(true);
20907 getElements().then((fetchedElements) => {
20908 if (!cancelled) {
20909 const dynamicElements = Array.isArray(fetchedElements) && fetchedElements.length > 0 ? fetchedElements : staticElements;
20910 setRecords(dynamicElements);
20911 }
20912 }).catch(() => {
20913 if (!cancelled) {
20914 setRecords(staticElements);
20915 }
20916 }).finally(() => {
20917 if (!cancelled) {
20918 setIsLoading(false);
20919 }
20920 });
20921 return () => {
20922 cancelled = true;
20923 };
20924 }, [getElements, staticElements]);
20925 return {
20926 elements: records,
20927 isLoading
20928 };
20929 }
20930
20931 // packages/dataviews/build-module/utils/operators.mjs
20932 var import_i18n9 = __toESM(require_i18n(), 1);
20933 var import_element47 = __toESM(require_element(), 1);
20934 var import_date2 = __toESM(require_date(), 1);
20935
20936 // packages/dataviews/build-module/field-types/utils/parse-time.mjs
20937 var ZONE_DESIGNATOR = /(?:[Zz]|[+-](?:[01]\d|2[0-3]):?[0-5]\d)$/;
20938 var TIME_FORMATS = ["HH:mm", "HH:mm:ss"];
20939 var REFERENCE_DATE = new Date(2e3, 0, 1);
20940 function parseTime2(value) {
20941 if (typeof value !== "string") {
20942 return null;
20943 }
20944 const time = value.trim().replace(ZONE_DESIGNATOR, "");
20945 for (const timeFormat of TIME_FORMATS) {
20946 const parsed = parse(time, timeFormat, REFERENCE_DATE);
20947 if (isValid(parsed)) {
20948 return parsed.getHours() * 3600 + parsed.getMinutes() * 60 + parsed.getSeconds();
20949 }
20950 }
20951 return null;
20952 }
20953
20954 // packages/dataviews/build-module/utils/operators.mjs
20955 var import_jsx_runtime58 = __toESM(require_jsx_runtime(), 1);
20956 var filterTextWrappers = {
20957 Name: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: "dataviews-filters__summary-filter-text-name" }),
20958 Value: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("span", { className: "dataviews-filters__summary-filter-text-value" })
20959 };
20960 function toComparableTemporals(fieldValue, filterValue) {
20961 const filterTime = parseTime2(filterValue);
20962 if (filterTime !== null) {
20963 return [parseTime2(fieldValue) ?? NaN, filterTime];
20964 }
20965 return [
20966 (0, import_date2.getDate)(fieldValue).getTime(),
20967 (0, import_date2.getDate)(filterValue).getTime()
20968 ];
20969 }
20970 function getRelativeDate(value, unit) {
20971 switch (unit) {
20972 case "days":
20973 return subDays(/* @__PURE__ */ new Date(), value);
20974 case "weeks":
20975 return subWeeks(/* @__PURE__ */ new Date(), value);
20976 case "months":
20977 return subMonths(/* @__PURE__ */ new Date(), value);
20978 case "years":
20979 return subYears(/* @__PURE__ */ new Date(), value);
20980 default:
20981 return /* @__PURE__ */ new Date();
20982 }
20983 }
20984 var isNoneOperatorDefinition = {
20985 /* translators: DataViews operator name */
20986 label: (0, import_i18n9.__)("Is none of"),
20987 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
20988 (0, import_i18n9.sprintf)(
20989 /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is none of: Admin, Editor". */
20990 (0, import_i18n9.__)("<Name>%1$s is none of: </Name><Value>%2$s</Value>"),
20991 filter.name,
20992 activeElements.map((element) => element.label).join(", ")
20993 ),
20994 filterTextWrappers
20995 ),
20996 filter: ((item, field, filterValue) => {
20997 if (!filterValue?.length) {
20998 return true;
20999 }
21000 const fieldValue = field.getValue({ item });
21001 if (Array.isArray(fieldValue)) {
21002 return !filterValue.some(
21003 (fv) => fieldValue.includes(fv)
21004 );
21005 } else if (typeof fieldValue === "string" || typeof fieldValue === "number") {
21006 return !filterValue.includes(fieldValue);
21007 }
21008 return false;
21009 }),
21010 selection: "multi"
21011 };
21012 var OPERATORS = [
21013 {
21014 name: OPERATOR_IS_ANY,
21015 /* translators: DataViews operator name */
21016 label: (0, import_i18n9.__)("Includes"),
21017 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
21018 (0, import_i18n9.sprintf)(
21019 /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is any: Admin, Editor". */
21020 (0, import_i18n9.__)("<Name>%1$s includes: </Name><Value>%2$s</Value>"),
21021 filter.name,
21022 activeElements.map((element) => element.label).join(", ")
21023 ),
21024 filterTextWrappers
21025 ),
21026 filter(item, field, filterValue) {
21027 if (!filterValue?.length) {
21028 return true;
21029 }
21030 const fieldValue = field.getValue({ item });
21031 if (Array.isArray(fieldValue)) {
21032 return filterValue.some(
21033 (fv) => fieldValue.includes(fv)
21034 );
21035 } else if (typeof fieldValue === "string" || typeof fieldValue === "number") {
21036 return filterValue.includes(fieldValue);
21037 }
21038 return false;
21039 },
21040 selection: "multi"
21041 },
21042 {
21043 name: OPERATOR_IS_NONE,
21044 ...isNoneOperatorDefinition
21045 },
21046 {
21047 name: OPERATOR_IS_ALL,
21048 /* translators: DataViews operator name */
21049 label: (0, import_i18n9.__)("Includes all"),
21050 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
21051 (0, import_i18n9.sprintf)(
21052 /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author includes all: Admin, Editor". */
21053 (0, import_i18n9.__)("<Name>%1$s includes all: </Name><Value>%2$s</Value>"),
21054 filter.name,
21055 activeElements.map((element) => element.label).join(", ")
21056 ),
21057 filterTextWrappers
21058 ),
21059 filter(item, field, filterValue) {
21060 if (!filterValue?.length) {
21061 return true;
21062 }
21063 const fieldValue = field.getValue({ item });
21064 if (!Array.isArray(fieldValue)) {
21065 return false;
21066 }
21067 return filterValue.every(
21068 (value) => fieldValue.includes(value)
21069 );
21070 },
21071 selection: "multi"
21072 },
21073 {
21074 name: OPERATOR_IS_NOT_ALL,
21075 ...isNoneOperatorDefinition
21076 },
21077 {
21078 name: OPERATOR_BETWEEN,
21079 /* translators: DataViews operator name */
21080 label: (0, import_i18n9.__)("Between (inc)"),
21081 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
21082 (0, import_i18n9.sprintf)(
21083 /* 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". */
21084 (0, import_i18n9.__)(
21085 "<Name>%1$s between (inc): </Name><Value>%2$s and %3$s</Value>"
21086 ),
21087 filter.name,
21088 activeElements[0].label[0],
21089 activeElements[0].label[1]
21090 ),
21091 filterTextWrappers
21092 ),
21093 filter(item, field, filterValue) {
21094 if (!Array.isArray(filterValue) || filterValue.length !== 2 || // An unfilled bound is `undefined` from the controls, `''`
21095 // when it arrives from a persisted view, or `null` once
21096 // `undefined` round-trips through JSON persistence.
21097 filterValue.includes(void 0) || filterValue.includes("") || filterValue.includes(null)) {
21098 return true;
21099 }
21100 const fieldValue = field.getValue({ item });
21101 const [min3, max3] = filterValue.map(parseTime2);
21102 if (min3 !== null && max3 !== null) {
21103 const value = parseTime2(fieldValue);
21104 return value !== null && value >= min3 && value <= max3;
21105 }
21106 if (typeof fieldValue === "number" || fieldValue instanceof Date || typeof fieldValue === "string") {
21107 return fieldValue >= filterValue[0] && fieldValue <= filterValue[1];
21108 }
21109 return false;
21110 },
21111 selection: "custom"
21112 },
21113 {
21114 name: OPERATOR_IN_THE_PAST,
21115 /* translators: DataViews operator name */
21116 label: (0, import_i18n9.__)("In the past"),
21117 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
21118 (0, import_i18n9.sprintf)(
21119 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is in the past: 7 days". */
21120 (0, import_i18n9.__)(
21121 "<Name>%1$s is in the past: </Name><Value>%2$s</Value>"
21122 ),
21123 filter.name,
21124 `${activeElements[0].value.value} ${activeElements[0].value.unit}`
21125 ),
21126 filterTextWrappers
21127 ),
21128 filter(item, field, filterValue) {
21129 if (filterValue?.value === void 0 || filterValue?.unit === void 0) {
21130 return true;
21131 }
21132 const targetDate = getRelativeDate(
21133 filterValue.value,
21134 filterValue.unit
21135 );
21136 const fieldValue = (0, import_date2.getDate)(field.getValue({ item }));
21137 return fieldValue >= targetDate && fieldValue <= /* @__PURE__ */ new Date();
21138 },
21139 selection: "custom"
21140 },
21141 {
21142 name: OPERATOR_OVER,
21143 /* translators: DataViews operator name */
21144 label: (0, import_i18n9.__)("Over"),
21145 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
21146 (0, import_i18n9.sprintf)(
21147 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is over: 7 days". */
21148 (0, import_i18n9.__)("<Name>%1$s is over: </Name><Value>%2$s</Value>"),
21149 filter.name,
21150 `${activeElements[0].value.value} ${activeElements[0].value.unit}`
21151 ),
21152 filterTextWrappers
21153 ),
21154 filter(item, field, filterValue) {
21155 if (filterValue?.value === void 0 || filterValue?.unit === void 0) {
21156 return true;
21157 }
21158 const targetDate = getRelativeDate(
21159 filterValue.value,
21160 filterValue.unit
21161 );
21162 const fieldValue = (0, import_date2.getDate)(field.getValue({ item }));
21163 return fieldValue < targetDate;
21164 },
21165 selection: "custom"
21166 },
21167 {
21168 name: OPERATOR_IS,
21169 /* translators: DataViews operator name */
21170 label: (0, import_i18n9.__)("Is"),
21171 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
21172 (0, import_i18n9.sprintf)(
21173 /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is: Admin". */
21174 (0, import_i18n9.__)("<Name>%1$s is: </Name><Value>%2$s</Value>"),
21175 filter.name,
21176 activeElements[0].label
21177 ),
21178 filterTextWrappers
21179 ),
21180 filter(item, field, filterValue) {
21181 return filterValue === field.getValue({ item }) || filterValue === void 0;
21182 },
21183 selection: "single"
21184 },
21185 {
21186 name: OPERATOR_IS_NOT,
21187 /* translators: DataViews operator name */
21188 label: (0, import_i18n9.__)("Is not"),
21189 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
21190 (0, import_i18n9.sprintf)(
21191 /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is not: Admin". */
21192 (0, import_i18n9.__)("<Name>%1$s is not: </Name><Value>%2$s</Value>"),
21193 filter.name,
21194 activeElements[0].label
21195 ),
21196 filterTextWrappers
21197 ),
21198 filter(item, field, filterValue) {
21199 return filterValue !== field.getValue({ item });
21200 },
21201 selection: "single"
21202 },
21203 {
21204 name: OPERATOR_LESS_THAN,
21205 /* translators: DataViews operator name */
21206 label: (0, import_i18n9.__)("Less than"),
21207 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
21208 (0, import_i18n9.sprintf)(
21209 /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than: 10". */
21210 (0, import_i18n9.__)("<Name>%1$s is less than: </Name><Value>%2$s</Value>"),
21211 filter.name,
21212 activeElements[0].label
21213 ),
21214 filterTextWrappers
21215 ),
21216 filter(item, field, filterValue) {
21217 if (filterValue === void 0) {
21218 return true;
21219 }
21220 const fieldValue = field.getValue({ item });
21221 return fieldValue < filterValue;
21222 },
21223 selection: "single"
21224 },
21225 {
21226 name: OPERATOR_GREATER_THAN,
21227 /* translators: DataViews operator name */
21228 label: (0, import_i18n9.__)("Greater than"),
21229 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
21230 (0, import_i18n9.sprintf)(
21231 /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than: 10". */
21232 (0, import_i18n9.__)(
21233 "<Name>%1$s is greater than: </Name><Value>%2$s</Value>"
21234 ),
21235 filter.name,
21236 activeElements[0].label
21237 ),
21238 filterTextWrappers
21239 ),
21240 filter(item, field, filterValue) {
21241 if (filterValue === void 0) {
21242 return true;
21243 }
21244 const fieldValue = field.getValue({ item });
21245 return fieldValue > filterValue;
21246 },
21247 selection: "single"
21248 },
21249 {
21250 name: OPERATOR_LESS_THAN_OR_EQUAL,
21251 /* translators: DataViews operator name */
21252 label: (0, import_i18n9.__)("Less than or equal"),
21253 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
21254 (0, import_i18n9.sprintf)(
21255 /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than or equal to: 10". */
21256 (0, import_i18n9.__)(
21257 "<Name>%1$s is less than or equal to: </Name><Value>%2$s</Value>"
21258 ),
21259 filter.name,
21260 activeElements[0].label
21261 ),
21262 filterTextWrappers
21263 ),
21264 filter(item, field, filterValue) {
21265 if (filterValue === void 0) {
21266 return true;
21267 }
21268 const fieldValue = field.getValue({ item });
21269 return fieldValue <= filterValue;
21270 },
21271 selection: "single"
21272 },
21273 {
21274 name: OPERATOR_GREATER_THAN_OR_EQUAL,
21275 /* translators: DataViews operator name */
21276 label: (0, import_i18n9.__)("Greater than or equal"),
21277 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
21278 (0, import_i18n9.sprintf)(
21279 /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than or equal to: 10". */
21280 (0, import_i18n9.__)(
21281 "<Name>%1$s is greater than or equal to: </Name><Value>%2$s</Value>"
21282 ),
21283 filter.name,
21284 activeElements[0].label
21285 ),
21286 filterTextWrappers
21287 ),
21288 filter(item, field, filterValue) {
21289 if (filterValue === void 0) {
21290 return true;
21291 }
21292 const fieldValue = field.getValue({ item });
21293 return fieldValue >= filterValue;
21294 },
21295 selection: "single"
21296 },
21297 {
21298 name: OPERATOR_BEFORE,
21299 /* translators: DataViews operator name */
21300 label: (0, import_i18n9.__)("Before"),
21301 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
21302 (0, import_i18n9.sprintf)(
21303 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is before: 2024-01-01". */
21304 (0, import_i18n9.__)("<Name>%1$s is before: </Name><Value>%2$s</Value>"),
21305 filter.name,
21306 activeElements[0].label
21307 ),
21308 filterTextWrappers
21309 ),
21310 filter(item, field, filterValue) {
21311 if (filterValue === void 0) {
21312 return true;
21313 }
21314 const [fieldTemporal, filterTemporal] = toComparableTemporals(
21315 field.getValue({ item }),
21316 filterValue
21317 );
21318 return fieldTemporal < filterTemporal;
21319 },
21320 selection: "single"
21321 },
21322 {
21323 name: OPERATOR_AFTER,
21324 /* translators: DataViews operator name */
21325 label: (0, import_i18n9.__)("After"),
21326 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
21327 (0, import_i18n9.sprintf)(
21328 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is after: 2024-01-01". */
21329 (0, import_i18n9.__)("<Name>%1$s is after: </Name><Value>%2$s</Value>"),
21330 filter.name,
21331 activeElements[0].label
21332 ),
21333 filterTextWrappers
21334 ),
21335 filter(item, field, filterValue) {
21336 if (filterValue === void 0) {
21337 return true;
21338 }
21339 const [fieldTemporal, filterTemporal] = toComparableTemporals(
21340 field.getValue({ item }),
21341 filterValue
21342 );
21343 return fieldTemporal > filterTemporal;
21344 },
21345 selection: "single"
21346 },
21347 {
21348 name: OPERATOR_BEFORE_INC,
21349 /* translators: DataViews operator name */
21350 label: (0, import_i18n9.__)("Before (inc)"),
21351 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
21352 (0, import_i18n9.sprintf)(
21353 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or before: 2024-01-01". */
21354 (0, import_i18n9.__)(
21355 "<Name>%1$s is on or before: </Name><Value>%2$s</Value>"
21356 ),
21357 filter.name,
21358 activeElements[0].label
21359 ),
21360 filterTextWrappers
21361 ),
21362 filter(item, field, filterValue) {
21363 if (filterValue === void 0) {
21364 return true;
21365 }
21366 const [fieldTemporal, filterTemporal] = toComparableTemporals(
21367 field.getValue({ item }),
21368 filterValue
21369 );
21370 return fieldTemporal <= filterTemporal;
21371 },
21372 selection: "single"
21373 },
21374 {
21375 name: OPERATOR_AFTER_INC,
21376 /* translators: DataViews operator name */
21377 label: (0, import_i18n9.__)("After (inc)"),
21378 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
21379 (0, import_i18n9.sprintf)(
21380 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or after: 2024-01-01". */
21381 (0, import_i18n9.__)(
21382 "<Name>%1$s is on or after: </Name><Value>%2$s</Value>"
21383 ),
21384 filter.name,
21385 activeElements[0].label
21386 ),
21387 filterTextWrappers
21388 ),
21389 filter(item, field, filterValue) {
21390 if (filterValue === void 0) {
21391 return true;
21392 }
21393 const [fieldTemporal, filterTemporal] = toComparableTemporals(
21394 field.getValue({ item }),
21395 filterValue
21396 );
21397 return fieldTemporal >= filterTemporal;
21398 },
21399 selection: "single"
21400 },
21401 {
21402 name: OPERATOR_CONTAINS,
21403 /* translators: DataViews operator name */
21404 label: (0, import_i18n9.__)("Contains"),
21405 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
21406 (0, import_i18n9.sprintf)(
21407 /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title contains: Hello". */
21408 (0, import_i18n9.__)("<Name>%1$s contains: </Name><Value>%2$s</Value>"),
21409 filter.name,
21410 activeElements[0].label
21411 ),
21412 filterTextWrappers
21413 ),
21414 filter(item, field, filterValue) {
21415 if (filterValue === void 0) {
21416 return true;
21417 }
21418 const fieldValue = field.getValue({ item });
21419 return typeof fieldValue === "string" && filterValue && fieldValue.toLowerCase().includes(String(filterValue).toLowerCase());
21420 },
21421 selection: "single"
21422 },
21423 {
21424 name: OPERATOR_NOT_CONTAINS,
21425 /* translators: DataViews operator name */
21426 label: (0, import_i18n9.__)("Doesn't contain"),
21427 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
21428 (0, import_i18n9.sprintf)(
21429 /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title doesn't contain: Hello". */
21430 (0, import_i18n9.__)(
21431 "<Name>%1$s doesn't contain: </Name><Value>%2$s</Value>"
21432 ),
21433 filter.name,
21434 activeElements[0].label
21435 ),
21436 filterTextWrappers
21437 ),
21438 filter(item, field, filterValue) {
21439 if (filterValue === void 0) {
21440 return true;
21441 }
21442 const fieldValue = field.getValue({ item });
21443 return typeof fieldValue === "string" && filterValue && !fieldValue.toLowerCase().includes(String(filterValue).toLowerCase());
21444 },
21445 selection: "single"
21446 },
21447 {
21448 name: OPERATOR_STARTS_WITH,
21449 /* translators: DataViews operator name */
21450 label: (0, import_i18n9.__)("Starts with"),
21451 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
21452 (0, import_i18n9.sprintf)(
21453 /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title starts with: Hello". */
21454 (0, import_i18n9.__)("<Name>%1$s starts with: </Name><Value>%2$s</Value>"),
21455 filter.name,
21456 activeElements[0].label
21457 ),
21458 filterTextWrappers
21459 ),
21460 filter(item, field, filterValue) {
21461 if (filterValue === void 0) {
21462 return true;
21463 }
21464 const fieldValue = field.getValue({ item });
21465 return typeof fieldValue === "string" && filterValue && fieldValue.toLowerCase().startsWith(String(filterValue).toLowerCase());
21466 },
21467 selection: "single"
21468 },
21469 {
21470 name: OPERATOR_ON,
21471 /* translators: DataViews operator name */
21472 label: (0, import_i18n9.__)("On"),
21473 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
21474 (0, import_i18n9.sprintf)(
21475 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is: 2024-01-01". */
21476 (0, import_i18n9.__)("<Name>%1$s is: </Name><Value>%2$s</Value>"),
21477 filter.name,
21478 activeElements[0].label
21479 ),
21480 filterTextWrappers
21481 ),
21482 filter(item, field, filterValue) {
21483 if (filterValue === void 0) {
21484 return true;
21485 }
21486 const [fieldTemporal, filterTemporal] = toComparableTemporals(
21487 field.getValue({ item }),
21488 filterValue
21489 );
21490 return fieldTemporal === filterTemporal;
21491 },
21492 selection: "single"
21493 },
21494 {
21495 name: OPERATOR_NOT_ON,
21496 /* translators: DataViews operator name */
21497 label: (0, import_i18n9.__)("Not on"),
21498 filterText: (filter, activeElements) => (0, import_element47.createInterpolateElement)(
21499 (0, import_i18n9.sprintf)(
21500 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is not: 2024-01-01". */
21501 (0, import_i18n9.__)("<Name>%1$s is not: </Name><Value>%2$s</Value>"),
21502 filter.name,
21503 activeElements[0].label
21504 ),
21505 filterTextWrappers
21506 ),
21507 filter(item, field, filterValue) {
21508 if (filterValue === void 0) {
21509 return true;
21510 }
21511 const [fieldTemporal, filterTemporal] = toComparableTemporals(
21512 field.getValue({ item }),
21513 filterValue
21514 );
21515 return fieldTemporal !== filterTemporal;
21516 },
21517 selection: "single"
21518 }
21519 ];
21520 var getOperatorByName = (name) => OPERATORS.find((op) => op.name === name);
21521 var getAllOperatorNames = () => OPERATORS.map((op) => op.name);
21522
21523 // packages/dataviews/build-module/components/dataform-controls/checkbox.mjs
21524 var import_element56 = __toESM(require_element(), 1);
21525
21526 // packages/dataviews/build-module/components/validated-form-controls/checkbox-control.mjs
21527 var import_element48 = __toESM(require_element(), 1);
21528 var import_compose5 = __toESM(require_compose(), 1);
21529 var import_components2 = __toESM(require_components(), 1);
21530 var import_jsx_runtime59 = __toESM(require_jsx_runtime(), 1);
21531 var UnforwardedValidatedCheckboxControl = ({
21532 required,
21533 customValidity,
21534 markWhenOptional,
21535 ...restProps
21536 }, forwardedRef) => {
21537 const validityTargetRef = (0, import_element48.useRef)(null);
21538 const mergedRefs = (0, import_compose5.useMergeRefs)([forwardedRef, validityTargetRef]);
21539 return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
21540 ControlWithError,
21541 {
21542 className: "dataviews-validated-control",
21543 required,
21544 markWhenOptional,
21545 ref: mergedRefs,
21546 customValidity,
21547 getValidityTarget: () => validityTargetRef.current?.querySelector(
21548 'input[type="checkbox"]'
21549 ),
21550 children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
21551 import_components2.CheckboxControl,
21552 {
21553 ...restProps
21554 }
21555 )
21556 }
21557 );
21558 };
21559 var ValidatedCheckboxControl = (0, import_element48.forwardRef)(UnforwardedValidatedCheckboxControl);
21560 ValidatedCheckboxControl.displayName = "ValidatedCheckboxControl";
21561
21562 // packages/dataviews/build-module/components/validated-form-controls/combobox-control.mjs
21563 var import_element49 = __toESM(require_element(), 1);
21564 var import_compose6 = __toESM(require_compose(), 1);
21565 var import_components3 = __toESM(require_components(), 1);
21566 var import_jsx_runtime60 = __toESM(require_jsx_runtime(), 1);
21567 var UnforwardedValidatedComboboxControl = ({
21568 required,
21569 customValidity,
21570 markWhenOptional,
21571 ...restProps
21572 }, forwardedRef) => {
21573 const validityTargetRef = (0, import_element49.useRef)(null);
21574 const mergedRefs = (0, import_compose6.useMergeRefs)([forwardedRef, validityTargetRef]);
21575 (0, import_element49.useEffect)(() => {
21576 const input = validityTargetRef.current?.querySelector(
21577 'input[role="combobox"]'
21578 );
21579 if (input) {
21580 input.required = required ?? false;
21581 }
21582 }, [required]);
21583 return (
21584 // TODO: Bug - Missing value error is not cleared immediately on change, waits for blur.
21585 /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
21586 ControlWithError,
21587 {
21588 className: "dataviews-validated-control",
21589 required,
21590 markWhenOptional,
21591 ref: mergedRefs,
21592 customValidity,
21593 getValidityTarget: () => validityTargetRef.current?.querySelector(
21594 'input[role="combobox"]'
21595 ),
21596 children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_components3.ComboboxControl, { ...restProps })
21597 }
21598 )
21599 );
21600 };
21601 var ValidatedComboboxControl = (0, import_element49.forwardRef)(UnforwardedValidatedComboboxControl);
21602 ValidatedComboboxControl.displayName = "ValidatedComboboxControl";
21603
21604 // packages/dataviews/build-module/components/validated-form-controls/form-token-field.mjs
21605 var import_element50 = __toESM(require_element(), 1);
21606 var import_components4 = __toESM(require_components(), 1);
21607 var import_jsx_runtime61 = __toESM(require_jsx_runtime(), 1);
21608 var UnforwardedValidatedFormTokenField = ({
21609 required,
21610 customValidity,
21611 markWhenOptional,
21612 ...restProps
21613 }, forwardedRef) => {
21614 const validityTargetRef = (0, import_element50.useRef)(null);
21615 return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
21616 "div",
21617 {
21618 className: "dataviews-validated-control__wrapper-with-error-delegate",
21619 ref: forwardedRef,
21620 children: [
21621 /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
21622 ControlWithError,
21623 {
21624 className: "dataviews-validated-control",
21625 required,
21626 markWhenOptional,
21627 customValidity,
21628 getValidityTarget: () => validityTargetRef.current,
21629 children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_components4.FormTokenField, { ...restProps })
21630 }
21631 ),
21632 /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
21633 "input",
21634 {
21635 className: "dataviews-validated-control__error-delegate",
21636 type: "text",
21637 ref: validityTargetRef,
21638 required,
21639 value: restProps.value && restProps.value.length > 0 ? "hasvalue" : "",
21640 tabIndex: -1,
21641 onChange: () => {
21642 },
21643 onFocus: (e) => {
21644 e.target.previousElementSibling?.querySelector(
21645 'input[type="text"]'
21646 )?.focus();
21647 }
21648 }
21649 )
21650 ]
21651 }
21652 );
21653 };
21654 var ValidatedFormTokenField = (0, import_element50.forwardRef)(UnforwardedValidatedFormTokenField);
21655 ValidatedFormTokenField.displayName = "ValidatedFormTokenField";
21656
21657 // packages/dataviews/build-module/components/validated-form-controls/number-control.mjs
21658 var import_element51 = __toESM(require_element(), 1);
21659 var import_compose7 = __toESM(require_compose(), 1);
21660 var import_components5 = __toESM(require_components(), 1);
21661 var import_jsx_runtime62 = __toESM(require_jsx_runtime(), 1);
21662 var UnforwardedValidatedNumberControl = ({
21663 required,
21664 customValidity,
21665 markWhenOptional,
21666 ...restProps
21667 }, forwardedRef) => {
21668 const validityTargetRef = (0, import_element51.useRef)(null);
21669 const mergedRefs = (0, import_compose7.useMergeRefs)([forwardedRef, validityTargetRef]);
21670 return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
21671 ControlWithError,
21672 {
21673 className: "dataviews-validated-control",
21674 required,
21675 markWhenOptional,
21676 customValidity,
21677 getValidityTarget: () => validityTargetRef.current,
21678 children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_components5.__experimentalNumberControl, { ref: mergedRefs, ...restProps })
21679 }
21680 );
21681 };
21682 var ValidatedNumberControl = (0, import_element51.forwardRef)(UnforwardedValidatedNumberControl);
21683 ValidatedNumberControl.displayName = "ValidatedNumberControl";
21684
21685 // packages/dataviews/build-module/components/validated-form-controls/radio-control.mjs
21686 var import_element52 = __toESM(require_element(), 1);
21687 var import_compose8 = __toESM(require_compose(), 1);
21688 var import_components6 = __toESM(require_components(), 1);
21689 var import_jsx_runtime63 = __toESM(require_jsx_runtime(), 1);
21690 var UnforwardedValidatedRadioControl = ({
21691 required,
21692 customValidity,
21693 markWhenOptional,
21694 ...restProps
21695 }, forwardedRef) => {
21696 const validityTargetRef = (0, import_element52.useRef)(null);
21697 const mergedRefs = (0, import_compose8.useMergeRefs)([forwardedRef, validityTargetRef]);
21698 return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
21699 ControlWithError,
21700 {
21701 className: "dataviews-validated-control",
21702 required,
21703 markWhenOptional,
21704 ref: mergedRefs,
21705 customValidity,
21706 getValidityTarget: () => validityTargetRef.current?.querySelector(
21707 'input[type="radio"]'
21708 ),
21709 children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_components6.RadioControl, { ...restProps })
21710 }
21711 );
21712 };
21713 var ValidatedRadioControl = (0, import_element52.forwardRef)(UnforwardedValidatedRadioControl);
21714 ValidatedRadioControl.displayName = "ValidatedRadioControl";
21715
21716 // packages/dataviews/build-module/components/validated-form-controls/select-control.mjs
21717 var import_element53 = __toESM(require_element(), 1);
21718 var import_compose9 = __toESM(require_compose(), 1);
21719 var import_components7 = __toESM(require_components(), 1);
21720 var import_jsx_runtime64 = __toESM(require_jsx_runtime(), 1);
21721 var UnforwardedValidatedSelectControl = ({
21722 required,
21723 customValidity,
21724 markWhenOptional,
21725 ...restProps
21726 }, forwardedRef) => {
21727 const validityTargetRef = (0, import_element53.useRef)(null);
21728 const mergedRefs = (0, import_compose9.useMergeRefs)([forwardedRef, validityTargetRef]);
21729 return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
21730 ControlWithError,
21731 {
21732 className: "dataviews-validated-control",
21733 required,
21734 markWhenOptional,
21735 customValidity,
21736 getValidityTarget: () => validityTargetRef.current,
21737 children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
21738 import_components7.SelectControl,
21739 {
21740 ref: mergedRefs,
21741 // A runtime boolean cannot statically discriminate
21742 // SelectControl's single/multiple props union.
21743 ...restProps
21744 }
21745 )
21746 }
21747 );
21748 };
21749 var ValidatedSelectControl = (0, import_element53.forwardRef)(UnforwardedValidatedSelectControl);
21750 ValidatedSelectControl.displayName = "ValidatedSelectControl";
21751
21752 // packages/dataviews/build-module/components/validated-form-controls/toggle-control.mjs
21753 var import_element54 = __toESM(require_element(), 1);
21754 var import_compose10 = __toESM(require_compose(), 1);
21755 var import_components8 = __toESM(require_components(), 1);
21756 var import_jsx_runtime65 = __toESM(require_jsx_runtime(), 1);
21757 var UnforwardedValidatedToggleControl = ({
21758 required,
21759 customValidity,
21760 markWhenOptional,
21761 ...restProps
21762 }, forwardedRef) => {
21763 const validityTargetRef = (0, import_element54.useRef)(null);
21764 const mergedRefs = (0, import_compose10.useMergeRefs)([forwardedRef, validityTargetRef]);
21765 return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
21766 ControlWithError,
21767 {
21768 className: "dataviews-validated-control",
21769 required,
21770 markWhenOptional,
21771 customValidity,
21772 getValidityTarget: () => validityTargetRef.current,
21773 children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
21774 import_components8.ToggleControl,
21775 {
21776 ref: mergedRefs,
21777 required,
21778 ...restProps
21779 }
21780 )
21781 }
21782 );
21783 };
21784 var ValidatedToggleControl = (0, import_element54.forwardRef)(UnforwardedValidatedToggleControl);
21785 ValidatedToggleControl.displayName = "ValidatedToggleControl";
21786
21787 // packages/dataviews/build-module/components/validated-form-controls/toggle-group-control.mjs
21788 var import_element55 = __toESM(require_element(), 1);
21789 var import_components9 = __toESM(require_components(), 1);
21790 var import_jsx_runtime66 = __toESM(require_jsx_runtime(), 1);
21791 var UnforwardedValidatedToggleGroupControl = ({
21792 required,
21793 customValidity,
21794 markWhenOptional,
21795 ...restProps
21796 }, forwardedRef) => {
21797 const validityTargetRef = (0, import_element55.useRef)(null);
21798 const nameAttr = (0, import_element55.useId)();
21799 return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "dataviews-validated-control__wrapper-with-error-delegate", children: [
21800 /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
21801 ControlWithError,
21802 {
21803 className: "dataviews-validated-control",
21804 required,
21805 markWhenOptional,
21806 customValidity,
21807 getValidityTarget: () => validityTargetRef.current,
21808 children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_components9.__experimentalToggleGroupControl, { ref: forwardedRef, ...restProps })
21809 }
21810 ),
21811 /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
21812 "input",
21813 {
21814 className: "dataviews-validated-control__error-delegate",
21815 type: "radio",
21816 ref: validityTargetRef,
21817 required,
21818 checked: restProps.value !== void 0,
21819 tabIndex: -1,
21820 name: nameAttr,
21821 onChange: () => {
21822 },
21823 onFocus: (e) => {
21824 e.target.previousElementSibling?.querySelector(
21825 '[data-active-item="true"]'
21826 )?.focus();
21827 }
21828 }
21829 )
21830 ] });
21831 };
21832 var ValidatedToggleGroupControl = (0, import_element55.forwardRef)(UnforwardedValidatedToggleGroupControl);
21833 ValidatedToggleGroupControl.displayName = "ValidatedToggleGroupControl";
21834
21835 // packages/dataviews/build-module/components/dataform-controls/utils/get-custom-validity.mjs
21836 function getCustomValidity(isValid2, validity) {
21837 let customValidity;
21838 if (isValid2?.required && validity?.required) {
21839 customValidity = validity.required.message ? {
21840 type: validity.required.type,
21841 message: validity.required.message
21842 } : void 0;
21843 } else if (isValid2?.pattern && validity?.pattern) {
21844 customValidity = validity.pattern;
21845 } else if (isValid2?.min && validity?.min) {
21846 customValidity = validity.min;
21847 } else if (isValid2?.max && validity?.max) {
21848 customValidity = validity.max;
21849 } else if (isValid2?.minLength && validity?.minLength) {
21850 customValidity = validity.minLength;
21851 } else if (isValid2?.maxLength && validity?.maxLength) {
21852 customValidity = validity.maxLength;
21853 } else if (isValid2?.elements && validity?.elements) {
21854 customValidity = validity.elements;
21855 } else if (validity?.custom) {
21856 customValidity = validity.custom;
21857 }
21858 return customValidity;
21859 }
21860
21861 // packages/dataviews/build-module/components/dataform-controls/checkbox.mjs
21862 var import_jsx_runtime67 = __toESM(require_jsx_runtime(), 1);
21863 function Checkbox({
21864 field,
21865 onChange,
21866 data,
21867 hideLabelFromVision,
21868 markWhenOptional,
21869 validity
21870 }) {
21871 const { getValue, setValue, label, description, isValid: isValid2 } = field;
21872 const disabled2 = field.isDisabled({ item: data, field });
21873 const onChangeControl = (0, import_element56.useCallback)(() => {
21874 onChange(
21875 setValue({ item: data, value: !getValue({ item: data }) })
21876 );
21877 }, [data, getValue, onChange, setValue]);
21878 return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
21879 ValidatedCheckboxControl,
21880 {
21881 required: !!field.isValid?.required,
21882 markWhenOptional,
21883 customValidity: getCustomValidity(isValid2, validity),
21884 hidden: hideLabelFromVision,
21885 label,
21886 help: description,
21887 checked: getValue({ item: data }),
21888 onChange: onChangeControl,
21889 disabled: disabled2
21890 }
21891 );
21892 }
21893
21894 // packages/dataviews/build-module/components/dataform-controls/combobox.mjs
21895 var import_components10 = __toESM(require_components(), 1);
21896 var import_element57 = __toESM(require_element(), 1);
21897 var import_jsx_runtime68 = __toESM(require_jsx_runtime(), 1);
21898 function Combobox({
21899 data,
21900 field,
21901 onChange,
21902 hideLabelFromVision,
21903 validity
21904 }) {
21905 const { label, description, placeholder, getValue, setValue, isValid: isValid2 } = field;
21906 const value = getValue({ item: data }) ?? "";
21907 const onChangeControl = (0, import_element57.useCallback)(
21908 (newValue) => onChange(setValue({ item: data, value: newValue ?? "" })),
21909 [data, onChange, setValue]
21910 );
21911 const { elements, isLoading } = useElements({
21912 elements: field.elements,
21913 getElements: field.getElements
21914 });
21915 if (isLoading) {
21916 return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(import_components10.Spinner, {});
21917 }
21918 return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
21919 ValidatedComboboxControl,
21920 {
21921 required: !!field.isValid?.required,
21922 customValidity: getCustomValidity(isValid2, validity),
21923 label,
21924 value,
21925 help: description,
21926 placeholder,
21927 options: elements,
21928 onChange: onChangeControl,
21929 hideLabelFromVision,
21930 allowReset: true,
21931 expandOnFocus: true
21932 }
21933 );
21934 }
21935
21936 // packages/dataviews/build-module/components/dataform-controls/datetime.mjs
21937 var import_components12 = __toESM(require_components(), 1);
21938 var import_element60 = __toESM(require_element(), 1);
21939 var import_i18n12 = __toESM(require_i18n(), 1);
21940 var import_date5 = __toESM(require_date(), 1);
21941 import { speak as speak2 } from "@wordpress/a11y";
21942
21943 // packages/dataviews/build-module/components/dataform-controls/utils/relative-date-control.mjs
21944 var import_components11 = __toESM(require_components(), 1);
21945 var import_element58 = __toESM(require_element(), 1);
21946 var import_i18n10 = __toESM(require_i18n(), 1);
21947 var import_jsx_runtime69 = __toESM(require_jsx_runtime(), 1);
21948 var TIME_UNITS_OPTIONS = {
21949 [OPERATOR_IN_THE_PAST]: [
21950 { value: "days", label: (0, import_i18n10.__)("Days") },
21951 { value: "weeks", label: (0, import_i18n10.__)("Weeks") },
21952 { value: "months", label: (0, import_i18n10.__)("Months") },
21953 { value: "years", label: (0, import_i18n10.__)("Years") }
21954 ],
21955 [OPERATOR_OVER]: [
21956 { value: "days", label: (0, import_i18n10.__)("Days ago") },
21957 { value: "weeks", label: (0, import_i18n10.__)("Weeks ago") },
21958 { value: "months", label: (0, import_i18n10.__)("Months ago") },
21959 { value: "years", label: (0, import_i18n10.__)("Years ago") }
21960 ]
21961 };
21962 function RelativeDateControl({
21963 className,
21964 data,
21965 field,
21966 onChange,
21967 hideLabelFromVision,
21968 operator
21969 }) {
21970 const options = TIME_UNITS_OPTIONS[operator === OPERATOR_IN_THE_PAST ? "inThePast" : "over"];
21971 const { id, label, description, getValue, setValue } = field;
21972 const disabled2 = field.isDisabled({ item: data, field });
21973 const fieldValue = getValue({ item: data });
21974 const { value: relValue = "", unit = options[0].value } = fieldValue && typeof fieldValue === "object" ? fieldValue : {};
21975 const onChangeValue = (0, import_element58.useCallback)(
21976 (newValue) => onChange(
21977 setValue({
21978 item: data,
21979 value: { value: Number(newValue), unit }
21980 })
21981 ),
21982 [onChange, setValue, data, unit]
21983 );
21984 const onChangeUnit = (0, import_element58.useCallback)(
21985 (newUnit) => onChange(
21986 setValue({
21987 item: data,
21988 value: { value: relValue, unit: newUnit }
21989 })
21990 ),
21991 [onChange, setValue, data, relValue]
21992 );
21993 return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
21994 import_components11.BaseControl,
21995 {
21996 id,
21997 className: clsx_default(className, "dataviews-controls__relative-date"),
21998 label,
21999 hideLabelFromVision,
22000 help: description,
22001 children: /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)(Stack, { direction: "row", gap: "sm", children: [
22002 /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
22003 import_components11.__experimentalNumberControl,
22004 {
22005 className: "dataviews-controls__relative-date-number",
22006 spinControls: "none",
22007 min: 1,
22008 step: 1,
22009 value: relValue,
22010 onChange: onChangeValue,
22011 disabled: disabled2
22012 }
22013 ),
22014 /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
22015 import_components11.SelectControl,
22016 {
22017 className: "dataviews-controls__relative-date-unit",
22018 label: (0, import_i18n10.__)("Unit"),
22019 value: unit,
22020 options,
22021 onChange: onChangeUnit,
22022 hideLabelFromVision: true,
22023 disabled: disabled2
22024 }
22025 )
22026 ] })
22027 }
22028 );
22029 }
22030
22031 // packages/dataviews/build-module/components/dataform-controls/utils/to-calendar-date.mjs
22032 function toCalendarDate(date, timeZone) {
22033 return timeZone ? new TZDate(date, timeZone) : date;
22034 }
22035
22036 // packages/dataviews/build-module/components/dataform-controls/utils/use-disabled-date-matchers.mjs
22037 var import_element59 = __toESM(require_element(), 1);
22038 function useDisabledDateMatchers(isValid2, parseDateFn) {
22039 const minConstraint = typeof isValid2.min?.constraint === "string" ? isValid2.min.constraint : void 0;
22040 const maxConstraint = typeof isValid2.max?.constraint === "string" ? isValid2.max.constraint : void 0;
22041 const disabledMatchers = (0, import_element59.useMemo)(() => {
22042 const matchers = [];
22043 if (minConstraint) {
22044 const minDate = parseDateFn(minConstraint);
22045 if (minDate) {
22046 matchers.push({ before: minDate });
22047 }
22048 }
22049 if (maxConstraint) {
22050 const maxDate = parseDateFn(maxConstraint);
22051 if (maxDate) {
22052 matchers.push({ after: maxDate });
22053 }
22054 }
22055 return matchers.length > 0 ? matchers : void 0;
22056 }, [minConstraint, maxConstraint, parseDateFn]);
22057 return { minConstraint, maxConstraint, disabledMatchers };
22058 }
22059
22060 // packages/dataviews/build-module/components/dataform-controls/utils/get-calendar-locale.mjs
22061 var LANGUAGE_ALIASES = {
22062 ary: "ar-MA",
22063 // Moroccan Arabic.
22064 haz: "fa"
22065 // Hazaragi, a variety of Persian.
22066 };
22067 function getCalendarLocale(wpLocale) {
22068 const subtags = wpLocale?.trim().split(/[_-]/) ?? [];
22069 const language = subtags.shift()?.toLowerCase();
22070 if (!language) {
22071 return void 0;
22072 }
22073 const normalized = [LANGUAGE_ALIASES[language] ?? language];
22074 for (const subtag of subtags) {
22075 if (/^[a-z]{4}$/i.test(subtag) || /^([a-z]{2}|\d{3})$/i.test(subtag)) {
22076 normalized.push(subtag);
22077 }
22078 }
22079 return normalized.join("-");
22080 }
22081
22082 // packages/dataviews/build-module/components/dataform-controls/utils/get-timezone-description.mjs
22083 var import_date3 = __toESM(require_date(), 1);
22084 var import_i18n11 = __toESM(require_i18n(), 1);
22085 function getTimezoneDescription() {
22086 const { timezone } = (0, import_date3.getSettings)();
22087 const userTimezoneOffset = -1 * ((/* @__PURE__ */ new Date()).getTimezoneOffset() / 60);
22088 if (Number(timezone.offset) === userTimezoneOffset) {
22089 return void 0;
22090 }
22091 const offsetSymbol = Number(timezone.offset) >= 0 ? "+" : "";
22092 const zoneAbbr = "" !== timezone.abbr && isNaN(Number(timezone.abbr)) ? timezone.abbr : `UTC${offsetSymbol}${timezone.offsetFormatted}`;
22093 const prettyTimezoneString = timezone.string.replaceAll("_", " ");
22094 let timezoneDetail = zoneAbbr;
22095 if ("UTC" === timezone.string) {
22096 timezoneDetail = (0, import_i18n11.__)("Coordinated Universal Time");
22097 } else if (prettyTimezoneString.trim().length > 0) {
22098 timezoneDetail = `(${zoneAbbr}) ${prettyTimezoneString}`;
22099 }
22100 return (0, import_i18n11.sprintf)(
22101 /* translators: %s: timezone detail, e.g. "(CEST) Europe/Madrid" or "UTC+3". */
22102 (0, import_i18n11.__)("Timezone: %s"),
22103 timezoneDetail
22104 );
22105 }
22106
22107 // packages/dataviews/build-module/field-types/utils/parse-date-time.mjs
22108 var import_date4 = __toESM(require_date(), 1);
22109 function parseDateTime(dateTimeString) {
22110 if (!dateTimeString) {
22111 return null;
22112 }
22113 const parsed = (0, import_date4.getDate)(dateTimeString);
22114 return parsed && isValid(parsed) ? parsed : null;
22115 }
22116
22117 // packages/dataviews/build-module/components/dataform-controls/datetime.mjs
22118 var import_jsx_runtime70 = __toESM(require_jsx_runtime(), 1);
22119 var formatDateTime = (value) => {
22120 if (!value) {
22121 return "";
22122 }
22123 return (0, import_date5.dateI18n)("Y-m-d\\TH:i", (0, import_date5.getDate)(value));
22124 };
22125 function CalendarDateTimeControl({
22126 data,
22127 field,
22128 onChange,
22129 hideLabelFromVision,
22130 markWhenOptional,
22131 validity,
22132 config
22133 }) {
22134 const { compact } = config || {};
22135 const { id, label, description, setValue, getValue, isValid: isValid2 } = field;
22136 const disabled2 = field.isDisabled({ item: data, field });
22137 const fieldValue = getValue({ item: data });
22138 const value = typeof fieldValue === "string" ? fieldValue : void 0;
22139 const { timezone } = (0, import_date5.getSettings)();
22140 const timeZone = timezone.string || (0, import_date5.dateI18n)("P");
22141 const [calendarMonth, setCalendarMonth] = (0, import_element60.useState)(() => {
22142 const parsedDate = parseDateTime(value);
22143 return toCalendarDate(parsedDate || /* @__PURE__ */ new Date(), timeZone);
22144 });
22145 (0, import_element60.useEffect)(() => {
22146 const parsedDate = parseDateTime(value);
22147 if (parsedDate) {
22148 const targetMonth = toCalendarDate(parsedDate, timeZone);
22149 setCalendarMonth(
22150 (currentMonth) => isSameMonth(
22151 targetMonth,
22152 toCalendarDate(currentMonth, timeZone)
22153 ) ? currentMonth : targetMonth
22154 );
22155 }
22156 }, [timeZone, value]);
22157 const inputControlRef = (0, import_element60.useRef)(null);
22158 const validationTimeoutRef = (0, import_element60.useRef)(void 0);
22159 const { minConstraint, maxConstraint, disabledMatchers } = useDisabledDateMatchers(isValid2, parseDateTime);
22160 const onChangeCallback = (0, import_element60.useCallback)(
22161 (newValue) => onChange(setValue({ item: data, value: newValue })),
22162 [data, onChange, setValue]
22163 );
22164 (0, import_element60.useEffect)(() => {
22165 return () => clearTimeout(validationTimeoutRef.current);
22166 }, []);
22167 const onSelectDate = (0, import_element60.useCallback)(
22168 (newDate) => {
22169 if (newDate) {
22170 const wpDate = (0, import_date5.dateI18n)("Y-m-d", newDate);
22171 const wpTime = value ? (0, import_date5.dateI18n)("H:i", (0, import_date5.getDate)(value)) : "00:00";
22172 const finalDateTime = (0, import_date5.getDate)(`${wpDate}T${wpTime}`);
22173 onChangeCallback(finalDateTime.toISOString());
22174 } else {
22175 onChangeCallback(void 0);
22176 }
22177 clearTimeout(validationTimeoutRef.current);
22178 validationTimeoutRef.current = setTimeout(() => {
22179 const input = inputControlRef.current;
22180 if (!input) {
22181 return;
22182 }
22183 input.dispatchEvent(
22184 new Event("invalid", { cancelable: true })
22185 );
22186 if (input.validationMessage) {
22187 speak2(input.validationMessage);
22188 }
22189 }, 0);
22190 },
22191 [onChangeCallback, value]
22192 );
22193 const handleManualDateTimeChange = (0, import_element60.useCallback)(
22194 (newValue) => {
22195 if (newValue) {
22196 const dateTime = (0, import_date5.getDate)(newValue);
22197 onChangeCallback(dateTime.toISOString());
22198 const parsedDate = parseDateTime(dateTime.toISOString());
22199 if (parsedDate) {
22200 setCalendarMonth(toCalendarDate(parsedDate, timeZone));
22201 }
22202 } else {
22203 onChangeCallback(void 0);
22204 }
22205 },
22206 [onChangeCallback, timeZone]
22207 );
22208 const { format: fieldFormat } = field;
22209 const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date5.getSettings)().l10n.startOfWeek;
22210 const locale = getCalendarLocale((0, import_date5.getSettings)().l10n.locale);
22211 let displayLabel = label;
22212 if (isValid2?.required && !markWhenOptional && !hideLabelFromVision) {
22213 displayLabel = `${label} (${(0, import_i18n12.__)("Required")})`;
22214 } else if (!isValid2?.required && markWhenOptional && !hideLabelFromVision) {
22215 displayLabel = `${label} (${(0, import_i18n12.__)("Optional")})`;
22216 }
22217 return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
22218 import_components12.BaseControl,
22219 {
22220 id,
22221 label: displayLabel,
22222 help: description,
22223 hideLabelFromVision,
22224 children: /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(Stack, { direction: "column", gap: "lg", children: [
22225 /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
22226 ValidatedInputControl,
22227 {
22228 ref: inputControlRef,
22229 required: !!isValid2?.required,
22230 customValidity: getCustomValidity(isValid2, validity),
22231 type: "datetime-local",
22232 label: (0, import_i18n12.__)("Date time"),
22233 hideLabelFromVision: true,
22234 value: formatDateTime(value),
22235 onValueChange: handleManualDateTimeChange,
22236 disabled: disabled2,
22237 description: getTimezoneDescription(),
22238 min: minConstraint ? formatDateTime(minConstraint) : void 0,
22239 max: maxConstraint ? formatDateTime(maxConstraint) : void 0
22240 }
22241 ),
22242 !compact && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
22243 Calendar,
22244 {
22245 style: { width: "100%" },
22246 value: value ? parseDateTime(value) : null,
22247 onValueChange: onSelectDate,
22248 month: calendarMonth,
22249 onMonthChange: setCalendarMonth,
22250 timeZone,
22251 locale,
22252 dir: (0, import_i18n12.isRTL)() ? "rtl" : "ltr",
22253 weekStartsOn,
22254 disabled: disabled2 || disabledMatchers
22255 }
22256 )
22257 ] })
22258 }
22259 );
22260 }
22261 function DateTime({
22262 data,
22263 field,
22264 onChange,
22265 hideLabelFromVision,
22266 markWhenOptional,
22267 operator,
22268 validity,
22269 config
22270 }) {
22271 if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) {
22272 return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
22273 RelativeDateControl,
22274 {
22275 className: "dataviews-controls__datetime",
22276 data,
22277 field,
22278 onChange,
22279 hideLabelFromVision,
22280 operator
22281 }
22282 );
22283 }
22284 return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
22285 CalendarDateTimeControl,
22286 {
22287 data,
22288 field,
22289 onChange,
22290 hideLabelFromVision,
22291 markWhenOptional,
22292 validity,
22293 config
22294 }
22295 );
22296 }
22297
22298 // packages/dataviews/build-module/components/dataform-controls/date.mjs
22299 var import_components13 = __toESM(require_components(), 1);
22300 var import_element61 = __toESM(require_element(), 1);
22301 var import_i18n13 = __toESM(require_i18n(), 1);
22302 var import_date6 = __toESM(require_date(), 1);
22303 import { speak as speak3 } from "@wordpress/a11y";
22304 var import_jsx_runtime71 = __toESM(require_jsx_runtime(), 1);
22305 var DATE_PRESETS = [
22306 {
22307 id: "today",
22308 label: (0, import_i18n13.__)("Today"),
22309 getValue: () => (0, import_date6.getDate)(null)
22310 },
22311 {
22312 id: "yesterday",
22313 label: (0, import_i18n13.__)("Yesterday"),
22314 getValue: () => {
22315 const today = (0, import_date6.getDate)(null);
22316 return subDays(today, 1);
22317 }
22318 },
22319 {
22320 id: "past-week",
22321 label: (0, import_i18n13.__)("Past week"),
22322 getValue: () => {
22323 const today = (0, import_date6.getDate)(null);
22324 return subDays(today, 7);
22325 }
22326 },
22327 {
22328 id: "past-month",
22329 label: (0, import_i18n13.__)("Past month"),
22330 getValue: () => {
22331 const today = (0, import_date6.getDate)(null);
22332 return subMonths(today, 1);
22333 }
22334 }
22335 ];
22336 var DATE_RANGE_PRESETS = [
22337 {
22338 id: "last-7-days",
22339 label: (0, import_i18n13.__)("Last 7 days"),
22340 getValue: () => {
22341 const today = (0, import_date6.getDate)(null);
22342 return [subDays(today, 7), today];
22343 }
22344 },
22345 {
22346 id: "last-30-days",
22347 label: (0, import_i18n13.__)("Last 30 days"),
22348 getValue: () => {
22349 const today = (0, import_date6.getDate)(null);
22350 return [subDays(today, 30), today];
22351 }
22352 },
22353 {
22354 id: "month-to-date",
22355 label: (0, import_i18n13.__)("Month to date"),
22356 getValue: () => {
22357 const today = (0, import_date6.getDate)(null);
22358 return [startOfMonth(today), today];
22359 }
22360 },
22361 {
22362 id: "last-year",
22363 label: (0, import_i18n13.__)("Last year"),
22364 getValue: () => {
22365 const today = (0, import_date6.getDate)(null);
22366 return [subYears(today, 1), today];
22367 }
22368 },
22369 {
22370 id: "year-to-date",
22371 label: (0, import_i18n13.__)("Year to date"),
22372 getValue: () => {
22373 const today = (0, import_date6.getDate)(null);
22374 return [startOfYear(today), today];
22375 }
22376 }
22377 ];
22378 var parseDate2 = (dateString) => {
22379 if (!dateString) {
22380 return null;
22381 }
22382 const parsed = parseISO(dateString);
22383 return isValid(parsed) ? parsed : null;
22384 };
22385 var formatDate = (date) => {
22386 if (!date) {
22387 return "";
22388 }
22389 return typeof date === "string" ? date : format(date, "yyyy-MM-dd");
22390 };
22391 function ValidatedDateControl({
22392 field,
22393 validity,
22394 inputRefs,
22395 isTouched,
22396 setIsTouched,
22397 children
22398 }) {
22399 const { isValid: isValid2 } = field;
22400 const [customValidity, setCustomValidity] = (0, import_element61.useState)(void 0);
22401 const validateRefs = (0, import_element61.useCallback)(() => {
22402 const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs];
22403 for (const ref of refs) {
22404 const input = ref.current;
22405 if (input && !input.validity.valid) {
22406 setCustomValidity({
22407 type: "invalid",
22408 message: input.validationMessage
22409 });
22410 return;
22411 }
22412 }
22413 setCustomValidity(void 0);
22414 }, [inputRefs]);
22415 (0, import_element61.useEffect)(() => {
22416 const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs];
22417 const result = validity ? getCustomValidity(isValid2, validity) : void 0;
22418 for (const ref of refs) {
22419 const input = ref.current;
22420 if (input) {
22421 input.setCustomValidity(
22422 result?.type === "invalid" && result.message ? result.message : ""
22423 );
22424 }
22425 }
22426 }, [inputRefs, isValid2, validity]);
22427 (0, import_element61.useEffect)(() => {
22428 const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs];
22429 const handleInvalid = (event) => {
22430 event.preventDefault();
22431 setIsTouched(true);
22432 };
22433 for (const ref of refs) {
22434 ref.current?.addEventListener("invalid", handleInvalid);
22435 }
22436 return () => {
22437 for (const ref of refs) {
22438 ref.current?.removeEventListener("invalid", handleInvalid);
22439 }
22440 };
22441 }, [inputRefs, setIsTouched]);
22442 (0, import_element61.useEffect)(() => {
22443 if (!isTouched) {
22444 return;
22445 }
22446 const result = validity ? getCustomValidity(isValid2, validity) : void 0;
22447 if (result) {
22448 setCustomValidity(result);
22449 } else {
22450 validateRefs();
22451 }
22452 }, [isTouched, isValid2, validity, validateRefs]);
22453 (0, import_element61.useEffect)(() => {
22454 if (isTouched && customValidity?.message) {
22455 speak3(customValidity.message);
22456 }
22457 }, [isTouched, customValidity?.message]);
22458 const onBlur = (event) => {
22459 if (isTouched) {
22460 return;
22461 }
22462 if (!event.relatedTarget || !event.currentTarget.contains(event.relatedTarget)) {
22463 setIsTouched(true);
22464 }
22465 };
22466 return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(Stack, { direction: "column", gap: "sm", onBlur, children: [
22467 children,
22468 customValidity && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
22469 ValidityIndicator,
22470 {
22471 type: customValidity.type,
22472 message: customValidity.message
22473 }
22474 )
22475 ] });
22476 }
22477 function CalendarDateControl({
22478 data,
22479 field,
22480 onChange,
22481 hideLabelFromVision,
22482 markWhenOptional,
22483 validity
22484 }) {
22485 const {
22486 id,
22487 label,
22488 description,
22489 setValue,
22490 getValue,
22491 isValid: isValid2,
22492 format: fieldFormat
22493 } = field;
22494 const disabled2 = field.isDisabled({ item: data, field });
22495 const [selectedPresetId, setSelectedPresetId] = (0, import_element61.useState)(
22496 null
22497 );
22498 const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date6.getSettings)().l10n.startOfWeek;
22499 const locale = getCalendarLocale((0, import_date6.getSettings)().l10n.locale);
22500 const fieldValue = getValue({ item: data });
22501 const value = typeof fieldValue === "string" ? fieldValue : void 0;
22502 const [calendarMonth, setCalendarMonth] = (0, import_element61.useState)(() => {
22503 const parsedDate = parseDate2(value);
22504 return parsedDate || /* @__PURE__ */ new Date();
22505 });
22506 (0, import_element61.useEffect)(() => {
22507 const parsedDate = parseDate2(value);
22508 if (parsedDate) {
22509 setCalendarMonth(
22510 (currentMonth) => isSameMonth(parsedDate, currentMonth) ? currentMonth : parsedDate
22511 );
22512 }
22513 }, [value]);
22514 const [isTouched, setIsTouched] = (0, import_element61.useState)(false);
22515 const validityTargetRef = (0, import_element61.useRef)(null);
22516 const { minConstraint, maxConstraint, disabledMatchers } = useDisabledDateMatchers(isValid2, parseDate2);
22517 const onChangeCallback = (0, import_element61.useCallback)(
22518 (newValue) => onChange(setValue({ item: data, value: newValue })),
22519 [data, onChange, setValue]
22520 );
22521 const onSelectDate = (0, import_element61.useCallback)(
22522 (newDate) => {
22523 const dateValue = newDate ? formatDate(newDate) : void 0;
22524 onChangeCallback(dateValue);
22525 setSelectedPresetId(null);
22526 setIsTouched(true);
22527 },
22528 [onChangeCallback]
22529 );
22530 const handlePresetClick = (0, import_element61.useCallback)(
22531 (preset) => {
22532 const presetDate = preset.getValue();
22533 const dateValue = formatDate(presetDate);
22534 setCalendarMonth(presetDate);
22535 onChangeCallback(dateValue);
22536 setSelectedPresetId(preset.id);
22537 setIsTouched(true);
22538 },
22539 [onChangeCallback]
22540 );
22541 const handleManualDateChange = (0, import_element61.useCallback)(
22542 (newValue) => {
22543 onChangeCallback(newValue);
22544 if (newValue) {
22545 const parsedDate = parseDate2(newValue);
22546 if (parsedDate) {
22547 setCalendarMonth(parsedDate);
22548 }
22549 }
22550 setSelectedPresetId(null);
22551 setIsTouched(true);
22552 },
22553 [onChangeCallback]
22554 );
22555 let displayLabel = label;
22556 if (isValid2?.required && !markWhenOptional) {
22557 displayLabel = `${label} (${(0, import_i18n13.__)("Required")})`;
22558 } else if (!isValid2?.required && markWhenOptional) {
22559 displayLabel = `${label} (${(0, import_i18n13.__)("Optional")})`;
22560 }
22561 return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
22562 ValidatedDateControl,
22563 {
22564 field,
22565 validity,
22566 inputRefs: validityTargetRef,
22567 isTouched,
22568 setIsTouched,
22569 children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
22570 import_components13.BaseControl,
22571 {
22572 id,
22573 className: "dataviews-controls__date",
22574 label: displayLabel,
22575 help: description,
22576 hideLabelFromVision,
22577 children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(Stack, { direction: "column", gap: "lg", children: [
22578 /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(
22579 Stack,
22580 {
22581 direction: "row",
22582 gap: "sm",
22583 wrap: "wrap",
22584 justify: "flex-start",
22585 children: [
22586 DATE_PRESETS.map((preset) => {
22587 const isSelected = selectedPresetId === preset.id;
22588 return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
22589 import_components13.Button,
22590 {
22591 className: "dataviews-controls__date-preset",
22592 variant: "tertiary",
22593 isPressed: isSelected,
22594 size: "small",
22595 disabled: disabled2,
22596 accessibleWhenDisabled: true,
22597 onClick: () => handlePresetClick(preset),
22598 children: preset.label
22599 },
22600 preset.id
22601 );
22602 }),
22603 /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
22604 import_components13.Button,
22605 {
22606 className: "dataviews-controls__date-preset",
22607 variant: "tertiary",
22608 isPressed: !selectedPresetId,
22609 size: "small",
22610 disabled: !!selectedPresetId || disabled2,
22611 accessibleWhenDisabled: true,
22612 children: (0, import_i18n13.__)("Custom")
22613 }
22614 )
22615 ]
22616 }
22617 ),
22618 /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
22619 import_components13.__experimentalInputControl,
22620 {
22621 ref: validityTargetRef,
22622 type: "date",
22623 label: (0, import_i18n13.__)("Date"),
22624 hideLabelFromVision: true,
22625 value,
22626 onChange: handleManualDateChange,
22627 required: !!field.isValid?.required,
22628 disabled: disabled2,
22629 min: minConstraint,
22630 max: maxConstraint
22631 }
22632 ),
22633 /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
22634 Calendar,
22635 {
22636 style: { width: "100%" },
22637 value: value ? parseDate2(value) : null,
22638 onValueChange: onSelectDate,
22639 month: calendarMonth,
22640 onMonthChange: setCalendarMonth,
22641 locale,
22642 dir: (0, import_i18n13.isRTL)() ? "rtl" : "ltr",
22643 weekStartsOn,
22644 disabled: disabled2 || disabledMatchers,
22645 disableNavigation: disabled2
22646 }
22647 )
22648 ] })
22649 }
22650 )
22651 }
22652 );
22653 }
22654 function CalendarDateRangeControl({
22655 data,
22656 field,
22657 onChange,
22658 hideLabelFromVision,
22659 markWhenOptional,
22660 validity
22661 }) {
22662 const {
22663 id,
22664 label,
22665 description,
22666 getValue,
22667 setValue,
22668 isValid: isValid2,
22669 format: fieldFormat
22670 } = field;
22671 const disabled2 = field.isDisabled({ item: data, field });
22672 let value;
22673 const fieldValue = getValue({ item: data });
22674 if (Array.isArray(fieldValue) && fieldValue.length === 2 && fieldValue.every((date) => typeof date === "string")) {
22675 value = fieldValue;
22676 }
22677 const weekStartsOn = fieldFormat.weekStartsOn ?? (0, import_date6.getSettings)().l10n.startOfWeek;
22678 const locale = getCalendarLocale((0, import_date6.getSettings)().l10n.locale);
22679 const { minConstraint, maxConstraint, disabledMatchers } = useDisabledDateMatchers(isValid2, parseDate2);
22680 const onChangeCallback = (0, import_element61.useCallback)(
22681 (newValue) => {
22682 onChange(
22683 setValue({
22684 item: data,
22685 value: newValue
22686 })
22687 );
22688 },
22689 [data, onChange, setValue]
22690 );
22691 const [selectedPresetId, setSelectedPresetId] = (0, import_element61.useState)(
22692 null
22693 );
22694 const selectedRange = (0, import_element61.useMemo)(() => {
22695 if (!value) {
22696 return null;
22697 }
22698 const [from, to] = value;
22699 return {
22700 from: parseDate2(from) || void 0,
22701 to: parseDate2(to) || void 0
22702 };
22703 }, [value]);
22704 const [calendarMonth, setCalendarMonth] = (0, import_element61.useState)(() => {
22705 return selectedRange?.from || /* @__PURE__ */ new Date();
22706 });
22707 const [fromValue, toValue] = value ?? [];
22708 (0, import_element61.useEffect)(() => {
22709 setCalendarMonth((currentMonth) => {
22710 const from = parseDate2(fromValue);
22711 const to = parseDate2(toValue);
22712 const targetMonth = from ?? to;
22713 const isRangeVisible = from && to ? areIntervalsOverlapping(
22714 { start: from, end: to },
22715 {
22716 start: startOfMonth(currentMonth),
22717 end: endOfMonth(currentMonth)
22718 },
22719 { inclusive: true }
22720 ) : [from, to].some(
22721 (date) => date && isSameMonth(date, currentMonth)
22722 );
22723 return targetMonth && !isRangeVisible ? targetMonth : currentMonth;
22724 });
22725 }, [fromValue, toValue]);
22726 const [isTouched, setIsTouched] = (0, import_element61.useState)(false);
22727 const fromInputRef = (0, import_element61.useRef)(null);
22728 const toInputRef = (0, import_element61.useRef)(null);
22729 const updateDateRange = (0, import_element61.useCallback)(
22730 (fromDate, toDate2) => {
22731 if (!fromDate && !toDate2) {
22732 onChangeCallback(void 0);
22733 return;
22734 }
22735 onChangeCallback([
22736 formatDate(fromDate),
22737 formatDate(toDate2)
22738 ]);
22739 },
22740 [onChangeCallback]
22741 );
22742 const onSelectCalendarRange = (0, import_element61.useCallback)(
22743 (newRange) => {
22744 updateDateRange(newRange?.from, newRange?.to);
22745 setSelectedPresetId(null);
22746 setIsTouched(true);
22747 },
22748 [updateDateRange]
22749 );
22750 const handlePresetClick = (0, import_element61.useCallback)(
22751 (preset) => {
22752 const [startDate, endDate] = preset.getValue();
22753 setCalendarMonth(startDate);
22754 updateDateRange(startDate, endDate);
22755 setSelectedPresetId(preset.id);
22756 setIsTouched(true);
22757 },
22758 [updateDateRange]
22759 );
22760 const handleManualDateChange = (0, import_element61.useCallback)(
22761 (fromOrTo, newValue) => {
22762 const [currentFrom, currentTo] = value || [
22763 void 0,
22764 void 0
22765 ];
22766 const updatedFrom = fromOrTo === "from" ? newValue : currentFrom;
22767 const updatedTo = fromOrTo === "to" ? newValue : currentTo;
22768 updateDateRange(updatedFrom, updatedTo);
22769 if (newValue) {
22770 const parsedDate = parseDate2(newValue);
22771 if (parsedDate) {
22772 setCalendarMonth(parsedDate);
22773 }
22774 }
22775 setSelectedPresetId(null);
22776 setIsTouched(true);
22777 },
22778 [value, updateDateRange]
22779 );
22780 let displayLabel = label;
22781 if (field.isValid?.required && !markWhenOptional) {
22782 displayLabel = `${label} (${(0, import_i18n13.__)("Required")})`;
22783 } else if (!field.isValid?.required && markWhenOptional) {
22784 displayLabel = `${label} (${(0, import_i18n13.__)("Optional")})`;
22785 }
22786 return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
22787 ValidatedDateControl,
22788 {
22789 field,
22790 validity,
22791 inputRefs: [fromInputRef, toInputRef],
22792 isTouched,
22793 setIsTouched,
22794 children: /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
22795 import_components13.BaseControl,
22796 {
22797 id,
22798 className: "dataviews-controls__date",
22799 label: displayLabel,
22800 help: description,
22801 hideLabelFromVision,
22802 children: /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(Stack, { direction: "column", gap: "lg", children: [
22803 /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(
22804 Stack,
22805 {
22806 direction: "row",
22807 gap: "sm",
22808 wrap: "wrap",
22809 justify: "flex-start",
22810 children: [
22811 DATE_RANGE_PRESETS.map((preset) => {
22812 const isSelected = selectedPresetId === preset.id;
22813 return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
22814 import_components13.Button,
22815 {
22816 className: "dataviews-controls__date-preset",
22817 variant: "tertiary",
22818 isPressed: isSelected,
22819 size: "small",
22820 disabled: disabled2,
22821 accessibleWhenDisabled: true,
22822 onClick: () => handlePresetClick(preset),
22823 children: preset.label
22824 },
22825 preset.id
22826 );
22827 }),
22828 /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
22829 import_components13.Button,
22830 {
22831 className: "dataviews-controls__date-preset",
22832 variant: "tertiary",
22833 isPressed: !selectedPresetId,
22834 size: "small",
22835 accessibleWhenDisabled: true,
22836 disabled: !!selectedPresetId || disabled2,
22837 children: (0, import_i18n13.__)("Custom")
22838 }
22839 )
22840 ]
22841 }
22842 ),
22843 /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)(
22844 Stack,
22845 {
22846 direction: "row",
22847 gap: "sm",
22848 justify: "space-between",
22849 className: "dataviews-controls__date-range-inputs",
22850 children: [
22851 /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
22852 import_components13.__experimentalInputControl,
22853 {
22854 ref: fromInputRef,
22855 type: "date",
22856 label: (0, import_i18n13.__)("From"),
22857 hideLabelFromVision: true,
22858 value: value?.[0],
22859 onChange: (newValue) => handleManualDateChange("from", newValue),
22860 required: !!field.isValid?.required,
22861 disabled: disabled2,
22862 min: minConstraint,
22863 max: maxConstraint
22864 }
22865 ),
22866 /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
22867 import_components13.__experimentalInputControl,
22868 {
22869 ref: toInputRef,
22870 type: "date",
22871 label: (0, import_i18n13.__)("To"),
22872 hideLabelFromVision: true,
22873 value: value?.[1],
22874 onChange: (newValue) => handleManualDateChange("to", newValue),
22875 required: !!field.isValid?.required,
22876 disabled: disabled2,
22877 min: minConstraint,
22878 max: maxConstraint
22879 }
22880 )
22881 ]
22882 }
22883 ),
22884 /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
22885 RangeCalendar,
22886 {
22887 style: { width: "100%" },
22888 value: selectedRange,
22889 onValueChange: onSelectCalendarRange,
22890 month: calendarMonth,
22891 onMonthChange: setCalendarMonth,
22892 locale,
22893 dir: (0, import_i18n13.isRTL)() ? "rtl" : "ltr",
22894 weekStartsOn,
22895 disabled: disabled2 || disabledMatchers
22896 }
22897 )
22898 ] })
22899 }
22900 )
22901 }
22902 );
22903 }
22904 function DateControl({
22905 data,
22906 field,
22907 onChange,
22908 hideLabelFromVision,
22909 markWhenOptional,
22910 operator,
22911 validity
22912 }) {
22913 if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) {
22914 return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
22915 RelativeDateControl,
22916 {
22917 className: "dataviews-controls__date",
22918 data,
22919 field,
22920 onChange,
22921 hideLabelFromVision,
22922 operator
22923 }
22924 );
22925 }
22926 if (operator === OPERATOR_BETWEEN) {
22927 return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
22928 CalendarDateRangeControl,
22929 {
22930 data,
22931 field,
22932 onChange,
22933 hideLabelFromVision,
22934 markWhenOptional,
22935 validity
22936 }
22937 );
22938 }
22939 return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
22940 CalendarDateControl,
22941 {
22942 data,
22943 field,
22944 onChange,
22945 hideLabelFromVision,
22946 markWhenOptional,
22947 validity
22948 }
22949 );
22950 }
22951
22952 // packages/dataviews/build-module/components/dataform-controls/select.mjs
22953 var import_components14 = __toESM(require_components(), 1);
22954 var import_element62 = __toESM(require_element(), 1);
22955 var import_jsx_runtime72 = __toESM(require_jsx_runtime(), 1);
22956 function Select2({
22957 data,
22958 field,
22959 onChange,
22960 hideLabelFromVision,
22961 markWhenOptional,
22962 validity
22963 }) {
22964 const { type, label, description, getValue, setValue, isValid: isValid2 } = field;
22965 const disabled2 = field.isDisabled({ item: data, field });
22966 const isMultiple = type === "array";
22967 const value = getValue({ item: data }) ?? (isMultiple ? [] : "");
22968 const onChangeControl = (0, import_element62.useCallback)(
22969 (newValue) => onChange(setValue({ item: data, value: newValue })),
22970 [data, onChange, setValue]
22971 );
22972 const { elements, isLoading } = useElements({
22973 elements: field.elements,
22974 getElements: field.getElements
22975 });
22976 if (isLoading) {
22977 return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(import_components14.Spinner, {});
22978 }
22979 return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
22980 ValidatedSelectControl,
22981 {
22982 required: !!field.isValid?.required,
22983 markWhenOptional,
22984 customValidity: getCustomValidity(isValid2, validity),
22985 label,
22986 value,
22987 help: description,
22988 options: elements,
22989 onChange: onChangeControl,
22990 hideLabelFromVision,
22991 multiple: isMultiple,
22992 disabled: disabled2
22993 }
22994 );
22995 }
22996
22997 // packages/dataviews/build-module/components/dataform-controls/adaptive-select.mjs
22998 var import_jsx_runtime73 = __toESM(require_jsx_runtime(), 1);
22999 var ELEMENTS_THRESHOLD = 10;
23000 function AdaptiveSelect(props) {
23001 const { field } = props;
23002 const { elements } = useElements({
23003 elements: field.elements,
23004 getElements: field.getElements
23005 });
23006 if (elements.length >= ELEMENTS_THRESHOLD) {
23007 return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(Combobox, { ...props });
23008 }
23009 return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(Select2, { ...props });
23010 }
23011
23012 // packages/dataviews/build-module/components/dataform-controls/utils/validated-input.mjs
23013 var import_element63 = __toESM(require_element(), 1);
23014 var import_jsx_runtime74 = __toESM(require_jsx_runtime(), 1);
23015 function ValidatedText({
23016 data,
23017 field,
23018 onChange,
23019 hideLabelFromVision,
23020 markWhenOptional,
23021 type,
23022 prefix,
23023 suffix,
23024 validity
23025 }) {
23026 const { label, placeholder, description, getValue, setValue, isValid: isValid2 } = field;
23027 const value = getValue({ item: data });
23028 const disabled2 = field.isDisabled({ item: data, field });
23029 const onValueChangeControl = (0, import_element63.useCallback)(
23030 (newValue) => onChange(
23031 setValue({
23032 item: data,
23033 value: newValue
23034 })
23035 ),
23036 [data, setValue, onChange]
23037 );
23038 return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
23039 ValidatedInputControl,
23040 {
23041 required: !!isValid2.required,
23042 markWhenOptional,
23043 customValidity: getCustomValidity(isValid2, validity),
23044 label,
23045 placeholder,
23046 value: value ?? "",
23047 description: typeof description === "string" ? description : void 0,
23048 details: typeof description === "string" ? void 0 : description,
23049 onValueChange: onValueChangeControl,
23050 hideLabelFromVision,
23051 type,
23052 prefix,
23053 suffix,
23054 disabled: disabled2,
23055 pattern: isValid2.pattern ? isValid2.pattern.constraint : void 0,
23056 minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0,
23057 maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0
23058 }
23059 );
23060 }
23061
23062 // packages/dataviews/build-module/components/dataform-controls/email.mjs
23063 var import_jsx_runtime75 = __toESM(require_jsx_runtime(), 1);
23064 function Email({
23065 data,
23066 field,
23067 onChange,
23068 hideLabelFromVision,
23069 markWhenOptional,
23070 validity
23071 }) {
23072 return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
23073 ValidatedText,
23074 {
23075 ...{
23076 data,
23077 field,
23078 onChange,
23079 hideLabelFromVision,
23080 markWhenOptional,
23081 validity,
23082 type: "email",
23083 prefix: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(InputLayout3.Slot, { padding: "minimal", children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(Icon, { icon: envelope_default }) })
23084 }
23085 }
23086 );
23087 }
23088
23089 // packages/dataviews/build-module/components/dataform-controls/telephone.mjs
23090 var import_jsx_runtime76 = __toESM(require_jsx_runtime(), 1);
23091 function Telephone({
23092 data,
23093 field,
23094 onChange,
23095 hideLabelFromVision,
23096 markWhenOptional,
23097 validity
23098 }) {
23099 return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
23100 ValidatedText,
23101 {
23102 ...{
23103 data,
23104 field,
23105 onChange,
23106 hideLabelFromVision,
23107 markWhenOptional,
23108 validity,
23109 type: "tel",
23110 prefix: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(InputLayout3.Slot, { padding: "minimal", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Icon, { icon: mobile_default }) })
23111 }
23112 }
23113 );
23114 }
23115
23116 // packages/dataviews/build-module/components/dataform-controls/url.mjs
23117 var import_jsx_runtime77 = __toESM(require_jsx_runtime(), 1);
23118 function Url({
23119 data,
23120 field,
23121 onChange,
23122 hideLabelFromVision,
23123 markWhenOptional,
23124 validity
23125 }) {
23126 return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
23127 ValidatedText,
23128 {
23129 ...{
23130 data,
23131 field,
23132 onChange,
23133 hideLabelFromVision,
23134 markWhenOptional,
23135 validity,
23136 type: "url",
23137 prefix: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(InputLayout3.Slot, { padding: "minimal", children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Icon, { icon: link_default }) })
23138 }
23139 }
23140 );
23141 }
23142
23143 // packages/dataviews/build-module/components/dataform-controls/utils/validated-number.mjs
23144 var import_components15 = __toESM(require_components(), 1);
23145 var import_element64 = __toESM(require_element(), 1);
23146 var import_i18n14 = __toESM(require_i18n(), 1);
23147 var import_jsx_runtime78 = __toESM(require_jsx_runtime(), 1);
23148 function toNumberOrEmpty(value) {
23149 if (value === "" || value === void 0) {
23150 return "";
23151 }
23152 const number = Number(value);
23153 return Number.isFinite(number) ? number : "";
23154 }
23155 function BetweenControls({
23156 value,
23157 onChange,
23158 hideLabelFromVision,
23159 step
23160 }) {
23161 const [min3 = "", max3 = ""] = value;
23162 const onChangeMin = (0, import_element64.useCallback)(
23163 (newValue) => onChange([toNumberOrEmpty(newValue), max3]),
23164 [onChange, max3]
23165 );
23166 const onChangeMax = (0, import_element64.useCallback)(
23167 (newValue) => onChange([min3, toNumberOrEmpty(newValue)]),
23168 [onChange, min3]
23169 );
23170 return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
23171 import_components15.BaseControl,
23172 {
23173 help: (0, import_i18n14.__)("The max. value must be greater than the min. value."),
23174 children: /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(import_components15.Flex, { direction: "row", gap: 4, children: [
23175 /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
23176 import_components15.__experimentalNumberControl,
23177 {
23178 label: (0, import_i18n14.__)("Min."),
23179 value: min3,
23180 max: max3 ? Number(max3) - step : void 0,
23181 onChange: onChangeMin,
23182 hideLabelFromVision,
23183 step
23184 }
23185 ),
23186 /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
23187 import_components15.__experimentalNumberControl,
23188 {
23189 label: (0, import_i18n14.__)("Max."),
23190 value: max3,
23191 min: min3 ? Number(min3) + step : void 0,
23192 onChange: onChangeMax,
23193 hideLabelFromVision,
23194 step
23195 }
23196 )
23197 ] })
23198 }
23199 );
23200 }
23201 function ValidatedNumber({
23202 data,
23203 field,
23204 onChange,
23205 hideLabelFromVision,
23206 markWhenOptional,
23207 operator,
23208 validity
23209 }) {
23210 const decimals = field.format?.decimals ?? 0;
23211 const step = Math.pow(10, Math.abs(decimals) * -1);
23212 const { label, description, getValue, setValue, isValid: isValid2 } = field;
23213 const value = getValue({ item: data }) ?? "";
23214 const disabled2 = field.isDisabled({ item: data, field });
23215 const onChangeControl = (0, import_element64.useCallback)(
23216 (newValue) => {
23217 onChange(
23218 setValue({
23219 item: data,
23220 // Do not convert an empty string or undefined to a number,
23221 // otherwise there's a mismatch between the UI control (empty)
23222 // and the data relied by onChange (0).
23223 value: ["", void 0].includes(newValue) ? void 0 : Number(newValue)
23224 })
23225 );
23226 },
23227 [data, onChange, setValue]
23228 );
23229 const onChangeBetweenControls = (0, import_element64.useCallback)(
23230 (newValue) => {
23231 onChange(
23232 setValue({
23233 item: data,
23234 value: newValue
23235 })
23236 );
23237 },
23238 [data, onChange, setValue]
23239 );
23240 if (operator === OPERATOR_BETWEEN) {
23241 let valueBetween = ["", ""];
23242 if (Array.isArray(value) && value.length === 2 && value.every(
23243 (element) => typeof element === "number" || element === ""
23244 )) {
23245 valueBetween = value;
23246 }
23247 return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
23248 BetweenControls,
23249 {
23250 value: valueBetween,
23251 onChange: onChangeBetweenControls,
23252 hideLabelFromVision,
23253 step
23254 }
23255 );
23256 }
23257 return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
23258 ValidatedNumberControl,
23259 {
23260 required: !!isValid2.required,
23261 markWhenOptional,
23262 customValidity: getCustomValidity(isValid2, validity),
23263 label,
23264 help: description,
23265 value,
23266 onChange: onChangeControl,
23267 hideLabelFromVision,
23268 step,
23269 min: typeof isValid2.min?.constraint === "number" ? isValid2.min.constraint : void 0,
23270 max: typeof isValid2.max?.constraint === "number" ? isValid2.max.constraint : void 0,
23271 disabled: disabled2
23272 }
23273 );
23274 }
23275
23276 // packages/dataviews/build-module/components/dataform-controls/integer.mjs
23277 var import_jsx_runtime79 = __toESM(require_jsx_runtime(), 1);
23278 function Integer(props) {
23279 return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(ValidatedNumber, { ...props });
23280 }
23281
23282 // packages/dataviews/build-module/components/dataform-controls/number.mjs
23283 var import_jsx_runtime80 = __toESM(require_jsx_runtime(), 1);
23284 function Number2(props) {
23285 return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(ValidatedNumber, { ...props });
23286 }
23287
23288 // packages/dataviews/build-module/components/dataform-controls/radio.mjs
23289 var import_components16 = __toESM(require_components(), 1);
23290 var import_element65 = __toESM(require_element(), 1);
23291 var import_jsx_runtime81 = __toESM(require_jsx_runtime(), 1);
23292 function Radio({
23293 data,
23294 field,
23295 onChange,
23296 hideLabelFromVision,
23297 markWhenOptional,
23298 validity
23299 }) {
23300 const { label, description, getValue, setValue, isValid: isValid2 } = field;
23301 const disabled2 = field.isDisabled({ item: data, field });
23302 const { elements, isLoading } = useElements({
23303 elements: field.elements,
23304 getElements: field.getElements
23305 });
23306 const value = getValue({ item: data });
23307 const onChangeControl = (0, import_element65.useCallback)(
23308 (newValue) => onChange(setValue({ item: data, value: newValue })),
23309 [data, onChange, setValue]
23310 );
23311 if (isLoading) {
23312 return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_components16.Spinner, {});
23313 }
23314 return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
23315 ValidatedRadioControl,
23316 {
23317 required: !!field.isValid?.required,
23318 markWhenOptional,
23319 customValidity: getCustomValidity(isValid2, validity),
23320 label,
23321 help: description,
23322 onChange: onChangeControl,
23323 options: elements,
23324 selected: value,
23325 hideLabelFromVision,
23326 disabled: disabled2
23327 }
23328 );
23329 }
23330
23331 // packages/dataviews/build-module/components/dataform-controls/text.mjs
23332 var import_element66 = __toESM(require_element(), 1);
23333 var import_jsx_runtime82 = __toESM(require_jsx_runtime(), 1);
23334 function Text({
23335 data,
23336 field,
23337 onChange,
23338 hideLabelFromVision,
23339 markWhenOptional,
23340 config,
23341 validity
23342 }) {
23343 const { prefix, suffix } = config || {};
23344 return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
23345 ValidatedText,
23346 {
23347 ...{
23348 data,
23349 field,
23350 onChange,
23351 hideLabelFromVision,
23352 markWhenOptional,
23353 validity,
23354 prefix: prefix ? (0, import_element66.createElement)(prefix) : void 0,
23355 suffix: suffix ? (0, import_element66.createElement)(suffix) : void 0
23356 }
23357 }
23358 );
23359 }
23360
23361 // packages/dataviews/build-module/components/dataform-controls/time.mjs
23362 var import_components17 = __toESM(require_components(), 1);
23363 var import_element67 = __toESM(require_element(), 1);
23364 var import_i18n15 = __toESM(require_i18n(), 1);
23365 var import_jsx_runtime83 = __toESM(require_jsx_runtime(), 1);
23366 function getStep(timeFormat, values) {
23367 const tokens = (timeFormat ?? "").replace(/\\./g, "");
23368 const hasSeconds = tokens.includes("s") || values.some((value) => (parseTime2(value) ?? 0) % 60 !== 0);
23369 return hasSeconds ? 1 : void 0;
23370 }
23371 function toInputValue(value) {
23372 const seconds = parseTime2(value);
23373 if (seconds === null) {
23374 return "";
23375 }
23376 const parts = [
23377 Math.floor(seconds / 3600),
23378 Math.floor(seconds % 3600 / 60)
23379 ];
23380 if (seconds % 60 !== 0) {
23381 parts.push(seconds % 60);
23382 }
23383 return parts.map((part) => String(part).padStart(2, "0")).join(":");
23384 }
23385 function BetweenControls2({
23386 value,
23387 onChange,
23388 hideLabelFromVision,
23389 disabled: disabled2,
23390 step,
23391 min: min3,
23392 max: max3
23393 }) {
23394 const [from = "", to = ""] = value;
23395 const onChangeFrom = (0, import_element67.useCallback)(
23396 (newValue) => onChange([newValue ?? "", to]),
23397 [onChange, to]
23398 );
23399 const onChangeTo = (0, import_element67.useCallback)(
23400 (newValue) => onChange([from, newValue ?? ""]),
23401 [onChange, from]
23402 );
23403 return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
23404 import_components17.BaseControl,
23405 {
23406 help: (0, import_i18n15.__)("The end time must be later than the start time."),
23407 children: /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(Stack, { direction: "row", gap: "sm", justify: "space-between", children: [
23408 /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
23409 ValidatedInputControl,
23410 {
23411 type: "time",
23412 label: (0, import_i18n15.__)("From"),
23413 value: from,
23414 onValueChange: onChangeFrom,
23415 hideLabelFromVision,
23416 disabled: disabled2,
23417 step,
23418 min: min3,
23419 max: to || max3
23420 }
23421 ),
23422 /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
23423 ValidatedInputControl,
23424 {
23425 type: "time",
23426 label: (0, import_i18n15.__)("To"),
23427 value: to,
23428 onValueChange: onChangeTo,
23429 hideLabelFromVision,
23430 disabled: disabled2,
23431 step,
23432 min: from || min3,
23433 max: max3
23434 }
23435 )
23436 ] })
23437 }
23438 );
23439 }
23440 function Time({
23441 data,
23442 field,
23443 onChange,
23444 hideLabelFromVision,
23445 markWhenOptional,
23446 operator,
23447 validity
23448 }) {
23449 const { label, placeholder, description, getValue, setValue, isValid: isValid2 } = field;
23450 const value = getValue({ item: data });
23451 const disabled2 = field.isDisabled({ item: data, field });
23452 const timeFormat = field.format?.time;
23453 const min3 = typeof isValid2.min?.constraint === "string" ? isValid2.min.constraint : void 0;
23454 const max3 = typeof isValid2.max?.constraint === "string" ? isValid2.max.constraint : void 0;
23455 const onChangeControl = (0, import_element67.useCallback)(
23456 (newValue) => onChange(
23457 setValue({
23458 item: data,
23459 value: newValue === "" ? void 0 : newValue
23460 })
23461 ),
23462 [data, onChange, setValue]
23463 );
23464 const onChangeBetweenControls = (0, import_element67.useCallback)(
23465 ([from, to]) => onChange(
23466 setValue({
23467 item: data,
23468 // An unfilled bound is stored as `undefined`, which the
23469 // `between` operator reads as "do not apply the filter".
23470 value: [from || void 0, to || void 0]
23471 })
23472 ),
23473 [data, onChange, setValue]
23474 );
23475 if (operator === OPERATOR_BETWEEN) {
23476 let valueBetween = ["", ""];
23477 if (Array.isArray(value) && value.length === 2) {
23478 valueBetween = [
23479 toInputValue(value[0]),
23480 toInputValue(value[1])
23481 ];
23482 }
23483 return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
23484 BetweenControls2,
23485 {
23486 value: valueBetween,
23487 onChange: onChangeBetweenControls,
23488 hideLabelFromVision,
23489 disabled: disabled2,
23490 step: getStep(timeFormat, valueBetween),
23491 min: min3,
23492 max: max3
23493 }
23494 );
23495 }
23496 return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
23497 ValidatedInputControl,
23498 {
23499 required: !!isValid2.required,
23500 markWhenOptional,
23501 customValidity: getCustomValidity(isValid2, validity),
23502 type: "time",
23503 label,
23504 placeholder,
23505 description: typeof description === "string" ? description : void 0,
23506 details: typeof description === "string" ? void 0 : description,
23507 value: toInputValue(value),
23508 onValueChange: onChangeControl,
23509 hideLabelFromVision,
23510 disabled: disabled2,
23511 step: getStep(timeFormat, [value]),
23512 min: min3,
23513 max: max3
23514 }
23515 );
23516 }
23517
23518 // packages/dataviews/build-module/components/dataform-controls/toggle.mjs
23519 var import_element68 = __toESM(require_element(), 1);
23520 var import_jsx_runtime84 = __toESM(require_jsx_runtime(), 1);
23521 function Toggle({
23522 field,
23523 onChange,
23524 data,
23525 hideLabelFromVision,
23526 markWhenOptional,
23527 validity
23528 }) {
23529 const { label, description, getValue, setValue, isValid: isValid2 } = field;
23530 const disabled2 = field.isDisabled({ item: data, field });
23531 const onChangeControl = (0, import_element68.useCallback)(() => {
23532 onChange(
23533 setValue({ item: data, value: !getValue({ item: data }) })
23534 );
23535 }, [onChange, setValue, data, getValue]);
23536 return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
23537 ValidatedToggleControl,
23538 {
23539 required: !!isValid2.required,
23540 markWhenOptional,
23541 customValidity: getCustomValidity(isValid2, validity),
23542 hidden: hideLabelFromVision,
23543 label,
23544 help: description,
23545 checked: getValue({ item: data }),
23546 onChange: onChangeControl,
23547 disabled: disabled2
23548 }
23549 );
23550 }
23551
23552 // packages/dataviews/build-module/components/dataform-controls/textarea.mjs
23553 var import_element69 = __toESM(require_element(), 1);
23554 var import_jsx_runtime85 = __toESM(require_jsx_runtime(), 1);
23555 function Textarea3({
23556 data,
23557 field,
23558 onChange,
23559 hideLabelFromVision,
23560 markWhenOptional,
23561 config,
23562 validity
23563 }) {
23564 const { rows = 4 } = config || {};
23565 const disabled2 = field.isDisabled({ item: data, field });
23566 const { label, placeholder, description, setValue, isValid: isValid2 } = field;
23567 const value = field.getValue({ item: data });
23568 const onValueChangeControl = (0, import_element69.useCallback)(
23569 (newValue) => onChange(setValue({ item: data, value: newValue })),
23570 [data, onChange, setValue]
23571 );
23572 return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
23573 ValidatedTextareaControl,
23574 {
23575 required: !!isValid2.required,
23576 markWhenOptional,
23577 customValidity: getCustomValidity(isValid2, validity),
23578 label,
23579 placeholder,
23580 value: value ?? "",
23581 description: typeof description === "string" ? description : void 0,
23582 details: typeof description === "string" ? void 0 : description,
23583 onValueChange: onValueChangeControl,
23584 rows,
23585 disabled: disabled2,
23586 minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0,
23587 maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0,
23588 hideLabelFromVision
23589 }
23590 );
23591 }
23592
23593 // packages/dataviews/build-module/components/dataform-controls/toggle-group.mjs
23594 var import_components18 = __toESM(require_components(), 1);
23595 var import_element70 = __toESM(require_element(), 1);
23596 var import_jsx_runtime86 = __toESM(require_jsx_runtime(), 1);
23597 function ToggleGroup({
23598 data,
23599 field,
23600 onChange,
23601 hideLabelFromVision,
23602 markWhenOptional,
23603 validity
23604 }) {
23605 const { getValue, setValue, isValid: isValid2 } = field;
23606 const disabled2 = field.isDisabled({ item: data, field });
23607 const value = getValue({ item: data });
23608 const onChangeControl = (0, import_element70.useCallback)(
23609 (newValue) => onChange(setValue({ item: data, value: newValue })),
23610 [data, onChange, setValue]
23611 );
23612 const { elements, isLoading } = useElements({
23613 elements: field.elements,
23614 getElements: field.getElements
23615 });
23616 if (isLoading) {
23617 return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(import_components18.Spinner, {});
23618 }
23619 if (elements.length === 0) {
23620 return null;
23621 }
23622 const selectedOption = elements.find((el) => el.value === value);
23623 return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
23624 ValidatedToggleGroupControl,
23625 {
23626 required: !!field.isValid?.required,
23627 markWhenOptional,
23628 customValidity: getCustomValidity(isValid2, validity),
23629 isBlock: true,
23630 label: field.label,
23631 help: selectedOption?.description || field.description,
23632 onChange: onChangeControl,
23633 value,
23634 hideLabelFromVision,
23635 children: elements.map((el) => /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
23636 import_components18.__experimentalToggleGroupControlOption,
23637 {
23638 label: el.label,
23639 value: el.value,
23640 disabled: disabled2
23641 },
23642 el.value
23643 ))
23644 }
23645 );
23646 }
23647
23648 // packages/dataviews/build-module/components/dataform-controls/array.mjs
23649 var import_components19 = __toESM(require_components(), 1);
23650 var import_element71 = __toESM(require_element(), 1);
23651 var import_jsx_runtime87 = __toESM(require_jsx_runtime(), 1);
23652 function ArrayControl({
23653 data,
23654 field,
23655 onChange,
23656 hideLabelFromVision,
23657 markWhenOptional,
23658 validity
23659 }) {
23660 const { label, placeholder, description, getValue, setValue, isValid: isValid2 } = field;
23661 const value = getValue({ item: data });
23662 const disabled2 = field.isDisabled({ item: data, field });
23663 const { elements, isLoading } = useElements({
23664 elements: field.elements,
23665 getElements: field.getElements
23666 });
23667 const arrayValueAsElements = (0, import_element71.useMemo)(
23668 () => Array.isArray(value) ? value.map((token) => {
23669 const element = elements?.find(
23670 (suggestion) => suggestion.value === token
23671 );
23672 return element || { value: token, label: token };
23673 }) : [],
23674 [value, elements]
23675 );
23676 const onChangeControl = (0, import_element71.useCallback)(
23677 (tokens) => {
23678 const valueTokens = tokens.map((token) => {
23679 if (typeof token === "object" && "value" in token) {
23680 return token.value;
23681 }
23682 return token;
23683 });
23684 onChange(setValue({ item: data, value: valueTokens }));
23685 },
23686 [onChange, setValue, data]
23687 );
23688 if (isLoading) {
23689 return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(import_components19.Spinner, {});
23690 }
23691 return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
23692 ValidatedFormTokenField,
23693 {
23694 required: !!isValid2?.required,
23695 markWhenOptional,
23696 customValidity: getCustomValidity(isValid2, validity),
23697 label: hideLabelFromVision ? void 0 : label,
23698 value: arrayValueAsElements,
23699 onChange: onChangeControl,
23700 placeholder,
23701 suggestions: elements?.map((element) => element.value),
23702 disabled: disabled2,
23703 __experimentalValidateInput: (token) => {
23704 if (field.isValid?.elements && elements) {
23705 return elements.some(
23706 (element) => element.value === token || element.label === token
23707 );
23708 }
23709 return true;
23710 },
23711 __experimentalExpandOnFocus: elements && elements.length > 0,
23712 help: description ?? (field.isValid?.elements ? "" : void 0),
23713 displayTransform: (token) => {
23714 if (typeof token === "object" && "label" in token) {
23715 return token.label;
23716 }
23717 if (typeof token === "string" && elements) {
23718 const element = elements.find(
23719 (el) => el.value === token
23720 );
23721 return element?.label || token;
23722 }
23723 return token;
23724 },
23725 __experimentalRenderItem: ({ item }) => {
23726 if (typeof item === "string" && elements) {
23727 const element = elements.find(
23728 (el) => el.value === item
23729 );
23730 return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { children: element?.label || item });
23731 }
23732 return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { children: item });
23733 }
23734 }
23735 );
23736 }
23737
23738 // node_modules/colord/index.mjs
23739 for (r2 = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) }, t = function(r3) {
23740 return "string" == typeof r3 ? r3.length > 0 : "number" == typeof r3;
23741 }, n = function(r3, t2, n2) {
23742 return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = Math.pow(10, t2)), Math.round(n2 * r3) / n2 + 0;
23743 }, u = function(r3, t2, n2) {
23744 return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = 1), r3 > n2 ? n2 : r3 > t2 ? r3 : t2;
23745 }, e = function(r3) {
23746 return (r3 = isFinite(r3) ? r3 % 360 : 0) < 0 ? r3 + 360 : r3;
23747 }, o = function(r3, t2) {
23748 return void 0 === t2 && (t2 = 0), n(r3, t2) % 360;
23749 }, a = function(r3) {
23750 return { r: u(r3.r, 0, 255), g: u(r3.g, 0, 255), b: u(r3.b, 0, 255), a: u(r3.a) };
23751 }, i = function(r3) {
23752 return { r: n(r3.r), g: n(r3.g), b: n(r3.b), a: n(r3.a, 3) };
23753 }, s = /^#([0-9a-f]{3,8})$/i, d = function(r3, t2) {
23754 var n2 = r3.charCodeAt(t2);
23755 return (15 & n2) + 9 * (n2 >> 6);
23756 }, h = function(r3, t2) {
23757 return d(r3, t2) << 4 | d(r3, t2 + 1);
23758 }, b = [], f = 0; f < 256; f++) b.push((f < 16 ? "0" : "") + f.toString(16));
23759 var r2;
23760 var t;
23761 var n;
23762 var u;
23763 var e;
23764 var o;
23765 var a;
23766 var i;
23767 var s;
23768 var d;
23769 var h;
23770 var b;
23771 var f;
23772 var g = function(r2) {
23773 return b[u(r2, 0, 255)];
23774 };
23775 var c = function(r2) {
23776 var t = r2.r, n = r2.g, u = r2.b, e = r2.a, o = Math.max(t, n, u), a = o - Math.min(t, n, u), i = a ? o === t ? (n - u) / a : o === n ? 2 + (u - t) / a : 4 + (t - n) / a : 0;
23777 return { h: 60 * (i < 0 ? i + 6 : i), s: o ? a / o * 100 : 0, v: o / 255 * 100, a: e };
23778 };
23779 var v = function(r2) {
23780 var t = r2.h, n = r2.s, u = r2.v, e = r2.a;
23781 t = t / 360 * 6, n /= 100, u /= 100;
23782 var o = Math.floor(t), a = u * (1 - n), i = u * (1 - (t - o) * n), s = u * (1 - (1 - t + o) * n), d = o % 6;
23783 return { r: 255 * [u, i, a, a, s, u][d], g: 255 * [s, u, u, i, a, a][d], b: 255 * [a, a, s, u, u, i][d], a: e };
23784 };
23785 var l = function(r2) {
23786 return { h: e(r2.h), s: u(r2.s, 0, 100), l: u(r2.l, 0, 100), a: u(r2.a) };
23787 };
23788 var p = function(r2) {
23789 return { h: o(r2.h), s: n(r2.s), l: n(r2.l), a: n(r2.a, 3) };
23790 };
23791 var m = function(r2) {
23792 return v((n = (t = r2).s, { h: t.h, s: (n *= ((u = t.l) < 50 ? u : 100 - u) / 100) > 0 ? 2 * n / (u + n) * 100 : 0, v: u + n, a: t.a }));
23793 var t, n, u;
23794 };
23795 var y = function(r2) {
23796 return { h: (t = c(r2)).h, s: (e = (200 - (n = t.s)) * (u = t.v) / 100) > 0 && e < 200 ? n * u / 100 / (e <= 100 ? e : 200 - e) * 100 : 0, l: e / 2, a: t.a };
23797 var t, n, u, e;
23798 };
23799 var N = /^hsla?\(\s*([+-]?(?:\d*\.\d+|\d+))(deg|rad|grad|turn)?\s*,\s*([+-]?(?:\d*\.\d+|\d+))%\s*,\s*([+-]?(?:\d*\.\d+|\d+))%\s*(?:,\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*)?\)$/i;
23800 var x = /^hsla?\(\s*([+-]?(?:\d*\.\d+|\d+))(deg|rad|grad|turn)?\s+([+-]?(?:\d*\.\d+|\d+))%\s+([+-]?(?:\d*\.\d+|\d+))%\s*(?:\/\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*)?\)$/i;
23801 var M = /^rgba?\(\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*,\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*,\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*(?:,\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*)?\)$/i;
23802 var H = /^rgba?\(\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s+([+-]?(?:\d*\.\d+|\d+))(%)?\s+([+-]?(?:\d*\.\d+|\d+))(%)?\s*(?:\/\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*)?\)$/i;
23803 var $ = { string: [[function(r2) {
23804 if (!s.test(r2)) return null;
23805 var t = r2.length;
23806 return t <= 5 ? { r: 17 * d(r2, 1), g: 17 * d(r2, 2), b: 17 * d(r2, 3), a: 5 === t ? n(17 * d(r2, 4) / 255, 2) : 1 } : 7 === t || 9 === t ? { r: h(r2, 1), g: h(r2, 3), b: h(r2, 5), a: 9 === t ? n(h(r2, 7) / 255, 2) : 1 } : null;
23807 }, "hex"], [function(r2) {
23808 var t = M.exec(r2) || H.exec(r2);
23809 return t ? t[2] !== t[4] || t[4] !== t[6] ? null : a({ r: Number(t[1]) / (t[2] ? 100 / 255 : 1), g: Number(t[3]) / (t[4] ? 100 / 255 : 1), b: Number(t[5]) / (t[6] ? 100 / 255 : 1), a: void 0 === t[7] ? 1 : Number(t[7]) / (t[8] ? 100 : 1) }) : null;
23810 }, "rgb"], [function(t) {
23811 var n = N.exec(t) || x.exec(t);
23812 if (!n) return null;
23813 var u, e, o = l({ h: (u = n[1], e = n[2], void 0 === e && (e = "deg"), Number(u) * (r2[e] || 1)), s: Number(n[3]), l: Number(n[4]), a: void 0 === n[5] ? 1 : Number(n[5]) / (n[6] ? 100 : 1) });
23814 return m(o);
23815 }, "hsl"]], object: [[function(r2) {
23816 var n = r2.r, u = r2.g, e = r2.b, o = r2.a, i = void 0 === o ? 1 : o;
23817 return t(n) && t(u) && t(e) ? a({ r: Number(n), g: Number(u), b: Number(e), a: Number(i) }) : null;
23818 }, "rgb"], [function(r2) {
23819 var n = r2.h, u = r2.s, e = r2.l, o = r2.a, a = void 0 === o ? 1 : o;
23820 if (!t(n) || !t(u) || !t(e)) return null;
23821 var i = l({ h: Number(n), s: Number(u), l: Number(e), a: Number(a) });
23822 return m(i);
23823 }, "hsl"], [function(r2) {
23824 var n = r2.h, o = r2.s, a = r2.v, i = r2.a, s = void 0 === i ? 1 : i;
23825 if (!t(n) || !t(o) || !t(a)) return null;
23826 var d = (function(r3) {
23827 return { h: e(r3.h), s: u(r3.s, 0, 100), v: u(r3.v, 0, 100), a: u(r3.a) };
23828 })({ h: Number(n), s: Number(o), v: Number(a), a: Number(s) });
23829 return v(d);
23830 }, "hsv"]] };
23831 var j = function(r2, t) {
23832 for (var n = 0; n < t.length; n++) {
23833 var u = t[n][0](r2);
23834 if (u) return [u, t[n][1]];
23835 }
23836 return [null, void 0];
23837 };
23838 var w = function(r2) {
23839 return "string" == typeof r2 ? j(r2.trim(), $.string) : "object" == typeof r2 && null !== r2 ? j(r2, $.object) : [null, void 0];
23840 };
23841 var k = function(r2, t) {
23842 var n = y(r2);
23843 return { h: n.h, s: u(n.s + 100 * t, 0, 100), l: n.l, a: n.a };
23844 };
23845 var E = function(r2) {
23846 return (299 * r2.r + 587 * r2.g + 114 * r2.b) / 1e3 / 255;
23847 };
23848 var R = function(r2, t) {
23849 var n = y(r2);
23850 return { h: n.h, s: n.s, l: u(n.l + 100 * t, 0, 100), a: n.a };
23851 };
23852 var q = (function() {
23853 function r2(r3) {
23854 this.parsed = w(r3)[0], this.rgba = this.parsed || { r: 0, g: 0, b: 0, a: 1 };
23855 }
23856 return r2.prototype.isValid = function() {
23857 return null !== this.parsed;
23858 }, r2.prototype.brightness = function() {
23859 return n(E(this.rgba), 2);
23860 }, r2.prototype.isDark = function() {
23861 return E(this.rgba) < 0.5;
23862 }, r2.prototype.isLight = function() {
23863 return E(this.rgba) >= 0.5;
23864 }, r2.prototype.toHex = function() {
23865 return r3 = i(this.rgba), t = r3.r, u = r3.g, e = r3.b, a = (o = r3.a) < 1 ? g(n(255 * o)) : "", "#" + g(t) + g(u) + g(e) + a;
23866 var r3, t, u, e, o, a;
23867 }, r2.prototype.toRgb = function() {
23868 return i(this.rgba);
23869 }, r2.prototype.toRgbString = function() {
23870 return r3 = i(this.rgba), t = r3.r, n = r3.g, u = r3.b, (e = r3.a) < 1 ? "rgba(" + t + ", " + n + ", " + u + ", " + e + ")" : "rgb(" + t + ", " + n + ", " + u + ")";
23871 var r3, t, n, u, e;
23872 }, r2.prototype.toHsl = function() {
23873 return p(y(this.rgba));
23874 }, r2.prototype.toHslString = function() {
23875 return r3 = p(y(this.rgba)), t = r3.h, n = r3.s, u = r3.l, (e = r3.a) < 1 ? "hsla(" + t + ", " + n + "%, " + u + "%, " + e + ")" : "hsl(" + t + ", " + n + "%, " + u + "%)";
23876 var r3, t, n, u, e;
23877 }, r2.prototype.toHsv = function() {
23878 return r3 = c(this.rgba), { h: o(r3.h), s: n(r3.s), v: n(r3.v), a: n(r3.a, 3) };
23879 var r3;
23880 }, r2.prototype.invert = function() {
23881 return A({ r: 255 - (r3 = this.rgba).r, g: 255 - r3.g, b: 255 - r3.b, a: r3.a });
23882 var r3;
23883 }, r2.prototype.saturate = function(r3) {
23884 return void 0 === r3 && (r3 = 0.1), A(k(this.rgba, r3));
23885 }, r2.prototype.desaturate = function(r3) {
23886 return void 0 === r3 && (r3 = 0.1), A(k(this.rgba, -r3));
23887 }, r2.prototype.grayscale = function() {
23888 return A(k(this.rgba, -1));
23889 }, r2.prototype.lighten = function(r3) {
23890 return void 0 === r3 && (r3 = 0.1), A(R(this.rgba, r3));
23891 }, r2.prototype.darken = function(r3) {
23892 return void 0 === r3 && (r3 = 0.1), A(R(this.rgba, -r3));
23893 }, r2.prototype.rotate = function(r3) {
23894 return void 0 === r3 && (r3 = 15), this.hue(y(this.rgba).h + r3);
23895 }, r2.prototype.alpha = function(r3) {
23896 return "number" == typeof r3 ? A({ r: (t = this.rgba).r, g: t.g, b: t.b, a: r3 }) : n(this.rgba.a, 3);
23897 var t;
23898 }, r2.prototype.hue = function(r3) {
23899 var t = y(this.rgba);
23900 return "number" == typeof r3 ? A({ h: r3, s: t.s, l: t.l, a: t.a }) : o(t.h);
23901 }, r2.prototype.isEqual = function(r3) {
23902 return this.toHex() === A(r3).toHex();
23903 }, r2;
23904 })();
23905 var A = function(r2) {
23906 return r2 instanceof q ? r2 : new q(r2);
23907 };
23908
23909 // packages/dataviews/build-module/components/dataform-controls/color.mjs
23910 var import_components20 = __toESM(require_components(), 1);
23911 var import_element72 = __toESM(require_element(), 1);
23912 var import_i18n16 = __toESM(require_i18n(), 1);
23913 var import_jsx_runtime88 = __toESM(require_jsx_runtime(), 1);
23914 var ColorPickerDropdown = ({
23915 color,
23916 onColorChange,
23917 disabled: disabled2
23918 }) => {
23919 const validColor = color && A(color).isValid() ? color : "#ffffff";
23920 return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
23921 import_components20.Dropdown,
23922 {
23923 className: "dataviews-controls__color-picker-dropdown",
23924 popoverProps: { resize: false },
23925 renderToggle: ({ onToggle }) => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
23926 import_components20.Button,
23927 {
23928 onClick: onToggle,
23929 "aria-label": (0, import_i18n16.__)("Open color picker"),
23930 size: "small",
23931 disabled: disabled2,
23932 accessibleWhenDisabled: true,
23933 icon: () => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_components20.ColorIndicator, { colorValue: validColor })
23934 }
23935 ),
23936 renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(import_components20.__experimentalDropdownContentWrapper, { paddingSize: "none", children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
23937 import_components20.ColorPicker,
23938 {
23939 color: validColor,
23940 onChange: onColorChange,
23941 enableAlpha: true
23942 }
23943 ) })
23944 }
23945 );
23946 };
23947 function Color({
23948 data,
23949 field,
23950 onChange,
23951 hideLabelFromVision,
23952 markWhenOptional,
23953 validity
23954 }) {
23955 const { label, placeholder, description, setValue, isValid: isValid2 } = field;
23956 const disabled2 = field.isDisabled({ item: data, field });
23957 const value = field.getValue({ item: data }) || "";
23958 const handleColorChange = (0, import_element72.useCallback)(
23959 (newColor) => {
23960 onChange(setValue({ item: data, value: newColor }));
23961 },
23962 [data, onChange, setValue]
23963 );
23964 const handleInputChange = (0, import_element72.useCallback)(
23965 (newValue) => {
23966 onChange(setValue({ item: data, value: newValue || "" }));
23967 },
23968 [data, onChange, setValue]
23969 );
23970 return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
23971 ValidatedInputControl,
23972 {
23973 required: !!field.isValid?.required,
23974 markWhenOptional,
23975 customValidity: getCustomValidity(isValid2, validity),
23976 label,
23977 placeholder,
23978 value,
23979 description: typeof description === "string" ? description : void 0,
23980 details: typeof description === "string" ? void 0 : description,
23981 onValueChange: handleInputChange,
23982 hideLabelFromVision,
23983 type: "text",
23984 disabled: disabled2,
23985 prefix: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(InputLayout3.Slot, { padding: "minimal", children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
23986 ColorPickerDropdown,
23987 {
23988 color: value,
23989 onColorChange: handleColorChange,
23990 disabled: disabled2
23991 }
23992 ) })
23993 }
23994 );
23995 }
23996
23997 // packages/dataviews/build-module/components/dataform-controls/password.mjs
23998 var import_components21 = __toESM(require_components(), 1);
23999 var import_element73 = __toESM(require_element(), 1);
24000 var import_i18n17 = __toESM(require_i18n(), 1);
24001 var import_jsx_runtime89 = __toESM(require_jsx_runtime(), 1);
24002 function Password({
24003 data,
24004 field,
24005 onChange,
24006 hideLabelFromVision,
24007 markWhenOptional,
24008 validity
24009 }) {
24010 const [isVisible, setIsVisible] = (0, import_element73.useState)(false);
24011 const disabled2 = field.isDisabled({ item: data, field });
24012 const toggleVisibility = (0, import_element73.useCallback)(() => {
24013 setIsVisible((prev) => !prev);
24014 }, []);
24015 return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
24016 ValidatedText,
24017 {
24018 ...{
24019 data,
24020 field,
24021 onChange,
24022 hideLabelFromVision,
24023 markWhenOptional,
24024 validity,
24025 type: isVisible ? "text" : "password",
24026 suffix: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(InputLayout3.Slot, { padding: "minimal", children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
24027 import_components21.Button,
24028 {
24029 icon: isVisible ? unseen_default : seen_default,
24030 onClick: toggleVisibility,
24031 size: "small",
24032 label: isVisible ? (0, import_i18n17.__)("Hide password") : (0, import_i18n17.__)("Show password"),
24033 disabled: disabled2,
24034 accessibleWhenDisabled: true
24035 }
24036 ) })
24037 }
24038 }
24039 );
24040 }
24041
24042 // packages/dataviews/build-module/field-types/utils/has-elements.mjs
24043 function hasElements(field) {
24044 return Array.isArray(field.elements) && field.elements.length > 0 || typeof field.getElements === "function";
24045 }
24046
24047 // packages/dataviews/build-module/components/dataform-controls/index.mjs
24048 var import_jsx_runtime90 = __toESM(require_jsx_runtime(), 1);
24049 var FORM_CONTROLS = {
24050 adaptiveSelect: AdaptiveSelect,
24051 array: ArrayControl,
24052 checkbox: Checkbox,
24053 color: Color,
24054 combobox: Combobox,
24055 datetime: DateTime,
24056 date: DateControl,
24057 email: Email,
24058 telephone: Telephone,
24059 url: Url,
24060 integer: Integer,
24061 number: Number2,
24062 password: Password,
24063 radio: Radio,
24064 select: Select2,
24065 text: Text,
24066 time: Time,
24067 toggle: Toggle,
24068 textarea: Textarea3,
24069 toggleGroup: ToggleGroup
24070 };
24071 function isEditConfig(value) {
24072 return value && typeof value === "object" && typeof value.control === "string";
24073 }
24074 function createConfiguredControl(config) {
24075 const { control, ...controlConfig } = config;
24076 const BaseControlType = getControlByType(control);
24077 if (BaseControlType === null) {
24078 return null;
24079 }
24080 return function ConfiguredControl(props) {
24081 return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(BaseControlType, { ...props, config: controlConfig });
24082 };
24083 }
24084 function getControl(field, fallback) {
24085 if (typeof field.Edit === "function") {
24086 return field.Edit;
24087 }
24088 if (typeof field.Edit === "string") {
24089 return getControlByType(field.Edit);
24090 }
24091 if (isEditConfig(field.Edit)) {
24092 return createConfiguredControl(field.Edit);
24093 }
24094 if (hasElements(field) && field.type !== "array") {
24095 return getControlByType("adaptiveSelect");
24096 }
24097 if (fallback === null) {
24098 return null;
24099 }
24100 return getControlByType(fallback);
24101 }
24102 function getControlByType(type) {
24103 if (Object.keys(FORM_CONTROLS).includes(type)) {
24104 return FORM_CONTROLS[type];
24105 }
24106 return null;
24107 }
24108
24109 // packages/dataviews/build-module/field-types/utils/get-filter-by.mjs
24110 function getFilterBy(field, defaultOperators, validOperators) {
24111 if (field.filterBy === false) {
24112 return false;
24113 }
24114 const operators = field.filterBy?.operators?.filter(
24115 (op) => validOperators.includes(op)
24116 ) ?? defaultOperators;
24117 if (operators.length === 0) {
24118 return false;
24119 }
24120 return {
24121 isPrimary: !!field.filterBy?.isPrimary,
24122 operators
24123 };
24124 }
24125 var get_filter_by_default = getFilterBy;
24126
24127 // packages/dataviews/build-module/field-types/utils/get-value-from-id.mjs
24128 var getValueFromId = (id) => ({ item }) => {
24129 const path = id.split(".");
24130 let value = item;
24131 for (const segment of path) {
24132 if (value.hasOwnProperty(segment)) {
24133 value = value[segment];
24134 } else {
24135 value = void 0;
24136 }
24137 }
24138 return value;
24139 };
24140 var get_value_from_id_default = getValueFromId;
24141
24142 // packages/dataviews/build-module/field-types/utils/set-value-from-id.mjs
24143 var setValueFromId = (id) => ({ value }) => {
24144 const path = id.split(".");
24145 const result = {};
24146 let current = result;
24147 for (const segment of path.slice(0, -1)) {
24148 current[segment] = {};
24149 current = current[segment];
24150 }
24151 current[path.at(-1)] = value;
24152 return result;
24153 };
24154 var set_value_from_id_default = setValueFromId;
24155
24156 // packages/dataviews/build-module/field-types/email.mjs
24157 var import_i18n18 = __toESM(require_i18n(), 1);
24158
24159 // packages/dataviews/build-module/field-types/utils/render-from-elements.mjs
24160 function RenderFromElements({
24161 item,
24162 field
24163 }) {
24164 const { elements, isLoading } = useElements({
24165 elements: field.elements,
24166 getElements: field.getElements
24167 });
24168 const value = field.getValue({ item });
24169 if (isLoading) {
24170 return value;
24171 }
24172 if (elements.length === 0) {
24173 return value;
24174 }
24175 return elements?.find((element) => element.value === value)?.label || field.getValue({ item });
24176 }
24177
24178 // packages/dataviews/build-module/field-types/utils/render-default.mjs
24179 var import_jsx_runtime91 = __toESM(require_jsx_runtime(), 1);
24180 function render({
24181 item,
24182 field
24183 }) {
24184 if (field.hasElements) {
24185 return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(RenderFromElements, { item, field });
24186 }
24187 return field.getValueFormatted({ item, field });
24188 }
24189
24190 // packages/dataviews/build-module/field-types/utils/sort-text.mjs
24191 var sort_text_default = (a, b, direction) => {
24192 return direction === "asc" ? a.localeCompare(b) : b.localeCompare(a);
24193 };
24194
24195 // packages/dataviews/build-module/field-types/utils/is-valid-required.mjs
24196 function isValidRequired(item, field) {
24197 const value = field.getValue({ item });
24198 return ![void 0, "", null].includes(value);
24199 }
24200
24201 // packages/dataviews/build-module/field-types/utils/is-valid-min-length.mjs
24202 function isValidMinLength(item, field) {
24203 if (typeof field.isValid.minLength?.constraint !== "number") {
24204 return false;
24205 }
24206 const value = field.getValue({ item });
24207 if ([void 0, "", null].includes(value)) {
24208 return true;
24209 }
24210 return String(value).length >= field.isValid.minLength.constraint;
24211 }
24212
24213 // packages/dataviews/build-module/field-types/utils/is-valid-max-length.mjs
24214 function isValidMaxLength(item, field) {
24215 if (typeof field.isValid.maxLength?.constraint !== "number") {
24216 return false;
24217 }
24218 const value = field.getValue({ item });
24219 if ([void 0, "", null].includes(value)) {
24220 return true;
24221 }
24222 return String(value).length <= field.isValid.maxLength.constraint;
24223 }
24224
24225 // packages/dataviews/build-module/field-types/utils/is-valid-pattern.mjs
24226 function isValidPattern(item, field) {
24227 if (field.isValid.pattern?.constraint === void 0) {
24228 return true;
24229 }
24230 try {
24231 const regexp = new RegExp(field.isValid.pattern.constraint);
24232 const value = field.getValue({ item });
24233 if ([void 0, "", null].includes(value)) {
24234 return true;
24235 }
24236 return regexp.test(String(value));
24237 } catch {
24238 return false;
24239 }
24240 }
24241
24242 // packages/dataviews/build-module/field-types/utils/is-valid-elements.mjs
24243 function isValidElements(item, field) {
24244 const elements = field.elements ?? [];
24245 const validValues = elements.map((el) => el.value);
24246 if (validValues.length === 0) {
24247 return true;
24248 }
24249 const value = field.getValue({ item });
24250 return [].concat(value).every((v2) => validValues.includes(v2));
24251 }
24252
24253 // packages/dataviews/build-module/field-types/utils/get-value-formatted-default.mjs
24254 function getValueFormatted({
24255 item,
24256 field
24257 }) {
24258 return field.getValue({ item });
24259 }
24260 var get_value_formatted_default_default = getValueFormatted;
24261
24262 // packages/dataviews/build-module/field-types/email.mjs
24263 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])?)*$/;
24264 function isValidCustom(item, field) {
24265 const value = field.getValue({ item });
24266 if (![void 0, "", null].includes(value) && !emailRegex.test(value)) {
24267 return (0, import_i18n18.__)("Value must be a valid email address.");
24268 }
24269 return null;
24270 }
24271 var email_default = {
24272 type: "email",
24273 render,
24274 Edit: "email",
24275 sort: sort_text_default,
24276 enableSorting: true,
24277 enableGlobalSearch: false,
24278 defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
24279 validOperators: [
24280 OPERATOR_IS,
24281 OPERATOR_IS_NOT,
24282 OPERATOR_CONTAINS,
24283 OPERATOR_NOT_CONTAINS,
24284 OPERATOR_STARTS_WITH,
24285 // Multiple selection
24286 OPERATOR_IS_ANY,
24287 OPERATOR_IS_NONE,
24288 OPERATOR_IS_NOT_ALL
24289 ],
24290 format: {},
24291 getValueFormatted: get_value_formatted_default_default,
24292 validate: {
24293 required: isValidRequired,
24294 pattern: isValidPattern,
24295 minLength: isValidMinLength,
24296 maxLength: isValidMaxLength,
24297 elements: isValidElements,
24298 custom: isValidCustom
24299 }
24300 };
24301
24302 // packages/dataviews/build-module/field-types/integer.mjs
24303 var import_i18n19 = __toESM(require_i18n(), 1);
24304
24305 // packages/dataviews/build-module/field-types/utils/sort-number.mjs
24306 var sort_number_default = (a, b, direction) => {
24307 return direction === "asc" ? a - b : b - a;
24308 };
24309
24310 // packages/dataviews/build-module/field-types/utils/is-valid-min.mjs
24311 function isValidMin(item, field) {
24312 if (typeof field.isValid.min?.constraint !== "number") {
24313 return false;
24314 }
24315 const value = field.getValue({ item });
24316 if ([void 0, "", null].includes(value)) {
24317 return true;
24318 }
24319 return Number(value) >= field.isValid.min.constraint;
24320 }
24321
24322 // packages/dataviews/build-module/field-types/utils/is-valid-max.mjs
24323 function isValidMax(item, field) {
24324 if (typeof field.isValid.max?.constraint !== "number") {
24325 return false;
24326 }
24327 const value = field.getValue({ item });
24328 if ([void 0, "", null].includes(value)) {
24329 return true;
24330 }
24331 return Number(value) <= field.isValid.max.constraint;
24332 }
24333
24334 // packages/dataviews/build-module/field-types/integer.mjs
24335 var format2 = {
24336 separatorThousand: ","
24337 };
24338 function getValueFormatted2({
24339 item,
24340 field
24341 }) {
24342 let value = field.getValue({ item });
24343 if (value === null || value === void 0) {
24344 return "";
24345 }
24346 value = Number(value);
24347 if (!Number.isFinite(value)) {
24348 return String(value);
24349 }
24350 let formatInteger;
24351 if (field.type !== "integer") {
24352 formatInteger = format2;
24353 } else {
24354 formatInteger = field.format;
24355 }
24356 const { separatorThousand } = formatInteger;
24357 const integerValue = Math.trunc(value);
24358 if (!separatorThousand) {
24359 return String(integerValue);
24360 }
24361 return String(integerValue).replace(
24362 /\B(?=(\d{3})+(?!\d))/g,
24363 separatorThousand
24364 );
24365 }
24366 function isValidCustom2(item, field) {
24367 const value = field.getValue({ item });
24368 if (![void 0, "", null].includes(value) && !Number.isInteger(value)) {
24369 return (0, import_i18n19.__)("Value must be an integer.");
24370 }
24371 return null;
24372 }
24373 var integer_default = {
24374 type: "integer",
24375 render,
24376 Edit: "integer",
24377 sort: sort_number_default,
24378 enableSorting: true,
24379 enableGlobalSearch: false,
24380 defaultOperators: [
24381 OPERATOR_IS,
24382 OPERATOR_IS_NOT,
24383 OPERATOR_LESS_THAN,
24384 OPERATOR_GREATER_THAN,
24385 OPERATOR_LESS_THAN_OR_EQUAL,
24386 OPERATOR_GREATER_THAN_OR_EQUAL,
24387 OPERATOR_BETWEEN
24388 ],
24389 validOperators: [
24390 // Single-selection
24391 OPERATOR_IS,
24392 OPERATOR_IS_NOT,
24393 OPERATOR_LESS_THAN,
24394 OPERATOR_GREATER_THAN,
24395 OPERATOR_LESS_THAN_OR_EQUAL,
24396 OPERATOR_GREATER_THAN_OR_EQUAL,
24397 OPERATOR_BETWEEN,
24398 // Multiple-selection
24399 OPERATOR_IS_ANY,
24400 OPERATOR_IS_NONE,
24401 OPERATOR_IS_NOT_ALL
24402 ],
24403 format: format2,
24404 getValueFormatted: getValueFormatted2,
24405 validate: {
24406 required: isValidRequired,
24407 min: isValidMin,
24408 max: isValidMax,
24409 elements: isValidElements,
24410 custom: isValidCustom2
24411 }
24412 };
24413
24414 // packages/dataviews/build-module/field-types/number.mjs
24415 var import_i18n20 = __toESM(require_i18n(), 1);
24416 var format3 = {
24417 separatorThousand: ",",
24418 separatorDecimal: ".",
24419 decimals: 2
24420 };
24421 function getValueFormatted3({
24422 item,
24423 field
24424 }) {
24425 let value = field.getValue({ item });
24426 if (value === null || value === void 0) {
24427 return "";
24428 }
24429 value = Number(value);
24430 if (!Number.isFinite(value)) {
24431 return String(value);
24432 }
24433 let formatNumber;
24434 if (field.type !== "number") {
24435 formatNumber = format3;
24436 } else {
24437 formatNumber = field.format;
24438 }
24439 const { separatorThousand, separatorDecimal, decimals } = formatNumber;
24440 const fixedValue = value.toFixed(decimals);
24441 const [integerPart, decimalPart] = fixedValue.split(".");
24442 const formattedInteger = separatorThousand ? integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, separatorThousand) : integerPart;
24443 return decimals === 0 ? formattedInteger : formattedInteger + separatorDecimal + decimalPart;
24444 }
24445 function isEmpty(value) {
24446 return value === "" || value === void 0 || value === null;
24447 }
24448 function isValidCustom3(item, field) {
24449 const value = field.getValue({ item });
24450 if (!isEmpty(value) && !Number.isFinite(value)) {
24451 return (0, import_i18n20.__)("Value must be a number.");
24452 }
24453 return null;
24454 }
24455 var number_default = {
24456 type: "number",
24457 render,
24458 Edit: "number",
24459 sort: sort_number_default,
24460 enableSorting: true,
24461 enableGlobalSearch: false,
24462 defaultOperators: [
24463 OPERATOR_IS,
24464 OPERATOR_IS_NOT,
24465 OPERATOR_LESS_THAN,
24466 OPERATOR_GREATER_THAN,
24467 OPERATOR_LESS_THAN_OR_EQUAL,
24468 OPERATOR_GREATER_THAN_OR_EQUAL,
24469 OPERATOR_BETWEEN
24470 ],
24471 validOperators: [
24472 // Single-selection
24473 OPERATOR_IS,
24474 OPERATOR_IS_NOT,
24475 OPERATOR_LESS_THAN,
24476 OPERATOR_GREATER_THAN,
24477 OPERATOR_LESS_THAN_OR_EQUAL,
24478 OPERATOR_GREATER_THAN_OR_EQUAL,
24479 OPERATOR_BETWEEN,
24480 // Multiple-selection
24481 OPERATOR_IS_ANY,
24482 OPERATOR_IS_NONE,
24483 OPERATOR_IS_NOT_ALL
24484 ],
24485 format: format3,
24486 getValueFormatted: getValueFormatted3,
24487 validate: {
24488 required: isValidRequired,
24489 min: isValidMin,
24490 max: isValidMax,
24491 elements: isValidElements,
24492 custom: isValidCustom3
24493 }
24494 };
24495
24496 // packages/dataviews/build-module/field-types/text.mjs
24497 var text_default = {
24498 type: "text",
24499 render,
24500 Edit: "text",
24501 sort: sort_text_default,
24502 enableSorting: true,
24503 enableGlobalSearch: false,
24504 defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
24505 validOperators: [
24506 // Single selection
24507 OPERATOR_IS,
24508 OPERATOR_IS_NOT,
24509 OPERATOR_CONTAINS,
24510 OPERATOR_NOT_CONTAINS,
24511 OPERATOR_STARTS_WITH,
24512 // Multiple selection
24513 OPERATOR_IS_ANY,
24514 OPERATOR_IS_NONE,
24515 OPERATOR_IS_NOT_ALL
24516 ],
24517 format: {},
24518 getValueFormatted: get_value_formatted_default_default,
24519 validate: {
24520 required: isValidRequired,
24521 pattern: isValidPattern,
24522 minLength: isValidMinLength,
24523 maxLength: isValidMaxLength,
24524 elements: isValidElements
24525 }
24526 };
24527
24528 // packages/dataviews/build-module/field-types/datetime.mjs
24529 var import_date9 = __toESM(require_date(), 1);
24530
24531 // packages/dataviews/build-module/field-types/utils/is-valid-boundary.mjs
24532 var import_date8 = __toESM(require_date(), 1);
24533 function parseDateLike(value) {
24534 if (!isValid(new Date(value))) {
24535 return null;
24536 }
24537 const parsed = (0, import_date8.getDate)(value);
24538 return parsed && isValid(parsed) ? parsed.getTime() : null;
24539 }
24540 function validateBoundary(item, field, boundary, parse2) {
24541 const constraint = field.isValid[boundary]?.constraint;
24542 if (typeof constraint !== "string") {
24543 return false;
24544 }
24545 const value = field.getValue({ item });
24546 const boundaryValue = Array.isArray(value) ? value[boundary === "min" ? 0 : value.length - 1] : value;
24547 if (boundaryValue === void 0 || boundaryValue === null || boundaryValue === "") {
24548 return true;
24549 }
24550 const parsedConstraint = parse2(constraint);
24551 const parsedValue = parse2(String(boundaryValue));
24552 if (parsedConstraint === null || parsedValue === null) {
24553 return false;
24554 }
24555 return boundary === "min" ? parsedValue >= parsedConstraint : parsedValue <= parsedConstraint;
24556 }
24557 function isValidMinDate(item, field) {
24558 return validateBoundary(item, field, "min", parseDateLike);
24559 }
24560 function isValidMaxDate(item, field) {
24561 return validateBoundary(item, field, "max", parseDateLike);
24562 }
24563 function isValidMinTime(item, field) {
24564 return validateBoundary(item, field, "min", parseTime2);
24565 }
24566 function isValidMaxTime(item, field) {
24567 return validateBoundary(item, field, "max", parseTime2);
24568 }
24569
24570 // packages/dataviews/build-module/field-types/datetime.mjs
24571 var format4 = {
24572 datetime: (0, import_date9.getSettings)().formats.datetime,
24573 weekStartsOn: (0, import_date9.getSettings)().l10n.startOfWeek
24574 };
24575 function getValueFormatted4({
24576 item,
24577 field
24578 }) {
24579 const value = field.getValue({ item });
24580 if (["", void 0, null].includes(value)) {
24581 return "";
24582 }
24583 let formatDatetime;
24584 if (field.type !== "datetime") {
24585 formatDatetime = format4;
24586 } else {
24587 formatDatetime = field.format;
24588 }
24589 return (0, import_date9.dateI18n)(formatDatetime.datetime, (0, import_date9.getDate)(value));
24590 }
24591 var sort = (a, b, direction) => {
24592 const timeA = new Date(a).getTime();
24593 const timeB = new Date(b).getTime();
24594 return direction === "asc" ? timeA - timeB : timeB - timeA;
24595 };
24596 var datetime_default = {
24597 type: "datetime",
24598 render,
24599 Edit: "datetime",
24600 sort,
24601 enableSorting: true,
24602 enableGlobalSearch: false,
24603 defaultOperators: [
24604 OPERATOR_ON,
24605 OPERATOR_NOT_ON,
24606 OPERATOR_BEFORE,
24607 OPERATOR_AFTER,
24608 OPERATOR_BEFORE_INC,
24609 OPERATOR_AFTER_INC,
24610 OPERATOR_IN_THE_PAST,
24611 OPERATOR_OVER
24612 ],
24613 validOperators: [
24614 OPERATOR_ON,
24615 OPERATOR_NOT_ON,
24616 OPERATOR_BEFORE,
24617 OPERATOR_AFTER,
24618 OPERATOR_BEFORE_INC,
24619 OPERATOR_AFTER_INC,
24620 OPERATOR_IN_THE_PAST,
24621 OPERATOR_OVER
24622 ],
24623 format: format4,
24624 getValueFormatted: getValueFormatted4,
24625 validate: {
24626 required: isValidRequired,
24627 elements: isValidElements,
24628 min: isValidMinDate,
24629 max: isValidMaxDate
24630 }
24631 };
24632
24633 // packages/dataviews/build-module/field-types/date.mjs
24634 var import_date10 = __toESM(require_date(), 1);
24635 var format5 = {
24636 date: (0, import_date10.getSettings)().formats.date,
24637 weekStartsOn: (0, import_date10.getSettings)().l10n.startOfWeek
24638 };
24639 function getValueFormatted5({
24640 item,
24641 field
24642 }) {
24643 const value = field.getValue({ item });
24644 if (["", void 0, null].includes(value)) {
24645 return "";
24646 }
24647 let formatDate2;
24648 if (field.type !== "date") {
24649 formatDate2 = format5;
24650 } else {
24651 formatDate2 = field.format;
24652 }
24653 return (0, import_date10.dateI18n)(formatDate2.date, (0, import_date10.getDate)(value));
24654 }
24655 var sort2 = (a, b, direction) => {
24656 const timeA = new Date(a).getTime();
24657 const timeB = new Date(b).getTime();
24658 return direction === "asc" ? timeA - timeB : timeB - timeA;
24659 };
24660 var date_default = {
24661 type: "date",
24662 render,
24663 Edit: "date",
24664 sort: sort2,
24665 enableSorting: true,
24666 enableGlobalSearch: false,
24667 defaultOperators: [
24668 OPERATOR_ON,
24669 OPERATOR_NOT_ON,
24670 OPERATOR_BEFORE,
24671 OPERATOR_AFTER,
24672 OPERATOR_BEFORE_INC,
24673 OPERATOR_AFTER_INC,
24674 OPERATOR_IN_THE_PAST,
24675 OPERATOR_OVER,
24676 OPERATOR_BETWEEN
24677 ],
24678 validOperators: [
24679 OPERATOR_ON,
24680 OPERATOR_NOT_ON,
24681 OPERATOR_BEFORE,
24682 OPERATOR_AFTER,
24683 OPERATOR_BEFORE_INC,
24684 OPERATOR_AFTER_INC,
24685 OPERATOR_IN_THE_PAST,
24686 OPERATOR_OVER,
24687 OPERATOR_BETWEEN
24688 ],
24689 format: format5,
24690 getValueFormatted: getValueFormatted5,
24691 validate: {
24692 required: isValidRequired,
24693 elements: isValidElements,
24694 min: isValidMinDate,
24695 max: isValidMaxDate
24696 }
24697 };
24698
24699 // packages/dataviews/build-module/field-types/time.mjs
24700 var import_date11 = __toESM(require_date(), 1);
24701 var format6 = {
24702 time: (0, import_date11.getSettings)().formats.time
24703 };
24704 var ANCHOR_DATE = "2000-01-01";
24705 function toAnchoredDate(secondsSinceMidnight) {
24706 const hours = Math.floor(secondsSinceMidnight / 3600);
24707 const minutes = Math.floor(secondsSinceMidnight % 3600 / 60);
24708 const seconds = secondsSinceMidnight % 60;
24709 const time = [hours, minutes, seconds].map((part) => String(part).padStart(2, "0")).join(":");
24710 return (0, import_date11.getDate)(`${ANCHOR_DATE}T${time}`);
24711 }
24712 function getValueFormatted6({
24713 item,
24714 field
24715 }) {
24716 const secondsSinceMidnight = parseTime2(field.getValue({ item }));
24717 if (secondsSinceMidnight === null) {
24718 return "";
24719 }
24720 let formatTime;
24721 if (field.type !== "time") {
24722 formatTime = format6;
24723 } else {
24724 formatTime = field.format;
24725 }
24726 return (0, import_date11.dateI18n)(formatTime.time, toAnchoredDate(secondsSinceMidnight));
24727 }
24728 var sort3 = (a, b, direction) => {
24729 const timeA = parseTime2(a);
24730 const timeB = parseTime2(b);
24731 if (timeA === null || timeB === null) {
24732 if (timeA === timeB) {
24733 return 0;
24734 }
24735 return timeA === null ? 1 : -1;
24736 }
24737 return direction === "asc" ? timeA - timeB : timeB - timeA;
24738 };
24739 var time_default = {
24740 type: "time",
24741 render,
24742 Edit: "time",
24743 sort: sort3,
24744 enableSorting: true,
24745 enableGlobalSearch: false,
24746 defaultOperators: [
24747 OPERATOR_ON,
24748 OPERATOR_NOT_ON,
24749 OPERATOR_BEFORE,
24750 OPERATOR_AFTER,
24751 OPERATOR_BEFORE_INC,
24752 OPERATOR_AFTER_INC,
24753 OPERATOR_BETWEEN
24754 ],
24755 validOperators: [
24756 OPERATOR_ON,
24757 OPERATOR_NOT_ON,
24758 OPERATOR_BEFORE,
24759 OPERATOR_AFTER,
24760 OPERATOR_BEFORE_INC,
24761 OPERATOR_AFTER_INC,
24762 OPERATOR_BETWEEN
24763 ],
24764 format: format6,
24765 getValueFormatted: getValueFormatted6,
24766 validate: {
24767 required: isValidRequired,
24768 elements: isValidElements,
24769 min: isValidMinTime,
24770 max: isValidMaxTime
24771 }
24772 };
24773
24774 // packages/dataviews/build-module/field-types/boolean.mjs
24775 var import_i18n21 = __toESM(require_i18n(), 1);
24776
24777 // packages/dataviews/build-module/field-types/utils/is-valid-required-for-bool.mjs
24778 function isValidRequiredForBool(item, field) {
24779 const value = field.getValue({ item });
24780 return value === true;
24781 }
24782
24783 // packages/dataviews/build-module/field-types/boolean.mjs
24784 function getValueFormatted7({
24785 item,
24786 field
24787 }) {
24788 const value = field.getValue({ item });
24789 if (value === true) {
24790 return (0, import_i18n21.__)("True");
24791 }
24792 if (value === false) {
24793 return (0, import_i18n21.__)("False");
24794 }
24795 return "";
24796 }
24797 function isValidCustom4(item, field) {
24798 const value = field.getValue({ item });
24799 if (![void 0, "", null].includes(value) && ![true, false].includes(value)) {
24800 return (0, import_i18n21.__)("Value must be true, false, or undefined");
24801 }
24802 return null;
24803 }
24804 var sort4 = (a, b, direction) => {
24805 const boolA = Boolean(a);
24806 const boolB = Boolean(b);
24807 if (boolA === boolB) {
24808 return 0;
24809 }
24810 if (direction === "asc") {
24811 return boolA ? 1 : -1;
24812 }
24813 return boolA ? -1 : 1;
24814 };
24815 var boolean_default = {
24816 type: "boolean",
24817 render,
24818 Edit: "checkbox",
24819 sort: sort4,
24820 validate: {
24821 required: isValidRequiredForBool,
24822 elements: isValidElements,
24823 custom: isValidCustom4
24824 },
24825 enableSorting: true,
24826 enableGlobalSearch: false,
24827 defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT],
24828 validOperators: [OPERATOR_IS, OPERATOR_IS_NOT],
24829 format: {},
24830 getValueFormatted: getValueFormatted7
24831 };
24832
24833 // packages/dataviews/build-module/field-types/media.mjs
24834 var media_default = {
24835 type: "media",
24836 render: () => null,
24837 Edit: null,
24838 sort: () => 0,
24839 enableSorting: false,
24840 enableGlobalSearch: false,
24841 defaultOperators: [],
24842 validOperators: [],
24843 format: {},
24844 getValueFormatted: get_value_formatted_default_default,
24845 // cannot validate any constraint, so
24846 // the only available validation for the field author
24847 // would be providing a custom validator.
24848 validate: {}
24849 };
24850
24851 // packages/dataviews/build-module/field-types/array.mjs
24852 var import_i18n22 = __toESM(require_i18n(), 1);
24853
24854 // packages/dataviews/build-module/field-types/utils/is-valid-required-for-array.mjs
24855 function isValidRequiredForArray(item, field) {
24856 const value = field.getValue({ item });
24857 return Array.isArray(value) && value.length > 0 && value.every(
24858 (element) => ![void 0, "", null].includes(element)
24859 );
24860 }
24861
24862 // packages/dataviews/build-module/field-types/array.mjs
24863 function getValueFormatted8({
24864 item,
24865 field
24866 }) {
24867 const value = field.getValue({ item });
24868 const arr = Array.isArray(value) ? value : [];
24869 return arr.join(", ");
24870 }
24871 function render2({ item, field }) {
24872 return getValueFormatted8({ item, field });
24873 }
24874 function isValidCustom5(item, field) {
24875 const value = field.getValue({ item });
24876 if ([void 0, "", null].includes(value)) {
24877 return null;
24878 }
24879 if (!Array.isArray(value)) {
24880 return (0, import_i18n22.__)("Value must be an array.");
24881 }
24882 if (!value.every((v2) => typeof v2 === "string")) {
24883 return (0, import_i18n22.__)("Every value must be a string.");
24884 }
24885 return null;
24886 }
24887 var sort5 = (a, b, direction) => {
24888 const arrA = Array.isArray(a) ? a : [];
24889 const arrB = Array.isArray(b) ? b : [];
24890 if (arrA.length !== arrB.length) {
24891 return direction === "asc" ? arrA.length - arrB.length : arrB.length - arrA.length;
24892 }
24893 const joinedA = arrA.join(",");
24894 const joinedB = arrB.join(",");
24895 return direction === "asc" ? joinedA.localeCompare(joinedB) : joinedB.localeCompare(joinedA);
24896 };
24897 var array_default = {
24898 type: "array",
24899 render: render2,
24900 Edit: "array",
24901 sort: sort5,
24902 enableSorting: true,
24903 enableGlobalSearch: false,
24904 defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
24905 validOperators: [
24906 OPERATOR_IS_ANY,
24907 OPERATOR_IS_NONE,
24908 OPERATOR_IS_ALL,
24909 OPERATOR_IS_NOT_ALL
24910 ],
24911 format: {},
24912 getValueFormatted: getValueFormatted8,
24913 validate: {
24914 required: isValidRequiredForArray,
24915 elements: isValidElements,
24916 custom: isValidCustom5
24917 }
24918 };
24919
24920 // packages/dataviews/build-module/field-types/password.mjs
24921 function getValueFormatted9({
24922 item,
24923 field
24924 }) {
24925 return field.getValue({ item }) ? "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" : "";
24926 }
24927 var password_default = {
24928 type: "password",
24929 render,
24930 Edit: "password",
24931 sort: () => 0,
24932 // Passwords should not be sortable for security reasons
24933 enableSorting: false,
24934 enableGlobalSearch: false,
24935 defaultOperators: [],
24936 validOperators: [],
24937 format: {},
24938 getValueFormatted: getValueFormatted9,
24939 validate: {
24940 required: isValidRequired,
24941 pattern: isValidPattern,
24942 minLength: isValidMinLength,
24943 maxLength: isValidMaxLength,
24944 elements: isValidElements
24945 }
24946 };
24947
24948 // packages/dataviews/build-module/field-types/telephone.mjs
24949 var telephone_default = {
24950 type: "telephone",
24951 render,
24952 Edit: "telephone",
24953 sort: sort_text_default,
24954 enableSorting: true,
24955 enableGlobalSearch: false,
24956 defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
24957 validOperators: [
24958 OPERATOR_IS,
24959 OPERATOR_IS_NOT,
24960 OPERATOR_CONTAINS,
24961 OPERATOR_NOT_CONTAINS,
24962 OPERATOR_STARTS_WITH,
24963 // Multiple selection
24964 OPERATOR_IS_ANY,
24965 OPERATOR_IS_NONE,
24966 OPERATOR_IS_NOT_ALL
24967 ],
24968 format: {},
24969 getValueFormatted: get_value_formatted_default_default,
24970 validate: {
24971 required: isValidRequired,
24972 pattern: isValidPattern,
24973 minLength: isValidMinLength,
24974 maxLength: isValidMaxLength,
24975 elements: isValidElements
24976 }
24977 };
24978
24979 // packages/dataviews/build-module/field-types/color.mjs
24980 var import_i18n23 = __toESM(require_i18n(), 1);
24981 var import_jsx_runtime92 = __toESM(require_jsx_runtime(), 1);
24982 function render3({ item, field }) {
24983 if (field.hasElements) {
24984 return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(RenderFromElements, { item, field });
24985 }
24986 const value = get_value_formatted_default_default({ item, field });
24987 if (!value || !A(value).isValid()) {
24988 return value;
24989 }
24990 return /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [
24991 /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
24992 "div",
24993 {
24994 style: {
24995 width: "16px",
24996 height: "16px",
24997 borderRadius: "50%",
24998 backgroundColor: value,
24999 border: "1px solid #ddd",
25000 flexShrink: 0
25001 }
25002 }
25003 ),
25004 /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { children: value })
25005 ] });
25006 }
25007 function isValidCustom6(item, field) {
25008 const value = field.getValue({ item });
25009 if (![void 0, "", null].includes(value) && !A(value).isValid()) {
25010 return (0, import_i18n23.__)("Value must be a valid color.");
25011 }
25012 return null;
25013 }
25014 var sort6 = (a, b, direction) => {
25015 const colorA = A(a);
25016 const colorB = A(b);
25017 if (!colorA.isValid() && !colorB.isValid()) {
25018 return 0;
25019 }
25020 if (!colorA.isValid()) {
25021 return direction === "asc" ? 1 : -1;
25022 }
25023 if (!colorB.isValid()) {
25024 return direction === "asc" ? -1 : 1;
25025 }
25026 const hslA = colorA.toHsl();
25027 const hslB = colorB.toHsl();
25028 if (hslA.h !== hslB.h) {
25029 return direction === "asc" ? hslA.h - hslB.h : hslB.h - hslA.h;
25030 }
25031 if (hslA.s !== hslB.s) {
25032 return direction === "asc" ? hslA.s - hslB.s : hslB.s - hslA.s;
25033 }
25034 return direction === "asc" ? hslA.l - hslB.l : hslB.l - hslA.l;
25035 };
25036 var color_default = {
25037 type: "color",
25038 render: render3,
25039 Edit: "color",
25040 sort: sort6,
25041 enableSorting: true,
25042 enableGlobalSearch: false,
25043 defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
25044 validOperators: [
25045 OPERATOR_IS,
25046 OPERATOR_IS_NOT,
25047 OPERATOR_IS_ANY,
25048 OPERATOR_IS_NONE
25049 ],
25050 format: {},
25051 getValueFormatted: get_value_formatted_default_default,
25052 validate: {
25053 required: isValidRequired,
25054 elements: isValidElements,
25055 custom: isValidCustom6
25056 }
25057 };
25058
25059 // packages/dataviews/build-module/field-types/url.mjs
25060 var url_default = {
25061 type: "url",
25062 render,
25063 Edit: "url",
25064 sort: sort_text_default,
25065 enableSorting: true,
25066 enableGlobalSearch: false,
25067 defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
25068 validOperators: [
25069 OPERATOR_IS,
25070 OPERATOR_IS_NOT,
25071 OPERATOR_CONTAINS,
25072 OPERATOR_NOT_CONTAINS,
25073 OPERATOR_STARTS_WITH,
25074 // Multiple selection
25075 OPERATOR_IS_ANY,
25076 OPERATOR_IS_NONE,
25077 OPERATOR_IS_NOT_ALL
25078 ],
25079 format: {},
25080 getValueFormatted: get_value_formatted_default_default,
25081 validate: {
25082 required: isValidRequired,
25083 pattern: isValidPattern,
25084 minLength: isValidMinLength,
25085 maxLength: isValidMaxLength,
25086 elements: isValidElements
25087 }
25088 };
25089
25090 // packages/dataviews/build-module/field-types/no-type.mjs
25091 var sort7 = (a, b, direction) => {
25092 if (typeof a === "number" && typeof b === "number") {
25093 return sort_number_default(a, b, direction);
25094 }
25095 return sort_text_default(a, b, direction);
25096 };
25097 var no_type_default = {
25098 // type: no type for this one
25099 render,
25100 Edit: null,
25101 sort: sort7,
25102 enableSorting: true,
25103 enableGlobalSearch: false,
25104 defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT],
25105 validOperators: getAllOperatorNames(),
25106 format: {},
25107 getValueFormatted: get_value_formatted_default_default,
25108 validate: {
25109 required: isValidRequired,
25110 elements: isValidElements
25111 }
25112 };
25113
25114 // packages/dataviews/build-module/field-types/utils/get-is-valid.mjs
25115 function supportsNumericRangeConstraint(type) {
25116 return type === "integer" || type === "number";
25117 }
25118 function supportsStringRangeConstraint(type) {
25119 return type === "date" || type === "datetime" || type === "time";
25120 }
25121 function normalizeRangeRule(value, fieldType, key) {
25122 const validator = fieldType.validate[key];
25123 if (validator && (typeof value === "number" && supportsNumericRangeConstraint(fieldType.type) || typeof value === "string" && supportsStringRangeConstraint(fieldType.type))) {
25124 return { constraint: value, validate: validator };
25125 }
25126 return void 0;
25127 }
25128 function getIsValid(field, fieldType) {
25129 const rules = field.isValid;
25130 let required;
25131 if (rules?.required === true && fieldType.validate.required !== void 0) {
25132 required = {
25133 constraint: true,
25134 validate: fieldType.validate.required
25135 };
25136 }
25137 let elements;
25138 if ((rules?.elements === true || // elements is enabled unless the field opts-out
25139 rules?.elements === void 0 && (!!field.elements || !!field.getElements)) && fieldType.validate.elements !== void 0) {
25140 elements = {
25141 constraint: true,
25142 validate: fieldType.validate.elements
25143 };
25144 }
25145 const min3 = normalizeRangeRule(rules?.min, fieldType, "min");
25146 const max3 = normalizeRangeRule(rules?.max, fieldType, "max");
25147 const minLengthValue = rules?.minLength;
25148 let minLength;
25149 if (typeof minLengthValue === "number" && fieldType.validate.minLength !== void 0) {
25150 minLength = {
25151 constraint: minLengthValue,
25152 validate: fieldType.validate.minLength
25153 };
25154 }
25155 const maxLengthValue = rules?.maxLength;
25156 let maxLength;
25157 if (typeof maxLengthValue === "number" && fieldType.validate.maxLength !== void 0) {
25158 maxLength = {
25159 constraint: maxLengthValue,
25160 validate: fieldType.validate.maxLength
25161 };
25162 }
25163 const patternValue = rules?.pattern;
25164 let pattern;
25165 if (patternValue !== void 0 && fieldType.validate.pattern !== void 0) {
25166 pattern = {
25167 constraint: patternValue,
25168 validate: fieldType.validate.pattern
25169 };
25170 }
25171 const custom = rules?.custom ?? fieldType.validate.custom;
25172 return {
25173 required,
25174 elements,
25175 min: min3,
25176 max: max3,
25177 minLength,
25178 maxLength,
25179 pattern,
25180 custom
25181 };
25182 }
25183
25184 // packages/dataviews/build-module/field-types/utils/get-filter.mjs
25185 function getFilter(fieldType) {
25186 return fieldType.validOperators.reduce((accumulator, operator) => {
25187 const operatorObj = getOperatorByName(operator);
25188 if (operatorObj?.filter) {
25189 accumulator[operator] = operatorObj.filter;
25190 }
25191 return accumulator;
25192 }, {});
25193 }
25194
25195 // packages/dataviews/build-module/field-types/utils/get-format.mjs
25196 function getFormat(field, fieldType) {
25197 return {
25198 ...fieldType.format,
25199 ...field.format
25200 };
25201 }
25202 var get_format_default = getFormat;
25203
25204 // packages/dataviews/build-module/field-types/index.mjs
25205 function getFieldTypeByName(type) {
25206 const found = [
25207 email_default,
25208 integer_default,
25209 number_default,
25210 text_default,
25211 datetime_default,
25212 date_default,
25213 time_default,
25214 boolean_default,
25215 media_default,
25216 array_default,
25217 password_default,
25218 telephone_default,
25219 color_default,
25220 url_default
25221 ].find((fieldType) => fieldType?.type === type);
25222 if (!!found) {
25223 return found;
25224 }
25225 return no_type_default;
25226 }
25227 function normalizeFields(fields) {
25228 return fields.map((field) => {
25229 const fieldType = getFieldTypeByName(field.type);
25230 const getValue = field.getValue || get_value_from_id_default(field.id);
25231 const sort8 = function(a, b, direction) {
25232 const aValue = getValue({ item: a });
25233 const bValue = getValue({ item: b });
25234 return field.sort ? field.sort(aValue, bValue, direction) : fieldType.sort(aValue, bValue, direction);
25235 };
25236 return {
25237 id: field.id,
25238 label: field.label || field.id,
25239 header: field.header || field.label || field.id,
25240 description: field.description,
25241 placeholder: field.placeholder,
25242 getValue,
25243 setValue: field.setValue || set_value_from_id_default(field.id),
25244 elements: field.elements,
25245 getElements: field.getElements,
25246 hasElements: hasElements(field),
25247 isVisible: field.isVisible,
25248 isDisabled: typeof field.isDisabled === "function" ? field.isDisabled : () => !!field.isDisabled,
25249 enableHiding: field.enableHiding ?? true,
25250 readOnly: field.readOnly ?? false,
25251 // The type provides defaults for the following props
25252 type: fieldType.type,
25253 render: field.render ?? fieldType.render,
25254 Edit: getControl(field, fieldType.Edit),
25255 sort: sort8,
25256 enableSorting: field.enableSorting ?? fieldType.enableSorting,
25257 enableGlobalSearch: field.enableGlobalSearch ?? fieldType.enableGlobalSearch,
25258 isValid: getIsValid(field, fieldType),
25259 filterBy: get_filter_by_default(
25260 field,
25261 fieldType.defaultOperators,
25262 fieldType.validOperators
25263 ),
25264 filter: getFilter(fieldType),
25265 format: get_format_default(field, fieldType),
25266 getValueFormatted: field.getValueFormatted ?? fieldType.getValueFormatted
25267 };
25268 });
25269 }
25270
25271 // packages/dataviews/build-module/utils/filter-sort-and-paginate.mjs
25272 var import_remove_accents = __toESM(require_remove_accents(), 1);
25273 var import_deprecated = __toESM(require_deprecated(), 1);
25274 function normalizeSearchInput(input = "") {
25275 return (0, import_remove_accents.default)(input.trim().toLowerCase());
25276 }
25277 var EMPTY_ARRAY3 = [];
25278 function filterSortAndPaginate(data, view, fields) {
25279 if (!data) {
25280 return {
25281 data: EMPTY_ARRAY3,
25282 paginationInfo: { totalItems: 0, totalPages: 0 }
25283 };
25284 }
25285 const _fields = normalizeFields(fields);
25286 let filteredData = [...data];
25287 if (view.search) {
25288 const normalizedSearch = normalizeSearchInput(view.search);
25289 filteredData = filteredData.filter((item) => {
25290 return _fields.filter((field) => field.enableGlobalSearch).some((field) => {
25291 const fieldValue = field.getValue({ item });
25292 const values = Array.isArray(fieldValue) ? fieldValue : [fieldValue];
25293 return values.some(
25294 (value) => normalizeSearchInput(String(value)).includes(
25295 normalizedSearch
25296 )
25297 );
25298 });
25299 });
25300 }
25301 if (view.filters && view.filters?.length > 0) {
25302 view.filters.forEach((filter) => {
25303 const field = _fields.find(
25304 (_field) => _field.id === filter.field
25305 );
25306 if (field) {
25307 if (filter.operator === OPERATOR_IS_NOT_ALL) {
25308 (0, import_deprecated.default)("The 'isNotAll' filter operator", {
25309 since: "7.0",
25310 alternative: "'isNone'"
25311 });
25312 }
25313 const handler = field.filter[filter.operator];
25314 if (handler) {
25315 filteredData = filteredData.filter(
25316 (item) => handler(item, field, filter.value)
25317 );
25318 }
25319 }
25320 });
25321 }
25322 const sortByField = view.sort?.field ? _fields.find((field) => {
25323 return field.enableSorting !== false && field.id === view.sort?.field;
25324 }) : null;
25325 const groupByField = view.groupBy?.field ? _fields.find((field) => {
25326 return field.enableSorting !== false && field.id === view.groupBy?.field;
25327 }) : null;
25328 if (sortByField || groupByField) {
25329 filteredData.sort((a, b) => {
25330 if (groupByField) {
25331 const groupCompare = groupByField.sort(
25332 a,
25333 b,
25334 view.groupBy?.direction ?? "asc"
25335 );
25336 if (groupCompare !== 0) {
25337 return groupCompare;
25338 }
25339 }
25340 if (sortByField) {
25341 return sortByField.sort(a, b, view.sort?.direction ?? "desc");
25342 }
25343 return 0;
25344 });
25345 }
25346 let totalItems = filteredData.length;
25347 let totalPages = 1;
25348 if (view.infiniteScrollEnabled && view.startPosition !== void 0 && view.perPage !== void 0) {
25349 const start = view.startPosition - 1;
25350 const end = Math.min(start + view.perPage, totalItems);
25351 filteredData = filteredData?.slice(start, end);
25352 } else if (view.page !== void 0 && view.perPage !== void 0) {
25353 const start = (view.page - 1) * view.perPage;
25354 totalItems = filteredData?.length || 0;
25355 totalPages = Math.ceil(totalItems / view.perPage);
25356 filteredData = filteredData?.slice(start, start + view.perPage);
25357 }
25358 return {
25359 data: filteredData,
25360 paginationInfo: {
25361 totalItems,
25362 totalPages
25363 }
25364 };
25365 }
25366
25367 // routes/template-list/route.ts
25368 var import_i18n24 = __toESM(require_i18n());
25369 import { notFound } from "@wordpress/route";
25370
25371 // packages/views/build-module/use-view.mjs
25372 var import_element74 = __toESM(require_element(), 1);
25373 var import_data = __toESM(require_data(), 1);
25374 var import_preferences = __toESM(require_preferences(), 1);
25375
25376 // packages/views/build-module/preference-keys.mjs
25377 function generatePreferenceKey(kind, name, slug) {
25378 return `dataviews-${kind}-${name}-${slug}`;
25379 }
25380
25381 // packages/views/build-module/resolve-view.mjs
25382 var QUERY_PARAMS = ["page", "search"];
25383 function isPlainObject(value) {
25384 return typeof value === "object" && value !== null && !Array.isArray(value);
25385 }
25386 function withoutQueryParams(layer) {
25387 const result = isPlainObject(layer) ? { ...layer } : {};
25388 for (const key of QUERY_PARAMS) {
25389 delete result[key];
25390 }
25391 return result;
25392 }
25393 function mergeLayer(lower, upper) {
25394 const result = { ...lower };
25395 for (const key of Object.keys(upper)) {
25396 const value = upper[key];
25397 const current = result[key];
25398 result[key] = isPlainObject(current) && isPlainObject(value) ? mergeLayer(current, value) : value;
25399 }
25400 return result;
25401 }
25402 function getLockedFilters(overrides) {
25403 return (overrides?.filters ?? []).filter((filter) => filter.isLocked);
25404 }
25405 function applyLockedFilters(view, overrides) {
25406 const locked = getLockedFilters(overrides);
25407 if (locked.length === 0) {
25408 return view;
25409 }
25410 const rest = (view.filters ?? []).filter(
25411 (filter) => !locked.some((f) => f.field === filter.field)
25412 );
25413 return { ...view, filters: [...locked, ...rest] };
25414 }
25415 function getApplicablePersistedView(persistedView, defaultLayouts) {
25416 if (!persistedView || persistedView.type === void 0 || !defaultLayouts || defaultLayouts[persistedView.type]) {
25417 return persistedView;
25418 }
25419 const { type, ...rest } = persistedView;
25420 return Object.keys(rest).length > 0 ? rest : void 0;
25421 }
25422 function resolveBaseView(layers, effectiveType) {
25423 const { defaultView, defaultLayouts, activeViewOverrides } = layers;
25424 const layoutDefaults = defaultLayouts?.[effectiveType];
25425 return applyLockedFilters(
25426 [layoutDefaults, activeViewOverrides].reduce(
25427 (lower, upper) => mergeLayer(lower, withoutQueryParams(upper)),
25428 withoutQueryParams(defaultView)
25429 ),
25430 activeViewOverrides
25431 );
25432 }
25433 function resolveView(args) {
25434 const { defaultView, defaultLayouts, activeViewOverrides, page, search } = args;
25435 const persistedView = getApplicablePersistedView(
25436 args.persistedView,
25437 defaultLayouts
25438 );
25439 const effectiveType = persistedView?.type ?? activeViewOverrides?.type ?? defaultView?.type;
25440 const baseView = resolveBaseView(args, effectiveType);
25441 const view = {
25442 ...applyLockedFilters(
25443 mergeLayer(baseView, withoutQueryParams(persistedView)),
25444 activeViewOverrides
25445 ),
25446 page: Number(page ?? 1),
25447 search: search ?? ""
25448 };
25449 return view;
25450 }
25451
25452 // packages/views/build-module/load-view.mjs
25453 var import_data2 = __toESM(require_data(), 1);
25454 var import_preferences2 = __toESM(require_preferences(), 1);
25455 async function loadView(config) {
25456 const {
25457 kind,
25458 name,
25459 slug,
25460 defaultView,
25461 defaultLayouts,
25462 activeViewOverrides,
25463 queryParams
25464 } = config;
25465 const preferenceKey = generatePreferenceKey(kind, name, slug);
25466 const persistedView = (0, import_data2.select)(
25467 import_preferences2.store
25468 ).get("core/views", preferenceKey);
25469 return resolveView({
25470 defaultView,
25471 defaultLayouts,
25472 activeViewOverrides,
25473 persistedView,
25474 page: queryParams?.page,
25475 search: queryParams?.search
25476 });
25477 }
25478
25479 // packages/views/build-module/use-view-config.mjs
25480 var import_data3 = __toESM(require_data(), 1);
25481 var import_core_data = __toESM(require_core_data(), 1);
25482
25483 // packages/views/build-module/lock-unlock.mjs
25484 var import_private_apis2 = __toESM(require_private_apis(), 1);
25485 var { lock: lock2, unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(
25486 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
25487 "@wordpress/views"
25488 );
25489
25490 // routes/template-list/view-utils.ts
25491 var import_data4 = __toESM(require_data());
25492 var import_core_data2 = __toESM(require_core_data());
25493 var import_editor = __toESM(require_editor());
25494
25495 // routes/lock-unlock/index.ts
25496 var import_private_apis3 = __toESM(require_private_apis());
25497 var { lock: lock3, unlock: unlock3 } = (0, import_private_apis3.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(
25498 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
25499 "@wordpress/routes"
25500 );
25501
25502 // routes/template-list/view-utils.ts
25503 var TEMPLATE_POST_TYPE = "wp_template";
25504 async function loadTemplateViewConfig() {
25505 const config = await unlock3((0, import_data4.resolveSelect)(import_core_data2.store)).getViewConfig(
25506 "postType",
25507 TEMPLATE_POST_TYPE
25508 );
25509 return {
25510 default_view: config?.default_view,
25511 default_layouts: config?.default_layouts,
25512 view_list: config?.view_list
25513 };
25514 }
25515 async function ensureView(activeView, search) {
25516 const {
25517 default_view: defaultView,
25518 default_layouts: defaultLayouts,
25519 view_list: viewList
25520 } = await loadTemplateViewConfig();
25521 const slug = activeView ?? "all";
25522 if (!defaultView) {
25523 throw new Error(
25524 `Missing view configuration for the ${TEMPLATE_POST_TYPE} post type.`
25525 );
25526 }
25527 return loadView({
25528 kind: "postType",
25529 name: TEMPLATE_POST_TYPE,
25530 slug: "default-new",
25531 defaultView,
25532 defaultLayouts,
25533 activeViewOverrides: viewList?.find((v2) => v2.slug === slug)?.view ?? {},
25534 queryParams: search
25535 });
25536 }
25537 async function loadTemplateFields() {
25538 await unlock3((0, import_data4.dispatch)(import_editor.store)).registerPostTypeSchema(
25539 TEMPLATE_POST_TYPE
25540 );
25541 return unlock3((0, import_data4.select)(import_editor.store)).getEntityFields(
25542 "postType",
25543 TEMPLATE_POST_TYPE
25544 );
25545 }
25546
25547 // routes/template-list/route.ts
25548 var route = {
25549 async beforeLoad() {
25550 const theme2 = await (0, import_data5.resolveSelect)(import_core_data3.store).getCurrentTheme();
25551 if (!theme2?.theme_supports?.["block-templates"]) {
25552 throw notFound();
25553 }
25554 },
25555 title: () => (0, import_i18n24.__)("Templates"),
25556 async canvas(context) {
25557 const { params, search } = context;
25558 const view = await ensureView(params.activeView, {
25559 page: search.page,
25560 search: search.search
25561 });
25562 if (view.type !== "list") {
25563 return void 0;
25564 }
25565 if (search.postIds && search.postIds.length > 0) {
25566 const postId = search.postIds[0].toString();
25567 return {
25568 postType: "wp_template",
25569 postId,
25570 isPreview: true
25571 };
25572 }
25573 const [templates, fields] = await Promise.all([
25574 (0, import_data5.resolveSelect)(import_core_data3.store).getEntityRecords(
25575 "postType",
25576 "wp_template",
25577 { per_page: -1 }
25578 ),
25579 loadTemplateFields()
25580 ]);
25581 const template = filterSortAndPaginate(templates ?? [], view, fields).data[0];
25582 if (template) {
25583 return {
25584 postType: "wp_template",
25585 postId: template.id.toString(),
25586 isPreview: true
25587 };
25588 }
25589 return void 0;
25590 }
25591 };
25592 export {
25593 route
25594 };
25595 /*! Bundled license information:
25596
25597 use-sync-external-store/cjs/use-sync-external-store-shim.development.js:
25598 (**
25599 * @license React
25600 * use-sync-external-store-shim.development.js
25601 *
25602 * Copyright (c) Meta Platforms, Inc. and affiliates.
25603 *
25604 * This source code is licensed under the MIT license found in the
25605 * LICENSE file in the root directory of this source tree.
25606 *)
25607
25608 use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js:
25609 (**
25610 * @license React
25611 * use-sync-external-store-shim/with-selector.development.js
25612 *
25613 * Copyright (c) Meta Platforms, Inc. and affiliates.
25614 *
25615 * This source code is licensed under the MIT license found in the
25616 * LICENSE file in the root directory of this source tree.
25617 *)
25618 */
25619