@keenmate/web-multiselect 2.0.0-rc12 → 2.0.0
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 +34 -12
- package/component-variables.manifest.json +23 -1
- package/custom-elements.json +470 -9
- package/dist/index.d.ts +187 -5
- package/dist/multiselect.js +961 -730
- package/dist/multiselect.umd.js +11 -11
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/src/css/animations.css +6 -1
- package/src/css/badges.css +14 -0
- package/src/css/options.css +81 -17
- package/src/css/variables.css +66 -21
- package/vscode.css-custom-data.json +15 -0
- package/vscode.html-custom-data.json +11 -1
- package/web-types.json +58 -4
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,28 +4171,115 @@ 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();
|
|
@@ -4153,7 +4298,7 @@ class ln {
|
|
|
4153
4298
|
interactiveSelect(e) {
|
|
4154
4299
|
var o, i;
|
|
4155
4300
|
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" }),
|
|
4301
|
+
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
4302
|
}
|
|
4158
4303
|
/**
|
|
4159
4304
|
* The single funnel for an interactive (user-initiated) deselection. Every
|
|
@@ -4166,17 +4311,37 @@ class ln {
|
|
|
4166
4311
|
interactiveDeselect(e) {
|
|
4167
4312
|
var o, i;
|
|
4168
4313
|
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" }),
|
|
4314
|
+
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
4315
|
}
|
|
4316
|
+
/**
|
|
4317
|
+
* Commit the "add new" affordance for the typed text. Two modes:
|
|
4318
|
+
* - `addNewCallback` set → create the option, append it, select it, clear the search.
|
|
4319
|
+
* - no callback → the consumer owns creation; we only notify (via the `add` event) so they
|
|
4320
|
+
* can open a modal / POST / add the option imperatively.
|
|
4321
|
+
* The `add` event fires in BOTH modes (with `option` present only when one was created).
|
|
4322
|
+
*/
|
|
4171
4323
|
async handleAddNew(e) {
|
|
4172
|
-
|
|
4173
|
-
|
|
4174
|
-
|
|
4175
|
-
|
|
4176
|
-
|
|
4177
|
-
|
|
4178
|
-
|
|
4324
|
+
var t, o;
|
|
4325
|
+
try {
|
|
4326
|
+
let i;
|
|
4327
|
+
if (this.options.addNewCallback) {
|
|
4328
|
+
K.debug(`[${this.instanceId}] Adding new option:`, e), this.addNewFocused = !1, this.addNewPending = !0, this.renderDropdown();
|
|
4329
|
+
let r;
|
|
4330
|
+
try {
|
|
4331
|
+
r = await this.options.addNewCallback(e);
|
|
4332
|
+
} finally {
|
|
4333
|
+
this.addNewPending = !1;
|
|
4334
|
+
}
|
|
4335
|
+
if (r == null) {
|
|
4336
|
+
K.debug(`[${this.instanceId}] addNewCallback canceled creation for:`, e), this.renderDropdown();
|
|
4337
|
+
return;
|
|
4338
|
+
}
|
|
4339
|
+
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
4340
|
}
|
|
4341
|
+
(o = (t = this.options).onAddNew) == null || o.call(t, { value: e, option: i }), i && this.options.isCloseOnSelect && this.close();
|
|
4342
|
+
} catch (i) {
|
|
4343
|
+
this.addNewPending = !1, K.error(`[${this.instanceId}] Error adding new option:`, i), this.renderDropdown();
|
|
4344
|
+
}
|
|
4180
4345
|
}
|
|
4181
4346
|
selectOption(e) {
|
|
4182
4347
|
const t = this.getItemValue(e), o = String(t);
|
|
@@ -4220,7 +4385,7 @@ class ln {
|
|
|
4220
4385
|
* refreshes this button's visibility (it hides once nothing is selected).
|
|
4221
4386
|
*/
|
|
4222
4387
|
clearClick() {
|
|
4223
|
-
|
|
4388
|
+
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
4389
|
this.justClosedViaClick = !1;
|
|
4225
4390
|
}, 0);
|
|
4226
4391
|
}
|
|
@@ -4247,22 +4412,22 @@ class ln {
|
|
|
4247
4412
|
/** Open the dropdown (no-op if already open, or if there is nothing to show). */
|
|
4248
4413
|
open() {
|
|
4249
4414
|
var e;
|
|
4250
|
-
J.debug(`[${this.instanceId}] open() called`, { isOpen: h(this,
|
|
4415
|
+
J.debug(`[${this.instanceId}] open() called`, { isOpen: h(this, $) }), !h(this, $) && (this.justOpenedViaClick = !0, setTimeout(() => {
|
|
4251
4416
|
this.justOpenedViaClick = !1;
|
|
4252
|
-
}, 0), this.hideMessage(),
|
|
4417
|
+
}, 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
4418
|
}
|
|
4254
4419
|
/** Close the dropdown (no-op if already closed). */
|
|
4255
4420
|
close() {
|
|
4256
4421
|
var e;
|
|
4257
|
-
J.debug(`[${this.instanceId}] close() called`, { isOpen: h(this,
|
|
4422
|
+
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
4423
|
}
|
|
4259
4424
|
/** Toggle the dropdown open/closed. */
|
|
4260
4425
|
toggle() {
|
|
4261
|
-
h(this,
|
|
4426
|
+
h(this, $) ? this.close() : this.open();
|
|
4262
4427
|
}
|
|
4263
4428
|
/** Whether the dropdown is currently open. Assigning opens/closes it. */
|
|
4264
4429
|
get isOpen() {
|
|
4265
|
-
return h(this,
|
|
4430
|
+
return h(this, $);
|
|
4266
4431
|
}
|
|
4267
4432
|
set isOpen(e) {
|
|
4268
4433
|
e ? this.open() : this.close();
|
|
@@ -4276,7 +4441,7 @@ class ln {
|
|
|
4276
4441
|
*/
|
|
4277
4442
|
anchorFloatingPanel(e, t) {
|
|
4278
4443
|
var r;
|
|
4279
|
-
const o = ((r = t.isLocked) == null ? void 0 : r.call(t)) ?? !0, i =
|
|
4444
|
+
const o = ((r = t.isLocked) == null ? void 0 : r.call(t)) ?? !0, i = tt(e, this.inputWrapper, {
|
|
4280
4445
|
strategy: "fixed",
|
|
4281
4446
|
placement: "bottom-start",
|
|
4282
4447
|
offset: 4,
|
|
@@ -4364,7 +4529,7 @@ An ancestor of <web-multiselect> establishes a fixed-positioning containing bloc
|
|
|
4364
4529
|
isLocked: () => !!this.options.isPlacementLocked,
|
|
4365
4530
|
applyMaxWidth: !0,
|
|
4366
4531
|
afterPosition: () => {
|
|
4367
|
-
this.hint && h(this,
|
|
4532
|
+
this.hint && h(this, $) && this.positionHint();
|
|
4368
4533
|
}
|
|
4369
4534
|
}));
|
|
4370
4535
|
}
|
|
@@ -4378,7 +4543,7 @@ An ancestor of <web-multiselect> establishes a fixed-positioning containing bloc
|
|
|
4378
4543
|
* resize can swap presentation without a reopen.
|
|
4379
4544
|
*/
|
|
4380
4545
|
setPresentation(e) {
|
|
4381
|
-
e !== this.presentationMode && (this.presentationMode = e, h(this,
|
|
4546
|
+
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
4547
|
}
|
|
4383
4548
|
/**
|
|
4384
4549
|
* Lock page scroll behind a fullscreen overlay via the core ref-counted helper.
|
|
@@ -4506,7 +4671,7 @@ An ancestor of <web-multiselect> establishes a fixed-positioning containing bloc
|
|
|
4506
4671
|
/** Back gesture/button fired: our pushed entry is already gone, so just close the
|
|
4507
4672
|
* sheet — WITHOUT popping history again (popOverlayHistory becomes a no-op). */
|
|
4508
4673
|
handleOverlayPopstate() {
|
|
4509
|
-
this.overlayHistoryActive && (this.overlayHistoryActive = !1, window.removeEventListener("popstate", this.onOverlayPopstate), h(this,
|
|
4674
|
+
this.overlayHistoryActive && (this.overlayHistoryActive = !1, window.removeEventListener("popstate", this.onOverlayPopstate), h(this, $) ? this.close() : this.showSelectedPopover && this.hideSelectedPopover());
|
|
4510
4675
|
}
|
|
4511
4676
|
/** Programmatic close: remove the listener and pop the entry we pushed (so the
|
|
4512
4677
|
* history stack returns to its pre-open state). No-op if a Back gesture already
|
|
@@ -4632,7 +4797,7 @@ An ancestor of <web-multiselect> establishes a fixed-positioning containing bloc
|
|
|
4632
4797
|
this.hintCleanup && this.hintCleanup();
|
|
4633
4798
|
let e = "top-start";
|
|
4634
4799
|
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 =
|
|
4800
|
+
const t = tt(this.hint, this.inputWrapper, {
|
|
4636
4801
|
strategy: "fixed",
|
|
4637
4802
|
placement: e,
|
|
4638
4803
|
offset: 4,
|
|
@@ -4675,7 +4840,7 @@ An ancestor of <web-multiselect> establishes a fixed-positioning containing bloc
|
|
|
4675
4840
|
J.debug(`[${this.instanceId}] showPopover() suppressed (isSelectedPopoverEnabled=false)`);
|
|
4676
4841
|
return;
|
|
4677
4842
|
}
|
|
4678
|
-
h(this,
|
|
4843
|
+
h(this, $) && this.close(), this.hideMessage(), this.showSelectedPopover = !0, this.renderSelectedPopover(), this.selectedPopover.classList.add("ms__selected-popover--visible");
|
|
4679
4844
|
const e = this.options.virtualScrollThreshold ?? 100;
|
|
4680
4845
|
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
4846
|
}
|
|
@@ -4768,8 +4933,8 @@ An ancestor of <web-multiselect> establishes a fixed-positioning containing bloc
|
|
|
4768
4933
|
const u = this.options.getBadgeClassCallback;
|
|
4769
4934
|
let f = "ms__badge ms__badge--custom";
|
|
4770
4935
|
if (u) {
|
|
4771
|
-
const
|
|
4772
|
-
|
|
4936
|
+
const m = this.classSuffix(u(e));
|
|
4937
|
+
m && (f += " " + m);
|
|
4773
4938
|
}
|
|
4774
4939
|
return `<div class="${f}" data-value="${o}">${d}</div>`;
|
|
4775
4940
|
}
|
|
@@ -4898,11 +5063,15 @@ An ancestor of <web-multiselect> establishes a fixed-positioning containing bloc
|
|
|
4898
5063
|
this.effectiveBadgesPosition === "left" || this.effectiveBadgesPosition === "right"
|
|
4899
5064
|
);
|
|
4900
5065
|
}
|
|
4901
|
-
return h(this,
|
|
5066
|
+
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
5067
|
}
|
|
4903
5068
|
get selectedItem() {
|
|
4904
5069
|
return this.selectedOptions.size === 0 ? null : Array.from(this.selectedOptions.values())[0];
|
|
4905
5070
|
}
|
|
5071
|
+
/** The current search box text (empty string when nothing is typed). Read-only; clear it with `clearSearch()`. */
|
|
5072
|
+
get searchText() {
|
|
5073
|
+
return this.searchTerm;
|
|
5074
|
+
}
|
|
4906
5075
|
get selectedValue() {
|
|
4907
5076
|
if (!this.options.valueMember && !this.options.getValueCallback)
|
|
4908
5077
|
return null;
|
|
@@ -4973,11 +5142,11 @@ ${o}` : t;
|
|
|
4973
5142
|
trigger: f,
|
|
4974
5143
|
content: this.buildBadgeTooltipContent(c)
|
|
4975
5144
|
});
|
|
4976
|
-
const
|
|
5145
|
+
const m = this.getItemBadgeDisplayValue(c);
|
|
4977
5146
|
this.spawnTooltip({
|
|
4978
5147
|
id: u,
|
|
4979
5148
|
trigger: a,
|
|
4980
|
-
content: this.buildRemoveButtonTooltipText(
|
|
5149
|
+
content: this.buildRemoveButtonTooltipText(m, c),
|
|
4981
5150
|
// Keep parent badge tooltip from overlapping the remove-button tooltip.
|
|
4982
5151
|
onBeforeShow: () => {
|
|
4983
5152
|
var g;
|
|
@@ -5106,10 +5275,10 @@ ${o}` : t;
|
|
|
5106
5275
|
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
5276
|
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
5277
|
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,
|
|
5278
|
+
if ((this.options.container ?? l ?? document.body).appendChild(n), this.messageEl = n, this.presentationMode === "fullscreen" && (h(this, $) || this.showSelectedPopover))
|
|
5110
5279
|
n.classList.add("ms__message--fullscreen");
|
|
5111
5280
|
else {
|
|
5112
|
-
const u =
|
|
5281
|
+
const u = tt(n, this.inputWrapper, {
|
|
5113
5282
|
strategy: "fixed",
|
|
5114
5283
|
placement: (t == null ? void 0 : t.placement) ?? "bottom",
|
|
5115
5284
|
offset: 8,
|
|
@@ -5183,10 +5352,10 @@ ${o}` : t;
|
|
|
5183
5352
|
// ========================================================================
|
|
5184
5353
|
destroy() {
|
|
5185
5354
|
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"),
|
|
5355
|
+
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
5356
|
}
|
|
5188
5357
|
}
|
|
5189
|
-
|
|
5358
|
+
$ = new WeakMap();
|
|
5190
5359
|
function cn() {
|
|
5191
5360
|
return {
|
|
5192
5361
|
fromAttribute(s) {
|
|
@@ -5267,7 +5436,7 @@ function fn(s, e, t) {
|
|
|
5267
5436
|
}
|
|
5268
5437
|
return i.push(r), o.push(i), o;
|
|
5269
5438
|
}
|
|
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 = [
|
|
5439
|
+
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 / contain;mask:var(--ms-icon-check) no-repeat center / contain}.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
5440
|
"top",
|
|
5272
5441
|
"top-start",
|
|
5273
5442
|
"top-end",
|
|
@@ -5282,41 +5451,43 @@ const Oo = `@layer variables,component,overrides;@layer variables{:host{display:
|
|
|
5282
5451
|
"right-end"
|
|
5283
5452
|
], N = () => Wo(), gn = [
|
|
5284
5453
|
// ── 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: "
|
|
5454
|
+
{ configKey: "searchHint", attribute: "search-hint", converter: A({ isNullable: !0 }), on: "update", description: "Small hint text shown beneath the search input." },
|
|
5455
|
+
{ 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.' },
|
|
5456
|
+
{ configKey: "selectPlaceholder", attribute: "select-placeholder", converter: A({ default: "Pick an option..." }), on: "update", description: "Placeholder shown on the control when nothing is selected." },
|
|
5457
|
+
{ configKey: "noDataPlaceholder", attribute: "no-data-placeholder", converter: A({ isNullable: !0 }), on: "update", description: "Text shown when there are no options at all." },
|
|
5458
|
+
{ configKey: "dropdownMinWidth", attribute: "dropdown-min-width", converter: A({ isNullable: !0 }), on: "update", description: "Minimum width of the dropdown panel (any CSS length)." },
|
|
5459
|
+
{ configKey: "dropdownMaxWidth", attribute: "dropdown-max-width", converter: A({ isNullable: !0 }), on: "update", description: "Maximum width of the dropdown panel (any CSS length)." },
|
|
5460
|
+
{ configKey: "maxHeight", attribute: "max-height", converter: A({ default: "20rem" }), on: "update", description: "Maximum height of the dropdown list before it scrolls." },
|
|
5461
|
+
{ configKey: "emptyMessage", attribute: "empty-message", converter: A({ default: "No results found" }), on: "update", description: "Message shown when a search yields no matches." },
|
|
5462
|
+
{ 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.' },
|
|
5463
|
+
{ 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}"…`.' },
|
|
5464
|
+
{ configKey: "loadingMessage", attribute: "loading-message", converter: A({ default: "Loading..." }), on: "update", description: "Message shown while options are loading." },
|
|
5465
|
+
{ configKey: "removeButtonTooltipText", attribute: "remove-button-tooltip-text", converter: A({ isNullable: !0 }), on: "update", description: "Tooltip text for a badge remove (×) button." },
|
|
5466
|
+
{ configKey: "formFieldId", attribute: "name", converter: A({ isNullable: !0 }), on: "reinit", description: "HTML form field name/id used for the hidden input(s)." },
|
|
5296
5467
|
// ── 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:
|
|
5468
|
+
{ configKey: "dropdownWidth", attribute: "dropdown-width", converter: A({ isNullable: !0 }), on: "update", description: "Fixed dropdown width; mirrored to the `--ms-dropdown-width` CSS variable." },
|
|
5469
|
+
{ configKey: "selectedPopoverWidth", attribute: "selected-popover-width", converter: A({ isNullable: !0 }), on: "update", description: "Selected-items popover width; mirrored to `--ms-selected-popover-width`." },
|
|
5299
5470
|
// ── 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:
|
|
5471
|
+
{ configKey: "valueMember", attribute: "value-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name on an option object that holds its value." },
|
|
5472
|
+
{ configKey: "displayValueMember", attribute: "display-value-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name that holds an option display label." },
|
|
5473
|
+
{ 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)." },
|
|
5474
|
+
{ configKey: "iconMember", attribute: "icon-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name that holds an option icon." },
|
|
5475
|
+
{ configKey: "subtitleMember", attribute: "subtitle-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name that holds an option subtitle." },
|
|
5476
|
+
{ configKey: "fullTitleMember", attribute: "full-title-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name that holds an option full/long title." },
|
|
5477
|
+
{ configKey: "groupMember", attribute: "group-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name used to group options under headers." },
|
|
5478
|
+
{ configKey: "disabledMember", attribute: "disabled-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name that marks an option disabled." },
|
|
5308
5479
|
// ── 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:
|
|
5480
|
+
{ configKey: "pathMember", attribute: "path-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name holding a node materialized tree path." },
|
|
5481
|
+
{ configKey: "parentPathMember", attribute: "parent-path-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name holding a node parent path." },
|
|
5482
|
+
{ configKey: "levelMember", attribute: "level-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name holding a node depth level." },
|
|
5483
|
+
{ configKey: "hasChildrenMember", attribute: "has-children-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name flagging that a node has children." },
|
|
5484
|
+
{ configKey: "isSelectableMember", attribute: "is-selectable-member", converter: A({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name marking whether a node can be selected." },
|
|
5485
|
+
{ configKey: "treePathSeparator", attribute: "tree-path-separator", converter: A({ default: "." }), reflect: !0, on: "reinit", description: "Separator between segments in a materialized tree path." },
|
|
5486
|
+
{ 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
5487
|
{
|
|
5317
5488
|
configKey: "checkboxMode",
|
|
5318
5489
|
attribute: "checkbox-mode",
|
|
5319
|
-
converter:
|
|
5490
|
+
converter: j(["independent", "cascade"], { default: "independent" }),
|
|
5320
5491
|
reflect: !0,
|
|
5321
5492
|
on: "update",
|
|
5322
5493
|
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 +5495,29 @@ const Oo = `@layer variables,component,overrides;@layer variables{:host{display:
|
|
|
5324
5495
|
{
|
|
5325
5496
|
configKey: "cascadeSelectPolicy",
|
|
5326
5497
|
attribute: "cascade-select-policy",
|
|
5327
|
-
converter:
|
|
5498
|
+
converter: j(["rolled-up", "leaves", "all"], { default: "rolled-up" }),
|
|
5328
5499
|
reflect: !0,
|
|
5329
5500
|
on: "update",
|
|
5330
5501
|
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
5502
|
},
|
|
5332
5503
|
// ── 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:
|
|
5504
|
+
{ 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." },
|
|
5505
|
+
{ 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." },
|
|
5506
|
+
{ 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.' },
|
|
5507
|
+
{ configKey: "searchInputMode", attribute: "search-input-mode", converter: j(["normal", "readonly", "hidden"], { default: "normal" }), on: "reinit", description: "Search field mode: editable, read-only, or hidden." },
|
|
5508
|
+
{ configKey: "searchMode", attribute: "search-mode", converter: j(["filter", "navigate"], { default: "filter" }), on: "reinit", description: "Whether typing filters the list or navigates it." },
|
|
5509
|
+
{ 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.' },
|
|
5510
|
+
{ configKey: "actionsLayout", attribute: "actions-layout", converter: j(["nowrap", "wrap"], { default: "nowrap" }), on: "reinit", description: "Whether the action bar wraps or stays on one line." },
|
|
5511
|
+
{ configKey: "actionsPosition", attribute: "actions-position", converter: j(["top", "bottom"], { default: "top" }), on: "reinit", description: "Whether the action bar sits above or below the list." },
|
|
5512
|
+
{ configKey: "actionsAlign", attribute: "actions-align", converter: j(["stretch", "left", "right", "center", "space-between"], { default: "stretch" }), on: "update", description: "Horizontal alignment of the action buttons." },
|
|
5513
|
+
{ configKey: "checkboxAlign", attribute: "checkbox-align", converter: j(["top", "center", "bottom"], { default: "center" }), on: "update", description: "Vertical alignment of an option checkbox." },
|
|
5514
|
+
{ configKey: "valueFormat", attribute: "value-format", converter: j(["json", "csv", "array"], { default: "json" }), on: "reinit", description: "Serialization format the control emits its value in." },
|
|
5515
|
+
{ 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)." },
|
|
5516
|
+
{ 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
5517
|
{
|
|
5347
5518
|
configKey: "mobilePresentation",
|
|
5348
5519
|
attribute: "mobile-presentation",
|
|
5349
|
-
converter:
|
|
5520
|
+
converter: j(["auto", "floating", "fullscreen"], { default: "auto" }),
|
|
5350
5521
|
reflect: !0,
|
|
5351
5522
|
on: "update",
|
|
5352
5523
|
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 +5525,7 @@ const Oo = `@layer variables,component,overrides;@layer variables{:host{display:
|
|
|
5354
5525
|
{
|
|
5355
5526
|
configKey: "fullscreenAutofocus",
|
|
5356
5527
|
attribute: "fullscreen-autofocus",
|
|
5357
|
-
converter:
|
|
5528
|
+
converter: H("default-false"),
|
|
5358
5529
|
on: "update",
|
|
5359
5530
|
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
5531
|
},
|
|
@@ -5373,35 +5544,35 @@ const Oo = `@layer variables,component,overrides;@layer variables{:host{display:
|
|
|
5373
5544
|
{ configKey: "optionTooltipDelay", attribute: "option-tooltip-delay", converter: X(), on: "update", description: "Delay in ms before an option tooltip appears (falls back to badgeTooltipDelay)." },
|
|
5374
5545
|
{ configKey: "optionTooltipOffset", attribute: "option-tooltip-offset", converter: X(), on: "update", description: "Gap in px between an option and its tooltip." },
|
|
5375
5546
|
// ── 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:
|
|
5547
|
+
{ configKey: "isMultipleEnabled", attribute: "multiple", converter: H("default-true"), on: "reinit", description: "Allow selecting multiple options. When off, selecting one replaces the previous." },
|
|
5548
|
+
{ configKey: "isGroupsAllowed", attribute: "allow-groups", converter: H("default-true"), on: "reinit", description: "Allow grouping options under group headers." },
|
|
5549
|
+
{ configKey: "isCheckboxesShown", attribute: "show-checkboxes", converter: H("default-true"), on: "reinit", description: "Show a checkbox on each option." },
|
|
5550
|
+
{ configKey: "isActionsSticky", attribute: "sticky-actions", converter: H("default-true"), on: "update", description: "Keep the action bar pinned while the list scrolls." },
|
|
5551
|
+
{ configKey: "isPlacementLocked", attribute: "lock-placement", converter: H("default-true"), on: "update", description: "Keep the dropdown initial placement instead of flipping when it fits." },
|
|
5552
|
+
{ configKey: "isSearchEnabled", attribute: "enable-search", converter: H("default-true"), on: "reinit", description: "Show the search input." },
|
|
5553
|
+
{ configKey: "isKeepOptionsOnSearch", attribute: "keep-options-on-search", converter: H("default-true"), on: "update", description: "Keep already-selected options visible while filtering." },
|
|
5554
|
+
{ configKey: "shouldKeepSearchOnClose", attribute: "should-keep-search-on-close", converter: H("default-true"), on: "update", description: "Preserve the search text after the dropdown closes." },
|
|
5555
|
+
{ 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
5556
|
// ── 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:
|
|
5557
|
+
{ configKey: "isCloseOnSelect", attribute: "close-on-select", converter: H("default-false"), on: "update", description: "Close the dropdown immediately after a selection." },
|
|
5558
|
+
{ configKey: "isAddNewAllowed", attribute: "allow-add-new", converter: H("default-false"), on: "reinit", description: "Allow adding a new option from the search text." },
|
|
5559
|
+
{ configKey: "isCounterShown", attribute: "show-counter", converter: H("default-false"), on: "update", description: "Show a selected-count indicator." },
|
|
5560
|
+
{ 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." },
|
|
5561
|
+
{ 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." },
|
|
5562
|
+
{ configKey: "isVirtualScrollEnabled", attribute: "enable-virtual-scroll", converter: H("default-false"), on: "reinit", description: "Force virtual scrolling on regardless of the threshold." },
|
|
5563
|
+
{ configKey: "isBadgeTooltipsEnabled", attribute: "enable-badge-tooltips", converter: H("default-false"), on: "update", description: "Enable tooltips on badges." },
|
|
5564
|
+
{ configKey: "isOptionTooltipsEnabled", attribute: "enable-option-tooltips", converter: H("default-false"), on: "update", description: "Enable tooltips on options." },
|
|
5565
|
+
{ configKey: "isOptionTooltipFollowCursor", attribute: "option-tooltip-follow-cursor", converter: H("default-false"), on: "update", description: "Make option tooltips follow the pointer." },
|
|
5566
|
+
{ 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
5567
|
// ── Special attributes ───────────────────────────────────────────────────
|
|
5397
5568
|
{ 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:
|
|
5569
|
+
{ 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
5570
|
// ── Complex property (data) ──────────────────────────────────────────────
|
|
5400
5571
|
{ 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:
|
|
5572
|
+
{ 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." },
|
|
5573
|
+
{ 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`." },
|
|
5574
|
+
{ 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`.' },
|
|
5575
|
+
{ configKey: "optionsRowSplitter", attribute: "data-options-row-splitter", converter: A({ default: `
|
|
5405
5576
|
` }), 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
5577
|
{ 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
5578
|
// ── Callbacks: data shape (structural → reinit) ──────────────────────────
|
|
@@ -5436,21 +5607,23 @@ const Oo = `@layer variables,component,overrides;@layer variables{:host{display:
|
|
|
5436
5607
|
{ 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
5608
|
{ 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
5609
|
{ 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." },
|
|
5610
|
+
{ 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." },
|
|
5611
|
+
{ 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
5612
|
{ 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
5613
|
], bn = [
|
|
5442
5614
|
{ name: "select", description: "An option was selected. `detail.option` is the selected option; `detail.selectedOptions`/`detail.selectedValues` are the full selection." },
|
|
5443
5615
|
{ 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
|
-
|
|
5616
|
+
{ name: "change", description: "The selection changed. `detail.selectedOptions`/`detail.selectedValues` are the full selection." },
|
|
5617
|
+
{ 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.' }
|
|
5618
|
+
], Js = /* @__PURE__ */ new Set(["dropdownWidth", "selectedPopoverWidth", "showDebugInfo", "initialValues", "optionsSource", "optionsFormat", "optionsSplitter", "optionsRowSplitter", "mobilePresentation", "collapseBadgesBelow"]), bt = {
|
|
5446
5619
|
dropdownWidth: "--ms-dropdown-width",
|
|
5447
5620
|
selectedPopoverWidth: "--ms-selected-popover-width"
|
|
5448
5621
|
};
|
|
5449
5622
|
let vn = null;
|
|
5450
|
-
function
|
|
5451
|
-
return vn ?? (vn = Ai(
|
|
5623
|
+
function wn() {
|
|
5624
|
+
return vn ?? (vn = Ai(Po, "--ms-"));
|
|
5452
5625
|
}
|
|
5453
|
-
const
|
|
5626
|
+
const yn = [
|
|
5454
5627
|
{ key: "valueMember", member: "value", callbackKey: "getValueCallback" },
|
|
5455
5628
|
{ key: "displayValueMember", member: "label", callbackKey: "getDisplayValueCallback" },
|
|
5456
5629
|
{ key: "groupMember", member: "group", callbackKey: "getGroupCallback" },
|
|
@@ -5458,26 +5631,26 @@ const wn = [
|
|
|
5458
5631
|
{ key: "subtitleMember", member: "subtitle", callbackKey: "getSubtitleCallback" },
|
|
5459
5632
|
{ key: "disabledMember", member: "disabled", callbackKey: "getDisabledCallback" }
|
|
5460
5633
|
];
|
|
5461
|
-
var Z,
|
|
5462
|
-
class
|
|
5634
|
+
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;
|
|
5635
|
+
class st extends Yt {
|
|
5463
5636
|
constructor() {
|
|
5464
5637
|
super();
|
|
5465
5638
|
L(this, x);
|
|
5466
5639
|
L(this, Z);
|
|
5467
|
-
L(this,
|
|
5640
|
+
L(this, k);
|
|
5468
5641
|
L(this, fe);
|
|
5469
|
-
L(this,
|
|
5642
|
+
L(this, dt, null);
|
|
5470
5643
|
// Dev-mode customStylesCallback lint: unknown --ms-* names already warned about.
|
|
5471
|
-
L(this,
|
|
5644
|
+
L(this, ht, /* @__PURE__ */ new Set());
|
|
5472
5645
|
// Declarative <option>/<optgroup> state (parsed once from light DOM).
|
|
5473
|
-
L(this,
|
|
5646
|
+
L(this, ut, !1);
|
|
5474
5647
|
L(this, He, !1);
|
|
5475
5648
|
L(this, Fe);
|
|
5476
5649
|
L(this, Ie);
|
|
5477
5650
|
// ── container-responsive badge collapse (core §12.9 `resized`) ─────────────
|
|
5478
5651
|
/** Whether the live picker is currently forced to the collapsed count view. */
|
|
5479
5652
|
L(this, ge, !1);
|
|
5480
|
-
|
|
5653
|
+
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
5654
|
}
|
|
5482
5655
|
/**
|
|
5483
5656
|
* Called by the browser when the surrounding <form> is reset. Clears the
|
|
@@ -5485,7 +5658,7 @@ class tt extends Yt {
|
|
|
5485
5658
|
*/
|
|
5486
5659
|
formResetCallback() {
|
|
5487
5660
|
var t;
|
|
5488
|
-
(t = h(this,
|
|
5661
|
+
(t = h(this, k)) == null || t.clearAll();
|
|
5489
5662
|
}
|
|
5490
5663
|
// ── core lifecycle hooks ──────────────────────────────────────────────────
|
|
5491
5664
|
/** Runtime writing-direction switch (core observes `dir`): re-mirror the live
|
|
@@ -5494,28 +5667,28 @@ class tt extends Yt {
|
|
|
5494
5667
|
* and the panels' explicit `dir`). The initial direction is read by the build. */
|
|
5495
5668
|
directionChanged(t) {
|
|
5496
5669
|
var o;
|
|
5497
|
-
(o = h(this,
|
|
5670
|
+
(o = h(this, k)) == null || o.refreshDirection();
|
|
5498
5671
|
}
|
|
5499
5672
|
/** Structural change (or first connect): mirror CSS vars, then (re)build the picker. */
|
|
5500
5673
|
reinit() {
|
|
5501
|
-
|
|
5674
|
+
b(this, x, Ao).call(this), this.isConnected && b(this, x, ns).call(this);
|
|
5502
5675
|
}
|
|
5503
5676
|
/** Cosmetic change: mirror CSS vars / custom styles / debug, patch the picker in place. */
|
|
5504
5677
|
update(t) {
|
|
5505
|
-
|
|
5678
|
+
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
5679
|
const o = {};
|
|
5507
5680
|
for (const [i, r] of Object.entries(t))
|
|
5508
5681
|
Js.has(i) || (o[i] = r === null ? void 0 : r);
|
|
5509
|
-
h(this,
|
|
5682
|
+
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
5683
|
}
|
|
5511
5684
|
/** Activate: ensure the picker exists (a DOM move destroyed it in disconnect()). */
|
|
5512
5685
|
connect() {
|
|
5513
|
-
h(this,
|
|
5686
|
+
h(this, k) || b(this, x, as).call(this);
|
|
5514
5687
|
}
|
|
5515
5688
|
/** Deactivate: tear the picker down (rebuilt on the next connect). */
|
|
5516
5689
|
disconnect() {
|
|
5517
5690
|
var t;
|
|
5518
|
-
(t = h(this,
|
|
5691
|
+
(t = h(this, k)) == null || t.destroy(), P(this, k, void 0);
|
|
5519
5692
|
}
|
|
5520
5693
|
/**
|
|
5521
5694
|
* Device/viewport/orientation changed (core §12.9). Overriding this opts the
|
|
@@ -5526,7 +5699,7 @@ class tt extends Yt {
|
|
|
5526
5699
|
* set before the dropdown can open.
|
|
5527
5700
|
*/
|
|
5528
5701
|
environmentChanged(t) {
|
|
5529
|
-
|
|
5702
|
+
b(this, x, xt).call(this, t);
|
|
5530
5703
|
}
|
|
5531
5704
|
/**
|
|
5532
5705
|
* This element's own border box changed (core §12.9 `resized`). Overriding the
|
|
@@ -5537,7 +5710,7 @@ class tt extends Yt {
|
|
|
5537
5710
|
* below` is set; otherwise it's a cheap no-op.
|
|
5538
5711
|
*/
|
|
5539
5712
|
resized({ width: t }) {
|
|
5540
|
-
|
|
5713
|
+
b(this, x, _t).call(this, t);
|
|
5541
5714
|
}
|
|
5542
5715
|
// ── non-input public API ──────────────────────────────────────────────────
|
|
5543
5716
|
/** Form field name (mirrors the `name` attribute → `formFieldId`). */
|
|
@@ -5549,21 +5722,21 @@ class tt extends Yt {
|
|
|
5549
5722
|
}
|
|
5550
5723
|
get selectedValue() {
|
|
5551
5724
|
var t;
|
|
5552
|
-
return this.flush(), ((t = h(this,
|
|
5725
|
+
return this.flush(), ((t = h(this, k)) == null ? void 0 : t.selectedValue) ?? null;
|
|
5553
5726
|
}
|
|
5554
5727
|
get selectedItem() {
|
|
5555
5728
|
var t;
|
|
5556
|
-
return this.flush(), ((t = h(this,
|
|
5729
|
+
return this.flush(), ((t = h(this, k)) == null ? void 0 : t.selectedItem) ?? null;
|
|
5557
5730
|
}
|
|
5558
5731
|
getSelected() {
|
|
5559
|
-
return this.flush(), h(this,
|
|
5732
|
+
return this.flush(), h(this, k) ? h(this, k).getSelected() : [];
|
|
5560
5733
|
}
|
|
5561
5734
|
setSelected(t, o = {}) {
|
|
5562
5735
|
var i;
|
|
5563
|
-
this.flush(), (i = h(this,
|
|
5736
|
+
this.flush(), (i = h(this, k)) == null || i.setSelected(t, o);
|
|
5564
5737
|
}
|
|
5565
5738
|
getValue() {
|
|
5566
|
-
return this.flush(), h(this,
|
|
5739
|
+
return this.flush(), h(this, k) ? h(this, k).getValue() : null;
|
|
5567
5740
|
}
|
|
5568
5741
|
/**
|
|
5569
5742
|
* Surface a transient message ("toast") on top of the component — visible even in the
|
|
@@ -5574,47 +5747,97 @@ class tt extends Yt {
|
|
|
5574
5747
|
*/
|
|
5575
5748
|
showMessage(t, o) {
|
|
5576
5749
|
var i;
|
|
5577
|
-
this.flush(), (i = h(this,
|
|
5750
|
+
this.flush(), (i = h(this, k)) == null || i.showMessage(t, o);
|
|
5578
5751
|
}
|
|
5579
5752
|
/** Dismiss the transient message shown by {@link showMessage}, if any. */
|
|
5580
5753
|
hideMessage() {
|
|
5581
5754
|
var t;
|
|
5582
|
-
(t = h(this,
|
|
5755
|
+
(t = h(this, k)) == null || t.hideMessage();
|
|
5756
|
+
}
|
|
5757
|
+
// ── scroll-to API ───────────────────────────────────────────────────────────
|
|
5758
|
+
/**
|
|
5759
|
+
* Clear the search box and restore the full option list (does not touch the selection — use
|
|
5760
|
+
* {@link clearAll} for that). Pair with {@link scrollToValue} to reveal then scroll to an option
|
|
5761
|
+
* a search had filtered out: `el.clearSearch(); el.scrollToValue(v)`.
|
|
5762
|
+
*/
|
|
5763
|
+
clearSearch() {
|
|
5764
|
+
var t;
|
|
5765
|
+
this.flush(), (t = h(this, k)) == null || t.clearSearch();
|
|
5766
|
+
}
|
|
5767
|
+
/** The current search box text (empty string when nothing is typed). Read via this getter, write with {@link search}. */
|
|
5768
|
+
get searchText() {
|
|
5769
|
+
var t;
|
|
5770
|
+
return this.flush(), ((t = h(this, k)) == null ? void 0 : t.searchText) ?? "";
|
|
5771
|
+
}
|
|
5772
|
+
/**
|
|
5773
|
+
* Programmatically set the search text and filter, as if the user typed it (runs
|
|
5774
|
+
* `beforeSearchCallback` / `minSearchLength` / async `searchCallback`). Does not open the dropdown
|
|
5775
|
+
* — call {@link open} if you want it visible. Pass `''` to clear (same as {@link clearSearch}).
|
|
5776
|
+
*/
|
|
5777
|
+
search(t) {
|
|
5778
|
+
var o;
|
|
5779
|
+
this.flush(), (o = h(this, k)) == null || o.search(t);
|
|
5780
|
+
}
|
|
5781
|
+
/**
|
|
5782
|
+
* Scroll the open dropdown to the option at `index` (into the current filtered list). Returns
|
|
5783
|
+
* false if closed or out of range. Deferred internally so `el.open(); el.scrollToIndex(i)` works.
|
|
5784
|
+
*/
|
|
5785
|
+
scrollToIndex(t, o) {
|
|
5786
|
+
var i;
|
|
5787
|
+
return this.flush(), ((i = h(this, k)) == null ? void 0 : i.scrollToIndex(t, o)) ?? !1;
|
|
5788
|
+
}
|
|
5789
|
+
/**
|
|
5790
|
+
* Scroll the open dropdown to the option with this `value`. Returns false if it isn't in the
|
|
5791
|
+
* currently visible list (filtered out by search, or under a collapsed tree branch) — call
|
|
5792
|
+
* {@link clearSearch} / expand first.
|
|
5793
|
+
*/
|
|
5794
|
+
scrollToValue(t, o) {
|
|
5795
|
+
var i;
|
|
5796
|
+
return this.flush(), ((i = h(this, k)) == null ? void 0 : i.scrollToValue(t, o)) ?? !1;
|
|
5797
|
+
}
|
|
5798
|
+
/**
|
|
5799
|
+
* Scroll to a group: its header in standard rendering, or the group's first option in
|
|
5800
|
+
* virtual-scroll mode (no headers there). Returns false in tree mode or if the group is empty
|
|
5801
|
+
* in the current filtered list.
|
|
5802
|
+
*/
|
|
5803
|
+
scrollToGroup(t, o) {
|
|
5804
|
+
var i;
|
|
5805
|
+
return this.flush(), ((i = h(this, k)) == null ? void 0 : i.scrollToGroup(t, o)) ?? !1;
|
|
5583
5806
|
}
|
|
5584
5807
|
// ── imperative open/close API (flush pending writes, then delegate) ─────────
|
|
5585
5808
|
/** Open the dropdown. */
|
|
5586
5809
|
open() {
|
|
5587
5810
|
var t;
|
|
5588
|
-
this.flush(), (t = h(this,
|
|
5811
|
+
this.flush(), (t = h(this, k)) == null || t.open();
|
|
5589
5812
|
}
|
|
5590
5813
|
/** Close the dropdown. */
|
|
5591
5814
|
close() {
|
|
5592
5815
|
var t;
|
|
5593
|
-
this.flush(), (t = h(this,
|
|
5816
|
+
this.flush(), (t = h(this, k)) == null || t.close();
|
|
5594
5817
|
}
|
|
5595
5818
|
/** Toggle the dropdown open/closed. */
|
|
5596
5819
|
toggle() {
|
|
5597
5820
|
var t;
|
|
5598
|
-
this.flush(), (t = h(this,
|
|
5821
|
+
this.flush(), (t = h(this, k)) == null || t.toggle();
|
|
5599
5822
|
}
|
|
5600
5823
|
/** Whether the dropdown is currently open. Assigning opens/closes it. */
|
|
5601
5824
|
get isOpen() {
|
|
5602
5825
|
var t;
|
|
5603
|
-
return this.flush(), ((t = h(this,
|
|
5826
|
+
return this.flush(), ((t = h(this, k)) == null ? void 0 : t.isOpen) ?? !1;
|
|
5604
5827
|
}
|
|
5605
5828
|
set isOpen(t) {
|
|
5606
|
-
this.flush(), h(this,
|
|
5829
|
+
this.flush(), h(this, k) && (h(this, k).isOpen = t);
|
|
5607
5830
|
}
|
|
5608
5831
|
destroy() {
|
|
5609
5832
|
var t;
|
|
5610
|
-
(t = h(this,
|
|
5833
|
+
(t = h(this, k)) == null || t.destroy();
|
|
5611
5834
|
}
|
|
5612
5835
|
}
|
|
5613
|
-
Z = new WeakMap(),
|
|
5614
|
-
|
|
5836
|
+
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. */
|
|
5837
|
+
xt = function(t) {
|
|
5615
5838
|
var r;
|
|
5616
|
-
const o = this.config.mobilePresentation ?? "auto", i =
|
|
5617
|
-
(r = h(this,
|
|
5839
|
+
const o = this.config.mobilePresentation ?? "auto", i = Di(o, t);
|
|
5840
|
+
(r = h(this, k)) == null || r.setPresentation(i === "modal" ? "fullscreen" : i);
|
|
5618
5841
|
}, ge = new WeakMap(), /**
|
|
5619
5842
|
* Resolve `collapse-badges-below` against `width` and relay the decision to the
|
|
5620
5843
|
* live picker. The override is pushed via `updateOptions` (never written back to
|
|
@@ -5622,34 +5845,34 @@ wt = function(t) {
|
|
|
5622
5845
|
* and widening past the threshold restores it exactly. A structural JS decision,
|
|
5623
5846
|
* so it lives here rather than in a CSS container query.
|
|
5624
5847
|
*/
|
|
5625
|
-
|
|
5848
|
+
_t = function(t) {
|
|
5626
5849
|
const o = this.config.collapseBadgesBelow;
|
|
5627
5850
|
if (o == null) {
|
|
5628
|
-
h(this, ge) && (
|
|
5851
|
+
h(this, ge) && (P(this, ge, !1), b(this, x, is).call(this));
|
|
5629
5852
|
return;
|
|
5630
5853
|
}
|
|
5631
5854
|
const i = t > 0 && t < o;
|
|
5632
|
-
i !== h(this, ge) && (
|
|
5855
|
+
i !== h(this, ge) && (P(this, ge, i), i ? b(this, x, rs).call(this, "count") : b(this, x, is).call(this));
|
|
5633
5856
|
}, /** Re-assert the consumer's configured badges mode from the pristine base config. */
|
|
5634
5857
|
is = function() {
|
|
5635
5858
|
const t = this.config.badgesDisplayMode ?? "badges";
|
|
5636
|
-
|
|
5859
|
+
b(this, x, rs).call(this, t);
|
|
5637
5860
|
}, /** Relay a badges-display-mode override to the live picker (never written to `this.config`). */
|
|
5638
5861
|
rs = function(t) {
|
|
5639
5862
|
var o;
|
|
5640
|
-
(o = h(this,
|
|
5863
|
+
(o = h(this, k)) == null || o.updateOptions({ badgesDisplayMode: t });
|
|
5641
5864
|
}, // ── picker lifecycle ──────────────────────────────────────────────────────
|
|
5642
5865
|
ns = function() {
|
|
5643
5866
|
var t;
|
|
5644
|
-
(t = h(this,
|
|
5867
|
+
(t = h(this, k)) == null || t.destroy(), P(this, k, void 0), b(this, x, as).call(this);
|
|
5645
5868
|
}, 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
|
-
},
|
|
5869
|
+
b(this, x, Oo).call(this), b(this, x, No).call(this);
|
|
5870
|
+
const t = b(this, x, Mo).call(this), o = b(this, x, Lo).call(this);
|
|
5871
|
+
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);
|
|
5872
|
+
}, Oo = function() {
|
|
5650
5873
|
if (h(this, fe)) return;
|
|
5651
5874
|
const t = document.createElement("div");
|
|
5652
|
-
t.setAttribute("data-multiselect", ""), this.className && (t.className = this.className), h(this, Z).appendChild(t),
|
|
5875
|
+
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
5876
|
}, /**
|
|
5654
5877
|
* Build the picker config from the merged `this.config`, minus the keys the
|
|
5655
5878
|
* picker doesn't own, plus the runtime wiring (event bridges, container, host,
|
|
@@ -5674,26 +5897,34 @@ Mo = function() {
|
|
|
5674
5897
|
}
|
|
5675
5898
|
}
|
|
5676
5899
|
if (t.options = o, h(this, He))
|
|
5677
|
-
for (const { key: i, member: r, callbackKey: n } of
|
|
5900
|
+
for (const { key: i, member: r, callbackKey: n } of yn)
|
|
5678
5901
|
t[i] === void 0 && !t[n] && (t[i] = r);
|
|
5679
5902
|
return t.getCounterCallback || (t.getCounterCallback = (i, r) => r !== void 0 ? `+${r} more` : `${i} selected`), t.onSelect = (i) => {
|
|
5680
5903
|
var r;
|
|
5681
5904
|
this.emit("select", {
|
|
5682
5905
|
option: i,
|
|
5683
|
-
selectedOptions: ((r = h(this,
|
|
5684
|
-
selectedValues:
|
|
5906
|
+
selectedOptions: ((r = h(this, k)) == null ? void 0 : r.getSelected()) ?? [],
|
|
5907
|
+
selectedValues: b(this, x, et).call(this)
|
|
5685
5908
|
});
|
|
5686
5909
|
}, t.onDeselect = (i) => {
|
|
5687
5910
|
var r;
|
|
5688
5911
|
this.emit("deselect", {
|
|
5689
5912
|
option: i,
|
|
5690
|
-
selectedOptions: ((r = h(this,
|
|
5691
|
-
selectedValues:
|
|
5913
|
+
selectedOptions: ((r = h(this, k)) == null ? void 0 : r.getSelected()) ?? [],
|
|
5914
|
+
selectedValues: b(this, x, et).call(this)
|
|
5692
5915
|
});
|
|
5693
5916
|
}, t.onChange = (i) => {
|
|
5694
5917
|
this.emit("change", {
|
|
5695
5918
|
selectedOptions: i,
|
|
5696
|
-
selectedValues:
|
|
5919
|
+
selectedValues: b(this, x, et).call(this)
|
|
5920
|
+
});
|
|
5921
|
+
}, t.onAddNew = (i) => {
|
|
5922
|
+
var r;
|
|
5923
|
+
this.emit("add", {
|
|
5924
|
+
value: i.value,
|
|
5925
|
+
option: i.option,
|
|
5926
|
+
selectedOptions: ((r = h(this, k)) == null ? void 0 : r.getSelected()) ?? [],
|
|
5927
|
+
selectedValues: b(this, x, et).call(this)
|
|
5697
5928
|
});
|
|
5698
5929
|
}, t.container = h(this, Z), t.hostElement = this, t;
|
|
5699
5930
|
}, Lo = function() {
|
|
@@ -5701,13 +5932,13 @@ Mo = function() {
|
|
|
5701
5932
|
return h(this, Ie);
|
|
5702
5933
|
const t = this.config.initialValues;
|
|
5703
5934
|
return t && t.length > 0 ? t : void 0;
|
|
5704
|
-
},
|
|
5935
|
+
}, et = function() {
|
|
5705
5936
|
var o;
|
|
5706
|
-
const t = (o = h(this,
|
|
5937
|
+
const t = (o = h(this, k)) == null ? void 0 : o.getValue();
|
|
5707
5938
|
return t == null ? [] : Array.isArray(t) ? t : [t];
|
|
5708
5939
|
}, // ── §12.8 custom styles ───────────────────────────────────────────────────
|
|
5709
5940
|
ls = function() {
|
|
5710
|
-
const t = h(this,
|
|
5941
|
+
const t = h(this, dt);
|
|
5711
5942
|
if (!t) return;
|
|
5712
5943
|
const o = this.config.customStylesCallback;
|
|
5713
5944
|
if (typeof o != "function") {
|
|
@@ -5716,7 +5947,7 @@ ls = function() {
|
|
|
5716
5947
|
}
|
|
5717
5948
|
try {
|
|
5718
5949
|
const i = o();
|
|
5719
|
-
t.set(i), i &&
|
|
5950
|
+
t.set(i), i && b(this, x, Eo).call(this, i);
|
|
5720
5951
|
} catch (i) {
|
|
5721
5952
|
K.warn("[MultiSelectElement] customStylesCallback threw", i), t.clear();
|
|
5722
5953
|
}
|
|
@@ -5730,27 +5961,27 @@ ls = function() {
|
|
|
5730
5961
|
* custom-rendered content, ignore the warning (or use a different prefix).
|
|
5731
5962
|
*/
|
|
5732
5963
|
Eo = function(t) {
|
|
5733
|
-
const o =
|
|
5964
|
+
const o = wn();
|
|
5734
5965
|
if (o.size !== 0)
|
|
5735
|
-
for (const { name: i, suggestions: r } of
|
|
5736
|
-
h(this,
|
|
5966
|
+
for (const { name: i, suggestions: r } of $i(t, { prefix: "--ms-", consumed: o }))
|
|
5967
|
+
h(this, ht).has(i) || (h(this, ht).add(i), console.warn(
|
|
5737
5968
|
`[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
5969
|
));
|
|
5739
5970
|
}, // ── CSS-var sugar ─────────────────────────────────────────────────────────
|
|
5740
5971
|
Ao = function() {
|
|
5741
|
-
for (const t of Object.keys(
|
|
5972
|
+
for (const t of Object.keys(bt)) b(this, x, cs).call(this, bt[t], this.config[t]);
|
|
5742
5973
|
}, zo = function(t) {
|
|
5743
|
-
for (const o of Object.keys(
|
|
5744
|
-
o in t &&
|
|
5974
|
+
for (const o of Object.keys(bt))
|
|
5975
|
+
o in t && b(this, x, cs).call(this, bt[o], t[o]);
|
|
5745
5976
|
}, cs = function(t, o) {
|
|
5746
5977
|
o == null || o === "" ? this.style.removeProperty(t) : this.style.setProperty(t, String(o));
|
|
5747
5978
|
}, // ── declarative <option> parsing (light DOM, once) ────────────────────────
|
|
5748
5979
|
No = function() {
|
|
5749
|
-
if (h(this,
|
|
5750
|
-
|
|
5751
|
-
const t =
|
|
5752
|
-
t && (
|
|
5753
|
-
},
|
|
5980
|
+
if (h(this, ut)) return;
|
|
5981
|
+
P(this, ut, !0);
|
|
5982
|
+
const t = b(this, x, $o).call(this);
|
|
5983
|
+
t && (P(this, Fe, t), P(this, He, !0));
|
|
5984
|
+
}, $o = function() {
|
|
5754
5985
|
const t = Array.from(this.children);
|
|
5755
5986
|
if (t.length === 0) return null;
|
|
5756
5987
|
const o = [];
|
|
@@ -5761,7 +5992,7 @@ No = function() {
|
|
|
5761
5992
|
value: n.value || ((c = n.textContent) == null ? void 0 : c.trim()) || "",
|
|
5762
5993
|
label: ((d = n.textContent) == null ? void 0 : d.trim()) || n.value || ""
|
|
5763
5994
|
};
|
|
5764
|
-
a && (l.group = a), n.hasAttribute("selected") && (h(this, Ie) ??
|
|
5995
|
+
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
5996
|
};
|
|
5766
5997
|
for (const n of t)
|
|
5767
5998
|
if (n.tagName === "OPTION")
|
|
@@ -5785,12 +6016,12 @@ ds = function() {
|
|
|
5785
6016
|
const i = document.createElement("details"), r = document.createElement("summary");
|
|
5786
6017
|
r.textContent = "Debug Info";
|
|
5787
6018
|
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),
|
|
6019
|
+
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
6020
|
}, hs = function() {
|
|
5790
6021
|
var l, c, d, u;
|
|
5791
6022
|
const t = h(this, Z).querySelector(".ms__debug-stats");
|
|
5792
|
-
if (!t || !h(this,
|
|
5793
|
-
const o = "2.0.0
|
|
6023
|
+
if (!t || !h(this, k)) return;
|
|
6024
|
+
const o = "2.0.0", 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
6025
|
t.innerHTML = `
|
|
5795
6026
|
<span>Version: ${o}</span>
|
|
5796
6027
|
<span>Total Instances: ${i}</span>
|
|
@@ -5801,16 +6032,16 @@ ds = function() {
|
|
|
5801
6032
|
<span>Search: ${a.searchTerm || "none"}</span>
|
|
5802
6033
|
<span>Loading: ${a.isLoading ? "Yes" : "No"}</span>
|
|
5803
6034
|
`, setTimeout(() => {
|
|
5804
|
-
this.config.showDebugInfo &&
|
|
6035
|
+
this.config.showDebugInfo && b(this, x, hs).call(this);
|
|
5805
6036
|
}, 500);
|
|
5806
6037
|
}, // Opt into the form-associated custom element lifecycle so form.reset() and
|
|
5807
6038
|
// form.elements see the control.
|
|
5808
|
-
|
|
5809
|
-
typeof customElements < "u" && !customElements.get("web-multiselect") && customElements.define("web-multiselect",
|
|
5810
|
-
|
|
6039
|
+
p(st, "formAssociated", !0), p(st, "inputs", gn), p(st, "events", bn);
|
|
6040
|
+
typeof customElements < "u" && !customElements.get("web-multiselect") && customElements.define("web-multiselect", st);
|
|
6041
|
+
Oi("web-multiselect", st, {
|
|
5811
6042
|
config: {
|
|
5812
6043
|
name: "@keenmate/web-multiselect",
|
|
5813
|
-
version: "2.0.0
|
|
6044
|
+
version: "2.0.0",
|
|
5814
6045
|
author: "Keenmate",
|
|
5815
6046
|
license: "MIT",
|
|
5816
6047
|
repository: "git+https://github.com/keenmate/web-multiselect.git",
|
|
@@ -5820,7 +6051,7 @@ Pi("web-multiselect", tt, {
|
|
|
5820
6051
|
});
|
|
5821
6052
|
export {
|
|
5822
6053
|
kn as LOGGING_CATEGORIES,
|
|
5823
|
-
|
|
6054
|
+
st as MultiSelectElement,
|
|
5824
6055
|
dn as OPTIONS_FORMATS,
|
|
5825
6056
|
ni as TABLET_MIN_SHORT_SIDE,
|
|
5826
6057
|
ln as WebMultiSelect,
|
|
@@ -5830,8 +6061,8 @@ export {
|
|
|
5830
6061
|
Sn as disableLogging,
|
|
5831
6062
|
Cn as enableLogging,
|
|
5832
6063
|
It as getEnvironment,
|
|
5833
|
-
|
|
5834
|
-
|
|
6064
|
+
gt as initLogger,
|
|
6065
|
+
R as interactionLogger,
|
|
5835
6066
|
ii as observeEnvironment,
|
|
5836
6067
|
ri as observeViewport,
|
|
5837
6068
|
hn as parseOptionsData,
|