@keenmate/web-multiselect 2.0.0-rc12 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +201 -186
- package/component-variables.manifest.json +26 -30
- package/custom-elements.json +470 -109
- package/dist/index.d.ts +187 -5
- package/dist/multiselect.js +968 -732
- package/dist/multiselect.umd.js +11 -11
- package/dist/style.css +1 -1
- package/docs/theming.md +7 -7
- package/package.json +5 -3
- package/src/css/animations.css +6 -1
- package/src/css/badges.css +14 -0
- package/src/css/options.css +85 -17
- package/src/css/variables.css +964 -919
- package/vscode.css-custom-data.json +15 -125
- package/vscode.html-custom-data.json +11 -1
- package/web-types.json +58 -86
package/dist/multiselect.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
var
|
|
1
|
+
var Do = Object.defineProperty;
|
|
2
2
|
var _s = (s) => {
|
|
3
3
|
throw TypeError(s);
|
|
4
4
|
};
|
|
5
|
-
var Ro = (s, e, t) => e in s ?
|
|
6
|
-
var
|
|
7
|
-
var h = (s, e, t) => (Kt(s, e, "read from private field"), t ? t.call(s) : e.get(s)), L = (s, e, t) => e.has(s) ? _s("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(s) : e.set(s, t),
|
|
8
|
-
function
|
|
5
|
+
var Ro = (s, e, t) => e in s ? Do(s, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : s[e] = t;
|
|
6
|
+
var p = (s, e, t) => Ro(s, typeof e != "symbol" ? e + "" : e, t), Kt = (s, e, t) => e.has(s) || _s("Cannot " + t);
|
|
7
|
+
var h = (s, e, t) => (Kt(s, e, "read from private field"), t ? t.call(s) : e.get(s)), L = (s, e, t) => e.has(s) ? _s("Cannot add the same private member more than once") : e instanceof WeakSet ? e.add(s) : e.set(s, t), P = (s, e, t, o) => (Kt(s, e, "write to private field"), o ? o.call(s, t) : e.set(s, t), t), b = (s, e, t) => (Kt(s, e, "access private method"), t);
|
|
8
|
+
function j(s, e = {}) {
|
|
9
9
|
const t = new Set(s), o = e.shouldNullOnInvalid ? null : e.default ?? null;
|
|
10
10
|
return {
|
|
11
11
|
values: s,
|
|
@@ -37,7 +37,7 @@ function X(s = {}) {
|
|
|
37
37
|
}
|
|
38
38
|
};
|
|
39
39
|
}
|
|
40
|
-
function
|
|
40
|
+
function A(s = {}) {
|
|
41
41
|
const e = s.isNullable === !0, t = s.default ?? (e ? null : ""), o = (i) => s.shouldTrim ? i.trim() : i;
|
|
42
42
|
return {
|
|
43
43
|
fromAttribute(i) {
|
|
@@ -55,7 +55,7 @@ function z(s = {}) {
|
|
|
55
55
|
};
|
|
56
56
|
}
|
|
57
57
|
const Bo = /* @__PURE__ */ new Set(["", "true", "1", "yes", "on"]), Ho = /* @__PURE__ */ new Set(["false", "0", "no", "off"]);
|
|
58
|
-
function
|
|
58
|
+
function H(s = "presence") {
|
|
59
59
|
const e = (t) => {
|
|
60
60
|
const o = t.trim().toLowerCase();
|
|
61
61
|
return Bo.has(o) ? !0 : Ho.has(o) ? !1 : null;
|
|
@@ -177,19 +177,19 @@ const Qs = {
|
|
|
177
177
|
isApple: !1,
|
|
178
178
|
isAndroid: !1
|
|
179
179
|
}, qo = { mobile: 640, tablet: 1024, desktop: 1 / 0 };
|
|
180
|
-
let
|
|
181
|
-
const
|
|
182
|
-
let
|
|
180
|
+
let vt = Zs(qo);
|
|
181
|
+
const ot = /* @__PURE__ */ new Set(), it = /* @__PURE__ */ new Set();
|
|
182
|
+
let Pe = null, kt = [], wt = !1;
|
|
183
183
|
const ks = 30;
|
|
184
184
|
let Ee, yt = 0;
|
|
185
185
|
function Zs(s) {
|
|
186
186
|
return Object.entries(s).sort((e, t) => e[1] - t[1]);
|
|
187
187
|
}
|
|
188
188
|
function Xo(s) {
|
|
189
|
-
for (const [t, o] of
|
|
189
|
+
for (const [t, o] of vt)
|
|
190
190
|
if (s <= o)
|
|
191
191
|
return t;
|
|
192
|
-
const e =
|
|
192
|
+
const e = vt[vt.length - 1];
|
|
193
193
|
return e ? e[0] : "desktop";
|
|
194
194
|
}
|
|
195
195
|
function us() {
|
|
@@ -250,16 +250,16 @@ function ei(s, e) {
|
|
|
250
250
|
return s.viewportWidth === e.viewportWidth && s.viewportHeight === e.viewportHeight;
|
|
251
251
|
}
|
|
252
252
|
function Ct() {
|
|
253
|
-
const s = ms(), e =
|
|
254
|
-
if (
|
|
255
|
-
for (const t of [...
|
|
253
|
+
const s = ms(), e = Pe;
|
|
254
|
+
if (Pe = s, !e || !Zo(e, s))
|
|
255
|
+
for (const t of [...ot])
|
|
256
256
|
t(s);
|
|
257
|
-
|
|
257
|
+
it.size > 0 && (!e || !ei(e, s)) && ti();
|
|
258
258
|
}
|
|
259
259
|
function Ss() {
|
|
260
|
-
const s =
|
|
260
|
+
const s = Pe;
|
|
261
261
|
if (s)
|
|
262
|
-
for (const e of [...
|
|
262
|
+
for (const e of [...it])
|
|
263
263
|
e(s);
|
|
264
264
|
}
|
|
265
265
|
function ti() {
|
|
@@ -272,10 +272,10 @@ function ti() {
|
|
|
272
272
|
}
|
|
273
273
|
const St = () => Ct(), eo = () => {
|
|
274
274
|
if (typeof requestAnimationFrame == "function") {
|
|
275
|
-
if (
|
|
275
|
+
if (wt)
|
|
276
276
|
return;
|
|
277
|
-
|
|
278
|
-
|
|
277
|
+
wt = !0, requestAnimationFrame(() => {
|
|
278
|
+
wt = !1, Ct();
|
|
279
279
|
});
|
|
280
280
|
} else
|
|
281
281
|
Ct();
|
|
@@ -288,7 +288,7 @@ function oi(s) {
|
|
|
288
288
|
}
|
|
289
289
|
function to() {
|
|
290
290
|
if (!us()) {
|
|
291
|
-
|
|
291
|
+
Pe = { ...Qs };
|
|
292
292
|
return;
|
|
293
293
|
}
|
|
294
294
|
kt = [
|
|
@@ -300,37 +300,37 @@ function to() {
|
|
|
300
300
|
];
|
|
301
301
|
for (const s of kt)
|
|
302
302
|
si(s);
|
|
303
|
-
typeof window.addEventListener == "function" && window.addEventListener("resize", eo),
|
|
303
|
+
typeof window.addEventListener == "function" && window.addEventListener("resize", eo), Pe = ms();
|
|
304
304
|
}
|
|
305
305
|
function so() {
|
|
306
306
|
for (const s of kt)
|
|
307
307
|
oi(s);
|
|
308
|
-
kt = [], typeof window < "u" && typeof window.removeEventListener == "function" && window.removeEventListener("resize", eo),
|
|
308
|
+
kt = [], typeof window < "u" && typeof window.removeEventListener == "function" && window.removeEventListener("resize", eo), wt = !1, Ee !== void 0 && (clearTimeout(Ee), Ee = void 0), yt = 0, Pe = null;
|
|
309
309
|
}
|
|
310
310
|
function Tt() {
|
|
311
|
-
return
|
|
311
|
+
return ot.size + it.size;
|
|
312
312
|
}
|
|
313
313
|
function It() {
|
|
314
|
-
return
|
|
314
|
+
return Pe ?? ms();
|
|
315
315
|
}
|
|
316
316
|
function ii(s, e = {}) {
|
|
317
317
|
const t = Tt() === 0;
|
|
318
|
-
|
|
318
|
+
ot.add(s), t && to(), e.immediate !== !1 && s(It());
|
|
319
319
|
let o = !0;
|
|
320
320
|
return () => {
|
|
321
|
-
o && (o = !1,
|
|
321
|
+
o && (o = !1, ot.delete(s), Tt() === 0 && so());
|
|
322
322
|
};
|
|
323
323
|
}
|
|
324
324
|
function ri(s, e = {}) {
|
|
325
325
|
const t = Tt() === 0;
|
|
326
|
-
|
|
326
|
+
it.add(s), t && to(), e.immediate !== !1 && s(It());
|
|
327
327
|
let o = !0;
|
|
328
328
|
return () => {
|
|
329
|
-
o && (o = !1,
|
|
329
|
+
o && (o = !1, it.delete(s), Tt() === 0 && so());
|
|
330
330
|
};
|
|
331
331
|
}
|
|
332
332
|
function _n(s) {
|
|
333
|
-
|
|
333
|
+
vt = Zs(s), ot.size > 0 && Ct();
|
|
334
334
|
}
|
|
335
335
|
const ni = 600;
|
|
336
336
|
function ai(s) {
|
|
@@ -402,26 +402,26 @@ function pi(s, e, t = {}) {
|
|
|
402
402
|
n && (n.delete(o), n.size === 0 && (Je.delete(s), oe == null || oe.unobserve(s), Wt--, Wt === 0 && oe && (oe.disconnect(), oe = null)));
|
|
403
403
|
};
|
|
404
404
|
}
|
|
405
|
-
const
|
|
405
|
+
const Pt = /* @__PURE__ */ new Map();
|
|
406
406
|
function fi(s, e) {
|
|
407
|
-
let t =
|
|
408
|
-
t ||
|
|
407
|
+
let t = Pt.get(s);
|
|
408
|
+
t || Pt.set(s, t = /* @__PURE__ */ new Set()), t.add(e);
|
|
409
409
|
}
|
|
410
410
|
function gi(s, e) {
|
|
411
411
|
var t;
|
|
412
|
-
(t =
|
|
412
|
+
(t = Pt.get(s)) == null || t.delete(e);
|
|
413
413
|
}
|
|
414
414
|
function bi(s) {
|
|
415
|
-
return Array.from(
|
|
415
|
+
return Array.from(Pt.get(s) ?? []);
|
|
416
416
|
}
|
|
417
417
|
const io = /* @__PURE__ */ new Map();
|
|
418
418
|
function vi(s, e) {
|
|
419
419
|
io.set(s.toLowerCase(), e);
|
|
420
420
|
}
|
|
421
|
-
function
|
|
421
|
+
function wi(s) {
|
|
422
422
|
return io.get(s.toLowerCase());
|
|
423
423
|
}
|
|
424
|
-
function
|
|
424
|
+
function yi(s, e, t, o = {}) {
|
|
425
425
|
return s.dispatchEvent(new CustomEvent(e, {
|
|
426
426
|
detail: t,
|
|
427
427
|
bubbles: o.bubbles ?? !0,
|
|
@@ -450,19 +450,19 @@ const Ti = { trace() {
|
|
|
450
450
|
}, warn() {
|
|
451
451
|
}, error() {
|
|
452
452
|
} }, Ii = new Proxy({}, { get: () => Ti });
|
|
453
|
-
var me,
|
|
453
|
+
var me, at, _e, lt, ke, ct, $t, Ce, pe, Se, Te, ze, Ne, $e, Ve, De, Re, Vt, ie, Be, I, ro, no, ao, Q, lo, co, Jt, Qt, Qe, Zt, ho;
|
|
454
454
|
const xe = class xe extends Ci {
|
|
455
455
|
constructor() {
|
|
456
456
|
super();
|
|
457
|
-
L(this,
|
|
457
|
+
L(this, I);
|
|
458
458
|
L(this, me, {});
|
|
459
|
-
L(this, nt, /* @__PURE__ */ new Map());
|
|
460
|
-
L(this, _e, /* @__PURE__ */ new Map());
|
|
461
459
|
L(this, at, /* @__PURE__ */ new Map());
|
|
460
|
+
L(this, _e, /* @__PURE__ */ new Map());
|
|
461
|
+
L(this, lt, /* @__PURE__ */ new Map());
|
|
462
462
|
/** Live handler currently bound via each managed `on<Name>` property, keyed by event name. */
|
|
463
463
|
L(this, ke, /* @__PURE__ */ new Map());
|
|
464
|
-
L(this,
|
|
465
|
-
L(this,
|
|
464
|
+
L(this, ct, Go());
|
|
465
|
+
L(this, $t, () => b(this, I, Zt).call(this));
|
|
466
466
|
L(this, Ce, null);
|
|
467
467
|
L(this, pe, !1);
|
|
468
468
|
L(this, Se, []);
|
|
@@ -479,22 +479,22 @@ const xe = class xe extends Ci {
|
|
|
479
479
|
L(this, ze, null);
|
|
480
480
|
L(this, Ne, !1);
|
|
481
481
|
/** Unsubscribe from the environment observable; set only while connected AND `environmentChanged` is overridden. */
|
|
482
|
-
L(this,
|
|
482
|
+
L(this, $e);
|
|
483
483
|
/** Unsubscribe from the throttled viewport observable; set only while connected AND `viewportChanged` is overridden. */
|
|
484
|
-
L(this,
|
|
484
|
+
L(this, Ve);
|
|
485
485
|
/** Unsubscribe from the per-element ResizeObserver; set only while connected AND `resized` is overridden. */
|
|
486
|
-
L(this,
|
|
486
|
+
L(this, De);
|
|
487
487
|
L(this, Re);
|
|
488
|
-
L(this,
|
|
488
|
+
L(this, Vt);
|
|
489
489
|
L(this, ie);
|
|
490
490
|
L(this, Be);
|
|
491
491
|
const t = this.constructor, o = t.inputs ?? [], i = ki(t.events);
|
|
492
|
-
|
|
492
|
+
b(this, I, ao).call(this, o, i);
|
|
493
493
|
for (const r of o)
|
|
494
|
-
h(this,
|
|
494
|
+
h(this, at).set(r.configKey, r), r.attribute && h(this, _e).set(r.attribute, r);
|
|
495
495
|
for (const r of i)
|
|
496
|
-
h(this,
|
|
497
|
-
|
|
496
|
+
h(this, lt).set(r.name, r);
|
|
497
|
+
b(this, I, ro).call(this, o), b(this, I, lo).call(this, o), b(this, I, co).call(this, i);
|
|
498
498
|
}
|
|
499
499
|
static get observedAttributes() {
|
|
500
500
|
const t = (this.inputs ?? []).filter((o) => o.attribute).map((o) => o.attribute);
|
|
@@ -516,29 +516,29 @@ const xe = class xe extends Ci {
|
|
|
516
516
|
try {
|
|
517
517
|
n = jo(r, i, this);
|
|
518
518
|
} catch (l) {
|
|
519
|
-
|
|
519
|
+
b(this, I, Q).call(this, `converter for "${r.configKey}" threw parsing attribute ${t}="${i}"; using default`, l), n = b(this, I, no).call(this, r);
|
|
520
520
|
}
|
|
521
|
-
|
|
521
|
+
b(this, I, Qt).call(this, n);
|
|
522
522
|
}
|
|
523
523
|
connectedCallback() {
|
|
524
|
-
fi(this.localName, this), h(this, Te) || (
|
|
524
|
+
fi(this.localName, this), h(this, Te) || (P(this, Te, !0), P(this, ze, null), P(this, pe, !0)), b(this, I, Qe).call(this), this.connect(), this.environmentChanged !== xe.prototype.environmentChanged && P(this, $e, ii((t) => this.environmentChanged(t))), this.viewportChanged !== xe.prototype.viewportChanged && P(this, Ve, ri((t) => this.viewportChanged(t))), this.resized !== xe.prototype.resized && P(this, De, pi(this, (t) => this.resized(t), { immediate: !1 }));
|
|
525
525
|
}
|
|
526
526
|
disconnectedCallback() {
|
|
527
527
|
var t, o, i;
|
|
528
|
-
gi(this.localName, this), (t = h(this,
|
|
528
|
+
gi(this.localName, this), (t = h(this, $e)) == null || t.call(this), P(this, $e, void 0), (o = h(this, Ve)) == null || o.call(this), P(this, Ve, void 0), (i = h(this, De)) == null || i.call(this), P(this, De, void 0), this.disconnect();
|
|
529
529
|
}
|
|
530
530
|
// ── public batching API ─────────────────────────────────────────────────
|
|
531
531
|
/** Apply many inputs (by `configKey` or attribute name) as ONE reinit/update. */
|
|
532
532
|
setAttributes(t) {
|
|
533
533
|
for (const [o, i] of Object.entries(t)) {
|
|
534
|
-
const r = h(this,
|
|
535
|
-
r &&
|
|
534
|
+
const r = h(this, at).get(o) ?? h(this, _e).get(o);
|
|
535
|
+
r && b(this, I, Jt).call(this, r, i);
|
|
536
536
|
}
|
|
537
|
-
|
|
537
|
+
b(this, I, Qe).call(this);
|
|
538
538
|
}
|
|
539
539
|
/** Run `fn` and coalesce every input change it makes into a single reinit/update. */
|
|
540
540
|
batch(t) {
|
|
541
|
-
t(),
|
|
541
|
+
t(), b(this, I, Qe).call(this);
|
|
542
542
|
}
|
|
543
543
|
/**
|
|
544
544
|
* Apply any pending input writes **synchronously, now** — running the
|
|
@@ -554,7 +554,7 @@ const xe = class xe extends Ci {
|
|
|
554
554
|
* `await whenSettled()` between the two.
|
|
555
555
|
*/
|
|
556
556
|
flush() {
|
|
557
|
-
|
|
557
|
+
b(this, I, Qe).call(this);
|
|
558
558
|
}
|
|
559
559
|
/**
|
|
560
560
|
* Resolves once the element is **settled** — i.e. every staged input change
|
|
@@ -592,11 +592,11 @@ const xe = class xe extends Ci {
|
|
|
592
592
|
get log() {
|
|
593
593
|
if (h(this, Be))
|
|
594
594
|
return h(this, Be);
|
|
595
|
-
const t =
|
|
595
|
+
const t = wi(this.localName);
|
|
596
596
|
if (!t)
|
|
597
597
|
return Ii;
|
|
598
|
-
const o = h(this,
|
|
599
|
-
return
|
|
598
|
+
const o = h(this, Vt) ?? P(this, Vt, `${this.localName}#${this.id || ++Si}`);
|
|
599
|
+
return P(this, Be, t.forInstance(o, () => h(this, ie)));
|
|
600
600
|
}
|
|
601
601
|
/**
|
|
602
602
|
* Turn on verbose logging for THIS element only (default `debug`), independent
|
|
@@ -604,11 +604,11 @@ const xe = class xe extends Ci {
|
|
|
604
604
|
* picks one instance. Pairs with {@link disableLogging}.
|
|
605
605
|
*/
|
|
606
606
|
enableLogging(t = "debug") {
|
|
607
|
-
|
|
607
|
+
P(this, ie, t);
|
|
608
608
|
}
|
|
609
609
|
/** Clear this element's logging override (falls back to the type-level level). */
|
|
610
610
|
disableLogging() {
|
|
611
|
-
|
|
611
|
+
P(this, ie, void 0);
|
|
612
612
|
}
|
|
613
613
|
/** Whether this element has an active logging override (not unset/`silent`). */
|
|
614
614
|
get isLoggingEnabled() {
|
|
@@ -732,7 +732,7 @@ const xe = class xe extends Ci {
|
|
|
732
732
|
if (typeof this.attachInternals != "function")
|
|
733
733
|
return null;
|
|
734
734
|
try {
|
|
735
|
-
return
|
|
735
|
+
return P(this, Re, this.attachInternals());
|
|
736
736
|
} catch {
|
|
737
737
|
return null;
|
|
738
738
|
}
|
|
@@ -762,8 +762,8 @@ const xe = class xe extends Ci {
|
|
|
762
762
|
* `emit` does not call it separately.
|
|
763
763
|
*/
|
|
764
764
|
emit(t, o, i) {
|
|
765
|
-
const r = h(this,
|
|
766
|
-
return
|
|
765
|
+
const r = h(this, lt).get(t);
|
|
766
|
+
return yi(this, t, o, {
|
|
767
767
|
bubbles: (i == null ? void 0 : i.bubbles) ?? (r == null ? void 0 : r.bubbles),
|
|
768
768
|
composed: (i == null ? void 0 : i.composed) ?? (r == null ? void 0 : r.composed),
|
|
769
769
|
cancelable: (i == null ? void 0 : i.cancelable) ?? (r == null ? void 0 : r.cancelable)
|
|
@@ -801,7 +801,7 @@ const xe = class xe extends Ci {
|
|
|
801
801
|
}
|
|
802
802
|
}
|
|
803
803
|
};
|
|
804
|
-
me = new WeakMap(),
|
|
804
|
+
me = new WeakMap(), at = new WeakMap(), _e = new WeakMap(), lt = new WeakMap(), ke = new WeakMap(), ct = new WeakMap(), $t = new WeakMap(), Ce = new WeakMap(), pe = new WeakMap(), Se = new WeakMap(), Te = new WeakMap(), ze = new WeakMap(), Ne = new WeakMap(), $e = new WeakMap(), Ve = new WeakMap(), De = new WeakMap(), Re = new WeakMap(), Vt = new WeakMap(), ie = new WeakMap(), Be = new WeakMap(), I = new WeakSet(), // ── internals ─────────────────────────────────────────────────────────────
|
|
805
805
|
ro = function(t) {
|
|
806
806
|
var o;
|
|
807
807
|
for (const i of t) {
|
|
@@ -810,7 +810,7 @@ ro = function(t) {
|
|
|
810
810
|
try {
|
|
811
811
|
r = i.converter.fromAttribute(null, this, i.attribute ?? i.configKey);
|
|
812
812
|
} catch (n) {
|
|
813
|
-
|
|
813
|
+
b(this, I, Q).call(this, `converter for "${i.configKey}" threw computing its default; using \`default\``, n), r = i.default;
|
|
814
814
|
}
|
|
815
815
|
h(this, me)[i.configKey] = r, i.field && (this[i.field] = r);
|
|
816
816
|
}
|
|
@@ -825,10 +825,10 @@ ao = function(t, o) {
|
|
|
825
825
|
Is.add(i);
|
|
826
826
|
const r = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set();
|
|
827
827
|
for (const c of t)
|
|
828
|
-
r.has(c.configKey) &&
|
|
828
|
+
r.has(c.configKey) && b(this, I, Q).call(this, `invalid input table: duplicate configKey "${c.configKey}"`), r.add(c.configKey), c.attribute && (n.has(c.attribute) && b(this, I, Q).call(this, `invalid input table: duplicate attribute "${c.attribute}"`), n.add(c.attribute)), c.reflect && !c.attribute && b(this, I, Q).call(this, `invalid input table: "${c.configKey}" has reflect:true but no attribute to reflect to`), c.reflect && !((l = c.converter) != null && l.toAttribute) && b(this, I, Q).call(this, `invalid input table: "${c.configKey}" has reflect:true but its converter has no toAttribute`);
|
|
829
829
|
const a = /* @__PURE__ */ new Set();
|
|
830
830
|
for (const c of o)
|
|
831
|
-
a.has(c.name) &&
|
|
831
|
+
a.has(c.name) && b(this, I, Q).call(this, `invalid event table: duplicate event "${c.name}"`), a.add(c.name), /^[a-z][a-z0-9-]*$/.test(c.name) || b(this, I, Q).call(this, `invalid event table: event "${c.name}" should be lowercase kebab-case (e.g. "date-select")`), c.property && r.has(c.property) && b(this, I, Q).call(this, `invalid event table: event "${c.name}" property "${c.property}" collides with an input configKey`);
|
|
832
832
|
}, /**
|
|
833
833
|
* Always-on console warning for input validation failures. Deliberately uses
|
|
834
834
|
* `console.warn` directly — NOT the (future) categorized logger — so rejected
|
|
@@ -843,8 +843,8 @@ Q = function(t, ...o) {
|
|
|
843
843
|
configurable: !0,
|
|
844
844
|
enumerable: !0,
|
|
845
845
|
get: () => h(this, me)[i],
|
|
846
|
-
set: (a) =>
|
|
847
|
-
}), r && ((h(this, ze) ??
|
|
846
|
+
set: (a) => b(this, I, Jt).call(this, o, a)
|
|
847
|
+
}), r && ((h(this, ze) ?? P(this, ze, /* @__PURE__ */ new Set())).add(i), this[i] = n);
|
|
848
848
|
}
|
|
849
849
|
}, /**
|
|
850
850
|
* Install a managed `on<Name>` handler property per event. Assigning it
|
|
@@ -875,48 +875,48 @@ co = function(t) {
|
|
|
875
875
|
var r;
|
|
876
876
|
const i = Uo(t, o);
|
|
877
877
|
if (!i) {
|
|
878
|
-
|
|
878
|
+
b(this, I, Q).call(this, `rejected invalid value for property "${t.configKey}"; keeping previous value`, o);
|
|
879
879
|
return;
|
|
880
880
|
}
|
|
881
|
-
if (
|
|
881
|
+
if (b(this, I, Qt).call(this, i), t.reflect && t.attribute && ((r = t.converter) != null && r.toAttribute)) {
|
|
882
882
|
const n = t.converter.toAttribute(i.value);
|
|
883
|
-
|
|
883
|
+
P(this, Ne, !0);
|
|
884
884
|
try {
|
|
885
885
|
n === null ? this.removeAttribute(t.attribute) : this.setAttribute(t.attribute, n);
|
|
886
886
|
} finally {
|
|
887
|
-
|
|
887
|
+
P(this, Ne, !1);
|
|
888
888
|
}
|
|
889
889
|
}
|
|
890
890
|
}, Qt = function(t) {
|
|
891
|
-
h(this, me)[t.configKey] = t.value, t.field && (this[t.field] = t.value), t.on !== "none" && (t.on === "reinit" &&
|
|
891
|
+
h(this, me)[t.configKey] = t.value, t.field && (this[t.field] = t.value), t.on !== "none" && (t.on === "reinit" && P(this, pe, !0), (h(this, Ce) ?? P(this, Ce, {}))[t.configKey] = t.value, h(this, ct).schedule(h(this, $t)));
|
|
892
892
|
}, /** Cancel any queued microtask and flush pending changes synchronously now. */
|
|
893
893
|
Qe = function() {
|
|
894
|
-
h(this,
|
|
894
|
+
h(this, ct).cancel(), b(this, I, Zt).call(this);
|
|
895
895
|
}, Zt = function() {
|
|
896
896
|
if (!this.isConnected)
|
|
897
897
|
return;
|
|
898
898
|
const t = h(this, pe), o = h(this, Ce);
|
|
899
|
-
|
|
899
|
+
P(this, pe, !1), P(this, Ce, null), t ? this.reinit() : o && Object.keys(o).length > 0 && this.update(o), b(this, I, ho).call(this);
|
|
900
900
|
}, /** Resolve everyone awaiting {@link whenSettled} for the flush that just ran. */
|
|
901
901
|
ho = function() {
|
|
902
902
|
if (h(this, Se).length === 0)
|
|
903
903
|
return;
|
|
904
904
|
const t = h(this, Se);
|
|
905
|
-
|
|
905
|
+
P(this, Se, []);
|
|
906
906
|
for (const o of t)
|
|
907
907
|
o();
|
|
908
908
|
}, /** The opt-in input table. Subclasses set this to enable attribute/property reactivity. */
|
|
909
|
-
|
|
909
|
+
p(xe, "inputs"), /**
|
|
910
910
|
* The opt-in event table (SPEC §12.5). Each entry (a bare name, or an
|
|
911
911
|
* {@link EventDef} for overrides) declares an outward notification that
|
|
912
912
|
* {@link emit} can fire and installs a managed `on<Name>` handler property.
|
|
913
913
|
*/
|
|
914
|
-
|
|
914
|
+
p(xe, "events");
|
|
915
915
|
let Yt = xe;
|
|
916
|
-
function
|
|
916
|
+
function Ps(s, e, t) {
|
|
917
917
|
typeof customElements > "u" || customElements.get(s) || customElements.define(s, e, t);
|
|
918
918
|
}
|
|
919
|
-
function
|
|
919
|
+
function Pi(s) {
|
|
920
920
|
return {
|
|
921
921
|
enableLogging: (e) => s.enableLogging(e),
|
|
922
922
|
disableLogging: () => s.disableLogging(),
|
|
@@ -925,30 +925,30 @@ function Oi(s) {
|
|
|
925
925
|
getCategories: () => [...s.LOGGING_CATEGORIES]
|
|
926
926
|
};
|
|
927
927
|
}
|
|
928
|
-
function
|
|
928
|
+
function Oi(s, e, t) {
|
|
929
929
|
const { config: o, logging: i, shouldAutoDefine: r = !0 } = t;
|
|
930
930
|
i && vi(s, i);
|
|
931
931
|
const n = {
|
|
932
932
|
version: () => o.version,
|
|
933
933
|
config: o,
|
|
934
|
-
...i ? { logging:
|
|
935
|
-
register: () =>
|
|
934
|
+
...i ? { logging: Pi(i) } : {},
|
|
935
|
+
register: () => Ps(s, e),
|
|
936
936
|
getInstances: () => bi(s)
|
|
937
937
|
};
|
|
938
|
-
return typeof window < "u" && ((window.components ?? (window.components = {}))[s] = n), r &&
|
|
938
|
+
return typeof window < "u" && ((window.components ?? (window.components = {}))[s] = n), r && Ps(s, e), n;
|
|
939
939
|
}
|
|
940
|
-
const
|
|
941
|
-
let
|
|
940
|
+
const Os = /* @__PURE__ */ new Map(), Ms = /* @__PURE__ */ new WeakMap();
|
|
941
|
+
let mt;
|
|
942
942
|
function Mi(s) {
|
|
943
943
|
if (typeof CSSStyleSheet > "u" || !("adoptedStyleSheets" in s))
|
|
944
944
|
return !1;
|
|
945
|
-
if (
|
|
945
|
+
if (mt === void 0)
|
|
946
946
|
try {
|
|
947
|
-
new CSSStyleSheet().replaceSync(""),
|
|
947
|
+
new CSSStyleSheet().replaceSync(""), mt = !0;
|
|
948
948
|
} catch {
|
|
949
|
-
|
|
949
|
+
mt = !1;
|
|
950
950
|
}
|
|
951
|
-
return
|
|
951
|
+
return mt;
|
|
952
952
|
}
|
|
953
953
|
function Li(s, ...e) {
|
|
954
954
|
if (typeof document > "u")
|
|
@@ -962,8 +962,8 @@ function Li(s, ...e) {
|
|
|
962
962
|
t.add(r);
|
|
963
963
|
if (Mi(s)) {
|
|
964
964
|
const r = o.map((n) => {
|
|
965
|
-
let a =
|
|
966
|
-
return a || (a = new CSSStyleSheet(), a.replaceSync(n),
|
|
965
|
+
let a = Os.get(n);
|
|
966
|
+
return a || (a = new CSSStyleSheet(), a.replaceSync(n), Os.set(n, a)), a;
|
|
967
967
|
});
|
|
968
968
|
s.adoptedStyleSheets = [...s.adoptedStyleSheets, ...r];
|
|
969
969
|
return;
|
|
@@ -1016,7 +1016,7 @@ function Ni(s, e, t = {}) {
|
|
|
1016
1016
|
const o = t.minScore ?? 3, i = t.limit ?? 3, r = new Set(s.split("-").filter(Boolean));
|
|
1017
1017
|
return [...e].map((n) => ({ k: n, score: n.split("-").filter((a) => r.has(a)).length })).filter((n) => n.score >= o).sort((n, a) => a.score - n.score).slice(0, i).map((n) => n.k);
|
|
1018
1018
|
}
|
|
1019
|
-
function
|
|
1019
|
+
function $i(s, e) {
|
|
1020
1020
|
if (e.consumed.size === 0)
|
|
1021
1021
|
return [];
|
|
1022
1022
|
const t = [];
|
|
@@ -1024,16 +1024,16 @@ function Vi(s, e) {
|
|
|
1024
1024
|
e.consumed.has(o) || t.push({ name: o, suggestions: Ni(o, e.consumed, { minScore: e.minScore }) });
|
|
1025
1025
|
return t;
|
|
1026
1026
|
}
|
|
1027
|
-
const
|
|
1027
|
+
const Vi = {
|
|
1028
1028
|
mobile: "fullscreen",
|
|
1029
1029
|
tablet: "floating",
|
|
1030
1030
|
desktop: "floating"
|
|
1031
1031
|
};
|
|
1032
|
-
function
|
|
1032
|
+
function Di(s, e, t = {}) {
|
|
1033
1033
|
if (s !== "auto")
|
|
1034
1034
|
return s;
|
|
1035
1035
|
const o = ai(e);
|
|
1036
|
-
return t[o] ??
|
|
1036
|
+
return t[o] ?? Vi[o];
|
|
1037
1037
|
}
|
|
1038
1038
|
function jt(s) {
|
|
1039
1039
|
return {
|
|
@@ -1042,15 +1042,15 @@ function jt(s) {
|
|
|
1042
1042
|
isModal: s === "modal"
|
|
1043
1043
|
};
|
|
1044
1044
|
}
|
|
1045
|
-
let Ge = 0,
|
|
1045
|
+
let Ge = 0, pt = null;
|
|
1046
1046
|
function Ri() {
|
|
1047
1047
|
if (typeof document > "u")
|
|
1048
1048
|
return () => {
|
|
1049
1049
|
};
|
|
1050
|
-
Ge === 0 && (
|
|
1050
|
+
Ge === 0 && (pt = document.body.style.overflow, document.body.style.overflow = "hidden"), Ge++;
|
|
1051
1051
|
let s = !1;
|
|
1052
1052
|
return () => {
|
|
1053
|
-
s || (s = !0, Ge = Math.max(0, Ge - 1), Ge === 0 &&
|
|
1053
|
+
s || (s = !0, Ge = Math.max(0, Ge - 1), Ge === 0 && pt !== null && (document.body.style.overflow = pt, pt = null));
|
|
1054
1054
|
};
|
|
1055
1055
|
}
|
|
1056
1056
|
function Bi(s) {
|
|
@@ -1068,7 +1068,7 @@ function Bi(s) {
|
|
|
1068
1068
|
e.removeEventListener("resize", i), e.removeEventListener("scroll", i), s.style.height = "", s.style.top = "";
|
|
1069
1069
|
};
|
|
1070
1070
|
}
|
|
1071
|
-
const ps = "km-overlay-activated", Hi = Symbol("km-overlay-all-groups"),
|
|
1071
|
+
const ps = "km-overlay-activated", Hi = Symbol("km-overlay-all-groups"), Ot = /* @__PURE__ */ new Set(), qe = /* @__PURE__ */ new Map();
|
|
1072
1072
|
let Mt = !1;
|
|
1073
1073
|
function fs() {
|
|
1074
1074
|
return typeof document < "u";
|
|
@@ -1078,21 +1078,21 @@ function Fi(s, e) {
|
|
|
1078
1078
|
}
|
|
1079
1079
|
function mo(s) {
|
|
1080
1080
|
const e = s.detail, t = e == null ? void 0 : e.source, o = e == null ? void 0 : e.group;
|
|
1081
|
-
for (const i of Array.from(
|
|
1081
|
+
for (const i of Array.from(Ot))
|
|
1082
1082
|
i.id !== t && Fi(i.group, o) && i.dismiss();
|
|
1083
1083
|
}
|
|
1084
1084
|
function Ki() {
|
|
1085
1085
|
Mt || !fs() || (document.addEventListener(ps, mo), Mt = !0);
|
|
1086
1086
|
}
|
|
1087
1087
|
function Wi() {
|
|
1088
|
-
Mt &&
|
|
1088
|
+
Mt && Ot.size === 0 && fs() && (document.removeEventListener(ps, mo), Mt = !1);
|
|
1089
1089
|
}
|
|
1090
1090
|
function ji(s, e) {
|
|
1091
1091
|
fs() && document.dispatchEvent(new CustomEvent(ps, { detail: { source: s, group: e } }));
|
|
1092
1092
|
}
|
|
1093
1093
|
function Ui(s, e) {
|
|
1094
1094
|
const t = { id: {}, group: e, dismiss: s };
|
|
1095
|
-
return
|
|
1095
|
+
return Ot.add(t), Ki(), {
|
|
1096
1096
|
activate() {
|
|
1097
1097
|
qe.set(t.group, t), ji(t.id, t.group);
|
|
1098
1098
|
},
|
|
@@ -1100,7 +1100,7 @@ function Ui(s, e) {
|
|
|
1100
1100
|
qe.get(t.group) === t && qe.delete(t.group);
|
|
1101
1101
|
},
|
|
1102
1102
|
dispose() {
|
|
1103
|
-
|
|
1103
|
+
Ot.delete(t), qe.get(t.group) === t && qe.delete(t.group), Wi();
|
|
1104
1104
|
}
|
|
1105
1105
|
};
|
|
1106
1106
|
}
|
|
@@ -1136,22 +1136,22 @@ let ue;
|
|
|
1136
1136
|
const Et = {};
|
|
1137
1137
|
class po {
|
|
1138
1138
|
constructor(e, t) {
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1139
|
+
p(this, "name");
|
|
1140
|
+
p(this, "levels", U);
|
|
1141
|
+
p(this, "methodFactory");
|
|
1142
1142
|
// Installed by replaceLoggingMethods(); definite-assignment via `!`.
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1143
|
+
p(this, "trace");
|
|
1144
|
+
p(this, "debug");
|
|
1145
|
+
p(this, "info");
|
|
1146
|
+
p(this, "warn");
|
|
1147
|
+
p(this, "error");
|
|
1148
|
+
p(this, "log");
|
|
1149
1149
|
/** Level inherited from the root (cached so it stays in sync with installed methods). */
|
|
1150
|
-
|
|
1150
|
+
p(this, "inheritedLevel");
|
|
1151
1151
|
/** Optional per-logger default; overrides inherited. */
|
|
1152
|
-
|
|
1152
|
+
p(this, "defaultLevel", null);
|
|
1153
1153
|
/** Optional user-set level; overrides default. */
|
|
1154
|
-
|
|
1154
|
+
p(this, "userLevel", null);
|
|
1155
1155
|
this.name = e, this.methodFactory = t, this.inheritedLevel = Xe(ue ? ue.getLevel() : "WARN");
|
|
1156
1156
|
const o = this.getPersistedLevel();
|
|
1157
1157
|
o != null && (this.userLevel = Xe(o)), this.replaceLoggingMethods();
|
|
@@ -1309,7 +1309,7 @@ function or(s, e = Ji) {
|
|
|
1309
1309
|
}
|
|
1310
1310
|
};
|
|
1311
1311
|
}
|
|
1312
|
-
const be = Math.min, ne = Math.max, At = Math.round,
|
|
1312
|
+
const be = Math.min, ne = Math.max, At = Math.round, ft = Math.floor, ae = (s) => ({
|
|
1313
1313
|
x: s,
|
|
1314
1314
|
y: s
|
|
1315
1315
|
}), ir = {
|
|
@@ -1324,7 +1324,7 @@ function fo(s, e, t) {
|
|
|
1324
1324
|
function Ke(s, e) {
|
|
1325
1325
|
return typeof s == "function" ? s(e) : s;
|
|
1326
1326
|
}
|
|
1327
|
-
function
|
|
1327
|
+
function Oe(s) {
|
|
1328
1328
|
return s.split("-")[0];
|
|
1329
1329
|
}
|
|
1330
1330
|
function We(s) {
|
|
@@ -1356,12 +1356,12 @@ function nr(s) {
|
|
|
1356
1356
|
function es(s) {
|
|
1357
1357
|
return s.includes("start") ? s.replace("start", "end") : s.replace("end", "start");
|
|
1358
1358
|
}
|
|
1359
|
-
const Ns = ["left", "right"],
|
|
1359
|
+
const Ns = ["left", "right"], $s = ["right", "left"], ar = ["top", "bottom"], lr = ["bottom", "top"];
|
|
1360
1360
|
function cr(s, e, t) {
|
|
1361
1361
|
switch (s) {
|
|
1362
1362
|
case "top":
|
|
1363
1363
|
case "bottom":
|
|
1364
|
-
return t ? e ?
|
|
1364
|
+
return t ? e ? $s : Ns : e ? Ns : $s;
|
|
1365
1365
|
case "left":
|
|
1366
1366
|
case "right":
|
|
1367
1367
|
return e ? ar : lr;
|
|
@@ -1371,11 +1371,11 @@ function cr(s, e, t) {
|
|
|
1371
1371
|
}
|
|
1372
1372
|
function dr(s, e, t, o) {
|
|
1373
1373
|
const i = We(s);
|
|
1374
|
-
let r = cr(
|
|
1374
|
+
let r = cr(Oe(s), t === "start", o);
|
|
1375
1375
|
return i && (r = r.map((n) => n + "-" + i), e && (r = r.concat(r.map(es)))), r;
|
|
1376
1376
|
}
|
|
1377
1377
|
function zt(s) {
|
|
1378
|
-
const e =
|
|
1378
|
+
const e = Oe(s);
|
|
1379
1379
|
return ir[e] + s.slice(e.length);
|
|
1380
1380
|
}
|
|
1381
1381
|
function hr(s) {
|
|
@@ -1413,46 +1413,46 @@ function Nt(s) {
|
|
|
1413
1413
|
y: t
|
|
1414
1414
|
};
|
|
1415
1415
|
}
|
|
1416
|
-
function
|
|
1416
|
+
function Vs(s, e, t) {
|
|
1417
1417
|
let {
|
|
1418
1418
|
reference: o,
|
|
1419
1419
|
floating: i
|
|
1420
1420
|
} = s;
|
|
1421
|
-
const r = re(e), n = bs(e), a = gs(n), l =
|
|
1422
|
-
let
|
|
1421
|
+
const r = re(e), n = bs(e), a = gs(n), l = Oe(e), c = r === "y", d = o.x + o.width / 2 - i.width / 2, u = o.y + o.height / 2 - i.height / 2, f = o[a] / 2 - i[a] / 2;
|
|
1422
|
+
let m;
|
|
1423
1423
|
switch (l) {
|
|
1424
1424
|
case "top":
|
|
1425
|
-
|
|
1425
|
+
m = {
|
|
1426
1426
|
x: d,
|
|
1427
1427
|
y: o.y - i.height
|
|
1428
1428
|
};
|
|
1429
1429
|
break;
|
|
1430
1430
|
case "bottom":
|
|
1431
|
-
|
|
1431
|
+
m = {
|
|
1432
1432
|
x: d,
|
|
1433
1433
|
y: o.y + o.height
|
|
1434
1434
|
};
|
|
1435
1435
|
break;
|
|
1436
1436
|
case "right":
|
|
1437
|
-
|
|
1437
|
+
m = {
|
|
1438
1438
|
x: o.x + o.width,
|
|
1439
1439
|
y: u
|
|
1440
1440
|
};
|
|
1441
1441
|
break;
|
|
1442
1442
|
case "left":
|
|
1443
|
-
|
|
1443
|
+
m = {
|
|
1444
1444
|
x: o.x - i.width,
|
|
1445
1445
|
y: u
|
|
1446
1446
|
};
|
|
1447
1447
|
break;
|
|
1448
1448
|
default:
|
|
1449
|
-
|
|
1449
|
+
m = {
|
|
1450
1450
|
x: o.x,
|
|
1451
1451
|
y: o.y
|
|
1452
1452
|
};
|
|
1453
1453
|
}
|
|
1454
1454
|
const g = We(e);
|
|
1455
|
-
return g && (
|
|
1455
|
+
return g && (m[n] += f * (g === "end" ? 1 : -1) * (t && c ? -1 : 1)), m;
|
|
1456
1456
|
}
|
|
1457
1457
|
async function ur(s, e) {
|
|
1458
1458
|
var t;
|
|
@@ -1469,9 +1469,9 @@ async function ur(s, e) {
|
|
|
1469
1469
|
rootBoundary: d = "viewport",
|
|
1470
1470
|
elementContext: u = "floating",
|
|
1471
1471
|
altBoundary: f = !1,
|
|
1472
|
-
padding:
|
|
1473
|
-
} = Ke(e, s), g = bo(
|
|
1474
|
-
element: (t = await (r.isElement == null ? void 0 : r.isElement(
|
|
1472
|
+
padding: m = 0
|
|
1473
|
+
} = Ke(e, s), g = bo(m), y = a[f ? u === "floating" ? "reference" : "floating" : u], v = Nt(await r.getClippingRect({
|
|
1474
|
+
element: (t = await (r.isElement == null ? void 0 : r.isElement(y))) == null || t ? y : y.contextElement || await (r.getDocumentElement == null ? void 0 : r.getDocumentElement(a.floating)),
|
|
1475
1475
|
boundary: c,
|
|
1476
1476
|
rootBoundary: d,
|
|
1477
1477
|
strategy: l
|
|
@@ -1480,20 +1480,20 @@ async function ur(s, e) {
|
|
|
1480
1480
|
y: i,
|
|
1481
1481
|
width: n.floating.width,
|
|
1482
1482
|
height: n.floating.height
|
|
1483
|
-
} : n.reference,
|
|
1483
|
+
} : n.reference, C = await (r.getOffsetParent == null ? void 0 : r.getOffsetParent(a.floating)), E = await (r.isElement == null ? void 0 : r.isElement(C)) && await (r.getScale == null ? void 0 : r.getScale(C)) || {
|
|
1484
1484
|
x: 1,
|
|
1485
1485
|
y: 1
|
|
1486
|
-
},
|
|
1486
|
+
}, z = Nt(r.convertOffsetParentRelativeRectToViewportRelativeRect ? await r.convertOffsetParentRelativeRectToViewportRelativeRect({
|
|
1487
1487
|
elements: a,
|
|
1488
1488
|
rect: _,
|
|
1489
|
-
offsetParent:
|
|
1489
|
+
offsetParent: C,
|
|
1490
1490
|
strategy: l
|
|
1491
1491
|
}) : _);
|
|
1492
1492
|
return {
|
|
1493
|
-
top: (
|
|
1494
|
-
bottom: (
|
|
1495
|
-
left: (
|
|
1496
|
-
right: (
|
|
1493
|
+
top: (v.top - z.top + g.top) / E.y,
|
|
1494
|
+
bottom: (z.bottom - v.bottom + g.bottom) / E.y,
|
|
1495
|
+
left: (v.left - z.left + g.left) / E.x,
|
|
1496
|
+
right: (z.right - v.right + g.right) / E.x
|
|
1497
1497
|
};
|
|
1498
1498
|
}
|
|
1499
1499
|
const mr = 50, pr = async (s, e, t) => {
|
|
@@ -1513,20 +1513,20 @@ const mr = 50, pr = async (s, e, t) => {
|
|
|
1513
1513
|
}), {
|
|
1514
1514
|
x: d,
|
|
1515
1515
|
y: u
|
|
1516
|
-
} =
|
|
1516
|
+
} = Vs(c, o, l), f = o, m = 0;
|
|
1517
1517
|
const g = {};
|
|
1518
|
-
for (let
|
|
1519
|
-
const
|
|
1520
|
-
if (!
|
|
1518
|
+
for (let w = 0; w < r.length; w++) {
|
|
1519
|
+
const y = r[w];
|
|
1520
|
+
if (!y)
|
|
1521
1521
|
continue;
|
|
1522
1522
|
const {
|
|
1523
|
-
name:
|
|
1523
|
+
name: v,
|
|
1524
1524
|
fn: _
|
|
1525
|
-
} =
|
|
1526
|
-
x:
|
|
1525
|
+
} = y, {
|
|
1526
|
+
x: C,
|
|
1527
1527
|
y: E,
|
|
1528
|
-
data:
|
|
1529
|
-
reset:
|
|
1528
|
+
data: z,
|
|
1529
|
+
reset: D
|
|
1530
1530
|
} = await _({
|
|
1531
1531
|
x: d,
|
|
1532
1532
|
y: u,
|
|
@@ -1541,17 +1541,17 @@ const mr = 50, pr = async (s, e, t) => {
|
|
|
1541
1541
|
floating: e
|
|
1542
1542
|
}
|
|
1543
1543
|
});
|
|
1544
|
-
d =
|
|
1545
|
-
...g[
|
|
1546
|
-
...
|
|
1547
|
-
},
|
|
1544
|
+
d = C ?? d, u = E ?? u, g[v] = {
|
|
1545
|
+
...g[v],
|
|
1546
|
+
...z
|
|
1547
|
+
}, D && m < mr && (m++, typeof D == "object" && (D.placement && (f = D.placement), D.rects && (c = D.rects === !0 ? await n.getElementRects({
|
|
1548
1548
|
reference: s,
|
|
1549
1549
|
floating: e,
|
|
1550
1550
|
strategy: i
|
|
1551
|
-
}) :
|
|
1551
|
+
}) : D.rects), {
|
|
1552
1552
|
x: d,
|
|
1553
1553
|
y: u
|
|
1554
|
-
} =
|
|
1554
|
+
} = Vs(c, f, l)), w = -1);
|
|
1555
1555
|
}
|
|
1556
1556
|
return {
|
|
1557
1557
|
x: d,
|
|
@@ -1581,20 +1581,20 @@ const mr = 50, pr = async (s, e, t) => {
|
|
|
1581
1581
|
const u = bo(d), f = {
|
|
1582
1582
|
x: t,
|
|
1583
1583
|
y: o
|
|
1584
|
-
},
|
|
1585
|
-
let
|
|
1586
|
-
(!
|
|
1587
|
-
const q = E / 2 -
|
|
1584
|
+
}, m = bs(i), g = gs(m), w = await n.getDimensions(c), y = m === "y", v = y ? "top" : "left", _ = y ? "bottom" : "right", C = y ? "clientHeight" : "clientWidth", E = r.reference[g] + r.reference[m] - f[m] - r.floating[g], z = f[m] - r.reference[m], D = await (n.getOffsetParent == null ? void 0 : n.getOffsetParent(c));
|
|
1585
|
+
let W = D ? D[C] : 0;
|
|
1586
|
+
(!W || !await (n.isElement == null ? void 0 : n.isElement(D))) && (W = a.floating[C] || r.floating[g]);
|
|
1587
|
+
const q = E / 2 - z / 2, V = W / 2 - w[g] / 2 - 1, S = be(u[v], V), O = be(u[_], V), M = W - w[g] - O, B = W / 2 - w[g] / 2 + q, T = fo(S, B, M), F = !l.arrow && We(i) != null && B !== T && r.reference[g] / 2 - (B < S ? S : O) - w[g] / 2 < 0, se = F ? B < S ? B - S : B - M : 0;
|
|
1588
1588
|
return {
|
|
1589
|
-
[
|
|
1589
|
+
[m]: f[m] + se,
|
|
1590
1590
|
data: {
|
|
1591
|
-
[
|
|
1592
|
-
centerOffset:
|
|
1593
|
-
...
|
|
1591
|
+
[m]: T,
|
|
1592
|
+
centerOffset: B - T - se,
|
|
1593
|
+
...F && {
|
|
1594
1594
|
alignmentOffset: se
|
|
1595
1595
|
}
|
|
1596
1596
|
},
|
|
1597
|
-
reset:
|
|
1597
|
+
reset: F
|
|
1598
1598
|
};
|
|
1599
1599
|
}
|
|
1600
1600
|
}), gr = function(s) {
|
|
@@ -1614,54 +1614,54 @@ const mr = 50, pr = async (s, e, t) => {
|
|
|
1614
1614
|
mainAxis: d = !0,
|
|
1615
1615
|
crossAxis: u = !0,
|
|
1616
1616
|
fallbackPlacements: f,
|
|
1617
|
-
fallbackStrategy:
|
|
1617
|
+
fallbackStrategy: m = "bestFit",
|
|
1618
1618
|
fallbackAxisSideDirection: g = "none",
|
|
1619
|
-
flipAlignment:
|
|
1620
|
-
...
|
|
1619
|
+
flipAlignment: w = !0,
|
|
1620
|
+
...y
|
|
1621
1621
|
} = Ke(s, e);
|
|
1622
1622
|
if ((t = r.arrow) != null && t.alignmentOffset)
|
|
1623
1623
|
return {};
|
|
1624
|
-
const
|
|
1625
|
-
!f &&
|
|
1626
|
-
const
|
|
1627
|
-
let
|
|
1628
|
-
if (d && V.push(q[
|
|
1629
|
-
const
|
|
1630
|
-
V.push(q[
|
|
1624
|
+
const v = Oe(i), _ = re(a), C = Oe(a) === a, E = await (l.isRTL == null ? void 0 : l.isRTL(c.floating)), z = f || (C || !w ? [zt(a)] : nr(a)), D = g !== "none";
|
|
1625
|
+
!f && D && z.push(...dr(a, w, g, E));
|
|
1626
|
+
const W = [a, ...z], q = await l.detectOverflow(e, y), V = [];
|
|
1627
|
+
let S = ((o = r.flip) == null ? void 0 : o.overflows) || [];
|
|
1628
|
+
if (d && V.push(q[v]), u) {
|
|
1629
|
+
const T = rr(i, n, E);
|
|
1630
|
+
V.push(q[T[0]], q[T[1]]);
|
|
1631
1631
|
}
|
|
1632
|
-
if (
|
|
1632
|
+
if (S = [...S, {
|
|
1633
1633
|
placement: i,
|
|
1634
1634
|
overflows: V
|
|
1635
|
-
}], !V.every((
|
|
1636
|
-
var
|
|
1637
|
-
const
|
|
1638
|
-
if (
|
|
1635
|
+
}], !V.every((T) => T <= 0)) {
|
|
1636
|
+
var O, M;
|
|
1637
|
+
const T = (((O = r.flip) == null ? void 0 : O.index) || 0) + 1, F = W[T];
|
|
1638
|
+
if (F && (!(u === "alignment" ? _ !== re(F) : !1) || // We leave the current main axis only if every placement on that axis
|
|
1639
1639
|
// overflows the main axis.
|
|
1640
|
-
|
|
1640
|
+
S.every((Y) => re(Y.placement) === _ ? Y.overflows[0] > 0 : !0)))
|
|
1641
1641
|
return {
|
|
1642
1642
|
data: {
|
|
1643
|
-
index:
|
|
1644
|
-
overflows:
|
|
1643
|
+
index: T,
|
|
1644
|
+
overflows: S
|
|
1645
1645
|
},
|
|
1646
1646
|
reset: {
|
|
1647
|
-
placement:
|
|
1647
|
+
placement: F
|
|
1648
1648
|
}
|
|
1649
1649
|
};
|
|
1650
|
-
let se = (M =
|
|
1650
|
+
let se = (M = S.filter((we) => we.overflows[0] <= 0).sort((we, Y) => we.overflows[1] - Y.overflows[1])[0]) == null ? void 0 : M.placement;
|
|
1651
1651
|
if (!se)
|
|
1652
|
-
switch (
|
|
1652
|
+
switch (m) {
|
|
1653
1653
|
case "bestFit": {
|
|
1654
|
-
var
|
|
1655
|
-
const
|
|
1656
|
-
if (
|
|
1654
|
+
var B;
|
|
1655
|
+
const we = (B = S.filter((Y) => {
|
|
1656
|
+
if (D) {
|
|
1657
1657
|
const de = re(Y.placement);
|
|
1658
1658
|
return de === _ || // Create a bias to the `y` side axis due to horizontal
|
|
1659
1659
|
// reading directions favoring greater width.
|
|
1660
1660
|
de === "y";
|
|
1661
1661
|
}
|
|
1662
1662
|
return !0;
|
|
1663
|
-
}).map((Y) => [Y.placement, Y.overflows.filter((de) => de > 0).reduce((de,
|
|
1664
|
-
|
|
1663
|
+
}).map((Y) => [Y.placement, Y.overflows.filter((de) => de > 0).reduce((de, Vo) => de + Vo, 0)]).sort((Y, de) => Y[1] - de[1])[0]) == null ? void 0 : B[0];
|
|
1664
|
+
we && (se = we);
|
|
1665
1665
|
break;
|
|
1666
1666
|
}
|
|
1667
1667
|
case "initialPlacement":
|
|
@@ -1684,10 +1684,10 @@ async function vr(s, e) {
|
|
|
1684
1684
|
placement: t,
|
|
1685
1685
|
platform: o,
|
|
1686
1686
|
elements: i
|
|
1687
|
-
} = s, r = await (o.isRTL == null ? void 0 : o.isRTL(i.floating)), n =
|
|
1687
|
+
} = s, r = await (o.isRTL == null ? void 0 : o.isRTL(i.floating)), n = Oe(t), a = We(t), l = re(t) === "y", c = br.has(n) ? -1 : 1, d = r && l ? -1 : 1, u = Ke(e, s);
|
|
1688
1688
|
let {
|
|
1689
1689
|
mainAxis: f,
|
|
1690
|
-
crossAxis:
|
|
1690
|
+
crossAxis: m,
|
|
1691
1691
|
alignmentAxis: g
|
|
1692
1692
|
} = typeof u == "number" ? {
|
|
1693
1693
|
mainAxis: u,
|
|
@@ -1698,15 +1698,15 @@ async function vr(s, e) {
|
|
|
1698
1698
|
crossAxis: u.crossAxis || 0,
|
|
1699
1699
|
alignmentAxis: u.alignmentAxis
|
|
1700
1700
|
};
|
|
1701
|
-
return a && typeof g == "number" && (
|
|
1702
|
-
x:
|
|
1701
|
+
return a && typeof g == "number" && (m = a === "end" ? g * -1 : g), l ? {
|
|
1702
|
+
x: m * d,
|
|
1703
1703
|
y: f * c
|
|
1704
1704
|
} : {
|
|
1705
1705
|
x: f * c,
|
|
1706
|
-
y:
|
|
1706
|
+
y: m * d
|
|
1707
1707
|
};
|
|
1708
1708
|
}
|
|
1709
|
-
const
|
|
1709
|
+
const wr = function(s) {
|
|
1710
1710
|
return s === void 0 && (s = 0), {
|
|
1711
1711
|
name: "offset",
|
|
1712
1712
|
options: s,
|
|
@@ -1728,7 +1728,7 @@ const yr = function(s) {
|
|
|
1728
1728
|
};
|
|
1729
1729
|
}
|
|
1730
1730
|
};
|
|
1731
|
-
},
|
|
1731
|
+
}, yr = function(s) {
|
|
1732
1732
|
return s === void 0 && (s = {}), {
|
|
1733
1733
|
name: "shift",
|
|
1734
1734
|
options: s,
|
|
@@ -1744,11 +1744,11 @@ const yr = function(s) {
|
|
|
1744
1744
|
limiter: l = {
|
|
1745
1745
|
fn: (_) => {
|
|
1746
1746
|
let {
|
|
1747
|
-
x:
|
|
1747
|
+
x: C,
|
|
1748
1748
|
y: E
|
|
1749
1749
|
} = _;
|
|
1750
1750
|
return {
|
|
1751
|
-
x:
|
|
1751
|
+
x: C,
|
|
1752
1752
|
y: E
|
|
1753
1753
|
};
|
|
1754
1754
|
}
|
|
@@ -1757,22 +1757,22 @@ const yr = function(s) {
|
|
|
1757
1757
|
} = Ke(s, e), d = {
|
|
1758
1758
|
x: t,
|
|
1759
1759
|
y: o
|
|
1760
|
-
}, u = await r.detectOverflow(e, c), f = re(i),
|
|
1761
|
-
let g = d[
|
|
1762
|
-
const
|
|
1763
|
-
n && (g =
|
|
1764
|
-
const
|
|
1760
|
+
}, u = await r.detectOverflow(e, c), f = re(i), m = go(f);
|
|
1761
|
+
let g = d[m], w = d[f];
|
|
1762
|
+
const y = (_, C) => fo(C + u[_ === "y" ? "top" : "left"], C, C - u[_ === "y" ? "bottom" : "right"]);
|
|
1763
|
+
n && (g = y(m, g)), a && (w = y(f, w));
|
|
1764
|
+
const v = l.fn({
|
|
1765
1765
|
...e,
|
|
1766
|
-
[
|
|
1767
|
-
[f]:
|
|
1766
|
+
[m]: g,
|
|
1767
|
+
[f]: w
|
|
1768
1768
|
});
|
|
1769
1769
|
return {
|
|
1770
|
-
...
|
|
1770
|
+
...v,
|
|
1771
1771
|
data: {
|
|
1772
|
-
x:
|
|
1773
|
-
y:
|
|
1772
|
+
x: v.x - t,
|
|
1773
|
+
y: v.y - o,
|
|
1774
1774
|
enabled: {
|
|
1775
|
-
[
|
|
1775
|
+
[m]: n,
|
|
1776
1776
|
[f]: a
|
|
1777
1777
|
}
|
|
1778
1778
|
}
|
|
@@ -1793,21 +1793,21 @@ const yr = function(s) {
|
|
|
1793
1793
|
apply: n = () => {
|
|
1794
1794
|
},
|
|
1795
1795
|
...a
|
|
1796
|
-
} = Ke(s, e), l = await i.detectOverflow(e, a), c =
|
|
1796
|
+
} = Ke(s, e), l = await i.detectOverflow(e, a), c = Oe(t), d = We(t), u = re(t) === "y", {
|
|
1797
1797
|
width: f,
|
|
1798
|
-
height:
|
|
1798
|
+
height: m
|
|
1799
1799
|
} = o.floating;
|
|
1800
|
-
let g,
|
|
1801
|
-
c === "top" || c === "bottom" ? (g = c,
|
|
1802
|
-
const
|
|
1803
|
-
let
|
|
1804
|
-
E != null && E.enabled.x && (
|
|
1800
|
+
let g, w;
|
|
1801
|
+
c === "top" || c === "bottom" ? (g = c, w = d === (await (i.isRTL == null ? void 0 : i.isRTL(r.floating)) ? "start" : "end") ? "left" : "right") : (w = c, g = d === "end" ? "top" : "bottom");
|
|
1802
|
+
const y = m - l.top - l.bottom, v = f - l.left - l.right, _ = be(m - l[g], y), C = be(f - l[w], v), E = e.middlewareData.shift, z = !E;
|
|
1803
|
+
let D = _, W = C;
|
|
1804
|
+
E != null && E.enabled.x && (W = v), E != null && E.enabled.y && (D = y), z && !d && (u ? W = f - 2 * ne(l.left, l.right) : D = m - 2 * ne(l.top, l.bottom)), await n({
|
|
1805
1805
|
...e,
|
|
1806
|
-
availableWidth:
|
|
1807
|
-
availableHeight:
|
|
1806
|
+
availableWidth: W,
|
|
1807
|
+
availableHeight: D
|
|
1808
1808
|
});
|
|
1809
1809
|
const q = await i.getDimensions(r.floating);
|
|
1810
|
-
return f !== q.width ||
|
|
1810
|
+
return f !== q.width || m !== q.height ? {
|
|
1811
1811
|
reset: {
|
|
1812
1812
|
rects: !0
|
|
1813
1813
|
}
|
|
@@ -1815,7 +1815,7 @@ const yr = function(s) {
|
|
|
1815
1815
|
}
|
|
1816
1816
|
};
|
|
1817
1817
|
};
|
|
1818
|
-
function
|
|
1818
|
+
function Dt() {
|
|
1819
1819
|
return typeof window < "u";
|
|
1820
1820
|
}
|
|
1821
1821
|
function je(s) {
|
|
@@ -1830,16 +1830,16 @@ function le(s) {
|
|
|
1830
1830
|
return (e = (vo(s) ? s.ownerDocument : s.document) || window.document) == null ? void 0 : e.documentElement;
|
|
1831
1831
|
}
|
|
1832
1832
|
function vo(s) {
|
|
1833
|
-
return
|
|
1833
|
+
return Dt() ? s instanceof Node || s instanceof G(s).Node : !1;
|
|
1834
1834
|
}
|
|
1835
1835
|
function ee(s) {
|
|
1836
|
-
return
|
|
1836
|
+
return Dt() ? s instanceof Element || s instanceof G(s).Element : !1;
|
|
1837
1837
|
}
|
|
1838
1838
|
function ve(s) {
|
|
1839
|
-
return
|
|
1839
|
+
return Dt() ? s instanceof HTMLElement || s instanceof G(s).HTMLElement : !1;
|
|
1840
1840
|
}
|
|
1841
|
-
function
|
|
1842
|
-
return
|
|
1841
|
+
function Ds(s) {
|
|
1842
|
+
return !Dt() || typeof ShadowRoot > "u" ? !1 : s instanceof ShadowRoot || s instanceof G(s).ShadowRoot;
|
|
1843
1843
|
}
|
|
1844
1844
|
function Rt(s) {
|
|
1845
1845
|
const {
|
|
@@ -1865,15 +1865,15 @@ function Bt(s) {
|
|
|
1865
1865
|
return !1;
|
|
1866
1866
|
}
|
|
1867
1867
|
}
|
|
1868
|
-
const kr = /transform|translate|scale|rotate|perspective|filter/, Cr = /paint|layout|strict|content/,
|
|
1868
|
+
const kr = /transform|translate|scale|rotate|perspective|filter/, Cr = /paint|layout|strict|content/, ye = (s) => !!s && s !== "none";
|
|
1869
1869
|
let Ut;
|
|
1870
1870
|
function vs(s) {
|
|
1871
1871
|
const e = ee(s) ? te(s) : s;
|
|
1872
|
-
return
|
|
1872
|
+
return ye(e.transform) || ye(e.translate) || ye(e.scale) || ye(e.rotate) || ye(e.perspective) || !ws() && (ye(e.backdropFilter) || ye(e.filter)) || kr.test(e.willChange || "") || Cr.test(e.contain || "");
|
|
1873
1873
|
}
|
|
1874
1874
|
function Sr(s) {
|
|
1875
1875
|
let e = Me(s);
|
|
1876
|
-
for (; ve(e) && !
|
|
1876
|
+
for (; ve(e) && !rt(e); ) {
|
|
1877
1877
|
if (vs(e))
|
|
1878
1878
|
return e;
|
|
1879
1879
|
if (Bt(e))
|
|
@@ -1882,10 +1882,10 @@ function Sr(s) {
|
|
|
1882
1882
|
}
|
|
1883
1883
|
return null;
|
|
1884
1884
|
}
|
|
1885
|
-
function
|
|
1885
|
+
function ws() {
|
|
1886
1886
|
return Ut == null && (Ut = typeof CSS < "u" && CSS.supports && CSS.supports("-webkit-backdrop-filter", "none")), Ut;
|
|
1887
1887
|
}
|
|
1888
|
-
function
|
|
1888
|
+
function rt(s) {
|
|
1889
1889
|
return /^(html|body|#document)$/.test(je(s));
|
|
1890
1890
|
}
|
|
1891
1891
|
function te(s) {
|
|
@@ -1907,29 +1907,29 @@ function Me(s) {
|
|
|
1907
1907
|
// Step into the shadow DOM of the parent of a slotted node.
|
|
1908
1908
|
s.assignedSlot || // DOM Element detected.
|
|
1909
1909
|
s.parentNode || // ShadowRoot detected.
|
|
1910
|
-
|
|
1910
|
+
Ds(s) && s.host || // Fallback.
|
|
1911
1911
|
le(s)
|
|
1912
1912
|
);
|
|
1913
|
-
return
|
|
1913
|
+
return Ds(e) ? e.host : e;
|
|
1914
1914
|
}
|
|
1915
|
-
function
|
|
1915
|
+
function wo(s) {
|
|
1916
1916
|
const e = Me(s);
|
|
1917
|
-
return
|
|
1917
|
+
return rt(e) ? (s.ownerDocument || s).body : ve(e) && Rt(e) ? e : wo(e);
|
|
1918
1918
|
}
|
|
1919
|
-
function
|
|
1919
|
+
function nt(s, e, t) {
|
|
1920
1920
|
var o;
|
|
1921
1921
|
e === void 0 && (e = []), t === void 0 && (t = !0);
|
|
1922
|
-
const i =
|
|
1922
|
+
const i = wo(s), r = i === ((o = s.ownerDocument) == null ? void 0 : o.body), n = G(i);
|
|
1923
1923
|
if (r) {
|
|
1924
1924
|
const a = ts(n);
|
|
1925
|
-
return e.concat(n, n.visualViewport || [], Rt(i) ? i : [], a && t ?
|
|
1925
|
+
return e.concat(n, n.visualViewport || [], Rt(i) ? i : [], a && t ? nt(a) : []);
|
|
1926
1926
|
} else
|
|
1927
|
-
return e.concat(i,
|
|
1927
|
+
return e.concat(i, nt(i, [], t));
|
|
1928
1928
|
}
|
|
1929
1929
|
function ts(s) {
|
|
1930
1930
|
return s.parent && Object.getPrototypeOf(s.parent) ? s.frameElement : null;
|
|
1931
1931
|
}
|
|
1932
|
-
function
|
|
1932
|
+
function yo(s) {
|
|
1933
1933
|
const e = te(s);
|
|
1934
1934
|
let t = parseFloat(e.width) || 0, o = parseFloat(e.height) || 0;
|
|
1935
1935
|
const i = ve(s), r = i ? s.offsetWidth : t, n = i ? s.offsetHeight : o, a = At(t) !== r || At(o) !== n;
|
|
@@ -1939,18 +1939,18 @@ function wo(s) {
|
|
|
1939
1939
|
$: a
|
|
1940
1940
|
};
|
|
1941
1941
|
}
|
|
1942
|
-
function
|
|
1942
|
+
function ys(s) {
|
|
1943
1943
|
return ee(s) ? s : s.contextElement;
|
|
1944
1944
|
}
|
|
1945
1945
|
function Ae(s) {
|
|
1946
|
-
const e =
|
|
1946
|
+
const e = ys(s);
|
|
1947
1947
|
if (!ve(e))
|
|
1948
1948
|
return ae(1);
|
|
1949
1949
|
const t = e.getBoundingClientRect(), {
|
|
1950
1950
|
width: o,
|
|
1951
1951
|
height: i,
|
|
1952
1952
|
$: r
|
|
1953
|
-
} =
|
|
1953
|
+
} = yo(e);
|
|
1954
1954
|
let n = (r ? At(t.width) : t.width) / o, a = (r ? At(t.height) : t.height) / i;
|
|
1955
1955
|
return (!n || !Number.isFinite(n)) && (n = 1), (!a || !Number.isFinite(a)) && (a = 1), {
|
|
1956
1956
|
x: n,
|
|
@@ -1960,7 +1960,7 @@ function Ae(s) {
|
|
|
1960
1960
|
const Tr = /* @__PURE__ */ ae(0);
|
|
1961
1961
|
function xo(s) {
|
|
1962
1962
|
const e = G(s);
|
|
1963
|
-
return !
|
|
1963
|
+
return !ws() || !e.visualViewport ? Tr : {
|
|
1964
1964
|
x: e.visualViewport.offsetLeft,
|
|
1965
1965
|
y: e.visualViewport.offsetTop
|
|
1966
1966
|
};
|
|
@@ -1970,17 +1970,17 @@ function Ir(s, e, t) {
|
|
|
1970
1970
|
}
|
|
1971
1971
|
function Le(s, e, t, o) {
|
|
1972
1972
|
e === void 0 && (e = !1), t === void 0 && (t = !1);
|
|
1973
|
-
const i = s.getBoundingClientRect(), r =
|
|
1973
|
+
const i = s.getBoundingClientRect(), r = ys(s);
|
|
1974
1974
|
let n = ae(1);
|
|
1975
1975
|
e && (o ? ee(o) && (n = Ae(o)) : n = Ae(s));
|
|
1976
1976
|
const a = Ir(r, t, o) ? xo(r) : ae(0);
|
|
1977
1977
|
let l = (i.left + a.x) / n.x, c = (i.top + a.y) / n.y, d = i.width / n.x, u = i.height / n.y;
|
|
1978
1978
|
if (r && o) {
|
|
1979
|
-
const f = G(r),
|
|
1980
|
-
let g = f,
|
|
1981
|
-
for (;
|
|
1982
|
-
const
|
|
1983
|
-
l *=
|
|
1979
|
+
const f = G(r), m = ee(o) ? G(o) : o;
|
|
1980
|
+
let g = f, w = ts(g);
|
|
1981
|
+
for (; w && m !== g; ) {
|
|
1982
|
+
const y = Ae(w), v = w.getBoundingClientRect(), _ = te(w), C = v.left + (w.clientLeft + parseFloat(_.paddingLeft)) * y.x, E = v.top + (w.clientTop + parseFloat(_.paddingTop)) * y.y;
|
|
1983
|
+
l *= y.x, c *= y.y, d *= y.x, u *= y.y, l += C, c += E, g = G(w), w = ts(g);
|
|
1984
1984
|
}
|
|
1985
1985
|
}
|
|
1986
1986
|
return Nt({
|
|
@@ -2001,7 +2001,7 @@ function _o(s, e) {
|
|
|
2001
2001
|
y: i
|
|
2002
2002
|
};
|
|
2003
2003
|
}
|
|
2004
|
-
function
|
|
2004
|
+
function Pr(s) {
|
|
2005
2005
|
let {
|
|
2006
2006
|
elements: e,
|
|
2007
2007
|
rect: t,
|
|
@@ -2017,8 +2017,8 @@ function Or(s) {
|
|
|
2017
2017
|
}, c = ae(1);
|
|
2018
2018
|
const d = ae(0), u = ve(o);
|
|
2019
2019
|
if ((u || !r) && ((je(o) !== "body" || Rt(n)) && (l = Ht(o)), u)) {
|
|
2020
|
-
const
|
|
2021
|
-
c = Ae(o), d.x =
|
|
2020
|
+
const m = Le(o);
|
|
2021
|
+
c = Ae(o), d.x = m.x + o.clientLeft, d.y = m.y + o.clientTop;
|
|
2022
2022
|
}
|
|
2023
2023
|
const f = n && !u && !r ? _o(n, l) : ae(0);
|
|
2024
2024
|
return {
|
|
@@ -2028,7 +2028,7 @@ function Or(s) {
|
|
|
2028
2028
|
y: t.y * c.y - l.scrollTop * c.y + d.y + f.y
|
|
2029
2029
|
};
|
|
2030
2030
|
}
|
|
2031
|
-
function
|
|
2031
|
+
function Or(s) {
|
|
2032
2032
|
return s.getClientRects ? Array.from(s.getClientRects()) : [];
|
|
2033
2033
|
}
|
|
2034
2034
|
function Mr(s) {
|
|
@@ -2048,12 +2048,12 @@ function Er(s, e, t) {
|
|
|
2048
2048
|
const o = t === "layoutViewport", i = G(s), r = le(s), n = i.visualViewport;
|
|
2049
2049
|
let a = r.clientWidth, l = r.clientHeight, c = 0, d = 0;
|
|
2050
2050
|
if (n) {
|
|
2051
|
-
const f = !
|
|
2051
|
+
const f = !ws() || e === "fixed";
|
|
2052
2052
|
o ? f || (c = -n.offsetLeft, d = -n.offsetTop) : (a = n.width, l = n.height, f && (c = n.offsetLeft, d = n.offsetTop));
|
|
2053
2053
|
}
|
|
2054
2054
|
if (Ft(r) <= 0) {
|
|
2055
|
-
const f = r.ownerDocument,
|
|
2056
|
-
|
|
2055
|
+
const f = r.ownerDocument, m = f.body, g = getComputedStyle(m), w = f.compatMode === "CSS1Compat" && parseFloat(g.marginLeft) + parseFloat(g.marginRight) || 0, y = Math.abs(r.clientWidth - m.clientWidth - w), v = getComputedStyle(r).scrollbarGutter === "stable both-edges" ? y / 2 : y;
|
|
2056
|
+
v <= Lr && (a -= v);
|
|
2057
2057
|
}
|
|
2058
2058
|
return {
|
|
2059
2059
|
width: a,
|
|
@@ -2094,10 +2094,10 @@ function zr(s, e) {
|
|
|
2094
2094
|
const t = e.get(s);
|
|
2095
2095
|
if (t)
|
|
2096
2096
|
return t;
|
|
2097
|
-
let o =
|
|
2097
|
+
let o = nt(s, [], !1).filter((a) => ee(a) && je(a) !== "body"), i = null;
|
|
2098
2098
|
const r = te(s).position === "fixed";
|
|
2099
2099
|
let n = r ? Me(s) : s;
|
|
2100
|
-
for (; ee(n) && !
|
|
2100
|
+
for (; ee(n) && !rt(n); ) {
|
|
2101
2101
|
const a = te(n), l = vs(n), c = i ? i.position : r ? "fixed" : "";
|
|
2102
2102
|
!l && (c === "fixed" || c === "absolute" && a.position === "static") ? o = o.filter((u) => u !== n) : i = a, n = Me(n);
|
|
2103
2103
|
}
|
|
@@ -2113,8 +2113,8 @@ function Nr(s) {
|
|
|
2113
2113
|
const n = [...t === "clippingAncestors" ? Bt(e) ? [] : zr(e, this._c) : [].concat(t), o], a = Rs(e, n[0], i);
|
|
2114
2114
|
let l = a.top, c = a.right, d = a.bottom, u = a.left;
|
|
2115
2115
|
for (let f = 1; f < n.length; f++) {
|
|
2116
|
-
const
|
|
2117
|
-
l = ne(
|
|
2116
|
+
const m = Rs(e, n[f], i);
|
|
2117
|
+
l = ne(m.top, l), c = be(m.right, c), d = be(m.bottom, d), u = ne(m.left, u);
|
|
2118
2118
|
}
|
|
2119
2119
|
return {
|
|
2120
2120
|
width: c - u,
|
|
@@ -2123,17 +2123,17 @@ function Nr(s) {
|
|
|
2123
2123
|
y: l
|
|
2124
2124
|
};
|
|
2125
2125
|
}
|
|
2126
|
-
function
|
|
2126
|
+
function $r(s) {
|
|
2127
2127
|
const {
|
|
2128
2128
|
width: e,
|
|
2129
2129
|
height: t
|
|
2130
|
-
} =
|
|
2130
|
+
} = yo(s);
|
|
2131
2131
|
return {
|
|
2132
2132
|
width: e,
|
|
2133
2133
|
height: t
|
|
2134
2134
|
};
|
|
2135
2135
|
}
|
|
2136
|
-
function
|
|
2136
|
+
function Vr(s, e, t) {
|
|
2137
2137
|
const o = ve(e), i = le(e), r = t === "fixed", n = Le(s, !0, r, e);
|
|
2138
2138
|
let a = {
|
|
2139
2139
|
scrollLeft: 0,
|
|
@@ -2170,7 +2170,7 @@ function ko(s, e) {
|
|
|
2170
2170
|
return t;
|
|
2171
2171
|
if (!ve(s)) {
|
|
2172
2172
|
let i = Me(s);
|
|
2173
|
-
for (; i && !
|
|
2173
|
+
for (; i && !rt(i); ) {
|
|
2174
2174
|
if (ee(i) && !Gt(i))
|
|
2175
2175
|
return i;
|
|
2176
2176
|
i = Me(i);
|
|
@@ -2180,12 +2180,12 @@ function ko(s, e) {
|
|
|
2180
2180
|
let o = Bs(s, e);
|
|
2181
2181
|
for (; o && _r(o) && Gt(o); )
|
|
2182
2182
|
o = Bs(o, e);
|
|
2183
|
-
return o &&
|
|
2183
|
+
return o && rt(o) && Gt(o) && !vs(o) ? t : o || Sr(s) || t;
|
|
2184
2184
|
}
|
|
2185
|
-
const
|
|
2185
|
+
const Dr = async function(s) {
|
|
2186
2186
|
const e = this.getOffsetParent || ko, t = this.getDimensions, o = await t(s.floating);
|
|
2187
2187
|
return {
|
|
2188
|
-
reference:
|
|
2188
|
+
reference: Vr(s.reference, await e(s.floating), s.strategy),
|
|
2189
2189
|
floating: {
|
|
2190
2190
|
x: 0,
|
|
2191
2191
|
y: 0,
|
|
@@ -2198,13 +2198,13 @@ function Rr(s) {
|
|
|
2198
2198
|
return te(s).direction === "rtl";
|
|
2199
2199
|
}
|
|
2200
2200
|
const Co = {
|
|
2201
|
-
convertOffsetParentRelativeRectToViewportRelativeRect:
|
|
2201
|
+
convertOffsetParentRelativeRectToViewportRelativeRect: Pr,
|
|
2202
2202
|
getDocumentElement: le,
|
|
2203
2203
|
getClippingRect: Nr,
|
|
2204
2204
|
getOffsetParent: ko,
|
|
2205
|
-
getElementRects:
|
|
2206
|
-
getClientRects:
|
|
2207
|
-
getDimensions:
|
|
2205
|
+
getElementRects: Dr,
|
|
2206
|
+
getClientRects: Or,
|
|
2207
|
+
getDimensions: $r,
|
|
2208
2208
|
getScale: Ae,
|
|
2209
2209
|
isElement: ee,
|
|
2210
2210
|
isRTL: Rr
|
|
@@ -2222,39 +2222,39 @@ function Br(s, e, t) {
|
|
|
2222
2222
|
function a(d, u) {
|
|
2223
2223
|
d === void 0 && (d = !1), u === void 0 && (u = 1), n();
|
|
2224
2224
|
const f = s.getBoundingClientRect(), {
|
|
2225
|
-
left:
|
|
2225
|
+
left: m,
|
|
2226
2226
|
top: g,
|
|
2227
|
-
width:
|
|
2228
|
-
height:
|
|
2227
|
+
width: w,
|
|
2228
|
+
height: y
|
|
2229
2229
|
} = f;
|
|
2230
|
-
if (d || e(), !
|
|
2230
|
+
if (d || e(), !w || !y)
|
|
2231
2231
|
return;
|
|
2232
|
-
const
|
|
2233
|
-
rootMargin: -
|
|
2232
|
+
const v = ft(g), _ = ft(r.clientWidth - (m + w)), C = ft(r.clientHeight - (g + y)), E = ft(m), D = {
|
|
2233
|
+
rootMargin: -v + "px " + -_ + "px " + -C + "px " + -E + "px",
|
|
2234
2234
|
threshold: ne(0, be(1, u)) || 1
|
|
2235
2235
|
};
|
|
2236
|
-
let
|
|
2236
|
+
let W = !0;
|
|
2237
2237
|
function q(V) {
|
|
2238
|
-
const
|
|
2238
|
+
const S = V[0].intersectionRatio;
|
|
2239
2239
|
if (!So(f, s.getBoundingClientRect()))
|
|
2240
2240
|
return a();
|
|
2241
|
-
if (
|
|
2242
|
-
if (!
|
|
2241
|
+
if (S !== u) {
|
|
2242
|
+
if (!W)
|
|
2243
2243
|
return a();
|
|
2244
|
-
|
|
2244
|
+
S ? a(!1, S) : i = setTimeout(() => {
|
|
2245
2245
|
a(!1, 1e-7);
|
|
2246
2246
|
}, 1e3);
|
|
2247
2247
|
}
|
|
2248
|
-
|
|
2248
|
+
W = !1;
|
|
2249
2249
|
}
|
|
2250
2250
|
try {
|
|
2251
2251
|
o = new IntersectionObserver(q, {
|
|
2252
|
-
|
|
2252
|
+
...D,
|
|
2253
2253
|
// Handle <iframe>s
|
|
2254
2254
|
root: r.ownerDocument
|
|
2255
2255
|
});
|
|
2256
2256
|
} catch {
|
|
2257
|
-
o = new IntersectionObserver(q,
|
|
2257
|
+
o = new IntersectionObserver(q, D);
|
|
2258
2258
|
}
|
|
2259
2259
|
o.observe(s);
|
|
2260
2260
|
}
|
|
@@ -2271,33 +2271,33 @@ function Hr(s, e, t, o) {
|
|
|
2271
2271
|
elementResize: n = typeof ResizeObserver == "function",
|
|
2272
2272
|
layoutShift: a = typeof IntersectionObserver == "function",
|
|
2273
2273
|
animationFrame: l = !1
|
|
2274
|
-
} = o, c =
|
|
2275
|
-
d.forEach((
|
|
2276
|
-
i &&
|
|
2274
|
+
} = o, c = ys(s), d = i || r ? [...c ? nt(c) : [], ...e ? nt(e) : []] : [];
|
|
2275
|
+
d.forEach((v) => {
|
|
2276
|
+
i && v.addEventListener("scroll", t), r && v.addEventListener("resize", t);
|
|
2277
2277
|
});
|
|
2278
2278
|
const u = c && a ? Br(c, t, r) : null;
|
|
2279
|
-
let f = -1,
|
|
2280
|
-
n && (
|
|
2281
|
-
let [_] =
|
|
2282
|
-
_ && _.target === c &&
|
|
2283
|
-
var
|
|
2284
|
-
(
|
|
2279
|
+
let f = -1, m = null;
|
|
2280
|
+
n && (m = new ResizeObserver((v) => {
|
|
2281
|
+
let [_] = v;
|
|
2282
|
+
_ && _.target === c && m && e && (m.unobserve(e), cancelAnimationFrame(f), f = requestAnimationFrame(() => {
|
|
2283
|
+
var C;
|
|
2284
|
+
(C = m) == null || C.observe(e);
|
|
2285
2285
|
})), t();
|
|
2286
|
-
}), c && !l &&
|
|
2287
|
-
let g,
|
|
2288
|
-
l &&
|
|
2289
|
-
function
|
|
2290
|
-
const
|
|
2291
|
-
|
|
2286
|
+
}), c && !l && m.observe(c), e && m.observe(e));
|
|
2287
|
+
let g, w = l ? Le(s) : null;
|
|
2288
|
+
l && y();
|
|
2289
|
+
function y() {
|
|
2290
|
+
const v = Le(s);
|
|
2291
|
+
w && !So(w, v) && t(), w = v, g = requestAnimationFrame(y);
|
|
2292
2292
|
}
|
|
2293
2293
|
return t(), () => {
|
|
2294
|
-
var
|
|
2294
|
+
var v;
|
|
2295
2295
|
d.forEach((_) => {
|
|
2296
2296
|
i && _.removeEventListener("scroll", t), r && _.removeEventListener("resize", t);
|
|
2297
|
-
}), u == null || u(), (
|
|
2297
|
+
}), u == null || u(), (v = m) == null || v.disconnect(), m = null, l && cancelAnimationFrame(g);
|
|
2298
2298
|
};
|
|
2299
2299
|
}
|
|
2300
|
-
const Fr =
|
|
2300
|
+
const Fr = wr, Kr = yr, Wr = gr, qt = xr, jr = fr, Ur = (s, e, t) => {
|
|
2301
2301
|
const o = /* @__PURE__ */ new Map(), i = t ?? {}, r = {
|
|
2302
2302
|
...Co,
|
|
2303
2303
|
...i.platform,
|
|
@@ -2418,24 +2418,24 @@ function Hs(s, e) {
|
|
|
2418
2418
|
}
|
|
2419
2419
|
return s.arrow && t.push(jr({ element: s.arrow.element, padding: s.arrow.padding })), t;
|
|
2420
2420
|
}
|
|
2421
|
-
function
|
|
2421
|
+
function tt(s, e, t = {}) {
|
|
2422
2422
|
const o = t.strategy ?? "fixed";
|
|
2423
2423
|
t.inheritThemeFrom && Jr(t.inheritThemeFrom, s), s.style.position = o, s.style.left = "0", s.style.top = "0";
|
|
2424
2424
|
let i = t.placement ?? "bottom-start", r = t.flip ?? !0, n = Hs(t, r);
|
|
2425
2425
|
const a = t.lockPlacement === "freeze";
|
|
2426
2426
|
let l = !1;
|
|
2427
2427
|
const c = !!t.fixedContainingBlock && !t.platform, d = t.platform ?? (c ? { ...Co, getOffsetParent: () => os(s) } : void 0), u = () => {
|
|
2428
|
-
var
|
|
2429
|
-
(
|
|
2428
|
+
var m;
|
|
2429
|
+
(m = t.beforeCompute) == null || m.call(t), Ur(e, s, {
|
|
2430
2430
|
placement: i,
|
|
2431
2431
|
strategy: o,
|
|
2432
2432
|
middleware: n,
|
|
2433
2433
|
...d ? { platform: d } : {}
|
|
2434
|
-
}).then(({ x: g, y, placement:
|
|
2435
|
-
var _,
|
|
2436
|
-
if (s.style.left = `${g}px`, s.style.top = `${
|
|
2437
|
-
const E = c ? os(s) : window,
|
|
2438
|
-
|
|
2434
|
+
}).then(({ x: g, y: w, placement: y, middlewareData: v }) => {
|
|
2435
|
+
var _, C;
|
|
2436
|
+
if (s.style.left = `${g}px`, s.style.top = `${w}px`, t.arrow && Zr(t.arrow.element, y, v.arrow), a && !l && (l = !0, i = y, r = !1, n = Hs(t, !1)), (_ = t.onPlaced) == null || _.call(t, y), (C = t.onComputed) == null || C.call(t, { x: g, y: w, placement: y }), t.onDrift && e instanceof Element) {
|
|
2437
|
+
const E = c ? os(s) : window, z = Yr({ panel: s, reference: e, expectedX: g, expectedY: w, offsetParent: E });
|
|
2438
|
+
z && t.onDrift(z);
|
|
2439
2439
|
}
|
|
2440
2440
|
});
|
|
2441
2441
|
};
|
|
@@ -2459,36 +2459,36 @@ function tn(s) {
|
|
|
2459
2459
|
contextElement: s.trigger
|
|
2460
2460
|
}, f = (_) => {
|
|
2461
2461
|
d = new DOMRect(_.clientX, _.clientY, 0, 0), n == null || n.update();
|
|
2462
|
-
},
|
|
2462
|
+
}, m = () => {
|
|
2463
2463
|
l && clearTimeout(l), c && clearTimeout(c), l = c = void 0;
|
|
2464
2464
|
}, g = () => {
|
|
2465
|
-
var
|
|
2466
|
-
if (
|
|
2465
|
+
var C;
|
|
2466
|
+
if (m(), a)
|
|
2467
2467
|
return;
|
|
2468
|
-
(
|
|
2468
|
+
(C = s.onBeforeShow) == null || C.call(s), a = !0, e.append(r);
|
|
2469
2469
|
const _ = s.followCursor ? u : s.trigger;
|
|
2470
|
-
n =
|
|
2470
|
+
n = tt(r, _, {
|
|
2471
2471
|
placement: t,
|
|
2472
2472
|
strategy: s.strategy,
|
|
2473
2473
|
offset: s.offset ?? 8,
|
|
2474
2474
|
inheritThemeFrom: s.inheritThemeFrom ?? s.trigger
|
|
2475
2475
|
}), s.followCursor && s.trigger.addEventListener("mousemove", f), r.classList.add(o);
|
|
2476
|
-
}, y = () => {
|
|
2477
|
-
p(), a && (a = !1, r.classList.remove(o), s.followCursor && s.trigger.removeEventListener("mousemove", f), n == null || n.destroy(), n = void 0, r.remove());
|
|
2478
2476
|
}, w = () => {
|
|
2479
|
-
|
|
2480
|
-
},
|
|
2481
|
-
|
|
2477
|
+
m(), a && (a = !1, r.classList.remove(o), s.followCursor && s.trigger.removeEventListener("mousemove", f), n == null || n.destroy(), n = void 0, r.remove());
|
|
2478
|
+
}, y = () => {
|
|
2479
|
+
m(), i.show > 0 ? l = setTimeout(g, i.show) : g();
|
|
2480
|
+
}, v = () => {
|
|
2481
|
+
m(), i.hide > 0 ? c = setTimeout(w, i.hide) : w();
|
|
2482
2482
|
};
|
|
2483
|
-
return s.trigger.addEventListener("mouseenter",
|
|
2483
|
+
return s.trigger.addEventListener("mouseenter", y), s.trigger.addEventListener("mouseleave", v), s.trigger.addEventListener("focusin", y), s.trigger.addEventListener("focusout", v), {
|
|
2484
2484
|
element: r,
|
|
2485
2485
|
get isVisible() {
|
|
2486
2486
|
return a;
|
|
2487
2487
|
},
|
|
2488
2488
|
show: g,
|
|
2489
|
-
hide:
|
|
2489
|
+
hide: w,
|
|
2490
2490
|
destroy() {
|
|
2491
|
-
s.trigger.removeEventListener("mouseenter",
|
|
2491
|
+
s.trigger.removeEventListener("mouseenter", y), s.trigger.removeEventListener("mouseleave", v), s.trigger.removeEventListener("focusin", y), s.trigger.removeEventListener("focusout", v), w();
|
|
2492
2492
|
}
|
|
2493
2493
|
};
|
|
2494
2494
|
}
|
|
@@ -2501,7 +2501,7 @@ function sn(s) {
|
|
|
2501
2501
|
return o;
|
|
2502
2502
|
},
|
|
2503
2503
|
open() {
|
|
2504
|
-
o || (o = !0, e.append(s.panel), t =
|
|
2504
|
+
o || (o = !0, e.append(s.panel), t = tt(s.panel, s.reference, {
|
|
2505
2505
|
placement: s.placement ?? "bottom-start",
|
|
2506
2506
|
strategy: s.strategy,
|
|
2507
2507
|
offset: s.offset,
|
|
@@ -2527,7 +2527,7 @@ function sn(s) {
|
|
|
2527
2527
|
}
|
|
2528
2528
|
};
|
|
2529
2529
|
}
|
|
2530
|
-
const Io = ["INIT", "DATA", "UI", "INTERACTION"], ce = or("MULTISELECT", Io),
|
|
2530
|
+
const Io = ["INIT", "DATA", "UI", "INTERACTION"], ce = or("MULTISELECT", Io), gt = ce.loggers.INIT, K = ce.loggers.DATA, J = ce.loggers.UI, R = ce.loggers.INTERACTION, kn = Io.map((s) => `MULTISELECT:${s}`);
|
|
2531
2531
|
function Cn() {
|
|
2532
2532
|
ce.enableLogging();
|
|
2533
2533
|
}
|
|
@@ -2543,21 +2543,21 @@ function In(s, e) {
|
|
|
2543
2543
|
}
|
|
2544
2544
|
class Fs {
|
|
2545
2545
|
constructor(e) {
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
|
|
2546
|
+
p(this, "container");
|
|
2547
|
+
p(this, "wrapper");
|
|
2548
|
+
p(this, "viewport");
|
|
2549
|
+
p(this, "itemHeight");
|
|
2550
|
+
p(this, "items");
|
|
2551
|
+
p(this, "renderItem");
|
|
2552
|
+
p(this, "bufferSize");
|
|
2553
|
+
p(this, "onVisibleRangeChange");
|
|
2554
|
+
p(this, "onScroll");
|
|
2555
|
+
p(this, "scrollTop", 0);
|
|
2556
|
+
p(this, "viewportHeight", 0);
|
|
2557
|
+
p(this, "visibleStart", 0);
|
|
2558
|
+
p(this, "visibleEnd", 0);
|
|
2559
|
+
p(this, "scrollHandler");
|
|
2560
|
+
p(this, "resizeObserver");
|
|
2561
2561
|
this.container = e.container, this.itemHeight = e.itemHeight, this.items = e.items, this.renderItem = e.renderItem, this.bufferSize = e.bufferSize ?? 10, this.onVisibleRangeChange = e.onVisibleRangeChange, this.onScroll = e.onScroll, this.scrollHandler = this.handleScroll.bind(this), this.init();
|
|
2562
2562
|
}
|
|
2563
2563
|
/**
|
|
@@ -2620,11 +2620,21 @@ class Fs {
|
|
|
2620
2620
|
* Scroll to make item at index visible (like scrollIntoView with block: 'nearest')
|
|
2621
2621
|
* Only scrolls if item is outside visible area, and scrolls minimally
|
|
2622
2622
|
*/
|
|
2623
|
-
scrollToIndex(e) {
|
|
2623
|
+
scrollToIndex(e, t = "start") {
|
|
2624
2624
|
if (e < 0 || e >= this.items.length)
|
|
2625
2625
|
return;
|
|
2626
|
-
|
|
2627
|
-
|
|
2626
|
+
this.updateViewportHeight();
|
|
2627
|
+
const o = e * this.itemHeight, i = o + this.itemHeight, r = Math.max(0, this.items.length * this.itemHeight - this.viewportHeight);
|
|
2628
|
+
let n;
|
|
2629
|
+
if (t === "center")
|
|
2630
|
+
n = o - (this.viewportHeight - this.itemHeight) / 2;
|
|
2631
|
+
else if (t === "nearest") {
|
|
2632
|
+
const a = this.container.scrollTop, l = a + this.viewportHeight;
|
|
2633
|
+
if (o >= a && i <= l) return;
|
|
2634
|
+
n = o < a ? o : i - this.viewportHeight;
|
|
2635
|
+
} else
|
|
2636
|
+
n = o;
|
|
2637
|
+
n = Math.max(0, Math.min(n, r)), this.container.scrollTop = n, this.scrollTop = n, this.render();
|
|
2628
2638
|
}
|
|
2629
2639
|
/**
|
|
2630
2640
|
* Get currently visible range
|
|
@@ -2697,10 +2707,10 @@ function he(s, e) {
|
|
|
2697
2707
|
return s[e];
|
|
2698
2708
|
}
|
|
2699
2709
|
function nn(s = {}) {
|
|
2700
|
-
const e = s.idMember, t = s.pathMember, o = s.getPathCallback, i = s.parentPathMember, r = s.levelMember, n = s.hasChildrenMember, a = s.isSelectableMember, l = s.getIsSelectableCallback, c = s.treeId || "multiselect-tree", d = s.orderMember, u = s.getDisplayValueCallback, f = Ze(i),
|
|
2701
|
-
let
|
|
2702
|
-
const
|
|
2703
|
-
treePathSeparator:
|
|
2710
|
+
const e = s.idMember, t = s.pathMember, o = s.getPathCallback, i = s.parentPathMember, r = s.levelMember, n = s.hasChildrenMember, a = s.isSelectableMember, l = s.getIsSelectableCallback, c = s.treeId || "multiselect-tree", d = s.orderMember, u = s.getDisplayValueCallback, f = Ze(i), m = Ze(r), g = Ze(n), w = Ze(a), y = "x", v = s.treePathSeparator || ".", _ = Ks();
|
|
2711
|
+
let C = 0, E = null;
|
|
2712
|
+
const z = (V) => o ? o(V) : t ? he(V, t) : void 0, D = {
|
|
2713
|
+
treePathSeparator: v,
|
|
2704
2714
|
root: _,
|
|
2705
2715
|
get tree() {
|
|
2706
2716
|
return Object.values(_.children);
|
|
@@ -2711,80 +2721,80 @@ function nn(s = {}) {
|
|
|
2711
2721
|
*/
|
|
2712
2722
|
get flatNodes() {
|
|
2713
2723
|
if (E) return E;
|
|
2714
|
-
const V = [],
|
|
2715
|
-
function M(
|
|
2716
|
-
let
|
|
2717
|
-
|
|
2718
|
-
for (const
|
|
2719
|
-
V.push(
|
|
2724
|
+
const V = [], S = s.isSorted ?? !1, O = s.sortCallback;
|
|
2725
|
+
function M(B) {
|
|
2726
|
+
let T = Object.values(B.children);
|
|
2727
|
+
S && O && T.length > 0 && (T = O(T));
|
|
2728
|
+
for (const F of T)
|
|
2729
|
+
V.push(F), F.hasChildren && M(F);
|
|
2720
2730
|
}
|
|
2721
2731
|
return M(_), E = V, V;
|
|
2722
2732
|
},
|
|
2723
2733
|
insertArray(V) {
|
|
2724
|
-
V = V || [], _.children = {},
|
|
2725
|
-
const
|
|
2726
|
-
let
|
|
2727
|
-
const
|
|
2728
|
-
|
|
2729
|
-
const
|
|
2730
|
-
return
|
|
2731
|
-
Ws(
|
|
2734
|
+
V = V || [], _.children = {}, C = 0, E = null;
|
|
2735
|
+
const S = [];
|
|
2736
|
+
let O = V.map((M, B) => {
|
|
2737
|
+
const T = Ks();
|
|
2738
|
+
T.treeId = c, T.id = e ? he(M, e) : void 0;
|
|
2739
|
+
const F = z(M);
|
|
2740
|
+
return F == null || F === "" || typeof F != "string" ? (S.push(`index ${B}`), null) : (T.path = F, (T.id === void 0 || T.id === -1) && (T.id = F), f ? T.parentPath = on(T.path, v) : T.parentPath = he(M, i), T.pathSegment = js(
|
|
2741
|
+
Ws(T.path, T.parentPath ?? "", v),
|
|
2732
2742
|
0,
|
|
2733
2743
|
1,
|
|
2734
|
-
|
|
2735
|
-
),
|
|
2744
|
+
v
|
|
2745
|
+
), m ? T.level = rn(T.path, v) : T.level = he(M, r), g || (T.hasChildren = he(M, n)), T.data = M, T);
|
|
2736
2746
|
}).filter((M) => M !== null);
|
|
2737
|
-
s.isSorted || (s.sortCallback ?
|
|
2738
|
-
for (const M of
|
|
2739
|
-
|
|
2740
|
-
if (l || !
|
|
2741
|
-
for (const M of
|
|
2747
|
+
s.isSorted || (s.sortCallback ? O = s.sortCallback(O) : O = q(O));
|
|
2748
|
+
for (const M of O)
|
|
2749
|
+
W(M.parentPath ?? "", M);
|
|
2750
|
+
if (l || !w)
|
|
2751
|
+
for (const M of O)
|
|
2742
2752
|
if (l)
|
|
2743
2753
|
M.isSelectable = l(M) !== !1;
|
|
2744
2754
|
else {
|
|
2745
|
-
const
|
|
2746
|
-
M.isSelectable =
|
|
2755
|
+
const B = he(M.data, a);
|
|
2756
|
+
M.isSelectable = B == null ? !0 : !!B;
|
|
2747
2757
|
}
|
|
2748
|
-
|
|
2749
|
-
`[ltree ${c}] ${
|
|
2758
|
+
S.length > 0 && console.warn(
|
|
2759
|
+
`[ltree ${c}] ${S.length} option(s) had an invalid path and were skipped (pathMember="${t}"). Offending: ${S.slice(0, 5).join(", ")}` + (S.length > 5 ? ", …" : "")
|
|
2750
2760
|
);
|
|
2751
2761
|
},
|
|
2752
|
-
getNodeByPath(V,
|
|
2753
|
-
let
|
|
2762
|
+
getNodeByPath(V, S) {
|
|
2763
|
+
let O = S || _;
|
|
2754
2764
|
if (V) {
|
|
2755
|
-
const M = V.split(
|
|
2756
|
-
for (let
|
|
2757
|
-
const
|
|
2758
|
-
if (!
|
|
2765
|
+
const M = V.split(v);
|
|
2766
|
+
for (let B = 0; B < M.length; B++) {
|
|
2767
|
+
const T = y + M[B];
|
|
2768
|
+
if (!O.children.hasOwnProperty(T))
|
|
2759
2769
|
return null;
|
|
2760
|
-
|
|
2770
|
+
O = O.children[T];
|
|
2761
2771
|
}
|
|
2762
2772
|
}
|
|
2763
|
-
return
|
|
2773
|
+
return O;
|
|
2764
2774
|
}
|
|
2765
2775
|
};
|
|
2766
|
-
function
|
|
2767
|
-
const
|
|
2768
|
-
if (!
|
|
2769
|
-
return `Node: ${
|
|
2770
|
-
|
|
2771
|
-
const M =
|
|
2772
|
-
return
|
|
2776
|
+
function W(V, S) {
|
|
2777
|
+
const O = D.getNodeByPath(V);
|
|
2778
|
+
if (!O)
|
|
2779
|
+
return `Node: ${S.path} - Could not find parent node: ${V}`;
|
|
2780
|
+
m && (S.level = (O.level || 0) + 1);
|
|
2781
|
+
const M = y + js(Ws(S.path, V, v), 0, 1, v);
|
|
2782
|
+
return O.children.hasOwnProperty(M) || (O.children[M] = S, g && !O.hasChildren && (O.hasChildren = !0), C = Math.max(C, S.level || 0)), null;
|
|
2773
2783
|
}
|
|
2774
2784
|
function q(V) {
|
|
2775
|
-
return V.sort((
|
|
2776
|
-
const M =
|
|
2777
|
-
if (M !==
|
|
2778
|
-
if (
|
|
2779
|
-
return
|
|
2780
|
-
if (d &&
|
|
2781
|
-
const
|
|
2782
|
-
if (
|
|
2785
|
+
return V.sort((S, O) => {
|
|
2786
|
+
const M = S.level || 0, B = O.level || 0;
|
|
2787
|
+
if (M !== B) return M - B;
|
|
2788
|
+
if (S.parentPath !== O.parentPath)
|
|
2789
|
+
return S.parentPath ? O.parentPath ? S.parentPath.localeCompare(O.parentPath) : 1 : -1;
|
|
2790
|
+
if (d && S.data && O.data) {
|
|
2791
|
+
const T = he(S.data, d) ?? 0, F = he(O.data, d) ?? 0;
|
|
2792
|
+
if (T !== F) return T - F;
|
|
2783
2793
|
}
|
|
2784
|
-
return u ? u(
|
|
2794
|
+
return u ? u(S).localeCompare(u(O)) : S.path.localeCompare(O.path);
|
|
2785
2795
|
});
|
|
2786
2796
|
}
|
|
2787
|
-
return
|
|
2797
|
+
return D;
|
|
2788
2798
|
}
|
|
2789
2799
|
function Us(s, e) {
|
|
2790
2800
|
const t = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Set(), r = (l) => String(e(l.data)), n = (l) => {
|
|
@@ -2846,148 +2856,152 @@ function Xt(s, e, t, o) {
|
|
|
2846
2856
|
for (const a of s.roots) n(a);
|
|
2847
2857
|
return r;
|
|
2848
2858
|
}
|
|
2849
|
-
var
|
|
2859
|
+
var $;
|
|
2850
2860
|
class ln {
|
|
2851
2861
|
constructor(e, t = {}) {
|
|
2852
|
-
|
|
2853
|
-
|
|
2854
|
-
|
|
2862
|
+
p(this, "element");
|
|
2863
|
+
p(this, "instanceId");
|
|
2864
|
+
p(this, "options");
|
|
2855
2865
|
// Backing field for the open state. Read/written internally via `this.#isOpen`
|
|
2856
2866
|
// so the public `isOpen` accessor (get/set) can drive open()/close() without
|
|
2857
2867
|
// recursing. See the imperative API at the bottom of the class.
|
|
2858
|
-
L(this,
|
|
2859
|
-
|
|
2860
|
-
|
|
2861
|
-
|
|
2862
|
-
|
|
2868
|
+
L(this, $, !1);
|
|
2869
|
+
p(this, "selectedValues", /* @__PURE__ */ new Set());
|
|
2870
|
+
p(this, "selectedOptions", /* @__PURE__ */ new Map());
|
|
2871
|
+
p(this, "allOptions", []);
|
|
2872
|
+
p(this, "filteredOptions", []);
|
|
2863
2873
|
// Tree mode: the hierarchy built from option paths, and the flat list of
|
|
2864
2874
|
// nodes currently shown. `treeNodes` stays index-aligned with
|
|
2865
2875
|
// `filteredOptions` so focus/keyboard/virtual-scroll keep working unchanged.
|
|
2866
|
-
|
|
2867
|
-
|
|
2876
|
+
p(this, "tree", null);
|
|
2877
|
+
p(this, "treeNodes", []);
|
|
2868
2878
|
// Cascade checkbox mode (tree + multiple + checkbox-mode="cascade"): the index
|
|
2869
2879
|
// is rebuilt with the tree; `cascadeCheckedAtoms` is the derived set of checked
|
|
2870
2880
|
// leaf-level atoms, refreshed from `selectedValues` before each render.
|
|
2871
|
-
|
|
2872
|
-
|
|
2873
|
-
|
|
2874
|
-
|
|
2881
|
+
p(this, "cascadeIndex", null);
|
|
2882
|
+
p(this, "cascadeCheckedAtoms", /* @__PURE__ */ new Set());
|
|
2883
|
+
p(this, "hiddenInputs", []);
|
|
2884
|
+
p(this, "focusedIndex", -1);
|
|
2875
2885
|
// Stable imperative facade handed to keydownCallback (built once, reused). See getKeyboardController().
|
|
2876
|
-
|
|
2877
|
-
|
|
2878
|
-
|
|
2879
|
-
|
|
2880
|
-
|
|
2881
|
-
|
|
2882
|
-
|
|
2883
|
-
|
|
2884
|
-
|
|
2885
|
-
|
|
2886
|
-
|
|
2887
|
-
|
|
2886
|
+
p(this, "keyboardController", null);
|
|
2887
|
+
p(this, "matchingIndices", /* @__PURE__ */ new Set());
|
|
2888
|
+
p(this, "searchTerm", "");
|
|
2889
|
+
/** Keyboard focus sits on the empty-state "add new" prompt (arrow-navigated). */
|
|
2890
|
+
p(this, "addNewFocused", !1);
|
|
2891
|
+
/** An async addNewCallback is in flight — the prompt shows a spinner + pending text. */
|
|
2892
|
+
p(this, "addNewPending", !1);
|
|
2893
|
+
p(this, "isLoading", !1);
|
|
2894
|
+
p(this, "searchDebounceTimer");
|
|
2895
|
+
p(this, "searchAbortController");
|
|
2896
|
+
p(this, "showSelectedPopover", !1);
|
|
2897
|
+
p(this, "selectedPopoverPlacement", null);
|
|
2898
|
+
p(this, "dropdownPlacement", null);
|
|
2899
|
+
p(this, "isRTL", !1);
|
|
2900
|
+
p(this, "effectiveBadgesPosition", "bottom");
|
|
2901
|
+
p(this, "justClosedViaClick", !1);
|
|
2888
2902
|
// Set for one tick when the dropdown is opened by a pointer gesture. A fullscreen
|
|
2889
2903
|
// overlay (position:fixed, inset:0) appears over the pointer between mousedown and
|
|
2890
2904
|
// the follow-up click, so that click can target a common ancestor above the
|
|
2891
2905
|
// portaled panel and be misread as an outside-click. This guard swallows exactly
|
|
2892
2906
|
// that one click. See attachEvents() (mousedown) and handleClickOutside().
|
|
2893
|
-
|
|
2894
|
-
|
|
2907
|
+
p(this, "justOpenedViaClick", !1);
|
|
2908
|
+
p(this, "positioningDriftWarned", !1);
|
|
2895
2909
|
// Fullscreen counterpart of positioningDriftWarned: warn once per instance when an
|
|
2896
2910
|
// ancestor establishes a fixed-positioning containing block, so the full-viewport
|
|
2897
2911
|
// sheet is anchored to that ancestor instead of the viewport (see warnFullscreenContainingBlock).
|
|
2898
|
-
|
|
2912
|
+
p(this, "fullscreenContainingBlockWarned", !1);
|
|
2899
2913
|
// How the open dropdown is presented. 'floating' anchors it to the input (the
|
|
2900
2914
|
// default); 'fullscreen' renders it as a full-viewport overlay with its own
|
|
2901
2915
|
// search header + close button — the phone pattern, driven from the element's
|
|
2902
2916
|
// environmentChanged() hook via setPresentation(). See open()/enterFullscreen().
|
|
2903
|
-
|
|
2904
|
-
|
|
2905
|
-
|
|
2917
|
+
p(this, "presentationMode", "floating");
|
|
2918
|
+
p(this, "fullscreenHeader", null);
|
|
2919
|
+
p(this, "fullscreenSearchInput", null);
|
|
2906
2920
|
// Inline ✕ inside the fullscreen search box that clears the term. Shown only while
|
|
2907
2921
|
// there's text; touch has no keyboard Escape, so this is the way to reset a search.
|
|
2908
|
-
|
|
2922
|
+
p(this, "fullscreenSearchClear", null);
|
|
2909
2923
|
// Leading mode toggle inside the fullscreen search box (opt-in via
|
|
2910
2924
|
// isSearchModeToggleShown) that flips searchMode filter<->navigate live. Its icon
|
|
2911
2925
|
// reflects the current mode; clicking re-projects the current term in place.
|
|
2912
|
-
|
|
2926
|
+
p(this, "fullscreenModeToggle", null);
|
|
2913
2927
|
// Navigate-mode match navigator shown under the fullscreen search box: a result
|
|
2914
2928
|
// count ("3 of 12") plus prev/next buttons that step through matches. Touch has no
|
|
2915
2929
|
// Ctrl+Arrow shortcut, so these buttons are the on-screen substitute. Only built in
|
|
2916
2930
|
// searchMode 'navigate' (filter mode narrows the list, so it needs no jump UI).
|
|
2917
|
-
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
|
|
2931
|
+
p(this, "fullscreenNav", null);
|
|
2932
|
+
p(this, "fullscreenNavCount", null);
|
|
2933
|
+
p(this, "fullscreenNavPrev", null);
|
|
2934
|
+
p(this, "fullscreenNavNext", null);
|
|
2921
2935
|
// Releases this instance's page-scroll lock (null when not locked). The core
|
|
2922
2936
|
// helper is ref-counted; we hold at most one lock per instance. See lockBodyScroll().
|
|
2923
|
-
|
|
2937
|
+
p(this, "bodyScrollUnlock", null);
|
|
2924
2938
|
// Saved inline `overflow-x` of <html> while a fullscreen sheet clamps the host
|
|
2925
2939
|
// document's horizontal overflow (null when not clamped). See clampDocumentOverflowX().
|
|
2926
|
-
|
|
2940
|
+
p(this, "overflowXClamp", null);
|
|
2927
2941
|
// Detaches the visualViewport listener that shrinks the fullscreen sheet to sit
|
|
2928
2942
|
// above the soft keyboard (null when not attached). See observeKeyboardInset().
|
|
2929
|
-
|
|
2943
|
+
p(this, "keyboardInsetCleanup", null);
|
|
2930
2944
|
// True while a history entry is pushed for the open fullscreen sheet, so the phone
|
|
2931
2945
|
// Back gesture/button pops it (closing the sheet) instead of navigating the page.
|
|
2932
2946
|
// See pushOverlayHistory()/popOverlayHistory()/onOverlayPopstate().
|
|
2933
|
-
|
|
2934
|
-
|
|
2947
|
+
p(this, "overlayHistoryActive", !1);
|
|
2948
|
+
p(this, "onOverlayPopstate", () => this.handleOverlayPopstate());
|
|
2935
2949
|
// Floating UI cleanup functions
|
|
2936
|
-
|
|
2937
|
-
|
|
2938
|
-
|
|
2950
|
+
p(this, "dropdownCleanup", null);
|
|
2951
|
+
p(this, "hintCleanup", null);
|
|
2952
|
+
p(this, "selectedPopoverCleanup", null);
|
|
2939
2953
|
// All hover tooltips (badge text, badge-remove buttons, action buttons), keyed by id.
|
|
2940
|
-
|
|
2954
|
+
p(this, "tooltips", /* @__PURE__ */ new Map());
|
|
2941
2955
|
// Full-label reveal shown when a clipped row's info button is tapped (fullscreen
|
|
2942
2956
|
// only). A manually-controlled popover — NOT a hover tooltip — so it stays put
|
|
2943
2957
|
// until explicitly dismissed (a hover tooltip's synthetic mouseleave on touch
|
|
2944
2958
|
// would flash it away). `labelRevealTrigger` tracks the button so a second tap
|
|
2945
2959
|
// toggles it off. See toggleLabelReveal() / hideLabelReveal().
|
|
2946
|
-
|
|
2947
|
-
|
|
2948
|
-
|
|
2960
|
+
p(this, "labelRevealTrigger", null);
|
|
2961
|
+
p(this, "labelRevealPanel", null);
|
|
2962
|
+
p(this, "labelRevealPopover", null);
|
|
2949
2963
|
// Transient message ("toast") surface — see showMessage(). Rendered above the panel
|
|
2950
2964
|
// so a veto reason (or any consumer feedback) is visible even in the fullscreen
|
|
2951
2965
|
// overlay, where page-level UI is hidden behind the sheet.
|
|
2952
|
-
|
|
2953
|
-
|
|
2954
|
-
|
|
2966
|
+
p(this, "messageEl", null);
|
|
2967
|
+
p(this, "messageCleanup", null);
|
|
2968
|
+
p(this, "messageTimer", null);
|
|
2955
2969
|
// Dismiss option tooltips the instant the list scrolls. Without this, a shown
|
|
2956
2970
|
// tooltip's floating-ui autoUpdate keeps chasing its anchor row as it scrolls
|
|
2957
2971
|
// (most visible under virtual scroll, where the row also recycles), so the
|
|
2958
2972
|
// tooltip visibly slides to the viewport edge before the next render clears it.
|
|
2959
2973
|
// Capturing so it catches scroll from the inner options container (scroll
|
|
2960
2974
|
// doesn't bubble). Same function ref → addEventListener dedupes across opens.
|
|
2961
|
-
|
|
2975
|
+
p(this, "onDropdownScroll", () => {
|
|
2962
2976
|
this.hideOptionTooltips(), this.hideLabelReveal();
|
|
2963
2977
|
});
|
|
2964
2978
|
// Virtual scroll instance
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
|
|
2968
|
-
|
|
2979
|
+
p(this, "virtualScroll", null);
|
|
2980
|
+
p(this, "optionsContainer", null);
|
|
2981
|
+
p(this, "selectedPopoverVirtualScroll", null);
|
|
2982
|
+
p(this, "selectedPopoverContainer", null);
|
|
2969
2983
|
// DOM elements
|
|
2970
|
-
|
|
2984
|
+
p(this, "input");
|
|
2971
2985
|
// The field shell (border/background) wrapping the input + trailing decorations.
|
|
2972
2986
|
// Floating panels anchor to this (not the narrower flex <input>) so they align to
|
|
2973
2987
|
// and match the full field width.
|
|
2974
|
-
|
|
2975
|
-
|
|
2976
|
-
|
|
2977
|
-
|
|
2978
|
-
|
|
2988
|
+
p(this, "inputWrapper");
|
|
2989
|
+
p(this, "dropdown");
|
|
2990
|
+
p(this, "dropdownInner");
|
|
2991
|
+
p(this, "badgesContainer");
|
|
2992
|
+
p(this, "counter");
|
|
2979
2993
|
// Inline ✕ inside the input that wipes the whole selection (opt-in via isClearShown).
|
|
2980
2994
|
// Always in the DOM; updateClearButton() toggles its display by selection/enabled state.
|
|
2981
|
-
|
|
2982
|
-
|
|
2983
|
-
|
|
2995
|
+
p(this, "clearButton");
|
|
2996
|
+
p(this, "hint");
|
|
2997
|
+
p(this, "selectedPopover");
|
|
2984
2998
|
// Document-level event handlers (stored for cleanup)
|
|
2985
|
-
|
|
2986
|
-
|
|
2999
|
+
p(this, "documentKeydownHandler", null);
|
|
3000
|
+
p(this, "documentClickHandler", null);
|
|
2987
3001
|
// Cross-component "one overlay open at a time" coordination (core). activate() on
|
|
2988
3002
|
// open() dismisses every OTHER participating overlay (multiselects, datepickers, …);
|
|
2989
3003
|
// our onDismiss closes this dropdown when another opens. Torn down in destroy().
|
|
2990
|
-
|
|
3004
|
+
p(this, "overlayCoord", null);
|
|
2991
3005
|
this.element = e, this.instanceId = `MS-${Math.random().toString(36).slice(2, 11)}`, this.options = {
|
|
2992
3006
|
// String options
|
|
2993
3007
|
searchHint: e.dataset.searchHint || "",
|
|
@@ -3001,6 +3015,8 @@ class ln {
|
|
|
3001
3015
|
badgesThresholdMode: e.dataset.badgesThresholdMode || "count",
|
|
3002
3016
|
maxHeight: e.dataset.maxHeight || "20rem",
|
|
3003
3017
|
emptyMessage: e.dataset.emptyMessage || "No results found",
|
|
3018
|
+
addNewText: e.dataset.addNewText || void 0,
|
|
3019
|
+
addNewPendingText: e.dataset.addNewPendingText || void 0,
|
|
3004
3020
|
loadingMessage: e.dataset.loadingMessage || "Loading...",
|
|
3005
3021
|
searchInputMode: e.dataset.searchInputMode || "normal",
|
|
3006
3022
|
searchMode: e.dataset.searchMode || "filter",
|
|
@@ -3167,7 +3183,7 @@ class ln {
|
|
|
3167
3183
|
return i ? i.isSelectable !== !1 : !0;
|
|
3168
3184
|
}
|
|
3169
3185
|
init() {
|
|
3170
|
-
this.parseOptions(), this.buildHTML(), this.attachEvents(), this.parseInitialSelection(),
|
|
3186
|
+
this.parseOptions(), this.buildHTML(), this.attachEvents(), this.parseInitialSelection(), gt.debug(`Initialized [${this.instanceId}] with options:`, {
|
|
3171
3187
|
placeholder: this.options.searchPlaceholder,
|
|
3172
3188
|
totalOptions: this.allOptions.length,
|
|
3173
3189
|
isCloseOnSelect: this.options.isCloseOnSelect,
|
|
@@ -3375,7 +3391,7 @@ class ln {
|
|
|
3375
3391
|
*/
|
|
3376
3392
|
detectRTL() {
|
|
3377
3393
|
const e = this.element.getRootNode(), t = e instanceof ShadowRoot ? e.host : this.element, o = t.getAttribute("dir") === "rtl", i = t.closest('[dir="rtl"]') !== null;
|
|
3378
|
-
this.isRTL = o || i,
|
|
3394
|
+
this.isRTL = o || i, gt.debug(`[${this.instanceId}] RTL Debug:`, {
|
|
3379
3395
|
isShadowRoot: e instanceof ShadowRoot,
|
|
3380
3396
|
elementDir: t.getAttribute("dir"),
|
|
3381
3397
|
hasElementDir: o,
|
|
@@ -3401,12 +3417,12 @@ class ln {
|
|
|
3401
3417
|
}
|
|
3402
3418
|
buildHTML() {
|
|
3403
3419
|
const e = this.options.container || document.body;
|
|
3404
|
-
this.detectRTL(), this.element.classList.add("ms"), this.isRTL && (this.element.classList.add("ms--rtl"),
|
|
3420
|
+
this.detectRTL(), this.element.classList.add("ms"), this.isRTL && (this.element.classList.add("ms--rtl"), gt.debug(`[${this.instanceId}] Added ms--rtl class to element`)), (!this.options.isCheckboxesShown || !this.options.isMultipleEnabled) && this.element.classList.add("ms--no-checkboxes"), this.options.isSelectedPopoverEnabled || this.element.classList.add("ms--no-selected-popover");
|
|
3405
3421
|
const t = document.createElement("div");
|
|
3406
3422
|
t.className = "ms__input-wrapper", this.inputWrapper = t, this.input = document.createElement("input"), this.input.type = "text", this.input.className = "ms__input", this.input.placeholder = this.getPlaceholderText(), this.input.autocomplete = "off", this.options.searchInputMode === "readonly" ? this.input.readOnly = !0 : this.options.searchInputMode === "hidden" && (this.input.style.display = "none");
|
|
3407
3423
|
const o = document.createElement("span");
|
|
3408
3424
|
o.className = "ms__toggle", o.addEventListener("mousedown", (n) => {
|
|
3409
|
-
n.preventDefault(), n.stopPropagation(), h(this,
|
|
3425
|
+
n.preventDefault(), n.stopPropagation(), h(this, $) ? (this.justClosedViaClick = !0, this.close(), setTimeout(() => {
|
|
3410
3426
|
this.justClosedViaClick = !1;
|
|
3411
3427
|
}, 0)) : (this.open(), this.presentationMode !== "fullscreen" && this.input.focus());
|
|
3412
3428
|
}), this.counter = document.createElement("span"), this.counter.className = "ms__counter", this.counter.style.display = "none", this.clearButton = document.createElement("button"), this.clearButton.type = "button", this.clearButton.className = "ms__input-clear", this.clearButton.tabIndex = -1, this.clearButton.setAttribute("aria-label", "Clear selection"), this.clearButton.style.display = "none", this.clearButton.addEventListener("mousedown", (n) => n.preventDefault()), this.clearButton.addEventListener("click", (n) => {
|
|
@@ -3453,7 +3469,7 @@ class ln {
|
|
|
3453
3469
|
} else
|
|
3454
3470
|
t += '<div class="ms__options">';
|
|
3455
3471
|
if (this.filteredOptions.length === 0)
|
|
3456
|
-
t +=
|
|
3472
|
+
t += this.renderEmptyStateHTML();
|
|
3457
3473
|
else if (this.isTreeMode())
|
|
3458
3474
|
this.treeNodes.forEach((l, c) => {
|
|
3459
3475
|
t += this.renderTreeNode(l, c);
|
|
@@ -3461,16 +3477,18 @@ class ln {
|
|
|
3461
3477
|
else if (this.options.isGroupsAllowed) {
|
|
3462
3478
|
const l = this.groupOptions(this.filteredOptions), c = /* @__PURE__ */ new Map();
|
|
3463
3479
|
this.filteredOptions.forEach((d, u) => c.set(d, u)), Object.keys(l).forEach((d) => {
|
|
3464
|
-
if (t += '<div class="ms__group">', d !== "__ungrouped__")
|
|
3480
|
+
if (t += '<div class="ms__group">', d !== "__ungrouped__") {
|
|
3481
|
+
const u = ` data-group="${this.escapeHtml(d)}"`;
|
|
3465
3482
|
if (this.options.renderGroupLabelContentCallback) {
|
|
3466
|
-
const
|
|
3467
|
-
if (
|
|
3468
|
-
const
|
|
3469
|
-
|
|
3483
|
+
const f = this.options.renderGroupLabelContentCallback(d);
|
|
3484
|
+
if (f instanceof HTMLElement) {
|
|
3485
|
+
const m = document.createElement("div");
|
|
3486
|
+
m.className = "ms__group-label", m.dataset.group = d, m.appendChild(f), t += m.outerHTML;
|
|
3470
3487
|
} else
|
|
3471
|
-
t += `<div class="ms__group-label"
|
|
3488
|
+
t += `<div class="ms__group-label"${u}>${f}</div>`;
|
|
3472
3489
|
} else
|
|
3473
|
-
t += `<div class="ms__group-label">${d}</div>`;
|
|
3490
|
+
t += `<div class="ms__group-label"${u}>${d}</div>`;
|
|
3491
|
+
}
|
|
3474
3492
|
l[d].forEach((u) => {
|
|
3475
3493
|
t += this.renderOption(u, c.get(u) ?? -1);
|
|
3476
3494
|
}), t += "</div>";
|
|
@@ -3532,7 +3550,7 @@ class ln {
|
|
|
3532
3550
|
r || (o += i), o += '<div class="ms__options ms__options--virtual" style="overflow-y: auto; position: relative;"></div>', r && (o += i), this.dropdownInner.innerHTML = o, this.optionsContainer = this.dropdownInner.querySelector(".ms__options");
|
|
3533
3551
|
}
|
|
3534
3552
|
if (this.applyVirtualOptionsSizing(this.optionsContainer), this.filteredOptions.length === 0) {
|
|
3535
|
-
this.virtualScroll && (this.virtualScroll.destroy(), this.virtualScroll = null), this.optionsContainer.innerHTML =
|
|
3553
|
+
this.virtualScroll && (this.virtualScroll.destroy(), this.virtualScroll = null), this.optionsContainer.innerHTML = this.renderEmptyStateHTML();
|
|
3536
3554
|
return;
|
|
3537
3555
|
}
|
|
3538
3556
|
const e = this.scaledOptionHeight(), t = this.options.virtualScrollBuffer ?? 10;
|
|
@@ -3569,16 +3587,16 @@ class ln {
|
|
|
3569
3587
|
const t = this.options.actionsPosition === "bottom" ? "bottom" : "top", o = this.options.actionsAlign ?? "stretch", i = ` ms__actions--${t}`, r = this.options.isActionsSticky ? " ms__actions--sticky" : "", n = this.options.actionsLayout === "wrap" ? " ms__actions--wrap" : "", a = ` ms__actions--align-${o}`, l = /* @__PURE__ */ new Map();
|
|
3570
3588
|
if (e.forEach((d, u) => {
|
|
3571
3589
|
if (!(d.getIsVisibleCallback ? d.getIsVisibleCallback(this) : d.isVisible ?? !0)) return;
|
|
3572
|
-
let
|
|
3573
|
-
d.getIsDisabledCallback ?
|
|
3574
|
-
const g =
|
|
3575
|
-
let
|
|
3590
|
+
let m;
|
|
3591
|
+
d.getIsDisabledCallback ? m = d.getIsDisabledCallback(this) : d.isDisabled !== void 0 ? m = d.isDisabled : m = this.getBuiltInActionDisabled(d.action);
|
|
3592
|
+
const g = m ? " disabled" : "", w = d.getTextCallback ? d.getTextCallback(this) : d.text;
|
|
3593
|
+
let y = "";
|
|
3576
3594
|
if (d.getClassCallback) {
|
|
3577
|
-
const
|
|
3578
|
-
|
|
3579
|
-
} else d.cssClass && (
|
|
3580
|
-
const
|
|
3581
|
-
l.has(
|
|
3595
|
+
const C = this.classSuffix(d.getClassCallback(this));
|
|
3596
|
+
C && (y = ` ${C}`);
|
|
3597
|
+
} else d.cssClass && (y = ` ${d.cssClass}`);
|
|
3598
|
+
const v = Math.max(1, Math.floor(d.row ?? 1)), _ = `<button type="button"${g} class="ms__action-btn${y}" data-action="${d.action}" data-button-index="${u}">${w}</button>`;
|
|
3599
|
+
l.has(v) || l.set(v, []), l.get(v).push(_);
|
|
3582
3600
|
}), l.size === 0) return "";
|
|
3583
3601
|
const c = Array.from(l.keys()).sort((d, u) => d - u).map((d) => `<div class="ms__actions-row" data-row="${d}">${l.get(d).join("")}</div>`).join("");
|
|
3584
3602
|
return `<div class="ms__actions${i}${r}${n}${a}">${c}</div>`;
|
|
@@ -3587,8 +3605,8 @@ class ln {
|
|
|
3587
3605
|
const o = this.getItemValue(e), i = this.getItemDisplayValue(e), r = this.getItemIcon(e), n = this.getItemSubtitle(e), a = this.getItemDisabled(e), l = this.selectedValues.has(String(o)), c = t === this.focusedIndex, d = this.matchingIndices.has(t), u = ["ms__option"];
|
|
3588
3606
|
l && u.push("ms__option--selected"), c && u.push("ms__option--focused"), d && u.push("ms__option--matched"), a && u.push("ms__option--disabled");
|
|
3589
3607
|
const f = this.options.checkboxAlign && this.options.checkboxAlign !== "center" ? ` data-checkbox-align="${this.options.checkboxAlign}"` : "";
|
|
3590
|
-
let
|
|
3591
|
-
if (this.options.isCheckboxesShown && this.options.isMultipleEnabled && (
|
|
3608
|
+
let m = `<div class="${u.join(" ")}" data-value="${o}" data-index="${t}"${f}>`;
|
|
3609
|
+
if (this.options.isCheckboxesShown && this.options.isMultipleEnabled && (m += `<input type="checkbox" class="ms__checkbox" ${l ? "checked" : ""} ${a ? "disabled" : ""}>`), m += '<div class="ms__option-content">', this.options.renderOptionContentCallback) {
|
|
3592
3610
|
const g = {
|
|
3593
3611
|
index: t,
|
|
3594
3612
|
isSelected: l,
|
|
@@ -3598,10 +3616,10 @@ class ln {
|
|
|
3598
3616
|
...jt(this.presentationMode),
|
|
3599
3617
|
isTreeNode: !1
|
|
3600
3618
|
};
|
|
3601
|
-
|
|
3619
|
+
m += this.toHtml(this.options.renderOptionContentCallback(e, g));
|
|
3602
3620
|
} else
|
|
3603
|
-
r && (
|
|
3604
|
-
return
|
|
3621
|
+
r && (m += `<span class="ms__option-icon">${r}</span>`), m += '<div class="ms__option-text">', m += `<div class="ms__option-title">${this.highlightMatch(i, this.searchTerm)}</div>`, n && (m += `<div class="ms__option-subtitle">${n}</div>`), m += "</div>";
|
|
3622
|
+
return m += this.renderOptionInfoButton(), m += "</div>", m += "</div>", m;
|
|
3605
3623
|
}
|
|
3606
3624
|
/**
|
|
3607
3625
|
* Trailing info affordance for an option row, emitted only for the fullscreen
|
|
@@ -3622,15 +3640,15 @@ class ln {
|
|
|
3622
3640
|
* chevron/toggle — every node is just a normal, selectable option.
|
|
3623
3641
|
*/
|
|
3624
3642
|
renderTreeNode(e, t) {
|
|
3625
|
-
const o = e.data, i = this.getItemValue(o), r = this.getItemDisplayValue(o), n = this.getItemIcon(o), a = this.getItemSubtitle(o), l = this.getItemDisabled(o), c = this.isCascadeMode() && this.cascadeIndex, d = c ? xs(this.cascadeIndex, e, this.cascadeCheckedAtoms) : null, u = c ? d === "checked" : this.selectedValues.has(String(i)), f = d === "indeterminate",
|
|
3626
|
-
_.push(e.hasChildren ? "ms__option--tree-branch" : "ms__option--tree-leaf"), u && _.push("ms__option--selected"), f && _.push("ms__option--indeterminate"),
|
|
3627
|
-
const
|
|
3628
|
-
let
|
|
3629
|
-
if (this.options.isCheckboxesShown && this.options.isMultipleEnabled &&
|
|
3630
|
-
const
|
|
3643
|
+
const o = e.data, i = this.getItemValue(o), r = this.getItemDisplayValue(o), n = this.getItemIcon(o), a = this.getItemSubtitle(o), l = this.getItemDisabled(o), c = this.isCascadeMode() && this.cascadeIndex, d = c ? xs(this.cascadeIndex, e, this.cascadeCheckedAtoms) : null, u = c ? d === "checked" : this.selectedValues.has(String(i)), f = d === "indeterminate", m = t === this.focusedIndex, g = this.matchingIndices.has(t), w = e.isSelectable !== !1, y = e.level ?? 1, v = Math.max(0, y - 1), _ = ["ms__option", "ms__option--tree"];
|
|
3644
|
+
_.push(e.hasChildren ? "ms__option--tree-branch" : "ms__option--tree-leaf"), u && _.push("ms__option--selected"), f && _.push("ms__option--indeterminate"), m && _.push("ms__option--focused"), g && _.push("ms__option--matched"), l && _.push("ms__option--disabled"), w || _.push("ms__option--tree-unselectable");
|
|
3645
|
+
const C = this.options.checkboxAlign && this.options.checkboxAlign !== "center" ? ` data-checkbox-align="${this.options.checkboxAlign}"` : "", E = w ? "" : ' data-selectable="false"';
|
|
3646
|
+
let z = `<div class="${_.join(" ")}" data-value="${i}" data-index="${t}" data-path="${e.path}" data-level="${y}" style="--ms-tree-depth: ${v};"${C}${E}>`;
|
|
3647
|
+
if (this.options.isCheckboxesShown && this.options.isMultipleEnabled && w && (z += `<input type="checkbox" class="${f ? "ms__checkbox ms__checkbox--indeterminate" : "ms__checkbox"}" ${u ? "checked" : ""}${f ? ' aria-checked="mixed"' : ""} ${l ? "disabled" : ""}>`), z += '<div class="ms__option-content">', this.options.renderOptionContentCallback) {
|
|
3648
|
+
const D = {
|
|
3631
3649
|
index: t,
|
|
3632
3650
|
isSelected: u,
|
|
3633
|
-
isFocused:
|
|
3651
|
+
isFocused: m,
|
|
3634
3652
|
isMatched: g,
|
|
3635
3653
|
isDisabled: l,
|
|
3636
3654
|
...jt(this.presentationMode),
|
|
@@ -3640,16 +3658,49 @@ class ln {
|
|
|
3640
3658
|
isBranch: e.hasChildren,
|
|
3641
3659
|
isLeaf: !e.hasChildren,
|
|
3642
3660
|
childCount: Object.keys(e.children).length,
|
|
3643
|
-
level:
|
|
3644
|
-
depth:
|
|
3661
|
+
level: y,
|
|
3662
|
+
depth: v,
|
|
3645
3663
|
path: e.path,
|
|
3646
|
-
isSelectable:
|
|
3664
|
+
isSelectable: w,
|
|
3647
3665
|
isIndeterminate: f
|
|
3648
3666
|
};
|
|
3649
|
-
|
|
3667
|
+
z += this.toHtml(this.options.renderOptionContentCallback(o, D));
|
|
3650
3668
|
} else
|
|
3651
|
-
n && (
|
|
3652
|
-
return
|
|
3669
|
+
n && (z += `<span class="ms__option-icon">${n}</span>`), z += '<div class="ms__option-text">', z += `<div class="ms__option-title">${this.highlightMatch(r, this.searchTerm)}</div>`, a && (z += `<div class="ms__option-subtitle">${a}</div>`), z += "</div>";
|
|
3670
|
+
return z += this.renderOptionInfoButton(), z += "</div>", z += "</div>", z;
|
|
3671
|
+
}
|
|
3672
|
+
/**
|
|
3673
|
+
* Empty-dropdown content. When "add new" is enabled (isAddNewAllowed) AND the user has typed
|
|
3674
|
+
* a non-empty search term, show a clickable "add new" prompt instead of the plain emptyMessage —
|
|
3675
|
+
* choosing it (click via handleDropdownClick, or Enter via the keydown handler) runs handleAddNew.
|
|
3676
|
+
* Otherwise fall back to the emptyMessage.
|
|
3677
|
+
*/
|
|
3678
|
+
renderEmptyStateHTML() {
|
|
3679
|
+
if (this.isAddNewPromptShown()) {
|
|
3680
|
+
const e = (this.searchTerm || "").trim();
|
|
3681
|
+
return this.addNewPending ? `<div class="ms__add-new ms__add-new--loading" aria-busy="true"><span class="ms__add-new-spinner" aria-hidden="true"></span><span class="ms__add-new-text">${this.getAddNewPendingText(e)}</span></div>` : `<div class="ms__add-new${this.addNewFocused ? " ms__add-new--focused" : ""}" role="button" data-action="add-new"><span class="ms__add-new-icon" aria-hidden="true"></span><span class="ms__add-new-text">${this.getAddNewText(e)}</span></div>`;
|
|
3682
|
+
}
|
|
3683
|
+
return `<div class="ms__empty">${this.options.emptyMessage}</div>`;
|
|
3684
|
+
}
|
|
3685
|
+
/** True when the empty dropdown is currently showing the clickable "add new" prompt. */
|
|
3686
|
+
isAddNewPromptShown() {
|
|
3687
|
+
return !!this.options.isAddNewAllowed && this.filteredOptions.length === 0 && !!(this.searchTerm || "").trim();
|
|
3688
|
+
}
|
|
3689
|
+
/**
|
|
3690
|
+
* Resolve the "add new" prompt label for the typed text. Priority: getAddNewTextCallback
|
|
3691
|
+
* (returns plain text — fully escaped here) → addNewText template (trusted config string;
|
|
3692
|
+
* only the `{value}` substitution is escaped) → the default `Add "{value}"`.
|
|
3693
|
+
*/
|
|
3694
|
+
getAddNewText(e) {
|
|
3695
|
+
return this.options.getAddNewTextCallback ? this.escapeHtml(this.options.getAddNewTextCallback(e)) : (this.options.addNewText ?? 'Add "{value}"').replace(/\{value\}/g, this.escapeHtml(e));
|
|
3696
|
+
}
|
|
3697
|
+
/** Pending-prompt label shown (with a spinner) while an async addNewCallback runs. */
|
|
3698
|
+
getAddNewPendingText(e) {
|
|
3699
|
+
return (this.options.addNewPendingText ?? 'Adding "{value}"…').replace(/\{value\}/g, this.escapeHtml(e));
|
|
3700
|
+
}
|
|
3701
|
+
/** Minimal HTML entity escape for untrusted text spliced into an innerHTML string. */
|
|
3702
|
+
escapeHtml(e) {
|
|
3703
|
+
return String(e).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
3653
3704
|
}
|
|
3654
3705
|
highlightMatch(e, t) {
|
|
3655
3706
|
if (!t) return e;
|
|
@@ -3696,11 +3747,11 @@ class ln {
|
|
|
3696
3747
|
if (!this.options.isMultipleEnabled) {
|
|
3697
3748
|
this.badgesContainer.innerHTML = "", this.counter.style.display = "none";
|
|
3698
3749
|
let r;
|
|
3699
|
-
e[0] && (this.options.renderSelectedContentCallback ? r = this.options.renderSelectedContentCallback(e[0]) : r = this.getItemDisplayValue(e[0])), !h(this,
|
|
3750
|
+
e[0] && (this.options.renderSelectedContentCallback ? r = this.options.renderSelectedContentCallback(e[0]) : r = this.getItemDisplayValue(e[0])), !h(this, $) && t > 0 && e.length > 0 ? this.input.value = r : h(this, $) || (this.input.value = "");
|
|
3700
3751
|
return;
|
|
3701
3752
|
}
|
|
3702
3753
|
let o = this.options.badgesDisplayMode;
|
|
3703
|
-
if (this.options.badgesThreshold !== null && t > this.options.badgesThreshold && o !== "none" && (o = this.options.badgesThresholdMode || "count"), !h(this,
|
|
3754
|
+
if (this.options.badgesThreshold !== null && t > this.options.badgesThreshold && o !== "none" && (o = this.options.badgesThresholdMode || "count"), !h(this, $))
|
|
3704
3755
|
if (t > 0 && o === "count") {
|
|
3705
3756
|
const r = this.options.getCounterCallback ? this.options.getCounterCallback(t) : `${t} selected`;
|
|
3706
3757
|
this.input.placeholder = r;
|
|
@@ -3757,14 +3808,14 @@ class ln {
|
|
|
3757
3808
|
}
|
|
3758
3809
|
attachEvents() {
|
|
3759
3810
|
this.input.addEventListener("mousedown", (e) => {
|
|
3760
|
-
e.stopPropagation(), h(this,
|
|
3811
|
+
e.stopPropagation(), h(this, $) ? (this.justClosedViaClick = !0, this.close(), setTimeout(() => {
|
|
3761
3812
|
this.justClosedViaClick = !1;
|
|
3762
3813
|
}, 0)) : (this.presentationMode === "fullscreen" && e.preventDefault(), this.open());
|
|
3763
3814
|
}), this.input.addEventListener("focus", () => {
|
|
3764
|
-
!h(this,
|
|
3815
|
+
!h(this, $) && !this.justClosedViaClick && this.open();
|
|
3765
3816
|
}), this.input.addEventListener("input", (e) => {
|
|
3766
3817
|
const t = e.target.value;
|
|
3767
|
-
this.options.isSearchEnabled && !h(this,
|
|
3818
|
+
this.options.isSearchEnabled && !h(this, $) && this.open(), this.handleSearch(t);
|
|
3768
3819
|
}), this.input.addEventListener("keydown", (e) => this.handleKeydown(e)), this.documentClickHandler = (e) => this.handleClickOutside(e), setTimeout(() => {
|
|
3769
3820
|
document.addEventListener("click", this.documentClickHandler);
|
|
3770
3821
|
}, 0), this.overlayCoord = Ui(() => this.close(), this.options.overlayGroup || void 0), this.documentKeydownHandler = (e) => {
|
|
@@ -3789,7 +3840,7 @@ class ln {
|
|
|
3789
3840
|
}), this.selectedPopover.addEventListener("click", (e) => this.handleSelectedPopoverClick(e));
|
|
3790
3841
|
}
|
|
3791
3842
|
async handleSearch(e) {
|
|
3792
|
-
if (this.searchTerm = e, !this.options.isSearchEnabled)
|
|
3843
|
+
if (this.searchTerm = e, this.addNewFocused = !1, !this.options.isSearchEnabled)
|
|
3793
3844
|
return;
|
|
3794
3845
|
let t = e;
|
|
3795
3846
|
if (this.options.beforeSearchCallback) {
|
|
@@ -3873,7 +3924,7 @@ class ln {
|
|
|
3873
3924
|
if (!(this.options.keydownCallback && this.options.keydownCallback({
|
|
3874
3925
|
event: e,
|
|
3875
3926
|
key: e.key,
|
|
3876
|
-
isOpen: h(this,
|
|
3927
|
+
isOpen: h(this, $),
|
|
3877
3928
|
presentation: this.presentationMode,
|
|
3878
3929
|
searchTerm: this.searchTerm,
|
|
3879
3930
|
focusedIndex: this.focusedIndex,
|
|
@@ -3882,7 +3933,7 @@ class ln {
|
|
|
3882
3933
|
selectedValues: [...this.selectedValues],
|
|
3883
3934
|
controller: this.getKeyboardController()
|
|
3884
3935
|
}) === !0)) {
|
|
3885
|
-
if (!h(this,
|
|
3936
|
+
if (!h(this, $)) {
|
|
3886
3937
|
(e.key === "Enter" || e.key === "ArrowDown") && (e.preventDefault(), this.open());
|
|
3887
3938
|
return;
|
|
3888
3939
|
}
|
|
@@ -3895,13 +3946,13 @@ class ln {
|
|
|
3895
3946
|
}
|
|
3896
3947
|
switch (e.key) {
|
|
3897
3948
|
case "ArrowDown":
|
|
3898
|
-
e.preventDefault(), e.ctrlKey || e.metaKey ? this.focusNextMatch() : this.focusNext();
|
|
3949
|
+
e.preventDefault(), this.isAddNewPromptShown() ? this.focusAddNewPrompt() : e.ctrlKey || e.metaKey ? this.focusNextMatch() : this.focusNext();
|
|
3899
3950
|
break;
|
|
3900
3951
|
case "ArrowUp":
|
|
3901
|
-
e.preventDefault(), e.ctrlKey || e.metaKey ? this.focusPreviousMatch() : this.focusPrevious();
|
|
3952
|
+
e.preventDefault(), this.isAddNewPromptShown() ? this.focusAddNewPrompt() : e.ctrlKey || e.metaKey ? this.focusPreviousMatch() : this.focusPrevious();
|
|
3902
3953
|
break;
|
|
3903
3954
|
case "Enter":
|
|
3904
|
-
e.preventDefault(), this.focusedIndex >= 0 ? this.toggleOption(this.filteredOptions[this.focusedIndex]) : this.options.isAddNewAllowed && this.
|
|
3955
|
+
e.preventDefault(), this.focusedIndex >= 0 ? this.toggleOption(this.filteredOptions[this.focusedIndex]) : this.options.isAddNewAllowed && this.filteredOptions.length === 0 && (this.searchTerm || "").trim() && this.handleAddNew((this.searchTerm || "").trim()), this.presentationMode === "fullscreen" && ((t = this.fullscreenSearchInput) == null || t.blur());
|
|
3905
3956
|
break;
|
|
3906
3957
|
case "Escape":
|
|
3907
3958
|
e.preventDefault(), this.showSelectedPopover ? this.hideSelectedPopover() : this.input.value ? this.clearSearch() : this.close();
|
|
@@ -3935,7 +3986,7 @@ class ln {
|
|
|
3935
3986
|
}
|
|
3936
3987
|
handleDropdownClick(e) {
|
|
3937
3988
|
var r, n;
|
|
3938
|
-
|
|
3989
|
+
R.debug(`[${this.instanceId}] Dropdown clicked`, { target: e.target.className }), e.stopPropagation();
|
|
3939
3990
|
const t = e.target.closest(".ms__option-info");
|
|
3940
3991
|
if (t) {
|
|
3941
3992
|
e.preventDefault(), this.toggleLabelReveal(t);
|
|
@@ -3946,11 +3997,14 @@ class ln {
|
|
|
3946
3997
|
if (o) {
|
|
3947
3998
|
e.preventDefault();
|
|
3948
3999
|
const a = o.dataset.action;
|
|
3949
|
-
if (
|
|
4000
|
+
if (R.debug(`[${this.instanceId}] Action button clicked:`, a), a === "select-all")
|
|
3950
4001
|
this.selectAll();
|
|
3951
4002
|
else if (a === "clear-all")
|
|
3952
4003
|
this.clearAll();
|
|
3953
|
-
else if (a === "
|
|
4004
|
+
else if (a === "add-new") {
|
|
4005
|
+
const l = (this.searchTerm || "").trim();
|
|
4006
|
+
l && this.handleAddNew(l);
|
|
4007
|
+
} else if (a === "custom") {
|
|
3954
4008
|
const l = parseInt(o.dataset.buttonIndex || "-1"), c = (r = this.options.actionButtons) == null ? void 0 : r[l];
|
|
3955
4009
|
c != null && c.onClick && c.onClick(this);
|
|
3956
4010
|
}
|
|
@@ -3960,18 +4014,18 @@ class ln {
|
|
|
3960
4014
|
if (i && !i.classList.contains("ms__option--disabled")) {
|
|
3961
4015
|
e.preventDefault();
|
|
3962
4016
|
const a = i.dataset.value, l = this.filteredOptions.findIndex((c) => String(this.getItemValue(c)) === a);
|
|
3963
|
-
|
|
4017
|
+
R.debug(`[${this.instanceId}] Option clicked:`, {
|
|
3964
4018
|
value: a,
|
|
3965
4019
|
optionIndex: l,
|
|
3966
4020
|
closeOnSelect: this.options.isCloseOnSelect,
|
|
3967
4021
|
placeholder: this.options.searchPlaceholder
|
|
3968
|
-
}), l >= 0 && (this.focusedIndex = l, this.toggleOption(this.filteredOptions[l]), h(this,
|
|
4022
|
+
}), l >= 0 && (this.focusedIndex = l, this.toggleOption(this.filteredOptions[l]), h(this, $) && this.presentationMode !== "fullscreen" ? this.input.focus() : this.presentationMode === "fullscreen" && ((n = this.fullscreenSearchInput) == null || n.blur()));
|
|
3969
4023
|
}
|
|
3970
4024
|
}
|
|
3971
4025
|
handleBadgeClick(e) {
|
|
3972
4026
|
var n;
|
|
3973
4027
|
if (e.target.closest('[data-action="clear-count"]')) {
|
|
3974
|
-
e.preventDefault(), e.stopPropagation(),
|
|
4028
|
+
e.preventDefault(), e.stopPropagation(), R.debug(`[${this.instanceId}] Clear count button clicked`), this.clearAll();
|
|
3975
4029
|
return;
|
|
3976
4030
|
}
|
|
3977
4031
|
if (e.target.closest('[data-action="show-selected"]')) {
|
|
@@ -3981,7 +4035,7 @@ class ln {
|
|
|
3981
4035
|
const i = e.target.closest('.ms__badge-remove, [data-action="remove"]');
|
|
3982
4036
|
if (i) {
|
|
3983
4037
|
if (e.preventDefault(), e.stopPropagation(), i.dataset.action === "remove-hidden") {
|
|
3984
|
-
|
|
4038
|
+
R.debug(`[${this.instanceId}] Remove hidden items button clicked`);
|
|
3985
4039
|
const c = this.options.badgesMaxVisible || 3;
|
|
3986
4040
|
Array.from(this.selectedOptions.values()).slice(c).forEach((f) => this.interactiveDeselect(f));
|
|
3987
4041
|
return;
|
|
@@ -3991,7 +4045,7 @@ class ln {
|
|
|
3991
4045
|
return;
|
|
3992
4046
|
}
|
|
3993
4047
|
if (e.target.closest(".ms__badge--more") && !e.target.closest(".ms__badge-remove")) {
|
|
3994
|
-
e.preventDefault(), e.stopPropagation(),
|
|
4048
|
+
e.preventDefault(), e.stopPropagation(), R.debug(`[${this.instanceId}] '+X more' badge clicked, showing popover`), this.toggleSelectedPopover();
|
|
3995
4049
|
return;
|
|
3996
4050
|
}
|
|
3997
4051
|
}
|
|
@@ -4004,11 +4058,11 @@ class ln {
|
|
|
4004
4058
|
J.debug(`[${this.instanceId}] Closing selected popover due to click outside`), this.hideSelectedPopover();
|
|
4005
4059
|
return;
|
|
4006
4060
|
}
|
|
4007
|
-
if (!h(this,
|
|
4061
|
+
if (!h(this, $) || this.justOpenedViaClick) return;
|
|
4008
4062
|
const o = t.some(
|
|
4009
4063
|
(r) => r instanceof Node && (this.element.contains(r) || this.dropdown.contains(r) || this.hint && this.hint.contains(r))
|
|
4010
4064
|
);
|
|
4011
|
-
|
|
4065
|
+
R.debug(`[${this.instanceId}] handleClickOutside`, {
|
|
4012
4066
|
target: e.target.className,
|
|
4013
4067
|
targetTag: e.target.tagName,
|
|
4014
4068
|
clickedInside: o,
|
|
@@ -4017,7 +4071,7 @@ class ln {
|
|
|
4017
4071
|
elementContains: t.some((r) => r instanceof Node && this.element.contains(r)),
|
|
4018
4072
|
dropdownContains: t.some((r) => r instanceof Node && this.dropdown.contains(r)),
|
|
4019
4073
|
isConnected: this.dropdown.isConnected
|
|
4020
|
-
}), o || (
|
|
4074
|
+
}), o || (R.warn(`[${this.instanceId}] Closing dropdown due to click outside`), this.close());
|
|
4021
4075
|
}
|
|
4022
4076
|
/**
|
|
4023
4077
|
* Move focus by computing a new index from (current, total).
|
|
@@ -4063,15 +4117,19 @@ class ln {
|
|
|
4063
4117
|
focusPageDown() {
|
|
4064
4118
|
this.focusBy((e, t) => Math.min(t - 1, e + 10), 1);
|
|
4065
4119
|
}
|
|
4120
|
+
/** Move keyboard focus onto the empty-state "add new" prompt (the only actionable row). */
|
|
4121
|
+
focusAddNewPrompt() {
|
|
4122
|
+
this.addNewFocused || (this.addNewFocused = !0, this.renderDropdown());
|
|
4123
|
+
}
|
|
4066
4124
|
focusNextMatch() {
|
|
4067
4125
|
if (this.matchingIndices.size === 0) return;
|
|
4068
4126
|
const e = Array.from(this.matchingIndices).sort((i, r) => i - r), t = e.findIndex((i) => i === this.focusedIndex), o = (t + 1) % e.length;
|
|
4069
|
-
this.focusBy(() => e[o]),
|
|
4127
|
+
this.focusBy(() => e[o]), R.debug(`[${this.instanceId}] Jumped to next match: index ${this.focusedIndex} (${t + 1} of ${e.length})`);
|
|
4070
4128
|
}
|
|
4071
4129
|
focusPreviousMatch() {
|
|
4072
4130
|
if (this.matchingIndices.size === 0) return;
|
|
4073
4131
|
const e = Array.from(this.matchingIndices).sort((i, r) => i - r), t = e.findIndex((i) => i === this.focusedIndex), o = t <= 0 ? e.length - 1 : t - 1;
|
|
4074
|
-
this.focusBy(() => e[o]),
|
|
4132
|
+
this.focusBy(() => e[o]), R.debug(`[${this.instanceId}] Jumped to previous match: index ${this.focusedIndex} (${t + 1} of ${e.length})`);
|
|
4075
4133
|
}
|
|
4076
4134
|
/** Lazily build (and cache) the imperative facade passed to `keydownCallback`. Bound to the
|
|
4077
4135
|
* same private actions the built-in key handling uses, so consumer shortcuts behave identically. */
|
|
@@ -4113,35 +4171,127 @@ class ln {
|
|
|
4113
4171
|
}
|
|
4114
4172
|
/** Clear the search box (both the main input and the fullscreen search) and reset the visible
|
|
4115
4173
|
* list. Shared by Escape and the keyboard controller. */
|
|
4174
|
+
/**
|
|
4175
|
+
* Clear the search box and restore the full option list (resets the visible/matched sets and
|
|
4176
|
+
* drops keyboard focus). Public building block: pair it with `scrollToValue()` to reveal then
|
|
4177
|
+
* scroll to an option the current search had filtered out — `el.clearSearch(); el.scrollToValue(v)`.
|
|
4178
|
+
* Does not touch the selection (use `clearAll()` for that).
|
|
4179
|
+
*/
|
|
4116
4180
|
clearSearch() {
|
|
4117
4181
|
this.input.value = "", this.fullscreenSearchInput && (this.fullscreenSearchInput.value = ""), this.searchTerm = "", this.resetVisibleToAll(), this.matchingIndices.clear(), this.focusedIndex = -1, this.renderDropdown(), this.updateFullscreenNav(), this.updateFullscreenSearchClear();
|
|
4118
4182
|
}
|
|
4183
|
+
/**
|
|
4184
|
+
* Programmatically set the search text and filter — exactly as if the user typed it, so
|
|
4185
|
+
* `beforeSearchCallback`, `minSearchLength` and async `searchCallback` all apply the same way.
|
|
4186
|
+
* Reflects into the search box (and the fullscreen sheet's field). Does NOT open the dropdown —
|
|
4187
|
+
* call `open()` if you want it visible. Passing `''` clears (equivalent to `clearSearch()`).
|
|
4188
|
+
*/
|
|
4189
|
+
search(e) {
|
|
4190
|
+
const t = e ?? "";
|
|
4191
|
+
this.input.value = t, this.fullscreenSearchInput && (this.fullscreenSearchInput.value = t), this.handleSearch(t), this.updateFullscreenSearchClear();
|
|
4192
|
+
}
|
|
4119
4193
|
scrollToFocused() {
|
|
4120
4194
|
if (this.virtualScroll && this.focusedIndex >= 0) {
|
|
4121
|
-
this.virtualScroll.scrollToIndex(this.focusedIndex);
|
|
4195
|
+
this.virtualScroll.scrollToIndex(this.focusedIndex, "nearest");
|
|
4122
4196
|
return;
|
|
4123
4197
|
}
|
|
4124
4198
|
const e = this.dropdown.querySelector(".ms__option--focused");
|
|
4125
|
-
e &&
|
|
4199
|
+
e && this.applyScrollIntoView(e);
|
|
4200
|
+
}
|
|
4201
|
+
/**
|
|
4202
|
+
* scrollIntoView with the fullscreen-safe default. In the fullscreen sheet the soft keyboard
|
|
4203
|
+
* covers the lower viewport, so `block:'nearest'` can bottom-align a match BEHIND the keyboard;
|
|
4204
|
+
* centre it instead and scroll INSTANTLY (a smooth animation kicked off per-keystroke is torn
|
|
4205
|
+
* down by the next re-render and never settles — the "list jumps every letter" bug). Floating
|
|
4206
|
+
* scrolls the nearest edge smoothly. The caller may override `block`.
|
|
4207
|
+
*/
|
|
4208
|
+
applyScrollIntoView(e, t) {
|
|
4209
|
+
this.presentationMode === "fullscreen" ? e.scrollIntoView({ block: (t == null ? void 0 : t.block) ?? "center", behavior: "auto" }) : e.scrollIntoView({ block: (t == null ? void 0 : t.block) ?? "nearest", behavior: "smooth" });
|
|
4210
|
+
}
|
|
4211
|
+
/**
|
|
4212
|
+
* Scroll the open dropdown so the option at `index` (into the current `filteredOptions`) is
|
|
4213
|
+
* visible. Works in floating, fullscreen (mobile), virtual-scroll and tree modes. Returns
|
|
4214
|
+
* false if the dropdown is closed or the index is out of range. The scroll is deferred a frame
|
|
4215
|
+
* when the list isn't rendered yet (e.g. right after `open()` in virtual mode / the fullscreen
|
|
4216
|
+
* sheet build), so `el.open(); el.scrollToIndex(i)` works.
|
|
4217
|
+
*/
|
|
4218
|
+
scrollToIndex(e, t) {
|
|
4219
|
+
const o = (t == null ? void 0 : t.block) ?? "start";
|
|
4220
|
+
return h(this, $) ? e < 0 || e >= this.filteredOptions.length ? (R.debug(`[${this.instanceId}] scrollToIndex(${e}) → false (out of range, ${this.filteredOptions.length} options)`), !1) : (R.debug(`[${this.instanceId}] scrollToIndex(${e}, block=${o}) — virtual=${!!this.virtualScroll}, mode=${this.presentationMode}`), this.scrollToRenderedIndex(e, { block: o }), !0) : (R.debug(`[${this.instanceId}] scrollToIndex(${e}) → false (closed)`), !1);
|
|
4221
|
+
}
|
|
4222
|
+
/**
|
|
4223
|
+
* Scroll to the option whose value matches `value` (resolved within the current
|
|
4224
|
+
* `filteredOptions`). Returns false if it isn't in the currently visible list — e.g. filtered
|
|
4225
|
+
* out by a search, or (tree) under a collapsed ancestor. Call `clearSearch()` (or expand the
|
|
4226
|
+
* branch) first to reveal it, then scroll.
|
|
4227
|
+
*/
|
|
4228
|
+
scrollToValue(e, t) {
|
|
4229
|
+
const o = this.filteredOptions.findIndex((i) => String(this.getItemValue(i)) === String(e));
|
|
4230
|
+
return R.debug(`[${this.instanceId}] scrollToValue(${String(e)}) → index ${o} of ${this.filteredOptions.length}`), o < 0 ? !1 : this.scrollToIndex(o, t);
|
|
4231
|
+
}
|
|
4232
|
+
/**
|
|
4233
|
+
* Scroll to a group. In standard rendering the group's header (`.ms__group-label`) is brought
|
|
4234
|
+
* into view; in virtual-scroll mode (which renders no headers) it scrolls to the group's FIRST
|
|
4235
|
+
* option instead. Returns false in tree mode (groups don't apply) or if the group has no
|
|
4236
|
+
* options in the current filtered list.
|
|
4237
|
+
*/
|
|
4238
|
+
scrollToGroup(e, t) {
|
|
4239
|
+
const o = (t == null ? void 0 : t.block) ?? "start";
|
|
4240
|
+
if (!h(this, $) || this.isTreeMode())
|
|
4241
|
+
return R.debug(`[${this.instanceId}] scrollToGroup(${e}) → false (${this.isTreeMode() ? "tree mode" : "closed"})`), !1;
|
|
4242
|
+
if (!this.virtualScroll) {
|
|
4243
|
+
const r = this.dropdown.querySelector(
|
|
4244
|
+
`.ms__group-label[data-group="${CSS.escape(e)}"]`
|
|
4245
|
+
);
|
|
4246
|
+
if (r)
|
|
4247
|
+
return R.debug(`[${this.instanceId}] scrollToGroup(${e}) — header found, scrolling label into view (block=${o})`), this.applyScrollIntoView(r, { block: o }), !0;
|
|
4248
|
+
}
|
|
4249
|
+
const i = this.filteredOptions.findIndex((r) => (this.getItemGroup(r) || "") === e);
|
|
4250
|
+
return R.debug(`[${this.instanceId}] scrollToGroup(${e}) — no header (virtual=${!!this.virtualScroll}), first member index ${i}`), i < 0 ? !1 : this.scrollToIndex(i, { block: o });
|
|
4251
|
+
}
|
|
4252
|
+
/**
|
|
4253
|
+
* Shared scroll worker for the public scrollTo* methods. Virtual mode uses the fixed-height
|
|
4254
|
+
* math (works even if the row isn't currently rendered); otherwise scrolls the
|
|
4255
|
+
* `.ms__option[data-index]` element into view. Defers one frame if the list isn't ready yet
|
|
4256
|
+
* (post-open virtual init / fullscreen sheet build), then retries once.
|
|
4257
|
+
*/
|
|
4258
|
+
scrollToRenderedIndex(e, t, o = !1) {
|
|
4259
|
+
if (!h(this, $) || e < 0 || e >= this.filteredOptions.length) return;
|
|
4260
|
+
if (this.virtualScroll) {
|
|
4261
|
+
const r = (t == null ? void 0 : t.block) === "center" ? "center" : (t == null ? void 0 : t.block) === "nearest" ? "nearest" : "start";
|
|
4262
|
+
this.virtualScroll.scrollToIndex(e, r), R.debug(`[${this.instanceId}] scrollToRenderedIndex(${e}) via virtual (block=${r})`);
|
|
4263
|
+
return;
|
|
4264
|
+
}
|
|
4265
|
+
const i = this.dropdown.querySelector(`.ms__option[data-index="${e}"]`);
|
|
4266
|
+
if (i) {
|
|
4267
|
+
this.applyScrollIntoView(i, t), R.debug(`[${this.instanceId}] scrollToRenderedIndex(${e}) via DOM scrollIntoView`);
|
|
4268
|
+
return;
|
|
4269
|
+
}
|
|
4270
|
+
o || (R.debug(`[${this.instanceId}] scrollToRenderedIndex(${e}) not rendered yet — deferring one frame`), requestAnimationFrame(() => this.scrollToRenderedIndex(e, t, !0)));
|
|
4126
4271
|
}
|
|
4127
4272
|
toggleOption(e) {
|
|
4128
4273
|
if (this.getItemDisabled(e)) {
|
|
4129
|
-
|
|
4274
|
+
R.debug(`[${this.instanceId}] toggleOption ignored — option is disabled`);
|
|
4130
4275
|
return;
|
|
4131
4276
|
}
|
|
4132
4277
|
if (!this.isOptionSelectable(e)) {
|
|
4133
|
-
|
|
4278
|
+
R.debug(`[${this.instanceId}] toggleOption ignored — node is not selectable`);
|
|
4134
4279
|
return;
|
|
4135
4280
|
}
|
|
4136
4281
|
const t = this.getItemValue(e), o = String(t);
|
|
4137
|
-
if (
|
|
4282
|
+
if (R.debug(`[${this.instanceId}] toggleOption called`, { value: t, multiple: this.options.isMultipleEnabled }), this.isCascadeMode() && this.cascadeIndex) {
|
|
4138
4283
|
const n = this.cascadeIndex.nodeByValue.get(o);
|
|
4139
4284
|
if (n) {
|
|
4140
4285
|
this.toggleTreeCascade(n), this.options.isCloseOnSelect && this.close();
|
|
4141
4286
|
return;
|
|
4142
4287
|
}
|
|
4143
4288
|
}
|
|
4144
|
-
|
|
4289
|
+
const i = this.selectedValues.has(o);
|
|
4290
|
+
if (i && !this.options.isMultipleEnabled) {
|
|
4291
|
+
this.close();
|
|
4292
|
+
return;
|
|
4293
|
+
}
|
|
4294
|
+
(i ? this.interactiveDeselect(e) : this.interactiveSelect(e)) && (this.options.isMultipleEnabled ? this.options.isCloseOnSelect && this.close() : this.close());
|
|
4145
4295
|
}
|
|
4146
4296
|
/**
|
|
4147
4297
|
* The single funnel for an interactive (user-initiated) selection. Consults
|
|
@@ -4153,7 +4303,7 @@ class ln {
|
|
|
4153
4303
|
interactiveSelect(e) {
|
|
4154
4304
|
var o, i;
|
|
4155
4305
|
const t = (i = (o = this.options).beforeSelectCallback) == null ? void 0 : i.call(o, e, this.getSelected());
|
|
4156
|
-
return t === !1 || typeof t == "string" ? (typeof t == "string" && this.showMessage(t, { variant: "warning" }),
|
|
4306
|
+
return t === !1 || typeof t == "string" ? (typeof t == "string" && this.showMessage(t, { variant: "warning" }), R.debug(`[${this.instanceId}] Selection blocked by beforeSelectCallback`), !1) : (this.options.isMultipleEnabled || (this.selectedValues.clear(), this.selectedOptions.clear()), this.selectOption(e), !0);
|
|
4157
4307
|
}
|
|
4158
4308
|
/**
|
|
4159
4309
|
* The single funnel for an interactive (user-initiated) deselection. Every
|
|
@@ -4166,17 +4316,37 @@ class ln {
|
|
|
4166
4316
|
interactiveDeselect(e) {
|
|
4167
4317
|
var o, i;
|
|
4168
4318
|
const t = (i = (o = this.options).beforeDeselectCallback) == null ? void 0 : i.call(o, e, this.getSelected());
|
|
4169
|
-
return t === !1 || typeof t == "string" ? (typeof t == "string" && this.showMessage(t, { variant: "warning" }),
|
|
4319
|
+
return t === !1 || typeof t == "string" ? (typeof t == "string" && this.showMessage(t, { variant: "warning" }), R.debug(`[${this.instanceId}] Deselection blocked by beforeDeselectCallback`), !1) : (this.deselectOption(e), !0);
|
|
4170
4320
|
}
|
|
4321
|
+
/**
|
|
4322
|
+
* Commit the "add new" affordance for the typed text. Two modes:
|
|
4323
|
+
* - `addNewCallback` set → create the option, append it, select it, clear the search.
|
|
4324
|
+
* - no callback → the consumer owns creation; we only notify (via the `add` event) so they
|
|
4325
|
+
* can open a modal / POST / add the option imperatively.
|
|
4326
|
+
* The `add` event fires in BOTH modes (with `option` present only when one was created).
|
|
4327
|
+
*/
|
|
4171
4328
|
async handleAddNew(e) {
|
|
4172
|
-
|
|
4173
|
-
|
|
4174
|
-
|
|
4175
|
-
|
|
4176
|
-
|
|
4177
|
-
|
|
4178
|
-
|
|
4329
|
+
var t, o;
|
|
4330
|
+
try {
|
|
4331
|
+
let i;
|
|
4332
|
+
if (this.options.addNewCallback) {
|
|
4333
|
+
K.debug(`[${this.instanceId}] Adding new option:`, e), this.addNewFocused = !1, this.addNewPending = !0, this.renderDropdown();
|
|
4334
|
+
let r;
|
|
4335
|
+
try {
|
|
4336
|
+
r = await this.options.addNewCallback(e);
|
|
4337
|
+
} finally {
|
|
4338
|
+
this.addNewPending = !1;
|
|
4339
|
+
}
|
|
4340
|
+
if (r == null) {
|
|
4341
|
+
K.debug(`[${this.instanceId}] addNewCallback canceled creation for:`, e), this.renderDropdown();
|
|
4342
|
+
return;
|
|
4343
|
+
}
|
|
4344
|
+
i = r, this.allOptions.push(i), this.searchTerm = "", this.input.value = "", this.fullscreenSearchInput && (this.fullscreenSearchInput.value = ""), this.matchingIndices.clear(), this.focusedIndex = -1, this.addNewFocused = !1, this.resetVisibleToAll(), this.selectOption(i), this.updateFullscreenSearchClear();
|
|
4179
4345
|
}
|
|
4346
|
+
(o = (t = this.options).onAddNew) == null || o.call(t, { value: e, option: i }), i && this.options.isCloseOnSelect && this.close();
|
|
4347
|
+
} catch (i) {
|
|
4348
|
+
this.addNewPending = !1, K.error(`[${this.instanceId}] Error adding new option:`, i), this.renderDropdown();
|
|
4349
|
+
}
|
|
4180
4350
|
}
|
|
4181
4351
|
selectOption(e) {
|
|
4182
4352
|
const t = this.getItemValue(e), o = String(t);
|
|
@@ -4220,7 +4390,7 @@ class ln {
|
|
|
4220
4390
|
* refreshes this button's visibility (it hides once nothing is selected).
|
|
4221
4391
|
*/
|
|
4222
4392
|
clearClick() {
|
|
4223
|
-
|
|
4393
|
+
R.debug(`[${this.instanceId}] input clear (✕) clicked`), this.clearAll(), (this.searchTerm || this.input.value) && this.clearSearch(), this.showSelectedPopover && this.hideSelectedPopover(), this.justClosedViaClick = !0, this.input.focus(), setTimeout(() => {
|
|
4224
4394
|
this.justClosedViaClick = !1;
|
|
4225
4395
|
}, 0);
|
|
4226
4396
|
}
|
|
@@ -4247,22 +4417,22 @@ class ln {
|
|
|
4247
4417
|
/** Open the dropdown (no-op if already open, or if there is nothing to show). */
|
|
4248
4418
|
open() {
|
|
4249
4419
|
var e;
|
|
4250
|
-
J.debug(`[${this.instanceId}] open() called`, { isOpen: h(this,
|
|
4420
|
+
J.debug(`[${this.instanceId}] open() called`, { isOpen: h(this, $) }), !h(this, $) && (this.justOpenedViaClick = !0, setTimeout(() => {
|
|
4251
4421
|
this.justOpenedViaClick = !1;
|
|
4252
|
-
}, 0), this.hideMessage(),
|
|
4422
|
+
}, 0), this.hideMessage(), P(this, $, !0), this.element.classList.add("ms--open"), this.dropdown.classList.add("ms__dropdown--visible"), J.info(`[${this.instanceId}] Dropdown opened`), this.input.placeholder = this.getPlaceholderText(), !this.options.isMultipleEnabled && this.options.isSearchEnabled && (this.input.value = this.searchTerm), this.options.searchCallback && this.options.isKeepOptionsOnSearch && !this.searchTerm && (this.filteredOptions = [...this.allOptions], J.debug(`[${this.instanceId}] Showing ${this.allOptions.length} initial options on open`)), this.presentationMode === "fullscreen" && this.enterFullscreen(), this.renderDropdown(), this.presentationMode !== "fullscreen" && this.positionDropdown(), this.dropdown.addEventListener("scroll", this.onDropdownScroll, !0), this.hint && this.presentationMode === "floating" && (this.hint.classList.add("ms__hint--visible"), this.positionHint()), (e = this.overlayCoord) == null || e.activate());
|
|
4253
4423
|
}
|
|
4254
4424
|
/** Close the dropdown (no-op if already closed). */
|
|
4255
4425
|
close() {
|
|
4256
4426
|
var e;
|
|
4257
|
-
J.debug(`[${this.instanceId}] close() called`, { isOpen: h(this,
|
|
4427
|
+
J.debug(`[${this.instanceId}] close() called`, { isOpen: h(this, $) }), h(this, $) && (P(this, $, !1), this.element.classList.remove("ms--open"), this.dropdown.classList.remove("ms__dropdown--visible"), this.hint && this.hint.classList.remove("ms__hint--visible"), this.options.shouldKeepSearchOnClose || (this.searchTerm = "", (this.options.isMultipleEnabled || this.options.isSearchEnabled) && (this.input.value = ""), this.resetVisibleToAll()), this.focusedIndex = -1, this.dropdown.removeEventListener("scroll", this.onDropdownScroll, !0), this.destroyAllOptionTooltips(), this.hideLabelReveal(), this.hideMessage(), this.renderBadges(), this.dropdownCleanup && (this.dropdownCleanup(), this.dropdownCleanup = null), this.hintCleanup && (this.hintCleanup(), this.hintCleanup = null), this.exitFullscreen(), this.dropdownPlacement = null, (e = this.overlayCoord) == null || e.deactivate(), J.debug(`[${this.instanceId}] Dropdown closed`));
|
|
4258
4428
|
}
|
|
4259
4429
|
/** Toggle the dropdown open/closed. */
|
|
4260
4430
|
toggle() {
|
|
4261
|
-
h(this,
|
|
4431
|
+
h(this, $) ? this.close() : this.open();
|
|
4262
4432
|
}
|
|
4263
4433
|
/** Whether the dropdown is currently open. Assigning opens/closes it. */
|
|
4264
4434
|
get isOpen() {
|
|
4265
|
-
return h(this,
|
|
4435
|
+
return h(this, $);
|
|
4266
4436
|
}
|
|
4267
4437
|
set isOpen(e) {
|
|
4268
4438
|
e ? this.open() : this.close();
|
|
@@ -4276,7 +4446,7 @@ class ln {
|
|
|
4276
4446
|
*/
|
|
4277
4447
|
anchorFloatingPanel(e, t) {
|
|
4278
4448
|
var r;
|
|
4279
|
-
const o = ((r = t.isLocked) == null ? void 0 : r.call(t)) ?? !0, i =
|
|
4449
|
+
const o = ((r = t.isLocked) == null ? void 0 : r.call(t)) ?? !0, i = tt(e, this.inputWrapper, {
|
|
4280
4450
|
strategy: "fixed",
|
|
4281
4451
|
placement: "bottom-start",
|
|
4282
4452
|
offset: 4,
|
|
@@ -4364,7 +4534,7 @@ An ancestor of <web-multiselect> establishes a fixed-positioning containing bloc
|
|
|
4364
4534
|
isLocked: () => !!this.options.isPlacementLocked,
|
|
4365
4535
|
applyMaxWidth: !0,
|
|
4366
4536
|
afterPosition: () => {
|
|
4367
|
-
this.hint && h(this,
|
|
4537
|
+
this.hint && h(this, $) && this.positionHint();
|
|
4368
4538
|
}
|
|
4369
4539
|
}));
|
|
4370
4540
|
}
|
|
@@ -4378,7 +4548,7 @@ An ancestor of <web-multiselect> establishes a fixed-positioning containing bloc
|
|
|
4378
4548
|
* resize can swap presentation without a reopen.
|
|
4379
4549
|
*/
|
|
4380
4550
|
setPresentation(e) {
|
|
4381
|
-
e !== this.presentationMode && (this.presentationMode = e, h(this,
|
|
4551
|
+
e !== this.presentationMode && (this.presentationMode = e, h(this, $) ? e === "fullscreen" ? (this.dropdownCleanup && (this.dropdownCleanup(), this.dropdownCleanup = null), this.hintCleanup && (this.hintCleanup(), this.hintCleanup = null), this.hint && this.hint.classList.remove("ms__hint--visible"), this.dropdownPlacement = null, this.enterFullscreen(), this.renderDropdown()) : (this.exitFullscreen(), this.renderDropdown(), this.positionDropdown(), this.hint && (this.hint.classList.add("ms__hint--visible"), this.positionHint())) : this.showSelectedPopover && (e === "fullscreen" ? (this.selectedPopoverCleanup && (this.selectedPopoverCleanup(), this.selectedPopoverCleanup = null), this.selectedPopoverPlacement = null, this.clearFloatingInlineGeometry(this.selectedPopover), this.selectedPopover.classList.add("ms__selected-popover--fullscreen"), this.lockBodyScroll()) : (this.selectedPopover.classList.remove("ms__selected-popover--fullscreen"), this.unlockBodyScroll(), this.positionSelectedPopover())));
|
|
4382
4552
|
}
|
|
4383
4553
|
/**
|
|
4384
4554
|
* Lock page scroll behind a fullscreen overlay via the core ref-counted helper.
|
|
@@ -4506,7 +4676,7 @@ An ancestor of <web-multiselect> establishes a fixed-positioning containing bloc
|
|
|
4506
4676
|
/** Back gesture/button fired: our pushed entry is already gone, so just close the
|
|
4507
4677
|
* sheet — WITHOUT popping history again (popOverlayHistory becomes a no-op). */
|
|
4508
4678
|
handleOverlayPopstate() {
|
|
4509
|
-
this.overlayHistoryActive && (this.overlayHistoryActive = !1, window.removeEventListener("popstate", this.onOverlayPopstate), h(this,
|
|
4679
|
+
this.overlayHistoryActive && (this.overlayHistoryActive = !1, window.removeEventListener("popstate", this.onOverlayPopstate), h(this, $) ? this.close() : this.showSelectedPopover && this.hideSelectedPopover());
|
|
4510
4680
|
}
|
|
4511
4681
|
/** Programmatic close: remove the listener and pop the entry we pushed (so the
|
|
4512
4682
|
* history stack returns to its pre-open state). No-op if a Back gesture already
|
|
@@ -4632,7 +4802,7 @@ An ancestor of <web-multiselect> establishes a fixed-positioning containing bloc
|
|
|
4632
4802
|
this.hintCleanup && this.hintCleanup();
|
|
4633
4803
|
let e = "top-start";
|
|
4634
4804
|
this.dropdownPlacement && (this.dropdownPlacement.startsWith("bottom") ? e = this.dropdownPlacement.replace("bottom", "top") : this.dropdownPlacement.startsWith("top") && (e = this.dropdownPlacement.replace("top", "bottom")));
|
|
4635
|
-
const t =
|
|
4805
|
+
const t = tt(this.hint, this.inputWrapper, {
|
|
4636
4806
|
strategy: "fixed",
|
|
4637
4807
|
placement: e,
|
|
4638
4808
|
offset: 4,
|
|
@@ -4675,7 +4845,7 @@ An ancestor of <web-multiselect> establishes a fixed-positioning containing bloc
|
|
|
4675
4845
|
J.debug(`[${this.instanceId}] showPopover() suppressed (isSelectedPopoverEnabled=false)`);
|
|
4676
4846
|
return;
|
|
4677
4847
|
}
|
|
4678
|
-
h(this,
|
|
4848
|
+
h(this, $) && this.close(), this.hideMessage(), this.showSelectedPopover = !0, this.renderSelectedPopover(), this.selectedPopover.classList.add("ms__selected-popover--visible");
|
|
4679
4849
|
const e = this.options.virtualScrollThreshold ?? 100;
|
|
4680
4850
|
this.selectedValues.size >= e && this.selectedPopover.classList.add("ms__selected-popover--virtual"), this.presentationMode === "fullscreen" ? (this.selectedPopover.classList.add("ms__selected-popover--fullscreen"), this.lockBodyScroll(), this.clampDocumentOverflowX(), this.pushOverlayHistory()) : this.positionSelectedPopover();
|
|
4681
4851
|
}
|
|
@@ -4768,8 +4938,8 @@ An ancestor of <web-multiselect> establishes a fixed-positioning containing bloc
|
|
|
4768
4938
|
const u = this.options.getBadgeClassCallback;
|
|
4769
4939
|
let f = "ms__badge ms__badge--custom";
|
|
4770
4940
|
if (u) {
|
|
4771
|
-
const
|
|
4772
|
-
|
|
4941
|
+
const m = this.classSuffix(u(e));
|
|
4942
|
+
m && (f += " " + m);
|
|
4773
4943
|
}
|
|
4774
4944
|
return `<div class="${f}" data-value="${o}">${d}</div>`;
|
|
4775
4945
|
}
|
|
@@ -4898,11 +5068,15 @@ An ancestor of <web-multiselect> establishes a fixed-positioning containing bloc
|
|
|
4898
5068
|
this.effectiveBadgesPosition === "left" || this.effectiveBadgesPosition === "right"
|
|
4899
5069
|
);
|
|
4900
5070
|
}
|
|
4901
|
-
return h(this,
|
|
5071
|
+
return h(this, $) || (this.input.placeholder = this.getPlaceholderText()), "searchInputMode" in e && (this.input.readOnly = this.options.searchInputMode === "readonly", this.input.style.display = this.options.searchInputMode === "hidden" ? "none" : ""), "searchHint" in e && this.hint && (this.hint.textContent = this.options.searchHint || ""), this.renderDropdown(), this.renderBadges(), this.updateHiddenInput(), !0;
|
|
4902
5072
|
}
|
|
4903
5073
|
get selectedItem() {
|
|
4904
5074
|
return this.selectedOptions.size === 0 ? null : Array.from(this.selectedOptions.values())[0];
|
|
4905
5075
|
}
|
|
5076
|
+
/** The current search box text (empty string when nothing is typed). Read-only; clear it with `clearSearch()`. */
|
|
5077
|
+
get searchText() {
|
|
5078
|
+
return this.searchTerm;
|
|
5079
|
+
}
|
|
4906
5080
|
get selectedValue() {
|
|
4907
5081
|
if (!this.options.valueMember && !this.options.getValueCallback)
|
|
4908
5082
|
return null;
|
|
@@ -4973,11 +5147,11 @@ ${o}` : t;
|
|
|
4973
5147
|
trigger: f,
|
|
4974
5148
|
content: this.buildBadgeTooltipContent(c)
|
|
4975
5149
|
});
|
|
4976
|
-
const
|
|
5150
|
+
const m = this.getItemBadgeDisplayValue(c);
|
|
4977
5151
|
this.spawnTooltip({
|
|
4978
5152
|
id: u,
|
|
4979
5153
|
trigger: a,
|
|
4980
|
-
content: this.buildRemoveButtonTooltipText(
|
|
5154
|
+
content: this.buildRemoveButtonTooltipText(m, c),
|
|
4981
5155
|
// Keep parent badge tooltip from overlapping the remove-button tooltip.
|
|
4982
5156
|
onBeforeShow: () => {
|
|
4983
5157
|
var g;
|
|
@@ -5106,10 +5280,10 @@ ${o}` : t;
|
|
|
5106
5280
|
const o = (t == null ? void 0 : t.variant) ?? "info", i = (t == null ? void 0 : t.duration) ?? 3e3, r = o === "error" || o === "warning", n = document.createElement("div");
|
|
5107
5281
|
n.className = `ms__message ms__message--${o}`, n.setAttribute("role", r ? "alert" : "status"), n.setAttribute("aria-live", r ? "assertive" : "polite"), typeof e == "string" ? n.textContent = e : n.appendChild(e), n.addEventListener("click", () => this.hideMessage());
|
|
5108
5282
|
const a = this.element.getRootNode(), l = a instanceof ShadowRoot ? a : null;
|
|
5109
|
-
if ((this.options.container ?? l ?? document.body).appendChild(n), this.messageEl = n, this.presentationMode === "fullscreen" && (h(this,
|
|
5283
|
+
if ((this.options.container ?? l ?? document.body).appendChild(n), this.messageEl = n, this.presentationMode === "fullscreen" && (h(this, $) || this.showSelectedPopover))
|
|
5110
5284
|
n.classList.add("ms__message--fullscreen");
|
|
5111
5285
|
else {
|
|
5112
|
-
const u =
|
|
5286
|
+
const u = tt(n, this.inputWrapper, {
|
|
5113
5287
|
strategy: "fixed",
|
|
5114
5288
|
placement: (t == null ? void 0 : t.placement) ?? "bottom",
|
|
5115
5289
|
offset: 8,
|
|
@@ -5183,10 +5357,10 @@ ${o}` : t;
|
|
|
5183
5357
|
// ========================================================================
|
|
5184
5358
|
destroy() {
|
|
5185
5359
|
var e;
|
|
5186
|
-
this.destroyAllTooltips(), this.hideLabelReveal(), this.hideMessage(), this.searchDebounceTimer && (clearTimeout(this.searchDebounceTimer), this.searchDebounceTimer = void 0), this.abortInFlightSearch(), this.dropdownCleanup && this.dropdownCleanup(), this.hintCleanup && this.hintCleanup(), this.selectedPopoverCleanup && this.selectedPopoverCleanup(), this.overlayHistoryActive && (this.overlayHistoryActive = !1, typeof window < "u" && window.removeEventListener("popstate", this.onOverlayPopstate)), this.exitFullscreen(), this.documentClickHandler && (document.removeEventListener("click", this.documentClickHandler), this.documentClickHandler = null), this.documentKeydownHandler && (document.removeEventListener("keydown", this.documentKeydownHandler), this.documentKeydownHandler = null), (e = this.overlayCoord) == null || e.dispose(), this.overlayCoord = null, this.virtualScroll && (this.virtualScroll.destroy(), this.virtualScroll = null), this.dropdown && this.dropdown.remove(), this.hint && this.hint.remove(), this.selectedPopover && this.selectedPopover.remove(), this.element.innerHTML = "", this.element.classList.remove("ms", "ms--open", "ms--no-checkboxes"),
|
|
5360
|
+
this.destroyAllTooltips(), this.hideLabelReveal(), this.hideMessage(), this.searchDebounceTimer && (clearTimeout(this.searchDebounceTimer), this.searchDebounceTimer = void 0), this.abortInFlightSearch(), this.dropdownCleanup && this.dropdownCleanup(), this.hintCleanup && this.hintCleanup(), this.selectedPopoverCleanup && this.selectedPopoverCleanup(), this.overlayHistoryActive && (this.overlayHistoryActive = !1, typeof window < "u" && window.removeEventListener("popstate", this.onOverlayPopstate)), this.exitFullscreen(), this.documentClickHandler && (document.removeEventListener("click", this.documentClickHandler), this.documentClickHandler = null), this.documentKeydownHandler && (document.removeEventListener("keydown", this.documentKeydownHandler), this.documentKeydownHandler = null), (e = this.overlayCoord) == null || e.dispose(), this.overlayCoord = null, this.virtualScroll && (this.virtualScroll.destroy(), this.virtualScroll = null), this.dropdown && this.dropdown.remove(), this.hint && this.hint.remove(), this.selectedPopover && this.selectedPopover.remove(), this.element.innerHTML = "", this.element.classList.remove("ms", "ms--open", "ms--no-checkboxes"), gt.info(`[${this.instanceId}] Component destroyed`);
|
|
5187
5361
|
}
|
|
5188
5362
|
}
|
|
5189
|
-
|
|
5363
|
+
$ = new WeakMap();
|
|
5190
5364
|
function cn() {
|
|
5191
5365
|
return {
|
|
5192
5366
|
fromAttribute(s) {
|
|
@@ -5267,7 +5441,7 @@ function fn(s, e, t) {
|
|
|
5267
5441
|
}
|
|
5268
5442
|
return i.push(r), o.push(i), o;
|
|
5269
5443
|
}
|
|
5270
|
-
const Oo = `@layer variables,component,overrides;@layer variables{:host{display:block;--ms-rem: 10px;font-family:var(--ms-font-family, var(--base-font-family, inherit));--ms-accent-color: var(--base-accent-color, #3b82f6);--ms-accent-color-hover: var(--base-accent-color-hover, #2563eb);--ms-accent-color-active: var(--base-accent-color-active, #1d4ed8);--ms-accent-color-light: var(--base-accent-color-light, light-dark(#eff6ff, #1e3a5f));--ms-accent-color-light-hover: var(--base-accent-color-light-hover, light-dark(#e0f2fe, #264a73));--ms-text-color-1: var(--base-text-color-1, light-dark(#111827, #f5f5f5));--ms-text-color-2: var(--base-text-color-2, light-dark(#353b47, #d4d4d4));--ms-text-color-3: var(--base-text-color-3, light-dark(#6b7280, #a3a3a3));--ms-text-color-4: var(--base-text-color-4, light-dark(#a0a3a9, #737373));--ms-text-color-on-accent: var(--base-text-color-on-accent, #ffffff);--ms-text-primary: var(--ms-text-color-1);--ms-text-secondary: var(--ms-text-color-3);--ms-primary-bg: var(--base-hover-bg, color-mix(in srgb, var(--ms-text-color-1) 8%, var(--base-main-bg, light-dark(#ffffff, #1a1a1a))));--ms-primary-bg-hover: var(--base-active-bg, color-mix(in srgb, var(--ms-text-color-1) 14%, var(--base-main-bg, light-dark(#ffffff, #1a1a1a))));--ms-border-color: var(--base-border-color, light-dark(#cbd5e1, #52525b));--ms-border: var(--base-border, 1px solid var(--ms-border-color));--ms-input-bg: var(--base-input-bg, light-dark(#ffffff, #1a1a1a));--ms-input-color: var(--base-input-color, var(--ms-text-color-1));--ms-input-border: var(--base-input-border, 1px solid var(--ms-border-color));--ms-input-border-hover: var(--base-input-border-hover, 1px solid var(--ms-accent-color));--ms-input-border-focus: var(--base-input-border-focus, 1px solid var(--ms-accent-color));--ms-input-placeholder-color: var(--base-input-placeholder-color, var(--ms-text-color-4));--ms-toggle-icon-color: var(--ms-text-color-3);--ms-toggle-icon-color-open: var(--ms-text-color-3);--ms-toggle-icon-size: calc(1.6 * var(--ms-rem));--ms-toggle-rotate-closed: 90deg;--ms-toggle-rotate-open: -90deg;--ms-counter-badge-bg: var(--ms-accent-color);--ms-counter-badge-bg-hover: var(--ms-accent-color-hover);--ms-counter-badge-color: var(--ms-text-color-on-accent);--ms-hint-bg: var(--base-main-bg, light-dark(#ffffff, #1a1a1a));--ms-hint-color: var(--ms-text-color-4);--ms-hint-border-color: var(--ms-border-color);--ms-dropdown-bg: var(--base-dropdown-bg, var(--base-elevated-bg, light-dark(#ffffff, #1a1a1a)));--ms-dropdown-text-color: var(--ms-text-color-1);--ms-dropdown-border-color: var(--ms-border-color);--ms-dropdown-box-shadow-semantic: var(--base-dropdown-box-shadow, 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1));--ms-actions-bg: var(--base-main-bg, light-dark(#ffffff, #1a1a1a));--ms-actions-border-color: var(--ms-border-color);--ms-action-button-bg: transparent;--ms-action-button-bg-hover: var(--ms-primary-bg);--ms-action-button-border-color: var(--ms-border-color);--ms-action-button-border-color-hover: var(--ms-accent-color);--ms-action-button-color: var(--ms-text-color-1);--ms-group-border-color: var(--ms-border-color);--ms-option-text-color: var(--ms-text-color-1);--ms-option-bg: transparent;--ms-option-bg-hover: var(--ms-primary-bg);--ms-option-color-hover: inherit;--ms-option-bg-focused: var(--ms-primary-bg);--ms-option-color-focused: inherit;--ms-option-outline-color-focused: var(--ms-accent-color);--ms-option-bg-selected: color-mix(in srgb, var(--ms-accent-color) 10%, transparent);--ms-option-bg-matched: color-mix(in srgb, var(--ms-accent-color) 8%, transparent);--ms-option-color-matched: inherit;--ms-option-border-matched-color: color-mix(in srgb, var(--ms-accent-color) 40%, transparent);--ms-option-title-color: var(--ms-text-color-1);--ms-option-subtitle-color: var(--ms-text-color-3);--ms-option-mark-bg: color-mix(in srgb, var(--ms-accent-color) 20%, transparent);--ms-option-mark-color: inherit;--ms-loading-color: var(--ms-text-color-3);--ms-badge-bg: var(--ms-accent-color-light);--ms-badge-bg-hover: var(--base-hover-bg, var(--ms-accent-color-light-hover));--ms-badge-bg-active: var(--ms-accent-color-light-hover);--ms-badge-text-bg-hover: var(--base-hover-bg, var(--ms-accent-color-light-hover));--ms-badge-text-color-hover: var(--ms-badge-text-color);--ms-badge-counter-border-color: var(--ms-border-color);--ms-badge-counter-text-bg: var(--ms-primary-bg-hover);--ms-badge-counter-text-color: var(--ms-text-color-1);--ms-badge-counter-remove-bg: var(--ms-text-color-3);--ms-badge-counter-remove-bg-hover: var(--ms-text-color-1);--ms-badge-counter-remove-color: var(--ms-text-color-on-accent);--ms-counter-wrapper-border-color: var(--ms-border-color);--ms-count-clear-bg-hover: var(--ms-accent-color);--ms-tooltip-bg: var(--base-tooltip-bg, var(--base-inverse-bg, light-dark(#333333, #f5f5f5)));--ms-tooltip-text-color: var(--base-tooltip-text-color, light-dark(#ffffff, #1a1a1a));--ms-selected-popover-bg: var(--base-dropdown-bg, var(--base-elevated-bg, light-dark(#ffffff, #1a1a1a)));--ms-selected-popover-border-color: var(--ms-border-color);--ms-selected-popover-header-border-color: var(--ms-border-color);--ms-selected-popover-close-bg-hover: var(--ms-accent-color);--ms-input-padding-h: calc(1.2 * var(--ms-rem));--ms-input-gap: calc(.6 * var(--ms-rem));--ms-input-height: calc(var(--base-input-size-md-height, 3.5) * var(--ms-rem));--ms-input-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-input-border-width: 1px;--ms-input-border-radius: var(--ms-border-radius-md);--ms-input-text: var(--ms-text-color-1);--ms-input-bg-disabled: var(--base-input-bg-disabled, rgba(107, 114, 128, .05));--ms-toggle-color: var(--ms-text-color-3);--ms-transform-rotate-180: 180deg;--ms-input-clear-size: calc(2.4 * var(--ms-rem));--ms-input-clear-icon-size: calc(1.4 * var(--ms-rem));--ms-input-clear-color: var(--base-input-clear-color, var(--ms-text-secondary));--ms-input-clear-bg-hover: var(--base-input-clear-bg-hover, var(--ms-option-bg-matched, transparent));--ms-input-clear-border-radius: var(--ms-border-radius);--ms-counter-padding: calc(.2 * var(--ms-rem)) calc(.4 * var(--ms-rem));--ms-counter-bg: var(--ms-accent-color);--ms-counter-color: var(--ms-text-color-on-accent);--ms-counter-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-counter-font-weight: var(--base-font-weight-semibold, 600);--ms-counter-border-radius: var(--ms-border-radius-sm);--ms-counter-bg-hover: var(--ms-accent-color-hover);--ms-transform-scale-hover: 1.1;--ms-hint-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-hint-border: 1px solid var(--ms-hint-border-color);--ms-hint-border-radius: var(--ms-border-radius-lg);--ms-hint-box-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--ms-hint-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-dropdown-border: var(--base-dropdown-border, 1px solid var(--ms-dropdown-border-color));--ms-dropdown-border-radius: var(--ms-border-radius-lg);--ms-dropdown-inner-border-radius: max(0px, calc(var(--ms-dropdown-border-radius) - 1px));--ms-dropdown-box-shadow: var(--base-dropdown-box-shadow, 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1));--ms-input-current-width: auto;--ms-dropdown-width: var(--ms-input-current-width);--ms-options-max-height: calc(32 * var(--ms-rem));--ms-option-color: var(--ms-text-color-1);--ms-z-index-dropdown: 9999;--ms-z-index-sticky: 1;--ms-z-index-fullscreen: 10001;--ms-z-index-fullscreen-tooltip: 10002;--ms-fullscreen-rem: 12px;--ms-fullscreen-bg: var(--ms-dropdown-bg);--ms-fullscreen-text-color: var(--ms-dropdown-text-color);--ms-fullscreen-header-bg: var(--ms-dropdown-bg);--ms-fullscreen-header-border: 1px solid var(--ms-dropdown-border-color);--ms-fullscreen-header-gap: calc(.8 * var(--ms-fullscreen-rem));--ms-fullscreen-header-padding-v: calc(.8 * var(--ms-fullscreen-rem));--ms-fullscreen-header-padding-h: calc(1.2 * var(--ms-fullscreen-rem));--ms-fullscreen-header-padding: var(--ms-fullscreen-header-padding-v) var(--ms-fullscreen-header-padding-h);--ms-fullscreen-header-min-height: calc(5.6 * var(--ms-fullscreen-rem));--ms-fullscreen-title-font-size: calc(1.7 * var(--ms-fullscreen-rem));--ms-fullscreen-title-font-weight: var(--base-font-weight-semibold, 600);--ms-fullscreen-search-border: var(--ms-input-border);--ms-fullscreen-search-border-radius: var(--ms-input-border-radius);--ms-fullscreen-search-padding: calc(.8 * var(--ms-fullscreen-rem)) calc(1.2 * var(--ms-fullscreen-rem));--ms-fullscreen-search-font-size: calc(1.6 * var(--ms-fullscreen-rem));--ms-fullscreen-search-clear-size: calc(2.8 * var(--ms-fullscreen-rem));--ms-fullscreen-search-clear-icon-size: calc(1.4 * var(--ms-fullscreen-rem));--ms-fullscreen-search-clear-inset: calc(.4 * var(--ms-fullscreen-rem));--ms-fullscreen-search-clear-gutter: calc(3.4 * var(--ms-fullscreen-rem));--ms-fullscreen-search-clear-color: var(--ms-text-muted-color, var(--ms-dropdown-text-color));--ms-fullscreen-search-clear-bg-hover: var(--ms-option-bg-matched, transparent);--ms-fullscreen-mode-toggle-size: calc(2.8 * var(--ms-fullscreen-rem));--ms-fullscreen-mode-toggle-icon-size: calc(1.5 * var(--ms-fullscreen-rem));--ms-fullscreen-mode-toggle-gap: var(--ms-fullscreen-header-gap);--ms-fullscreen-mode-toggle-color: var(--ms-text-muted-color, var(--ms-dropdown-text-color));--ms-fullscreen-mode-toggle-bg: transparent;--ms-fullscreen-mode-toggle-bg-hover: var(--ms-option-bg-matched, transparent);--ms-fullscreen-close-size: calc(3.6 * var(--ms-fullscreen-rem));--ms-fullscreen-close-icon-size: calc(1.6 * var(--ms-fullscreen-rem));--ms-fullscreen-close-color: var(--ms-dropdown-text-color);--ms-fullscreen-close-bg: transparent;--ms-fullscreen-close-border: none;--ms-fullscreen-close-border-radius: 50%;--ms-fullscreen-close-bg-hover: var(--ms-option-bg-matched, transparent);--ms-fullscreen-close-edge-nudge: calc(.8 * var(--ms-fullscreen-rem));--ms-fullscreen-info-size: calc(2.8 * var(--ms-fullscreen-rem));--ms-fullscreen-info-icon-size: calc(1.8 * var(--ms-fullscreen-rem));--ms-fullscreen-info-color: var(--ms-accent-color);--ms-fullscreen-info-bg-hover: var(--ms-option-bg-matched, transparent);--ms-fullscreen-nav-gap: calc(.6 * var(--ms-fullscreen-rem));--ms-fullscreen-nav-padding-top: calc(.6 * var(--ms-fullscreen-rem));--ms-fullscreen-nav-count-font-size: calc(1.3 * var(--ms-fullscreen-rem));--ms-fullscreen-nav-count-color: var(--ms-text-muted-color, var(--ms-dropdown-text-color));--ms-fullscreen-nav-btn-size: calc(3.2 * var(--ms-fullscreen-rem));--ms-fullscreen-nav-btn-icon-size: calc(1.6 * var(--ms-fullscreen-rem));--ms-fullscreen-nav-btn-color: var(--ms-dropdown-text-color);--ms-fullscreen-nav-btn-bg: var(--ms-option-bg-matched, transparent);--ms-fullscreen-nav-btn-bg-hover: color-mix(in srgb, var(--ms-accent-color) 22%, transparent);--ms-fullscreen-nav-btn-icon: var(--ms-icon-chevron);--ms-icon-chevron: var(--base-icon-chevron, url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='m9 18 6-6-6-6'/></svg>"));--ms-icon-info: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><circle cx='12' cy='12' r='9' fill='none' stroke='black' stroke-width='2'/><circle cx='12' cy='7.5' r='1.3' fill='black'/><path d='M12 11v6' stroke='black' stroke-width='2' stroke-linecap='round' fill='none'/></svg>");--ms-fullscreen-tree-base-indent: calc(.7 * var(--ms-fullscreen-rem));--ms-fullscreen-tree-indent: calc(1.2 * var(--ms-fullscreen-rem));--ms-actions-gap: calc(.4 * var(--ms-rem));--ms-actions-padding: calc(.8 * var(--ms-rem));--ms-actions-border-bottom: 1px solid var(--ms-actions-border-color);--ms-action-btn-padding: calc(.4 * var(--ms-rem)) calc(.8 * var(--ms-rem));--ms-action-btn-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-action-btn-border: var(--ms-border);--ms-action-btn-border-radius: var(--ms-border-radius-sm);--ms-action-btn-bg: transparent;--ms-action-btn-color: inherit;--ms-action-btn-bg-hover: var(--ms-primary-bg);--ms-action-btn-border-color-hover: var(--ms-accent-color);--ms-transform-scale-active: .98;--ms-options-padding: 0;--ms-group-border-top: 1px solid var(--ms-group-border-color);--ms-group-margin-top: calc(.4 * var(--ms-rem));--ms-group-padding-top: calc(.4 * var(--ms-rem));--ms-group-label-padding: calc(.4 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-group-label-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-group-label-font-weight: var(--base-font-weight-semibold, 600);--ms-group-label-color: var(--ms-text-color-3);--ms-group-label-transform: uppercase;--ms-group-label-letter-spacing: .05em;--ms-option-gap: calc(.8 * var(--ms-rem));--ms-option-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-option-padding-h: calc(1.2 * var(--ms-rem));--ms-option-min-height: auto;--ms-option-outline-focused: 2px solid var(--ms-option-outline-color-focused);--ms-option-focus-outline-offset: -2px;--ms-option-border-matched: 3px solid var(--ms-option-border-matched-color);--ms-option-bg-focused-hover: var(--ms-primary-bg);--ms-option-bg-matched-hover: color-mix(in srgb, var(--ms-accent-color) 12%, transparent);--ms-option-bg-selected-focused: color-mix(in srgb, var(--ms-accent-color) 15%, transparent);--ms-option-bg-selected-matched: color-mix(in srgb, var(--ms-accent-color) 15%, transparent);--ms-option-disabled-bg: var(--base-disabled-bg, transparent);--ms-option-bg-disabled-selected: color-mix(in srgb, var(--ms-accent-color) 10%, transparent);--ms-disabled-opacity: .5;--ms-option-content-gap: calc(.8 * var(--ms-rem));--ms-option-icon-size: calc(2 * var(--ms-rem));--ms-option-icon-font-size: calc(var(--base-font-size-base, 1.6) * var(--ms-rem));--ms-option-title-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-option-mark-font-weight: var(--base-font-weight-semibold, 600);--ms-option-title-white-space: normal;--ms-option-title-overflow: visible;--ms-option-title-text-overflow: clip;--ms-option-subtitle-margin-top: calc(.4 * var(--ms-rem));--ms-option-subtitle-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-option-subtitle-line-height: var(--base-line-height-tight, 1.25);--ms-checkbox-margin-top: 0;--ms-checkbox-margin-right: 0;--ms-checkbox-margin-bottom: 0;--ms-checkbox-margin-left: 0;--ms-checkbox-size: calc(1.6 * var(--ms-rem));--ms-checkbox-scale: 1;--ms-checkbox-align: center;--ms-checkbox-bg: var(--ms-input-bg);--ms-checkbox-border-width: 1px;--ms-checkbox-border-color: var(--base-checkbox-border-color, #8f8f8f);--ms-checkbox-border: var(--ms-checkbox-border-width) solid var(--ms-checkbox-border-color);--ms-checkbox-border-radius: calc(.3 * var(--ms-rem));--ms-checkbox-checkmark-thickness: 2.5px;--ms-checkbox-checked-bg: var(--ms-accent-color);--ms-checkbox-checked-border: var(--ms-checkbox-border-width) solid var(--ms-accent-color);--ms-checkbox-checkmark-color: var(--ms-text-color-on-accent);--ms-checkbox-hover-border-color: var(--ms-accent-color);--ms-checkbox-disabled-bg: var(--ms-primary-bg);--ms-checkbox-disabled-border: var(--ms-checkbox-border-width) solid var(--ms-border-color);--ms-checkbox-checked-bg-hover: var(--ms-accent-color-hover);--ms-checkbox-checked-border-color-hover: var(--ms-accent-color-hover);--ms-state-min-height: calc(8 * var(--ms-rem));--ms-empty-padding: calc(1.6 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-empty-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-empty-color: var(--ms-text-color-3);--ms-loader-padding: calc(1.6 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-loader-gap: calc(.8 * var(--ms-rem));--ms-loading-text-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-loading-text-color: var(--ms-text-color-3);--ms-badges-gap: calc(.8 * var(--ms-rem));--ms-badges-margin-bottom: calc(.8 * var(--ms-rem));--ms-badges-margin-top: calc(.8 * var(--ms-rem));--ms-badges-margin-left: calc(.4 * var(--ms-rem));--ms-badges-margin-right: calc(.4 * var(--ms-rem));--ms-inline-align: center;--ms-badge-gap: calc(.8 * var(--ms-rem));--ms-badge-height: calc(2.7 * var(--ms-rem));--ms-badge-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-badge-font-weight: var(--base-font-weight-semibold, 600);--ms-badge-border-radius: var(--ms-border-radius-sm);--ms-order-first: -1;--ms-badge-text-padding: 0 calc(.8 * var(--ms-rem));--ms-badge-text-bg: var(--ms-accent-color-light);--ms-badge-text-color: var(--ms-accent-color);--ms-badge-text-border: none;--ms-badge-remove-width: calc(2.7 * var(--ms-rem));--ms-badge-remove-bg: var(--ms-accent-color);--ms-badge-remove-color: var(--ms-text-color-on-accent);--ms-badge-remove-border: none;--ms-badge-remove-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-badge-remove-bg-hover: var(--ms-accent-color-hover);--ms-badge-remove-box-shadow-focus: 0 0 0 2px color-mix(in srgb, var(--ms-accent-color) 50%, transparent);--ms-badge-remove-icon-size: calc(1 * var(--ms-rem));--ms-icon-remove: var(--base-icon-remove, var(--base-icon-close, url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M18 6 6 18'/><path d='m6 6 12 12'/></svg>")));--ms-icon-search-clear: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='m13.5 8.5-5 5'/><path d='m8.5 8.5 5 5'/><circle cx='11' cy='11' r='8'/><path d='m21 21-4.3-4.3'/></svg>");--ms-icon-search: var(--base-icon-search, url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><circle cx='11' cy='11' r='8'/><path d='m21 21-4.3-4.3'/></svg>"));--ms-icon-filter: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polygon points='22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3'/></svg>");--ms-badge-counter-bg: transparent;--ms-badge-counter-border: 1px solid var(--ms-badge-counter-border-color);--ms-badge-counter-border-radius: var(--ms-border-radius-sm);--ms-more-badge-bg: var(--ms-accent-color-light);--ms-more-badge-hover-bg: var(--ms-badge-bg-hover);--ms-more-badge-active-bg: var(--ms-accent-color-light-hover);--ms-count-display-margin-bottom: calc(.8 * var(--ms-rem));--ms-count-display-margin-top: calc(.8 * var(--ms-rem));--ms-count-display-margin-left: calc(.8 * var(--ms-rem));--ms-count-display-margin-right: calc(.8 * var(--ms-rem));--ms-counter-wrapper-bg: transparent;--ms-counter-wrapper-border: var(--ms-border);--ms-counter-wrapper-border-radius: var(--ms-border-radius-sm);--ms-counter-wrapper-padding: calc(.4 * var(--ms-rem)) calc(.8 * var(--ms-rem));--ms-counter-wrapper-gap: calc(.4 * var(--ms-rem));--ms-counter-wrapper-bg-hover: var(--ms-primary-bg);--ms-counter-wrapper-border-color-hover: var(--ms-accent-color);--ms-count-text-bg: transparent;--ms-count-text-border: none;--ms-count-text-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-count-text-color: var(--ms-text-color-1);--ms-count-clear-size: calc(1.6 * var(--ms-rem));--ms-count-clear-bg: transparent;--ms-count-clear-color: var(--ms-text-color-3);--ms-count-clear-font-size: calc(var(--base-font-size-lg, 1.8) * var(--ms-rem));--ms-count-clear-border-radius: var(--ms-border-radius-sm);--ms-count-clear-bg-hover: color-mix(in srgb, var(--ms-accent-color) 20%, transparent);--ms-count-clear-color-hover: var(--ms-accent-color);--ms-count-clear-icon-size: calc(1.4 * var(--ms-rem));--ms-icon-clear: var(--base-icon-clear, var(--ms-icon-remove));--ms-tooltip-color: var(--ms-tooltip-text-color);--ms-tooltip-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-tooltip-border-radius: var(--ms-border-radius-lg);--ms-tooltip-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-tooltip-max-width: calc(32 * var(--ms-rem));--ms-tooltip-shadow: 0 2px 8px rgba(0, 0, 0, .15);--ms-tooltip-z-index: 10000;--ms-option-tooltip-bg: var(--ms-tooltip-bg);--ms-option-tooltip-text-color: var(--ms-tooltip-text-color);--ms-option-tooltip-padding: var(--ms-tooltip-padding);--ms-option-tooltip-border-radius: var(--ms-tooltip-border-radius);--ms-option-tooltip-font-size: var(--ms-tooltip-font-size);--ms-option-tooltip-max-width: var(--ms-tooltip-max-width);--ms-option-tooltip-shadow: var(--ms-tooltip-shadow);--ms-option-tooltip-z-index: var(--ms-tooltip-z-index);--ms-message-bg: var(--ms-message-info-bg);--ms-message-color: var(--ms-message-info-color);--ms-message-border: 1px solid transparent;--ms-message-border-radius: var(--ms-border-radius-lg);--ms-message-padding: calc(1 * var(--ms-rem)) calc(1.4 * var(--ms-rem));--ms-message-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-message-font-weight: var(--base-font-weight-medium, 500);--ms-message-max-width: calc(40 * var(--ms-rem));--ms-message-shadow: 0 4px 16px rgb(0 0 0 / .18);--ms-message-fullscreen-offset: calc(2.4 * var(--ms-fullscreen-rem));--ms-message-z-index: var(--ms-z-index-fullscreen-tooltip);--ms-message-info-bg: var(--ms-tooltip-bg);--ms-message-info-color: var(--ms-tooltip-text-color);--ms-message-warning-bg: var(--base-warning-bg, #f59e0b);--ms-message-warning-color: var(--base-warning-color, #1a1a1a);--ms-message-error-bg: var(--base-danger-bg, #ef4444);--ms-message-error-color: var(--base-danger-color, #ffffff);--ms-message-success-bg: var(--base-success-bg, #10b981);--ms-message-success-color: var(--base-success-color, #ffffff);--ms-z-index-popover: 10000;--ms-selected-popover-width: var(--ms-input-current-width);--ms-selected-popover-max-height: calc(32 * var(--ms-rem));--ms-selected-popover-border: 1px solid var(--ms-selected-popover-border-color);--ms-selected-popover-border-radius: var(--ms-border-radius-lg);--ms-selected-popover-box-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--ms-selected-popover-header-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-selected-popover-header-bg: color-mix(in srgb, var(--ms-accent-color) 10%, transparent);--ms-selected-popover-header-border-bottom: 1px solid var(--ms-selected-popover-header-border-color);--ms-selected-popover-header-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-selected-popover-header-font-weight: var(--base-font-weight-semibold, 600);--ms-selected-popover-header-color: var(--ms-text-color-1);--ms-popover-close-size: calc(2.4 * var(--ms-rem));--ms-selected-popover-close-bg: transparent;--ms-selected-popover-close-color: var(--ms-text-color-3);--ms-selected-popover-close-font-size: calc(var(--base-font-size-xl, 2) * var(--ms-rem));--ms-selected-popover-close-border-radius: var(--ms-border-radius-sm);--ms-selected-popover-close-bg-hover: color-mix(in srgb, var(--ms-accent-color) 20%, transparent);--ms-selected-popover-close-color-hover: var(--ms-accent-color);--ms-selected-popover-close-icon-size: calc(1.4 * var(--ms-rem));--ms-selected-popover-body-gap: calc(.4 * var(--ms-rem));--ms-selected-popover-body-padding: calc(.8 * var(--ms-rem));--ms-selected-popover-body-max-height: calc(28.8 * var(--ms-rem));--ms-font-size-2xs: calc(var(--base-font-size-2xs, 1) * var(--ms-rem));--ms-font-size-xs: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-font-size-sm: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-font-size-base: calc(var(--base-font-size-base, 1.6) * var(--ms-rem));--ms-font-size-lg: calc(var(--base-font-size-lg, 1.8) * var(--ms-rem));--ms-font-weight-normal: var(--base-font-weight-normal, 400);--ms-font-weight-medium: var(--base-font-weight-medium, 500);--ms-font-weight-semibold: var(--base-font-weight-semibold, 600);--ms-line-height-none: 1;--ms-line-height-tight: var(--base-line-height-tight, 1.25);--ms-line-height-normal: var(--base-line-height-normal, 1.5);--ms-line-height-relaxed: var(--base-line-height-relaxed, 1.75);--ms-border-radius-sm: calc(var(--base-border-radius-sm, .4) * var(--ms-rem));--ms-border-radius-md: calc(var(--base-border-radius-md, .6) * var(--ms-rem));--ms-border-radius-lg: calc(var(--base-border-radius-lg, .8) * var(--ms-rem));--ms-border-radius: var(--ms-border-radius-md);--ms-spacing-xs: calc(.4 * var(--ms-rem));--ms-spacing-sm: calc(.8 * var(--ms-rem));--ms-spacing-md: calc(1.2 * var(--ms-rem));--ms-spacing-lg: calc(1.6 * var(--ms-rem));--ms-transition-fast: .15s;--ms-transition-normal: .2s;--ms-easing-snappy: var(--base-ease-standard, cubic-bezier(.4, 0, .2, 1));--ms-placeholder-opacity: .6;--ms-disabled-input-opacity: .6;--ms-scrollbar-width: 8px;--ms-scrollbar-track-bg: transparent;--ms-scrollbar-thumb-bg: var(--ms-border-color);--ms-scrollbar-thumb-bg-hover: var(--ms-text-color-3);--ms-scrollbar-thumb-border-radius: 4px;--ms-debug-bg: var(--base-elevated-bg, light-dark(#f9fafb, #2b2b2b));--ms-debug-border-color: var(--ms-border-color);--ms-debug-text-color: var(--ms-text-color-1);--ms-debug-border-radius: var(--ms-border-radius-md);--ms-debug-summary-color: var(--ms-accent-color);--ms-debug-summary-bg-hover: var(--ms-primary-bg);--ms-debug-summary-outline-color: var(--ms-accent-color);--ms-debug-summary-border-radius: var(--ms-border-radius-sm);--ms-debug-stats-bg: var(--base-main-bg, light-dark(#ffffff, #1a1a1a));--ms-debug-stats-border-radius: var(--ms-border-radius-sm);--ms-debug-bullet-color: var(--ms-accent-color)}}@layer component{web-multiselect:not(:defined){display:block;min-height:calc(3.5 * var(--ms-rem));color:transparent!important;background:transparent}:host{-webkit-tap-highlight-color:transparent}.ms__wrapper{display:flex;flex-direction:column;align-items:stretch}.ms__wrapper--inline{flex-direction:row;align-items:var(--ms-inline-align, center)}.ms{position:relative;width:100%}}@layer component{.ms__input-wrapper{box-sizing:border-box;position:relative;display:flex;align-items:center;gap:var(--ms-input-gap);height:var(--ms-input-height);padding-inline:var(--ms-input-padding-h);background:var(--ms-input-bg);color:var(--ms-input-color);border:var(--ms-input-border);border-radius:var(--ms-input-border-radius);cursor:pointer;transition:border var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__input-wrapper:hover:not(:focus-within){border:var(--ms-input-border-hover)}.ms__input-wrapper:focus-within{border:var(--ms-input-border-focus)}.ms__input{flex:1 1 auto;min-width:0;box-sizing:border-box;font-family:inherit;height:100%;padding:0;border:none;background:transparent;font-size:var(--ms-input-font-size);color:var(--ms-input-color);cursor:pointer;outline:none}.ms__input::placeholder{color:var(--ms-input-placeholder-color);opacity:0;transition:opacity var(--ms-transition-fast) var(--ms-easing-snappy)}:host([data-ready]) .ms__input::placeholder{opacity:var(--ms-placeholder-opacity)}.ms__toggle{flex:0 0 auto;display:block;width:var(--ms-toggle-icon-size);height:var(--ms-toggle-icon-size);color:var(--ms-toggle-icon-color);cursor:pointer}.ms__toggle:before{content:"";display:block;width:100%;height:100%;background-color:currentColor;-webkit-mask:var(--ms-icon-chevron) center / contain no-repeat;mask:var(--ms-icon-chevron) center / contain no-repeat;transform:rotate(var(--ms-toggle-rotate-closed, 90deg));transition:transform var(--ms-transition-fast) var(--ms-easing-snappy)}.ms--open .ms__toggle{color:var(--ms-toggle-icon-color-open)}.ms--open .ms__toggle:before{transform:rotate(var(--ms-toggle-rotate-open, -90deg))}.ms__counter{flex:0 0 auto;padding:var(--ms-counter-padding);background:var(--ms-counter-badge-bg);color:var(--ms-counter-badge-color);font-size:var(--ms-counter-font-size);font-weight:var(--ms-counter-font-weight);border-radius:var(--ms-counter-border-radius);cursor:pointer;transition:all var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__counter:hover{background:var(--ms-counter-badge-bg-hover);transform:scale(var(--ms-transform-scale-hover))}.ms__input-clear{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:var(--ms-input-clear-size);height:var(--ms-input-clear-size);padding:0;color:var(--ms-input-clear-color);background:transparent;border:none;border-radius:var(--ms-input-clear-border-radius);cursor:pointer;transition:background var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__input-clear:hover{background:var(--ms-input-clear-bg-hover)}.ms__input-clear:before{content:"";display:block;width:var(--ms-input-clear-icon-size);height:var(--ms-input-clear-icon-size);background-color:currentColor;-webkit-mask:var(--ms-icon-clear) center / contain no-repeat;mask:var(--ms-icon-clear) center / contain no-repeat}.ms__actions{display:flex;flex-direction:column;gap:var(--ms-actions-gap);padding:var(--ms-actions-padding)}.ms__actions--top{border-bottom:var(--ms-actions-border-bottom)}.ms__actions--bottom{flex-direction:column-reverse;border-top:var(--ms-actions-border-bottom)}.ms__actions-row{display:flex;flex-wrap:nowrap;gap:var(--ms-actions-gap)}.ms__actions--wrap .ms__actions-row{flex-wrap:wrap}.ms__actions--sticky{position:sticky;z-index:var(--ms-z-index-sticky);background:var(--ms-actions-bg)}.ms__actions--sticky.ms__actions--top{top:0}.ms__actions--sticky.ms__actions--bottom{bottom:0}.ms__actions--align-stretch .ms__action-btn{flex:1}.ms__actions--align-left .ms__actions-row{justify-content:flex-start}.ms__actions--align-right .ms__actions-row{justify-content:flex-end}.ms__actions--align-center .ms__actions-row{justify-content:center}.ms__actions--align-space-between .ms__actions-row{justify-content:space-between}.ms__action-btn{font-family:inherit;padding:var(--ms-action-btn-padding);font-size:var(--ms-action-btn-font-size);border:var(--ms-action-btn-border);border-radius:var(--ms-action-btn-border-radius);background:var(--ms-action-button-bg);color:var(--ms-action-button-color);cursor:pointer;transition:all var(--ms-transition-fast) var(--ms-easing-snappy)}@media (hover: hover){.ms__action-btn:hover{background:var(--ms-action-button-bg-hover);border-color:var(--ms-action-button-border-color-hover)}}.ms__action-btn:active{transform:scale(var(--ms-transform-scale-active))}.ms__action-btn:disabled,.ms__action-btn[disabled]{opacity:var(--ms-disabled-opacity);cursor:not-allowed;pointer-events:none}}@layer component{.ms__hint{display:none;position:fixed;z-index:var(--ms-z-index-popover);padding:var(--ms-hint-padding);background:var(--ms-hint-bg);border:var(--ms-hint-border);border-radius:var(--ms-hint-border-radius);box-shadow:var(--ms-hint-box-shadow);font-size:var(--ms-hint-font-size);color:var(--ms-hint-color);line-height:var(--ms-line-height-relaxed);max-width:100%}.ms__hint--visible{display:block}.ms__dropdown{display:none;position:fixed;box-sizing:border-box;font-family:inherit;z-index:var(--ms-z-index-dropdown);background:var(--ms-dropdown-bg);border:var(--ms-dropdown-border);border-radius:var(--ms-dropdown-border-radius);box-shadow:var(--ms-dropdown-box-shadow);width:var(--ms-dropdown-width);max-height:var(--ms-options-max-height);overflow:hidden;color:var(--ms-dropdown-text-color)}.ms__dropdown--visible{display:flex;flex-direction:column}.ms__dropdown--fullscreen,.ms__selected-popover--fullscreen{--ms-rem: var(--ms-fullscreen-rem);--ms-option-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-option-gap: calc(.8 * var(--ms-rem));--ms-option-title-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-option-subtitle-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-option-icon-font-size: calc(var(--base-font-size-base, 1.6) * var(--ms-rem));--ms-checkbox-size: calc(1.6 * var(--ms-rem));--ms-group-label-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-group-label-padding: calc(.4 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-tree-base-indent: var(--ms-fullscreen-tree-base-indent);--ms-tree-indent: var(--ms-fullscreen-tree-indent)}.ms__selected-popover--fullscreen{--ms-badge-gap: calc(.8 * var(--ms-rem));--ms-badge-height: calc(4.2 * var(--ms-rem));--ms-badge-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-badge-text-padding: 0 calc(1.2 * var(--ms-rem));--ms-badge-remove-width: calc(3.6 * var(--ms-rem));--ms-badge-remove-icon-size: calc(1.2 * var(--ms-rem));--ms-badge-remove-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem))}.ms__dropdown--fullscreen{--ms-actions-gap: calc(.4 * var(--ms-rem));--ms-actions-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-action-btn-padding: calc(.6 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-action-btn-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem))}.ms__dropdown--fullscreen{position:fixed;top:0;inset-inline-start:0;width:100vw;max-width:100vw;height:100dvh;max-height:100dvh;border:none;border-radius:0;--ms-dropdown-inner-border-radius: 0;background:var(--ms-fullscreen-bg);color:var(--ms-fullscreen-text-color);z-index:var(--ms-z-index-fullscreen);box-sizing:border-box;padding-top:env(safe-area-inset-top);padding-right:env(safe-area-inset-right);padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left)}.ms__dropdown--fullscreen .ms__dropdown-inner{display:flex;flex-direction:column;flex:1;min-height:0;max-height:none;overflow:hidden}.ms__dropdown--fullscreen .ms__options{flex:1 1 0;min-height:0;height:auto;max-height:none;overflow-y:auto;padding-bottom:var(--ms-option-gap)}.ms__dropdown--fullscreen .ms__actions{flex:0 0 auto}.ms__fullscreen-header,.ms__selected-popover--fullscreen .ms__selected-popover-header{flex:0 0 auto;display:flex;align-items:center;flex-wrap:wrap;gap:var(--ms-fullscreen-header-gap);min-height:var(--ms-fullscreen-header-min-height);padding:var(--ms-fullscreen-header-padding);background:var(--ms-fullscreen-header-bg);border-bottom:var(--ms-fullscreen-header-border)}.ms__fullscreen-header{align-content:flex-start}.ms__fullscreen-header>.ms__fullscreen-search-wrapper{min-height:var(--ms-fullscreen-header-min-height)}.ms__fullscreen-nav{flex:0 0 100%;display:flex;align-items:center;justify-content:space-between;gap:var(--ms-fullscreen-nav-gap);padding-top:var(--ms-fullscreen-nav-padding-top)}.ms__fullscreen-nav-count{font-size:var(--ms-fullscreen-nav-count-font-size);color:var(--ms-fullscreen-nav-count-color)}.ms__fullscreen-nav-controls{display:flex;align-items:center;gap:var(--ms-fullscreen-nav-gap)}.ms__fullscreen-nav-btn{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:var(--ms-fullscreen-nav-btn-size);height:var(--ms-fullscreen-nav-btn-size);padding:0;color:var(--ms-fullscreen-nav-btn-color);background:var(--ms-fullscreen-nav-btn-bg);border:none;border-radius:50%;cursor:pointer}.ms__fullscreen-nav-btn:hover:not(:disabled){background:var(--ms-fullscreen-nav-btn-bg-hover)}.ms__fullscreen-nav-btn:disabled{opacity:.4;cursor:default}.ms__fullscreen-nav-btn:before{content:"";display:block;width:var(--ms-fullscreen-nav-btn-icon-size);height:var(--ms-fullscreen-nav-btn-icon-size);background-color:currentColor;-webkit-mask:var(--ms-fullscreen-nav-btn-icon) center / contain no-repeat;mask:var(--ms-fullscreen-nav-btn-icon) center / contain no-repeat;transform:rotate(-90deg)}.ms__fullscreen-nav-btn--next:before{transform:rotate(90deg)}.ms__fullscreen-header>.ms__fullscreen-search-wrapper,.ms__selected-popover--fullscreen .ms__selected-popover-header>span{flex:1 1 0;min-width:0}.ms__fullscreen-search-wrapper{position:relative;display:flex;align-items:center}.ms__selected-popover--fullscreen .ms__selected-popover-header{font-size:var(--ms-fullscreen-title-font-size);font-weight:var(--ms-fullscreen-title-font-weight);color:var(--ms-fullscreen-text-color)}.ms__fullscreen-search{flex:1 1 auto;min-width:0;font-family:inherit;font-size:var(--ms-fullscreen-search-font-size);color:inherit;background:transparent;border:var(--ms-fullscreen-search-border);border-radius:var(--ms-fullscreen-search-border-radius);padding:var(--ms-fullscreen-search-padding);padding-inline-end:var(--ms-fullscreen-search-clear-gutter)}.ms__fullscreen-search:focus{outline:none;border:var(--ms-input-border-focus)}.ms__fullscreen-search-clear{position:absolute;inset-inline-end:var(--ms-fullscreen-search-clear-inset);top:50%;transform:translateY(-50%);display:inline-flex;align-items:center;justify-content:center;width:var(--ms-fullscreen-search-clear-size);height:var(--ms-fullscreen-search-clear-size);padding:0;color:var(--ms-fullscreen-search-clear-color);background:transparent;border:none;border-radius:50%;cursor:pointer}.ms__fullscreen-search-clear:hover{background:var(--ms-fullscreen-search-clear-bg-hover)}.ms__fullscreen-search-clear:before{content:"";display:block;width:var(--ms-fullscreen-search-clear-icon-size);height:var(--ms-fullscreen-search-clear-icon-size);background-color:currentColor;-webkit-mask:var(--ms-icon-search-clear) center / contain no-repeat;mask:var(--ms-icon-search-clear) center / contain no-repeat}.ms__fullscreen-mode-toggle{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:var(--ms-fullscreen-mode-toggle-size);height:var(--ms-fullscreen-mode-toggle-size);margin-inline-end:var(--ms-fullscreen-mode-toggle-gap);margin-inline-start:calc((var(--ms-fullscreen-close-size) - var(--ms-fullscreen-mode-toggle-size)) / 2 - var(--ms-fullscreen-close-edge-nudge));padding:0;color:var(--ms-fullscreen-mode-toggle-color);background:var(--ms-fullscreen-mode-toggle-bg);border:none;border-radius:50%;cursor:pointer}.ms__fullscreen-mode-toggle:hover{background:var(--ms-fullscreen-mode-toggle-bg-hover)}.ms__fullscreen-mode-toggle:before{content:"";display:block;width:var(--ms-fullscreen-mode-toggle-icon-size);height:var(--ms-fullscreen-mode-toggle-icon-size);background-color:currentColor;-webkit-mask:var(--ms-fullscreen-mode-toggle-icon, var(--ms-icon-search)) center / contain no-repeat;mask:var(--ms-fullscreen-mode-toggle-icon, var(--ms-icon-search)) center / contain no-repeat}.ms__fullscreen-mode-toggle[data-mode=navigate]{--ms-fullscreen-mode-toggle-icon: var(--ms-icon-search)}.ms__fullscreen-mode-toggle[data-mode=filter]{--ms-fullscreen-mode-toggle-icon: var(--ms-icon-filter)}.ms__fullscreen-close,.ms__selected-popover--fullscreen .ms__selected-popover-close{flex:0 0 auto;position:relative;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;width:var(--ms-fullscreen-close-size);height:var(--ms-fullscreen-close-size);margin-inline-end:calc(-1 * var(--ms-fullscreen-close-edge-nudge));padding:0;color:var(--ms-fullscreen-close-color);background:var(--ms-fullscreen-close-bg);border:var(--ms-fullscreen-close-border);border-radius:var(--ms-fullscreen-close-border-radius);cursor:pointer}.ms__fullscreen-close:after,.ms__selected-popover--fullscreen .ms__selected-popover-close:after{content:"";position:absolute;inset-block-start:calc(-1 * var(--ms-fullscreen-close-size));inset-block-end:calc(-1 * var(--ms-fullscreen-header-padding-v));inset-inline-end:calc(-1 * var(--ms-fullscreen-header-padding-h));inset-inline-start:calc(-1 * var(--ms-fullscreen-header-gap))}.ms__fullscreen-close:hover,.ms__selected-popover--fullscreen .ms__selected-popover-close:hover{background:var(--ms-fullscreen-close-bg-hover);color:var(--ms-fullscreen-close-color)}.ms__fullscreen-close:before,.ms__selected-popover--fullscreen .ms__selected-popover-close:before{content:"";display:block;width:var(--ms-fullscreen-close-icon-size);height:var(--ms-fullscreen-close-icon-size);background-color:currentColor;-webkit-mask:var(--ms-icon-remove) center / contain no-repeat;mask:var(--ms-icon-remove) center / contain no-repeat}.ms__dropdown--fullscreen .ms__option-info{flex:0 0 auto;display:none;align-items:center;justify-content:center;width:var(--ms-fullscreen-info-size);height:var(--ms-fullscreen-info-size);margin-inline-start:var(--ms-option-gap);padding:0;color:var(--ms-fullscreen-info-color);background:transparent;border:none;border-radius:50%;cursor:pointer}.ms__dropdown--fullscreen .ms__option--truncated .ms__option-info{display:inline-flex}@media (hover: hover){.ms__dropdown--fullscreen .ms__option-info:hover{background:var(--ms-fullscreen-info-bg-hover)}}.ms__dropdown--fullscreen .ms__option-info:before{content:"";display:block;width:var(--ms-fullscreen-info-icon-size);height:var(--ms-fullscreen-info-icon-size);background-color:currentColor;-webkit-mask:var(--ms-icon-info) center / contain no-repeat;mask:var(--ms-icon-info) center / contain no-repeat}.ms__dropdown-inner{flex:1;overflow-y:auto;border-radius:var(--ms-dropdown-inner-border-radius);overscroll-behavior:contain;touch-action:pan-y;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:var(--ms-scrollbar-thumb-bg) var(--ms-scrollbar-track-bg)}.ms__dropdown-inner::-webkit-scrollbar{width:var(--ms-scrollbar-width)}.ms__dropdown-inner::-webkit-scrollbar-track{background:var(--ms-scrollbar-track-bg)}.ms__dropdown-inner::-webkit-scrollbar-thumb{background:var(--ms-scrollbar-thumb-bg);border-radius:var(--ms-scrollbar-thumb-border-radius)}.ms__dropdown-inner::-webkit-scrollbar-thumb:hover{background:var(--ms-scrollbar-thumb-bg-hover)}.ms__dropdown--virtual{max-height:none}.ms__dropdown--virtual .ms__dropdown-inner{overflow:hidden}.ms__badge-tooltip{position:fixed;z-index:var(--ms-tooltip-z-index);opacity:0;visibility:hidden;transition:opacity var(--ms-transition-normal) ease,visibility var(--ms-transition-normal) ease;background:var(--ms-tooltip-bg);color:var(--ms-tooltip-text-color);padding:var(--ms-tooltip-padding);border-radius:var(--ms-tooltip-border-radius);font-size:var(--ms-tooltip-font-size);line-height:var(--ms-line-height-relaxed);max-width:var(--ms-tooltip-max-width);word-wrap:break-word;white-space:pre-wrap;box-shadow:var(--ms-tooltip-shadow);pointer-events:none}.ms__badge-tooltip--visible{opacity:1;visibility:visible}.ms__option-tooltip{position:fixed;z-index:var(--ms-option-tooltip-z-index);opacity:0;visibility:hidden;transition:opacity var(--ms-transition-normal) ease,visibility var(--ms-transition-normal) ease;background:var(--ms-option-tooltip-bg);color:var(--ms-option-tooltip-text-color);padding:var(--ms-option-tooltip-padding);border-radius:var(--ms-option-tooltip-border-radius);font-size:var(--ms-option-tooltip-font-size);line-height:var(--ms-line-height-relaxed);max-width:var(--ms-option-tooltip-max-width);word-wrap:break-word;white-space:pre-wrap;box-shadow:var(--ms-option-tooltip-shadow);pointer-events:none}.ms__option-tooltip--visible{opacity:1;visibility:visible}.ms__option-tooltip--fullscreen{z-index:var(--ms-z-index-fullscreen-tooltip)}.ms__message{position:fixed;z-index:var(--ms-message-z-index);box-sizing:border-box;max-width:var(--ms-message-max-width);padding:var(--ms-message-padding);font-family:inherit;font-size:var(--ms-message-font-size);font-weight:var(--ms-message-font-weight);line-height:var(--ms-line-height-normal);color:var(--ms-message-color);background:var(--ms-message-bg);border:var(--ms-message-border);border-radius:var(--ms-message-border-radius);box-shadow:var(--ms-message-shadow);cursor:pointer;opacity:0;transition:opacity var(--ms-transition-normal) ease;-webkit-tap-highlight-color:transparent}.ms__message--visible{opacity:1}.ms__message--info{background:var(--ms-message-info-bg);color:var(--ms-message-info-color)}.ms__message--warning{background:var(--ms-message-warning-bg);color:var(--ms-message-warning-color)}.ms__message--error{background:var(--ms-message-error-bg);color:var(--ms-message-error-color)}.ms__message--success{background:var(--ms-message-success-bg);color:var(--ms-message-success-color)}.ms__message--fullscreen{left:50%;right:auto;bottom:calc(var(--ms-message-fullscreen-offset) + env(safe-area-inset-bottom));transform:translate(-50%);max-width:min(var(--ms-message-max-width),calc(100vw - 4 * var(--ms-fullscreen-rem)));padding:calc(1 * var(--ms-fullscreen-rem)) calc(1.4 * var(--ms-fullscreen-rem));font-size:calc(var(--base-font-size-sm, 1.4) * var(--ms-fullscreen-rem))}.ms__selected-popover{display:none;position:fixed;box-sizing:border-box;z-index:var(--ms-z-index-popover);background:var(--ms-selected-popover-bg);border:var(--ms-selected-popover-border);border-radius:var(--ms-selected-popover-border-radius);box-shadow:var(--ms-selected-popover-box-shadow);width:var(--ms-selected-popover-width);max-height:var(--ms-selected-popover-max-height);overflow:hidden}.ms__selected-popover--visible{display:flex;flex-direction:column}.ms__selected-popover--virtual{display:block;overflow:visible;max-height:none}.ms__selected-popover--fullscreen{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;width:100vw;max-width:100vw;height:100dvh;max-height:100dvh;border:none;border-radius:0;overflow:hidden;background:var(--ms-fullscreen-bg);color:var(--ms-fullscreen-text-color);z-index:var(--ms-z-index-fullscreen);box-sizing:border-box;padding-top:env(safe-area-inset-top);padding-right:env(safe-area-inset-right);padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left)}.ms__selected-popover--fullscreen .ms__selected-popover-body{flex:1 1 0;min-height:0;max-height:none}.ms__selected-popover-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ms-selected-popover-header-padding);background:var(--ms-selected-popover-header-bg);border-bottom:var(--ms-selected-popover-header-border-bottom);font-size:var(--ms-selected-popover-header-font-size);font-weight:var(--ms-selected-popover-header-font-weight);color:var(--ms-selected-popover-header-color)}.ms__selected-popover-close{display:flex;align-items:center;justify-content:center;width:var(--ms-popover-close-size);height:var(--ms-popover-close-size);padding:0;border:none;background:var(--ms-selected-popover-close-bg);color:var(--ms-selected-popover-close-color);font-size:var(--ms-selected-popover-close-font-size);line-height:var(--ms-line-height-none);cursor:pointer;border-radius:var(--ms-selected-popover-close-border-radius);transition:all var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__selected-popover-close:hover{background:var(--ms-selected-popover-close-bg-hover);color:var(--ms-selected-popover-close-color-hover)}.ms__selected-popover-close:before{content:"";display:block;width:var(--ms-selected-popover-close-icon-size);height:var(--ms-selected-popover-close-icon-size);background-color:currentColor;-webkit-mask:var(--ms-icon-remove) center / contain no-repeat;mask:var(--ms-icon-remove) center / contain no-repeat}.ms__selected-popover-body{display:flex;flex-direction:column;gap:var(--ms-selected-popover-body-gap);padding:var(--ms-selected-popover-body-padding);overflow-y:auto;max-height:var(--ms-selected-popover-body-max-height);scrollbar-width:thin;scrollbar-color:var(--ms-scrollbar-thumb-bg) var(--ms-scrollbar-track-bg)}.ms__selected-popover-body::-webkit-scrollbar{width:var(--ms-scrollbar-width)}.ms__selected-popover-body::-webkit-scrollbar-track{background:var(--ms-scrollbar-track-bg)}.ms__selected-popover-body::-webkit-scrollbar-thumb{background:var(--ms-scrollbar-thumb-bg);border-radius:var(--ms-scrollbar-thumb-border-radius)}.ms__selected-popover-body::-webkit-scrollbar-thumb:hover{background:var(--ms-scrollbar-thumb-bg-hover)}.ms__selected-popover-body .ms__badge{width:100%;min-height:fit-content;line-height:var(--ms-line-height-relaxed);flex-shrink:0}.ms__selected-popover-body .ms__badge-text{flex:1;min-width:0;white-space:normal;word-wrap:break-word}.ms__selected-popover-body--virtual{display:block;max-height:none;padding:0}.ms__selected-popover-body--virtual .ms__badge{height:var(--ms-badge-height-virtual, 36px);min-height:var(--ms-badge-height-virtual, 36px);max-height:var(--ms-badge-height-virtual, 36px);margin-bottom:var(--ms-selected-popover-body-gap);overflow:hidden;box-sizing:border-box}.ms__selected-popover-body--virtual .ms__badge-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}@layer component{.ms--disabled .ms__input-wrapper{opacity:var(--ms-disabled-input-opacity);background:var(--ms-input-bg-disabled);cursor:not-allowed}.ms--disabled .ms__input{cursor:not-allowed}.ms--no-checkboxes .ms__option{gap:0;padding-inline-start:var(--ms-option-padding-h)}.ms--no-checkboxes .ms__option-content{padding-inline-start:0}.ms--no-selected-popover .ms__counter,.ms--no-selected-popover .ms__badge[data-action=show-selected],.ms--no-selected-popover .ms__badge--counter,.ms--no-selected-popover .ms__badge--more{cursor:default}}@layer component;@layer component{.ms__badges{display:flex;flex-wrap:wrap;gap:var(--ms-badges-gap);padding:0}.ms__badges:empty{display:none}.ms__badges--bottom{margin-top:var(--ms-badges-margin-bottom)}.ms__badges--top{margin-bottom:var(--ms-badges-margin-top);order:var(--ms-order-first)}.ms__badges--left{order:var(--ms-order-first);margin-right:var(--ms-badges-margin-left);justify-content:flex-end}.ms__badges--right{margin-left:var(--ms-badges-margin-right);justify-content:flex-start}.ms__badge{display:inline-flex;align-items:center;height:var(--ms-badge-height);font-size:var(--ms-badge-font-size);font-weight:var(--ms-badge-font-weight);line-height:var(--ms-line-height-none);border-radius:var(--ms-badge-border-radius);overflow:hidden;max-width:100%}.ms__badge--custom{display:block;height:auto;max-width:none;overflow:visible;border-radius:0;font-size:inherit;font-weight:inherit}.ms__badge-text{display:flex;align-items:center;box-sizing:border-box;height:100%;padding:var(--ms-badge-text-padding);background:var(--ms-badge-text-bg);color:var(--ms-badge-text-color);border:var(--ms-badge-text-border);border-inline-end:none;border-start-start-radius:var(--ms-badge-border-radius);border-end-start-radius:var(--ms-badge-border-radius);border-start-end-radius:0;border-end-end-radius:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:background-color var(--ms-transition-normal) ease,color var(--ms-transition-normal) ease}.ms__badge:hover .ms__badge-text{background:var(--ms-badge-text-bg-hover, var(--ms-badge-text-bg));color:var(--ms-badge-text-color-hover, var(--ms-badge-text-color))}.ms__badge-remove{display:flex;align-items:center;justify-content:center;box-sizing:border-box;font-family:inherit;width:var(--ms-badge-remove-width);height:100%;flex-shrink:0;background:var(--ms-badge-remove-bg);color:var(--ms-badge-remove-color);border:var(--ms-badge-remove-border);border-inline-start:none;border-start-end-radius:var(--ms-badge-border-radius);border-end-end-radius:var(--ms-badge-border-radius);border-start-start-radius:0;border-end-start-radius:0;cursor:pointer;transition:background-color var(--ms-transition-normal) ease;font-size:var(--ms-badge-remove-font-size)}.ms__badge-remove:hover{background:var(--ms-badge-remove-bg-hover)}.ms__badge-remove:focus{outline:none}.ms__badge-remove:focus-visible{outline:none;box-shadow:var(--ms-badge-remove-box-shadow-focus)}.ms__badge-remove:before{content:"";display:block;width:var(--ms-badge-remove-icon-size);height:var(--ms-badge-remove-icon-size);background-color:currentColor;-webkit-mask:var(--ms-icon-remove) center / contain no-repeat;mask:var(--ms-icon-remove) center / contain no-repeat}.ms__badge--counter{cursor:pointer}.ms__badge--counter .ms__badge-text{background:var(--ms-badge-counter-text-bg);color:var(--ms-badge-counter-text-color);border:var(--ms-badge-counter-border);border-inline-end:none}.ms__badge--counter .ms__badge-remove{background:var(--ms-badge-counter-remove-bg);color:var(--ms-badge-counter-remove-color);border:var(--ms-badge-counter-border);border-inline-start:none}.ms__badge--counter .ms__badge-remove:hover{background:var(--ms-badge-counter-remove-bg-hover)}.ms__badge--more,.ms__badge[data-action=show-selected]{cursor:pointer}}@layer component{.ms__count-display{display:flex;align-items:center}.ms__count-display:empty{display:none}.ms__count-display--bottom{margin-top:var(--ms-count-display-margin-bottom)}.ms__count-display--top{margin-bottom:var(--ms-count-display-margin-top);order:var(--ms-order-first)}.ms__count-display--left{order:var(--ms-order-first);margin-right:var(--ms-count-display-margin-left);justify-content:flex-start}.ms__count-display--right{margin-left:var(--ms-count-display-margin-right);justify-content:flex-end}.ms__counter-wrapper{display:inline-flex;align-items:center;gap:var(--ms-counter-wrapper-gap);background:var(--ms-counter-wrapper-bg);border:var(--ms-counter-wrapper-border);border-radius:var(--ms-counter-wrapper-border-radius);padding:var(--ms-counter-wrapper-padding);transition:all var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__counter-wrapper:hover{background:var(--ms-counter-wrapper-bg-hover);border-color:var(--ms-counter-wrapper-border-color-hover)}.ms__count-text{display:inline-flex;align-items:center;background:var(--ms-count-text-bg);border:var(--ms-count-text-border);padding:0;font-size:var(--ms-count-text-font-size);color:var(--ms-count-text-color);cursor:pointer;transition:color var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__count-clear{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:var(--ms-count-clear-size);height:var(--ms-count-clear-size);padding:0;border:none;background:var(--ms-count-clear-bg);color:var(--ms-count-clear-color);font-size:var(--ms-count-clear-font-size);line-height:var(--ms-line-height-none);cursor:pointer;border-radius:var(--ms-count-clear-border-radius);transition:all var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__count-clear:hover{background:var(--ms-count-clear-bg-hover);color:var(--ms-count-clear-color-hover)}.ms__count-clear:before{content:"";display:block;width:var(--ms-count-clear-icon-size);height:var(--ms-count-clear-icon-size);background-color:currentColor;-webkit-mask:var(--ms-icon-clear) center / contain no-repeat;mask:var(--ms-icon-clear) center / contain no-repeat}}@layer component{.ms__debug-info{margin-top:calc(.4 * var(--ms-rem));padding:calc(.4 * var(--ms-rem));background-color:var(--ms-debug-bg);border:1px solid var(--ms-debug-border-color);border-radius:var(--ms-debug-border-radius);font-size:calc(1.2 * var(--ms-rem));color:var(--ms-debug-text-color)}.ms__debug-info details summary{cursor:pointer;font-weight:600;color:var(--ms-debug-summary-color);-webkit-user-select:none;user-select:none;padding:calc(.4 * var(--ms-rem));border-radius:var(--ms-debug-summary-border-radius)}.ms__debug-info details summary:hover{background-color:var(--ms-debug-summary-bg-hover)}.ms__debug-info details summary:focus{outline:2px solid var(--ms-debug-summary-outline-color);outline-offset:2px}.ms__debug-info .ms__debug-stats{display:flex;flex-direction:column;gap:calc(.4 * var(--ms-rem));margin-top:calc(.4 * var(--ms-rem));padding:calc(.4 * var(--ms-rem));background-color:var(--ms-debug-stats-bg);border-radius:var(--ms-debug-stats-border-radius)}.ms__debug-info .ms__debug-stats span{display:flex;justify-content:space-between;padding:2px 4px;font-family:monospace;font-size:calc(1 * var(--ms-rem))}.ms__debug-info .ms__debug-stats span:before{content:"•";margin-inline-end:calc(.4 * var(--ms-rem));color:var(--ms-debug-bullet-color)}}@layer component{.ms__options{padding:var(--ms-options-padding);scrollbar-width:thin;scrollbar-color:var(--ms-scrollbar-thumb-bg) var(--ms-scrollbar-track-bg)}.ms__options::-webkit-scrollbar{width:var(--ms-scrollbar-width)}.ms__options::-webkit-scrollbar-track{background:var(--ms-scrollbar-track-bg)}.ms__options::-webkit-scrollbar-thumb{background:var(--ms-scrollbar-thumb-bg);border-radius:var(--ms-scrollbar-thumb-border-radius)}.ms__options::-webkit-scrollbar-thumb:hover{background:var(--ms-scrollbar-thumb-bg-hover)}.ms__options--virtual .ms__option,.ms__options--fixed-height .ms__option{height:var(--ms-option-height, 50px);min-height:var(--ms-option-height, 50px);max-height:var(--ms-option-height, 50px);overflow:hidden;box-sizing:border-box}.ms__group+.ms__group{border-top:var(--ms-group-border-top);margin-top:var(--ms-group-margin-top);padding-top:var(--ms-group-padding-top)}.ms__group-label{padding:var(--ms-group-label-padding);font-size:var(--ms-group-label-font-size);font-weight:var(--ms-group-label-font-weight);color:var(--ms-group-label-color);text-transform:var(--ms-group-label-transform);letter-spacing:var(--ms-group-label-letter-spacing)}.ms__option{display:flex;align-items:var(--ms-checkbox-align, center);gap:var(--ms-option-gap);padding:var(--ms-option-padding);position:relative;min-height:var(--ms-option-min-height, auto);color:var(--ms-option-text-color);background:var(--ms-option-bg);cursor:pointer;user-select:none;-webkit-user-select:none}@media (hover: hover){.ms__option:hover{background:var(--ms-option-bg-hover);color:var(--ms-option-color-hover, inherit)}}.ms__option--focused{background:var(--ms-option-bg-focused);color:var(--ms-option-color-focused, inherit);outline:var(--ms-option-outline-focused);outline-offset:var(--ms-option-focus-outline-offset)}.ms__option--matched{background:var(--ms-option-bg-matched);color:var(--ms-option-color-matched, inherit)}.ms__option--matched:before{content:"";position:absolute;inset-block:0;inset-inline-start:0;border-inline-start:var(--ms-option-border-matched);pointer-events:none}.ms__option--selected{background:var(--ms-option-bg-selected)}@media (hover: hover){.ms__option--selected:hover{background:var(--ms-option-bg-selected-hover, var(--ms-option-bg-selected))}}.ms__option--disabled{opacity:var(--ms-disabled-opacity);cursor:not-allowed;background:var(--ms-option-disabled-bg)}.ms__option--disabled:hover{background:var(--ms-option-disabled-bg)}@media (hover: hover){.ms__option--focused:hover{background:var(--ms-option-bg-focused-hover);color:var(--ms-option-color-focused-hover, var(--ms-option-color-focused, var(--ms-option-text-color)))}}.ms__option--matched:hover{background:var(--ms-option-bg-matched-hover);color:var(--ms-option-color-matched-hover, var(--ms-option-color-matched, var(--ms-option-text-color)))}.ms__option--selected.ms__option--focused{background:var(--ms-option-bg-selected-focused);outline:var(--ms-option-outline-focused);outline-offset:var(--ms-option-focus-outline-offset)}.ms__option--selected.ms__option--matched{background:var(--ms-option-bg-selected-matched)}.ms__option--disabled.ms__option--selected{background:var(--ms-option-bg-disabled-selected)}.ms__option--disabled.ms__option--focused{outline:none}.ms__option[data-checkbox-align=top]{--ms-checkbox-align: flex-start;--ms-checkbox-margin-top: calc(.2 * var(--ms-rem))}.ms__option[data-checkbox-align=bottom]{--ms-checkbox-align: flex-end}.ms__checkbox{appearance:none;-webkit-appearance:none;-moz-appearance:none;flex-shrink:0;position:relative;margin-top:var(--ms-checkbox-margin-top);margin-inline-end:var(--ms-checkbox-margin-right);margin-bottom:var(--ms-checkbox-margin-bottom);margin-inline-start:var(--ms-checkbox-margin-left);width:var(--ms-checkbox-size);height:var(--ms-checkbox-size);transform:scale(var(--ms-checkbox-scale));transform-origin:top left;cursor:pointer;background:var(--ms-checkbox-bg);border:var(--ms-checkbox-border);border-radius:var(--ms-checkbox-border-radius);transition:background-color .15s ease,border-color .15s ease}.ms__checkbox:after{content:"";position:absolute;display:none;left:50%;top:40%;width:30%;height:55%;transform:translate(-50%,-50%) rotate(45deg);border:solid var(--ms-checkbox-checkmark-color);border-width:0 var(--ms-checkbox-checkmark-thickness, 2px) var(--ms-checkbox-checkmark-thickness, 2px) 0}.ms__checkbox:hover:not(:disabled){border-color:var(--ms-checkbox-hover-border-color)}.ms__checkbox:checked{background:var(--ms-checkbox-checked-bg);border:var(--ms-checkbox-checked-border)}.ms__checkbox:checked:after{display:block}.ms__checkbox--indeterminate{background:var(--ms-checkbox-checked-bg);border:var(--ms-checkbox-checked-border)}.ms__checkbox--indeterminate:after{display:block;top:50%;left:50%;width:55%;height:0;transform:translate(-50%,-50%);border:none;border-bottom:var(--ms-checkbox-checkmark-thickness, 2px) solid var(--ms-checkbox-checkmark-color)}.ms__checkbox--indeterminate:hover:not(:disabled){background:var(--ms-checkbox-checked-bg-hover);border-color:var(--ms-checkbox-checked-border-color-hover)}.ms__checkbox:checked:hover:not(:disabled){background:var(--ms-checkbox-checked-bg-hover);border-color:var(--ms-checkbox-checked-border-color-hover)}.ms__checkbox:focus-visible{outline:2px solid var(--ms-checkbox-checked-bg);outline-offset:2px}.ms__checkbox:disabled{cursor:not-allowed;background:var(--ms-checkbox-disabled-bg);border:var(--ms-checkbox-disabled-border);opacity:.6}.ms__checkbox:disabled:checked{background:var(--ms-checkbox-disabled-bg)}.ms__option--disabled .ms__checkbox{cursor:not-allowed}.ms__option-content{flex:1;display:flex;align-items:center;gap:var(--ms-option-content-gap);min-width:0}.ms__option-icon{flex-shrink:0;width:var(--ms-option-icon-size);height:var(--ms-option-icon-size);display:flex;align-items:center;justify-content:center;font-size:var(--ms-option-icon-font-size)}.ms__option-icon svg{width:100%;height:100%;fill:currentColor}.ms__option-text{flex:1;min-width:0}.ms__option-title{font-size:var(--ms-option-title-font-size);color:var(--ms-option-title-color);line-height:var(--ms-line-height-relaxed);white-space:var(--ms-option-title-white-space, normal);overflow:var(--ms-option-title-overflow, visible);text-overflow:var(--ms-option-title-text-overflow, clip)}@media (hover: hover){.ms__option:hover .ms__option-title{color:var(--ms-option-title-color-hover, var(--ms-option-title-color))}}.ms__option--selected .ms__option-title{color:var(--ms-option-title-color-selected, var(--ms-option-title-color))}@media (hover: hover){.ms__option--selected:hover .ms__option-title{color:var(--ms-option-title-color-selected-hover, var(--ms-option-title-color-selected, var(--ms-option-title-color)))}}.ms__option-title mark{background:var(--ms-option-mark-bg);color:var(--ms-option-mark-color);font-weight:var(--ms-option-mark-font-weight)}.ms__option-subtitle{margin-top:var(--ms-option-subtitle-margin-top);font-size:var(--ms-option-subtitle-font-size);color:var(--ms-option-subtitle-color);line-height:var(--ms-option-subtitle-line-height)}@media (hover: hover){.ms__option:hover .ms__option-subtitle{color:var(--ms-option-subtitle-color-hover, var(--ms-option-subtitle-color))}}.ms__option--selected .ms__option-subtitle{color:var(--ms-option-subtitle-color-selected, var(--ms-option-subtitle-color))}@media (hover: hover){.ms__option--selected:hover .ms__option-subtitle{color:var(--ms-option-subtitle-color-selected-hover, var(--ms-option-subtitle-color-selected, var(--ms-option-subtitle-color)))}}.ms__empty{display:flex;align-items:center;justify-content:center;min-height:var(--ms-state-min-height);padding:var(--ms-empty-padding);text-align:center;font-size:var(--ms-empty-font-size);color:var(--ms-empty-color)}.ms__loader{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:var(--ms-state-min-height);padding:var(--ms-loader-padding);gap:var(--ms-loader-gap)}.ms__loading-text{font-size:var(--ms-loading-text-font-size);color:var(--ms-loading-color)}}@layer component{.ms--rtl .ms__badges{direction:rtl}.ms--rtl .ms__badges--right{margin-left:0;margin-right:var(--ms-badges-margin-right)}.ms--rtl .ms__badges--left{margin-right:0;margin-left:var(--ms-badges-margin-left)}.ms--rtl .ms__count-display{direction:rtl}.ms--rtl .ms__count-display--right{margin-left:0;margin-right:var(--ms-count-display-margin-right)}.ms--rtl .ms__count-display--left{margin-right:0;margin-left:var(--ms-count-display-margin-left)}}@layer component{.ms__option--tree{padding-inline-start:calc(var(--ms-tree-base-indent, .75rem) + var(--ms-tree-depth, 0) * var(--ms-tree-indent, 1.25rem))}.ms__option--tree-unselectable{cursor:default}.ms__option--tree-unselectable:hover{background:transparent}}@layer overrides{:host-context([data-theme="dark"]),:host-context([data-bs-theme="dark"]),:host-context(.dark){color-scheme:dark}:host-context([data-theme="light"]),:host-context([data-bs-theme="light"]),:host-context(.light){color-scheme:light}:host([data-theme="dark"]){color-scheme:dark}:host([data-theme="light"]){color-scheme:light}}`, Ys = [
|
|
5444
|
+
const Po = `@layer variables,component,overrides;@layer variables{:host{display:block;--ms-rem: var(--base-rem, 10px);font-family:var(--ms-font-family, var(--base-font-family, inherit));--ms-accent-color: var(--base-accent-color, #3b82f6);--ms-accent-color-hover: var(--base-accent-color-hover, #2563eb);--ms-accent-color-active: var(--base-accent-color-active, #1d4ed8);--ms-accent-color-light: var(--base-accent-color-light, light-dark(#eff6ff, #1e3a5f));--ms-accent-color-light-hover: var(--base-accent-color-light-hover, light-dark(#e0f2fe, #264a73));--ms-text-color-1: var(--base-text-color-1, light-dark(#111827, #f5f5f5));--ms-text-color-2: var(--base-text-color-2, light-dark(#353b47, #d4d4d4));--ms-text-color-3: var(--base-text-color-3, light-dark(#6b7280, #a3a3a3));--ms-text-color-4: var(--base-text-color-4, light-dark(#a0a3a9, #737373));--ms-text-color-on-accent: var(--base-text-color-on-accent, #ffffff);--ms-text-primary: var(--ms-text-color-1);--ms-text-secondary: var(--ms-text-color-3);--ms-primary-bg: var(--base-hover-bg, color-mix(in srgb, var(--ms-text-color-1) 8%, var(--base-main-bg, light-dark(#ffffff, #1a1a1a))));--ms-primary-bg-hover: var(--base-active-bg, color-mix(in srgb, var(--ms-text-color-1) 14%, var(--base-main-bg, light-dark(#ffffff, #1a1a1a))));--ms-border-color: var(--base-border-color, light-dark(#cbd5e1, #52525b));--ms-border: var(--base-border, 1px solid var(--ms-border-color));--ms-input-bg: var(--base-input-bg, light-dark(#ffffff, #1a1a1a));--ms-input-color: var(--base-input-color, var(--ms-text-color-1));--ms-input-border: var(--base-input-border, 1px solid var(--ms-border-color));--ms-input-border-hover: var(--base-input-border-hover, 1px solid var(--ms-accent-color));--ms-input-border-focus: var(--base-input-border-focus, 1px solid var(--ms-accent-color));--ms-input-placeholder-color: var(--base-input-placeholder-color, var(--ms-text-color-4));--ms-toggle-icon-color: var(--ms-text-color-3);--ms-toggle-icon-color-open: var(--ms-text-color-3);--ms-toggle-icon-size: calc(1.6 * var(--ms-rem));--ms-toggle-rotate-closed: 90deg;--ms-toggle-rotate-open: -90deg;--ms-counter-badge-bg: var(--ms-accent-color);--ms-counter-badge-bg-hover: var(--ms-accent-color-hover);--ms-counter-badge-color: var(--ms-text-color-on-accent);--ms-hint-bg: var(--base-main-bg, light-dark(#ffffff, #1a1a1a));--ms-hint-color: var(--ms-text-color-4);--ms-hint-border-color: var(--ms-border-color);--ms-dropdown-bg: var(--base-dropdown-bg, var(--base-elevated-bg, light-dark(#ffffff, #1a1a1a)));--ms-dropdown-text-color: var(--ms-text-color-1);--ms-dropdown-border-color: var(--ms-border-color);--ms-dropdown-box-shadow-semantic: var(--base-dropdown-box-shadow, 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1));--ms-actions-bg: var(--base-main-bg, light-dark(#ffffff, #1a1a1a));--ms-actions-border-color: var(--ms-border-color);--ms-action-button-bg: transparent;--ms-action-button-bg-hover: var(--ms-primary-bg);--ms-action-button-border-color: var(--ms-border-color);--ms-action-button-border-color-hover: var(--ms-accent-color);--ms-action-button-color: var(--ms-text-color-1);--ms-group-border-color: var(--ms-border-color);--ms-option-text-color: var(--ms-text-color-1);--ms-option-bg: transparent;--ms-option-bg-hover: var(--ms-primary-bg);--ms-option-color-hover: inherit;--ms-option-bg-focused: var(--ms-primary-bg);--ms-option-color-focused: inherit;--ms-option-outline-color-focused: var(--ms-accent-color);--ms-option-bg-selected: color-mix(in srgb, var(--ms-accent-color) 10%, transparent);--ms-option-bg-matched: color-mix(in srgb, var(--ms-accent-color) 8%, transparent);--ms-option-color-matched: inherit;--ms-option-border-matched-color: color-mix(in srgb, var(--ms-accent-color) 40%, transparent);--ms-option-title-color: var(--ms-text-color-1);--ms-option-subtitle-color: var(--ms-text-color-3);--ms-option-mark-bg: color-mix(in srgb, var(--ms-accent-color) 20%, transparent);--ms-option-mark-color: inherit;--ms-loading-color: var(--ms-text-color-3);--ms-badge-bg: var(--ms-accent-color-light);--ms-badge-bg-hover: color-mix(in srgb, var(--ms-badge-bg) 88%, var(--ms-badge-text-color) 12%);--ms-badge-bg-active: var(--ms-accent-color-light-hover);--ms-badge-text-bg-hover: color-mix(in srgb, var(--ms-badge-text-bg) 88%, var(--ms-badge-text-color) 12%);--ms-badge-text-color-hover: var(--ms-badge-text-color);--ms-badge-counter-border-color: var(--ms-border-color);--ms-badge-counter-text-bg: color-mix(in srgb, var(--ms-text-color-1) 10%, transparent);--ms-badge-counter-text-bg-hover: color-mix(in srgb, var(--ms-text-color-1) 16%, transparent);--ms-badge-counter-text-color: var(--ms-text-color-1);--ms-badge-counter-text-color-hover: var(--ms-text-color-1);--ms-badge-counter-remove-bg: color-mix(in srgb, var(--ms-text-color-1) 10%, transparent);--ms-badge-counter-remove-bg-hover: color-mix(in srgb, var(--ms-text-color-1) 16%, transparent);--ms-badge-counter-remove-color: var(--ms-text-color-3);--ms-badge-counter-remove-color-hover: var(--ms-text-color-1);--ms-counter-wrapper-border-color: var(--ms-border-color);--ms-tooltip-bg: var(--base-tooltip-bg, var(--base-inverse-bg, light-dark(#333333, #f5f5f5)));--ms-tooltip-text-color: var(--base-tooltip-text-color, light-dark(#ffffff, #1a1a1a));--ms-selected-popover-bg: var(--base-dropdown-bg, var(--base-elevated-bg, light-dark(#ffffff, #1a1a1a)));--ms-selected-popover-border-color: var(--ms-border-color);--ms-selected-popover-header-border-color: var(--ms-border-color);--ms-input-padding-h: calc(1.2 * var(--ms-rem));--ms-input-gap: calc(.6 * var(--ms-rem));--ms-input-height: calc(var(--base-input-size-md-height, 3.5) * var(--ms-rem));--ms-input-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-input-border-width: 1px;--ms-input-border-radius: var(--ms-border-radius-md);--ms-input-text: var(--ms-text-color-1);--ms-input-bg-disabled: var(--base-input-bg-disabled, rgba(107, 114, 128, .05));--ms-toggle-color: var(--ms-text-color-3);--ms-transform-rotate-180: 180deg;--ms-input-clear-size: calc(2.4 * var(--ms-rem));--ms-input-clear-icon-size: calc(1.4 * var(--ms-rem));--ms-input-clear-color: var(--base-input-clear-color, var(--ms-text-secondary));--ms-input-clear-bg-hover: var(--base-input-clear-bg-hover, var(--ms-option-bg-matched, transparent));--ms-input-clear-border-radius: var(--ms-border-radius);--ms-counter-padding: calc(.2 * var(--ms-rem)) calc(.4 * var(--ms-rem));--ms-counter-bg: var(--ms-accent-color);--ms-counter-color: var(--ms-text-color-on-accent);--ms-counter-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-counter-font-weight: var(--base-font-weight-semibold, 600);--ms-counter-border-radius: var(--ms-border-radius-sm);--ms-counter-bg-hover: var(--ms-accent-color-hover);--ms-transform-scale-hover: 1.1;--ms-hint-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-hint-border: 1px solid var(--ms-hint-border-color);--ms-hint-border-radius: var(--ms-border-radius-lg);--ms-hint-box-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--ms-hint-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-dropdown-border: var(--base-dropdown-border, 1px solid var(--ms-dropdown-border-color));--ms-dropdown-border-radius: var(--ms-border-radius-lg);--ms-dropdown-inner-border-radius: max(0px, calc(var(--ms-dropdown-border-radius) - 1px));--ms-dropdown-box-shadow: var(--base-dropdown-box-shadow, 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1));--ms-input-current-width: auto;--ms-dropdown-width: var(--ms-input-current-width);--ms-options-max-height: calc(32 * var(--ms-rem));--ms-option-color: var(--ms-text-color-1);--ms-z-index-dropdown: 9999;--ms-z-index-sticky: 1;--ms-z-index-fullscreen: 10001;--ms-z-index-fullscreen-tooltip: 10002;--ms-fullscreen-rem: 12px;--ms-fullscreen-bg: var(--ms-dropdown-bg);--ms-fullscreen-text-color: var(--ms-dropdown-text-color);--ms-fullscreen-header-bg: var(--ms-dropdown-bg);--ms-fullscreen-header-border: 1px solid var(--ms-dropdown-border-color);--ms-fullscreen-header-gap: calc(.8 * var(--ms-fullscreen-rem));--ms-fullscreen-header-padding-v: calc(.8 * var(--ms-fullscreen-rem));--ms-fullscreen-header-padding-h: calc(1.2 * var(--ms-fullscreen-rem));--ms-fullscreen-header-padding: var(--ms-fullscreen-header-padding-v) var(--ms-fullscreen-header-padding-h);--ms-fullscreen-header-min-height: calc(5.6 * var(--ms-fullscreen-rem));--ms-fullscreen-title-font-size: calc(1.7 * var(--ms-fullscreen-rem));--ms-fullscreen-title-font-weight: var(--base-font-weight-semibold, 600);--ms-fullscreen-search-border: var(--ms-input-border);--ms-fullscreen-search-border-radius: var(--ms-input-border-radius);--ms-fullscreen-search-padding: calc(.8 * var(--ms-fullscreen-rem)) calc(1.2 * var(--ms-fullscreen-rem));--ms-fullscreen-search-font-size: calc(1.6 * var(--ms-fullscreen-rem));--ms-fullscreen-search-clear-size: calc(2.8 * var(--ms-fullscreen-rem));--ms-fullscreen-search-clear-icon-size: calc(1.4 * var(--ms-fullscreen-rem));--ms-fullscreen-search-clear-inset: calc(.4 * var(--ms-fullscreen-rem));--ms-fullscreen-search-clear-gutter: calc(3.4 * var(--ms-fullscreen-rem));--ms-fullscreen-search-clear-color: var(--ms-text-muted-color, var(--ms-dropdown-text-color));--ms-fullscreen-search-clear-bg-hover: var(--ms-option-bg-matched, transparent);--ms-fullscreen-mode-toggle-size: calc(2.8 * var(--ms-fullscreen-rem));--ms-fullscreen-mode-toggle-icon-size: calc(1.5 * var(--ms-fullscreen-rem));--ms-fullscreen-mode-toggle-gap: var(--ms-fullscreen-header-gap);--ms-fullscreen-mode-toggle-color: var(--ms-text-muted-color, var(--ms-dropdown-text-color));--ms-fullscreen-mode-toggle-bg: transparent;--ms-fullscreen-mode-toggle-bg-hover: var(--ms-option-bg-matched, transparent);--ms-fullscreen-close-size: calc(3.6 * var(--ms-fullscreen-rem));--ms-fullscreen-close-icon-size: calc(1.6 * var(--ms-fullscreen-rem));--ms-fullscreen-close-color: var(--ms-dropdown-text-color);--ms-fullscreen-close-bg: transparent;--ms-fullscreen-close-border: none;--ms-fullscreen-close-border-radius: 50%;--ms-fullscreen-close-bg-hover: var(--ms-option-bg-matched, transparent);--ms-fullscreen-close-edge-nudge: calc(.8 * var(--ms-fullscreen-rem));--ms-fullscreen-info-size: calc(2.8 * var(--ms-fullscreen-rem));--ms-fullscreen-info-icon-size: calc(1.8 * var(--ms-fullscreen-rem));--ms-fullscreen-info-color: var(--ms-accent-color);--ms-fullscreen-info-bg-hover: var(--ms-option-bg-matched, transparent);--ms-fullscreen-nav-gap: calc(.6 * var(--ms-fullscreen-rem));--ms-fullscreen-nav-padding-top: calc(.6 * var(--ms-fullscreen-rem));--ms-fullscreen-nav-count-font-size: calc(1.3 * var(--ms-fullscreen-rem));--ms-fullscreen-nav-count-color: var(--ms-text-muted-color, var(--ms-dropdown-text-color));--ms-fullscreen-nav-btn-size: calc(3.2 * var(--ms-fullscreen-rem));--ms-fullscreen-nav-btn-icon-size: calc(1.6 * var(--ms-fullscreen-rem));--ms-fullscreen-nav-btn-color: var(--ms-dropdown-text-color);--ms-fullscreen-nav-btn-bg: var(--ms-option-bg-matched, transparent);--ms-fullscreen-nav-btn-bg-hover: color-mix(in srgb, var(--ms-accent-color) 22%, transparent);--ms-fullscreen-nav-btn-icon: var(--ms-icon-chevron);--ms-icon-chevron: var(--base-icon-chevron, url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='m9 18 6-6-6-6'/></svg>"));--ms-icon-info: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><circle cx='12' cy='12' r='9' fill='none' stroke='black' stroke-width='2'/><circle cx='12' cy='7.5' r='1.3' fill='black'/><path d='M12 11v6' stroke='black' stroke-width='2' stroke-linecap='round' fill='none'/></svg>");--ms-fullscreen-tree-base-indent: calc(.7 * var(--ms-fullscreen-rem));--ms-fullscreen-tree-indent: calc(1.2 * var(--ms-fullscreen-rem));--ms-actions-gap: calc(.4 * var(--ms-rem));--ms-actions-padding: calc(.8 * var(--ms-rem));--ms-actions-border-bottom: 1px solid var(--ms-actions-border-color);--ms-action-btn-padding: calc(.4 * var(--ms-rem)) calc(.8 * var(--ms-rem));--ms-action-btn-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-action-btn-border: var(--ms-border);--ms-action-btn-border-radius: var(--ms-border-radius-sm);--ms-action-btn-bg: transparent;--ms-action-btn-color: inherit;--ms-action-btn-bg-hover: var(--ms-primary-bg);--ms-action-btn-border-color-hover: var(--ms-accent-color);--ms-transform-scale-active: .98;--ms-options-padding: 0;--ms-group-border-top: 1px solid var(--ms-group-border-color);--ms-group-margin-top: calc(.4 * var(--ms-rem));--ms-group-padding-top: calc(.4 * var(--ms-rem));--ms-group-label-padding: calc(.4 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-group-label-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-group-label-font-weight: var(--base-font-weight-semibold, 600);--ms-group-label-color: var(--ms-text-color-3);--ms-group-label-transform: uppercase;--ms-group-label-letter-spacing: .05em;--ms-option-gap: calc(.8 * var(--ms-rem));--ms-option-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-option-padding-h: calc(1.2 * var(--ms-rem));--ms-option-min-height: auto;--ms-option-outline-focused: 2px solid var(--ms-option-outline-color-focused);--ms-option-focus-outline-offset: -2px;--ms-option-border-matched: 3px solid var(--ms-option-border-matched-color);--ms-option-bg-focused-hover: var(--ms-primary-bg);--ms-option-bg-matched-hover: color-mix(in srgb, var(--ms-accent-color) 12%, transparent);--ms-option-bg-selected-focused: color-mix(in srgb, var(--ms-accent-color) 15%, transparent);--ms-option-bg-selected-matched: color-mix(in srgb, var(--ms-accent-color) 15%, transparent);--ms-option-disabled-bg: var(--base-disabled-bg, transparent);--ms-option-bg-disabled-selected: color-mix(in srgb, var(--ms-accent-color) 10%, transparent);--ms-disabled-opacity: .5;--ms-option-content-gap: calc(.8 * var(--ms-rem));--ms-option-icon-size: calc(2 * var(--ms-rem));--ms-option-icon-font-size: calc(var(--base-font-size-base, 1.6) * var(--ms-rem));--ms-option-title-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-option-mark-font-weight: var(--base-font-weight-semibold, 600);--ms-option-title-white-space: normal;--ms-option-title-overflow: visible;--ms-option-title-text-overflow: clip;--ms-option-subtitle-margin-top: calc(.4 * var(--ms-rem));--ms-option-subtitle-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-option-subtitle-line-height: var(--base-line-height-tight, 1.25);--ms-checkbox-margin-top: 0;--ms-checkbox-margin-right: 0;--ms-checkbox-margin-bottom: 0;--ms-checkbox-margin-left: 0;--ms-checkbox-size: calc(1.6 * var(--ms-rem));--ms-checkbox-scale: 1;--ms-checkbox-align: center;--ms-checkbox-bg: var(--ms-input-bg);--ms-checkbox-border-width: 1px;--ms-checkbox-border-color: var(--base-checkbox-border-color, #8f8f8f);--ms-checkbox-border: var(--ms-checkbox-border-width) solid var(--ms-checkbox-border-color);--ms-checkbox-border-radius: calc(.3 * var(--ms-rem));--ms-checkbox-checkmark-thickness: 2.5px;--ms-checkbox-checked-bg: var(--ms-accent-color);--ms-checkbox-checked-border: var(--ms-checkbox-border-width) solid var(--ms-accent-color);--ms-checkbox-checkmark-color: var(--ms-text-color-on-accent);--ms-checkbox-hover-border-color: var(--ms-accent-color);--ms-checkbox-disabled-bg: var(--ms-primary-bg);--ms-checkbox-disabled-border: var(--ms-checkbox-border-width) solid var(--ms-border-color);--ms-checkbox-checked-bg-hover: var(--ms-accent-color-hover);--ms-checkbox-checked-border-color-hover: var(--ms-accent-color-hover);--ms-state-min-height: calc(8 * var(--ms-rem));--ms-empty-padding: calc(1.6 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-empty-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-empty-color: var(--ms-text-color-3);--ms-add-new-padding: var(--ms-option-padding);--ms-add-new-gap: var(--ms-option-gap);--ms-add-new-font-size: var(--ms-empty-font-size);--ms-add-new-color: var(--ms-accent-color);--ms-add-new-color-hover: var(--ms-accent-color);--ms-add-new-bg-hover: var(--ms-option-bg-hover);--ms-add-new-icon-size: calc(1.6 * var(--ms-rem));--ms-loader-padding: calc(1.6 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-loader-gap: calc(.8 * var(--ms-rem));--ms-loading-text-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-loading-text-color: var(--ms-text-color-3);--ms-badges-gap: calc(.8 * var(--ms-rem));--ms-badges-margin-bottom: calc(.8 * var(--ms-rem));--ms-badges-margin-top: calc(.8 * var(--ms-rem));--ms-badges-margin-left: calc(.4 * var(--ms-rem));--ms-badges-margin-right: calc(.4 * var(--ms-rem));--ms-inline-align: center;--ms-badge-gap: calc(.8 * var(--ms-rem));--ms-badge-height: calc(2.7 * var(--ms-rem));--ms-badge-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-badge-font-weight: var(--base-font-weight-semibold, 600);--ms-badge-border-radius: var(--ms-border-radius-sm);--ms-order-first: -1;--ms-badge-text-padding: 0 calc(.8 * var(--ms-rem));--ms-badge-text-bg: var(--ms-accent-color-light);--ms-badge-text-color: var(--ms-accent-color);--ms-badge-text-border: none;--ms-badge-remove-width: calc(2.7 * var(--ms-rem));--ms-badge-remove-bg: var(--ms-accent-color);--ms-badge-remove-color: var(--ms-text-color-on-accent);--ms-badge-remove-border: none;--ms-badge-remove-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-badge-remove-bg-hover: var(--ms-accent-color-hover);--ms-badge-remove-box-shadow-focus: 0 0 0 2px color-mix(in srgb, var(--ms-accent-color) 50%, transparent);--ms-badge-remove-icon-size: calc(1.4 * var(--ms-rem));--ms-icon-remove: var(--base-icon-remove, var(--base-icon-close, url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M18 6 6 18'/><path d='m6 6 12 12'/></svg>")));--ms-icon-search-clear: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='m13.5 8.5-5 5'/><path d='m8.5 8.5 5 5'/><circle cx='11' cy='11' r='8'/><path d='m21 21-4.3-4.3'/></svg>");--ms-icon-search: var(--base-icon-search, url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><circle cx='11' cy='11' r='8'/><path d='m21 21-4.3-4.3'/></svg>"));--ms-icon-filter: var(--base-icon-filter, url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polygon points='22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3'/></svg>"));--ms-icon-check: var(--base-icon-check, url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M20 6 9 17l-5-5'/></svg>"));--ms-icon-indeterminate: var(--base-icon-indeterminate, url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M5 12h14'/></svg>"));--ms-icon-add-new: var(--base-icon-plus, var(--base-icon-add, url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M5 12h14'/><path d='M12 5v14'/></svg>")));--ms-badge-counter-bg: transparent;--ms-badge-counter-border: 1px solid var(--ms-badge-counter-border-color);--ms-badge-counter-border-radius: var(--ms-border-radius-sm);--ms-more-badge-bg: var(--ms-accent-color-light);--ms-more-badge-hover-bg: var(--ms-badge-bg-hover);--ms-more-badge-active-bg: var(--ms-accent-color-light-hover);--ms-count-display-margin-bottom: calc(.8 * var(--ms-rem));--ms-count-display-margin-top: calc(.8 * var(--ms-rem));--ms-count-display-margin-left: calc(.8 * var(--ms-rem));--ms-count-display-margin-right: calc(.8 * var(--ms-rem));--ms-counter-wrapper-bg: transparent;--ms-counter-wrapper-border: var(--ms-border);--ms-counter-wrapper-border-radius: var(--ms-border-radius-sm);--ms-counter-wrapper-padding: calc(.4 * var(--ms-rem)) calc(.8 * var(--ms-rem));--ms-counter-wrapper-gap: calc(.4 * var(--ms-rem));--ms-counter-wrapper-bg-hover: var(--ms-primary-bg);--ms-counter-wrapper-border-color-hover: var(--ms-accent-color);--ms-count-text-bg: transparent;--ms-count-text-border: none;--ms-count-text-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-count-text-color: var(--ms-text-color-1);--ms-count-clear-size: calc(1.6 * var(--ms-rem));--ms-count-clear-bg: transparent;--ms-count-clear-color: var(--ms-text-color-3);--ms-count-clear-font-size: calc(var(--base-font-size-lg, 1.8) * var(--ms-rem));--ms-count-clear-border-radius: var(--ms-border-radius-sm);--ms-count-clear-bg-hover: var(--ms-accent-color);--ms-count-clear-color-hover: var(--ms-text-color-on-accent);--ms-count-clear-icon-size: calc(1.4 * var(--ms-rem));--ms-icon-clear: var(--base-icon-clear, var(--ms-icon-remove));--ms-tooltip-color: var(--ms-tooltip-text-color);--ms-tooltip-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-tooltip-border-radius: var(--ms-border-radius-lg);--ms-tooltip-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-tooltip-max-width: calc(32 * var(--ms-rem));--ms-tooltip-shadow: 0 2px 8px rgba(0, 0, 0, .15);--ms-tooltip-z-index: 10000;--ms-option-tooltip-bg: var(--ms-tooltip-bg);--ms-option-tooltip-text-color: var(--ms-tooltip-text-color);--ms-option-tooltip-padding: var(--ms-tooltip-padding);--ms-option-tooltip-border-radius: var(--ms-tooltip-border-radius);--ms-option-tooltip-font-size: var(--ms-tooltip-font-size);--ms-option-tooltip-max-width: var(--ms-tooltip-max-width);--ms-option-tooltip-shadow: var(--ms-tooltip-shadow);--ms-option-tooltip-z-index: var(--ms-tooltip-z-index);--ms-message-bg: var(--ms-message-info-bg);--ms-message-color: var(--ms-message-info-color);--ms-message-border: 1px solid transparent;--ms-message-border-radius: var(--ms-border-radius-lg);--ms-message-padding: calc(1 * var(--ms-rem)) calc(1.4 * var(--ms-rem));--ms-message-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-message-font-weight: var(--base-font-weight-medium, 500);--ms-message-max-width: calc(40 * var(--ms-rem));--ms-message-shadow: 0 4px 16px rgb(0 0 0 / .18);--ms-message-fullscreen-offset: calc(2.4 * var(--ms-fullscreen-rem));--ms-message-z-index: var(--ms-z-index-fullscreen-tooltip);--ms-message-info-bg: var(--ms-tooltip-bg);--ms-message-info-color: var(--ms-tooltip-text-color);--ms-message-warning-bg: var(--base-warning-bg, #f59e0b);--ms-message-warning-color: var(--base-warning-color, #1a1a1a);--ms-message-error-bg: var(--base-danger-bg, #ef4444);--ms-message-error-color: var(--base-danger-color, #ffffff);--ms-message-success-bg: var(--base-success-bg, #10b981);--ms-message-success-color: var(--base-success-color, #ffffff);--ms-z-index-popover: 10000;--ms-selected-popover-width: var(--ms-input-current-width);--ms-selected-popover-max-height: calc(32 * var(--ms-rem));--ms-selected-popover-border: 1px solid var(--ms-selected-popover-border-color);--ms-selected-popover-border-radius: var(--ms-border-radius-lg);--ms-selected-popover-box-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--ms-selected-popover-header-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-selected-popover-header-bg: color-mix(in srgb, var(--ms-accent-color) 10%, transparent);--ms-selected-popover-header-border-bottom: 1px solid var(--ms-selected-popover-header-border-color);--ms-selected-popover-header-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-selected-popover-header-font-weight: var(--base-font-weight-semibold, 600);--ms-selected-popover-header-color: var(--ms-text-color-1);--ms-popover-close-size: calc(2.4 * var(--ms-rem));--ms-selected-popover-close-bg: transparent;--ms-selected-popover-close-color: var(--ms-text-color-3);--ms-selected-popover-close-font-size: calc(var(--base-font-size-xl, 2) * var(--ms-rem));--ms-selected-popover-close-border-radius: var(--ms-border-radius-sm);--ms-selected-popover-close-bg-hover: var(--ms-accent-color);--ms-selected-popover-close-color-hover: var(--ms-text-color-on-accent);--ms-selected-popover-close-icon-size: calc(1.4 * var(--ms-rem));--ms-selected-popover-body-gap: calc(.4 * var(--ms-rem));--ms-selected-popover-body-padding: calc(.8 * var(--ms-rem));--ms-selected-popover-body-max-height: calc(28.8 * var(--ms-rem));--ms-font-size-2xs: calc(var(--base-font-size-2xs, 1) * var(--ms-rem));--ms-font-size-xs: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-font-size-sm: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-font-size-base: calc(var(--base-font-size-base, 1.6) * var(--ms-rem));--ms-font-size-lg: calc(var(--base-font-size-lg, 1.8) * var(--ms-rem));--ms-font-weight-normal: var(--base-font-weight-normal, 400);--ms-font-weight-medium: var(--base-font-weight-medium, 500);--ms-font-weight-semibold: var(--base-font-weight-semibold, 600);--ms-line-height-none: 1;--ms-line-height-tight: var(--base-line-height-tight, 1.25);--ms-line-height-normal: var(--base-line-height-normal, 1.5);--ms-line-height-relaxed: var(--base-line-height-relaxed, 1.75);--ms-border-radius-sm: calc(var(--base-border-radius-sm, .4) * var(--ms-rem));--ms-border-radius-md: calc(var(--base-border-radius-md, .6) * var(--ms-rem));--ms-border-radius-lg: calc(var(--base-border-radius-lg, .8) * var(--ms-rem));--ms-border-radius: var(--ms-border-radius-md);--ms-spacing-xs: calc(.4 * var(--ms-rem));--ms-spacing-sm: calc(.8 * var(--ms-rem));--ms-spacing-md: calc(1.2 * var(--ms-rem));--ms-spacing-lg: calc(1.6 * var(--ms-rem));--ms-transition-fast: .15s;--ms-transition-normal: .2s;--ms-easing-snappy: var(--base-ease-standard, cubic-bezier(.4, 0, .2, 1));--ms-placeholder-opacity: .6;--ms-disabled-input-opacity: .6;--ms-scrollbar-width: 8px;--ms-scrollbar-track-bg: transparent;--ms-scrollbar-thumb-bg: var(--ms-border-color);--ms-scrollbar-thumb-bg-hover: var(--ms-text-color-3);--ms-scrollbar-thumb-border-radius: 4px;--ms-debug-bg: var(--base-elevated-bg, light-dark(#f9fafb, #2b2b2b));--ms-debug-border-color: var(--ms-border-color);--ms-debug-text-color: var(--ms-text-color-1);--ms-debug-border-radius: var(--ms-border-radius-md);--ms-debug-summary-color: var(--ms-accent-color);--ms-debug-summary-bg-hover: var(--ms-primary-bg);--ms-debug-summary-outline-color: var(--ms-accent-color);--ms-debug-summary-border-radius: var(--ms-border-radius-sm);--ms-debug-stats-bg: var(--base-main-bg, light-dark(#ffffff, #1a1a1a));--ms-debug-stats-border-radius: var(--ms-border-radius-sm);--ms-debug-bullet-color: var(--ms-accent-color)}}@layer component{web-multiselect:not(:defined){display:block;min-height:calc(3.5 * var(--ms-rem));color:transparent!important;background:transparent}:host{-webkit-tap-highlight-color:transparent}.ms__wrapper{display:flex;flex-direction:column;align-items:stretch}.ms__wrapper--inline{flex-direction:row;align-items:var(--ms-inline-align, center)}.ms{position:relative;width:100%}}@layer component{.ms__input-wrapper{box-sizing:border-box;position:relative;display:flex;align-items:center;gap:var(--ms-input-gap);height:var(--ms-input-height);padding-inline:var(--ms-input-padding-h);background:var(--ms-input-bg);color:var(--ms-input-color);border:var(--ms-input-border);border-radius:var(--ms-input-border-radius);cursor:pointer;transition:border var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__input-wrapper:hover:not(:focus-within){border:var(--ms-input-border-hover)}.ms__input-wrapper:focus-within{border:var(--ms-input-border-focus)}.ms__input{flex:1 1 auto;min-width:0;box-sizing:border-box;font-family:inherit;height:100%;padding:0;border:none;background:transparent;font-size:var(--ms-input-font-size);color:var(--ms-input-color);cursor:pointer;outline:none}.ms__input::placeholder{color:var(--ms-input-placeholder-color);opacity:0;transition:opacity var(--ms-transition-fast) var(--ms-easing-snappy)}:host([data-ready]) .ms__input::placeholder{opacity:var(--ms-placeholder-opacity)}.ms__toggle{flex:0 0 auto;display:block;width:var(--ms-toggle-icon-size);height:var(--ms-toggle-icon-size);color:var(--ms-toggle-icon-color);cursor:pointer}.ms__toggle:before{content:"";display:block;width:100%;height:100%;background-color:currentColor;-webkit-mask:var(--ms-icon-chevron) center / contain no-repeat;mask:var(--ms-icon-chevron) center / contain no-repeat;transform:rotate(var(--ms-toggle-rotate-closed, 90deg));transition:transform var(--ms-transition-fast) var(--ms-easing-snappy)}.ms--open .ms__toggle{color:var(--ms-toggle-icon-color-open)}.ms--open .ms__toggle:before{transform:rotate(var(--ms-toggle-rotate-open, -90deg))}.ms__counter{flex:0 0 auto;padding:var(--ms-counter-padding);background:var(--ms-counter-badge-bg);color:var(--ms-counter-badge-color);font-size:var(--ms-counter-font-size);font-weight:var(--ms-counter-font-weight);border-radius:var(--ms-counter-border-radius);cursor:pointer;transition:all var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__counter:hover{background:var(--ms-counter-badge-bg-hover);transform:scale(var(--ms-transform-scale-hover))}.ms__input-clear{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:var(--ms-input-clear-size);height:var(--ms-input-clear-size);padding:0;color:var(--ms-input-clear-color);background:transparent;border:none;border-radius:var(--ms-input-clear-border-radius);cursor:pointer;transition:background var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__input-clear:hover{background:var(--ms-input-clear-bg-hover)}.ms__input-clear:before{content:"";display:block;width:var(--ms-input-clear-icon-size);height:var(--ms-input-clear-icon-size);background-color:currentColor;-webkit-mask:var(--ms-icon-clear) center / contain no-repeat;mask:var(--ms-icon-clear) center / contain no-repeat}.ms__actions{display:flex;flex-direction:column;gap:var(--ms-actions-gap);padding:var(--ms-actions-padding)}.ms__actions--top{border-bottom:var(--ms-actions-border-bottom)}.ms__actions--bottom{flex-direction:column-reverse;border-top:var(--ms-actions-border-bottom)}.ms__actions-row{display:flex;flex-wrap:nowrap;gap:var(--ms-actions-gap)}.ms__actions--wrap .ms__actions-row{flex-wrap:wrap}.ms__actions--sticky{position:sticky;z-index:var(--ms-z-index-sticky);background:var(--ms-actions-bg)}.ms__actions--sticky.ms__actions--top{top:0}.ms__actions--sticky.ms__actions--bottom{bottom:0}.ms__actions--align-stretch .ms__action-btn{flex:1}.ms__actions--align-left .ms__actions-row{justify-content:flex-start}.ms__actions--align-right .ms__actions-row{justify-content:flex-end}.ms__actions--align-center .ms__actions-row{justify-content:center}.ms__actions--align-space-between .ms__actions-row{justify-content:space-between}.ms__action-btn{font-family:inherit;padding:var(--ms-action-btn-padding);font-size:var(--ms-action-btn-font-size);border:var(--ms-action-btn-border);border-radius:var(--ms-action-btn-border-radius);background:var(--ms-action-button-bg);color:var(--ms-action-button-color);cursor:pointer;transition:all var(--ms-transition-fast) var(--ms-easing-snappy)}@media (hover: hover){.ms__action-btn:hover{background:var(--ms-action-button-bg-hover);border-color:var(--ms-action-button-border-color-hover)}}.ms__action-btn:active{transform:scale(var(--ms-transform-scale-active))}.ms__action-btn:disabled,.ms__action-btn[disabled]{opacity:var(--ms-disabled-opacity);cursor:not-allowed;pointer-events:none}}@layer component{.ms__hint{display:none;position:fixed;z-index:var(--ms-z-index-popover);padding:var(--ms-hint-padding);background:var(--ms-hint-bg);border:var(--ms-hint-border);border-radius:var(--ms-hint-border-radius);box-shadow:var(--ms-hint-box-shadow);font-size:var(--ms-hint-font-size);color:var(--ms-hint-color);line-height:var(--ms-line-height-relaxed);max-width:100%}.ms__hint--visible{display:block}.ms__dropdown{display:none;position:fixed;box-sizing:border-box;font-family:inherit;z-index:var(--ms-z-index-dropdown);background:var(--ms-dropdown-bg);border:var(--ms-dropdown-border);border-radius:var(--ms-dropdown-border-radius);box-shadow:var(--ms-dropdown-box-shadow);width:var(--ms-dropdown-width);max-height:var(--ms-options-max-height);overflow:hidden;color:var(--ms-dropdown-text-color)}.ms__dropdown--visible{display:flex;flex-direction:column}.ms__dropdown--fullscreen,.ms__selected-popover--fullscreen{--ms-rem: var(--ms-fullscreen-rem);--ms-option-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-option-gap: calc(.8 * var(--ms-rem));--ms-option-title-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-option-subtitle-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-option-icon-font-size: calc(var(--base-font-size-base, 1.6) * var(--ms-rem));--ms-checkbox-size: calc(1.6 * var(--ms-rem));--ms-group-label-font-size: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-group-label-padding: calc(.4 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-tree-base-indent: var(--ms-fullscreen-tree-base-indent);--ms-tree-indent: var(--ms-fullscreen-tree-indent)}.ms__selected-popover--fullscreen{--ms-badge-gap: calc(.8 * var(--ms-rem));--ms-badge-height: calc(4.2 * var(--ms-rem));--ms-badge-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-badge-text-padding: 0 calc(1.2 * var(--ms-rem));--ms-badge-remove-width: calc(3.6 * var(--ms-rem));--ms-badge-remove-icon-size: calc(1.2 * var(--ms-rem));--ms-badge-remove-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem))}.ms__dropdown--fullscreen{--ms-actions-gap: calc(.4 * var(--ms-rem));--ms-actions-padding: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-action-btn-padding: calc(.6 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-action-btn-font-size: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem))}.ms__dropdown--fullscreen{position:fixed;top:0;inset-inline-start:0;width:100vw;max-width:100vw;height:100dvh;max-height:100dvh;border:none;border-radius:0;--ms-dropdown-inner-border-radius: 0;background:var(--ms-fullscreen-bg);color:var(--ms-fullscreen-text-color);z-index:var(--ms-z-index-fullscreen);box-sizing:border-box;padding-top:env(safe-area-inset-top);padding-right:env(safe-area-inset-right);padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left)}.ms__dropdown--fullscreen .ms__dropdown-inner{display:flex;flex-direction:column;flex:1;min-height:0;max-height:none;overflow:hidden}.ms__dropdown--fullscreen .ms__options{flex:1 1 0;min-height:0;height:auto;max-height:none;overflow-y:auto;padding-bottom:var(--ms-option-gap)}.ms__dropdown--fullscreen .ms__actions{flex:0 0 auto}.ms__fullscreen-header,.ms__selected-popover--fullscreen .ms__selected-popover-header{flex:0 0 auto;display:flex;align-items:center;flex-wrap:wrap;gap:var(--ms-fullscreen-header-gap);min-height:var(--ms-fullscreen-header-min-height);padding:var(--ms-fullscreen-header-padding);background:var(--ms-fullscreen-header-bg);border-bottom:var(--ms-fullscreen-header-border)}.ms__fullscreen-header{align-content:flex-start}.ms__fullscreen-header>.ms__fullscreen-search-wrapper{min-height:var(--ms-fullscreen-header-min-height)}.ms__fullscreen-nav{flex:0 0 100%;display:flex;align-items:center;justify-content:space-between;gap:var(--ms-fullscreen-nav-gap);padding-top:var(--ms-fullscreen-nav-padding-top)}.ms__fullscreen-nav-count{font-size:var(--ms-fullscreen-nav-count-font-size);color:var(--ms-fullscreen-nav-count-color)}.ms__fullscreen-nav-controls{display:flex;align-items:center;gap:var(--ms-fullscreen-nav-gap)}.ms__fullscreen-nav-btn{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:var(--ms-fullscreen-nav-btn-size);height:var(--ms-fullscreen-nav-btn-size);padding:0;color:var(--ms-fullscreen-nav-btn-color);background:var(--ms-fullscreen-nav-btn-bg);border:none;border-radius:50%;cursor:pointer}.ms__fullscreen-nav-btn:hover:not(:disabled){background:var(--ms-fullscreen-nav-btn-bg-hover)}.ms__fullscreen-nav-btn:disabled{opacity:.4;cursor:default}.ms__fullscreen-nav-btn:before{content:"";display:block;width:var(--ms-fullscreen-nav-btn-icon-size);height:var(--ms-fullscreen-nav-btn-icon-size);background-color:currentColor;-webkit-mask:var(--ms-fullscreen-nav-btn-icon) center / contain no-repeat;mask:var(--ms-fullscreen-nav-btn-icon) center / contain no-repeat;transform:rotate(-90deg)}.ms__fullscreen-nav-btn--next:before{transform:rotate(90deg)}.ms__fullscreen-header>.ms__fullscreen-search-wrapper,.ms__selected-popover--fullscreen .ms__selected-popover-header>span{flex:1 1 0;min-width:0}.ms__fullscreen-search-wrapper{position:relative;display:flex;align-items:center}.ms__selected-popover--fullscreen .ms__selected-popover-header{font-size:var(--ms-fullscreen-title-font-size);font-weight:var(--ms-fullscreen-title-font-weight);color:var(--ms-fullscreen-text-color)}.ms__fullscreen-search{flex:1 1 auto;min-width:0;font-family:inherit;font-size:var(--ms-fullscreen-search-font-size);color:inherit;background:transparent;border:var(--ms-fullscreen-search-border);border-radius:var(--ms-fullscreen-search-border-radius);padding:var(--ms-fullscreen-search-padding);padding-inline-end:var(--ms-fullscreen-search-clear-gutter)}.ms__fullscreen-search:focus{outline:none;border:var(--ms-input-border-focus)}.ms__fullscreen-search-clear{position:absolute;inset-inline-end:var(--ms-fullscreen-search-clear-inset);top:50%;transform:translateY(-50%);display:inline-flex;align-items:center;justify-content:center;width:var(--ms-fullscreen-search-clear-size);height:var(--ms-fullscreen-search-clear-size);padding:0;color:var(--ms-fullscreen-search-clear-color);background:transparent;border:none;border-radius:50%;cursor:pointer}.ms__fullscreen-search-clear:hover{background:var(--ms-fullscreen-search-clear-bg-hover)}.ms__fullscreen-search-clear:before{content:"";display:block;width:var(--ms-fullscreen-search-clear-icon-size);height:var(--ms-fullscreen-search-clear-icon-size);background-color:currentColor;-webkit-mask:var(--ms-icon-search-clear) center / contain no-repeat;mask:var(--ms-icon-search-clear) center / contain no-repeat}.ms__fullscreen-mode-toggle{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:var(--ms-fullscreen-mode-toggle-size);height:var(--ms-fullscreen-mode-toggle-size);margin-inline-end:var(--ms-fullscreen-mode-toggle-gap);margin-inline-start:calc((var(--ms-fullscreen-close-size) - var(--ms-fullscreen-mode-toggle-size)) / 2 - var(--ms-fullscreen-close-edge-nudge));padding:0;color:var(--ms-fullscreen-mode-toggle-color);background:var(--ms-fullscreen-mode-toggle-bg);border:none;border-radius:50%;cursor:pointer}.ms__fullscreen-mode-toggle:hover{background:var(--ms-fullscreen-mode-toggle-bg-hover)}.ms__fullscreen-mode-toggle:before{content:"";display:block;width:var(--ms-fullscreen-mode-toggle-icon-size);height:var(--ms-fullscreen-mode-toggle-icon-size);background-color:currentColor;-webkit-mask:var(--ms-fullscreen-mode-toggle-icon, var(--ms-icon-search)) center / contain no-repeat;mask:var(--ms-fullscreen-mode-toggle-icon, var(--ms-icon-search)) center / contain no-repeat}.ms__fullscreen-mode-toggle[data-mode=navigate]{--ms-fullscreen-mode-toggle-icon: var(--ms-icon-search)}.ms__fullscreen-mode-toggle[data-mode=filter]{--ms-fullscreen-mode-toggle-icon: var(--ms-icon-filter)}.ms__fullscreen-close,.ms__selected-popover--fullscreen .ms__selected-popover-close{flex:0 0 auto;position:relative;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;width:var(--ms-fullscreen-close-size);height:var(--ms-fullscreen-close-size);margin-inline-end:calc(-1 * var(--ms-fullscreen-close-edge-nudge));padding:0;color:var(--ms-fullscreen-close-color);background:var(--ms-fullscreen-close-bg);border:var(--ms-fullscreen-close-border);border-radius:var(--ms-fullscreen-close-border-radius);cursor:pointer}.ms__fullscreen-close:after,.ms__selected-popover--fullscreen .ms__selected-popover-close:after{content:"";position:absolute;inset-block-start:calc(-1 * var(--ms-fullscreen-close-size));inset-block-end:calc(-1 * var(--ms-fullscreen-header-padding-v));inset-inline-end:calc(-1 * var(--ms-fullscreen-header-padding-h));inset-inline-start:calc(-1 * var(--ms-fullscreen-header-gap))}.ms__fullscreen-close:hover,.ms__selected-popover--fullscreen .ms__selected-popover-close:hover{background:var(--ms-fullscreen-close-bg-hover);color:var(--ms-fullscreen-close-color)}.ms__fullscreen-close:before,.ms__selected-popover--fullscreen .ms__selected-popover-close:before{content:"";display:block;width:var(--ms-fullscreen-close-icon-size);height:var(--ms-fullscreen-close-icon-size);background-color:currentColor;-webkit-mask:var(--ms-icon-remove) center / contain no-repeat;mask:var(--ms-icon-remove) center / contain no-repeat}.ms__dropdown--fullscreen .ms__option-info{flex:0 0 auto;display:none;align-items:center;justify-content:center;width:var(--ms-fullscreen-info-size);height:var(--ms-fullscreen-info-size);margin-inline-start:var(--ms-option-gap);padding:0;color:var(--ms-fullscreen-info-color);background:transparent;border:none;border-radius:50%;cursor:pointer}.ms__dropdown--fullscreen .ms__option--truncated .ms__option-info{display:inline-flex}@media (hover: hover){.ms__dropdown--fullscreen .ms__option-info:hover{background:var(--ms-fullscreen-info-bg-hover)}}.ms__dropdown--fullscreen .ms__option-info:before{content:"";display:block;width:var(--ms-fullscreen-info-icon-size);height:var(--ms-fullscreen-info-icon-size);background-color:currentColor;-webkit-mask:var(--ms-icon-info) center / contain no-repeat;mask:var(--ms-icon-info) center / contain no-repeat}.ms__dropdown-inner{flex:1;overflow-y:auto;border-radius:var(--ms-dropdown-inner-border-radius);overscroll-behavior:contain;touch-action:pan-y;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:var(--ms-scrollbar-thumb-bg) var(--ms-scrollbar-track-bg)}.ms__dropdown-inner::-webkit-scrollbar{width:var(--ms-scrollbar-width)}.ms__dropdown-inner::-webkit-scrollbar-track{background:var(--ms-scrollbar-track-bg)}.ms__dropdown-inner::-webkit-scrollbar-thumb{background:var(--ms-scrollbar-thumb-bg);border-radius:var(--ms-scrollbar-thumb-border-radius)}.ms__dropdown-inner::-webkit-scrollbar-thumb:hover{background:var(--ms-scrollbar-thumb-bg-hover)}.ms__dropdown--virtual{max-height:none}.ms__dropdown--virtual .ms__dropdown-inner{overflow:hidden}.ms__badge-tooltip{position:fixed;z-index:var(--ms-tooltip-z-index);opacity:0;visibility:hidden;transition:opacity var(--ms-transition-normal) ease,visibility var(--ms-transition-normal) ease;background:var(--ms-tooltip-bg);color:var(--ms-tooltip-text-color);padding:var(--ms-tooltip-padding);border-radius:var(--ms-tooltip-border-radius);font-size:var(--ms-tooltip-font-size);line-height:var(--ms-line-height-relaxed);max-width:var(--ms-tooltip-max-width);word-wrap:break-word;white-space:pre-wrap;box-shadow:var(--ms-tooltip-shadow);pointer-events:none}.ms__badge-tooltip--visible{opacity:1;visibility:visible}.ms__option-tooltip{position:fixed;z-index:var(--ms-option-tooltip-z-index);opacity:0;visibility:hidden;transition:opacity var(--ms-transition-normal) ease,visibility var(--ms-transition-normal) ease;background:var(--ms-option-tooltip-bg);color:var(--ms-option-tooltip-text-color);padding:var(--ms-option-tooltip-padding);border-radius:var(--ms-option-tooltip-border-radius);font-size:var(--ms-option-tooltip-font-size);line-height:var(--ms-line-height-relaxed);max-width:var(--ms-option-tooltip-max-width);word-wrap:break-word;white-space:pre-wrap;box-shadow:var(--ms-option-tooltip-shadow);pointer-events:none}.ms__option-tooltip--visible{opacity:1;visibility:visible}.ms__option-tooltip--fullscreen{z-index:var(--ms-z-index-fullscreen-tooltip)}.ms__message{position:fixed;z-index:var(--ms-message-z-index);box-sizing:border-box;max-width:var(--ms-message-max-width);padding:var(--ms-message-padding);font-family:inherit;font-size:var(--ms-message-font-size);font-weight:var(--ms-message-font-weight);line-height:var(--ms-line-height-normal);color:var(--ms-message-color);background:var(--ms-message-bg);border:var(--ms-message-border);border-radius:var(--ms-message-border-radius);box-shadow:var(--ms-message-shadow);cursor:pointer;opacity:0;transition:opacity var(--ms-transition-normal) ease;-webkit-tap-highlight-color:transparent}.ms__message--visible{opacity:1}.ms__message--info{background:var(--ms-message-info-bg);color:var(--ms-message-info-color)}.ms__message--warning{background:var(--ms-message-warning-bg);color:var(--ms-message-warning-color)}.ms__message--error{background:var(--ms-message-error-bg);color:var(--ms-message-error-color)}.ms__message--success{background:var(--ms-message-success-bg);color:var(--ms-message-success-color)}.ms__message--fullscreen{left:50%;right:auto;bottom:calc(var(--ms-message-fullscreen-offset) + env(safe-area-inset-bottom));transform:translate(-50%);max-width:min(var(--ms-message-max-width),calc(100vw - 4 * var(--ms-fullscreen-rem)));padding:calc(1 * var(--ms-fullscreen-rem)) calc(1.4 * var(--ms-fullscreen-rem));font-size:calc(var(--base-font-size-sm, 1.4) * var(--ms-fullscreen-rem))}.ms__selected-popover{display:none;position:fixed;box-sizing:border-box;z-index:var(--ms-z-index-popover);background:var(--ms-selected-popover-bg);border:var(--ms-selected-popover-border);border-radius:var(--ms-selected-popover-border-radius);box-shadow:var(--ms-selected-popover-box-shadow);width:var(--ms-selected-popover-width);max-height:var(--ms-selected-popover-max-height);overflow:hidden}.ms__selected-popover--visible{display:flex;flex-direction:column}.ms__selected-popover--virtual{display:block;overflow:visible;max-height:none}.ms__selected-popover--fullscreen{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;width:100vw;max-width:100vw;height:100dvh;max-height:100dvh;border:none;border-radius:0;overflow:hidden;background:var(--ms-fullscreen-bg);color:var(--ms-fullscreen-text-color);z-index:var(--ms-z-index-fullscreen);box-sizing:border-box;padding-top:env(safe-area-inset-top);padding-right:env(safe-area-inset-right);padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left)}.ms__selected-popover--fullscreen .ms__selected-popover-body{flex:1 1 0;min-height:0;max-height:none}.ms__selected-popover-header{display:flex;align-items:center;justify-content:space-between;padding:var(--ms-selected-popover-header-padding);background:var(--ms-selected-popover-header-bg);border-bottom:var(--ms-selected-popover-header-border-bottom);font-size:var(--ms-selected-popover-header-font-size);font-weight:var(--ms-selected-popover-header-font-weight);color:var(--ms-selected-popover-header-color)}.ms__selected-popover-close{display:flex;align-items:center;justify-content:center;width:var(--ms-popover-close-size);height:var(--ms-popover-close-size);padding:0;border:none;background:var(--ms-selected-popover-close-bg);color:var(--ms-selected-popover-close-color);font-size:var(--ms-selected-popover-close-font-size);line-height:var(--ms-line-height-none);cursor:pointer;border-radius:var(--ms-selected-popover-close-border-radius);transition:all var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__selected-popover-close:hover{background:var(--ms-selected-popover-close-bg-hover);color:var(--ms-selected-popover-close-color-hover)}.ms__selected-popover-close:before{content:"";display:block;width:var(--ms-selected-popover-close-icon-size);height:var(--ms-selected-popover-close-icon-size);background-color:currentColor;-webkit-mask:var(--ms-icon-remove) center / contain no-repeat;mask:var(--ms-icon-remove) center / contain no-repeat}.ms__selected-popover-body{display:flex;flex-direction:column;gap:var(--ms-selected-popover-body-gap);padding:var(--ms-selected-popover-body-padding);overflow-y:auto;max-height:var(--ms-selected-popover-body-max-height);scrollbar-width:thin;scrollbar-color:var(--ms-scrollbar-thumb-bg) var(--ms-scrollbar-track-bg)}.ms__selected-popover-body::-webkit-scrollbar{width:var(--ms-scrollbar-width)}.ms__selected-popover-body::-webkit-scrollbar-track{background:var(--ms-scrollbar-track-bg)}.ms__selected-popover-body::-webkit-scrollbar-thumb{background:var(--ms-scrollbar-thumb-bg);border-radius:var(--ms-scrollbar-thumb-border-radius)}.ms__selected-popover-body::-webkit-scrollbar-thumb:hover{background:var(--ms-scrollbar-thumb-bg-hover)}.ms__selected-popover-body .ms__badge{width:100%;min-height:fit-content;line-height:var(--ms-line-height-relaxed);flex-shrink:0}.ms__selected-popover-body .ms__badge-text{flex:1;min-width:0;white-space:normal;word-wrap:break-word}.ms__selected-popover-body--virtual{display:block;max-height:none;padding:0}.ms__selected-popover-body--virtual .ms__badge{height:var(--ms-badge-height-virtual, 36px);min-height:var(--ms-badge-height-virtual, 36px);max-height:var(--ms-badge-height-virtual, 36px);margin-bottom:var(--ms-selected-popover-body-gap);overflow:hidden;box-sizing:border-box}.ms__selected-popover-body--virtual .ms__badge-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}@layer component{.ms--disabled .ms__input-wrapper{opacity:var(--ms-disabled-input-opacity);background:var(--ms-input-bg-disabled);cursor:not-allowed}.ms--disabled .ms__input{cursor:not-allowed}.ms--no-checkboxes .ms__option{gap:0;padding-inline-start:var(--ms-option-padding-h)}.ms--no-checkboxes .ms__option-content{padding-inline-start:0}.ms--no-selected-popover .ms__counter,.ms--no-selected-popover .ms__badge[data-action=show-selected],.ms--no-selected-popover .ms__badge--counter,.ms--no-selected-popover .ms__badge--more{cursor:default}}@layer component{@keyframes ms-spin{to{transform:rotate(360deg)}}}@layer component{.ms__badges{display:flex;flex-wrap:wrap;gap:var(--ms-badges-gap);padding:0}.ms__badges:empty{display:none}.ms__badges--bottom{margin-top:var(--ms-badges-margin-bottom)}.ms__badges--top{margin-bottom:var(--ms-badges-margin-top);order:var(--ms-order-first)}.ms__badges--left{order:var(--ms-order-first);margin-right:var(--ms-badges-margin-left);justify-content:flex-end}.ms__badges--right{margin-left:var(--ms-badges-margin-right);justify-content:flex-start}.ms__badge{display:inline-flex;align-items:center;height:var(--ms-badge-height);font-size:var(--ms-badge-font-size);font-weight:var(--ms-badge-font-weight);line-height:var(--ms-line-height-none);border-radius:var(--ms-badge-border-radius);overflow:hidden;max-width:100%}.ms__badge--custom{display:block;height:auto;max-width:none;overflow:visible;border-radius:0;font-size:inherit;font-weight:inherit}.ms__badge-text{display:flex;align-items:center;box-sizing:border-box;height:100%;padding:var(--ms-badge-text-padding);background:var(--ms-badge-text-bg);color:var(--ms-badge-text-color);border:var(--ms-badge-text-border);border-inline-end:none;border-start-start-radius:var(--ms-badge-border-radius);border-end-start-radius:var(--ms-badge-border-radius);border-start-end-radius:0;border-end-end-radius:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:background-color var(--ms-transition-normal) ease,color var(--ms-transition-normal) ease}.ms__badge:hover .ms__badge-text{background:var(--ms-badge-text-bg-hover, var(--ms-badge-text-bg));color:var(--ms-badge-text-color-hover, var(--ms-badge-text-color))}.ms__badge-remove{display:flex;align-items:center;justify-content:center;box-sizing:border-box;padding:0;font-family:inherit;width:var(--ms-badge-remove-width);height:100%;flex-shrink:0;background:var(--ms-badge-remove-bg);color:var(--ms-badge-remove-color);border:var(--ms-badge-remove-border);border-inline-start:none;border-start-end-radius:var(--ms-badge-border-radius);border-end-end-radius:var(--ms-badge-border-radius);border-start-start-radius:0;border-end-start-radius:0;cursor:pointer;transition:background-color var(--ms-transition-normal) ease;font-size:var(--ms-badge-remove-font-size)}.ms__badge-remove:hover{background:var(--ms-badge-remove-bg-hover)}.ms__badge-remove:focus{outline:none}.ms__badge-remove:focus-visible{outline:none;box-shadow:var(--ms-badge-remove-box-shadow-focus)}.ms__badge-remove:before{content:"";display:block;width:var(--ms-badge-remove-icon-size);height:var(--ms-badge-remove-icon-size);background-color:currentColor;-webkit-mask:var(--ms-icon-remove) center / contain no-repeat;mask:var(--ms-icon-remove) center / contain no-repeat}.ms__badge--counter{cursor:pointer}.ms__badge--counter .ms__badge-text{background:var(--ms-badge-counter-text-bg);color:var(--ms-badge-counter-text-color);border:var(--ms-badge-counter-border);border-inline-end:none}.ms__badge--counter .ms__badge-remove{background:var(--ms-badge-counter-remove-bg);color:var(--ms-badge-counter-remove-color);border:var(--ms-badge-counter-border);border-inline-start:none}.ms__badge--counter .ms__badge-remove:hover{background:var(--ms-badge-counter-remove-bg-hover);color:var(--ms-badge-counter-remove-color-hover, var(--ms-badge-counter-remove-color))}.ms__badge--counter:hover .ms__badge-text{background:var(--ms-badge-counter-text-bg-hover, var(--ms-badge-counter-text-bg));color:var(--ms-badge-counter-text-color-hover, var(--ms-badge-counter-text-color))}.ms__badge--more,.ms__badge[data-action=show-selected]{cursor:pointer}}@layer component{.ms__count-display{display:flex;align-items:center}.ms__count-display:empty{display:none}.ms__count-display--bottom{margin-top:var(--ms-count-display-margin-bottom)}.ms__count-display--top{margin-bottom:var(--ms-count-display-margin-top);order:var(--ms-order-first)}.ms__count-display--left{order:var(--ms-order-first);margin-right:var(--ms-count-display-margin-left);justify-content:flex-start}.ms__count-display--right{margin-left:var(--ms-count-display-margin-right);justify-content:flex-end}.ms__counter-wrapper{display:inline-flex;align-items:center;gap:var(--ms-counter-wrapper-gap);background:var(--ms-counter-wrapper-bg);border:var(--ms-counter-wrapper-border);border-radius:var(--ms-counter-wrapper-border-radius);padding:var(--ms-counter-wrapper-padding);transition:all var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__counter-wrapper:hover{background:var(--ms-counter-wrapper-bg-hover);border-color:var(--ms-counter-wrapper-border-color-hover)}.ms__count-text{display:inline-flex;align-items:center;background:var(--ms-count-text-bg);border:var(--ms-count-text-border);padding:0;font-size:var(--ms-count-text-font-size);color:var(--ms-count-text-color);cursor:pointer;transition:color var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__count-clear{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:var(--ms-count-clear-size);height:var(--ms-count-clear-size);padding:0;border:none;background:var(--ms-count-clear-bg);color:var(--ms-count-clear-color);font-size:var(--ms-count-clear-font-size);line-height:var(--ms-line-height-none);cursor:pointer;border-radius:var(--ms-count-clear-border-radius);transition:all var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__count-clear:hover{background:var(--ms-count-clear-bg-hover);color:var(--ms-count-clear-color-hover)}.ms__count-clear:before{content:"";display:block;width:var(--ms-count-clear-icon-size);height:var(--ms-count-clear-icon-size);background-color:currentColor;-webkit-mask:var(--ms-icon-clear) center / contain no-repeat;mask:var(--ms-icon-clear) center / contain no-repeat}}@layer component{.ms__debug-info{margin-top:calc(.4 * var(--ms-rem));padding:calc(.4 * var(--ms-rem));background-color:var(--ms-debug-bg);border:1px solid var(--ms-debug-border-color);border-radius:var(--ms-debug-border-radius);font-size:calc(1.2 * var(--ms-rem));color:var(--ms-debug-text-color)}.ms__debug-info details summary{cursor:pointer;font-weight:600;color:var(--ms-debug-summary-color);-webkit-user-select:none;user-select:none;padding:calc(.4 * var(--ms-rem));border-radius:var(--ms-debug-summary-border-radius)}.ms__debug-info details summary:hover{background-color:var(--ms-debug-summary-bg-hover)}.ms__debug-info details summary:focus{outline:2px solid var(--ms-debug-summary-outline-color);outline-offset:2px}.ms__debug-info .ms__debug-stats{display:flex;flex-direction:column;gap:calc(.4 * var(--ms-rem));margin-top:calc(.4 * var(--ms-rem));padding:calc(.4 * var(--ms-rem));background-color:var(--ms-debug-stats-bg);border-radius:var(--ms-debug-stats-border-radius)}.ms__debug-info .ms__debug-stats span{display:flex;justify-content:space-between;padding:2px 4px;font-family:monospace;font-size:calc(1 * var(--ms-rem))}.ms__debug-info .ms__debug-stats span:before{content:"•";margin-inline-end:calc(.4 * var(--ms-rem));color:var(--ms-debug-bullet-color)}}@layer component{.ms__options{padding:var(--ms-options-padding);scrollbar-width:thin;scrollbar-color:var(--ms-scrollbar-thumb-bg) var(--ms-scrollbar-track-bg)}.ms__options::-webkit-scrollbar{width:var(--ms-scrollbar-width)}.ms__options::-webkit-scrollbar-track{background:var(--ms-scrollbar-track-bg)}.ms__options::-webkit-scrollbar-thumb{background:var(--ms-scrollbar-thumb-bg);border-radius:var(--ms-scrollbar-thumb-border-radius)}.ms__options::-webkit-scrollbar-thumb:hover{background:var(--ms-scrollbar-thumb-bg-hover)}.ms__options--virtual .ms__option,.ms__options--fixed-height .ms__option{height:var(--ms-option-height, 50px);min-height:var(--ms-option-height, 50px);max-height:var(--ms-option-height, 50px);overflow:hidden;box-sizing:border-box}.ms__group+.ms__group{border-top:var(--ms-group-border-top);margin-top:var(--ms-group-margin-top);padding-top:var(--ms-group-padding-top)}.ms__group-label{padding:var(--ms-group-label-padding);font-size:var(--ms-group-label-font-size);font-weight:var(--ms-group-label-font-weight);color:var(--ms-group-label-color);text-transform:var(--ms-group-label-transform);letter-spacing:var(--ms-group-label-letter-spacing)}.ms__option{display:flex;align-items:var(--ms-checkbox-align, center);gap:var(--ms-option-gap);padding:var(--ms-option-padding);position:relative;min-height:var(--ms-option-min-height, auto);color:var(--ms-option-text-color);background:var(--ms-option-bg);cursor:pointer;user-select:none;-webkit-user-select:none}@media (hover: hover){.ms__option:hover{background:var(--ms-option-bg-hover);color:var(--ms-option-color-hover, inherit)}}.ms__option--focused{background:var(--ms-option-bg-focused);color:var(--ms-option-color-focused, inherit);outline:var(--ms-option-outline-focused);outline-offset:var(--ms-option-focus-outline-offset)}.ms__option--matched{background:var(--ms-option-bg-matched);color:var(--ms-option-color-matched, inherit)}.ms__option--matched:before{content:"";position:absolute;inset-block:0;inset-inline-start:0;border-inline-start:var(--ms-option-border-matched);pointer-events:none}.ms__option--selected{background:var(--ms-option-bg-selected)}@media (hover: hover){.ms__option--selected:hover{background:var(--ms-option-bg-selected-hover, var(--ms-option-bg-selected))}}.ms__option--disabled{opacity:var(--ms-disabled-opacity);cursor:not-allowed;background:var(--ms-option-disabled-bg)}.ms__option--disabled:hover{background:var(--ms-option-disabled-bg)}@media (hover: hover){.ms__option--focused:hover{background:var(--ms-option-bg-focused-hover);color:var(--ms-option-color-focused-hover, var(--ms-option-color-focused, var(--ms-option-text-color)))}}.ms__option--matched:hover{background:var(--ms-option-bg-matched-hover);color:var(--ms-option-color-matched-hover, var(--ms-option-color-matched, var(--ms-option-text-color)))}.ms__option--selected.ms__option--focused{background:var(--ms-option-bg-selected-focused);outline:var(--ms-option-outline-focused);outline-offset:var(--ms-option-focus-outline-offset)}.ms__option--selected.ms__option--matched{background:var(--ms-option-bg-selected-matched)}.ms__option--disabled.ms__option--selected{background:var(--ms-option-bg-disabled-selected)}.ms__option--disabled.ms__option--focused{outline:none}.ms__option[data-checkbox-align=top]{--ms-checkbox-align: flex-start;--ms-checkbox-margin-top: calc(.2 * var(--ms-rem))}.ms__option[data-checkbox-align=bottom]{--ms-checkbox-align: flex-end}.ms__checkbox{appearance:none;-webkit-appearance:none;-moz-appearance:none;flex-shrink:0;position:relative;margin-top:var(--ms-checkbox-margin-top);margin-inline-end:var(--ms-checkbox-margin-right);margin-bottom:var(--ms-checkbox-margin-bottom);margin-inline-start:var(--ms-checkbox-margin-left);width:var(--ms-checkbox-size);height:var(--ms-checkbox-size);transform:scale(var(--ms-checkbox-scale));transform-origin:top left;cursor:pointer;background:var(--ms-checkbox-bg);border:var(--ms-checkbox-border);border-radius:var(--ms-checkbox-border-radius);transition:background-color .15s ease,border-color .15s ease}.ms__checkbox:after{content:"";position:absolute;display:none;top:0;right:0;bottom:0;left:0;background-color:var(--ms-checkbox-checkmark-color);-webkit-mask:var(--ms-icon-check) no-repeat center / var(--base-icon-check-size, 68%);mask:var(--ms-icon-check) no-repeat center / var(--base-icon-check-size, 68%)}.ms__checkbox:hover:not(:disabled){border-color:var(--ms-checkbox-hover-border-color)}.ms__checkbox:checked{background:var(--ms-checkbox-checked-bg);border:var(--ms-checkbox-checked-border)}.ms__checkbox:checked:after{display:block}.ms__checkbox--indeterminate{background:var(--ms-checkbox-checked-bg);border:var(--ms-checkbox-checked-border)}.ms__checkbox--indeterminate:after{display:block;-webkit-mask-image:var(--ms-icon-indeterminate);mask-image:var(--ms-icon-indeterminate)}.ms__checkbox--indeterminate:hover:not(:disabled){background:var(--ms-checkbox-checked-bg-hover);border-color:var(--ms-checkbox-checked-border-color-hover)}.ms__checkbox:checked:hover:not(:disabled){background:var(--ms-checkbox-checked-bg-hover);border-color:var(--ms-checkbox-checked-border-color-hover)}.ms__checkbox:focus-visible{outline:2px solid var(--ms-checkbox-checked-bg);outline-offset:2px}.ms__checkbox:disabled{cursor:not-allowed;background:var(--ms-checkbox-disabled-bg);border:var(--ms-checkbox-disabled-border);opacity:.6}.ms__checkbox:disabled:checked{background:var(--ms-checkbox-disabled-bg)}.ms__option--disabled .ms__checkbox{cursor:not-allowed}.ms__option-content{flex:1;display:flex;align-items:center;gap:var(--ms-option-content-gap);min-width:0}.ms__option-icon{flex-shrink:0;width:var(--ms-option-icon-size);height:var(--ms-option-icon-size);display:flex;align-items:center;justify-content:center;font-size:var(--ms-option-icon-font-size)}.ms__option-icon svg{width:100%;height:100%;fill:currentColor}.ms__option-text{flex:1;min-width:0}.ms__option-title{font-size:var(--ms-option-title-font-size);color:var(--ms-option-title-color);line-height:var(--ms-line-height-relaxed);white-space:var(--ms-option-title-white-space, normal);overflow:var(--ms-option-title-overflow, visible);text-overflow:var(--ms-option-title-text-overflow, clip)}@media (hover: hover){.ms__option:hover .ms__option-title{color:var(--ms-option-title-color-hover, var(--ms-option-title-color))}}.ms__option--selected .ms__option-title{color:var(--ms-option-title-color-selected, var(--ms-option-title-color))}@media (hover: hover){.ms__option--selected:hover .ms__option-title{color:var(--ms-option-title-color-selected-hover, var(--ms-option-title-color-selected, var(--ms-option-title-color)))}}.ms__option-title mark{background:var(--ms-option-mark-bg);color:var(--ms-option-mark-color);font-weight:var(--ms-option-mark-font-weight)}.ms__option-subtitle{margin-top:var(--ms-option-subtitle-margin-top);font-size:var(--ms-option-subtitle-font-size);color:var(--ms-option-subtitle-color);line-height:var(--ms-option-subtitle-line-height)}@media (hover: hover){.ms__option:hover .ms__option-subtitle{color:var(--ms-option-subtitle-color-hover, var(--ms-option-subtitle-color))}}.ms__option--selected .ms__option-subtitle{color:var(--ms-option-subtitle-color-selected, var(--ms-option-subtitle-color))}@media (hover: hover){.ms__option--selected:hover .ms__option-subtitle{color:var(--ms-option-subtitle-color-selected-hover, var(--ms-option-subtitle-color-selected, var(--ms-option-subtitle-color)))}}.ms__empty{display:flex;align-items:center;justify-content:center;min-height:var(--ms-state-min-height);padding:var(--ms-empty-padding);text-align:center;font-size:var(--ms-empty-font-size);color:var(--ms-empty-color)}.ms__add-new{display:flex;align-items:center;gap:var(--ms-add-new-gap);padding:var(--ms-add-new-padding);font-size:var(--ms-add-new-font-size);color:var(--ms-add-new-color);cursor:pointer;user-select:none;-webkit-user-select:none}@media (hover: hover){.ms__add-new:hover{background:var(--ms-add-new-bg-hover);color:var(--ms-add-new-color-hover)}}.ms__add-new--focused{background:var(--ms-add-new-bg-hover);color:var(--ms-add-new-color-hover)}.ms__add-new--loading{cursor:default}.ms__add-new-spinner{flex-shrink:0;width:var(--ms-add-new-icon-size);height:var(--ms-add-new-icon-size);border-radius:50%;border:2px solid color-mix(in srgb,currentColor 25%,transparent);border-top-color:currentColor;animation:ms-spin .6s linear infinite}@media (prefers-reduced-motion: reduce){.ms__add-new-spinner{animation-duration:1.5s}}.ms__add-new-icon{flex-shrink:0;width:var(--ms-add-new-icon-size);height:var(--ms-add-new-icon-size);background-color:currentColor;-webkit-mask:var(--ms-icon-add-new) center / contain no-repeat;mask:var(--ms-icon-add-new) center / contain no-repeat}.ms__add-new-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ms__loader{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:var(--ms-state-min-height);padding:var(--ms-loader-padding);gap:var(--ms-loader-gap)}.ms__loading-text{font-size:var(--ms-loading-text-font-size);color:var(--ms-loading-color)}}@layer component{.ms--rtl .ms__badges{direction:rtl}.ms--rtl .ms__badges--right{margin-left:0;margin-right:var(--ms-badges-margin-right)}.ms--rtl .ms__badges--left{margin-right:0;margin-left:var(--ms-badges-margin-left)}.ms--rtl .ms__count-display{direction:rtl}.ms--rtl .ms__count-display--right{margin-left:0;margin-right:var(--ms-count-display-margin-right)}.ms--rtl .ms__count-display--left{margin-right:0;margin-left:var(--ms-count-display-margin-left)}}@layer component{.ms__option--tree{padding-inline-start:calc(var(--ms-tree-base-indent, .75rem) + var(--ms-tree-depth, 0) * var(--ms-tree-indent, 1.25rem))}.ms__option--tree-unselectable{cursor:default}.ms__option--tree-unselectable:hover{background:transparent}}@layer overrides{:host-context([data-theme="dark"]),:host-context([data-bs-theme="dark"]),:host-context(.dark){color-scheme:dark}:host-context([data-theme="light"]),:host-context([data-bs-theme="light"]),:host-context(.light){color-scheme:light}:host([data-theme="dark"]){color-scheme:dark}:host([data-theme="light"]){color-scheme:light}}`, Ys = [
|
|
5271
5445
|
"top",
|
|
5272
5446
|
"top-start",
|
|
5273
5447
|
"top-end",
|
|
@@ -5282,41 +5456,43 @@ const Oo = `@layer variables,component,overrides;@layer variables{:host{display:
|
|
|
5282
5456
|
"right-end"
|
|
5283
5457
|
], N = () => Wo(), gn = [
|
|
5284
5458
|
// ── Strings (cosmetic → update). Optional ones are nullable: absent → null ─
|
|
5285
|
-
{ configKey: "searchHint", attribute: "search-hint", converter:
|
|
5286
|
-
{ configKey: "searchPlaceholder", attribute: "search-placeholder", converter:
|
|
5287
|
-
{ configKey: "selectPlaceholder", attribute: "select-placeholder", converter:
|
|
5288
|
-
{ configKey: "noDataPlaceholder", attribute: "no-data-placeholder", converter:
|
|
5289
|
-
{ configKey: "dropdownMinWidth", attribute: "dropdown-min-width", converter:
|
|
5290
|
-
{ configKey: "dropdownMaxWidth", attribute: "dropdown-max-width", converter:
|
|
5291
|
-
{ configKey: "maxHeight", attribute: "max-height", converter:
|
|
5292
|
-
{ configKey: "emptyMessage", attribute: "empty-message", converter:
|
|
5293
|
-
{ configKey: "
|
|
5294
|
-
{ configKey: "
|
|
5295
|
-
{ configKey: "
|
|
5459
|
+
{ configKey: "searchHint", attribute: "search-hint", converter: A({ isNullable: !0 }), on: "update", description: "Small hint text shown beneath the search input." },
|
|
5460
|
+
{ configKey: "searchPlaceholder", attribute: "search-placeholder", converter: A({ isNullable: !0 }), on: "update", description: 'Placeholder text for the search input. When unset it defaults to "Search..."; if `show-search-mode-toggle` is on, the default instead becomes mode-aware ("Search…" in navigate, "Filter…" in filter). An explicit value always wins and stays fixed.' },
|
|
5461
|
+
{ configKey: "selectPlaceholder", attribute: "select-placeholder", converter: A({ default: "Pick an option..." }), on: "update", description: "Placeholder shown on the control when nothing is selected." },
|
|
5462
|
+
{ configKey: "noDataPlaceholder", attribute: "no-data-placeholder", converter: A({ isNullable: !0 }), on: "update", description: "Text shown when there are no options at all." },
|
|
5463
|
+
{ configKey: "dropdownMinWidth", attribute: "dropdown-min-width", converter: A({ isNullable: !0 }), on: "update", description: "Minimum width of the dropdown panel (any CSS length)." },
|
|
5464
|
+
{ configKey: "dropdownMaxWidth", attribute: "dropdown-max-width", converter: A({ isNullable: !0 }), on: "update", description: "Maximum width of the dropdown panel (any CSS length)." },
|
|
5465
|
+
{ configKey: "maxHeight", attribute: "max-height", converter: A({ default: "20rem" }), on: "update", description: "Maximum height of the dropdown list before it scrolls." },
|
|
5466
|
+
{ configKey: "emptyMessage", attribute: "empty-message", converter: A({ default: "No results found" }), on: "update", description: "Message shown when a search yields no matches." },
|
|
5467
|
+
{ configKey: "addNewText", attribute: "add-new-text", converter: A({ isNullable: !0 }), on: "update", description: 'Template for the clickable "add new" prompt shown (when `allow-add-new` is on) in place of the empty message once a search yields no matches. `{value}` is replaced with the typed text. Default: `Add "{value}"`. A `getAddNewTextCallback` wins.' },
|
|
5468
|
+
{ configKey: "addNewPendingText", attribute: "add-new-pending-text", converter: A({ isNullable: !0 }), on: "update", description: 'Template for the pending prompt (spinner + text) shown while an async `addNewCallback` runs. `{value}` is replaced with the typed text. Default: `Adding "{value}"…`.' },
|
|
5469
|
+
{ configKey: "loadingMessage", attribute: "loading-message", converter: A({ default: "Loading..." }), on: "update", description: "Message shown while options are loading." },
|
|
5470
|
+
{ configKey: "removeButtonTooltipText", attribute: "remove-button-tooltip-text", converter: A({ isNullable: !0 }), on: "update", description: "Tooltip text for a badge remove (×) button." },
|
|
5471
|
+
{ configKey: "formFieldId", attribute: "name", converter: A({ isNullable: !0 }), on: "reinit", description: "HTML form field name/id used for the hidden input(s)." },
|
|
5296
5472
|
// ── CSS-var sugar (mirrored to a host style prop in reinit()/update()) ────
|
|
5297
|
-
{ configKey: "dropdownWidth", attribute: "dropdown-width", converter:
|
|
5298
|
-
{ configKey: "selectedPopoverWidth", attribute: "selected-popover-width", converter:
|
|
5473
|
+
{ configKey: "dropdownWidth", attribute: "dropdown-width", converter: A({ isNullable: !0 }), on: "update", description: "Fixed dropdown width; mirrored to the `--ms-dropdown-width` CSS variable." },
|
|
5474
|
+
{ configKey: "selectedPopoverWidth", attribute: "selected-popover-width", converter: A({ isNullable: !0 }), on: "update", description: "Selected-items popover width; mirrored to `--ms-selected-popover-width`." },
|
|
5299
5475
|
// ── Member properties (structural → reinit; optional → nullable) ─────────
|
|
5300
|
-
{ configKey: "valueMember", attribute: "value-member", converter:
|
|
5301
|
-
{ configKey: "displayValueMember", attribute: "display-value-member", converter:
|
|
5302
|
-
{ configKey: "searchValueMember", attribute: "search-value-member", converter:
|
|
5303
|
-
{ configKey: "iconMember", attribute: "icon-member", converter:
|
|
5304
|
-
{ configKey: "subtitleMember", attribute: "subtitle-member", converter:
|
|
5305
|
-
{ configKey: "fullTitleMember", attribute: "full-title-member", converter:
|
|
5306
|
-
{ configKey: "groupMember", attribute: "group-member", converter:
|
|
5307
|
-
{ configKey: "disabledMember", attribute: "disabled-member", converter:
|
|
5476
|
+
{ configKey: "valueMember", attribute: "value-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name on an option object that holds its value." },
|
|
5477
|
+
{ configKey: "displayValueMember", attribute: "display-value-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name that holds an option display label." },
|
|
5478
|
+
{ configKey: "searchValueMember", attribute: "search-value-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name searched against (falls back to the display value)." },
|
|
5479
|
+
{ configKey: "iconMember", attribute: "icon-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name that holds an option icon." },
|
|
5480
|
+
{ configKey: "subtitleMember", attribute: "subtitle-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name that holds an option subtitle." },
|
|
5481
|
+
{ configKey: "fullTitleMember", attribute: "full-title-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name that holds an option full/long title." },
|
|
5482
|
+
{ configKey: "groupMember", attribute: "group-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name used to group options under headers." },
|
|
5483
|
+
{ configKey: "disabledMember", attribute: "disabled-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name that marks an option disabled." },
|
|
5308
5484
|
// ── Tree of options (structural → reinit; optional → nullable) ───────────
|
|
5309
|
-
{ configKey: "pathMember", attribute: "path-member", converter:
|
|
5310
|
-
{ configKey: "parentPathMember", attribute: "parent-path-member", converter:
|
|
5311
|
-
{ configKey: "levelMember", attribute: "level-member", converter:
|
|
5312
|
-
{ configKey: "hasChildrenMember", attribute: "has-children-member", converter:
|
|
5313
|
-
{ configKey: "isSelectableMember", attribute: "is-selectable-member", converter:
|
|
5314
|
-
{ configKey: "treePathSeparator", attribute: "tree-path-separator", converter:
|
|
5315
|
-
{ configKey: "isTreeEnabled", converter:
|
|
5485
|
+
{ configKey: "pathMember", attribute: "path-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name holding a node materialized tree path." },
|
|
5486
|
+
{ configKey: "parentPathMember", attribute: "parent-path-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name holding a node parent path." },
|
|
5487
|
+
{ configKey: "levelMember", attribute: "level-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name holding a node depth level." },
|
|
5488
|
+
{ configKey: "hasChildrenMember", attribute: "has-children-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name flagging that a node has children." },
|
|
5489
|
+
{ configKey: "isSelectableMember", attribute: "is-selectable-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name marking whether a node can be selected." },
|
|
5490
|
+
{ configKey: "treePathSeparator", attribute: "tree-path-separator", converter: A({ default: "." }), reflect: !0, on: "reinit", description: "Separator between segments in a materialized tree path." },
|
|
5491
|
+
{ configKey: "isTreeEnabled", converter: H("tristate"), on: "reinit", type: "boolean", description: "Force tree mode on/off. Property-only; when unset (null) tree mode auto-enables if a path source (path-member / getPathCallback) is present." },
|
|
5316
5492
|
{
|
|
5317
5493
|
configKey: "checkboxMode",
|
|
5318
5494
|
attribute: "checkbox-mode",
|
|
5319
|
-
converter:
|
|
5495
|
+
converter: j(["independent", "cascade"], { default: "independent" }),
|
|
5320
5496
|
reflect: !0,
|
|
5321
5497
|
on: "update",
|
|
5322
5498
|
description: "Tree checkbox interaction.\n- `independent` (default) — toggles only the clicked node.\n- `cascade` — checks a node whole subtree and shows a tristate (checked / indeterminate / unchecked) box on branches.\n\nTree + multiple only."
|
|
@@ -5324,29 +5500,29 @@ const Oo = `@layer variables,component,overrides;@layer variables{:host{display:
|
|
|
5324
5500
|
{
|
|
5325
5501
|
configKey: "cascadeSelectPolicy",
|
|
5326
5502
|
attribute: "cascade-select-policy",
|
|
5327
|
-
converter:
|
|
5503
|
+
converter: j(["rolled-up", "leaves", "all"], { default: "rolled-up" }),
|
|
5328
5504
|
reflect: !0,
|
|
5329
5505
|
on: "update",
|
|
5330
5506
|
description: "In `cascade` mode, which values a selection emits (badges / form / change):\n- `rolled-up` (default) — minimal cover: a fully-selected subtree collapses to its root; partially-selected branches emit their individually-checked descendants.\n- `leaves` — only the checked leaf-level nodes.\n- `all` — every fully-checked node (branches and leaves)."
|
|
5331
5507
|
},
|
|
5332
5508
|
// ── Enums ────────────────────────────────────────────────────────────────
|
|
5333
|
-
{ configKey: "badgesDisplayMode", attribute: "badges-display-mode", converter:
|
|
5334
|
-
{ configKey: "badgesPosition", attribute: "badges-position", converter:
|
|
5335
|
-
{ configKey: "badgesThresholdMode", attribute: "badges-threshold-mode", converter:
|
|
5336
|
-
{ configKey: "searchInputMode", attribute: "search-input-mode", converter:
|
|
5337
|
-
{ configKey: "searchMode", attribute: "search-mode", converter:
|
|
5338
|
-
{ configKey: "overlayGroup", attribute: "overlay-group", converter:
|
|
5339
|
-
{ configKey: "actionsLayout", attribute: "actions-layout", converter:
|
|
5340
|
-
{ configKey: "actionsPosition", attribute: "actions-position", converter:
|
|
5341
|
-
{ configKey: "actionsAlign", attribute: "actions-align", converter:
|
|
5342
|
-
{ configKey: "checkboxAlign", attribute: "checkbox-align", converter:
|
|
5343
|
-
{ configKey: "valueFormat", attribute: "value-format", converter:
|
|
5344
|
-
{ configKey: "badgeTooltipPlacement", attribute: "badge-tooltip-placement", converter:
|
|
5345
|
-
{ configKey: "optionTooltipPlacement", attribute: "option-tooltip-placement", converter:
|
|
5509
|
+
{ configKey: "badgesDisplayMode", attribute: "badges-display-mode", converter: j(["badges", "count", "compact", "partial", "none"], { default: "badges" }), on: "reinit", description: "How the current selection is shown in the control." },
|
|
5510
|
+
{ configKey: "badgesPosition", attribute: "badges-position", converter: j(["top", "bottom", "left", "right"], { default: "bottom" }), on: "reinit", description: "Where the badges/selection appear relative to the input." },
|
|
5511
|
+
{ configKey: "badgesThresholdMode", attribute: "badges-threshold-mode", converter: j(["count", "partial"], { default: "count" }), on: "update", description: 'How `badgesThreshold` is interpreted: collapse to a count badge, or keep partial badges + a "more" badge.' },
|
|
5512
|
+
{ configKey: "searchInputMode", attribute: "search-input-mode", converter: j(["normal", "readonly", "hidden"], { default: "normal" }), on: "reinit", description: "Search field mode: editable, read-only, or hidden." },
|
|
5513
|
+
{ configKey: "searchMode", attribute: "search-mode", converter: j(["filter", "navigate"], { default: "filter" }), on: "reinit", description: "Whether typing filters the list or navigates it." },
|
|
5514
|
+
{ configKey: "overlayGroup", attribute: "overlay-group", converter: A({ isNullable: !0 }), on: "reinit", description: 'Scope the "one overlay open at a time" coordination to a named group. Overlays (multiselects, datepickers, external popovers) sharing a group dismiss each other when one opens; different groups are independent. Unset = the default (ungrouped) group.' },
|
|
5515
|
+
{ configKey: "actionsLayout", attribute: "actions-layout", converter: j(["nowrap", "wrap"], { default: "nowrap" }), on: "reinit", description: "Whether the action bar wraps or stays on one line." },
|
|
5516
|
+
{ configKey: "actionsPosition", attribute: "actions-position", converter: j(["top", "bottom"], { default: "top" }), on: "reinit", description: "Whether the action bar sits above or below the list." },
|
|
5517
|
+
{ configKey: "actionsAlign", attribute: "actions-align", converter: j(["stretch", "left", "right", "center", "space-between"], { default: "stretch" }), on: "update", description: "Horizontal alignment of the action buttons." },
|
|
5518
|
+
{ configKey: "checkboxAlign", attribute: "checkbox-align", converter: j(["top", "center", "bottom"], { default: "center" }), on: "update", description: "Vertical alignment of an option checkbox." },
|
|
5519
|
+
{ configKey: "valueFormat", attribute: "value-format", converter: j(["json", "csv", "array"], { default: "json" }), on: "reinit", description: "Serialization format the control emits its value in." },
|
|
5520
|
+
{ configKey: "badgeTooltipPlacement", attribute: "badge-tooltip-placement", converter: j(Ys, { default: "top" }), on: "update", description: "Preferred placement of a badge tooltip relative to its badge (floating-ui placement)." },
|
|
5521
|
+
{ configKey: "optionTooltipPlacement", attribute: "option-tooltip-placement", converter: j(Ys, { default: "top-start" }), on: "update", description: "Preferred placement of an option tooltip (floating-ui placement)." },
|
|
5346
5522
|
{
|
|
5347
5523
|
configKey: "mobilePresentation",
|
|
5348
5524
|
attribute: "mobile-presentation",
|
|
5349
|
-
converter:
|
|
5525
|
+
converter: j(["auto", "floating", "fullscreen"], { default: "auto" }),
|
|
5350
5526
|
reflect: !0,
|
|
5351
5527
|
on: "update",
|
|
5352
5528
|
description: "How the open dropdown is presented on phones. `auto` (default) keeps the floating panel on desktop/tablet and switches to a full-screen overlay on phone-sized touch devices (touch primary + shorter viewport side < 600px, orientation-robust); `floating` forces the anchored panel everywhere; `fullscreen` forces the full-screen overlay on any device (handy for previews/testing). Resolved reactively from the device/viewport environment."
|
|
@@ -5354,7 +5530,7 @@ const Oo = `@layer variables,component,overrides;@layer variables{:host{display:
|
|
|
5354
5530
|
{
|
|
5355
5531
|
configKey: "fullscreenAutofocus",
|
|
5356
5532
|
attribute: "fullscreen-autofocus",
|
|
5357
|
-
converter:
|
|
5533
|
+
converter: H("default-false"),
|
|
5358
5534
|
on: "update",
|
|
5359
5535
|
description: "In the phone fullscreen overlay, auto-focus the search field on open (pops the soft keyboard immediately). Default `false`: the sheet opens with the list visible and the keyboard closed, appearing only when the user taps the search. Set `true` to type-to-filter right away. No effect in the floating presentation."
|
|
5360
5536
|
},
|
|
@@ -5373,35 +5549,35 @@ const Oo = `@layer variables,component,overrides;@layer variables{:host{display:
|
|
|
5373
5549
|
{ configKey: "optionTooltipDelay", attribute: "option-tooltip-delay", converter: X(), on: "update", description: "Delay in ms before an option tooltip appears (falls back to badgeTooltipDelay)." },
|
|
5374
5550
|
{ configKey: "optionTooltipOffset", attribute: "option-tooltip-offset", converter: X(), on: "update", description: "Gap in px between an option and its tooltip." },
|
|
5375
5551
|
// ── Booleans (default true) ──────────────────────────────────────────────
|
|
5376
|
-
{ configKey: "isMultipleEnabled", attribute: "multiple", converter:
|
|
5377
|
-
{ configKey: "isGroupsAllowed", attribute: "allow-groups", converter:
|
|
5378
|
-
{ configKey: "isCheckboxesShown", attribute: "show-checkboxes", converter:
|
|
5379
|
-
{ configKey: "isActionsSticky", attribute: "sticky-actions", converter:
|
|
5380
|
-
{ configKey: "isPlacementLocked", attribute: "lock-placement", converter:
|
|
5381
|
-
{ configKey: "isSearchEnabled", attribute: "enable-search", converter:
|
|
5382
|
-
{ configKey: "isKeepOptionsOnSearch", attribute: "keep-options-on-search", converter:
|
|
5383
|
-
{ configKey: "shouldKeepSearchOnClose", attribute: "should-keep-search-on-close", converter:
|
|
5384
|
-
{ configKey: "isSelectedPopoverEnabled", attribute: "enable-selected-popover", converter:
|
|
5552
|
+
{ configKey: "isMultipleEnabled", attribute: "multiple", converter: H("default-true"), on: "reinit", description: "Allow selecting multiple options. When off, selecting one replaces the previous." },
|
|
5553
|
+
{ configKey: "isGroupsAllowed", attribute: "allow-groups", converter: H("default-true"), on: "reinit", description: "Allow grouping options under group headers." },
|
|
5554
|
+
{ configKey: "isCheckboxesShown", attribute: "show-checkboxes", converter: H("default-true"), on: "reinit", description: "Show a checkbox on each option." },
|
|
5555
|
+
{ configKey: "isActionsSticky", attribute: "sticky-actions", converter: H("default-true"), on: "update", description: "Keep the action bar pinned while the list scrolls." },
|
|
5556
|
+
{ configKey: "isPlacementLocked", attribute: "lock-placement", converter: H("default-true"), on: "update", description: "Keep the dropdown initial placement instead of flipping when it fits." },
|
|
5557
|
+
{ configKey: "isSearchEnabled", attribute: "enable-search", converter: H("default-true"), on: "reinit", description: "Show the search input." },
|
|
5558
|
+
{ configKey: "isKeepOptionsOnSearch", attribute: "keep-options-on-search", converter: H("default-true"), on: "update", description: "Keep already-selected options visible while filtering." },
|
|
5559
|
+
{ configKey: "shouldKeepSearchOnClose", attribute: "should-keep-search-on-close", converter: H("default-true"), on: "update", description: "Preserve the search text after the dropdown closes." },
|
|
5560
|
+
{ configKey: "isSelectedPopoverEnabled", attribute: "enable-selected-popover", converter: H("default-true"), on: "update", description: 'Allow the selected-items popover to open (from the count/compact/"+X more" badge or the in-input counter). Turn off when you render your own selection UI, so those affordances become inert.' },
|
|
5385
5561
|
// ── Booleans (default false) ─────────────────────────────────────────────
|
|
5386
|
-
{ configKey: "isCloseOnSelect", attribute: "close-on-select", converter:
|
|
5387
|
-
{ configKey: "isAddNewAllowed", attribute: "allow-add-new", converter:
|
|
5388
|
-
{ configKey: "isCounterShown", attribute: "show-counter", converter:
|
|
5389
|
-
{ configKey: "isClearShown", attribute: "show-clear", converter:
|
|
5390
|
-
{ configKey: "isBadgeFullTitleShown", attribute: "show-badge-full-title", converter:
|
|
5391
|
-
{ configKey: "isVirtualScrollEnabled", attribute: "enable-virtual-scroll", converter:
|
|
5392
|
-
{ configKey: "isBadgeTooltipsEnabled", attribute: "enable-badge-tooltips", converter:
|
|
5393
|
-
{ configKey: "isOptionTooltipsEnabled", attribute: "enable-option-tooltips", converter:
|
|
5394
|
-
{ configKey: "isOptionTooltipFollowCursor", attribute: "option-tooltip-follow-cursor", converter:
|
|
5395
|
-
{ configKey: "isSearchModeToggleShown", attribute: "show-search-mode-toggle", converter:
|
|
5562
|
+
{ configKey: "isCloseOnSelect", attribute: "close-on-select", converter: H("default-false"), on: "update", description: "Close the dropdown immediately after a selection." },
|
|
5563
|
+
{ configKey: "isAddNewAllowed", attribute: "allow-add-new", converter: H("default-false"), on: "reinit", description: "Allow adding a new option from the search text." },
|
|
5564
|
+
{ configKey: "isCounterShown", attribute: "show-counter", converter: H("default-false"), on: "update", description: "Show a selected-count indicator." },
|
|
5565
|
+
{ configKey: "isClearShown", attribute: "show-clear", converter: H("default-false"), on: "update", description: "Show an inline clear (✕) button inside the input that wipes the whole selection. Appears only while something is selected and the control is enabled; clicking it clears the selection and any search text, fires `change`, and refocuses." },
|
|
5566
|
+
{ configKey: "isBadgeFullTitleShown", attribute: "show-badge-full-title", converter: H("default-false"), on: "update", description: "Show the full title on badges instead of the short label." },
|
|
5567
|
+
{ configKey: "isVirtualScrollEnabled", attribute: "enable-virtual-scroll", converter: H("default-false"), on: "reinit", description: "Force virtual scrolling on regardless of the threshold." },
|
|
5568
|
+
{ configKey: "isBadgeTooltipsEnabled", attribute: "enable-badge-tooltips", converter: H("default-false"), on: "update", description: "Enable tooltips on badges." },
|
|
5569
|
+
{ configKey: "isOptionTooltipsEnabled", attribute: "enable-option-tooltips", converter: H("default-false"), on: "update", description: "Enable tooltips on options." },
|
|
5570
|
+
{ configKey: "isOptionTooltipFollowCursor", attribute: "option-tooltip-follow-cursor", converter: H("default-false"), on: "update", description: "Make option tooltips follow the pointer." },
|
|
5571
|
+
{ configKey: "isSearchModeToggleShown", attribute: "show-search-mode-toggle", converter: H("default-false"), on: "update", description: "Show a clickable toggle in the phone fullscreen overlay search header that flips `search-mode` between `filter` and `navigate` live. Fullscreen-only; no effect in the floating presentation or when search is disabled." },
|
|
5396
5572
|
// ── Special attributes ───────────────────────────────────────────────────
|
|
5397
5573
|
{ configKey: "initialValues", attribute: "initial-values", converter: cn(), default: [], on: "reinit", type: "Array<string | number>", description: 'Values selected on first render. Accepts a JSON array (`["a","b"]`) or a bare CSV (`a,b,c`).' },
|
|
5398
|
-
{ configKey: "showDebugInfo", attribute: "show-debug-info", converter:
|
|
5574
|
+
{ configKey: "showDebugInfo", attribute: "show-debug-info", converter: H("default-false"), on: "update", description: "Render an in-component debug panel.", deprecated: "Use per-instance logging (el.enableLogging()) instead." },
|
|
5399
5575
|
// ── Complex property (data) ──────────────────────────────────────────────
|
|
5400
5576
|
{ configKey: "options", converter: Ko(), on: "reinit", type: "ReadonlyArray<Record<string, unknown>>", description: "The array of option objects to render. The JS API — assign `el.options` directly. For HTML authoring use the `data-options` attribute (parsed per `data-options-format`) or declarative <option> children; both feed the same list and take precedence over this property in the order: <option> children > property > data-options." },
|
|
5401
|
-
{ configKey: "optionsSource", attribute: "data-options", converter:
|
|
5402
|
-
{ configKey: "optionsFormat", attribute: "data-options-format", converter:
|
|
5403
|
-
{ configKey: "optionsSplitter", attribute: "data-options-splitter", converter:
|
|
5404
|
-
{ configKey: "optionsRowSplitter", attribute: "data-options-row-splitter", converter:
|
|
5577
|
+
{ configKey: "optionsSource", attribute: "data-options", converter: A({ isNullable: !0 }), on: "reinit", type: "string", description: "HTML-authoring source for the option list, parsed per `data-options-format`. Reactive: changing either attribute re-renders. Prefer the `options` property in JS; a set `options` property and declarative <option> children both win over this." },
|
|
5578
|
+
{ configKey: "optionsFormat", attribute: "data-options-format", converter: j(dn, { default: "json" }), on: "reinit", type: "'json' | 'csv' | 'plain'", description: "How to parse the `data-options` attribute: `json` (a JSON array of objects or [value, label] tuples), `csv` (rows split on `data-options-row-splitter`, cells on `data-options-splitter`; the first row is a header — map columns via *-member), or `plain` (bare values split on both splitters -> [value, label] tuples, value === label). Default `json`." },
|
|
5579
|
+
{ configKey: "optionsSplitter", attribute: "data-options-splitter", converter: A({ default: "," }), on: "reinit", type: "string", description: 'Field/cell delimiter for the `csv` and `plain` `data-options` formats. Default `,`. Escapes `\\t` `\\n` `\\r` are honoured (e.g. `data-options-splitter="\\t"` for TSV). Ignored for `json`.' },
|
|
5580
|
+
{ configKey: "optionsRowSplitter", attribute: "data-options-row-splitter", converter: A({ default: `
|
|
5405
5581
|
` }), on: "reinit", type: "string", description: 'Row/record delimiter for the `csv` and `plain` `data-options` formats. Default newline. Escapes honoured (e.g. `data-options-row-splitter=";"` for single-line data). Ignored for `json`.' },
|
|
5406
5582
|
{ configKey: "actionButtons", converter: Fo({ validate: (s) => Array.isArray(s) }), on: "reinit", type: "Array<Record<string, unknown>>", description: "Custom action buttons for the dropdown footer/header. Property-only; when unset the default Select-All / Clear buttons apply." },
|
|
5407
5583
|
// ── Callbacks: data shape (structural → reinit) ──────────────────────────
|
|
@@ -5436,21 +5612,23 @@ const Oo = `@layer variables,component,overrides;@layer variables{:host{display:
|
|
|
5436
5612
|
{ configKey: "beforeSearchCallback", converter: N(), on: "update", type: "(searchTerm: string) => string | null", description: "Runs before a search; return a rewritten term or null to veto." },
|
|
5437
5613
|
{ configKey: "beforeSelectCallback", converter: N(), on: "update", type: "(option: unknown, selectedOptions: unknown[]) => boolean | string | void", description: "Runs before selecting; return false to veto, or a string to veto and show it as a message." },
|
|
5438
5614
|
{ configKey: "beforeDeselectCallback", converter: N(), on: "update", type: "(option: unknown, selectedOptions: unknown[]) => boolean | string | void", description: "Runs before deselecting; return false to veto, or a string to veto and show it as a message." },
|
|
5439
|
-
{ configKey: "addNewCallback", converter: N(), on: "update", type: "(value: string) => unknown | Promise<unknown>", description: "Create a new option from the typed text." },
|
|
5615
|
+
{ configKey: "addNewCallback", converter: N(), on: "update", type: "(value: string) => unknown | null | undefined | Promise<unknown | null | undefined>", description: "Create a new option from the typed text. May return a rich option object (renders via the same get*/render* callbacks as any option). Async + cancelable: return null/undefined to abort (no add, no `add` event). Omit entirely to handle creation yourself via the `add` event." },
|
|
5616
|
+
{ configKey: "getAddNewTextCallback", converter: N(), on: "update", type: "(value: string) => string", description: 'Dynamically compute the "add new" prompt label from the typed text (returns plain text). Takes precedence over `add-new-text`.' },
|
|
5440
5617
|
{ configKey: "keydownCallback", converter: N(), on: "update", type: "(context: MultiSelectKeydownContext) => boolean | void", description: "Intercept keydown before built-in handling; return true to suppress the default. Gets the event, current state, and an imperative controller." }
|
|
5441
5618
|
], bn = [
|
|
5442
5619
|
{ name: "select", description: "An option was selected. `detail.option` is the selected option; `detail.selectedOptions`/`detail.selectedValues` are the full selection." },
|
|
5443
5620
|
{ name: "deselect", description: "An option was removed from the selection. `detail.option` is that option." },
|
|
5444
|
-
{ name: "change", description: "The selection changed. `detail.selectedOptions`/`detail.selectedValues` are the full selection." }
|
|
5445
|
-
|
|
5621
|
+
{ name: "change", description: "The selection changed. `detail.selectedOptions`/`detail.selectedValues` are the full selection." },
|
|
5622
|
+
{ name: "add", description: 'The user chose to create a new option from the typed text (via the "add new" prompt or Enter) — requires `allow-add-new`. `detail.value` is the typed text; `detail.option` is the created item when `addNewCallback` produced one.' }
|
|
5623
|
+
], Js = /* @__PURE__ */ new Set(["dropdownWidth", "selectedPopoverWidth", "showDebugInfo", "initialValues", "optionsSource", "optionsFormat", "optionsSplitter", "optionsRowSplitter", "mobilePresentation", "collapseBadgesBelow"]), bt = {
|
|
5446
5624
|
dropdownWidth: "--ms-dropdown-width",
|
|
5447
5625
|
selectedPopoverWidth: "--ms-selected-popover-width"
|
|
5448
5626
|
};
|
|
5449
5627
|
let vn = null;
|
|
5450
|
-
function
|
|
5451
|
-
return vn ?? (vn = Ai(
|
|
5628
|
+
function wn() {
|
|
5629
|
+
return vn ?? (vn = Ai(Po, "--ms-"));
|
|
5452
5630
|
}
|
|
5453
|
-
const
|
|
5631
|
+
const yn = [
|
|
5454
5632
|
{ key: "valueMember", member: "value", callbackKey: "getValueCallback" },
|
|
5455
5633
|
{ key: "displayValueMember", member: "label", callbackKey: "getDisplayValueCallback" },
|
|
5456
5634
|
{ key: "groupMember", member: "group", callbackKey: "getGroupCallback" },
|
|
@@ -5458,26 +5636,26 @@ const wn = [
|
|
|
5458
5636
|
{ key: "subtitleMember", member: "subtitle", callbackKey: "getSubtitleCallback" },
|
|
5459
5637
|
{ key: "disabledMember", member: "disabled", callbackKey: "getDisabledCallback" }
|
|
5460
5638
|
];
|
|
5461
|
-
var Z,
|
|
5462
|
-
class
|
|
5639
|
+
var Z, k, fe, dt, ht, ut, He, Fe, Ie, x, xt, ge, _t, is, rs, ns, as, Oo, Mo, Lo, et, ls, Eo, Ao, zo, cs, No, $o, ds, hs;
|
|
5640
|
+
class st extends Yt {
|
|
5463
5641
|
constructor() {
|
|
5464
5642
|
super();
|
|
5465
5643
|
L(this, x);
|
|
5466
5644
|
L(this, Z);
|
|
5467
|
-
L(this,
|
|
5645
|
+
L(this, k);
|
|
5468
5646
|
L(this, fe);
|
|
5469
|
-
L(this,
|
|
5647
|
+
L(this, dt, null);
|
|
5470
5648
|
// Dev-mode customStylesCallback lint: unknown --ms-* names already warned about.
|
|
5471
|
-
L(this,
|
|
5649
|
+
L(this, ht, /* @__PURE__ */ new Set());
|
|
5472
5650
|
// Declarative <option>/<optgroup> state (parsed once from light DOM).
|
|
5473
|
-
L(this,
|
|
5651
|
+
L(this, ut, !1);
|
|
5474
5652
|
L(this, He, !1);
|
|
5475
5653
|
L(this, Fe);
|
|
5476
5654
|
L(this, Ie);
|
|
5477
5655
|
// ── container-responsive badge collapse (core §12.9 `resized`) ─────────────
|
|
5478
5656
|
/** Whether the live picker is currently forced to the collapsed count view. */
|
|
5479
5657
|
L(this, ge, !1);
|
|
5480
|
-
|
|
5658
|
+
P(this, Z, this.attachShadow({ mode: "open" })), Li(h(this, Z), Po), typeof requestAnimationFrame == "function" ? requestAnimationFrame(() => this.setAttribute("data-ready", "")) : this.setAttribute("data-ready", "");
|
|
5481
5659
|
}
|
|
5482
5660
|
/**
|
|
5483
5661
|
* Called by the browser when the surrounding <form> is reset. Clears the
|
|
@@ -5485,7 +5663,7 @@ class tt extends Yt {
|
|
|
5485
5663
|
*/
|
|
5486
5664
|
formResetCallback() {
|
|
5487
5665
|
var t;
|
|
5488
|
-
(t = h(this,
|
|
5666
|
+
(t = h(this, k)) == null || t.clearAll();
|
|
5489
5667
|
}
|
|
5490
5668
|
// ── core lifecycle hooks ──────────────────────────────────────────────────
|
|
5491
5669
|
/** Runtime writing-direction switch (core observes `dir`): re-mirror the live
|
|
@@ -5494,28 +5672,28 @@ class tt extends Yt {
|
|
|
5494
5672
|
* and the panels' explicit `dir`). The initial direction is read by the build. */
|
|
5495
5673
|
directionChanged(t) {
|
|
5496
5674
|
var o;
|
|
5497
|
-
(o = h(this,
|
|
5675
|
+
(o = h(this, k)) == null || o.refreshDirection();
|
|
5498
5676
|
}
|
|
5499
5677
|
/** Structural change (or first connect): mirror CSS vars, then (re)build the picker. */
|
|
5500
5678
|
reinit() {
|
|
5501
|
-
|
|
5679
|
+
b(this, x, Ao).call(this), this.isConnected && b(this, x, ns).call(this);
|
|
5502
5680
|
}
|
|
5503
5681
|
/** Cosmetic change: mirror CSS vars / custom styles / debug, patch the picker in place. */
|
|
5504
5682
|
update(t) {
|
|
5505
|
-
|
|
5683
|
+
b(this, x, zo).call(this, t), "customStylesCallback" in t && b(this, x, ls).call(this), "showDebugInfo" in t && b(this, x, ds).call(this);
|
|
5506
5684
|
const o = {};
|
|
5507
5685
|
for (const [i, r] of Object.entries(t))
|
|
5508
5686
|
Js.has(i) || (o[i] = r === null ? void 0 : r);
|
|
5509
|
-
h(this,
|
|
5687
|
+
h(this, k) && Object.keys(o).length > 0 && (h(this, k).updateOptions(o) || b(this, x, ns).call(this)), "mobilePresentation" in t && b(this, x, xt).call(this, It()), "collapseBadgesBelow" in t && b(this, x, _t).call(this, this.getBoundingClientRect().width);
|
|
5510
5688
|
}
|
|
5511
5689
|
/** Activate: ensure the picker exists (a DOM move destroyed it in disconnect()). */
|
|
5512
5690
|
connect() {
|
|
5513
|
-
h(this,
|
|
5691
|
+
h(this, k) || b(this, x, as).call(this);
|
|
5514
5692
|
}
|
|
5515
5693
|
/** Deactivate: tear the picker down (rebuilt on the next connect). */
|
|
5516
5694
|
disconnect() {
|
|
5517
5695
|
var t;
|
|
5518
|
-
(t = h(this,
|
|
5696
|
+
(t = h(this, k)) == null || t.destroy(), P(this, k, void 0);
|
|
5519
5697
|
}
|
|
5520
5698
|
/**
|
|
5521
5699
|
* Device/viewport/orientation changed (core §12.9). Overriding this opts the
|
|
@@ -5526,7 +5704,7 @@ class tt extends Yt {
|
|
|
5526
5704
|
* set before the dropdown can open.
|
|
5527
5705
|
*/
|
|
5528
5706
|
environmentChanged(t) {
|
|
5529
|
-
|
|
5707
|
+
b(this, x, xt).call(this, t);
|
|
5530
5708
|
}
|
|
5531
5709
|
/**
|
|
5532
5710
|
* This element's own border box changed (core §12.9 `resized`). Overriding the
|
|
@@ -5537,7 +5715,7 @@ class tt extends Yt {
|
|
|
5537
5715
|
* below` is set; otherwise it's a cheap no-op.
|
|
5538
5716
|
*/
|
|
5539
5717
|
resized({ width: t }) {
|
|
5540
|
-
|
|
5718
|
+
b(this, x, _t).call(this, t);
|
|
5541
5719
|
}
|
|
5542
5720
|
// ── non-input public API ──────────────────────────────────────────────────
|
|
5543
5721
|
/** Form field name (mirrors the `name` attribute → `formFieldId`). */
|
|
@@ -5549,21 +5727,21 @@ class tt extends Yt {
|
|
|
5549
5727
|
}
|
|
5550
5728
|
get selectedValue() {
|
|
5551
5729
|
var t;
|
|
5552
|
-
return this.flush(), ((t = h(this,
|
|
5730
|
+
return this.flush(), ((t = h(this, k)) == null ? void 0 : t.selectedValue) ?? null;
|
|
5553
5731
|
}
|
|
5554
5732
|
get selectedItem() {
|
|
5555
5733
|
var t;
|
|
5556
|
-
return this.flush(), ((t = h(this,
|
|
5734
|
+
return this.flush(), ((t = h(this, k)) == null ? void 0 : t.selectedItem) ?? null;
|
|
5557
5735
|
}
|
|
5558
5736
|
getSelected() {
|
|
5559
|
-
return this.flush(), h(this,
|
|
5737
|
+
return this.flush(), h(this, k) ? h(this, k).getSelected() : [];
|
|
5560
5738
|
}
|
|
5561
5739
|
setSelected(t, o = {}) {
|
|
5562
5740
|
var i;
|
|
5563
|
-
this.flush(), (i = h(this,
|
|
5741
|
+
this.flush(), (i = h(this, k)) == null || i.setSelected(t, o);
|
|
5564
5742
|
}
|
|
5565
5743
|
getValue() {
|
|
5566
|
-
return this.flush(), h(this,
|
|
5744
|
+
return this.flush(), h(this, k) ? h(this, k).getValue() : null;
|
|
5567
5745
|
}
|
|
5568
5746
|
/**
|
|
5569
5747
|
* Surface a transient message ("toast") on top of the component — visible even in the
|
|
@@ -5574,47 +5752,97 @@ class tt extends Yt {
|
|
|
5574
5752
|
*/
|
|
5575
5753
|
showMessage(t, o) {
|
|
5576
5754
|
var i;
|
|
5577
|
-
this.flush(), (i = h(this,
|
|
5755
|
+
this.flush(), (i = h(this, k)) == null || i.showMessage(t, o);
|
|
5578
5756
|
}
|
|
5579
5757
|
/** Dismiss the transient message shown by {@link showMessage}, if any. */
|
|
5580
5758
|
hideMessage() {
|
|
5581
5759
|
var t;
|
|
5582
|
-
(t = h(this,
|
|
5760
|
+
(t = h(this, k)) == null || t.hideMessage();
|
|
5761
|
+
}
|
|
5762
|
+
// ── scroll-to API ───────────────────────────────────────────────────────────
|
|
5763
|
+
/**
|
|
5764
|
+
* Clear the search box and restore the full option list (does not touch the selection — use
|
|
5765
|
+
* {@link clearAll} for that). Pair with {@link scrollToValue} to reveal then scroll to an option
|
|
5766
|
+
* a search had filtered out: `el.clearSearch(); el.scrollToValue(v)`.
|
|
5767
|
+
*/
|
|
5768
|
+
clearSearch() {
|
|
5769
|
+
var t;
|
|
5770
|
+
this.flush(), (t = h(this, k)) == null || t.clearSearch();
|
|
5771
|
+
}
|
|
5772
|
+
/** The current search box text (empty string when nothing is typed). Read via this getter, write with {@link search}. */
|
|
5773
|
+
get searchText() {
|
|
5774
|
+
var t;
|
|
5775
|
+
return this.flush(), ((t = h(this, k)) == null ? void 0 : t.searchText) ?? "";
|
|
5776
|
+
}
|
|
5777
|
+
/**
|
|
5778
|
+
* Programmatically set the search text and filter, as if the user typed it (runs
|
|
5779
|
+
* `beforeSearchCallback` / `minSearchLength` / async `searchCallback`). Does not open the dropdown
|
|
5780
|
+
* — call {@link open} if you want it visible. Pass `''` to clear (same as {@link clearSearch}).
|
|
5781
|
+
*/
|
|
5782
|
+
search(t) {
|
|
5783
|
+
var o;
|
|
5784
|
+
this.flush(), (o = h(this, k)) == null || o.search(t);
|
|
5785
|
+
}
|
|
5786
|
+
/**
|
|
5787
|
+
* Scroll the open dropdown to the option at `index` (into the current filtered list). Returns
|
|
5788
|
+
* false if closed or out of range. Deferred internally so `el.open(); el.scrollToIndex(i)` works.
|
|
5789
|
+
*/
|
|
5790
|
+
scrollToIndex(t, o) {
|
|
5791
|
+
var i;
|
|
5792
|
+
return this.flush(), ((i = h(this, k)) == null ? void 0 : i.scrollToIndex(t, o)) ?? !1;
|
|
5793
|
+
}
|
|
5794
|
+
/**
|
|
5795
|
+
* Scroll the open dropdown to the option with this `value`. Returns false if it isn't in the
|
|
5796
|
+
* currently visible list (filtered out by search, or under a collapsed tree branch) — call
|
|
5797
|
+
* {@link clearSearch} / expand first.
|
|
5798
|
+
*/
|
|
5799
|
+
scrollToValue(t, o) {
|
|
5800
|
+
var i;
|
|
5801
|
+
return this.flush(), ((i = h(this, k)) == null ? void 0 : i.scrollToValue(t, o)) ?? !1;
|
|
5802
|
+
}
|
|
5803
|
+
/**
|
|
5804
|
+
* Scroll to a group: its header in standard rendering, or the group's first option in
|
|
5805
|
+
* virtual-scroll mode (no headers there). Returns false in tree mode or if the group is empty
|
|
5806
|
+
* in the current filtered list.
|
|
5807
|
+
*/
|
|
5808
|
+
scrollToGroup(t, o) {
|
|
5809
|
+
var i;
|
|
5810
|
+
return this.flush(), ((i = h(this, k)) == null ? void 0 : i.scrollToGroup(t, o)) ?? !1;
|
|
5583
5811
|
}
|
|
5584
5812
|
// ── imperative open/close API (flush pending writes, then delegate) ─────────
|
|
5585
5813
|
/** Open the dropdown. */
|
|
5586
5814
|
open() {
|
|
5587
5815
|
var t;
|
|
5588
|
-
this.flush(), (t = h(this,
|
|
5816
|
+
this.flush(), (t = h(this, k)) == null || t.open();
|
|
5589
5817
|
}
|
|
5590
5818
|
/** Close the dropdown. */
|
|
5591
5819
|
close() {
|
|
5592
5820
|
var t;
|
|
5593
|
-
this.flush(), (t = h(this,
|
|
5821
|
+
this.flush(), (t = h(this, k)) == null || t.close();
|
|
5594
5822
|
}
|
|
5595
5823
|
/** Toggle the dropdown open/closed. */
|
|
5596
5824
|
toggle() {
|
|
5597
5825
|
var t;
|
|
5598
|
-
this.flush(), (t = h(this,
|
|
5826
|
+
this.flush(), (t = h(this, k)) == null || t.toggle();
|
|
5599
5827
|
}
|
|
5600
5828
|
/** Whether the dropdown is currently open. Assigning opens/closes it. */
|
|
5601
5829
|
get isOpen() {
|
|
5602
5830
|
var t;
|
|
5603
|
-
return this.flush(), ((t = h(this,
|
|
5831
|
+
return this.flush(), ((t = h(this, k)) == null ? void 0 : t.isOpen) ?? !1;
|
|
5604
5832
|
}
|
|
5605
5833
|
set isOpen(t) {
|
|
5606
|
-
this.flush(), h(this,
|
|
5834
|
+
this.flush(), h(this, k) && (h(this, k).isOpen = t);
|
|
5607
5835
|
}
|
|
5608
5836
|
destroy() {
|
|
5609
5837
|
var t;
|
|
5610
|
-
(t = h(this,
|
|
5838
|
+
(t = h(this, k)) == null || t.destroy();
|
|
5611
5839
|
}
|
|
5612
5840
|
}
|
|
5613
|
-
Z = new WeakMap(),
|
|
5614
|
-
|
|
5841
|
+
Z = new WeakMap(), k = new WeakMap(), fe = new WeakMap(), dt = new WeakMap(), ht = new WeakMap(), ut = new WeakMap(), He = new WeakMap(), Fe = new WeakMap(), Ie = new WeakMap(), x = new WeakSet(), /** Resolve `mobile-presentation` against `env` and relay it to the live picker. */
|
|
5842
|
+
xt = function(t) {
|
|
5615
5843
|
var r;
|
|
5616
|
-
const o = this.config.mobilePresentation ?? "auto", i =
|
|
5617
|
-
(r = h(this,
|
|
5844
|
+
const o = this.config.mobilePresentation ?? "auto", i = Di(o, t);
|
|
5845
|
+
(r = h(this, k)) == null || r.setPresentation(i === "modal" ? "fullscreen" : i);
|
|
5618
5846
|
}, ge = new WeakMap(), /**
|
|
5619
5847
|
* Resolve `collapse-badges-below` against `width` and relay the decision to the
|
|
5620
5848
|
* live picker. The override is pushed via `updateOptions` (never written back to
|
|
@@ -5622,34 +5850,34 @@ wt = function(t) {
|
|
|
5622
5850
|
* and widening past the threshold restores it exactly. A structural JS decision,
|
|
5623
5851
|
* so it lives here rather than in a CSS container query.
|
|
5624
5852
|
*/
|
|
5625
|
-
|
|
5853
|
+
_t = function(t) {
|
|
5626
5854
|
const o = this.config.collapseBadgesBelow;
|
|
5627
5855
|
if (o == null) {
|
|
5628
|
-
h(this, ge) && (
|
|
5856
|
+
h(this, ge) && (P(this, ge, !1), b(this, x, is).call(this));
|
|
5629
5857
|
return;
|
|
5630
5858
|
}
|
|
5631
5859
|
const i = t > 0 && t < o;
|
|
5632
|
-
i !== h(this, ge) && (
|
|
5860
|
+
i !== h(this, ge) && (P(this, ge, i), i ? b(this, x, rs).call(this, "count") : b(this, x, is).call(this));
|
|
5633
5861
|
}, /** Re-assert the consumer's configured badges mode from the pristine base config. */
|
|
5634
5862
|
is = function() {
|
|
5635
5863
|
const t = this.config.badgesDisplayMode ?? "badges";
|
|
5636
|
-
|
|
5864
|
+
b(this, x, rs).call(this, t);
|
|
5637
5865
|
}, /** Relay a badges-display-mode override to the live picker (never written to `this.config`). */
|
|
5638
5866
|
rs = function(t) {
|
|
5639
5867
|
var o;
|
|
5640
|
-
(o = h(this,
|
|
5868
|
+
(o = h(this, k)) == null || o.updateOptions({ badgesDisplayMode: t });
|
|
5641
5869
|
}, // ── picker lifecycle ──────────────────────────────────────────────────────
|
|
5642
5870
|
ns = function() {
|
|
5643
5871
|
var t;
|
|
5644
|
-
(t = h(this,
|
|
5872
|
+
(t = h(this, k)) == null || t.destroy(), P(this, k, void 0), b(this, x, as).call(this);
|
|
5645
5873
|
}, as = function() {
|
|
5646
|
-
|
|
5647
|
-
const t =
|
|
5648
|
-
o && o.length > 0 ? h(this, fe).dataset.initialValues = JSON.stringify(o) : delete h(this, fe).dataset.initialValues,
|
|
5649
|
-
},
|
|
5874
|
+
b(this, x, Oo).call(this), b(this, x, No).call(this);
|
|
5875
|
+
const t = b(this, x, Mo).call(this), o = b(this, x, Lo).call(this);
|
|
5876
|
+
o && o.length > 0 ? h(this, fe).dataset.initialValues = JSON.stringify(o) : delete h(this, fe).dataset.initialValues, P(this, k, new ln(h(this, fe), t)), b(this, x, ls).call(this), b(this, x, ds).call(this), b(this, x, xt).call(this, It()), P(this, ge, !1), b(this, x, _t).call(this, this.getBoundingClientRect().width);
|
|
5877
|
+
}, Oo = function() {
|
|
5650
5878
|
if (h(this, fe)) return;
|
|
5651
5879
|
const t = document.createElement("div");
|
|
5652
|
-
t.setAttribute("data-multiselect", ""), this.className && (t.className = this.className), h(this, Z).appendChild(t),
|
|
5880
|
+
t.setAttribute("data-multiselect", ""), this.className && (t.className = this.className), h(this, Z).appendChild(t), P(this, dt, Ei(h(this, Z), { position: "first", className: "ms-custom-styles" })), P(this, fe, t);
|
|
5653
5881
|
}, /**
|
|
5654
5882
|
* Build the picker config from the merged `this.config`, minus the keys the
|
|
5655
5883
|
* picker doesn't own, plus the runtime wiring (event bridges, container, host,
|
|
@@ -5674,26 +5902,34 @@ Mo = function() {
|
|
|
5674
5902
|
}
|
|
5675
5903
|
}
|
|
5676
5904
|
if (t.options = o, h(this, He))
|
|
5677
|
-
for (const { key: i, member: r, callbackKey: n } of
|
|
5905
|
+
for (const { key: i, member: r, callbackKey: n } of yn)
|
|
5678
5906
|
t[i] === void 0 && !t[n] && (t[i] = r);
|
|
5679
5907
|
return t.getCounterCallback || (t.getCounterCallback = (i, r) => r !== void 0 ? `+${r} more` : `${i} selected`), t.onSelect = (i) => {
|
|
5680
5908
|
var r;
|
|
5681
5909
|
this.emit("select", {
|
|
5682
5910
|
option: i,
|
|
5683
|
-
selectedOptions: ((r = h(this,
|
|
5684
|
-
selectedValues:
|
|
5911
|
+
selectedOptions: ((r = h(this, k)) == null ? void 0 : r.getSelected()) ?? [],
|
|
5912
|
+
selectedValues: b(this, x, et).call(this)
|
|
5685
5913
|
});
|
|
5686
5914
|
}, t.onDeselect = (i) => {
|
|
5687
5915
|
var r;
|
|
5688
5916
|
this.emit("deselect", {
|
|
5689
5917
|
option: i,
|
|
5690
|
-
selectedOptions: ((r = h(this,
|
|
5691
|
-
selectedValues:
|
|
5918
|
+
selectedOptions: ((r = h(this, k)) == null ? void 0 : r.getSelected()) ?? [],
|
|
5919
|
+
selectedValues: b(this, x, et).call(this)
|
|
5692
5920
|
});
|
|
5693
5921
|
}, t.onChange = (i) => {
|
|
5694
5922
|
this.emit("change", {
|
|
5695
5923
|
selectedOptions: i,
|
|
5696
|
-
selectedValues:
|
|
5924
|
+
selectedValues: b(this, x, et).call(this)
|
|
5925
|
+
});
|
|
5926
|
+
}, t.onAddNew = (i) => {
|
|
5927
|
+
var r;
|
|
5928
|
+
this.emit("add", {
|
|
5929
|
+
value: i.value,
|
|
5930
|
+
option: i.option,
|
|
5931
|
+
selectedOptions: ((r = h(this, k)) == null ? void 0 : r.getSelected()) ?? [],
|
|
5932
|
+
selectedValues: b(this, x, et).call(this)
|
|
5697
5933
|
});
|
|
5698
5934
|
}, t.container = h(this, Z), t.hostElement = this, t;
|
|
5699
5935
|
}, Lo = function() {
|
|
@@ -5701,13 +5937,13 @@ Mo = function() {
|
|
|
5701
5937
|
return h(this, Ie);
|
|
5702
5938
|
const t = this.config.initialValues;
|
|
5703
5939
|
return t && t.length > 0 ? t : void 0;
|
|
5704
|
-
},
|
|
5940
|
+
}, et = function() {
|
|
5705
5941
|
var o;
|
|
5706
|
-
const t = (o = h(this,
|
|
5942
|
+
const t = (o = h(this, k)) == null ? void 0 : o.getValue();
|
|
5707
5943
|
return t == null ? [] : Array.isArray(t) ? t : [t];
|
|
5708
5944
|
}, // ── §12.8 custom styles ───────────────────────────────────────────────────
|
|
5709
5945
|
ls = function() {
|
|
5710
|
-
const t = h(this,
|
|
5946
|
+
const t = h(this, dt);
|
|
5711
5947
|
if (!t) return;
|
|
5712
5948
|
const o = this.config.customStylesCallback;
|
|
5713
5949
|
if (typeof o != "function") {
|
|
@@ -5716,7 +5952,7 @@ ls = function() {
|
|
|
5716
5952
|
}
|
|
5717
5953
|
try {
|
|
5718
5954
|
const i = o();
|
|
5719
|
-
t.set(i), i &&
|
|
5955
|
+
t.set(i), i && b(this, x, Eo).call(this, i);
|
|
5720
5956
|
} catch (i) {
|
|
5721
5957
|
K.warn("[MultiSelectElement] customStylesCallback threw", i), t.clear();
|
|
5722
5958
|
}
|
|
@@ -5730,27 +5966,27 @@ ls = function() {
|
|
|
5730
5966
|
* custom-rendered content, ignore the warning (or use a different prefix).
|
|
5731
5967
|
*/
|
|
5732
5968
|
Eo = function(t) {
|
|
5733
|
-
const o =
|
|
5969
|
+
const o = wn();
|
|
5734
5970
|
if (o.size !== 0)
|
|
5735
|
-
for (const { name: i, suggestions: r } of
|
|
5736
|
-
h(this,
|
|
5971
|
+
for (const { name: i, suggestions: r } of $i(t, { prefix: "--ms-", consumed: o }))
|
|
5972
|
+
h(this, ht).has(i) || (h(this, ht).add(i), console.warn(
|
|
5737
5973
|
`[web-multiselect] customStylesCallback sets "${i}", which no web-multiselect style consumes — it will have no effect.` + (r.length ? ` Did you mean: ${r.join(", ")}?` : "") + " (If it's for your own custom-rendered content, ignore this.)"
|
|
5738
5974
|
));
|
|
5739
5975
|
}, // ── CSS-var sugar ─────────────────────────────────────────────────────────
|
|
5740
5976
|
Ao = function() {
|
|
5741
|
-
for (const t of Object.keys(
|
|
5977
|
+
for (const t of Object.keys(bt)) b(this, x, cs).call(this, bt[t], this.config[t]);
|
|
5742
5978
|
}, zo = function(t) {
|
|
5743
|
-
for (const o of Object.keys(
|
|
5744
|
-
o in t &&
|
|
5979
|
+
for (const o of Object.keys(bt))
|
|
5980
|
+
o in t && b(this, x, cs).call(this, bt[o], t[o]);
|
|
5745
5981
|
}, cs = function(t, o) {
|
|
5746
5982
|
o == null || o === "" ? this.style.removeProperty(t) : this.style.setProperty(t, String(o));
|
|
5747
5983
|
}, // ── declarative <option> parsing (light DOM, once) ────────────────────────
|
|
5748
5984
|
No = function() {
|
|
5749
|
-
if (h(this,
|
|
5750
|
-
|
|
5751
|
-
const t =
|
|
5752
|
-
t && (
|
|
5753
|
-
},
|
|
5985
|
+
if (h(this, ut)) return;
|
|
5986
|
+
P(this, ut, !0);
|
|
5987
|
+
const t = b(this, x, $o).call(this);
|
|
5988
|
+
t && (P(this, Fe, t), P(this, He, !0));
|
|
5989
|
+
}, $o = function() {
|
|
5754
5990
|
const t = Array.from(this.children);
|
|
5755
5991
|
if (t.length === 0) return null;
|
|
5756
5992
|
const o = [];
|
|
@@ -5761,7 +5997,7 @@ No = function() {
|
|
|
5761
5997
|
value: n.value || ((c = n.textContent) == null ? void 0 : c.trim()) || "",
|
|
5762
5998
|
label: ((d = n.textContent) == null ? void 0 : d.trim()) || n.value || ""
|
|
5763
5999
|
};
|
|
5764
|
-
a && (l.group = a), n.hasAttribute("selected") && (h(this, Ie) ??
|
|
6000
|
+
a && (l.group = a), n.hasAttribute("selected") && (h(this, Ie) ?? P(this, Ie, [])).push(l.value), n.hasAttribute("disabled") && (l.disabled = !0), n.hasAttribute("data-icon") && (l.icon = n.getAttribute("data-icon")), n.hasAttribute("data-subtitle") && (l.subtitle = n.getAttribute("data-subtitle")), o.push(l), i = !0;
|
|
5765
6001
|
};
|
|
5766
6002
|
for (const n of t)
|
|
5767
6003
|
if (n.tagName === "OPTION")
|
|
@@ -5785,12 +6021,12 @@ ds = function() {
|
|
|
5785
6021
|
const i = document.createElement("details"), r = document.createElement("summary");
|
|
5786
6022
|
r.textContent = "Debug Info";
|
|
5787
6023
|
const n = document.createElement("div");
|
|
5788
|
-
n.className = "ms__debug-stats", i.appendChild(r), i.appendChild(n), o.appendChild(i), h(this, Z).appendChild(o),
|
|
6024
|
+
n.className = "ms__debug-stats", i.appendChild(r), i.appendChild(n), o.appendChild(i), h(this, Z).appendChild(o), b(this, x, hs).call(this);
|
|
5789
6025
|
}, hs = function() {
|
|
5790
6026
|
var l, c, d, u;
|
|
5791
6027
|
const t = h(this, Z).querySelector(".ms__debug-stats");
|
|
5792
|
-
if (!t || !h(this,
|
|
5793
|
-
const o = "2.0.
|
|
6028
|
+
if (!t || !h(this, k)) return;
|
|
6029
|
+
const o = "2.0.1", i = typeof window < "u" && ((c = (l = window.components) == null ? void 0 : l["web-multiselect"]) == null ? void 0 : c.getInstances().length) || 0, r = h(this, k).getSelected().length, n = ((d = this.config.options) == null ? void 0 : d.length) || 0, a = h(this, k);
|
|
5794
6030
|
t.innerHTML = `
|
|
5795
6031
|
<span>Version: ${o}</span>
|
|
5796
6032
|
<span>Total Instances: ${i}</span>
|
|
@@ -5801,17 +6037,17 @@ ds = function() {
|
|
|
5801
6037
|
<span>Search: ${a.searchTerm || "none"}</span>
|
|
5802
6038
|
<span>Loading: ${a.isLoading ? "Yes" : "No"}</span>
|
|
5803
6039
|
`, setTimeout(() => {
|
|
5804
|
-
this.config.showDebugInfo &&
|
|
6040
|
+
this.config.showDebugInfo && b(this, x, hs).call(this);
|
|
5805
6041
|
}, 500);
|
|
5806
6042
|
}, // Opt into the form-associated custom element lifecycle so form.reset() and
|
|
5807
6043
|
// form.elements see the control.
|
|
5808
|
-
|
|
5809
|
-
typeof customElements < "u" && !customElements.get("web-multiselect") && customElements.define("web-multiselect",
|
|
5810
|
-
|
|
6044
|
+
p(st, "formAssociated", !0), p(st, "inputs", gn), p(st, "events", bn);
|
|
6045
|
+
typeof customElements < "u" && !customElements.get("web-multiselect") && customElements.define("web-multiselect", st);
|
|
6046
|
+
Oi("web-multiselect", st, {
|
|
5811
6047
|
config: {
|
|
5812
6048
|
name: "@keenmate/web-multiselect",
|
|
5813
|
-
version: "2.0.
|
|
5814
|
-
author: "Keenmate",
|
|
6049
|
+
version: "2.0.1",
|
|
6050
|
+
author: "Keenmate s.r.o.",
|
|
5815
6051
|
license: "MIT",
|
|
5816
6052
|
repository: "git+https://github.com/keenmate/web-multiselect.git",
|
|
5817
6053
|
homepage: "https://web-multiselect.keenmate.dev"
|
|
@@ -5820,7 +6056,7 @@ Pi("web-multiselect", tt, {
|
|
|
5820
6056
|
});
|
|
5821
6057
|
export {
|
|
5822
6058
|
kn as LOGGING_CATEGORIES,
|
|
5823
|
-
|
|
6059
|
+
st as MultiSelectElement,
|
|
5824
6060
|
dn as OPTIONS_FORMATS,
|
|
5825
6061
|
ni as TABLET_MIN_SHORT_SIDE,
|
|
5826
6062
|
ln as WebMultiSelect,
|
|
@@ -5830,8 +6066,8 @@ export {
|
|
|
5830
6066
|
Sn as disableLogging,
|
|
5831
6067
|
Cn as enableLogging,
|
|
5832
6068
|
It as getEnvironment,
|
|
5833
|
-
|
|
5834
|
-
|
|
6069
|
+
gt as initLogger,
|
|
6070
|
+
R as interactionLogger,
|
|
5835
6071
|
ii as observeEnvironment,
|
|
5836
6072
|
ri as observeViewport,
|
|
5837
6073
|
hn as parseOptionsData,
|