PluginProbe
Gutenberg / 22.3.0
Gutenberg v22.3.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 12.6.0 7.4.0 All 402 releases
gutenberg / build / scripts / media-utils / index.js

index.js in Gutenberg 22.3.0, at build/scripts/media-utils/index.js

16,844 lines 596.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 "use strict";
2 var wp;
3 (wp ||= {}).mediaUtils = (() => {
4 var __create = Object.create;
5 var __defProp = Object.defineProperty;
6 var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7 var __getOwnPropNames = Object.getOwnPropertyNames;
8 var __getProtoOf = Object.getPrototypeOf;
9 var __hasOwnProp = Object.prototype.hasOwnProperty;
10 var __commonJS = (cb, mod) => function __require() {
11 return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
12 };
13 var __export = (target, all) => {
14 for (var name in all)
15 __defProp(target, name, { get: all[name], enumerable: true });
16 };
17 var __copyProps = (to, from, except, desc) => {
18 if (from && typeof from === "object" || typeof from === "function") {
19 for (let key of __getOwnPropNames(from))
20 if (!__hasOwnProp.call(to, key) && key !== except)
21 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
22 }
23 return to;
24 };
25 var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
26 // If the importer is in node compatibility mode or this is not an ESM
27 // file that has been converted to a CommonJS file using a Babel-
28 // compatible transform (i.e. "__esModule" has not been set), then set
29 // "default" to the CommonJS "module.exports" for node compatibility.
30 isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
31 mod
32 ));
33 var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
34
35 // package-external:@wordpress/element
36 var require_element = __commonJS({
37 "package-external:@wordpress/element"(exports, module) {
38 module.exports = window.wp.element;
39 }
40 });
41
42 // package-external:@wordpress/i18n
43 var require_i18n = __commonJS({
44 "package-external:@wordpress/i18n"(exports, module) {
45 module.exports = window.wp.i18n;
46 }
47 });
48
49 // package-external:@wordpress/blob
50 var require_blob = __commonJS({
51 "package-external:@wordpress/blob"(exports, module) {
52 module.exports = window.wp.blob;
53 }
54 });
55
56 // package-external:@wordpress/api-fetch
57 var require_api_fetch = __commonJS({
58 "package-external:@wordpress/api-fetch"(exports, module) {
59 module.exports = window.wp.apiFetch;
60 }
61 });
62
63 // package-external:@wordpress/core-data
64 var require_core_data = __commonJS({
65 "package-external:@wordpress/core-data"(exports, module) {
66 module.exports = window.wp.coreData;
67 }
68 });
69
70 // package-external:@wordpress/data
71 var require_data = __commonJS({
72 "package-external:@wordpress/data"(exports, module) {
73 module.exports = window.wp.data;
74 }
75 });
76
77 // package-external:@wordpress/components
78 var require_components = __commonJS({
79 "package-external:@wordpress/components"(exports, module) {
80 module.exports = window.wp.components;
81 }
82 });
83
84 // package-external:@wordpress/primitives
85 var require_primitives = __commonJS({
86 "package-external:@wordpress/primitives"(exports, module) {
87 module.exports = window.wp.primitives;
88 }
89 });
90
91 // vendor-external:react/jsx-runtime
92 var require_jsx_runtime = __commonJS({
93 "vendor-external:react/jsx-runtime"(exports, module) {
94 module.exports = window.ReactJSXRuntime;
95 }
96 });
97
98 // package-external:@wordpress/compose
99 var require_compose = __commonJS({
100 "package-external:@wordpress/compose"(exports, module) {
101 module.exports = window.wp.compose;
102 }
103 });
104
105 // package-external:@wordpress/keycodes
106 var require_keycodes = __commonJS({
107 "package-external:@wordpress/keycodes"(exports, module) {
108 module.exports = window.wp.keycodes;
109 }
110 });
111
112 // package-external:@wordpress/private-apis
113 var require_private_apis = __commonJS({
114 "package-external:@wordpress/private-apis"(exports, module) {
115 module.exports = window.wp.privateApis;
116 }
117 });
118
119 // vendor-external:react
120 var require_react = __commonJS({
121 "vendor-external:react"(exports, module) {
122 module.exports = window.React;
123 }
124 });
125
126 // package-external:@wordpress/date
127 var require_date = __commonJS({
128 "package-external:@wordpress/date"(exports, module) {
129 module.exports = window.wp.date;
130 }
131 });
132
133 // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js
134 var require_use_sync_external_store_shim_development = __commonJS({
135 "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(exports) {
136 "use strict";
137 (function() {
138 function is(x2, y2) {
139 return x2 === y2 && (0 !== x2 || 1 / x2 === 1 / y2) || x2 !== x2 && y2 !== y2;
140 }
141 function useSyncExternalStore$2(subscribe2, getSnapshot) {
142 didWarnOld18Alpha || void 0 === React4.startTransition || (didWarnOld18Alpha = true, console.error(
143 "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."
144 ));
145 var value = getSnapshot();
146 if (!didWarnUncachedGetSnapshot) {
147 var cachedValue = getSnapshot();
148 objectIs(value, cachedValue) || (console.error(
149 "The result of getSnapshot should be cached to avoid an infinite loop"
150 ), didWarnUncachedGetSnapshot = true);
151 }
152 cachedValue = useState23({
153 inst: { value, getSnapshot }
154 });
155 var inst = cachedValue[0].inst, forceUpdate = cachedValue[1];
156 useLayoutEffect2(
157 function() {
158 inst.value = value;
159 inst.getSnapshot = getSnapshot;
160 checkIfSnapshotChanged(inst) && forceUpdate({ inst });
161 },
162 [subscribe2, value, getSnapshot]
163 );
164 useEffect17(
165 function() {
166 checkIfSnapshotChanged(inst) && forceUpdate({ inst });
167 return subscribe2(function() {
168 checkIfSnapshotChanged(inst) && forceUpdate({ inst });
169 });
170 },
171 [subscribe2]
172 );
173 useDebugValue(value);
174 return value;
175 }
176 function checkIfSnapshotChanged(inst) {
177 var latestGetSnapshot = inst.getSnapshot;
178 inst = inst.value;
179 try {
180 var nextValue = latestGetSnapshot();
181 return !objectIs(inst, nextValue);
182 } catch (error) {
183 return true;
184 }
185 }
186 function useSyncExternalStore$1(subscribe2, getSnapshot) {
187 return getSnapshot();
188 }
189 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
190 var React4 = require_react(), objectIs = "function" === typeof Object.is ? Object.is : is, useState23 = React4.useState, useEffect17 = React4.useEffect, useLayoutEffect2 = React4.useLayoutEffect, useDebugValue = React4.useDebugValue, didWarnOld18Alpha = false, didWarnUncachedGetSnapshot = false, shim = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2;
191 exports.useSyncExternalStore = void 0 !== React4.useSyncExternalStore ? React4.useSyncExternalStore : shim;
192 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
193 })();
194 }
195 });
196
197 // node_modules/use-sync-external-store/shim/index.js
198 var require_shim = __commonJS({
199 "node_modules/use-sync-external-store/shim/index.js"(exports, module) {
200 "use strict";
201 if (false) {
202 module.exports = null;
203 } else {
204 module.exports = require_use_sync_external_store_shim_development();
205 }
206 }
207 });
208
209 // vendor-external:react-dom
210 var require_react_dom = __commonJS({
211 "vendor-external:react-dom"(exports, module) {
212 module.exports = window.ReactDOM;
213 }
214 });
215
216 // node_modules/remove-accents/index.js
217 var require_remove_accents = __commonJS({
218 "node_modules/remove-accents/index.js"(exports, module) {
219 var characterMap = {
220 "\xC0": "A",
221 "\xC1": "A",
222 "\xC2": "A",
223 "\xC3": "A",
224 "\xC4": "A",
225 "\xC5": "A",
226 "\u1EA4": "A",
227 "\u1EAE": "A",
228 "\u1EB2": "A",
229 "\u1EB4": "A",
230 "\u1EB6": "A",
231 "\xC6": "AE",
232 "\u1EA6": "A",
233 "\u1EB0": "A",
234 "\u0202": "A",
235 "\u1EA2": "A",
236 "\u1EA0": "A",
237 "\u1EA8": "A",
238 "\u1EAA": "A",
239 "\u1EAC": "A",
240 "\xC7": "C",
241 "\u1E08": "C",
242 "\xC8": "E",
243 "\xC9": "E",
244 "\xCA": "E",
245 "\xCB": "E",
246 "\u1EBE": "E",
247 "\u1E16": "E",
248 "\u1EC0": "E",
249 "\u1E14": "E",
250 "\u1E1C": "E",
251 "\u0206": "E",
252 "\u1EBA": "E",
253 "\u1EBC": "E",
254 "\u1EB8": "E",
255 "\u1EC2": "E",
256 "\u1EC4": "E",
257 "\u1EC6": "E",
258 "\xCC": "I",
259 "\xCD": "I",
260 "\xCE": "I",
261 "\xCF": "I",
262 "\u1E2E": "I",
263 "\u020A": "I",
264 "\u1EC8": "I",
265 "\u1ECA": "I",
266 "\xD0": "D",
267 "\xD1": "N",
268 "\xD2": "O",
269 "\xD3": "O",
270 "\xD4": "O",
271 "\xD5": "O",
272 "\xD6": "O",
273 "\xD8": "O",
274 "\u1ED0": "O",
275 "\u1E4C": "O",
276 "\u1E52": "O",
277 "\u020E": "O",
278 "\u1ECE": "O",
279 "\u1ECC": "O",
280 "\u1ED4": "O",
281 "\u1ED6": "O",
282 "\u1ED8": "O",
283 "\u1EDC": "O",
284 "\u1EDE": "O",
285 "\u1EE0": "O",
286 "\u1EDA": "O",
287 "\u1EE2": "O",
288 "\xD9": "U",
289 "\xDA": "U",
290 "\xDB": "U",
291 "\xDC": "U",
292 "\u1EE6": "U",
293 "\u1EE4": "U",
294 "\u1EEC": "U",
295 "\u1EEE": "U",
296 "\u1EF0": "U",
297 "\xDD": "Y",
298 "\xE0": "a",
299 "\xE1": "a",
300 "\xE2": "a",
301 "\xE3": "a",
302 "\xE4": "a",
303 "\xE5": "a",
304 "\u1EA5": "a",
305 "\u1EAF": "a",
306 "\u1EB3": "a",
307 "\u1EB5": "a",
308 "\u1EB7": "a",
309 "\xE6": "ae",
310 "\u1EA7": "a",
311 "\u1EB1": "a",
312 "\u0203": "a",
313 "\u1EA3": "a",
314 "\u1EA1": "a",
315 "\u1EA9": "a",
316 "\u1EAB": "a",
317 "\u1EAD": "a",
318 "\xE7": "c",
319 "\u1E09": "c",
320 "\xE8": "e",
321 "\xE9": "e",
322 "\xEA": "e",
323 "\xEB": "e",
324 "\u1EBF": "e",
325 "\u1E17": "e",
326 "\u1EC1": "e",
327 "\u1E15": "e",
328 "\u1E1D": "e",
329 "\u0207": "e",
330 "\u1EBB": "e",
331 "\u1EBD": "e",
332 "\u1EB9": "e",
333 "\u1EC3": "e",
334 "\u1EC5": "e",
335 "\u1EC7": "e",
336 "\xEC": "i",
337 "\xED": "i",
338 "\xEE": "i",
339 "\xEF": "i",
340 "\u1E2F": "i",
341 "\u020B": "i",
342 "\u1EC9": "i",
343 "\u1ECB": "i",
344 "\xF0": "d",
345 "\xF1": "n",
346 "\xF2": "o",
347 "\xF3": "o",
348 "\xF4": "o",
349 "\xF5": "o",
350 "\xF6": "o",
351 "\xF8": "o",
352 "\u1ED1": "o",
353 "\u1E4D": "o",
354 "\u1E53": "o",
355 "\u020F": "o",
356 "\u1ECF": "o",
357 "\u1ECD": "o",
358 "\u1ED5": "o",
359 "\u1ED7": "o",
360 "\u1ED9": "o",
361 "\u1EDD": "o",
362 "\u1EDF": "o",
363 "\u1EE1": "o",
364 "\u1EDB": "o",
365 "\u1EE3": "o",
366 "\xF9": "u",
367 "\xFA": "u",
368 "\xFB": "u",
369 "\xFC": "u",
370 "\u1EE7": "u",
371 "\u1EE5": "u",
372 "\u1EED": "u",
373 "\u1EEF": "u",
374 "\u1EF1": "u",
375 "\xFD": "y",
376 "\xFF": "y",
377 "\u0100": "A",
378 "\u0101": "a",
379 "\u0102": "A",
380 "\u0103": "a",
381 "\u0104": "A",
382 "\u0105": "a",
383 "\u0106": "C",
384 "\u0107": "c",
385 "\u0108": "C",
386 "\u0109": "c",
387 "\u010A": "C",
388 "\u010B": "c",
389 "\u010C": "C",
390 "\u010D": "c",
391 "C\u0306": "C",
392 "c\u0306": "c",
393 "\u010E": "D",
394 "\u010F": "d",
395 "\u0110": "D",
396 "\u0111": "d",
397 "\u0112": "E",
398 "\u0113": "e",
399 "\u0114": "E",
400 "\u0115": "e",
401 "\u0116": "E",
402 "\u0117": "e",
403 "\u0118": "E",
404 "\u0119": "e",
405 "\u011A": "E",
406 "\u011B": "e",
407 "\u011C": "G",
408 "\u01F4": "G",
409 "\u011D": "g",
410 "\u01F5": "g",
411 "\u011E": "G",
412 "\u011F": "g",
413 "\u0120": "G",
414 "\u0121": "g",
415 "\u0122": "G",
416 "\u0123": "g",
417 "\u0124": "H",
418 "\u0125": "h",
419 "\u0126": "H",
420 "\u0127": "h",
421 "\u1E2A": "H",
422 "\u1E2B": "h",
423 "\u0128": "I",
424 "\u0129": "i",
425 "\u012A": "I",
426 "\u012B": "i",
427 "\u012C": "I",
428 "\u012D": "i",
429 "\u012E": "I",
430 "\u012F": "i",
431 "\u0130": "I",
432 "\u0131": "i",
433 "\u0132": "IJ",
434 "\u0133": "ij",
435 "\u0134": "J",
436 "\u0135": "j",
437 "\u0136": "K",
438 "\u0137": "k",
439 "\u1E30": "K",
440 "\u1E31": "k",
441 "K\u0306": "K",
442 "k\u0306": "k",
443 "\u0139": "L",
444 "\u013A": "l",
445 "\u013B": "L",
446 "\u013C": "l",
447 "\u013D": "L",
448 "\u013E": "l",
449 "\u013F": "L",
450 "\u0140": "l",
451 "\u0141": "l",
452 "\u0142": "l",
453 "\u1E3E": "M",
454 "\u1E3F": "m",
455 "M\u0306": "M",
456 "m\u0306": "m",
457 "\u0143": "N",
458 "\u0144": "n",
459 "\u0145": "N",
460 "\u0146": "n",
461 "\u0147": "N",
462 "\u0148": "n",
463 "\u0149": "n",
464 "N\u0306": "N",
465 "n\u0306": "n",
466 "\u014C": "O",
467 "\u014D": "o",
468 "\u014E": "O",
469 "\u014F": "o",
470 "\u0150": "O",
471 "\u0151": "o",
472 "\u0152": "OE",
473 "\u0153": "oe",
474 "P\u0306": "P",
475 "p\u0306": "p",
476 "\u0154": "R",
477 "\u0155": "r",
478 "\u0156": "R",
479 "\u0157": "r",
480 "\u0158": "R",
481 "\u0159": "r",
482 "R\u0306": "R",
483 "r\u0306": "r",
484 "\u0212": "R",
485 "\u0213": "r",
486 "\u015A": "S",
487 "\u015B": "s",
488 "\u015C": "S",
489 "\u015D": "s",
490 "\u015E": "S",
491 "\u0218": "S",
492 "\u0219": "s",
493 "\u015F": "s",
494 "\u0160": "S",
495 "\u0161": "s",
496 "\u0162": "T",
497 "\u0163": "t",
498 "\u021B": "t",
499 "\u021A": "T",
500 "\u0164": "T",
501 "\u0165": "t",
502 "\u0166": "T",
503 "\u0167": "t",
504 "T\u0306": "T",
505 "t\u0306": "t",
506 "\u0168": "U",
507 "\u0169": "u",
508 "\u016A": "U",
509 "\u016B": "u",
510 "\u016C": "U",
511 "\u016D": "u",
512 "\u016E": "U",
513 "\u016F": "u",
514 "\u0170": "U",
515 "\u0171": "u",
516 "\u0172": "U",
517 "\u0173": "u",
518 "\u0216": "U",
519 "\u0217": "u",
520 "V\u0306": "V",
521 "v\u0306": "v",
522 "\u0174": "W",
523 "\u0175": "w",
524 "\u1E82": "W",
525 "\u1E83": "w",
526 "X\u0306": "X",
527 "x\u0306": "x",
528 "\u0176": "Y",
529 "\u0177": "y",
530 "\u0178": "Y",
531 "Y\u0306": "Y",
532 "y\u0306": "y",
533 "\u0179": "Z",
534 "\u017A": "z",
535 "\u017B": "Z",
536 "\u017C": "z",
537 "\u017D": "Z",
538 "\u017E": "z",
539 "\u017F": "s",
540 "\u0192": "f",
541 "\u01A0": "O",
542 "\u01A1": "o",
543 "\u01AF": "U",
544 "\u01B0": "u",
545 "\u01CD": "A",
546 "\u01CE": "a",
547 "\u01CF": "I",
548 "\u01D0": "i",
549 "\u01D1": "O",
550 "\u01D2": "o",
551 "\u01D3": "U",
552 "\u01D4": "u",
553 "\u01D5": "U",
554 "\u01D6": "u",
555 "\u01D7": "U",
556 "\u01D8": "u",
557 "\u01D9": "U",
558 "\u01DA": "u",
559 "\u01DB": "U",
560 "\u01DC": "u",
561 "\u1EE8": "U",
562 "\u1EE9": "u",
563 "\u1E78": "U",
564 "\u1E79": "u",
565 "\u01FA": "A",
566 "\u01FB": "a",
567 "\u01FC": "AE",
568 "\u01FD": "ae",
569 "\u01FE": "O",
570 "\u01FF": "o",
571 "\xDE": "TH",
572 "\xFE": "th",
573 "\u1E54": "P",
574 "\u1E55": "p",
575 "\u1E64": "S",
576 "\u1E65": "s",
577 "X\u0301": "X",
578 "x\u0301": "x",
579 "\u0403": "\u0413",
580 "\u0453": "\u0433",
581 "\u040C": "\u041A",
582 "\u045C": "\u043A",
583 "A\u030B": "A",
584 "a\u030B": "a",
585 "E\u030B": "E",
586 "e\u030B": "e",
587 "I\u030B": "I",
588 "i\u030B": "i",
589 "\u01F8": "N",
590 "\u01F9": "n",
591 "\u1ED2": "O",
592 "\u1ED3": "o",
593 "\u1E50": "O",
594 "\u1E51": "o",
595 "\u1EEA": "U",
596 "\u1EEB": "u",
597 "\u1E80": "W",
598 "\u1E81": "w",
599 "\u1EF2": "Y",
600 "\u1EF3": "y",
601 "\u0200": "A",
602 "\u0201": "a",
603 "\u0204": "E",
604 "\u0205": "e",
605 "\u0208": "I",
606 "\u0209": "i",
607 "\u020C": "O",
608 "\u020D": "o",
609 "\u0210": "R",
610 "\u0211": "r",
611 "\u0214": "U",
612 "\u0215": "u",
613 "B\u030C": "B",
614 "b\u030C": "b",
615 "\u010C\u0323": "C",
616 "\u010D\u0323": "c",
617 "\xCA\u030C": "E",
618 "\xEA\u030C": "e",
619 "F\u030C": "F",
620 "f\u030C": "f",
621 "\u01E6": "G",
622 "\u01E7": "g",
623 "\u021E": "H",
624 "\u021F": "h",
625 "J\u030C": "J",
626 "\u01F0": "j",
627 "\u01E8": "K",
628 "\u01E9": "k",
629 "M\u030C": "M",
630 "m\u030C": "m",
631 "P\u030C": "P",
632 "p\u030C": "p",
633 "Q\u030C": "Q",
634 "q\u030C": "q",
635 "\u0158\u0329": "R",
636 "\u0159\u0329": "r",
637 "\u1E66": "S",
638 "\u1E67": "s",
639 "V\u030C": "V",
640 "v\u030C": "v",
641 "W\u030C": "W",
642 "w\u030C": "w",
643 "X\u030C": "X",
644 "x\u030C": "x",
645 "Y\u030C": "Y",
646 "y\u030C": "y",
647 "A\u0327": "A",
648 "a\u0327": "a",
649 "B\u0327": "B",
650 "b\u0327": "b",
651 "\u1E10": "D",
652 "\u1E11": "d",
653 "\u0228": "E",
654 "\u0229": "e",
655 "\u0190\u0327": "E",
656 "\u025B\u0327": "e",
657 "\u1E28": "H",
658 "\u1E29": "h",
659 "I\u0327": "I",
660 "i\u0327": "i",
661 "\u0197\u0327": "I",
662 "\u0268\u0327": "i",
663 "M\u0327": "M",
664 "m\u0327": "m",
665 "O\u0327": "O",
666 "o\u0327": "o",
667 "Q\u0327": "Q",
668 "q\u0327": "q",
669 "U\u0327": "U",
670 "u\u0327": "u",
671 "X\u0327": "X",
672 "x\u0327": "x",
673 "Z\u0327": "Z",
674 "z\u0327": "z",
675 "\u0439": "\u0438",
676 "\u0419": "\u0418",
677 "\u0451": "\u0435",
678 "\u0401": "\u0415"
679 };
680 var chars = Object.keys(characterMap).join("|");
681 var allAccents = new RegExp(chars, "g");
682 var firstAccent = new RegExp(chars, "");
683 function matcher(match2) {
684 return characterMap[match2];
685 }
686 var removeAccents2 = function(string) {
687 return string.replace(allAccents, matcher);
688 };
689 var hasAccents = function(string) {
690 return !!string.match(firstAccent);
691 };
692 module.exports = removeAccents2;
693 module.exports.has = hasAccents;
694 module.exports.remove = removeAccents2;
695 }
696 });
697
698 // node_modules/fast-deep-equal/es6/index.js
699 var require_es6 = __commonJS({
700 "node_modules/fast-deep-equal/es6/index.js"(exports, module) {
701 "use strict";
702 module.exports = function equal(a2, b2) {
703 if (a2 === b2) return true;
704 if (a2 && b2 && typeof a2 == "object" && typeof b2 == "object") {
705 if (a2.constructor !== b2.constructor) return false;
706 var length, i2, keys;
707 if (Array.isArray(a2)) {
708 length = a2.length;
709 if (length != b2.length) return false;
710 for (i2 = length; i2-- !== 0; )
711 if (!equal(a2[i2], b2[i2])) return false;
712 return true;
713 }
714 if (a2 instanceof Map && b2 instanceof Map) {
715 if (a2.size !== b2.size) return false;
716 for (i2 of a2.entries())
717 if (!b2.has(i2[0])) return false;
718 for (i2 of a2.entries())
719 if (!equal(i2[1], b2.get(i2[0]))) return false;
720 return true;
721 }
722 if (a2 instanceof Set && b2 instanceof Set) {
723 if (a2.size !== b2.size) return false;
724 for (i2 of a2.entries())
725 if (!b2.has(i2[0])) return false;
726 return true;
727 }
728 if (ArrayBuffer.isView(a2) && ArrayBuffer.isView(b2)) {
729 length = a2.length;
730 if (length != b2.length) return false;
731 for (i2 = length; i2-- !== 0; )
732 if (a2[i2] !== b2[i2]) return false;
733 return true;
734 }
735 if (a2.constructor === RegExp) return a2.source === b2.source && a2.flags === b2.flags;
736 if (a2.valueOf !== Object.prototype.valueOf) return a2.valueOf() === b2.valueOf();
737 if (a2.toString !== Object.prototype.toString) return a2.toString() === b2.toString();
738 keys = Object.keys(a2);
739 length = keys.length;
740 if (length !== Object.keys(b2).length) return false;
741 for (i2 = length; i2-- !== 0; )
742 if (!Object.prototype.hasOwnProperty.call(b2, keys[i2])) return false;
743 for (i2 = length; i2-- !== 0; ) {
744 var key = keys[i2];
745 if (!equal(a2[key], b2[key])) return false;
746 }
747 return true;
748 }
749 return a2 !== a2 && b2 !== b2;
750 };
751 }
752 });
753
754 // package-external:@wordpress/warning
755 var require_warning = __commonJS({
756 "package-external:@wordpress/warning"(exports, module) {
757 module.exports = window.wp.warning;
758 }
759 });
760
761 // package-external:@wordpress/url
762 var require_url = __commonJS({
763 "package-external:@wordpress/url"(exports, module) {
764 module.exports = window.wp.url;
765 }
766 });
767
768 // packages/media-utils/build-module/index.js
769 var index_exports = {};
770 __export(index_exports, {
771 MediaUpload: () => media_upload_default,
772 privateApis: () => privateApis11,
773 transformAttachment: () => transformAttachment,
774 uploadMedia: () => uploadMedia,
775 validateFileSize: () => validateFileSize,
776 validateMimeType: () => validateMimeType,
777 validateMimeTypeForUser: () => validateMimeTypeForUser
778 });
779
780 // packages/media-utils/build-module/components/media-upload/index.js
781 var import_element = __toESM(require_element());
782 var import_i18n = __toESM(require_i18n());
783 var DEFAULT_EMPTY_GALLERY = [];
784 var getFeaturedImageMediaFrame = () => {
785 const { wp } = window;
786 return wp.media.view.MediaFrame.Select.extend({
787 /**
788 * Enables the Set Featured Image Button.
789 *
790 * @param {Object} toolbar toolbar for featured image state
791 * @return {void}
792 */
793 featuredImageToolbar(toolbar) {
794 this.createSelectToolbar(toolbar, {
795 text: wp.media.view.l10n.setFeaturedImage,
796 state: this.options.state
797 });
798 },
799 /**
800 * Handle the edit state requirements of selected media item.
801 *
802 * @return {void}
803 */
804 editState() {
805 const selection = this.state("featured-image").get("selection");
806 const view = new wp.media.view.EditImage({
807 model: selection.single(),
808 controller: this
809 }).render();
810 this.content.set(view);
811 view.loadEditor();
812 },
813 /**
814 * Create the default states.
815 *
816 * @return {void}
817 */
818 createStates: function createStates() {
819 this.on(
820 "toolbar:create:featured-image",
821 this.featuredImageToolbar,
822 this
823 );
824 this.on("content:render:edit-image", this.editState, this);
825 this.states.add([
826 new wp.media.controller.FeaturedImage(),
827 new wp.media.controller.EditImage({
828 model: this.options.editImage
829 })
830 ]);
831 }
832 });
833 };
834 var getSingleMediaFrame = () => {
835 const { wp } = window;
836 return wp.media.view.MediaFrame.Select.extend({
837 /**
838 * Create the default states on the frame.
839 */
840 createStates() {
841 const options = this.options;
842 if (this.options.states) {
843 return;
844 }
845 this.states.add([
846 // Main states.
847 new wp.media.controller.Library({
848 library: wp.media.query(options.library),
849 multiple: options.multiple,
850 title: options.title,
851 priority: 20,
852 filterable: "uploaded"
853 // Allow filtering by uploaded images.
854 }),
855 new wp.media.controller.EditImage({
856 model: options.editImage
857 })
858 ]);
859 }
860 });
861 };
862 var getGalleryDetailsMediaFrame = () => {
863 const { wp } = window;
864 return wp.media.view.MediaFrame.Post.extend({
865 /**
866 * Set up gallery toolbar.
867 *
868 * @return {void}
869 */
870 galleryToolbar() {
871 const editing = this.state().get("editing");
872 this.toolbar.set(
873 new wp.media.view.Toolbar({
874 controller: this,
875 items: {
876 insert: {
877 style: "primary",
878 text: editing ? wp.media.view.l10n.updateGallery : wp.media.view.l10n.insertGallery,
879 priority: 80,
880 requires: { library: true },
881 /**
882 * @fires wp.media.controller.State#update
883 */
884 click() {
885 const controller = this.controller, state = controller.state();
886 controller.close();
887 state.trigger(
888 "update",
889 state.get("library")
890 );
891 controller.setState(controller.options.state);
892 controller.reset();
893 }
894 }
895 }
896 })
897 );
898 },
899 /**
900 * Handle the edit state requirements of selected media item.
901 *
902 * @return {void}
903 */
904 editState() {
905 const selection = this.state("gallery").get("selection");
906 const view = new wp.media.view.EditImage({
907 model: selection.single(),
908 controller: this
909 }).render();
910 this.content.set(view);
911 view.loadEditor();
912 },
913 /**
914 * Create the default states.
915 *
916 * @return {void}
917 */
918 createStates: function createStates() {
919 this.on("toolbar:create:main-gallery", this.galleryToolbar, this);
920 this.on("content:render:edit-image", this.editState, this);
921 this.states.add([
922 new wp.media.controller.Library({
923 id: "gallery",
924 title: wp.media.view.l10n.createGalleryTitle,
925 priority: 40,
926 toolbar: "main-gallery",
927 filterable: "uploaded",
928 multiple: "add",
929 editable: false,
930 library: wp.media.query({
931 type: "image",
932 ...this.options.library
933 })
934 }),
935 new wp.media.controller.EditImage({
936 model: this.options.editImage
937 }),
938 new wp.media.controller.GalleryEdit({
939 library: this.options.selection,
940 editing: this.options.editing,
941 menu: "gallery",
942 displaySettings: false,
943 multiple: true
944 }),
945 new wp.media.controller.GalleryAdd()
946 ]);
947 }
948 });
949 };
950 var slimImageObject = (img) => {
951 const attrSet = [
952 "sizes",
953 "mime",
954 "type",
955 "subtype",
956 "id",
957 "url",
958 "alt",
959 "link",
960 "caption"
961 ];
962 return attrSet.reduce((result, key) => {
963 if (img?.hasOwnProperty(key)) {
964 result[key] = img[key];
965 }
966 return result;
967 }, {});
968 };
969 var getAttachmentsCollection = (ids) => {
970 const { wp } = window;
971 return wp.media.query({
972 order: "ASC",
973 orderby: "post__in",
974 post__in: ids,
975 posts_per_page: -1,
976 query: true,
977 type: "image"
978 });
979 };
980 var MediaUpload = class extends import_element.Component {
981 constructor() {
982 super(...arguments);
983 this.openModal = this.openModal.bind(this);
984 this.onOpen = this.onOpen.bind(this);
985 this.onSelect = this.onSelect.bind(this);
986 this.onUpdate = this.onUpdate.bind(this);
987 this.onClose = this.onClose.bind(this);
988 }
989 initializeListeners() {
990 this.frame.on("select", this.onSelect);
991 this.frame.on("update", this.onUpdate);
992 this.frame.on("open", this.onOpen);
993 this.frame.on("close", this.onClose);
994 }
995 /**
996 * Sets the Gallery frame and initializes listeners.
997 *
998 * @return {void}
999 */
1000 buildAndSetGalleryFrame() {
1001 const {
1002 addToGallery = false,
1003 allowedTypes,
1004 multiple = false,
1005 value = DEFAULT_EMPTY_GALLERY
1006 } = this.props;
1007 if (value === this.lastGalleryValue) {
1008 return;
1009 }
1010 const { wp } = window;
1011 this.lastGalleryValue = value;
1012 if (this.frame) {
1013 this.frame.remove();
1014 }
1015 let currentState;
1016 if (addToGallery) {
1017 currentState = "gallery-library";
1018 } else {
1019 currentState = value && value.length ? "gallery-edit" : "gallery";
1020 }
1021 if (!this.GalleryDetailsMediaFrame) {
1022 this.GalleryDetailsMediaFrame = getGalleryDetailsMediaFrame();
1023 }
1024 const attachments = getAttachmentsCollection(value);
1025 const selection = new wp.media.model.Selection(attachments.models, {
1026 props: attachments.props.toJSON(),
1027 multiple
1028 });
1029 this.frame = new this.GalleryDetailsMediaFrame({
1030 mimeType: allowedTypes,
1031 state: currentState,
1032 multiple,
1033 selection,
1034 editing: !!value?.length
1035 });
1036 wp.media.frame = this.frame;
1037 this.initializeListeners();
1038 }
1039 /**
1040 * Initializes the Media Library requirements for the featured image flow.
1041 *
1042 * @return {void}
1043 */
1044 buildAndSetFeatureImageFrame() {
1045 const { wp } = window;
1046 const { value: featuredImageId, multiple, allowedTypes } = this.props;
1047 const featuredImageFrame = getFeaturedImageMediaFrame();
1048 const attachments = getAttachmentsCollection(featuredImageId);
1049 const selection = new wp.media.model.Selection(attachments.models, {
1050 props: attachments.props.toJSON()
1051 });
1052 this.frame = new featuredImageFrame({
1053 mimeType: allowedTypes,
1054 state: "featured-image",
1055 multiple,
1056 selection,
1057 editing: featuredImageId
1058 });
1059 wp.media.frame = this.frame;
1060 wp.media.view.settings.post = {
1061 ...wp.media.view.settings.post,
1062 featuredImageId: featuredImageId || -1
1063 };
1064 }
1065 /**
1066 * Initializes the Media Library requirements for the single image flow.
1067 *
1068 * @return {void}
1069 */
1070 buildAndSetSingleMediaFrame() {
1071 const { wp } = window;
1072 const {
1073 allowedTypes,
1074 multiple = false,
1075 title = (0, import_i18n.__)("Select or Upload Media"),
1076 value
1077 } = this.props;
1078 const frameConfig = {
1079 title,
1080 multiple
1081 };
1082 if (!!allowedTypes) {
1083 frameConfig.library = { type: allowedTypes };
1084 }
1085 if (this.frame) {
1086 this.frame.remove();
1087 }
1088 const singleImageFrame = getSingleMediaFrame();
1089 const attachments = getAttachmentsCollection(value);
1090 const selection = new wp.media.model.Selection(attachments.models, {
1091 props: attachments.props.toJSON()
1092 });
1093 this.frame = new singleImageFrame({
1094 mimeType: allowedTypes,
1095 multiple,
1096 selection,
1097 ...frameConfig
1098 });
1099 wp.media.frame = this.frame;
1100 }
1101 componentWillUnmount() {
1102 this.frame?.remove();
1103 }
1104 onUpdate(selections) {
1105 const { onSelect, multiple = false } = this.props;
1106 const state = this.frame.state();
1107 const selectedImages = selections || state.get("selection");
1108 if (!selectedImages || !selectedImages.models.length) {
1109 return;
1110 }
1111 if (multiple) {
1112 onSelect(
1113 selectedImages.models.map(
1114 (model) => slimImageObject(model.toJSON())
1115 )
1116 );
1117 } else {
1118 onSelect(slimImageObject(selectedImages.models[0].toJSON()));
1119 }
1120 }
1121 onSelect() {
1122 const { onSelect, multiple = false } = this.props;
1123 const attachment = this.frame.state().get("selection").toJSON();
1124 onSelect(multiple ? attachment : attachment[0]);
1125 }
1126 onOpen() {
1127 const { wp } = window;
1128 const { value } = this.props;
1129 this.updateCollection();
1130 if (this.props.mode) {
1131 this.frame.content.mode(this.props.mode);
1132 }
1133 const hasMedia = Array.isArray(value) ? !!value?.length : !!value;
1134 if (!hasMedia) {
1135 return;
1136 }
1137 const isGallery = this.props.gallery;
1138 const selection = this.frame.state().get("selection");
1139 const valueArray = Array.isArray(value) ? value : [value];
1140 if (!isGallery) {
1141 valueArray.forEach((id) => {
1142 selection.add(wp.media.attachment(id));
1143 });
1144 }
1145 const attachments = getAttachmentsCollection(valueArray);
1146 attachments.more().done(function() {
1147 if (isGallery && attachments?.models?.length) {
1148 selection.add(attachments.models);
1149 }
1150 });
1151 }
1152 onClose() {
1153 const { onClose } = this.props;
1154 if (onClose) {
1155 onClose();
1156 }
1157 this.frame.detach();
1158 }
1159 updateCollection() {
1160 const frameContent = this.frame.content.get();
1161 if (frameContent && frameContent.collection) {
1162 const collection = frameContent.collection;
1163 collection.toArray().forEach((model) => model.trigger("destroy", model));
1164 collection.mirroring._hasMore = true;
1165 collection.more();
1166 }
1167 }
1168 openModal() {
1169 const {
1170 gallery = false,
1171 unstableFeaturedImageFlow = false,
1172 modalClass
1173 } = this.props;
1174 if (gallery) {
1175 this.buildAndSetGalleryFrame();
1176 } else {
1177 this.buildAndSetSingleMediaFrame();
1178 }
1179 if (modalClass) {
1180 this.frame.$el.addClass(modalClass);
1181 }
1182 if (unstableFeaturedImageFlow) {
1183 this.buildAndSetFeatureImageFrame();
1184 }
1185 this.initializeListeners();
1186 this.frame.open();
1187 }
1188 render() {
1189 return this.props.render({ open: this.openModal });
1190 }
1191 };
1192 var media_upload_default = MediaUpload;
1193
1194 // packages/media-utils/build-module/utils/upload-media.js
1195 var import_i18n5 = __toESM(require_i18n());
1196 var import_blob = __toESM(require_blob());
1197
1198 // packages/media-utils/build-module/utils/upload-to-server.js
1199 var import_api_fetch = __toESM(require_api_fetch());
1200
1201 // packages/media-utils/build-module/utils/flatten-form-data.js
1202 function isPlainObject(data) {
1203 return data !== null && typeof data === "object" && Object.getPrototypeOf(data) === Object.prototype;
1204 }
1205 function flattenFormData(formData, key, data) {
1206 if (isPlainObject(data)) {
1207 for (const [name, value] of Object.entries(data)) {
1208 flattenFormData(formData, `${key}[${name}]`, value);
1209 }
1210 } else if (data !== void 0) {
1211 formData.append(key, String(data));
1212 }
1213 }
1214
1215 // packages/media-utils/build-module/utils/transform-attachment.js
1216 function transformAttachment(attachment) {
1217 const { alt_text, source_url, ...savedMediaProps } = attachment;
1218 return {
1219 ...savedMediaProps,
1220 alt: attachment.alt_text,
1221 caption: attachment.caption?.raw ?? "",
1222 title: attachment.title.raw,
1223 url: attachment.source_url,
1224 poster: attachment._embedded?.["wp:featuredmedia"]?.[0]?.source_url || void 0
1225 };
1226 }
1227
1228 // packages/media-utils/build-module/utils/upload-to-server.js
1229 async function uploadToServer(file, additionalData = {}, signal) {
1230 const data = new FormData();
1231 data.append("file", file, file.name || file.type.replace("/", "."));
1232 for (const [key, value] of Object.entries(additionalData)) {
1233 flattenFormData(
1234 data,
1235 key,
1236 value
1237 );
1238 }
1239 return transformAttachment(
1240 await (0, import_api_fetch.default)({
1241 // This allows the video block to directly get a video's poster image.
1242 path: "/wp/v2/media?_embed=wp:featuredmedia",
1243 body: data,
1244 method: "POST",
1245 signal
1246 })
1247 );
1248 }
1249
1250 // packages/media-utils/build-module/utils/validate-mime-type.js
1251 var import_i18n2 = __toESM(require_i18n());
1252
1253 // packages/media-utils/build-module/utils/upload-error.js
1254 var UploadError = class extends Error {
1255 code;
1256 file;
1257 constructor({ code, message: message2, file, cause }) {
1258 super(message2, { cause });
1259 Object.setPrototypeOf(this, new.target.prototype);
1260 this.code = code;
1261 this.file = file;
1262 }
1263 };
1264
1265 // packages/media-utils/build-module/utils/validate-mime-type.js
1266 function validateMimeType(file, allowedTypes) {
1267 if (!allowedTypes) {
1268 return;
1269 }
1270 const isAllowedType = allowedTypes.some((allowedType) => {
1271 if (allowedType.includes("/")) {
1272 return allowedType === file.type;
1273 }
1274 return file.type.startsWith(`${allowedType}/`);
1275 });
1276 if (file.type && !isAllowedType) {
1277 throw new UploadError({
1278 code: "MIME_TYPE_NOT_SUPPORTED",
1279 message: (0, import_i18n2.sprintf)(
1280 // translators: %s: file name.
1281 (0, import_i18n2.__)("%s: Sorry, this file type is not supported here."),
1282 file.name
1283 ),
1284 file
1285 });
1286 }
1287 }
1288
1289 // packages/media-utils/build-module/utils/validate-mime-type-for-user.js
1290 var import_i18n3 = __toESM(require_i18n());
1291
1292 // packages/media-utils/build-module/utils/get-mime-types-array.js
1293 function getMimeTypesArray(wpMimeTypesObject) {
1294 if (!wpMimeTypesObject) {
1295 return null;
1296 }
1297 return Object.entries(wpMimeTypesObject).flatMap(
1298 ([extensionsString, mime]) => {
1299 const [type] = mime.split("/");
1300 const extensions = extensionsString.split("|");
1301 return [
1302 mime,
1303 ...extensions.map(
1304 (extension) => `${type}/${extension}`
1305 )
1306 ];
1307 }
1308 );
1309 }
1310
1311 // packages/media-utils/build-module/utils/validate-mime-type-for-user.js
1312 function validateMimeTypeForUser(file, wpAllowedMimeTypes) {
1313 const allowedMimeTypesForUser = getMimeTypesArray(wpAllowedMimeTypes);
1314 if (!allowedMimeTypesForUser) {
1315 return;
1316 }
1317 const isAllowedMimeTypeForUser = allowedMimeTypesForUser.includes(
1318 file.type
1319 );
1320 if (file.type && !isAllowedMimeTypeForUser) {
1321 throw new UploadError({
1322 code: "MIME_TYPE_NOT_ALLOWED_FOR_USER",
1323 message: (0, import_i18n3.sprintf)(
1324 // translators: %s: file name.
1325 (0, import_i18n3.__)(
1326 "%s: Sorry, you are not allowed to upload this file type."
1327 ),
1328 file.name
1329 ),
1330 file
1331 });
1332 }
1333 }
1334
1335 // packages/media-utils/build-module/utils/validate-file-size.js
1336 var import_i18n4 = __toESM(require_i18n());
1337 function validateFileSize(file, maxUploadFileSize) {
1338 if (file.size <= 0) {
1339 throw new UploadError({
1340 code: "EMPTY_FILE",
1341 message: (0, import_i18n4.sprintf)(
1342 // translators: %s: file name.
1343 (0, import_i18n4.__)("%s: This file is empty."),
1344 file.name
1345 ),
1346 file
1347 });
1348 }
1349 if (maxUploadFileSize && file.size > maxUploadFileSize) {
1350 throw new UploadError({
1351 code: "SIZE_ABOVE_LIMIT",
1352 message: (0, import_i18n4.sprintf)(
1353 // translators: %s: file name.
1354 (0, import_i18n4.__)(
1355 "%s: This file exceeds the maximum upload size for this site."
1356 ),
1357 file.name
1358 ),
1359 file
1360 });
1361 }
1362 }
1363
1364 // packages/media-utils/build-module/utils/upload-media.js
1365 function uploadMedia({
1366 wpAllowedMimeTypes,
1367 allowedTypes,
1368 additionalData = {},
1369 filesList,
1370 maxUploadFileSize,
1371 onError,
1372 onFileChange,
1373 signal,
1374 multiple = true
1375 }) {
1376 if (!multiple && filesList.length > 1) {
1377 onError?.(new Error((0, import_i18n5.__)("Only one file can be used here.")));
1378 return;
1379 }
1380 const validFiles = [];
1381 const filesSet = [];
1382 const setAndUpdateFiles = (index, value) => {
1383 if (!window.__experimentalMediaProcessing) {
1384 if (filesSet[index]?.url) {
1385 (0, import_blob.revokeBlobURL)(filesSet[index].url);
1386 }
1387 }
1388 filesSet[index] = value;
1389 onFileChange?.(
1390 filesSet.filter((attachment) => attachment !== null)
1391 );
1392 };
1393 for (const mediaFile of filesList) {
1394 try {
1395 validateMimeTypeForUser(mediaFile, wpAllowedMimeTypes);
1396 } catch (error) {
1397 onError?.(error);
1398 continue;
1399 }
1400 try {
1401 validateMimeType(mediaFile, allowedTypes);
1402 } catch (error) {
1403 onError?.(error);
1404 continue;
1405 }
1406 try {
1407 validateFileSize(mediaFile, maxUploadFileSize);
1408 } catch (error) {
1409 onError?.(error);
1410 continue;
1411 }
1412 validFiles.push(mediaFile);
1413 if (!window.__experimentalMediaProcessing) {
1414 filesSet.push({ url: (0, import_blob.createBlobURL)(mediaFile) });
1415 onFileChange?.(filesSet);
1416 }
1417 }
1418 validFiles.map(async (file, index) => {
1419 try {
1420 const attachment = await uploadToServer(
1421 file,
1422 additionalData,
1423 signal
1424 );
1425 setAndUpdateFiles(index, attachment);
1426 } catch (error) {
1427 setAndUpdateFiles(index, null);
1428 let message2;
1429 if (typeof error === "object" && error !== null && "message" in error) {
1430 message2 = typeof error.message === "string" ? error.message : String(error.message);
1431 } else {
1432 message2 = (0, import_i18n5.sprintf)(
1433 // translators: %s: file name
1434 (0, import_i18n5.__)("Error while uploading file %s to the media library."),
1435 file.name
1436 );
1437 }
1438 onError?.(
1439 new UploadError({
1440 code: "GENERAL",
1441 message: message2,
1442 file,
1443 cause: error instanceof Error ? error : void 0
1444 })
1445 );
1446 }
1447 });
1448 }
1449
1450 // packages/media-utils/build-module/utils/sideload-media.js
1451 var import_i18n6 = __toESM(require_i18n());
1452
1453 // packages/media-utils/build-module/utils/sideload-to-server.js
1454 var import_api_fetch2 = __toESM(require_api_fetch());
1455 async function sideloadToServer(file, attachmentId, additionalData = {}, signal) {
1456 const data = new FormData();
1457 data.append("file", file, file.name || file.type.replace("/", "."));
1458 for (const [key, value] of Object.entries(additionalData)) {
1459 flattenFormData(
1460 data,
1461 key,
1462 value
1463 );
1464 }
1465 return transformAttachment(
1466 await (0, import_api_fetch2.default)({
1467 path: `/wp/v2/media/${attachmentId}/sideload`,
1468 body: data,
1469 method: "POST",
1470 signal
1471 })
1472 );
1473 }
1474
1475 // packages/media-utils/build-module/utils/sideload-media.js
1476 var noop = () => {
1477 };
1478 async function sideloadMedia({
1479 file,
1480 attachmentId,
1481 additionalData = {},
1482 signal,
1483 onFileChange,
1484 onError = noop
1485 }) {
1486 try {
1487 const attachment = await sideloadToServer(
1488 file,
1489 attachmentId,
1490 additionalData,
1491 signal
1492 );
1493 onFileChange?.([attachment]);
1494 } catch (error) {
1495 let message2;
1496 if (error instanceof Error) {
1497 message2 = error.message;
1498 } else {
1499 message2 = (0, import_i18n6.sprintf)(
1500 // translators: %s: file name
1501 (0, import_i18n6.__)("Error while sideloading file %s to the server."),
1502 file.name
1503 );
1504 }
1505 onError(
1506 new UploadError({
1507 code: "GENERAL",
1508 message: message2,
1509 file,
1510 cause: error instanceof Error ? error : void 0
1511 })
1512 );
1513 }
1514 }
1515
1516 // packages/media-utils/build-module/components/media-upload-modal/index.js
1517 var import_element53 = __toESM(require_element());
1518 var import_i18n57 = __toESM(require_i18n());
1519 var import_core_data2 = __toESM(require_core_data());
1520 var import_data7 = __toESM(require_data());
1521 var import_components54 = __toESM(require_components());
1522
1523 // packages/icons/build-module/library/arrow-down.js
1524 var import_primitives = __toESM(require_primitives());
1525 var import_jsx_runtime = __toESM(require_jsx_runtime());
1526 var arrow_down_default = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_primitives.Path, { d: "m16.5 13.5-3.7 3.7V4h-1.5v13.2l-3.8-3.7-1 1 5.5 5.6 5.5-5.6z" }) });
1527
1528 // packages/icons/build-module/library/arrow-left.js
1529 var import_primitives2 = __toESM(require_primitives());
1530 var import_jsx_runtime2 = __toESM(require_jsx_runtime());
1531 var arrow_left_default = /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_primitives2.Path, { d: "M20 11.2H6.8l3.7-3.7-1-1L3.9 12l5.6 5.5 1-1-3.7-3.7H20z" }) });
1532
1533 // packages/icons/build-module/library/arrow-right.js
1534 var import_primitives3 = __toESM(require_primitives());
1535 var import_jsx_runtime3 = __toESM(require_jsx_runtime());
1536 var arrow_right_default = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_primitives3.Path, { d: "m14.5 6.5-1 1 3.7 3.7H4v1.6h13.2l-3.7 3.7 1 1 5.6-5.5z" }) });
1537
1538 // packages/icons/build-module/library/arrow-up.js
1539 var import_primitives4 = __toESM(require_primitives());
1540 var import_jsx_runtime4 = __toESM(require_jsx_runtime());
1541 var arrow_up_default = /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives4.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_primitives4.Path, { d: "M12 3.9 6.5 9.5l1 1 3.8-3.7V20h1.5V6.8l3.7 3.7 1-1z" }) });
1542
1543 // packages/icons/build-module/library/audio.js
1544 var import_primitives5 = __toESM(require_primitives());
1545 var import_jsx_runtime5 = __toESM(require_jsx_runtime());
1546 var audio_default = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives5.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_primitives5.Path, { d: "M17.7 4.3c-1.2 0-2.8 0-3.8 1-.6.6-.9 1.5-.9 2.6V14c-.6-.6-1.5-1-2.5-1C8.6 13 7 14.6 7 16.5S8.6 20 10.5 20c1.5 0 2.8-1 3.3-2.3.5-.8.7-1.8.7-2.5V7.9c0-.7.2-1.2.5-1.6.6-.6 1.8-.6 2.8-.6h.3V4.3h-.4z" }) });
1547
1548 // packages/icons/build-module/library/block-table.js
1549 var import_primitives6 = __toESM(require_primitives());
1550 var import_jsx_runtime6 = __toESM(require_jsx_runtime());
1551 var block_table_default = /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives6.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_primitives6.Path, { d: "M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM5 4.5h14c.3 0 .5.2.5.5v3.5h-15V5c0-.3.2-.5.5-.5zm8 5.5h6.5v3.5H13V10zm-1.5 3.5h-7V10h7v3.5zm-7 5.5v-4h7v4.5H5c-.3 0-.5-.2-.5-.5zm14.5.5h-6V15h6.5v4c0 .3-.2.5-.5.5z" }) });
1552
1553 // packages/icons/build-module/library/category.js
1554 var import_primitives7 = __toESM(require_primitives());
1555 var import_jsx_runtime7 = __toESM(require_jsx_runtime());
1556 var category_default = /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_primitives7.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1557 import_primitives7.Path,
1558 {
1559 d: "M6 5.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H6a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM4 6a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2H6a2 2 0 01-2-2V6zm11-.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5h-3a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM13 6a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2h-3a2 2 0 01-2-2V6zm5 8.5h-3a.5.5 0 00-.5.5v3a.5.5 0 00.5.5h3a.5.5 0 00.5-.5v-3a.5.5 0 00-.5-.5zM15 13a2 2 0 00-2 2v3a2 2 0 002 2h3a2 2 0 002-2v-3a2 2 0 00-2-2h-3zm-9 1.5h3a.5.5 0 01.5.5v3a.5.5 0 01-.5.5H6a.5.5 0 01-.5-.5v-3a.5.5 0 01.5-.5zM4 15a2 2 0 012-2h3a2 2 0 012 2v3a2 2 0 01-2 2H6a2 2 0 01-2-2v-3z",
1560 fillRule: "evenodd",
1561 clipRule: "evenodd"
1562 }
1563 ) });
1564
1565 // packages/icons/build-module/library/check.js
1566 var import_primitives8 = __toESM(require_primitives());
1567 var import_jsx_runtime8 = __toESM(require_jsx_runtime());
1568 var check_default = /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives8.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_primitives8.Path, { d: "M16.5 7.5 10 13.9l-2.5-2.4-1 1 3.5 3.6 7.5-7.6z" }) });
1569
1570 // packages/icons/build-module/library/close-small.js
1571 var import_primitives9 = __toESM(require_primitives());
1572 var import_jsx_runtime9 = __toESM(require_jsx_runtime());
1573 var close_small_default = /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives9.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_primitives9.Path, { d: "M12 13.06l3.712 3.713 1.061-1.06L13.061 12l3.712-3.712-1.06-1.06L12 10.938 8.288 7.227l-1.061 1.06L10.939 12l-3.712 3.712 1.06 1.061L12 13.061z" }) });
1574
1575 // packages/icons/build-module/library/cog.js
1576 var import_primitives10 = __toESM(require_primitives());
1577 var import_jsx_runtime10 = __toESM(require_jsx_runtime());
1578 var cog_default = /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_primitives10.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1579 import_primitives10.Path,
1580 {
1581 fillRule: "evenodd",
1582 d: "M10.289 4.836A1 1 0 0111.275 4h1.306a1 1 0 01.987.836l.244 1.466c.787.26 1.503.679 2.108 1.218l1.393-.522a1 1 0 011.216.437l.653 1.13a1 1 0 01-.23 1.273l-1.148.944a6.025 6.025 0 010 2.435l1.149.946a1 1 0 01.23 1.272l-.653 1.13a1 1 0 01-1.216.437l-1.394-.522c-.605.54-1.32.958-2.108 1.218l-.244 1.466a1 1 0 01-.987.836h-1.306a1 1 0 01-.986-.836l-.244-1.466a5.995 5.995 0 01-2.108-1.218l-1.394.522a1 1 0 01-1.217-.436l-.653-1.131a1 1 0 01.23-1.272l1.149-.946a6.026 6.026 0 010-2.435l-1.148-.944a1 1 0 01-.23-1.272l.653-1.131a1 1 0 011.217-.437l1.393.522a5.994 5.994 0 012.108-1.218l.244-1.466zM14.929 12a3 3 0 11-6 0 3 3 0 016 0z",
1583 clipRule: "evenodd"
1584 }
1585 ) });
1586
1587 // packages/icons/build-module/library/envelope.js
1588 var import_primitives11 = __toESM(require_primitives());
1589 var import_jsx_runtime11 = __toESM(require_jsx_runtime());
1590 var envelope_default = /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_primitives11.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1591 import_primitives11.Path,
1592 {
1593 fillRule: "evenodd",
1594 clipRule: "evenodd",
1595 d: "M3 7c0-1.1.9-2 2-2h14a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V7Zm2-.5h14c.3 0 .5.2.5.5v1L12 13.5 4.5 7.9V7c0-.3.2-.5.5-.5Zm-.5 3.3V17c0 .3.2.5.5.5h14c.3 0 .5-.2.5-.5V9.8L12 15.4 4.5 9.8Z"
1596 }
1597 ) });
1598
1599 // packages/icons/build-module/library/error.js
1600 var import_primitives12 = __toESM(require_primitives());
1601 var import_jsx_runtime12 = __toESM(require_jsx_runtime());
1602 var error_default = /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_primitives12.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1603 import_primitives12.Path,
1604 {
1605 fillRule: "evenodd",
1606 clipRule: "evenodd",
1607 d: "M12.218 5.377a.25.25 0 0 0-.436 0l-7.29 12.96a.25.25 0 0 0 .218.373h14.58a.25.25 0 0 0 .218-.372l-7.29-12.96Zm-1.743-.735c.669-1.19 2.381-1.19 3.05 0l7.29 12.96a1.75 1.75 0 0 1-1.525 2.608H4.71a1.75 1.75 0 0 1-1.525-2.608l7.29-12.96ZM12.75 17.46h-1.5v-1.5h1.5v1.5Zm-1.5-3h1.5v-5h-1.5v5Z"
1608 }
1609 ) });
1610
1611 // packages/icons/build-module/library/file.js
1612 var import_primitives13 = __toESM(require_primitives());
1613 var import_jsx_runtime13 = __toESM(require_jsx_runtime());
1614 var file_default = /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_primitives13.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1615 import_primitives13.Path,
1616 {
1617 fillRule: "evenodd",
1618 clipRule: "evenodd",
1619 d: "M12.848 8a1 1 0 0 1-.914-.594l-.723-1.63a.5.5 0 0 0-.447-.276H5a.5.5 0 0 0-.5.5v11.5a.5.5 0 0 0 .5.5h14a.5.5 0 0 0 .5-.5v-9A.5.5 0 0 0 19 8h-6.152Zm.612-1.5a.5.5 0 0 1-.462-.31l-.445-1.084A2 2 0 0 0 10.763 4H5a2 2 0 0 0-2 2v11.5a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-9a2 2 0 0 0-2-2h-5.54Z"
1620 }
1621 ) });
1622
1623 // packages/icons/build-module/library/format-list-bullets-rtl.js
1624 var import_primitives14 = __toESM(require_primitives());
1625 var import_jsx_runtime14 = __toESM(require_jsx_runtime());
1626 var format_list_bullets_rtl_default = /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives14.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_primitives14.Path, { d: "M4 8.8h8.9V7.2H4v1.6zm0 7h8.9v-1.5H4v1.5zM18 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-3c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2z" }) });
1627
1628 // packages/icons/build-module/library/format-list-bullets.js
1629 var import_primitives15 = __toESM(require_primitives());
1630 var import_jsx_runtime15 = __toESM(require_jsx_runtime());
1631 var format_list_bullets_default = /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives15.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_primitives15.Path, { d: "M11.1 15.8H20v-1.5h-8.9v1.5zm0-8.6v1.5H20V7.2h-8.9zM6 13c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-7c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z" }) });
1632
1633 // packages/icons/build-module/library/funnel.js
1634 var import_primitives16 = __toESM(require_primitives());
1635 var import_jsx_runtime16 = __toESM(require_jsx_runtime());
1636 var funnel_default = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives16.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives16.Path, { d: "M10 17.5H14V16H10V17.5ZM6 6V7.5H18V6H6ZM8 12.5H16V11H8V12.5Z" }) });
1637
1638 // packages/icons/build-module/library/image.js
1639 var import_primitives17 = __toESM(require_primitives());
1640 var import_jsx_runtime17 = __toESM(require_jsx_runtime());
1641 var image_default = /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives17.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_primitives17.Path, { d: "M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM5 4.5h14c.3 0 .5.2.5.5v8.4l-3-2.9c-.3-.3-.8-.3-1 0L11.9 14 9 12c-.3-.2-.6-.2-.8 0l-3.6 2.6V5c-.1-.3.1-.5.4-.5zm14 15H5c-.3 0-.5-.2-.5-.5v-2.4l4.1-3 3 1.9c.3.2.7.2.9-.1L16 12l3.5 3.4V19c0 .3-.2.5-.5.5z" }) });
1642
1643 // packages/icons/build-module/library/link.js
1644 var import_primitives18 = __toESM(require_primitives());
1645 var import_jsx_runtime18 = __toESM(require_jsx_runtime());
1646 var link_default = /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives18.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_primitives18.Path, { d: "M10 17.389H8.444A5.194 5.194 0 1 1 8.444 7H10v1.5H8.444a3.694 3.694 0 0 0 0 7.389H10v1.5ZM14 7h1.556a5.194 5.194 0 0 1 0 10.39H14v-1.5h1.556a3.694 3.694 0 0 0 0-7.39H14V7Zm-4.5 6h5v-1.5h-5V13Z" }) });
1647
1648 // packages/icons/build-module/library/mobile.js
1649 var import_primitives19 = __toESM(require_primitives());
1650 var import_jsx_runtime19 = __toESM(require_jsx_runtime());
1651 var mobile_default = /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives19.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_primitives19.Path, { d: "M15 4H9c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h6c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm.5 14c0 .3-.2.5-.5.5H9c-.3 0-.5-.2-.5-.5V6c0-.3.2-.5.5-.5h6c.3 0 .5.2.5.5v12zm-4.5-.5h2V16h-2v1.5z" }) });
1652
1653 // packages/icons/build-module/library/more-vertical.js
1654 var import_primitives20 = __toESM(require_primitives());
1655 var import_jsx_runtime20 = __toESM(require_jsx_runtime());
1656 var more_vertical_default = /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives20.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_primitives20.Path, { d: "M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z" }) });
1657
1658 // packages/icons/build-module/library/next.js
1659 var import_primitives21 = __toESM(require_primitives());
1660 var import_jsx_runtime21 = __toESM(require_jsx_runtime());
1661 var next_default = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives21.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_primitives21.Path, { d: "M6.6 6L5.4 7l4.5 5-4.5 5 1.1 1 5.5-6-5.4-6zm6 0l-1.1 1 4.5 5-4.5 5 1.1 1 5.5-6-5.5-6z" }) });
1662
1663 // packages/icons/build-module/library/previous.js
1664 var import_primitives22 = __toESM(require_primitives());
1665 var import_jsx_runtime22 = __toESM(require_jsx_runtime());
1666 var previous_default = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives22.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_primitives22.Path, { d: "M11.6 7l-1.1-1L5 12l5.5 6 1.1-1L7 12l4.6-5zm6 0l-1.1-1-5.5 6 5.5 6 1.1-1-4.6-5 4.6-5z" }) });
1667
1668 // packages/icons/build-module/library/scheduled.js
1669 var import_primitives23 = __toESM(require_primitives());
1670 var import_jsx_runtime23 = __toESM(require_jsx_runtime());
1671 var scheduled_default = /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_primitives23.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1672 import_primitives23.Path,
1673 {
1674 fillRule: "evenodd",
1675 clipRule: "evenodd",
1676 d: "M12 18.5a6.5 6.5 0 1 1 0-13 6.5 6.5 0 0 1 0 13ZM4 12a8 8 0 1 1 16 0 8 8 0 0 1-16 0Zm9 1V8h-1.5v3.5h-2V13H13Z"
1677 }
1678 ) });
1679
1680 // packages/icons/build-module/library/search.js
1681 var import_primitives24 = __toESM(require_primitives());
1682 var import_jsx_runtime24 = __toESM(require_jsx_runtime());
1683 var search_default = /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_primitives24.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_primitives24.Path, { d: "M13 5c-3.3 0-6 2.7-6 6 0 1.4.5 2.7 1.3 3.7l-3.8 3.8 1.1 1.1 3.8-3.8c1 .8 2.3 1.3 3.7 1.3 3.3 0 6-2.7 6-6S16.3 5 13 5zm0 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z" }) });
1684
1685 // packages/icons/build-module/library/seen.js
1686 var import_primitives25 = __toESM(require_primitives());
1687 var import_jsx_runtime25 = __toESM(require_jsx_runtime());
1688 var seen_default = /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_primitives25.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_primitives25.Path, { d: "M3.99961 13C4.67043 13.3354 4.6703 13.3357 4.67017 13.3359L4.67298 13.3305C4.67621 13.3242 4.68184 13.3135 4.68988 13.2985C4.70595 13.2686 4.7316 13.2218 4.76695 13.1608C4.8377 13.0385 4.94692 12.8592 5.09541 12.6419C5.39312 12.2062 5.84436 11.624 6.45435 11.0431C7.67308 9.88241 9.49719 8.75 11.9996 8.75C14.502 8.75 16.3261 9.88241 17.5449 11.0431C18.1549 11.624 18.6061 12.2062 18.9038 12.6419C19.0523 12.8592 19.1615 13.0385 19.2323 13.1608C19.2676 13.2218 19.2933 13.2686 19.3093 13.2985C19.3174 13.3135 19.323 13.3242 19.3262 13.3305L19.3291 13.3359C19.3289 13.3357 19.3288 13.3354 19.9996 13C20.6704 12.6646 20.6703 12.6643 20.6701 12.664L20.6697 12.6632L20.6688 12.6614L20.6662 12.6563L20.6583 12.6408C20.6517 12.6282 20.6427 12.6108 20.631 12.5892C20.6078 12.5459 20.5744 12.4852 20.5306 12.4096C20.4432 12.2584 20.3141 12.0471 20.1423 11.7956C19.7994 11.2938 19.2819 10.626 18.5794 9.9569C17.1731 8.61759 14.9972 7.25 11.9996 7.25C9.00203 7.25 6.82614 8.61759 5.41987 9.9569C4.71736 10.626 4.19984 11.2938 3.85694 11.7956C3.68511 12.0471 3.55605 12.2584 3.4686 12.4096C3.42484 12.4852 3.39142 12.5459 3.36818 12.5892C3.35656 12.6108 3.34748 12.6282 3.34092 12.6408L3.33297 12.6563L3.33041 12.6614L3.32948 12.6632L3.32911 12.664C3.32894 12.6643 3.32879 12.6646 3.99961 13ZM11.9996 16C13.9326 16 15.4996 14.433 15.4996 12.5C15.4996 10.567 13.9326 9 11.9996 9C10.0666 9 8.49961 10.567 8.49961 12.5C8.49961 14.433 10.0666 16 11.9996 16Z" }) });
1689
1690 // packages/icons/build-module/library/unseen.js
1691 var import_primitives26 = __toESM(require_primitives());
1692 var import_jsx_runtime26 = __toESM(require_jsx_runtime());
1693 var unseen_default = /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_primitives26.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_primitives26.Path, { d: "M20.7 12.7s0-.1-.1-.2c0-.2-.2-.4-.4-.6-.3-.5-.9-1.2-1.6-1.8-.7-.6-1.5-1.3-2.6-1.8l-.6 1.4c.9.4 1.6 1 2.1 1.5.6.6 1.1 1.2 1.4 1.6.1.2.3.4.3.5v.1l.7-.3.7-.3Zm-5.2-9.3-1.8 4c-.5-.1-1.1-.2-1.7-.2-3 0-5.2 1.4-6.6 2.7-.7.7-1.2 1.3-1.6 1.8-.2.3-.3.5-.4.6 0 0 0 .1-.1.2s0 0 .7.3l.7.3V13c0-.1.2-.3.3-.5.3-.4.7-1 1.4-1.6 1.2-1.2 3-2.3 5.5-2.3H13v.3c-.4 0-.8-.1-1.1-.1-1.9 0-3.5 1.6-3.5 3.5s.6 2.3 1.6 2.9l-2 4.4.9.4 7.6-16.2-.9-.4Zm-3 12.6c1.7-.2 3-1.7 3-3.5s-.2-1.4-.6-1.9L12.4 16Z" }) });
1694
1695 // packages/icons/build-module/library/upload.js
1696 var import_primitives27 = __toESM(require_primitives());
1697 var import_jsx_runtime27 = __toESM(require_jsx_runtime());
1698 var upload_default = /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_primitives27.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_primitives27.Path, { d: "M18.5 15v3.5H13V6.7l4.5 4.1 1-1.1-6.2-5.8-5.8 5.8 1 1.1 4-4v11.7h-6V15H4v5h16v-5z" }) });
1699
1700 // packages/icons/build-module/library/video.js
1701 var import_primitives28 = __toESM(require_primitives());
1702 var import_jsx_runtime28 = __toESM(require_jsx_runtime());
1703 var video_default = /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_primitives28.SVG, { viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_primitives28.Path, { d: "M18.7 3H5.3C4 3 3 4 3 5.3v13.4C3 20 4 21 5.3 21h13.4c1.3 0 2.3-1 2.3-2.3V5.3C21 4 20 3 18.7 3zm.8 15.7c0 .4-.4.8-.8.8H5.3c-.4 0-.8-.4-.8-.8V5.3c0-.4.4-.8.8-.8h13.4c.4 0 .8.4.8.8v13.4zM10 15l5-3-5-3v6z" }) });
1704
1705 // packages/dataviews/build-module/components/dataviews-context/index.js
1706 var import_element2 = __toESM(require_element());
1707
1708 // packages/dataviews/build-module/constants.js
1709 var import_i18n7 = __toESM(require_i18n());
1710 var OPERATOR_IS_ANY = "isAny";
1711 var OPERATOR_IS_NONE = "isNone";
1712 var OPERATOR_IS_ALL = "isAll";
1713 var OPERATOR_IS_NOT_ALL = "isNotAll";
1714 var OPERATOR_BETWEEN = "between";
1715 var OPERATOR_IN_THE_PAST = "inThePast";
1716 var OPERATOR_OVER = "over";
1717 var OPERATOR_IS = "is";
1718 var OPERATOR_IS_NOT = "isNot";
1719 var OPERATOR_LESS_THAN = "lessThan";
1720 var OPERATOR_GREATER_THAN = "greaterThan";
1721 var OPERATOR_LESS_THAN_OR_EQUAL = "lessThanOrEqual";
1722 var OPERATOR_GREATER_THAN_OR_EQUAL = "greaterThanOrEqual";
1723 var OPERATOR_BEFORE = "before";
1724 var OPERATOR_AFTER = "after";
1725 var OPERATOR_BEFORE_INC = "beforeInc";
1726 var OPERATOR_AFTER_INC = "afterInc";
1727 var OPERATOR_CONTAINS = "contains";
1728 var OPERATOR_NOT_CONTAINS = "notContains";
1729 var OPERATOR_STARTS_WITH = "startsWith";
1730 var OPERATOR_ON = "on";
1731 var OPERATOR_NOT_ON = "notOn";
1732 var SORTING_DIRECTIONS = ["asc", "desc"];
1733 var sortArrows = { asc: "\u2191", desc: "\u2193" };
1734 var sortValues = { asc: "ascending", desc: "descending" };
1735 var sortLabels = {
1736 asc: (0, import_i18n7.__)("Sort ascending"),
1737 desc: (0, import_i18n7.__)("Sort descending")
1738 };
1739 var sortIcons = {
1740 asc: arrow_up_default,
1741 desc: arrow_down_default
1742 };
1743 var LAYOUT_TABLE = "table";
1744 var LAYOUT_GRID = "grid";
1745 var LAYOUT_LIST = "list";
1746 var LAYOUT_ACTIVITY = "activity";
1747 var LAYOUT_PICKER_GRID = "pickerGrid";
1748 var LAYOUT_PICKER_TABLE = "pickerTable";
1749 var DAYS_OF_WEEK = [0, 1, 2, 3, 4, 5, 6];
1750
1751 // packages/dataviews/build-module/components/dataviews-context/index.js
1752 var DataViewsContext = (0, import_element2.createContext)({
1753 view: { type: LAYOUT_TABLE },
1754 onChangeView: () => {
1755 },
1756 fields: [],
1757 data: [],
1758 paginationInfo: {
1759 totalItems: 0,
1760 totalPages: 0
1761 },
1762 selection: [],
1763 onChangeSelection: () => {
1764 },
1765 setOpenedFilter: () => {
1766 },
1767 openedFilter: null,
1768 getItemId: (item) => item.id,
1769 isItemClickable: () => true,
1770 renderItemLink: void 0,
1771 containerWidth: 0,
1772 containerRef: (0, import_element2.createRef)(),
1773 resizeObserverRef: () => {
1774 },
1775 defaultLayouts: { list: {}, grid: {}, table: {} },
1776 filters: [],
1777 isShowingFilter: false,
1778 setIsShowingFilter: () => {
1779 },
1780 hasInfiniteScrollHandler: false,
1781 config: {
1782 perPageSizes: []
1783 }
1784 });
1785 DataViewsContext.displayName = "DataViewsContext";
1786 var dataviews_context_default = DataViewsContext;
1787
1788 // packages/dataviews/build-module/dataviews-layouts/index.js
1789 var import_i18n26 = __toESM(require_i18n());
1790
1791 // node_modules/clsx/dist/clsx.mjs
1792 function r(e2) {
1793 var t2, f2, n2 = "";
1794 if ("string" == typeof e2 || "number" == typeof e2) n2 += e2;
1795 else if ("object" == typeof e2) if (Array.isArray(e2)) {
1796 var o2 = e2.length;
1797 for (t2 = 0; t2 < o2; t2++) e2[t2] && (f2 = r(e2[t2])) && (n2 && (n2 += " "), n2 += f2);
1798 } else for (f2 in e2) e2[f2] && (n2 && (n2 += " "), n2 += f2);
1799 return n2;
1800 }
1801 function clsx() {
1802 for (var e2, t2, f2 = 0, n2 = "", o2 = arguments.length; f2 < o2; f2++) (e2 = arguments[f2]) && (t2 = r(e2)) && (n2 && (n2 += " "), n2 += t2);
1803 return n2;
1804 }
1805 var clsx_default = clsx;
1806
1807 // packages/dataviews/build-module/dataviews-layouts/table/index.js
1808 var import_i18n14 = __toESM(require_i18n());
1809 var import_components7 = __toESM(require_components());
1810 var import_element9 = __toESM(require_element());
1811 var import_keycodes = __toESM(require_keycodes());
1812
1813 // packages/dataviews/build-module/components/dataviews-selection-checkbox/index.js
1814 var import_components = __toESM(require_components());
1815 var import_i18n8 = __toESM(require_i18n());
1816 var import_jsx_runtime29 = __toESM(require_jsx_runtime());
1817 function DataViewsSelectionCheckbox({
1818 selection,
1819 onChangeSelection,
1820 item,
1821 getItemId,
1822 titleField,
1823 disabled,
1824 ...extraProps
1825 }) {
1826 const id = getItemId(item);
1827 const checked = !disabled && selection.includes(id);
1828 const selectionLabel = titleField?.getValue?.({ item }) || (0, import_i18n8.__)("(no title)");
1829 return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1830 import_components.CheckboxControl,
1831 {
1832 className: "dataviews-selection-checkbox",
1833 __nextHasNoMarginBottom: true,
1834 "aria-label": selectionLabel,
1835 "aria-disabled": disabled,
1836 checked,
1837 onChange: () => {
1838 if (disabled) {
1839 return;
1840 }
1841 onChangeSelection(
1842 selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id]
1843 );
1844 },
1845 ...extraProps
1846 }
1847 );
1848 }
1849
1850 // packages/dataviews/build-module/components/dataviews-item-actions/index.js
1851 var import_components2 = __toESM(require_components());
1852 var import_i18n9 = __toESM(require_i18n());
1853 var import_element3 = __toESM(require_element());
1854 var import_data = __toESM(require_data());
1855 var import_compose = __toESM(require_compose());
1856
1857 // packages/dataviews/build-module/lock-unlock.js
1858 var import_private_apis = __toESM(require_private_apis());
1859 var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(
1860 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
1861 "@wordpress/dataviews"
1862 );
1863
1864 // packages/dataviews/build-module/components/dataviews-item-actions/index.js
1865 var import_jsx_runtime30 = __toESM(require_jsx_runtime());
1866 var { Menu, kebabCase } = unlock(import_components2.privateApis);
1867 function ButtonTrigger({
1868 action,
1869 onClick,
1870 items,
1871 variant
1872 }) {
1873 const label = typeof action.label === "string" ? action.label : action.label(items);
1874 return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1875 import_components2.Button,
1876 {
1877 disabled: !!action.disabled,
1878 accessibleWhenDisabled: true,
1879 size: "compact",
1880 variant,
1881 onClick,
1882 children: label
1883 }
1884 );
1885 }
1886 function MenuItemTrigger({
1887 action,
1888 onClick,
1889 items
1890 }) {
1891 const label = typeof action.label === "string" ? action.label : action.label(items);
1892 return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Menu.Item, { disabled: action.disabled, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Menu.ItemLabel, { children: label }) });
1893 }
1894 function ActionModal({
1895 action,
1896 items,
1897 closeModal
1898 }) {
1899 const label = typeof action.label === "string" ? action.label : action.label(items);
1900 const modalHeader = typeof action.modalHeader === "function" ? action.modalHeader(items) : action.modalHeader;
1901 return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1902 import_components2.Modal,
1903 {
1904 title: modalHeader || label,
1905 __experimentalHideHeader: !!action.hideModalHeader,
1906 onRequestClose: closeModal,
1907 focusOnMount: action.modalFocusOnMount ?? true,
1908 size: action.modalSize || "medium",
1909 overlayClassName: `dataviews-action-modal dataviews-action-modal__${kebabCase(
1910 action.id
1911 )}`,
1912 children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(action.RenderModal, { items, closeModal })
1913 }
1914 );
1915 }
1916 function ActionsMenuGroup({
1917 actions,
1918 item,
1919 registry,
1920 setActiveModalAction
1921 }) {
1922 const { primaryActions, regularActions } = (0, import_element3.useMemo)(() => {
1923 return actions.reduce(
1924 (acc, action) => {
1925 (action.isPrimary ? acc.primaryActions : acc.regularActions).push(action);
1926 return acc;
1927 },
1928 {
1929 primaryActions: [],
1930 regularActions: []
1931 }
1932 );
1933 }, [actions]);
1934 const renderActionGroup = (actionList) => actionList.map((action) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1935 MenuItemTrigger,
1936 {
1937 action,
1938 onClick: () => {
1939 if ("RenderModal" in action) {
1940 setActiveModalAction(action);
1941 return;
1942 }
1943 action.callback([item], { registry });
1944 },
1945 items: [item]
1946 },
1947 action.id
1948 ));
1949 return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Menu.Group, { children: [
1950 renderActionGroup(primaryActions),
1951 primaryActions.length > 0 && regularActions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Menu.Separator, {}),
1952 renderActionGroup(regularActions)
1953 ] });
1954 }
1955 function ItemActions({
1956 item,
1957 actions,
1958 isCompact
1959 }) {
1960 const registry = (0, import_data.useRegistry)();
1961 const { primaryActions, eligibleActions } = (0, import_element3.useMemo)(() => {
1962 const _eligibleActions = actions.filter(
1963 (action) => !action.isEligible || action.isEligible(item)
1964 );
1965 const _primaryActions = _eligibleActions.filter(
1966 (action) => action.isPrimary
1967 );
1968 return {
1969 primaryActions: _primaryActions,
1970 eligibleActions: _eligibleActions
1971 };
1972 }, [actions, item]);
1973 if (isCompact) {
1974 return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1975 CompactItemActions,
1976 {
1977 item,
1978 actions: eligibleActions,
1979 isSmall: true,
1980 registry
1981 }
1982 );
1983 }
1984 return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
1985 import_components2.__experimentalHStack,
1986 {
1987 spacing: 0,
1988 justify: "flex-end",
1989 className: "dataviews-item-actions",
1990 style: {
1991 flexShrink: 0,
1992 width: "auto"
1993 },
1994 children: [
1995 /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1996 PrimaryActions,
1997 {
1998 item,
1999 actions: primaryActions,
2000 registry
2001 }
2002 ),
2003 primaryActions.length < eligibleActions.length && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2004 CompactItemActions,
2005 {
2006 item,
2007 actions: eligibleActions,
2008 registry
2009 }
2010 )
2011 ]
2012 }
2013 );
2014 }
2015 function CompactItemActions({
2016 item,
2017 actions,
2018 isSmall,
2019 registry
2020 }) {
2021 const [activeModalAction, setActiveModalAction] = (0, import_element3.useState)(
2022 null
2023 );
2024 return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [
2025 /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(Menu, { placement: "bottom-end", children: [
2026 /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2027 Menu.TriggerButton,
2028 {
2029 render: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2030 import_components2.Button,
2031 {
2032 size: isSmall ? "small" : "compact",
2033 icon: more_vertical_default,
2034 label: (0, import_i18n9.__)("Actions"),
2035 accessibleWhenDisabled: true,
2036 disabled: !actions.length,
2037 className: "dataviews-all-actions-button"
2038 }
2039 )
2040 }
2041 ),
2042 /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Menu.Popover, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2043 ActionsMenuGroup,
2044 {
2045 actions,
2046 item,
2047 registry,
2048 setActiveModalAction
2049 }
2050 ) })
2051 ] }),
2052 !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2053 ActionModal,
2054 {
2055 action: activeModalAction,
2056 items: [item],
2057 closeModal: () => setActiveModalAction(null)
2058 }
2059 )
2060 ] });
2061 }
2062 function PrimaryActions({
2063 item,
2064 actions,
2065 registry,
2066 buttonVariant
2067 }) {
2068 const [activeModalAction, setActiveModalAction] = (0, import_element3.useState)(null);
2069 const isMobileViewport = (0, import_compose.useViewportMatch)("medium", "<");
2070 if (isMobileViewport) {
2071 return null;
2072 }
2073 if (!Array.isArray(actions) || actions.length === 0) {
2074 return null;
2075 }
2076 return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [
2077 actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2078 ButtonTrigger,
2079 {
2080 action,
2081 onClick: () => {
2082 if ("RenderModal" in action) {
2083 setActiveModalAction(action);
2084 return;
2085 }
2086 action.callback([item], { registry });
2087 },
2088 items: [item],
2089 variant: buttonVariant
2090 },
2091 action.id
2092 )),
2093 !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2094 ActionModal,
2095 {
2096 action: activeModalAction,
2097 items: [item],
2098 closeModal: () => setActiveModalAction(null)
2099 }
2100 )
2101 ] });
2102 }
2103
2104 // packages/dataviews/build-module/components/dataviews-bulk-actions/index.js
2105 var import_components3 = __toESM(require_components());
2106 var import_i18n10 = __toESM(require_i18n());
2107 var import_element4 = __toESM(require_element());
2108 var import_data2 = __toESM(require_data());
2109 var import_compose2 = __toESM(require_compose());
2110 var import_jsx_runtime31 = __toESM(require_jsx_runtime());
2111 function useHasAPossibleBulkAction(actions, item) {
2112 return (0, import_element4.useMemo)(() => {
2113 return actions.some((action) => {
2114 return action.supportsBulk && (!action.isEligible || action.isEligible(item));
2115 });
2116 }, [actions, item]);
2117 }
2118 function useSomeItemHasAPossibleBulkAction(actions, data) {
2119 return (0, import_element4.useMemo)(() => {
2120 return data.some((item) => {
2121 return actions.some((action) => {
2122 return action.supportsBulk && (!action.isEligible || action.isEligible(item));
2123 });
2124 });
2125 }, [actions, data]);
2126 }
2127 function BulkSelectionCheckbox({
2128 selection,
2129 onChangeSelection,
2130 data,
2131 actions,
2132 getItemId
2133 }) {
2134 const selectableItems = (0, import_element4.useMemo)(() => {
2135 return data.filter((item) => {
2136 return actions.some(
2137 (action) => action.supportsBulk && (!action.isEligible || action.isEligible(item))
2138 );
2139 });
2140 }, [data, actions]);
2141 const selectedItems = data.filter(
2142 (item) => selection.includes(getItemId(item)) && selectableItems.includes(item)
2143 );
2144 const areAllSelected = selectedItems.length === selectableItems.length;
2145 return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2146 import_components3.CheckboxControl,
2147 {
2148 className: "dataviews-view-table-selection-checkbox",
2149 __nextHasNoMarginBottom: true,
2150 checked: areAllSelected,
2151 indeterminate: !areAllSelected && !!selectedItems.length,
2152 onChange: () => {
2153 if (areAllSelected) {
2154 onChangeSelection([]);
2155 } else {
2156 onChangeSelection(
2157 selectableItems.map((item) => getItemId(item))
2158 );
2159 }
2160 },
2161 "aria-label": areAllSelected ? (0, import_i18n10.__)("Deselect all") : (0, import_i18n10.__)("Select all")
2162 }
2163 );
2164 }
2165
2166 // packages/dataviews/build-module/dataviews-layouts/table/column-header-menu.js
2167 var import_i18n11 = __toESM(require_i18n());
2168 var import_components4 = __toESM(require_components());
2169 var import_element5 = __toESM(require_element());
2170
2171 // packages/dataviews/build-module/utils/get-hideable-fields.js
2172 function getHideableFields(view, fields) {
2173 const togglableFields = [
2174 view?.titleField,
2175 view?.mediaField,
2176 view?.descriptionField
2177 ].filter(Boolean);
2178 return fields.filter(
2179 (f2) => !togglableFields.includes(f2.id) && f2.type !== "media" && f2.enableHiding !== false
2180 );
2181 }
2182
2183 // packages/dataviews/build-module/dataviews-layouts/table/column-header-menu.js
2184 var import_jsx_runtime32 = __toESM(require_jsx_runtime());
2185 var { Menu: Menu2 } = unlock(import_components4.privateApis);
2186 function WithMenuSeparators({ children }) {
2187 return import_element5.Children.toArray(children).filter(Boolean).map((child, i2) => /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_element5.Fragment, { children: [
2188 i2 > 0 && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.Separator, {}),
2189 child
2190 ] }, i2));
2191 }
2192 var _HeaderMenu = (0, import_element5.forwardRef)(function HeaderMenu({
2193 fieldId,
2194 view,
2195 fields,
2196 onChangeView,
2197 onHide,
2198 setOpenedFilter,
2199 canMove = true,
2200 canInsertLeft = true,
2201 canInsertRight = true
2202 }, ref) {
2203 const visibleFieldIds = view.fields ?? [];
2204 const index = visibleFieldIds?.indexOf(fieldId);
2205 const isSorted = view.sort?.field === fieldId;
2206 let isHidable = false;
2207 let isSortable = false;
2208 let canAddFilter = false;
2209 let operators = [];
2210 const field = fields.find((f2) => f2.id === fieldId);
2211 const { setIsShowingFilter } = (0, import_element5.useContext)(dataviews_context_default);
2212 if (!field) {
2213 return null;
2214 }
2215 isHidable = field.enableHiding !== false;
2216 isSortable = field.enableSorting !== false;
2217 const header = field.header;
2218 operators = !!field.filterBy && field.filterBy?.operators || [];
2219 canAddFilter = !view.filters?.some((_filter) => fieldId === _filter.field) && !!(field.hasElements || field.Edit) && field.filterBy !== false && !field.filterBy?.isPrimary;
2220 if (!isSortable && !canMove && !isHidable && !canAddFilter) {
2221 return header;
2222 }
2223 const hiddenFields = getHideableFields(view, fields).filter(
2224 (f2) => !visibleFieldIds.includes(f2.id)
2225 );
2226 const canInsert = (canInsertLeft || canInsertRight) && !!hiddenFields.length;
2227 return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Menu2, { children: [
2228 /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
2229 Menu2.TriggerButton,
2230 {
2231 render: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2232 import_components4.Button,
2233 {
2234 size: "compact",
2235 className: "dataviews-view-table-header-button",
2236 ref,
2237 variant: "tertiary"
2238 }
2239 ),
2240 children: [
2241 header,
2242 view.sort && isSorted && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { "aria-hidden": "true", children: sortArrows[view.sort.direction] })
2243 ]
2244 }
2245 ),
2246 /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.Popover, { style: { minWidth: "240px" }, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(WithMenuSeparators, { children: [
2247 isSortable && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.Group, { children: SORTING_DIRECTIONS.map(
2248 (direction) => {
2249 const isChecked = view.sort && isSorted && view.sort.direction === direction;
2250 const value = `${fieldId}-${direction}`;
2251 return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2252 Menu2.RadioItem,
2253 {
2254 name: "view-table-sorting",
2255 value,
2256 checked: isChecked,
2257 onChange: () => {
2258 onChangeView({
2259 ...view,
2260 sort: {
2261 field: fieldId,
2262 direction
2263 },
2264 showLevels: false
2265 });
2266 },
2267 children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: sortLabels[direction] })
2268 },
2269 value
2270 );
2271 }
2272 ) }),
2273 canAddFilter && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2274 Menu2.Item,
2275 {
2276 prefix: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_components4.Icon, { icon: funnel_default }),
2277 onClick: () => {
2278 setOpenedFilter(fieldId);
2279 setIsShowingFilter(true);
2280 onChangeView({
2281 ...view,
2282 page: 1,
2283 filters: [
2284 ...view.filters || [],
2285 {
2286 field: fieldId,
2287 value: void 0,
2288 operator: operators[0]
2289 }
2290 ]
2291 });
2292 },
2293 children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: (0, import_i18n11.__)("Add filter") })
2294 }
2295 ) }),
2296 (canMove || isHidable || canInsert) && field && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Menu2.Group, { children: [
2297 canMove && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2298 Menu2.Item,
2299 {
2300 prefix: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_components4.Icon, { icon: arrow_left_default }),
2301 disabled: index < 1,
2302 onClick: () => {
2303 onChangeView({
2304 ...view,
2305 fields: [
2306 ...visibleFieldIds.slice(
2307 0,
2308 index - 1
2309 ) ?? [],
2310 fieldId,
2311 visibleFieldIds[index - 1],
2312 ...visibleFieldIds.slice(
2313 index + 1
2314 )
2315 ]
2316 });
2317 },
2318 children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: (0, import_i18n11.__)("Move left") })
2319 }
2320 ),
2321 canMove && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2322 Menu2.Item,
2323 {
2324 prefix: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_components4.Icon, { icon: arrow_right_default }),
2325 disabled: index >= visibleFieldIds.length - 1,
2326 onClick: () => {
2327 onChangeView({
2328 ...view,
2329 fields: [
2330 ...visibleFieldIds.slice(
2331 0,
2332 index
2333 ) ?? [],
2334 visibleFieldIds[index + 1],
2335 fieldId,
2336 ...visibleFieldIds.slice(
2337 index + 2
2338 )
2339 ]
2340 });
2341 },
2342 children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: (0, import_i18n11.__)("Move right") })
2343 }
2344 ),
2345 canInsertLeft && !!hiddenFields.length && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Menu2, { children: [
2346 /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.SubmenuTriggerItem, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: (0, import_i18n11.__)("Insert left") }) }),
2347 /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.Popover, { children: hiddenFields.map((hiddenField) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2348 Menu2.Item,
2349 {
2350 onClick: () => {
2351 onChangeView({
2352 ...view,
2353 fields: [
2354 ...visibleFieldIds.slice(
2355 0,
2356 index
2357 ),
2358 hiddenField.id,
2359 ...visibleFieldIds.slice(
2360 index
2361 )
2362 ]
2363 });
2364 },
2365 children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: hiddenField.label })
2366 },
2367 hiddenField.id
2368 )) })
2369 ] }),
2370 canInsertRight && !!hiddenFields.length && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Menu2, { children: [
2371 /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.SubmenuTriggerItem, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: (0, import_i18n11.__)("Insert right") }) }),
2372 /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.Popover, { children: hiddenFields.map((hiddenField) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2373 Menu2.Item,
2374 {
2375 onClick: () => {
2376 onChangeView({
2377 ...view,
2378 fields: [
2379 ...visibleFieldIds.slice(
2380 0,
2381 index + 1
2382 ),
2383 hiddenField.id,
2384 ...visibleFieldIds.slice(
2385 index + 1
2386 )
2387 ]
2388 });
2389 },
2390 children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: hiddenField.label })
2391 },
2392 hiddenField.id
2393 )) })
2394 ] }),
2395 isHidable && field && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2396 Menu2.Item,
2397 {
2398 prefix: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_components4.Icon, { icon: unseen_default }),
2399 onClick: () => {
2400 onHide(field);
2401 onChangeView({
2402 ...view,
2403 fields: visibleFieldIds.filter(
2404 (id) => id !== fieldId
2405 )
2406 });
2407 },
2408 children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Menu2.ItemLabel, { children: (0, import_i18n11.__)("Hide column") })
2409 }
2410 )
2411 ] })
2412 ] }) })
2413 ] });
2414 });
2415 var ColumnHeaderMenu = _HeaderMenu;
2416 var column_header_menu_default = ColumnHeaderMenu;
2417
2418 // packages/dataviews/build-module/dataviews-layouts/table/column-primary.js
2419 var import_components5 = __toESM(require_components());
2420
2421 // packages/dataviews/build-module/dataviews-layouts/utils/item-click-wrapper.js
2422 var import_element6 = __toESM(require_element());
2423 var import_jsx_runtime33 = __toESM(require_jsx_runtime());
2424 function getClickableItemProps({
2425 item,
2426 isItemClickable: isItemClickable2,
2427 onClickItem,
2428 className
2429 }) {
2430 if (!isItemClickable2(item) || !onClickItem) {
2431 return { className };
2432 }
2433 return {
2434 className: className ? `${className} ${className}--clickable` : void 0,
2435 role: "button",
2436 tabIndex: 0,
2437 onClick: (event) => {
2438 event.stopPropagation();
2439 onClickItem(item);
2440 },
2441 onKeyDown: (event) => {
2442 if (event.key === "Enter" || event.key === "" || event.key === " ") {
2443 event.stopPropagation();
2444 onClickItem(item);
2445 }
2446 }
2447 };
2448 }
2449 function ItemClickWrapper({
2450 item,
2451 isItemClickable: isItemClickable2,
2452 onClickItem,
2453 renderItemLink,
2454 className,
2455 children,
2456 ...extraProps
2457 }) {
2458 if (!isItemClickable2(item)) {
2459 return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className, ...extraProps, children });
2460 }
2461 if (renderItemLink) {
2462 const renderedElement = renderItemLink({
2463 item,
2464 className: `${className} ${className}--clickable`,
2465 ...extraProps,
2466 children
2467 });
2468 return (0, import_element6.cloneElement)(renderedElement, {
2469 onClick: (event) => {
2470 event.stopPropagation();
2471 if (renderedElement.props.onClick) {
2472 renderedElement.props.onClick(event);
2473 }
2474 },
2475 onKeyDown: (event) => {
2476 if (event.key === "Enter" || event.key === "" || event.key === " ") {
2477 event.stopPropagation();
2478 if (renderedElement.props.onKeyDown) {
2479 renderedElement.props.onKeyDown(event);
2480 }
2481 }
2482 }
2483 });
2484 }
2485 const clickProps = getClickableItemProps({
2486 item,
2487 isItemClickable: isItemClickable2,
2488 onClickItem,
2489 className
2490 });
2491 return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { ...clickProps, ...extraProps, children });
2492 }
2493
2494 // packages/dataviews/build-module/dataviews-layouts/table/column-primary.js
2495 var import_jsx_runtime34 = __toESM(require_jsx_runtime());
2496 function ColumnPrimary({
2497 item,
2498 level,
2499 titleField,
2500 mediaField,
2501 descriptionField: descriptionField2,
2502 onClickItem,
2503 renderItemLink,
2504 isItemClickable: isItemClickable2
2505 }) {
2506 return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_components5.__experimentalHStack, { spacing: 3, justify: "flex-start", children: [
2507 mediaField && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2508 ItemClickWrapper,
2509 {
2510 item,
2511 isItemClickable: isItemClickable2,
2512 onClickItem,
2513 renderItemLink,
2514 className: "dataviews-view-table__cell-content-wrapper dataviews-column-primary__media",
2515 "aria-label": isItemClickable2(item) && (!!onClickItem || !!renderItemLink) && !!titleField ? titleField.getValue?.({ item }) : void 0,
2516 children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2517 mediaField.render,
2518 {
2519 item,
2520 field: mediaField,
2521 config: { sizes: "32px" }
2522 }
2523 )
2524 }
2525 ),
2526 /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
2527 import_components5.__experimentalVStack,
2528 {
2529 spacing: 0,
2530 alignment: "flex-start",
2531 className: "dataviews-view-table__primary-column-content",
2532 children: [
2533 titleField && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
2534 ItemClickWrapper,
2535 {
2536 item,
2537 isItemClickable: isItemClickable2,
2538 onClickItem,
2539 renderItemLink,
2540 className: "dataviews-view-table__cell-content-wrapper dataviews-title-field",
2541 children: [
2542 level !== void 0 && level > 0 && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: "dataviews-view-table__level", children: [
2543 "\u2014".repeat(level),
2544 "\xA0"
2545 ] }),
2546 /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(titleField.render, { item, field: titleField })
2547 ]
2548 }
2549 ),
2550 descriptionField2 && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2551 descriptionField2.render,
2552 {
2553 item,
2554 field: descriptionField2
2555 }
2556 )
2557 ]
2558 }
2559 )
2560 ] });
2561 }
2562 var column_primary_default = ColumnPrimary;
2563
2564 // packages/dataviews/build-module/dataviews-layouts/table/use-is-horizontal-scroll-end.js
2565 var import_compose3 = __toESM(require_compose());
2566 var import_element7 = __toESM(require_element());
2567 var import_i18n12 = __toESM(require_i18n());
2568 var isScrolledToEnd = (element) => {
2569 if ((0, import_i18n12.isRTL)()) {
2570 const scrollLeft = Math.abs(element.scrollLeft);
2571 return scrollLeft <= 1;
2572 }
2573 return element.scrollLeft + element.clientWidth >= element.scrollWidth - 1;
2574 };
2575 function useIsHorizontalScrollEnd({
2576 scrollContainerRef,
2577 enabled = false
2578 }) {
2579 const [isHorizontalScrollEnd, setIsHorizontalScrollEnd] = (0, import_element7.useState)(false);
2580 const handleIsHorizontalScrollEnd = (0, import_compose3.useDebounce)(
2581 (0, import_element7.useCallback)(() => {
2582 const scrollContainer = scrollContainerRef.current;
2583 if (scrollContainer) {
2584 setIsHorizontalScrollEnd(isScrolledToEnd(scrollContainer));
2585 }
2586 }, [scrollContainerRef, setIsHorizontalScrollEnd]),
2587 200
2588 );
2589 (0, import_element7.useEffect)(() => {
2590 if (typeof window === "undefined" || !enabled || !scrollContainerRef.current) {
2591 return () => {
2592 };
2593 }
2594 handleIsHorizontalScrollEnd();
2595 scrollContainerRef.current.addEventListener(
2596 "scroll",
2597 handleIsHorizontalScrollEnd
2598 );
2599 window.addEventListener("resize", handleIsHorizontalScrollEnd);
2600 return () => {
2601 scrollContainerRef.current?.removeEventListener(
2602 "scroll",
2603 handleIsHorizontalScrollEnd
2604 );
2605 window.removeEventListener("resize", handleIsHorizontalScrollEnd);
2606 };
2607 }, [scrollContainerRef, enabled]);
2608 return isHorizontalScrollEnd;
2609 }
2610
2611 // packages/dataviews/build-module/dataviews-layouts/utils/get-data-by-group.js
2612 function getDataByGroup(data, groupByField) {
2613 return data.reduce((groups, item) => {
2614 const groupName = groupByField.getValue({ item });
2615 if (!groups.has(groupName)) {
2616 groups.set(groupName, []);
2617 }
2618 groups.get(groupName)?.push(item);
2619 return groups;
2620 }, /* @__PURE__ */ new Map());
2621 }
2622
2623 // packages/dataviews/build-module/components/dataviews-view-config/properties-section.js
2624 var import_components6 = __toESM(require_components());
2625 var import_i18n13 = __toESM(require_i18n());
2626 var import_element8 = __toESM(require_element());
2627 var import_jsx_runtime35 = __toESM(require_jsx_runtime());
2628 function FieldItem({
2629 field,
2630 isVisible: isVisible2,
2631 onToggleVisibility
2632 }) {
2633 return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_components6.__experimentalItem, { onClick: field.enableHiding ? onToggleVisibility : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_components6.__experimentalHStack, { expanded: true, justify: "flex-start", alignment: "center", children: [
2634 /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { style: { height: 24, width: 24 }, children: isVisible2 && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_components6.Icon, { icon: check_default }) }),
2635 /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "dataviews-view-config__label", children: field.label })
2636 ] }) });
2637 }
2638 function isDefined(item) {
2639 return !!item;
2640 }
2641 function PropertiesSection({
2642 showLabel = true
2643 }) {
2644 const { view, fields, onChangeView } = (0, import_element8.useContext)(dataviews_context_default);
2645 const regularFields = getHideableFields(view, fields);
2646 if (!regularFields?.length) {
2647 return null;
2648 }
2649 const titleField = fields.find((f2) => f2.id === view.titleField);
2650 const previewField = fields.find((f2) => f2.id === view.mediaField);
2651 const descriptionField2 = fields.find(
2652 (f2) => f2.id === view.descriptionField
2653 );
2654 const lockedFields = [
2655 {
2656 field: titleField,
2657 isVisibleFlag: "showTitle"
2658 },
2659 {
2660 field: previewField,
2661 isVisibleFlag: "showMedia"
2662 },
2663 {
2664 field: descriptionField2,
2665 isVisibleFlag: "showDescription"
2666 }
2667 ].filter(({ field }) => isDefined(field));
2668 const visibleFieldIds = view.fields ?? [];
2669 const visibleRegularFieldsCount = regularFields.filter(
2670 (f2) => visibleFieldIds.includes(f2.id)
2671 ).length;
2672 let visibleLockedFields = lockedFields.filter(
2673 ({ field, isVisibleFlag }) => (
2674 // @ts-expect-error
2675 isDefined(field) && (view[isVisibleFlag] ?? true)
2676 )
2677 );
2678 const totalVisibleFields = visibleLockedFields.length + visibleRegularFieldsCount;
2679 if (totalVisibleFields === 1) {
2680 if (visibleLockedFields.length === 1) {
2681 visibleLockedFields = visibleLockedFields.map((locked) => ({
2682 ...locked,
2683 field: { ...locked.field, enableHiding: false }
2684 }));
2685 }
2686 }
2687 const hiddenLockedFields = lockedFields.filter(
2688 ({ field, isVisibleFlag }) => (
2689 // @ts-expect-error
2690 isDefined(field) && !(view[isVisibleFlag] ?? true)
2691 )
2692 );
2693 return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_components6.__experimentalVStack, { className: "dataviews-field-control", spacing: 0, children: [
2694 showLabel && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_components6.BaseControl.VisualLabel, { children: (0, import_i18n13.__)("Properties") }),
2695 /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_components6.__experimentalVStack, { className: "dataviews-view-config__properties", spacing: 0, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_components6.__experimentalItemGroup, { isBordered: true, isSeparated: true, size: "medium", children: [
2696 visibleLockedFields.map(({ field, isVisibleFlag }) => {
2697 return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2698 FieldItem,
2699 {
2700 field,
2701 isVisible: true,
2702 onToggleVisibility: () => {
2703 onChangeView({
2704 ...view,
2705 [isVisibleFlag]: false
2706 });
2707 }
2708 },
2709 field.id
2710 );
2711 }),
2712 hiddenLockedFields.map(({ field, isVisibleFlag }) => {
2713 return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2714 FieldItem,
2715 {
2716 field,
2717 isVisible: false,
2718 onToggleVisibility: () => {
2719 onChangeView({
2720 ...view,
2721 [isVisibleFlag]: true
2722 });
2723 }
2724 },
2725 field.id
2726 );
2727 }),
2728 regularFields.map((field) => {
2729 const isVisible2 = visibleFieldIds.includes(field.id);
2730 const isLastVisible = totalVisibleFields === 1 && isVisible2;
2731 const fieldToRender = isLastVisible ? { ...field, enableHiding: false } : field;
2732 return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2733 FieldItem,
2734 {
2735 field: fieldToRender,
2736 isVisible: isVisible2,
2737 onToggleVisibility: () => {
2738 onChangeView({
2739 ...view,
2740 fields: isVisible2 ? visibleFieldIds.filter(
2741 (fieldId) => fieldId !== field.id
2742 ) : [...visibleFieldIds, field.id]
2743 });
2744 }
2745 },
2746 field.id
2747 );
2748 })
2749 ] }) })
2750 ] });
2751 }
2752
2753 // packages/dataviews/build-module/dataviews-layouts/table/index.js
2754 var import_jsx_runtime36 = __toESM(require_jsx_runtime());
2755 function TableColumnField({
2756 item,
2757 fields,
2758 column,
2759 align
2760 }) {
2761 const field = fields.find((f2) => f2.id === column);
2762 if (!field) {
2763 return null;
2764 }
2765 const className = clsx_default("dataviews-view-table__cell-content-wrapper", {
2766 "dataviews-view-table__cell-align-end": align === "end",
2767 "dataviews-view-table__cell-align-center": align === "center"
2768 });
2769 return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(field.render, { item, field }) });
2770 }
2771 function TableRow({
2772 hasBulkActions,
2773 item,
2774 level,
2775 actions,
2776 fields,
2777 id,
2778 view,
2779 titleField,
2780 mediaField,
2781 descriptionField: descriptionField2,
2782 selection,
2783 getItemId,
2784 isItemClickable: isItemClickable2,
2785 onClickItem,
2786 renderItemLink,
2787 onChangeSelection,
2788 isActionsColumnSticky,
2789 posinset
2790 }) {
2791 const { paginationInfo } = (0, import_element9.useContext)(dataviews_context_default);
2792 const hasPossibleBulkAction = useHasAPossibleBulkAction(actions, item);
2793 const isSelected2 = hasPossibleBulkAction && selection.includes(id);
2794 const [isHovered, setIsHovered] = (0, import_element9.useState)(false);
2795 const {
2796 showTitle = true,
2797 showMedia = true,
2798 showDescription = true,
2799 infiniteScrollEnabled
2800 } = view;
2801 const handleMouseEnter = () => {
2802 setIsHovered(true);
2803 };
2804 const handleMouseLeave = () => {
2805 setIsHovered(false);
2806 };
2807 const isTouchDeviceRef = (0, import_element9.useRef)(false);
2808 const columns = view.fields ?? [];
2809 const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField2 && showDescription;
2810 return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
2811 "tr",
2812 {
2813 className: clsx_default("dataviews-view-table__row", {
2814 "is-selected": hasPossibleBulkAction && isSelected2,
2815 "is-hovered": isHovered,
2816 "has-bulk-actions": hasPossibleBulkAction
2817 }),
2818 onMouseEnter: handleMouseEnter,
2819 onMouseLeave: handleMouseLeave,
2820 onTouchStart: () => {
2821 isTouchDeviceRef.current = true;
2822 },
2823 "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0,
2824 "aria-posinset": posinset,
2825 role: infiniteScrollEnabled ? "article" : void 0,
2826 onClick: (event) => {
2827 if (!hasPossibleBulkAction) {
2828 return;
2829 }
2830 if (!isTouchDeviceRef.current && document.getSelection()?.type !== "Range") {
2831 if ((0, import_keycodes.isAppleOS)() ? event.metaKey : event.ctrlKey) {
2832 onChangeSelection(
2833 selection.includes(id) ? selection.filter(
2834 (itemId) => id !== itemId
2835 ) : [...selection, id]
2836 );
2837 } else {
2838 onChangeSelection(
2839 selection.includes(id) ? selection.filter(
2840 (itemId) => id !== itemId
2841 ) : [id]
2842 );
2843 }
2844 }
2845 },
2846 children: [
2847 hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("td", { className: "dataviews-view-table__checkbox-column", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "dataviews-view-table__cell-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2848 DataViewsSelectionCheckbox,
2849 {
2850 item,
2851 selection,
2852 onChangeSelection,
2853 getItemId,
2854 titleField,
2855 disabled: !hasPossibleBulkAction
2856 }
2857 ) }) }),
2858 hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("td", { children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2859 column_primary_default,
2860 {
2861 item,
2862 level,
2863 titleField: showTitle ? titleField : void 0,
2864 mediaField: showMedia ? mediaField : void 0,
2865 descriptionField: showDescription ? descriptionField2 : void 0,
2866 isItemClickable: isItemClickable2,
2867 onClickItem,
2868 renderItemLink
2869 }
2870 ) }),
2871 columns.map((column) => {
2872 const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {};
2873 return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2874 "td",
2875 {
2876 style: {
2877 width,
2878 maxWidth,
2879 minWidth
2880 },
2881 children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2882 TableColumnField,
2883 {
2884 fields,
2885 item,
2886 column,
2887 align
2888 }
2889 )
2890 },
2891 column
2892 );
2893 }),
2894 !!actions?.length && // Disable reason: we are not making the element interactive,
2895 // but preventing any click events from bubbling up to the
2896 // table row. This allows us to add a click handler to the row
2897 // itself (to toggle row selection) without erroneously
2898 // intercepting click events from ItemActions.
2899 /* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/click-events-have-key-events */
2900 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2901 "td",
2902 {
2903 className: clsx_default("dataviews-view-table__actions-column", {
2904 "dataviews-view-table__actions-column--sticky": true,
2905 "dataviews-view-table__actions-column--stuck": isActionsColumnSticky
2906 }),
2907 onClick: (e2) => e2.stopPropagation(),
2908 children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ItemActions, { item, actions })
2909 }
2910 )
2911 ]
2912 }
2913 );
2914 }
2915 function ViewTable({
2916 actions,
2917 data,
2918 fields,
2919 getItemId,
2920 getItemLevel,
2921 isLoading = false,
2922 onChangeView,
2923 onChangeSelection,
2924 selection,
2925 setOpenedFilter,
2926 onClickItem,
2927 isItemClickable: isItemClickable2,
2928 renderItemLink,
2929 view,
2930 className,
2931 empty
2932 }) {
2933 const { containerRef } = (0, import_element9.useContext)(dataviews_context_default);
2934 const headerMenuRefs = (0, import_element9.useRef)(/* @__PURE__ */ new Map());
2935 const headerMenuToFocusRef = (0, import_element9.useRef)();
2936 const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, import_element9.useState)();
2937 const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data);
2938 const [contextMenuAnchor, setContextMenuAnchor] = (0, import_element9.useState)(null);
2939 (0, import_element9.useEffect)(() => {
2940 if (headerMenuToFocusRef.current) {
2941 headerMenuToFocusRef.current.focus();
2942 headerMenuToFocusRef.current = void 0;
2943 }
2944 });
2945 const tableNoticeId = (0, import_element9.useId)();
2946 const isHorizontalScrollEnd = useIsHorizontalScrollEnd({
2947 scrollContainerRef: containerRef,
2948 enabled: !!actions?.length
2949 });
2950 if (nextHeaderMenuToFocus) {
2951 headerMenuToFocusRef.current = nextHeaderMenuToFocus;
2952 setNextHeaderMenuToFocus(void 0);
2953 return;
2954 }
2955 const onHide = (field) => {
2956 const hidden = headerMenuRefs.current.get(field.id);
2957 const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : void 0;
2958 setNextHeaderMenuToFocus(fallback?.node);
2959 };
2960 const handleHeaderContextMenu = (event) => {
2961 event.preventDefault();
2962 event.stopPropagation();
2963 const virtualAnchor = {
2964 getBoundingClientRect: () => ({
2965 x: event.clientX,
2966 y: event.clientY,
2967 top: event.clientY,
2968 left: event.clientX,
2969 right: event.clientX,
2970 bottom: event.clientY,
2971 width: 0,
2972 height: 0,
2973 toJSON: () => ({})
2974 })
2975 };
2976 window.requestAnimationFrame(() => {
2977 setContextMenuAnchor(virtualAnchor);
2978 });
2979 };
2980 const hasData = !!data?.length;
2981 const titleField = fields.find((field) => field.id === view.titleField);
2982 const mediaField = fields.find((field) => field.id === view.mediaField);
2983 const descriptionField2 = fields.find(
2984 (field) => field.id === view.descriptionField
2985 );
2986 const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null;
2987 const dataByGroup = groupField ? getDataByGroup(data, groupField) : null;
2988 const { showTitle = true, showMedia = true, showDescription = true } = view;
2989 const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField2 && showDescription;
2990 const columns = view.fields ?? [];
2991 const headerMenuRef = (column, index) => (node) => {
2992 if (node) {
2993 headerMenuRefs.current.set(column, {
2994 node,
2995 fallback: columns[index > 0 ? index - 1 : 1]
2996 });
2997 } else {
2998 headerMenuRefs.current.delete(column);
2999 }
3000 };
3001 const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup;
3002 return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [
3003 /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
3004 "table",
3005 {
3006 className: clsx_default("dataviews-view-table", className, {
3007 [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes(
3008 view.layout.density
3009 ),
3010 "has-bulk-actions": hasBulkActions
3011 }),
3012 "aria-busy": isLoading,
3013 "aria-describedby": tableNoticeId,
3014 role: isInfiniteScroll ? "feed" : void 0,
3015 children: [
3016 /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("colgroup", { children: [
3017 hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("col", { className: "dataviews-view-table__col-checkbox" }),
3018 hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("col", { className: "dataviews-view-table__col-first-data" }),
3019 columns.map((column, index) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3020 "col",
3021 {
3022 className: clsx_default(
3023 `dataviews-view-table__col-${column}`,
3024 {
3025 "dataviews-view-table__col-first-data": !hasPrimaryColumn && index === 0
3026 }
3027 )
3028 },
3029 `col-${column}`
3030 )),
3031 !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("col", { className: "dataviews-view-table__col-actions" })
3032 ] }),
3033 contextMenuAnchor && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3034 import_components7.Popover,
3035 {
3036 anchor: contextMenuAnchor,
3037 onClose: () => setContextMenuAnchor(null),
3038 placement: "bottom-start",
3039 children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(PropertiesSection, { showLabel: false })
3040 }
3041 ),
3042 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("thead", { onContextMenu: handleHeaderContextMenu, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("tr", { className: "dataviews-view-table__row", children: [
3043 hasBulkActions && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3044 "th",
3045 {
3046 className: "dataviews-view-table__checkbox-column",
3047 scope: "col",
3048 onContextMenu: handleHeaderContextMenu,
3049 children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3050 BulkSelectionCheckbox,
3051 {
3052 selection,
3053 onChangeSelection,
3054 data,
3055 actions,
3056 getItemId
3057 }
3058 )
3059 }
3060 ),
3061 hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("th", { scope: "col", children: titleField && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3062 column_header_menu_default,
3063 {
3064 ref: headerMenuRef(
3065 titleField.id,
3066 0
3067 ),
3068 fieldId: titleField.id,
3069 view,
3070 fields,
3071 onChangeView,
3072 onHide,
3073 setOpenedFilter,
3074 canMove: false,
3075 canInsertLeft: false,
3076 canInsertRight: view.layout?.enableMoving ?? true
3077 }
3078 ) }),
3079 columns.map((column, index) => {
3080 const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {};
3081 const canInsertOrMove = view.layout?.enableMoving ?? true;
3082 return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3083 "th",
3084 {
3085 style: {
3086 width,
3087 maxWidth,
3088 minWidth,
3089 textAlign: align
3090 },
3091 "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : void 0,
3092 scope: "col",
3093 children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3094 column_header_menu_default,
3095 {
3096 ref: headerMenuRef(column, index),
3097 fieldId: column,
3098 view,
3099 fields,
3100 onChangeView,
3101 onHide,
3102 setOpenedFilter,
3103 canMove: canInsertOrMove,
3104 canInsertLeft: canInsertOrMove,
3105 canInsertRight: canInsertOrMove
3106 }
3107 )
3108 },
3109 column
3110 );
3111 }),
3112 !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3113 "th",
3114 {
3115 className: clsx_default(
3116 "dataviews-view-table__actions-column",
3117 {
3118 "dataviews-view-table__actions-column--sticky": true,
3119 "dataviews-view-table__actions-column--stuck": !isHorizontalScrollEnd
3120 }
3121 ),
3122 children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "dataviews-view-table-header", children: (0, import_i18n14.__)("Actions") })
3123 }
3124 )
3125 ] }) }),
3126 hasData && groupField && dataByGroup ? Array.from(dataByGroup.entries()).map(
3127 ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("tbody", { children: [
3128 /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("tr", { className: "dataviews-view-table__group-header-row", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3129 "td",
3130 {
3131 colSpan: columns.length + (hasPrimaryColumn ? 1 : 0) + (hasBulkActions ? 1 : 0) + (actions?.length ? 1 : 0),
3132 className: "dataviews-view-table__group-header-cell",
3133 children: (0, import_i18n14.sprintf)(
3134 // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022".
3135 (0, import_i18n14.__)("%1$s: %2$s"),
3136 groupField.label,
3137 groupName
3138 )
3139 }
3140 ) }),
3141 groupItems.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3142 TableRow,
3143 {
3144 item,
3145 level: view.showLevels && typeof getItemLevel === "function" ? getItemLevel(item) : void 0,
3146 hasBulkActions,
3147 actions,
3148 fields,
3149 id: getItemId(item) || index.toString(),
3150 view,
3151 titleField,
3152 mediaField,
3153 descriptionField: descriptionField2,
3154 selection,
3155 getItemId,
3156 onChangeSelection,
3157 onClickItem,
3158 renderItemLink,
3159 isItemClickable: isItemClickable2,
3160 isActionsColumnSticky: !isHorizontalScrollEnd
3161 },
3162 getItemId(item)
3163 ))
3164 ] }, `group-${groupName}`)
3165 ) : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("tbody", { children: hasData && data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3166 TableRow,
3167 {
3168 item,
3169 level: view.showLevels && typeof getItemLevel === "function" ? getItemLevel(item) : void 0,
3170 hasBulkActions,
3171 actions,
3172 fields,
3173 id: getItemId(item) || index.toString(),
3174 view,
3175 titleField,
3176 mediaField,
3177 descriptionField: descriptionField2,
3178 selection,
3179 getItemId,
3180 onChangeSelection,
3181 onClickItem,
3182 renderItemLink,
3183 isItemClickable: isItemClickable2,
3184 isActionsColumnSticky: !isHorizontalScrollEnd,
3185 posinset: isInfiniteScroll ? index + 1 : void 0
3186 },
3187 getItemId(item)
3188 )) })
3189 ]
3190 }
3191 ),
3192 /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
3193 "div",
3194 {
3195 className: clsx_default({
3196 "dataviews-loading": isLoading,
3197 "dataviews-no-results": !hasData && !isLoading
3198 }),
3199 id: tableNoticeId,
3200 children: [
3201 !hasData && (isLoading ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components7.Spinner, {}) }) : empty),
3202 hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_components7.Spinner, {}) })
3203 ]
3204 }
3205 )
3206 ] });
3207 }
3208 var table_default = ViewTable;
3209
3210 // packages/dataviews/build-module/dataviews-layouts/grid/index.js
3211 var import_components10 = __toESM(require_components());
3212 var import_i18n17 = __toESM(require_i18n());
3213
3214 // packages/dataviews/build-module/dataviews-layouts/grid/composite-grid.js
3215 var import_components9 = __toESM(require_components());
3216 var import_i18n16 = __toESM(require_i18n());
3217 var import_compose4 = __toESM(require_compose());
3218 var import_keycodes2 = __toESM(require_keycodes());
3219 var import_element11 = __toESM(require_element());
3220
3221 // packages/dataviews/build-module/dataviews-layouts/grid/preview-size-picker.js
3222 var import_components8 = __toESM(require_components());
3223 var import_i18n15 = __toESM(require_i18n());
3224 var import_element10 = __toESM(require_element());
3225 var import_jsx_runtime37 = __toESM(require_jsx_runtime());
3226 var imageSizes = [
3227 {
3228 value: 120,
3229 breakpoint: 1
3230 },
3231 {
3232 value: 170,
3233 breakpoint: 1
3234 },
3235 {
3236 value: 230,
3237 breakpoint: 1
3238 },
3239 {
3240 value: 290,
3241 breakpoint: 1112
3242 // at minimum image width, 4 images display at this container size
3243 },
3244 {
3245 value: 350,
3246 breakpoint: 1636
3247 // at minimum image width, 6 images display at this container size
3248 },
3249 {
3250 value: 430,
3251 breakpoint: 588
3252 // at minimum image width, 2 images display at this container size
3253 }
3254 ];
3255 var DEFAULT_PREVIEW_SIZE = imageSizes[2].value;
3256 function useGridColumns() {
3257 const context = (0, import_element10.useContext)(dataviews_context_default);
3258 const view = context.view;
3259 return (0, import_element10.useMemo)(() => {
3260 const containerWidth = context.containerWidth;
3261 const gap = 32;
3262 const previewSize = view.layout?.previewSize ?? DEFAULT_PREVIEW_SIZE;
3263 const columns = Math.floor(
3264 (containerWidth + gap) / (previewSize + gap)
3265 );
3266 return Math.max(1, columns);
3267 }, [context.containerWidth, view.layout?.previewSize]);
3268 }
3269
3270 // packages/dataviews/build-module/dataviews-layouts/grid/composite-grid.js
3271 var import_jsx_runtime38 = __toESM(require_jsx_runtime());
3272 var { Badge } = unlock(import_components9.privateApis);
3273 function chunk(array, size) {
3274 const chunks = [];
3275 for (let i2 = 0, j2 = array.length; i2 < j2; i2 += size) {
3276 chunks.push(array.slice(i2, i2 + size));
3277 }
3278 return chunks;
3279 }
3280 var GridItem = (0, import_element11.forwardRef)(function GridItem2({
3281 view,
3282 selection,
3283 onChangeSelection,
3284 onClickItem,
3285 isItemClickable: isItemClickable2,
3286 renderItemLink,
3287 getItemId,
3288 item,
3289 actions,
3290 mediaField,
3291 titleField,
3292 descriptionField: descriptionField2,
3293 regularFields,
3294 badgeFields,
3295 hasBulkActions,
3296 config,
3297 ...props
3298 }, ref) {
3299 const { showTitle = true, showMedia = true, showDescription = true } = view;
3300 const hasBulkAction = useHasAPossibleBulkAction(actions, item);
3301 const id = getItemId(item);
3302 const instanceId = (0, import_compose4.useInstanceId)(GridItem2);
3303 const isSelected2 = selection.includes(id);
3304 const renderedMediaField = mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3305 mediaField.render,
3306 {
3307 item,
3308 field: mediaField,
3309 config
3310 }
3311 ) : null;
3312 const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(titleField.render, { item, field: titleField }) : null;
3313 const shouldRenderMedia = showMedia && renderedMediaField;
3314 let mediaA11yProps;
3315 let titleA11yProps;
3316 if (isItemClickable2(item) && onClickItem) {
3317 if (renderedTitleField) {
3318 mediaA11yProps = {
3319 "aria-labelledby": `dataviews-view-grid__title-field-${instanceId}`
3320 };
3321 titleA11yProps = {
3322 id: `dataviews-view-grid__title-field-${instanceId}`
3323 };
3324 } else {
3325 mediaA11yProps = {
3326 "aria-label": (0, import_i18n16.__)("Navigate to item")
3327 };
3328 }
3329 }
3330 return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
3331 import_components9.__experimentalVStack,
3332 {
3333 ...props,
3334 ref,
3335 spacing: 0,
3336 className: clsx_default(
3337 props.className,
3338 "dataviews-view-grid__row__gridcell",
3339 "dataviews-view-grid__card",
3340 {
3341 "is-selected": hasBulkAction && isSelected2
3342 }
3343 ),
3344 onClickCapture: (event) => {
3345 props.onClickCapture?.(event);
3346 if ((0, import_keycodes2.isAppleOS)() ? event.metaKey : event.ctrlKey) {
3347 event.stopPropagation();
3348 event.preventDefault();
3349 if (!hasBulkAction) {
3350 return;
3351 }
3352 onChangeSelection(
3353 selection.includes(id) ? selection.filter((itemId) => id !== itemId) : [...selection, id]
3354 );
3355 }
3356 },
3357 children: [
3358 shouldRenderMedia && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3359 ItemClickWrapper,
3360 {
3361 item,
3362 isItemClickable: isItemClickable2,
3363 onClickItem,
3364 renderItemLink,
3365 className: "dataviews-view-grid__media",
3366 ...mediaA11yProps,
3367 children: renderedMediaField
3368 }
3369 ),
3370 hasBulkActions && shouldRenderMedia && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3371 DataViewsSelectionCheckbox,
3372 {
3373 item,
3374 selection,
3375 onChangeSelection,
3376 getItemId,
3377 titleField,
3378 disabled: !hasBulkAction
3379 }
3380 ),
3381 !showTitle && shouldRenderMedia && !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "dataviews-view-grid__media-actions", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ItemActions, { item, actions, isCompact: true }) }),
3382 showTitle && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
3383 import_components9.__experimentalHStack,
3384 {
3385 justify: "space-between",
3386 className: "dataviews-view-grid__title-actions",
3387 children: [
3388 /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3389 ItemClickWrapper,
3390 {
3391 item,
3392 isItemClickable: isItemClickable2,
3393 onClickItem,
3394 renderItemLink,
3395 className: "dataviews-view-grid__title-field dataviews-title-field",
3396 ...titleA11yProps,
3397 children: renderedTitleField
3398 }
3399 ),
3400 !!actions?.length && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3401 ItemActions,
3402 {
3403 item,
3404 actions,
3405 isCompact: true
3406 }
3407 )
3408 ]
3409 }
3410 ),
3411 /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_components9.__experimentalVStack, { spacing: 1, children: [
3412 showDescription && descriptionField2?.render && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3413 descriptionField2.render,
3414 {
3415 item,
3416 field: descriptionField2
3417 }
3418 ),
3419 !!badgeFields?.length && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3420 import_components9.__experimentalHStack,
3421 {
3422 className: "dataviews-view-grid__badge-fields",
3423 spacing: 2,
3424 wrap: true,
3425 alignment: "top",
3426 justify: "flex-start",
3427 children: badgeFields.map((field) => {
3428 return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3429 Badge,
3430 {
3431 className: "dataviews-view-grid__field-value",
3432 children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3433 field.render,
3434 {
3435 item,
3436 field
3437 }
3438 )
3439 },
3440 field.id
3441 );
3442 })
3443 }
3444 ),
3445 !!regularFields?.length && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3446 import_components9.__experimentalVStack,
3447 {
3448 className: "dataviews-view-grid__fields",
3449 spacing: 1,
3450 children: regularFields.map((field) => {
3451 return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3452 import_components9.Flex,
3453 {
3454 className: "dataviews-view-grid__field",
3455 gap: 1,
3456 justify: "flex-start",
3457 expanded: true,
3458 style: { height: "auto" },
3459 direction: "row",
3460 children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
3461 /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_components9.Tooltip, { text: field.label, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_components9.FlexItem, { className: "dataviews-view-grid__field-name", children: field.header }) }),
3462 /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3463 import_components9.FlexItem,
3464 {
3465 className: "dataviews-view-grid__field-value",
3466 style: { maxHeight: "none" },
3467 children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3468 field.render,
3469 {
3470 item,
3471 field
3472 }
3473 )
3474 }
3475 )
3476 ] })
3477 },
3478 field.id
3479 );
3480 })
3481 }
3482 )
3483 ] })
3484 ]
3485 }
3486 );
3487 });
3488 function CompositeGrid({
3489 data,
3490 isInfiniteScroll,
3491 className,
3492 isLoading,
3493 view,
3494 fields,
3495 selection,
3496 onChangeSelection,
3497 onClickItem,
3498 isItemClickable: isItemClickable2,
3499 renderItemLink,
3500 getItemId,
3501 actions
3502 }) {
3503 const { paginationInfo, resizeObserverRef } = (0, import_element11.useContext)(dataviews_context_default);
3504 const gridColumns = useGridColumns();
3505 const hasBulkActions = useSomeItemHasAPossibleBulkAction(actions, data);
3506 const titleField = fields.find(
3507 (field) => field.id === view?.titleField
3508 );
3509 const mediaField = fields.find(
3510 (field) => field.id === view?.mediaField
3511 );
3512 const descriptionField2 = fields.find(
3513 (field) => field.id === view?.descriptionField
3514 );
3515 const otherFields = view.fields ?? [];
3516 const { regularFields, badgeFields } = otherFields.reduce(
3517 (accumulator, fieldId) => {
3518 const field = fields.find((f2) => f2.id === fieldId);
3519 if (!field) {
3520 return accumulator;
3521 }
3522 const key = view.layout?.badgeFields?.includes(fieldId) ? "badgeFields" : "regularFields";
3523 accumulator[key].push(field);
3524 return accumulator;
3525 },
3526 { regularFields: [], badgeFields: [] }
3527 );
3528 const size = "900px";
3529 const totalRows = Math.ceil(data.length / gridColumns);
3530 return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3531 import_components9.Composite,
3532 {
3533 role: isInfiniteScroll ? "feed" : "grid",
3534 className: clsx_default("dataviews-view-grid", className),
3535 focusWrap: true,
3536 "aria-busy": isLoading,
3537 "aria-rowcount": isInfiniteScroll ? void 0 : totalRows,
3538 ref: resizeObserverRef,
3539 children: chunk(data, gridColumns).map((row, i2) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3540 import_components9.Composite.Row,
3541 {
3542 render: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3543 "div",
3544 {
3545 role: "row",
3546 "aria-rowindex": i2 + 1,
3547 "aria-label": (0, import_i18n16.sprintf)(
3548 /* translators: %d: The row number in the grid */
3549 (0, import_i18n16.__)("Row %d"),
3550 i2 + 1
3551 ),
3552 className: "dataviews-view-grid__row",
3553 style: {
3554 gridTemplateColumns: `repeat( ${gridColumns}, minmax(0, 1fr) )`
3555 }
3556 }
3557 ),
3558 children: row.map((item, indexInRow) => {
3559 const index = i2 * gridColumns + indexInRow;
3560 return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3561 import_components9.Composite.Item,
3562 {
3563 render: (props) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3564 GridItem,
3565 {
3566 ...props,
3567 role: isInfiniteScroll ? "article" : "gridcell",
3568 "aria-setsize": isInfiniteScroll ? paginationInfo.totalItems : void 0,
3569 "aria-posinset": isInfiniteScroll ? index + 1 : void 0,
3570 view,
3571 selection,
3572 onChangeSelection,
3573 onClickItem,
3574 isItemClickable: isItemClickable2,
3575 renderItemLink,
3576 getItemId,
3577 item,
3578 actions,
3579 mediaField,
3580 titleField,
3581 descriptionField: descriptionField2,
3582 regularFields,
3583 badgeFields,
3584 hasBulkActions,
3585 config: {
3586 sizes: size
3587 }
3588 }
3589 )
3590 },
3591 getItemId(item)
3592 );
3593 })
3594 },
3595 i2
3596 ))
3597 }
3598 );
3599 }
3600
3601 // packages/dataviews/build-module/dataviews-layouts/grid/index.js
3602 var import_jsx_runtime39 = __toESM(require_jsx_runtime());
3603 function ViewGrid({
3604 actions,
3605 data,
3606 fields,
3607 getItemId,
3608 isLoading,
3609 onChangeSelection,
3610 onClickItem,
3611 isItemClickable: isItemClickable2,
3612 renderItemLink,
3613 selection,
3614 view,
3615 className,
3616 empty
3617 }) {
3618 const hasData = !!data?.length;
3619 const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null;
3620 const dataByGroup = groupField ? getDataByGroup(data, groupField) : null;
3621 const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup;
3622 const gridProps = {
3623 className,
3624 isLoading,
3625 view,
3626 fields,
3627 selection,
3628 onChangeSelection,
3629 onClickItem,
3630 isItemClickable: isItemClickable2,
3631 renderItemLink,
3632 getItemId,
3633 actions
3634 };
3635 return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment, {
3636 // Render multiple groups.
3637 children: [
3638 hasData && groupField && dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_components10.__experimentalVStack, { spacing: 4, children: Array.from(dataByGroup.entries()).map(
3639 ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_components10.__experimentalVStack, { spacing: 2, children: [
3640 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("h3", { className: "dataviews-view-grid__group-header", children: (0, import_i18n17.sprintf)(
3641 // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022".
3642 (0, import_i18n17.__)("%1$s: %2$s"),
3643 groupField.label,
3644 groupName
3645 ) }),
3646 /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3647 CompositeGrid,
3648 {
3649 ...gridProps,
3650 data: groupItems,
3651 isInfiniteScroll: false
3652 }
3653 )
3654 ] }, groupName)
3655 ) }),
3656 // Render a single grid with all data.
3657 hasData && !dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3658 CompositeGrid,
3659 {
3660 ...gridProps,
3661 data,
3662 isInfiniteScroll: !!isInfiniteScroll
3663 }
3664 ),
3665 // Render empty state.
3666 !hasData && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3667 "div",
3668 {
3669 className: clsx_default({
3670 "dataviews-loading": isLoading,
3671 "dataviews-no-results": !isLoading
3672 }),
3673 children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_components10.Spinner, {}) }) : empty
3674 }
3675 ),
3676 hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_components10.Spinner, {}) })
3677 ]
3678 });
3679 }
3680 var grid_default = ViewGrid;
3681
3682 // packages/dataviews/build-module/dataviews-layouts/list/index.js
3683 var import_compose5 = __toESM(require_compose());
3684 var import_components11 = __toESM(require_components());
3685 var import_element12 = __toESM(require_element());
3686 var import_i18n18 = __toESM(require_i18n());
3687 var import_data3 = __toESM(require_data());
3688 var import_jsx_runtime40 = __toESM(require_jsx_runtime());
3689 var { Menu: Menu3 } = unlock(import_components11.privateApis);
3690 function generateItemWrapperCompositeId(idPrefix) {
3691 return `${idPrefix}-item-wrapper`;
3692 }
3693 function generatePrimaryActionCompositeId(idPrefix, primaryActionId) {
3694 return `${idPrefix}-primary-action-${primaryActionId}`;
3695 }
3696 function generateDropdownTriggerCompositeId(idPrefix) {
3697 return `${idPrefix}-dropdown`;
3698 }
3699 function PrimaryActionGridCell({
3700 idPrefix,
3701 primaryAction,
3702 item
3703 }) {
3704 const registry = (0, import_data3.useRegistry)();
3705 const [isModalOpen, setIsModalOpen] = (0, import_element12.useState)(false);
3706 const compositeItemId = generatePrimaryActionCompositeId(
3707 idPrefix,
3708 primaryAction.id
3709 );
3710 const label = typeof primaryAction.label === "string" ? primaryAction.label : primaryAction.label([item]);
3711 return "RenderModal" in primaryAction ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3712 import_components11.Composite.Item,
3713 {
3714 id: compositeItemId,
3715 render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3716 import_components11.Button,
3717 {
3718 disabled: !!primaryAction.disabled,
3719 accessibleWhenDisabled: true,
3720 text: label,
3721 size: "small",
3722 onClick: () => setIsModalOpen(true)
3723 }
3724 ),
3725 children: isModalOpen && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3726 ActionModal,
3727 {
3728 action: primaryAction,
3729 items: [item],
3730 closeModal: () => setIsModalOpen(false)
3731 }
3732 )
3733 }
3734 ) }, primaryAction.id) : /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3735 import_components11.Composite.Item,
3736 {
3737 id: compositeItemId,
3738 render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3739 import_components11.Button,
3740 {
3741 disabled: !!primaryAction.disabled,
3742 accessibleWhenDisabled: true,
3743 size: "small",
3744 onClick: () => {
3745 primaryAction.callback([item], { registry });
3746 },
3747 children: label
3748 }
3749 )
3750 }
3751 ) }, primaryAction.id);
3752 }
3753 function ListItem({
3754 view,
3755 actions,
3756 idPrefix,
3757 isSelected: isSelected2,
3758 item,
3759 titleField,
3760 mediaField,
3761 descriptionField: descriptionField2,
3762 onSelect,
3763 otherFields,
3764 onDropdownTriggerKeyDown,
3765 posinset
3766 }) {
3767 const {
3768 showTitle = true,
3769 showMedia = true,
3770 showDescription = true,
3771 infiniteScrollEnabled
3772 } = view;
3773 const itemRef = (0, import_element12.useRef)(null);
3774 const labelId = `${idPrefix}-label`;
3775 const descriptionId = `${idPrefix}-description`;
3776 const registry = (0, import_data3.useRegistry)();
3777 const [isHovered, setIsHovered] = (0, import_element12.useState)(false);
3778 const [activeModalAction, setActiveModalAction] = (0, import_element12.useState)(
3779 null
3780 );
3781 const handleHover = ({ type }) => {
3782 const isHover = type === "mouseenter";
3783 setIsHovered(isHover);
3784 };
3785 const { paginationInfo } = (0, import_element12.useContext)(dataviews_context_default);
3786 (0, import_element12.useEffect)(() => {
3787 if (isSelected2) {
3788 itemRef.current?.scrollIntoView({
3789 behavior: "auto",
3790 block: "nearest",
3791 inline: "nearest"
3792 });
3793 }
3794 }, [isSelected2]);
3795 const { primaryAction, eligibleActions } = (0, import_element12.useMemo)(() => {
3796 const _eligibleActions = actions.filter(
3797 (action) => !action.isEligible || action.isEligible(item)
3798 );
3799 const _primaryActions = _eligibleActions.filter(
3800 (action) => action.isPrimary
3801 );
3802 return {
3803 primaryAction: _primaryActions[0],
3804 eligibleActions: _eligibleActions
3805 };
3806 }, [actions, item]);
3807 const hasOnlyOnePrimaryAction = primaryAction && actions.length === 1;
3808 const renderedMediaField = showMedia && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "dataviews-view-list__media-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3809 mediaField.render,
3810 {
3811 item,
3812 field: mediaField,
3813 config: { sizes: "52px" }
3814 }
3815 ) }) : null;
3816 const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(titleField.render, { item, field: titleField }) : null;
3817 const usedActions = eligibleActions?.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_components11.__experimentalHStack, { spacing: 3, className: "dataviews-view-list__item-actions", children: [
3818 primaryAction && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3819 PrimaryActionGridCell,
3820 {
3821 idPrefix,
3822 primaryAction,
3823 item
3824 }
3825 ),
3826 !hasOnlyOnePrimaryAction && /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { role: "gridcell", children: [
3827 /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(Menu3, { placement: "bottom-end", children: [
3828 /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3829 Menu3.TriggerButton,
3830 {
3831 render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3832 import_components11.Composite.Item,
3833 {
3834 id: generateDropdownTriggerCompositeId(
3835 idPrefix
3836 ),
3837 render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3838 import_components11.Button,
3839 {
3840 size: "small",
3841 icon: more_vertical_default,
3842 label: (0, import_i18n18.__)("Actions"),
3843 accessibleWhenDisabled: true,
3844 disabled: !actions.length,
3845 onKeyDown: onDropdownTriggerKeyDown
3846 }
3847 )
3848 }
3849 )
3850 }
3851 ),
3852 /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Menu3.Popover, { children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3853 ActionsMenuGroup,
3854 {
3855 actions: eligibleActions,
3856 item,
3857 registry,
3858 setActiveModalAction
3859 }
3860 ) })
3861 ] }),
3862 !!activeModalAction && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3863 ActionModal,
3864 {
3865 action: activeModalAction,
3866 items: [item],
3867 closeModal: () => setActiveModalAction(null)
3868 }
3869 )
3870 ] })
3871 ] });
3872 return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3873 import_components11.Composite.Row,
3874 {
3875 ref: itemRef,
3876 render: (
3877 /* aria-posinset breaks Composite.Row if passed to it directly. */
3878 /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3879 "div",
3880 {
3881 "aria-posinset": posinset,
3882 "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0
3883 }
3884 )
3885 ),
3886 role: infiniteScrollEnabled ? "article" : "row",
3887 className: clsx_default({
3888 "is-selected": isSelected2,
3889 "is-hovered": isHovered
3890 }),
3891 onMouseEnter: handleHover,
3892 onMouseLeave: handleHover,
3893 children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_components11.__experimentalHStack, { className: "dataviews-view-list__item-wrapper", spacing: 0, children: [
3894 /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { role: "gridcell", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3895 import_components11.Composite.Item,
3896 {
3897 id: generateItemWrapperCompositeId(idPrefix),
3898 "aria-pressed": isSelected2,
3899 "aria-labelledby": labelId,
3900 "aria-describedby": descriptionId,
3901 className: "dataviews-view-list__item",
3902 onClick: () => onSelect(item)
3903 }
3904 ) }),
3905 /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_components11.__experimentalHStack, { spacing: 3, justify: "start", alignment: "flex-start", children: [
3906 renderedMediaField,
3907 /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
3908 import_components11.__experimentalVStack,
3909 {
3910 spacing: 1,
3911 className: "dataviews-view-list__field-wrapper",
3912 children: [
3913 /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_components11.__experimentalHStack, { spacing: 0, children: [
3914 /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3915 "div",
3916 {
3917 className: "dataviews-title-field",
3918 id: labelId,
3919 children: renderedTitleField
3920 }
3921 ),
3922 usedActions
3923 ] }),
3924 showDescription && descriptionField2?.render && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "dataviews-view-list__field", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3925 descriptionField2.render,
3926 {
3927 item,
3928 field: descriptionField2
3929 }
3930 ) }),
3931 /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3932 "div",
3933 {
3934 className: "dataviews-view-list__fields",
3935 id: descriptionId,
3936 children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
3937 "div",
3938 {
3939 className: "dataviews-view-list__field",
3940 children: [
3941 /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3942 import_components11.VisuallyHidden,
3943 {
3944 as: "span",
3945 className: "dataviews-view-list__field-label",
3946 children: field.label
3947 }
3948 ),
3949 /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "dataviews-view-list__field-value", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3950 field.render,
3951 {
3952 item,
3953 field
3954 }
3955 ) })
3956 ]
3957 },
3958 field.id
3959 ))
3960 }
3961 )
3962 ]
3963 }
3964 )
3965 ] })
3966 ] })
3967 }
3968 );
3969 }
3970 function isDefined2(item) {
3971 return !!item;
3972 }
3973 function ViewList(props) {
3974 const {
3975 actions,
3976 data,
3977 fields,
3978 getItemId,
3979 isLoading,
3980 onChangeSelection,
3981 selection,
3982 view,
3983 className,
3984 empty
3985 } = props;
3986 const baseId = (0, import_compose5.useInstanceId)(ViewList, "view-list");
3987 const selectedItem = data?.findLast(
3988 (item) => selection.includes(getItemId(item))
3989 );
3990 const titleField = fields.find((field) => field.id === view.titleField);
3991 const mediaField = fields.find((field) => field.id === view.mediaField);
3992 const descriptionField2 = fields.find(
3993 (field) => field.id === view.descriptionField
3994 );
3995 const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined2);
3996 const onSelect = (item) => onChangeSelection([getItemId(item)]);
3997 const generateCompositeItemIdPrefix = (0, import_element12.useCallback)(
3998 (item) => `${baseId}-${getItemId(item)}`,
3999 [baseId, getItemId]
4000 );
4001 const isActiveCompositeItem = (0, import_element12.useCallback)(
4002 (item, idToCheck) => {
4003 return idToCheck.startsWith(
4004 generateCompositeItemIdPrefix(item)
4005 );
4006 },
4007 [generateCompositeItemIdPrefix]
4008 );
4009 const [activeCompositeId, setActiveCompositeId] = (0, import_element12.useState)(void 0);
4010 (0, import_element12.useEffect)(() => {
4011 if (selectedItem) {
4012 setActiveCompositeId(
4013 generateItemWrapperCompositeId(
4014 generateCompositeItemIdPrefix(selectedItem)
4015 )
4016 );
4017 }
4018 }, [selectedItem, generateCompositeItemIdPrefix]);
4019 const activeItemIndex = data.findIndex(
4020 (item) => isActiveCompositeItem(item, activeCompositeId ?? "")
4021 );
4022 const previousActiveItemIndex = (0, import_compose5.usePrevious)(activeItemIndex);
4023 const isActiveIdInList = activeItemIndex !== -1;
4024 const selectCompositeItem = (0, import_element12.useCallback)(
4025 (targetIndex, generateCompositeId) => {
4026 const clampedIndex = Math.min(
4027 data.length - 1,
4028 Math.max(0, targetIndex)
4029 );
4030 if (!data[clampedIndex]) {
4031 return;
4032 }
4033 const itemIdPrefix = generateCompositeItemIdPrefix(
4034 data[clampedIndex]
4035 );
4036 const targetCompositeItemId = generateCompositeId(itemIdPrefix);
4037 setActiveCompositeId(targetCompositeItemId);
4038 document.getElementById(targetCompositeItemId)?.focus();
4039 },
4040 [data, generateCompositeItemIdPrefix]
4041 );
4042 (0, import_element12.useEffect)(() => {
4043 const wasActiveIdInList = previousActiveItemIndex !== void 0 && previousActiveItemIndex !== -1;
4044 if (!isActiveIdInList && wasActiveIdInList) {
4045 selectCompositeItem(
4046 previousActiveItemIndex,
4047 generateItemWrapperCompositeId
4048 );
4049 }
4050 }, [isActiveIdInList, selectCompositeItem, previousActiveItemIndex]);
4051 const onDropdownTriggerKeyDown = (0, import_element12.useCallback)(
4052 (event) => {
4053 if (event.key === "ArrowDown") {
4054 event.preventDefault();
4055 selectCompositeItem(
4056 activeItemIndex + 1,
4057 generateDropdownTriggerCompositeId
4058 );
4059 }
4060 if (event.key === "ArrowUp") {
4061 event.preventDefault();
4062 selectCompositeItem(
4063 activeItemIndex - 1,
4064 generateDropdownTriggerCompositeId
4065 );
4066 }
4067 },
4068 [selectCompositeItem, activeItemIndex]
4069 );
4070 const hasData = data?.length;
4071 if (!hasData) {
4072 return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4073 "div",
4074 {
4075 className: clsx_default({
4076 "dataviews-loading": isLoading,
4077 "dataviews-no-results": !hasData && !isLoading
4078 }),
4079 children: !hasData && (isLoading ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_components11.Spinner, {}) }) : empty)
4080 }
4081 );
4082 }
4083 const groupField = view.groupBy?.field ? fields.find((field) => field.id === view.groupBy?.field) : null;
4084 const dataByGroup = groupField ? getDataByGroup(data, groupField) : null;
4085 if (hasData && groupField && dataByGroup) {
4086 return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4087 import_components11.Composite,
4088 {
4089 id: `${baseId}`,
4090 render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", {}),
4091 className: "dataviews-view-list__group",
4092 role: "grid",
4093 activeId: activeCompositeId,
4094 setActiveId: setActiveCompositeId,
4095 children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4096 import_components11.__experimentalVStack,
4097 {
4098 spacing: 4,
4099 className: clsx_default("dataviews-view-list", className),
4100 children: Array.from(dataByGroup.entries()).map(
4101 ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_components11.__experimentalVStack, { spacing: 2, children: [
4102 /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("h3", { className: "dataviews-view-list__group-header", children: (0, import_i18n18.sprintf)(
4103 // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022".
4104 (0, import_i18n18.__)("%1$s: %2$s"),
4105 groupField.label,
4106 groupName
4107 ) }),
4108 groupItems.map((item) => {
4109 const id = generateCompositeItemIdPrefix(item);
4110 return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4111 ListItem,
4112 {
4113 view,
4114 idPrefix: id,
4115 actions,
4116 item,
4117 isSelected: item === selectedItem,
4118 onSelect,
4119 mediaField,
4120 titleField,
4121 descriptionField: descriptionField2,
4122 otherFields,
4123 onDropdownTriggerKeyDown
4124 },
4125 id
4126 );
4127 })
4128 ] }, groupName)
4129 )
4130 }
4131 )
4132 }
4133 );
4134 }
4135 return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_jsx_runtime40.Fragment, { children: [
4136 /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4137 import_components11.Composite,
4138 {
4139 id: baseId,
4140 render: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", {}),
4141 className: clsx_default("dataviews-view-list", className),
4142 role: view.infiniteScrollEnabled ? "feed" : "grid",
4143 activeId: activeCompositeId,
4144 setActiveId: setActiveCompositeId,
4145 children: data.map((item, index) => {
4146 const id = generateCompositeItemIdPrefix(item);
4147 return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
4148 ListItem,
4149 {
4150 view,
4151 idPrefix: id,
4152 actions,
4153 item,
4154 isSelected: item === selectedItem,
4155 onSelect,
4156 mediaField,
4157 titleField,
4158 descriptionField: descriptionField2,
4159 otherFields,
4160 onDropdownTriggerKeyDown,
4161 posinset: view.infiniteScrollEnabled ? index + 1 : void 0
4162 },
4163 id
4164 );
4165 })
4166 }
4167 ),
4168 hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_components11.Spinner, {}) })
4169 ] });
4170 }
4171
4172 // packages/dataviews/build-module/dataviews-layouts/activity/index.js
4173 var import_components14 = __toESM(require_components());
4174
4175 // packages/dataviews/build-module/dataviews-layouts/activity/activity-group.js
4176 var import_components12 = __toESM(require_components());
4177 var import_i18n19 = __toESM(require_i18n());
4178 var import_element13 = __toESM(require_element());
4179 var import_jsx_runtime41 = __toESM(require_jsx_runtime());
4180 function ActivityGroup({
4181 groupName,
4182 groupData,
4183 groupField,
4184 children
4185 }) {
4186 const groupHeader = (0, import_element13.createInterpolateElement)(
4187 // translators: %s: The label of the field e.g. "Status".
4188 (0, import_i18n19.sprintf)((0, import_i18n19.__)("%s: <groupName />"), groupField.label).trim(),
4189 {
4190 groupName: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
4191 groupField.render,
4192 {
4193 item: groupData[0],
4194 field: groupField
4195 }
4196 )
4197 }
4198 );
4199 return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
4200 import_components12.__experimentalVStack,
4201 {
4202 spacing: 0,
4203 className: "dataviews-view-activity__group",
4204 children: [
4205 /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("h3", { className: "dataviews-view-activity__group-header", children: groupHeader }),
4206 children
4207 ]
4208 },
4209 groupName
4210 );
4211 }
4212
4213 // packages/dataviews/build-module/dataviews-layouts/activity/activity-item.js
4214 var import_components13 = __toESM(require_components());
4215 var import_element14 = __toESM(require_element());
4216 var import_data4 = __toESM(require_data());
4217 var import_jsx_runtime42 = __toESM(require_jsx_runtime());
4218 function ActivityItem(props) {
4219 const {
4220 view,
4221 actions,
4222 item,
4223 titleField,
4224 mediaField,
4225 descriptionField: descriptionField2,
4226 otherFields,
4227 posinset,
4228 onClickItem,
4229 renderItemLink,
4230 isItemClickable: isItemClickable2
4231 } = props;
4232 const {
4233 showTitle = true,
4234 showMedia = true,
4235 showDescription = true,
4236 infiniteScrollEnabled
4237 } = view;
4238 const itemRef = (0, import_element14.useRef)(null);
4239 const registry = (0, import_data4.useRegistry)();
4240 const { paginationInfo } = (0, import_element14.useContext)(dataviews_context_default);
4241 const { primaryActions, eligibleActions } = (0, import_element14.useMemo)(() => {
4242 const _eligibleActions = actions.filter(
4243 (action) => !action.isEligible || action.isEligible(item)
4244 );
4245 const _primaryActions = _eligibleActions.filter(
4246 (action) => action.isPrimary
4247 );
4248 return {
4249 primaryActions: _primaryActions,
4250 eligibleActions: _eligibleActions
4251 };
4252 }, [actions, item]);
4253 const density = view.layout?.density ?? "balanced";
4254 const mediaContent = showMedia && density !== "compact" && mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4255 mediaField.render,
4256 {
4257 item,
4258 field: mediaField,
4259 config: {
4260 sizes: density === "comfortable" ? "32px" : "24px"
4261 }
4262 }
4263 ) : null;
4264 const renderedMediaField = /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "dataviews-view-activity__item-type-icon", children: mediaContent || /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4265 "span",
4266 {
4267 className: "dataviews-view-activity__item-bullet",
4268 "aria-hidden": "true"
4269 }
4270 ) });
4271 const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(titleField.render, { item, field: titleField }) : null;
4272 const verticalSpacing = (0, import_element14.useMemo)(() => {
4273 switch (density) {
4274 case "comfortable":
4275 return "3";
4276 default:
4277 return "2";
4278 }
4279 }, [density]);
4280 return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4281 "div",
4282 {
4283 ref: itemRef,
4284 role: infiniteScrollEnabled ? "article" : void 0,
4285 "aria-posinset": posinset,
4286 "aria-setsize": infiniteScrollEnabled ? paginationInfo.totalItems : void 0,
4287 className: clsx_default(
4288 "dataviews-view-activity__item",
4289 density === "compact" && "is-compact",
4290 density === "balanced" && "is-balanced",
4291 density === "comfortable" && "is-comfortable"
4292 ),
4293 children: /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_components13.__experimentalHStack, { spacing: 4, justify: "start", alignment: "flex-start", children: [
4294 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4295 import_components13.__experimentalVStack,
4296 {
4297 spacing: 1,
4298 alignment: "center",
4299 className: "dataviews-view-activity__item-type",
4300 children: renderedMediaField
4301 }
4302 ),
4303 /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
4304 import_components13.__experimentalVStack,
4305 {
4306 spacing: verticalSpacing,
4307 alignment: "flex-start",
4308 className: "dataviews-view-activity__item-content",
4309 children: [
4310 renderedTitleField && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4311 ItemClickWrapper,
4312 {
4313 item,
4314 isItemClickable: isItemClickable2,
4315 onClickItem,
4316 renderItemLink,
4317 className: "dataviews-view-activity__item-title",
4318 children: renderedTitleField
4319 }
4320 ),
4321 showDescription && descriptionField2 && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "dataviews-view-activity__item-description", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4322 descriptionField2.render,
4323 {
4324 item,
4325 field: descriptionField2
4326 }
4327 ) }),
4328 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "dataviews-view-activity__item-fields", children: otherFields.map((field) => /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
4329 "div",
4330 {
4331 className: "dataviews-view-activity__item-field",
4332 children: [
4333 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4334 import_components13.VisuallyHidden,
4335 {
4336 as: "span",
4337 className: "dataviews-view-activity__item-field-label",
4338 children: field.label
4339 }
4340 ),
4341 /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "dataviews-view-activity__item-field-value", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4342 field.render,
4343 {
4344 item,
4345 field
4346 }
4347 ) })
4348 ]
4349 },
4350 field.id
4351 )) }),
4352 !!primaryActions?.length && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4353 PrimaryActions,
4354 {
4355 item,
4356 actions: primaryActions,
4357 registry,
4358 buttonVariant: "secondary"
4359 }
4360 )
4361 ]
4362 }
4363 ),
4364 primaryActions.length < eligibleActions.length && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "dataviews-view-activity__item-actions", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
4365 ItemActions,
4366 {
4367 item,
4368 actions: eligibleActions,
4369 isCompact: true
4370 }
4371 ) })
4372 ] })
4373 }
4374 );
4375 }
4376 var activity_item_default = ActivityItem;
4377
4378 // packages/dataviews/build-module/dataviews-layouts/activity/activity-items.js
4379 var import_react = __toESM(require_react());
4380 function isDefined3(item) {
4381 return !!item;
4382 }
4383 function ActivityItems(props) {
4384 const { data, fields, getItemId, view } = props;
4385 const titleField = fields.find((field) => field.id === view.titleField);
4386 const mediaField = fields.find((field) => field.id === view.mediaField);
4387 const descriptionField2 = fields.find(
4388 (field) => field.id === view.descriptionField
4389 );
4390 const otherFields = (view?.fields ?? []).map((fieldId) => fields.find((f2) => fieldId === f2.id)).filter(isDefined3);
4391 return data.map((item, index) => {
4392 return /* @__PURE__ */ (0, import_react.createElement)(
4393 activity_item_default,
4394 {
4395 ...props,
4396 key: getItemId(item),
4397 item,
4398 mediaField,
4399 titleField,
4400 descriptionField: descriptionField2,
4401 otherFields,
4402 posinset: view.infiniteScrollEnabled ? index + 1 : void 0
4403 }
4404 );
4405 });
4406 }
4407
4408 // packages/dataviews/build-module/dataviews-layouts/activity/index.js
4409 var import_jsx_runtime43 = __toESM(require_jsx_runtime());
4410 function ViewActivity(props) {
4411 const { empty, data, fields, isLoading, view, className } = props;
4412 const hasData = data?.length;
4413 if (!hasData) {
4414 return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4415 "div",
4416 {
4417 className: clsx_default({
4418 "dataviews-loading": isLoading,
4419 "dataviews-no-results": !hasData && !isLoading
4420 }),
4421 children: !hasData && (isLoading ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_components14.Spinner, {}) }) : empty)
4422 }
4423 );
4424 }
4425 const wrapperClassName = clsx_default("dataviews-view-activity", className);
4426 const groupField = view.groupBy?.field ? fields.find((field) => field.id === view.groupBy?.field) : null;
4427 const dataByGroup = groupField ? getDataByGroup(data, groupField) : null;
4428 const groupedEntries = dataByGroup ? Array.from(dataByGroup.entries()) : [];
4429 if (hasData && groupField && dataByGroup) {
4430 return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_components14.__experimentalVStack, { spacing: 2, className: wrapperClassName, children: groupedEntries.map(
4431 ([groupName, groupData]) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4432 ActivityGroup,
4433 {
4434 groupName,
4435 groupData,
4436 groupField,
4437 children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4438 ActivityItems,
4439 {
4440 ...props,
4441 data: groupData
4442 }
4443 )
4444 },
4445 groupName
4446 )
4447 ) });
4448 }
4449 return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_jsx_runtime43.Fragment, { children: [
4450 /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
4451 "div",
4452 {
4453 className: wrapperClassName,
4454 role: view.infiniteScrollEnabled ? "feed" : void 0,
4455 children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(ActivityItems, { ...props })
4456 }
4457 ),
4458 hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_components14.Spinner, {}) })
4459 ] });
4460 }
4461
4462 // packages/dataviews/build-module/dataviews-layouts/picker-grid/index.js
4463 var import_components17 = __toESM(require_components());
4464 var import_i18n22 = __toESM(require_i18n());
4465 var import_compose6 = __toESM(require_compose());
4466 var import_element18 = __toESM(require_element());
4467
4468 // packages/dataviews/build-module/components/dataviews-picker/footer.js
4469 var import_components16 = __toESM(require_components());
4470 var import_data5 = __toESM(require_data());
4471 var import_element16 = __toESM(require_element());
4472 var import_i18n21 = __toESM(require_i18n());
4473
4474 // packages/dataviews/build-module/components/dataviews-pagination/index.js
4475 var import_components15 = __toESM(require_components());
4476 var import_element15 = __toESM(require_element());
4477 var import_i18n20 = __toESM(require_i18n());
4478 var import_jsx_runtime44 = __toESM(require_jsx_runtime());
4479 function DataViewsPagination() {
4480 const {
4481 view,
4482 onChangeView,
4483 paginationInfo: { totalItems = 0, totalPages }
4484 } = (0, import_element15.useContext)(dataviews_context_default);
4485 if (!totalItems || !totalPages || view.infiniteScrollEnabled) {
4486 return null;
4487 }
4488 const currentPage = view.page ?? 1;
4489 const pageSelectOptions = Array.from(Array(totalPages)).map(
4490 (_, i2) => {
4491 const page = i2 + 1;
4492 return {
4493 value: page.toString(),
4494 label: page.toString(),
4495 "aria-label": currentPage === page ? (0, import_i18n20.sprintf)(
4496 // translators: 1: current page number. 2: total number of pages.
4497 (0, import_i18n20.__)("Page %1$d of %2$d"),
4498 currentPage,
4499 totalPages
4500 ) : page.toString()
4501 };
4502 }
4503 );
4504 return !!totalItems && totalPages !== 1 && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
4505 import_components15.__experimentalHStack,
4506 {
4507 expanded: false,
4508 className: "dataviews-pagination",
4509 justify: "end",
4510 spacing: 6,
4511 children: [
4512 /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
4513 import_components15.__experimentalHStack,
4514 {
4515 justify: "flex-start",
4516 expanded: false,
4517 spacing: 1,
4518 className: "dataviews-pagination__page-select",
4519 children: (0, import_element15.createInterpolateElement)(
4520 (0, import_i18n20.sprintf)(
4521 // translators: 1: Current page number, 2: Total number of pages.
4522 (0, import_i18n20._x)(
4523 "<div>Page</div>%1$s<div>of %2$d</div>",
4524 "paging"
4525 ),
4526 "<CurrentPage />",
4527 totalPages
4528 ),
4529 {
4530 div: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { "aria-hidden": true }),
4531 CurrentPage: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
4532 import_components15.SelectControl,
4533 {
4534 "aria-label": (0, import_i18n20.__)("Current page"),
4535 value: currentPage.toString(),
4536 options: pageSelectOptions,
4537 onChange: (newValue) => {
4538 onChangeView({
4539 ...view,
4540 page: +newValue
4541 });
4542 },
4543 size: "small",
4544 __nextHasNoMarginBottom: true,
4545 variant: "minimal"
4546 }
4547 )
4548 }
4549 )
4550 }
4551 ),
4552 /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_components15.__experimentalHStack, { expanded: false, spacing: 1, children: [
4553 /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
4554 import_components15.Button,
4555 {
4556 onClick: () => onChangeView({
4557 ...view,
4558 page: currentPage - 1
4559 }),
4560 disabled: currentPage === 1,
4561 accessibleWhenDisabled: true,
4562 label: (0, import_i18n20.__)("Previous page"),
4563 icon: (0, import_i18n20.isRTL)() ? next_default : previous_default,
4564 showTooltip: true,
4565 size: "compact",
4566 tooltipPosition: "top"
4567 }
4568 ),
4569 /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
4570 import_components15.Button,
4571 {
4572 onClick: () => onChangeView({ ...view, page: currentPage + 1 }),
4573 disabled: currentPage >= totalPages,
4574 accessibleWhenDisabled: true,
4575 label: (0, import_i18n20.__)("Next page"),
4576 icon: (0, import_i18n20.isRTL)() ? previous_default : next_default,
4577 showTooltip: true,
4578 size: "compact",
4579 tooltipPosition: "top"
4580 }
4581 )
4582 ] })
4583 ]
4584 }
4585 );
4586 }
4587 var dataviews_pagination_default = (0, import_element15.memo)(DataViewsPagination);
4588
4589 // packages/dataviews/build-module/components/dataviews-picker/footer.js
4590 var import_jsx_runtime45 = __toESM(require_jsx_runtime());
4591 var EMPTY_ARRAY = [];
4592 function useIsMultiselectPicker(actions) {
4593 return (0, import_element16.useMemo)(() => {
4594 return actions?.every((action) => action.supportsBulk);
4595 }, [actions]);
4596 }
4597 function BulkSelectionCheckbox2({
4598 selection,
4599 selectedItems,
4600 onChangeSelection,
4601 data,
4602 getItemId
4603 }) {
4604 const areAllSelected = selectedItems.length === data.length;
4605 return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
4606 import_components16.CheckboxControl,
4607 {
4608 className: "dataviews-view-table-selection-checkbox",
4609 __nextHasNoMarginBottom: true,
4610 checked: areAllSelected,
4611 indeterminate: !areAllSelected && !!selectedItems.length,
4612 onChange: () => {
4613 if (areAllSelected) {
4614 onChangeSelection(
4615 selection.filter(
4616 (id) => !data.some(
4617 (item) => id === getItemId(item)
4618 )
4619 )
4620 );
4621 } else {
4622 const selectionSet = /* @__PURE__ */ new Set([
4623 ...selection,
4624 ...data.map((item) => getItemId(item))
4625 ]);
4626 onChangeSelection(Array.from(selectionSet));
4627 }
4628 },
4629 "aria-label": areAllSelected ? (0, import_i18n21.__)("Deselect all") : (0, import_i18n21.__)("Select all")
4630 }
4631 );
4632 }
4633 function ActionButtons({
4634 actions,
4635 items,
4636 selection
4637 }) {
4638 const registry = (0, import_data5.useRegistry)();
4639 const [actionInProgress, setActionInProgress] = (0, import_element16.useState)(
4640 null
4641 );
4642 return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_components16.__experimentalHStack, { expanded: false, spacing: 1, children: actions.map((action) => {
4643 if (!("callback" in action)) {
4644 return null;
4645 }
4646 const { id, label, icon, isPrimary, callback } = action;
4647 const _label = typeof label === "string" ? label : label(items);
4648 const variant = isPrimary ? "primary" : "tertiary";
4649 const isInProgress = id === actionInProgress;
4650 return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
4651 import_components16.Button,
4652 {
4653 accessibleWhenDisabled: true,
4654 icon,
4655 disabled: isInProgress || !selection?.length,
4656 isBusy: isInProgress,
4657 onClick: async () => {
4658 setActionInProgress(id);
4659 await callback(items, {
4660 registry
4661 });
4662 setActionInProgress(null);
4663 },
4664 size: "compact",
4665 variant,
4666 children: _label
4667 },
4668 id
4669 );
4670 }) });
4671 }
4672 function DataViewsPickerFooter() {
4673 const {
4674 data,
4675 selection,
4676 onChangeSelection,
4677 getItemId,
4678 actions = EMPTY_ARRAY
4679 } = (0, import_element16.useContext)(dataviews_context_default);
4680 const selectionCount = selection.length;
4681 const isMultiselect = useIsMultiselectPicker(actions);
4682 const message2 = selectionCount > 0 ? (0, import_i18n21.sprintf)(
4683 /* translators: %d: number of items. */
4684 (0, import_i18n21._n)(
4685 "%d Item selected",
4686 "%d Items selected",
4687 selectionCount
4688 ),
4689 selectionCount
4690 ) : (0, import_i18n21.sprintf)(
4691 /* translators: %d: number of items. */
4692 (0, import_i18n21._n)("%d Item", "%d Items", data.length),
4693 data.length
4694 );
4695 const selectedItems = (0, import_element16.useMemo)(
4696 () => data.filter((item) => selection.includes(getItemId(item))),
4697 [selection, getItemId, data]
4698 );
4699 return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
4700 import_components16.__experimentalHStack,
4701 {
4702 expanded: false,
4703 justify: "space-between",
4704 className: "dataviews-footer",
4705 children: [
4706 /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
4707 import_components16.__experimentalHStack,
4708 {
4709 className: "dataviews-picker-footer__bulk-selection",
4710 expanded: false,
4711 spacing: 3,
4712 children: [
4713 isMultiselect && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
4714 BulkSelectionCheckbox2,
4715 {
4716 selection,
4717 selectedItems,
4718 onChangeSelection,
4719 data,
4720 getItemId
4721 }
4722 ),
4723 /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "dataviews-bulk-actions-footer__item-count", children: message2 })
4724 ]
4725 }
4726 ),
4727 /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(dataviews_pagination_default, {}),
4728 Boolean(actions?.length) && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "dataviews-picker-footer__actions", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
4729 ActionButtons,
4730 {
4731 actions,
4732 items: selectedItems,
4733 selection
4734 }
4735 ) })
4736 ]
4737 }
4738 );
4739 }
4740
4741 // packages/dataviews/build-module/dataviews-layouts/utils/grid-items.js
4742 var import_element17 = __toESM(require_element());
4743 var import_jsx_runtime46 = __toESM(require_jsx_runtime());
4744 var GridItems = (0, import_element17.forwardRef)(({ className, previewSize, ...props }, ref) => {
4745 return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4746 "div",
4747 {
4748 ref,
4749 className: clsx_default("dataviews-view-grid-items", className),
4750 style: {
4751 gridTemplateColumns: previewSize && `repeat(auto-fill, minmax(${previewSize}px, 1fr))`
4752 },
4753 ...props
4754 }
4755 );
4756 });
4757
4758 // packages/dataviews/build-module/dataviews-layouts/picker-grid/index.js
4759 var import_jsx_runtime47 = __toESM(require_jsx_runtime());
4760 var { Badge: Badge2 } = unlock(import_components17.privateApis);
4761 function GridItem3({
4762 view,
4763 multiselect,
4764 selection,
4765 onChangeSelection,
4766 getItemId,
4767 item,
4768 mediaField,
4769 titleField,
4770 descriptionField: descriptionField2,
4771 regularFields,
4772 badgeFields,
4773 config,
4774 posinset,
4775 setsize
4776 }) {
4777 const { showTitle = true, showMedia = true, showDescription = true } = view;
4778 const id = getItemId(item);
4779 const isSelected2 = selection.includes(id);
4780 const renderedMediaField = mediaField?.render ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4781 mediaField.render,
4782 {
4783 item,
4784 field: mediaField,
4785 config
4786 }
4787 ) : null;
4788 const renderedTitleField = showTitle && titleField?.render ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(titleField.render, { item, field: titleField }) : null;
4789 return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
4790 import_components17.Composite.Item,
4791 {
4792 "aria-label": titleField ? titleField.getValue({ item }) || (0, import_i18n22.__)("(no title)") : void 0,
4793 render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_components17.__experimentalVStack, { spacing: 0, children, ...props }),
4794 role: "option",
4795 "aria-posinset": posinset,
4796 "aria-setsize": setsize,
4797 className: clsx_default("dataviews-view-picker-grid__card", {
4798 "is-selected": isSelected2
4799 }),
4800 "aria-selected": isSelected2,
4801 onClick: () => {
4802 if (isSelected2) {
4803 onChangeSelection(
4804 selection.filter((itemId) => id !== itemId)
4805 );
4806 } else {
4807 const newSelection = multiselect ? [...selection, id] : [id];
4808 onChangeSelection(newSelection);
4809 }
4810 },
4811 children: [
4812 showMedia && renderedMediaField && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "dataviews-view-picker-grid__media", children: renderedMediaField }),
4813 showMedia && renderedMediaField && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4814 DataViewsSelectionCheckbox,
4815 {
4816 item,
4817 selection,
4818 onChangeSelection,
4819 getItemId,
4820 titleField,
4821 disabled: false,
4822 "aria-hidden": true,
4823 tabIndex: -1
4824 }
4825 ),
4826 showTitle && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4827 import_components17.__experimentalHStack,
4828 {
4829 justify: "space-between",
4830 className: "dataviews-view-picker-grid__title-actions",
4831 children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "dataviews-view-picker-grid__title-field dataviews-title-field", children: renderedTitleField })
4832 }
4833 ),
4834 /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_components17.__experimentalVStack, { spacing: 1, children: [
4835 showDescription && descriptionField2?.render && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4836 descriptionField2.render,
4837 {
4838 item,
4839 field: descriptionField2
4840 }
4841 ),
4842 !!badgeFields?.length && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4843 import_components17.__experimentalHStack,
4844 {
4845 className: "dataviews-view-picker-grid__badge-fields",
4846 spacing: 2,
4847 wrap: true,
4848 alignment: "top",
4849 justify: "flex-start",
4850 children: badgeFields.map((field) => {
4851 return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4852 Badge2,
4853 {
4854 className: "dataviews-view-picker-grid__field-value",
4855 children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4856 field.render,
4857 {
4858 item,
4859 field
4860 }
4861 )
4862 },
4863 field.id
4864 );
4865 })
4866 }
4867 ),
4868 !!regularFields?.length && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4869 import_components17.__experimentalVStack,
4870 {
4871 className: "dataviews-view-picker-grid__fields",
4872 spacing: 1,
4873 children: regularFields.map((field) => {
4874 return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4875 import_components17.Flex,
4876 {
4877 className: "dataviews-view-picker-grid__field",
4878 gap: 1,
4879 justify: "flex-start",
4880 expanded: true,
4881 style: { height: "auto" },
4882 direction: "row",
4883 children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [
4884 /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_components17.FlexItem, { className: "dataviews-view-picker-grid__field-name", children: field.header }),
4885 /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4886 import_components17.FlexItem,
4887 {
4888 className: "dataviews-view-picker-grid__field-value",
4889 style: { maxHeight: "none" },
4890 children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4891 field.render,
4892 {
4893 item,
4894 field
4895 }
4896 )
4897 }
4898 )
4899 ] })
4900 },
4901 field.id
4902 );
4903 })
4904 }
4905 )
4906 ] })
4907 ]
4908 },
4909 id
4910 );
4911 }
4912 function GridGroup({
4913 groupName,
4914 groupField,
4915 children
4916 }) {
4917 const headerId = (0, import_compose6.useInstanceId)(
4918 GridGroup,
4919 "dataviews-view-picker-grid-group__header"
4920 );
4921 return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
4922 import_components17.__experimentalVStack,
4923 {
4924 spacing: 2,
4925 role: "group",
4926 "aria-labelledby": headerId,
4927 children: [
4928 /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4929 "h3",
4930 {
4931 className: "dataviews-view-picker-grid-group__header",
4932 id: headerId,
4933 children: (0, import_i18n22.sprintf)(
4934 // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022".
4935 (0, import_i18n22.__)("%1$s: %2$s"),
4936 groupField.label,
4937 groupName
4938 )
4939 }
4940 ),
4941 children
4942 ]
4943 },
4944 groupName
4945 );
4946 }
4947 function ViewPickerGrid({
4948 actions,
4949 data,
4950 fields,
4951 getItemId,
4952 isLoading,
4953 onChangeSelection,
4954 selection,
4955 view,
4956 className,
4957 empty
4958 }) {
4959 const { resizeObserverRef, paginationInfo, itemListLabel } = (0, import_element18.useContext)(dataviews_context_default);
4960 const titleField = fields.find(
4961 (field) => field.id === view?.titleField
4962 );
4963 const mediaField = fields.find(
4964 (field) => field.id === view?.mediaField
4965 );
4966 const descriptionField2 = fields.find(
4967 (field) => field.id === view?.descriptionField
4968 );
4969 const otherFields = view.fields ?? [];
4970 const { regularFields, badgeFields } = otherFields.reduce(
4971 (accumulator, fieldId) => {
4972 const field = fields.find((f2) => f2.id === fieldId);
4973 if (!field) {
4974 return accumulator;
4975 }
4976 const key = view.layout?.badgeFields?.includes(fieldId) ? "badgeFields" : "regularFields";
4977 accumulator[key].push(field);
4978 return accumulator;
4979 },
4980 { regularFields: [], badgeFields: [] }
4981 );
4982 const hasData = !!data?.length;
4983 const usedPreviewSize = view.layout?.previewSize;
4984 const isMultiselect = useIsMultiselectPicker(actions);
4985 const size = "900px";
4986 const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null;
4987 const dataByGroup = groupField ? getDataByGroup(data, groupField) : null;
4988 const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup;
4989 const currentPage = view?.page ?? 1;
4990 const perPage = view?.perPage ?? 0;
4991 const setSize = isInfiniteScroll ? paginationInfo?.totalItems : void 0;
4992 return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, {
4993 // Render multiple groups.
4994 children: [
4995 hasData && groupField && dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4996 import_components17.Composite,
4997 {
4998 virtualFocus: true,
4999 orientation: "horizontal",
5000 role: "listbox",
5001 "aria-multiselectable": isMultiselect,
5002 className: clsx_default(
5003 "dataviews-view-picker-grid",
5004 className
5005 ),
5006 "aria-label": itemListLabel,
5007 render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
5008 import_components17.__experimentalVStack,
5009 {
5010 spacing: 4,
5011 children,
5012 ...props
5013 }
5014 ),
5015 children: Array.from(dataByGroup.entries()).map(
5016 ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
5017 GridGroup,
5018 {
5019 groupName,
5020 groupField,
5021 children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
5022 GridItems,
5023 {
5024 previewSize: usedPreviewSize,
5025 style: {
5026 gridTemplateColumns: usedPreviewSize && `repeat(auto-fill, minmax(${usedPreviewSize}px, 1fr))`
5027 },
5028 "aria-busy": isLoading,
5029 ref: resizeObserverRef,
5030 children: groupItems.map((item) => {
5031 const posInSet = (currentPage - 1) * perPage + data.indexOf(item) + 1;
5032 return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
5033 GridItem3,
5034 {
5035 view,
5036 multiselect: isMultiselect,
5037 selection,
5038 onChangeSelection,
5039 getItemId,
5040 item,
5041 mediaField,
5042 titleField,
5043 descriptionField: descriptionField2,
5044 regularFields,
5045 badgeFields,
5046 config: {
5047 sizes: size
5048 },
5049 posinset: posInSet,
5050 setsize: setSize
5051 },
5052 getItemId(item)
5053 );
5054 })
5055 }
5056 )
5057 },
5058 groupName
5059 )
5060 )
5061 }
5062 ),
5063 // Render a single grid with all data.
5064 hasData && !dataByGroup && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
5065 import_components17.Composite,
5066 {
5067 render: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
5068 GridItems,
5069 {
5070 className: clsx_default(
5071 "dataviews-view-picker-grid",
5072 className
5073 ),
5074 previewSize: usedPreviewSize,
5075 "aria-busy": isLoading,
5076 ref: resizeObserverRef
5077 }
5078 ),
5079 virtualFocus: true,
5080 orientation: "horizontal",
5081 role: "listbox",
5082 "aria-multiselectable": isMultiselect,
5083 "aria-label": itemListLabel,
5084 children: data.map((item, index) => {
5085 let posinset = isInfiniteScroll ? index + 1 : void 0;
5086 if (!isInfiniteScroll) {
5087 posinset = (currentPage - 1) * perPage + index + 1;
5088 }
5089 return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
5090 GridItem3,
5091 {
5092 view,
5093 multiselect: isMultiselect,
5094 selection,
5095 onChangeSelection,
5096 getItemId,
5097 item,
5098 mediaField,
5099 titleField,
5100 descriptionField: descriptionField2,
5101 regularFields,
5102 badgeFields,
5103 config: {
5104 sizes: size
5105 },
5106 posinset,
5107 setsize: setSize
5108 },
5109 getItemId(item)
5110 );
5111 })
5112 }
5113 ),
5114 // Render empty state.
5115 !hasData && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
5116 "div",
5117 {
5118 className: clsx_default({
5119 "dataviews-loading": isLoading,
5120 "dataviews-no-results": !isLoading
5121 }),
5122 children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_components17.Spinner, {}) }) : empty
5123 }
5124 ),
5125 hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_components17.Spinner, {}) })
5126 ]
5127 });
5128 }
5129 var picker_grid_default = ViewPickerGrid;
5130
5131 // packages/dataviews/build-module/dataviews-layouts/picker-table/index.js
5132 var import_i18n23 = __toESM(require_i18n());
5133 var import_components18 = __toESM(require_components());
5134 var import_element19 = __toESM(require_element());
5135 var import_jsx_runtime48 = __toESM(require_jsx_runtime());
5136 function TableColumnField2({
5137 item,
5138 fields,
5139 column,
5140 align
5141 }) {
5142 const field = fields.find((f2) => f2.id === column);
5143 if (!field) {
5144 return null;
5145 }
5146 const className = clsx_default("dataviews-view-table__cell-content-wrapper", {
5147 "dataviews-view-table__cell-align-end": align === "end",
5148 "dataviews-view-table__cell-align-center": align === "center"
5149 });
5150 return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(field.render, { item, field }) });
5151 }
5152 function TableRow2({
5153 item,
5154 fields,
5155 id,
5156 view,
5157 titleField,
5158 mediaField,
5159 descriptionField: descriptionField2,
5160 selection,
5161 getItemId,
5162 onChangeSelection,
5163 multiselect,
5164 posinset
5165 }) {
5166 const { paginationInfo } = (0, import_element19.useContext)(dataviews_context_default);
5167 const isSelected2 = selection.includes(id);
5168 const [isHovered, setIsHovered] = (0, import_element19.useState)(false);
5169 const {
5170 showTitle = true,
5171 showMedia = true,
5172 showDescription = true,
5173 infiniteScrollEnabled
5174 } = view;
5175 const handleMouseEnter = () => {
5176 setIsHovered(true);
5177 };
5178 const handleMouseLeave = () => {
5179 setIsHovered(false);
5180 };
5181 const columns = view.fields ?? [];
5182 const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField2 && showDescription;
5183 return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
5184 import_components18.Composite.Item,
5185 {
5186 render: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5187 "tr",
5188 {
5189 className: clsx_default("dataviews-view-table__row", {
5190 "is-selected": isSelected2,
5191 "is-hovered": isHovered
5192 }),
5193 onMouseEnter: handleMouseEnter,
5194 onMouseLeave: handleMouseLeave,
5195 children,
5196 ...props
5197 }
5198 ),
5199 "aria-selected": isSelected2,
5200 "aria-setsize": paginationInfo.totalItems || void 0,
5201 "aria-posinset": posinset,
5202 role: infiniteScrollEnabled ? "article" : "option",
5203 onClick: () => {
5204 if (isSelected2) {
5205 onChangeSelection(
5206 selection.filter((itemId) => id !== itemId)
5207 );
5208 } else {
5209 const newSelection = multiselect ? [...selection, id] : [id];
5210 onChangeSelection(newSelection);
5211 }
5212 },
5213 children: [
5214 /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5215 "td",
5216 {
5217 className: "dataviews-view-table__checkbox-column",
5218 role: "presentation",
5219 children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "dataviews-view-table__cell-content-wrapper", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5220 DataViewsSelectionCheckbox,
5221 {
5222 item,
5223 selection,
5224 onChangeSelection,
5225 getItemId,
5226 titleField,
5227 disabled: false,
5228 "aria-hidden": true,
5229 tabIndex: -1
5230 }
5231 ) })
5232 }
5233 ),
5234 hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("td", { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5235 column_primary_default,
5236 {
5237 item,
5238 titleField: showTitle ? titleField : void 0,
5239 mediaField: showMedia ? mediaField : void 0,
5240 descriptionField: showDescription ? descriptionField2 : void 0,
5241 isItemClickable: () => false
5242 }
5243 ) }),
5244 columns.map((column) => {
5245 const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {};
5246 return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5247 "td",
5248 {
5249 style: {
5250 width,
5251 maxWidth,
5252 minWidth
5253 },
5254 role: "presentation",
5255 children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5256 TableColumnField2,
5257 {
5258 fields,
5259 item,
5260 column,
5261 align
5262 }
5263 )
5264 },
5265 column
5266 );
5267 })
5268 ]
5269 },
5270 id
5271 );
5272 }
5273 function ViewPickerTable({
5274 actions,
5275 data,
5276 fields,
5277 getItemId,
5278 isLoading = false,
5279 onChangeView,
5280 onChangeSelection,
5281 selection,
5282 setOpenedFilter,
5283 view,
5284 className,
5285 empty
5286 }) {
5287 const headerMenuRefs = (0, import_element19.useRef)(/* @__PURE__ */ new Map());
5288 const headerMenuToFocusRef = (0, import_element19.useRef)();
5289 const [nextHeaderMenuToFocus, setNextHeaderMenuToFocus] = (0, import_element19.useState)();
5290 const isMultiselect = useIsMultiselectPicker(actions) ?? false;
5291 (0, import_element19.useEffect)(() => {
5292 if (headerMenuToFocusRef.current) {
5293 headerMenuToFocusRef.current.focus();
5294 headerMenuToFocusRef.current = void 0;
5295 }
5296 });
5297 const tableNoticeId = (0, import_element19.useId)();
5298 if (nextHeaderMenuToFocus) {
5299 headerMenuToFocusRef.current = nextHeaderMenuToFocus;
5300 setNextHeaderMenuToFocus(void 0);
5301 return;
5302 }
5303 const onHide = (field) => {
5304 const hidden = headerMenuRefs.current.get(field.id);
5305 const fallback = hidden ? headerMenuRefs.current.get(hidden.fallback) : void 0;
5306 setNextHeaderMenuToFocus(fallback?.node);
5307 };
5308 const hasData = !!data?.length;
5309 const titleField = fields.find((field) => field.id === view.titleField);
5310 const mediaField = fields.find((field) => field.id === view.mediaField);
5311 const descriptionField2 = fields.find(
5312 (field) => field.id === view.descriptionField
5313 );
5314 const groupField = view.groupBy?.field ? fields.find((f2) => f2.id === view.groupBy?.field) : null;
5315 const dataByGroup = groupField ? getDataByGroup(data, groupField) : null;
5316 const { showTitle = true, showMedia = true, showDescription = true } = view;
5317 const hasPrimaryColumn = titleField && showTitle || mediaField && showMedia || descriptionField2 && showDescription;
5318 const columns = view.fields ?? [];
5319 const headerMenuRef = (column, index) => (node) => {
5320 if (node) {
5321 headerMenuRefs.current.set(column, {
5322 node,
5323 fallback: columns[index > 0 ? index - 1 : 1]
5324 });
5325 } else {
5326 headerMenuRefs.current.delete(column);
5327 }
5328 };
5329 const isInfiniteScroll = view.infiniteScrollEnabled && !dataByGroup;
5330 return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(import_jsx_runtime48.Fragment, { children: [
5331 /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
5332 "table",
5333 {
5334 className: clsx_default(
5335 "dataviews-view-table",
5336 "dataviews-view-picker-table",
5337 className,
5338 {
5339 [`has-${view.layout?.density}-density`]: view.layout?.density && ["compact", "comfortable"].includes(
5340 view.layout.density
5341 )
5342 }
5343 ),
5344 "aria-busy": isLoading,
5345 "aria-describedby": tableNoticeId,
5346 role: isInfiniteScroll ? "feed" : "listbox",
5347 children: [
5348 /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("thead", { role: "presentation", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
5349 "tr",
5350 {
5351 className: "dataviews-view-table__row",
5352 role: "presentation",
5353 children: [
5354 /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("th", { className: "dataviews-view-table__checkbox-column", children: isMultiselect && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5355 BulkSelectionCheckbox,
5356 {
5357 selection,
5358 onChangeSelection,
5359 data,
5360 actions,
5361 getItemId
5362 }
5363 ) }),
5364 hasPrimaryColumn && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("th", { children: titleField && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5365 column_header_menu_default,
5366 {
5367 ref: headerMenuRef(
5368 titleField.id,
5369 0
5370 ),
5371 fieldId: titleField.id,
5372 view,
5373 fields,
5374 onChangeView,
5375 onHide,
5376 setOpenedFilter,
5377 canMove: false
5378 }
5379 ) }),
5380 columns.map((column, index) => {
5381 const { width, maxWidth, minWidth, align } = view.layout?.styles?.[column] ?? {};
5382 return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5383 "th",
5384 {
5385 style: {
5386 width,
5387 maxWidth,
5388 minWidth,
5389 textAlign: align
5390 },
5391 "aria-sort": view.sort?.direction && view.sort?.field === column ? sortValues[view.sort.direction] : void 0,
5392 scope: "col",
5393 children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5394 column_header_menu_default,
5395 {
5396 ref: headerMenuRef(column, index),
5397 fieldId: column,
5398 view,
5399 fields,
5400 onChangeView,
5401 onHide,
5402 setOpenedFilter,
5403 canMove: view.layout?.enableMoving ?? true
5404 }
5405 )
5406 },
5407 column
5408 );
5409 })
5410 ]
5411 }
5412 ) }),
5413 hasData && groupField && dataByGroup ? Array.from(dataByGroup.entries()).map(
5414 ([groupName, groupItems]) => /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
5415 import_components18.Composite,
5416 {
5417 virtualFocus: true,
5418 orientation: "vertical",
5419 render: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("tbody", { role: "group" }),
5420 children: [
5421 /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5422 "tr",
5423 {
5424 className: "dataviews-view-table__group-header-row",
5425 role: "presentation",
5426 children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5427 "td",
5428 {
5429 colSpan: columns.length + (hasPrimaryColumn ? 1 : 0) + 1,
5430 className: "dataviews-view-table__group-header-cell",
5431 role: "presentation",
5432 children: (0, import_i18n23.sprintf)(
5433 // translators: 1: The label of the field e.g. "Date". 2: The value of the field, e.g.: "May 2022".
5434 (0, import_i18n23.__)("%1$s: %2$s"),
5435 groupField.label,
5436 groupName
5437 )
5438 }
5439 )
5440 }
5441 ),
5442 groupItems.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5443 TableRow2,
5444 {
5445 item,
5446 fields,
5447 id: getItemId(item) || index.toString(),
5448 view,
5449 titleField,
5450 mediaField,
5451 descriptionField: descriptionField2,
5452 selection,
5453 getItemId,
5454 onChangeSelection,
5455 multiselect: isMultiselect
5456 },
5457 getItemId(item)
5458 ))
5459 ]
5460 },
5461 `group-${groupName}`
5462 )
5463 ) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5464 import_components18.Composite,
5465 {
5466 render: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("tbody", { role: "presentation" }),
5467 virtualFocus: true,
5468 orientation: "vertical",
5469 children: hasData && data.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5470 TableRow2,
5471 {
5472 item,
5473 fields,
5474 id: getItemId(item) || index.toString(),
5475 view,
5476 titleField,
5477 mediaField,
5478 descriptionField: descriptionField2,
5479 selection,
5480 getItemId,
5481 onChangeSelection,
5482 multiselect: isMultiselect,
5483 posinset: index + 1
5484 },
5485 getItemId(item)
5486 ))
5487 }
5488 )
5489 ]
5490 }
5491 ),
5492 /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
5493 "div",
5494 {
5495 className: clsx_default({
5496 "dataviews-loading": isLoading,
5497 "dataviews-no-results": !hasData && !isLoading
5498 }),
5499 id: tableNoticeId,
5500 children: [
5501 !hasData && (isLoading ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", { children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_components18.Spinner, {}) }) : empty),
5502 hasData && isLoading && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", { className: "dataviews-loading-more", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_components18.Spinner, {}) })
5503 ]
5504 }
5505 )
5506 ] });
5507 }
5508 var picker_table_default = ViewPickerTable;
5509
5510 // packages/dataviews/build-module/dataviews-layouts/utils/preview-size-picker.js
5511 var import_components19 = __toESM(require_components());
5512 var import_i18n24 = __toESM(require_i18n());
5513 var import_element20 = __toESM(require_element());
5514 var import_jsx_runtime49 = __toESM(require_jsx_runtime());
5515 var imageSizes2 = [
5516 {
5517 value: 120,
5518 breakpoint: 1
5519 },
5520 {
5521 value: 170,
5522 breakpoint: 1
5523 },
5524 {
5525 value: 230,
5526 breakpoint: 1
5527 },
5528 {
5529 value: 290,
5530 breakpoint: 1112
5531 // at minimum image width, 4 images display at this container size
5532 },
5533 {
5534 value: 350,
5535 breakpoint: 1636
5536 // at minimum image width, 6 images display at this container size
5537 },
5538 {
5539 value: 430,
5540 breakpoint: 588
5541 // at minimum image width, 2 images display at this container size
5542 }
5543 ];
5544 function PreviewSizePicker() {
5545 const context = (0, import_element20.useContext)(dataviews_context_default);
5546 const view = context.view;
5547 const breakValues = imageSizes2.filter((size) => {
5548 return context.containerWidth >= size.breakpoint;
5549 });
5550 const layoutPreviewSize = view.layout?.previewSize ?? 230;
5551 const previewSizeToUse = breakValues.map((size, index) => ({ ...size, index })).filter((size) => size.value <= layoutPreviewSize).sort((a2, b2) => b2.value - a2.value)[0]?.index ?? 0;
5552 const marks = breakValues.map((size, index) => {
5553 return {
5554 value: index
5555 };
5556 });
5557 return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
5558 import_components19.RangeControl,
5559 {
5560 __nextHasNoMarginBottom: true,
5561 __next40pxDefaultSize: true,
5562 showTooltip: false,
5563 label: (0, import_i18n24.__)("Preview size"),
5564 value: previewSizeToUse,
5565 min: 0,
5566 max: breakValues.length - 1,
5567 withInputField: false,
5568 onChange: (value = 0) => {
5569 context.onChangeView({
5570 ...view,
5571 layout: {
5572 ...view.layout,
5573 previewSize: breakValues[value].value
5574 }
5575 });
5576 },
5577 step: 1,
5578 marks
5579 }
5580 );
5581 }
5582
5583 // packages/dataviews/build-module/dataviews-layouts/table/density-picker.js
5584 var import_components20 = __toESM(require_components());
5585 var import_i18n25 = __toESM(require_i18n());
5586 var import_element21 = __toESM(require_element());
5587 var import_jsx_runtime50 = __toESM(require_jsx_runtime());
5588 function DensityPicker() {
5589 const context = (0, import_element21.useContext)(dataviews_context_default);
5590 const view = context.view;
5591 return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
5592 import_components20.__experimentalToggleGroupControl,
5593 {
5594 __nextHasNoMarginBottom: true,
5595 size: "__unstable-large",
5596 label: (0, import_i18n25.__)("Density"),
5597 value: view.layout?.density || "balanced",
5598 onChange: (value) => {
5599 context.onChangeView({
5600 ...view,
5601 layout: {
5602 ...view.layout,
5603 density: value
5604 }
5605 });
5606 },
5607 isBlock: true,
5608 children: [
5609 /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
5610 import_components20.__experimentalToggleGroupControlOption,
5611 {
5612 value: "comfortable",
5613 label: (0, import_i18n25._x)(
5614 "Comfortable",
5615 "Density option for DataView layout"
5616 )
5617 },
5618 "comfortable"
5619 ),
5620 /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
5621 import_components20.__experimentalToggleGroupControlOption,
5622 {
5623 value: "balanced",
5624 label: (0, import_i18n25._x)("Balanced", "Density option for DataView layout")
5625 },
5626 "balanced"
5627 ),
5628 /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
5629 import_components20.__experimentalToggleGroupControlOption,
5630 {
5631 value: "compact",
5632 label: (0, import_i18n25._x)("Compact", "Density option for DataView layout")
5633 },
5634 "compact"
5635 )
5636 ]
5637 }
5638 );
5639 }
5640
5641 // packages/dataviews/build-module/dataviews-layouts/index.js
5642 var VIEW_LAYOUTS = [
5643 {
5644 type: LAYOUT_TABLE,
5645 label: (0, import_i18n26.__)("Table"),
5646 component: table_default,
5647 icon: block_table_default,
5648 viewConfigOptions: DensityPicker
5649 },
5650 {
5651 type: LAYOUT_GRID,
5652 label: (0, import_i18n26.__)("Grid"),
5653 component: grid_default,
5654 icon: category_default,
5655 viewConfigOptions: PreviewSizePicker
5656 },
5657 {
5658 type: LAYOUT_LIST,
5659 label: (0, import_i18n26.__)("List"),
5660 component: ViewList,
5661 icon: (0, import_i18n26.isRTL)() ? format_list_bullets_rtl_default : format_list_bullets_default
5662 },
5663 {
5664 type: LAYOUT_ACTIVITY,
5665 label: (0, import_i18n26.__)("Activity"),
5666 component: ViewActivity,
5667 icon: scheduled_default,
5668 viewConfigOptions: DensityPicker
5669 },
5670 {
5671 type: LAYOUT_PICKER_GRID,
5672 label: (0, import_i18n26.__)("Grid"),
5673 component: picker_grid_default,
5674 icon: category_default,
5675 viewConfigOptions: PreviewSizePicker,
5676 isPicker: true
5677 },
5678 {
5679 type: LAYOUT_PICKER_TABLE,
5680 label: (0, import_i18n26.__)("Table"),
5681 component: picker_table_default,
5682 icon: block_table_default,
5683 viewConfigOptions: DensityPicker,
5684 isPicker: true
5685 }
5686 ];
5687
5688 // packages/dataviews/build-module/components/dataviews-filters/filters.js
5689 var import_element29 = __toESM(require_element());
5690 var import_components26 = __toESM(require_components());
5691
5692 // packages/dataviews/build-module/components/dataviews-filters/filter.js
5693 var import_components23 = __toESM(require_components());
5694 var import_i18n31 = __toESM(require_i18n());
5695 var import_element26 = __toESM(require_element());
5696 var import_date2 = __toESM(require_date());
5697
5698 // node_modules/@ariakit/react-core/esm/__chunks/3YLGPPWQ.js
5699 var __defProp2 = Object.defineProperty;
5700 var __defProps = Object.defineProperties;
5701 var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5702 var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5703 var __hasOwnProp2 = Object.prototype.hasOwnProperty;
5704 var __propIsEnum = Object.prototype.propertyIsEnumerable;
5705 var __defNormalProp = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5706 var __spreadValues = (a2, b2) => {
5707 for (var prop in b2 || (b2 = {}))
5708 if (__hasOwnProp2.call(b2, prop))
5709 __defNormalProp(a2, prop, b2[prop]);
5710 if (__getOwnPropSymbols)
5711 for (var prop of __getOwnPropSymbols(b2)) {
5712 if (__propIsEnum.call(b2, prop))
5713 __defNormalProp(a2, prop, b2[prop]);
5714 }
5715 return a2;
5716 };
5717 var __spreadProps = (a2, b2) => __defProps(a2, __getOwnPropDescs(b2));
5718 var __objRest = (source, exclude) => {
5719 var target = {};
5720 for (var prop in source)
5721 if (__hasOwnProp2.call(source, prop) && exclude.indexOf(prop) < 0)
5722 target[prop] = source[prop];
5723 if (source != null && __getOwnPropSymbols)
5724 for (var prop of __getOwnPropSymbols(source)) {
5725 if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
5726 target[prop] = source[prop];
5727 }
5728 return target;
5729 };
5730
5731 // node_modules/@ariakit/core/esm/__chunks/3YLGPPWQ.js
5732 var __defProp3 = Object.defineProperty;
5733 var __defProps2 = Object.defineProperties;
5734 var __getOwnPropDescs2 = Object.getOwnPropertyDescriptors;
5735 var __getOwnPropSymbols2 = Object.getOwnPropertySymbols;
5736 var __hasOwnProp3 = Object.prototype.hasOwnProperty;
5737 var __propIsEnum2 = Object.prototype.propertyIsEnumerable;
5738 var __defNormalProp2 = (obj, key, value) => key in obj ? __defProp3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5739 var __spreadValues2 = (a2, b2) => {
5740 for (var prop in b2 || (b2 = {}))
5741 if (__hasOwnProp3.call(b2, prop))
5742 __defNormalProp2(a2, prop, b2[prop]);
5743 if (__getOwnPropSymbols2)
5744 for (var prop of __getOwnPropSymbols2(b2)) {
5745 if (__propIsEnum2.call(b2, prop))
5746 __defNormalProp2(a2, prop, b2[prop]);
5747 }
5748 return a2;
5749 };
5750 var __spreadProps2 = (a2, b2) => __defProps2(a2, __getOwnPropDescs2(b2));
5751 var __objRest2 = (source, exclude) => {
5752 var target = {};
5753 for (var prop in source)
5754 if (__hasOwnProp3.call(source, prop) && exclude.indexOf(prop) < 0)
5755 target[prop] = source[prop];
5756 if (source != null && __getOwnPropSymbols2)
5757 for (var prop of __getOwnPropSymbols2(source)) {
5758 if (exclude.indexOf(prop) < 0 && __propIsEnum2.call(source, prop))
5759 target[prop] = source[prop];
5760 }
5761 return target;
5762 };
5763
5764 // node_modules/@ariakit/core/esm/__chunks/PBFD2E7P.js
5765 function noop2(..._) {
5766 }
5767 function applyState(argument, currentValue) {
5768 if (isUpdater(argument)) {
5769 const value = isLazyValue(currentValue) ? currentValue() : currentValue;
5770 return argument(value);
5771 }
5772 return argument;
5773 }
5774 function isUpdater(argument) {
5775 return typeof argument === "function";
5776 }
5777 function isLazyValue(value) {
5778 return typeof value === "function";
5779 }
5780 function hasOwnProperty(object, prop) {
5781 if (typeof Object.hasOwn === "function") {
5782 return Object.hasOwn(object, prop);
5783 }
5784 return Object.prototype.hasOwnProperty.call(object, prop);
5785 }
5786 function chain(...fns) {
5787 return (...args) => {
5788 for (const fn of fns) {
5789 if (typeof fn === "function") {
5790 fn(...args);
5791 }
5792 }
5793 };
5794 }
5795 function normalizeString(str) {
5796 return str.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
5797 }
5798 function omit(object, keys) {
5799 const result = __spreadValues2({}, object);
5800 for (const key of keys) {
5801 if (hasOwnProperty(result, key)) {
5802 delete result[key];
5803 }
5804 }
5805 return result;
5806 }
5807 function pick(object, paths) {
5808 const result = {};
5809 for (const key of paths) {
5810 if (hasOwnProperty(object, key)) {
5811 result[key] = object[key];
5812 }
5813 }
5814 return result;
5815 }
5816 function identity(value) {
5817 return value;
5818 }
5819 function invariant(condition, message2) {
5820 if (condition) return;
5821 if (typeof message2 !== "string") throw new Error("Invariant failed");
5822 throw new Error(message2);
5823 }
5824 function getKeys(obj) {
5825 return Object.keys(obj);
5826 }
5827 function isFalsyBooleanCallback(booleanOrCallback, ...args) {
5828 const result = typeof booleanOrCallback === "function" ? booleanOrCallback(...args) : booleanOrCallback;
5829 if (result == null) return false;
5830 return !result;
5831 }
5832 function disabledFromProps(props) {
5833 return props.disabled || props["aria-disabled"] === true || props["aria-disabled"] === "true";
5834 }
5835 function removeUndefinedValues(obj) {
5836 const result = {};
5837 for (const key in obj) {
5838 if (obj[key] !== void 0) {
5839 result[key] = obj[key];
5840 }
5841 }
5842 return result;
5843 }
5844 function defaultValue(...values) {
5845 for (const value of values) {
5846 if (value !== void 0) return value;
5847 }
5848 return void 0;
5849 }
5850
5851 // node_modules/@ariakit/react-core/esm/__chunks/SK3NAZA3.js
5852 var import_react2 = __toESM(require_react(), 1);
5853 function setRef(ref, value) {
5854 if (typeof ref === "function") {
5855 ref(value);
5856 } else if (ref) {
5857 ref.current = value;
5858 }
5859 }
5860 function isValidElementWithRef(element) {
5861 if (!element) return false;
5862 if (!(0, import_react2.isValidElement)(element)) return false;
5863 if ("ref" in element.props) return true;
5864 if ("ref" in element) return true;
5865 return false;
5866 }
5867 function getRefProperty(element) {
5868 if (!isValidElementWithRef(element)) return null;
5869 const props = __spreadValues({}, element.props);
5870 return props.ref || element.ref;
5871 }
5872 function mergeProps(base, overrides) {
5873 const props = __spreadValues({}, base);
5874 for (const key in overrides) {
5875 if (!hasOwnProperty(overrides, key)) continue;
5876 if (key === "className") {
5877 const prop = "className";
5878 props[prop] = base[prop] ? `${base[prop]} ${overrides[prop]}` : overrides[prop];
5879 continue;
5880 }
5881 if (key === "style") {
5882 const prop = "style";
5883 props[prop] = base[prop] ? __spreadValues(__spreadValues({}, base[prop]), overrides[prop]) : overrides[prop];
5884 continue;
5885 }
5886 const overrideValue = overrides[key];
5887 if (typeof overrideValue === "function" && key.startsWith("on")) {
5888 const baseValue = base[key];
5889 if (typeof baseValue === "function") {
5890 props[key] = (...args) => {
5891 overrideValue(...args);
5892 baseValue(...args);
5893 };
5894 continue;
5895 }
5896 }
5897 props[key] = overrideValue;
5898 }
5899 return props;
5900 }
5901
5902 // node_modules/@ariakit/core/esm/__chunks/DTR5TSDJ.js
5903 var canUseDOM = checkIsBrowser();
5904 function checkIsBrowser() {
5905 var _a;
5906 return typeof window !== "undefined" && !!((_a = window.document) == null ? void 0 : _a.createElement);
5907 }
5908 function getDocument(node) {
5909 if (!node) return document;
5910 if ("self" in node) return node.document;
5911 return node.ownerDocument || document;
5912 }
5913 function getActiveElement(node, activeDescendant = false) {
5914 const { activeElement } = getDocument(node);
5915 if (!(activeElement == null ? void 0 : activeElement.nodeName)) {
5916 return null;
5917 }
5918 if (isFrame(activeElement) && activeElement.contentDocument) {
5919 return getActiveElement(
5920 activeElement.contentDocument.body,
5921 activeDescendant
5922 );
5923 }
5924 if (activeDescendant) {
5925 const id = activeElement.getAttribute("aria-activedescendant");
5926 if (id) {
5927 const element = getDocument(activeElement).getElementById(id);
5928 if (element) {
5929 return element;
5930 }
5931 }
5932 }
5933 return activeElement;
5934 }
5935 function contains(parent, child) {
5936 return parent === child || parent.contains(child);
5937 }
5938 function isFrame(element) {
5939 return element.tagName === "IFRAME";
5940 }
5941 function isButton(element) {
5942 const tagName = element.tagName.toLowerCase();
5943 if (tagName === "button") return true;
5944 if (tagName === "input" && element.type) {
5945 return buttonInputTypes.indexOf(element.type) !== -1;
5946 }
5947 return false;
5948 }
5949 var buttonInputTypes = [
5950 "button",
5951 "color",
5952 "file",
5953 "image",
5954 "reset",
5955 "submit"
5956 ];
5957 function isVisible(element) {
5958 if (typeof element.checkVisibility === "function") {
5959 return element.checkVisibility();
5960 }
5961 const htmlElement = element;
5962 return htmlElement.offsetWidth > 0 || htmlElement.offsetHeight > 0 || element.getClientRects().length > 0;
5963 }
5964 function isTextField(element) {
5965 try {
5966 const isTextInput = element instanceof HTMLInputElement && element.selectionStart !== null;
5967 const isTextArea = element.tagName === "TEXTAREA";
5968 return isTextInput || isTextArea || false;
5969 } catch (error) {
5970 return false;
5971 }
5972 }
5973 function isTextbox(element) {
5974 return element.isContentEditable || isTextField(element);
5975 }
5976 function getTextboxValue(element) {
5977 if (isTextField(element)) {
5978 return element.value;
5979 }
5980 if (element.isContentEditable) {
5981 const range = getDocument(element).createRange();
5982 range.selectNodeContents(element);
5983 return range.toString();
5984 }
5985 return "";
5986 }
5987 function getTextboxSelection(element) {
5988 let start = 0;
5989 let end = 0;
5990 if (isTextField(element)) {
5991 start = element.selectionStart || 0;
5992 end = element.selectionEnd || 0;
5993 } else if (element.isContentEditable) {
5994 const selection = getDocument(element).getSelection();
5995 if ((selection == null ? void 0 : selection.rangeCount) && selection.anchorNode && contains(element, selection.anchorNode) && selection.focusNode && contains(element, selection.focusNode)) {
5996 const range = selection.getRangeAt(0);
5997 const nextRange = range.cloneRange();
5998 nextRange.selectNodeContents(element);
5999 nextRange.setEnd(range.startContainer, range.startOffset);
6000 start = nextRange.toString().length;
6001 nextRange.setEnd(range.endContainer, range.endOffset);
6002 end = nextRange.toString().length;
6003 }
6004 }
6005 return { start, end };
6006 }
6007 function getPopupRole(element, fallback) {
6008 const allowedPopupRoles = ["dialog", "menu", "listbox", "tree", "grid"];
6009 const role = element == null ? void 0 : element.getAttribute("role");
6010 if (role && allowedPopupRoles.indexOf(role) !== -1) {
6011 return role;
6012 }
6013 return fallback;
6014 }
6015 function getScrollingElement(element) {
6016 if (!element) return null;
6017 const isScrollableOverflow = (overflow) => {
6018 if (overflow === "auto") return true;
6019 if (overflow === "scroll") return true;
6020 return false;
6021 };
6022 if (element.clientHeight && element.scrollHeight > element.clientHeight) {
6023 const { overflowY } = getComputedStyle(element);
6024 if (isScrollableOverflow(overflowY)) return element;
6025 } else if (element.clientWidth && element.scrollWidth > element.clientWidth) {
6026 const { overflowX } = getComputedStyle(element);
6027 if (isScrollableOverflow(overflowX)) return element;
6028 }
6029 return getScrollingElement(element.parentElement) || document.scrollingElement || document.body;
6030 }
6031 function setSelectionRange(element, ...args) {
6032 if (/text|search|password|tel|url/i.test(element.type)) {
6033 element.setSelectionRange(...args);
6034 }
6035 }
6036 function sortBasedOnDOMPosition(items, getElement) {
6037 const pairs = items.map((item, index) => [index, item]);
6038 let isOrderDifferent = false;
6039 pairs.sort(([indexA, a2], [indexB, b2]) => {
6040 const elementA = getElement(a2);
6041 const elementB = getElement(b2);
6042 if (elementA === elementB) return 0;
6043 if (!elementA || !elementB) return 0;
6044 if (isElementPreceding(elementA, elementB)) {
6045 if (indexA > indexB) {
6046 isOrderDifferent = true;
6047 }
6048 return -1;
6049 }
6050 if (indexA < indexB) {
6051 isOrderDifferent = true;
6052 }
6053 return 1;
6054 });
6055 if (isOrderDifferent) {
6056 return pairs.map(([_, item]) => item);
6057 }
6058 return items;
6059 }
6060 function isElementPreceding(a2, b2) {
6061 return Boolean(
6062 b2.compareDocumentPosition(a2) & Node.DOCUMENT_POSITION_PRECEDING
6063 );
6064 }
6065
6066 // node_modules/@ariakit/core/esm/__chunks/QAGXQEUG.js
6067 function isTouchDevice() {
6068 return canUseDOM && !!navigator.maxTouchPoints;
6069 }
6070 function isApple() {
6071 if (!canUseDOM) return false;
6072 return /mac|iphone|ipad|ipod/i.test(navigator.platform);
6073 }
6074 function isSafari() {
6075 return canUseDOM && isApple() && /apple/i.test(navigator.vendor);
6076 }
6077 function isFirefox() {
6078 return canUseDOM && /firefox\//i.test(navigator.userAgent);
6079 }
6080
6081 // node_modules/@ariakit/core/esm/utils/events.js
6082 function isPortalEvent(event) {
6083 return Boolean(
6084 event.currentTarget && !contains(event.currentTarget, event.target)
6085 );
6086 }
6087 function isSelfTarget(event) {
6088 return event.target === event.currentTarget;
6089 }
6090 function isOpeningInNewTab(event) {
6091 const element = event.currentTarget;
6092 if (!element) return false;
6093 const isAppleDevice = isApple();
6094 if (isAppleDevice && !event.metaKey) return false;
6095 if (!isAppleDevice && !event.ctrlKey) return false;
6096 const tagName = element.tagName.toLowerCase();
6097 if (tagName === "a") return true;
6098 if (tagName === "button" && element.type === "submit") return true;
6099 if (tagName === "input" && element.type === "submit") return true;
6100 return false;
6101 }
6102 function isDownloading(event) {
6103 const element = event.currentTarget;
6104 if (!element) return false;
6105 const tagName = element.tagName.toLowerCase();
6106 if (!event.altKey) return false;
6107 if (tagName === "a") return true;
6108 if (tagName === "button" && element.type === "submit") return true;
6109 if (tagName === "input" && element.type === "submit") return true;
6110 return false;
6111 }
6112 function fireBlurEvent(element, eventInit) {
6113 const event = new FocusEvent("blur", eventInit);
6114 const defaultAllowed = element.dispatchEvent(event);
6115 const bubbleInit = __spreadProps2(__spreadValues2({}, eventInit), { bubbles: true });
6116 element.dispatchEvent(new FocusEvent("focusout", bubbleInit));
6117 return defaultAllowed;
6118 }
6119 function fireKeyboardEvent(element, type, eventInit) {
6120 const event = new KeyboardEvent(type, eventInit);
6121 return element.dispatchEvent(event);
6122 }
6123 function fireClickEvent(element, eventInit) {
6124 const event = new MouseEvent("click", eventInit);
6125 return element.dispatchEvent(event);
6126 }
6127 function isFocusEventOutside(event, container) {
6128 const containerElement = container || event.currentTarget;
6129 const relatedTarget = event.relatedTarget;
6130 return !relatedTarget || !contains(containerElement, relatedTarget);
6131 }
6132 function queueBeforeEvent(element, type, callback, timeout) {
6133 const createTimer = (callback2) => {
6134 if (timeout) {
6135 const timerId2 = setTimeout(callback2, timeout);
6136 return () => clearTimeout(timerId2);
6137 }
6138 const timerId = requestAnimationFrame(callback2);
6139 return () => cancelAnimationFrame(timerId);
6140 };
6141 const cancelTimer = createTimer(() => {
6142 element.removeEventListener(type, callSync, true);
6143 callback();
6144 });
6145 const callSync = () => {
6146 cancelTimer();
6147 callback();
6148 };
6149 element.addEventListener(type, callSync, { once: true, capture: true });
6150 return cancelTimer;
6151 }
6152 function addGlobalEventListener(type, listener, options, scope = window) {
6153 const children = [];
6154 try {
6155 scope.document.addEventListener(type, listener, options);
6156 for (const frame of Array.from(scope.frames)) {
6157 children.push(addGlobalEventListener(type, listener, options, frame));
6158 }
6159 } catch (e2) {
6160 }
6161 const removeEventListener = () => {
6162 try {
6163 scope.document.removeEventListener(type, listener, options);
6164 } catch (e2) {
6165 }
6166 for (const remove of children) {
6167 remove();
6168 }
6169 };
6170 return removeEventListener;
6171 }
6172
6173 // node_modules/@ariakit/react-core/esm/__chunks/ABQUS43J.js
6174 var import_react3 = __toESM(require_react(), 1);
6175 var React = __toESM(require_react(), 1);
6176 var _React = __spreadValues({}, React);
6177 var useReactId = _React.useId;
6178 var useReactDeferredValue = _React.useDeferredValue;
6179 var useReactInsertionEffect = _React.useInsertionEffect;
6180 var useSafeLayoutEffect = canUseDOM ? import_react3.useLayoutEffect : import_react3.useEffect;
6181 function useInitialValue(value) {
6182 const [initialValue] = (0, import_react3.useState)(value);
6183 return initialValue;
6184 }
6185 function useLiveRef(value) {
6186 const ref = (0, import_react3.useRef)(value);
6187 useSafeLayoutEffect(() => {
6188 ref.current = value;
6189 });
6190 return ref;
6191 }
6192 function useEvent(callback) {
6193 const ref = (0, import_react3.useRef)(() => {
6194 throw new Error("Cannot call an event handler while rendering.");
6195 });
6196 if (useReactInsertionEffect) {
6197 useReactInsertionEffect(() => {
6198 ref.current = callback;
6199 });
6200 } else {
6201 ref.current = callback;
6202 }
6203 return (0, import_react3.useCallback)((...args) => {
6204 var _a;
6205 return (_a = ref.current) == null ? void 0 : _a.call(ref, ...args);
6206 }, []);
6207 }
6208 function useTransactionState(callback) {
6209 const [state, setState] = (0, import_react3.useState)(null);
6210 useSafeLayoutEffect(() => {
6211 if (state == null) return;
6212 if (!callback) return;
6213 let prevState = null;
6214 callback((prev) => {
6215 prevState = prev;
6216 return state;
6217 });
6218 return () => {
6219 callback(prevState);
6220 };
6221 }, [state, callback]);
6222 return [state, setState];
6223 }
6224 function useMergeRefs(...refs) {
6225 return (0, import_react3.useMemo)(() => {
6226 if (!refs.some(Boolean)) return;
6227 return (value) => {
6228 for (const ref of refs) {
6229 setRef(ref, value);
6230 }
6231 };
6232 }, refs);
6233 }
6234 function useId3(defaultId) {
6235 if (useReactId) {
6236 const reactId = useReactId();
6237 if (defaultId) return defaultId;
6238 return reactId;
6239 }
6240 const [id, setId] = (0, import_react3.useState)(defaultId);
6241 useSafeLayoutEffect(() => {
6242 if (defaultId || id) return;
6243 const random = Math.random().toString(36).slice(2, 8);
6244 setId(`id-${random}`);
6245 }, [defaultId, id]);
6246 return defaultId || id;
6247 }
6248 function useTagName(refOrElement, type) {
6249 const stringOrUndefined = (type2) => {
6250 if (typeof type2 !== "string") return;
6251 return type2;
6252 };
6253 const [tagName, setTagName] = (0, import_react3.useState)(() => stringOrUndefined(type));
6254 useSafeLayoutEffect(() => {
6255 const element = refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement;
6256 setTagName((element == null ? void 0 : element.tagName.toLowerCase()) || stringOrUndefined(type));
6257 }, [refOrElement, type]);
6258 return tagName;
6259 }
6260 function useAttribute(refOrElement, attributeName, defaultValue2) {
6261 const initialValue = useInitialValue(defaultValue2);
6262 const [attribute, setAttribute] = (0, import_react3.useState)(initialValue);
6263 (0, import_react3.useEffect)(() => {
6264 const element = refOrElement && "current" in refOrElement ? refOrElement.current : refOrElement;
6265 if (!element) return;
6266 const callback = () => {
6267 const value = element.getAttribute(attributeName);
6268 setAttribute(value == null ? initialValue : value);
6269 };
6270 const observer = new MutationObserver(callback);
6271 observer.observe(element, { attributeFilter: [attributeName] });
6272 callback();
6273 return () => observer.disconnect();
6274 }, [refOrElement, attributeName, initialValue]);
6275 return attribute;
6276 }
6277 function useUpdateEffect(effect, deps) {
6278 const mounted = (0, import_react3.useRef)(false);
6279 (0, import_react3.useEffect)(() => {
6280 if (mounted.current) {
6281 return effect();
6282 }
6283 mounted.current = true;
6284 }, deps);
6285 (0, import_react3.useEffect)(
6286 () => () => {
6287 mounted.current = false;
6288 },
6289 []
6290 );
6291 }
6292 function useUpdateLayoutEffect(effect, deps) {
6293 const mounted = (0, import_react3.useRef)(false);
6294 useSafeLayoutEffect(() => {
6295 if (mounted.current) {
6296 return effect();
6297 }
6298 mounted.current = true;
6299 }, deps);
6300 useSafeLayoutEffect(
6301 () => () => {
6302 mounted.current = false;
6303 },
6304 []
6305 );
6306 }
6307 function useForceUpdate() {
6308 return (0, import_react3.useReducer)(() => [], []);
6309 }
6310 function useBooleanEvent(booleanOrCallback) {
6311 return useEvent(
6312 typeof booleanOrCallback === "function" ? booleanOrCallback : () => booleanOrCallback
6313 );
6314 }
6315 function useWrapElement(props, callback, deps = []) {
6316 const wrapElement = (0, import_react3.useCallback)(
6317 (element) => {
6318 if (props.wrapElement) {
6319 element = props.wrapElement(element);
6320 }
6321 return callback(element);
6322 },
6323 [...deps, props.wrapElement]
6324 );
6325 return __spreadProps(__spreadValues({}, props), { wrapElement });
6326 }
6327 function useMetadataProps(props, key, value) {
6328 const parent = props.onLoadedMetadataCapture;
6329 const onLoadedMetadataCapture = (0, import_react3.useMemo)(() => {
6330 return Object.assign(() => {
6331 }, __spreadProps(__spreadValues({}, parent), { [key]: value }));
6332 }, [parent, key, value]);
6333 return [parent == null ? void 0 : parent[key], { onLoadedMetadataCapture }];
6334 }
6335 function useIsMouseMoving() {
6336 (0, import_react3.useEffect)(() => {
6337 addGlobalEventListener("mousemove", setMouseMoving, true);
6338 addGlobalEventListener("mousedown", resetMouseMoving, true);
6339 addGlobalEventListener("mouseup", resetMouseMoving, true);
6340 addGlobalEventListener("keydown", resetMouseMoving, true);
6341 addGlobalEventListener("scroll", resetMouseMoving, true);
6342 }, []);
6343 const isMouseMoving = useEvent(() => mouseMoving);
6344 return isMouseMoving;
6345 }
6346 var mouseMoving = false;
6347 var previousScreenX = 0;
6348 var previousScreenY = 0;
6349 function hasMouseMovement(event) {
6350 const movementX = event.movementX || event.screenX - previousScreenX;
6351 const movementY = event.movementY || event.screenY - previousScreenY;
6352 previousScreenX = event.screenX;
6353 previousScreenY = event.screenY;
6354 return movementX || movementY || false;
6355 }
6356 function setMouseMoving(event) {
6357 if (!hasMouseMovement(event)) return;
6358 mouseMoving = true;
6359 }
6360 function resetMouseMoving() {
6361 mouseMoving = false;
6362 }
6363
6364 // node_modules/@ariakit/react-core/esm/__chunks/LMDWO4NN.js
6365 var React2 = __toESM(require_react(), 1);
6366 var import_jsx_runtime51 = __toESM(require_jsx_runtime(), 1);
6367 function forwardRef22(render10) {
6368 const Role = React2.forwardRef((props, ref) => render10(__spreadProps(__spreadValues({}, props), { ref })));
6369 Role.displayName = render10.displayName || render10.name;
6370 return Role;
6371 }
6372 function memo22(Component2, propsAreEqual) {
6373 return React2.memo(Component2, propsAreEqual);
6374 }
6375 function createElement2(Type, props) {
6376 const _a = props, { wrapElement, render: render10 } = _a, rest = __objRest(_a, ["wrapElement", "render"]);
6377 const mergedRef = useMergeRefs(props.ref, getRefProperty(render10));
6378 let element;
6379 if (React2.isValidElement(render10)) {
6380 const renderProps = __spreadProps(__spreadValues({}, render10.props), { ref: mergedRef });
6381 element = React2.cloneElement(render10, mergeProps(rest, renderProps));
6382 } else if (render10) {
6383 element = render10(rest);
6384 } else {
6385 element = /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Type, __spreadValues({}, rest));
6386 }
6387 if (wrapElement) {
6388 return wrapElement(element);
6389 }
6390 return element;
6391 }
6392 function createHook(useProps) {
6393 const useRole = (props = {}) => {
6394 return useProps(props);
6395 };
6396 useRole.displayName = useProps.name;
6397 return useRole;
6398 }
6399 function createStoreContext(providers = [], scopedProviders = []) {
6400 const context = React2.createContext(void 0);
6401 const scopedContext = React2.createContext(void 0);
6402 const useContext27 = () => React2.useContext(context);
6403 const useScopedContext = (onlyScoped = false) => {
6404 const scoped = React2.useContext(scopedContext);
6405 const store = useContext27();
6406 if (onlyScoped) return scoped;
6407 return scoped || store;
6408 };
6409 const useProviderContext = () => {
6410 const scoped = React2.useContext(scopedContext);
6411 const store = useContext27();
6412 if (scoped && scoped === store) return;
6413 return store;
6414 };
6415 const ContextProvider = (props) => {
6416 return providers.reduceRight(
6417 (children, Provider) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Provider, __spreadProps(__spreadValues({}, props), { children })),
6418 /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(context.Provider, __spreadValues({}, props))
6419 );
6420 };
6421 const ScopedContextProvider = (props) => {
6422 return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(ContextProvider, __spreadProps(__spreadValues({}, props), { children: scopedProviders.reduceRight(
6423 (children, Provider) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Provider, __spreadProps(__spreadValues({}, props), { children })),
6424 /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(scopedContext.Provider, __spreadValues({}, props))
6425 ) }));
6426 };
6427 return {
6428 context,
6429 scopedContext,
6430 useContext: useContext27,
6431 useScopedContext,
6432 useProviderContext,
6433 ContextProvider,
6434 ScopedContextProvider
6435 };
6436 }
6437
6438 // node_modules/@ariakit/react-core/esm/__chunks/VDHZ5F7K.js
6439 var ctx = createStoreContext();
6440 var useCollectionContext = ctx.useContext;
6441 var useCollectionScopedContext = ctx.useScopedContext;
6442 var useCollectionProviderContext = ctx.useProviderContext;
6443 var CollectionContextProvider = ctx.ContextProvider;
6444 var CollectionScopedContextProvider = ctx.ScopedContextProvider;
6445
6446 // node_modules/@ariakit/react-core/esm/__chunks/P7GR5CS5.js
6447 var import_react4 = __toESM(require_react(), 1);
6448 var ctx2 = createStoreContext(
6449 [CollectionContextProvider],
6450 [CollectionScopedContextProvider]
6451 );
6452 var useCompositeContext = ctx2.useContext;
6453 var useCompositeScopedContext = ctx2.useScopedContext;
6454 var useCompositeProviderContext = ctx2.useProviderContext;
6455 var CompositeContextProvider = ctx2.ContextProvider;
6456 var CompositeScopedContextProvider = ctx2.ScopedContextProvider;
6457 var CompositeItemContext = (0, import_react4.createContext)(
6458 void 0
6459 );
6460 var CompositeRowContext = (0, import_react4.createContext)(
6461 void 0
6462 );
6463
6464 // node_modules/@ariakit/react-core/esm/__chunks/3XAVFTCA.js
6465 var import_react5 = __toESM(require_react(), 1);
6466 var TagValueContext = (0, import_react5.createContext)(null);
6467 var TagRemoveIdContext = (0, import_react5.createContext)(
6468 null
6469 );
6470 var ctx3 = createStoreContext(
6471 [CompositeContextProvider],
6472 [CompositeScopedContextProvider]
6473 );
6474 var useTagContext = ctx3.useContext;
6475 var useTagScopedContext = ctx3.useScopedContext;
6476 var useTagProviderContext = ctx3.useProviderContext;
6477 var TagContextProvider = ctx3.ContextProvider;
6478 var TagScopedContextProvider = ctx3.ScopedContextProvider;
6479
6480 // node_modules/@ariakit/core/esm/__chunks/BCALMBPZ.js
6481 function getInternal(store, key) {
6482 const internals = store.__unstableInternals;
6483 invariant(internals, "Invalid store");
6484 return internals[key];
6485 }
6486 function createStore(initialState, ...stores) {
6487 let state = initialState;
6488 let prevStateBatch = state;
6489 let lastUpdate = Symbol();
6490 let destroy = noop2;
6491 const instances = /* @__PURE__ */ new Set();
6492 const updatedKeys = /* @__PURE__ */ new Set();
6493 const setups = /* @__PURE__ */ new Set();
6494 const listeners = /* @__PURE__ */ new Set();
6495 const batchListeners = /* @__PURE__ */ new Set();
6496 const disposables = /* @__PURE__ */ new WeakMap();
6497 const listenerKeys = /* @__PURE__ */ new WeakMap();
6498 const storeSetup = (callback) => {
6499 setups.add(callback);
6500 return () => setups.delete(callback);
6501 };
6502 const storeInit = () => {
6503 const initialized = instances.size;
6504 const instance = Symbol();
6505 instances.add(instance);
6506 const maybeDestroy = () => {
6507 instances.delete(instance);
6508 if (instances.size) return;
6509 destroy();
6510 };
6511 if (initialized) return maybeDestroy;
6512 const desyncs = getKeys(state).map(
6513 (key) => chain(
6514 ...stores.map((store) => {
6515 var _a;
6516 const storeState = (_a = store == null ? void 0 : store.getState) == null ? void 0 : _a.call(store);
6517 if (!storeState) return;
6518 if (!hasOwnProperty(storeState, key)) return;
6519 return sync(store, [key], (state2) => {
6520 setState(
6521 key,
6522 state2[key],
6523 // @ts-expect-error - Not public API. This is just to prevent
6524 // infinite loops.
6525 true
6526 );
6527 });
6528 })
6529 )
6530 );
6531 const teardowns = [];
6532 for (const setup2 of setups) {
6533 teardowns.push(setup2());
6534 }
6535 const cleanups = stores.map(init);
6536 destroy = chain(...desyncs, ...teardowns, ...cleanups);
6537 return maybeDestroy;
6538 };
6539 const sub = (keys, listener, set = listeners) => {
6540 set.add(listener);
6541 listenerKeys.set(listener, keys);
6542 return () => {
6543 var _a;
6544 (_a = disposables.get(listener)) == null ? void 0 : _a();
6545 disposables.delete(listener);
6546 listenerKeys.delete(listener);
6547 set.delete(listener);
6548 };
6549 };
6550 const storeSubscribe = (keys, listener) => sub(keys, listener);
6551 const storeSync = (keys, listener) => {
6552 disposables.set(listener, listener(state, state));
6553 return sub(keys, listener);
6554 };
6555 const storeBatch = (keys, listener) => {
6556 disposables.set(listener, listener(state, prevStateBatch));
6557 return sub(keys, listener, batchListeners);
6558 };
6559 const storePick = (keys) => createStore(pick(state, keys), finalStore);
6560 const storeOmit = (keys) => createStore(omit(state, keys), finalStore);
6561 const getState = () => state;
6562 const setState = (key, value, fromStores = false) => {
6563 var _a;
6564 if (!hasOwnProperty(state, key)) return;
6565 const nextValue = applyState(value, state[key]);
6566 if (nextValue === state[key]) return;
6567 if (!fromStores) {
6568 for (const store of stores) {
6569 (_a = store == null ? void 0 : store.setState) == null ? void 0 : _a.call(store, key, nextValue);
6570 }
6571 }
6572 const prevState = state;
6573 state = __spreadProps2(__spreadValues2({}, state), { [key]: nextValue });
6574 const thisUpdate = Symbol();
6575 lastUpdate = thisUpdate;
6576 updatedKeys.add(key);
6577 const run = (listener, prev, uKeys) => {
6578 var _a2;
6579 const keys = listenerKeys.get(listener);
6580 const updated = (k) => uKeys ? uKeys.has(k) : k === key;
6581 if (!keys || keys.some(updated)) {
6582 (_a2 = disposables.get(listener)) == null ? void 0 : _a2();
6583 disposables.set(listener, listener(state, prev));
6584 }
6585 };
6586 for (const listener of listeners) {
6587 run(listener, prevState);
6588 }
6589 queueMicrotask(() => {
6590 if (lastUpdate !== thisUpdate) return;
6591 const snapshot = state;
6592 for (const listener of batchListeners) {
6593 run(listener, prevStateBatch, updatedKeys);
6594 }
6595 prevStateBatch = snapshot;
6596 updatedKeys.clear();
6597 });
6598 };
6599 const finalStore = {
6600 getState,
6601 setState,
6602 __unstableInternals: {
6603 setup: storeSetup,
6604 init: storeInit,
6605 subscribe: storeSubscribe,
6606 sync: storeSync,
6607 batch: storeBatch,
6608 pick: storePick,
6609 omit: storeOmit
6610 }
6611 };
6612 return finalStore;
6613 }
6614 function setup(store, ...args) {
6615 if (!store) return;
6616 return getInternal(store, "setup")(...args);
6617 }
6618 function init(store, ...args) {
6619 if (!store) return;
6620 return getInternal(store, "init")(...args);
6621 }
6622 function subscribe(store, ...args) {
6623 if (!store) return;
6624 return getInternal(store, "subscribe")(...args);
6625 }
6626 function sync(store, ...args) {
6627 if (!store) return;
6628 return getInternal(store, "sync")(...args);
6629 }
6630 function batch(store, ...args) {
6631 if (!store) return;
6632 return getInternal(store, "batch")(...args);
6633 }
6634 function omit2(store, ...args) {
6635 if (!store) return;
6636 return getInternal(store, "omit")(...args);
6637 }
6638 function pick2(store, ...args) {
6639 if (!store) return;
6640 return getInternal(store, "pick")(...args);
6641 }
6642 function mergeStore(...stores) {
6643 const initialState = stores.reduce((state, store2) => {
6644 var _a;
6645 const nextState = (_a = store2 == null ? void 0 : store2.getState) == null ? void 0 : _a.call(store2);
6646 if (!nextState) return state;
6647 return Object.assign(state, nextState);
6648 }, {});
6649 const store = createStore(initialState, ...stores);
6650 return Object.assign({}, ...stores, store);
6651 }
6652 function throwOnConflictingProps(props, store) {
6653 if (false) return;
6654 if (!store) return;
6655 const defaultKeys = Object.entries(props).filter(([key, value]) => key.startsWith("default") && value !== void 0).map(([key]) => {
6656 var _a;
6657 const stateKey = key.replace("default", "");
6658 return `${((_a = stateKey[0]) == null ? void 0 : _a.toLowerCase()) || ""}${stateKey.slice(1)}`;
6659 });
6660 if (!defaultKeys.length) return;
6661 const storeState = store.getState();
6662 const conflictingProps = defaultKeys.filter(
6663 (key) => hasOwnProperty(storeState, key)
6664 );
6665 if (!conflictingProps.length) return;
6666 throw new Error(
6667 `Passing a store prop in conjunction with a default state is not supported.
6668
6669 const store = useSelectStore();
6670 <SelectProvider store={store} defaultValue="Apple" />
6671 ^ ^
6672
6673 Instead, pass the default state to the topmost store:
6674
6675 const store = useSelectStore({ defaultValue: "Apple" });
6676 <SelectProvider store={store} />
6677
6678 See https://github.com/ariakit/ariakit/pull/2745 for more details.
6679
6680 If there's a particular need for this, please submit a feature request at https://github.com/ariakit/ariakit
6681 `
6682 );
6683 }
6684
6685 // node_modules/@ariakit/react-core/esm/__chunks/YV4JVR4I.js
6686 var React3 = __toESM(require_react(), 1);
6687 var import_shim = __toESM(require_shim(), 1);
6688 var { useSyncExternalStore } = import_shim.default;
6689 var noopSubscribe = () => () => {
6690 };
6691 function useStoreState(store, keyOrSelector = identity) {
6692 const storeSubscribe = React3.useCallback(
6693 (callback) => {
6694 if (!store) return noopSubscribe();
6695 return subscribe(store, null, callback);
6696 },
6697 [store]
6698 );
6699 const getSnapshot = () => {
6700 const key = typeof keyOrSelector === "string" ? keyOrSelector : null;
6701 const selector2 = typeof keyOrSelector === "function" ? keyOrSelector : null;
6702 const state = store == null ? void 0 : store.getState();
6703 if (selector2) return selector2(state);
6704 if (!state) return;
6705 if (!key) return;
6706 if (!hasOwnProperty(state, key)) return;
6707 return state[key];
6708 };
6709 return useSyncExternalStore(storeSubscribe, getSnapshot, getSnapshot);
6710 }
6711 function useStoreStateObject(store, object) {
6712 const objRef = React3.useRef(
6713 {}
6714 );
6715 const storeSubscribe = React3.useCallback(
6716 (callback) => {
6717 if (!store) return noopSubscribe();
6718 return subscribe(store, null, callback);
6719 },
6720 [store]
6721 );
6722 const getSnapshot = () => {
6723 const state = store == null ? void 0 : store.getState();
6724 let updated = false;
6725 const obj = objRef.current;
6726 for (const prop in object) {
6727 const keyOrSelector = object[prop];
6728 if (typeof keyOrSelector === "function") {
6729 const value = keyOrSelector(state);
6730 if (value !== obj[prop]) {
6731 obj[prop] = value;
6732 updated = true;
6733 }
6734 }
6735 if (typeof keyOrSelector === "string") {
6736 if (!state) continue;
6737 if (!hasOwnProperty(state, keyOrSelector)) continue;
6738 const value = state[keyOrSelector];
6739 if (value !== obj[prop]) {
6740 obj[prop] = value;
6741 updated = true;
6742 }
6743 }
6744 }
6745 if (updated) {
6746 objRef.current = __spreadValues({}, obj);
6747 }
6748 return objRef.current;
6749 };
6750 return useSyncExternalStore(storeSubscribe, getSnapshot, getSnapshot);
6751 }
6752 function useStoreProps(store, props, key, setKey) {
6753 const value = hasOwnProperty(props, key) ? props[key] : void 0;
6754 const setValue = setKey ? props[setKey] : void 0;
6755 const propsRef = useLiveRef({ value, setValue });
6756 useSafeLayoutEffect(() => {
6757 return sync(store, [key], (state, prev) => {
6758 const { value: value2, setValue: setValue2 } = propsRef.current;
6759 if (!setValue2) return;
6760 if (state[key] === prev[key]) return;
6761 if (state[key] === value2) return;
6762 setValue2(state[key]);
6763 });
6764 }, [store, key]);
6765 useSafeLayoutEffect(() => {
6766 if (value === void 0) return;
6767 store.setState(key, value);
6768 return batch(store, [key], () => {
6769 if (value === void 0) return;
6770 store.setState(key, value);
6771 });
6772 });
6773 }
6774 function useStore(createStore2, props) {
6775 const [store, setStore] = React3.useState(() => createStore2(props));
6776 useSafeLayoutEffect(() => init(store), [store]);
6777 const useState23 = React3.useCallback(
6778 (keyOrSelector) => useStoreState(store, keyOrSelector),
6779 [store]
6780 );
6781 const memoizedStore = React3.useMemo(
6782 () => __spreadProps(__spreadValues({}, store), { useState: useState23 }),
6783 [store, useState23]
6784 );
6785 const updateStore = useEvent(() => {
6786 setStore((store2) => createStore2(__spreadValues(__spreadValues({}, props), store2.getState())));
6787 });
6788 return [memoizedStore, updateStore];
6789 }
6790
6791 // node_modules/@ariakit/core/esm/__chunks/CYQWQL4J.js
6792 function getCommonParent(items) {
6793 var _a;
6794 const firstItem = items.find((item) => !!item.element);
6795 const lastItem = [...items].reverse().find((item) => !!item.element);
6796 let parentElement = (_a = firstItem == null ? void 0 : firstItem.element) == null ? void 0 : _a.parentElement;
6797 while (parentElement && (lastItem == null ? void 0 : lastItem.element)) {
6798 const parent = parentElement;
6799 if (lastItem && parent.contains(lastItem.element)) {
6800 return parentElement;
6801 }
6802 parentElement = parentElement.parentElement;
6803 }
6804 return getDocument(parentElement).body;
6805 }
6806 function getPrivateStore(store) {
6807 return store == null ? void 0 : store.__unstablePrivateStore;
6808 }
6809 function createCollectionStore(props = {}) {
6810 var _a;
6811 throwOnConflictingProps(props, props.store);
6812 const syncState = (_a = props.store) == null ? void 0 : _a.getState();
6813 const items = defaultValue(
6814 props.items,
6815 syncState == null ? void 0 : syncState.items,
6816 props.defaultItems,
6817 []
6818 );
6819 const itemsMap = new Map(items.map((item) => [item.id, item]));
6820 const initialState = {
6821 items,
6822 renderedItems: defaultValue(syncState == null ? void 0 : syncState.renderedItems, [])
6823 };
6824 const syncPrivateStore = getPrivateStore(props.store);
6825 const privateStore = createStore(
6826 { items, renderedItems: initialState.renderedItems },
6827 syncPrivateStore
6828 );
6829 const collection = createStore(initialState, props.store);
6830 const sortItems = (renderedItems) => {
6831 const sortedItems = sortBasedOnDOMPosition(renderedItems, (i2) => i2.element);
6832 privateStore.setState("renderedItems", sortedItems);
6833 collection.setState("renderedItems", sortedItems);
6834 };
6835 setup(collection, () => init(privateStore));
6836 setup(privateStore, () => {
6837 return batch(privateStore, ["items"], (state) => {
6838 collection.setState("items", state.items);
6839 });
6840 });
6841 setup(privateStore, () => {
6842 return batch(privateStore, ["renderedItems"], (state) => {
6843 let firstRun = true;
6844 let raf = requestAnimationFrame(() => {
6845 const { renderedItems } = collection.getState();
6846 if (state.renderedItems === renderedItems) return;
6847 sortItems(state.renderedItems);
6848 });
6849 if (typeof IntersectionObserver !== "function") {
6850 return () => cancelAnimationFrame(raf);
6851 }
6852 const ioCallback = () => {
6853 if (firstRun) {
6854 firstRun = false;
6855 return;
6856 }
6857 cancelAnimationFrame(raf);
6858 raf = requestAnimationFrame(() => sortItems(state.renderedItems));
6859 };
6860 const root = getCommonParent(state.renderedItems);
6861 const observer = new IntersectionObserver(ioCallback, { root });
6862 for (const item of state.renderedItems) {
6863 if (!item.element) continue;
6864 observer.observe(item.element);
6865 }
6866 return () => {
6867 cancelAnimationFrame(raf);
6868 observer.disconnect();
6869 };
6870 });
6871 });
6872 const mergeItem = (item, setItems, canDeleteFromMap = false) => {
6873 let prevItem;
6874 setItems((items2) => {
6875 const index = items2.findIndex(({ id }) => id === item.id);
6876 const nextItems = items2.slice();
6877 if (index !== -1) {
6878 prevItem = items2[index];
6879 const nextItem = __spreadValues2(__spreadValues2({}, prevItem), item);
6880 nextItems[index] = nextItem;
6881 itemsMap.set(item.id, nextItem);
6882 } else {
6883 nextItems.push(item);
6884 itemsMap.set(item.id, item);
6885 }
6886 return nextItems;
6887 });
6888 const unmergeItem = () => {
6889 setItems((items2) => {
6890 if (!prevItem) {
6891 if (canDeleteFromMap) {
6892 itemsMap.delete(item.id);
6893 }
6894 return items2.filter(({ id }) => id !== item.id);
6895 }
6896 const index = items2.findIndex(({ id }) => id === item.id);
6897 if (index === -1) return items2;
6898 const nextItems = items2.slice();
6899 nextItems[index] = prevItem;
6900 itemsMap.set(item.id, prevItem);
6901 return nextItems;
6902 });
6903 };
6904 return unmergeItem;
6905 };
6906 const registerItem = (item) => mergeItem(
6907 item,
6908 (getItems) => privateStore.setState("items", getItems),
6909 true
6910 );
6911 return __spreadProps2(__spreadValues2({}, collection), {
6912 registerItem,
6913 renderItem: (item) => chain(
6914 registerItem(item),
6915 mergeItem(
6916 item,
6917 (getItems) => privateStore.setState("renderedItems", getItems)
6918 )
6919 ),
6920 item: (id) => {
6921 if (!id) return null;
6922 let item = itemsMap.get(id);
6923 if (!item) {
6924 const { items: items2 } = privateStore.getState();
6925 item = items2.find((item2) => item2.id === id);
6926 if (item) {
6927 itemsMap.set(id, item);
6928 }
6929 }
6930 return item || null;
6931 },
6932 // @ts-expect-error Internal
6933 __unstablePrivateStore: privateStore
6934 });
6935 }
6936
6937 // node_modules/@ariakit/react-core/esm/__chunks/C3IKGW5T.js
6938 function useCollectionStoreProps(store, update, props) {
6939 useUpdateEffect(update, [props.store]);
6940 useStoreProps(store, props, "items", "setItems");
6941 return store;
6942 }
6943
6944 // node_modules/@ariakit/core/esm/__chunks/7PRQYBBV.js
6945 function toArray(arg) {
6946 if (Array.isArray(arg)) {
6947 return arg;
6948 }
6949 return typeof arg !== "undefined" ? [arg] : [];
6950 }
6951 function flatten2DArray(array) {
6952 const flattened = [];
6953 for (const row of array) {
6954 flattened.push(...row);
6955 }
6956 return flattened;
6957 }
6958 function reverseArray(array) {
6959 return array.slice().reverse();
6960 }
6961
6962 // node_modules/@ariakit/core/esm/__chunks/AJZ4BYF3.js
6963 var NULL_ITEM = { id: null };
6964 function findFirstEnabledItem(items, excludeId) {
6965 return items.find((item) => {
6966 if (excludeId) {
6967 return !item.disabled && item.id !== excludeId;
6968 }
6969 return !item.disabled;
6970 });
6971 }
6972 function getEnabledItems(items, excludeId) {
6973 return items.filter((item) => {
6974 if (excludeId) {
6975 return !item.disabled && item.id !== excludeId;
6976 }
6977 return !item.disabled;
6978 });
6979 }
6980 function getItemsInRow(items, rowId) {
6981 return items.filter((item) => item.rowId === rowId);
6982 }
6983 function flipItems(items, activeId, shouldInsertNullItem = false) {
6984 const index = items.findIndex((item) => item.id === activeId);
6985 return [
6986 ...items.slice(index + 1),
6987 ...shouldInsertNullItem ? [NULL_ITEM] : [],
6988 ...items.slice(0, index)
6989 ];
6990 }
6991 function groupItemsByRows(items) {
6992 const rows = [];
6993 for (const item of items) {
6994 const row = rows.find((currentRow) => {
6995 var _a;
6996 return ((_a = currentRow[0]) == null ? void 0 : _a.rowId) === item.rowId;
6997 });
6998 if (row) {
6999 row.push(item);
7000 } else {
7001 rows.push([item]);
7002 }
7003 }
7004 return rows;
7005 }
7006 function getMaxRowLength(array) {
7007 let maxLength = 0;
7008 for (const { length } of array) {
7009 if (length > maxLength) {
7010 maxLength = length;
7011 }
7012 }
7013 return maxLength;
7014 }
7015 function createEmptyItem(rowId) {
7016 return {
7017 id: "__EMPTY_ITEM__",
7018 disabled: true,
7019 rowId
7020 };
7021 }
7022 function normalizeRows(rows, activeId, focusShift) {
7023 const maxLength = getMaxRowLength(rows);
7024 for (const row of rows) {
7025 for (let i2 = 0; i2 < maxLength; i2 += 1) {
7026 const item = row[i2];
7027 if (!item || focusShift && item.disabled) {
7028 const isFirst = i2 === 0;
7029 const previousItem = isFirst && focusShift ? findFirstEnabledItem(row) : row[i2 - 1];
7030 row[i2] = previousItem && activeId !== previousItem.id && focusShift ? previousItem : createEmptyItem(previousItem == null ? void 0 : previousItem.rowId);
7031 }
7032 }
7033 }
7034 return rows;
7035 }
7036 function verticalizeItems(items) {
7037 const rows = groupItemsByRows(items);
7038 const maxLength = getMaxRowLength(rows);
7039 const verticalized = [];
7040 for (let i2 = 0; i2 < maxLength; i2 += 1) {
7041 for (const row of rows) {
7042 const item = row[i2];
7043 if (item) {
7044 verticalized.push(__spreadProps2(__spreadValues2({}, item), {
7045 // If there's no rowId, it means that it's not a grid composite, but
7046 // a single row instead. So, instead of verticalizing it, that is,
7047 // assigning a different rowId based on the column index, we keep it
7048 // undefined so they will be part of the same row. This is useful
7049 // when using up/down on one-dimensional composites.
7050 rowId: item.rowId ? `${i2}` : void 0
7051 }));
7052 }
7053 }
7054 }
7055 return verticalized;
7056 }
7057 function createCompositeStore(props = {}) {
7058 var _a;
7059 const syncState = (_a = props.store) == null ? void 0 : _a.getState();
7060 const collection = createCollectionStore(props);
7061 const activeId = defaultValue(
7062 props.activeId,
7063 syncState == null ? void 0 : syncState.activeId,
7064 props.defaultActiveId
7065 );
7066 const initialState = __spreadProps2(__spreadValues2({}, collection.getState()), {
7067 id: defaultValue(
7068 props.id,
7069 syncState == null ? void 0 : syncState.id,
7070 `id-${Math.random().toString(36).slice(2, 8)}`
7071 ),
7072 activeId,
7073 baseElement: defaultValue(syncState == null ? void 0 : syncState.baseElement, null),
7074 includesBaseElement: defaultValue(
7075 props.includesBaseElement,
7076 syncState == null ? void 0 : syncState.includesBaseElement,
7077 activeId === null
7078 ),
7079 moves: defaultValue(syncState == null ? void 0 : syncState.moves, 0),
7080 orientation: defaultValue(
7081 props.orientation,
7082 syncState == null ? void 0 : syncState.orientation,
7083 "both"
7084 ),
7085 rtl: defaultValue(props.rtl, syncState == null ? void 0 : syncState.rtl, false),
7086 virtualFocus: defaultValue(
7087 props.virtualFocus,
7088 syncState == null ? void 0 : syncState.virtualFocus,
7089 false
7090 ),
7091 focusLoop: defaultValue(props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, false),
7092 focusWrap: defaultValue(props.focusWrap, syncState == null ? void 0 : syncState.focusWrap, false),
7093 focusShift: defaultValue(props.focusShift, syncState == null ? void 0 : syncState.focusShift, false)
7094 });
7095 const composite = createStore(initialState, collection, props.store);
7096 setup(
7097 composite,
7098 () => sync(composite, ["renderedItems", "activeId"], (state) => {
7099 composite.setState("activeId", (activeId2) => {
7100 var _a2;
7101 if (activeId2 !== void 0) return activeId2;
7102 return (_a2 = findFirstEnabledItem(state.renderedItems)) == null ? void 0 : _a2.id;
7103 });
7104 })
7105 );
7106 const getNextId = (direction = "next", options = {}) => {
7107 var _a2, _b;
7108 const defaultState = composite.getState();
7109 const {
7110 skip = 0,
7111 activeId: activeId2 = defaultState.activeId,
7112 focusShift = defaultState.focusShift,
7113 focusLoop = defaultState.focusLoop,
7114 focusWrap = defaultState.focusWrap,
7115 includesBaseElement = defaultState.includesBaseElement,
7116 renderedItems = defaultState.renderedItems,
7117 rtl = defaultState.rtl
7118 } = options;
7119 const isVerticalDirection = direction === "up" || direction === "down";
7120 const isNextDirection = direction === "next" || direction === "down";
7121 const canReverse = isNextDirection ? rtl && !isVerticalDirection : !rtl || isVerticalDirection;
7122 const canShift = focusShift && !skip;
7123 let items = !isVerticalDirection ? renderedItems : flatten2DArray(
7124 normalizeRows(groupItemsByRows(renderedItems), activeId2, canShift)
7125 );
7126 items = canReverse ? reverseArray(items) : items;
7127 items = isVerticalDirection ? verticalizeItems(items) : items;
7128 if (activeId2 == null) {
7129 return (_a2 = findFirstEnabledItem(items)) == null ? void 0 : _a2.id;
7130 }
7131 const activeItem = items.find((item) => item.id === activeId2);
7132 if (!activeItem) {
7133 return (_b = findFirstEnabledItem(items)) == null ? void 0 : _b.id;
7134 }
7135 const isGrid2 = items.some((item) => item.rowId);
7136 const activeIndex = items.indexOf(activeItem);
7137 const nextItems = items.slice(activeIndex + 1);
7138 const nextItemsInRow = getItemsInRow(nextItems, activeItem.rowId);
7139 if (skip) {
7140 const nextEnabledItemsInRow = getEnabledItems(nextItemsInRow, activeId2);
7141 const nextItem2 = nextEnabledItemsInRow.slice(skip)[0] || // If we can't find an item, just return the last one.
7142 nextEnabledItemsInRow[nextEnabledItemsInRow.length - 1];
7143 return nextItem2 == null ? void 0 : nextItem2.id;
7144 }
7145 const canLoop = focusLoop && (isVerticalDirection ? focusLoop !== "horizontal" : focusLoop !== "vertical");
7146 const canWrap = isGrid2 && focusWrap && (isVerticalDirection ? focusWrap !== "horizontal" : focusWrap !== "vertical");
7147 const hasNullItem = isNextDirection ? (!isGrid2 || isVerticalDirection) && canLoop && includesBaseElement : isVerticalDirection ? includesBaseElement : false;
7148 if (canLoop) {
7149 const loopItems = canWrap && !hasNullItem ? items : getItemsInRow(items, activeItem.rowId);
7150 const sortedItems = flipItems(loopItems, activeId2, hasNullItem);
7151 const nextItem2 = findFirstEnabledItem(sortedItems, activeId2);
7152 return nextItem2 == null ? void 0 : nextItem2.id;
7153 }
7154 if (canWrap) {
7155 const nextItem2 = findFirstEnabledItem(
7156 // We can use nextItems, which contains all the next items, including
7157 // items from other rows, to wrap between rows. However, if there is a
7158 // null item (the composite container), we'll only use the next items in
7159 // the row. So moving next from the last item will focus on the
7160 // composite container. On grid composites, horizontal navigation never
7161 // focuses on the composite container, only vertical.
7162 hasNullItem ? nextItemsInRow : nextItems,
7163 activeId2
7164 );
7165 const nextId = hasNullItem ? (nextItem2 == null ? void 0 : nextItem2.id) || null : nextItem2 == null ? void 0 : nextItem2.id;
7166 return nextId;
7167 }
7168 const nextItem = findFirstEnabledItem(nextItemsInRow, activeId2);
7169 if (!nextItem && hasNullItem) {
7170 return null;
7171 }
7172 return nextItem == null ? void 0 : nextItem.id;
7173 };
7174 return __spreadProps2(__spreadValues2(__spreadValues2({}, collection), composite), {
7175 setBaseElement: (element) => composite.setState("baseElement", element),
7176 setActiveId: (id) => composite.setState("activeId", id),
7177 move: (id) => {
7178 if (id === void 0) return;
7179 composite.setState("activeId", id);
7180 composite.setState("moves", (moves) => moves + 1);
7181 },
7182 first: () => {
7183 var _a2;
7184 return (_a2 = findFirstEnabledItem(composite.getState().renderedItems)) == null ? void 0 : _a2.id;
7185 },
7186 last: () => {
7187 var _a2;
7188 return (_a2 = findFirstEnabledItem(reverseArray(composite.getState().renderedItems))) == null ? void 0 : _a2.id;
7189 },
7190 next: (options) => {
7191 if (options !== void 0 && typeof options === "number") {
7192 options = { skip: options };
7193 }
7194 return getNextId("next", options);
7195 },
7196 previous: (options) => {
7197 if (options !== void 0 && typeof options === "number") {
7198 options = { skip: options };
7199 }
7200 return getNextId("previous", options);
7201 },
7202 down: (options) => {
7203 if (options !== void 0 && typeof options === "number") {
7204 options = { skip: options };
7205 }
7206 return getNextId("down", options);
7207 },
7208 up: (options) => {
7209 if (options !== void 0 && typeof options === "number") {
7210 options = { skip: options };
7211 }
7212 return getNextId("up", options);
7213 }
7214 });
7215 }
7216
7217 // node_modules/@ariakit/react-core/esm/__chunks/4CMBR7SL.js
7218 function useCompositeStoreOptions(props) {
7219 const id = useId3(props.id);
7220 return __spreadValues({ id }, props);
7221 }
7222 function useCompositeStoreProps(store, update, props) {
7223 store = useCollectionStoreProps(store, update, props);
7224 useStoreProps(store, props, "activeId", "setActiveId");
7225 useStoreProps(store, props, "includesBaseElement");
7226 useStoreProps(store, props, "virtualFocus");
7227 useStoreProps(store, props, "orientation");
7228 useStoreProps(store, props, "rtl");
7229 useStoreProps(store, props, "focusLoop");
7230 useStoreProps(store, props, "focusWrap");
7231 useStoreProps(store, props, "focusShift");
7232 return store;
7233 }
7234
7235 // node_modules/@ariakit/core/esm/__chunks/RCQ5P4YE.js
7236 function createDisclosureStore(props = {}) {
7237 const store = mergeStore(
7238 props.store,
7239 omit2(props.disclosure, ["contentElement", "disclosureElement"])
7240 );
7241 throwOnConflictingProps(props, store);
7242 const syncState = store == null ? void 0 : store.getState();
7243 const open = defaultValue(
7244 props.open,
7245 syncState == null ? void 0 : syncState.open,
7246 props.defaultOpen,
7247 false
7248 );
7249 const animated = defaultValue(props.animated, syncState == null ? void 0 : syncState.animated, false);
7250 const initialState = {
7251 open,
7252 animated,
7253 animating: !!animated && open,
7254 mounted: open,
7255 contentElement: defaultValue(syncState == null ? void 0 : syncState.contentElement, null),
7256 disclosureElement: defaultValue(syncState == null ? void 0 : syncState.disclosureElement, null)
7257 };
7258 const disclosure = createStore(initialState, store);
7259 setup(
7260 disclosure,
7261 () => sync(disclosure, ["animated", "animating"], (state) => {
7262 if (state.animated) return;
7263 disclosure.setState("animating", false);
7264 })
7265 );
7266 setup(
7267 disclosure,
7268 () => subscribe(disclosure, ["open"], () => {
7269 if (!disclosure.getState().animated) return;
7270 disclosure.setState("animating", true);
7271 })
7272 );
7273 setup(
7274 disclosure,
7275 () => sync(disclosure, ["open", "animating"], (state) => {
7276 disclosure.setState("mounted", state.open || state.animating);
7277 })
7278 );
7279 return __spreadProps2(__spreadValues2({}, disclosure), {
7280 disclosure: props.disclosure,
7281 setOpen: (value) => disclosure.setState("open", value),
7282 show: () => disclosure.setState("open", true),
7283 hide: () => disclosure.setState("open", false),
7284 toggle: () => disclosure.setState("open", (open2) => !open2),
7285 stopAnimation: () => disclosure.setState("animating", false),
7286 setContentElement: (value) => disclosure.setState("contentElement", value),
7287 setDisclosureElement: (value) => disclosure.setState("disclosureElement", value)
7288 });
7289 }
7290
7291 // node_modules/@ariakit/react-core/esm/__chunks/WYCIER3C.js
7292 function useDisclosureStoreProps(store, update, props) {
7293 useUpdateEffect(update, [props.store, props.disclosure]);
7294 useStoreProps(store, props, "open", "setOpen");
7295 useStoreProps(store, props, "mounted", "setMounted");
7296 useStoreProps(store, props, "animated");
7297 return Object.assign(store, { disclosure: props.disclosure });
7298 }
7299
7300 // node_modules/@ariakit/core/esm/__chunks/FZZ2AVHF.js
7301 function createDialogStore(props = {}) {
7302 return createDisclosureStore(props);
7303 }
7304
7305 // node_modules/@ariakit/react-core/esm/__chunks/BM6PGYQY.js
7306 function useDialogStoreProps(store, update, props) {
7307 return useDisclosureStoreProps(store, update, props);
7308 }
7309
7310 // node_modules/@ariakit/core/esm/__chunks/ME2CUF3F.js
7311 function createPopoverStore(_a = {}) {
7312 var _b = _a, {
7313 popover: otherPopover
7314 } = _b, props = __objRest2(_b, [
7315 "popover"
7316 ]);
7317 const store = mergeStore(
7318 props.store,
7319 omit2(otherPopover, [
7320 "arrowElement",
7321 "anchorElement",
7322 "contentElement",
7323 "popoverElement",
7324 "disclosureElement"
7325 ])
7326 );
7327 throwOnConflictingProps(props, store);
7328 const syncState = store == null ? void 0 : store.getState();
7329 const dialog = createDialogStore(__spreadProps2(__spreadValues2({}, props), { store }));
7330 const placement = defaultValue(
7331 props.placement,
7332 syncState == null ? void 0 : syncState.placement,
7333 "bottom"
7334 );
7335 const initialState = __spreadProps2(__spreadValues2({}, dialog.getState()), {
7336 placement,
7337 currentPlacement: placement,
7338 anchorElement: defaultValue(syncState == null ? void 0 : syncState.anchorElement, null),
7339 popoverElement: defaultValue(syncState == null ? void 0 : syncState.popoverElement, null),
7340 arrowElement: defaultValue(syncState == null ? void 0 : syncState.arrowElement, null),
7341 rendered: Symbol("rendered")
7342 });
7343 const popover = createStore(initialState, dialog, store);
7344 return __spreadProps2(__spreadValues2(__spreadValues2({}, dialog), popover), {
7345 setAnchorElement: (element) => popover.setState("anchorElement", element),
7346 setPopoverElement: (element) => popover.setState("popoverElement", element),
7347 setArrowElement: (element) => popover.setState("arrowElement", element),
7348 render: () => popover.setState("rendered", Symbol("rendered"))
7349 });
7350 }
7351
7352 // node_modules/@ariakit/react-core/esm/__chunks/O2PQ2652.js
7353 function usePopoverStoreProps(store, update, props) {
7354 useUpdateEffect(update, [props.popover]);
7355 useStoreProps(store, props, "placement");
7356 return useDialogStoreProps(store, update, props);
7357 }
7358
7359 // node_modules/@ariakit/core/esm/combobox/combobox-store.js
7360 var isTouchSafari = isSafari() && isTouchDevice();
7361 function createComboboxStore(_a = {}) {
7362 var _b = _a, {
7363 tag
7364 } = _b, props = __objRest2(_b, [
7365 "tag"
7366 ]);
7367 const store = mergeStore(props.store, pick2(tag, ["value", "rtl"]));
7368 throwOnConflictingProps(props, store);
7369 const tagState = tag == null ? void 0 : tag.getState();
7370 const syncState = store == null ? void 0 : store.getState();
7371 const activeId = defaultValue(
7372 props.activeId,
7373 syncState == null ? void 0 : syncState.activeId,
7374 props.defaultActiveId,
7375 null
7376 );
7377 const composite = createCompositeStore(__spreadProps2(__spreadValues2({}, props), {
7378 activeId,
7379 includesBaseElement: defaultValue(
7380 props.includesBaseElement,
7381 syncState == null ? void 0 : syncState.includesBaseElement,
7382 true
7383 ),
7384 orientation: defaultValue(
7385 props.orientation,
7386 syncState == null ? void 0 : syncState.orientation,
7387 "vertical"
7388 ),
7389 focusLoop: defaultValue(props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, true),
7390 focusWrap: defaultValue(props.focusWrap, syncState == null ? void 0 : syncState.focusWrap, true),
7391 virtualFocus: defaultValue(
7392 props.virtualFocus,
7393 syncState == null ? void 0 : syncState.virtualFocus,
7394 true
7395 )
7396 }));
7397 const popover = createPopoverStore(__spreadProps2(__spreadValues2({}, props), {
7398 placement: defaultValue(
7399 props.placement,
7400 syncState == null ? void 0 : syncState.placement,
7401 "bottom-start"
7402 )
7403 }));
7404 const value = defaultValue(
7405 props.value,
7406 syncState == null ? void 0 : syncState.value,
7407 props.defaultValue,
7408 ""
7409 );
7410 const selectedValue = defaultValue(
7411 props.selectedValue,
7412 syncState == null ? void 0 : syncState.selectedValue,
7413 tagState == null ? void 0 : tagState.values,
7414 props.defaultSelectedValue,
7415 ""
7416 );
7417 const multiSelectable = Array.isArray(selectedValue);
7418 const initialState = __spreadProps2(__spreadValues2(__spreadValues2({}, composite.getState()), popover.getState()), {
7419 value,
7420 selectedValue,
7421 resetValueOnSelect: defaultValue(
7422 props.resetValueOnSelect,
7423 syncState == null ? void 0 : syncState.resetValueOnSelect,
7424 multiSelectable
7425 ),
7426 resetValueOnHide: defaultValue(
7427 props.resetValueOnHide,
7428 syncState == null ? void 0 : syncState.resetValueOnHide,
7429 multiSelectable && !tag
7430 ),
7431 activeValue: syncState == null ? void 0 : syncState.activeValue
7432 });
7433 const combobox = createStore(initialState, composite, popover, store);
7434 if (isTouchSafari) {
7435 setup(
7436 combobox,
7437 () => sync(combobox, ["virtualFocus"], () => {
7438 combobox.setState("virtualFocus", false);
7439 })
7440 );
7441 }
7442 setup(combobox, () => {
7443 if (!tag) return;
7444 return chain(
7445 sync(combobox, ["selectedValue"], (state) => {
7446 if (!Array.isArray(state.selectedValue)) return;
7447 tag.setValues(state.selectedValue);
7448 }),
7449 sync(tag, ["values"], (state) => {
7450 combobox.setState("selectedValue", state.values);
7451 })
7452 );
7453 });
7454 setup(
7455 combobox,
7456 () => sync(combobox, ["resetValueOnHide", "mounted"], (state) => {
7457 if (!state.resetValueOnHide) return;
7458 if (state.mounted) return;
7459 combobox.setState("value", value);
7460 })
7461 );
7462 setup(
7463 combobox,
7464 () => sync(combobox, ["open"], (state) => {
7465 if (state.open) return;
7466 combobox.setState("activeId", activeId);
7467 combobox.setState("moves", 0);
7468 })
7469 );
7470 setup(
7471 combobox,
7472 () => sync(combobox, ["moves", "activeId"], (state, prevState) => {
7473 if (state.moves === prevState.moves) {
7474 combobox.setState("activeValue", void 0);
7475 }
7476 })
7477 );
7478 setup(
7479 combobox,
7480 () => batch(combobox, ["moves", "renderedItems"], (state, prev) => {
7481 if (state.moves === prev.moves) return;
7482 const { activeId: activeId2 } = combobox.getState();
7483 const activeItem = composite.item(activeId2);
7484 combobox.setState("activeValue", activeItem == null ? void 0 : activeItem.value);
7485 })
7486 );
7487 return __spreadProps2(__spreadValues2(__spreadValues2(__spreadValues2({}, popover), composite), combobox), {
7488 tag,
7489 setValue: (value2) => combobox.setState("value", value2),
7490 resetValue: () => combobox.setState("value", initialState.value),
7491 setSelectedValue: (selectedValue2) => combobox.setState("selectedValue", selectedValue2)
7492 });
7493 }
7494
7495 // node_modules/@ariakit/react-core/esm/__chunks/FEOFMWBY.js
7496 function useComboboxStoreOptions(props) {
7497 const tag = useTagContext();
7498 props = __spreadProps(__spreadValues({}, props), {
7499 tag: props.tag !== void 0 ? props.tag : tag
7500 });
7501 return useCompositeStoreOptions(props);
7502 }
7503 function useComboboxStoreProps(store, update, props) {
7504 useUpdateEffect(update, [props.tag]);
7505 useStoreProps(store, props, "value", "setValue");
7506 useStoreProps(store, props, "selectedValue", "setSelectedValue");
7507 useStoreProps(store, props, "resetValueOnHide");
7508 useStoreProps(store, props, "resetValueOnSelect");
7509 return Object.assign(
7510 useCompositeStoreProps(
7511 usePopoverStoreProps(store, update, props),
7512 update,
7513 props
7514 ),
7515 { tag: props.tag }
7516 );
7517 }
7518 function useComboboxStore(props = {}) {
7519 props = useComboboxStoreOptions(props);
7520 const [store, update] = useStore(createComboboxStore, props);
7521 return useComboboxStoreProps(store, update, props);
7522 }
7523
7524 // node_modules/@ariakit/react-core/esm/__chunks/S6EF7IVO.js
7525 var ctx4 = createStoreContext();
7526 var useDisclosureContext = ctx4.useContext;
7527 var useDisclosureScopedContext = ctx4.useScopedContext;
7528 var useDisclosureProviderContext = ctx4.useProviderContext;
7529 var DisclosureContextProvider = ctx4.ContextProvider;
7530 var DisclosureScopedContextProvider = ctx4.ScopedContextProvider;
7531
7532 // node_modules/@ariakit/react-core/esm/__chunks/RS7LB2H4.js
7533 var import_react6 = __toESM(require_react(), 1);
7534 var ctx5 = createStoreContext(
7535 [DisclosureContextProvider],
7536 [DisclosureScopedContextProvider]
7537 );
7538 var useDialogContext = ctx5.useContext;
7539 var useDialogScopedContext = ctx5.useScopedContext;
7540 var useDialogProviderContext = ctx5.useProviderContext;
7541 var DialogContextProvider = ctx5.ContextProvider;
7542 var DialogScopedContextProvider = ctx5.ScopedContextProvider;
7543 var DialogHeadingContext = (0, import_react6.createContext)(void 0);
7544 var DialogDescriptionContext = (0, import_react6.createContext)(void 0);
7545
7546 // node_modules/@ariakit/react-core/esm/__chunks/MTZPJQMC.js
7547 var ctx6 = createStoreContext(
7548 [DialogContextProvider],
7549 [DialogScopedContextProvider]
7550 );
7551 var usePopoverContext = ctx6.useContext;
7552 var usePopoverScopedContext = ctx6.useScopedContext;
7553 var usePopoverProviderContext = ctx6.useProviderContext;
7554 var PopoverContextProvider = ctx6.ContextProvider;
7555 var PopoverScopedContextProvider = ctx6.ScopedContextProvider;
7556
7557 // node_modules/@ariakit/react-core/esm/__chunks/VEVQD5MH.js
7558 var import_react7 = __toESM(require_react(), 1);
7559 var ComboboxListRoleContext = (0, import_react7.createContext)(
7560 void 0
7561 );
7562 var ctx7 = createStoreContext(
7563 [PopoverContextProvider, CompositeContextProvider],
7564 [PopoverScopedContextProvider, CompositeScopedContextProvider]
7565 );
7566 var useComboboxContext = ctx7.useContext;
7567 var useComboboxScopedContext = ctx7.useScopedContext;
7568 var useComboboxProviderContext = ctx7.useProviderContext;
7569 var ComboboxContextProvider = ctx7.ContextProvider;
7570 var ComboboxScopedContextProvider = ctx7.ScopedContextProvider;
7571 var ComboboxItemValueContext = (0, import_react7.createContext)(
7572 void 0
7573 );
7574 var ComboboxItemCheckedContext = (0, import_react7.createContext)(false);
7575
7576 // node_modules/@ariakit/react-core/esm/__chunks/OMU7RWRV.js
7577 var TagName = "div";
7578 var usePopoverAnchor = createHook(
7579 function usePopoverAnchor2(_a) {
7580 var _b = _a, { store } = _b, props = __objRest(_b, ["store"]);
7581 const context = usePopoverProviderContext();
7582 store = store || context;
7583 props = __spreadProps(__spreadValues({}, props), {
7584 ref: useMergeRefs(store == null ? void 0 : store.setAnchorElement, props.ref)
7585 });
7586 return props;
7587 }
7588 );
7589 var PopoverAnchor = forwardRef22(function PopoverAnchor2(props) {
7590 const htmlProps = usePopoverAnchor(props);
7591 return createElement2(TagName, htmlProps);
7592 });
7593
7594 // node_modules/@ariakit/react-core/esm/__chunks/5VQZOHHZ.js
7595 function findFirstEnabledItem2(items, excludeId) {
7596 return items.find((item) => {
7597 if (excludeId) {
7598 return !item.disabled && item.id !== excludeId;
7599 }
7600 return !item.disabled;
7601 });
7602 }
7603 function getEnabledItem(store, id) {
7604 if (!id) return null;
7605 return store.item(id) || null;
7606 }
7607 function groupItemsByRows2(items) {
7608 const rows = [];
7609 for (const item of items) {
7610 const row = rows.find((currentRow) => {
7611 var _a;
7612 return ((_a = currentRow[0]) == null ? void 0 : _a.rowId) === item.rowId;
7613 });
7614 if (row) {
7615 row.push(item);
7616 } else {
7617 rows.push([item]);
7618 }
7619 }
7620 return rows;
7621 }
7622 function selectTextField(element, collapseToEnd = false) {
7623 if (isTextField(element)) {
7624 element.setSelectionRange(
7625 collapseToEnd ? element.value.length : 0,
7626 element.value.length
7627 );
7628 } else if (element.isContentEditable) {
7629 const selection = getDocument(element).getSelection();
7630 selection == null ? void 0 : selection.selectAllChildren(element);
7631 if (collapseToEnd) {
7632 selection == null ? void 0 : selection.collapseToEnd();
7633 }
7634 }
7635 }
7636 var FOCUS_SILENTLY = Symbol("FOCUS_SILENTLY");
7637 function focusSilently(element) {
7638 element[FOCUS_SILENTLY] = true;
7639 element.focus({ preventScroll: true });
7640 }
7641 function silentlyFocused(element) {
7642 const isSilentlyFocused = element[FOCUS_SILENTLY];
7643 delete element[FOCUS_SILENTLY];
7644 return isSilentlyFocused;
7645 }
7646 function isItem(store, element, exclude) {
7647 if (!element) return false;
7648 if (element === exclude) return false;
7649 const item = store.item(element.id);
7650 if (!item) return false;
7651 if (exclude && item.element === exclude) return false;
7652 return true;
7653 }
7654
7655 // node_modules/@ariakit/react-core/esm/__chunks/SWN3JYXT.js
7656 var import_react8 = __toESM(require_react(), 1);
7657 var FocusableContext = (0, import_react8.createContext)(true);
7658
7659 // node_modules/@ariakit/core/esm/utils/focus.js
7660 var selector = "input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], summary, iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])";
7661 function isFocusable(element) {
7662 if (!element.matches(selector)) return false;
7663 if (!isVisible(element)) return false;
7664 if (element.closest("[inert]")) return false;
7665 return true;
7666 }
7667 function getClosestFocusable(element) {
7668 while (element && !isFocusable(element)) {
7669 element = element.closest(selector);
7670 }
7671 return element || null;
7672 }
7673 function hasFocus(element) {
7674 const activeElement = getActiveElement(element);
7675 if (!activeElement) return false;
7676 if (activeElement === element) return true;
7677 const activeDescendant = activeElement.getAttribute("aria-activedescendant");
7678 if (!activeDescendant) return false;
7679 return activeDescendant === element.id;
7680 }
7681 function hasFocusWithin(element) {
7682 const activeElement = getActiveElement(element);
7683 if (!activeElement) return false;
7684 if (contains(element, activeElement)) return true;
7685 const activeDescendant = activeElement.getAttribute("aria-activedescendant");
7686 if (!activeDescendant) return false;
7687 if (!("id" in element)) return false;
7688 if (activeDescendant === element.id) return true;
7689 return !!element.querySelector(`#${CSS.escape(activeDescendant)}`);
7690 }
7691 function focusIfNeeded(element) {
7692 if (!hasFocusWithin(element) && isFocusable(element)) {
7693 element.focus();
7694 }
7695 }
7696 function focusIntoView(element, options) {
7697 if (!("scrollIntoView" in element)) {
7698 element.focus();
7699 } else {
7700 element.focus({ preventScroll: true });
7701 element.scrollIntoView(__spreadValues2({ block: "nearest", inline: "nearest" }, options));
7702 }
7703 }
7704
7705 // node_modules/@ariakit/react-core/esm/__chunks/LVA2YJMS.js
7706 var import_react9 = __toESM(require_react(), 1);
7707 var TagName2 = "div";
7708 var isSafariBrowser = isSafari();
7709 var alwaysFocusVisibleInputTypes = [
7710 "text",
7711 "search",
7712 "url",
7713 "tel",
7714 "email",
7715 "password",
7716 "number",
7717 "date",
7718 "month",
7719 "week",
7720 "time",
7721 "datetime",
7722 "datetime-local"
7723 ];
7724 var safariFocusAncestorSymbol = Symbol("safariFocusAncestor");
7725 function markSafariFocusAncestor(element, value) {
7726 if (!element) return;
7727 element[safariFocusAncestorSymbol] = value;
7728 }
7729 function isAlwaysFocusVisible(element) {
7730 const { tagName, readOnly, type } = element;
7731 if (tagName === "TEXTAREA" && !readOnly) return true;
7732 if (tagName === "SELECT" && !readOnly) return true;
7733 if (tagName === "INPUT" && !readOnly) {
7734 return alwaysFocusVisibleInputTypes.includes(type);
7735 }
7736 if (element.isContentEditable) return true;
7737 const role = element.getAttribute("role");
7738 if (role === "combobox" && element.dataset.name) {
7739 return true;
7740 }
7741 return false;
7742 }
7743 function getLabels(element) {
7744 if ("labels" in element) {
7745 return element.labels;
7746 }
7747 return null;
7748 }
7749 function isNativeCheckboxOrRadio(element) {
7750 const tagName = element.tagName.toLowerCase();
7751 if (tagName === "input" && element.type) {
7752 return element.type === "radio" || element.type === "checkbox";
7753 }
7754 return false;
7755 }
7756 function isNativeTabbable(tagName) {
7757 if (!tagName) return true;
7758 return tagName === "button" || tagName === "summary" || tagName === "input" || tagName === "select" || tagName === "textarea" || tagName === "a";
7759 }
7760 function supportsDisabledAttribute(tagName) {
7761 if (!tagName) return true;
7762 return tagName === "button" || tagName === "input" || tagName === "select" || tagName === "textarea";
7763 }
7764 function getTabIndex(focusable, trulyDisabled, nativeTabbable, supportsDisabled, tabIndexProp) {
7765 if (!focusable) {
7766 return tabIndexProp;
7767 }
7768 if (trulyDisabled) {
7769 if (nativeTabbable && !supportsDisabled) {
7770 return -1;
7771 }
7772 return;
7773 }
7774 if (nativeTabbable) {
7775 return tabIndexProp;
7776 }
7777 return tabIndexProp || 0;
7778 }
7779 function useDisableEvent(onEvent, disabled) {
7780 return useEvent((event) => {
7781 onEvent == null ? void 0 : onEvent(event);
7782 if (event.defaultPrevented) return;
7783 if (disabled) {
7784 event.stopPropagation();
7785 event.preventDefault();
7786 }
7787 });
7788 }
7789 var isKeyboardModality = true;
7790 function onGlobalMouseDown(event) {
7791 const target = event.target;
7792 if (target && "hasAttribute" in target) {
7793 if (!target.hasAttribute("data-focus-visible")) {
7794 isKeyboardModality = false;
7795 }
7796 }
7797 }
7798 function onGlobalKeyDown(event) {
7799 if (event.metaKey) return;
7800 if (event.ctrlKey) return;
7801 if (event.altKey) return;
7802 isKeyboardModality = true;
7803 }
7804 var useFocusable = createHook(
7805 function useFocusable2(_a) {
7806 var _b = _a, {
7807 focusable = true,
7808 accessibleWhenDisabled,
7809 autoFocus,
7810 onFocusVisible
7811 } = _b, props = __objRest(_b, [
7812 "focusable",
7813 "accessibleWhenDisabled",
7814 "autoFocus",
7815 "onFocusVisible"
7816 ]);
7817 const ref = (0, import_react9.useRef)(null);
7818 (0, import_react9.useEffect)(() => {
7819 if (!focusable) return;
7820 addGlobalEventListener("mousedown", onGlobalMouseDown, true);
7821 addGlobalEventListener("keydown", onGlobalKeyDown, true);
7822 }, [focusable]);
7823 if (isSafariBrowser) {
7824 (0, import_react9.useEffect)(() => {
7825 if (!focusable) return;
7826 const element = ref.current;
7827 if (!element) return;
7828 if (!isNativeCheckboxOrRadio(element)) return;
7829 const labels = getLabels(element);
7830 if (!labels) return;
7831 const onMouseUp = () => queueMicrotask(() => element.focus());
7832 for (const label of labels) {
7833 label.addEventListener("mouseup", onMouseUp);
7834 }
7835 return () => {
7836 for (const label of labels) {
7837 label.removeEventListener("mouseup", onMouseUp);
7838 }
7839 };
7840 }, [focusable]);
7841 }
7842 const disabled = focusable && disabledFromProps(props);
7843 const trulyDisabled = !!disabled && !accessibleWhenDisabled;
7844 const [focusVisible, setFocusVisible] = (0, import_react9.useState)(false);
7845 (0, import_react9.useEffect)(() => {
7846 if (!focusable) return;
7847 if (trulyDisabled && focusVisible) {
7848 setFocusVisible(false);
7849 }
7850 }, [focusable, trulyDisabled, focusVisible]);
7851 (0, import_react9.useEffect)(() => {
7852 if (!focusable) return;
7853 if (!focusVisible) return;
7854 const element = ref.current;
7855 if (!element) return;
7856 if (typeof IntersectionObserver === "undefined") return;
7857 const observer = new IntersectionObserver(() => {
7858 if (!isFocusable(element)) {
7859 setFocusVisible(false);
7860 }
7861 });
7862 observer.observe(element);
7863 return () => observer.disconnect();
7864 }, [focusable, focusVisible]);
7865 const onKeyPressCapture = useDisableEvent(
7866 props.onKeyPressCapture,
7867 disabled
7868 );
7869 const onMouseDownCapture = useDisableEvent(
7870 props.onMouseDownCapture,
7871 disabled
7872 );
7873 const onClickCapture = useDisableEvent(props.onClickCapture, disabled);
7874 const onMouseDownProp = props.onMouseDown;
7875 const onMouseDown = useEvent((event) => {
7876 onMouseDownProp == null ? void 0 : onMouseDownProp(event);
7877 if (event.defaultPrevented) return;
7878 if (!focusable) return;
7879 const element = event.currentTarget;
7880 if (!isSafariBrowser) return;
7881 if (isPortalEvent(event)) return;
7882 if (!isButton(element) && !isNativeCheckboxOrRadio(element)) return;
7883 let receivedFocus = false;
7884 const onFocus = () => {
7885 receivedFocus = true;
7886 };
7887 const options = { capture: true, once: true };
7888 element.addEventListener("focusin", onFocus, options);
7889 const focusableContainer = getClosestFocusable(element.parentElement);
7890 markSafariFocusAncestor(focusableContainer, true);
7891 queueBeforeEvent(element, "mouseup", () => {
7892 element.removeEventListener("focusin", onFocus, true);
7893 markSafariFocusAncestor(focusableContainer, false);
7894 if (receivedFocus) return;
7895 focusIfNeeded(element);
7896 });
7897 });
7898 const handleFocusVisible = (event, currentTarget) => {
7899 if (currentTarget) {
7900 event.currentTarget = currentTarget;
7901 }
7902 if (!focusable) return;
7903 const element = event.currentTarget;
7904 if (!element) return;
7905 if (!hasFocus(element)) return;
7906 onFocusVisible == null ? void 0 : onFocusVisible(event);
7907 if (event.defaultPrevented) return;
7908 element.dataset.focusVisible = "true";
7909 setFocusVisible(true);
7910 };
7911 const onKeyDownCaptureProp = props.onKeyDownCapture;
7912 const onKeyDownCapture = useEvent((event) => {
7913 onKeyDownCaptureProp == null ? void 0 : onKeyDownCaptureProp(event);
7914 if (event.defaultPrevented) return;
7915 if (!focusable) return;
7916 if (focusVisible) return;
7917 if (event.metaKey) return;
7918 if (event.altKey) return;
7919 if (event.ctrlKey) return;
7920 if (!isSelfTarget(event)) return;
7921 const element = event.currentTarget;
7922 const applyFocusVisible = () => handleFocusVisible(event, element);
7923 queueBeforeEvent(element, "focusout", applyFocusVisible);
7924 });
7925 const onFocusCaptureProp = props.onFocusCapture;
7926 const onFocusCapture = useEvent((event) => {
7927 onFocusCaptureProp == null ? void 0 : onFocusCaptureProp(event);
7928 if (event.defaultPrevented) return;
7929 if (!focusable) return;
7930 if (!isSelfTarget(event)) {
7931 setFocusVisible(false);
7932 return;
7933 }
7934 const element = event.currentTarget;
7935 const applyFocusVisible = () => handleFocusVisible(event, element);
7936 if (isKeyboardModality || isAlwaysFocusVisible(event.target)) {
7937 queueBeforeEvent(event.target, "focusout", applyFocusVisible);
7938 } else {
7939 setFocusVisible(false);
7940 }
7941 });
7942 const onBlurProp = props.onBlur;
7943 const onBlur = useEvent((event) => {
7944 onBlurProp == null ? void 0 : onBlurProp(event);
7945 if (!focusable) return;
7946 if (!isFocusEventOutside(event)) return;
7947 setFocusVisible(false);
7948 });
7949 const autoFocusOnShow = (0, import_react9.useContext)(FocusableContext);
7950 const autoFocusRef = useEvent((element) => {
7951 if (!focusable) return;
7952 if (!autoFocus) return;
7953 if (!element) return;
7954 if (!autoFocusOnShow) return;
7955 queueMicrotask(() => {
7956 if (hasFocus(element)) return;
7957 if (!isFocusable(element)) return;
7958 element.focus();
7959 });
7960 });
7961 const tagName = useTagName(ref);
7962 const nativeTabbable = focusable && isNativeTabbable(tagName);
7963 const supportsDisabled = focusable && supportsDisabledAttribute(tagName);
7964 const styleProp = props.style;
7965 const style = (0, import_react9.useMemo)(() => {
7966 if (trulyDisabled) {
7967 return __spreadValues({ pointerEvents: "none" }, styleProp);
7968 }
7969 return styleProp;
7970 }, [trulyDisabled, styleProp]);
7971 props = __spreadProps(__spreadValues({
7972 "data-focus-visible": focusable && focusVisible || void 0,
7973 "data-autofocus": autoFocus || void 0,
7974 "aria-disabled": disabled || void 0
7975 }, props), {
7976 ref: useMergeRefs(ref, autoFocusRef, props.ref),
7977 style,
7978 tabIndex: getTabIndex(
7979 focusable,
7980 trulyDisabled,
7981 nativeTabbable,
7982 supportsDisabled,
7983 props.tabIndex
7984 ),
7985 disabled: supportsDisabled && trulyDisabled ? true : void 0,
7986 // TODO: Test Focusable contentEditable.
7987 contentEditable: disabled ? void 0 : props.contentEditable,
7988 onKeyPressCapture,
7989 onClickCapture,
7990 onMouseDownCapture,
7991 onMouseDown,
7992 onKeyDownCapture,
7993 onFocusCapture,
7994 onBlur
7995 });
7996 return removeUndefinedValues(props);
7997 }
7998 );
7999 var Focusable = forwardRef22(function Focusable2(props) {
8000 const htmlProps = useFocusable(props);
8001 return createElement2(TagName2, htmlProps);
8002 });
8003
8004 // node_modules/@ariakit/react-core/esm/__chunks/ITI7HKP4.js
8005 var import_react10 = __toESM(require_react(), 1);
8006 var import_jsx_runtime52 = __toESM(require_jsx_runtime(), 1);
8007 var TagName3 = "div";
8008 function isGrid(items) {
8009 return items.some((item) => !!item.rowId);
8010 }
8011 function isPrintableKey(event) {
8012 const target = event.target;
8013 if (target && !isTextField(target)) return false;
8014 return event.key.length === 1 && !event.ctrlKey && !event.metaKey;
8015 }
8016 function isModifierKey(event) {
8017 return event.key === "Shift" || event.key === "Control" || event.key === "Alt" || event.key === "Meta";
8018 }
8019 function useKeyboardEventProxy(store, onKeyboardEvent, previousElementRef) {
8020 return useEvent((event) => {
8021 var _a;
8022 onKeyboardEvent == null ? void 0 : onKeyboardEvent(event);
8023 if (event.defaultPrevented) return;
8024 if (event.isPropagationStopped()) return;
8025 if (!isSelfTarget(event)) return;
8026 if (isModifierKey(event)) return;
8027 if (isPrintableKey(event)) return;
8028 const state = store.getState();
8029 const activeElement = (_a = getEnabledItem(store, state.activeId)) == null ? void 0 : _a.element;
8030 if (!activeElement) return;
8031 const _b = event, { view } = _b, eventInit = __objRest(_b, ["view"]);
8032 const previousElement = previousElementRef == null ? void 0 : previousElementRef.current;
8033 if (activeElement !== previousElement) {
8034 activeElement.focus();
8035 }
8036 if (!fireKeyboardEvent(activeElement, event.type, eventInit)) {
8037 event.preventDefault();
8038 }
8039 if (event.currentTarget.contains(activeElement)) {
8040 event.stopPropagation();
8041 }
8042 });
8043 }
8044 function findFirstEnabledItemInTheLastRow(items) {
8045 return findFirstEnabledItem2(
8046 flatten2DArray(reverseArray(groupItemsByRows2(items)))
8047 );
8048 }
8049 function useScheduleFocus(store) {
8050 const [scheduled, setScheduled] = (0, import_react10.useState)(false);
8051 const schedule = (0, import_react10.useCallback)(() => setScheduled(true), []);
8052 const activeItem = store.useState(
8053 (state) => getEnabledItem(store, state.activeId)
8054 );
8055 (0, import_react10.useEffect)(() => {
8056 const activeElement = activeItem == null ? void 0 : activeItem.element;
8057 if (!scheduled) return;
8058 if (!activeElement) return;
8059 setScheduled(false);
8060 activeElement.focus({ preventScroll: true });
8061 }, [activeItem, scheduled]);
8062 return schedule;
8063 }
8064 var useComposite = createHook(
8065 function useComposite2(_a) {
8066 var _b = _a, {
8067 store,
8068 composite = true,
8069 focusOnMove = composite,
8070 moveOnKeyPress = true
8071 } = _b, props = __objRest(_b, [
8072 "store",
8073 "composite",
8074 "focusOnMove",
8075 "moveOnKeyPress"
8076 ]);
8077 const context = useCompositeProviderContext();
8078 store = store || context;
8079 invariant(
8080 store,
8081 "Composite must receive a `store` prop or be wrapped in a CompositeProvider component."
8082 );
8083 const ref = (0, import_react10.useRef)(null);
8084 const previousElementRef = (0, import_react10.useRef)(null);
8085 const scheduleFocus = useScheduleFocus(store);
8086 const moves = store.useState("moves");
8087 const [, setBaseElement] = useTransactionState(
8088 composite ? store.setBaseElement : null
8089 );
8090 (0, import_react10.useEffect)(() => {
8091 var _a2;
8092 if (!store) return;
8093 if (!moves) return;
8094 if (!composite) return;
8095 if (!focusOnMove) return;
8096 const { activeId: activeId2 } = store.getState();
8097 const itemElement = (_a2 = getEnabledItem(store, activeId2)) == null ? void 0 : _a2.element;
8098 if (!itemElement) return;
8099 focusIntoView(itemElement);
8100 }, [store, moves, composite, focusOnMove]);
8101 useSafeLayoutEffect(() => {
8102 if (!store) return;
8103 if (!moves) return;
8104 if (!composite) return;
8105 const { baseElement, activeId: activeId2 } = store.getState();
8106 const isSelfAcive = activeId2 === null;
8107 if (!isSelfAcive) return;
8108 if (!baseElement) return;
8109 const previousElement = previousElementRef.current;
8110 previousElementRef.current = null;
8111 if (previousElement) {
8112 fireBlurEvent(previousElement, { relatedTarget: baseElement });
8113 }
8114 if (!hasFocus(baseElement)) {
8115 baseElement.focus();
8116 }
8117 }, [store, moves, composite]);
8118 const activeId = store.useState("activeId");
8119 const virtualFocus = store.useState("virtualFocus");
8120 useSafeLayoutEffect(() => {
8121 var _a2;
8122 if (!store) return;
8123 if (!composite) return;
8124 if (!virtualFocus) return;
8125 const previousElement = previousElementRef.current;
8126 previousElementRef.current = null;
8127 if (!previousElement) return;
8128 const activeElement = (_a2 = getEnabledItem(store, activeId)) == null ? void 0 : _a2.element;
8129 const relatedTarget = activeElement || getActiveElement(previousElement);
8130 if (relatedTarget === previousElement) return;
8131 fireBlurEvent(previousElement, { relatedTarget });
8132 }, [store, activeId, virtualFocus, composite]);
8133 const onKeyDownCapture = useKeyboardEventProxy(
8134 store,
8135 props.onKeyDownCapture,
8136 previousElementRef
8137 );
8138 const onKeyUpCapture = useKeyboardEventProxy(
8139 store,
8140 props.onKeyUpCapture,
8141 previousElementRef
8142 );
8143 const onFocusCaptureProp = props.onFocusCapture;
8144 const onFocusCapture = useEvent((event) => {
8145 onFocusCaptureProp == null ? void 0 : onFocusCaptureProp(event);
8146 if (event.defaultPrevented) return;
8147 if (!store) return;
8148 const { virtualFocus: virtualFocus2 } = store.getState();
8149 if (!virtualFocus2) return;
8150 const previousActiveElement = event.relatedTarget;
8151 const isSilentlyFocused = silentlyFocused(event.currentTarget);
8152 if (isSelfTarget(event) && isSilentlyFocused) {
8153 event.stopPropagation();
8154 previousElementRef.current = previousActiveElement;
8155 }
8156 });
8157 const onFocusProp = props.onFocus;
8158 const onFocus = useEvent((event) => {
8159 onFocusProp == null ? void 0 : onFocusProp(event);
8160 if (event.defaultPrevented) return;
8161 if (!composite) return;
8162 if (!store) return;
8163 const { relatedTarget } = event;
8164 const { virtualFocus: virtualFocus2 } = store.getState();
8165 if (virtualFocus2) {
8166 if (isSelfTarget(event) && !isItem(store, relatedTarget)) {
8167 queueMicrotask(scheduleFocus);
8168 }
8169 } else if (isSelfTarget(event)) {
8170 store.setActiveId(null);
8171 }
8172 });
8173 const onBlurCaptureProp = props.onBlurCapture;
8174 const onBlurCapture = useEvent((event) => {
8175 var _a2;
8176 onBlurCaptureProp == null ? void 0 : onBlurCaptureProp(event);
8177 if (event.defaultPrevented) return;
8178 if (!store) return;
8179 const { virtualFocus: virtualFocus2, activeId: activeId2 } = store.getState();
8180 if (!virtualFocus2) return;
8181 const activeElement = (_a2 = getEnabledItem(store, activeId2)) == null ? void 0 : _a2.element;
8182 const nextActiveElement = event.relatedTarget;
8183 const nextActiveElementIsItem = isItem(store, nextActiveElement);
8184 const previousElement = previousElementRef.current;
8185 previousElementRef.current = null;
8186 if (isSelfTarget(event) && nextActiveElementIsItem) {
8187 if (nextActiveElement === activeElement) {
8188 if (previousElement && previousElement !== nextActiveElement) {
8189 fireBlurEvent(previousElement, event);
8190 }
8191 } else if (activeElement) {
8192 fireBlurEvent(activeElement, event);
8193 } else if (previousElement) {
8194 fireBlurEvent(previousElement, event);
8195 }
8196 event.stopPropagation();
8197 } else {
8198 const targetIsItem = isItem(store, event.target);
8199 if (!targetIsItem && activeElement) {
8200 fireBlurEvent(activeElement, event);
8201 }
8202 }
8203 });
8204 const onKeyDownProp = props.onKeyDown;
8205 const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress);
8206 const onKeyDown = useEvent((event) => {
8207 var _a2;
8208 onKeyDownProp == null ? void 0 : onKeyDownProp(event);
8209 if (event.defaultPrevented) return;
8210 if (!store) return;
8211 if (!isSelfTarget(event)) return;
8212 const { orientation, renderedItems, activeId: activeId2 } = store.getState();
8213 const activeItem = getEnabledItem(store, activeId2);
8214 if ((_a2 = activeItem == null ? void 0 : activeItem.element) == null ? void 0 : _a2.isConnected) return;
8215 const isVertical = orientation !== "horizontal";
8216 const isHorizontal = orientation !== "vertical";
8217 const grid = isGrid(renderedItems);
8218 const isHorizontalKey = event.key === "ArrowLeft" || event.key === "ArrowRight" || event.key === "Home" || event.key === "End";
8219 if (isHorizontalKey && isTextField(event.currentTarget)) return;
8220 const up = () => {
8221 if (grid) {
8222 const item = findFirstEnabledItemInTheLastRow(renderedItems);
8223 return item == null ? void 0 : item.id;
8224 }
8225 return store == null ? void 0 : store.last();
8226 };
8227 const keyMap = {
8228 ArrowUp: (grid || isVertical) && up,
8229 ArrowRight: (grid || isHorizontal) && store.first,
8230 ArrowDown: (grid || isVertical) && store.first,
8231 ArrowLeft: (grid || isHorizontal) && store.last,
8232 Home: store.first,
8233 End: store.last,
8234 PageUp: store.first,
8235 PageDown: store.last
8236 };
8237 const action = keyMap[event.key];
8238 if (action) {
8239 const id = action();
8240 if (id !== void 0) {
8241 if (!moveOnKeyPressProp(event)) return;
8242 event.preventDefault();
8243 store.move(id);
8244 }
8245 }
8246 });
8247 props = useWrapElement(
8248 props,
8249 (element) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(CompositeContextProvider, { value: store, children: element }),
8250 [store]
8251 );
8252 const activeDescendant = store.useState((state) => {
8253 var _a2;
8254 if (!store) return;
8255 if (!composite) return;
8256 if (!state.virtualFocus) return;
8257 return (_a2 = getEnabledItem(store, state.activeId)) == null ? void 0 : _a2.id;
8258 });
8259 props = __spreadProps(__spreadValues({
8260 "aria-activedescendant": activeDescendant
8261 }, props), {
8262 ref: useMergeRefs(ref, setBaseElement, props.ref),
8263 onKeyDownCapture,
8264 onKeyUpCapture,
8265 onFocusCapture,
8266 onFocus,
8267 onBlurCapture,
8268 onKeyDown
8269 });
8270 const focusable = store.useState(
8271 (state) => composite && (state.virtualFocus || state.activeId === null)
8272 );
8273 props = useFocusable(__spreadValues({ focusable }, props));
8274 return props;
8275 }
8276 );
8277 var Composite5 = forwardRef22(function Composite22(props) {
8278 const htmlProps = useComposite(props);
8279 return createElement2(TagName3, htmlProps);
8280 });
8281
8282 // node_modules/@ariakit/react-core/esm/combobox/combobox.js
8283 var import_react11 = __toESM(require_react(), 1);
8284 var TagName4 = "input";
8285 function isFirstItemAutoSelected(items, activeValue, autoSelect) {
8286 if (!autoSelect) return false;
8287 const firstItem = items.find((item) => !item.disabled && item.value);
8288 return (firstItem == null ? void 0 : firstItem.value) === activeValue;
8289 }
8290 function hasCompletionString(value, activeValue) {
8291 if (!activeValue) return false;
8292 if (value == null) return false;
8293 value = normalizeString(value);
8294 return activeValue.length > value.length && activeValue.toLowerCase().indexOf(value.toLowerCase()) === 0;
8295 }
8296 function isInputEvent(event) {
8297 return event.type === "input";
8298 }
8299 function isAriaAutoCompleteValue(value) {
8300 return value === "inline" || value === "list" || value === "both" || value === "none";
8301 }
8302 function getDefaultAutoSelectId(items) {
8303 const item = items.find((item2) => {
8304 var _a;
8305 if (item2.disabled) return false;
8306 return ((_a = item2.element) == null ? void 0 : _a.getAttribute("role")) !== "tab";
8307 });
8308 return item == null ? void 0 : item.id;
8309 }
8310 var useCombobox = createHook(
8311 function useCombobox2(_a) {
8312 var _b = _a, {
8313 store,
8314 focusable = true,
8315 autoSelect: autoSelectProp = false,
8316 getAutoSelectId,
8317 setValueOnChange,
8318 showMinLength = 0,
8319 showOnChange,
8320 showOnMouseDown,
8321 showOnClick = showOnMouseDown,
8322 showOnKeyDown,
8323 showOnKeyPress = showOnKeyDown,
8324 blurActiveItemOnClick,
8325 setValueOnClick = true,
8326 moveOnKeyPress = true,
8327 autoComplete = "list"
8328 } = _b, props = __objRest(_b, [
8329 "store",
8330 "focusable",
8331 "autoSelect",
8332 "getAutoSelectId",
8333 "setValueOnChange",
8334 "showMinLength",
8335 "showOnChange",
8336 "showOnMouseDown",
8337 "showOnClick",
8338 "showOnKeyDown",
8339 "showOnKeyPress",
8340 "blurActiveItemOnClick",
8341 "setValueOnClick",
8342 "moveOnKeyPress",
8343 "autoComplete"
8344 ]);
8345 const context = useComboboxProviderContext();
8346 store = store || context;
8347 invariant(
8348 store,
8349 "Combobox must receive a `store` prop or be wrapped in a ComboboxProvider component."
8350 );
8351 const ref = (0, import_react11.useRef)(null);
8352 const [valueUpdated, forceValueUpdate] = useForceUpdate();
8353 const canAutoSelectRef = (0, import_react11.useRef)(false);
8354 const composingRef = (0, import_react11.useRef)(false);
8355 const autoSelect = store.useState(
8356 (state) => state.virtualFocus && autoSelectProp
8357 );
8358 const inline = autoComplete === "inline" || autoComplete === "both";
8359 const [canInline, setCanInline] = (0, import_react11.useState)(inline);
8360 useUpdateLayoutEffect(() => {
8361 if (!inline) return;
8362 setCanInline(true);
8363 }, [inline]);
8364 const storeValue = store.useState("value");
8365 const prevSelectedValueRef = (0, import_react11.useRef)();
8366 (0, import_react11.useEffect)(() => {
8367 return sync(store, ["selectedValue", "activeId"], (_, prev) => {
8368 prevSelectedValueRef.current = prev.selectedValue;
8369 });
8370 }, []);
8371 const inlineActiveValue = store.useState((state) => {
8372 var _a2;
8373 if (!inline) return;
8374 if (!canInline) return;
8375 if (state.activeValue && Array.isArray(state.selectedValue)) {
8376 if (state.selectedValue.includes(state.activeValue)) return;
8377 if ((_a2 = prevSelectedValueRef.current) == null ? void 0 : _a2.includes(state.activeValue)) return;
8378 }
8379 return state.activeValue;
8380 });
8381 const items = store.useState("renderedItems");
8382 const open = store.useState("open");
8383 const contentElement = store.useState("contentElement");
8384 const value = (0, import_react11.useMemo)(() => {
8385 if (!inline) return storeValue;
8386 if (!canInline) return storeValue;
8387 const firstItemAutoSelected = isFirstItemAutoSelected(
8388 items,
8389 inlineActiveValue,
8390 autoSelect
8391 );
8392 if (firstItemAutoSelected) {
8393 if (hasCompletionString(storeValue, inlineActiveValue)) {
8394 const slice = (inlineActiveValue == null ? void 0 : inlineActiveValue.slice(storeValue.length)) || "";
8395 return storeValue + slice;
8396 }
8397 return storeValue;
8398 }
8399 return inlineActiveValue || storeValue;
8400 }, [inline, canInline, items, inlineActiveValue, autoSelect, storeValue]);
8401 (0, import_react11.useEffect)(() => {
8402 const element = ref.current;
8403 if (!element) return;
8404 const onCompositeItemMove = () => setCanInline(true);
8405 element.addEventListener("combobox-item-move", onCompositeItemMove);
8406 return () => {
8407 element.removeEventListener("combobox-item-move", onCompositeItemMove);
8408 };
8409 }, []);
8410 (0, import_react11.useEffect)(() => {
8411 if (!inline) return;
8412 if (!canInline) return;
8413 if (!inlineActiveValue) return;
8414 const firstItemAutoSelected = isFirstItemAutoSelected(
8415 items,
8416 inlineActiveValue,
8417 autoSelect
8418 );
8419 if (!firstItemAutoSelected) return;
8420 if (!hasCompletionString(storeValue, inlineActiveValue)) return;
8421 let cleanup = noop2;
8422 queueMicrotask(() => {
8423 const element = ref.current;
8424 if (!element) return;
8425 const { start: prevStart, end: prevEnd } = getTextboxSelection(element);
8426 const nextStart = storeValue.length;
8427 const nextEnd = inlineActiveValue.length;
8428 setSelectionRange(element, nextStart, nextEnd);
8429 cleanup = () => {
8430 if (!hasFocus(element)) return;
8431 const { start, end } = getTextboxSelection(element);
8432 if (start !== nextStart) return;
8433 if (end !== nextEnd) return;
8434 setSelectionRange(element, prevStart, prevEnd);
8435 };
8436 });
8437 return () => cleanup();
8438 }, [
8439 valueUpdated,
8440 inline,
8441 canInline,
8442 inlineActiveValue,
8443 items,
8444 autoSelect,
8445 storeValue
8446 ]);
8447 const scrollingElementRef = (0, import_react11.useRef)(null);
8448 const getAutoSelectIdProp = useEvent(getAutoSelectId);
8449 const autoSelectIdRef = (0, import_react11.useRef)(null);
8450 (0, import_react11.useEffect)(() => {
8451 if (!open) return;
8452 if (!contentElement) return;
8453 const scrollingElement = getScrollingElement(contentElement);
8454 if (!scrollingElement) return;
8455 scrollingElementRef.current = scrollingElement;
8456 const onUserScroll = () => {
8457 canAutoSelectRef.current = false;
8458 };
8459 const onScroll = () => {
8460 if (!store) return;
8461 if (!canAutoSelectRef.current) return;
8462 const { activeId } = store.getState();
8463 if (activeId === null) return;
8464 if (activeId === autoSelectIdRef.current) return;
8465 canAutoSelectRef.current = false;
8466 };
8467 const options = { passive: true, capture: true };
8468 scrollingElement.addEventListener("wheel", onUserScroll, options);
8469 scrollingElement.addEventListener("touchmove", onUserScroll, options);
8470 scrollingElement.addEventListener("scroll", onScroll, options);
8471 return () => {
8472 scrollingElement.removeEventListener("wheel", onUserScroll, true);
8473 scrollingElement.removeEventListener("touchmove", onUserScroll, true);
8474 scrollingElement.removeEventListener("scroll", onScroll, true);
8475 };
8476 }, [open, contentElement, store]);
8477 useSafeLayoutEffect(() => {
8478 if (!storeValue) return;
8479 if (composingRef.current) return;
8480 canAutoSelectRef.current = true;
8481 }, [storeValue]);
8482 useSafeLayoutEffect(() => {
8483 if (autoSelect !== "always" && open) return;
8484 canAutoSelectRef.current = open;
8485 }, [autoSelect, open]);
8486 const resetValueOnSelect = store.useState("resetValueOnSelect");
8487 useUpdateEffect(() => {
8488 var _a2, _b2;
8489 const canAutoSelect = canAutoSelectRef.current;
8490 if (!store) return;
8491 if (!open) return;
8492 if (!canAutoSelect && !resetValueOnSelect) return;
8493 const { baseElement, contentElement: contentElement2, activeId } = store.getState();
8494 if (baseElement && !hasFocus(baseElement)) return;
8495 if (contentElement2 == null ? void 0 : contentElement2.hasAttribute("data-placing")) {
8496 const observer = new MutationObserver(forceValueUpdate);
8497 observer.observe(contentElement2, { attributeFilter: ["data-placing"] });
8498 return () => observer.disconnect();
8499 }
8500 if (autoSelect && canAutoSelect) {
8501 const userAutoSelectId = getAutoSelectIdProp(items);
8502 const autoSelectId = userAutoSelectId !== void 0 ? userAutoSelectId : (_a2 = getDefaultAutoSelectId(items)) != null ? _a2 : store.first();
8503 autoSelectIdRef.current = autoSelectId;
8504 store.move(autoSelectId != null ? autoSelectId : null);
8505 } else {
8506 const element = (_b2 = store.item(activeId || store.first())) == null ? void 0 : _b2.element;
8507 if (element && "scrollIntoView" in element) {
8508 element.scrollIntoView({ block: "nearest", inline: "nearest" });
8509 }
8510 }
8511 return;
8512 }, [
8513 store,
8514 open,
8515 valueUpdated,
8516 storeValue,
8517 autoSelect,
8518 resetValueOnSelect,
8519 getAutoSelectIdProp,
8520 items
8521 ]);
8522 (0, import_react11.useEffect)(() => {
8523 if (!inline) return;
8524 const combobox = ref.current;
8525 if (!combobox) return;
8526 const elements = [combobox, contentElement].filter(
8527 (value2) => !!value2
8528 );
8529 const onBlur2 = (event) => {
8530 if (elements.every((el) => isFocusEventOutside(event, el))) {
8531 store == null ? void 0 : store.setValue(value);
8532 }
8533 };
8534 for (const element of elements) {
8535 element.addEventListener("focusout", onBlur2);
8536 }
8537 return () => {
8538 for (const element of elements) {
8539 element.removeEventListener("focusout", onBlur2);
8540 }
8541 };
8542 }, [inline, contentElement, store, value]);
8543 const canShow = (event) => {
8544 const currentTarget = event.currentTarget;
8545 return currentTarget.value.length >= showMinLength;
8546 };
8547 const onChangeProp = props.onChange;
8548 const showOnChangeProp = useBooleanEvent(showOnChange != null ? showOnChange : canShow);
8549 const setValueOnChangeProp = useBooleanEvent(
8550 // If the combobox is combined with tags, the value will be set by the tag
8551 // input component.
8552 setValueOnChange != null ? setValueOnChange : !store.tag
8553 );
8554 const onChange = useEvent((event) => {
8555 onChangeProp == null ? void 0 : onChangeProp(event);
8556 if (event.defaultPrevented) return;
8557 if (!store) return;
8558 const currentTarget = event.currentTarget;
8559 const { value: value2, selectionStart, selectionEnd } = currentTarget;
8560 const nativeEvent = event.nativeEvent;
8561 canAutoSelectRef.current = true;
8562 if (isInputEvent(nativeEvent)) {
8563 if (nativeEvent.isComposing) {
8564 canAutoSelectRef.current = false;
8565 composingRef.current = true;
8566 }
8567 if (inline) {
8568 const textInserted = nativeEvent.inputType === "insertText" || nativeEvent.inputType === "insertCompositionText";
8569 const caretAtEnd = selectionStart === value2.length;
8570 setCanInline(textInserted && caretAtEnd);
8571 }
8572 }
8573 if (setValueOnChangeProp(event)) {
8574 const isSameValue = value2 === store.getState().value;
8575 store.setValue(value2);
8576 queueMicrotask(() => {
8577 setSelectionRange(currentTarget, selectionStart, selectionEnd);
8578 });
8579 if (inline && autoSelect && isSameValue) {
8580 forceValueUpdate();
8581 }
8582 }
8583 if (showOnChangeProp(event)) {
8584 store.show();
8585 }
8586 if (!autoSelect || !canAutoSelectRef.current) {
8587 store.setActiveId(null);
8588 }
8589 });
8590 const onCompositionEndProp = props.onCompositionEnd;
8591 const onCompositionEnd = useEvent((event) => {
8592 canAutoSelectRef.current = true;
8593 composingRef.current = false;
8594 onCompositionEndProp == null ? void 0 : onCompositionEndProp(event);
8595 if (event.defaultPrevented) return;
8596 if (!autoSelect) return;
8597 forceValueUpdate();
8598 });
8599 const onMouseDownProp = props.onMouseDown;
8600 const blurActiveItemOnClickProp = useBooleanEvent(
8601 blurActiveItemOnClick != null ? blurActiveItemOnClick : () => !!(store == null ? void 0 : store.getState().includesBaseElement)
8602 );
8603 const setValueOnClickProp = useBooleanEvent(setValueOnClick);
8604 const showOnClickProp = useBooleanEvent(showOnClick != null ? showOnClick : canShow);
8605 const onMouseDown = useEvent((event) => {
8606 onMouseDownProp == null ? void 0 : onMouseDownProp(event);
8607 if (event.defaultPrevented) return;
8608 if (event.button) return;
8609 if (event.ctrlKey) return;
8610 if (!store) return;
8611 if (blurActiveItemOnClickProp(event)) {
8612 store.setActiveId(null);
8613 }
8614 if (setValueOnClickProp(event)) {
8615 store.setValue(value);
8616 }
8617 if (showOnClickProp(event)) {
8618 queueBeforeEvent(event.currentTarget, "mouseup", store.show);
8619 }
8620 });
8621 const onKeyDownProp = props.onKeyDown;
8622 const showOnKeyPressProp = useBooleanEvent(showOnKeyPress != null ? showOnKeyPress : canShow);
8623 const onKeyDown = useEvent((event) => {
8624 onKeyDownProp == null ? void 0 : onKeyDownProp(event);
8625 if (!event.repeat) {
8626 canAutoSelectRef.current = false;
8627 }
8628 if (event.defaultPrevented) return;
8629 if (event.ctrlKey) return;
8630 if (event.altKey) return;
8631 if (event.shiftKey) return;
8632 if (event.metaKey) return;
8633 if (!store) return;
8634 const { open: open2 } = store.getState();
8635 if (open2) return;
8636 if (event.key === "ArrowUp" || event.key === "ArrowDown") {
8637 if (showOnKeyPressProp(event)) {
8638 event.preventDefault();
8639 store.show();
8640 }
8641 }
8642 });
8643 const onBlurProp = props.onBlur;
8644 const onBlur = useEvent((event) => {
8645 canAutoSelectRef.current = false;
8646 onBlurProp == null ? void 0 : onBlurProp(event);
8647 if (event.defaultPrevented) return;
8648 });
8649 const id = useId3(props.id);
8650 const ariaAutoComplete = isAriaAutoCompleteValue(autoComplete) ? autoComplete : void 0;
8651 const isActiveItem = store.useState((state) => state.activeId === null);
8652 props = __spreadProps(__spreadValues({
8653 id,
8654 role: "combobox",
8655 "aria-autocomplete": ariaAutoComplete,
8656 "aria-haspopup": getPopupRole(contentElement, "listbox"),
8657 "aria-expanded": open,
8658 "aria-controls": contentElement == null ? void 0 : contentElement.id,
8659 "data-active-item": isActiveItem || void 0,
8660 value
8661 }, props), {
8662 ref: useMergeRefs(ref, props.ref),
8663 onChange,
8664 onCompositionEnd,
8665 onMouseDown,
8666 onKeyDown,
8667 onBlur
8668 });
8669 props = useComposite(__spreadProps(__spreadValues({
8670 store,
8671 focusable
8672 }, props), {
8673 // Enable inline autocomplete when the user moves from the combobox input
8674 // to an item.
8675 moveOnKeyPress: (event) => {
8676 if (isFalsyBooleanCallback(moveOnKeyPress, event)) return false;
8677 if (inline) setCanInline(true);
8678 return true;
8679 }
8680 }));
8681 props = usePopoverAnchor(__spreadValues({ store }, props));
8682 return __spreadValues({ autoComplete: "off" }, props);
8683 }
8684 );
8685 var Combobox = forwardRef22(function Combobox2(props) {
8686 const htmlProps = useCombobox(props);
8687 return createElement2(TagName4, htmlProps);
8688 });
8689
8690 // node_modules/@ariakit/react-core/esm/combobox/combobox-provider.js
8691 var import_jsx_runtime53 = __toESM(require_jsx_runtime(), 1);
8692 function ComboboxProvider(props = {}) {
8693 const store = useComboboxStore(props);
8694 return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(ComboboxContextProvider, { value: store, children: props.children });
8695 }
8696
8697 // node_modules/@ariakit/react-core/esm/__chunks/KUU7WJ55.js
8698 var import_react12 = __toESM(require_react(), 1);
8699 var TagName5 = "button";
8700 function isNativeClick(event) {
8701 if (!event.isTrusted) return false;
8702 const element = event.currentTarget;
8703 if (event.key === "Enter") {
8704 return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "A";
8705 }
8706 if (event.key === " ") {
8707 return isButton(element) || element.tagName === "SUMMARY" || element.tagName === "INPUT" || element.tagName === "SELECT";
8708 }
8709 return false;
8710 }
8711 var symbol = Symbol("command");
8712 var useCommand = createHook(
8713 function useCommand2(_a) {
8714 var _b = _a, { clickOnEnter = true, clickOnSpace = true } = _b, props = __objRest(_b, ["clickOnEnter", "clickOnSpace"]);
8715 const ref = (0, import_react12.useRef)(null);
8716 const [isNativeButton, setIsNativeButton] = (0, import_react12.useState)(false);
8717 (0, import_react12.useEffect)(() => {
8718 if (!ref.current) return;
8719 setIsNativeButton(isButton(ref.current));
8720 }, []);
8721 const [active, setActive] = (0, import_react12.useState)(false);
8722 const activeRef = (0, import_react12.useRef)(false);
8723 const disabled = disabledFromProps(props);
8724 const [isDuplicate, metadataProps] = useMetadataProps(props, symbol, true);
8725 const onKeyDownProp = props.onKeyDown;
8726 const onKeyDown = useEvent((event) => {
8727 onKeyDownProp == null ? void 0 : onKeyDownProp(event);
8728 const element = event.currentTarget;
8729 if (event.defaultPrevented) return;
8730 if (isDuplicate) return;
8731 if (disabled) return;
8732 if (!isSelfTarget(event)) return;
8733 if (isTextField(element)) return;
8734 if (element.isContentEditable) return;
8735 const isEnter = clickOnEnter && event.key === "Enter";
8736 const isSpace = clickOnSpace && event.key === " ";
8737 const shouldPreventEnter = event.key === "Enter" && !clickOnEnter;
8738 const shouldPreventSpace = event.key === " " && !clickOnSpace;
8739 if (shouldPreventEnter || shouldPreventSpace) {
8740 event.preventDefault();
8741 return;
8742 }
8743 if (isEnter || isSpace) {
8744 const nativeClick = isNativeClick(event);
8745 if (isEnter) {
8746 if (!nativeClick) {
8747 event.preventDefault();
8748 const _a2 = event, { view } = _a2, eventInit = __objRest(_a2, ["view"]);
8749 const click = () => fireClickEvent(element, eventInit);
8750 if (isFirefox()) {
8751 queueBeforeEvent(element, "keyup", click);
8752 } else {
8753 queueMicrotask(click);
8754 }
8755 }
8756 } else if (isSpace) {
8757 activeRef.current = true;
8758 if (!nativeClick) {
8759 event.preventDefault();
8760 setActive(true);
8761 }
8762 }
8763 }
8764 });
8765 const onKeyUpProp = props.onKeyUp;
8766 const onKeyUp = useEvent((event) => {
8767 onKeyUpProp == null ? void 0 : onKeyUpProp(event);
8768 if (event.defaultPrevented) return;
8769 if (isDuplicate) return;
8770 if (disabled) return;
8771 if (event.metaKey) return;
8772 const isSpace = clickOnSpace && event.key === " ";
8773 if (activeRef.current && isSpace) {
8774 activeRef.current = false;
8775 if (!isNativeClick(event)) {
8776 event.preventDefault();
8777 setActive(false);
8778 const element = event.currentTarget;
8779 const _a2 = event, { view } = _a2, eventInit = __objRest(_a2, ["view"]);
8780 queueMicrotask(() => fireClickEvent(element, eventInit));
8781 }
8782 }
8783 });
8784 props = __spreadProps(__spreadValues(__spreadValues({
8785 "data-active": active || void 0,
8786 type: isNativeButton ? "button" : void 0
8787 }, metadataProps), props), {
8788 ref: useMergeRefs(ref, props.ref),
8789 onKeyDown,
8790 onKeyUp
8791 });
8792 props = useFocusable(props);
8793 return props;
8794 }
8795 );
8796 var Command = forwardRef22(function Command2(props) {
8797 const htmlProps = useCommand(props);
8798 return createElement2(TagName5, htmlProps);
8799 });
8800
8801 // node_modules/@ariakit/react-core/esm/combobox/combobox-item-value.js
8802 var import_react13 = __toESM(require_react(), 1);
8803 var import_jsx_runtime54 = __toESM(require_jsx_runtime(), 1);
8804 var TagName6 = "span";
8805 function normalizeValue(value) {
8806 return normalizeString(value).toLowerCase();
8807 }
8808 function getOffsets(string, values) {
8809 const offsets = [];
8810 for (const value of values) {
8811 let pos = 0;
8812 const length = value.length;
8813 while (string.indexOf(value, pos) !== -1) {
8814 const index = string.indexOf(value, pos);
8815 if (index !== -1) {
8816 offsets.push([index, length]);
8817 }
8818 pos = index + 1;
8819 }
8820 }
8821 return offsets;
8822 }
8823 function filterOverlappingOffsets(offsets) {
8824 return offsets.filter(([offset, length], i2, arr) => {
8825 return !arr.some(
8826 ([o2, l2], j2) => j2 !== i2 && o2 <= offset && o2 + l2 >= offset + length
8827 );
8828 });
8829 }
8830 function sortOffsets(offsets) {
8831 return offsets.sort(([a2], [b2]) => a2 - b2);
8832 }
8833 function splitValue(itemValue, userValue) {
8834 if (!itemValue) return itemValue;
8835 if (!userValue) return itemValue;
8836 const userValues = toArray(userValue).filter(Boolean).map(normalizeValue);
8837 const parts = [];
8838 const span = (value, autocomplete = false) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
8839 "span",
8840 {
8841 "data-autocomplete-value": autocomplete ? "" : void 0,
8842 "data-user-value": autocomplete ? void 0 : "",
8843 children: value
8844 },
8845 parts.length
8846 );
8847 const offsets = sortOffsets(
8848 filterOverlappingOffsets(
8849 // Convert userValues into a set to avoid duplicates
8850 getOffsets(normalizeValue(itemValue), new Set(userValues))
8851 )
8852 );
8853 if (!offsets.length) {
8854 parts.push(span(itemValue, true));
8855 return parts;
8856 }
8857 const [firstOffset] = offsets[0];
8858 const values = [
8859 itemValue.slice(0, firstOffset),
8860 ...offsets.flatMap(([offset, length], i2) => {
8861 var _a;
8862 const value = itemValue.slice(offset, offset + length);
8863 const nextOffset = (_a = offsets[i2 + 1]) == null ? void 0 : _a[0];
8864 const nextValue = itemValue.slice(offset + length, nextOffset);
8865 return [value, nextValue];
8866 })
8867 ];
8868 values.forEach((value, i2) => {
8869 if (!value) return;
8870 parts.push(span(value, i2 % 2 === 0));
8871 });
8872 return parts;
8873 }
8874 var useComboboxItemValue = createHook(function useComboboxItemValue2(_a) {
8875 var _b = _a, { store, value, userValue } = _b, props = __objRest(_b, ["store", "value", "userValue"]);
8876 const context = useComboboxScopedContext();
8877 store = store || context;
8878 const itemContext = (0, import_react13.useContext)(ComboboxItemValueContext);
8879 const itemValue = value != null ? value : itemContext;
8880 const inputValue = useStoreState(store, (state) => userValue != null ? userValue : state == null ? void 0 : state.value);
8881 const children = (0, import_react13.useMemo)(() => {
8882 if (!itemValue) return;
8883 if (!inputValue) return itemValue;
8884 return splitValue(itemValue, inputValue);
8885 }, [itemValue, inputValue]);
8886 props = __spreadValues({
8887 children
8888 }, props);
8889 return removeUndefinedValues(props);
8890 });
8891 var ComboboxItemValue = forwardRef22(function ComboboxItemValue2(props) {
8892 const htmlProps = useComboboxItemValue(props);
8893 return createElement2(TagName6, htmlProps);
8894 });
8895
8896 // node_modules/@ariakit/react-core/esm/__chunks/UQQRIHDV.js
8897 var import_react14 = __toESM(require_react(), 1);
8898 var TagName7 = "div";
8899 function getMouseDestination(event) {
8900 const relatedTarget = event.relatedTarget;
8901 if ((relatedTarget == null ? void 0 : relatedTarget.nodeType) === Node.ELEMENT_NODE) {
8902 return relatedTarget;
8903 }
8904 return null;
8905 }
8906 function hoveringInside(event) {
8907 const nextElement = getMouseDestination(event);
8908 if (!nextElement) return false;
8909 return contains(event.currentTarget, nextElement);
8910 }
8911 var symbol2 = Symbol("composite-hover");
8912 function movingToAnotherItem(event) {
8913 let dest = getMouseDestination(event);
8914 if (!dest) return false;
8915 do {
8916 if (hasOwnProperty(dest, symbol2) && dest[symbol2]) return true;
8917 dest = dest.parentElement;
8918 } while (dest);
8919 return false;
8920 }
8921 var useCompositeHover = createHook(
8922 function useCompositeHover2(_a) {
8923 var _b = _a, {
8924 store,
8925 focusOnHover = true,
8926 blurOnHoverEnd = !!focusOnHover
8927 } = _b, props = __objRest(_b, [
8928 "store",
8929 "focusOnHover",
8930 "blurOnHoverEnd"
8931 ]);
8932 const context = useCompositeContext();
8933 store = store || context;
8934 invariant(
8935 store,
8936 "CompositeHover must be wrapped in a Composite component."
8937 );
8938 const isMouseMoving = useIsMouseMoving();
8939 const onMouseMoveProp = props.onMouseMove;
8940 const focusOnHoverProp = useBooleanEvent(focusOnHover);
8941 const onMouseMove = useEvent((event) => {
8942 onMouseMoveProp == null ? void 0 : onMouseMoveProp(event);
8943 if (event.defaultPrevented) return;
8944 if (!isMouseMoving()) return;
8945 if (!focusOnHoverProp(event)) return;
8946 if (!hasFocusWithin(event.currentTarget)) {
8947 const baseElement = store == null ? void 0 : store.getState().baseElement;
8948 if (baseElement && !hasFocus(baseElement)) {
8949 baseElement.focus();
8950 }
8951 }
8952 store == null ? void 0 : store.setActiveId(event.currentTarget.id);
8953 });
8954 const onMouseLeaveProp = props.onMouseLeave;
8955 const blurOnHoverEndProp = useBooleanEvent(blurOnHoverEnd);
8956 const onMouseLeave = useEvent((event) => {
8957 var _a2;
8958 onMouseLeaveProp == null ? void 0 : onMouseLeaveProp(event);
8959 if (event.defaultPrevented) return;
8960 if (!isMouseMoving()) return;
8961 if (hoveringInside(event)) return;
8962 if (movingToAnotherItem(event)) return;
8963 if (!focusOnHoverProp(event)) return;
8964 if (!blurOnHoverEndProp(event)) return;
8965 store == null ? void 0 : store.setActiveId(null);
8966 (_a2 = store == null ? void 0 : store.getState().baseElement) == null ? void 0 : _a2.focus();
8967 });
8968 const ref = (0, import_react14.useCallback)((element) => {
8969 if (!element) return;
8970 element[symbol2] = true;
8971 }, []);
8972 props = __spreadProps(__spreadValues({}, props), {
8973 ref: useMergeRefs(ref, props.ref),
8974 onMouseMove,
8975 onMouseLeave
8976 });
8977 return removeUndefinedValues(props);
8978 }
8979 );
8980 var CompositeHover = memo22(
8981 forwardRef22(function CompositeHover2(props) {
8982 const htmlProps = useCompositeHover(props);
8983 return createElement2(TagName7, htmlProps);
8984 })
8985 );
8986
8987 // node_modules/@ariakit/react-core/esm/__chunks/RZ4GPYOB.js
8988 var import_react15 = __toESM(require_react(), 1);
8989 var TagName8 = "div";
8990 var useCollectionItem = createHook(
8991 function useCollectionItem2(_a) {
8992 var _b = _a, {
8993 store,
8994 shouldRegisterItem = true,
8995 getItem = identity,
8996 element
8997 } = _b, props = __objRest(_b, [
8998 "store",
8999 "shouldRegisterItem",
9000 "getItem",
9001 // @ts-expect-error This prop may come from a collection renderer.
9002 "element"
9003 ]);
9004 const context = useCollectionContext();
9005 store = store || context;
9006 const id = useId3(props.id);
9007 const ref = (0, import_react15.useRef)(element);
9008 (0, import_react15.useEffect)(() => {
9009 const element2 = ref.current;
9010 if (!id) return;
9011 if (!element2) return;
9012 if (!shouldRegisterItem) return;
9013 const item = getItem({ id, element: element2 });
9014 return store == null ? void 0 : store.renderItem(item);
9015 }, [id, shouldRegisterItem, getItem, store]);
9016 props = __spreadProps(__spreadValues({}, props), {
9017 ref: useMergeRefs(ref, props.ref)
9018 });
9019 return removeUndefinedValues(props);
9020 }
9021 );
9022 var CollectionItem = forwardRef22(function CollectionItem2(props) {
9023 const htmlProps = useCollectionItem(props);
9024 return createElement2(TagName8, htmlProps);
9025 });
9026
9027 // node_modules/@ariakit/react-core/esm/__chunks/P2CTZE2T.js
9028 var import_react16 = __toESM(require_react(), 1);
9029 var import_jsx_runtime55 = __toESM(require_jsx_runtime(), 1);
9030 var TagName9 = "button";
9031 function isEditableElement(element) {
9032 if (isTextbox(element)) return true;
9033 return element.tagName === "INPUT" && !isButton(element);
9034 }
9035 function getNextPageOffset(scrollingElement, pageUp = false) {
9036 const height = scrollingElement.clientHeight;
9037 const { top } = scrollingElement.getBoundingClientRect();
9038 const pageSize = Math.max(height * 0.875, height - 40) * 1.5;
9039 const pageOffset = pageUp ? height - pageSize + top : pageSize + top;
9040 if (scrollingElement.tagName === "HTML") {
9041 return pageOffset + scrollingElement.scrollTop;
9042 }
9043 return pageOffset;
9044 }
9045 function getItemOffset(itemElement, pageUp = false) {
9046 const { top } = itemElement.getBoundingClientRect();
9047 if (pageUp) {
9048 return top + itemElement.clientHeight;
9049 }
9050 return top;
9051 }
9052 function findNextPageItemId(element, store, next, pageUp = false) {
9053 var _a;
9054 if (!store) return;
9055 if (!next) return;
9056 const { renderedItems } = store.getState();
9057 const scrollingElement = getScrollingElement(element);
9058 if (!scrollingElement) return;
9059 const nextPageOffset = getNextPageOffset(scrollingElement, pageUp);
9060 let id;
9061 let prevDifference;
9062 for (let i2 = 0; i2 < renderedItems.length; i2 += 1) {
9063 const previousId = id;
9064 id = next(i2);
9065 if (!id) break;
9066 if (id === previousId) continue;
9067 const itemElement = (_a = getEnabledItem(store, id)) == null ? void 0 : _a.element;
9068 if (!itemElement) continue;
9069 const itemOffset = getItemOffset(itemElement, pageUp);
9070 const difference = itemOffset - nextPageOffset;
9071 const absDifference = Math.abs(difference);
9072 if (pageUp && difference <= 0 || !pageUp && difference >= 0) {
9073 if (prevDifference !== void 0 && prevDifference < absDifference) {
9074 id = previousId;
9075 }
9076 break;
9077 }
9078 prevDifference = absDifference;
9079 }
9080 return id;
9081 }
9082 function targetIsAnotherItem(event, store) {
9083 if (isSelfTarget(event)) return false;
9084 return isItem(store, event.target);
9085 }
9086 var useCompositeItem = createHook(
9087 function useCompositeItem2(_a) {
9088 var _b = _a, {
9089 store,
9090 rowId: rowIdProp,
9091 preventScrollOnKeyDown = false,
9092 moveOnKeyPress = true,
9093 tabbable = false,
9094 getItem: getItemProp,
9095 "aria-setsize": ariaSetSizeProp,
9096 "aria-posinset": ariaPosInSetProp
9097 } = _b, props = __objRest(_b, [
9098 "store",
9099 "rowId",
9100 "preventScrollOnKeyDown",
9101 "moveOnKeyPress",
9102 "tabbable",
9103 "getItem",
9104 "aria-setsize",
9105 "aria-posinset"
9106 ]);
9107 const context = useCompositeContext();
9108 store = store || context;
9109 const id = useId3(props.id);
9110 const ref = (0, import_react16.useRef)(null);
9111 const row = (0, import_react16.useContext)(CompositeRowContext);
9112 const disabled = disabledFromProps(props);
9113 const trulyDisabled = disabled && !props.accessibleWhenDisabled;
9114 const {
9115 rowId,
9116 baseElement,
9117 isActiveItem,
9118 ariaSetSize,
9119 ariaPosInSet,
9120 isTabbable
9121 } = useStoreStateObject(store, {
9122 rowId(state) {
9123 if (rowIdProp) return rowIdProp;
9124 if (!state) return;
9125 if (!(row == null ? void 0 : row.baseElement)) return;
9126 if (row.baseElement !== state.baseElement) return;
9127 return row.id;
9128 },
9129 baseElement(state) {
9130 return (state == null ? void 0 : state.baseElement) || void 0;
9131 },
9132 isActiveItem(state) {
9133 return !!state && state.activeId === id;
9134 },
9135 ariaSetSize(state) {
9136 if (ariaSetSizeProp != null) return ariaSetSizeProp;
9137 if (!state) return;
9138 if (!(row == null ? void 0 : row.ariaSetSize)) return;
9139 if (row.baseElement !== state.baseElement) return;
9140 return row.ariaSetSize;
9141 },
9142 ariaPosInSet(state) {
9143 if (ariaPosInSetProp != null) return ariaPosInSetProp;
9144 if (!state) return;
9145 if (!(row == null ? void 0 : row.ariaPosInSet)) return;
9146 if (row.baseElement !== state.baseElement) return;
9147 const itemsInRow = state.renderedItems.filter(
9148 (item) => item.rowId === rowId
9149 );
9150 return row.ariaPosInSet + itemsInRow.findIndex((item) => item.id === id);
9151 },
9152 isTabbable(state) {
9153 if (!(state == null ? void 0 : state.renderedItems.length)) return true;
9154 if (state.virtualFocus) return false;
9155 if (tabbable) return true;
9156 if (state.activeId === null) return false;
9157 const item = store == null ? void 0 : store.item(state.activeId);
9158 if (item == null ? void 0 : item.disabled) return true;
9159 if (!(item == null ? void 0 : item.element)) return true;
9160 return state.activeId === id;
9161 }
9162 });
9163 const getItem = (0, import_react16.useCallback)(
9164 (item) => {
9165 var _a2;
9166 const nextItem = __spreadProps(__spreadValues({}, item), {
9167 id: id || item.id,
9168 rowId,
9169 disabled: !!trulyDisabled,
9170 children: (_a2 = item.element) == null ? void 0 : _a2.textContent
9171 });
9172 if (getItemProp) {
9173 return getItemProp(nextItem);
9174 }
9175 return nextItem;
9176 },
9177 [id, rowId, trulyDisabled, getItemProp]
9178 );
9179 const onFocusProp = props.onFocus;
9180 const hasFocusedComposite = (0, import_react16.useRef)(false);
9181 const onFocus = useEvent((event) => {
9182 onFocusProp == null ? void 0 : onFocusProp(event);
9183 if (event.defaultPrevented) return;
9184 if (isPortalEvent(event)) return;
9185 if (!id) return;
9186 if (!store) return;
9187 if (targetIsAnotherItem(event, store)) return;
9188 const { virtualFocus, baseElement: baseElement2 } = store.getState();
9189 store.setActiveId(id);
9190 if (isTextbox(event.currentTarget)) {
9191 selectTextField(event.currentTarget);
9192 }
9193 if (!virtualFocus) return;
9194 if (!isSelfTarget(event)) return;
9195 if (isEditableElement(event.currentTarget)) return;
9196 if (!(baseElement2 == null ? void 0 : baseElement2.isConnected)) return;
9197 if (isSafari() && event.currentTarget.hasAttribute("data-autofocus")) {
9198 event.currentTarget.scrollIntoView({
9199 block: "nearest",
9200 inline: "nearest"
9201 });
9202 }
9203 hasFocusedComposite.current = true;
9204 const fromComposite = event.relatedTarget === baseElement2 || isItem(store, event.relatedTarget);
9205 if (fromComposite) {
9206 focusSilently(baseElement2);
9207 } else {
9208 baseElement2.focus();
9209 }
9210 });
9211 const onBlurCaptureProp = props.onBlurCapture;
9212 const onBlurCapture = useEvent((event) => {
9213 onBlurCaptureProp == null ? void 0 : onBlurCaptureProp(event);
9214 if (event.defaultPrevented) return;
9215 const state = store == null ? void 0 : store.getState();
9216 if ((state == null ? void 0 : state.virtualFocus) && hasFocusedComposite.current) {
9217 hasFocusedComposite.current = false;
9218 event.preventDefault();
9219 event.stopPropagation();
9220 }
9221 });
9222 const onKeyDownProp = props.onKeyDown;
9223 const preventScrollOnKeyDownProp = useBooleanEvent(preventScrollOnKeyDown);
9224 const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress);
9225 const onKeyDown = useEvent((event) => {
9226 onKeyDownProp == null ? void 0 : onKeyDownProp(event);
9227 if (event.defaultPrevented) return;
9228 if (!isSelfTarget(event)) return;
9229 if (!store) return;
9230 const { currentTarget } = event;
9231 const state = store.getState();
9232 const item = store.item(id);
9233 const isGrid2 = !!(item == null ? void 0 : item.rowId);
9234 const isVertical = state.orientation !== "horizontal";
9235 const isHorizontal = state.orientation !== "vertical";
9236 const canHomeEnd = () => {
9237 if (isGrid2) return true;
9238 if (isHorizontal) return true;
9239 if (!state.baseElement) return true;
9240 if (!isTextField(state.baseElement)) return true;
9241 return false;
9242 };
9243 const keyMap = {
9244 ArrowUp: (isGrid2 || isVertical) && store.up,
9245 ArrowRight: (isGrid2 || isHorizontal) && store.next,
9246 ArrowDown: (isGrid2 || isVertical) && store.down,
9247 ArrowLeft: (isGrid2 || isHorizontal) && store.previous,
9248 Home: () => {
9249 if (!canHomeEnd()) return;
9250 if (!isGrid2 || event.ctrlKey) {
9251 return store == null ? void 0 : store.first();
9252 }
9253 return store == null ? void 0 : store.previous(-1);
9254 },
9255 End: () => {
9256 if (!canHomeEnd()) return;
9257 if (!isGrid2 || event.ctrlKey) {
9258 return store == null ? void 0 : store.last();
9259 }
9260 return store == null ? void 0 : store.next(-1);
9261 },
9262 PageUp: () => {
9263 return findNextPageItemId(currentTarget, store, store == null ? void 0 : store.up, true);
9264 },
9265 PageDown: () => {
9266 return findNextPageItemId(currentTarget, store, store == null ? void 0 : store.down);
9267 }
9268 };
9269 const action = keyMap[event.key];
9270 if (action) {
9271 if (isTextbox(currentTarget)) {
9272 const selection = getTextboxSelection(currentTarget);
9273 const isLeft = isHorizontal && event.key === "ArrowLeft";
9274 const isRight = isHorizontal && event.key === "ArrowRight";
9275 const isUp = isVertical && event.key === "ArrowUp";
9276 const isDown = isVertical && event.key === "ArrowDown";
9277 if (isRight || isDown) {
9278 const { length: valueLength } = getTextboxValue(currentTarget);
9279 if (selection.end !== valueLength) return;
9280 } else if ((isLeft || isUp) && selection.start !== 0) return;
9281 }
9282 const nextId = action();
9283 if (preventScrollOnKeyDownProp(event) || nextId !== void 0) {
9284 if (!moveOnKeyPressProp(event)) return;
9285 event.preventDefault();
9286 store.move(nextId);
9287 }
9288 }
9289 });
9290 const providerValue = (0, import_react16.useMemo)(
9291 () => ({ id, baseElement }),
9292 [id, baseElement]
9293 );
9294 props = useWrapElement(
9295 props,
9296 (element) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(CompositeItemContext.Provider, { value: providerValue, children: element }),
9297 [providerValue]
9298 );
9299 props = __spreadProps(__spreadValues({
9300 id,
9301 "data-active-item": isActiveItem || void 0
9302 }, props), {
9303 ref: useMergeRefs(ref, props.ref),
9304 tabIndex: isTabbable ? props.tabIndex : -1,
9305 onFocus,
9306 onBlurCapture,
9307 onKeyDown
9308 });
9309 props = useCommand(props);
9310 props = useCollectionItem(__spreadProps(__spreadValues({
9311 store
9312 }, props), {
9313 getItem,
9314 shouldRegisterItem: id ? props.shouldRegisterItem : false
9315 }));
9316 return removeUndefinedValues(__spreadProps(__spreadValues({}, props), {
9317 "aria-setsize": ariaSetSize,
9318 "aria-posinset": ariaPosInSet
9319 }));
9320 }
9321 );
9322 var CompositeItem = memo22(
9323 forwardRef22(function CompositeItem2(props) {
9324 const htmlProps = useCompositeItem(props);
9325 return createElement2(TagName9, htmlProps);
9326 })
9327 );
9328
9329 // node_modules/@ariakit/react-core/esm/__chunks/ZTDSJLD6.js
9330 var import_react17 = __toESM(require_react(), 1);
9331 var import_jsx_runtime56 = __toESM(require_jsx_runtime(), 1);
9332 var TagName10 = "div";
9333 function isSelected(storeValue, itemValue) {
9334 if (itemValue == null) return;
9335 if (storeValue == null) return false;
9336 if (Array.isArray(storeValue)) {
9337 return storeValue.includes(itemValue);
9338 }
9339 return storeValue === itemValue;
9340 }
9341 function getItemRole(popupRole) {
9342 var _a;
9343 const itemRoleByPopupRole = {
9344 menu: "menuitem",
9345 listbox: "option",
9346 tree: "treeitem"
9347 };
9348 const key = popupRole;
9349 return (_a = itemRoleByPopupRole[key]) != null ? _a : "option";
9350 }
9351 var useComboboxItem = createHook(
9352 function useComboboxItem2(_a) {
9353 var _b = _a, {
9354 store,
9355 value,
9356 hideOnClick,
9357 setValueOnClick,
9358 selectValueOnClick = true,
9359 resetValueOnSelect,
9360 focusOnHover = false,
9361 moveOnKeyPress = true,
9362 getItem: getItemProp
9363 } = _b, props = __objRest(_b, [
9364 "store",
9365 "value",
9366 "hideOnClick",
9367 "setValueOnClick",
9368 "selectValueOnClick",
9369 "resetValueOnSelect",
9370 "focusOnHover",
9371 "moveOnKeyPress",
9372 "getItem"
9373 ]);
9374 var _a2;
9375 const context = useComboboxScopedContext();
9376 store = store || context;
9377 invariant(
9378 store,
9379 "ComboboxItem must be wrapped in a ComboboxList or ComboboxPopover component."
9380 );
9381 const { resetValueOnSelectState, multiSelectable, selected } = useStoreStateObject(store, {
9382 resetValueOnSelectState: "resetValueOnSelect",
9383 multiSelectable(state) {
9384 return Array.isArray(state.selectedValue);
9385 },
9386 selected(state) {
9387 return isSelected(state.selectedValue, value);
9388 }
9389 });
9390 const getItem = (0, import_react17.useCallback)(
9391 (item) => {
9392 const nextItem = __spreadProps(__spreadValues({}, item), { value });
9393 if (getItemProp) {
9394 return getItemProp(nextItem);
9395 }
9396 return nextItem;
9397 },
9398 [value, getItemProp]
9399 );
9400 setValueOnClick = setValueOnClick != null ? setValueOnClick : !multiSelectable;
9401 hideOnClick = hideOnClick != null ? hideOnClick : value != null && !multiSelectable;
9402 const onClickProp = props.onClick;
9403 const setValueOnClickProp = useBooleanEvent(setValueOnClick);
9404 const selectValueOnClickProp = useBooleanEvent(selectValueOnClick);
9405 const resetValueOnSelectProp = useBooleanEvent(
9406 (_a2 = resetValueOnSelect != null ? resetValueOnSelect : resetValueOnSelectState) != null ? _a2 : multiSelectable
9407 );
9408 const hideOnClickProp = useBooleanEvent(hideOnClick);
9409 const onClick = useEvent((event) => {
9410 onClickProp == null ? void 0 : onClickProp(event);
9411 if (event.defaultPrevented) return;
9412 if (isDownloading(event)) return;
9413 if (isOpeningInNewTab(event)) return;
9414 if (value != null) {
9415 if (selectValueOnClickProp(event)) {
9416 if (resetValueOnSelectProp(event)) {
9417 store == null ? void 0 : store.resetValue();
9418 }
9419 store == null ? void 0 : store.setSelectedValue((prevValue) => {
9420 if (!Array.isArray(prevValue)) return value;
9421 if (prevValue.includes(value)) {
9422 return prevValue.filter((v2) => v2 !== value);
9423 }
9424 return [...prevValue, value];
9425 });
9426 }
9427 if (setValueOnClickProp(event)) {
9428 store == null ? void 0 : store.setValue(value);
9429 }
9430 }
9431 if (hideOnClickProp(event)) {
9432 store == null ? void 0 : store.hide();
9433 }
9434 });
9435 const onKeyDownProp = props.onKeyDown;
9436 const onKeyDown = useEvent((event) => {
9437 onKeyDownProp == null ? void 0 : onKeyDownProp(event);
9438 if (event.defaultPrevented) return;
9439 const baseElement = store == null ? void 0 : store.getState().baseElement;
9440 if (!baseElement) return;
9441 if (hasFocus(baseElement)) return;
9442 const printable = event.key.length === 1;
9443 if (printable || event.key === "Backspace" || event.key === "Delete") {
9444 queueMicrotask(() => baseElement.focus());
9445 if (isTextField(baseElement)) {
9446 store == null ? void 0 : store.setValue(baseElement.value);
9447 }
9448 }
9449 });
9450 if (multiSelectable && selected != null) {
9451 props = __spreadValues({
9452 "aria-selected": selected
9453 }, props);
9454 }
9455 props = useWrapElement(
9456 props,
9457 (element) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(ComboboxItemValueContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(ComboboxItemCheckedContext.Provider, { value: selected != null ? selected : false, children: element }) }),
9458 [value, selected]
9459 );
9460 const popupRole = (0, import_react17.useContext)(ComboboxListRoleContext);
9461 props = __spreadProps(__spreadValues({
9462 role: getItemRole(popupRole),
9463 children: value
9464 }, props), {
9465 onClick,
9466 onKeyDown
9467 });
9468 const moveOnKeyPressProp = useBooleanEvent(moveOnKeyPress);
9469 props = useCompositeItem(__spreadProps(__spreadValues({
9470 store
9471 }, props), {
9472 getItem,
9473 // Dispatch a custom event on the combobox input when moving to an item
9474 // with the keyboard so the Combobox component can enable inline
9475 // autocompletion.
9476 moveOnKeyPress: (event) => {
9477 if (!moveOnKeyPressProp(event)) return false;
9478 const moveEvent = new Event("combobox-item-move");
9479 const baseElement = store == null ? void 0 : store.getState().baseElement;
9480 baseElement == null ? void 0 : baseElement.dispatchEvent(moveEvent);
9481 return true;
9482 }
9483 }));
9484 props = useCompositeHover(__spreadValues({ store, focusOnHover }, props));
9485 return props;
9486 }
9487 );
9488 var ComboboxItem = memo22(
9489 forwardRef22(function ComboboxItem2(props) {
9490 const htmlProps = useComboboxItem(props);
9491 return createElement2(TagName10, htmlProps);
9492 })
9493 );
9494
9495 // node_modules/@ariakit/react-core/esm/combobox/combobox-label.js
9496 var TagName11 = "label";
9497 var useComboboxLabel = createHook(
9498 function useComboboxLabel2(_a) {
9499 var _b = _a, { store } = _b, props = __objRest(_b, ["store"]);
9500 const context = useComboboxProviderContext();
9501 store = store || context;
9502 invariant(
9503 store,
9504 "ComboboxLabel must receive a `store` prop or be wrapped in a ComboboxProvider component."
9505 );
9506 const comboboxId = store.useState((state) => {
9507 var _a2;
9508 return (_a2 = state.baseElement) == null ? void 0 : _a2.id;
9509 });
9510 props = __spreadValues({
9511 htmlFor: comboboxId
9512 }, props);
9513 return removeUndefinedValues(props);
9514 }
9515 );
9516 var ComboboxLabel = memo22(
9517 forwardRef22(function ComboboxLabel2(props) {
9518 const htmlProps = useComboboxLabel(props);
9519 return createElement2(TagName11, htmlProps);
9520 })
9521 );
9522
9523 // node_modules/@ariakit/react-core/esm/__chunks/VGCJ63VH.js
9524 var import_react18 = __toESM(require_react(), 1);
9525 var import_react_dom = __toESM(require_react_dom(), 1);
9526 var import_jsx_runtime57 = __toESM(require_jsx_runtime(), 1);
9527 var TagName12 = "div";
9528 function afterTimeout(timeoutMs, cb) {
9529 const timeoutId = setTimeout(cb, timeoutMs);
9530 return () => clearTimeout(timeoutId);
9531 }
9532 function afterPaint2(cb) {
9533 let raf = requestAnimationFrame(() => {
9534 raf = requestAnimationFrame(cb);
9535 });
9536 return () => cancelAnimationFrame(raf);
9537 }
9538 function parseCSSTime(...times) {
9539 return times.join(", ").split(", ").reduce((longestTime, currentTimeString) => {
9540 const multiplier = currentTimeString.endsWith("ms") ? 1 : 1e3;
9541 const currentTime = Number.parseFloat(currentTimeString || "0s") * multiplier;
9542 if (currentTime > longestTime) return currentTime;
9543 return longestTime;
9544 }, 0);
9545 }
9546 function isHidden(mounted, hidden, alwaysVisible) {
9547 return !alwaysVisible && hidden !== false && (!mounted || !!hidden);
9548 }
9549 var useDisclosureContent = createHook(function useDisclosureContent2(_a) {
9550 var _b = _a, { store, alwaysVisible } = _b, props = __objRest(_b, ["store", "alwaysVisible"]);
9551 const context = useDisclosureProviderContext();
9552 store = store || context;
9553 invariant(
9554 store,
9555 "DisclosureContent must receive a `store` prop or be wrapped in a DisclosureProvider component."
9556 );
9557 const ref = (0, import_react18.useRef)(null);
9558 const id = useId3(props.id);
9559 const [transition, setTransition] = (0, import_react18.useState)(null);
9560 const open = store.useState("open");
9561 const mounted = store.useState("mounted");
9562 const animated = store.useState("animated");
9563 const contentElement = store.useState("contentElement");
9564 const otherElement = useStoreState(store.disclosure, "contentElement");
9565 useSafeLayoutEffect(() => {
9566 if (!ref.current) return;
9567 store == null ? void 0 : store.setContentElement(ref.current);
9568 }, [store]);
9569 useSafeLayoutEffect(() => {
9570 let previousAnimated;
9571 store == null ? void 0 : store.setState("animated", (animated2) => {
9572 previousAnimated = animated2;
9573 return true;
9574 });
9575 return () => {
9576 if (previousAnimated === void 0) return;
9577 store == null ? void 0 : store.setState("animated", previousAnimated);
9578 };
9579 }, [store]);
9580 useSafeLayoutEffect(() => {
9581 if (!animated) return;
9582 if (!(contentElement == null ? void 0 : contentElement.isConnected)) {
9583 setTransition(null);
9584 return;
9585 }
9586 return afterPaint2(() => {
9587 setTransition(open ? "enter" : mounted ? "leave" : null);
9588 });
9589 }, [animated, contentElement, open, mounted]);
9590 useSafeLayoutEffect(() => {
9591 if (!store) return;
9592 if (!animated) return;
9593 if (!transition) return;
9594 if (!contentElement) return;
9595 const stopAnimation = () => store == null ? void 0 : store.setState("animating", false);
9596 const stopAnimationSync = () => (0, import_react_dom.flushSync)(stopAnimation);
9597 if (transition === "leave" && open) return;
9598 if (transition === "enter" && !open) return;
9599 if (typeof animated === "number") {
9600 const timeout2 = animated;
9601 return afterTimeout(timeout2, stopAnimationSync);
9602 }
9603 const {
9604 transitionDuration,
9605 animationDuration,
9606 transitionDelay,
9607 animationDelay
9608 } = getComputedStyle(contentElement);
9609 const {
9610 transitionDuration: transitionDuration2 = "0",
9611 animationDuration: animationDuration2 = "0",
9612 transitionDelay: transitionDelay2 = "0",
9613 animationDelay: animationDelay2 = "0"
9614 } = otherElement ? getComputedStyle(otherElement) : {};
9615 const delay = parseCSSTime(
9616 transitionDelay,
9617 animationDelay,
9618 transitionDelay2,
9619 animationDelay2
9620 );
9621 const duration = parseCSSTime(
9622 transitionDuration,
9623 animationDuration,
9624 transitionDuration2,
9625 animationDuration2
9626 );
9627 const timeout = delay + duration;
9628 if (!timeout) {
9629 if (transition === "enter") {
9630 store.setState("animated", false);
9631 }
9632 stopAnimation();
9633 return;
9634 }
9635 const frameRate = 1e3 / 60;
9636 const maxTimeout = Math.max(timeout - frameRate, 0);
9637 return afterTimeout(maxTimeout, stopAnimationSync);
9638 }, [store, animated, contentElement, otherElement, open, transition]);
9639 props = useWrapElement(
9640 props,
9641 (element) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(DialogScopedContextProvider, { value: store, children: element }),
9642 [store]
9643 );
9644 const hidden = isHidden(mounted, props.hidden, alwaysVisible);
9645 const styleProp = props.style;
9646 const style = (0, import_react18.useMemo)(() => {
9647 if (hidden) {
9648 return __spreadProps(__spreadValues({}, styleProp), { display: "none" });
9649 }
9650 return styleProp;
9651 }, [hidden, styleProp]);
9652 props = __spreadProps(__spreadValues({
9653 id,
9654 "data-open": open || void 0,
9655 "data-enter": transition === "enter" || void 0,
9656 "data-leave": transition === "leave" || void 0,
9657 hidden
9658 }, props), {
9659 ref: useMergeRefs(id ? store.setContentElement : null, ref, props.ref),
9660 style
9661 });
9662 return removeUndefinedValues(props);
9663 });
9664 var DisclosureContentImpl = forwardRef22(function DisclosureContentImpl2(props) {
9665 const htmlProps = useDisclosureContent(props);
9666 return createElement2(TagName12, htmlProps);
9667 });
9668 var DisclosureContent = forwardRef22(function DisclosureContent2(_a) {
9669 var _b = _a, {
9670 unmountOnHide
9671 } = _b, props = __objRest(_b, [
9672 "unmountOnHide"
9673 ]);
9674 const context = useDisclosureProviderContext();
9675 const store = props.store || context;
9676 const mounted = useStoreState(
9677 store,
9678 (state) => !unmountOnHide || (state == null ? void 0 : state.mounted)
9679 );
9680 if (mounted === false) return null;
9681 return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(DisclosureContentImpl, __spreadValues({}, props));
9682 });
9683
9684 // node_modules/@ariakit/react-core/esm/__chunks/HUWAI7RB.js
9685 var import_react19 = __toESM(require_react(), 1);
9686 var import_jsx_runtime58 = __toESM(require_jsx_runtime(), 1);
9687 var TagName13 = "div";
9688 var useComboboxList = createHook(
9689 function useComboboxList2(_a) {
9690 var _b = _a, { store, alwaysVisible } = _b, props = __objRest(_b, ["store", "alwaysVisible"]);
9691 const scopedContext = useComboboxScopedContext(true);
9692 const context = useComboboxContext();
9693 store = store || context;
9694 const scopedContextSameStore = !!store && store === scopedContext;
9695 invariant(
9696 store,
9697 "ComboboxList must receive a `store` prop or be wrapped in a ComboboxProvider component."
9698 );
9699 const ref = (0, import_react19.useRef)(null);
9700 const id = useId3(props.id);
9701 const mounted = store.useState("mounted");
9702 const hidden = isHidden(mounted, props.hidden, alwaysVisible);
9703 const style = hidden ? __spreadProps(__spreadValues({}, props.style), { display: "none" }) : props.style;
9704 const multiSelectable = store.useState(
9705 (state) => Array.isArray(state.selectedValue)
9706 );
9707 const role = useAttribute(ref, "role", props.role);
9708 const isCompositeRole = role === "listbox" || role === "tree" || role === "grid";
9709 const ariaMultiSelectable = isCompositeRole ? multiSelectable || void 0 : void 0;
9710 const [hasListboxInside, setHasListboxInside] = (0, import_react19.useState)(false);
9711 const contentElement = store.useState("contentElement");
9712 useSafeLayoutEffect(() => {
9713 if (!mounted) return;
9714 const element = ref.current;
9715 if (!element) return;
9716 if (contentElement !== element) return;
9717 const callback = () => {
9718 setHasListboxInside(!!element.querySelector("[role='listbox']"));
9719 };
9720 const observer = new MutationObserver(callback);
9721 observer.observe(element, {
9722 subtree: true,
9723 childList: true,
9724 attributeFilter: ["role"]
9725 });
9726 callback();
9727 return () => observer.disconnect();
9728 }, [mounted, contentElement]);
9729 if (!hasListboxInside) {
9730 props = __spreadValues({
9731 role: "listbox",
9732 "aria-multiselectable": ariaMultiSelectable
9733 }, props);
9734 }
9735 props = useWrapElement(
9736 props,
9737 (element) => /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(ComboboxScopedContextProvider, { value: store, children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(ComboboxListRoleContext.Provider, { value: role, children: element }) }),
9738 [store, role]
9739 );
9740 const setContentElement = id && (!scopedContext || !scopedContextSameStore) ? store.setContentElement : null;
9741 props = __spreadProps(__spreadValues({
9742 id,
9743 hidden
9744 }, props), {
9745 ref: useMergeRefs(setContentElement, ref, props.ref),
9746 style
9747 });
9748 return removeUndefinedValues(props);
9749 }
9750 );
9751 var ComboboxList = forwardRef22(function ComboboxList2(props) {
9752 const htmlProps = useComboboxList(props);
9753 return createElement2(TagName13, htmlProps);
9754 });
9755
9756 // packages/dataviews/build-module/components/dataviews-filters/search-widget.js
9757 var import_remove_accents = __toESM(require_remove_accents());
9758 var import_compose7 = __toESM(require_compose());
9759 var import_i18n27 = __toESM(require_i18n());
9760 var import_element23 = __toESM(require_element());
9761 var import_components21 = __toESM(require_components());
9762
9763 // packages/dataviews/build-module/components/dataviews-filters/utils.js
9764 var EMPTY_ARRAY2 = [];
9765 var getCurrentValue = (filterDefinition, currentFilter) => {
9766 if (filterDefinition.singleSelection) {
9767 return currentFilter?.value;
9768 }
9769 if (Array.isArray(currentFilter?.value)) {
9770 return currentFilter.value;
9771 }
9772 if (!Array.isArray(currentFilter?.value) && !!currentFilter?.value) {
9773 return [currentFilter.value];
9774 }
9775 return EMPTY_ARRAY2;
9776 };
9777
9778 // packages/dataviews/build-module/hooks/use-elements.js
9779 var import_element22 = __toESM(require_element());
9780 var EMPTY_ARRAY3 = [];
9781 function useElements({
9782 elements,
9783 getElements
9784 }) {
9785 const staticElements = Array.isArray(elements) && elements.length > 0 ? elements : EMPTY_ARRAY3;
9786 const [records, setRecords] = (0, import_element22.useState)(staticElements);
9787 const [isLoading, setIsLoading] = (0, import_element22.useState)(false);
9788 (0, import_element22.useEffect)(() => {
9789 if (!getElements) {
9790 setRecords(staticElements);
9791 return;
9792 }
9793 let cancelled = false;
9794 setIsLoading(true);
9795 getElements().then((fetchedElements) => {
9796 if (!cancelled) {
9797 const dynamicElements = Array.isArray(fetchedElements) && fetchedElements.length > 0 ? fetchedElements : staticElements;
9798 setRecords(dynamicElements);
9799 }
9800 }).catch(() => {
9801 if (!cancelled) {
9802 setRecords(staticElements);
9803 }
9804 }).finally(() => {
9805 if (!cancelled) {
9806 setIsLoading(false);
9807 }
9808 });
9809 return () => {
9810 cancelled = true;
9811 };
9812 }, [getElements, staticElements]);
9813 return {
9814 elements: records,
9815 isLoading
9816 };
9817 }
9818
9819 // packages/dataviews/build-module/components/dataviews-filters/search-widget.js
9820 var import_jsx_runtime59 = __toESM(require_jsx_runtime());
9821 function normalizeSearchInput(input = "") {
9822 return (0, import_remove_accents.default)(input.trim().toLowerCase());
9823 }
9824 var getNewValue = (filterDefinition, currentFilter, value) => {
9825 if (filterDefinition.singleSelection) {
9826 return value;
9827 }
9828 if (Array.isArray(currentFilter?.value)) {
9829 return currentFilter.value.includes(value) ? currentFilter.value.filter((v2) => v2 !== value) : [...currentFilter.value, value];
9830 }
9831 return [value];
9832 };
9833 function generateFilterElementCompositeItemId(prefix, filterElementValue) {
9834 return `${prefix}-${filterElementValue}`;
9835 }
9836 var MultiSelectionOption = ({ selected }) => {
9837 return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
9838 "span",
9839 {
9840 className: clsx_default(
9841 "dataviews-filters__search-widget-listitem-multi-selection",
9842 { "is-selected": selected }
9843 ),
9844 children: selected && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_components21.Icon, { icon: check_default })
9845 }
9846 );
9847 };
9848 var SingleSelectionOption = ({ selected }) => {
9849 return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
9850 "span",
9851 {
9852 className: clsx_default(
9853 "dataviews-filters__search-widget-listitem-single-selection",
9854 { "is-selected": selected }
9855 )
9856 }
9857 );
9858 };
9859 function ListBox({ view, filter, onChangeView }) {
9860 const baseId = (0, import_compose7.useInstanceId)(ListBox, "dataviews-filter-list-box");
9861 const [activeCompositeId, setActiveCompositeId] = (0, import_element23.useState)(
9862 // When there are one or less operators, the first item is set as active
9863 // (by setting the initial `activeId` to `undefined`).
9864 // With 2 or more operators, the focus is moved on the operators control
9865 // (by setting the initial `activeId` to `null`), meaning that there won't
9866 // be an active item initially. Focus is then managed via the
9867 // `onFocusVisible` callback.
9868 filter.operators?.length === 1 ? void 0 : null
9869 );
9870 const currentFilter = view.filters?.find(
9871 (f2) => f2.field === filter.field
9872 );
9873 const currentValue = getCurrentValue(filter, currentFilter);
9874 return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
9875 import_components21.Composite,
9876 {
9877 virtualFocus: true,
9878 focusLoop: true,
9879 activeId: activeCompositeId,
9880 setActiveId: setActiveCompositeId,
9881 role: "listbox",
9882 className: "dataviews-filters__search-widget-listbox",
9883 "aria-label": (0, import_i18n27.sprintf)(
9884 /* translators: List of items for a filter. 1: Filter name. e.g.: "List of: Author". */
9885 (0, import_i18n27.__)("List of: %1$s"),
9886 filter.name
9887 ),
9888 onFocusVisible: () => {
9889 if (!activeCompositeId && filter.elements.length) {
9890 setActiveCompositeId(
9891 generateFilterElementCompositeItemId(
9892 baseId,
9893 filter.elements[0].value
9894 )
9895 );
9896 }
9897 },
9898 render: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_components21.Composite.Typeahead, {}),
9899 children: filter.elements.map((element) => /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(
9900 import_components21.Composite.Hover,
9901 {
9902 render: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
9903 import_components21.Composite.Item,
9904 {
9905 id: generateFilterElementCompositeItemId(
9906 baseId,
9907 element.value
9908 ),
9909 render: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
9910 "div",
9911 {
9912 "aria-label": element.label,
9913 role: "option",
9914 className: "dataviews-filters__search-widget-listitem"
9915 }
9916 ),
9917 onClick: () => {
9918 const newFilters = currentFilter ? [
9919 ...(view.filters ?? []).map(
9920 (_filter) => {
9921 if (_filter.field === filter.field) {
9922 return {
9923 ..._filter,
9924 operator: currentFilter.operator || filter.operators[0],
9925 value: getNewValue(
9926 filter,
9927 currentFilter,
9928 element.value
9929 )
9930 };
9931 }
9932 return _filter;
9933 }
9934 )
9935 ] : [
9936 ...view.filters ?? [],
9937 {
9938 field: filter.field,
9939 operator: filter.operators[0],
9940 value: getNewValue(
9941 filter,
9942 currentFilter,
9943 element.value
9944 )
9945 }
9946 ];
9947 onChangeView({
9948 ...view,
9949 page: 1,
9950 filters: newFilters
9951 });
9952 }
9953 }
9954 ),
9955 children: [
9956 filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
9957 SingleSelectionOption,
9958 {
9959 selected: currentValue === element.value
9960 }
9961 ),
9962 !filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
9963 MultiSelectionOption,
9964 {
9965 selected: currentValue.includes(element.value)
9966 }
9967 ),
9968 /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { children: element.label })
9969 ]
9970 },
9971 element.value
9972 ))
9973 }
9974 );
9975 }
9976 function ComboboxList22({ view, filter, onChangeView }) {
9977 const [searchValue, setSearchValue] = (0, import_element23.useState)("");
9978 const deferredSearchValue = (0, import_element23.useDeferredValue)(searchValue);
9979 const currentFilter = view.filters?.find(
9980 (_filter) => _filter.field === filter.field
9981 );
9982 const currentValue = getCurrentValue(filter, currentFilter);
9983 const matches = (0, import_element23.useMemo)(() => {
9984 const normalizedSearch = normalizeSearchInput(deferredSearchValue);
9985 return filter.elements.filter(
9986 (item) => normalizeSearchInput(item.label).includes(normalizedSearch)
9987 );
9988 }, [filter.elements, deferredSearchValue]);
9989 return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(
9990 ComboboxProvider,
9991 {
9992 selectedValue: currentValue,
9993 setSelectedValue: (value) => {
9994 const newFilters = currentFilter ? [
9995 ...(view.filters ?? []).map((_filter) => {
9996 if (_filter.field === filter.field) {
9997 return {
9998 ..._filter,
9999 operator: currentFilter.operator || filter.operators[0],
10000 value
10001 };
10002 }
10003 return _filter;
10004 })
10005 ] : [
10006 ...view.filters ?? [],
10007 {
10008 field: filter.field,
10009 operator: filter.operators[0],
10010 value
10011 }
10012 ];
10013 onChangeView({
10014 ...view,
10015 page: 1,
10016 filters: newFilters
10017 });
10018 },
10019 setValue: setSearchValue,
10020 children: [
10021 /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "dataviews-filters__search-widget-filter-combobox__wrapper", children: [
10022 /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
10023 ComboboxLabel,
10024 {
10025 render: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_components21.VisuallyHidden, { children: (0, import_i18n27.__)("Search items") }),
10026 children: (0, import_i18n27.__)("Search items")
10027 }
10028 ),
10029 /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
10030 Combobox,
10031 {
10032 autoSelect: "always",
10033 placeholder: (0, import_i18n27.__)("Search"),
10034 className: "dataviews-filters__search-widget-filter-combobox__input"
10035 }
10036 ),
10037 /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "dataviews-filters__search-widget-filter-combobox__icon", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_components21.Icon, { icon: search_default }) })
10038 ] }),
10039 /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(
10040 ComboboxList,
10041 {
10042 className: "dataviews-filters__search-widget-filter-combobox-list",
10043 alwaysVisible: true,
10044 children: [
10045 matches.map((element) => {
10046 return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(
10047 ComboboxItem,
10048 {
10049 resetValueOnSelect: false,
10050 value: element.value,
10051 className: "dataviews-filters__search-widget-listitem",
10052 hideOnClick: false,
10053 setValueOnClick: false,
10054 focusOnHover: true,
10055 children: [
10056 filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
10057 SingleSelectionOption,
10058 {
10059 selected: currentValue === element.value
10060 }
10061 ),
10062 !filter.singleSelection && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
10063 MultiSelectionOption,
10064 {
10065 selected: currentValue.includes(
10066 element.value
10067 )
10068 }
10069 ),
10070 /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("span", { children: [
10071 /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
10072 ComboboxItemValue,
10073 {
10074 className: "dataviews-filters__search-widget-filter-combobox-item-value",
10075 value: element.label
10076 }
10077 ),
10078 !!element.description && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("span", { className: "dataviews-filters__search-widget-listitem-description", children: element.description })
10079 ] })
10080 ]
10081 },
10082 element.value
10083 );
10084 }),
10085 !matches.length && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { children: (0, import_i18n27.__)("No results found") })
10086 ]
10087 }
10088 )
10089 ]
10090 }
10091 );
10092 }
10093 function SearchWidget(props) {
10094 const { elements, isLoading } = useElements({
10095 elements: props.filter.elements,
10096 getElements: props.filter.getElements
10097 });
10098 if (isLoading) {
10099 return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "dataviews-filters__search-widget-no-elements", children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_components21.Spinner, {}) });
10100 }
10101 if (elements.length === 0) {
10102 return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "dataviews-filters__search-widget-no-elements", children: (0, import_i18n27.__)("No elements found") });
10103 }
10104 const Widget = elements.length > 10 ? ComboboxList22 : ListBox;
10105 return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Widget, { ...props, filter: { ...props.filter, elements } });
10106 }
10107
10108 // packages/dataviews/build-module/components/dataviews-filters/input-widget.js
10109 var import_es6 = __toESM(require_es6());
10110 var import_compose8 = __toESM(require_compose());
10111 var import_element24 = __toESM(require_element());
10112 var import_components22 = __toESM(require_components());
10113 var import_jsx_runtime60 = __toESM(require_jsx_runtime());
10114 function InputWidget({
10115 filter,
10116 view,
10117 onChangeView,
10118 fields
10119 }) {
10120 const currentFilter = view.filters?.find(
10121 (f2) => f2.field === filter.field
10122 );
10123 const currentValue = getCurrentValue(filter, currentFilter);
10124 const field = (0, import_element24.useMemo)(() => {
10125 const currentField = fields.find((f2) => f2.id === filter.field);
10126 if (currentField) {
10127 return {
10128 ...currentField,
10129 // Deactivate validation for filters.
10130 isValid: {},
10131 // Configure getValue/setValue as if Item was a plain object.
10132 getValue: ({ item }) => item[currentField.id],
10133 setValue: ({ value }) => ({
10134 [currentField.id]: value
10135 })
10136 };
10137 }
10138 return currentField;
10139 }, [fields, filter.field]);
10140 const data = (0, import_element24.useMemo)(() => {
10141 return (view.filters ?? []).reduce(
10142 (acc, activeFilter) => {
10143 acc[activeFilter.field] = activeFilter.value;
10144 return acc;
10145 },
10146 {}
10147 );
10148 }, [view.filters]);
10149 const handleChange = (0, import_compose8.useEvent)((updatedData) => {
10150 if (!field || !currentFilter) {
10151 return;
10152 }
10153 const nextValue = field.getValue({ item: updatedData });
10154 if ((0, import_es6.default)(nextValue, currentValue)) {
10155 return;
10156 }
10157 onChangeView({
10158 ...view,
10159 filters: (view.filters ?? []).map(
10160 (_filter) => _filter.field === filter.field ? {
10161 ..._filter,
10162 operator: currentFilter.operator || filter.operators[0],
10163 // Consider empty strings as undefined:
10164 //
10165 // - undefined as value means the filter is unset: the filter widget displays no value and the search returns all records
10166 // - empty string as value means "search empty string": returns only the records that have an empty string as value
10167 //
10168 // In practice, this means the filter will not be able to find an empty string as the value.
10169 value: nextValue === "" ? void 0 : nextValue
10170 } : _filter
10171 )
10172 });
10173 });
10174 if (!field || !field.Edit || !currentFilter) {
10175 return null;
10176 }
10177 return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
10178 import_components22.Flex,
10179 {
10180 className: "dataviews-filters__user-input-widget",
10181 gap: 2.5,
10182 direction: "column",
10183 children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
10184 field.Edit,
10185 {
10186 hideLabelFromVision: true,
10187 data,
10188 field,
10189 operator: currentFilter.operator,
10190 onChange: handleChange
10191 }
10192 )
10193 }
10194 );
10195 }
10196
10197 // packages/dataviews/build-module/utils/operators.js
10198 var import_i18n28 = __toESM(require_i18n());
10199 var import_element25 = __toESM(require_element());
10200 var import_jsx_runtime61 = __toESM(require_jsx_runtime());
10201 var filterTextWrappers = {
10202 Name: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "dataviews-filters__summary-filter-text-name" }),
10203 Value: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "dataviews-filters__summary-filter-text-value" })
10204 };
10205 var OPERATORS = [
10206 {
10207 name: OPERATOR_IS_ANY,
10208 /* translators: DataViews operator name */
10209 label: (0, import_i18n28.__)("Includes"),
10210 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10211 (0, import_i18n28.sprintf)(
10212 /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is any: Admin, Editor". */
10213 (0, import_i18n28.__)("<Name>%1$s includes: </Name><Value>%2$s</Value>"),
10214 filter.name,
10215 activeElements.map((element) => element.label).join(", ")
10216 ),
10217 filterTextWrappers
10218 ),
10219 selection: "multi"
10220 },
10221 {
10222 name: OPERATOR_IS_NONE,
10223 /* translators: DataViews operator name */
10224 label: (0, import_i18n28.__)("Is none of"),
10225 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10226 (0, import_i18n28.sprintf)(
10227 /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is none of: Admin, Editor". */
10228 (0, import_i18n28.__)("<Name>%1$s is none of: </Name><Value>%2$s</Value>"),
10229 filter.name,
10230 activeElements.map((element) => element.label).join(", ")
10231 ),
10232 filterTextWrappers
10233 ),
10234 selection: "multi"
10235 },
10236 {
10237 name: OPERATOR_IS_ALL,
10238 /* translators: DataViews operator name */
10239 label: (0, import_i18n28.__)("Includes all"),
10240 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10241 (0, import_i18n28.sprintf)(
10242 /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author includes all: Admin, Editor". */
10243 (0, import_i18n28.__)("<Name>%1$s includes all: </Name><Value>%2$s</Value>"),
10244 filter.name,
10245 activeElements.map((element) => element.label).join(", ")
10246 ),
10247 filterTextWrappers
10248 ),
10249 selection: "multi"
10250 },
10251 {
10252 name: OPERATOR_IS_NOT_ALL,
10253 /* translators: DataViews operator name */
10254 label: (0, import_i18n28.__)("Is none of"),
10255 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10256 (0, import_i18n28.sprintf)(
10257 /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is none of: Admin, Editor". */
10258 (0, import_i18n28.__)("<Name>%1$s is none of: </Name><Value>%2$s</Value>"),
10259 filter.name,
10260 activeElements.map((element) => element.label).join(", ")
10261 ),
10262 filterTextWrappers
10263 ),
10264 selection: "multi"
10265 },
10266 {
10267 name: OPERATOR_BETWEEN,
10268 /* translators: DataViews operator name */
10269 label: (0, import_i18n28.__)("Between (inc)"),
10270 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10271 (0, import_i18n28.sprintf)(
10272 /* 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". */
10273 (0, import_i18n28.__)(
10274 "<Name>%1$s between (inc): </Name><Value>%2$s and %3$s</Value>"
10275 ),
10276 filter.name,
10277 activeElements[0].label[0],
10278 activeElements[0].label[1]
10279 ),
10280 filterTextWrappers
10281 ),
10282 selection: "custom"
10283 },
10284 {
10285 name: OPERATOR_IN_THE_PAST,
10286 /* translators: DataViews operator name */
10287 label: (0, import_i18n28.__)("In the past"),
10288 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10289 (0, import_i18n28.sprintf)(
10290 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is in the past: 7 days". */
10291 (0, import_i18n28.__)(
10292 "<Name>%1$s is in the past: </Name><Value>%2$s</Value>"
10293 ),
10294 filter.name,
10295 `${activeElements[0].value.value} ${activeElements[0].value.unit}`
10296 ),
10297 filterTextWrappers
10298 ),
10299 selection: "custom"
10300 },
10301 {
10302 name: OPERATOR_OVER,
10303 /* translators: DataViews operator name */
10304 label: (0, import_i18n28.__)("Over"),
10305 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10306 (0, import_i18n28.sprintf)(
10307 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "7 days"): "Date is over: 7 days". */
10308 (0, import_i18n28.__)("<Name>%1$s is over: </Name><Value>%2$s</Value>"),
10309 filter.name,
10310 `${activeElements[0].value.value} ${activeElements[0].value.unit}`
10311 ),
10312 filterTextWrappers
10313 ),
10314 selection: "custom"
10315 },
10316 {
10317 name: OPERATOR_IS,
10318 /* translators: DataViews operator name */
10319 label: (0, import_i18n28.__)("Is"),
10320 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10321 (0, import_i18n28.sprintf)(
10322 /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is: Admin". */
10323 (0, import_i18n28.__)("<Name>%1$s is: </Name><Value>%2$s</Value>"),
10324 filter.name,
10325 activeElements[0].label
10326 ),
10327 filterTextWrappers
10328 ),
10329 selection: "single"
10330 },
10331 {
10332 name: OPERATOR_IS_NOT,
10333 /* translators: DataViews operator name */
10334 label: (0, import_i18n28.__)("Is not"),
10335 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10336 (0, import_i18n28.sprintf)(
10337 /* translators: 1: Filter name (e.g. "Author"). 2: Filter value (e.g. "Admin"): "Author is not: Admin". */
10338 (0, import_i18n28.__)("<Name>%1$s is not: </Name><Value>%2$s</Value>"),
10339 filter.name,
10340 activeElements[0].label
10341 ),
10342 filterTextWrappers
10343 ),
10344 selection: "single"
10345 },
10346 {
10347 name: OPERATOR_LESS_THAN,
10348 /* translators: DataViews operator name */
10349 label: (0, import_i18n28.__)("Less than"),
10350 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10351 (0, import_i18n28.sprintf)(
10352 /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than: 10". */
10353 (0, import_i18n28.__)("<Name>%1$s is less than: </Name><Value>%2$s</Value>"),
10354 filter.name,
10355 activeElements[0].label
10356 ),
10357 filterTextWrappers
10358 ),
10359 selection: "single"
10360 },
10361 {
10362 name: OPERATOR_GREATER_THAN,
10363 /* translators: DataViews operator name */
10364 label: (0, import_i18n28.__)("Greater than"),
10365 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10366 (0, import_i18n28.sprintf)(
10367 /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than: 10". */
10368 (0, import_i18n28.__)(
10369 "<Name>%1$s is greater than: </Name><Value>%2$s</Value>"
10370 ),
10371 filter.name,
10372 activeElements[0].label
10373 ),
10374 filterTextWrappers
10375 ),
10376 selection: "single"
10377 },
10378 {
10379 name: OPERATOR_LESS_THAN_OR_EQUAL,
10380 /* translators: DataViews operator name */
10381 label: (0, import_i18n28.__)("Less than or equal"),
10382 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10383 (0, import_i18n28.sprintf)(
10384 /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is less than or equal to: 10". */
10385 (0, import_i18n28.__)(
10386 "<Name>%1$s is less than or equal to: </Name><Value>%2$s</Value>"
10387 ),
10388 filter.name,
10389 activeElements[0].label
10390 ),
10391 filterTextWrappers
10392 ),
10393 selection: "single"
10394 },
10395 {
10396 name: OPERATOR_GREATER_THAN_OR_EQUAL,
10397 /* translators: DataViews operator name */
10398 label: (0, import_i18n28.__)("Greater than or equal"),
10399 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10400 (0, import_i18n28.sprintf)(
10401 /* translators: 1: Filter name (e.g. "Count"). 2: Filter value (e.g. "10"): "Count is greater than or equal to: 10". */
10402 (0, import_i18n28.__)(
10403 "<Name>%1$s is greater than or equal to: </Name><Value>%2$s</Value>"
10404 ),
10405 filter.name,
10406 activeElements[0].label
10407 ),
10408 filterTextWrappers
10409 ),
10410 selection: "single"
10411 },
10412 {
10413 name: OPERATOR_BEFORE,
10414 /* translators: DataViews operator name */
10415 label: (0, import_i18n28.__)("Before"),
10416 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10417 (0, import_i18n28.sprintf)(
10418 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is before: 2024-01-01". */
10419 (0, import_i18n28.__)("<Name>%1$s is before: </Name><Value>%2$s</Value>"),
10420 filter.name,
10421 activeElements[0].label
10422 ),
10423 filterTextWrappers
10424 ),
10425 selection: "single"
10426 },
10427 {
10428 name: OPERATOR_AFTER,
10429 /* translators: DataViews operator name */
10430 label: (0, import_i18n28.__)("After"),
10431 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10432 (0, import_i18n28.sprintf)(
10433 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is after: 2024-01-01". */
10434 (0, import_i18n28.__)("<Name>%1$s is after: </Name><Value>%2$s</Value>"),
10435 filter.name,
10436 activeElements[0].label
10437 ),
10438 filterTextWrappers
10439 ),
10440 selection: "single"
10441 },
10442 {
10443 name: OPERATOR_BEFORE_INC,
10444 /* translators: DataViews operator name */
10445 label: (0, import_i18n28.__)("Before (inc)"),
10446 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10447 (0, import_i18n28.sprintf)(
10448 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or before: 2024-01-01". */
10449 (0, import_i18n28.__)(
10450 "<Name>%1$s is on or before: </Name><Value>%2$s</Value>"
10451 ),
10452 filter.name,
10453 activeElements[0].label
10454 ),
10455 filterTextWrappers
10456 ),
10457 selection: "single"
10458 },
10459 {
10460 name: OPERATOR_AFTER_INC,
10461 /* translators: DataViews operator name */
10462 label: (0, import_i18n28.__)("After (inc)"),
10463 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10464 (0, import_i18n28.sprintf)(
10465 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is on or after: 2024-01-01". */
10466 (0, import_i18n28.__)(
10467 "<Name>%1$s is on or after: </Name><Value>%2$s</Value>"
10468 ),
10469 filter.name,
10470 activeElements[0].label
10471 ),
10472 filterTextWrappers
10473 ),
10474 selection: "single"
10475 },
10476 {
10477 name: OPERATOR_CONTAINS,
10478 /* translators: DataViews operator name */
10479 label: (0, import_i18n28.__)("Contains"),
10480 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10481 (0, import_i18n28.sprintf)(
10482 /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title contains: Hello". */
10483 (0, import_i18n28.__)("<Name>%1$s contains: </Name><Value>%2$s</Value>"),
10484 filter.name,
10485 activeElements[0].label
10486 ),
10487 filterTextWrappers
10488 ),
10489 selection: "single"
10490 },
10491 {
10492 name: OPERATOR_NOT_CONTAINS,
10493 /* translators: DataViews operator name */
10494 label: (0, import_i18n28.__)("Doesn't contain"),
10495 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10496 (0, import_i18n28.sprintf)(
10497 /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title doesn't contain: Hello". */
10498 (0, import_i18n28.__)(
10499 "<Name>%1$s doesn't contain: </Name><Value>%2$s</Value>"
10500 ),
10501 filter.name,
10502 activeElements[0].label
10503 ),
10504 filterTextWrappers
10505 ),
10506 selection: "single"
10507 },
10508 {
10509 name: OPERATOR_STARTS_WITH,
10510 /* translators: DataViews operator name */
10511 label: (0, import_i18n28.__)("Starts with"),
10512 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10513 (0, import_i18n28.sprintf)(
10514 /* translators: 1: Filter name (e.g. "Title"). 2: Filter value (e.g. "Hello"): "Title starts with: Hello". */
10515 (0, import_i18n28.__)("<Name>%1$s starts with: </Name><Value>%2$s</Value>"),
10516 filter.name,
10517 activeElements[0].label
10518 ),
10519 filterTextWrappers
10520 ),
10521 selection: "single"
10522 },
10523 {
10524 name: OPERATOR_ON,
10525 /* translators: DataViews operator name */
10526 label: (0, import_i18n28.__)("On"),
10527 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10528 (0, import_i18n28.sprintf)(
10529 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is: 2024-01-01". */
10530 (0, import_i18n28.__)("<Name>%1$s is: </Name><Value>%2$s</Value>"),
10531 filter.name,
10532 activeElements[0].label
10533 ),
10534 filterTextWrappers
10535 ),
10536 selection: "single"
10537 },
10538 {
10539 name: OPERATOR_NOT_ON,
10540 /* translators: DataViews operator name */
10541 label: (0, import_i18n28.__)("Not on"),
10542 filterText: (filter, activeElements) => (0, import_element25.createInterpolateElement)(
10543 (0, import_i18n28.sprintf)(
10544 /* translators: 1: Filter name (e.g. "Date"). 2: Filter value (e.g. "2024-01-01"): "Date is not: 2024-01-01". */
10545 (0, import_i18n28.__)("<Name>%1$s is not: </Name><Value>%2$s</Value>"),
10546 filter.name,
10547 activeElements[0].label
10548 ),
10549 filterTextWrappers
10550 ),
10551 selection: "single"
10552 }
10553 ];
10554 var getOperatorByName = (name) => OPERATORS.find((op) => op.name === name);
10555 var getAllOperatorNames = () => OPERATORS.map((op) => op.name);
10556 var isSingleSelectionOperator = (name) => OPERATORS.filter((op) => op.selection === "single").some(
10557 (op) => op.name === name
10558 );
10559 var isRegisteredOperator = (name) => OPERATORS.some((op) => op.name === name);
10560
10561 // packages/dataviews/node_modules/date-fns/constants.js
10562 var daysInYear = 365.2425;
10563 var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1e3;
10564 var minTime = -maxTime;
10565 var millisecondsInWeek = 6048e5;
10566 var millisecondsInDay = 864e5;
10567 var secondsInHour = 3600;
10568 var secondsInDay = secondsInHour * 24;
10569 var secondsInWeek = secondsInDay * 7;
10570 var secondsInYear = secondsInDay * daysInYear;
10571 var secondsInMonth = secondsInYear / 12;
10572 var secondsInQuarter = secondsInMonth * 3;
10573 var constructFromSymbol = Symbol.for("constructDateFrom");
10574
10575 // packages/dataviews/node_modules/date-fns/constructFrom.js
10576 function constructFrom(date, value) {
10577 if (typeof date === "function") return date(value);
10578 if (date && typeof date === "object" && constructFromSymbol in date)
10579 return date[constructFromSymbol](value);
10580 if (date instanceof Date) return new date.constructor(value);
10581 return new Date(value);
10582 }
10583
10584 // packages/dataviews/node_modules/date-fns/toDate.js
10585 function toDate(argument, context) {
10586 return constructFrom(context || argument, argument);
10587 }
10588
10589 // packages/dataviews/node_modules/date-fns/addDays.js
10590 function addDays(date, amount, options) {
10591 const _date = toDate(date, options?.in);
10592 if (isNaN(amount)) return constructFrom(options?.in || date, NaN);
10593 if (!amount) return _date;
10594 _date.setDate(_date.getDate() + amount);
10595 return _date;
10596 }
10597
10598 // packages/dataviews/node_modules/date-fns/addMonths.js
10599 function addMonths(date, amount, options) {
10600 const _date = toDate(date, options?.in);
10601 if (isNaN(amount)) return constructFrom(options?.in || date, NaN);
10602 if (!amount) {
10603 return _date;
10604 }
10605 const dayOfMonth = _date.getDate();
10606 const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime());
10607 endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);
10608 const daysInMonth = endOfDesiredMonth.getDate();
10609 if (dayOfMonth >= daysInMonth) {
10610 return endOfDesiredMonth;
10611 } else {
10612 _date.setFullYear(
10613 endOfDesiredMonth.getFullYear(),
10614 endOfDesiredMonth.getMonth(),
10615 dayOfMonth
10616 );
10617 return _date;
10618 }
10619 }
10620
10621 // packages/dataviews/node_modules/date-fns/_lib/defaultOptions.js
10622 var defaultOptions = {};
10623 function getDefaultOptions() {
10624 return defaultOptions;
10625 }
10626
10627 // packages/dataviews/node_modules/date-fns/startOfWeek.js
10628 function startOfWeek(date, options) {
10629 const defaultOptions2 = getDefaultOptions();
10630 const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0;
10631 const _date = toDate(date, options?.in);
10632 const day = _date.getDay();
10633 const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;
10634 _date.setDate(_date.getDate() - diff);
10635 _date.setHours(0, 0, 0, 0);
10636 return _date;
10637 }
10638
10639 // packages/dataviews/node_modules/date-fns/startOfISOWeek.js
10640 function startOfISOWeek(date, options) {
10641 return startOfWeek(date, { ...options, weekStartsOn: 1 });
10642 }
10643
10644 // packages/dataviews/node_modules/date-fns/getISOWeekYear.js
10645 function getISOWeekYear(date, options) {
10646 const _date = toDate(date, options?.in);
10647 const year = _date.getFullYear();
10648 const fourthOfJanuaryOfNextYear = constructFrom(_date, 0);
10649 fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);
10650 fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);
10651 const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);
10652 const fourthOfJanuaryOfThisYear = constructFrom(_date, 0);
10653 fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);
10654 fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);
10655 const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);
10656 if (_date.getTime() >= startOfNextYear.getTime()) {
10657 return year + 1;
10658 } else if (_date.getTime() >= startOfThisYear.getTime()) {
10659 return year;
10660 } else {
10661 return year - 1;
10662 }
10663 }
10664
10665 // packages/dataviews/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js
10666 function getTimezoneOffsetInMilliseconds(date) {
10667 const _date = toDate(date);
10668 const utcDate = new Date(
10669 Date.UTC(
10670 _date.getFullYear(),
10671 _date.getMonth(),
10672 _date.getDate(),
10673 _date.getHours(),
10674 _date.getMinutes(),
10675 _date.getSeconds(),
10676 _date.getMilliseconds()
10677 )
10678 );
10679 utcDate.setUTCFullYear(_date.getFullYear());
10680 return +date - +utcDate;
10681 }
10682
10683 // packages/dataviews/node_modules/date-fns/_lib/normalizeDates.js
10684 function normalizeDates(context, ...dates) {
10685 const normalize = constructFrom.bind(
10686 null,
10687 context || dates.find((date) => typeof date === "object")
10688 );
10689 return dates.map(normalize);
10690 }
10691
10692 // packages/dataviews/node_modules/date-fns/startOfDay.js
10693 function startOfDay(date, options) {
10694 const _date = toDate(date, options?.in);
10695 _date.setHours(0, 0, 0, 0);
10696 return _date;
10697 }
10698
10699 // packages/dataviews/node_modules/date-fns/differenceInCalendarDays.js
10700 function differenceInCalendarDays(laterDate, earlierDate, options) {
10701 const [laterDate_, earlierDate_] = normalizeDates(
10702 options?.in,
10703 laterDate,
10704 earlierDate
10705 );
10706 const laterStartOfDay = startOfDay(laterDate_);
10707 const earlierStartOfDay = startOfDay(earlierDate_);
10708 const laterTimestamp = +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay);
10709 const earlierTimestamp = +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay);
10710 return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay);
10711 }
10712
10713 // packages/dataviews/node_modules/date-fns/startOfISOWeekYear.js
10714 function startOfISOWeekYear(date, options) {
10715 const year = getISOWeekYear(date, options);
10716 const fourthOfJanuary = constructFrom(options?.in || date, 0);
10717 fourthOfJanuary.setFullYear(year, 0, 4);
10718 fourthOfJanuary.setHours(0, 0, 0, 0);
10719 return startOfISOWeek(fourthOfJanuary);
10720 }
10721
10722 // packages/dataviews/node_modules/date-fns/addYears.js
10723 function addYears(date, amount, options) {
10724 return addMonths(date, amount * 12, options);
10725 }
10726
10727 // packages/dataviews/node_modules/date-fns/isDate.js
10728 function isDate(value) {
10729 return value instanceof Date || typeof value === "object" && Object.prototype.toString.call(value) === "[object Date]";
10730 }
10731
10732 // packages/dataviews/node_modules/date-fns/isValid.js
10733 function isValid(date) {
10734 return !(!isDate(date) && typeof date !== "number" || isNaN(+toDate(date)));
10735 }
10736
10737 // packages/dataviews/node_modules/date-fns/startOfMonth.js
10738 function startOfMonth(date, options) {
10739 const _date = toDate(date, options?.in);
10740 _date.setDate(1);
10741 _date.setHours(0, 0, 0, 0);
10742 return _date;
10743 }
10744
10745 // packages/dataviews/node_modules/date-fns/startOfYear.js
10746 function startOfYear(date, options) {
10747 const date_ = toDate(date, options?.in);
10748 date_.setFullYear(date_.getFullYear(), 0, 1);
10749 date_.setHours(0, 0, 0, 0);
10750 return date_;
10751 }
10752
10753 // packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatDistance.js
10754 var formatDistanceLocale = {
10755 lessThanXSeconds: {
10756 one: "less than a second",
10757 other: "less than {{count}} seconds"
10758 },
10759 xSeconds: {
10760 one: "1 second",
10761 other: "{{count}} seconds"
10762 },
10763 halfAMinute: "half a minute",
10764 lessThanXMinutes: {
10765 one: "less than a minute",
10766 other: "less than {{count}} minutes"
10767 },
10768 xMinutes: {
10769 one: "1 minute",
10770 other: "{{count}} minutes"
10771 },
10772 aboutXHours: {
10773 one: "about 1 hour",
10774 other: "about {{count}} hours"
10775 },
10776 xHours: {
10777 one: "1 hour",
10778 other: "{{count}} hours"
10779 },
10780 xDays: {
10781 one: "1 day",
10782 other: "{{count}} days"
10783 },
10784 aboutXWeeks: {
10785 one: "about 1 week",
10786 other: "about {{count}} weeks"
10787 },
10788 xWeeks: {
10789 one: "1 week",
10790 other: "{{count}} weeks"
10791 },
10792 aboutXMonths: {
10793 one: "about 1 month",
10794 other: "about {{count}} months"
10795 },
10796 xMonths: {
10797 one: "1 month",
10798 other: "{{count}} months"
10799 },
10800 aboutXYears: {
10801 one: "about 1 year",
10802 other: "about {{count}} years"
10803 },
10804 xYears: {
10805 one: "1 year",
10806 other: "{{count}} years"
10807 },
10808 overXYears: {
10809 one: "over 1 year",
10810 other: "over {{count}} years"
10811 },
10812 almostXYears: {
10813 one: "almost 1 year",
10814 other: "almost {{count}} years"
10815 }
10816 };
10817 var formatDistance = (token, count, options) => {
10818 let result;
10819 const tokenValue = formatDistanceLocale[token];
10820 if (typeof tokenValue === "string") {
10821 result = tokenValue;
10822 } else if (count === 1) {
10823 result = tokenValue.one;
10824 } else {
10825 result = tokenValue.other.replace("{{count}}", count.toString());
10826 }
10827 if (options?.addSuffix) {
10828 if (options.comparison && options.comparison > 0) {
10829 return "in " + result;
10830 } else {
10831 return result + " ago";
10832 }
10833 }
10834 return result;
10835 };
10836
10837 // packages/dataviews/node_modules/date-fns/locale/_lib/buildFormatLongFn.js
10838 function buildFormatLongFn(args) {
10839 return (options = {}) => {
10840 const width = options.width ? String(options.width) : args.defaultWidth;
10841 const format2 = args.formats[width] || args.formats[args.defaultWidth];
10842 return format2;
10843 };
10844 }
10845
10846 // packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatLong.js
10847 var dateFormats = {
10848 full: "EEEE, MMMM do, y",
10849 long: "MMMM do, y",
10850 medium: "MMM d, y",
10851 short: "MM/dd/yyyy"
10852 };
10853 var timeFormats = {
10854 full: "h:mm:ss a zzzz",
10855 long: "h:mm:ss a z",
10856 medium: "h:mm:ss a",
10857 short: "h:mm a"
10858 };
10859 var dateTimeFormats = {
10860 full: "{{date}} 'at' {{time}}",
10861 long: "{{date}} 'at' {{time}}",
10862 medium: "{{date}}, {{time}}",
10863 short: "{{date}}, {{time}}"
10864 };
10865 var formatLong = {
10866 date: buildFormatLongFn({
10867 formats: dateFormats,
10868 defaultWidth: "full"
10869 }),
10870 time: buildFormatLongFn({
10871 formats: timeFormats,
10872 defaultWidth: "full"
10873 }),
10874 dateTime: buildFormatLongFn({
10875 formats: dateTimeFormats,
10876 defaultWidth: "full"
10877 })
10878 };
10879
10880 // packages/dataviews/node_modules/date-fns/locale/en-US/_lib/formatRelative.js
10881 var formatRelativeLocale = {
10882 lastWeek: "'last' eeee 'at' p",
10883 yesterday: "'yesterday at' p",
10884 today: "'today at' p",
10885 tomorrow: "'tomorrow at' p",
10886 nextWeek: "eeee 'at' p",
10887 other: "P"
10888 };
10889 var formatRelative = (token, _date, _baseDate, _options) => formatRelativeLocale[token];
10890
10891 // packages/dataviews/node_modules/date-fns/locale/_lib/buildLocalizeFn.js
10892 function buildLocalizeFn(args) {
10893 return (value, options) => {
10894 const context = options?.context ? String(options.context) : "standalone";
10895 let valuesArray;
10896 if (context === "formatting" && args.formattingValues) {
10897 const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;
10898 const width = options?.width ? String(options.width) : defaultWidth;
10899 valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];
10900 } else {
10901 const defaultWidth = args.defaultWidth;
10902 const width = options?.width ? String(options.width) : args.defaultWidth;
10903 valuesArray = args.values[width] || args.values[defaultWidth];
10904 }
10905 const index = args.argumentCallback ? args.argumentCallback(value) : value;
10906 return valuesArray[index];
10907 };
10908 }
10909
10910 // packages/dataviews/node_modules/date-fns/locale/en-US/_lib/localize.js
10911 var eraValues = {
10912 narrow: ["B", "A"],
10913 abbreviated: ["BC", "AD"],
10914 wide: ["Before Christ", "Anno Domini"]
10915 };
10916 var quarterValues = {
10917 narrow: ["1", "2", "3", "4"],
10918 abbreviated: ["Q1", "Q2", "Q3", "Q4"],
10919 wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"]
10920 };
10921 var monthValues = {
10922 narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"],
10923 abbreviated: [
10924 "Jan",
10925 "Feb",
10926 "Mar",
10927 "Apr",
10928 "May",
10929 "Jun",
10930 "Jul",
10931 "Aug",
10932 "Sep",
10933 "Oct",
10934 "Nov",
10935 "Dec"
10936 ],
10937 wide: [
10938 "January",
10939 "February",
10940 "March",
10941 "April",
10942 "May",
10943 "June",
10944 "July",
10945 "August",
10946 "September",
10947 "October",
10948 "November",
10949 "December"
10950 ]
10951 };
10952 var dayValues = {
10953 narrow: ["S", "M", "T", "W", "T", "F", "S"],
10954 short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
10955 abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
10956 wide: [
10957 "Sunday",
10958 "Monday",
10959 "Tuesday",
10960 "Wednesday",
10961 "Thursday",
10962 "Friday",
10963 "Saturday"
10964 ]
10965 };
10966 var dayPeriodValues = {
10967 narrow: {
10968 am: "a",
10969 pm: "p",
10970 midnight: "mi",
10971 noon: "n",
10972 morning: "morning",
10973 afternoon: "afternoon",
10974 evening: "evening",
10975 night: "night"
10976 },
10977 abbreviated: {
10978 am: "AM",
10979 pm: "PM",
10980 midnight: "midnight",
10981 noon: "noon",
10982 morning: "morning",
10983 afternoon: "afternoon",
10984 evening: "evening",
10985 night: "night"
10986 },
10987 wide: {
10988 am: "a.m.",
10989 pm: "p.m.",
10990 midnight: "midnight",
10991 noon: "noon",
10992 morning: "morning",
10993 afternoon: "afternoon",
10994 evening: "evening",
10995 night: "night"
10996 }
10997 };
10998 var formattingDayPeriodValues = {
10999 narrow: {
11000 am: "a",
11001 pm: "p",
11002 midnight: "mi",
11003 noon: "n",
11004 morning: "in the morning",
11005 afternoon: "in the afternoon",
11006 evening: "in the evening",
11007 night: "at night"
11008 },
11009 abbreviated: {
11010 am: "AM",
11011 pm: "PM",
11012 midnight: "midnight",
11013 noon: "noon",
11014 morning: "in the morning",
11015 afternoon: "in the afternoon",
11016 evening: "in the evening",
11017 night: "at night"
11018 },
11019 wide: {
11020 am: "a.m.",
11021 pm: "p.m.",
11022 midnight: "midnight",
11023 noon: "noon",
11024 morning: "in the morning",
11025 afternoon: "in the afternoon",
11026 evening: "in the evening",
11027 night: "at night"
11028 }
11029 };
11030 var ordinalNumber = (dirtyNumber, _options) => {
11031 const number = Number(dirtyNumber);
11032 const rem100 = number % 100;
11033 if (rem100 > 20 || rem100 < 10) {
11034 switch (rem100 % 10) {
11035 case 1:
11036 return number + "st";
11037 case 2:
11038 return number + "nd";
11039 case 3:
11040 return number + "rd";
11041 }
11042 }
11043 return number + "th";
11044 };
11045 var localize = {
11046 ordinalNumber,
11047 era: buildLocalizeFn({
11048 values: eraValues,
11049 defaultWidth: "wide"
11050 }),
11051 quarter: buildLocalizeFn({
11052 values: quarterValues,
11053 defaultWidth: "wide",
11054 argumentCallback: (quarter) => quarter - 1
11055 }),
11056 month: buildLocalizeFn({
11057 values: monthValues,
11058 defaultWidth: "wide"
11059 }),
11060 day: buildLocalizeFn({
11061 values: dayValues,
11062 defaultWidth: "wide"
11063 }),
11064 dayPeriod: buildLocalizeFn({
11065 values: dayPeriodValues,
11066 defaultWidth: "wide",
11067 formattingValues: formattingDayPeriodValues,
11068 defaultFormattingWidth: "wide"
11069 })
11070 };
11071
11072 // packages/dataviews/node_modules/date-fns/locale/_lib/buildMatchFn.js
11073 function buildMatchFn(args) {
11074 return (string, options = {}) => {
11075 const width = options.width;
11076 const matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];
11077 const matchResult = string.match(matchPattern);
11078 if (!matchResult) {
11079 return null;
11080 }
11081 const matchedString = matchResult[0];
11082 const parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];
11083 const key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString)) : (
11084 // [TODO] -- I challenge you to fix the type
11085 findKey(parsePatterns, (pattern) => pattern.test(matchedString))
11086 );
11087 let value;
11088 value = args.valueCallback ? args.valueCallback(key) : key;
11089 value = options.valueCallback ? (
11090 // [TODO] -- I challenge you to fix the type
11091 options.valueCallback(value)
11092 ) : value;
11093 const rest = string.slice(matchedString.length);
11094 return { value, rest };
11095 };
11096 }
11097 function findKey(object, predicate) {
11098 for (const key in object) {
11099 if (Object.prototype.hasOwnProperty.call(object, key) && predicate(object[key])) {
11100 return key;
11101 }
11102 }
11103 return void 0;
11104 }
11105 function findIndex(array, predicate) {
11106 for (let key = 0; key < array.length; key++) {
11107 if (predicate(array[key])) {
11108 return key;
11109 }
11110 }
11111 return void 0;
11112 }
11113
11114 // packages/dataviews/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js
11115 function buildMatchPatternFn(args) {
11116 return (string, options = {}) => {
11117 const matchResult = string.match(args.matchPattern);
11118 if (!matchResult) return null;
11119 const matchedString = matchResult[0];
11120 const parseResult = string.match(args.parsePattern);
11121 if (!parseResult) return null;
11122 let value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];
11123 value = options.valueCallback ? options.valueCallback(value) : value;
11124 const rest = string.slice(matchedString.length);
11125 return { value, rest };
11126 };
11127 }
11128
11129 // packages/dataviews/node_modules/date-fns/locale/en-US/_lib/match.js
11130 var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i;
11131 var parseOrdinalNumberPattern = /\d+/i;
11132 var matchEraPatterns = {
11133 narrow: /^(b|a)/i,
11134 abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,
11135 wide: /^(before christ|before common era|anno domini|common era)/i
11136 };
11137 var parseEraPatterns = {
11138 any: [/^b/i, /^(a|c)/i]
11139 };
11140 var matchQuarterPatterns = {
11141 narrow: /^[1234]/i,
11142 abbreviated: /^q[1234]/i,
11143 wide: /^[1234](th|st|nd|rd)? quarter/i
11144 };
11145 var parseQuarterPatterns = {
11146 any: [/1/i, /2/i, /3/i, /4/i]
11147 };
11148 var matchMonthPatterns = {
11149 narrow: /^[jfmasond]/i,
11150 abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,
11151 wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i
11152 };
11153 var parseMonthPatterns = {
11154 narrow: [
11155 /^j/i,
11156 /^f/i,
11157 /^m/i,
11158 /^a/i,
11159 /^m/i,
11160 /^j/i,
11161 /^j/i,
11162 /^a/i,
11163 /^s/i,
11164 /^o/i,
11165 /^n/i,
11166 /^d/i
11167 ],
11168 any: [
11169 /^ja/i,
11170 /^f/i,
11171 /^mar/i,
11172 /^ap/i,
11173 /^may/i,
11174 /^jun/i,
11175 /^jul/i,
11176 /^au/i,
11177 /^s/i,
11178 /^o/i,
11179 /^n/i,
11180 /^d/i
11181 ]
11182 };
11183 var matchDayPatterns = {
11184 narrow: /^[smtwf]/i,
11185 short: /^(su|mo|tu|we|th|fr|sa)/i,
11186 abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,
11187 wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i
11188 };
11189 var parseDayPatterns = {
11190 narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],
11191 any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]
11192 };
11193 var matchDayPeriodPatterns = {
11194 narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,
11195 any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i
11196 };
11197 var parseDayPeriodPatterns = {
11198 any: {
11199 am: /^a/i,
11200 pm: /^p/i,
11201 midnight: /^mi/i,
11202 noon: /^no/i,
11203 morning: /morning/i,
11204 afternoon: /afternoon/i,
11205 evening: /evening/i,
11206 night: /night/i
11207 }
11208 };
11209 var match = {
11210 ordinalNumber: buildMatchPatternFn({
11211 matchPattern: matchOrdinalNumberPattern,
11212 parsePattern: parseOrdinalNumberPattern,
11213 valueCallback: (value) => parseInt(value, 10)
11214 }),
11215 era: buildMatchFn({
11216 matchPatterns: matchEraPatterns,
11217 defaultMatchWidth: "wide",
11218 parsePatterns: parseEraPatterns,
11219 defaultParseWidth: "any"
11220 }),
11221 quarter: buildMatchFn({
11222 matchPatterns: matchQuarterPatterns,
11223 defaultMatchWidth: "wide",
11224 parsePatterns: parseQuarterPatterns,
11225 defaultParseWidth: "any",
11226 valueCallback: (index) => index + 1
11227 }),
11228 month: buildMatchFn({
11229 matchPatterns: matchMonthPatterns,
11230 defaultMatchWidth: "wide",
11231 parsePatterns: parseMonthPatterns,
11232 defaultParseWidth: "any"
11233 }),
11234 day: buildMatchFn({
11235 matchPatterns: matchDayPatterns,
11236 defaultMatchWidth: "wide",
11237 parsePatterns: parseDayPatterns,
11238 defaultParseWidth: "any"
11239 }),
11240 dayPeriod: buildMatchFn({
11241 matchPatterns: matchDayPeriodPatterns,
11242 defaultMatchWidth: "any",
11243 parsePatterns: parseDayPeriodPatterns,
11244 defaultParseWidth: "any"
11245 })
11246 };
11247
11248 // packages/dataviews/node_modules/date-fns/locale/en-US.js
11249 var enUS = {
11250 code: "en-US",
11251 formatDistance,
11252 formatLong,
11253 formatRelative,
11254 localize,
11255 match,
11256 options: {
11257 weekStartsOn: 0,
11258 firstWeekContainsDate: 1
11259 }
11260 };
11261
11262 // packages/dataviews/node_modules/date-fns/getDayOfYear.js
11263 function getDayOfYear(date, options) {
11264 const _date = toDate(date, options?.in);
11265 const diff = differenceInCalendarDays(_date, startOfYear(_date));
11266 const dayOfYear = diff + 1;
11267 return dayOfYear;
11268 }
11269
11270 // packages/dataviews/node_modules/date-fns/getISOWeek.js
11271 function getISOWeek(date, options) {
11272 const _date = toDate(date, options?.in);
11273 const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);
11274 return Math.round(diff / millisecondsInWeek) + 1;
11275 }
11276
11277 // packages/dataviews/node_modules/date-fns/getWeekYear.js
11278 function getWeekYear(date, options) {
11279 const _date = toDate(date, options?.in);
11280 const year = _date.getFullYear();
11281 const defaultOptions2 = getDefaultOptions();
11282 const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1;
11283 const firstWeekOfNextYear = constructFrom(options?.in || date, 0);
11284 firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);
11285 firstWeekOfNextYear.setHours(0, 0, 0, 0);
11286 const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);
11287 const firstWeekOfThisYear = constructFrom(options?.in || date, 0);
11288 firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);
11289 firstWeekOfThisYear.setHours(0, 0, 0, 0);
11290 const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);
11291 if (+_date >= +startOfNextYear) {
11292 return year + 1;
11293 } else if (+_date >= +startOfThisYear) {
11294 return year;
11295 } else {
11296 return year - 1;
11297 }
11298 }
11299
11300 // packages/dataviews/node_modules/date-fns/startOfWeekYear.js
11301 function startOfWeekYear(date, options) {
11302 const defaultOptions2 = getDefaultOptions();
11303 const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1;
11304 const year = getWeekYear(date, options);
11305 const firstWeek = constructFrom(options?.in || date, 0);
11306 firstWeek.setFullYear(year, 0, firstWeekContainsDate);
11307 firstWeek.setHours(0, 0, 0, 0);
11308 const _date = startOfWeek(firstWeek, options);
11309 return _date;
11310 }
11311
11312 // packages/dataviews/node_modules/date-fns/getWeek.js
11313 function getWeek(date, options) {
11314 const _date = toDate(date, options?.in);
11315 const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);
11316 return Math.round(diff / millisecondsInWeek) + 1;
11317 }
11318
11319 // packages/dataviews/node_modules/date-fns/_lib/addLeadingZeros.js
11320 function addLeadingZeros(number, targetLength) {
11321 const sign = number < 0 ? "-" : "";
11322 const output = Math.abs(number).toString().padStart(targetLength, "0");
11323 return sign + output;
11324 }
11325
11326 // packages/dataviews/node_modules/date-fns/_lib/format/lightFormatters.js
11327 var lightFormatters = {
11328 // Year
11329 y(date, token) {
11330 const signedYear = date.getFullYear();
11331 const year = signedYear > 0 ? signedYear : 1 - signedYear;
11332 return addLeadingZeros(token === "yy" ? year % 100 : year, token.length);
11333 },
11334 // Month
11335 M(date, token) {
11336 const month = date.getMonth();
11337 return token === "M" ? String(month + 1) : addLeadingZeros(month + 1, 2);
11338 },
11339 // Day of the month
11340 d(date, token) {
11341 return addLeadingZeros(date.getDate(), token.length);
11342 },
11343 // AM or PM
11344 a(date, token) {
11345 const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? "pm" : "am";
11346 switch (token) {
11347 case "a":
11348 case "aa":
11349 return dayPeriodEnumValue.toUpperCase();
11350 case "aaa":
11351 return dayPeriodEnumValue;
11352 case "aaaaa":
11353 return dayPeriodEnumValue[0];
11354 case "aaaa":
11355 default:
11356 return dayPeriodEnumValue === "am" ? "a.m." : "p.m.";
11357 }
11358 },
11359 // Hour [1-12]
11360 h(date, token) {
11361 return addLeadingZeros(date.getHours() % 12 || 12, token.length);
11362 },
11363 // Hour [0-23]
11364 H(date, token) {
11365 return addLeadingZeros(date.getHours(), token.length);
11366 },
11367 // Minute
11368 m(date, token) {
11369 return addLeadingZeros(date.getMinutes(), token.length);
11370 },
11371 // Second
11372 s(date, token) {
11373 return addLeadingZeros(date.getSeconds(), token.length);
11374 },
11375 // Fraction of second
11376 S(date, token) {
11377 const numberOfDigits = token.length;
11378 const milliseconds = date.getMilliseconds();
11379 const fractionalSeconds = Math.trunc(
11380 milliseconds * Math.pow(10, numberOfDigits - 3)
11381 );
11382 return addLeadingZeros(fractionalSeconds, token.length);
11383 }
11384 };
11385
11386 // packages/dataviews/node_modules/date-fns/_lib/format/formatters.js
11387 var dayPeriodEnum = {
11388 am: "am",
11389 pm: "pm",
11390 midnight: "midnight",
11391 noon: "noon",
11392 morning: "morning",
11393 afternoon: "afternoon",
11394 evening: "evening",
11395 night: "night"
11396 };
11397 var formatters = {
11398 // Era
11399 G: function(date, token, localize2) {
11400 const era = date.getFullYear() > 0 ? 1 : 0;
11401 switch (token) {
11402 // AD, BC
11403 case "G":
11404 case "GG":
11405 case "GGG":
11406 return localize2.era(era, { width: "abbreviated" });
11407 // A, B
11408 case "GGGGG":
11409 return localize2.era(era, { width: "narrow" });
11410 // Anno Domini, Before Christ
11411 case "GGGG":
11412 default:
11413 return localize2.era(era, { width: "wide" });
11414 }
11415 },
11416 // Year
11417 y: function(date, token, localize2) {
11418 if (token === "yo") {
11419 const signedYear = date.getFullYear();
11420 const year = signedYear > 0 ? signedYear : 1 - signedYear;
11421 return localize2.ordinalNumber(year, { unit: "year" });
11422 }
11423 return lightFormatters.y(date, token);
11424 },
11425 // Local week-numbering year
11426 Y: function(date, token, localize2, options) {
11427 const signedWeekYear = getWeekYear(date, options);
11428 const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;
11429 if (token === "YY") {
11430 const twoDigitYear = weekYear % 100;
11431 return addLeadingZeros(twoDigitYear, 2);
11432 }
11433 if (token === "Yo") {
11434 return localize2.ordinalNumber(weekYear, { unit: "year" });
11435 }
11436 return addLeadingZeros(weekYear, token.length);
11437 },
11438 // ISO week-numbering year
11439 R: function(date, token) {
11440 const isoWeekYear = getISOWeekYear(date);
11441 return addLeadingZeros(isoWeekYear, token.length);
11442 },
11443 // Extended year. This is a single number designating the year of this calendar system.
11444 // The main difference between `y` and `u` localizers are B.C. years:
11445 // | Year | `y` | `u` |
11446 // |------|-----|-----|
11447 // | AC 1 | 1 | 1 |
11448 // | BC 1 | 1 | 0 |
11449 // | BC 2 | 2 | -1 |
11450 // Also `yy` always returns the last two digits of a year,
11451 // while `uu` pads single digit years to 2 characters and returns other years unchanged.
11452 u: function(date, token) {
11453 const year = date.getFullYear();
11454 return addLeadingZeros(year, token.length);
11455 },
11456 // Quarter
11457 Q: function(date, token, localize2) {
11458 const quarter = Math.ceil((date.getMonth() + 1) / 3);
11459 switch (token) {
11460 // 1, 2, 3, 4
11461 case "Q":
11462 return String(quarter);
11463 // 01, 02, 03, 04
11464 case "QQ":
11465 return addLeadingZeros(quarter, 2);
11466 // 1st, 2nd, 3rd, 4th
11467 case "Qo":
11468 return localize2.ordinalNumber(quarter, { unit: "quarter" });
11469 // Q1, Q2, Q3, Q4
11470 case "QQQ":
11471 return localize2.quarter(quarter, {
11472 width: "abbreviated",
11473 context: "formatting"
11474 });
11475 // 1, 2, 3, 4 (narrow quarter; could be not numerical)
11476 case "QQQQQ":
11477 return localize2.quarter(quarter, {
11478 width: "narrow",
11479 context: "formatting"
11480 });
11481 // 1st quarter, 2nd quarter, ...
11482 case "QQQQ":
11483 default:
11484 return localize2.quarter(quarter, {
11485 width: "wide",
11486 context: "formatting"
11487 });
11488 }
11489 },
11490 // Stand-alone quarter
11491 q: function(date, token, localize2) {
11492 const quarter = Math.ceil((date.getMonth() + 1) / 3);
11493 switch (token) {
11494 // 1, 2, 3, 4
11495 case "q":
11496 return String(quarter);
11497 // 01, 02, 03, 04
11498 case "qq":
11499 return addLeadingZeros(quarter, 2);
11500 // 1st, 2nd, 3rd, 4th
11501 case "qo":
11502 return localize2.ordinalNumber(quarter, { unit: "quarter" });
11503 // Q1, Q2, Q3, Q4
11504 case "qqq":
11505 return localize2.quarter(quarter, {
11506 width: "abbreviated",
11507 context: "standalone"
11508 });
11509 // 1, 2, 3, 4 (narrow quarter; could be not numerical)
11510 case "qqqqq":
11511 return localize2.quarter(quarter, {
11512 width: "narrow",
11513 context: "standalone"
11514 });
11515 // 1st quarter, 2nd quarter, ...
11516 case "qqqq":
11517 default:
11518 return localize2.quarter(quarter, {
11519 width: "wide",
11520 context: "standalone"
11521 });
11522 }
11523 },
11524 // Month
11525 M: function(date, token, localize2) {
11526 const month = date.getMonth();
11527 switch (token) {
11528 case "M":
11529 case "MM":
11530 return lightFormatters.M(date, token);
11531 // 1st, 2nd, ..., 12th
11532 case "Mo":
11533 return localize2.ordinalNumber(month + 1, { unit: "month" });
11534 // Jan, Feb, ..., Dec
11535 case "MMM":
11536 return localize2.month(month, {
11537 width: "abbreviated",
11538 context: "formatting"
11539 });
11540 // J, F, ..., D
11541 case "MMMMM":
11542 return localize2.month(month, {
11543 width: "narrow",
11544 context: "formatting"
11545 });
11546 // January, February, ..., December
11547 case "MMMM":
11548 default:
11549 return localize2.month(month, { width: "wide", context: "formatting" });
11550 }
11551 },
11552 // Stand-alone month
11553 L: function(date, token, localize2) {
11554 const month = date.getMonth();
11555 switch (token) {
11556 // 1, 2, ..., 12
11557 case "L":
11558 return String(month + 1);
11559 // 01, 02, ..., 12
11560 case "LL":
11561 return addLeadingZeros(month + 1, 2);
11562 // 1st, 2nd, ..., 12th
11563 case "Lo":
11564 return localize2.ordinalNumber(month + 1, { unit: "month" });
11565 // Jan, Feb, ..., Dec
11566 case "LLL":
11567 return localize2.month(month, {
11568 width: "abbreviated",
11569 context: "standalone"
11570 });
11571 // J, F, ..., D
11572 case "LLLLL":
11573 return localize2.month(month, {
11574 width: "narrow",
11575 context: "standalone"
11576 });
11577 // January, February, ..., December
11578 case "LLLL":
11579 default:
11580 return localize2.month(month, { width: "wide", context: "standalone" });
11581 }
11582 },
11583 // Local week of year
11584 w: function(date, token, localize2, options) {
11585 const week = getWeek(date, options);
11586 if (token === "wo") {
11587 return localize2.ordinalNumber(week, { unit: "week" });
11588 }
11589 return addLeadingZeros(week, token.length);
11590 },
11591 // ISO week of year
11592 I: function(date, token, localize2) {
11593 const isoWeek = getISOWeek(date);
11594 if (token === "Io") {
11595 return localize2.ordinalNumber(isoWeek, { unit: "week" });
11596 }
11597 return addLeadingZeros(isoWeek, token.length);
11598 },
11599 // Day of the month
11600 d: function(date, token, localize2) {
11601 if (token === "do") {
11602 return localize2.ordinalNumber(date.getDate(), { unit: "date" });
11603 }
11604 return lightFormatters.d(date, token);
11605 },
11606 // Day of year
11607 D: function(date, token, localize2) {
11608 const dayOfYear = getDayOfYear(date);
11609 if (token === "Do") {
11610 return localize2.ordinalNumber(dayOfYear, { unit: "dayOfYear" });
11611 }
11612 return addLeadingZeros(dayOfYear, token.length);
11613 },
11614 // Day of week
11615 E: function(date, token, localize2) {
11616 const dayOfWeek = date.getDay();
11617 switch (token) {
11618 // Tue
11619 case "E":
11620 case "EE":
11621 case "EEE":
11622 return localize2.day(dayOfWeek, {
11623 width: "abbreviated",
11624 context: "formatting"
11625 });
11626 // T
11627 case "EEEEE":
11628 return localize2.day(dayOfWeek, {
11629 width: "narrow",
11630 context: "formatting"
11631 });
11632 // Tu
11633 case "EEEEEE":
11634 return localize2.day(dayOfWeek, {
11635 width: "short",
11636 context: "formatting"
11637 });
11638 // Tuesday
11639 case "EEEE":
11640 default:
11641 return localize2.day(dayOfWeek, {
11642 width: "wide",
11643 context: "formatting"
11644 });
11645 }
11646 },
11647 // Local day of week
11648 e: function(date, token, localize2, options) {
11649 const dayOfWeek = date.getDay();
11650 const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;
11651 switch (token) {
11652 // Numerical value (Nth day of week with current locale or weekStartsOn)
11653 case "e":
11654 return String(localDayOfWeek);
11655 // Padded numerical value
11656 case "ee":
11657 return addLeadingZeros(localDayOfWeek, 2);
11658 // 1st, 2nd, ..., 7th
11659 case "eo":
11660 return localize2.ordinalNumber(localDayOfWeek, { unit: "day" });
11661 case "eee":
11662 return localize2.day(dayOfWeek, {
11663 width: "abbreviated",
11664 context: "formatting"
11665 });
11666 // T
11667 case "eeeee":
11668 return localize2.day(dayOfWeek, {
11669 width: "narrow",
11670 context: "formatting"
11671 });
11672 // Tu
11673 case "eeeeee":
11674 return localize2.day(dayOfWeek, {
11675 width: "short",
11676 context: "formatting"
11677 });
11678 // Tuesday
11679 case "eeee":
11680 default:
11681 return localize2.day(dayOfWeek, {
11682 width: "wide",
11683 context: "formatting"
11684 });
11685 }
11686 },
11687 // Stand-alone local day of week
11688 c: function(date, token, localize2, options) {
11689 const dayOfWeek = date.getDay();
11690 const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;
11691 switch (token) {
11692 // Numerical value (same as in `e`)
11693 case "c":
11694 return String(localDayOfWeek);
11695 // Padded numerical value
11696 case "cc":
11697 return addLeadingZeros(localDayOfWeek, token.length);
11698 // 1st, 2nd, ..., 7th
11699 case "co":
11700 return localize2.ordinalNumber(localDayOfWeek, { unit: "day" });
11701 case "ccc":
11702 return localize2.day(dayOfWeek, {
11703 width: "abbreviated",
11704 context: "standalone"
11705 });
11706 // T
11707 case "ccccc":
11708 return localize2.day(dayOfWeek, {
11709 width: "narrow",
11710 context: "standalone"
11711 });
11712 // Tu
11713 case "cccccc":
11714 return localize2.day(dayOfWeek, {
11715 width: "short",
11716 context: "standalone"
11717 });
11718 // Tuesday
11719 case "cccc":
11720 default:
11721 return localize2.day(dayOfWeek, {
11722 width: "wide",
11723 context: "standalone"
11724 });
11725 }
11726 },
11727 // ISO day of week
11728 i: function(date, token, localize2) {
11729 const dayOfWeek = date.getDay();
11730 const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;
11731 switch (token) {
11732 // 2
11733 case "i":
11734 return String(isoDayOfWeek);
11735 // 02
11736 case "ii":
11737 return addLeadingZeros(isoDayOfWeek, token.length);
11738 // 2nd
11739 case "io":
11740 return localize2.ordinalNumber(isoDayOfWeek, { unit: "day" });
11741 // Tue
11742 case "iii":
11743 return localize2.day(dayOfWeek, {
11744 width: "abbreviated",
11745 context: "formatting"
11746 });
11747 // T
11748 case "iiiii":
11749 return localize2.day(dayOfWeek, {
11750 width: "narrow",
11751 context: "formatting"
11752 });
11753 // Tu
11754 case "iiiiii":
11755 return localize2.day(dayOfWeek, {
11756 width: "short",
11757 context: "formatting"
11758 });
11759 // Tuesday
11760 case "iiii":
11761 default:
11762 return localize2.day(dayOfWeek, {
11763 width: "wide",
11764 context: "formatting"
11765 });
11766 }
11767 },
11768 // AM or PM
11769 a: function(date, token, localize2) {
11770 const hours = date.getHours();
11771 const dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am";
11772 switch (token) {
11773 case "a":
11774 case "aa":
11775 return localize2.dayPeriod(dayPeriodEnumValue, {
11776 width: "abbreviated",
11777 context: "formatting"
11778 });
11779 case "aaa":
11780 return localize2.dayPeriod(dayPeriodEnumValue, {
11781 width: "abbreviated",
11782 context: "formatting"
11783 }).toLowerCase();
11784 case "aaaaa":
11785 return localize2.dayPeriod(dayPeriodEnumValue, {
11786 width: "narrow",
11787 context: "formatting"
11788 });
11789 case "aaaa":
11790 default:
11791 return localize2.dayPeriod(dayPeriodEnumValue, {
11792 width: "wide",
11793 context: "formatting"
11794 });
11795 }
11796 },
11797 // AM, PM, midnight, noon
11798 b: function(date, token, localize2) {
11799 const hours = date.getHours();
11800 let dayPeriodEnumValue;
11801 if (hours === 12) {
11802 dayPeriodEnumValue = dayPeriodEnum.noon;
11803 } else if (hours === 0) {
11804 dayPeriodEnumValue = dayPeriodEnum.midnight;
11805 } else {
11806 dayPeriodEnumValue = hours / 12 >= 1 ? "pm" : "am";
11807 }
11808 switch (token) {
11809 case "b":
11810 case "bb":
11811 return localize2.dayPeriod(dayPeriodEnumValue, {
11812 width: "abbreviated",
11813 context: "formatting"
11814 });
11815 case "bbb":
11816 return localize2.dayPeriod(dayPeriodEnumValue, {
11817 width: "abbreviated",
11818 context: "formatting"
11819 }).toLowerCase();
11820 case "bbbbb":
11821 return localize2.dayPeriod(dayPeriodEnumValue, {
11822 width: "narrow",
11823 context: "formatting"
11824 });
11825 case "bbbb":
11826 default:
11827 return localize2.dayPeriod(dayPeriodEnumValue, {
11828 width: "wide",
11829 context: "formatting"
11830 });
11831 }
11832 },
11833 // in the morning, in the afternoon, in the evening, at night
11834 B: function(date, token, localize2) {
11835 const hours = date.getHours();
11836 let dayPeriodEnumValue;
11837 if (hours >= 17) {
11838 dayPeriodEnumValue = dayPeriodEnum.evening;
11839 } else if (hours >= 12) {
11840 dayPeriodEnumValue = dayPeriodEnum.afternoon;
11841 } else if (hours >= 4) {
11842 dayPeriodEnumValue = dayPeriodEnum.morning;
11843 } else {
11844 dayPeriodEnumValue = dayPeriodEnum.night;
11845 }
11846 switch (token) {
11847 case "B":
11848 case "BB":
11849 case "BBB":
11850 return localize2.dayPeriod(dayPeriodEnumValue, {
11851 width: "abbreviated",
11852 context: "formatting"
11853 });
11854 case "BBBBB":
11855 return localize2.dayPeriod(dayPeriodEnumValue, {
11856 width: "narrow",
11857 context: "formatting"
11858 });
11859 case "BBBB":
11860 default:
11861 return localize2.dayPeriod(dayPeriodEnumValue, {
11862 width: "wide",
11863 context: "formatting"
11864 });
11865 }
11866 },
11867 // Hour [1-12]
11868 h: function(date, token, localize2) {
11869 if (token === "ho") {
11870 let hours = date.getHours() % 12;
11871 if (hours === 0) hours = 12;
11872 return localize2.ordinalNumber(hours, { unit: "hour" });
11873 }
11874 return lightFormatters.h(date, token);
11875 },
11876 // Hour [0-23]
11877 H: function(date, token, localize2) {
11878 if (token === "Ho") {
11879 return localize2.ordinalNumber(date.getHours(), { unit: "hour" });
11880 }
11881 return lightFormatters.H(date, token);
11882 },
11883 // Hour [0-11]
11884 K: function(date, token, localize2) {
11885 const hours = date.getHours() % 12;
11886 if (token === "Ko") {
11887 return localize2.ordinalNumber(hours, { unit: "hour" });
11888 }
11889 return addLeadingZeros(hours, token.length);
11890 },
11891 // Hour [1-24]
11892 k: function(date, token, localize2) {
11893 let hours = date.getHours();
11894 if (hours === 0) hours = 24;
11895 if (token === "ko") {
11896 return localize2.ordinalNumber(hours, { unit: "hour" });
11897 }
11898 return addLeadingZeros(hours, token.length);
11899 },
11900 // Minute
11901 m: function(date, token, localize2) {
11902 if (token === "mo") {
11903 return localize2.ordinalNumber(date.getMinutes(), { unit: "minute" });
11904 }
11905 return lightFormatters.m(date, token);
11906 },
11907 // Second
11908 s: function(date, token, localize2) {
11909 if (token === "so") {
11910 return localize2.ordinalNumber(date.getSeconds(), { unit: "second" });
11911 }
11912 return lightFormatters.s(date, token);
11913 },
11914 // Fraction of second
11915 S: function(date, token) {
11916 return lightFormatters.S(date, token);
11917 },
11918 // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)
11919 X: function(date, token, _localize) {
11920 const timezoneOffset = date.getTimezoneOffset();
11921 if (timezoneOffset === 0) {
11922 return "Z";
11923 }
11924 switch (token) {
11925 // Hours and optional minutes
11926 case "X":
11927 return formatTimezoneWithOptionalMinutes(timezoneOffset);
11928 // Hours, minutes and optional seconds without `:` delimiter
11929 // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
11930 // so this token always has the same output as `XX`
11931 case "XXXX":
11932 case "XX":
11933 return formatTimezone(timezoneOffset);
11934 // Hours, minutes and optional seconds with `:` delimiter
11935 // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
11936 // so this token always has the same output as `XXX`
11937 case "XXXXX":
11938 case "XXX":
11939 // Hours and minutes with `:` delimiter
11940 default:
11941 return formatTimezone(timezoneOffset, ":");
11942 }
11943 },
11944 // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)
11945 x: function(date, token, _localize) {
11946 const timezoneOffset = date.getTimezoneOffset();
11947 switch (token) {
11948 // Hours and optional minutes
11949 case "x":
11950 return formatTimezoneWithOptionalMinutes(timezoneOffset);
11951 // Hours, minutes and optional seconds without `:` delimiter
11952 // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
11953 // so this token always has the same output as `xx`
11954 case "xxxx":
11955 case "xx":
11956 return formatTimezone(timezoneOffset);
11957 // Hours, minutes and optional seconds with `:` delimiter
11958 // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
11959 // so this token always has the same output as `xxx`
11960 case "xxxxx":
11961 case "xxx":
11962 // Hours and minutes with `:` delimiter
11963 default:
11964 return formatTimezone(timezoneOffset, ":");
11965 }
11966 },
11967 // Timezone (GMT)
11968 O: function(date, token, _localize) {
11969 const timezoneOffset = date.getTimezoneOffset();
11970 switch (token) {
11971 // Short
11972 case "O":
11973 case "OO":
11974 case "OOO":
11975 return "GMT" + formatTimezoneShort(timezoneOffset, ":");
11976 // Long
11977 case "OOOO":
11978 default:
11979 return "GMT" + formatTimezone(timezoneOffset, ":");
11980 }
11981 },
11982 // Timezone (specific non-location)
11983 z: function(date, token, _localize) {
11984 const timezoneOffset = date.getTimezoneOffset();
11985 switch (token) {
11986 // Short
11987 case "z":
11988 case "zz":
11989 case "zzz":
11990 return "GMT" + formatTimezoneShort(timezoneOffset, ":");
11991 // Long
11992 case "zzzz":
11993 default:
11994 return "GMT" + formatTimezone(timezoneOffset, ":");
11995 }
11996 },
11997 // Seconds timestamp
11998 t: function(date, token, _localize) {
11999 const timestamp = Math.trunc(+date / 1e3);
12000 return addLeadingZeros(timestamp, token.length);
12001 },
12002 // Milliseconds timestamp
12003 T: function(date, token, _localize) {
12004 return addLeadingZeros(+date, token.length);
12005 }
12006 };
12007 function formatTimezoneShort(offset, delimiter = "") {
12008 const sign = offset > 0 ? "-" : "+";
12009 const absOffset = Math.abs(offset);
12010 const hours = Math.trunc(absOffset / 60);
12011 const minutes = absOffset % 60;
12012 if (minutes === 0) {
12013 return sign + String(hours);
12014 }
12015 return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);
12016 }
12017 function formatTimezoneWithOptionalMinutes(offset, delimiter) {
12018 if (offset % 60 === 0) {
12019 const sign = offset > 0 ? "-" : "+";
12020 return sign + addLeadingZeros(Math.abs(offset) / 60, 2);
12021 }
12022 return formatTimezone(offset, delimiter);
12023 }
12024 function formatTimezone(offset, delimiter = "") {
12025 const sign = offset > 0 ? "-" : "+";
12026 const absOffset = Math.abs(offset);
12027 const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);
12028 const minutes = addLeadingZeros(absOffset % 60, 2);
12029 return sign + hours + delimiter + minutes;
12030 }
12031
12032 // packages/dataviews/node_modules/date-fns/_lib/format/longFormatters.js
12033 var dateLongFormatter = (pattern, formatLong2) => {
12034 switch (pattern) {
12035 case "P":
12036 return formatLong2.date({ width: "short" });
12037 case "PP":
12038 return formatLong2.date({ width: "medium" });
12039 case "PPP":
12040 return formatLong2.date({ width: "long" });
12041 case "PPPP":
12042 default:
12043 return formatLong2.date({ width: "full" });
12044 }
12045 };
12046 var timeLongFormatter = (pattern, formatLong2) => {
12047 switch (pattern) {
12048 case "p":
12049 return formatLong2.time({ width: "short" });
12050 case "pp":
12051 return formatLong2.time({ width: "medium" });
12052 case "ppp":
12053 return formatLong2.time({ width: "long" });
12054 case "pppp":
12055 default:
12056 return formatLong2.time({ width: "full" });
12057 }
12058 };
12059 var dateTimeLongFormatter = (pattern, formatLong2) => {
12060 const matchResult = pattern.match(/(P+)(p+)?/) || [];
12061 const datePattern = matchResult[1];
12062 const timePattern = matchResult[2];
12063 if (!timePattern) {
12064 return dateLongFormatter(pattern, formatLong2);
12065 }
12066 let dateTimeFormat;
12067 switch (datePattern) {
12068 case "P":
12069 dateTimeFormat = formatLong2.dateTime({ width: "short" });
12070 break;
12071 case "PP":
12072 dateTimeFormat = formatLong2.dateTime({ width: "medium" });
12073 break;
12074 case "PPP":
12075 dateTimeFormat = formatLong2.dateTime({ width: "long" });
12076 break;
12077 case "PPPP":
12078 default:
12079 dateTimeFormat = formatLong2.dateTime({ width: "full" });
12080 break;
12081 }
12082 return dateTimeFormat.replace("{{date}}", dateLongFormatter(datePattern, formatLong2)).replace("{{time}}", timeLongFormatter(timePattern, formatLong2));
12083 };
12084 var longFormatters = {
12085 p: timeLongFormatter,
12086 P: dateTimeLongFormatter
12087 };
12088
12089 // packages/dataviews/node_modules/date-fns/_lib/protectedTokens.js
12090 var dayOfYearTokenRE = /^D+$/;
12091 var weekYearTokenRE = /^Y+$/;
12092 var throwTokens = ["D", "DD", "YY", "YYYY"];
12093 function isProtectedDayOfYearToken(token) {
12094 return dayOfYearTokenRE.test(token);
12095 }
12096 function isProtectedWeekYearToken(token) {
12097 return weekYearTokenRE.test(token);
12098 }
12099 function warnOrThrowProtectedError(token, format2, input) {
12100 const _message = message(token, format2, input);
12101 console.warn(_message);
12102 if (throwTokens.includes(token)) throw new RangeError(_message);
12103 }
12104 function message(token, format2, input) {
12105 const subject = token[0] === "Y" ? "years" : "days of the month";
12106 return `Use \`${token.toLowerCase()}\` instead of \`${token}\` (in \`${format2}\`) for formatting ${subject} to the input \`${input}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;
12107 }
12108
12109 // packages/dataviews/node_modules/date-fns/format.js
12110 var formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g;
12111 var longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;
12112 var escapedStringRegExp = /^'([^]*?)'?$/;
12113 var doubleQuoteRegExp = /''/g;
12114 var unescapedLatinCharacterRegExp = /[a-zA-Z]/;
12115 function format(date, formatStr, options) {
12116 const defaultOptions2 = getDefaultOptions();
12117 const locale = options?.locale ?? defaultOptions2.locale ?? enUS;
12118 const firstWeekContainsDate = options?.firstWeekContainsDate ?? options?.locale?.options?.firstWeekContainsDate ?? defaultOptions2.firstWeekContainsDate ?? defaultOptions2.locale?.options?.firstWeekContainsDate ?? 1;
12119 const weekStartsOn = options?.weekStartsOn ?? options?.locale?.options?.weekStartsOn ?? defaultOptions2.weekStartsOn ?? defaultOptions2.locale?.options?.weekStartsOn ?? 0;
12120 const originalDate = toDate(date, options?.in);
12121 if (!isValid(originalDate)) {
12122 throw new RangeError("Invalid time value");
12123 }
12124 let parts = formatStr.match(longFormattingTokensRegExp).map((substring) => {
12125 const firstCharacter = substring[0];
12126 if (firstCharacter === "p" || firstCharacter === "P") {
12127 const longFormatter = longFormatters[firstCharacter];
12128 return longFormatter(substring, locale.formatLong);
12129 }
12130 return substring;
12131 }).join("").match(formattingTokensRegExp).map((substring) => {
12132 if (substring === "''") {
12133 return { isToken: false, value: "'" };
12134 }
12135 const firstCharacter = substring[0];
12136 if (firstCharacter === "'") {
12137 return { isToken: false, value: cleanEscapedString(substring) };
12138 }
12139 if (formatters[firstCharacter]) {
12140 return { isToken: true, value: substring };
12141 }
12142 if (firstCharacter.match(unescapedLatinCharacterRegExp)) {
12143 throw new RangeError(
12144 "Format string contains an unescaped latin alphabet character `" + firstCharacter + "`"
12145 );
12146 }
12147 return { isToken: false, value: substring };
12148 });
12149 if (locale.localize.preprocessor) {
12150 parts = locale.localize.preprocessor(originalDate, parts);
12151 }
12152 const formatterOptions = {
12153 firstWeekContainsDate,
12154 weekStartsOn,
12155 locale
12156 };
12157 return parts.map((part) => {
12158 if (!part.isToken) return part.value;
12159 const token = part.value;
12160 if (!options?.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token) || !options?.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) {
12161 warnOrThrowProtectedError(token, formatStr, String(date));
12162 }
12163 const formatter = formatters[token[0]];
12164 return formatter(originalDate, token, locale.localize, formatterOptions);
12165 }).join("");
12166 }
12167 function cleanEscapedString(input) {
12168 const matched = input.match(escapedStringRegExp);
12169 if (!matched) {
12170 return input;
12171 }
12172 return matched[1].replace(doubleQuoteRegExp, "'");
12173 }
12174
12175 // packages/dataviews/node_modules/date-fns/subDays.js
12176 function subDays(date, amount, options) {
12177 return addDays(date, -amount, options);
12178 }
12179
12180 // packages/dataviews/node_modules/date-fns/subMonths.js
12181 function subMonths(date, amount, options) {
12182 return addMonths(date, -amount, options);
12183 }
12184
12185 // packages/dataviews/node_modules/date-fns/subYears.js
12186 function subYears(date, amount, options) {
12187 return addYears(date, -amount, options);
12188 }
12189
12190 // packages/dataviews/build-module/field-types/utils/parse-date-time.js
12191 var import_date = __toESM(require_date());
12192 function parseDateTime(dateTimeString) {
12193 if (!dateTimeString) {
12194 return null;
12195 }
12196 const parsed = (0, import_date.getDate)(dateTimeString);
12197 return parsed && isValid(parsed) ? parsed : null;
12198 }
12199
12200 // packages/dataviews/build-module/field-types/number.js
12201 var import_i18n29 = __toESM(require_i18n());
12202
12203 // packages/dataviews/build-module/field-types/utils/render-from-elements.js
12204 function RenderFromElements({
12205 item,
12206 field
12207 }) {
12208 const { elements, isLoading } = useElements({
12209 elements: field.elements,
12210 getElements: field.getElements
12211 });
12212 const value = field.getValue({ item });
12213 if (isLoading) {
12214 return value;
12215 }
12216 if (elements.length === 0) {
12217 return value;
12218 }
12219 return elements?.find((element) => element.value === value)?.label || field.getValue({ item });
12220 }
12221
12222 // packages/dataviews/build-module/field-types/utils/sort-number.js
12223 var sort_number_default = (a2, b2, direction) => {
12224 return direction === "asc" ? a2 - b2 : b2 - a2;
12225 };
12226
12227 // packages/dataviews/build-module/field-types/utils/is-valid-required.js
12228 function isValidRequired(item, field) {
12229 const value = field.getValue({ item });
12230 return ![void 0, "", null].includes(value);
12231 }
12232
12233 // packages/dataviews/build-module/field-types/utils/is-valid-min.js
12234 function isValidMin(item, field) {
12235 if (typeof field.isValid.min?.constraint !== "number") {
12236 return false;
12237 }
12238 const value = field.getValue({ item });
12239 if ([void 0, "", null].includes(value)) {
12240 return true;
12241 }
12242 return Number(value) >= field.isValid.min.constraint;
12243 }
12244
12245 // packages/dataviews/build-module/field-types/utils/is-valid-max.js
12246 function isValidMax(item, field) {
12247 if (typeof field.isValid.max?.constraint !== "number") {
12248 return false;
12249 }
12250 const value = field.getValue({ item });
12251 if ([void 0, "", null].includes(value)) {
12252 return true;
12253 }
12254 return Number(value) <= field.isValid.max.constraint;
12255 }
12256
12257 // packages/dataviews/build-module/field-types/utils/is-valid-elements.js
12258 function isValidElements(item, field) {
12259 const elements = field.elements ?? [];
12260 const validValues = elements.map((el) => el.value);
12261 if (validValues.length === 0) {
12262 return true;
12263 }
12264 const value = field.getValue({ item });
12265 return [].concat(value).every((v2) => validValues.includes(v2));
12266 }
12267
12268 // packages/dataviews/build-module/field-types/number.js
12269 var import_jsx_runtime62 = __toESM(require_jsx_runtime());
12270 function getFormat(field) {
12271 const fieldFormat = field.format;
12272 return {
12273 separatorThousand: fieldFormat?.separatorThousand !== void 0 && typeof fieldFormat.separatorThousand === "string" ? fieldFormat.separatorThousand : ",",
12274 separatorDecimal: fieldFormat?.separatorDecimal !== void 0 && typeof fieldFormat.separatorDecimal === "string" ? fieldFormat.separatorDecimal : ".",
12275 decimals: fieldFormat?.decimals !== void 0 && typeof fieldFormat.decimals === "number" && fieldFormat.decimals >= 0 && fieldFormat.decimals <= 100 && Number.isInteger(fieldFormat.decimals) ? fieldFormat.decimals : 2
12276 };
12277 }
12278 function formatNumber(value, format2) {
12279 if (!Number.isFinite(value)) {
12280 return String(value);
12281 }
12282 const { separatorThousand, separatorDecimal, decimals } = format2;
12283 const fixedValue = value.toFixed(decimals);
12284 const [integerPart, decimalPart] = fixedValue.split(".");
12285 const formattedInteger = separatorThousand ? integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, separatorThousand) : integerPart;
12286 return decimals === 0 ? formattedInteger : formattedInteger + separatorDecimal + decimalPart;
12287 }
12288 function isEmpty2(value) {
12289 return value === "" || value === void 0 || value === null;
12290 }
12291 function render({ item, field }) {
12292 if (field.hasElements) {
12293 return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(RenderFromElements, { item, field });
12294 }
12295 const value = field.getValue({ item });
12296 if ([null, void 0].includes(value)) {
12297 return "";
12298 }
12299 let format2;
12300 if (field.type !== "number") {
12301 format2 = getFormat(field);
12302 } else {
12303 format2 = field.format;
12304 }
12305 return formatNumber(Number(value), format2);
12306 }
12307 function isValidCustom(item, field) {
12308 const value = field.getValue({ item });
12309 if (!isEmpty2(value) && !Number.isFinite(value)) {
12310 return (0, import_i18n29.__)("Value must be a number.");
12311 }
12312 return null;
12313 }
12314 var number_default = {
12315 type: "number",
12316 render,
12317 Edit: "number",
12318 sort: sort_number_default,
12319 enableSorting: true,
12320 enableGlobalSearch: false,
12321 defaultOperators: [
12322 OPERATOR_IS,
12323 OPERATOR_IS_NOT,
12324 OPERATOR_LESS_THAN,
12325 OPERATOR_GREATER_THAN,
12326 OPERATOR_LESS_THAN_OR_EQUAL,
12327 OPERATOR_GREATER_THAN_OR_EQUAL,
12328 OPERATOR_BETWEEN
12329 ],
12330 validOperators: [
12331 // Single-selection
12332 OPERATOR_IS,
12333 OPERATOR_IS_NOT,
12334 OPERATOR_LESS_THAN,
12335 OPERATOR_GREATER_THAN,
12336 OPERATOR_LESS_THAN_OR_EQUAL,
12337 OPERATOR_GREATER_THAN_OR_EQUAL,
12338 OPERATOR_BETWEEN,
12339 // Multiple-selection
12340 OPERATOR_IS_ANY,
12341 OPERATOR_IS_NONE,
12342 OPERATOR_IS_ALL,
12343 OPERATOR_IS_NOT_ALL
12344 ],
12345 getFormat,
12346 validate: {
12347 required: isValidRequired,
12348 min: isValidMin,
12349 max: isValidMax,
12350 elements: isValidElements,
12351 custom: isValidCustom
12352 }
12353 };
12354
12355 // packages/dataviews/build-module/field-types/integer.js
12356 var import_i18n30 = __toESM(require_i18n());
12357 var import_jsx_runtime63 = __toESM(require_jsx_runtime());
12358 function getFormat2(field) {
12359 const fieldFormat = field.format;
12360 return {
12361 separatorThousand: fieldFormat?.separatorThousand !== void 0 && typeof fieldFormat.separatorThousand === "string" ? fieldFormat.separatorThousand : ","
12362 };
12363 }
12364 function formatInteger(value, format2) {
12365 if (!Number.isFinite(value)) {
12366 return String(value);
12367 }
12368 const { separatorThousand } = format2;
12369 const integerValue = Math.trunc(value);
12370 if (!separatorThousand) {
12371 return String(integerValue);
12372 }
12373 return String(integerValue).replace(
12374 /\B(?=(\d{3})+(?!\d))/g,
12375 separatorThousand
12376 );
12377 }
12378 function render2({ item, field }) {
12379 if (field.hasElements) {
12380 return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(RenderFromElements, { item, field });
12381 }
12382 const value = field.getValue({ item });
12383 if ([null, void 0].includes(value)) {
12384 return "";
12385 }
12386 let format2;
12387 if (field.type !== "integer") {
12388 format2 = getFormat2(field);
12389 } else {
12390 format2 = field.format;
12391 }
12392 return formatInteger(Number(value), format2);
12393 }
12394 function isValidCustom2(item, field) {
12395 const value = field.getValue({ item });
12396 if (![void 0, "", null].includes(value) && !Number.isInteger(value)) {
12397 return (0, import_i18n30.__)("Value must be an integer.");
12398 }
12399 return null;
12400 }
12401 var integer_default = {
12402 type: "integer",
12403 render: render2,
12404 Edit: "integer",
12405 sort: sort_number_default,
12406 enableSorting: true,
12407 enableGlobalSearch: false,
12408 defaultOperators: [
12409 OPERATOR_IS,
12410 OPERATOR_IS_NOT,
12411 OPERATOR_LESS_THAN,
12412 OPERATOR_GREATER_THAN,
12413 OPERATOR_LESS_THAN_OR_EQUAL,
12414 OPERATOR_GREATER_THAN_OR_EQUAL,
12415 OPERATOR_BETWEEN
12416 ],
12417 validOperators: [
12418 // Single-selection
12419 OPERATOR_IS,
12420 OPERATOR_IS_NOT,
12421 OPERATOR_LESS_THAN,
12422 OPERATOR_GREATER_THAN,
12423 OPERATOR_LESS_THAN_OR_EQUAL,
12424 OPERATOR_GREATER_THAN_OR_EQUAL,
12425 OPERATOR_BETWEEN,
12426 // Multiple-selection
12427 OPERATOR_IS_ANY,
12428 OPERATOR_IS_NONE,
12429 OPERATOR_IS_ALL,
12430 OPERATOR_IS_NOT_ALL
12431 ],
12432 getFormat: getFormat2,
12433 validate: {
12434 required: isValidRequired,
12435 min: isValidMin,
12436 max: isValidMax,
12437 elements: isValidElements,
12438 custom: isValidCustom2
12439 }
12440 };
12441
12442 // packages/dataviews/build-module/components/dataviews-filters/filter.js
12443 var import_jsx_runtime64 = __toESM(require_jsx_runtime());
12444 var ENTER = "Enter";
12445 var SPACE = " ";
12446 var FilterText = ({
12447 activeElements,
12448 filterInView,
12449 filter
12450 }) => {
12451 if (activeElements === void 0 || activeElements.length === 0) {
12452 return filter.name;
12453 }
12454 const operator = getOperatorByName(filterInView?.operator);
12455 if (operator !== void 0) {
12456 return operator.filterText(filter, activeElements);
12457 }
12458 return (0, import_i18n31.sprintf)(
12459 /* translators: 1: Filter name e.g.: "Unknown status for Author". */
12460 (0, import_i18n31.__)("Unknown status for %1$s"),
12461 filter.name
12462 );
12463 };
12464 function OperatorSelector({
12465 filter,
12466 view,
12467 onChangeView
12468 }) {
12469 const operatorOptions = filter.operators?.map((operator) => ({
12470 value: operator,
12471 label: getOperatorByName(operator)?.label || operator
12472 }));
12473 const currentFilter = view.filters?.find(
12474 (_filter) => _filter.field === filter.field
12475 );
12476 const value = currentFilter?.operator || filter.operators[0];
12477 return operatorOptions.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(
12478 import_components23.__experimentalHStack,
12479 {
12480 spacing: 2,
12481 justify: "flex-start",
12482 className: "dataviews-filters__summary-operators-container",
12483 children: [
12484 /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_components23.FlexItem, { className: "dataviews-filters__summary-operators-filter-name", children: filter.name }),
12485 /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
12486 import_components23.SelectControl,
12487 {
12488 className: "dataviews-filters__summary-operators-filter-select",
12489 label: (0, import_i18n31.__)("Conditions"),
12490 value,
12491 options: operatorOptions,
12492 onChange: (newValue) => {
12493 const newOperator = newValue;
12494 const currentOperator = currentFilter?.operator;
12495 const newFilters = currentFilter ? [
12496 ...(view.filters ?? []).map(
12497 (_filter) => {
12498 if (_filter.field === filter.field) {
12499 const currentOpSelectionModel = getOperatorByName(
12500 currentOperator
12501 )?.selection;
12502 const newOpSelectionModel = getOperatorByName(
12503 newOperator
12504 )?.selection;
12505 const shouldResetValue = currentOpSelectionModel !== newOpSelectionModel || [
12506 currentOpSelectionModel,
12507 newOpSelectionModel
12508 ].includes("custom");
12509 return {
12510 ..._filter,
12511 value: shouldResetValue ? void 0 : _filter.value,
12512 operator: newOperator
12513 };
12514 }
12515 return _filter;
12516 }
12517 )
12518 ] : [
12519 ...view.filters ?? [],
12520 {
12521 field: filter.field,
12522 operator: newOperator,
12523 value: void 0
12524 }
12525 ];
12526 onChangeView({
12527 ...view,
12528 page: 1,
12529 filters: newFilters
12530 });
12531 },
12532 size: "small",
12533 variant: "minimal",
12534 __nextHasNoMarginBottom: true,
12535 hideLabelFromVision: true
12536 }
12537 )
12538 ]
12539 }
12540 );
12541 }
12542 function Filter({
12543 addFilterRef,
12544 openedFilter,
12545 fields,
12546 ...commonProps
12547 }) {
12548 const toggleRef = (0, import_element26.useRef)(null);
12549 const { filter, view, onChangeView } = commonProps;
12550 const filterInView = view.filters?.find(
12551 (f2) => f2.field === filter.field
12552 );
12553 let activeElements = [];
12554 const { elements } = useElements({
12555 elements: filter.elements,
12556 getElements: filter.getElements
12557 });
12558 if (elements.length > 0) {
12559 activeElements = elements.filter((element) => {
12560 if (filter.singleSelection) {
12561 return element.value === filterInView?.value;
12562 }
12563 return filterInView?.value?.includes(element.value);
12564 });
12565 } else if (filterInView?.value !== void 0) {
12566 const field = fields.find((f2) => f2.id === filter.field);
12567 let label = filterInView.value;
12568 if (field?.type === "date" && typeof label === "string") {
12569 try {
12570 const dateValue = parseDateTime(label);
12571 if (dateValue !== null) {
12572 label = (0, import_date2.dateI18n)(
12573 field.format.date,
12574 (0, import_date2.getDate)(label)
12575 );
12576 }
12577 } catch (e2) {
12578 label = filterInView.value;
12579 }
12580 } else if (field?.type === "datetime" && typeof label === "string") {
12581 try {
12582 const dateValue = parseDateTime(label);
12583 if (dateValue !== null) {
12584 label = dateValue.toLocaleString();
12585 }
12586 } catch (e2) {
12587 label = filterInView.value;
12588 }
12589 } else if (field?.type === "number" && typeof label === "number") {
12590 const numberField = field;
12591 label = formatNumber(label, numberField.format);
12592 } else if (field?.type === "integer" && typeof label === "number") {
12593 const integerField = field;
12594 label = formatInteger(label, integerField.format);
12595 }
12596 activeElements = [
12597 {
12598 value: filterInView.value,
12599 label
12600 }
12601 ];
12602 }
12603 const isPrimary = filter.isPrimary;
12604 const isLocked = filterInView?.isLocked;
12605 const hasValues = !isLocked && filterInView?.value !== void 0;
12606 const canResetOrRemove = !isLocked && (!isPrimary || hasValues);
12607 return /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
12608 import_components23.Dropdown,
12609 {
12610 defaultOpen: openedFilter === filter.field,
12611 contentClassName: "dataviews-filters__summary-popover",
12612 popoverProps: { placement: "bottom-start", role: "dialog" },
12613 onClose: () => {
12614 toggleRef.current?.focus();
12615 },
12616 renderToggle: ({ isOpen, onToggle }) => /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: "dataviews-filters__summary-chip-container", children: [
12617 /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
12618 import_components23.Tooltip,
12619 {
12620 text: (0, import_i18n31.sprintf)(
12621 /* translators: 1: Filter name. */
12622 (0, import_i18n31.__)("Filter by: %1$s"),
12623 filter.name.toLowerCase()
12624 ),
12625 placement: "top",
12626 children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
12627 "div",
12628 {
12629 className: clsx_default(
12630 "dataviews-filters__summary-chip",
12631 {
12632 "has-reset": canResetOrRemove,
12633 "has-values": hasValues,
12634 "is-not-clickable": isLocked
12635 }
12636 ),
12637 role: "button",
12638 tabIndex: isLocked ? -1 : 0,
12639 onClick: () => {
12640 if (!isLocked) {
12641 onToggle();
12642 }
12643 },
12644 onKeyDown: (event) => {
12645 if (!isLocked && [ENTER, SPACE].includes(event.key)) {
12646 onToggle();
12647 event.preventDefault();
12648 }
12649 },
12650 "aria-disabled": isLocked,
12651 "aria-pressed": isOpen,
12652 "aria-expanded": isOpen,
12653 ref: toggleRef,
12654 children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
12655 FilterText,
12656 {
12657 activeElements,
12658 filterInView,
12659 filter
12660 }
12661 )
12662 }
12663 )
12664 }
12665 ),
12666 canResetOrRemove && /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
12667 import_components23.Tooltip,
12668 {
12669 text: isPrimary ? (0, import_i18n31.__)("Reset") : (0, import_i18n31.__)("Remove"),
12670 placement: "top",
12671 children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
12672 "button",
12673 {
12674 className: clsx_default(
12675 "dataviews-filters__summary-chip-remove",
12676 { "has-values": hasValues }
12677 ),
12678 onClick: () => {
12679 onChangeView({
12680 ...view,
12681 page: 1,
12682 filters: view.filters?.filter(
12683 (_filter) => _filter.field !== filter.field
12684 )
12685 });
12686 if (!isPrimary) {
12687 addFilterRef.current?.focus();
12688 } else {
12689 toggleRef.current?.focus();
12690 }
12691 },
12692 children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(import_components23.Icon, { icon: close_small_default })
12693 }
12694 )
12695 }
12696 )
12697 ] }),
12698 renderContent: () => {
12699 return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(import_components23.__experimentalVStack, { spacing: 0, justify: "flex-start", children: [
12700 /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(OperatorSelector, { ...commonProps }),
12701 commonProps.filter.hasElements ? /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
12702 SearchWidget,
12703 {
12704 ...commonProps,
12705 filter: {
12706 ...commonProps.filter,
12707 elements
12708 }
12709 }
12710 ) : /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(InputWidget, { ...commonProps, fields })
12711 ] });
12712 }
12713 }
12714 );
12715 }
12716
12717 // packages/dataviews/build-module/components/dataviews-filters/add-filter.js
12718 var import_components24 = __toESM(require_components());
12719 var import_i18n32 = __toESM(require_i18n());
12720 var import_element27 = __toESM(require_element());
12721 var import_jsx_runtime65 = __toESM(require_jsx_runtime());
12722 var { Menu: Menu4 } = unlock(import_components24.privateApis);
12723 function AddFilterMenu({
12724 filters,
12725 view,
12726 onChangeView,
12727 setOpenedFilter,
12728 triggerProps
12729 }) {
12730 const inactiveFilters = filters.filter((filter) => !filter.isVisible);
12731 return /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(Menu4, { children: [
12732 /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Menu4.TriggerButton, { ...triggerProps }),
12733 /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Menu4.Popover, { children: inactiveFilters.map((filter) => {
12734 return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
12735 Menu4.Item,
12736 {
12737 onClick: () => {
12738 setOpenedFilter(filter.field);
12739 onChangeView({
12740 ...view,
12741 page: 1,
12742 filters: [
12743 ...view.filters || [],
12744 {
12745 field: filter.field,
12746 value: void 0,
12747 operator: filter.operators[0]
12748 }
12749 ]
12750 });
12751 },
12752 children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Menu4.ItemLabel, { children: filter.name })
12753 },
12754 filter.field
12755 );
12756 }) })
12757 ] });
12758 }
12759 function AddFilter({ filters, view, onChangeView, setOpenedFilter }, ref) {
12760 if (!filters.length || filters.every(({ isPrimary }) => isPrimary)) {
12761 return null;
12762 }
12763 const inactiveFilters = filters.filter((filter) => !filter.isVisible);
12764 return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
12765 AddFilterMenu,
12766 {
12767 triggerProps: {
12768 render: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
12769 import_components24.Button,
12770 {
12771 accessibleWhenDisabled: true,
12772 size: "compact",
12773 className: "dataviews-filters-button",
12774 variant: "tertiary",
12775 disabled: !inactiveFilters.length,
12776 ref
12777 }
12778 ),
12779 children: (0, import_i18n32.__)("Add filter")
12780 },
12781 ...{ filters, view, onChangeView, setOpenedFilter }
12782 }
12783 );
12784 }
12785 var add_filter_default = (0, import_element27.forwardRef)(AddFilter);
12786
12787 // packages/dataviews/build-module/components/dataviews-filters/reset-filters.js
12788 var import_components25 = __toESM(require_components());
12789 var import_i18n33 = __toESM(require_i18n());
12790 var import_jsx_runtime66 = __toESM(require_jsx_runtime());
12791 function ResetFilter({
12792 filters,
12793 view,
12794 onChangeView
12795 }) {
12796 const isPrimary = (field) => filters.some(
12797 (_filter) => _filter.field === field && _filter.isPrimary
12798 );
12799 const isDisabled = !view.search && !view.filters?.some(
12800 (_filter) => !_filter.isLocked && (_filter.value !== void 0 || !isPrimary(_filter.field))
12801 );
12802 return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(
12803 import_components25.Button,
12804 {
12805 disabled: isDisabled,
12806 accessibleWhenDisabled: true,
12807 size: "compact",
12808 variant: "tertiary",
12809 className: "dataviews-filters__reset-button",
12810 onClick: () => {
12811 onChangeView({
12812 ...view,
12813 page: 1,
12814 search: "",
12815 filters: view.filters?.filter((f2) => !!f2.isLocked) || []
12816 });
12817 },
12818 children: (0, import_i18n33.__)("Reset")
12819 }
12820 );
12821 }
12822
12823 // packages/dataviews/build-module/components/dataviews-filters/use-filters.js
12824 var import_element28 = __toESM(require_element());
12825 function useFilters(fields, view) {
12826 return (0, import_element28.useMemo)(() => {
12827 const filters = [];
12828 fields.forEach((field) => {
12829 if (field.filterBy === false || !field.hasElements && !field.Edit) {
12830 return;
12831 }
12832 const operators = field.filterBy.operators;
12833 const isPrimary = !!field.filterBy?.isPrimary;
12834 const isLocked = view.filters?.some(
12835 (f2) => f2.field === field.id && !!f2.isLocked
12836 ) ?? false;
12837 filters.push({
12838 field: field.id,
12839 name: field.label,
12840 elements: field.elements,
12841 getElements: field.getElements,
12842 hasElements: field.hasElements,
12843 singleSelection: operators.some(
12844 (op) => isSingleSelectionOperator(op)
12845 ),
12846 operators,
12847 isVisible: isLocked || isPrimary || !!view.filters?.some(
12848 (f2) => f2.field === field.id && isRegisteredOperator(f2.operator)
12849 ),
12850 isPrimary,
12851 isLocked
12852 });
12853 });
12854 filters.sort((a2, b2) => {
12855 if (a2.isLocked && !b2.isLocked) {
12856 return -1;
12857 }
12858 if (!a2.isLocked && b2.isLocked) {
12859 return 1;
12860 }
12861 if (a2.isPrimary && !b2.isPrimary) {
12862 return -1;
12863 }
12864 if (!a2.isPrimary && b2.isPrimary) {
12865 return 1;
12866 }
12867 return a2.name.localeCompare(b2.name);
12868 });
12869 return filters;
12870 }, [fields, view]);
12871 }
12872 var use_filters_default = useFilters;
12873
12874 // packages/dataviews/build-module/components/dataviews-filters/filters.js
12875 var import_jsx_runtime67 = __toESM(require_jsx_runtime());
12876 function Filters({ className }) {
12877 const { fields, view, onChangeView, openedFilter, setOpenedFilter } = (0, import_element29.useContext)(dataviews_context_default);
12878 const addFilterRef = (0, import_element29.useRef)(null);
12879 const filters = use_filters_default(fields, view);
12880 const addFilter = /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12881 add_filter_default,
12882 {
12883 filters,
12884 view,
12885 onChangeView,
12886 ref: addFilterRef,
12887 setOpenedFilter
12888 },
12889 "add-filter"
12890 );
12891 const visibleFilters = filters.filter((filter) => filter.isVisible);
12892 if (visibleFilters.length === 0) {
12893 return null;
12894 }
12895 const filterComponents = [
12896 ...visibleFilters.map((filter) => {
12897 return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12898 Filter,
12899 {
12900 filter,
12901 view,
12902 fields,
12903 onChangeView,
12904 addFilterRef,
12905 openedFilter
12906 },
12907 filter.field
12908 );
12909 }),
12910 addFilter
12911 ];
12912 filterComponents.push(
12913 /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12914 ResetFilter,
12915 {
12916 filters,
12917 view,
12918 onChangeView
12919 },
12920 "reset-filters"
12921 )
12922 );
12923 return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
12924 import_components26.__experimentalHStack,
12925 {
12926 justify: "flex-start",
12927 style: { width: "fit-content" },
12928 wrap: true,
12929 className,
12930 children: filterComponents
12931 }
12932 );
12933 }
12934 var filters_default = (0, import_element29.memo)(Filters);
12935
12936 // packages/dataviews/build-module/components/dataviews-filters/toggle.js
12937 var import_element30 = __toESM(require_element());
12938 var import_components27 = __toESM(require_components());
12939 var import_i18n34 = __toESM(require_i18n());
12940 var import_jsx_runtime68 = __toESM(require_jsx_runtime());
12941 function FiltersToggle() {
12942 const {
12943 filters,
12944 view,
12945 onChangeView,
12946 setOpenedFilter,
12947 isShowingFilter,
12948 setIsShowingFilter
12949 } = (0, import_element30.useContext)(dataviews_context_default);
12950 const buttonRef = (0, import_element30.useRef)(null);
12951 const onChangeViewWithFilterVisibility = (0, import_element30.useCallback)(
12952 (_view) => {
12953 onChangeView(_view);
12954 setIsShowingFilter(true);
12955 },
12956 [onChangeView, setIsShowingFilter]
12957 );
12958 const visibleFilters = filters.filter((filter) => filter.isVisible);
12959 const hasVisibleFilters = !!visibleFilters.length;
12960 if (filters.length === 0) {
12961 return null;
12962 }
12963 const addFilterButtonProps = {
12964 label: (0, import_i18n34.__)("Add filter"),
12965 "aria-expanded": false,
12966 isPressed: false
12967 };
12968 const toggleFiltersButtonProps = {
12969 label: (0, import_i18n34._x)("Filter", "verb"),
12970 "aria-expanded": isShowingFilter,
12971 isPressed: isShowingFilter,
12972 onClick: () => {
12973 if (!isShowingFilter) {
12974 setOpenedFilter(null);
12975 }
12976 setIsShowingFilter(!isShowingFilter);
12977 }
12978 };
12979 const buttonComponent = /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
12980 import_components27.Button,
12981 {
12982 ref: buttonRef,
12983 className: "dataviews-filters__visibility-toggle",
12984 size: "compact",
12985 icon: funnel_default,
12986 ...hasVisibleFilters ? toggleFiltersButtonProps : addFilterButtonProps
12987 }
12988 );
12989 return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "dataviews-filters__container-visibility-toggle", children: !hasVisibleFilters ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
12990 AddFilterMenu,
12991 {
12992 filters,
12993 view,
12994 onChangeView: onChangeViewWithFilterVisibility,
12995 setOpenedFilter,
12996 triggerProps: { render: buttonComponent }
12997 }
12998 ) : /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(
12999 FilterVisibilityToggle,
13000 {
13001 buttonRef,
13002 filtersCount: view.filters?.length,
13003 children: buttonComponent
13004 }
13005 ) });
13006 }
13007 function FilterVisibilityToggle({
13008 buttonRef,
13009 filtersCount,
13010 children
13011 }) {
13012 (0, import_element30.useEffect)(
13013 () => () => {
13014 buttonRef.current?.focus();
13015 },
13016 [buttonRef]
13017 );
13018 return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
13019 children,
13020 !!filtersCount && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "dataviews-filters-toggle__count", children: filtersCount })
13021 ] });
13022 }
13023 var toggle_default = FiltersToggle;
13024
13025 // packages/dataviews/build-module/components/dataviews-filters/filters-toggled.js
13026 var import_element31 = __toESM(require_element());
13027 var import_jsx_runtime69 = __toESM(require_jsx_runtime());
13028 function FiltersToggled(props) {
13029 const { isShowingFilter } = (0, import_element31.useContext)(dataviews_context_default);
13030 if (!isShowingFilter) {
13031 return null;
13032 }
13033 return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)(filters_default, { ...props });
13034 }
13035 var filters_toggled_default = FiltersToggled;
13036
13037 // packages/dataviews/build-module/components/dataviews-layout/index.js
13038 var import_element32 = __toESM(require_element());
13039 var import_i18n35 = __toESM(require_i18n());
13040 var import_jsx_runtime70 = __toESM(require_jsx_runtime());
13041 function DataViewsLayout({ className }) {
13042 const {
13043 actions = [],
13044 data,
13045 fields,
13046 getItemId,
13047 getItemLevel,
13048 isLoading,
13049 view,
13050 onChangeView,
13051 selection,
13052 onChangeSelection,
13053 setOpenedFilter,
13054 onClickItem,
13055 isItemClickable: isItemClickable2,
13056 renderItemLink,
13057 defaultLayouts,
13058 empty = /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("p", { children: (0, import_i18n35.__)("No results") })
13059 } = (0, import_element32.useContext)(dataviews_context_default);
13060 const ViewComponent = VIEW_LAYOUTS.find(
13061 (v2) => v2.type === view.type && defaultLayouts[v2.type]
13062 )?.component;
13063 return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
13064 ViewComponent,
13065 {
13066 className,
13067 actions,
13068 data,
13069 fields,
13070 getItemId,
13071 getItemLevel,
13072 isLoading,
13073 onChangeView,
13074 onChangeSelection,
13075 selection,
13076 setOpenedFilter,
13077 onClickItem,
13078 renderItemLink,
13079 isItemClickable: isItemClickable2,
13080 view,
13081 empty
13082 }
13083 );
13084 }
13085
13086 // packages/dataviews/build-module/components/dataviews-search/index.js
13087 var import_i18n36 = __toESM(require_i18n());
13088 var import_element33 = __toESM(require_element());
13089 var import_components28 = __toESM(require_components());
13090 var import_compose9 = __toESM(require_compose());
13091 var import_jsx_runtime71 = __toESM(require_jsx_runtime());
13092 var DataViewsSearch = (0, import_element33.memo)(function Search({ label }) {
13093 const { view, onChangeView } = (0, import_element33.useContext)(dataviews_context_default);
13094 const [search, setSearch, debouncedSearch] = (0, import_compose9.useDebouncedInput)(
13095 view.search
13096 );
13097 (0, import_element33.useEffect)(() => {
13098 setSearch(view.search ?? "");
13099 }, [view.search, setSearch]);
13100 const onChangeViewRef = (0, import_element33.useRef)(onChangeView);
13101 const viewRef = (0, import_element33.useRef)(view);
13102 (0, import_element33.useEffect)(() => {
13103 onChangeViewRef.current = onChangeView;
13104 viewRef.current = view;
13105 }, [onChangeView, view]);
13106 (0, import_element33.useEffect)(() => {
13107 if (debouncedSearch !== viewRef.current?.search) {
13108 onChangeViewRef.current({
13109 ...viewRef.current,
13110 page: 1,
13111 search: debouncedSearch
13112 });
13113 }
13114 }, [debouncedSearch]);
13115 const searchLabel = label || (0, import_i18n36.__)("Search");
13116 return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(
13117 import_components28.SearchControl,
13118 {
13119 className: "dataviews-search",
13120 __nextHasNoMarginBottom: true,
13121 onChange: setSearch,
13122 value: search,
13123 label: searchLabel,
13124 placeholder: searchLabel,
13125 size: "compact"
13126 }
13127 );
13128 });
13129 var dataviews_search_default = DataViewsSearch;
13130
13131 // packages/dataviews/build-module/components/dataviews-view-config/index.js
13132 var import_components30 = __toESM(require_components());
13133 var import_i18n38 = __toESM(require_i18n());
13134 var import_element35 = __toESM(require_element());
13135 var import_warning = __toESM(require_warning());
13136 var import_compose10 = __toESM(require_compose());
13137
13138 // packages/dataviews/build-module/components/dataviews-view-config/infinite-scroll-toggle.js
13139 var import_components29 = __toESM(require_components());
13140 var import_i18n37 = __toESM(require_i18n());
13141 var import_element34 = __toESM(require_element());
13142 var import_jsx_runtime72 = __toESM(require_jsx_runtime());
13143 function InfiniteScrollToggle() {
13144 const context = (0, import_element34.useContext)(dataviews_context_default);
13145 const { view, onChangeView } = context;
13146 const infiniteScrollEnabled = view.infiniteScrollEnabled ?? false;
13147 if (!context.hasInfiniteScrollHandler) {
13148 return null;
13149 }
13150 return /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
13151 import_components29.ToggleControl,
13152 {
13153 __nextHasNoMarginBottom: true,
13154 label: (0, import_i18n37.__)("Enable infinite scroll"),
13155 help: (0, import_i18n37.__)(
13156 "Automatically load more content as you scroll, instead of showing pagination links."
13157 ),
13158 checked: infiniteScrollEnabled,
13159 onChange: (newValue) => {
13160 onChangeView({
13161 ...view,
13162 infiniteScrollEnabled: newValue
13163 });
13164 }
13165 }
13166 );
13167 }
13168
13169 // packages/dataviews/build-module/components/dataviews-view-config/index.js
13170 var import_jsx_runtime73 = __toESM(require_jsx_runtime());
13171 var { Menu: Menu5 } = unlock(import_components30.privateApis);
13172 var DATAVIEWS_CONFIG_POPOVER_PROPS = {
13173 className: "dataviews-config__popover",
13174 placement: "bottom-end",
13175 offset: 9
13176 };
13177 function ViewTypeMenu() {
13178 const { view, onChangeView, defaultLayouts } = (0, import_element35.useContext)(dataviews_context_default);
13179 const availableLayouts = Object.keys(defaultLayouts);
13180 if (availableLayouts.length <= 1) {
13181 return null;
13182 }
13183 const activeView = VIEW_LAYOUTS.find((v2) => view.type === v2.type);
13184 return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(Menu5, { children: [
13185 /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13186 Menu5.TriggerButton,
13187 {
13188 render: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13189 import_components30.Button,
13190 {
13191 size: "compact",
13192 icon: activeView?.icon,
13193 label: (0, import_i18n38.__)("Layout")
13194 }
13195 )
13196 }
13197 ),
13198 /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(Menu5.Popover, { children: availableLayouts.map((layout) => {
13199 const config = VIEW_LAYOUTS.find(
13200 (v2) => v2.type === layout
13201 );
13202 if (!config) {
13203 return null;
13204 }
13205 return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13206 Menu5.RadioItem,
13207 {
13208 value: layout,
13209 name: "view-actions-available-view",
13210 checked: layout === view.type,
13211 hideOnClick: true,
13212 onChange: (e2) => {
13213 switch (e2.target.value) {
13214 case "list":
13215 case "grid":
13216 case "table":
13217 case "pickerGrid":
13218 case "pickerTable":
13219 case "activity":
13220 const viewWithoutLayout = { ...view };
13221 if ("layout" in viewWithoutLayout) {
13222 delete viewWithoutLayout.layout;
13223 }
13224 return onChangeView({
13225 ...viewWithoutLayout,
13226 type: e2.target.value,
13227 ...defaultLayouts[e2.target.value]
13228 });
13229 }
13230 (0, import_warning.default)("Invalid dataview");
13231 },
13232 children: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(Menu5.ItemLabel, { children: config.label })
13233 },
13234 layout
13235 );
13236 }) })
13237 ] });
13238 }
13239 function SortFieldControl() {
13240 const { view, fields, onChangeView } = (0, import_element35.useContext)(dataviews_context_default);
13241 const orderOptions = (0, import_element35.useMemo)(() => {
13242 const sortableFields = fields.filter(
13243 (field) => field.enableSorting !== false
13244 );
13245 return sortableFields.map((field) => {
13246 return {
13247 label: field.label,
13248 value: field.id
13249 };
13250 });
13251 }, [fields]);
13252 return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13253 import_components30.SelectControl,
13254 {
13255 __nextHasNoMarginBottom: true,
13256 __next40pxDefaultSize: true,
13257 label: (0, import_i18n38.__)("Sort by"),
13258 value: view.sort?.field,
13259 options: orderOptions,
13260 onChange: (value) => {
13261 onChangeView({
13262 ...view,
13263 sort: {
13264 direction: view?.sort?.direction || "desc",
13265 field: value
13266 },
13267 showLevels: false
13268 });
13269 }
13270 }
13271 );
13272 }
13273 function SortDirectionControl() {
13274 const { view, fields, onChangeView } = (0, import_element35.useContext)(dataviews_context_default);
13275 const sortableFields = fields.filter(
13276 (field) => field.enableSorting !== false
13277 );
13278 if (sortableFields.length === 0) {
13279 return null;
13280 }
13281 let value = view.sort?.direction;
13282 if (!value && view.sort?.field) {
13283 value = "desc";
13284 }
13285 return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13286 import_components30.__experimentalToggleGroupControl,
13287 {
13288 className: "dataviews-view-config__sort-direction",
13289 __nextHasNoMarginBottom: true,
13290 __next40pxDefaultSize: true,
13291 isBlock: true,
13292 label: (0, import_i18n38.__)("Order"),
13293 value,
13294 onChange: (newDirection) => {
13295 if (newDirection === "asc" || newDirection === "desc") {
13296 onChangeView({
13297 ...view,
13298 sort: {
13299 direction: newDirection,
13300 field: view.sort?.field || // If there is no field assigned as the sorting field assign the first sortable field.
13301 fields.find(
13302 (field) => field.enableSorting !== false
13303 )?.id || ""
13304 },
13305 showLevels: false
13306 });
13307 return;
13308 }
13309 (0, import_warning.default)("Invalid direction");
13310 },
13311 children: SORTING_DIRECTIONS.map((direction) => {
13312 return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13313 import_components30.__experimentalToggleGroupControlOptionIcon,
13314 {
13315 value: direction,
13316 icon: sortIcons[direction],
13317 label: sortLabels[direction]
13318 },
13319 direction
13320 );
13321 })
13322 }
13323 );
13324 }
13325 function ItemsPerPageControl() {
13326 const { view, config, onChangeView } = (0, import_element35.useContext)(dataviews_context_default);
13327 const { infiniteScrollEnabled } = view;
13328 if (!config || !config.perPageSizes || config.perPageSizes.length < 2 || config.perPageSizes.length > 6 || infiniteScrollEnabled) {
13329 return null;
13330 }
13331 return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13332 import_components30.__experimentalToggleGroupControl,
13333 {
13334 __nextHasNoMarginBottom: true,
13335 __next40pxDefaultSize: true,
13336 isBlock: true,
13337 label: (0, import_i18n38.__)("Items per page"),
13338 value: view.perPage || 10,
13339 disabled: !view?.sort?.field,
13340 onChange: (newItemsPerPage) => {
13341 const newItemsPerPageNumber = typeof newItemsPerPage === "number" || newItemsPerPage === void 0 ? newItemsPerPage : parseInt(newItemsPerPage, 10);
13342 onChangeView({
13343 ...view,
13344 perPage: newItemsPerPageNumber,
13345 page: 1
13346 });
13347 },
13348 children: config.perPageSizes.map((value) => {
13349 return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13350 import_components30.__experimentalToggleGroupControlOption,
13351 {
13352 value,
13353 label: value.toString()
13354 },
13355 value
13356 );
13357 })
13358 }
13359 );
13360 }
13361 function SettingsSection({
13362 title,
13363 description,
13364 children
13365 }) {
13366 return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(import_components30.__experimentalGrid, { columns: 12, className: "dataviews-settings-section", gap: 4, children: [
13367 /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "dataviews-settings-section__sidebar", children: [
13368 /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13369 import_components30.__experimentalHeading,
13370 {
13371 level: 2,
13372 className: "dataviews-settings-section__title",
13373 children: title
13374 }
13375 ),
13376 description && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13377 import_components30.__experimentalText,
13378 {
13379 variant: "muted",
13380 className: "dataviews-settings-section__description",
13381 children: description
13382 }
13383 )
13384 ] }),
13385 /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13386 import_components30.__experimentalGrid,
13387 {
13388 columns: 8,
13389 gap: 4,
13390 className: "dataviews-settings-section__content",
13391 children
13392 }
13393 )
13394 ] });
13395 }
13396 function DataviewsViewConfigDropdown() {
13397 const { view } = (0, import_element35.useContext)(dataviews_context_default);
13398 const popoverId = (0, import_compose10.useInstanceId)(
13399 _DataViewsViewConfig,
13400 "dataviews-view-config-dropdown"
13401 );
13402 const activeLayout = VIEW_LAYOUTS.find(
13403 (layout) => layout.type === view.type
13404 );
13405 return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13406 import_components30.Dropdown,
13407 {
13408 expandOnMobile: true,
13409 popoverProps: {
13410 ...DATAVIEWS_CONFIG_POPOVER_PROPS,
13411 id: popoverId
13412 },
13413 renderToggle: ({ onToggle, isOpen }) => {
13414 return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13415 import_components30.Button,
13416 {
13417 size: "compact",
13418 icon: cog_default,
13419 label: (0, import_i18n38._x)("View options", "View is used as a noun"),
13420 onClick: onToggle,
13421 "aria-expanded": isOpen ? "true" : "false",
13422 "aria-controls": popoverId
13423 }
13424 );
13425 },
13426 renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
13427 import_components30.__experimentalDropdownContentWrapper,
13428 {
13429 paddingSize: "medium",
13430 className: "dataviews-config__popover-content-wrapper",
13431 children: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(import_components30.__experimentalVStack, { className: "dataviews-view-config", spacing: 6, children: /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(SettingsSection, { title: (0, import_i18n38.__)("Appearance"), children: [
13432 /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(import_components30.__experimentalHStack, { expanded: true, className: "is-divided-in-two", children: [
13433 /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(SortFieldControl, {}),
13434 /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(SortDirectionControl, {})
13435 ] }),
13436 !!activeLayout?.viewConfigOptions && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(activeLayout.viewConfigOptions, {}),
13437 /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(InfiniteScrollToggle, {}),
13438 /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(ItemsPerPageControl, {}),
13439 /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(PropertiesSection, {})
13440 ] }) })
13441 }
13442 )
13443 }
13444 );
13445 }
13446 function _DataViewsViewConfig() {
13447 return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(import_jsx_runtime73.Fragment, { children: [
13448 /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(ViewTypeMenu, {}),
13449 /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(DataviewsViewConfigDropdown, {})
13450 ] });
13451 }
13452 var DataViewsViewConfig = (0, import_element35.memo)(_DataViewsViewConfig);
13453 var dataviews_view_config_default = DataViewsViewConfig;
13454
13455 // packages/dataviews/build-module/dataform-controls/checkbox.js
13456 var import_components31 = __toESM(require_components());
13457 var import_element36 = __toESM(require_element());
13458
13459 // packages/dataviews/build-module/dataform-controls/utils/get-custom-validity.js
13460 function getCustomValidity(isValid2, validity) {
13461 let customValidity;
13462 if (isValid2?.required && validity?.required) {
13463 customValidity = validity?.required?.message ? validity.required : void 0;
13464 } else if (isValid2?.pattern && validity?.pattern) {
13465 customValidity = validity.pattern;
13466 } else if (isValid2?.min && validity?.min) {
13467 customValidity = validity.min;
13468 } else if (isValid2?.max && validity?.max) {
13469 customValidity = validity.max;
13470 } else if (isValid2?.minLength && validity?.minLength) {
13471 customValidity = validity.minLength;
13472 } else if (isValid2?.maxLength && validity?.maxLength) {
13473 customValidity = validity.maxLength;
13474 } else if (isValid2?.elements && validity?.elements) {
13475 customValidity = validity.elements;
13476 } else if (validity?.custom) {
13477 customValidity = validity.custom;
13478 }
13479 return customValidity;
13480 }
13481
13482 // packages/dataviews/build-module/dataform-controls/checkbox.js
13483 var import_jsx_runtime74 = __toESM(require_jsx_runtime());
13484 var { ValidatedCheckboxControl } = unlock(import_components31.privateApis);
13485 function Checkbox({
13486 field,
13487 onChange,
13488 data,
13489 hideLabelFromVision,
13490 validity
13491 }) {
13492 const { getValue, setValue, label, description, isValid: isValid2 } = field;
13493 const onChangeControl = (0, import_element36.useCallback)(() => {
13494 onChange(
13495 setValue({ item: data, value: !getValue({ item: data }) })
13496 );
13497 }, [data, getValue, onChange, setValue]);
13498 return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
13499 ValidatedCheckboxControl,
13500 {
13501 required: !!field.isValid?.required,
13502 customValidity: getCustomValidity(isValid2, validity),
13503 hidden: hideLabelFromVision,
13504 label,
13505 help: description,
13506 checked: getValue({ item: data }),
13507 onChange: onChangeControl
13508 }
13509 );
13510 }
13511
13512 // packages/dataviews/build-module/dataform-controls/datetime.js
13513 var import_components33 = __toESM(require_components());
13514 var import_element38 = __toESM(require_element());
13515 var import_i18n40 = __toESM(require_i18n());
13516 var import_date3 = __toESM(require_date());
13517
13518 // packages/dataviews/build-module/dataform-controls/utils/relative-date-control.js
13519 var import_components32 = __toESM(require_components());
13520 var import_element37 = __toESM(require_element());
13521 var import_i18n39 = __toESM(require_i18n());
13522 var import_jsx_runtime75 = __toESM(require_jsx_runtime());
13523 var TIME_UNITS_OPTIONS = {
13524 [OPERATOR_IN_THE_PAST]: [
13525 { value: "days", label: (0, import_i18n39.__)("Days") },
13526 { value: "weeks", label: (0, import_i18n39.__)("Weeks") },
13527 { value: "months", label: (0, import_i18n39.__)("Months") },
13528 { value: "years", label: (0, import_i18n39.__)("Years") }
13529 ],
13530 [OPERATOR_OVER]: [
13531 { value: "days", label: (0, import_i18n39.__)("Days ago") },
13532 { value: "weeks", label: (0, import_i18n39.__)("Weeks ago") },
13533 { value: "months", label: (0, import_i18n39.__)("Months ago") },
13534 { value: "years", label: (0, import_i18n39.__)("Years ago") }
13535 ]
13536 };
13537 function RelativeDateControl({
13538 className,
13539 data,
13540 field,
13541 onChange,
13542 hideLabelFromVision,
13543 operator
13544 }) {
13545 const options = TIME_UNITS_OPTIONS[operator === OPERATOR_IN_THE_PAST ? "inThePast" : "over"];
13546 const { id, label, getValue, setValue } = field;
13547 const fieldValue = getValue({ item: data });
13548 const { value: relValue = "", unit = options[0].value } = fieldValue && typeof fieldValue === "object" ? fieldValue : {};
13549 const onChangeValue = (0, import_element37.useCallback)(
13550 (newValue) => onChange(
13551 setValue({
13552 item: data,
13553 value: { value: Number(newValue), unit }
13554 })
13555 ),
13556 [onChange, setValue, data, unit]
13557 );
13558 const onChangeUnit = (0, import_element37.useCallback)(
13559 (newUnit) => onChange(
13560 setValue({
13561 item: data,
13562 value: { value: relValue, unit: newUnit }
13563 })
13564 ),
13565 [onChange, setValue, data, relValue]
13566 );
13567 return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
13568 import_components32.BaseControl,
13569 {
13570 id,
13571 __nextHasNoMarginBottom: true,
13572 className: clsx_default(className, "dataviews-controls__relative-date"),
13573 label,
13574 hideLabelFromVision,
13575 children: /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(import_components32.__experimentalHStack, { spacing: 2.5, children: [
13576 /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
13577 import_components32.__experimentalNumberControl,
13578 {
13579 __next40pxDefaultSize: true,
13580 className: "dataviews-controls__relative-date-number",
13581 spinControls: "none",
13582 min: 1,
13583 step: 1,
13584 value: relValue,
13585 onChange: onChangeValue
13586 }
13587 ),
13588 /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
13589 import_components32.SelectControl,
13590 {
13591 className: "dataviews-controls__relative-date-unit",
13592 __next40pxDefaultSize: true,
13593 __nextHasNoMarginBottom: true,
13594 label: (0, import_i18n39.__)("Unit"),
13595 value: unit,
13596 options,
13597 onChange: onChangeUnit,
13598 hideLabelFromVision: true
13599 }
13600 )
13601 ] })
13602 }
13603 );
13604 }
13605
13606 // packages/dataviews/build-module/dataform-controls/datetime.js
13607 var import_jsx_runtime76 = __toESM(require_jsx_runtime());
13608 var { DateCalendar, ValidatedInputControl } = unlock(import_components33.privateApis);
13609 var formatDateTime = (date) => {
13610 if (!date) {
13611 return "";
13612 }
13613 if (typeof date === "string") {
13614 return date;
13615 }
13616 return format(date, "yyyy-MM-dd'T'HH:mm");
13617 };
13618 function CalendarDateTimeControl({
13619 data,
13620 field,
13621 onChange,
13622 hideLabelFromVision,
13623 validity
13624 }) {
13625 const { id, label, description, setValue, getValue, isValid: isValid2 } = field;
13626 const fieldValue = getValue({ item: data });
13627 const value = typeof fieldValue === "string" ? fieldValue : void 0;
13628 const [calendarMonth, setCalendarMonth] = (0, import_element38.useState)(() => {
13629 const parsedDate = parseDateTime(value);
13630 return parsedDate || /* @__PURE__ */ new Date();
13631 });
13632 const inputControlRef = (0, import_element38.useRef)(null);
13633 const validationTimeoutRef = (0, import_element38.useRef)();
13634 const previousFocusRef = (0, import_element38.useRef)(null);
13635 const onChangeCallback = (0, import_element38.useCallback)(
13636 (newValue) => onChange(setValue({ item: data, value: newValue })),
13637 [data, onChange, setValue]
13638 );
13639 (0, import_element38.useEffect)(() => {
13640 return () => {
13641 if (validationTimeoutRef.current) {
13642 clearTimeout(validationTimeoutRef.current);
13643 }
13644 };
13645 }, []);
13646 const onSelectDate = (0, import_element38.useCallback)(
13647 (newDate) => {
13648 let dateTimeValue;
13649 if (newDate) {
13650 let finalDateTime = newDate;
13651 if (value) {
13652 const currentDateTime = parseDateTime(value);
13653 if (currentDateTime) {
13654 finalDateTime = new Date(newDate);
13655 finalDateTime.setHours(currentDateTime.getHours());
13656 finalDateTime.setMinutes(
13657 currentDateTime.getMinutes()
13658 );
13659 }
13660 }
13661 dateTimeValue = finalDateTime.toISOString();
13662 onChangeCallback(dateTimeValue);
13663 if (validationTimeoutRef.current) {
13664 clearTimeout(validationTimeoutRef.current);
13665 }
13666 } else {
13667 onChangeCallback(void 0);
13668 }
13669 previousFocusRef.current = inputControlRef.current && inputControlRef.current.ownerDocument.activeElement;
13670 validationTimeoutRef.current = setTimeout(() => {
13671 if (inputControlRef.current) {
13672 inputControlRef.current.focus();
13673 inputControlRef.current.blur();
13674 onChangeCallback(dateTimeValue);
13675 if (previousFocusRef.current && previousFocusRef.current instanceof HTMLElement) {
13676 previousFocusRef.current.focus();
13677 }
13678 }
13679 }, 0);
13680 },
13681 [onChangeCallback, value]
13682 );
13683 const handleManualDateTimeChange = (0, import_element38.useCallback)(
13684 (newValue) => {
13685 if (newValue) {
13686 const dateTime = new Date(newValue);
13687 onChangeCallback(dateTime.toISOString());
13688 const parsedDate = parseDateTime(dateTime.toISOString());
13689 if (parsedDate) {
13690 setCalendarMonth(parsedDate);
13691 }
13692 } else {
13693 onChangeCallback(void 0);
13694 }
13695 },
13696 [onChangeCallback]
13697 );
13698 const {
13699 timezone: { string: timezoneString },
13700 l10n: { startOfWeek: startOfWeek2 }
13701 } = (0, import_date3.getSettings)();
13702 const displayLabel = isValid2?.required && !hideLabelFromVision ? `${label} (${(0, import_i18n40.__)("Required")})` : label;
13703 return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
13704 import_components33.BaseControl,
13705 {
13706 __nextHasNoMarginBottom: true,
13707 id,
13708 label: displayLabel,
13709 help: description,
13710 hideLabelFromVision,
13711 children: /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(import_components33.__experimentalVStack, { spacing: 4, children: [
13712 /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
13713 DateCalendar,
13714 {
13715 style: { width: "100%" },
13716 selected: value ? parseDateTime(value) || void 0 : void 0,
13717 onSelect: onSelectDate,
13718 month: calendarMonth,
13719 onMonthChange: setCalendarMonth,
13720 timeZone: timezoneString || void 0,
13721 weekStartsOn: startOfWeek2
13722 }
13723 ),
13724 /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
13725 ValidatedInputControl,
13726 {
13727 ref: inputControlRef,
13728 __next40pxDefaultSize: true,
13729 required: !!isValid2?.required,
13730 customValidity: getCustomValidity(isValid2, validity),
13731 type: "datetime-local",
13732 label: (0, import_i18n40.__)("Date time"),
13733 hideLabelFromVision: true,
13734 value: value ? formatDateTime(
13735 parseDateTime(value) || void 0
13736 ) : "",
13737 onChange: handleManualDateTimeChange
13738 }
13739 )
13740 ] })
13741 }
13742 );
13743 }
13744 function DateTime({
13745 data,
13746 field,
13747 onChange,
13748 hideLabelFromVision,
13749 operator,
13750 validity
13751 }) {
13752 if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) {
13753 return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
13754 RelativeDateControl,
13755 {
13756 className: "dataviews-controls__datetime",
13757 data,
13758 field,
13759 onChange,
13760 hideLabelFromVision,
13761 operator
13762 }
13763 );
13764 }
13765 return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
13766 CalendarDateTimeControl,
13767 {
13768 data,
13769 field,
13770 onChange,
13771 hideLabelFromVision,
13772 validity
13773 }
13774 );
13775 }
13776
13777 // packages/dataviews/build-module/dataform-controls/date.js
13778 var import_components34 = __toESM(require_components());
13779 var import_element39 = __toESM(require_element());
13780 var import_i18n41 = __toESM(require_i18n());
13781 var import_date4 = __toESM(require_date());
13782 var import_jsx_runtime77 = __toESM(require_jsx_runtime());
13783 var { DateCalendar: DateCalendar2, DateRangeCalendar } = unlock(import_components34.privateApis);
13784 var DATE_PRESETS = [
13785 {
13786 id: "today",
13787 label: (0, import_i18n41.__)("Today"),
13788 getValue: () => (0, import_date4.getDate)(null)
13789 },
13790 {
13791 id: "yesterday",
13792 label: (0, import_i18n41.__)("Yesterday"),
13793 getValue: () => {
13794 const today = (0, import_date4.getDate)(null);
13795 return subDays(today, 1);
13796 }
13797 },
13798 {
13799 id: "past-week",
13800 label: (0, import_i18n41.__)("Past week"),
13801 getValue: () => {
13802 const today = (0, import_date4.getDate)(null);
13803 return subDays(today, 7);
13804 }
13805 },
13806 {
13807 id: "past-month",
13808 label: (0, import_i18n41.__)("Past month"),
13809 getValue: () => {
13810 const today = (0, import_date4.getDate)(null);
13811 return subMonths(today, 1);
13812 }
13813 }
13814 ];
13815 var DATE_RANGE_PRESETS = [
13816 {
13817 id: "last-7-days",
13818 label: (0, import_i18n41.__)("Last 7 days"),
13819 getValue: () => {
13820 const today = (0, import_date4.getDate)(null);
13821 return [subDays(today, 7), today];
13822 }
13823 },
13824 {
13825 id: "last-30-days",
13826 label: (0, import_i18n41.__)("Last 30 days"),
13827 getValue: () => {
13828 const today = (0, import_date4.getDate)(null);
13829 return [subDays(today, 30), today];
13830 }
13831 },
13832 {
13833 id: "month-to-date",
13834 label: (0, import_i18n41.__)("Month to date"),
13835 getValue: () => {
13836 const today = (0, import_date4.getDate)(null);
13837 return [startOfMonth(today), today];
13838 }
13839 },
13840 {
13841 id: "last-year",
13842 label: (0, import_i18n41.__)("Last year"),
13843 getValue: () => {
13844 const today = (0, import_date4.getDate)(null);
13845 return [subYears(today, 1), today];
13846 }
13847 },
13848 {
13849 id: "year-to-date",
13850 label: (0, import_i18n41.__)("Year to date"),
13851 getValue: () => {
13852 const today = (0, import_date4.getDate)(null);
13853 return [startOfYear(today), today];
13854 }
13855 }
13856 ];
13857 var parseDate = (dateString) => {
13858 if (!dateString) {
13859 return null;
13860 }
13861 const parsed = (0, import_date4.getDate)(dateString);
13862 return parsed && isValid(parsed) ? parsed : null;
13863 };
13864 var formatDate = (date) => {
13865 if (!date) {
13866 return "";
13867 }
13868 return typeof date === "string" ? date : format(date, "yyyy-MM-dd");
13869 };
13870 function ValidatedDateControl({
13871 field,
13872 validity,
13873 inputRefs,
13874 isTouched,
13875 setIsTouched,
13876 children
13877 }) {
13878 const { isValid: isValid2 } = field;
13879 const [customValidity, setCustomValidity] = (0, import_element39.useState)(void 0);
13880 const validateRefs = (0, import_element39.useCallback)(() => {
13881 const refs = Array.isArray(inputRefs) ? inputRefs : [inputRefs];
13882 for (const ref of refs) {
13883 const input = ref.current;
13884 if (input && !input.validity.valid) {
13885 setCustomValidity({
13886 type: "invalid",
13887 message: input.validationMessage
13888 });
13889 return;
13890 }
13891 }
13892 setCustomValidity(void 0);
13893 }, [inputRefs]);
13894 (0, import_element39.useEffect)(() => {
13895 if (isTouched) {
13896 const timeoutId = setTimeout(() => {
13897 if (validity) {
13898 setCustomValidity(getCustomValidity(isValid2, validity));
13899 } else {
13900 validateRefs();
13901 }
13902 }, 0);
13903 return () => clearTimeout(timeoutId);
13904 }
13905 return void 0;
13906 }, [isTouched, isValid2, validity, validateRefs]);
13907 const onBlur = (event) => {
13908 if (isTouched) {
13909 return;
13910 }
13911 if (!event.relatedTarget || !event.currentTarget.contains(event.relatedTarget)) {
13912 setIsTouched(true);
13913 }
13914 };
13915 return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { onBlur, children: [
13916 children,
13917 /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { "aria-live": "polite", children: customValidity && /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(
13918 "p",
13919 {
13920 className: clsx_default(
13921 "components-validated-control__indicator",
13922 customValidity.type === "invalid" ? "is-invalid" : void 0,
13923 customValidity.type === "valid" ? "is-valid" : void 0
13924 ),
13925 children: [
13926 /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
13927 import_components34.Icon,
13928 {
13929 className: "components-validated-control__indicator-icon",
13930 icon: error_default,
13931 size: 16,
13932 fill: "currentColor"
13933 }
13934 ),
13935 customValidity.message
13936 ]
13937 }
13938 ) })
13939 ] });
13940 }
13941 function CalendarDateControl({
13942 data,
13943 field,
13944 onChange,
13945 hideLabelFromVision,
13946 validity
13947 }) {
13948 const {
13949 id,
13950 type,
13951 label,
13952 setValue,
13953 getValue,
13954 isValid: isValid2,
13955 format: fieldFormat
13956 } = field;
13957 const [selectedPresetId, setSelectedPresetId] = (0, import_element39.useState)(
13958 null
13959 );
13960 let weekStartsOn = (0, import_date4.getSettings)().l10n.startOfWeek;
13961 if (type === "date") {
13962 weekStartsOn = fieldFormat.weekStartsOn;
13963 }
13964 const fieldValue = getValue({ item: data });
13965 const value = typeof fieldValue === "string" ? fieldValue : void 0;
13966 const [calendarMonth, setCalendarMonth] = (0, import_element39.useState)(() => {
13967 const parsedDate = parseDate(value);
13968 return parsedDate || /* @__PURE__ */ new Date();
13969 });
13970 const [isTouched, setIsTouched] = (0, import_element39.useState)(false);
13971 const validityTargetRef = (0, import_element39.useRef)(null);
13972 const onChangeCallback = (0, import_element39.useCallback)(
13973 (newValue) => onChange(setValue({ item: data, value: newValue })),
13974 [data, onChange, setValue]
13975 );
13976 const onSelectDate = (0, import_element39.useCallback)(
13977 (newDate) => {
13978 const dateValue = newDate ? format(newDate, "yyyy-MM-dd") : void 0;
13979 onChangeCallback(dateValue);
13980 setSelectedPresetId(null);
13981 setIsTouched(true);
13982 },
13983 [onChangeCallback]
13984 );
13985 const handlePresetClick = (0, import_element39.useCallback)(
13986 (preset) => {
13987 const presetDate = preset.getValue();
13988 const dateValue = formatDate(presetDate);
13989 setCalendarMonth(presetDate);
13990 onChangeCallback(dateValue);
13991 setSelectedPresetId(preset.id);
13992 setIsTouched(true);
13993 },
13994 [onChangeCallback]
13995 );
13996 const handleManualDateChange = (0, import_element39.useCallback)(
13997 (newValue) => {
13998 onChangeCallback(newValue);
13999 if (newValue) {
14000 const parsedDate = parseDate(newValue);
14001 if (parsedDate) {
14002 setCalendarMonth(parsedDate);
14003 }
14004 }
14005 setSelectedPresetId(null);
14006 setIsTouched(true);
14007 },
14008 [onChangeCallback]
14009 );
14010 const {
14011 timezone: { string: timezoneString }
14012 } = (0, import_date4.getSettings)();
14013 const displayLabel = isValid2?.required ? `${label} (${(0, import_i18n41.__)("Required")})` : label;
14014 return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14015 ValidatedDateControl,
14016 {
14017 field,
14018 validity,
14019 inputRefs: validityTargetRef,
14020 isTouched,
14021 setIsTouched,
14022 children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14023 import_components34.BaseControl,
14024 {
14025 __nextHasNoMarginBottom: true,
14026 id,
14027 className: "dataviews-controls__date",
14028 label: displayLabel,
14029 hideLabelFromVision,
14030 children: /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(import_components34.__experimentalVStack, { spacing: 4, children: [
14031 /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(import_components34.__experimentalHStack, { spacing: 2, wrap: true, justify: "flex-start", children: [
14032 DATE_PRESETS.map((preset) => {
14033 const isSelected2 = selectedPresetId === preset.id;
14034 return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14035 import_components34.Button,
14036 {
14037 className: "dataviews-controls__date-preset",
14038 variant: "tertiary",
14039 isPressed: isSelected2,
14040 size: "small",
14041 onClick: () => handlePresetClick(preset),
14042 children: preset.label
14043 },
14044 preset.id
14045 );
14046 }),
14047 /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14048 import_components34.Button,
14049 {
14050 className: "dataviews-controls__date-preset",
14051 variant: "tertiary",
14052 isPressed: !selectedPresetId,
14053 size: "small",
14054 disabled: !!selectedPresetId,
14055 accessibleWhenDisabled: false,
14056 children: (0, import_i18n41.__)("Custom")
14057 }
14058 )
14059 ] }),
14060 /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14061 import_components34.__experimentalInputControl,
14062 {
14063 __next40pxDefaultSize: true,
14064 ref: validityTargetRef,
14065 type: "date",
14066 label: (0, import_i18n41.__)("Date"),
14067 hideLabelFromVision: true,
14068 value,
14069 onChange: handleManualDateChange,
14070 required: !!field.isValid?.required
14071 }
14072 ),
14073 /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14074 DateCalendar2,
14075 {
14076 style: { width: "100%" },
14077 selected: value ? parseDate(value) || void 0 : void 0,
14078 onSelect: onSelectDate,
14079 month: calendarMonth,
14080 onMonthChange: setCalendarMonth,
14081 timeZone: timezoneString || void 0,
14082 weekStartsOn
14083 }
14084 )
14085 ] })
14086 }
14087 )
14088 }
14089 );
14090 }
14091 function CalendarDateRangeControl({
14092 data,
14093 field,
14094 onChange,
14095 hideLabelFromVision,
14096 validity
14097 }) {
14098 const { id, type, label, getValue, setValue, format: fieldFormat } = field;
14099 let value;
14100 const fieldValue = getValue({ item: data });
14101 if (Array.isArray(fieldValue) && fieldValue.length === 2 && fieldValue.every((date) => typeof date === "string")) {
14102 value = fieldValue;
14103 }
14104 let weekStartsOn;
14105 if (type === "date") {
14106 weekStartsOn = fieldFormat.weekStartsOn;
14107 }
14108 const onChangeCallback = (0, import_element39.useCallback)(
14109 (newValue) => {
14110 onChange(
14111 setValue({
14112 item: data,
14113 value: newValue
14114 })
14115 );
14116 },
14117 [data, onChange, setValue]
14118 );
14119 const [selectedPresetId, setSelectedPresetId] = (0, import_element39.useState)(
14120 null
14121 );
14122 const selectedRange = (0, import_element39.useMemo)(() => {
14123 if (!value) {
14124 return { from: void 0, to: void 0 };
14125 }
14126 const [from, to] = value;
14127 return {
14128 from: parseDate(from) || void 0,
14129 to: parseDate(to) || void 0
14130 };
14131 }, [value]);
14132 const [calendarMonth, setCalendarMonth] = (0, import_element39.useState)(() => {
14133 return selectedRange.from || /* @__PURE__ */ new Date();
14134 });
14135 const [isTouched, setIsTouched] = (0, import_element39.useState)(false);
14136 const fromInputRef = (0, import_element39.useRef)(null);
14137 const toInputRef = (0, import_element39.useRef)(null);
14138 const updateDateRange = (0, import_element39.useCallback)(
14139 (fromDate, toDate2) => {
14140 if (fromDate && toDate2) {
14141 onChangeCallback([
14142 formatDate(fromDate),
14143 formatDate(toDate2)
14144 ]);
14145 } else if (!fromDate && !toDate2) {
14146 onChangeCallback(void 0);
14147 }
14148 },
14149 [onChangeCallback]
14150 );
14151 const onSelectCalendarRange = (0, import_element39.useCallback)(
14152 (newRange) => {
14153 updateDateRange(newRange?.from, newRange?.to);
14154 setSelectedPresetId(null);
14155 setIsTouched(true);
14156 },
14157 [updateDateRange]
14158 );
14159 const handlePresetClick = (0, import_element39.useCallback)(
14160 (preset) => {
14161 const [startDate, endDate] = preset.getValue();
14162 setCalendarMonth(startDate);
14163 updateDateRange(startDate, endDate);
14164 setSelectedPresetId(preset.id);
14165 setIsTouched(true);
14166 },
14167 [updateDateRange]
14168 );
14169 const handleManualDateChange = (0, import_element39.useCallback)(
14170 (fromOrTo, newValue) => {
14171 const [currentFrom, currentTo] = value || [
14172 void 0,
14173 void 0
14174 ];
14175 const updatedFrom = fromOrTo === "from" ? newValue : currentFrom;
14176 const updatedTo = fromOrTo === "to" ? newValue : currentTo;
14177 updateDateRange(updatedFrom, updatedTo);
14178 if (newValue) {
14179 const parsedDate = parseDate(newValue);
14180 if (parsedDate) {
14181 setCalendarMonth(parsedDate);
14182 }
14183 }
14184 setSelectedPresetId(null);
14185 setIsTouched(true);
14186 },
14187 [value, updateDateRange]
14188 );
14189 const { timezone } = (0, import_date4.getSettings)();
14190 const displayLabel = field.isValid?.required ? `${label} (${(0, import_i18n41.__)("Required")})` : label;
14191 return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14192 ValidatedDateControl,
14193 {
14194 field,
14195 validity,
14196 inputRefs: [fromInputRef, toInputRef],
14197 isTouched,
14198 setIsTouched,
14199 children: /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14200 import_components34.BaseControl,
14201 {
14202 __nextHasNoMarginBottom: true,
14203 id,
14204 className: "dataviews-controls__date",
14205 label: displayLabel,
14206 hideLabelFromVision,
14207 children: /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(import_components34.__experimentalVStack, { spacing: 4, children: [
14208 /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(import_components34.__experimentalHStack, { spacing: 2, wrap: true, justify: "flex-start", children: [
14209 DATE_RANGE_PRESETS.map((preset) => {
14210 const isSelected2 = selectedPresetId === preset.id;
14211 return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14212 import_components34.Button,
14213 {
14214 className: "dataviews-controls__date-preset",
14215 variant: "tertiary",
14216 isPressed: isSelected2,
14217 size: "small",
14218 onClick: () => handlePresetClick(preset),
14219 children: preset.label
14220 },
14221 preset.id
14222 );
14223 }),
14224 /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14225 import_components34.Button,
14226 {
14227 className: "dataviews-controls__date-preset",
14228 variant: "tertiary",
14229 isPressed: !selectedPresetId,
14230 size: "small",
14231 accessibleWhenDisabled: false,
14232 disabled: !!selectedPresetId,
14233 children: (0, import_i18n41.__)("Custom")
14234 }
14235 )
14236 ] }),
14237 /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(import_components34.__experimentalHStack, { spacing: 2, children: [
14238 /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14239 import_components34.__experimentalInputControl,
14240 {
14241 __next40pxDefaultSize: true,
14242 ref: fromInputRef,
14243 type: "date",
14244 label: (0, import_i18n41.__)("From"),
14245 hideLabelFromVision: true,
14246 value: value?.[0],
14247 onChange: (newValue) => handleManualDateChange("from", newValue),
14248 required: !!field.isValid?.required
14249 }
14250 ),
14251 /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14252 import_components34.__experimentalInputControl,
14253 {
14254 __next40pxDefaultSize: true,
14255 ref: toInputRef,
14256 type: "date",
14257 label: (0, import_i18n41.__)("To"),
14258 hideLabelFromVision: true,
14259 value: value?.[1],
14260 onChange: (newValue) => handleManualDateChange("to", newValue),
14261 required: !!field.isValid?.required
14262 }
14263 )
14264 ] }),
14265 /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14266 DateRangeCalendar,
14267 {
14268 style: { width: "100%" },
14269 selected: selectedRange,
14270 onSelect: onSelectCalendarRange,
14271 month: calendarMonth,
14272 onMonthChange: setCalendarMonth,
14273 timeZone: timezone.string || void 0,
14274 weekStartsOn
14275 }
14276 )
14277 ] })
14278 }
14279 )
14280 }
14281 );
14282 }
14283 function DateControl({
14284 data,
14285 field,
14286 onChange,
14287 hideLabelFromVision,
14288 operator,
14289 validity
14290 }) {
14291 if (operator === OPERATOR_IN_THE_PAST || operator === OPERATOR_OVER) {
14292 return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14293 RelativeDateControl,
14294 {
14295 className: "dataviews-controls__date",
14296 data,
14297 field,
14298 onChange,
14299 hideLabelFromVision,
14300 operator
14301 }
14302 );
14303 }
14304 if (operator === OPERATOR_BETWEEN) {
14305 return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14306 CalendarDateRangeControl,
14307 {
14308 data,
14309 field,
14310 onChange,
14311 hideLabelFromVision,
14312 validity
14313 }
14314 );
14315 }
14316 return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
14317 CalendarDateControl,
14318 {
14319 data,
14320 field,
14321 onChange,
14322 hideLabelFromVision,
14323 validity
14324 }
14325 );
14326 }
14327
14328 // packages/dataviews/build-module/dataform-controls/email.js
14329 var import_components36 = __toESM(require_components());
14330
14331 // packages/dataviews/build-module/dataform-controls/utils/validated-input.js
14332 var import_components35 = __toESM(require_components());
14333 var import_element40 = __toESM(require_element());
14334 var import_jsx_runtime78 = __toESM(require_jsx_runtime());
14335 var { ValidatedInputControl: ValidatedInputControl2 } = unlock(import_components35.privateApis);
14336 function ValidatedText({
14337 data,
14338 field,
14339 onChange,
14340 hideLabelFromVision,
14341 type,
14342 prefix,
14343 suffix,
14344 validity
14345 }) {
14346 const { label, placeholder, description, getValue, setValue, isValid: isValid2 } = field;
14347 const value = getValue({ item: data });
14348 const onChangeControl = (0, import_element40.useCallback)(
14349 (newValue) => onChange(
14350 setValue({
14351 item: data,
14352 value: newValue
14353 })
14354 ),
14355 [data, setValue, onChange]
14356 );
14357 return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
14358 ValidatedInputControl2,
14359 {
14360 required: !!isValid2.required,
14361 customValidity: getCustomValidity(isValid2, validity),
14362 label,
14363 placeholder,
14364 value: value ?? "",
14365 help: description,
14366 onChange: onChangeControl,
14367 hideLabelFromVision,
14368 type,
14369 prefix,
14370 suffix,
14371 pattern: isValid2.pattern ? isValid2.pattern.constraint : void 0,
14372 minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0,
14373 maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0,
14374 __next40pxDefaultSize: true
14375 }
14376 );
14377 }
14378
14379 // packages/dataviews/build-module/dataform-controls/email.js
14380 var import_jsx_runtime79 = __toESM(require_jsx_runtime());
14381 function Email({
14382 data,
14383 field,
14384 onChange,
14385 hideLabelFromVision,
14386 validity
14387 }) {
14388 return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
14389 ValidatedText,
14390 {
14391 ...{
14392 data,
14393 field,
14394 onChange,
14395 hideLabelFromVision,
14396 validity,
14397 type: "email",
14398 prefix: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_components36.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(import_components36.Icon, { icon: envelope_default }) })
14399 }
14400 }
14401 );
14402 }
14403
14404 // packages/dataviews/build-module/dataform-controls/telephone.js
14405 var import_components37 = __toESM(require_components());
14406 var import_jsx_runtime80 = __toESM(require_jsx_runtime());
14407 function Telephone({
14408 data,
14409 field,
14410 onChange,
14411 hideLabelFromVision,
14412 validity
14413 }) {
14414 return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
14415 ValidatedText,
14416 {
14417 ...{
14418 data,
14419 field,
14420 onChange,
14421 hideLabelFromVision,
14422 validity,
14423 type: "tel",
14424 prefix: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_components37.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(import_components37.Icon, { icon: mobile_default }) })
14425 }
14426 }
14427 );
14428 }
14429
14430 // packages/dataviews/build-module/dataform-controls/url.js
14431 var import_components38 = __toESM(require_components());
14432 var import_jsx_runtime81 = __toESM(require_jsx_runtime());
14433 function Url({
14434 data,
14435 field,
14436 onChange,
14437 hideLabelFromVision,
14438 validity
14439 }) {
14440 return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
14441 ValidatedText,
14442 {
14443 ...{
14444 data,
14445 field,
14446 onChange,
14447 hideLabelFromVision,
14448 validity,
14449 type: "url",
14450 prefix: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_components38.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_components38.Icon, { icon: link_default }) })
14451 }
14452 }
14453 );
14454 }
14455
14456 // packages/dataviews/build-module/dataform-controls/utils/validated-number.js
14457 var import_components39 = __toESM(require_components());
14458 var import_element41 = __toESM(require_element());
14459 var import_i18n42 = __toESM(require_i18n());
14460 var import_jsx_runtime82 = __toESM(require_jsx_runtime());
14461 var { ValidatedNumberControl } = unlock(import_components39.privateApis);
14462 function toNumberOrEmpty(value) {
14463 if (value === "" || value === void 0) {
14464 return "";
14465 }
14466 const number = Number(value);
14467 return Number.isFinite(number) ? number : "";
14468 }
14469 function BetweenControls({
14470 value,
14471 onChange,
14472 hideLabelFromVision,
14473 step
14474 }) {
14475 const [min = "", max = ""] = value;
14476 const onChangeMin = (0, import_element41.useCallback)(
14477 (newValue) => onChange([toNumberOrEmpty(newValue), max]),
14478 [onChange, max]
14479 );
14480 const onChangeMax = (0, import_element41.useCallback)(
14481 (newValue) => onChange([min, toNumberOrEmpty(newValue)]),
14482 [onChange, min]
14483 );
14484 return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
14485 import_components39.BaseControl,
14486 {
14487 __nextHasNoMarginBottom: true,
14488 help: (0, import_i18n42.__)("The max. value must be greater than the min. value."),
14489 children: /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(import_components39.Flex, { direction: "row", gap: 4, children: [
14490 /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
14491 import_components39.__experimentalNumberControl,
14492 {
14493 label: (0, import_i18n42.__)("Min."),
14494 value: min,
14495 max: max ? Number(max) - step : void 0,
14496 onChange: onChangeMin,
14497 __next40pxDefaultSize: true,
14498 hideLabelFromVision,
14499 step
14500 }
14501 ),
14502 /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
14503 import_components39.__experimentalNumberControl,
14504 {
14505 label: (0, import_i18n42.__)("Max."),
14506 value: max,
14507 min: min ? Number(min) + step : void 0,
14508 onChange: onChangeMax,
14509 __next40pxDefaultSize: true,
14510 hideLabelFromVision,
14511 step
14512 }
14513 )
14514 ] })
14515 }
14516 );
14517 }
14518 function ValidatedNumber({
14519 data,
14520 field,
14521 onChange,
14522 hideLabelFromVision,
14523 operator,
14524 decimals,
14525 validity
14526 }) {
14527 const step = Math.pow(10, Math.abs(decimals) * -1);
14528 const { label, description, getValue, setValue, isValid: isValid2 } = field;
14529 const value = getValue({ item: data }) ?? "";
14530 const onChangeControl = (0, import_element41.useCallback)(
14531 (newValue) => {
14532 onChange(
14533 setValue({
14534 item: data,
14535 // Do not convert an empty string or undefined to a number,
14536 // otherwise there's a mismatch between the UI control (empty)
14537 // and the data relied by onChange (0).
14538 value: ["", void 0].includes(newValue) ? void 0 : Number(newValue)
14539 })
14540 );
14541 },
14542 [data, onChange, setValue]
14543 );
14544 const onChangeBetweenControls = (0, import_element41.useCallback)(
14545 (newValue) => {
14546 onChange(
14547 setValue({
14548 item: data,
14549 value: newValue
14550 })
14551 );
14552 },
14553 [data, onChange, setValue]
14554 );
14555 if (operator === OPERATOR_BETWEEN) {
14556 let valueBetween = ["", ""];
14557 if (Array.isArray(value) && value.length === 2 && value.every(
14558 (element) => typeof element === "number" || element === ""
14559 )) {
14560 valueBetween = value;
14561 }
14562 return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
14563 BetweenControls,
14564 {
14565 value: valueBetween,
14566 onChange: onChangeBetweenControls,
14567 hideLabelFromVision,
14568 step
14569 }
14570 );
14571 }
14572 return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
14573 ValidatedNumberControl,
14574 {
14575 required: !!isValid2.required,
14576 customValidity: getCustomValidity(isValid2, validity),
14577 label,
14578 help: description,
14579 value,
14580 onChange: onChangeControl,
14581 __next40pxDefaultSize: true,
14582 hideLabelFromVision,
14583 step,
14584 min: isValid2.min ? isValid2.min.constraint : void 0,
14585 max: isValid2.max ? isValid2.max.constraint : void 0
14586 }
14587 );
14588 }
14589
14590 // packages/dataviews/build-module/dataform-controls/integer.js
14591 var import_jsx_runtime83 = __toESM(require_jsx_runtime());
14592 function Number2(props) {
14593 return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(ValidatedNumber, { ...props, decimals: 0 });
14594 }
14595
14596 // packages/dataviews/build-module/dataform-controls/number.js
14597 var import_jsx_runtime84 = __toESM(require_jsx_runtime());
14598 function Number3(props) {
14599 const decimals = props.field.format?.decimals ?? 2;
14600 return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(ValidatedNumber, { ...props, decimals });
14601 }
14602
14603 // packages/dataviews/build-module/dataform-controls/radio.js
14604 var import_components40 = __toESM(require_components());
14605 var import_element42 = __toESM(require_element());
14606 var import_jsx_runtime85 = __toESM(require_jsx_runtime());
14607 var { ValidatedRadioControl } = unlock(import_components40.privateApis);
14608 function Radio({
14609 data,
14610 field,
14611 onChange,
14612 hideLabelFromVision,
14613 validity
14614 }) {
14615 const { label, description, getValue, setValue, isValid: isValid2 } = field;
14616 const { elements, isLoading } = useElements({
14617 elements: field.elements,
14618 getElements: field.getElements
14619 });
14620 const value = getValue({ item: data });
14621 const onChangeControl = (0, import_element42.useCallback)(
14622 (newValue) => onChange(setValue({ item: data, value: newValue })),
14623 [data, onChange, setValue]
14624 );
14625 if (isLoading) {
14626 return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(import_components40.Spinner, {});
14627 }
14628 return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
14629 ValidatedRadioControl,
14630 {
14631 required: !!field.isValid?.required,
14632 customValidity: getCustomValidity(isValid2, validity),
14633 label,
14634 help: description,
14635 onChange: onChangeControl,
14636 options: elements,
14637 selected: value,
14638 hideLabelFromVision
14639 }
14640 );
14641 }
14642
14643 // packages/dataviews/build-module/dataform-controls/select.js
14644 var import_components41 = __toESM(require_components());
14645 var import_element43 = __toESM(require_element());
14646 var import_jsx_runtime86 = __toESM(require_jsx_runtime());
14647 var { ValidatedSelectControl } = unlock(import_components41.privateApis);
14648 function Select({
14649 data,
14650 field,
14651 onChange,
14652 hideLabelFromVision,
14653 validity
14654 }) {
14655 const { type, label, description, getValue, setValue, isValid: isValid2 } = field;
14656 const isMultiple = type === "array";
14657 const value = getValue({ item: data }) ?? (isMultiple ? [] : "");
14658 const onChangeControl = (0, import_element43.useCallback)(
14659 (newValue) => onChange(setValue({ item: data, value: newValue })),
14660 [data, onChange, setValue]
14661 );
14662 const { elements, isLoading } = useElements({
14663 elements: field.elements,
14664 getElements: field.getElements
14665 });
14666 if (isLoading) {
14667 return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(import_components41.Spinner, {});
14668 }
14669 return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
14670 ValidatedSelectControl,
14671 {
14672 required: !!field.isValid?.required,
14673 customValidity: getCustomValidity(isValid2, validity),
14674 label,
14675 value,
14676 help: description,
14677 options: elements,
14678 onChange: onChangeControl,
14679 __next40pxDefaultSize: true,
14680 __nextHasNoMarginBottom: true,
14681 hideLabelFromVision,
14682 multiple: isMultiple
14683 }
14684 );
14685 }
14686
14687 // packages/dataviews/build-module/dataform-controls/text.js
14688 var import_element44 = __toESM(require_element());
14689 var import_jsx_runtime87 = __toESM(require_jsx_runtime());
14690 function Text2({
14691 data,
14692 field,
14693 onChange,
14694 hideLabelFromVision,
14695 config,
14696 validity
14697 }) {
14698 const { prefix, suffix } = config || {};
14699 return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
14700 ValidatedText,
14701 {
14702 ...{
14703 data,
14704 field,
14705 onChange,
14706 hideLabelFromVision,
14707 validity,
14708 prefix: prefix ? (0, import_element44.createElement)(prefix) : void 0,
14709 suffix: suffix ? (0, import_element44.createElement)(suffix) : void 0
14710 }
14711 }
14712 );
14713 }
14714
14715 // packages/dataviews/build-module/dataform-controls/toggle.js
14716 var import_components42 = __toESM(require_components());
14717 var import_element45 = __toESM(require_element());
14718 var import_jsx_runtime88 = __toESM(require_jsx_runtime());
14719 var { ValidatedToggleControl } = unlock(import_components42.privateApis);
14720 function Toggle({
14721 field,
14722 onChange,
14723 data,
14724 hideLabelFromVision,
14725 validity
14726 }) {
14727 const { label, description, getValue, setValue, isValid: isValid2 } = field;
14728 const onChangeControl = (0, import_element45.useCallback)(() => {
14729 onChange(
14730 setValue({ item: data, value: !getValue({ item: data }) })
14731 );
14732 }, [onChange, setValue, data, getValue]);
14733 return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
14734 ValidatedToggleControl,
14735 {
14736 required: !!isValid2.required,
14737 customValidity: getCustomValidity(isValid2, validity),
14738 hidden: hideLabelFromVision,
14739 __nextHasNoMarginBottom: true,
14740 label,
14741 help: description,
14742 checked: getValue({ item: data }),
14743 onChange: onChangeControl
14744 }
14745 );
14746 }
14747
14748 // packages/dataviews/build-module/dataform-controls/textarea.js
14749 var import_components43 = __toESM(require_components());
14750 var import_element46 = __toESM(require_element());
14751 var import_jsx_runtime89 = __toESM(require_jsx_runtime());
14752 var { ValidatedTextareaControl } = unlock(import_components43.privateApis);
14753 function Textarea({
14754 data,
14755 field,
14756 onChange,
14757 hideLabelFromVision,
14758 config,
14759 validity
14760 }) {
14761 const { rows = 4 } = config || {};
14762 const { label, placeholder, description, setValue, isValid: isValid2 } = field;
14763 const value = field.getValue({ item: data });
14764 const onChangeControl = (0, import_element46.useCallback)(
14765 (newValue) => onChange(setValue({ item: data, value: newValue })),
14766 [data, onChange, setValue]
14767 );
14768 return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
14769 ValidatedTextareaControl,
14770 {
14771 required: !!isValid2.required,
14772 customValidity: getCustomValidity(isValid2, validity),
14773 label,
14774 placeholder,
14775 value: value ?? "",
14776 help: description,
14777 onChange: onChangeControl,
14778 rows,
14779 minLength: isValid2.minLength ? isValid2.minLength.constraint : void 0,
14780 maxLength: isValid2.maxLength ? isValid2.maxLength.constraint : void 0,
14781 __next40pxDefaultSize: true,
14782 __nextHasNoMarginBottom: true,
14783 hideLabelFromVision
14784 }
14785 );
14786 }
14787
14788 // packages/dataviews/build-module/dataform-controls/toggle-group.js
14789 var import_components44 = __toESM(require_components());
14790 var import_element47 = __toESM(require_element());
14791 var import_jsx_runtime90 = __toESM(require_jsx_runtime());
14792 var { ValidatedToggleGroupControl } = unlock(import_components44.privateApis);
14793 function ToggleGroup({
14794 data,
14795 field,
14796 onChange,
14797 hideLabelFromVision,
14798 validity
14799 }) {
14800 const { getValue, setValue, isValid: isValid2 } = field;
14801 const value = getValue({ item: data });
14802 const onChangeControl = (0, import_element47.useCallback)(
14803 (newValue) => onChange(setValue({ item: data, value: newValue })),
14804 [data, onChange, setValue]
14805 );
14806 const { elements, isLoading } = useElements({
14807 elements: field.elements,
14808 getElements: field.getElements
14809 });
14810 if (isLoading) {
14811 return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(import_components44.Spinner, {});
14812 }
14813 if (elements.length === 0) {
14814 return null;
14815 }
14816 const selectedOption = elements.find((el) => el.value === value);
14817 return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
14818 ValidatedToggleGroupControl,
14819 {
14820 required: !!field.isValid?.required,
14821 customValidity: getCustomValidity(isValid2, validity),
14822 __next40pxDefaultSize: true,
14823 __nextHasNoMarginBottom: true,
14824 isBlock: true,
14825 label: field.label,
14826 help: selectedOption?.description || field.description,
14827 onChange: onChangeControl,
14828 value,
14829 hideLabelFromVision,
14830 children: elements.map((el) => /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
14831 import_components44.__experimentalToggleGroupControlOption,
14832 {
14833 label: el.label,
14834 value: el.value
14835 },
14836 el.value
14837 ))
14838 }
14839 );
14840 }
14841
14842 // packages/dataviews/build-module/dataform-controls/array.js
14843 var import_components45 = __toESM(require_components());
14844 var import_element48 = __toESM(require_element());
14845 var import_jsx_runtime91 = __toESM(require_jsx_runtime());
14846 var { ValidatedFormTokenField } = unlock(import_components45.privateApis);
14847 function ArrayControl({
14848 data,
14849 field,
14850 onChange,
14851 hideLabelFromVision,
14852 validity
14853 }) {
14854 const { label, placeholder, getValue, setValue, isValid: isValid2 } = field;
14855 const value = getValue({ item: data });
14856 const { elements, isLoading } = useElements({
14857 elements: field.elements,
14858 getElements: field.getElements
14859 });
14860 const arrayValueAsElements = (0, import_element48.useMemo)(
14861 () => Array.isArray(value) ? value.map((token) => {
14862 const element = elements?.find(
14863 (suggestion) => suggestion.value === token
14864 );
14865 return element || { value: token, label: token };
14866 }) : [],
14867 [value, elements]
14868 );
14869 const onChangeControl = (0, import_element48.useCallback)(
14870 (tokens) => {
14871 const valueTokens = tokens.map((token) => {
14872 if (typeof token === "object" && "value" in token) {
14873 return token.value;
14874 }
14875 return token;
14876 });
14877 onChange(setValue({ item: data, value: valueTokens }));
14878 },
14879 [onChange, setValue, data]
14880 );
14881 if (isLoading) {
14882 return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(import_components45.Spinner, {});
14883 }
14884 return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
14885 ValidatedFormTokenField,
14886 {
14887 required: !!isValid2?.required,
14888 customValidity: getCustomValidity(isValid2, validity),
14889 label: hideLabelFromVision ? void 0 : label,
14890 value: arrayValueAsElements,
14891 onChange: onChangeControl,
14892 placeholder,
14893 suggestions: elements?.map((element) => element.value),
14894 __experimentalValidateInput: (token) => {
14895 if (field.isValid?.elements && elements) {
14896 return elements.some(
14897 (element) => element.value === token || element.label === token
14898 );
14899 }
14900 return true;
14901 },
14902 __experimentalExpandOnFocus: elements && elements.length > 0,
14903 __experimentalShowHowTo: !field.isValid?.elements,
14904 displayTransform: (token) => {
14905 if (typeof token === "object" && "label" in token) {
14906 return token.label;
14907 }
14908 if (typeof token === "string" && elements) {
14909 const element = elements.find(
14910 (el) => el.value === token
14911 );
14912 return element?.label || token;
14913 }
14914 return token;
14915 },
14916 __experimentalRenderItem: ({ item }) => {
14917 if (typeof item === "string" && elements) {
14918 const element = elements.find(
14919 (el) => el.value === item
14920 );
14921 return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { children: element?.label || item });
14922 }
14923 return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { children: item });
14924 }
14925 }
14926 );
14927 }
14928
14929 // node_modules/colord/index.mjs
14930 var r2 = { grad: 0.9, turn: 360, rad: 360 / (2 * Math.PI) };
14931 var t = function(r3) {
14932 return "string" == typeof r3 ? r3.length > 0 : "number" == typeof r3;
14933 };
14934 var n = function(r3, t2, n2) {
14935 return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = Math.pow(10, t2)), Math.round(n2 * r3) / n2 + 0;
14936 };
14937 var e = function(r3, t2, n2) {
14938 return void 0 === t2 && (t2 = 0), void 0 === n2 && (n2 = 1), r3 > n2 ? n2 : r3 > t2 ? r3 : t2;
14939 };
14940 var u = function(r3) {
14941 return (r3 = isFinite(r3) ? r3 % 360 : 0) > 0 ? r3 : r3 + 360;
14942 };
14943 var a = function(r3) {
14944 return { r: e(r3.r, 0, 255), g: e(r3.g, 0, 255), b: e(r3.b, 0, 255), a: e(r3.a) };
14945 };
14946 var o = function(r3) {
14947 return { r: n(r3.r), g: n(r3.g), b: n(r3.b), a: n(r3.a, 3) };
14948 };
14949 var i = /^#([0-9a-f]{3,8})$/i;
14950 var s = function(r3) {
14951 var t2 = r3.toString(16);
14952 return t2.length < 2 ? "0" + t2 : t2;
14953 };
14954 var h = function(r3) {
14955 var t2 = r3.r, n2 = r3.g, e2 = r3.b, u2 = r3.a, a2 = Math.max(t2, n2, e2), o2 = a2 - Math.min(t2, n2, e2), i2 = o2 ? a2 === t2 ? (n2 - e2) / o2 : a2 === n2 ? 2 + (e2 - t2) / o2 : 4 + (t2 - n2) / o2 : 0;
14956 return { h: 60 * (i2 < 0 ? i2 + 6 : i2), s: a2 ? o2 / a2 * 100 : 0, v: a2 / 255 * 100, a: u2 };
14957 };
14958 var b = function(r3) {
14959 var t2 = r3.h, n2 = r3.s, e2 = r3.v, u2 = r3.a;
14960 t2 = t2 / 360 * 6, n2 /= 100, e2 /= 100;
14961 var a2 = Math.floor(t2), o2 = e2 * (1 - n2), i2 = e2 * (1 - (t2 - a2) * n2), s2 = e2 * (1 - (1 - t2 + a2) * n2), h2 = a2 % 6;
14962 return { r: 255 * [e2, i2, o2, o2, s2, e2][h2], g: 255 * [s2, e2, e2, i2, o2, o2][h2], b: 255 * [o2, o2, s2, e2, e2, i2][h2], a: u2 };
14963 };
14964 var g = function(r3) {
14965 return { h: u(r3.h), s: e(r3.s, 0, 100), l: e(r3.l, 0, 100), a: e(r3.a) };
14966 };
14967 var d = function(r3) {
14968 return { h: n(r3.h), s: n(r3.s), l: n(r3.l), a: n(r3.a, 3) };
14969 };
14970 var f = function(r3) {
14971 return b((n2 = (t2 = r3).s, { h: t2.h, s: (n2 *= ((e2 = t2.l) < 50 ? e2 : 100 - e2) / 100) > 0 ? 2 * n2 / (e2 + n2) * 100 : 0, v: e2 + n2, a: t2.a }));
14972 var t2, n2, e2;
14973 };
14974 var c = function(r3) {
14975 return { h: (t2 = h(r3)).h, s: (u2 = (200 - (n2 = t2.s)) * (e2 = t2.v) / 100) > 0 && u2 < 200 ? n2 * e2 / 100 / (u2 <= 100 ? u2 : 200 - u2) * 100 : 0, l: u2 / 2, a: t2.a };
14976 var t2, n2, e2, u2;
14977 };
14978 var l = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i;
14979 var p = /^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i;
14980 var v = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i;
14981 var m = /^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i;
14982 var y = { string: [[function(r3) {
14983 var t2 = i.exec(r3);
14984 return t2 ? (r3 = t2[1]).length <= 4 ? { r: parseInt(r3[0] + r3[0], 16), g: parseInt(r3[1] + r3[1], 16), b: parseInt(r3[2] + r3[2], 16), a: 4 === r3.length ? n(parseInt(r3[3] + r3[3], 16) / 255, 2) : 1 } : 6 === r3.length || 8 === r3.length ? { r: parseInt(r3.substr(0, 2), 16), g: parseInt(r3.substr(2, 2), 16), b: parseInt(r3.substr(4, 2), 16), a: 8 === r3.length ? n(parseInt(r3.substr(6, 2), 16) / 255, 2) : 1 } : null : null;
14985 }, "hex"], [function(r3) {
14986 var t2 = v.exec(r3) || m.exec(r3);
14987 return t2 ? t2[2] !== t2[4] || t2[4] !== t2[6] ? null : a({ r: Number(t2[1]) / (t2[2] ? 100 / 255 : 1), g: Number(t2[3]) / (t2[4] ? 100 / 255 : 1), b: Number(t2[5]) / (t2[6] ? 100 / 255 : 1), a: void 0 === t2[7] ? 1 : Number(t2[7]) / (t2[8] ? 100 : 1) }) : null;
14988 }, "rgb"], [function(t2) {
14989 var n2 = l.exec(t2) || p.exec(t2);
14990 if (!n2) return null;
14991 var e2, u2, a2 = g({ h: (e2 = n2[1], u2 = n2[2], void 0 === u2 && (u2 = "deg"), Number(e2) * (r2[u2] || 1)), s: Number(n2[3]), l: Number(n2[4]), a: void 0 === n2[5] ? 1 : Number(n2[5]) / (n2[6] ? 100 : 1) });
14992 return f(a2);
14993 }, "hsl"]], object: [[function(r3) {
14994 var n2 = r3.r, e2 = r3.g, u2 = r3.b, o2 = r3.a, i2 = void 0 === o2 ? 1 : o2;
14995 return t(n2) && t(e2) && t(u2) ? a({ r: Number(n2), g: Number(e2), b: Number(u2), a: Number(i2) }) : null;
14996 }, "rgb"], [function(r3) {
14997 var n2 = r3.h, e2 = r3.s, u2 = r3.l, a2 = r3.a, o2 = void 0 === a2 ? 1 : a2;
14998 if (!t(n2) || !t(e2) || !t(u2)) return null;
14999 var i2 = g({ h: Number(n2), s: Number(e2), l: Number(u2), a: Number(o2) });
15000 return f(i2);
15001 }, "hsl"], [function(r3) {
15002 var n2 = r3.h, a2 = r3.s, o2 = r3.v, i2 = r3.a, s2 = void 0 === i2 ? 1 : i2;
15003 if (!t(n2) || !t(a2) || !t(o2)) return null;
15004 var h2 = (function(r4) {
15005 return { h: u(r4.h), s: e(r4.s, 0, 100), v: e(r4.v, 0, 100), a: e(r4.a) };
15006 })({ h: Number(n2), s: Number(a2), v: Number(o2), a: Number(s2) });
15007 return b(h2);
15008 }, "hsv"]] };
15009 var N = function(r3, t2) {
15010 for (var n2 = 0; n2 < t2.length; n2++) {
15011 var e2 = t2[n2][0](r3);
15012 if (e2) return [e2, t2[n2][1]];
15013 }
15014 return [null, void 0];
15015 };
15016 var x = function(r3) {
15017 return "string" == typeof r3 ? N(r3.trim(), y.string) : "object" == typeof r3 && null !== r3 ? N(r3, y.object) : [null, void 0];
15018 };
15019 var M = function(r3, t2) {
15020 var n2 = c(r3);
15021 return { h: n2.h, s: e(n2.s + 100 * t2, 0, 100), l: n2.l, a: n2.a };
15022 };
15023 var H = function(r3) {
15024 return (299 * r3.r + 587 * r3.g + 114 * r3.b) / 1e3 / 255;
15025 };
15026 var $ = function(r3, t2) {
15027 var n2 = c(r3);
15028 return { h: n2.h, s: n2.s, l: e(n2.l + 100 * t2, 0, 100), a: n2.a };
15029 };
15030 var j = (function() {
15031 function r3(r4) {
15032 this.parsed = x(r4)[0], this.rgba = this.parsed || { r: 0, g: 0, b: 0, a: 1 };
15033 }
15034 return r3.prototype.isValid = function() {
15035 return null !== this.parsed;
15036 }, r3.prototype.brightness = function() {
15037 return n(H(this.rgba), 2);
15038 }, r3.prototype.isDark = function() {
15039 return H(this.rgba) < 0.5;
15040 }, r3.prototype.isLight = function() {
15041 return H(this.rgba) >= 0.5;
15042 }, r3.prototype.toHex = function() {
15043 return r4 = o(this.rgba), t2 = r4.r, e2 = r4.g, u2 = r4.b, i2 = (a2 = r4.a) < 1 ? s(n(255 * a2)) : "", "#" + s(t2) + s(e2) + s(u2) + i2;
15044 var r4, t2, e2, u2, a2, i2;
15045 }, r3.prototype.toRgb = function() {
15046 return o(this.rgba);
15047 }, r3.prototype.toRgbString = function() {
15048 return r4 = o(this.rgba), t2 = r4.r, n2 = r4.g, e2 = r4.b, (u2 = r4.a) < 1 ? "rgba(" + t2 + ", " + n2 + ", " + e2 + ", " + u2 + ")" : "rgb(" + t2 + ", " + n2 + ", " + e2 + ")";
15049 var r4, t2, n2, e2, u2;
15050 }, r3.prototype.toHsl = function() {
15051 return d(c(this.rgba));
15052 }, r3.prototype.toHslString = function() {
15053 return r4 = d(c(this.rgba)), t2 = r4.h, n2 = r4.s, e2 = r4.l, (u2 = r4.a) < 1 ? "hsla(" + t2 + ", " + n2 + "%, " + e2 + "%, " + u2 + ")" : "hsl(" + t2 + ", " + n2 + "%, " + e2 + "%)";
15054 var r4, t2, n2, e2, u2;
15055 }, r3.prototype.toHsv = function() {
15056 return r4 = h(this.rgba), { h: n(r4.h), s: n(r4.s), v: n(r4.v), a: n(r4.a, 3) };
15057 var r4;
15058 }, r3.prototype.invert = function() {
15059 return w({ r: 255 - (r4 = this.rgba).r, g: 255 - r4.g, b: 255 - r4.b, a: r4.a });
15060 var r4;
15061 }, r3.prototype.saturate = function(r4) {
15062 return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, r4));
15063 }, r3.prototype.desaturate = function(r4) {
15064 return void 0 === r4 && (r4 = 0.1), w(M(this.rgba, -r4));
15065 }, r3.prototype.grayscale = function() {
15066 return w(M(this.rgba, -1));
15067 }, r3.prototype.lighten = function(r4) {
15068 return void 0 === r4 && (r4 = 0.1), w($(this.rgba, r4));
15069 }, r3.prototype.darken = function(r4) {
15070 return void 0 === r4 && (r4 = 0.1), w($(this.rgba, -r4));
15071 }, r3.prototype.rotate = function(r4) {
15072 return void 0 === r4 && (r4 = 15), this.hue(this.hue() + r4);
15073 }, r3.prototype.alpha = function(r4) {
15074 return "number" == typeof r4 ? w({ r: (t2 = this.rgba).r, g: t2.g, b: t2.b, a: r4 }) : n(this.rgba.a, 3);
15075 var t2;
15076 }, r3.prototype.hue = function(r4) {
15077 var t2 = c(this.rgba);
15078 return "number" == typeof r4 ? w({ h: r4, s: t2.s, l: t2.l, a: t2.a }) : n(t2.h);
15079 }, r3.prototype.isEqual = function(r4) {
15080 return this.toHex() === w(r4).toHex();
15081 }, r3;
15082 })();
15083 var w = function(r3) {
15084 return r3 instanceof j ? r3 : new j(r3);
15085 };
15086
15087 // packages/dataviews/build-module/dataform-controls/color.js
15088 var import_components46 = __toESM(require_components());
15089 var import_element49 = __toESM(require_element());
15090 var import_jsx_runtime92 = __toESM(require_jsx_runtime());
15091 var { ValidatedInputControl: ValidatedInputControl3, Picker } = unlock(import_components46.privateApis);
15092 var ColorPicker = ({
15093 color,
15094 onColorChange
15095 }) => {
15096 const validColor = color && w(color).isValid() ? color : "#ffffff";
15097 return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
15098 import_components46.Dropdown,
15099 {
15100 renderToggle: ({ onToggle, isOpen }) => /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(import_components46.__experimentalInputControlPrefixWrapper, { variant: "icon", children: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
15101 "button",
15102 {
15103 type: "button",
15104 onClick: onToggle,
15105 style: {
15106 width: "24px",
15107 height: "24px",
15108 borderRadius: "50%",
15109 backgroundColor: validColor,
15110 border: "1px solid #ddd",
15111 cursor: "pointer",
15112 outline: isOpen ? "2px solid #007cba" : "none",
15113 outlineOffset: "2px",
15114 display: "flex",
15115 alignItems: "center",
15116 justifyContent: "center",
15117 padding: 0,
15118 margin: 0
15119 },
15120 "aria-label": "Open color picker"
15121 }
15122 ) }),
15123 renderContent: () => /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("div", { style: { padding: "16px" }, children: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
15124 Picker,
15125 {
15126 color: w(validColor),
15127 onChange: onColorChange,
15128 enableAlpha: true
15129 }
15130 ) })
15131 }
15132 );
15133 };
15134 function Color({
15135 data,
15136 field,
15137 onChange,
15138 hideLabelFromVision,
15139 validity
15140 }) {
15141 const { label, placeholder, description, setValue, isValid: isValid2 } = field;
15142 const value = field.getValue({ item: data }) || "";
15143 const handleColorChange = (0, import_element49.useCallback)(
15144 (colorObject) => {
15145 onChange(setValue({ item: data, value: colorObject.toHex() }));
15146 },
15147 [data, onChange, setValue]
15148 );
15149 const handleInputChange = (0, import_element49.useCallback)(
15150 (newValue) => {
15151 onChange(setValue({ item: data, value: newValue || "" }));
15152 },
15153 [data, onChange, setValue]
15154 );
15155 return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
15156 ValidatedInputControl3,
15157 {
15158 required: !!field.isValid?.required,
15159 customValidity: getCustomValidity(isValid2, validity),
15160 label,
15161 placeholder,
15162 value,
15163 help: description,
15164 onChange: handleInputChange,
15165 hideLabelFromVision,
15166 type: "text",
15167 prefix: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
15168 ColorPicker,
15169 {
15170 color: value,
15171 onColorChange: handleColorChange
15172 }
15173 )
15174 }
15175 );
15176 }
15177
15178 // packages/dataviews/build-module/dataform-controls/password.js
15179 var import_components47 = __toESM(require_components());
15180 var import_element50 = __toESM(require_element());
15181 var import_i18n43 = __toESM(require_i18n());
15182 var import_jsx_runtime93 = __toESM(require_jsx_runtime());
15183 function Password({
15184 data,
15185 field,
15186 onChange,
15187 hideLabelFromVision,
15188 validity
15189 }) {
15190 const [isVisible2, setIsVisible] = (0, import_element50.useState)(false);
15191 const toggleVisibility = (0, import_element50.useCallback)(() => {
15192 setIsVisible((prev) => !prev);
15193 }, []);
15194 return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
15195 ValidatedText,
15196 {
15197 ...{
15198 data,
15199 field,
15200 onChange,
15201 hideLabelFromVision,
15202 validity,
15203 type: isVisible2 ? "text" : "password",
15204 suffix: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(import_components47.__experimentalInputControlSuffixWrapper, { variant: "control", children: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
15205 import_components47.Button,
15206 {
15207 icon: isVisible2 ? unseen_default : seen_default,
15208 onClick: toggleVisibility,
15209 size: "small",
15210 label: isVisible2 ? (0, import_i18n43.__)("Hide password") : (0, import_i18n43.__)("Show password")
15211 }
15212 ) })
15213 }
15214 }
15215 );
15216 }
15217
15218 // packages/dataviews/build-module/field-types/utils/has-elements.js
15219 function hasElements(field) {
15220 return Array.isArray(field.elements) && field.elements.length > 0 || typeof field.getElements === "function";
15221 }
15222
15223 // packages/dataviews/build-module/dataform-controls/index.js
15224 var import_jsx_runtime94 = __toESM(require_jsx_runtime());
15225 var FORM_CONTROLS = {
15226 array: ArrayControl,
15227 checkbox: Checkbox,
15228 color: Color,
15229 datetime: DateTime,
15230 date: DateControl,
15231 email: Email,
15232 telephone: Telephone,
15233 url: Url,
15234 integer: Number2,
15235 number: Number3,
15236 password: Password,
15237 radio: Radio,
15238 select: Select,
15239 text: Text2,
15240 toggle: Toggle,
15241 textarea: Textarea,
15242 toggleGroup: ToggleGroup
15243 };
15244 function isEditConfig(value) {
15245 return value && typeof value === "object" && typeof value.control === "string";
15246 }
15247 function createConfiguredControl(config) {
15248 const { control, ...controlConfig } = config;
15249 const BaseControlType = getControlByType(control);
15250 if (BaseControlType === null) {
15251 return null;
15252 }
15253 return function ConfiguredControl(props) {
15254 return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(BaseControlType, { ...props, config: controlConfig });
15255 };
15256 }
15257 function getControl(field, fallback) {
15258 if (typeof field.Edit === "function") {
15259 return field.Edit;
15260 }
15261 if (typeof field.Edit === "string") {
15262 return getControlByType(field.Edit);
15263 }
15264 if (isEditConfig(field.Edit)) {
15265 return createConfiguredControl(field.Edit);
15266 }
15267 if (hasElements(field) && field.type !== "array") {
15268 return getControlByType("select");
15269 }
15270 if (fallback === null) {
15271 return null;
15272 }
15273 return getControlByType(fallback);
15274 }
15275 function getControlByType(type) {
15276 if (Object.keys(FORM_CONTROLS).includes(type)) {
15277 return FORM_CONTROLS[type];
15278 }
15279 return null;
15280 }
15281
15282 // packages/dataviews/build-module/field-types/utils/get-filter-by.js
15283 function getFilterBy(field, defaultOperators, validOperators) {
15284 if (field.filterBy === false) {
15285 return false;
15286 }
15287 const operators = field.filterBy?.operators?.filter(
15288 (op) => validOperators.includes(op)
15289 ) ?? defaultOperators;
15290 if (operators.length === 0) {
15291 return false;
15292 }
15293 return {
15294 isPrimary: !!field.filterBy?.isPrimary,
15295 operators
15296 };
15297 }
15298 var get_filter_by_default = getFilterBy;
15299
15300 // packages/dataviews/build-module/field-types/utils/get-value-from-id.js
15301 var getValueFromId = (id) => ({ item }) => {
15302 const path = id.split(".");
15303 let value = item;
15304 for (const segment of path) {
15305 if (value.hasOwnProperty(segment)) {
15306 value = value[segment];
15307 } else {
15308 value = void 0;
15309 }
15310 }
15311 return value;
15312 };
15313 var get_value_from_id_default = getValueFromId;
15314
15315 // packages/dataviews/build-module/field-types/utils/set-value-from-id.js
15316 var setValueFromId = (id) => ({ value }) => {
15317 const path = id.split(".");
15318 const result = {};
15319 let current = result;
15320 for (const segment of path.slice(0, -1)) {
15321 current[segment] = {};
15322 current = current[segment];
15323 }
15324 current[path.at(-1)] = value;
15325 return result;
15326 };
15327 var set_value_from_id_default = setValueFromId;
15328
15329 // packages/dataviews/build-module/field-types/email.js
15330 var import_i18n44 = __toESM(require_i18n());
15331
15332 // packages/dataviews/build-module/field-types/utils/render-default.js
15333 var import_jsx_runtime95 = __toESM(require_jsx_runtime());
15334 function render3({
15335 item,
15336 field
15337 }) {
15338 return field.hasElements ? /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(RenderFromElements, { item, field }) : field.getValue({ item });
15339 }
15340
15341 // packages/dataviews/build-module/field-types/utils/sort-text.js
15342 var sort_text_default = (a2, b2, direction) => {
15343 return direction === "asc" ? a2.localeCompare(b2) : b2.localeCompare(a2);
15344 };
15345
15346 // packages/dataviews/build-module/field-types/utils/is-valid-min-length.js
15347 function isValidMinLength(item, field) {
15348 if (typeof field.isValid.minLength?.constraint !== "number") {
15349 return false;
15350 }
15351 const value = field.getValue({ item });
15352 if ([void 0, "", null].includes(value)) {
15353 return true;
15354 }
15355 return String(value).length >= field.isValid.minLength.constraint;
15356 }
15357
15358 // packages/dataviews/build-module/field-types/utils/is-valid-max-length.js
15359 function isValidMaxLength(item, field) {
15360 if (typeof field.isValid.maxLength?.constraint !== "number") {
15361 return false;
15362 }
15363 const value = field.getValue({ item });
15364 if ([void 0, "", null].includes(value)) {
15365 return true;
15366 }
15367 return String(value).length <= field.isValid.maxLength.constraint;
15368 }
15369
15370 // packages/dataviews/build-module/field-types/utils/is-valid-pattern.js
15371 function isValidPattern(item, field) {
15372 if (field.isValid.pattern?.constraint === void 0) {
15373 return true;
15374 }
15375 try {
15376 const regexp = new RegExp(field.isValid.pattern.constraint);
15377 const value = field.getValue({ item });
15378 if ([void 0, "", null].includes(value)) {
15379 return true;
15380 }
15381 return regexp.test(String(value));
15382 } catch {
15383 return false;
15384 }
15385 }
15386
15387 // packages/dataviews/build-module/field-types/email.js
15388 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])?)*$/;
15389 function isValidCustom3(item, field) {
15390 const value = field.getValue({ item });
15391 if (![void 0, "", null].includes(value) && !emailRegex.test(value)) {
15392 return (0, import_i18n44.__)("Value must be a valid email address.");
15393 }
15394 return null;
15395 }
15396 var email_default = {
15397 type: "email",
15398 render: render3,
15399 Edit: "email",
15400 sort: sort_text_default,
15401 enableSorting: true,
15402 enableGlobalSearch: false,
15403 defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
15404 validOperators: [
15405 OPERATOR_IS,
15406 OPERATOR_IS_NOT,
15407 OPERATOR_CONTAINS,
15408 OPERATOR_NOT_CONTAINS,
15409 OPERATOR_STARTS_WITH,
15410 // Multiple selection
15411 OPERATOR_IS_ANY,
15412 OPERATOR_IS_NONE,
15413 OPERATOR_IS_ALL,
15414 OPERATOR_IS_NOT_ALL
15415 ],
15416 getFormat: () => ({}),
15417 validate: {
15418 required: isValidRequired,
15419 pattern: isValidPattern,
15420 minLength: isValidMinLength,
15421 maxLength: isValidMaxLength,
15422 elements: isValidElements,
15423 custom: isValidCustom3
15424 }
15425 };
15426
15427 // packages/dataviews/build-module/field-types/text.js
15428 var text_default = {
15429 type: "text",
15430 render: render3,
15431 Edit: "text",
15432 sort: sort_text_default,
15433 enableSorting: true,
15434 enableGlobalSearch: false,
15435 defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
15436 validOperators: [
15437 // Single selection
15438 OPERATOR_IS,
15439 OPERATOR_IS_NOT,
15440 OPERATOR_CONTAINS,
15441 OPERATOR_NOT_CONTAINS,
15442 OPERATOR_STARTS_WITH,
15443 // Multiple selection
15444 OPERATOR_IS_ANY,
15445 OPERATOR_IS_NONE,
15446 OPERATOR_IS_ALL,
15447 OPERATOR_IS_NOT_ALL
15448 ],
15449 getFormat: () => ({}),
15450 validate: {
15451 required: isValidRequired,
15452 pattern: isValidPattern,
15453 minLength: isValidMinLength,
15454 maxLength: isValidMaxLength,
15455 elements: isValidElements
15456 }
15457 };
15458
15459 // packages/dataviews/build-module/field-types/datetime.js
15460 var import_jsx_runtime96 = __toESM(require_jsx_runtime());
15461 function render4({ item, field }) {
15462 if (field.elements) {
15463 return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(RenderFromElements, { item, field });
15464 }
15465 const value = field.getValue({ item });
15466 if (["", void 0, null].includes(value)) {
15467 return null;
15468 }
15469 try {
15470 const dateValue = parseDateTime(value);
15471 return dateValue?.toLocaleString();
15472 } catch (error) {
15473 return null;
15474 }
15475 }
15476 var sort = (a2, b2, direction) => {
15477 const timeA = new Date(a2).getTime();
15478 const timeB = new Date(b2).getTime();
15479 return direction === "asc" ? timeA - timeB : timeB - timeA;
15480 };
15481 var datetime_default = {
15482 type: "datetime",
15483 render: render4,
15484 Edit: "datetime",
15485 sort,
15486 enableSorting: true,
15487 enableGlobalSearch: false,
15488 defaultOperators: [
15489 OPERATOR_ON,
15490 OPERATOR_NOT_ON,
15491 OPERATOR_BEFORE,
15492 OPERATOR_AFTER,
15493 OPERATOR_BEFORE_INC,
15494 OPERATOR_AFTER_INC,
15495 OPERATOR_IN_THE_PAST,
15496 OPERATOR_OVER
15497 ],
15498 validOperators: [
15499 OPERATOR_ON,
15500 OPERATOR_NOT_ON,
15501 OPERATOR_BEFORE,
15502 OPERATOR_AFTER,
15503 OPERATOR_BEFORE_INC,
15504 OPERATOR_AFTER_INC,
15505 OPERATOR_IN_THE_PAST,
15506 OPERATOR_OVER
15507 ],
15508 getFormat: () => ({}),
15509 validate: {
15510 required: isValidRequired,
15511 elements: isValidElements
15512 }
15513 };
15514
15515 // packages/dataviews/build-module/field-types/date.js
15516 var import_date6 = __toESM(require_date());
15517 var import_jsx_runtime97 = __toESM(require_jsx_runtime());
15518 function getFormat3(field) {
15519 const fieldFormat = field.format;
15520 return {
15521 date: fieldFormat?.date !== void 0 && typeof fieldFormat.date === "string" ? fieldFormat.date : (0, import_date6.getSettings)().formats.date,
15522 weekStartsOn: fieldFormat?.weekStartsOn !== void 0 && DAYS_OF_WEEK.includes(fieldFormat?.weekStartsOn) ? fieldFormat.weekStartsOn : (0, import_date6.getSettings)().l10n.startOfWeek
15523 };
15524 }
15525 function render5({ item, field }) {
15526 if (field.hasElements) {
15527 return /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(RenderFromElements, { item, field });
15528 }
15529 const value = field.getValue({ item });
15530 if (!value) {
15531 return "";
15532 }
15533 let format2;
15534 if (field.type !== "date") {
15535 format2 = getFormat3({});
15536 } else {
15537 format2 = field.format;
15538 }
15539 return (0, import_date6.dateI18n)(format2.date, (0, import_date6.getDate)(value));
15540 }
15541 var sort2 = (a2, b2, direction) => {
15542 const timeA = new Date(a2).getTime();
15543 const timeB = new Date(b2).getTime();
15544 return direction === "asc" ? timeA - timeB : timeB - timeA;
15545 };
15546 var date_default = {
15547 type: "date",
15548 render: render5,
15549 Edit: "date",
15550 sort: sort2,
15551 enableSorting: true,
15552 enableGlobalSearch: false,
15553 defaultOperators: [
15554 OPERATOR_ON,
15555 OPERATOR_NOT_ON,
15556 OPERATOR_BEFORE,
15557 OPERATOR_AFTER,
15558 OPERATOR_BEFORE_INC,
15559 OPERATOR_AFTER_INC,
15560 OPERATOR_IN_THE_PAST,
15561 OPERATOR_OVER,
15562 OPERATOR_BETWEEN
15563 ],
15564 validOperators: [
15565 OPERATOR_ON,
15566 OPERATOR_NOT_ON,
15567 OPERATOR_BEFORE,
15568 OPERATOR_AFTER,
15569 OPERATOR_BEFORE_INC,
15570 OPERATOR_AFTER_INC,
15571 OPERATOR_IN_THE_PAST,
15572 OPERATOR_OVER,
15573 OPERATOR_BETWEEN
15574 ],
15575 getFormat: getFormat3,
15576 validate: {
15577 required: isValidRequired,
15578 elements: isValidElements
15579 }
15580 };
15581
15582 // packages/dataviews/build-module/field-types/boolean.js
15583 var import_i18n45 = __toESM(require_i18n());
15584
15585 // packages/dataviews/build-module/field-types/utils/is-valid-required-for-bool.js
15586 function isValidRequiredForBool(item, field) {
15587 const value = field.getValue({ item });
15588 return value === true;
15589 }
15590
15591 // packages/dataviews/build-module/field-types/boolean.js
15592 var import_jsx_runtime98 = __toESM(require_jsx_runtime());
15593 function render6({ item, field }) {
15594 if (field.hasElements) {
15595 return /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(RenderFromElements, { item, field });
15596 }
15597 if (field.getValue({ item }) === true) {
15598 return (0, import_i18n45.__)("True");
15599 }
15600 if (field.getValue({ item }) === false) {
15601 return (0, import_i18n45.__)("False");
15602 }
15603 return null;
15604 }
15605 function isValidCustom4(item, field) {
15606 const value = field.getValue({ item });
15607 if (![void 0, "", null].includes(value) && ![true, false].includes(value)) {
15608 return (0, import_i18n45.__)("Value must be true, false, or undefined");
15609 }
15610 return null;
15611 }
15612 var sort3 = (a2, b2, direction) => {
15613 const boolA = Boolean(a2);
15614 const boolB = Boolean(b2);
15615 if (boolA === boolB) {
15616 return 0;
15617 }
15618 if (direction === "asc") {
15619 return boolA ? 1 : -1;
15620 }
15621 return boolA ? -1 : 1;
15622 };
15623 var boolean_default = {
15624 type: "boolean",
15625 render: render6,
15626 Edit: "checkbox",
15627 sort: sort3,
15628 validate: {
15629 required: isValidRequiredForBool,
15630 elements: isValidElements,
15631 custom: isValidCustom4
15632 },
15633 enableSorting: true,
15634 enableGlobalSearch: false,
15635 defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT],
15636 validOperators: [OPERATOR_IS, OPERATOR_IS_NOT],
15637 getFormat: () => ({})
15638 };
15639
15640 // packages/dataviews/build-module/field-types/media.js
15641 var media_default = {
15642 type: "media",
15643 render: () => null,
15644 Edit: null,
15645 sort: () => 0,
15646 enableSorting: false,
15647 enableGlobalSearch: false,
15648 defaultOperators: [],
15649 validOperators: [],
15650 getFormat: () => ({}),
15651 // cannot validate any constraint, so
15652 // the only available validation for the field author
15653 // would be providing a custom validator.
15654 validate: {}
15655 };
15656
15657 // packages/dataviews/build-module/field-types/array.js
15658 var import_i18n46 = __toESM(require_i18n());
15659
15660 // packages/dataviews/build-module/field-types/utils/is-valid-required-for-array.js
15661 function isValidRequiredForArray(item, field) {
15662 const value = field.getValue({ item });
15663 return Array.isArray(value) && value.length > 0 && value.every(
15664 (element) => ![void 0, "", null].includes(element)
15665 );
15666 }
15667
15668 // packages/dataviews/build-module/field-types/array.js
15669 function render7({ item, field }) {
15670 const value = field.getValue({ item }) || [];
15671 return value.join(", ");
15672 }
15673 function isValidCustom5(item, field) {
15674 const value = field.getValue({ item });
15675 if (![void 0, "", null].includes(value) && !Array.isArray(value)) {
15676 return (0, import_i18n46.__)("Value must be an array.");
15677 }
15678 if (!value.every((v2) => typeof v2 === "string")) {
15679 return (0, import_i18n46.__)("Every value must be a string.");
15680 }
15681 return null;
15682 }
15683 var sort4 = (a2, b2, direction) => {
15684 const arrA = Array.isArray(a2) ? a2 : [];
15685 const arrB = Array.isArray(b2) ? b2 : [];
15686 if (arrA.length !== arrB.length) {
15687 return direction === "asc" ? arrA.length - arrB.length : arrB.length - arrA.length;
15688 }
15689 const joinedA = arrA.join(",");
15690 const joinedB = arrB.join(",");
15691 return direction === "asc" ? joinedA.localeCompare(joinedB) : joinedB.localeCompare(joinedA);
15692 };
15693 var array_default = {
15694 type: "array",
15695 render: render7,
15696 Edit: "array",
15697 sort: sort4,
15698 enableSorting: true,
15699 enableGlobalSearch: false,
15700 defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
15701 validOperators: [
15702 OPERATOR_IS_ANY,
15703 OPERATOR_IS_NONE,
15704 OPERATOR_IS_ALL,
15705 OPERATOR_IS_NOT_ALL
15706 ],
15707 getFormat: () => ({}),
15708 validate: {
15709 required: isValidRequiredForArray,
15710 elements: isValidElements,
15711 custom: isValidCustom5
15712 }
15713 };
15714
15715 // packages/dataviews/build-module/field-types/password.js
15716 var import_jsx_runtime99 = __toESM(require_jsx_runtime());
15717 function render8({ item, field }) {
15718 return field.hasElements ? /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(RenderFromElements, { item, field }) : "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022";
15719 }
15720 var password_default = {
15721 type: "password",
15722 render: render8,
15723 Edit: "password",
15724 sort: () => 0,
15725 // Passwords should not be sortable for security reasons
15726 enableSorting: false,
15727 enableGlobalSearch: false,
15728 defaultOperators: [],
15729 validOperators: [],
15730 getFormat: () => ({}),
15731 validate: {
15732 required: isValidRequired,
15733 pattern: isValidPattern,
15734 minLength: isValidMinLength,
15735 maxLength: isValidMaxLength,
15736 elements: isValidElements
15737 }
15738 };
15739
15740 // packages/dataviews/build-module/field-types/telephone.js
15741 var telephone_default = {
15742 type: "telephone",
15743 render: render3,
15744 Edit: "telephone",
15745 sort: sort_text_default,
15746 enableSorting: true,
15747 enableGlobalSearch: false,
15748 defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
15749 validOperators: [
15750 OPERATOR_IS,
15751 OPERATOR_IS_NOT,
15752 OPERATOR_CONTAINS,
15753 OPERATOR_NOT_CONTAINS,
15754 OPERATOR_STARTS_WITH,
15755 // Multiple selection
15756 OPERATOR_IS_ANY,
15757 OPERATOR_IS_NONE,
15758 OPERATOR_IS_ALL,
15759 OPERATOR_IS_NOT_ALL
15760 ],
15761 getFormat: () => ({}),
15762 validate: {
15763 required: isValidRequired,
15764 pattern: isValidPattern,
15765 minLength: isValidMinLength,
15766 maxLength: isValidMaxLength,
15767 elements: isValidElements
15768 }
15769 };
15770
15771 // packages/dataviews/build-module/field-types/color.js
15772 var import_i18n47 = __toESM(require_i18n());
15773 var import_jsx_runtime100 = __toESM(require_jsx_runtime());
15774 function render9({ item, field }) {
15775 if (field.hasElements) {
15776 return /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(RenderFromElements, { item, field });
15777 }
15778 const value = field.getValue({ item });
15779 if (!value || !w(value).isValid()) {
15780 return value;
15781 }
15782 return /* @__PURE__ */ (0, import_jsx_runtime100.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [
15783 /* @__PURE__ */ (0, import_jsx_runtime100.jsx)(
15784 "div",
15785 {
15786 style: {
15787 width: "16px",
15788 height: "16px",
15789 borderRadius: "50%",
15790 backgroundColor: value,
15791 border: "1px solid #ddd",
15792 flexShrink: 0
15793 }
15794 }
15795 ),
15796 /* @__PURE__ */ (0, import_jsx_runtime100.jsx)("span", { children: value })
15797 ] });
15798 }
15799 function isValidCustom6(item, field) {
15800 const value = field.getValue({ item });
15801 if (![void 0, "", null].includes(value) && !w(value).isValid()) {
15802 return (0, import_i18n47.__)("Value must be a valid color.");
15803 }
15804 return null;
15805 }
15806 var sort5 = (a2, b2, direction) => {
15807 const colorA = w(a2);
15808 const colorB = w(b2);
15809 if (!colorA.isValid() && !colorB.isValid()) {
15810 return 0;
15811 }
15812 if (!colorA.isValid()) {
15813 return direction === "asc" ? 1 : -1;
15814 }
15815 if (!colorB.isValid()) {
15816 return direction === "asc" ? -1 : 1;
15817 }
15818 const hslA = colorA.toHsl();
15819 const hslB = colorB.toHsl();
15820 if (hslA.h !== hslB.h) {
15821 return direction === "asc" ? hslA.h - hslB.h : hslB.h - hslA.h;
15822 }
15823 if (hslA.s !== hslB.s) {
15824 return direction === "asc" ? hslA.s - hslB.s : hslB.s - hslA.s;
15825 }
15826 return direction === "asc" ? hslA.l - hslB.l : hslB.l - hslA.l;
15827 };
15828 var color_default = {
15829 type: "color",
15830 render: render9,
15831 Edit: "color",
15832 sort: sort5,
15833 enableSorting: true,
15834 enableGlobalSearch: false,
15835 defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
15836 validOperators: [
15837 OPERATOR_IS,
15838 OPERATOR_IS_NOT,
15839 OPERATOR_IS_ANY,
15840 OPERATOR_IS_NONE
15841 ],
15842 getFormat: () => ({}),
15843 validate: {
15844 required: isValidRequired,
15845 elements: isValidElements,
15846 custom: isValidCustom6
15847 }
15848 };
15849
15850 // packages/dataviews/build-module/field-types/url.js
15851 var url_default = {
15852 type: "url",
15853 render: render3,
15854 Edit: "url",
15855 sort: sort_text_default,
15856 enableSorting: true,
15857 enableGlobalSearch: false,
15858 defaultOperators: [OPERATOR_IS_ANY, OPERATOR_IS_NONE],
15859 validOperators: [
15860 OPERATOR_IS,
15861 OPERATOR_IS_NOT,
15862 OPERATOR_CONTAINS,
15863 OPERATOR_NOT_CONTAINS,
15864 OPERATOR_STARTS_WITH,
15865 // Multiple selection
15866 OPERATOR_IS_ANY,
15867 OPERATOR_IS_NONE,
15868 OPERATOR_IS_ALL,
15869 OPERATOR_IS_NOT_ALL
15870 ],
15871 getFormat: () => ({}),
15872 validate: {
15873 required: isValidRequired,
15874 pattern: isValidPattern,
15875 minLength: isValidMinLength,
15876 maxLength: isValidMaxLength,
15877 elements: isValidElements
15878 }
15879 };
15880
15881 // packages/dataviews/build-module/field-types/no-type.js
15882 var sort6 = (a2, b2, direction) => {
15883 if (typeof a2 === "number" && typeof b2 === "number") {
15884 return sort_number_default(a2, b2, direction);
15885 }
15886 return sort_text_default(a2, b2, direction);
15887 };
15888 var no_type_default = {
15889 // type: no type for this one
15890 render: render3,
15891 Edit: null,
15892 sort: sort6,
15893 enableSorting: true,
15894 enableGlobalSearch: false,
15895 defaultOperators: [OPERATOR_IS, OPERATOR_IS_NOT],
15896 validOperators: getAllOperatorNames(),
15897 getFormat: () => ({}),
15898 validate: {
15899 required: isValidRequired,
15900 elements: isValidElements
15901 }
15902 };
15903
15904 // packages/dataviews/build-module/field-types/utils/get-is-valid.js
15905 function getIsValid(field, fieldType) {
15906 let required;
15907 if (field.isValid?.required === true && fieldType.validate.required !== void 0) {
15908 required = {
15909 constraint: true,
15910 validate: fieldType.validate.required
15911 };
15912 }
15913 let elements;
15914 if ((field.isValid?.elements === true || // elements is enabled unless the field opts-out
15915 field.isValid?.elements === void 0 && (!!field.elements || !!field.getElements)) && fieldType.validate.elements !== void 0) {
15916 elements = {
15917 constraint: true,
15918 validate: fieldType.validate.elements
15919 };
15920 }
15921 let min;
15922 if (typeof field.isValid?.min === "number" && fieldType.validate.min !== void 0) {
15923 min = {
15924 constraint: field.isValid.min,
15925 validate: fieldType.validate.min
15926 };
15927 }
15928 let max;
15929 if (typeof field.isValid?.max === "number" && fieldType.validate.max !== void 0) {
15930 max = {
15931 constraint: field.isValid.max,
15932 validate: fieldType.validate.max
15933 };
15934 }
15935 let minLength;
15936 if (typeof field.isValid?.minLength === "number" && fieldType.validate.minLength !== void 0) {
15937 minLength = {
15938 constraint: field.isValid.minLength,
15939 validate: fieldType.validate.minLength
15940 };
15941 }
15942 let maxLength;
15943 if (typeof field.isValid?.maxLength === "number" && fieldType.validate.maxLength !== void 0) {
15944 maxLength = {
15945 constraint: field.isValid.maxLength,
15946 validate: fieldType.validate.maxLength
15947 };
15948 }
15949 let pattern;
15950 if (field.isValid?.pattern !== void 0 && fieldType.validate.pattern !== void 0) {
15951 pattern = {
15952 constraint: field.isValid?.pattern,
15953 validate: fieldType.validate.pattern
15954 };
15955 }
15956 const custom = field.isValid?.custom ?? fieldType.validate.custom;
15957 return {
15958 required,
15959 elements,
15960 min,
15961 max,
15962 minLength,
15963 maxLength,
15964 pattern,
15965 custom
15966 };
15967 }
15968
15969 // packages/dataviews/build-module/field-types/index.js
15970 function getFieldTypeByName(type) {
15971 const found = [
15972 email_default,
15973 integer_default,
15974 number_default,
15975 text_default,
15976 datetime_default,
15977 date_default,
15978 boolean_default,
15979 media_default,
15980 array_default,
15981 password_default,
15982 telephone_default,
15983 color_default,
15984 url_default
15985 ].find((fieldType) => fieldType?.type === type);
15986 if (!!found) {
15987 return found;
15988 }
15989 return no_type_default;
15990 }
15991 function normalizeFields(fields) {
15992 return fields.map((field) => {
15993 const fieldType = getFieldTypeByName(field.type);
15994 const getValue = field.getValue || get_value_from_id_default(field.id);
15995 const sort7 = function(a2, b2, direction) {
15996 const aValue = getValue({ item: a2 });
15997 const bValue = getValue({ item: b2 });
15998 return field.sort ? field.sort(aValue, bValue, direction) : fieldType.sort(aValue, bValue, direction);
15999 };
16000 return {
16001 id: field.id,
16002 label: field.label || field.id,
16003 header: field.header || field.label || field.id,
16004 description: field.description,
16005 placeholder: field.placeholder,
16006 getValue,
16007 setValue: field.setValue || set_value_from_id_default(field.id),
16008 elements: field.elements,
16009 getElements: field.getElements,
16010 hasElements: hasElements(field),
16011 isVisible: field.isVisible,
16012 enableHiding: field.enableHiding ?? true,
16013 readOnly: field.readOnly ?? false,
16014 // The type provides defaults for the following props
16015 type: fieldType.type,
16016 render: field.render ?? fieldType.render,
16017 Edit: getControl(field, fieldType.Edit),
16018 sort: sort7,
16019 enableSorting: field.enableSorting ?? fieldType.enableSorting,
16020 enableGlobalSearch: field.enableGlobalSearch ?? fieldType.enableGlobalSearch,
16021 isValid: getIsValid(field, fieldType),
16022 filterBy: get_filter_by_default(
16023 field,
16024 fieldType.defaultOperators,
16025 fieldType.validOperators
16026 ),
16027 format: fieldType.getFormat(field)
16028 };
16029 });
16030 }
16031
16032 // packages/dataviews/build-module/components/dataviews-picker/index.js
16033 var import_components48 = __toESM(require_components());
16034 var import_element51 = __toESM(require_element());
16035 var import_compose11 = __toESM(require_compose());
16036 var import_jsx_runtime101 = __toESM(require_jsx_runtime());
16037 var isItemClickable = () => false;
16038 var dataViewsPickerLayouts = VIEW_LAYOUTS.filter(
16039 (viewLayout) => viewLayout.isPicker
16040 );
16041 var defaultGetItemId = (item) => item.id;
16042 var EMPTY_ARRAY4 = [];
16043 function DefaultUI({
16044 search = true,
16045 searchLabel = void 0
16046 }) {
16047 return /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)(import_jsx_runtime101.Fragment, { children: [
16048 /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)(
16049 import_components48.__experimentalHStack,
16050 {
16051 alignment: "top",
16052 justify: "space-between",
16053 className: "dataviews__view-actions",
16054 spacing: 1,
16055 children: [
16056 /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)(
16057 import_components48.__experimentalHStack,
16058 {
16059 justify: "start",
16060 expanded: false,
16061 className: "dataviews__search",
16062 children: [
16063 search && /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(dataviews_search_default, { label: searchLabel }),
16064 /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(toggle_default, {})
16065 ]
16066 }
16067 ),
16068 /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
16069 import_components48.__experimentalHStack,
16070 {
16071 spacing: 1,
16072 expanded: false,
16073 style: { flexShrink: 0 },
16074 children: /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(dataviews_view_config_default, {})
16075 }
16076 )
16077 ]
16078 }
16079 ),
16080 /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(filters_toggled_default, { className: "dataviews-filters__container" }),
16081 /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(DataViewsLayout, {}),
16082 /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(DataViewsPickerFooter, {})
16083 ] });
16084 }
16085 function DataViewsPicker({
16086 view,
16087 onChangeView,
16088 fields,
16089 search = true,
16090 searchLabel = void 0,
16091 actions = EMPTY_ARRAY4,
16092 data,
16093 getItemId = defaultGetItemId,
16094 isLoading = false,
16095 paginationInfo,
16096 defaultLayouts: defaultLayoutsProperty,
16097 selection,
16098 onChangeSelection,
16099 children,
16100 config = { perPageSizes: [10, 20, 50, 100] },
16101 itemListLabel,
16102 empty
16103 }) {
16104 const { infiniteScrollHandler } = paginationInfo;
16105 const containerRef = (0, import_element51.useRef)(null);
16106 const [containerWidth, setContainerWidth] = (0, import_element51.useState)(0);
16107 const resizeObserverRef = (0, import_compose11.useResizeObserver)(
16108 (resizeObserverEntries) => {
16109 setContainerWidth(
16110 resizeObserverEntries[0].borderBoxSize[0].inlineSize
16111 );
16112 },
16113 { box: "border-box" }
16114 );
16115 const [openedFilter, setOpenedFilter] = (0, import_element51.useState)(null);
16116 function setSelectionWithChange(value) {
16117 const newValue = typeof value === "function" ? value(selection) : value;
16118 if (onChangeSelection) {
16119 onChangeSelection(newValue);
16120 }
16121 }
16122 const _fields = (0, import_element51.useMemo)(() => normalizeFields(fields), [fields]);
16123 const filters = use_filters_default(_fields, view);
16124 const hasPrimaryOrLockedFilters = (0, import_element51.useMemo)(
16125 () => (filters || []).some(
16126 (filter) => filter.isPrimary || filter.isLocked
16127 ),
16128 [filters]
16129 );
16130 const [isShowingFilter, setIsShowingFilter] = (0, import_element51.useState)(
16131 hasPrimaryOrLockedFilters
16132 );
16133 (0, import_element51.useEffect)(() => {
16134 if (hasPrimaryOrLockedFilters && !isShowingFilter) {
16135 setIsShowingFilter(true);
16136 }
16137 }, [hasPrimaryOrLockedFilters, isShowingFilter]);
16138 (0, import_element51.useEffect)(() => {
16139 if (!view.infiniteScrollEnabled || !containerRef.current) {
16140 return;
16141 }
16142 const handleScroll = (0, import_compose11.throttle)((event) => {
16143 const target = event.target;
16144 const scrollTop = target.scrollTop;
16145 const scrollHeight = target.scrollHeight;
16146 const clientHeight = target.clientHeight;
16147 if (scrollTop + clientHeight >= scrollHeight - 100) {
16148 infiniteScrollHandler?.();
16149 }
16150 }, 100);
16151 const container = containerRef.current;
16152 container.addEventListener("scroll", handleScroll);
16153 return () => {
16154 container.removeEventListener("scroll", handleScroll);
16155 handleScroll.cancel();
16156 };
16157 }, [infiniteScrollHandler, view.infiniteScrollEnabled]);
16158 const defaultLayouts = (0, import_element51.useMemo)(
16159 () => Object.fromEntries(
16160 Object.entries(defaultLayoutsProperty).filter(
16161 ([layoutType]) => {
16162 return dataViewsPickerLayouts.some(
16163 (viewLayout) => viewLayout.type === layoutType
16164 );
16165 }
16166 )
16167 ),
16168 [defaultLayoutsProperty]
16169 );
16170 if (!defaultLayouts[view.type]) {
16171 return null;
16172 }
16173 return /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
16174 dataviews_context_default.Provider,
16175 {
16176 value: {
16177 view,
16178 onChangeView,
16179 fields: _fields,
16180 actions,
16181 data,
16182 isLoading,
16183 paginationInfo,
16184 isItemClickable,
16185 selection,
16186 onChangeSelection: setSelectionWithChange,
16187 openedFilter,
16188 setOpenedFilter,
16189 getItemId,
16190 containerWidth,
16191 containerRef,
16192 resizeObserverRef,
16193 defaultLayouts,
16194 filters,
16195 isShowingFilter,
16196 setIsShowingFilter,
16197 config,
16198 itemListLabel,
16199 empty,
16200 hasInfiniteScrollHandler: !!infiniteScrollHandler
16201 },
16202 children: /* @__PURE__ */ (0, import_jsx_runtime101.jsx)("div", { className: "dataviews-picker-wrapper", ref: containerRef, children: children ?? /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(DefaultUI, { search, searchLabel }) })
16203 }
16204 );
16205 }
16206 var DataViewsPickerSubComponents = DataViewsPicker;
16207 DataViewsPickerSubComponents.BulkActionToolbar = DataViewsPickerFooter;
16208 DataViewsPickerSubComponents.Filters = filters_default;
16209 DataViewsPickerSubComponents.FiltersToggled = filters_toggled_default;
16210 DataViewsPickerSubComponents.FiltersToggle = toggle_default;
16211 DataViewsPickerSubComponents.Layout = DataViewsLayout;
16212 DataViewsPickerSubComponents.LayoutSwitcher = ViewTypeMenu;
16213 DataViewsPickerSubComponents.Pagination = DataViewsPagination;
16214 DataViewsPickerSubComponents.Search = dataviews_search_default;
16215 DataViewsPickerSubComponents.ViewConfig = DataviewsViewConfigDropdown;
16216 var dataviews_picker_default = DataViewsPickerSubComponents;
16217
16218 // packages/media-fields/build-module/alt_text/index.js
16219 var import_i18n48 = __toESM(require_i18n());
16220 var import_components49 = __toESM(require_components());
16221 var import_jsx_runtime102 = __toESM(require_jsx_runtime());
16222 var altTextField = {
16223 id: "alt_text",
16224 type: "text",
16225 label: (0, import_i18n48.__)("Alt text"),
16226 isVisible: (item) => item?.media_type === "image",
16227 render: ({ item }) => item?.alt_text || "-",
16228 Edit: ({ field, onChange, data }) => {
16229 return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
16230 import_components49.TextareaControl,
16231 {
16232 label: field.label,
16233 value: data.alt_text || "",
16234 onChange: (value) => onChange({ alt_text: value }),
16235 rows: 2,
16236 __nextHasNoMarginBottom: true
16237 }
16238 );
16239 },
16240 enableSorting: false,
16241 filterBy: false
16242 };
16243 var alt_text_default = altTextField;
16244
16245 // packages/media-fields/build-module/caption/index.js
16246 var import_i18n49 = __toESM(require_i18n());
16247 var import_components50 = __toESM(require_components());
16248
16249 // packages/media-fields/build-module/utils/get-raw-content.js
16250 function getRawContent(content) {
16251 if (!content) {
16252 return "";
16253 }
16254 if (typeof content === "string") {
16255 return content;
16256 }
16257 if (typeof content === "object" && "raw" in content) {
16258 return content.raw || "";
16259 }
16260 return "";
16261 }
16262
16263 // packages/media-fields/build-module/caption/index.js
16264 var import_jsx_runtime103 = __toESM(require_jsx_runtime());
16265 var captionField = {
16266 id: "caption",
16267 type: "text",
16268 label: (0, import_i18n49.__)("Caption"),
16269 getValue: ({ item }) => getRawContent(item?.caption),
16270 render: ({ item }) => getRawContent(item?.caption) || "-",
16271 Edit: ({ field, onChange, data }) => {
16272 return /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(
16273 import_components50.TextareaControl,
16274 {
16275 label: field.label,
16276 value: getRawContent(data.caption) || "",
16277 onChange: (value) => onChange({ caption: value }),
16278 rows: 2,
16279 __nextHasNoMarginBottom: true
16280 }
16281 );
16282 },
16283 enableSorting: false,
16284 filterBy: false
16285 };
16286 var caption_default = captionField;
16287
16288 // packages/media-fields/build-module/description/index.js
16289 var import_i18n50 = __toESM(require_i18n());
16290 var import_components51 = __toESM(require_components());
16291 var import_jsx_runtime104 = __toESM(require_jsx_runtime());
16292 var descriptionField = {
16293 id: "description",
16294 type: "text",
16295 label: (0, import_i18n50.__)("Description"),
16296 getValue: ({ item }) => getRawContent(item?.description),
16297 render: ({ item }) => /* @__PURE__ */ (0, import_jsx_runtime104.jsx)("div", { children: getRawContent(item?.description) || "-" }),
16298 Edit: ({ field, onChange, data }) => {
16299 return /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(
16300 import_components51.TextareaControl,
16301 {
16302 label: field.label,
16303 value: getRawContent(data.description) || "",
16304 onChange: (value) => onChange({ description: value }),
16305 rows: 5,
16306 __nextHasNoMarginBottom: true
16307 }
16308 );
16309 },
16310 enableSorting: false,
16311 filterBy: false
16312 };
16313 var description_default = descriptionField;
16314
16315 // packages/media-fields/build-module/filename/index.js
16316 var import_i18n51 = __toESM(require_i18n());
16317 var import_url4 = __toESM(require_url());
16318
16319 // packages/media-fields/build-module/filename/view.js
16320 var import_components52 = __toESM(require_components());
16321 var import_element52 = __toESM(require_element());
16322 var import_url3 = __toESM(require_url());
16323 var import_jsx_runtime105 = __toESM(require_jsx_runtime());
16324 var TRUNCATE_LENGTH = 15;
16325 function FileNameView({
16326 item
16327 }) {
16328 const fileName = (0, import_element52.useMemo)(
16329 () => item?.source_url ? (0, import_url3.getFilename)(item.source_url) : null,
16330 [item?.source_url]
16331 );
16332 if (!fileName) {
16333 return "";
16334 }
16335 return fileName.length > TRUNCATE_LENGTH ? /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(import_components52.Tooltip, { text: fileName, children: /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(import_components52.__experimentalTruncate, { children: fileName }) }) : /* @__PURE__ */ (0, import_jsx_runtime105.jsx)(import_jsx_runtime105.Fragment, { children: fileName });
16336 }
16337
16338 // packages/media-fields/build-module/filename/index.js
16339 var filenameField = {
16340 id: "filename",
16341 type: "text",
16342 label: (0, import_i18n51.__)("File name"),
16343 getValue: ({ item }) => (0, import_url4.getFilename)(item?.source_url || ""),
16344 render: FileNameView,
16345 enableSorting: false,
16346 filterBy: false,
16347 readOnly: true
16348 };
16349 var filename_default = filenameField;
16350
16351 // packages/media-fields/build-module/filesize/index.js
16352 var import_i18n52 = __toESM(require_i18n());
16353 var KB_IN_BYTES = 1024;
16354 var MB_IN_BYTES = 1024 * KB_IN_BYTES;
16355 var GB_IN_BYTES = 1024 * MB_IN_BYTES;
16356 var TB_IN_BYTES = 1024 * GB_IN_BYTES;
16357 var PB_IN_BYTES = 1024 * TB_IN_BYTES;
16358 var EB_IN_BYTES = 1024 * PB_IN_BYTES;
16359 var ZB_IN_BYTES = 1024 * EB_IN_BYTES;
16360 var YB_IN_BYTES = 1024 * ZB_IN_BYTES;
16361 function getBytesString(bytes, unitSymbol, decimals = 2) {
16362 return (0, import_i18n52.sprintf)(
16363 // translators: 1: Actual bytes of a file. 2: The unit symbol (e.g. MB).
16364 (0, import_i18n52._x)("%1$s %2$s", "file size"),
16365 bytes.toLocaleString(void 0, {
16366 minimumFractionDigits: 0,
16367 maximumFractionDigits: decimals
16368 }),
16369 unitSymbol
16370 );
16371 }
16372 function formatFileSize(bytes, decimals = 2) {
16373 if (bytes === 0) {
16374 return getBytesString(0, (0, import_i18n52._x)("B", "unit symbol"), decimals);
16375 }
16376 const quant = {
16377 /* translators: Unit symbol for yottabyte. */
16378 [(0, import_i18n52._x)("YB", "unit symbol")]: YB_IN_BYTES,
16379 /* translators: Unit symbol for zettabyte. */
16380 [(0, import_i18n52._x)("ZB", "unit symbol")]: ZB_IN_BYTES,
16381 /* translators: Unit symbol for exabyte. */
16382 [(0, import_i18n52._x)("EB", "unit symbol")]: EB_IN_BYTES,
16383 /* translators: Unit symbol for petabyte. */
16384 [(0, import_i18n52._x)("PB", "unit symbol")]: PB_IN_BYTES,
16385 /* translators: Unit symbol for terabyte. */
16386 [(0, import_i18n52._x)("TB", "unit symbol")]: TB_IN_BYTES,
16387 /* translators: Unit symbol for gigabyte. */
16388 [(0, import_i18n52._x)("GB", "unit symbol")]: GB_IN_BYTES,
16389 /* translators: Unit symbol for megabyte. */
16390 [(0, import_i18n52._x)("MB", "unit symbol")]: MB_IN_BYTES,
16391 /* translators: Unit symbol for kilobyte. */
16392 [(0, import_i18n52._x)("KB", "unit symbol")]: KB_IN_BYTES,
16393 /* translators: Unit symbol for byte. */
16394 [(0, import_i18n52._x)("B", "unit symbol")]: 1
16395 };
16396 for (const [unit, mag] of Object.entries(quant)) {
16397 if (bytes >= mag) {
16398 return getBytesString(bytes / mag, unit, decimals);
16399 }
16400 }
16401 return "";
16402 }
16403 var filesizeField = {
16404 id: "filesize",
16405 type: "text",
16406 label: (0, import_i18n52.__)("File size"),
16407 getValue: ({ item }) => item?.media_details?.filesize ? formatFileSize(item?.media_details?.filesize) : "",
16408 isVisible: (item) => {
16409 return !!item?.media_details?.filesize;
16410 },
16411 enableSorting: false,
16412 filterBy: false,
16413 readOnly: true
16414 };
16415 var filesize_default = filesizeField;
16416
16417 // packages/media-fields/build-module/media_dimensions/index.js
16418 var import_i18n53 = __toESM(require_i18n());
16419 var mediaDimensionsField = {
16420 id: "media_dimensions",
16421 type: "text",
16422 label: (0, import_i18n53.__)("Dimensions"),
16423 getValue: ({ item }) => item?.media_details?.width && item?.media_details?.height ? (0, import_i18n53.sprintf)(
16424 // translators: 1: Width. 2: Height.
16425 (0, import_i18n53._x)("%1$s \xD7 %2$s", "image dimensions"),
16426 item?.media_details?.width?.toString(),
16427 item?.media_details?.height?.toString()
16428 ) : "",
16429 isVisible: (item) => {
16430 return !!(item?.media_details?.width && item?.media_details?.height);
16431 },
16432 enableSorting: false,
16433 filterBy: false,
16434 readOnly: true
16435 };
16436 var media_dimensions_default = mediaDimensionsField;
16437
16438 // packages/media-fields/build-module/media_thumbnail/index.js
16439 var import_i18n55 = __toESM(require_i18n());
16440
16441 // packages/media-fields/build-module/media_thumbnail/view.js
16442 var import_data6 = __toESM(require_data());
16443 var import_core_data = __toESM(require_core_data());
16444 var import_components53 = __toESM(require_components());
16445 var import_url5 = __toESM(require_url());
16446
16447 // packages/media-fields/build-module/utils/get-media-type-from-mime-type.js
16448 var import_i18n54 = __toESM(require_i18n());
16449 function getMediaTypeFromMimeType(mimeType) {
16450 if (mimeType.startsWith("image/")) {
16451 return {
16452 type: "image",
16453 label: (0, import_i18n54.__)("Image"),
16454 icon: image_default
16455 };
16456 }
16457 if (mimeType.startsWith("video/")) {
16458 return {
16459 type: "video",
16460 label: (0, import_i18n54.__)("Video"),
16461 icon: video_default
16462 };
16463 }
16464 if (mimeType.startsWith("audio/")) {
16465 return {
16466 type: "audio",
16467 label: (0, import_i18n54.__)("Audio"),
16468 icon: audio_default
16469 };
16470 }
16471 return {
16472 type: "application",
16473 label: (0, import_i18n54.__)("Application"),
16474 icon: file_default
16475 };
16476 }
16477
16478 // packages/media-fields/build-module/media_thumbnail/view.js
16479 var import_jsx_runtime106 = __toESM(require_jsx_runtime());
16480 function MediaThumbnailView({
16481 item,
16482 config
16483 }) {
16484 const _featuredMedia = (0, import_data6.useSelect)(
16485 (select) => {
16486 if (!item.featured_media) {
16487 return;
16488 }
16489 return select(import_core_data.store).getEntityRecord(
16490 "postType",
16491 "attachment",
16492 item.featured_media
16493 );
16494 },
16495 [item.featured_media]
16496 );
16497 const featuredMedia = item.featured_media ? _featuredMedia : item;
16498 if (!featuredMedia) {
16499 return null;
16500 }
16501 const filename = (0, import_url5.getFilename)(featuredMedia.source_url || "");
16502 if (
16503 // Ensure the featured media is an image.
16504 getMediaTypeFromMimeType(featuredMedia.mime_type).type === "image"
16505 ) {
16506 return /* @__PURE__ */ (0, import_jsx_runtime106.jsx)("div", { className: "dataviews-media-field__media-thumbnail", children: /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(
16507 "img",
16508 {
16509 className: "dataviews-media-field__media-thumbnail--image",
16510 src: featuredMedia.source_url,
16511 srcSet: featuredMedia?.media_details?.sizes ? Object.values(
16512 featuredMedia.media_details.sizes
16513 ).map(
16514 (size) => `${size.source_url} ${size.width}w`
16515 ).join(", ") : void 0,
16516 sizes: config?.sizes || "100vw",
16517 alt: featuredMedia.alt_text || featuredMedia.title.raw
16518 }
16519 ) });
16520 }
16521 return /* @__PURE__ */ (0, import_jsx_runtime106.jsx)("div", { className: "dataviews-media-field__media-thumbnail", children: /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)(
16522 import_components53.__experimentalVStack,
16523 {
16524 justify: "center",
16525 alignment: "center",
16526 className: "dataviews-media-field__media-thumbnail__stack",
16527 spacing: 0,
16528 children: [
16529 /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(
16530 import_components53.Icon,
16531 {
16532 className: "dataviews-media-field__media-thumbnail--icon",
16533 icon: getMediaTypeFromMimeType(item.mime_type).icon,
16534 size: 24
16535 }
16536 ),
16537 !!filename && /* @__PURE__ */ (0, import_jsx_runtime106.jsx)("div", { className: "dataviews-media-field__media-thumbnail__filename", children: /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(import_components53.__experimentalTruncate, { className: "dataviews-media-field__media-thumbnail__filename__truncate", children: filename }) })
16538 ]
16539 }
16540 ) });
16541 }
16542
16543 // packages/media-fields/build-module/media_thumbnail/index.js
16544 var mediaThumbnailField = {
16545 id: "media_thumbnail",
16546 type: "media",
16547 label: (0, import_i18n55.__)("Thumbnail"),
16548 render: MediaThumbnailView,
16549 enableSorting: false,
16550 filterBy: false
16551 };
16552 var media_thumbnail_default = mediaThumbnailField;
16553
16554 // packages/media-fields/build-module/mime_type/index.js
16555 var import_i18n56 = __toESM(require_i18n());
16556 var mimeTypeField = {
16557 id: "mime_type",
16558 type: "text",
16559 label: (0, import_i18n56.__)("File type"),
16560 getValue: ({ item }) => item?.mime_type || "",
16561 render: ({ item }) => item?.mime_type || "-",
16562 enableSorting: true,
16563 filterBy: false,
16564 readOnly: true
16565 };
16566 var mime_type_default = mimeTypeField;
16567
16568 // packages/media-utils/build-module/lock-unlock.js
16569 var import_private_apis2 = __toESM(require_private_apis());
16570 var { lock: lock2, unlock: unlock2 } = (0, import_private_apis2.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(
16571 "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
16572 "@wordpress/media-utils"
16573 );
16574
16575 // packages/media-utils/build-module/components/media-upload-modal/index.js
16576 var import_jsx_runtime107 = __toESM(require_jsx_runtime());
16577 var { useEntityRecordsWithPermissions } = unlock2(import_core_data2.privateApis);
16578 var LAYOUT_PICKER_GRID2 = "pickerGrid";
16579 var LAYOUT_PICKER_TABLE2 = "pickerTable";
16580 function MediaUploadModal({
16581 allowedTypes = ["image"],
16582 multiple = false,
16583 value,
16584 onSelect,
16585 onClose,
16586 onUpload,
16587 title = (0, import_i18n57.__)("Select Media"),
16588 isOpen,
16589 isDismissible = true,
16590 modalClass,
16591 search = true,
16592 searchLabel = (0, import_i18n57.__)("Search media")
16593 }) {
16594 const [selection, setSelection] = (0, import_element53.useState)(() => {
16595 if (!value) {
16596 return [];
16597 }
16598 return Array.isArray(value) ? value.map(String) : [String(value)];
16599 });
16600 const [view, setView] = (0, import_element53.useState)(() => ({
16601 type: LAYOUT_PICKER_GRID2,
16602 fields: [],
16603 showTitle: false,
16604 titleField: "title",
16605 mediaField: "media_thumbnail",
16606 search: "",
16607 page: 1,
16608 perPage: 20,
16609 filters: []
16610 }));
16611 const queryArgs = (0, import_element53.useMemo)(() => {
16612 const filters = {};
16613 view.filters?.forEach((filter) => {
16614 if (filter.field === "media_type") {
16615 filters.media_type = filter.value;
16616 }
16617 if (filter.field === "author") {
16618 filters.author = filter.value;
16619 }
16620 if (filter.field === "date") {
16621 filters.after = filter.value?.after;
16622 filters.before = filter.value?.before;
16623 }
16624 if (filter.field === "mime_type") {
16625 filters.mime_type = filter.value;
16626 }
16627 });
16628 if (!filters.media_type) {
16629 filters.media_type = allowedTypes.includes("*") ? void 0 : allowedTypes;
16630 }
16631 return {
16632 per_page: view.perPage || 20,
16633 page: view.page || 1,
16634 status: "inherit",
16635 order: view.sort?.direction,
16636 orderby: view.sort?.field,
16637 search: view.search,
16638 ...filters
16639 };
16640 }, [view, allowedTypes]);
16641 const {
16642 records: mediaRecords,
16643 isResolving: isLoading,
16644 totalItems,
16645 totalPages
16646 } = useEntityRecordsWithPermissions("postType", "attachment", queryArgs);
16647 const fields = (0, import_element53.useMemo)(
16648 () => [
16649 {
16650 id: "title",
16651 type: "text",
16652 label: (0, import_i18n57.__)("Title"),
16653 getValue: ({ item }) => {
16654 const titleValue = item.title.raw || item.title.rendered;
16655 return titleValue || (0, import_i18n57.__)("(no title)");
16656 }
16657 },
16658 // Media field definitions from @wordpress/media-fields
16659 // Cast is safe because RestAttachment has the same properties as Attachment
16660 media_thumbnail_default,
16661 alt_text_default,
16662 caption_default,
16663 description_default,
16664 filename_default,
16665 filesize_default,
16666 media_dimensions_default,
16667 mime_type_default
16668 ],
16669 []
16670 );
16671 const actions = (0, import_element53.useMemo)(
16672 () => [
16673 {
16674 id: "select",
16675 label: multiple ? (0, import_i18n57.__)("Select") : (0, import_i18n57.__)("Select"),
16676 isPrimary: true,
16677 supportsBulk: multiple,
16678 async callback() {
16679 if (selection.length === 0) {
16680 return;
16681 }
16682 const selectedPostsQuery = {
16683 include: selection,
16684 per_page: -1
16685 };
16686 const selectedPosts = await (0, import_data7.resolveSelect)(
16687 import_core_data2.store
16688 ).getEntityRecords(
16689 "postType",
16690 "attachment",
16691 selectedPostsQuery
16692 );
16693 const transformedPosts = selectedPosts?.map(transformAttachment);
16694 const selectedItems = multiple ? transformedPosts : transformedPosts?.[0];
16695 onSelect(selectedItems);
16696 }
16697 }
16698 ],
16699 [multiple, onSelect, selection]
16700 );
16701 const handleModalClose = (0, import_element53.useCallback)(() => {
16702 onClose?.();
16703 }, [onClose]);
16704 const handleUpload = onUpload || uploadMedia;
16705 const handleFileSelect = (0, import_element53.useCallback)(
16706 (event) => {
16707 const files = event.target.files;
16708 if (files && files.length > 0) {
16709 const filesArray = Array.from(files);
16710 handleUpload({
16711 allowedTypes,
16712 filesList: filesArray
16713 });
16714 }
16715 },
16716 [allowedTypes, handleUpload]
16717 );
16718 const paginationInfo = (0, import_element53.useMemo)(
16719 () => ({
16720 totalItems,
16721 totalPages
16722 }),
16723 [totalItems, totalPages]
16724 );
16725 const defaultLayouts = (0, import_element53.useMemo)(
16726 () => ({
16727 [LAYOUT_PICKER_GRID2]: {
16728 fields: [],
16729 showTitle: false
16730 },
16731 [LAYOUT_PICKER_TABLE2]: {
16732 fields: ["filename", "filesize", "media_dimensions"],
16733 showTitle: true
16734 }
16735 }),
16736 []
16737 );
16738 const acceptTypes = (0, import_element53.useMemo)(() => {
16739 if (allowedTypes.includes("*")) {
16740 return void 0;
16741 }
16742 return allowedTypes.join(",");
16743 }, [allowedTypes]);
16744 if (!isOpen) {
16745 return null;
16746 }
16747 return /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)(
16748 import_components54.Modal,
16749 {
16750 title,
16751 onRequestClose: handleModalClose,
16752 isDismissible,
16753 className: modalClass,
16754 size: "fill",
16755 headerActions: /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(
16756 import_components54.FormFileUpload,
16757 {
16758 accept: acceptTypes,
16759 multiple: true,
16760 onChange: handleFileSelect,
16761 __next40pxDefaultSize: true,
16762 render: ({ openFileDialog }) => /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(
16763 import_components54.Button,
16764 {
16765 onClick: openFileDialog,
16766 icon: upload_default,
16767 __next40pxDefaultSize: true,
16768 children: (0, import_i18n57.__)("Upload media")
16769 }
16770 )
16771 }
16772 ),
16773 children: [
16774 /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(
16775 import_components54.DropZone,
16776 {
16777 onFilesDrop: (files) => {
16778 let filteredFiles = files;
16779 if (allowedTypes && !allowedTypes.includes("*")) {
16780 filteredFiles = files.filter(
16781 (file) => allowedTypes.some((allowedType) => {
16782 return file.type === allowedType || file.type.startsWith(
16783 allowedType.replace("*", "")
16784 );
16785 })
16786 );
16787 }
16788 if (filteredFiles.length > 0) {
16789 handleUpload({
16790 allowedTypes,
16791 filesList: filteredFiles
16792 });
16793 }
16794 },
16795 label: (0, import_i18n57.__)("Drop files to upload")
16796 }
16797 ),
16798 /* @__PURE__ */ (0, import_jsx_runtime107.jsx)(
16799 dataviews_picker_default,
16800 {
16801 data: mediaRecords || [],
16802 fields,
16803 view,
16804 onChangeView: setView,
16805 actions,
16806 selection,
16807 onChangeSelection: setSelection,
16808 isLoading,
16809 paginationInfo,
16810 defaultLayouts,
16811 getItemId: (item) => String(item.id),
16812 search,
16813 searchLabel,
16814 itemListLabel: (0, import_i18n57.__)("Media items")
16815 }
16816 )
16817 ]
16818 }
16819 );
16820 }
16821
16822 // packages/media-utils/build-module/private-apis.js
16823 var privateApis11 = {};
16824 lock2(privateApis11, {
16825 sideloadMedia,
16826 MediaUploadModal
16827 });
16828 return __toCommonJS(index_exports);
16829 })();
16830 /*! Bundled license information:
16831
16832 use-sync-external-store/cjs/use-sync-external-store-shim.development.js:
16833 (**
16834 * @license React
16835 * use-sync-external-store-shim.development.js
16836 *
16837 * Copyright (c) Meta Platforms, Inc. and affiliates.
16838 *
16839 * This source code is licensed under the MIT license found in the
16840 * LICENSE file in the root directory of this source tree.
16841 *)
16842 */
16843 //# sourceMappingURL=index.js.map
16844