@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.
@@ -1,11 +1,11 @@
1
- var $o = Object.defineProperty;
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 ? $o(s, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : s[e] = t;
6
- var m = (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), I = (s, e, t, o) => (Kt(s, e, "write to private field"), o ? o.call(s, t) : e.set(s, t), t), v = (s, e, t) => (Kt(s, e, "access private method"), t);
8
- function W(s, e = {}) {
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 z(s = {}) {
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 B(s = "presence") {
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 bt = Zs(qo);
181
- const st = /* @__PURE__ */ new Set(), ot = /* @__PURE__ */ new Set();
182
- let Oe = null, kt = [], vt = !1;
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 bt)
189
+ for (const [t, o] of vt)
190
190
  if (s <= o)
191
191
  return t;
192
- const e = bt[bt.length - 1];
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 = Oe;
254
- if (Oe = s, !e || !Zo(e, s))
255
- for (const t of [...st])
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
- ot.size > 0 && (!e || !ei(e, s)) && ti();
257
+ it.size > 0 && (!e || !ei(e, s)) && ti();
258
258
  }
259
259
  function Ss() {
260
- const s = Oe;
260
+ const s = Pe;
261
261
  if (s)
262
- for (const e of [...ot])
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 (vt)
275
+ if (wt)
276
276
  return;
277
- vt = !0, requestAnimationFrame(() => {
278
- vt = !1, Ct();
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
- Oe = { ...Qs };
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), Oe = ms();
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), vt = !1, Ee !== void 0 && (clearTimeout(Ee), Ee = void 0), yt = 0, Oe = null;
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 st.size + ot.size;
311
+ return ot.size + it.size;
312
312
  }
313
313
  function It() {
314
- return Oe ?? ms();
314
+ return Pe ?? ms();
315
315
  }
316
316
  function ii(s, e = {}) {
317
317
  const t = Tt() === 0;
318
- st.add(s), t && to(), e.immediate !== !1 && s(It());
318
+ ot.add(s), t && to(), e.immediate !== !1 && s(It());
319
319
  let o = !0;
320
320
  return () => {
321
- o && (o = !1, st.delete(s), Tt() === 0 && so());
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
- ot.add(s), t && to(), e.immediate !== !1 && s(It());
326
+ it.add(s), t && to(), e.immediate !== !1 && s(It());
327
327
  let o = !0;
328
328
  return () => {
329
- o && (o = !1, ot.delete(s), Tt() === 0 && so());
329
+ o && (o = !1, it.delete(s), Tt() === 0 && so());
330
330
  };
331
331
  }
332
332
  function _n(s) {
333
- bt = Zs(s), st.size > 0 && Ct();
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 Ot = /* @__PURE__ */ new Map();
405
+ const Pt = /* @__PURE__ */ new Map();
406
406
  function fi(s, e) {
407
- let t = Ot.get(s);
408
- t || Ot.set(s, t = /* @__PURE__ */ new Set()), t.add(e);
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 = Ot.get(s)) == null || t.delete(e);
412
+ (t = Pt.get(s)) == null || t.delete(e);
413
413
  }
414
414
  function bi(s) {
415
- return Array.from(Ot.get(s) ?? []);
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 yi(s) {
421
+ function wi(s) {
422
422
  return io.get(s.toLowerCase());
423
423
  }
424
- function wi(s, e, t, o = {}) {
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, nt, _e, at, ke, lt, Vt, Ce, pe, Se, Te, ze, Ne, Ve, De, $e, Re, Dt, ie, Be, T, ro, no, ao, Q, lo, co, Jt, Qt, Qe, Zt, ho;
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, T);
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, lt, Go());
465
- L(this, Vt, () => v(this, T, Zt).call(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, Ve);
482
+ L(this, $e);
483
483
  /** Unsubscribe from the throttled viewport observable; set only while connected AND `viewportChanged` is overridden. */
484
- L(this, De);
484
+ L(this, Ve);
485
485
  /** Unsubscribe from the per-element ResizeObserver; set only while connected AND `resized` is overridden. */
486
- L(this, $e);
486
+ L(this, De);
487
487
  L(this, Re);
488
- L(this, Dt);
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
- v(this, T, ao).call(this, o, i);
492
+ b(this, I, ao).call(this, o, i);
493
493
  for (const r of o)
494
- h(this, nt).set(r.configKey, r), r.attribute && h(this, _e).set(r.attribute, r);
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, at).set(r.name, r);
497
- v(this, T, ro).call(this, o), v(this, T, lo).call(this, o), v(this, T, co).call(this, i);
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
- v(this, T, Q).call(this, `converter for "${r.configKey}" threw parsing attribute ${t}="${i}"; using default`, l), n = v(this, T, no).call(this, r);
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
- v(this, T, Qt).call(this, n);
521
+ b(this, I, Qt).call(this, n);
522
522
  }
523
523
  connectedCallback() {
524
- fi(this.localName, this), h(this, Te) || (I(this, Te, !0), I(this, ze, null), I(this, pe, !0)), v(this, T, Qe).call(this), this.connect(), this.environmentChanged !== xe.prototype.environmentChanged && I(this, Ve, ii((t) => this.environmentChanged(t))), this.viewportChanged !== xe.prototype.viewportChanged && I(this, De, ri((t) => this.viewportChanged(t))), this.resized !== xe.prototype.resized && I(this, $e, pi(this, (t) => this.resized(t), { immediate: !1 }));
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, Ve)) == null || t.call(this), I(this, Ve, void 0), (o = h(this, De)) == null || o.call(this), I(this, De, void 0), (i = h(this, $e)) == null || i.call(this), I(this, $e, void 0), this.disconnect();
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, nt).get(o) ?? h(this, _e).get(o);
535
- r && v(this, T, Jt).call(this, r, i);
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
- v(this, T, Qe).call(this);
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(), v(this, T, Qe).call(this);
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
- v(this, T, Qe).call(this);
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 = yi(this.localName);
595
+ const t = wi(this.localName);
596
596
  if (!t)
597
597
  return Ii;
598
- const o = h(this, Dt) ?? I(this, Dt, `${this.localName}#${this.id || ++Si}`);
599
- return I(this, Be, t.forInstance(o, () => h(this, ie)));
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
- I(this, ie, t);
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
- I(this, ie, void 0);
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 I(this, Re, this.attachInternals());
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, at).get(t);
766
- return wi(this, t, o, {
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(), nt = new WeakMap(), _e = new WeakMap(), at = new WeakMap(), ke = new WeakMap(), lt = new WeakMap(), Vt = new WeakMap(), Ce = new WeakMap(), pe = new WeakMap(), Se = new WeakMap(), Te = new WeakMap(), ze = new WeakMap(), Ne = new WeakMap(), Ve = new WeakMap(), De = new WeakMap(), $e = new WeakMap(), Re = new WeakMap(), Dt = new WeakMap(), ie = new WeakMap(), Be = new WeakMap(), T = new WeakSet(), // ── internals ─────────────────────────────────────────────────────────────
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
- v(this, T, Q).call(this, `converter for "${i.configKey}" threw computing its default; using \`default\``, n), r = i.default;
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) && v(this, T, Q).call(this, `invalid input table: duplicate configKey "${c.configKey}"`), r.add(c.configKey), c.attribute && (n.has(c.attribute) && v(this, T, Q).call(this, `invalid input table: duplicate attribute "${c.attribute}"`), n.add(c.attribute)), c.reflect && !c.attribute && v(this, T, 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) && v(this, T, Q).call(this, `invalid input table: "${c.configKey}" has reflect:true but its converter has no toAttribute`);
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) && v(this, T, Q).call(this, `invalid event table: duplicate event "${c.name}"`), a.add(c.name), /^[a-z][a-z0-9-]*$/.test(c.name) || v(this, T, Q).call(this, `invalid event table: event "${c.name}" should be lowercase kebab-case (e.g. "date-select")`), c.property && r.has(c.property) && v(this, T, Q).call(this, `invalid event table: event "${c.name}" property "${c.property}" collides with an input configKey`);
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) => v(this, T, Jt).call(this, o, a)
847
- }), r && ((h(this, ze) ?? I(this, ze, /* @__PURE__ */ new Set())).add(i), this[i] = n);
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
- v(this, T, Q).call(this, `rejected invalid value for property "${t.configKey}"; keeping previous value`, o);
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 (v(this, T, Qt).call(this, i), t.reflect && t.attribute && ((r = t.converter) != null && r.toAttribute)) {
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
- I(this, Ne, !0);
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
- I(this, Ne, !1);
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" && I(this, pe, !0), (h(this, Ce) ?? I(this, Ce, {}))[t.configKey] = t.value, h(this, lt).schedule(h(this, Vt)));
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, lt).cancel(), v(this, T, Zt).call(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
- I(this, pe, !1), I(this, Ce, null), t ? this.reinit() : o && Object.keys(o).length > 0 && this.update(o), v(this, T, ho).call(this);
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
- I(this, Se, []);
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
- m(xe, "inputs"), /**
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
- m(xe, "events");
914
+ p(xe, "events");
915
915
  let Yt = xe;
916
- function Os(s, e, t) {
916
+ function Ps(s, e, t) {
917
917
  typeof customElements > "u" || customElements.get(s) || customElements.define(s, e, t);
918
918
  }
919
- function Oi(s) {
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 Pi(s, e, t) {
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: Oi(i) } : {},
935
- register: () => Os(s, e),
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 && Os(s, e), n;
938
+ return typeof window < "u" && ((window.components ?? (window.components = {}))[s] = n), r && Ps(s, e), n;
939
939
  }
940
- const Ps = /* @__PURE__ */ new Map(), Ms = /* @__PURE__ */ new WeakMap();
941
- let ut;
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 (ut === void 0)
945
+ if (mt === void 0)
946
946
  try {
947
- new CSSStyleSheet().replaceSync(""), ut = !0;
947
+ new CSSStyleSheet().replaceSync(""), mt = !0;
948
948
  } catch {
949
- ut = !1;
949
+ mt = !1;
950
950
  }
951
- return ut;
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 = Ps.get(n);
966
- return a || (a = new CSSStyleSheet(), a.replaceSync(n), Ps.set(n, a)), a;
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 Vi(s, e) {
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 Di = {
1027
+ const Vi = {
1028
1028
  mobile: "fullscreen",
1029
1029
  tablet: "floating",
1030
1030
  desktop: "floating"
1031
1031
  };
1032
- function $i(s, e, t = {}) {
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] ?? Di[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, mt = null;
1045
+ let Ge = 0, pt = null;
1046
1046
  function Ri() {
1047
1047
  if (typeof document > "u")
1048
1048
  return () => {
1049
1049
  };
1050
- Ge === 0 && (mt = document.body.style.overflow, document.body.style.overflow = "hidden"), Ge++;
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 && mt !== null && (document.body.style.overflow = mt, mt = null));
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"), Pt = /* @__PURE__ */ new Set(), qe = /* @__PURE__ */ new Map();
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(Pt))
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 && Pt.size === 0 && fs() && (document.removeEventListener(ps, mo), Mt = !1);
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 Pt.add(t), Ki(), {
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
- Pt.delete(t), qe.get(t.group) === t && qe.delete(t.group), Wi();
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
- m(this, "name");
1140
- m(this, "levels", U);
1141
- m(this, "methodFactory");
1139
+ p(this, "name");
1140
+ p(this, "levels", U);
1141
+ p(this, "methodFactory");
1142
1142
  // Installed by replaceLoggingMethods(); definite-assignment via `!`.
1143
- m(this, "trace");
1144
- m(this, "debug");
1145
- m(this, "info");
1146
- m(this, "warn");
1147
- m(this, "error");
1148
- m(this, "log");
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
- m(this, "inheritedLevel");
1150
+ p(this, "inheritedLevel");
1151
1151
  /** Optional per-logger default; overrides inherited. */
1152
- m(this, "defaultLevel", null);
1152
+ p(this, "defaultLevel", null);
1153
1153
  /** Optional user-set level; overrides default. */
1154
- m(this, "userLevel", null);
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, pt = Math.floor, ae = (s) => ({
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 Pe(s) {
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"], Vs = ["right", "left"], ar = ["top", "bottom"], lr = ["bottom", "top"];
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 ? Vs : Ns : e ? Ns : Vs;
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(Pe(s), t === "start", o);
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 = Pe(s);
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 Ds(s, e, t) {
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 = Pe(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 p;
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
- p = {
1425
+ m = {
1426
1426
  x: d,
1427
1427
  y: o.y - i.height
1428
1428
  };
1429
1429
  break;
1430
1430
  case "bottom":
1431
- p = {
1431
+ m = {
1432
1432
  x: d,
1433
1433
  y: o.y + o.height
1434
1434
  };
1435
1435
  break;
1436
1436
  case "right":
1437
- p = {
1437
+ m = {
1438
1438
  x: o.x + o.width,
1439
1439
  y: u
1440
1440
  };
1441
1441
  break;
1442
1442
  case "left":
1443
- p = {
1443
+ m = {
1444
1444
  x: o.x - i.width,
1445
1445
  y: u
1446
1446
  };
1447
1447
  break;
1448
1448
  default:
1449
- p = {
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 && (p[n] += f * (g === "end" ? 1 : -1) * (t && c ? -1 : 1)), p;
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: p = 0
1473
- } = Ke(e, s), g = bo(p), w = a[f ? u === "floating" ? "reference" : "floating" : u], b = Nt(await r.getClippingRect({
1474
- element: (t = await (r.isElement == null ? void 0 : r.isElement(w))) == null || t ? w : w.contextElement || await (r.getDocumentElement == null ? void 0 : r.getDocumentElement(a.floating)),
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, k = await (r.getOffsetParent == null ? void 0 : r.getOffsetParent(a.floating)), E = await (r.isElement == null ? void 0 : r.isElement(k)) && await (r.getScale == null ? void 0 : r.getScale(k)) || {
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
- }, A = Nt(r.convertOffsetParentRelativeRectToViewportRelativeRect ? await r.convertOffsetParentRelativeRectToViewportRelativeRect({
1486
+ }, z = Nt(r.convertOffsetParentRelativeRectToViewportRelativeRect ? await r.convertOffsetParentRelativeRectToViewportRelativeRect({
1487
1487
  elements: a,
1488
1488
  rect: _,
1489
- offsetParent: k,
1489
+ offsetParent: C,
1490
1490
  strategy: l
1491
1491
  }) : _);
1492
1492
  return {
1493
- top: (b.top - A.top + g.top) / E.y,
1494
- bottom: (A.bottom - b.bottom + g.bottom) / E.y,
1495
- left: (b.left - A.left + g.left) / E.x,
1496
- right: (A.right - b.right + g.right) / E.x
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
- } = Ds(c, o, l), f = o, p = 0;
1516
+ } = Vs(c, o, l), f = o, m = 0;
1517
1517
  const g = {};
1518
- for (let y = 0; y < r.length; y++) {
1519
- const w = r[y];
1520
- if (!w)
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: b,
1523
+ name: v,
1524
1524
  fn: _
1525
- } = w, {
1526
- x: k,
1525
+ } = y, {
1526
+ x: C,
1527
1527
  y: E,
1528
- data: A,
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 = k ?? d, u = E ?? u, g[b] = {
1545
- ...g[b],
1546
- ...A
1547
- }, $ && p < mr && (p++, typeof $ == "object" && ($.placement && (f = $.placement), $.rects && (c = $.rects === !0 ? await n.getElementRects({
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
- }) : $.rects), {
1551
+ }) : D.rects), {
1552
1552
  x: d,
1553
1553
  y: u
1554
- } = Ds(c, f, l)), y = -1);
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
- }, p = bs(i), g = gs(p), y = await n.getDimensions(c), w = p === "y", b = w ? "top" : "left", _ = w ? "bottom" : "right", k = w ? "clientHeight" : "clientWidth", E = r.reference[g] + r.reference[p] - f[p] - r.floating[g], A = f[p] - r.reference[p], $ = await (n.getOffsetParent == null ? void 0 : n.getOffsetParent(c));
1585
- let F = $ ? $[k] : 0;
1586
- (!F || !await (n.isElement == null ? void 0 : n.isElement($))) && (F = a.floating[k] || r.floating[g]);
1587
- const q = E / 2 - A / 2, V = F / 2 - y[g] / 2 - 1, C = be(u[b], V), P = be(u[_], V), M = F - y[g] - P, R = F / 2 - y[g] / 2 + q, S = fo(C, R, M), H = !l.arrow && We(i) != null && R !== S && r.reference[g] / 2 - (R < C ? C : P) - y[g] / 2 < 0, se = H ? R < C ? R - C : R - M : 0;
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
- [p]: f[p] + se,
1589
+ [m]: f[m] + se,
1590
1590
  data: {
1591
- [p]: S,
1592
- centerOffset: R - S - se,
1593
- ...H && {
1591
+ [m]: T,
1592
+ centerOffset: B - T - se,
1593
+ ...F && {
1594
1594
  alignmentOffset: se
1595
1595
  }
1596
1596
  },
1597
- reset: H
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: p = "bestFit",
1617
+ fallbackStrategy: m = "bestFit",
1618
1618
  fallbackAxisSideDirection: g = "none",
1619
- flipAlignment: y = !0,
1620
- ...w
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 b = Pe(i), _ = re(a), k = Pe(a) === a, E = await (l.isRTL == null ? void 0 : l.isRTL(c.floating)), A = f || (k || !y ? [zt(a)] : nr(a)), $ = g !== "none";
1625
- !f && $ && A.push(...dr(a, y, g, E));
1626
- const F = [a, ...A], q = await l.detectOverflow(e, w), V = [];
1627
- let C = ((o = r.flip) == null ? void 0 : o.overflows) || [];
1628
- if (d && V.push(q[b]), u) {
1629
- const S = rr(i, n, E);
1630
- V.push(q[S[0]], q[S[1]]);
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 (C = [...C, {
1632
+ if (S = [...S, {
1633
1633
  placement: i,
1634
1634
  overflows: V
1635
- }], !V.every((S) => S <= 0)) {
1636
- var P, M;
1637
- const S = (((P = r.flip) == null ? void 0 : P.index) || 0) + 1, H = F[S];
1638
- if (H && (!(u === "alignment" ? _ !== re(H) : !1) || // We leave the current main axis only if every placement on that axis
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
- C.every((Y) => re(Y.placement) === _ ? Y.overflows[0] > 0 : !0)))
1640
+ S.every((Y) => re(Y.placement) === _ ? Y.overflows[0] > 0 : !0)))
1641
1641
  return {
1642
1642
  data: {
1643
- index: S,
1644
- overflows: C
1643
+ index: T,
1644
+ overflows: S
1645
1645
  },
1646
1646
  reset: {
1647
- placement: H
1647
+ placement: F
1648
1648
  }
1649
1649
  };
1650
- let se = (M = C.filter((ye) => ye.overflows[0] <= 0).sort((ye, Y) => ye.overflows[1] - Y.overflows[1])[0]) == null ? void 0 : M.placement;
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 (p) {
1652
+ switch (m) {
1653
1653
  case "bestFit": {
1654
- var R;
1655
- const ye = (R = C.filter((Y) => {
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, Do) => de + Do, 0)]).sort((Y, de) => Y[1] - de[1])[0]) == null ? void 0 : R[0];
1664
- ye && (se = ye);
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 = Pe(t), a = We(t), l = re(t) === "y", c = br.has(n) ? -1 : 1, d = r && l ? -1 : 1, u = Ke(e, s);
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: p,
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" && (p = a === "end" ? g * -1 : g), l ? {
1702
- x: p * d,
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: p * d
1706
+ y: m * d
1707
1707
  };
1708
1708
  }
1709
- const yr = function(s) {
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
- }, wr = function(s) {
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: k,
1747
+ x: C,
1748
1748
  y: E
1749
1749
  } = _;
1750
1750
  return {
1751
- x: k,
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), p = go(f);
1761
- let g = d[p], y = d[f];
1762
- const w = (_, k) => fo(k + u[_ === "y" ? "top" : "left"], k, k - u[_ === "y" ? "bottom" : "right"]);
1763
- n && (g = w(p, g)), a && (y = w(f, y));
1764
- const b = l.fn({
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
- [p]: g,
1767
- [f]: y
1766
+ [m]: g,
1767
+ [f]: w
1768
1768
  });
1769
1769
  return {
1770
- ...b,
1770
+ ...v,
1771
1771
  data: {
1772
- x: b.x - t,
1773
- y: b.y - o,
1772
+ x: v.x - t,
1773
+ y: v.y - o,
1774
1774
  enabled: {
1775
- [p]: n,
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 = Pe(t), d = We(t), u = re(t) === "y", {
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: p
1798
+ height: m
1799
1799
  } = o.floating;
1800
- let g, y;
1801
- c === "top" || c === "bottom" ? (g = c, y = d === (await (i.isRTL == null ? void 0 : i.isRTL(r.floating)) ? "start" : "end") ? "left" : "right") : (y = c, g = d === "end" ? "top" : "bottom");
1802
- const w = p - l.top - l.bottom, b = f - l.left - l.right, _ = be(p - l[g], w), k = be(f - l[y], b), E = e.middlewareData.shift, A = !E;
1803
- let $ = _, F = k;
1804
- E != null && E.enabled.x && (F = b), E != null && E.enabled.y && ($ = w), A && !d && (u ? F = f - 2 * ne(l.left, l.right) : $ = p - 2 * ne(l.top, l.bottom)), await n({
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: F,
1807
- availableHeight: $
1806
+ availableWidth: W,
1807
+ availableHeight: D
1808
1808
  });
1809
1809
  const q = await i.getDimensions(r.floating);
1810
- return f !== q.width || p !== q.height ? {
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 $t() {
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 $t() ? s instanceof Node || s instanceof G(s).Node : !1;
1833
+ return Dt() ? s instanceof Node || s instanceof G(s).Node : !1;
1834
1834
  }
1835
1835
  function ee(s) {
1836
- return $t() ? s instanceof Element || s instanceof G(s).Element : !1;
1836
+ return Dt() ? s instanceof Element || s instanceof G(s).Element : !1;
1837
1837
  }
1838
1838
  function ve(s) {
1839
- return $t() ? s instanceof HTMLElement || s instanceof G(s).HTMLElement : !1;
1839
+ return Dt() ? s instanceof HTMLElement || s instanceof G(s).HTMLElement : !1;
1840
1840
  }
1841
- function $s(s) {
1842
- return !$t() || typeof ShadowRoot > "u" ? !1 : s instanceof ShadowRoot || s instanceof G(s).ShadowRoot;
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/, we = (s) => !!s && s !== "none";
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 we(e.transform) || we(e.translate) || we(e.scale) || we(e.rotate) || we(e.perspective) || !ys() && (we(e.backdropFilter) || we(e.filter)) || kr.test(e.willChange || "") || Cr.test(e.contain || "");
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) && !it(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 ys() {
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 it(s) {
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
- $s(s) && s.host || // Fallback.
1910
+ Ds(s) && s.host || // Fallback.
1911
1911
  le(s)
1912
1912
  );
1913
- return $s(e) ? e.host : e;
1913
+ return Ds(e) ? e.host : e;
1914
1914
  }
1915
- function yo(s) {
1915
+ function wo(s) {
1916
1916
  const e = Me(s);
1917
- return it(e) ? (s.ownerDocument || s).body : ve(e) && Rt(e) ? e : yo(e);
1917
+ return rt(e) ? (s.ownerDocument || s).body : ve(e) && Rt(e) ? e : wo(e);
1918
1918
  }
1919
- function rt(s, e, t) {
1919
+ function nt(s, e, t) {
1920
1920
  var o;
1921
1921
  e === void 0 && (e = []), t === void 0 && (t = !0);
1922
- const i = yo(s), r = i === ((o = s.ownerDocument) == null ? void 0 : o.body), n = G(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 ? rt(a) : []);
1925
+ return e.concat(n, n.visualViewport || [], Rt(i) ? i : [], a && t ? nt(a) : []);
1926
1926
  } else
1927
- return e.concat(i, rt(i, [], t));
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 wo(s) {
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 ws(s) {
1942
+ function ys(s) {
1943
1943
  return ee(s) ? s : s.contextElement;
1944
1944
  }
1945
1945
  function Ae(s) {
1946
- const e = ws(s);
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
- } = wo(e);
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 !ys() || !e.visualViewport ? Tr : {
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 = ws(s);
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), p = ee(o) ? G(o) : o;
1980
- let g = f, y = ts(g);
1981
- for (; y && p !== g; ) {
1982
- const w = Ae(y), b = y.getBoundingClientRect(), _ = te(y), k = b.left + (y.clientLeft + parseFloat(_.paddingLeft)) * w.x, E = b.top + (y.clientTop + parseFloat(_.paddingTop)) * w.y;
1983
- l *= w.x, c *= w.y, d *= w.x, u *= w.y, l += k, c += E, g = G(y), y = ts(g);
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 Or(s) {
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 p = Le(o);
2021
- c = Ae(o), d.x = p.x + o.clientLeft, d.y = p.y + o.clientTop;
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 Pr(s) {
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 = !ys() || e === "fixed";
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, p = f.body, g = getComputedStyle(p), y = f.compatMode === "CSS1Compat" && parseFloat(g.marginLeft) + parseFloat(g.marginRight) || 0, w = Math.abs(r.clientWidth - p.clientWidth - y), b = getComputedStyle(r).scrollbarGutter === "stable both-edges" ? w / 2 : w;
2056
- b <= Lr && (a -= b);
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 = rt(s, [], !1).filter((a) => ee(a) && je(a) !== "body"), i = null;
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) && !it(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 p = Rs(e, n[f], i);
2117
- l = ne(p.top, l), c = be(p.right, c), d = be(p.bottom, d), u = ne(p.left, u);
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 Vr(s) {
2126
+ function $r(s) {
2127
2127
  const {
2128
2128
  width: e,
2129
2129
  height: t
2130
- } = wo(s);
2130
+ } = yo(s);
2131
2131
  return {
2132
2132
  width: e,
2133
2133
  height: t
2134
2134
  };
2135
2135
  }
2136
- function Dr(s, e, t) {
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 && !it(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 && it(o) && Gt(o) && !vs(o) ? t : o || Sr(s) || t;
2183
+ return o && rt(o) && Gt(o) && !vs(o) ? t : o || Sr(s) || t;
2184
2184
  }
2185
- const $r = async function(s) {
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: Dr(s.reference, await e(s.floating), s.strategy),
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: Or,
2201
+ convertOffsetParentRelativeRectToViewportRelativeRect: Pr,
2202
2202
  getDocumentElement: le,
2203
2203
  getClippingRect: Nr,
2204
2204
  getOffsetParent: ko,
2205
- getElementRects: $r,
2206
- getClientRects: Pr,
2207
- getDimensions: Vr,
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: p,
2225
+ left: m,
2226
2226
  top: g,
2227
- width: y,
2228
- height: w
2227
+ width: w,
2228
+ height: y
2229
2229
  } = f;
2230
- if (d || e(), !y || !w)
2230
+ if (d || e(), !w || !y)
2231
2231
  return;
2232
- const b = pt(g), _ = pt(r.clientWidth - (p + y)), k = pt(r.clientHeight - (g + w)), E = pt(p), $ = {
2233
- rootMargin: -b + "px " + -_ + "px " + -k + "px " + -E + "px",
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 F = !0;
2236
+ let W = !0;
2237
2237
  function q(V) {
2238
- const C = V[0].intersectionRatio;
2238
+ const S = V[0].intersectionRatio;
2239
2239
  if (!So(f, s.getBoundingClientRect()))
2240
2240
  return a();
2241
- if (C !== u) {
2242
- if (!F)
2241
+ if (S !== u) {
2242
+ if (!W)
2243
2243
  return a();
2244
- C ? a(!1, C) : i = setTimeout(() => {
2244
+ S ? a(!1, S) : i = setTimeout(() => {
2245
2245
  a(!1, 1e-7);
2246
2246
  }, 1e3);
2247
2247
  }
2248
- F = !1;
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 = ws(s), d = i || r ? [...c ? rt(c) : [], ...e ? rt(e) : []] : [];
2275
- d.forEach((b) => {
2276
- i && b.addEventListener("scroll", t), r && b.addEventListener("resize", t);
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, p = null;
2280
- n && (p = new ResizeObserver((b) => {
2281
- let [_] = b;
2282
- _ && _.target === c && p && e && (p.unobserve(e), cancelAnimationFrame(f), f = requestAnimationFrame(() => {
2283
- var k;
2284
- (k = p) == null || k.observe(e);
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 && p.observe(c), e && p.observe(e));
2287
- let g, y = l ? Le(s) : null;
2288
- l && w();
2289
- function w() {
2290
- const b = Le(s);
2291
- y && !So(y, b) && t(), y = b, g = requestAnimationFrame(w);
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 b;
2294
+ var v;
2295
2295
  d.forEach((_) => {
2296
2296
  i && _.removeEventListener("scroll", t), r && _.removeEventListener("resize", t);
2297
- }), u == null || u(), (b = p) == null || b.disconnect(), p = null, l && cancelAnimationFrame(g);
2297
+ }), u == null || u(), (v = m) == null || v.disconnect(), m = null, l && cancelAnimationFrame(g);
2298
2298
  };
2299
2299
  }
2300
- const Fr = yr, Kr = wr, Wr = gr, qt = xr, jr = fr, Ur = (s, e, t) => {
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 et(s, e, t = {}) {
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 p;
2429
- (p = t.beforeCompute) == null || p.call(t), Ur(e, s, {
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: w, middlewareData: b }) => {
2435
- var _, k;
2436
- if (s.style.left = `${g}px`, s.style.top = `${y}px`, t.arrow && Zr(t.arrow.element, w, b.arrow), a && !l && (l = !0, i = w, r = !1, n = Hs(t, !1)), (_ = t.onPlaced) == null || _.call(t, w), (k = t.onComputed) == null || k.call(t, { x: g, y, placement: w }), t.onDrift && e instanceof Element) {
2437
- const E = c ? os(s) : window, A = Yr({ panel: s, reference: e, expectedX: g, expectedY: y, offsetParent: E });
2438
- A && t.onDrift(A);
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
- }, p = () => {
2462
+ }, m = () => {
2463
2463
  l && clearTimeout(l), c && clearTimeout(c), l = c = void 0;
2464
2464
  }, g = () => {
2465
- var k;
2466
- if (p(), a)
2465
+ var C;
2466
+ if (m(), a)
2467
2467
  return;
2468
- (k = s.onBeforeShow) == null || k.call(s), a = !0, e.append(r);
2468
+ (C = s.onBeforeShow) == null || C.call(s), a = !0, e.append(r);
2469
2469
  const _ = s.followCursor ? u : s.trigger;
2470
- n = et(r, _, {
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
- p(), i.show > 0 ? l = setTimeout(g, i.show) : g();
2480
- }, b = () => {
2481
- p(), i.hide > 0 ? c = setTimeout(y, i.hide) : y();
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", w), s.trigger.addEventListener("mouseleave", b), s.trigger.addEventListener("focusin", w), s.trigger.addEventListener("focusout", b), {
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: y,
2489
+ hide: w,
2490
2490
  destroy() {
2491
- s.trigger.removeEventListener("mouseenter", w), s.trigger.removeEventListener("mouseleave", b), s.trigger.removeEventListener("focusin", w), s.trigger.removeEventListener("focusout", b), y();
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 = et(s.panel, s.reference, {
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), ft = ce.loggers.INIT, K = ce.loggers.DATA, J = ce.loggers.UI, j = ce.loggers.INTERACTION, kn = Io.map((s) => `MULTISELECT:${s}`);
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
- m(this, "container");
2547
- m(this, "wrapper");
2548
- m(this, "viewport");
2549
- m(this, "itemHeight");
2550
- m(this, "items");
2551
- m(this, "renderItem");
2552
- m(this, "bufferSize");
2553
- m(this, "onVisibleRangeChange");
2554
- m(this, "onScroll");
2555
- m(this, "scrollTop", 0);
2556
- m(this, "viewportHeight", 0);
2557
- m(this, "visibleStart", 0);
2558
- m(this, "visibleEnd", 0);
2559
- m(this, "scrollHandler");
2560
- m(this, "resizeObserver");
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
- const t = e * this.itemHeight, o = t + this.itemHeight, i = this.container.scrollTop, r = i + this.viewportHeight;
2627
- t < i ? this.container.scrollTop = t : o > r && (this.container.scrollTop = o - this.viewportHeight);
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), p = Ze(r), g = Ze(n), y = Ze(a), w = "x", b = s.treePathSeparator || ".", _ = Ks();
2701
- let k = 0, E = null;
2702
- const A = (V) => o ? o(V) : t ? he(V, t) : void 0, $ = {
2703
- treePathSeparator: b,
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 = [], C = s.isSorted ?? !1, P = s.sortCallback;
2715
- function M(R) {
2716
- let S = Object.values(R.children);
2717
- C && P && S.length > 0 && (S = P(S));
2718
- for (const H of S)
2719
- V.push(H), H.hasChildren && M(H);
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 = {}, k = 0, E = null;
2725
- const C = [];
2726
- let P = V.map((M, R) => {
2727
- const S = Ks();
2728
- S.treeId = c, S.id = e ? he(M, e) : void 0;
2729
- const H = A(M);
2730
- return H == null || H === "" || typeof H != "string" ? (C.push(`index ${R}`), null) : (S.path = H, (S.id === void 0 || S.id === -1) && (S.id = H), f ? S.parentPath = on(S.path, b) : S.parentPath = he(M, i), S.pathSegment = js(
2731
- Ws(S.path, S.parentPath ?? "", b),
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
- b
2735
- ), p ? S.level = rn(S.path, b) : S.level = he(M, r), g || (S.hasChildren = he(M, n)), S.data = M, S);
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 ? P = s.sortCallback(P) : P = q(P));
2738
- for (const M of P)
2739
- F(M.parentPath ?? "", M);
2740
- if (l || !y)
2741
- for (const M of P)
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 R = he(M.data, a);
2746
- M.isSelectable = R == null ? !0 : !!R;
2755
+ const B = he(M.data, a);
2756
+ M.isSelectable = B == null ? !0 : !!B;
2747
2757
  }
2748
- C.length > 0 && console.warn(
2749
- `[ltree ${c}] ${C.length} option(s) had an invalid path and were skipped (pathMember="${t}"). Offending: ${C.slice(0, 5).join(", ")}` + (C.length > 5 ? ", …" : "")
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, C) {
2753
- let P = C || _;
2762
+ getNodeByPath(V, S) {
2763
+ let O = S || _;
2754
2764
  if (V) {
2755
- const M = V.split(b);
2756
- for (let R = 0; R < M.length; R++) {
2757
- const S = w + M[R];
2758
- if (!P.children.hasOwnProperty(S))
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
- P = P.children[S];
2770
+ O = O.children[T];
2761
2771
  }
2762
2772
  }
2763
- return P;
2773
+ return O;
2764
2774
  }
2765
2775
  };
2766
- function F(V, C) {
2767
- const P = $.getNodeByPath(V);
2768
- if (!P)
2769
- return `Node: ${C.path} - Could not find parent node: ${V}`;
2770
- p && (C.level = (P.level || 0) + 1);
2771
- const M = w + js(Ws(C.path, V, b), 0, 1, b);
2772
- return P.children.hasOwnProperty(M) || (P.children[M] = C, g && !P.hasChildren && (P.hasChildren = !0), k = Math.max(k, C.level || 0)), null;
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((C, P) => {
2776
- const M = C.level || 0, R = P.level || 0;
2777
- if (M !== R) return M - R;
2778
- if (C.parentPath !== P.parentPath)
2779
- return C.parentPath ? P.parentPath ? C.parentPath.localeCompare(P.parentPath) : 1 : -1;
2780
- if (d && C.data && P.data) {
2781
- const S = he(C.data, d) ?? 0, H = he(P.data, d) ?? 0;
2782
- if (S !== H) return S - H;
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(C).localeCompare(u(P)) : C.path.localeCompare(P.path);
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 D;
2859
+ var $;
2850
2860
  class ln {
2851
2861
  constructor(e, t = {}) {
2852
- m(this, "element");
2853
- m(this, "instanceId");
2854
- m(this, "options");
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, D, !1);
2859
- m(this, "selectedValues", /* @__PURE__ */ new Set());
2860
- m(this, "selectedOptions", /* @__PURE__ */ new Map());
2861
- m(this, "allOptions", []);
2862
- m(this, "filteredOptions", []);
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
- m(this, "tree", null);
2867
- m(this, "treeNodes", []);
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
- m(this, "cascadeIndex", null);
2872
- m(this, "cascadeCheckedAtoms", /* @__PURE__ */ new Set());
2873
- m(this, "hiddenInputs", []);
2874
- m(this, "focusedIndex", -1);
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
- m(this, "keyboardController", null);
2877
- m(this, "matchingIndices", /* @__PURE__ */ new Set());
2878
- m(this, "searchTerm", "");
2879
- m(this, "isLoading", !1);
2880
- m(this, "searchDebounceTimer");
2881
- m(this, "searchAbortController");
2882
- m(this, "showSelectedPopover", !1);
2883
- m(this, "selectedPopoverPlacement", null);
2884
- m(this, "dropdownPlacement", null);
2885
- m(this, "isRTL", !1);
2886
- m(this, "effectiveBadgesPosition", "bottom");
2887
- m(this, "justClosedViaClick", !1);
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
- m(this, "justOpenedViaClick", !1);
2894
- m(this, "positioningDriftWarned", !1);
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
- m(this, "fullscreenContainingBlockWarned", !1);
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
- m(this, "presentationMode", "floating");
2904
- m(this, "fullscreenHeader", null);
2905
- m(this, "fullscreenSearchInput", null);
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
- m(this, "fullscreenSearchClear", null);
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
- m(this, "fullscreenModeToggle", null);
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
- m(this, "fullscreenNav", null);
2918
- m(this, "fullscreenNavCount", null);
2919
- m(this, "fullscreenNavPrev", null);
2920
- m(this, "fullscreenNavNext", null);
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
- m(this, "bodyScrollUnlock", null);
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
- m(this, "overflowXClamp", null);
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
- m(this, "keyboardInsetCleanup", null);
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
- m(this, "overlayHistoryActive", !1);
2934
- m(this, "onOverlayPopstate", () => this.handleOverlayPopstate());
2947
+ p(this, "overlayHistoryActive", !1);
2948
+ p(this, "onOverlayPopstate", () => this.handleOverlayPopstate());
2935
2949
  // Floating UI cleanup functions
2936
- m(this, "dropdownCleanup", null);
2937
- m(this, "hintCleanup", null);
2938
- m(this, "selectedPopoverCleanup", null);
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
- m(this, "tooltips", /* @__PURE__ */ new Map());
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
- m(this, "labelRevealTrigger", null);
2947
- m(this, "labelRevealPanel", null);
2948
- m(this, "labelRevealPopover", null);
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
- m(this, "messageEl", null);
2953
- m(this, "messageCleanup", null);
2954
- m(this, "messageTimer", null);
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
- m(this, "onDropdownScroll", () => {
2975
+ p(this, "onDropdownScroll", () => {
2962
2976
  this.hideOptionTooltips(), this.hideLabelReveal();
2963
2977
  });
2964
2978
  // Virtual scroll instance
2965
- m(this, "virtualScroll", null);
2966
- m(this, "optionsContainer", null);
2967
- m(this, "selectedPopoverVirtualScroll", null);
2968
- m(this, "selectedPopoverContainer", null);
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
- m(this, "input");
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
- m(this, "inputWrapper");
2975
- m(this, "dropdown");
2976
- m(this, "dropdownInner");
2977
- m(this, "badgesContainer");
2978
- m(this, "counter");
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
- m(this, "clearButton");
2982
- m(this, "hint");
2983
- m(this, "selectedPopover");
2995
+ p(this, "clearButton");
2996
+ p(this, "hint");
2997
+ p(this, "selectedPopover");
2984
2998
  // Document-level event handlers (stored for cleanup)
2985
- m(this, "documentKeydownHandler", null);
2986
- m(this, "documentClickHandler", null);
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
- m(this, "overlayCoord", null);
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(), ft.debug(`Initialized [${this.instanceId}] with options:`, {
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, ft.debug(`[${this.instanceId}] RTL Debug:`, {
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"), ft.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");
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, D) ? (this.justClosedViaClick = !0, this.close(), setTimeout(() => {
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 += `<div class="ms__empty">${this.options.emptyMessage}</div>`;
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 u = this.options.renderGroupLabelContentCallback(d);
3467
- if (u instanceof HTMLElement) {
3468
- const f = document.createElement("div");
3469
- f.className = "ms__group-label", f.appendChild(u), t += f.outerHTML;
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">${u}</div>`;
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 = `<div class="ms__empty">${this.options.emptyMessage}</div>`;
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 p;
3573
- d.getIsDisabledCallback ? p = d.getIsDisabledCallback(this) : d.isDisabled !== void 0 ? p = d.isDisabled : p = this.getBuiltInActionDisabled(d.action);
3574
- const g = p ? " disabled" : "", y = d.getTextCallback ? d.getTextCallback(this) : d.text;
3575
- let w = "";
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 k = this.classSuffix(d.getClassCallback(this));
3578
- k && (w = ` ${k}`);
3579
- } else d.cssClass && (w = ` ${d.cssClass}`);
3580
- const b = Math.max(1, Math.floor(d.row ?? 1)), _ = `<button type="button"${g} class="ms__action-btn${w}" data-action="${d.action}" data-button-index="${u}">${y}</button>`;
3581
- l.has(b) || l.set(b, []), l.get(b).push(_);
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 p = `<div class="${u.join(" ")}" data-value="${o}" data-index="${t}"${f}>`;
3591
- if (this.options.isCheckboxesShown && this.options.isMultipleEnabled && (p += `<input type="checkbox" class="ms__checkbox" ${l ? "checked" : ""} ${a ? "disabled" : ""}>`), p += '<div class="ms__option-content">', this.options.renderOptionContentCallback) {
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
- p += this.toHtml(this.options.renderOptionContentCallback(e, g));
3619
+ m += this.toHtml(this.options.renderOptionContentCallback(e, g));
3602
3620
  } else
3603
- r && (p += `<span class="ms__option-icon">${r}</span>`), p += '<div class="ms__option-text">', p += `<div class="ms__option-title">${this.highlightMatch(i, this.searchTerm)}</div>`, n && (p += `<div class="ms__option-subtitle">${n}</div>`), p += "</div>";
3604
- return p += this.renderOptionInfoButton(), p += "</div>", p += "</div>", p;
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", p = t === this.focusedIndex, g = this.matchingIndices.has(t), y = e.isSelectable !== !1, w = e.level ?? 1, b = Math.max(0, w - 1), _ = ["ms__option", "ms__option--tree"];
3626
- _.push(e.hasChildren ? "ms__option--tree-branch" : "ms__option--tree-leaf"), u && _.push("ms__option--selected"), f && _.push("ms__option--indeterminate"), p && _.push("ms__option--focused"), g && _.push("ms__option--matched"), l && _.push("ms__option--disabled"), y || _.push("ms__option--tree-unselectable");
3627
- const k = this.options.checkboxAlign && this.options.checkboxAlign !== "center" ? ` data-checkbox-align="${this.options.checkboxAlign}"` : "", E = y ? "" : ' data-selectable="false"';
3628
- let A = `<div class="${_.join(" ")}" data-value="${i}" data-index="${t}" data-path="${e.path}" data-level="${w}" style="--ms-tree-depth: ${b};"${k}${E}>`;
3629
- if (this.options.isCheckboxesShown && this.options.isMultipleEnabled && y && (A += `<input type="checkbox" class="${f ? "ms__checkbox ms__checkbox--indeterminate" : "ms__checkbox"}" ${u ? "checked" : ""}${f ? ' aria-checked="mixed"' : ""} ${l ? "disabled" : ""}>`), A += '<div class="ms__option-content">', this.options.renderOptionContentCallback) {
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: p,
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: w,
3644
- depth: b,
3661
+ level: y,
3662
+ depth: v,
3645
3663
  path: e.path,
3646
- isSelectable: y,
3664
+ isSelectable: w,
3647
3665
  isIndeterminate: f
3648
3666
  };
3649
- A += this.toHtml(this.options.renderOptionContentCallback(o, $));
3667
+ z += this.toHtml(this.options.renderOptionContentCallback(o, D));
3650
3668
  } else
3651
- n && (A += `<span class="ms__option-icon">${n}</span>`), A += '<div class="ms__option-text">', A += `<div class="ms__option-title">${this.highlightMatch(r, this.searchTerm)}</div>`, a && (A += `<div class="ms__option-subtitle">${a}</div>`), A += "</div>";
3652
- return A += this.renderOptionInfoButton(), A += "</div>", A += "</div>", A;
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, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
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, D) && t > 0 && e.length > 0 ? this.input.value = r : h(this, D) || (this.input.value = "");
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, D))
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, D) ? (this.justClosedViaClick = !0, this.close(), setTimeout(() => {
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, D) && !this.justClosedViaClick && this.open();
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, D) && this.open(), this.handleSearch(t);
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, D),
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, D)) {
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.options.addNewCallback && this.input.value.trim() && this.handleAddNew(this.input.value.trim()), this.presentationMode === "fullscreen" && ((t = this.fullscreenSearchInput) == null || t.blur());
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
- j.debug(`[${this.instanceId}] Dropdown clicked`, { target: e.target.className }), e.stopPropagation();
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 (j.debug(`[${this.instanceId}] Action button clicked:`, a), a === "select-all")
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 === "custom") {
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
- j.debug(`[${this.instanceId}] Option clicked:`, {
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, D) && this.presentationMode !== "fullscreen" ? this.input.focus() : this.presentationMode === "fullscreen" && ((n = this.fullscreenSearchInput) == null || n.blur()));
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(), j.debug(`[${this.instanceId}] Clear count button clicked`), this.clearAll();
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
- j.debug(`[${this.instanceId}] Remove hidden items button clicked`);
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(), j.debug(`[${this.instanceId}] '+X more' badge clicked, showing popover`), this.toggleSelectedPopover();
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, D) || this.justOpenedViaClick) return;
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
- j.debug(`[${this.instanceId}] handleClickOutside`, {
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 || (j.warn(`[${this.instanceId}] Closing dropdown due to click outside`), this.close());
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]), j.debug(`[${this.instanceId}] Jumped to next match: index ${this.focusedIndex} (${t + 1} of ${e.length})`);
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]), j.debug(`[${this.instanceId}] Jumped to previous match: index ${this.focusedIndex} (${t + 1} of ${e.length})`);
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 && (this.presentationMode === "fullscreen" ? e.scrollIntoView({ block: "center", behavior: "auto" }) : e.scrollIntoView({ block: "nearest", behavior: "smooth" }));
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
- j.debug(`[${this.instanceId}] toggleOption ignored — option is disabled`);
4274
+ R.debug(`[${this.instanceId}] toggleOption ignored — option is disabled`);
4130
4275
  return;
4131
4276
  }
4132
4277
  if (!this.isOptionSelectable(e)) {
4133
- j.debug(`[${this.instanceId}] toggleOption ignored — node is not selectable`);
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 (j.debug(`[${this.instanceId}] toggleOption called`, { value: t, multiple: this.options.isMultipleEnabled }), this.isCascadeMode() && this.cascadeIndex) {
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" }), j.debug(`[${this.instanceId}] Selection blocked by beforeSelectCallback`), !1) : (this.options.isMultipleEnabled || (this.selectedValues.clear(), this.selectedOptions.clear()), this.selectOption(e), !0);
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" }), j.debug(`[${this.instanceId}] Deselection blocked by beforeDeselectCallback`), !1) : (this.deselectOption(e), !0);
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
- if (this.options.addNewCallback)
4173
- try {
4174
- K.debug(`[${this.instanceId}] Adding new option:`, e);
4175
- const t = await this.options.addNewCallback(e);
4176
- this.allOptions.push(t), this.filteredOptions.push(t), this.selectOption(t), this.input.value = "", this.renderDropdown(), this.renderBadges(), this.options.isCloseOnSelect && this.close();
4177
- } catch (t) {
4178
- K.error(`[${this.instanceId}] Error adding new option:`, t);
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
- j.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(() => {
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, D) }), !h(this, D) && (this.justOpenedViaClick = !0, setTimeout(() => {
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(), I(this, D, !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());
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, D) }), h(this, D) && (I(this, D, !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`));
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, D) ? this.close() : this.open();
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, D);
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 = et(e, this.inputWrapper, {
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, D) && this.positionHint();
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, D) ? 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())));
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, D) ? this.close() : this.showSelectedPopover && this.hideSelectedPopover());
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 = et(this.hint, this.inputWrapper, {
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, D) && this.close(), this.hideMessage(), this.showSelectedPopover = !0, this.renderSelectedPopover(), this.selectedPopover.classList.add("ms__selected-popover--visible");
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 p = this.classSuffix(u(e));
4772
- p && (f += " " + p);
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, D) || (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;
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 p = this.getItemBadgeDisplayValue(c);
5145
+ const m = this.getItemBadgeDisplayValue(c);
4977
5146
  this.spawnTooltip({
4978
5147
  id: u,
4979
5148
  trigger: a,
4980
- content: this.buildRemoveButtonTooltipText(p, c),
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, D) || this.showSelectedPopover))
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 = et(n, this.inputWrapper, {
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"), ft.info(`[${this.instanceId}] Component destroyed`);
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
- D = new WeakMap();
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: z({ isNullable: !0 }), on: "update", description: "Small hint text shown beneath the search input." },
5286
- { configKey: "searchPlaceholder", attribute: "search-placeholder", converter: z({ 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.' },
5287
- { configKey: "selectPlaceholder", attribute: "select-placeholder", converter: z({ default: "Pick an option..." }), on: "update", description: "Placeholder shown on the control when nothing is selected." },
5288
- { configKey: "noDataPlaceholder", attribute: "no-data-placeholder", converter: z({ isNullable: !0 }), on: "update", description: "Text shown when there are no options at all." },
5289
- { configKey: "dropdownMinWidth", attribute: "dropdown-min-width", converter: z({ isNullable: !0 }), on: "update", description: "Minimum width of the dropdown panel (any CSS length)." },
5290
- { configKey: "dropdownMaxWidth", attribute: "dropdown-max-width", converter: z({ isNullable: !0 }), on: "update", description: "Maximum width of the dropdown panel (any CSS length)." },
5291
- { configKey: "maxHeight", attribute: "max-height", converter: z({ default: "20rem" }), on: "update", description: "Maximum height of the dropdown list before it scrolls." },
5292
- { configKey: "emptyMessage", attribute: "empty-message", converter: z({ default: "No results found" }), on: "update", description: "Message shown when a search yields no matches." },
5293
- { configKey: "loadingMessage", attribute: "loading-message", converter: z({ default: "Loading..." }), on: "update", description: "Message shown while options are loading." },
5294
- { configKey: "removeButtonTooltipText", attribute: "remove-button-tooltip-text", converter: z({ isNullable: !0 }), on: "update", description: "Tooltip text for a badge remove (×) button." },
5295
- { configKey: "formFieldId", attribute: "name", converter: z({ isNullable: !0 }), on: "reinit", description: "HTML form field name/id used for the hidden input(s)." },
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: z({ isNullable: !0 }), on: "update", description: "Fixed dropdown width; mirrored to the `--ms-dropdown-width` CSS variable." },
5298
- { configKey: "selectedPopoverWidth", attribute: "selected-popover-width", converter: z({ isNullable: !0 }), on: "update", description: "Selected-items popover width; mirrored to `--ms-selected-popover-width`." },
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: z({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name on an option object that holds its value." },
5301
- { configKey: "displayValueMember", attribute: "display-value-member", converter: z({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name that holds an option display label." },
5302
- { configKey: "searchValueMember", attribute: "search-value-member", converter: z({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name searched against (falls back to the display value)." },
5303
- { configKey: "iconMember", attribute: "icon-member", converter: z({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name that holds an option icon." },
5304
- { configKey: "subtitleMember", attribute: "subtitle-member", converter: z({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name that holds an option subtitle." },
5305
- { configKey: "fullTitleMember", attribute: "full-title-member", converter: z({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name that holds an option full/long title." },
5306
- { configKey: "groupMember", attribute: "group-member", converter: z({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name used to group options under headers." },
5307
- { configKey: "disabledMember", attribute: "disabled-member", converter: z({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name that marks an option disabled." },
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: z({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name holding a node materialized tree path." },
5310
- { configKey: "parentPathMember", attribute: "parent-path-member", converter: z({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name holding a node parent path." },
5311
- { configKey: "levelMember", attribute: "level-member", converter: z({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name holding a node depth level." },
5312
- { configKey: "hasChildrenMember", attribute: "has-children-member", converter: z({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name flagging that a node has children." },
5313
- { configKey: "isSelectableMember", attribute: "is-selectable-member", converter: z({ isNullable: !0 }), reflect: !0, on: "reinit", description: "Property name marking whether a node can be selected." },
5314
- { configKey: "treePathSeparator", attribute: "tree-path-separator", converter: z({ default: "." }), reflect: !0, on: "reinit", description: "Separator between segments in a materialized tree path." },
5315
- { configKey: "isTreeEnabled", converter: B("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." },
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: W(["independent", "cascade"], { default: "independent" }),
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: W(["rolled-up", "leaves", "all"], { default: "rolled-up" }),
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: W(["badges", "count", "compact", "partial", "none"], { default: "badges" }), on: "reinit", description: "How the current selection is shown in the control." },
5334
- { configKey: "badgesPosition", attribute: "badges-position", converter: W(["top", "bottom", "left", "right"], { default: "bottom" }), on: "reinit", description: "Where the badges/selection appear relative to the input." },
5335
- { configKey: "badgesThresholdMode", attribute: "badges-threshold-mode", converter: W(["count", "partial"], { default: "count" }), on: "update", description: 'How `badgesThreshold` is interpreted: collapse to a count badge, or keep partial badges + a "more" badge.' },
5336
- { configKey: "searchInputMode", attribute: "search-input-mode", converter: W(["normal", "readonly", "hidden"], { default: "normal" }), on: "reinit", description: "Search field mode: editable, read-only, or hidden." },
5337
- { configKey: "searchMode", attribute: "search-mode", converter: W(["filter", "navigate"], { default: "filter" }), on: "reinit", description: "Whether typing filters the list or navigates it." },
5338
- { configKey: "overlayGroup", attribute: "overlay-group", converter: z({ 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.' },
5339
- { configKey: "actionsLayout", attribute: "actions-layout", converter: W(["nowrap", "wrap"], { default: "nowrap" }), on: "reinit", description: "Whether the action bar wraps or stays on one line." },
5340
- { configKey: "actionsPosition", attribute: "actions-position", converter: W(["top", "bottom"], { default: "top" }), on: "reinit", description: "Whether the action bar sits above or below the list." },
5341
- { configKey: "actionsAlign", attribute: "actions-align", converter: W(["stretch", "left", "right", "center", "space-between"], { default: "stretch" }), on: "update", description: "Horizontal alignment of the action buttons." },
5342
- { configKey: "checkboxAlign", attribute: "checkbox-align", converter: W(["top", "center", "bottom"], { default: "center" }), on: "update", description: "Vertical alignment of an option checkbox." },
5343
- { configKey: "valueFormat", attribute: "value-format", converter: W(["json", "csv", "array"], { default: "json" }), on: "reinit", description: "Serialization format the control emits its value in." },
5344
- { configKey: "badgeTooltipPlacement", attribute: "badge-tooltip-placement", converter: W(Ys, { default: "top" }), on: "update", description: "Preferred placement of a badge tooltip relative to its badge (floating-ui placement)." },
5345
- { configKey: "optionTooltipPlacement", attribute: "option-tooltip-placement", converter: W(Ys, { default: "top-start" }), on: "update", description: "Preferred placement of an option tooltip (floating-ui placement)." },
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: W(["auto", "floating", "fullscreen"], { default: "auto" }),
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: B("default-false"),
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: B("default-true"), on: "reinit", description: "Allow selecting multiple options. When off, selecting one replaces the previous." },
5377
- { configKey: "isGroupsAllowed", attribute: "allow-groups", converter: B("default-true"), on: "reinit", description: "Allow grouping options under group headers." },
5378
- { configKey: "isCheckboxesShown", attribute: "show-checkboxes", converter: B("default-true"), on: "reinit", description: "Show a checkbox on each option." },
5379
- { configKey: "isActionsSticky", attribute: "sticky-actions", converter: B("default-true"), on: "update", description: "Keep the action bar pinned while the list scrolls." },
5380
- { configKey: "isPlacementLocked", attribute: "lock-placement", converter: B("default-true"), on: "update", description: "Keep the dropdown initial placement instead of flipping when it fits." },
5381
- { configKey: "isSearchEnabled", attribute: "enable-search", converter: B("default-true"), on: "reinit", description: "Show the search input." },
5382
- { configKey: "isKeepOptionsOnSearch", attribute: "keep-options-on-search", converter: B("default-true"), on: "update", description: "Keep already-selected options visible while filtering." },
5383
- { configKey: "shouldKeepSearchOnClose", attribute: "should-keep-search-on-close", converter: B("default-true"), on: "update", description: "Preserve the search text after the dropdown closes." },
5384
- { configKey: "isSelectedPopoverEnabled", attribute: "enable-selected-popover", converter: B("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.' },
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: B("default-false"), on: "update", description: "Close the dropdown immediately after a selection." },
5387
- { configKey: "isAddNewAllowed", attribute: "allow-add-new", converter: B("default-false"), on: "reinit", description: "Allow adding a new option from the search text." },
5388
- { configKey: "isCounterShown", attribute: "show-counter", converter: B("default-false"), on: "update", description: "Show a selected-count indicator." },
5389
- { configKey: "isClearShown", attribute: "show-clear", converter: B("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." },
5390
- { configKey: "isBadgeFullTitleShown", attribute: "show-badge-full-title", converter: B("default-false"), on: "update", description: "Show the full title on badges instead of the short label." },
5391
- { configKey: "isVirtualScrollEnabled", attribute: "enable-virtual-scroll", converter: B("default-false"), on: "reinit", description: "Force virtual scrolling on regardless of the threshold." },
5392
- { configKey: "isBadgeTooltipsEnabled", attribute: "enable-badge-tooltips", converter: B("default-false"), on: "update", description: "Enable tooltips on badges." },
5393
- { configKey: "isOptionTooltipsEnabled", attribute: "enable-option-tooltips", converter: B("default-false"), on: "update", description: "Enable tooltips on options." },
5394
- { configKey: "isOptionTooltipFollowCursor", attribute: "option-tooltip-follow-cursor", converter: B("default-false"), on: "update", description: "Make option tooltips follow the pointer." },
5395
- { configKey: "isSearchModeToggleShown", attribute: "show-search-mode-toggle", converter: B("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." },
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: B("default-false"), on: "update", description: "Render an in-component debug panel.", deprecated: "Use per-instance logging (el.enableLogging()) instead." },
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: z({ 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." },
5402
- { configKey: "optionsFormat", attribute: "data-options-format", converter: W(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`." },
5403
- { configKey: "optionsSplitter", attribute: "data-options-splitter", converter: z({ 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`.' },
5404
- { configKey: "optionsRowSplitter", attribute: "data-options-row-splitter", converter: z({ default: `
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
- ], Js = /* @__PURE__ */ new Set(["dropdownWidth", "selectedPopoverWidth", "showDebugInfo", "initialValues", "optionsSource", "optionsFormat", "optionsSplitter", "optionsRowSplitter", "mobilePresentation", "collapseBadgesBelow"]), gt = {
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 yn() {
5451
- return vn ?? (vn = Ai(Oo, "--ms-"));
5623
+ function wn() {
5624
+ return vn ?? (vn = Ai(Po, "--ms-"));
5452
5625
  }
5453
- const wn = [
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, O, fe, ct, dt, ht, He, Fe, Ie, x, wt, ge, xt, is, rs, ns, as, Po, Mo, Lo, _t, ls, Eo, Ao, zo, cs, No, Vo, ds, hs;
5462
- class tt extends Yt {
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, O);
5640
+ L(this, k);
5468
5641
  L(this, fe);
5469
- L(this, ct, null);
5642
+ L(this, dt, null);
5470
5643
  // Dev-mode customStylesCallback lint: unknown --ms-* names already warned about.
5471
- L(this, dt, /* @__PURE__ */ new Set());
5644
+ L(this, ht, /* @__PURE__ */ new Set());
5472
5645
  // Declarative <option>/<optgroup> state (parsed once from light DOM).
5473
- L(this, ht, !1);
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
- I(this, Z, this.attachShadow({ mode: "open" })), Li(h(this, Z), Oo), typeof requestAnimationFrame == "function" ? requestAnimationFrame(() => this.setAttribute("data-ready", "")) : this.setAttribute("data-ready", "");
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, O)) == null || t.clearAll();
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, O)) == null || o.refreshDirection();
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
- v(this, x, Ao).call(this), this.isConnected && v(this, x, ns).call(this);
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
- v(this, x, zo).call(this, t), "customStylesCallback" in t && v(this, x, ls).call(this), "showDebugInfo" in t && v(this, x, ds).call(this);
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, O) && Object.keys(o).length > 0 && (h(this, O).updateOptions(o) || v(this, x, ns).call(this)), "mobilePresentation" in t && v(this, x, wt).call(this, It()), "collapseBadgesBelow" in t && v(this, x, xt).call(this, this.getBoundingClientRect().width);
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, O) || v(this, x, as).call(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, O)) == null || t.destroy(), I(this, O, void 0);
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
- v(this, x, wt).call(this, t);
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
- v(this, x, xt).call(this, t);
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, O)) == null ? void 0 : t.selectedValue) ?? null;
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, O)) == null ? void 0 : t.selectedItem) ?? null;
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, O) ? h(this, O).getSelected() : [];
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, O)) == null || i.setSelected(t, o);
5736
+ this.flush(), (i = h(this, k)) == null || i.setSelected(t, o);
5564
5737
  }
5565
5738
  getValue() {
5566
- return this.flush(), h(this, O) ? h(this, O).getValue() : null;
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, O)) == null || i.showMessage(t, o);
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, O)) == null || t.hideMessage();
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, O)) == null || t.open();
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, O)) == null || t.close();
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, O)) == null || t.toggle();
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, O)) == null ? void 0 : t.isOpen) ?? !1;
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, O) && (h(this, O).isOpen = t);
5829
+ this.flush(), h(this, k) && (h(this, k).isOpen = t);
5607
5830
  }
5608
5831
  destroy() {
5609
5832
  var t;
5610
- (t = h(this, O)) == null || t.destroy();
5833
+ (t = h(this, k)) == null || t.destroy();
5611
5834
  }
5612
5835
  }
5613
- Z = new WeakMap(), O = new WeakMap(), fe = new WeakMap(), ct = new WeakMap(), dt = new WeakMap(), ht = 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. */
5614
- wt = function(t) {
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 = $i(o, t);
5617
- (r = h(this, O)) == null || r.setPresentation(i === "modal" ? "fullscreen" : i);
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
- xt = function(t) {
5848
+ _t = function(t) {
5626
5849
  const o = this.config.collapseBadgesBelow;
5627
5850
  if (o == null) {
5628
- h(this, ge) && (I(this, ge, !1), v(this, x, is).call(this));
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) && (I(this, ge, i), i ? v(this, x, rs).call(this, "count") : v(this, x, is).call(this));
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
- v(this, x, rs).call(this, t);
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, O)) == null || o.updateOptions({ badgesDisplayMode: t });
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, O)) == null || t.destroy(), I(this, O, void 0), v(this, x, as).call(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
- v(this, x, Po).call(this), v(this, x, No).call(this);
5647
- const t = v(this, x, Mo).call(this), o = v(this, x, Lo).call(this);
5648
- o && o.length > 0 ? h(this, fe).dataset.initialValues = JSON.stringify(o) : delete h(this, fe).dataset.initialValues, I(this, O, new ln(h(this, fe), t)), v(this, x, ls).call(this), v(this, x, ds).call(this), v(this, x, wt).call(this, It()), I(this, ge, !1), v(this, x, xt).call(this, this.getBoundingClientRect().width);
5649
- }, Po = function() {
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), I(this, ct, Ei(h(this, Z), { position: "first", className: "ms-custom-styles" })), I(this, fe, 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 wn)
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, O)) == null ? void 0 : r.getSelected()) ?? [],
5684
- selectedValues: v(this, x, _t).call(this)
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, O)) == null ? void 0 : r.getSelected()) ?? [],
5691
- selectedValues: v(this, x, _t).call(this)
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: v(this, x, _t).call(this)
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
- }, _t = function() {
5935
+ }, et = function() {
5705
5936
  var o;
5706
- const t = (o = h(this, O)) == null ? void 0 : o.getValue();
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, ct);
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 && v(this, x, Eo).call(this, 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 = yn();
5964
+ const o = wn();
5734
5965
  if (o.size !== 0)
5735
- for (const { name: i, suggestions: r } of Vi(t, { prefix: "--ms-", consumed: o }))
5736
- h(this, dt).has(i) || (h(this, dt).add(i), console.warn(
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(gt)) v(this, x, cs).call(this, gt[t], this.config[t]);
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(gt))
5744
- o in t && v(this, x, cs).call(this, gt[o], t[o]);
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, ht)) return;
5750
- I(this, ht, !0);
5751
- const t = v(this, x, Vo).call(this);
5752
- t && (I(this, Fe, t), I(this, He, !0));
5753
- }, Vo = function() {
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) ?? I(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;
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), v(this, x, hs).call(this);
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, O)) return;
5793
- const o = "2.0.0-rc12", i = typeof window < "u" && ((c = (l = window.components) == null ? void 0 : l["web-multiselect"]) == null ? void 0 : c.getInstances().length) || 0, r = h(this, O).getSelected().length, n = ((d = this.config.options) == null ? void 0 : d.length) || 0, a = h(this, O);
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 && v(this, x, hs).call(this);
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
- m(tt, "formAssociated", !0), m(tt, "inputs", gn), m(tt, "events", bn);
5809
- typeof customElements < "u" && !customElements.get("web-multiselect") && customElements.define("web-multiselect", tt);
5810
- Pi("web-multiselect", tt, {
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-rc12",
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
- tt as MultiSelectElement,
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
- ft as initLogger,
5834
- j as interactionLogger,
6064
+ gt as initLogger,
6065
+ R as interactionLogger,
5835
6066
  ii as observeEnvironment,
5836
6067
  ri as observeViewport,
5837
6068
  hn as parseOptionsData,