@keenmate/web-multiselect 1.12.0-rc05 → 1.12.0-rc06

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,78 +1,78 @@
1
- var ht = Object.defineProperty;
2
- var mt = (o, e, t) => e in o ? ht(o, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[e] = t;
3
- var d = (o, e, t) => mt(o, typeof e != "symbol" ? e + "" : e, t);
4
- const ie = Math.min, F = Math.max, re = Math.round, se = Math.floor, L = (o) => ({
1
+ var vt = Object.defineProperty;
2
+ var _t = (o, e, t) => e in o ? vt(o, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[e] = t;
3
+ var h = (o, e, t) => _t(o, typeof e != "symbol" ? e + "" : e, t);
4
+ const he = Math.min, X = Math.max, me = Math.round, ce = Math.floor, F = (o) => ({
5
5
  x: o,
6
6
  y: o
7
- }), pt = {
7
+ }), kt = {
8
8
  left: "right",
9
9
  right: "left",
10
10
  bottom: "top",
11
11
  top: "bottom"
12
- }, ut = {
12
+ }, yt = {
13
13
  start: "end",
14
14
  end: "start"
15
15
  };
16
- function De(o, e, t) {
17
- return F(o, ie(e, t));
16
+ function Be(o, e, t) {
17
+ return X(o, he(e, t));
18
18
  }
19
- function le(o, e) {
19
+ function be(o, e) {
20
20
  return typeof o == "function" ? o(e) : o;
21
21
  }
22
- function N(o) {
22
+ function J(o) {
23
23
  return o.split("-")[0];
24
24
  }
25
- function ce(o) {
25
+ function ge(o) {
26
26
  return o.split("-")[1];
27
27
  }
28
- function Ge(o) {
28
+ function Qe(o) {
29
29
  return o === "x" ? "y" : "x";
30
30
  }
31
- function Ke(o) {
31
+ function et(o) {
32
32
  return o === "y" ? "height" : "width";
33
33
  }
34
- const bt = /* @__PURE__ */ new Set(["top", "bottom"]);
35
- function V(o) {
36
- return bt.has(N(o)) ? "y" : "x";
34
+ const wt = /* @__PURE__ */ new Set(["top", "bottom"]);
35
+ function G(o) {
36
+ return wt.has(J(o)) ? "y" : "x";
37
37
  }
38
- function qe(o) {
39
- return Ge(V(o));
38
+ function tt(o) {
39
+ return Qe(G(o));
40
40
  }
41
- function gt(o, e, t) {
41
+ function xt(o, e, t) {
42
42
  t === void 0 && (t = !1);
43
- const s = ce(o), i = qe(o), r = Ke(i);
44
- let n = i === "x" ? s === (t ? "end" : "start") ? "right" : "left" : s === "start" ? "bottom" : "top";
45
- return e.reference[r] > e.floating[r] && (n = ne(n)), [n, ne(n)];
43
+ const s = ge(o), i = tt(o), r = et(i);
44
+ let a = i === "x" ? s === (t ? "end" : "start") ? "right" : "left" : s === "start" ? "bottom" : "top";
45
+ return e.reference[r] > e.floating[r] && (a = pe(a)), [a, pe(a)];
46
46
  }
47
- function ft(o) {
48
- const e = ne(o);
49
- return [fe(o), e, fe(e)];
47
+ function Ct(o) {
48
+ const e = pe(o);
49
+ return [we(o), e, we(e)];
50
50
  }
51
- function fe(o) {
52
- return o.replace(/start|end/g, (e) => ut[e]);
51
+ function we(o) {
52
+ return o.replace(/start|end/g, (e) => yt[e]);
53
53
  }
54
- const ze = ["left", "right"], Ve = ["right", "left"], vt = ["top", "bottom"], _t = ["bottom", "top"];
55
- function yt(o, e, t) {
54
+ const $e = ["left", "right"], Re = ["right", "left"], St = ["top", "bottom"], Tt = ["bottom", "top"];
55
+ function It(o, e, t) {
56
56
  switch (o) {
57
57
  case "top":
58
58
  case "bottom":
59
- return t ? e ? Ve : ze : e ? ze : Ve;
59
+ return t ? e ? Re : $e : e ? $e : Re;
60
60
  case "left":
61
61
  case "right":
62
- return e ? vt : _t;
62
+ return e ? St : Tt;
63
63
  default:
64
64
  return [];
65
65
  }
66
66
  }
67
- function wt(o, e, t, s) {
68
- const i = ce(o);
69
- let r = yt(N(o), t === "start", s);
70
- return i && (r = r.map((n) => n + "-" + i), e && (r = r.concat(r.map(fe)))), r;
67
+ function Mt(o, e, t, s) {
68
+ const i = ge(o);
69
+ let r = It(J(o), t === "start", s);
70
+ return i && (r = r.map((a) => a + "-" + i), e && (r = r.concat(r.map(we)))), r;
71
71
  }
72
- function ne(o) {
73
- return o.replace(/left|right|bottom|top/g, (e) => pt[e]);
72
+ function pe(o) {
73
+ return o.replace(/left|right|bottom|top/g, (e) => kt[e]);
74
74
  }
75
- function kt(o) {
75
+ function Ot(o) {
76
76
  return {
77
77
  top: 0,
78
78
  right: 0,
@@ -81,15 +81,15 @@ function kt(o) {
81
81
  ...o
82
82
  };
83
83
  }
84
- function xt(o) {
85
- return typeof o != "number" ? kt(o) : {
84
+ function At(o) {
85
+ return typeof o != "number" ? Ot(o) : {
86
86
  top: o,
87
87
  right: o,
88
88
  bottom: o,
89
89
  left: o
90
90
  };
91
91
  }
92
- function ae(o) {
92
+ function ue(o) {
93
93
  const {
94
94
  x: e,
95
95
  y: t,
@@ -107,161 +107,161 @@ function ae(o) {
107
107
  y: t
108
108
  };
109
109
  }
110
- function Be(o, e, t) {
110
+ function Fe(o, e, t) {
111
111
  let {
112
112
  reference: s,
113
113
  floating: i
114
114
  } = o;
115
- const r = V(e), n = qe(e), a = Ke(n), l = N(e), h = r === "y", c = s.x + s.width / 2 - i.width / 2, p = s.y + s.height / 2 - i.height / 2, u = s[a] / 2 - i[a] / 2;
116
- let m;
115
+ const r = G(e), a = tt(e), n = et(a), l = J(e), d = r === "y", c = s.x + s.width / 2 - i.width / 2, m = s.y + s.height / 2 - i.height / 2, u = s[n] / 2 - i[n] / 2;
116
+ let p;
117
117
  switch (l) {
118
118
  case "top":
119
- m = {
119
+ p = {
120
120
  x: c,
121
121
  y: s.y - i.height
122
122
  };
123
123
  break;
124
124
  case "bottom":
125
- m = {
125
+ p = {
126
126
  x: c,
127
127
  y: s.y + s.height
128
128
  };
129
129
  break;
130
130
  case "right":
131
- m = {
131
+ p = {
132
132
  x: s.x + s.width,
133
- y: p
133
+ y: m
134
134
  };
135
135
  break;
136
136
  case "left":
137
- m = {
137
+ p = {
138
138
  x: s.x - i.width,
139
- y: p
139
+ y: m
140
140
  };
141
141
  break;
142
142
  default:
143
- m = {
143
+ p = {
144
144
  x: s.x,
145
145
  y: s.y
146
146
  };
147
147
  }
148
- switch (ce(e)) {
148
+ switch (ge(e)) {
149
149
  case "start":
150
- m[n] -= u * (t && h ? -1 : 1);
150
+ p[a] -= u * (t && d ? -1 : 1);
151
151
  break;
152
152
  case "end":
153
- m[n] += u * (t && h ? -1 : 1);
153
+ p[a] += u * (t && d ? -1 : 1);
154
154
  break;
155
155
  }
156
- return m;
156
+ return p;
157
157
  }
158
- const Ct = async (o, e, t) => {
158
+ const Pt = async (o, e, t) => {
159
159
  const {
160
160
  placement: s = "bottom",
161
161
  strategy: i = "absolute",
162
162
  middleware: r = [],
163
- platform: n
164
- } = t, a = r.filter(Boolean), l = await (n.isRTL == null ? void 0 : n.isRTL(e));
165
- let h = await n.getElementRects({
163
+ platform: a
164
+ } = t, n = r.filter(Boolean), l = await (a.isRTL == null ? void 0 : a.isRTL(e));
165
+ let d = await a.getElementRects({
166
166
  reference: o,
167
167
  floating: e,
168
168
  strategy: i
169
169
  }), {
170
170
  x: c,
171
- y: p
172
- } = Be(h, s, l), u = s, m = {}, b = 0;
173
- for (let f = 0; f < a.length; f++) {
171
+ y: m
172
+ } = Fe(d, s, l), u = s, p = {}, b = 0;
173
+ for (let v = 0; v < n.length; v++) {
174
174
  const {
175
- name: g,
176
- fn: v
177
- } = a[f], {
175
+ name: f,
176
+ fn: g
177
+ } = n[v], {
178
178
  x: _,
179
- y: w,
180
- data: C,
181
- reset: k
182
- } = await v({
179
+ y,
180
+ data: w,
181
+ reset: M
182
+ } = await g({
183
183
  x: c,
184
- y: p,
184
+ y: m,
185
185
  initialPlacement: s,
186
186
  placement: u,
187
187
  strategy: i,
188
- middlewareData: m,
189
- rects: h,
190
- platform: n,
188
+ middlewareData: p,
189
+ rects: d,
190
+ platform: a,
191
191
  elements: {
192
192
  reference: o,
193
193
  floating: e
194
194
  }
195
195
  });
196
- c = _ ?? c, p = w ?? p, m = {
197
- ...m,
198
- [g]: {
199
- ...m[g],
200
- ...C
196
+ c = _ ?? c, m = y ?? m, p = {
197
+ ...p,
198
+ [f]: {
199
+ ...p[f],
200
+ ...w
201
201
  }
202
- }, k && b <= 50 && (b++, typeof k == "object" && (k.placement && (u = k.placement), k.rects && (h = k.rects === !0 ? await n.getElementRects({
202
+ }, M && b <= 50 && (b++, typeof M == "object" && (M.placement && (u = M.placement), M.rects && (d = M.rects === !0 ? await a.getElementRects({
203
203
  reference: o,
204
204
  floating: e,
205
205
  strategy: i
206
- }) : k.rects), {
206
+ }) : M.rects), {
207
207
  x: c,
208
- y: p
209
- } = Be(h, u, l)), f = -1);
208
+ y: m
209
+ } = Fe(d, u, l)), v = -1);
210
210
  }
211
211
  return {
212
212
  x: c,
213
- y: p,
213
+ y: m,
214
214
  placement: u,
215
215
  strategy: i,
216
- middlewareData: m
216
+ middlewareData: p
217
217
  };
218
218
  };
219
- async function Ye(o, e) {
219
+ async function st(o, e) {
220
220
  var t;
221
221
  e === void 0 && (e = {});
222
222
  const {
223
223
  x: s,
224
224
  y: i,
225
225
  platform: r,
226
- rects: n,
227
- elements: a,
226
+ rects: a,
227
+ elements: n,
228
228
  strategy: l
229
229
  } = o, {
230
- boundary: h = "clippingAncestors",
230
+ boundary: d = "clippingAncestors",
231
231
  rootBoundary: c = "viewport",
232
- elementContext: p = "floating",
232
+ elementContext: m = "floating",
233
233
  altBoundary: u = !1,
234
- padding: m = 0
235
- } = le(e, o), b = xt(m), g = a[u ? p === "floating" ? "reference" : "floating" : p], v = ae(await r.getClippingRect({
236
- element: (t = await (r.isElement == null ? void 0 : r.isElement(g))) == null || t ? g : g.contextElement || await (r.getDocumentElement == null ? void 0 : r.getDocumentElement(a.floating)),
237
- boundary: h,
234
+ padding: p = 0
235
+ } = be(e, o), b = At(p), f = n[u ? m === "floating" ? "reference" : "floating" : m], g = ue(await r.getClippingRect({
236
+ element: (t = await (r.isElement == null ? void 0 : r.isElement(f))) == null || t ? f : f.contextElement || await (r.getDocumentElement == null ? void 0 : r.getDocumentElement(n.floating)),
237
+ boundary: d,
238
238
  rootBoundary: c,
239
239
  strategy: l
240
- })), _ = p === "floating" ? {
240
+ })), _ = m === "floating" ? {
241
241
  x: s,
242
242
  y: i,
243
- width: n.floating.width,
244
- height: n.floating.height
245
- } : n.reference, w = await (r.getOffsetParent == null ? void 0 : r.getOffsetParent(a.floating)), C = await (r.isElement == null ? void 0 : r.isElement(w)) ? await (r.getScale == null ? void 0 : r.getScale(w)) || {
243
+ width: a.floating.width,
244
+ height: a.floating.height
245
+ } : a.reference, y = await (r.getOffsetParent == null ? void 0 : r.getOffsetParent(n.floating)), w = await (r.isElement == null ? void 0 : r.isElement(y)) ? await (r.getScale == null ? void 0 : r.getScale(y)) || {
246
246
  x: 1,
247
247
  y: 1
248
248
  } : {
249
249
  x: 1,
250
250
  y: 1
251
- }, k = ae(r.convertOffsetParentRelativeRectToViewportRelativeRect ? await r.convertOffsetParentRelativeRectToViewportRelativeRect({
252
- elements: a,
251
+ }, M = ue(r.convertOffsetParentRelativeRectToViewportRelativeRect ? await r.convertOffsetParentRelativeRectToViewportRelativeRect({
252
+ elements: n,
253
253
  rect: _,
254
- offsetParent: w,
254
+ offsetParent: y,
255
255
  strategy: l
256
256
  }) : _);
257
257
  return {
258
- top: (v.top - k.top + b.top) / C.y,
259
- bottom: (k.bottom - v.bottom + b.bottom) / C.y,
260
- left: (v.left - k.left + b.left) / C.x,
261
- right: (k.right - v.right + b.right) / C.x
258
+ top: (g.top - M.top + b.top) / w.y,
259
+ bottom: (M.bottom - g.bottom + b.bottom) / w.y,
260
+ left: (g.left - M.left + b.left) / w.x,
261
+ right: (M.right - g.right + b.right) / w.x
262
262
  };
263
263
  }
264
- const St = function(o) {
264
+ const Lt = function(o) {
265
265
  return o === void 0 && (o = {}), {
266
266
  name: "flip",
267
267
  options: o,
@@ -270,107 +270,107 @@ const St = function(o) {
270
270
  const {
271
271
  placement: i,
272
272
  middlewareData: r,
273
- rects: n,
274
- initialPlacement: a,
273
+ rects: a,
274
+ initialPlacement: n,
275
275
  platform: l,
276
- elements: h
276
+ elements: d
277
277
  } = e, {
278
278
  mainAxis: c = !0,
279
- crossAxis: p = !0,
279
+ crossAxis: m = !0,
280
280
  fallbackPlacements: u,
281
- fallbackStrategy: m = "bestFit",
281
+ fallbackStrategy: p = "bestFit",
282
282
  fallbackAxisSideDirection: b = "none",
283
- flipAlignment: f = !0,
284
- ...g
285
- } = le(o, e);
283
+ flipAlignment: v = !0,
284
+ ...f
285
+ } = be(o, e);
286
286
  if ((t = r.arrow) != null && t.alignmentOffset)
287
287
  return {};
288
- const v = N(i), _ = V(a), w = N(a) === a, C = await (l.isRTL == null ? void 0 : l.isRTL(h.floating)), k = u || (w || !f ? [ne(a)] : ft(a)), Y = b !== "none";
289
- !u && Y && k.push(...wt(a, f, b, C));
290
- const j = [a, ...k], ue = await Ye(e, g), te = [];
291
- let U = ((s = r.flip) == null ? void 0 : s.overflows) || [];
292
- if (c && te.push(ue[v]), p) {
293
- const $ = gt(i, n, C);
294
- te.push(ue[$[0]], ue[$[1]]);
288
+ const g = J(i), _ = G(n), y = J(n) === n, w = await (l.isRTL == null ? void 0 : l.isRTL(d.floating)), M = u || (y || !v ? [pe(n)] : Ct(n)), E = b !== "none";
289
+ !u && E && M.push(...Mt(n, v, b, w));
290
+ const j = [n, ...M], se = await st(e, f), I = [];
291
+ let C = ((s = r.flip) == null ? void 0 : s.overflows) || [];
292
+ if (c && I.push(se[g]), m) {
293
+ const k = xt(i, a, w);
294
+ I.push(se[k[0]], se[k[1]]);
295
295
  }
296
- if (U = [...U, {
296
+ if (C = [...C, {
297
297
  placement: i,
298
- overflows: te
299
- }], !te.every(($) => $ <= 0)) {
300
- var Pe, Le;
301
- const $ = (((Pe = r.flip) == null ? void 0 : Pe.index) || 0) + 1, be = j[$];
302
- if (be && (!(p === "alignment" ? _ !== V(be) : !1) || // We leave the current main axis only if every placement on that axis
298
+ overflows: I
299
+ }], !I.every((k) => k <= 0)) {
300
+ var x, S;
301
+ const k = (((x = r.flip) == null ? void 0 : x.index) || 0) + 1, P = j[k];
302
+ if (P && (!(m === "alignment" ? _ !== G(P) : !1) || // We leave the current main axis only if every placement on that axis
303
303
  // overflows the main axis.
304
- U.every((O) => V(O.placement) === _ ? O.overflows[0] > 0 : !0)))
304
+ C.every((D) => G(D.placement) === _ ? D.overflows[0] > 0 : !0)))
305
305
  return {
306
306
  data: {
307
- index: $,
308
- overflows: U
307
+ index: k,
308
+ overflows: C
309
309
  },
310
310
  reset: {
311
- placement: be
311
+ placement: P
312
312
  }
313
313
  };
314
- let X = (Le = U.filter((R) => R.overflows[0] <= 0).sort((R, O) => R.overflows[1] - O.overflows[1])[0]) == null ? void 0 : Le.placement;
315
- if (!X)
316
- switch (m) {
314
+ let oe = (S = C.filter((q) => q.overflows[0] <= 0).sort((q, D) => q.overflows[1] - D.overflows[1])[0]) == null ? void 0 : S.placement;
315
+ if (!oe)
316
+ switch (p) {
317
317
  case "bestFit": {
318
- var Ee;
319
- const R = (Ee = U.filter((O) => {
320
- if (Y) {
321
- const z = V(O.placement);
322
- return z === _ || // Create a bias to the `y` side axis due to horizontal
318
+ var A;
319
+ const q = (A = C.filter((D) => {
320
+ if (E) {
321
+ const W = G(D.placement);
322
+ return W === _ || // Create a bias to the `y` side axis due to horizontal
323
323
  // reading directions favoring greater width.
324
- z === "y";
324
+ W === "y";
325
325
  }
326
326
  return !0;
327
- }).map((O) => [O.placement, O.overflows.filter((z) => z > 0).reduce((z, dt) => z + dt, 0)]).sort((O, z) => O[1] - z[1])[0]) == null ? void 0 : Ee[0];
328
- R && (X = R);
327
+ }).map((D) => [D.placement, D.overflows.filter((W) => W > 0).reduce((W, ft) => W + ft, 0)]).sort((D, W) => D[1] - W[1])[0]) == null ? void 0 : A[0];
328
+ q && (oe = q);
329
329
  break;
330
330
  }
331
331
  case "initialPlacement":
332
- X = a;
332
+ oe = n;
333
333
  break;
334
334
  }
335
- if (i !== X)
335
+ if (i !== oe)
336
336
  return {
337
337
  reset: {
338
- placement: X
338
+ placement: oe
339
339
  }
340
340
  };
341
341
  }
342
342
  return {};
343
343
  }
344
344
  };
345
- }, Tt = /* @__PURE__ */ new Set(["left", "top"]);
346
- async function Ot(o, e) {
345
+ }, Et = /* @__PURE__ */ new Set(["left", "top"]);
346
+ async function Vt(o, e) {
347
347
  const {
348
348
  placement: t,
349
349
  platform: s,
350
350
  elements: i
351
- } = o, r = await (s.isRTL == null ? void 0 : s.isRTL(i.floating)), n = N(t), a = ce(t), l = V(t) === "y", h = Tt.has(n) ? -1 : 1, c = r && l ? -1 : 1, p = le(e, o);
351
+ } = o, r = await (s.isRTL == null ? void 0 : s.isRTL(i.floating)), a = J(t), n = ge(t), l = G(t) === "y", d = Et.has(a) ? -1 : 1, c = r && l ? -1 : 1, m = be(e, o);
352
352
  let {
353
353
  mainAxis: u,
354
- crossAxis: m,
354
+ crossAxis: p,
355
355
  alignmentAxis: b
356
- } = typeof p == "number" ? {
357
- mainAxis: p,
356
+ } = typeof m == "number" ? {
357
+ mainAxis: m,
358
358
  crossAxis: 0,
359
359
  alignmentAxis: null
360
360
  } : {
361
- mainAxis: p.mainAxis || 0,
362
- crossAxis: p.crossAxis || 0,
363
- alignmentAxis: p.alignmentAxis
361
+ mainAxis: m.mainAxis || 0,
362
+ crossAxis: m.crossAxis || 0,
363
+ alignmentAxis: m.alignmentAxis
364
364
  };
365
- return a && typeof b == "number" && (m = a === "end" ? b * -1 : b), l ? {
366
- x: m * c,
367
- y: u * h
365
+ return n && typeof b == "number" && (p = n === "end" ? b * -1 : b), l ? {
366
+ x: p * c,
367
+ y: u * d
368
368
  } : {
369
- x: u * h,
370
- y: m * c
369
+ x: u * d,
370
+ y: p * c
371
371
  };
372
372
  }
373
- const It = function(o) {
373
+ const Dt = function(o) {
374
374
  return o === void 0 && (o = 0), {
375
375
  name: "offset",
376
376
  options: o,
@@ -379,20 +379,20 @@ const It = function(o) {
379
379
  const {
380
380
  x: i,
381
381
  y: r,
382
- placement: n,
383
- middlewareData: a
384
- } = e, l = await Ot(e, o);
385
- return n === ((t = a.offset) == null ? void 0 : t.placement) && (s = a.arrow) != null && s.alignmentOffset ? {} : {
382
+ placement: a,
383
+ middlewareData: n
384
+ } = e, l = await Vt(e, o);
385
+ return a === ((t = n.offset) == null ? void 0 : t.placement) && (s = n.arrow) != null && s.alignmentOffset ? {} : {
386
386
  x: i + l.x,
387
387
  y: r + l.y,
388
388
  data: {
389
389
  ...l,
390
- placement: n
390
+ placement: a
391
391
  }
392
392
  };
393
393
  }
394
394
  };
395
- }, At = function(o) {
395
+ }, zt = function(o) {
396
396
  return o === void 0 && (o = {}), {
397
397
  name: "shift",
398
398
  options: o,
@@ -403,95 +403,95 @@ const It = function(o) {
403
403
  placement: i
404
404
  } = e, {
405
405
  mainAxis: r = !0,
406
- crossAxis: n = !1,
407
- limiter: a = {
408
- fn: (g) => {
406
+ crossAxis: a = !1,
407
+ limiter: n = {
408
+ fn: (f) => {
409
409
  let {
410
- x: v,
410
+ x: g,
411
411
  y: _
412
- } = g;
412
+ } = f;
413
413
  return {
414
- x: v,
414
+ x: g,
415
415
  y: _
416
416
  };
417
417
  }
418
418
  },
419
419
  ...l
420
- } = le(o, e), h = {
420
+ } = be(o, e), d = {
421
421
  x: t,
422
422
  y: s
423
- }, c = await Ye(e, l), p = V(N(i)), u = Ge(p);
424
- let m = h[u], b = h[p];
423
+ }, c = await st(e, l), m = G(J(i)), u = Qe(m);
424
+ let p = d[u], b = d[m];
425
425
  if (r) {
426
- const g = u === "y" ? "top" : "left", v = u === "y" ? "bottom" : "right", _ = m + c[g], w = m - c[v];
427
- m = De(_, m, w);
426
+ const f = u === "y" ? "top" : "left", g = u === "y" ? "bottom" : "right", _ = p + c[f], y = p - c[g];
427
+ p = Be(_, p, y);
428
428
  }
429
- if (n) {
430
- const g = p === "y" ? "top" : "left", v = p === "y" ? "bottom" : "right", _ = b + c[g], w = b - c[v];
431
- b = De(_, b, w);
429
+ if (a) {
430
+ const f = m === "y" ? "top" : "left", g = m === "y" ? "bottom" : "right", _ = b + c[f], y = b - c[g];
431
+ b = Be(_, b, y);
432
432
  }
433
- const f = a.fn({
433
+ const v = n.fn({
434
434
  ...e,
435
- [u]: m,
436
- [p]: b
435
+ [u]: p,
436
+ [m]: b
437
437
  });
438
438
  return {
439
- ...f,
439
+ ...v,
440
440
  data: {
441
- x: f.x - t,
442
- y: f.y - s,
441
+ x: v.x - t,
442
+ y: v.y - s,
443
443
  enabled: {
444
444
  [u]: r,
445
- [p]: n
445
+ [m]: a
446
446
  }
447
447
  }
448
448
  };
449
449
  }
450
450
  };
451
451
  };
452
- function de() {
452
+ function fe() {
453
453
  return typeof window < "u";
454
454
  }
455
- function q(o) {
456
- return Xe(o) ? (o.nodeName || "").toLowerCase() : "#document";
455
+ function te(o) {
456
+ return ot(o) ? (o.nodeName || "").toLowerCase() : "#document";
457
457
  }
458
- function T(o) {
458
+ function V(o) {
459
459
  var e;
460
460
  return (o == null || (e = o.ownerDocument) == null ? void 0 : e.defaultView) || window;
461
461
  }
462
- function D(o) {
462
+ function N(o) {
463
463
  var e;
464
- return (e = (Xe(o) ? o.ownerDocument : o.document) || window.document) == null ? void 0 : e.documentElement;
464
+ return (e = (ot(o) ? o.ownerDocument : o.document) || window.document) == null ? void 0 : e.documentElement;
465
465
  }
466
- function Xe(o) {
467
- return de() ? o instanceof Node || o instanceof T(o).Node : !1;
466
+ function ot(o) {
467
+ return fe() ? o instanceof Node || o instanceof V(o).Node : !1;
468
468
  }
469
- function A(o) {
470
- return de() ? o instanceof Element || o instanceof T(o).Element : !1;
469
+ function B(o) {
470
+ return fe() ? o instanceof Element || o instanceof V(o).Element : !1;
471
471
  }
472
- function E(o) {
473
- return de() ? o instanceof HTMLElement || o instanceof T(o).HTMLElement : !1;
472
+ function H(o) {
473
+ return fe() ? o instanceof HTMLElement || o instanceof V(o).HTMLElement : !1;
474
474
  }
475
- function $e(o) {
476
- return !de() || typeof ShadowRoot > "u" ? !1 : o instanceof ShadowRoot || o instanceof T(o).ShadowRoot;
475
+ function He(o) {
476
+ return !fe() || typeof ShadowRoot > "u" ? !1 : o instanceof ShadowRoot || o instanceof V(o).ShadowRoot;
477
477
  }
478
- const Mt = /* @__PURE__ */ new Set(["inline", "contents"]);
479
- function ee(o) {
478
+ const Bt = /* @__PURE__ */ new Set(["inline", "contents"]);
479
+ function le(o) {
480
480
  const {
481
481
  overflow: e,
482
482
  overflowX: t,
483
483
  overflowY: s,
484
484
  display: i
485
- } = M(o);
486
- return /auto|scroll|overlay|hidden|clip/.test(e + s + t) && !Mt.has(i);
485
+ } = $(o);
486
+ return /auto|scroll|overlay|hidden|clip/.test(e + s + t) && !Bt.has(i);
487
487
  }
488
- const Pt = /* @__PURE__ */ new Set(["table", "td", "th"]);
489
- function Lt(o) {
490
- return Pt.has(q(o));
488
+ const $t = /* @__PURE__ */ new Set(["table", "td", "th"]);
489
+ function Rt(o) {
490
+ return $t.has(te(o));
491
491
  }
492
- const Et = [":popover-open", ":modal"];
493
- function he(o) {
494
- return Et.some((e) => {
492
+ const Ft = [":popover-open", ":modal"];
493
+ function ve(o) {
494
+ return Ft.some((e) => {
495
495
  try {
496
496
  return o.matches(e);
497
497
  } catch {
@@ -499,34 +499,34 @@ function he(o) {
499
499
  }
500
500
  });
501
501
  }
502
- const Dt = ["transform", "translate", "scale", "rotate", "perspective"], zt = ["transform", "translate", "scale", "rotate", "perspective", "filter"], Vt = ["paint", "layout", "strict", "content"];
503
- function Te(o) {
504
- const e = Oe(), t = A(o) ? M(o) : o;
505
- return Dt.some((s) => t[s] ? t[s] !== "none" : !1) || (t.containerType ? t.containerType !== "normal" : !1) || !e && (t.backdropFilter ? t.backdropFilter !== "none" : !1) || !e && (t.filter ? t.filter !== "none" : !1) || zt.some((s) => (t.willChange || "").includes(s)) || Vt.some((s) => (t.contain || "").includes(s));
502
+ const Ht = ["transform", "translate", "scale", "rotate", "perspective"], Nt = ["transform", "translate", "scale", "rotate", "perspective", "filter"], jt = ["paint", "layout", "strict", "content"];
503
+ function Pe(o) {
504
+ const e = Le(), t = B(o) ? $(o) : o;
505
+ return Ht.some((s) => t[s] ? t[s] !== "none" : !1) || (t.containerType ? t.containerType !== "normal" : !1) || !e && (t.backdropFilter ? t.backdropFilter !== "none" : !1) || !e && (t.filter ? t.filter !== "none" : !1) || Nt.some((s) => (t.willChange || "").includes(s)) || jt.some((s) => (t.contain || "").includes(s));
506
506
  }
507
- function Bt(o) {
508
- let e = B(o);
509
- for (; E(e) && !K(e); ) {
510
- if (Te(e))
507
+ function Wt(o) {
508
+ let e = K(o);
509
+ for (; H(e) && !ee(e); ) {
510
+ if (Pe(e))
511
511
  return e;
512
- if (he(e))
512
+ if (ve(e))
513
513
  return null;
514
- e = B(e);
514
+ e = K(e);
515
515
  }
516
516
  return null;
517
517
  }
518
- function Oe() {
518
+ function Le() {
519
519
  return typeof CSS > "u" || !CSS.supports ? !1 : CSS.supports("-webkit-backdrop-filter", "none");
520
520
  }
521
- const $t = /* @__PURE__ */ new Set(["html", "body", "#document"]);
522
- function K(o) {
523
- return $t.has(q(o));
521
+ const Ut = /* @__PURE__ */ new Set(["html", "body", "#document"]);
522
+ function ee(o) {
523
+ return Ut.has(te(o));
524
524
  }
525
- function M(o) {
526
- return T(o).getComputedStyle(o);
525
+ function $(o) {
526
+ return V(o).getComputedStyle(o);
527
527
  }
528
- function me(o) {
529
- return A(o) ? {
528
+ function _e(o) {
529
+ return B(o) ? {
530
530
  scrollLeft: o.scrollLeft,
531
531
  scrollTop: o.scrollTop
532
532
  } : {
@@ -534,189 +534,189 @@ function me(o) {
534
534
  scrollTop: o.scrollY
535
535
  };
536
536
  }
537
- function B(o) {
538
- if (q(o) === "html")
537
+ function K(o) {
538
+ if (te(o) === "html")
539
539
  return o;
540
540
  const e = (
541
541
  // Step into the shadow DOM of the parent of a slotted node.
542
542
  o.assignedSlot || // DOM Element detected.
543
543
  o.parentNode || // ShadowRoot detected.
544
- $e(o) && o.host || // Fallback.
545
- D(o)
544
+ He(o) && o.host || // Fallback.
545
+ N(o)
546
546
  );
547
- return $e(e) ? e.host : e;
547
+ return He(e) ? e.host : e;
548
548
  }
549
- function Je(o) {
550
- const e = B(o);
551
- return K(e) ? o.ownerDocument ? o.ownerDocument.body : o.body : E(e) && ee(e) ? e : Je(e);
549
+ function it(o) {
550
+ const e = K(o);
551
+ return ee(e) ? o.ownerDocument ? o.ownerDocument.body : o.body : H(e) && le(e) ? e : it(e);
552
552
  }
553
- function Z(o, e, t) {
553
+ function ae(o, e, t) {
554
554
  var s;
555
555
  e === void 0 && (e = []), t === void 0 && (t = !0);
556
- const i = Je(o), r = i === ((s = o.ownerDocument) == null ? void 0 : s.body), n = T(i);
556
+ const i = it(o), r = i === ((s = o.ownerDocument) == null ? void 0 : s.body), a = V(i);
557
557
  if (r) {
558
- const a = ve(n);
559
- return e.concat(n, n.visualViewport || [], ee(i) ? i : [], a && t ? Z(a) : []);
558
+ const n = xe(a);
559
+ return e.concat(a, a.visualViewport || [], le(i) ? i : [], n && t ? ae(n) : []);
560
560
  }
561
- return e.concat(i, Z(i, [], t));
561
+ return e.concat(i, ae(i, [], t));
562
562
  }
563
- function ve(o) {
563
+ function xe(o) {
564
564
  return o.parent && Object.getPrototypeOf(o.parent) ? o.frameElement : null;
565
565
  }
566
- function Ze(o) {
567
- const e = M(o);
566
+ function rt(o) {
567
+ const e = $(o);
568
568
  let t = parseFloat(e.width) || 0, s = parseFloat(e.height) || 0;
569
- const i = E(o), r = i ? o.offsetWidth : t, n = i ? o.offsetHeight : s, a = re(t) !== r || re(s) !== n;
570
- return a && (t = r, s = n), {
569
+ const i = H(o), r = i ? o.offsetWidth : t, a = i ? o.offsetHeight : s, n = me(t) !== r || me(s) !== a;
570
+ return n && (t = r, s = a), {
571
571
  width: t,
572
572
  height: s,
573
- $: a
573
+ $: n
574
574
  };
575
575
  }
576
- function Ie(o) {
577
- return A(o) ? o : o.contextElement;
576
+ function Ee(o) {
577
+ return B(o) ? o : o.contextElement;
578
578
  }
579
- function G(o) {
580
- const e = Ie(o);
581
- if (!E(e))
582
- return L(1);
579
+ function Q(o) {
580
+ const e = Ee(o);
581
+ if (!H(e))
582
+ return F(1);
583
583
  const t = e.getBoundingClientRect(), {
584
584
  width: s,
585
585
  height: i,
586
586
  $: r
587
- } = Ze(e);
588
- let n = (r ? re(t.width) : t.width) / s, a = (r ? re(t.height) : t.height) / i;
589
- return (!n || !Number.isFinite(n)) && (n = 1), (!a || !Number.isFinite(a)) && (a = 1), {
590
- x: n,
591
- y: a
587
+ } = rt(e);
588
+ let a = (r ? me(t.width) : t.width) / s, n = (r ? me(t.height) : t.height) / i;
589
+ return (!a || !Number.isFinite(a)) && (a = 1), (!n || !Number.isFinite(n)) && (n = 1), {
590
+ x: a,
591
+ y: n
592
592
  };
593
593
  }
594
- const Rt = /* @__PURE__ */ L(0);
595
- function Qe(o) {
596
- const e = T(o);
597
- return !Oe() || !e.visualViewport ? Rt : {
594
+ const Gt = /* @__PURE__ */ F(0);
595
+ function at(o) {
596
+ const e = V(o);
597
+ return !Le() || !e.visualViewport ? Gt : {
598
598
  x: e.visualViewport.offsetLeft,
599
599
  y: e.visualViewport.offsetTop
600
600
  };
601
601
  }
602
- function Ht(o, e, t) {
603
- return e === void 0 && (e = !1), !t || e && t !== T(o) ? !1 : e;
602
+ function Kt(o, e, t) {
603
+ return e === void 0 && (e = !1), !t || e && t !== V(o) ? !1 : e;
604
604
  }
605
- function W(o, e, t, s) {
605
+ function Z(o, e, t, s) {
606
606
  e === void 0 && (e = !1), t === void 0 && (t = !1);
607
- const i = o.getBoundingClientRect(), r = Ie(o);
608
- let n = L(1);
609
- e && (s ? A(s) && (n = G(s)) : n = G(o));
610
- const a = Ht(r, t, s) ? Qe(r) : L(0);
611
- let l = (i.left + a.x) / n.x, h = (i.top + a.y) / n.y, c = i.width / n.x, p = i.height / n.y;
607
+ const i = o.getBoundingClientRect(), r = Ee(o);
608
+ let a = F(1);
609
+ e && (s ? B(s) && (a = Q(s)) : a = Q(o));
610
+ const n = Kt(r, t, s) ? at(r) : F(0);
611
+ let l = (i.left + n.x) / a.x, d = (i.top + n.y) / a.y, c = i.width / a.x, m = i.height / a.y;
612
612
  if (r) {
613
- const u = T(r), m = s && A(s) ? T(s) : s;
614
- let b = u, f = ve(b);
615
- for (; f && s && m !== b; ) {
616
- const g = G(f), v = f.getBoundingClientRect(), _ = M(f), w = v.left + (f.clientLeft + parseFloat(_.paddingLeft)) * g.x, C = v.top + (f.clientTop + parseFloat(_.paddingTop)) * g.y;
617
- l *= g.x, h *= g.y, c *= g.x, p *= g.y, l += w, h += C, b = T(f), f = ve(b);
613
+ const u = V(r), p = s && B(s) ? V(s) : s;
614
+ let b = u, v = xe(b);
615
+ for (; v && s && p !== b; ) {
616
+ const f = Q(v), g = v.getBoundingClientRect(), _ = $(v), y = g.left + (v.clientLeft + parseFloat(_.paddingLeft)) * f.x, w = g.top + (v.clientTop + parseFloat(_.paddingTop)) * f.y;
617
+ l *= f.x, d *= f.y, c *= f.x, m *= f.y, l += y, d += w, b = V(v), v = xe(b);
618
618
  }
619
619
  }
620
- return ae({
620
+ return ue({
621
621
  width: c,
622
- height: p,
622
+ height: m,
623
623
  x: l,
624
- y: h
624
+ y: d
625
625
  });
626
626
  }
627
- function pe(o, e) {
628
- const t = me(o).scrollLeft;
629
- return e ? e.left + t : W(D(o)).left + t;
627
+ function ke(o, e) {
628
+ const t = _e(o).scrollLeft;
629
+ return e ? e.left + t : Z(N(o)).left + t;
630
630
  }
631
- function et(o, e) {
632
- const t = o.getBoundingClientRect(), s = t.left + e.scrollLeft - pe(o, t), i = t.top + e.scrollTop;
631
+ function nt(o, e) {
632
+ const t = o.getBoundingClientRect(), s = t.left + e.scrollLeft - ke(o, t), i = t.top + e.scrollTop;
633
633
  return {
634
634
  x: s,
635
635
  y: i
636
636
  };
637
637
  }
638
- function Ft(o) {
638
+ function qt(o) {
639
639
  let {
640
640
  elements: e,
641
641
  rect: t,
642
642
  offsetParent: s,
643
643
  strategy: i
644
644
  } = o;
645
- const r = i === "fixed", n = D(s), a = e ? he(e.floating) : !1;
646
- if (s === n || a && r)
645
+ const r = i === "fixed", a = N(s), n = e ? ve(e.floating) : !1;
646
+ if (s === a || n && r)
647
647
  return t;
648
648
  let l = {
649
649
  scrollLeft: 0,
650
650
  scrollTop: 0
651
- }, h = L(1);
652
- const c = L(0), p = E(s);
653
- if ((p || !p && !r) && ((q(s) !== "body" || ee(n)) && (l = me(s)), E(s))) {
654
- const m = W(s);
655
- h = G(s), c.x = m.x + s.clientLeft, c.y = m.y + s.clientTop;
651
+ }, d = F(1);
652
+ const c = F(0), m = H(s);
653
+ if ((m || !m && !r) && ((te(s) !== "body" || le(a)) && (l = _e(s)), H(s))) {
654
+ const p = Z(s);
655
+ d = Q(s), c.x = p.x + s.clientLeft, c.y = p.y + s.clientTop;
656
656
  }
657
- const u = n && !p && !r ? et(n, l) : L(0);
657
+ const u = a && !m && !r ? nt(a, l) : F(0);
658
658
  return {
659
- width: t.width * h.x,
660
- height: t.height * h.y,
661
- x: t.x * h.x - l.scrollLeft * h.x + c.x + u.x,
662
- y: t.y * h.y - l.scrollTop * h.y + c.y + u.y
659
+ width: t.width * d.x,
660
+ height: t.height * d.y,
661
+ x: t.x * d.x - l.scrollLeft * d.x + c.x + u.x,
662
+ y: t.y * d.y - l.scrollTop * d.y + c.y + u.y
663
663
  };
664
664
  }
665
- function Nt(o) {
665
+ function Yt(o) {
666
666
  return Array.from(o.getClientRects());
667
667
  }
668
- function Wt(o) {
669
- const e = D(o), t = me(o), s = o.ownerDocument.body, i = F(e.scrollWidth, e.clientWidth, s.scrollWidth, s.clientWidth), r = F(e.scrollHeight, e.clientHeight, s.scrollHeight, s.clientHeight);
670
- let n = -t.scrollLeft + pe(o);
671
- const a = -t.scrollTop;
672
- return M(s).direction === "rtl" && (n += F(e.clientWidth, s.clientWidth) - i), {
668
+ function Xt(o) {
669
+ const e = N(o), t = _e(o), s = o.ownerDocument.body, i = X(e.scrollWidth, e.clientWidth, s.scrollWidth, s.clientWidth), r = X(e.scrollHeight, e.clientHeight, s.scrollHeight, s.clientHeight);
670
+ let a = -t.scrollLeft + ke(o);
671
+ const n = -t.scrollTop;
672
+ return $(s).direction === "rtl" && (a += X(e.clientWidth, s.clientWidth) - i), {
673
673
  width: i,
674
674
  height: r,
675
- x: n,
676
- y: a
675
+ x: a,
676
+ y: n
677
677
  };
678
678
  }
679
- const Re = 25;
680
- function jt(o, e) {
681
- const t = T(o), s = D(o), i = t.visualViewport;
682
- let r = s.clientWidth, n = s.clientHeight, a = 0, l = 0;
679
+ const Ne = 25;
680
+ function Jt(o, e) {
681
+ const t = V(o), s = N(o), i = t.visualViewport;
682
+ let r = s.clientWidth, a = s.clientHeight, n = 0, l = 0;
683
683
  if (i) {
684
- r = i.width, n = i.height;
685
- const c = Oe();
686
- (!c || c && e === "fixed") && (a = i.offsetLeft, l = i.offsetTop);
687
- }
688
- const h = pe(s);
689
- if (h <= 0) {
690
- const c = s.ownerDocument, p = c.body, u = getComputedStyle(p), m = c.compatMode === "CSS1Compat" && parseFloat(u.marginLeft) + parseFloat(u.marginRight) || 0, b = Math.abs(s.clientWidth - p.clientWidth - m);
691
- b <= Re && (r -= b);
692
- } else h <= Re && (r += h);
684
+ r = i.width, a = i.height;
685
+ const c = Le();
686
+ (!c || c && e === "fixed") && (n = i.offsetLeft, l = i.offsetTop);
687
+ }
688
+ const d = ke(s);
689
+ if (d <= 0) {
690
+ const c = s.ownerDocument, m = c.body, u = getComputedStyle(m), p = c.compatMode === "CSS1Compat" && parseFloat(u.marginLeft) + parseFloat(u.marginRight) || 0, b = Math.abs(s.clientWidth - m.clientWidth - p);
691
+ b <= Ne && (r -= b);
692
+ } else d <= Ne && (r += d);
693
693
  return {
694
694
  width: r,
695
- height: n,
696
- x: a,
695
+ height: a,
696
+ x: n,
697
697
  y: l
698
698
  };
699
699
  }
700
- const Ut = /* @__PURE__ */ new Set(["absolute", "fixed"]);
701
- function Gt(o, e) {
702
- const t = W(o, !0, e === "fixed"), s = t.top + o.clientTop, i = t.left + o.clientLeft, r = E(o) ? G(o) : L(1), n = o.clientWidth * r.x, a = o.clientHeight * r.y, l = i * r.x, h = s * r.y;
700
+ const Zt = /* @__PURE__ */ new Set(["absolute", "fixed"]);
701
+ function Qt(o, e) {
702
+ const t = Z(o, !0, e === "fixed"), s = t.top + o.clientTop, i = t.left + o.clientLeft, r = H(o) ? Q(o) : F(1), a = o.clientWidth * r.x, n = o.clientHeight * r.y, l = i * r.x, d = s * r.y;
703
703
  return {
704
- width: n,
705
- height: a,
704
+ width: a,
705
+ height: n,
706
706
  x: l,
707
- y: h
707
+ y: d
708
708
  };
709
709
  }
710
- function He(o, e, t) {
710
+ function je(o, e, t) {
711
711
  let s;
712
712
  if (e === "viewport")
713
- s = jt(o, t);
713
+ s = Jt(o, t);
714
714
  else if (e === "document")
715
- s = Wt(D(o));
716
- else if (A(e))
717
- s = Gt(e, t);
715
+ s = Xt(N(o));
716
+ else if (B(e))
717
+ s = Qt(e, t);
718
718
  else {
719
- const i = Qe(o);
719
+ const i = at(o);
720
720
  s = {
721
721
  x: e.x - i.x,
722
722
  y: e.y - i.y,
@@ -724,36 +724,36 @@ function He(o, e, t) {
724
724
  height: e.height
725
725
  };
726
726
  }
727
- return ae(s);
727
+ return ue(s);
728
728
  }
729
- function tt(o, e) {
730
- const t = B(o);
731
- return t === e || !A(t) || K(t) ? !1 : M(t).position === "fixed" || tt(t, e);
729
+ function lt(o, e) {
730
+ const t = K(o);
731
+ return t === e || !B(t) || ee(t) ? !1 : $(t).position === "fixed" || lt(t, e);
732
732
  }
733
- function Kt(o, e) {
733
+ function es(o, e) {
734
734
  const t = e.get(o);
735
735
  if (t)
736
736
  return t;
737
- let s = Z(o, [], !1).filter((a) => A(a) && q(a) !== "body"), i = null;
738
- const r = M(o).position === "fixed";
739
- let n = r ? B(o) : o;
740
- for (; A(n) && !K(n); ) {
741
- const a = M(n), l = Te(n);
742
- !l && a.position === "fixed" && (i = null), (r ? !l && !i : !l && a.position === "static" && !!i && Ut.has(i.position) || ee(n) && !l && tt(o, n)) ? s = s.filter((c) => c !== n) : i = a, n = B(n);
737
+ let s = ae(o, [], !1).filter((n) => B(n) && te(n) !== "body"), i = null;
738
+ const r = $(o).position === "fixed";
739
+ let a = r ? K(o) : o;
740
+ for (; B(a) && !ee(a); ) {
741
+ const n = $(a), l = Pe(a);
742
+ !l && n.position === "fixed" && (i = null), (r ? !l && !i : !l && n.position === "static" && !!i && Zt.has(i.position) || le(a) && !l && lt(o, a)) ? s = s.filter((c) => c !== a) : i = n, a = K(a);
743
743
  }
744
744
  return e.set(o, s), s;
745
745
  }
746
- function qt(o) {
746
+ function ts(o) {
747
747
  let {
748
748
  element: e,
749
749
  boundary: t,
750
750
  rootBoundary: s,
751
751
  strategy: i
752
752
  } = o;
753
- const n = [...t === "clippingAncestors" ? he(e) ? [] : Kt(e, this._c) : [].concat(t), s], a = n[0], l = n.reduce((h, c) => {
754
- const p = He(e, c, i);
755
- return h.top = F(p.top, h.top), h.right = ie(p.right, h.right), h.bottom = ie(p.bottom, h.bottom), h.left = F(p.left, h.left), h;
756
- }, He(e, a, i));
753
+ const a = [...t === "clippingAncestors" ? ve(e) ? [] : es(e, this._c) : [].concat(t), s], n = a[0], l = a.reduce((d, c) => {
754
+ const m = je(e, c, i);
755
+ return d.top = X(m.top, d.top), d.right = he(m.right, d.right), d.bottom = he(m.bottom, d.bottom), d.left = X(m.left, d.left), d;
756
+ }, je(e, n, i));
757
757
  return {
758
758
  width: l.right - l.left,
759
759
  height: l.bottom - l.top,
@@ -761,73 +761,73 @@ function qt(o) {
761
761
  y: l.top
762
762
  };
763
763
  }
764
- function Yt(o) {
764
+ function ss(o) {
765
765
  const {
766
766
  width: e,
767
767
  height: t
768
- } = Ze(o);
768
+ } = rt(o);
769
769
  return {
770
770
  width: e,
771
771
  height: t
772
772
  };
773
773
  }
774
- function Xt(o, e, t) {
775
- const s = E(e), i = D(e), r = t === "fixed", n = W(o, !0, r, e);
776
- let a = {
774
+ function os(o, e, t) {
775
+ const s = H(e), i = N(e), r = t === "fixed", a = Z(o, !0, r, e);
776
+ let n = {
777
777
  scrollLeft: 0,
778
778
  scrollTop: 0
779
779
  };
780
- const l = L(0);
781
- function h() {
782
- l.x = pe(i);
780
+ const l = F(0);
781
+ function d() {
782
+ l.x = ke(i);
783
783
  }
784
784
  if (s || !s && !r)
785
- if ((q(e) !== "body" || ee(i)) && (a = me(e)), s) {
786
- const m = W(e, !0, r, e);
787
- l.x = m.x + e.clientLeft, l.y = m.y + e.clientTop;
788
- } else i && h();
789
- r && !s && i && h();
790
- const c = i && !s && !r ? et(i, a) : L(0), p = n.left + a.scrollLeft - l.x - c.x, u = n.top + a.scrollTop - l.y - c.y;
785
+ if ((te(e) !== "body" || le(i)) && (n = _e(e)), s) {
786
+ const p = Z(e, !0, r, e);
787
+ l.x = p.x + e.clientLeft, l.y = p.y + e.clientTop;
788
+ } else i && d();
789
+ r && !s && i && d();
790
+ const c = i && !s && !r ? nt(i, n) : F(0), m = a.left + n.scrollLeft - l.x - c.x, u = a.top + n.scrollTop - l.y - c.y;
791
791
  return {
792
- x: p,
792
+ x: m,
793
793
  y: u,
794
- width: n.width,
795
- height: n.height
794
+ width: a.width,
795
+ height: a.height
796
796
  };
797
797
  }
798
- function ge(o) {
799
- return M(o).position === "static";
798
+ function ye(o) {
799
+ return $(o).position === "static";
800
800
  }
801
- function Fe(o, e) {
802
- if (!E(o) || M(o).position === "fixed")
801
+ function We(o, e) {
802
+ if (!H(o) || $(o).position === "fixed")
803
803
  return null;
804
804
  if (e)
805
805
  return e(o);
806
806
  let t = o.offsetParent;
807
- return D(o) === t && (t = t.ownerDocument.body), t;
807
+ return N(o) === t && (t = t.ownerDocument.body), t;
808
808
  }
809
- function st(o, e) {
810
- const t = T(o);
811
- if (he(o))
809
+ function ct(o, e) {
810
+ const t = V(o);
811
+ if (ve(o))
812
812
  return t;
813
- if (!E(o)) {
814
- let i = B(o);
815
- for (; i && !K(i); ) {
816
- if (A(i) && !ge(i))
813
+ if (!H(o)) {
814
+ let i = K(o);
815
+ for (; i && !ee(i); ) {
816
+ if (B(i) && !ye(i))
817
817
  return i;
818
- i = B(i);
818
+ i = K(i);
819
819
  }
820
820
  return t;
821
821
  }
822
- let s = Fe(o, e);
823
- for (; s && Lt(s) && ge(s); )
824
- s = Fe(s, e);
825
- return s && K(s) && ge(s) && !Te(s) ? t : s || Bt(o) || t;
822
+ let s = We(o, e);
823
+ for (; s && Rt(s) && ye(s); )
824
+ s = We(s, e);
825
+ return s && ee(s) && ye(s) && !Pe(s) ? t : s || Wt(o) || t;
826
826
  }
827
- const Jt = async function(o) {
828
- const e = this.getOffsetParent || st, t = this.getDimensions, s = await t(o.floating);
827
+ const is = async function(o) {
828
+ const e = this.getOffsetParent || ct, t = this.getDimensions, s = await t(o.floating);
829
829
  return {
830
- reference: Xt(o.reference, await e(o.floating), o.strategy),
830
+ reference: os(o.reference, await e(o.floating), o.strategy),
831
831
  floating: {
832
832
  x: 0,
833
833
  y: 0,
@@ -836,128 +836,128 @@ const Jt = async function(o) {
836
836
  }
837
837
  };
838
838
  };
839
- function Zt(o) {
840
- return M(o).direction === "rtl";
841
- }
842
- const ot = {
843
- convertOffsetParentRelativeRectToViewportRelativeRect: Ft,
844
- getDocumentElement: D,
845
- getClippingRect: qt,
846
- getOffsetParent: st,
847
- getElementRects: Jt,
848
- getClientRects: Nt,
849
- getDimensions: Yt,
850
- getScale: G,
851
- isElement: A,
852
- isRTL: Zt
839
+ function rs(o) {
840
+ return $(o).direction === "rtl";
841
+ }
842
+ const dt = {
843
+ convertOffsetParentRelativeRectToViewportRelativeRect: qt,
844
+ getDocumentElement: N,
845
+ getClippingRect: ts,
846
+ getOffsetParent: ct,
847
+ getElementRects: is,
848
+ getClientRects: Yt,
849
+ getDimensions: ss,
850
+ getScale: Q,
851
+ isElement: B,
852
+ isRTL: rs
853
853
  };
854
- function it(o, e) {
854
+ function ht(o, e) {
855
855
  return o.x === e.x && o.y === e.y && o.width === e.width && o.height === e.height;
856
856
  }
857
- function Qt(o, e) {
857
+ function as(o, e) {
858
858
  let t = null, s;
859
- const i = D(o);
859
+ const i = N(o);
860
860
  function r() {
861
- var a;
862
- clearTimeout(s), (a = t) == null || a.disconnect(), t = null;
861
+ var n;
862
+ clearTimeout(s), (n = t) == null || n.disconnect(), t = null;
863
863
  }
864
- function n(a, l) {
865
- a === void 0 && (a = !1), l === void 0 && (l = 1), r();
866
- const h = o.getBoundingClientRect(), {
864
+ function a(n, l) {
865
+ n === void 0 && (n = !1), l === void 0 && (l = 1), r();
866
+ const d = o.getBoundingClientRect(), {
867
867
  left: c,
868
- top: p,
868
+ top: m,
869
869
  width: u,
870
- height: m
871
- } = h;
872
- if (a || e(), !u || !m)
870
+ height: p
871
+ } = d;
872
+ if (n || e(), !u || !p)
873
873
  return;
874
- const b = se(p), f = se(i.clientWidth - (c + u)), g = se(i.clientHeight - (p + m)), v = se(c), w = {
875
- rootMargin: -b + "px " + -f + "px " + -g + "px " + -v + "px",
876
- threshold: F(0, ie(1, l)) || 1
874
+ const b = ce(m), v = ce(i.clientWidth - (c + u)), f = ce(i.clientHeight - (m + p)), g = ce(c), y = {
875
+ rootMargin: -b + "px " + -v + "px " + -f + "px " + -g + "px",
876
+ threshold: X(0, he(1, l)) || 1
877
877
  };
878
- let C = !0;
879
- function k(Y) {
880
- const j = Y[0].intersectionRatio;
878
+ let w = !0;
879
+ function M(E) {
880
+ const j = E[0].intersectionRatio;
881
881
  if (j !== l) {
882
- if (!C)
883
- return n();
884
- j ? n(!1, j) : s = setTimeout(() => {
885
- n(!1, 1e-7);
882
+ if (!w)
883
+ return a();
884
+ j ? a(!1, j) : s = setTimeout(() => {
885
+ a(!1, 1e-7);
886
886
  }, 1e3);
887
887
  }
888
- j === 1 && !it(h, o.getBoundingClientRect()) && n(), C = !1;
888
+ j === 1 && !ht(d, o.getBoundingClientRect()) && a(), w = !1;
889
889
  }
890
890
  try {
891
- t = new IntersectionObserver(k, {
892
- ...w,
891
+ t = new IntersectionObserver(M, {
892
+ ...y,
893
893
  // Handle <iframe>s
894
894
  root: i.ownerDocument
895
895
  });
896
896
  } catch {
897
- t = new IntersectionObserver(k, w);
897
+ t = new IntersectionObserver(M, y);
898
898
  }
899
899
  t.observe(o);
900
900
  }
901
- return n(!0), r;
901
+ return a(!0), r;
902
902
  }
903
- function _e(o, e, t, s) {
903
+ function Ce(o, e, t, s) {
904
904
  s === void 0 && (s = {});
905
905
  const {
906
906
  ancestorScroll: i = !0,
907
907
  ancestorResize: r = !0,
908
- elementResize: n = typeof ResizeObserver == "function",
909
- layoutShift: a = typeof IntersectionObserver == "function",
908
+ elementResize: a = typeof ResizeObserver == "function",
909
+ layoutShift: n = typeof IntersectionObserver == "function",
910
910
  animationFrame: l = !1
911
- } = s, h = Ie(o), c = i || r ? [...h ? Z(h) : [], ...Z(e)] : [];
912
- c.forEach((v) => {
913
- i && v.addEventListener("scroll", t, {
911
+ } = s, d = Ee(o), c = i || r ? [...d ? ae(d) : [], ...ae(e)] : [];
912
+ c.forEach((g) => {
913
+ i && g.addEventListener("scroll", t, {
914
914
  passive: !0
915
- }), r && v.addEventListener("resize", t);
915
+ }), r && g.addEventListener("resize", t);
916
916
  });
917
- const p = h && a ? Qt(h, t) : null;
918
- let u = -1, m = null;
919
- n && (m = new ResizeObserver((v) => {
920
- let [_] = v;
921
- _ && _.target === h && m && (m.unobserve(e), cancelAnimationFrame(u), u = requestAnimationFrame(() => {
922
- var w;
923
- (w = m) == null || w.observe(e);
917
+ const m = d && n ? as(d, t) : null;
918
+ let u = -1, p = null;
919
+ a && (p = new ResizeObserver((g) => {
920
+ let [_] = g;
921
+ _ && _.target === d && p && (p.unobserve(e), cancelAnimationFrame(u), u = requestAnimationFrame(() => {
922
+ var y;
923
+ (y = p) == null || y.observe(e);
924
924
  })), t();
925
- }), h && !l && m.observe(h), m.observe(e));
926
- let b, f = l ? W(o) : null;
927
- l && g();
928
- function g() {
929
- const v = W(o);
930
- f && !it(f, v) && t(), f = v, b = requestAnimationFrame(g);
925
+ }), d && !l && p.observe(d), p.observe(e));
926
+ let b, v = l ? Z(o) : null;
927
+ l && f();
928
+ function f() {
929
+ const g = Z(o);
930
+ v && !ht(v, g) && t(), v = g, b = requestAnimationFrame(f);
931
931
  }
932
932
  return t(), () => {
933
- var v;
933
+ var g;
934
934
  c.forEach((_) => {
935
935
  i && _.removeEventListener("scroll", t), r && _.removeEventListener("resize", t);
936
- }), p == null || p(), (v = m) == null || v.disconnect(), m = null, l && cancelAnimationFrame(b);
936
+ }), m == null || m(), (g = p) == null || g.disconnect(), p = null, l && cancelAnimationFrame(b);
937
937
  };
938
938
  }
939
- const ye = It, we = At, rt = St, ke = (o, e, t) => {
939
+ const Se = Dt, Te = zt, mt = Lt, Ie = (o, e, t) => {
940
940
  const s = /* @__PURE__ */ new Map(), i = {
941
- platform: ot,
941
+ platform: dt,
942
942
  ...t
943
943
  }, r = {
944
944
  ...i.platform,
945
945
  _c: s
946
946
  };
947
- return Ct(o, e, {
947
+ return Pt(o, e, {
948
948
  ...i,
949
949
  platform: r
950
950
  });
951
951
  };
952
- var nt = function() {
953
- }, I = "undefined", es = typeof window !== I && typeof window.navigator !== I && /Trident\/|MSIE /.test(window.navigator.userAgent), xe = [
952
+ var pt = function() {
953
+ }, z = "undefined", ns = typeof window !== z && typeof window.navigator !== z && /Trident\/|MSIE /.test(window.navigator.userAgent), Me = [
954
954
  "trace",
955
955
  "debug",
956
956
  "info",
957
957
  "warn",
958
958
  "error"
959
- ], Q = {}, y = null;
960
- function Ne(o, e) {
959
+ ], ne = {}, T = null;
960
+ function Ue(o, e) {
961
961
  var t = o[e];
962
962
  if (typeof t.bind == "function")
963
963
  return t.bind(o);
@@ -969,79 +969,79 @@ function Ne(o, e) {
969
969
  };
970
970
  }
971
971
  }
972
- function ts() {
972
+ function ls() {
973
973
  console.log && (console.log.apply ? console.log.apply(console, arguments) : Function.prototype.apply.apply(console.log, [console, arguments])), console.trace && console.trace();
974
974
  }
975
- function ss(o) {
976
- return o === "debug" && (o = "log"), typeof console === I ? !1 : o === "trace" && es ? ts : console[o] !== void 0 ? Ne(console, o) : console.log !== void 0 ? Ne(console, "log") : nt;
975
+ function cs(o) {
976
+ return o === "debug" && (o = "log"), typeof console === z ? !1 : o === "trace" && ns ? ls : console[o] !== void 0 ? Ue(console, o) : console.log !== void 0 ? Ue(console, "log") : pt;
977
977
  }
978
- function J() {
979
- for (var o = this.getLevel(), e = 0; e < xe.length; e++) {
980
- var t = xe[e];
981
- this[t] = e < o ? nt : this.methodFactory(t, o, this.name);
978
+ function ie() {
979
+ for (var o = this.getLevel(), e = 0; e < Me.length; e++) {
980
+ var t = Me[e];
981
+ this[t] = e < o ? pt : this.methodFactory(t, o, this.name);
982
982
  }
983
- if (this.log = this.debug, typeof console === I && o < this.levels.SILENT)
983
+ if (this.log = this.debug, typeof console === z && o < this.levels.SILENT)
984
984
  return "No console available for logging";
985
985
  }
986
- function os(o) {
986
+ function ds(o) {
987
987
  return function() {
988
- typeof console !== I && (J.call(this), this[o].apply(this, arguments));
988
+ typeof console !== z && (ie.call(this), this[o].apply(this, arguments));
989
989
  };
990
990
  }
991
- function is(o, e, t) {
992
- return ss(o) || os.apply(this, arguments);
991
+ function hs(o, e, t) {
992
+ return cs(o) || ds.apply(this, arguments);
993
993
  }
994
- function at(o, e) {
995
- var t = this, s, i, r, n = "loglevel";
996
- typeof o == "string" ? n += ":" + o : typeof o == "symbol" && (n = void 0);
997
- function a(u) {
998
- var m = (xe[u] || "silent").toUpperCase();
999
- if (!(typeof window === I || !n)) {
994
+ function ut(o, e) {
995
+ var t = this, s, i, r, a = "loglevel";
996
+ typeof o == "string" ? a += ":" + o : typeof o == "symbol" && (a = void 0);
997
+ function n(u) {
998
+ var p = (Me[u] || "silent").toUpperCase();
999
+ if (!(typeof window === z || !a)) {
1000
1000
  try {
1001
- window.localStorage[n] = m;
1001
+ window.localStorage[a] = p;
1002
1002
  return;
1003
1003
  } catch {
1004
1004
  }
1005
1005
  try {
1006
- window.document.cookie = encodeURIComponent(n) + "=" + m + ";";
1006
+ window.document.cookie = encodeURIComponent(a) + "=" + p + ";";
1007
1007
  } catch {
1008
1008
  }
1009
1009
  }
1010
1010
  }
1011
1011
  function l() {
1012
1012
  var u;
1013
- if (!(typeof window === I || !n)) {
1013
+ if (!(typeof window === z || !a)) {
1014
1014
  try {
1015
- u = window.localStorage[n];
1015
+ u = window.localStorage[a];
1016
1016
  } catch {
1017
1017
  }
1018
- if (typeof u === I)
1018
+ if (typeof u === z)
1019
1019
  try {
1020
- var m = window.document.cookie, b = encodeURIComponent(n), f = m.indexOf(b + "=");
1021
- f !== -1 && (u = /^([^;]+)/.exec(
1022
- m.slice(f + b.length + 1)
1020
+ var p = window.document.cookie, b = encodeURIComponent(a), v = p.indexOf(b + "=");
1021
+ v !== -1 && (u = /^([^;]+)/.exec(
1022
+ p.slice(v + b.length + 1)
1023
1023
  )[1]);
1024
1024
  } catch {
1025
1025
  }
1026
1026
  return t.levels[u] === void 0 && (u = void 0), u;
1027
1027
  }
1028
1028
  }
1029
- function h() {
1030
- if (!(typeof window === I || !n)) {
1029
+ function d() {
1030
+ if (!(typeof window === z || !a)) {
1031
1031
  try {
1032
- window.localStorage.removeItem(n);
1032
+ window.localStorage.removeItem(a);
1033
1033
  } catch {
1034
1034
  }
1035
1035
  try {
1036
- window.document.cookie = encodeURIComponent(n) + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC";
1036
+ window.document.cookie = encodeURIComponent(a) + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC";
1037
1037
  } catch {
1038
1038
  }
1039
1039
  }
1040
1040
  }
1041
1041
  function c(u) {
1042
- var m = u;
1043
- if (typeof m == "string" && t.levels[m.toUpperCase()] !== void 0 && (m = t.levels[m.toUpperCase()]), typeof m == "number" && m >= 0 && m <= t.levels.SILENT)
1044
- return m;
1042
+ var p = u;
1043
+ if (typeof p == "string" && t.levels[p.toUpperCase()] !== void 0 && (p = t.levels[p.toUpperCase()]), typeof p == "number" && p >= 0 && p <= t.levels.SILENT)
1044
+ return p;
1045
1045
  throw new TypeError("log.setLevel() called with invalid level: " + u);
1046
1046
  }
1047
1047
  t.name = o, t.levels = {
@@ -1051,52 +1051,52 @@ function at(o, e) {
1051
1051
  WARN: 3,
1052
1052
  ERROR: 4,
1053
1053
  SILENT: 5
1054
- }, t.methodFactory = e || is, t.getLevel = function() {
1054
+ }, t.methodFactory = e || hs, t.getLevel = function() {
1055
1055
  return r ?? i ?? s;
1056
- }, t.setLevel = function(u, m) {
1057
- return r = c(u), m !== !1 && a(r), J.call(t);
1056
+ }, t.setLevel = function(u, p) {
1057
+ return r = c(u), p !== !1 && n(r), ie.call(t);
1058
1058
  }, t.setDefaultLevel = function(u) {
1059
1059
  i = c(u), l() || t.setLevel(u, !1);
1060
1060
  }, t.resetLevel = function() {
1061
- r = null, h(), J.call(t);
1061
+ r = null, d(), ie.call(t);
1062
1062
  }, t.enableAll = function(u) {
1063
1063
  t.setLevel(t.levels.TRACE, u);
1064
1064
  }, t.disableAll = function(u) {
1065
1065
  t.setLevel(t.levels.SILENT, u);
1066
1066
  }, t.rebuild = function() {
1067
- if (y !== t && (s = c(y.getLevel())), J.call(t), y === t)
1068
- for (var u in Q)
1069
- Q[u].rebuild();
1067
+ if (T !== t && (s = c(T.getLevel())), ie.call(t), T === t)
1068
+ for (var u in ne)
1069
+ ne[u].rebuild();
1070
1070
  }, s = c(
1071
- y ? y.getLevel() : "WARN"
1071
+ T ? T.getLevel() : "WARN"
1072
1072
  );
1073
- var p = l();
1074
- p != null && (r = c(p)), J.call(t);
1073
+ var m = l();
1074
+ m != null && (r = c(m)), ie.call(t);
1075
1075
  }
1076
- y = new at();
1077
- y.getLogger = function(e) {
1076
+ T = new ut();
1077
+ T.getLogger = function(e) {
1078
1078
  if (typeof e != "symbol" && typeof e != "string" || e === "")
1079
1079
  throw new TypeError("You must supply a name when creating a logger.");
1080
- var t = Q[e];
1081
- return t || (t = Q[e] = new at(
1080
+ var t = ne[e];
1081
+ return t || (t = ne[e] = new ut(
1082
1082
  e,
1083
- y.methodFactory
1083
+ T.methodFactory
1084
1084
  )), t;
1085
1085
  };
1086
- var rs = typeof window !== I ? window.log : void 0;
1087
- y.noConflict = function() {
1088
- return typeof window !== I && window.log === y && (window.log = rs), y;
1086
+ var ms = typeof window !== z ? window.log : void 0;
1087
+ T.noConflict = function() {
1088
+ return typeof window !== z && window.log === T && (window.log = ms), T;
1089
1089
  };
1090
- y.getLoggers = function() {
1091
- return Q;
1090
+ T.getLoggers = function() {
1091
+ return ne;
1092
1092
  };
1093
- y.default = y;
1094
- var ns = function(o) {
1093
+ T.default = T;
1094
+ var ps = function(o) {
1095
1095
  for (var e = 1, t = arguments.length, s; e < t; e++)
1096
1096
  for (s in arguments[e])
1097
1097
  Object.prototype.hasOwnProperty.call(arguments[e], s) && (o[s] = arguments[e][s]);
1098
1098
  return o;
1099
- }, as = {
1099
+ }, us = {
1100
1100
  template: "[%t] %l:",
1101
1101
  levelFormatter: function(o) {
1102
1102
  return o.toUpperCase();
@@ -1108,34 +1108,34 @@ var ns = function(o) {
1108
1108
  return o.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
1109
1109
  },
1110
1110
  format: void 0
1111
- }, lt, H = {}, ls = function(o) {
1111
+ }, bt, Y = {}, bs = function(o) {
1112
1112
  if (!o || !o.getLogger)
1113
1113
  throw new TypeError("Argument is not a root logger");
1114
- lt = o;
1115
- }, cs = function(o, e) {
1114
+ bt = o;
1115
+ }, gs = function(o, e) {
1116
1116
  if (!o || !o.setLevel)
1117
1117
  throw new TypeError("Argument is not a logger");
1118
- var t = o.methodFactory, s = o.name || "", i = H[s] || H[""] || as;
1119
- function r(n, a, l) {
1120
- var h = t(n, a, l), c = H[l] || H[""], p = c.template.indexOf("%t") !== -1, u = c.template.indexOf("%l") !== -1, m = c.template.indexOf("%n") !== -1;
1118
+ var t = o.methodFactory, s = o.name || "", i = Y[s] || Y[""] || us;
1119
+ function r(a, n, l) {
1120
+ var d = t(a, n, l), c = Y[l] || Y[""], m = c.template.indexOf("%t") !== -1, u = c.template.indexOf("%l") !== -1, p = c.template.indexOf("%n") !== -1;
1121
1121
  return function() {
1122
- for (var b = "", f = arguments.length, g = Array(f), v = 0; v < f; v++)
1123
- g[v] = arguments[v];
1124
- if (s || !H[l]) {
1125
- var _ = c.timestampFormatter(/* @__PURE__ */ new Date()), w = c.levelFormatter(n), C = c.nameFormatter(l);
1126
- c.format ? b += c.format(w, C, _) : (b += c.template, p && (b = b.replace(/%t/, _)), u && (b = b.replace(/%l/, w)), m && (b = b.replace(/%n/, C))), g.length && typeof g[0] == "string" ? g[0] = b + " " + g[0] : g.unshift(b);
1122
+ for (var b = "", v = arguments.length, f = Array(v), g = 0; g < v; g++)
1123
+ f[g] = arguments[g];
1124
+ if (s || !Y[l]) {
1125
+ var _ = c.timestampFormatter(/* @__PURE__ */ new Date()), y = c.levelFormatter(a), w = c.nameFormatter(l);
1126
+ c.format ? b += c.format(y, w, _) : (b += c.template, m && (b = b.replace(/%t/, _)), u && (b = b.replace(/%l/, y)), p && (b = b.replace(/%n/, w))), f.length && typeof f[0] == "string" ? f[0] = b + " " + f[0] : f.unshift(b);
1127
1127
  }
1128
- h.apply(void 0, g);
1128
+ d.apply(void 0, f);
1129
1129
  };
1130
1130
  }
1131
- return H[s] || (o.methodFactory = r), e = e || {}, e.template && (e.format = void 0), H[s] = ns({}, i, e), o.setLevel(o.getLevel()), lt || o.warn(
1131
+ return Y[s] || (o.methodFactory = r), e = e || {}, e.template && (e.format = void 0), Y[s] = ps({}, i, e), o.setLevel(o.getLevel()), bt || o.warn(
1132
1132
  "It is necessary to call the function reg() of loglevel-plugin-prefix before calling apply. From the next release, it will throw an error. See more: https://github.com/kutuluk/loglevel-plugin-prefix/blob/master/README.md"
1133
1133
  ), o;
1134
- }, ds = {
1135
- reg: ls,
1136
- apply: cs
1134
+ }, fs = {
1135
+ reg: bs,
1136
+ apply: gs
1137
1137
  };
1138
- const hs = {
1138
+ const vs = {
1139
1139
  debug: "#0ea5e9",
1140
1140
  // Blue
1141
1141
  info: "#10b981",
@@ -1145,55 +1145,55 @@ const hs = {
1145
1145
  error: "#ef4444"
1146
1146
  // Red
1147
1147
  };
1148
- ds.reg(y);
1149
- const ms = (o) => o.toTimeString().split(" ")[0] + "." + o.getMilliseconds().toString().padStart(3, "0"), ps = y.methodFactory;
1150
- y.methodFactory = function(o, e, t) {
1151
- const s = ps(o, e, t), r = `color: ${hs[o] || "#666"}; font-weight: bold;`, n = "color: inherit;";
1152
- return function(...a) {
1153
- const l = ms(/* @__PURE__ */ new Date()), h = o.toUpperCase(), c = t ? `%c[${l}]%c %c[${h}]%c %c[${t}]%c` : `%c[${l}]%c %c[${h}]%c`;
1154
- s(c, ...t ? [r, n, r, n, r, n] : [r, n, r, n], ...a);
1148
+ fs.reg(T);
1149
+ const _s = (o) => o.toTimeString().split(" ")[0] + "." + o.getMilliseconds().toString().padStart(3, "0"), ks = T.methodFactory;
1150
+ T.methodFactory = function(o, e, t) {
1151
+ const s = ks(o, e, t), r = `color: ${vs[o] || "#666"}; font-weight: bold;`, a = "color: inherit;";
1152
+ return function(...n) {
1153
+ const l = _s(/* @__PURE__ */ new Date()), d = o.toUpperCase(), c = t ? `%c[${l}]%c %c[${d}]%c %c[${t}]%c` : `%c[${l}]%c %c[${d}]%c`;
1154
+ s(c, ...t ? [r, a, r, a, r, a] : [r, a, r, a], ...n);
1155
1155
  };
1156
1156
  };
1157
- typeof y.setDefaultLevel == "function" ? y.setDefaultLevel("silent") : y.setLevel("silent", !1);
1158
- const oe = y.getLogger("MULTISELECT:INIT"), x = y.getLogger("MULTISELECT:DATA"), P = y.getLogger("MULTISELECT:UI"), S = y.getLogger("MULTISELECT:INTERACTION"), us = [
1157
+ typeof T.setDefaultLevel == "function" ? T.setDefaultLevel("silent") : T.setLevel("silent", !1);
1158
+ const de = T.getLogger("MULTISELECT:INIT"), O = T.getLogger("MULTISELECT:DATA"), R = T.getLogger("MULTISELECT:UI"), L = T.getLogger("MULTISELECT:INTERACTION"), ys = [
1159
1159
  "MULTISELECT:INIT",
1160
1160
  "MULTISELECT:DATA",
1161
1161
  "MULTISELECT:UI",
1162
1162
  "MULTISELECT:INTERACTION"
1163
1163
  ];
1164
- function Ae() {
1165
- typeof y.rebuild == "function" && y.rebuild();
1164
+ function Ve() {
1165
+ typeof T.rebuild == "function" && T.rebuild();
1166
1166
  }
1167
- function bs() {
1168
- y.setLevel("debug"), Ae();
1167
+ function ws() {
1168
+ T.setLevel("debug"), Ve();
1169
1169
  }
1170
- function gs() {
1171
- y.setLevel("silent"), Ae();
1170
+ function xs() {
1171
+ T.setLevel("silent"), Ve();
1172
1172
  }
1173
- function fs(o) {
1174
- y.setLevel(o), Ae();
1173
+ function Cs(o) {
1174
+ T.setLevel(o), Ve();
1175
1175
  }
1176
- function vs(o, e) {
1176
+ function Ss(o, e) {
1177
1177
  const t = o.includes(":") ? o : `MULTISELECT:${o}`;
1178
- y.getLogger(t).setLevel(e);
1178
+ T.getLogger(t).setLevel(e);
1179
1179
  }
1180
- class We {
1180
+ class Ge {
1181
1181
  constructor(e) {
1182
- d(this, "container");
1183
- d(this, "wrapper");
1184
- d(this, "viewport");
1185
- d(this, "itemHeight");
1186
- d(this, "items");
1187
- d(this, "renderItem");
1188
- d(this, "bufferSize");
1189
- d(this, "onVisibleRangeChange");
1190
- d(this, "onScroll");
1191
- d(this, "scrollTop", 0);
1192
- d(this, "viewportHeight", 0);
1193
- d(this, "visibleStart", 0);
1194
- d(this, "visibleEnd", 0);
1195
- d(this, "scrollHandler");
1196
- d(this, "resizeObserver");
1182
+ h(this, "container");
1183
+ h(this, "wrapper");
1184
+ h(this, "viewport");
1185
+ h(this, "itemHeight");
1186
+ h(this, "items");
1187
+ h(this, "renderItem");
1188
+ h(this, "bufferSize");
1189
+ h(this, "onVisibleRangeChange");
1190
+ h(this, "onScroll");
1191
+ h(this, "scrollTop", 0);
1192
+ h(this, "viewportHeight", 0);
1193
+ h(this, "visibleStart", 0);
1194
+ h(this, "visibleEnd", 0);
1195
+ h(this, "scrollHandler");
1196
+ h(this, "resizeObserver");
1197
1197
  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();
1198
1198
  }
1199
1199
  /**
@@ -1240,8 +1240,8 @@ class We {
1240
1240
  this.visibleStart = e, this.visibleEnd = t, this.onVisibleRangeChange && this.onVisibleRangeChange(e, t);
1241
1241
  let s = "";
1242
1242
  for (let i = e; i < t; i++) {
1243
- const r = this.items[i], n = this.renderItem(r, i), a = i * this.itemHeight;
1244
- s += `<div class="ms__virtual-item" style="position: absolute; top: ${a}px; left: 0; right: 0; height: ${this.itemHeight}px;" data-index="${i}">`, s += n, s += "</div>";
1243
+ const r = this.items[i], a = this.renderItem(r, i), n = i * this.itemHeight;
1244
+ s += `<div class="ms__virtual-item" style="position: absolute; top: ${n}px; left: 0; right: 0; height: ${this.itemHeight}px;" data-index="${i}">`, s += a, s += "</div>";
1245
1245
  }
1246
1246
  this.viewport.innerHTML = s;
1247
1247
  }
@@ -1299,27 +1299,27 @@ class We {
1299
1299
  this.container.removeEventListener("scroll", this.scrollHandler), this.resizeObserver && this.resizeObserver.disconnect(), this.container.innerHTML = "";
1300
1300
  }
1301
1301
  }
1302
- class _s {
1302
+ class Ts {
1303
1303
  constructor(e) {
1304
- d(this, "element");
1305
- d(this, "trigger");
1306
- d(this, "container");
1307
- d(this, "placement");
1308
- d(this, "offsetDistance");
1309
- d(this, "showDelay");
1310
- d(this, "hideDelay");
1311
- d(this, "visibleClass");
1312
- d(this, "followCursor");
1313
- d(this, "onBeforeShow");
1314
- d(this, "showTimer", null);
1315
- d(this, "hideTimer", null);
1316
- d(this, "positionCleanup", null);
1317
- d(this, "visible", !1);
1318
- d(this, "cursorX", 0);
1319
- d(this, "cursorY", 0);
1320
- d(this, "handleMouseEnter");
1321
- d(this, "handleMouseLeave");
1322
- d(this, "handleMouseMove");
1304
+ h(this, "element");
1305
+ h(this, "trigger");
1306
+ h(this, "container");
1307
+ h(this, "placement");
1308
+ h(this, "offsetDistance");
1309
+ h(this, "showDelay");
1310
+ h(this, "hideDelay");
1311
+ h(this, "visibleClass");
1312
+ h(this, "followCursor");
1313
+ h(this, "onBeforeShow");
1314
+ h(this, "showTimer", null);
1315
+ h(this, "hideTimer", null);
1316
+ h(this, "positionCleanup", null);
1317
+ h(this, "visible", !1);
1318
+ h(this, "cursorX", 0);
1319
+ h(this, "cursorY", 0);
1320
+ h(this, "handleMouseEnter");
1321
+ h(this, "handleMouseLeave");
1322
+ h(this, "handleMouseMove");
1323
1323
  this.trigger = e.trigger, this.container = e.container, this.placement = e.placement ?? "top", this.offsetDistance = e.offsetDistance ?? 8, this.showDelay = e.showDelay ?? 100, this.hideDelay = e.hideDelay ?? 100, this.visibleClass = e.visibleClass ?? "ms__badge-tooltip--visible", this.followCursor = e.followCursor ?? !1, this.onBeforeShow = e.onBeforeShow, this.element = document.createElement("div"), this.element.className = e.cssClass ?? "ms__badge-tooltip", typeof e.content == "string" ? this.element.textContent = e.content : this.element.appendChild(e.content), this.container.appendChild(this.element), this.handleMouseEnter = (t) => {
1324
1324
  this.followCursor && (this.cursorX = t.clientX, this.cursorY = t.clientY), this.scheduleShow();
1325
1325
  }, this.handleMouseLeave = () => this.scheduleHide(), this.trigger.addEventListener("mouseenter", this.handleMouseEnter), this.trigger.addEventListener("mouseleave", this.handleMouseLeave), this.followCursor && (this.handleMouseMove = (t) => {
@@ -1338,17 +1338,17 @@ class _s {
1338
1338
  }
1339
1339
  show() {
1340
1340
  var e;
1341
- (e = this.onBeforeShow) == null || e.call(this), this.visible = !0, this.element.classList.add(this.visibleClass), this.positionCleanup && (this.positionCleanup(), this.positionCleanup = null), this.followCursor ? this.positionAtCursor() : this.positionCleanup = _e(this.trigger, this.element, () => this.computeAt(this.trigger));
1341
+ (e = this.onBeforeShow) == null || e.call(this), this.visible = !0, this.element.classList.add(this.visibleClass), this.positionCleanup && (this.positionCleanup(), this.positionCleanup = null), this.followCursor ? this.positionAtCursor() : this.positionCleanup = Ce(this.trigger, this.element, () => this.computeAt(this.trigger));
1342
1342
  }
1343
1343
  /** Position the tooltip relative to a reference (the trigger element or a pointer virtual element). */
1344
1344
  computeAt(e) {
1345
- ke(e, this.element, {
1345
+ Ie(e, this.element, {
1346
1346
  placement: this.placement,
1347
1347
  strategy: "fixed",
1348
1348
  middleware: [
1349
- ye(this.offsetDistance),
1350
- rt(),
1351
- we({ padding: 8 })
1349
+ Se(this.offsetDistance),
1350
+ mt(),
1351
+ Te({ padding: 8 })
1352
1352
  ]
1353
1353
  }).then(({ x: t, y: s }) => {
1354
1354
  Object.assign(this.element.style, {
@@ -1384,7 +1384,190 @@ class _s {
1384
1384
  this.showTimer !== null && clearTimeout(this.showTimer), this.hideTimer !== null && clearTimeout(this.hideTimer), this.showTimer = null, this.hideTimer = null, this.positionCleanup && (this.positionCleanup(), this.positionCleanup = null), this.trigger.removeEventListener("mouseenter", this.handleMouseEnter), this.trigger.removeEventListener("mouseleave", this.handleMouseLeave), this.handleMouseMove && this.trigger.removeEventListener("mousemove", this.handleMouseMove), this.element.remove();
1385
1385
  }
1386
1386
  }
1387
- function ys(o) {
1387
+ function Ke(o) {
1388
+ return {
1389
+ treeId: "",
1390
+ id: -1,
1391
+ path: "",
1392
+ pathSegment: "",
1393
+ parentPath: void 0,
1394
+ level: void 0,
1395
+ children: {},
1396
+ hasChildren: !1,
1397
+ isSelectable: !0,
1398
+ data: void 0,
1399
+ ...o
1400
+ };
1401
+ }
1402
+ const re = (o) => !o || typeof o == "string" && o.trim() === "";
1403
+ function Is(o, e = ".") {
1404
+ if (!o || typeof o != "string") return null;
1405
+ const t = o.lastIndexOf(e);
1406
+ return t === -1 ? "" : o.substring(0, t);
1407
+ }
1408
+ function qe(o, e, t = ".") {
1409
+ return re(e) ? o : o.startsWith(e + t) ? o.substring(e.length + t.length) : o;
1410
+ }
1411
+ function Ye(o, e = 0, t = 1, s = ".") {
1412
+ return o.split(s).slice(e, e + t).join(s);
1413
+ }
1414
+ function Ms(o, e) {
1415
+ return o.split(e).length;
1416
+ }
1417
+ function U(o, e) {
1418
+ return o[e];
1419
+ }
1420
+ function Os(o = {}) {
1421
+ const e = o.idMember, t = o.pathMember, s = o.getPathCallback, i = o.parentPathMember, r = o.levelMember, a = o.hasChildrenMember, n = o.isSelectableMember, l = o.getIsSelectableCallback, d = o.treeId || "multiselect-tree", c = o.orderMember, m = o.getDisplayValueCallback, u = re(i), p = re(r), b = re(a), v = re(n), f = "x", g = o.treePathSeparator || ".", _ = Ke();
1422
+ let y = 0, w = null;
1423
+ const M = (I) => s ? s(I) : t ? U(I, t) : void 0, E = {
1424
+ treePathSeparator: g,
1425
+ root: _,
1426
+ get tree() {
1427
+ return Object.values(_.children);
1428
+ },
1429
+ /**
1430
+ * Every node in depth-first render order (a parent immediately precedes
1431
+ * its subtree). Computed once per `insertArray` and cached.
1432
+ */
1433
+ get flatNodes() {
1434
+ if (w) return w;
1435
+ const I = [], C = o.isSorted ?? !1, x = o.sortCallback;
1436
+ function S(A) {
1437
+ let k = Object.values(A.children);
1438
+ C && x && k.length > 0 && (k = x(k));
1439
+ for (const P of k)
1440
+ I.push(P), P.hasChildren && S(P);
1441
+ }
1442
+ return S(_), w = I, I;
1443
+ },
1444
+ insertArray(I) {
1445
+ I = I || [], _.children = {}, y = 0, w = null;
1446
+ const C = [];
1447
+ let x = I.map((S, A) => {
1448
+ const k = Ke();
1449
+ k.treeId = d, k.id = e ? U(S, e) : void 0;
1450
+ const P = M(S);
1451
+ return P == null || P === "" || typeof P != "string" ? (C.push(`index ${A}`), null) : (k.path = P, (k.id === void 0 || k.id === -1) && (k.id = P), u ? k.parentPath = Is(k.path, g) : k.parentPath = U(S, i), k.pathSegment = Ye(
1452
+ qe(k.path, k.parentPath ?? "", g),
1453
+ 0,
1454
+ 1,
1455
+ g
1456
+ ), p ? k.level = Ms(k.path, g) : k.level = U(S, r), b || (k.hasChildren = U(S, a)), k.data = S, k);
1457
+ }).filter((S) => S !== null);
1458
+ o.isSorted || (o.sortCallback ? x = o.sortCallback(x) : x = se(x));
1459
+ for (const S of x)
1460
+ j(S.parentPath ?? "", S);
1461
+ if (l || !v)
1462
+ for (const S of x)
1463
+ if (l)
1464
+ S.isSelectable = l(S) !== !1;
1465
+ else {
1466
+ const A = U(S.data, n);
1467
+ S.isSelectable = A == null ? !0 : !!A;
1468
+ }
1469
+ C.length > 0 && console.warn(
1470
+ `[ltree ${d}] ${C.length} option(s) had an invalid path and were skipped (pathMember="${t}"). Offending: ${C.slice(0, 5).join(", ")}` + (C.length > 5 ? ", …" : "")
1471
+ );
1472
+ },
1473
+ getNodeByPath(I, C) {
1474
+ let x = C || _;
1475
+ if (I) {
1476
+ const S = I.split(g);
1477
+ for (let A = 0; A < S.length; A++) {
1478
+ const k = f + S[A];
1479
+ if (!x.children.hasOwnProperty(k))
1480
+ return null;
1481
+ x = x.children[k];
1482
+ }
1483
+ }
1484
+ return x;
1485
+ }
1486
+ };
1487
+ function j(I, C) {
1488
+ const x = E.getNodeByPath(I);
1489
+ if (!x)
1490
+ return `Node: ${C.path} - Could not find parent node: ${I}`;
1491
+ p && (C.level = (x.level || 0) + 1);
1492
+ const S = f + Ye(qe(C.path, I, g), 0, 1, g);
1493
+ return x.children.hasOwnProperty(S) || (x.children[S] = C, b && !x.hasChildren && (x.hasChildren = !0), y = Math.max(y, C.level || 0)), null;
1494
+ }
1495
+ function se(I) {
1496
+ return I.sort((C, x) => {
1497
+ const S = C.level || 0, A = x.level || 0;
1498
+ if (S !== A) return S - A;
1499
+ if (C.parentPath !== x.parentPath)
1500
+ return C.parentPath ? x.parentPath ? C.parentPath.localeCompare(x.parentPath) : 1 : -1;
1501
+ if (c && C.data && x.data) {
1502
+ const k = U(C.data, c) ?? 0, P = U(x.data, c) ?? 0;
1503
+ if (k !== P) return k - P;
1504
+ }
1505
+ return m ? m(C).localeCompare(m(x)) : C.path.localeCompare(x.path);
1506
+ });
1507
+ }
1508
+ return E;
1509
+ }
1510
+ function As(o, e) {
1511
+ const t = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Set(), r = (l) => String(e(l.data)), a = (l) => {
1512
+ t.set(r(l), l);
1513
+ const d = [];
1514
+ for (const m of Object.values(l.children))
1515
+ d.push(...a(m));
1516
+ let c;
1517
+ return d.length > 0 ? c = d : l.isSelectable !== !1 ? (c = [r(l)], i.add(l.path)) : c = [], s.set(l.path, c), c;
1518
+ }, n = o.tree;
1519
+ for (const l of n) a(l);
1520
+ return { nodeByValue: t, atomsUnder: s, atomPaths: i, roots: n };
1521
+ }
1522
+ function De(o, e, t) {
1523
+ const s = o.atomsUnder.get(e.path);
1524
+ if (!s || s.length === 0) return "unchecked";
1525
+ let i = 0;
1526
+ for (const r of s) t.has(r) && i++;
1527
+ return i === 0 ? "unchecked" : i === s.length ? "checked" : "indeterminate";
1528
+ }
1529
+ function Xe(o, e) {
1530
+ const t = /* @__PURE__ */ new Set();
1531
+ for (const s of e) {
1532
+ const i = o.nodeByValue.get(String(s));
1533
+ if (i)
1534
+ for (const r of o.atomsUnder.get(i.path) ?? []) t.add(r);
1535
+ }
1536
+ return t;
1537
+ }
1538
+ function Ps(o, e, t) {
1539
+ const s = o.atomsUnder.get(e.path) ?? [], i = new Set(t), r = De(o, e, t), a = [], n = [];
1540
+ if (r === "checked")
1541
+ for (const l of s) i.delete(l) && n.push(l);
1542
+ else
1543
+ for (const l of s) i.has(l) || (i.add(l), a.push(l));
1544
+ return { checkedAtoms: i, addedAtoms: a, removedAtoms: n };
1545
+ }
1546
+ function Ls(o, e, t, s) {
1547
+ const i = (n) => String(s(n.data)), r = [], a = (n) => {
1548
+ const l = De(o, n, e);
1549
+ if (l === "unchecked") return;
1550
+ const d = n.isSelectable !== !1, c = Object.values(n.children);
1551
+ if (t === "leaves") {
1552
+ o.atomPaths.has(n.path) && l === "checked" && r.push(i(n));
1553
+ for (const m of c) a(m);
1554
+ return;
1555
+ }
1556
+ if (t === "all") {
1557
+ l === "checked" && d && r.push(i(n));
1558
+ for (const m of c) a(m);
1559
+ return;
1560
+ }
1561
+ if (l === "checked" && d) {
1562
+ r.push(i(n));
1563
+ return;
1564
+ }
1565
+ for (const m of c) a(m);
1566
+ };
1567
+ for (const n of o.roots) a(n);
1568
+ return r;
1569
+ }
1570
+ function Es(o) {
1388
1571
  let e = o;
1389
1572
  for (; e && !(e === document.body || e === document.documentElement); ) {
1390
1573
  if (e instanceof Element) {
@@ -1398,7 +1581,7 @@ function ys(o) {
1398
1581
  }
1399
1582
  return window;
1400
1583
  }
1401
- function ws(o, e, t) {
1584
+ function Vs(o, e, t) {
1402
1585
  let s = o;
1403
1586
  for (; s && !(s === document.body || s === document.documentElement); ) {
1404
1587
  if (s instanceof Element) {
@@ -1410,58 +1593,68 @@ function ws(o, e, t) {
1410
1593
  }
1411
1594
  return null;
1412
1595
  }
1413
- function ks(o) {
1596
+ function Ds(o) {
1414
1597
  const e = getComputedStyle(o), t = [];
1415
1598
  e.transform !== "none" && t.push(`transform: ${e.transform}`), e.perspective !== "none" && t.push(`perspective: ${e.perspective}`), e.filter !== "none" && t.push(`filter: ${e.filter}`);
1416
1599
  const s = e.backdropFilter;
1417
1600
  return s && s !== "none" && t.push(`backdrop-filter: ${s}`), e.willChange && /\b(transform|filter|perspective)\b/.test(e.willChange) && t.push(`will-change: ${e.willChange}`), e.contain && /\b(paint|layout|strict|content)\b/.test(e.contain) && t.push(`contain: ${e.contain}`), e.containerType && e.containerType !== "normal" && t.push(`container-type: ${e.containerType}`), t.join("; ");
1418
1601
  }
1419
- class xs {
1602
+ class zs {
1420
1603
  constructor(e, t = {}) {
1421
- d(this, "element");
1422
- d(this, "instanceId");
1423
- d(this, "options");
1424
- d(this, "isOpen", !1);
1425
- d(this, "selectedValues", /* @__PURE__ */ new Set());
1426
- d(this, "selectedOptions", /* @__PURE__ */ new Map());
1427
- d(this, "allOptions", []);
1428
- d(this, "filteredOptions", []);
1429
- d(this, "hiddenInputs", []);
1430
- d(this, "focusedIndex", -1);
1431
- d(this, "matchingIndices", /* @__PURE__ */ new Set());
1432
- d(this, "searchTerm", "");
1433
- d(this, "isLoading", !1);
1434
- d(this, "searchDebounceTimer");
1435
- d(this, "searchAbortController");
1436
- d(this, "showSelectedPopover", !1);
1437
- d(this, "selectedPopoverPlacement", null);
1438
- d(this, "dropdownPlacement", null);
1439
- d(this, "isRTL", !1);
1440
- d(this, "effectiveBadgesPosition", "bottom");
1441
- d(this, "justClosedViaClick", !1);
1442
- d(this, "positioningDriftWarned", !1);
1604
+ h(this, "element");
1605
+ h(this, "instanceId");
1606
+ h(this, "options");
1607
+ h(this, "isOpen", !1);
1608
+ h(this, "selectedValues", /* @__PURE__ */ new Set());
1609
+ h(this, "selectedOptions", /* @__PURE__ */ new Map());
1610
+ h(this, "allOptions", []);
1611
+ h(this, "filteredOptions", []);
1612
+ // Tree mode: the hierarchy built from option paths, and the flat list of
1613
+ // nodes currently shown. `treeNodes` stays index-aligned with
1614
+ // `filteredOptions` so focus/keyboard/virtual-scroll keep working unchanged.
1615
+ h(this, "tree", null);
1616
+ h(this, "treeNodes", []);
1617
+ // Cascade checkbox mode (tree + multiple + checkbox-mode="cascade"): the index
1618
+ // is rebuilt with the tree; `cascadeCheckedAtoms` is the derived set of checked
1619
+ // leaf-level atoms, refreshed from `selectedValues` before each render.
1620
+ h(this, "cascadeIndex", null);
1621
+ h(this, "cascadeCheckedAtoms", /* @__PURE__ */ new Set());
1622
+ h(this, "hiddenInputs", []);
1623
+ h(this, "focusedIndex", -1);
1624
+ h(this, "matchingIndices", /* @__PURE__ */ new Set());
1625
+ h(this, "searchTerm", "");
1626
+ h(this, "isLoading", !1);
1627
+ h(this, "searchDebounceTimer");
1628
+ h(this, "searchAbortController");
1629
+ h(this, "showSelectedPopover", !1);
1630
+ h(this, "selectedPopoverPlacement", null);
1631
+ h(this, "dropdownPlacement", null);
1632
+ h(this, "isRTL", !1);
1633
+ h(this, "effectiveBadgesPosition", "bottom");
1634
+ h(this, "justClosedViaClick", !1);
1635
+ h(this, "positioningDriftWarned", !1);
1443
1636
  // Floating UI cleanup functions
1444
- d(this, "dropdownCleanup", null);
1445
- d(this, "hintCleanup", null);
1446
- d(this, "selectedPopoverCleanup", null);
1637
+ h(this, "dropdownCleanup", null);
1638
+ h(this, "hintCleanup", null);
1639
+ h(this, "selectedPopoverCleanup", null);
1447
1640
  // All hover tooltips (badge text, badge-remove buttons, action buttons), keyed by id.
1448
- d(this, "tooltips", /* @__PURE__ */ new Map());
1641
+ h(this, "tooltips", /* @__PURE__ */ new Map());
1449
1642
  // Virtual scroll instance
1450
- d(this, "virtualScroll", null);
1451
- d(this, "optionsContainer", null);
1452
- d(this, "selectedPopoverVirtualScroll", null);
1453
- d(this, "selectedPopoverContainer", null);
1643
+ h(this, "virtualScroll", null);
1644
+ h(this, "optionsContainer", null);
1645
+ h(this, "selectedPopoverVirtualScroll", null);
1646
+ h(this, "selectedPopoverContainer", null);
1454
1647
  // DOM elements
1455
- d(this, "input");
1456
- d(this, "dropdown");
1457
- d(this, "dropdownInner");
1458
- d(this, "badgesContainer");
1459
- d(this, "counter");
1460
- d(this, "hint");
1461
- d(this, "selectedPopover");
1648
+ h(this, "input");
1649
+ h(this, "dropdown");
1650
+ h(this, "dropdownInner");
1651
+ h(this, "badgesContainer");
1652
+ h(this, "counter");
1653
+ h(this, "hint");
1654
+ h(this, "selectedPopover");
1462
1655
  // Document-level event handlers (stored for cleanup)
1463
- d(this, "documentKeydownHandler", null);
1464
- d(this, "documentClickHandler", null);
1656
+ h(this, "documentKeydownHandler", null);
1657
+ h(this, "documentClickHandler", null);
1465
1658
  this.element = e, this.instanceId = `MS-${Math.random().toString(36).slice(2, 11)}`, this.options = {
1466
1659
  // String options
1467
1660
  searchHint: e.dataset.searchHint || "",
@@ -1555,7 +1748,25 @@ class xs {
1555
1748
  * text independently. Doesn't fit the extractField shape (no tuple/member layer of its own).
1556
1749
  */
1557
1750
  getItemBadgeDisplayValue(e) {
1558
- return this.options.getBadgeDisplayCallback ? this.options.getBadgeDisplayCallback(e) : this.getItemDisplayValue(e);
1751
+ if (this.options.getBadgeDisplayCallback) return this.options.getBadgeDisplayCallback(e);
1752
+ if (this.options.isBadgeFullTitleShown) {
1753
+ const t = this.getItemFullTitle(e);
1754
+ if (t) return t;
1755
+ }
1756
+ return this.getItemDisplayValue(e);
1757
+ }
1758
+ /**
1759
+ * Full title — a fully-qualified label supplied with the data (never computed here). Used by
1760
+ * badges when `isBadgeFullTitleShown` is on. Returns undefined when the option has none.
1761
+ */
1762
+ getItemFullTitle(e) {
1763
+ return this.extractField(e, {
1764
+ tupleSkip: !0,
1765
+ member: this.options.fullTitleMember,
1766
+ callback: this.options.getFullTitleCallback,
1767
+ transform: String,
1768
+ fallback: void 0
1769
+ });
1559
1770
  }
1560
1771
  getItemSearchValue(e) {
1561
1772
  return this.extractField(e, {
@@ -1601,8 +1812,27 @@ class xs {
1601
1812
  fallback: !1
1602
1813
  });
1603
1814
  }
1815
+ /**
1816
+ * Tree mode: whether the visible node at `index` may be selected. Non-selectable
1817
+ * nodes (see `isSelectableMember`/`getIsSelectableCallback`) still render — just
1818
+ * without a checkbox — but are skipped by focus and cannot be toggled. Always
1819
+ * true outside tree mode. `treeNodes` is index-aligned with `filteredOptions`.
1820
+ */
1821
+ isIndexSelectable(e) {
1822
+ if (!this.isTreeMode()) return !0;
1823
+ const t = this.treeNodes[e];
1824
+ return t ? t.isSelectable !== !1 : !0;
1825
+ }
1826
+ /** Whether an option may be selected. Always true outside tree mode. */
1827
+ isOptionSelectable(e) {
1828
+ if (!this.isTreeMode()) return !0;
1829
+ const t = this.filteredOptions.indexOf(e);
1830
+ if (t >= 0) return this.isIndexSelectable(t);
1831
+ const s = String(this.getItemValue(e)), i = this.treeNodes.find((r) => String(this.getItemValue(r.data)) === s);
1832
+ return i ? i.isSelectable !== !1 : !0;
1833
+ }
1604
1834
  init() {
1605
- this.parseOptions(), this.buildHTML(), this.attachEvents(), this.parseInitialSelection(), oe.debug(`Initialized [${this.instanceId}] with options:`, {
1835
+ this.parseOptions(), this.buildHTML(), this.attachEvents(), this.parseInitialSelection(), de.debug(`Initialized [${this.instanceId}] with options:`, {
1606
1836
  placeholder: this.options.searchPlaceholder,
1607
1837
  totalOptions: this.allOptions.length,
1608
1838
  isCloseOnSelect: this.options.isCloseOnSelect,
@@ -1615,27 +1845,148 @@ class xs {
1615
1845
  try {
1616
1846
  this.allOptions = JSON.parse(e);
1617
1847
  } catch (t) {
1618
- x.error(`[${this.instanceId}] Failed to parse data-options:`, t), this.allOptions = [];
1848
+ O.error(`[${this.instanceId}] Failed to parse data-options:`, t), this.allOptions = [];
1619
1849
  }
1620
1850
  else this.options.options && (this.allOptions = this.options.options);
1621
- this.filteredOptions = [...this.allOptions];
1851
+ this.filteredOptions = [...this.allOptions], this.isTreeMode() && this.buildTree();
1852
+ }
1853
+ // ========================================================================
1854
+ // TREE MODE
1855
+ // ========================================================================
1856
+ /** Whether options should be rendered as an (always-expanded) tree. */
1857
+ isTreeMode() {
1858
+ return this.options.isTreeEnabled === !1 ? !1 : !!(this.options.isTreeEnabled || this.options.pathMember || this.options.getPathCallback);
1859
+ }
1860
+ /** (Re)build the ltree from `allOptions` and derive the visible flat list. */
1861
+ buildTree() {
1862
+ this.tree = Os({
1863
+ idMember: this.options.valueMember,
1864
+ pathMember: this.options.pathMember,
1865
+ getPathCallback: this.options.getPathCallback,
1866
+ parentPathMember: this.options.parentPathMember,
1867
+ levelMember: this.options.levelMember,
1868
+ hasChildrenMember: this.options.hasChildrenMember,
1869
+ isSelectableMember: this.options.isSelectableMember,
1870
+ getIsSelectableCallback: this.options.getIsSelectableCallback,
1871
+ treePathSeparator: this.options.treePathSeparator,
1872
+ treeId: this.instanceId,
1873
+ getDisplayValueCallback: (e) => this.getItemDisplayValue(e.data)
1874
+ }), this.tree.insertArray(this.allOptions), this.cascadeIndex = this.isCascadeMode() ? As(this.tree, (e) => String(this.getItemValue(e))) : null, this.rebuildTreeVisible();
1875
+ }
1876
+ /**
1877
+ * Whether cascade checkbox mode is active: a multi-select tree with
1878
+ * `checkbox-mode="cascade"`. Checking a node then toggles its whole subtree
1879
+ * and branches show a tristate box.
1880
+ */
1881
+ isCascadeMode() {
1882
+ return this.isTreeMode() && this.options.isMultipleEnabled !== !1 && this.options.checkboxMode === "cascade";
1883
+ }
1884
+ cascadePolicy() {
1885
+ return this.options.cascadeSelectPolicy ?? "rolled-up";
1886
+ }
1887
+ /** Refresh the derived checked-atom set from the emitted `selectedValues`. */
1888
+ refreshCascadeAtoms() {
1889
+ this.isCascadeMode() && this.cascadeIndex && (this.cascadeCheckedAtoms = Xe(this.cascadeIndex, this.selectedValues));
1890
+ }
1891
+ /**
1892
+ * Toggle a tree node in cascade mode: flip its whole subtree, re-project the
1893
+ * checked atoms to emitted values under the active policy, and commit the diff
1894
+ * so badges / form / change events reflect the policy (rolled-up branches, etc.).
1895
+ */
1896
+ toggleTreeCascade(e) {
1897
+ var c;
1898
+ const t = this.cascadeIndex, s = Xe(t, this.selectedValues), { checkedAtoms: i } = Ps(t, e, s), r = Ls(
1899
+ t,
1900
+ i,
1901
+ this.cascadePolicy(),
1902
+ (m) => String(this.getItemValue(m))
1903
+ ), a = new Set(r), n = [], l = [];
1904
+ for (const [m, u] of this.selectedOptions)
1905
+ a.has(m) || l.push(u);
1906
+ const d = /* @__PURE__ */ new Map();
1907
+ for (const m of r) {
1908
+ const p = ((c = t.nodeByValue.get(m)) == null ? void 0 : c.data) ?? this.selectedOptions.get(m);
1909
+ p !== void 0 && (d.set(m, p), this.selectedValues.has(m) || n.push(p));
1910
+ }
1911
+ this.selectedValues = a, this.selectedOptions = d, this.cascadeCheckedAtoms = i, this.commit({ added: n, removed: l });
1912
+ }
1913
+ /**
1914
+ * Derive `treeNodes` + `filteredOptions` from the full tree, applying the
1915
+ * current search term. Matching nodes keep all their ancestors visible so
1916
+ * indentation stays coherent (the tree is always fully expanded).
1917
+ */
1918
+ rebuildTreeVisible() {
1919
+ if (!this.tree) {
1920
+ this.treeNodes = [];
1921
+ return;
1922
+ }
1923
+ const e = this.tree.flatNodes, t = this.options.isSearchEnabled ? (this.searchTerm || "").trim().toLowerCase() : "";
1924
+ let s;
1925
+ if (!t)
1926
+ s = e;
1927
+ else {
1928
+ const i = this.tree.treePathSeparator, r = /* @__PURE__ */ new Set();
1929
+ for (const a of e)
1930
+ if (this.getItemSearchValue(a.data).toLowerCase().includes(t)) {
1931
+ const l = a.path.split(i);
1932
+ for (let d = 1; d <= l.length; d++)
1933
+ r.add(l.slice(0, d).join(i));
1934
+ }
1935
+ s = e.filter((a) => r.has(a.path));
1936
+ }
1937
+ this.treeNodes = s, this.filteredOptions = s.map((i) => i.data);
1938
+ }
1939
+ /**
1940
+ * Reset the visible list to "everything". **Tree-aware**: in tree mode it
1941
+ * rebuilds `treeNodes` (kept index-aligned with `filteredOptions`) from the
1942
+ * full tree, so the two never drift. A raw `filteredOptions = [...allOptions]`
1943
+ * would leave `treeNodes` stale after clearing a search — the virtual list
1944
+ * then reserves height for every option but renders blank rows because
1945
+ * `treeNodes[index]` is undefined. Always use this to clear the visible list.
1946
+ */
1947
+ resetVisibleToAll() {
1948
+ this.isTreeMode() ? this.rebuildTreeVisible() : this.filteredOptions = [...this.allOptions];
1949
+ }
1950
+ /**
1951
+ * Tree mode: derive the visible list from an **external** set of matched
1952
+ * options — e.g. the results returned by `searchCallback` — keeping each
1953
+ * match's ancestors so indentation stays coherent. This is the async-search
1954
+ * analogue of `rebuildTreeVisible`: the matching is done by the caller (their
1955
+ * own index/engine) instead of a local substring test, but ancestor
1956
+ * preservation and `treeNodes`/`filteredOptions` index-alignment still happen
1957
+ * here. Pass all options to show the whole tree.
1958
+ */
1959
+ rebuildTreeVisibleFromMatches(e) {
1960
+ if (!this.tree) {
1961
+ this.treeNodes = [], this.filteredOptions = [];
1962
+ return;
1963
+ }
1964
+ const t = this.tree.flatNodes, s = this.tree.treePathSeparator, i = new Set((e || []).map((n) => String(this.getItemValue(n)))), r = /* @__PURE__ */ new Set();
1965
+ for (const n of t)
1966
+ if (i.has(String(this.getItemValue(n.data)))) {
1967
+ const l = n.path.split(s);
1968
+ for (let d = 1; d <= l.length; d++)
1969
+ r.add(l.slice(0, d).join(s));
1970
+ }
1971
+ const a = t.filter((n) => r.has(n.path));
1972
+ this.treeNodes = a, this.filteredOptions = a.map((n) => n.data);
1622
1973
  }
1623
1974
  buildHTML() {
1624
1975
  const e = this.options.container || document.body, t = this.element.getRootNode(), s = t instanceof ShadowRoot ? t.host : this.element, i = s.getAttribute("dir") === "rtl", r = s.closest('[dir="rtl"]') !== null;
1625
- this.isRTL = i || r, oe.debug(`[${this.instanceId}] RTL Debug:`, {
1976
+ this.isRTL = i || r, de.debug(`[${this.instanceId}] RTL Debug:`, {
1626
1977
  isShadowRoot: t instanceof ShadowRoot,
1627
1978
  hostElement: s,
1628
1979
  elementDir: s.getAttribute("dir"),
1629
1980
  hasElementDir: i,
1630
1981
  hasAncestorDir: r,
1631
1982
  isRTL: this.isRTL
1632
- }), this.effectiveBadgesPosition = this.options.badgesPosition || "bottom", this.isRTL && (this.effectiveBadgesPosition === "left" ? this.effectiveBadgesPosition = "right" : this.effectiveBadgesPosition === "right" && (this.effectiveBadgesPosition = "left")), this.element.classList.add("ms"), this.isRTL && (this.element.classList.add("ms--rtl"), oe.debug(`[${this.instanceId}] Added ms--rtl class to element`)), (!this.options.isCheckboxesShown || !this.options.isMultipleEnabled) && this.element.classList.add("ms--no-checkboxes");
1633
- const n = document.createElement("div");
1634
- n.className = "ms__input-wrapper", 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");
1635
- const a = document.createElement("span");
1636
- a.className = "ms__toggle", a.innerHTML = "▼", this.counter = document.createElement("span"), this.counter.className = "ms__counter", this.counter.style.display = "none", n.appendChild(this.input), n.appendChild(this.counter), n.appendChild(a), this.badgesContainer = document.createElement("div"), this.badgesContainer.className = "ms__badges";
1983
+ }), this.effectiveBadgesPosition = this.options.badgesPosition || "bottom", this.isRTL && (this.effectiveBadgesPosition === "left" ? this.effectiveBadgesPosition = "right" : this.effectiveBadgesPosition === "right" && (this.effectiveBadgesPosition = "left")), this.element.classList.add("ms"), this.isRTL && (this.element.classList.add("ms--rtl"), de.debug(`[${this.instanceId}] Added ms--rtl class to element`)), (!this.options.isCheckboxesShown || !this.options.isMultipleEnabled) && this.element.classList.add("ms--no-checkboxes");
1984
+ const a = document.createElement("div");
1985
+ a.className = "ms__input-wrapper", 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");
1986
+ const n = document.createElement("span");
1987
+ n.className = "ms__toggle", n.innerHTML = "▼", this.counter = document.createElement("span"), this.counter.className = "ms__counter", this.counter.style.display = "none", a.appendChild(this.input), a.appendChild(this.counter), a.appendChild(n), this.badgesContainer = document.createElement("div"), this.badgesContainer.className = "ms__badges";
1637
1988
  const l = document.createElement("div");
1638
- l.className = "ms__wrapper", (this.effectiveBadgesPosition === "left" || this.effectiveBadgesPosition === "right") && l.classList.add("ms__wrapper--inline"), l.appendChild(n), l.appendChild(this.badgesContainer), this.element.appendChild(l), this.dropdown = document.createElement("div"), this.dropdown.className = "ms__dropdown", this.dropdownInner = document.createElement("div"), this.dropdownInner.className = "ms__dropdown-inner", this.dropdown.appendChild(this.dropdownInner), e.appendChild(this.dropdown), this.options.searchHint && (this.hint = document.createElement("div"), this.hint.className = "ms__hint", this.hint.textContent = this.options.searchHint, e.appendChild(this.hint)), this.selectedPopover = document.createElement("div"), this.selectedPopover.className = "ms__selected-popover", e.appendChild(this.selectedPopover), this.renderDropdown();
1989
+ l.className = "ms__wrapper", (this.effectiveBadgesPosition === "left" || this.effectiveBadgesPosition === "right") && l.classList.add("ms__wrapper--inline"), l.appendChild(a), l.appendChild(this.badgesContainer), this.element.appendChild(l), this.dropdown = document.createElement("div"), this.dropdown.className = "ms__dropdown", this.dropdownInner = document.createElement("div"), this.dropdownInner.className = "ms__dropdown-inner", this.dropdown.appendChild(this.dropdownInner), e.appendChild(this.dropdown), this.options.searchHint && (this.hint = document.createElement("div"), this.hint.className = "ms__hint", this.hint.textContent = this.options.searchHint, e.appendChild(this.hint)), this.selectedPopover = document.createElement("div"), this.selectedPopover.className = "ms__selected-popover", e.appendChild(this.selectedPopover), this.renderDropdown();
1639
1990
  }
1640
1991
  /**
1641
1992
  * Check if virtual scroll should be used
@@ -1655,7 +2006,7 @@ class xs {
1655
2006
  });
1656
2007
  }
1657
2008
  renderDropdown() {
1658
- if (this.destroyAllActionButtonTooltips(), this.shouldUseVirtualScroll()) {
2009
+ if (this.destroyAllActionButtonTooltips(), this.refreshCascadeAtoms(), this.shouldUseVirtualScroll()) {
1659
2010
  this.dropdown.classList.add("ms__dropdown--virtual"), this.renderDropdownVirtual();
1660
2011
  return;
1661
2012
  }
@@ -1666,23 +2017,32 @@ class xs {
1666
2017
  return;
1667
2018
  }
1668
2019
  const t = this.renderActionsHTML(), s = this.options.actionsPosition === "bottom";
1669
- if (s || (e += t), e += '<div class="ms__options">', this.filteredOptions.length === 0)
2020
+ if (s || (e += t), this.options.isVirtualScrollEnabled) {
2021
+ const i = this.options.optionHeight ?? 50;
2022
+ e += `<div class="ms__options ms__options--fixed-height" style="--ms-option-height: ${i}px;">`;
2023
+ } else
2024
+ e += '<div class="ms__options">';
2025
+ if (this.filteredOptions.length === 0)
1670
2026
  e += `<div class="ms__empty">${this.options.emptyMessage}</div>`;
2027
+ else if (this.isTreeMode())
2028
+ this.treeNodes.forEach((i, r) => {
2029
+ e += this.renderTreeNode(i, r);
2030
+ });
1671
2031
  else if (this.options.isGroupsAllowed) {
1672
2032
  const i = this.groupOptions(this.filteredOptions), r = /* @__PURE__ */ new Map();
1673
- this.filteredOptions.forEach((n, a) => r.set(n, a)), Object.keys(i).forEach((n) => {
1674
- if (e += '<div class="ms__group">', n !== "__ungrouped__")
2033
+ this.filteredOptions.forEach((a, n) => r.set(a, n)), Object.keys(i).forEach((a) => {
2034
+ if (e += '<div class="ms__group">', a !== "__ungrouped__")
1675
2035
  if (this.options.renderGroupLabelContentCallback) {
1676
- const a = this.options.renderGroupLabelContentCallback(n);
1677
- if (a instanceof HTMLElement) {
2036
+ const n = this.options.renderGroupLabelContentCallback(a);
2037
+ if (n instanceof HTMLElement) {
1678
2038
  const l = document.createElement("div");
1679
- l.className = "ms__group-label", l.appendChild(a), e += l.outerHTML;
2039
+ l.className = "ms__group-label", l.appendChild(n), e += l.outerHTML;
1680
2040
  } else
1681
- e += `<div class="ms__group-label">${a}</div>`;
2041
+ e += `<div class="ms__group-label">${n}</div>`;
1682
2042
  } else
1683
- e += `<div class="ms__group-label">${n}</div>`;
1684
- i[n].forEach((a) => {
1685
- e += this.renderOption(a, r.get(a) ?? -1);
2043
+ e += `<div class="ms__group-label">${a}</div>`;
2044
+ i[a].forEach((n) => {
2045
+ e += this.renderOption(n, r.get(n) ?? -1);
1686
2046
  }), e += "</div>";
1687
2047
  });
1688
2048
  } else
@@ -1699,8 +2059,8 @@ class xs {
1699
2059
  let s = "";
1700
2060
  const i = this.renderActionsHTML(), r = this.options.actionsPosition === "bottom";
1701
2061
  r || (s += i);
1702
- const n = this.options.maxHeight || "20rem", a = this.options.optionHeight ?? 50;
1703
- s += `<div class="ms__options ms__options--virtual" style="height: ${n}; max-height: ${n}; overflow-y: auto; position: relative; --ms-option-height: ${a}px;"></div>`, r && (s += i), this.dropdownInner.innerHTML = s, this.optionsContainer = this.dropdownInner.querySelector(".ms__options");
2062
+ const a = this.options.maxHeight || "20rem", n = this.options.optionHeight ?? 50;
2063
+ s += `<div class="ms__options ms__options--virtual" style="height: ${a}; max-height: ${a}; overflow-y: auto; position: relative; --ms-option-height: ${n}px;"></div>`, r && (s += i), this.dropdownInner.innerHTML = s, this.optionsContainer = this.dropdownInner.querySelector(".ms__options");
1704
2064
  }
1705
2065
  if (this.filteredOptions.length === 0) {
1706
2066
  this.virtualScroll && (this.virtualScroll.destroy(), this.virtualScroll = null), this.optionsContainer.innerHTML = `<div class="ms__empty">${this.options.emptyMessage}</div>`;
@@ -1708,11 +2068,11 @@ class xs {
1708
2068
  }
1709
2069
  const e = this.options.optionHeight ?? 50, t = this.options.virtualScrollBuffer ?? 10;
1710
2070
  requestAnimationFrame(() => {
1711
- this.optionsContainer && (this.virtualScroll ? this.virtualScroll.setItems(this.filteredOptions) : this.virtualScroll = new We({
2071
+ this.optionsContainer && (this.virtualScroll ? this.virtualScroll.setItems(this.filteredOptions) : this.virtualScroll = new Ge({
1712
2072
  container: this.optionsContainer,
1713
2073
  itemHeight: e,
1714
2074
  items: this.filteredOptions,
1715
- renderItem: (s, i) => this.renderOption(s, i),
2075
+ renderItem: (s, i) => this.isTreeMode() ? this.renderTreeNode(this.treeNodes[i], i) : this.renderOption(s, i),
1716
2076
  bufferSize: t,
1717
2077
  onVisibleRangeChange: () => {
1718
2078
  this.attachOptionTooltips();
@@ -1737,40 +2097,65 @@ class xs {
1737
2097
  renderActionsHTML() {
1738
2098
  const e = this.options.actionButtons;
1739
2099
  if (!this.options.isMultipleEnabled || !e || e.length === 0) return "";
1740
- const t = this.options.actionsPosition === "bottom" ? "bottom" : "top", s = 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-${s}`, l = /* @__PURE__ */ new Map();
1741
- if (e.forEach((c, p) => {
2100
+ const t = this.options.actionsPosition === "bottom" ? "bottom" : "top", s = this.options.actionsAlign ?? "stretch", i = ` ms__actions--${t}`, r = this.options.isActionsSticky ? " ms__actions--sticky" : "", a = this.options.actionsLayout === "wrap" ? " ms__actions--wrap" : "", n = ` ms__actions--align-${s}`, l = /* @__PURE__ */ new Map();
2101
+ if (e.forEach((c, m) => {
1742
2102
  if (!(c.getIsVisibleCallback ? c.getIsVisibleCallback(this) : c.isVisible ?? !0)) return;
1743
- let m;
1744
- c.getIsDisabledCallback ? m = c.getIsDisabledCallback(this) : c.isDisabled !== void 0 ? m = c.isDisabled : m = this.getBuiltInActionDisabled(c.action);
1745
- const b = m ? " disabled" : "", f = c.getTextCallback ? c.getTextCallback(this) : c.text;
1746
- let g = "";
2103
+ let p;
2104
+ c.getIsDisabledCallback ? p = c.getIsDisabledCallback(this) : c.isDisabled !== void 0 ? p = c.isDisabled : p = this.getBuiltInActionDisabled(c.action);
2105
+ const b = p ? " disabled" : "", v = c.getTextCallback ? c.getTextCallback(this) : c.text;
2106
+ let f = "";
1747
2107
  if (c.getClassCallback) {
1748
- const w = c.getClassCallback(this);
1749
- g = Array.isArray(w) ? ` ${w.join(" ")}` : w ? ` ${w}` : "";
1750
- } else c.cssClass && (g = ` ${c.cssClass}`);
1751
- const v = Math.max(1, Math.floor(c.row ?? 1)), _ = `<button type="button"${b} class="ms__action-btn${g}" data-action="${c.action}" data-button-index="${p}">${f}</button>`;
1752
- l.has(v) || l.set(v, []), l.get(v).push(_);
2108
+ const y = c.getClassCallback(this);
2109
+ f = Array.isArray(y) ? ` ${y.join(" ")}` : y ? ` ${y}` : "";
2110
+ } else c.cssClass && (f = ` ${c.cssClass}`);
2111
+ const g = Math.max(1, Math.floor(c.row ?? 1)), _ = `<button type="button"${b} class="ms__action-btn${f}" data-action="${c.action}" data-button-index="${m}">${v}</button>`;
2112
+ l.has(g) || l.set(g, []), l.get(g).push(_);
1753
2113
  }), l.size === 0) return "";
1754
- const h = Array.from(l.keys()).sort((c, p) => c - p).map((c) => `<div class="ms__actions-row" data-row="${c}">${l.get(c).join("")}</div>`).join("");
1755
- return `<div class="ms__actions${i}${r}${n}${a}">${h}</div>`;
2114
+ const d = Array.from(l.keys()).sort((c, m) => c - m).map((c) => `<div class="ms__actions-row" data-row="${c}">${l.get(c).join("")}</div>`).join("");
2115
+ return `<div class="ms__actions${i}${r}${a}${n}">${d}</div>`;
1756
2116
  }
1757
2117
  renderOption(e, t) {
1758
- const s = this.getItemValue(e), i = this.getItemDisplayValue(e), r = this.getItemIcon(e), n = this.getItemSubtitle(e), a = this.getItemDisabled(e), l = this.selectedValues.has(String(s)), h = t === this.focusedIndex, c = this.matchingIndices.has(t), p = ["ms__option"];
1759
- l && p.push("ms__option--selected"), h && p.push("ms__option--focused"), c && p.push("ms__option--matched"), a && p.push("ms__option--disabled");
2118
+ const s = this.getItemValue(e), i = this.getItemDisplayValue(e), r = this.getItemIcon(e), a = this.getItemSubtitle(e), n = this.getItemDisabled(e), l = this.selectedValues.has(String(s)), d = t === this.focusedIndex, c = this.matchingIndices.has(t), m = ["ms__option"];
2119
+ l && m.push("ms__option--selected"), d && m.push("ms__option--focused"), c && m.push("ms__option--matched"), n && m.push("ms__option--disabled");
1760
2120
  const u = this.options.checkboxAlign && this.options.checkboxAlign !== "center" ? ` data-checkbox-align="${this.options.checkboxAlign}"` : "";
1761
- let m = `<div class="${p.join(" ")}" data-value="${s}" data-index="${t}"${u}>`;
1762
- 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) {
2121
+ let p = `<div class="${m.join(" ")}" data-value="${s}" data-index="${t}"${u}>`;
2122
+ if (this.options.isCheckboxesShown && this.options.isMultipleEnabled && (p += `<input type="checkbox" class="ms__checkbox" ${l ? "checked" : ""} ${n ? "disabled" : ""}>`), p += '<div class="ms__option-content">', this.options.renderOptionContentCallback) {
1763
2123
  const b = {
1764
2124
  index: t,
1765
2125
  isSelected: l,
1766
- isFocused: h,
2126
+ isFocused: d,
1767
2127
  isMatched: c,
1768
- isDisabled: a
1769
- }, f = this.options.renderOptionContentCallback(e, b);
1770
- typeof f == "string" ? m += f : m += f.outerHTML;
2128
+ isDisabled: n
2129
+ }, v = this.options.renderOptionContentCallback(e, b);
2130
+ typeof v == "string" ? p += v : p += v.outerHTML;
2131
+ } else
2132
+ 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>`, a && (p += `<div class="ms__option-subtitle">${a}</div>`), p += "</div>";
2133
+ return p += "</div>", p += "</div>", p;
2134
+ }
2135
+ /**
2136
+ * Render a single tree-mode row. Separate from `renderOption`: a tree row is
2137
+ * indented by its depth (via the `--ms-tree-depth` custom property) and
2138
+ * tagged branch/leaf, but otherwise carries the same selection/checkbox/
2139
+ * icon/subtitle content. The tree is always fully expanded, so there is no
2140
+ * chevron/toggle — every node is just a normal, selectable option.
2141
+ */
2142
+ renderTreeNode(e, t) {
2143
+ const s = e.data, i = this.getItemValue(s), r = this.getItemDisplayValue(s), a = this.getItemIcon(s), n = this.getItemSubtitle(s), l = this.getItemDisabled(s), d = this.isCascadeMode() && this.cascadeIndex, c = d ? De(this.cascadeIndex, e, this.cascadeCheckedAtoms) : null, m = d ? c === "checked" : this.selectedValues.has(String(i)), u = c === "indeterminate", p = t === this.focusedIndex, b = e.isSelectable !== !1, v = e.level ?? 1, f = Math.max(0, v - 1), g = ["ms__option", "ms__option--tree"];
2144
+ g.push(e.hasChildren ? "ms__option--tree-branch" : "ms__option--tree-leaf"), m && g.push("ms__option--selected"), u && g.push("ms__option--indeterminate"), p && g.push("ms__option--focused"), l && g.push("ms__option--disabled"), b || g.push("ms__option--tree-unselectable");
2145
+ const _ = this.options.checkboxAlign && this.options.checkboxAlign !== "center" ? ` data-checkbox-align="${this.options.checkboxAlign}"` : "", y = b ? "" : ' data-selectable="false"';
2146
+ let w = `<div class="${g.join(" ")}" data-value="${i}" data-index="${t}" data-path="${e.path}" data-level="${v}" style="--ms-tree-depth: ${f};"${_}${y}>`;
2147
+ if (this.options.isCheckboxesShown && this.options.isMultipleEnabled && b && (w += `<input type="checkbox" class="${u ? "ms__checkbox ms__checkbox--indeterminate" : "ms__checkbox"}" ${m ? "checked" : ""}${u ? ' aria-checked="mixed"' : ""} ${l ? "disabled" : ""}>`), w += '<div class="ms__option-content">', this.options.renderOptionContentCallback) {
2148
+ const M = {
2149
+ index: t,
2150
+ isSelected: m,
2151
+ isFocused: p,
2152
+ isMatched: !1,
2153
+ isDisabled: l
2154
+ }, E = this.options.renderOptionContentCallback(s, M);
2155
+ w += typeof E == "string" ? E : E.outerHTML;
1771
2156
  } else
1772
- 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>";
1773
- return m += "</div>", m += "</div>", m;
2157
+ a && (w += `<span class="ms__option-icon">${a}</span>`), w += '<div class="ms__option-text">', w += `<div class="ms__option-title">${this.highlightMatch(r, this.searchTerm)}</div>`, n && (w += `<div class="ms__option-subtitle">${n}</div>`), w += "</div>";
2158
+ return w += "</div>", w += "</div>", w;
1774
2159
  }
1775
2160
  highlightMatch(e, t) {
1776
2161
  if (!t) return e;
@@ -1820,21 +2205,21 @@ class xs {
1820
2205
  this.badgesContainer.className = `ms__badges ms__badges--${this.effectiveBadgesPosition}`, this.badgesContainer.innerHTML = e.map((r) => this.renderBadgeHTML(r, { displayMode: "badges", isInPopover: !1 })).join("");
1821
2206
  else if (s === "partial") {
1822
2207
  this.badgesContainer.className = `ms__badges ms__badges--${this.effectiveBadgesPosition}`;
1823
- const r = this.options.badgesMaxVisible || 3, n = e.slice(0, r), a = t - r, l = n.map((c) => this.renderBadgeHTML(c, { displayMode: "partial", isInPopover: !1 })).join("");
1824
- let h = "";
1825
- a > 0 && (h = `
2208
+ const r = this.options.badgesMaxVisible || 3, a = e.slice(0, r), n = t - r, l = a.map((c) => this.renderBadgeHTML(c, { displayMode: "partial", isInPopover: !1 })).join("");
2209
+ let d = "";
2210
+ n > 0 && (d = `
1826
2211
  <div class="ms__badge ms__badge--counter ms__badge--more" data-action="show-selected">
1827
- <span class="ms__badge-text">${this.options.getCounterCallback ? this.options.getCounterCallback(t, a) : `+${a} more`}</span>
1828
- <button type="button" class="ms__badge-remove" data-action="remove-hidden" aria-label="Remove ${a} hidden items"></button>
2212
+ <span class="ms__badge-text">${this.options.getCounterCallback ? this.options.getCounterCallback(t, n) : `+${n} more`}</span>
2213
+ <button type="button" class="ms__badge-remove" data-action="remove-hidden" aria-label="Remove ${n} hidden items"></button>
1829
2214
  </div>
1830
- `), this.badgesContainer.innerHTML = l + h;
2215
+ `), this.badgesContainer.innerHTML = l + d;
1831
2216
  } else if (s === "compact")
1832
2217
  if (this.badgesContainer.className = `ms__badges ms__badges--${this.effectiveBadgesPosition}`, t > 0) {
1833
- const r = e[0], n = this.getItemBadgeDisplayValue(r), a = t - 1;
1834
- let l = n;
1835
- if (a > 0) {
1836
- const h = this.options.getCounterCallback ? this.options.getCounterCallback(t, a) : `+${a} more`;
1837
- l = `${n} (${h})`;
2218
+ const r = e[0], a = this.getItemBadgeDisplayValue(r), n = t - 1;
2219
+ let l = a;
2220
+ if (n > 0) {
2221
+ const d = this.options.getCounterCallback ? this.options.getCounterCallback(t, n) : `+${n} more`;
2222
+ l = `${a} (${d})`;
1838
2223
  }
1839
2224
  this.badgesContainer.innerHTML = `
1840
2225
  <div class="ms__badge" data-action="show-selected">
@@ -1890,14 +2275,14 @@ class xs {
1890
2275
  if (this.options.beforeSearchCallback) {
1891
2276
  const s = this.options.beforeSearchCallback(e);
1892
2277
  if (s === null) {
1893
- x.debug(`[${this.instanceId}] beforeSearchCallback blocked search for term:`, e), this.abortInFlightSearch(), this.filteredOptions = [...this.allOptions], this.matchingIndices.clear(), this.renderDropdown();
2278
+ O.debug(`[${this.instanceId}] beforeSearchCallback blocked search for term:`, e), this.abortInFlightSearch(), this.matchingIndices.clear(), this.isTreeMode() ? (this.searchTerm = "", this.rebuildTreeVisible()) : this.filteredOptions = [...this.allOptions], this.renderDropdown();
1894
2279
  return;
1895
2280
  }
1896
- t = s, t !== e && x.debug(`[${this.instanceId}] beforeSearchCallback transformed: "${e}" -> "${t}"`);
2281
+ t = s, t !== e && O.debug(`[${this.instanceId}] beforeSearchCallback transformed: "${e}" -> "${t}"`);
1897
2282
  }
1898
2283
  if (this.options.searchCallback) {
1899
2284
  if (t.length < this.options.minSearchLength) {
1900
- this.abortInFlightSearch(), this.isLoading = !1, this.options.isKeepOptionsOnSearch ? (this.filteredOptions = [...this.allOptions], x.debug(`[${this.instanceId}] Search term below minimum, showing ${this.allOptions.length} initial options`)) : this.filteredOptions = [], this.matchingIndices.clear(), this.renderDropdown();
2285
+ this.abortInFlightSearch(), this.isLoading = !1, this.options.isKeepOptionsOnSearch ? (this.isTreeMode() ? this.rebuildTreeVisibleFromMatches(this.allOptions) : this.filteredOptions = [...this.allOptions], O.debug(`[${this.instanceId}] Search term below minimum, showing ${this.allOptions.length} initial options`)) : (this.filteredOptions = [], this.isTreeMode() && (this.treeNodes = [])), this.matchingIndices.clear(), this.renderDropdown();
1901
2286
  return;
1902
2287
  }
1903
2288
  this.searchDebounceTimer && (clearTimeout(this.searchDebounceTimer), this.searchDebounceTimer = void 0);
@@ -1906,18 +2291,22 @@ class xs {
1906
2291
  this.searchDebounceTimer = void 0, this.searchTerm === e && this.performAsyncSearch(e, t);
1907
2292
  }, s) : await this.performAsyncSearch(e, t);
1908
2293
  } else {
2294
+ if (this.isTreeMode()) {
2295
+ this.rebuildTreeVisible(), this.matchingIndices.clear(), this.focusedIndex = this.filteredOptions.length > 0 ? 0 : -1, this.renderDropdown();
2296
+ return;
2297
+ }
1909
2298
  if (!t)
1910
2299
  this.filteredOptions = [...this.allOptions], this.matchingIndices.clear(), this.focusedIndex = this.filteredOptions.length > 0 ? 0 : -1;
1911
2300
  else {
1912
2301
  const s = this.options.searchMode || "filter", i = t.toLowerCase();
1913
2302
  if (s === "filter")
1914
- this.filteredOptions = this.allOptions.filter((r) => this.getItemSearchValue(r).toLowerCase().includes(i)), this.matchingIndices.clear(), this.focusedIndex = this.filteredOptions.length > 0 ? 0 : -1, x.debug(`[${this.instanceId}] Filter mode: ${this.filteredOptions.length} matches for "${t}"`);
2303
+ this.filteredOptions = this.allOptions.filter((r) => this.getItemSearchValue(r).toLowerCase().includes(i)), this.matchingIndices.clear(), this.focusedIndex = this.filteredOptions.length > 0 ? 0 : -1, O.debug(`[${this.instanceId}] Filter mode: ${this.filteredOptions.length} matches for "${t}"`);
1915
2304
  else {
1916
2305
  this.filteredOptions = [...this.allOptions], this.matchingIndices.clear();
1917
2306
  let r = -1;
1918
- this.allOptions.forEach((n, a) => {
1919
- this.getItemSearchValue(n).toLowerCase().includes(i) && (this.matchingIndices.add(a), r === -1 && (r = a));
1920
- }), r >= 0 ? (this.focusedIndex = r, x.debug(`[${this.instanceId}] Navigate mode: ${this.matchingIndices.size} matches, jumped to index ${r}`)) : x.debug(`[${this.instanceId}] Navigate mode: No matches found, keeping previous focus`);
2307
+ this.allOptions.forEach((a, n) => {
2308
+ this.getItemSearchValue(a).toLowerCase().includes(i) && (this.matchingIndices.add(n), r === -1 && (r = n));
2309
+ }), r >= 0 ? (this.focusedIndex = r, O.debug(`[${this.instanceId}] Navigate mode: ${this.matchingIndices.size} matches, jumped to index ${r}`)) : O.debug(`[${this.instanceId}] Navigate mode: No matches found, keeping previous focus`);
1921
2310
  }
1922
2311
  }
1923
2312
  this.renderDropdown(), this.options.searchMode === "navigate" && this.focusedIndex >= 0 && this.scrollToFocused();
@@ -1941,15 +2330,15 @@ class xs {
1941
2330
  async performAsyncSearch(e, t) {
1942
2331
  this.abortInFlightSearch();
1943
2332
  const s = new AbortController();
1944
- this.searchAbortController = s, this.isLoading = !0, this.renderDropdown(), x.debug(`[${this.instanceId}] Loading data for search term:`, t);
2333
+ this.searchAbortController = s, this.isLoading = !0, this.renderDropdown(), O.debug(`[${this.instanceId}] Loading data for search term:`, t);
1945
2334
  try {
1946
2335
  const i = await this.options.searchCallback(t, s.signal);
1947
2336
  if (s.signal.aborted || this.searchTerm !== e) return;
1948
2337
  const r = i || [];
1949
- this.filteredOptions = [...r], this.isLoading = !1, this.matchingIndices.clear(), this.focusedIndex = this.options.isSearchEnabled && this.filteredOptions.length > 0 ? 0 : -1, this.renderDropdown(), x.debug(`[${this.instanceId}] Loaded ${r.length} results`);
2338
+ this.isTreeMode() ? this.rebuildTreeVisibleFromMatches(r) : this.filteredOptions = [...r], this.isLoading = !1, this.matchingIndices.clear(), this.focusedIndex = this.options.isSearchEnabled && this.filteredOptions.length > 0 ? 0 : -1, this.renderDropdown(), O.debug(`[${this.instanceId}] Loaded ${r.length} results`);
1950
2339
  } catch (i) {
1951
2340
  if (s.signal.aborted) return;
1952
- x.error(`[${this.instanceId}] Error loading data:`, i), this.isLoading = !1, this.options.isKeepOptionsOnSearch ? this.filteredOptions = [...this.allOptions] : this.filteredOptions = [], this.matchingIndices.clear(), this.renderDropdown();
2341
+ O.error(`[${this.instanceId}] Error loading data:`, i), this.isLoading = !1, this.options.isKeepOptionsOnSearch ? this.isTreeMode() ? this.rebuildTreeVisibleFromMatches(this.allOptions) : this.filteredOptions = [...this.allOptions] : (this.filteredOptions = [], this.isTreeMode() && (this.treeNodes = [])), this.matchingIndices.clear(), this.renderDropdown();
1953
2342
  } finally {
1954
2343
  this.searchAbortController === s && (this.searchAbortController = void 0);
1955
2344
  }
@@ -1977,7 +2366,7 @@ class xs {
1977
2366
  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());
1978
2367
  break;
1979
2368
  case "Escape":
1980
- e.preventDefault(), this.showSelectedPopover ? this.hideSelectedPopover() : this.input.value ? (this.input.value = "", this.searchTerm = "", this.filteredOptions = [...this.allOptions], this.focusedIndex = -1, this.renderDropdown()) : this.close();
2369
+ e.preventDefault(), this.showSelectedPopover ? this.hideSelectedPopover() : this.input.value ? (this.input.value = "", this.searchTerm = "", this.resetVisibleToAll(), this.matchingIndices.clear(), this.focusedIndex = -1, this.renderDropdown()) : this.close();
1981
2370
  break;
1982
2371
  case "Tab":
1983
2372
  this.close();
@@ -1998,36 +2387,36 @@ class xs {
1998
2387
  }
1999
2388
  handleDropdownClick(e) {
2000
2389
  var i;
2001
- S.debug(`[${this.instanceId}] Dropdown clicked`, { target: e.target.className }), e.stopPropagation();
2390
+ L.debug(`[${this.instanceId}] Dropdown clicked`, { target: e.target.className }), e.stopPropagation();
2002
2391
  const t = e.target.closest("[data-action]");
2003
2392
  if (t) {
2004
2393
  e.preventDefault();
2005
2394
  const r = t.dataset.action;
2006
- if (S.debug(`[${this.instanceId}] Action button clicked:`, r), r === "select-all")
2395
+ if (L.debug(`[${this.instanceId}] Action button clicked:`, r), r === "select-all")
2007
2396
  this.selectAll();
2008
2397
  else if (r === "clear-all")
2009
2398
  this.clearAll();
2010
2399
  else if (r === "custom") {
2011
- const n = parseInt(t.dataset.buttonIndex || "-1"), a = (i = this.options.actionButtons) == null ? void 0 : i[n];
2012
- a != null && a.onClick && a.onClick(this);
2400
+ const a = parseInt(t.dataset.buttonIndex || "-1"), n = (i = this.options.actionButtons) == null ? void 0 : i[a];
2401
+ n != null && n.onClick && n.onClick(this);
2013
2402
  }
2014
2403
  return;
2015
2404
  }
2016
2405
  const s = e.target.closest(".ms__option");
2017
2406
  if (s && !s.classList.contains("ms__option--disabled")) {
2018
2407
  e.preventDefault();
2019
- const r = s.dataset.value, n = this.filteredOptions.findIndex((a) => String(this.getItemValue(a)) === r);
2020
- S.debug(`[${this.instanceId}] Option clicked:`, {
2408
+ const r = s.dataset.value, a = this.filteredOptions.findIndex((n) => String(this.getItemValue(n)) === r);
2409
+ L.debug(`[${this.instanceId}] Option clicked:`, {
2021
2410
  value: r,
2022
- optionIndex: n,
2411
+ optionIndex: a,
2023
2412
  closeOnSelect: this.options.isCloseOnSelect,
2024
2413
  placeholder: this.options.searchPlaceholder
2025
- }), n >= 0 && (this.focusedIndex = n, this.toggleOption(this.filteredOptions[n]), this.isOpen && this.input.focus());
2414
+ }), a >= 0 && (this.focusedIndex = a, this.toggleOption(this.filteredOptions[a]), this.isOpen && this.input.focus());
2026
2415
  }
2027
2416
  }
2028
2417
  handleBadgeClick(e) {
2029
2418
  if (e.target.closest('[data-action="clear-count"]')) {
2030
- e.preventDefault(), e.stopPropagation(), S.debug(`[${this.instanceId}] Clear count button clicked`), this.clearAll();
2419
+ e.preventDefault(), e.stopPropagation(), L.debug(`[${this.instanceId}] Clear count button clicked`), this.clearAll();
2031
2420
  return;
2032
2421
  }
2033
2422
  if (e.target.closest('[data-action="show-selected"]')) {
@@ -2037,17 +2426,17 @@ class xs {
2037
2426
  const i = e.target.closest(".ms__badge-remove");
2038
2427
  if (i) {
2039
2428
  if (e.preventDefault(), e.stopPropagation(), i.dataset.action === "remove-hidden") {
2040
- S.debug(`[${this.instanceId}] Remove hidden items button clicked`);
2429
+ L.debug(`[${this.instanceId}] Remove hidden items button clicked`);
2041
2430
  const l = this.options.badgesMaxVisible || 3;
2042
- Array.from(this.selectedOptions.values()).slice(l).forEach((p) => this.interactiveDeselect(p));
2431
+ Array.from(this.selectedOptions.values()).slice(l).forEach((m) => this.interactiveDeselect(m));
2043
2432
  return;
2044
2433
  }
2045
- const n = i.dataset.value, a = this.selectedOptions.get(n);
2046
- a && this.interactiveDeselect(a);
2434
+ const a = i.dataset.value, n = this.selectedOptions.get(a);
2435
+ n && this.interactiveDeselect(n);
2047
2436
  return;
2048
2437
  }
2049
2438
  if (e.target.closest(".ms__badge--more") && !e.target.closest(".ms__badge-remove")) {
2050
- e.preventDefault(), e.stopPropagation(), S.debug(`[${this.instanceId}] '+X more' badge clicked, showing popover`), this.toggleSelectedPopover();
2439
+ e.preventDefault(), e.stopPropagation(), L.debug(`[${this.instanceId}] '+X more' badge clicked, showing popover`), this.toggleSelectedPopover();
2051
2440
  return;
2052
2441
  }
2053
2442
  }
@@ -2055,16 +2444,16 @@ class xs {
2055
2444
  var i;
2056
2445
  const t = e.composedPath();
2057
2446
  if (this.showSelectedPopover && !t.some(
2058
- (n) => n instanceof Node && (this.selectedPopover.contains(n) || this.counter.contains(n) || n.closest && n.closest('[data-action="show-selected"]'))
2447
+ (a) => a instanceof Node && (this.selectedPopover.contains(a) || this.counter.contains(a) || a.closest && a.closest('[data-action="show-selected"]'))
2059
2448
  )) {
2060
- P.debug(`[${this.instanceId}] Closing selected popover due to click outside`), this.hideSelectedPopover();
2449
+ R.debug(`[${this.instanceId}] Closing selected popover due to click outside`), this.hideSelectedPopover();
2061
2450
  return;
2062
2451
  }
2063
2452
  if (!this.isOpen) return;
2064
2453
  const s = t.some(
2065
2454
  (r) => r instanceof Node && (this.element.contains(r) || this.dropdown.contains(r) || this.hint && this.hint.contains(r))
2066
2455
  );
2067
- S.debug(`[${this.instanceId}] handleClickOutside`, {
2456
+ L.debug(`[${this.instanceId}] handleClickOutside`, {
2068
2457
  target: e.target.className,
2069
2458
  targetTag: e.target.tagName,
2070
2459
  clickedInside: s,
@@ -2073,45 +2462,61 @@ class xs {
2073
2462
  elementContains: t.some((r) => r instanceof Node && this.element.contains(r)),
2074
2463
  dropdownContains: t.some((r) => r instanceof Node && this.dropdown.contains(r)),
2075
2464
  isConnected: this.dropdown.isConnected
2076
- }), s || (S.warn(`[${this.instanceId}] Closing dropdown due to click outside`), this.close());
2465
+ }), s || (L.warn(`[${this.instanceId}] Closing dropdown due to click outside`), this.close());
2077
2466
  }
2078
2467
  /**
2079
2468
  * Move focus by computing a new index from (current, total).
2080
2469
  * Returning -1 from `compute` is a no-op (used for empty list / no match).
2081
2470
  */
2082
- focusBy(e) {
2083
- const t = this.filteredOptions.length;
2084
- if (t === 0) return;
2085
- const s = e(this.focusedIndex, t);
2086
- s < 0 || (this.focusedIndex = s, this.renderDropdown(), this.scrollToFocused());
2471
+ focusBy(e, t = 1) {
2472
+ const s = this.filteredOptions.length;
2473
+ if (s === 0) return;
2474
+ const i = e(this.focusedIndex, s);
2475
+ if (i < 0) return;
2476
+ const r = this.resolveSelectableIndex(i, t, s);
2477
+ r < 0 || (this.focusedIndex = r, this.renderDropdown(), this.scrollToFocused());
2478
+ }
2479
+ /**
2480
+ * Given a target index and a preferred direction, return the nearest index
2481
+ * whose node is selectable (skipping non-selectable tree nodes). Falls back to
2482
+ * the opposite direction, then to -1 if nothing is selectable. No-op outside
2483
+ * tree mode.
2484
+ */
2485
+ resolveSelectableIndex(e, t, s) {
2486
+ if (!this.isTreeMode()) return e;
2487
+ let i = e;
2488
+ for (; i >= 0 && i < s && !this.isIndexSelectable(i); ) i += t;
2489
+ if (i < 0 || i >= s)
2490
+ for (i = e - t; i >= 0 && i < s && !this.isIndexSelectable(i); ) i -= t;
2491
+ return i >= 0 && i < s ? i : -1;
2087
2492
  }
2088
2493
  focusNext() {
2089
- this.focusBy((e, t) => Math.min(t - 1, e + 1));
2494
+ this.focusBy((e, t) => Math.min(t - 1, e + 1), 1);
2090
2495
  }
2091
2496
  focusPrevious() {
2092
- this.focusBy((e) => Math.max(0, e - 1));
2497
+ this.focusBy((e) => Math.max(0, e - 1), -1);
2093
2498
  }
2094
2499
  focusFirst() {
2095
- this.focusBy(() => 0);
2500
+ this.focusBy(() => 0, 1);
2096
2501
  }
2097
2502
  focusLast() {
2098
- this.focusBy((e, t) => t - 1);
2503
+ this.focusBy((e, t) => t - 1, -1);
2099
2504
  }
2100
2505
  focusPageUp() {
2101
- this.focusBy((e) => Math.max(0, e - 10));
2506
+ this.focusBy((e) => Math.max(0, e - 10), -1);
2102
2507
  }
2103
2508
  focusPageDown() {
2104
- this.focusBy((e, t) => Math.min(t - 1, e + 10));
2509
+ this.focusBy((e, t) => Math.min(t - 1, e + 10), 1);
2105
2510
  }
2106
2511
  focusNextMatch() {
2107
2512
  if (this.matchingIndices.size === 0) return;
2108
2513
  const e = Array.from(this.matchingIndices).sort((i, r) => i - r), t = e.findIndex((i) => i === this.focusedIndex), s = (t + 1) % e.length;
2109
- this.focusBy(() => e[s]), S.debug(`[${this.instanceId}] Jumped to next match: index ${this.focusedIndex} (${t + 1} of ${e.length})`);
2514
+ this.focusBy(() => e[s]), L.debug(`[${this.instanceId}] Jumped to next match: index ${this.focusedIndex} (${t + 1} of ${e.length})`);
2110
2515
  }
2111
2516
  focusPreviousMatch() {
2112
2517
  if (this.matchingIndices.size === 0) return;
2113
2518
  const e = Array.from(this.matchingIndices).sort((i, r) => i - r), t = e.findIndex((i) => i === this.focusedIndex), s = t <= 0 ? e.length - 1 : t - 1;
2114
- this.focusBy(() => e[s]), S.debug(`[${this.instanceId}] Jumped to previous match: index ${this.focusedIndex} (${t + 1} of ${e.length})`);
2519
+ this.focusBy(() => e[s]), L.debug(`[${this.instanceId}] Jumped to previous match: index ${this.focusedIndex} (${t + 1} of ${e.length})`);
2115
2520
  }
2116
2521
  scrollToFocused() {
2117
2522
  if (this.virtualScroll && this.focusedIndex >= 0)
@@ -2123,11 +2528,22 @@ class xs {
2123
2528
  }
2124
2529
  toggleOption(e) {
2125
2530
  if (this.getItemDisabled(e)) {
2126
- S.debug(`[${this.instanceId}] toggleOption ignored — option is disabled`);
2531
+ L.debug(`[${this.instanceId}] toggleOption ignored — option is disabled`);
2532
+ return;
2533
+ }
2534
+ if (!this.isOptionSelectable(e)) {
2535
+ L.debug(`[${this.instanceId}] toggleOption ignored — node is not selectable`);
2127
2536
  return;
2128
2537
  }
2129
2538
  const t = this.getItemValue(e), s = String(t);
2130
- S.debug(`[${this.instanceId}] toggleOption called`, { value: t, multiple: this.options.isMultipleEnabled }), (this.selectedValues.has(s) ? this.interactiveDeselect(e) : this.interactiveSelect(e)) && (this.options.isMultipleEnabled ? this.options.isCloseOnSelect && this.close() : this.close());
2539
+ if (L.debug(`[${this.instanceId}] toggleOption called`, { value: t, multiple: this.options.isMultipleEnabled }), this.isCascadeMode() && this.cascadeIndex) {
2540
+ const a = this.cascadeIndex.nodeByValue.get(s);
2541
+ if (a) {
2542
+ this.toggleTreeCascade(a), this.options.isCloseOnSelect && this.close();
2543
+ return;
2544
+ }
2545
+ }
2546
+ (this.selectedValues.has(s) ? this.interactiveDeselect(e) : this.interactiveSelect(e)) && (this.options.isMultipleEnabled ? this.options.isCloseOnSelect && this.close() : this.close());
2131
2547
  }
2132
2548
  /**
2133
2549
  * The single funnel for an interactive (user-initiated) selection. Consults
@@ -2137,7 +2553,7 @@ class xs {
2137
2553
  * Returns true if the option was selected, false if the veto blocked it.
2138
2554
  */
2139
2555
  interactiveSelect(e) {
2140
- return this.options.beforeSelectCallback && this.options.beforeSelectCallback(e, this.getSelected()) === !1 ? (S.debug(`[${this.instanceId}] Selection blocked by beforeSelectCallback`), !1) : (this.options.isMultipleEnabled || (this.selectedValues.clear(), this.selectedOptions.clear()), this.selectOption(e), !0);
2556
+ return this.options.beforeSelectCallback && this.options.beforeSelectCallback(e, this.getSelected()) === !1 ? (L.debug(`[${this.instanceId}] Selection blocked by beforeSelectCallback`), !1) : (this.options.isMultipleEnabled || (this.selectedValues.clear(), this.selectedOptions.clear()), this.selectOption(e), !0);
2141
2557
  }
2142
2558
  /**
2143
2559
  * The single funnel for an interactive (user-initiated) deselection. Every
@@ -2148,16 +2564,16 @@ class xs {
2148
2564
  * Returns true if the option was deselected, false if the veto blocked it.
2149
2565
  */
2150
2566
  interactiveDeselect(e) {
2151
- return this.options.beforeDeselectCallback && this.options.beforeDeselectCallback(e, this.getSelected()) === !1 ? (S.debug(`[${this.instanceId}] Deselection blocked by beforeDeselectCallback`), !1) : (this.deselectOption(e), !0);
2567
+ return this.options.beforeDeselectCallback && this.options.beforeDeselectCallback(e, this.getSelected()) === !1 ? (L.debug(`[${this.instanceId}] Deselection blocked by beforeDeselectCallback`), !1) : (this.deselectOption(e), !0);
2152
2568
  }
2153
2569
  async handleAddNew(e) {
2154
2570
  if (this.options.addNewCallback)
2155
2571
  try {
2156
- x.debug(`[${this.instanceId}] Adding new option:`, e);
2572
+ O.debug(`[${this.instanceId}] Adding new option:`, e);
2157
2573
  const t = await this.options.addNewCallback(e);
2158
2574
  this.allOptions.push(t), this.filteredOptions.push(t), this.selectOption(t), this.input.value = "", this.renderDropdown(), this.renderBadges(), this.options.isCloseOnSelect && this.close();
2159
2575
  } catch (t) {
2160
- x.error(`[${this.instanceId}] Error adding new option:`, t);
2576
+ O.error(`[${this.instanceId}] Error adding new option:`, t);
2161
2577
  }
2162
2578
  }
2163
2579
  selectOption(e) {
@@ -2170,10 +2586,10 @@ class xs {
2170
2586
  }
2171
2587
  selectAll() {
2172
2588
  const e = [];
2173
- this.filteredOptions.forEach((t) => {
2174
- if (this.getItemDisabled(t)) return;
2175
- const s = String(this.getItemValue(t));
2176
- this.selectedValues.has(s) || (this.selectedValues.add(s), this.selectedOptions.set(s, t), e.push(t));
2589
+ this.filteredOptions.forEach((t, s) => {
2590
+ if (this.getItemDisabled(t) || !this.isIndexSelectable(s)) return;
2591
+ const i = String(this.getItemValue(t));
2592
+ this.selectedValues.has(i) || (this.selectedValues.add(i), this.selectedOptions.set(i, t), e.push(t));
2177
2593
  }), this.commit({ added: e });
2178
2594
  }
2179
2595
  clearAll() {
@@ -2191,10 +2607,10 @@ class xs {
2191
2607
  this.options.onSelect && t.forEach((i) => this.options.onSelect(i)), this.options.onDeselect && s.forEach((i) => this.options.onDeselect(i)), (t.length > 0 || s.length > 0) && this.options.onChange && this.options.onChange(this.getSelected());
2192
2608
  }
2193
2609
  open() {
2194
- P.debug(`[${this.instanceId}] open() called`, { isOpen: this.isOpen }), !this.isOpen && (this.isOpen = !0, this.element.classList.add("ms--open"), this.dropdown.classList.add("ms__dropdown--visible"), P.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], P.debug(`[${this.instanceId}] Showing ${this.allOptions.length} initial options on open`)), this.renderDropdown(), this.positionDropdown(), this.hint && (this.hint.classList.add("ms__hint--visible"), this.positionHint()));
2610
+ R.debug(`[${this.instanceId}] open() called`, { isOpen: this.isOpen }), !this.isOpen && (this.isOpen = !0, this.element.classList.add("ms--open"), this.dropdown.classList.add("ms__dropdown--visible"), R.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], R.debug(`[${this.instanceId}] Showing ${this.allOptions.length} initial options on open`)), this.renderDropdown(), this.positionDropdown(), this.hint && (this.hint.classList.add("ms__hint--visible"), this.positionHint()));
2195
2611
  }
2196
2612
  close() {
2197
- P.debug(`[${this.instanceId}] close() called`, { isOpen: this.isOpen }), this.isOpen && (this.isOpen = !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.filteredOptions = [...this.allOptions]), this.focusedIndex = -1, this.destroyAllOptionTooltips(), this.renderBadges(), this.dropdownCleanup && (this.dropdownCleanup(), this.dropdownCleanup = null), this.hintCleanup && (this.hintCleanup(), this.hintCleanup = null), this.dropdownPlacement = null, P.debug(`[${this.instanceId}] Dropdown closed`));
2613
+ R.debug(`[${this.instanceId}] close() called`, { isOpen: this.isOpen }), this.isOpen && (this.isOpen = !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.destroyAllOptionTooltips(), this.renderBadges(), this.dropdownCleanup && (this.dropdownCleanup(), this.dropdownCleanup = null), this.hintCleanup && (this.hintCleanup(), this.hintCleanup = null), this.dropdownPlacement = null, R.debug(`[${this.instanceId}] Dropdown closed`));
2198
2614
  }
2199
2615
  /**
2200
2616
  * Anchor a floating panel (dropdown or selected-items popover) below/above the input with
@@ -2205,24 +2621,24 @@ class xs {
2205
2621
  */
2206
2622
  anchorFloatingPanel(e, t) {
2207
2623
  const s = {
2208
- ...ot,
2209
- getOffsetParent: () => ys(this.input)
2624
+ ...dt,
2625
+ getOffsetParent: () => Es(this.input)
2210
2626
  };
2211
- return _e(this.input, e, () => {
2627
+ return Ce(this.input, e, () => {
2212
2628
  var l;
2213
2629
  e.style.width = `${this.input.offsetWidth}px`, this.options.dropdownMinWidth && (e.style.minWidth = this.options.dropdownMinWidth), t.applyMaxWidth && this.options.dropdownMaxWidth && (e.style.maxWidth = this.options.dropdownMaxWidth);
2214
- const i = ((l = t.isLocked) == null ? void 0 : l.call(t)) ?? !0, r = t.getPlacement(), n = i && r ? r : "bottom-start", a = [
2215
- ye(4),
2216
- ...i && r ? [] : [rt()],
2217
- we({ padding: 8 })
2630
+ const i = ((l = t.isLocked) == null ? void 0 : l.call(t)) ?? !0, r = t.getPlacement(), a = i && r ? r : "bottom-start", n = [
2631
+ Se(4),
2632
+ ...i && r ? [] : [mt()],
2633
+ Te({ padding: 8 })
2218
2634
  ];
2219
- ke(this.input, e, { placement: n, strategy: "fixed", middleware: a, platform: s }).then(({ x: h, y: c, placement: p }) => {
2635
+ Ie(this.input, e, { placement: a, strategy: "fixed", middleware: n, platform: s }).then(({ x: d, y: c, placement: m }) => {
2220
2636
  var u;
2221
- r || t.setPlacement(p), Object.assign(e.style, {
2637
+ r || t.setPlacement(m), Object.assign(e.style, {
2222
2638
  position: "fixed",
2223
- left: `${h}px`,
2639
+ left: `${d}px`,
2224
2640
  top: `${c}px`
2225
- }), this.verifyPanelLanded(e, h, c), (u = t.afterPosition) == null || u.call(t);
2641
+ }), this.verifyPanelLanded(e, d, c), (u = t.afterPosition) == null || u.call(t);
2226
2642
  });
2227
2643
  });
2228
2644
  }
@@ -2239,19 +2655,19 @@ class xs {
2239
2655
  */
2240
2656
  verifyPanelLanded(e, t, s) {
2241
2657
  if (this.positioningDriftWarned) return;
2242
- const i = e.getBoundingClientRect(), r = i.x - t, n = i.y - s;
2243
- if (Math.abs(r) < 1 && Math.abs(n) < 1) return;
2658
+ const i = e.getBoundingClientRect(), r = i.x - t, a = i.y - s;
2659
+ if (Math.abs(r) < 1 && Math.abs(a) < 1) return;
2244
2660
  this.positioningDriftWarned = !0;
2245
- const a = ws(this.input, r, n), l = a ? `<${a.tagName.toLowerCase()}${a.id ? "#" + a.id : ""}${typeof a.className == "string" && a.className ? "." + a.className.split(/\s+/).filter(Boolean).slice(0, 2).join(".") : ""}>` : "an ancestor element (could not auto-identify)", h = a ? ks(a) : "";
2661
+ const n = Vs(this.input, r, a), l = n ? `<${n.tagName.toLowerCase()}${n.id ? "#" + n.id : ""}${typeof n.className == "string" && n.className ? "." + n.className.split(/\s+/).filter(Boolean).slice(0, 2).join(".") : ""}>` : "an ancestor element (could not auto-identify)", d = n ? Ds(n) : "";
2246
2662
  console.warn(
2247
- `[@keenmate/web-multiselect] Dropdown panel rendered ${r.toFixed(0)}px / ${n.toFixed(0)}px away from where the library positioned it. Most likely culprit: ${l}` + (h ? ` (has ${h})` : "") + ".\nAn ancestor of <web-multiselect> establishes a fixed-positioning containing block that the library's heuristic doesn't recognize. Fix on your side: replace the property with `transform: translateZ(0)` on that ancestor, OR move the trigger out of that ancestor's subtree. If neither is acceptable, please file an issue at https://github.com/keenmate/web-multiselect/issues with the ancestor's computed CSS."
2663
+ `[@keenmate/web-multiselect] Dropdown panel rendered ${r.toFixed(0)}px / ${a.toFixed(0)}px away from where the library positioned it. Most likely culprit: ${l}` + (d ? ` (has ${d})` : "") + ".\nAn ancestor of <web-multiselect> establishes a fixed-positioning containing block that the library's heuristic doesn't recognize. Fix on your side: replace the property with `transform: translateZ(0)` on that ancestor, OR move the trigger out of that ancestor's subtree. If neither is acceptable, please file an issue at https://github.com/keenmate/web-multiselect/issues with the ancestor's computed CSS."
2248
2664
  );
2249
2665
  }
2250
2666
  positionDropdown() {
2251
2667
  this.dropdownCleanup = this.anchorFloatingPanel(this.dropdown, {
2252
2668
  getPlacement: () => this.dropdownPlacement,
2253
2669
  setPlacement: (e) => {
2254
- this.dropdownPlacement = e, P.debug(`[${this.instanceId}] Locked dropdown placement:`, e);
2670
+ this.dropdownPlacement = e, R.debug(`[${this.instanceId}] Locked dropdown placement:`, e);
2255
2671
  },
2256
2672
  isLocked: () => !!this.options.isPlacementLocked,
2257
2673
  applyMaxWidth: !0,
@@ -2261,18 +2677,18 @@ class xs {
2261
2677
  });
2262
2678
  }
2263
2679
  positionHint() {
2264
- this.hint && (this.hintCleanup && this.hintCleanup(), this.hintCleanup = _e(
2680
+ this.hint && (this.hintCleanup && this.hintCleanup(), this.hintCleanup = Ce(
2265
2681
  this.input,
2266
2682
  this.hint,
2267
2683
  () => {
2268
2684
  let e = "top-start";
2269
- this.dropdownPlacement && (this.dropdownPlacement.startsWith("bottom") ? e = this.dropdownPlacement.replace("bottom", "top") : this.dropdownPlacement.startsWith("top") && (e = this.dropdownPlacement.replace("top", "bottom"))), ke(this.input, this.hint, {
2685
+ this.dropdownPlacement && (this.dropdownPlacement.startsWith("bottom") ? e = this.dropdownPlacement.replace("bottom", "top") : this.dropdownPlacement.startsWith("top") && (e = this.dropdownPlacement.replace("top", "bottom"))), Ie(this.input, this.hint, {
2270
2686
  placement: e,
2271
2687
  strategy: "fixed",
2272
2688
  middleware: [
2273
- ye(4),
2689
+ Se(4),
2274
2690
  // Don't use flip() - we want hint to stay opposite of dropdown
2275
- we({ padding: 8 })
2691
+ Te({ padding: 8 })
2276
2692
  ]
2277
2693
  }).then(({ x: t, y: s }) => {
2278
2694
  Object.assign(this.hint.style, {
@@ -2292,7 +2708,7 @@ class xs {
2292
2708
  this.selectedValues.add(String(s));
2293
2709
  }), this.reconcileSelectedOptions(), this.renderBadges();
2294
2710
  } catch (t) {
2295
- x.error(`[${this.instanceId}] Failed to parse initial values:`, t);
2711
+ O.error(`[${this.instanceId}] Failed to parse initial values:`, t);
2296
2712
  }
2297
2713
  }
2298
2714
  /**
@@ -2314,13 +2730,13 @@ class xs {
2314
2730
  this.showSelectedPopover ? this.hideSelectedPopover() : this.showPopover();
2315
2731
  }
2316
2732
  showPopover() {
2317
- P.debug(`[${this.instanceId}] showPopover() called`), this.isOpen && this.close(), this.showSelectedPopover = !0, this.renderSelectedPopover(), this.selectedPopover.classList.add("ms__selected-popover--visible");
2733
+ R.debug(`[${this.instanceId}] showPopover() called`), this.isOpen && this.close(), this.showSelectedPopover = !0, this.renderSelectedPopover(), this.selectedPopover.classList.add("ms__selected-popover--visible");
2318
2734
  const e = this.options.virtualScrollThreshold ?? 100;
2319
2735
  this.selectedValues.size >= e && this.selectedPopover.classList.add("ms__selected-popover--virtual"), this.positionSelectedPopover();
2320
2736
  }
2321
2737
  hideSelectedPopover() {
2322
2738
  var e;
2323
- P.debug(`[${this.instanceId}] hideSelectedPopover() called`), this.showSelectedPopover = !1, this.selectedPopover.classList.remove("ms__selected-popover--visible"), this.selectedPopover.classList.remove("ms__selected-popover--virtual"), this.selectedPopoverPlacement = null, this.selectedPopoverVirtualScroll && (this.selectedPopoverVirtualScroll.destroy(), this.selectedPopoverVirtualScroll = null, this.selectedPopoverContainer = null), this.selectedPopoverCleanup && (this.selectedPopoverCleanup(), this.selectedPopoverCleanup = null);
2739
+ R.debug(`[${this.instanceId}] hideSelectedPopover() called`), this.showSelectedPopover = !1, this.selectedPopover.classList.remove("ms__selected-popover--visible"), this.selectedPopover.classList.remove("ms__selected-popover--virtual"), this.selectedPopoverPlacement = null, this.selectedPopoverVirtualScroll && (this.selectedPopoverVirtualScroll.destroy(), this.selectedPopoverVirtualScroll = null, this.selectedPopoverContainer = null), this.selectedPopoverCleanup && (this.selectedPopoverCleanup(), this.selectedPopoverCleanup = null);
2324
2740
  for (const t of Array.from(this.tooltips.keys()))
2325
2741
  t.startsWith("popover-") && ((e = this.tooltips.get(t)) == null || e.destroy(), this.tooltips.delete(t));
2326
2742
  }
@@ -2342,27 +2758,27 @@ class xs {
2342
2758
  }
2343
2759
  renderSelectedPopoverVirtual(e, t) {
2344
2760
  if (this.selectedPopoverVirtualScroll) {
2345
- const a = this.selectedPopover.querySelector(".ms__selected-popover-header span");
2346
- a && (a.textContent = `Selected Items (${t})`);
2761
+ const n = this.selectedPopover.querySelector(".ms__selected-popover-header span");
2762
+ n && (n.textContent = `Selected Items (${t})`);
2347
2763
  } else {
2348
- const a = this.options.badgeHeight ?? 36, l = `
2764
+ const n = this.options.badgeHeight ?? 36, l = `
2349
2765
  <div class="ms__selected-popover-header">
2350
2766
  <span>Selected Items (${t})</span>
2351
2767
  <button type="button" class="ms__selected-popover-close" aria-label="Close"></button>
2352
2768
  </div>
2353
- <div class="ms__selected-popover-body ms__selected-popover-body--virtual" style="height: 18rem; overflow-y: auto; position: relative; --ms-badge-height-virtual: ${a}px;"></div>
2769
+ <div class="ms__selected-popover-body ms__selected-popover-body--virtual" style="height: 18rem; overflow-y: auto; position: relative; --ms-badge-height-virtual: ${n}px;"></div>
2354
2770
  `;
2355
2771
  this.selectedPopover.innerHTML = l, this.selectedPopoverContainer = this.selectedPopover.querySelector(".ms__selected-popover-body");
2356
2772
  }
2357
2773
  if (!this.selectedPopoverContainer) return;
2358
- const r = (this.options.badgeHeight ?? 36) + 4, n = this.options.virtualScrollBuffer ?? 10;
2774
+ const r = (this.options.badgeHeight ?? 36) + 4, a = this.options.virtualScrollBuffer ?? 10;
2359
2775
  requestAnimationFrame(() => {
2360
- this.selectedPopoverContainer && (this.selectedPopoverVirtualScroll ? this.selectedPopoverVirtualScroll.setItems(e) : this.selectedPopoverVirtualScroll = new We({
2776
+ this.selectedPopoverContainer && (this.selectedPopoverVirtualScroll ? this.selectedPopoverVirtualScroll.setItems(e) : this.selectedPopoverVirtualScroll = new Ge({
2361
2777
  container: this.selectedPopoverContainer,
2362
2778
  itemHeight: r,
2363
2779
  items: e,
2364
- renderItem: (a) => this.renderBadgeHTML(a, { displayMode: this.options.badgesDisplayMode || "badges", isInPopover: !0 }),
2365
- bufferSize: n,
2780
+ renderItem: (n) => this.renderBadgeHTML(n, { displayMode: this.options.badgesDisplayMode || "badges", isInPopover: !0 }),
2781
+ bufferSize: a,
2366
2782
  onVisibleRangeChange: () => {
2367
2783
  this.attachBadgeTooltips(this.selectedPopoverContainer);
2368
2784
  }
@@ -2383,22 +2799,22 @@ class xs {
2383
2799
  let i;
2384
2800
  const r = t.isInPopover ? this.options.renderSelectedItemContentCallback : void 0;
2385
2801
  if (r) {
2386
- const h = r(e);
2387
- i = typeof h == "string" ? h : h.outerHTML;
2802
+ const d = r(e);
2803
+ i = typeof d == "string" ? d : d.outerHTML;
2388
2804
  } else if (this.options.renderBadgeContentCallback) {
2389
- const h = this.options.renderBadgeContentCallback(e, t);
2390
- i = typeof h == "string" ? h : h.outerHTML;
2805
+ const d = this.options.renderBadgeContentCallback(e, t);
2806
+ i = typeof d == "string" ? d : d.outerHTML;
2391
2807
  } else
2392
2808
  i = this.getItemBadgeDisplayValue(e);
2393
- const n = t.isInPopover ? this.options.getSelectedItemClassCallback || this.options.getBadgeClassCallback : this.options.getBadgeClassCallback;
2394
- let a = "ms__badge";
2395
- if (n) {
2396
- const h = n(e), c = Array.isArray(h) ? h : [h];
2397
- a += " " + c.filter((p) => p).join(" ");
2809
+ const a = t.isInPopover ? this.options.getSelectedItemClassCallback || this.options.getBadgeClassCallback : this.options.getBadgeClassCallback;
2810
+ let n = "ms__badge";
2811
+ if (a) {
2812
+ const d = a(e), c = Array.isArray(d) ? d : [d];
2813
+ n += " " + c.filter((m) => m).join(" ");
2398
2814
  }
2399
2815
  const l = this.getItemBadgeDisplayValue(e);
2400
2816
  return `
2401
- <div class="${a}">
2817
+ <div class="${n}">
2402
2818
  <span class="ms__badge-text">${i}</span>
2403
2819
  <button type="button" class="ms__badge-remove" data-value="${s}" aria-label="Remove ${l}"></button>
2404
2820
  </div>
@@ -2420,7 +2836,7 @@ class xs {
2420
2836
  this.selectedPopoverCleanup = this.anchorFloatingPanel(this.selectedPopover, {
2421
2837
  getPlacement: () => this.selectedPopoverPlacement,
2422
2838
  setPlacement: (e) => {
2423
- this.selectedPopoverPlacement = e, P.debug(`[${this.instanceId}] Locked popover placement:`, e);
2839
+ this.selectedPopoverPlacement = e, R.debug(`[${this.instanceId}] Locked popover placement:`, e);
2424
2840
  }
2425
2841
  });
2426
2842
  }
@@ -2471,13 +2887,15 @@ class xs {
2471
2887
  updateOptions(e) {
2472
2888
  const t = !!this.hint, s = "searchHint" in e ? !!e.searchHint : t;
2473
2889
  if (t !== s) return !1;
2474
- if (Object.assign(this.options, e), "options" in e && e.options !== void 0 && (this.allOptions = e.options, this.filteredOptions = this.searchTerm ? this.filteredOptions : [...this.allOptions], this.reconcileSelectedOptions()), this.element.classList.toggle(
2890
+ Object.assign(this.options, e);
2891
+ const i = "pathMember" in e || "getPathCallback" in e || "parentPathMember" in e || "levelMember" in e || "hasChildrenMember" in e || "treePathSeparator" in e || "isTreeEnabled" in e || "isSelectableMember" in e || "getIsSelectableCallback" in e;
2892
+ if ("options" in e && e.options !== void 0 ? (this.allOptions = e.options, this.reconcileSelectedOptions(), this.isTreeMode() ? this.buildTree() : this.filteredOptions = this.searchTerm ? this.filteredOptions : [...this.allOptions]) : i && (this.isTreeMode() ? this.buildTree() : this.filteredOptions = this.searchTerm ? this.filteredOptions : [...this.allOptions]), this.element.classList.toggle(
2475
2893
  "ms--no-checkboxes",
2476
2894
  !this.options.isCheckboxesShown || !this.options.isMultipleEnabled
2477
2895
  ), "badgesPosition" in e) {
2478
2896
  this.effectiveBadgesPosition = this.options.badgesPosition || "bottom", this.isRTL && (this.effectiveBadgesPosition === "left" ? this.effectiveBadgesPosition = "right" : this.effectiveBadgesPosition === "right" && (this.effectiveBadgesPosition = "left"));
2479
- const i = this.element.querySelector(".ms__wrapper");
2480
- i == null || i.classList.toggle(
2897
+ const r = this.element.querySelector(".ms__wrapper");
2898
+ r == null || r.classList.toggle(
2481
2899
  "ms__wrapper--inline",
2482
2900
  this.effectiveBadgesPosition === "left" || this.effectiveBadgesPosition === "right"
2483
2901
  );
@@ -2511,7 +2929,7 @@ class xs {
2511
2929
  spawnTooltip(e) {
2512
2930
  var r;
2513
2931
  (r = this.tooltips.get(e.id)) == null || r.destroy();
2514
- const t = this.element.getRootNode(), s = t instanceof ShadowRoot ? t : null, i = new _s({
2932
+ const t = this.element.getRootNode(), s = t instanceof ShadowRoot ? t : null, i = new Ts({
2515
2933
  trigger: e.trigger,
2516
2934
  container: this.options.container ?? s ?? document.body,
2517
2935
  content: e.content,
@@ -2542,22 +2960,22 @@ ${s}` : t;
2542
2960
  attachBadgeTooltips(e) {
2543
2961
  if (!this.options.isBadgeTooltipsEnabled) return;
2544
2962
  const t = !!e, s = e || this.badgesContainer, i = t ? "popover-" : "";
2545
- if (s.querySelectorAll(".ms__badge:not(.ms__badge--more)").forEach((n) => {
2546
- const a = n.querySelector(".ms__badge-remove");
2547
- if (!a) return;
2548
- const l = a.dataset.value, h = this.selectedOptions.get(l);
2549
- if (!h) return;
2550
- const c = `${i}${l}`, p = `${i}${l}-remove`, u = n.querySelector(".ms__badge-text");
2963
+ if (s.querySelectorAll(".ms__badge:not(.ms__badge--more)").forEach((a) => {
2964
+ const n = a.querySelector(".ms__badge-remove");
2965
+ if (!n) return;
2966
+ const l = n.dataset.value, d = this.selectedOptions.get(l);
2967
+ if (!d) return;
2968
+ const c = `${i}${l}`, m = `${i}${l}-remove`, u = a.querySelector(".ms__badge-text");
2551
2969
  u && this.spawnTooltip({
2552
2970
  id: c,
2553
2971
  trigger: u,
2554
- content: this.buildBadgeTooltipContent(h)
2972
+ content: this.buildBadgeTooltipContent(d)
2555
2973
  });
2556
- const m = this.getItemBadgeDisplayValue(h);
2974
+ const p = this.getItemBadgeDisplayValue(d);
2557
2975
  this.spawnTooltip({
2558
- id: p,
2559
- trigger: a,
2560
- content: this.buildRemoveButtonTooltipText(m, h),
2976
+ id: m,
2977
+ trigger: n,
2978
+ content: this.buildRemoveButtonTooltipText(p, d),
2561
2979
  // Keep parent badge tooltip from overlapping the remove-button tooltip.
2562
2980
  onBeforeShow: () => {
2563
2981
  var b;
@@ -2565,13 +2983,13 @@ ${s}` : t;
2565
2983
  }
2566
2984
  });
2567
2985
  }), !t) {
2568
- const n = this.badgesContainer.querySelector(".ms__badge--more"), a = n == null ? void 0 : n.querySelector(".ms__badge-remove");
2569
- if (a && a.dataset.action === "remove-hidden") {
2570
- const l = this.options.badgesMaxVisible || 3, h = this.selectedOptions.size - l;
2986
+ const a = this.badgesContainer.querySelector(".ms__badge--more"), n = a == null ? void 0 : a.querySelector(".ms__badge-remove");
2987
+ if (n && n.dataset.action === "remove-hidden") {
2988
+ const l = this.options.badgesMaxVisible || 3, d = this.selectedOptions.size - l;
2571
2989
  this.spawnTooltip({
2572
2990
  id: "more-badge-remove",
2573
- trigger: a,
2574
- content: this.buildRemoveButtonTooltipText(`${h} hidden items`)
2991
+ trigger: n,
2992
+ content: this.buildRemoveButtonTooltipText(`${d} hidden items`)
2575
2993
  });
2576
2994
  }
2577
2995
  }
@@ -2596,11 +3014,11 @@ ${s}` : t;
2596
3014
  if (i < 0) return;
2597
3015
  const r = this.filteredOptions[i];
2598
3016
  if (!r) return;
2599
- const n = this.buildOptionTooltipContent(r);
2600
- n && this.spawnTooltip({
3017
+ const a = this.buildOptionTooltipContent(r);
3018
+ a && this.spawnTooltip({
2601
3019
  id: `option-${i}`,
2602
3020
  trigger: s,
2603
- content: n,
3021
+ content: a,
2604
3022
  // Default to `top-start` (anchored to the row's start edge) so the tooltip doesn't
2605
3023
  // center on a full-width row. Falls through to the badge settings for delay/offset.
2606
3024
  placement: this.options.optionTooltipPlacement ?? "top-start",
@@ -2623,15 +3041,15 @@ ${s}` : t;
2623
3041
  }
2624
3042
  attachActionButtonTooltips() {
2625
3043
  this.dropdown.querySelectorAll(".ms__action-btn").forEach((t) => {
2626
- var h, c;
3044
+ var d, c;
2627
3045
  const s = t, i = s.dataset.action;
2628
3046
  if (!i) return;
2629
- const r = parseInt(s.dataset.buttonIndex || "-1"), n = r >= 0 ? (h = this.options.actionButtons) == null ? void 0 : h[r] : (c = this.options.actionButtons) == null ? void 0 : c.find((p) => p.action === i);
2630
- if (!n) return;
2631
- const a = n.getTooltipCallback ? n.getTooltipCallback(this) : n.tooltip;
3047
+ const r = parseInt(s.dataset.buttonIndex || "-1"), a = r >= 0 ? (d = this.options.actionButtons) == null ? void 0 : d[r] : (c = this.options.actionButtons) == null ? void 0 : c.find((m) => m.action === i);
2632
3048
  if (!a) return;
3049
+ const n = a.getTooltipCallback ? a.getTooltipCallback(this) : a.tooltip;
3050
+ if (!n) return;
2633
3051
  const l = `action-${r >= 0 ? r : i}`;
2634
- this.spawnTooltip({ id: l, trigger: s, content: a });
3052
+ this.spawnTooltip({ id: l, trigger: s, content: n });
2635
3053
  });
2636
3054
  }
2637
3055
  /**
@@ -2657,11 +3075,11 @@ ${s}` : t;
2657
3075
  // PUBLIC API
2658
3076
  // ========================================================================
2659
3077
  destroy() {
2660
- this.destroyAllTooltips(), this.searchDebounceTimer && (clearTimeout(this.searchDebounceTimer), this.searchDebounceTimer = void 0), this.abortInFlightSearch(), this.dropdownCleanup && this.dropdownCleanup(), this.hintCleanup && this.hintCleanup(), this.selectedPopoverCleanup && this.selectedPopoverCleanup(), this.documentClickHandler && (document.removeEventListener("click", this.documentClickHandler), this.documentClickHandler = null), this.documentKeydownHandler && (document.removeEventListener("keydown", this.documentKeydownHandler), this.documentKeydownHandler = 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"), oe.info(`[${this.instanceId}] Component destroyed`);
3078
+ this.destroyAllTooltips(), this.searchDebounceTimer && (clearTimeout(this.searchDebounceTimer), this.searchDebounceTimer = void 0), this.abortInFlightSearch(), this.dropdownCleanup && this.dropdownCleanup(), this.hintCleanup && this.hintCleanup(), this.selectedPopoverCleanup && this.selectedPopoverCleanup(), this.documentClickHandler && (document.removeEventListener("click", this.documentClickHandler), this.documentClickHandler = null), this.documentKeydownHandler && (document.removeEventListener("keydown", this.documentKeydownHandler), this.documentKeydownHandler = 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"), de.info(`[${this.instanceId}] Component destroyed`);
2661
3079
  }
2662
3080
  }
2663
- const Cs = `@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(#e5e7eb, #3a3a3a));--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-input-bg-disabled: var(--base-input-bg-disabled, rgba(107, 114, 128, .05));--ms-toggle-icon-color: var(--ms-text-color-3);--ms-toggle-icon-color-open: var(--ms-text-color-3);--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-input-bg));--ms-badge-bg-active: var(--ms-accent-color-light-hover);--ms-badge-text-bg-hover: var(--base-hover-bg, var(--ms-input-bg));--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: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-input-padding-right: calc(4 * var(--ms-rem));--ms-input-padding-h: calc(1.2 * 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: rgba(107, 114, 128, .05);--ms-input-size-xs-font: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-input-size-xs-padding-v: calc(.4 * var(--ms-rem));--ms-input-size-xs-padding-h: calc(.8 * var(--ms-rem));--ms-input-size-xs-height: calc(var(--base-input-size-xs-height, 3.1) * var(--ms-rem));--ms-input-size-sm-font: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-input-size-sm-padding-v: calc(.5 * var(--ms-rem));--ms-input-size-sm-padding-h: calc(1 * var(--ms-rem));--ms-input-size-sm-height: calc(var(--base-input-size-sm-height, 3.3) * var(--ms-rem));--ms-input-size-md-font: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-input-size-md-padding-v: calc(.8 * var(--ms-rem));--ms-input-size-md-padding-h: calc(1.2 * var(--ms-rem));--ms-input-size-md-height: calc(var(--base-input-size-md-height, 3.5) * var(--ms-rem));--ms-input-size-lg-font: calc(var(--base-font-size-base, 1.6) * var(--ms-rem));--ms-input-size-lg-padding-v: calc(1 * var(--ms-rem));--ms-input-size-lg-padding-h: calc(1.4 * var(--ms-rem));--ms-input-size-lg-height: calc(var(--base-input-size-lg-height, 3.8) * var(--ms-rem));--ms-input-size-xl-font: calc(var(--base-font-size-lg, 1.8) * var(--ms-rem));--ms-input-size-xl-padding-v: calc(1.2 * var(--ms-rem));--ms-input-size-xl-padding-h: calc(1.6 * var(--ms-rem));--ms-input-size-xl-height: calc(var(--base-input-size-xl-height, 4.1) * var(--ms-rem));--ms-toggle-right: calc(1.2 * var(--ms-rem));--ms-toggle-color: var(--ms-text-color-3);--ms-transform-center-y: translateY(-50%);--ms-transform-rotate-180: 180deg;--ms-counter-offset: calc(3.2 * var(--ms-rem));--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-box-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--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-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-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-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: calc(.2 * var(--ms-rem));--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: var(--ms-border);--ms-checkbox-border-radius: calc(.3 * var(--ms-rem));--ms-checkbox-checked-bg: var(--ms-accent-color);--ms-checkbox-checked-border: 1px 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-border);--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: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M6 6L18 18M18 6L6 18' stroke='black' stroke-width='2.5' stroke-linecap='round' fill='none'/></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(--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-z-index-popover: 10000;--ms-selected-popover-width: calc(32 * var(--ms-rem));--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: 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}.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{position:relative;display:flex;align-items:center}.ms__input{box-sizing:border-box;width:100%;font-family:inherit;height:var(--ms-input-height);padding:var(--ms-input-padding);padding-right:var(--ms-input-padding-right);font-size:var(--ms-input-font-size);border:var(--ms-input-border);border-radius:var(--ms-input-border-radius);background:var(--ms-input-bg);color:var(--ms-input-color);cursor:pointer;transition:border var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__input:hover:not(:focus):not(:disabled){border:var(--ms-input-border-hover)}.ms__input:focus{outline:none;border:var(--ms-input-border-focus)}.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__input.ms__input--xs{font-size:var(--ms-input-size-xs-font);padding:var(--ms-input-size-xs-padding-v) var(--ms-input-size-xs-padding-h);padding-right:calc(var(--ms-input-size-xs-padding-h) * 2.5);height:var(--ms-input-size-xs-height)}.ms__input.ms__input--sm{font-size:var(--ms-input-size-sm-font);padding:var(--ms-input-size-sm-padding-v) var(--ms-input-size-sm-padding-h);padding-right:calc(var(--ms-input-size-sm-padding-h) * 2.5);height:var(--ms-input-size-sm-height)}.ms__input.ms__input--lg{font-size:var(--ms-input-size-lg-font);padding:var(--ms-input-size-lg-padding-v) var(--ms-input-size-lg-padding-h);padding-right:calc(var(--ms-input-size-lg-padding-h) * 2.5);height:var(--ms-input-size-lg-height)}.ms__input.ms__input--xl{font-size:var(--ms-input-size-xl-font);padding:var(--ms-input-size-xl-padding-v) var(--ms-input-size-xl-padding-h);padding-right:calc(var(--ms-input-size-xl-padding-h) * 2.5);height:var(--ms-input-size-xl-height)}.ms__toggle{position:absolute;right:var(--ms-toggle-right);top:50%;transform:var(--ms-transform-center-y);pointer-events:none;color:var(--ms-toggle-icon-color);transition:transform var(--ms-transition-fast) var(--ms-easing-snappy)}.ms--open .ms__toggle{transform:var(--ms-transform-center-y) rotate(var(--ms-transform-rotate-180));color:var(--ms-toggle-icon-color-open)}.ms__counter{position:absolute;right:var(--ms-counter-offset);top:50%;transform:var(--ms-transform-center-y);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:var(--ms-transform-center-y) scale(var(--ms-transform-scale-hover))}.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)}.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;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);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-inner{flex:1;overflow-y:auto;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-y:visible}.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__selected-popover{display:none;position:fixed;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-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)}.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{opacity:var(--ms-disabled-input-opacity);cursor:not-allowed;background:var(--ms-input-bg-disabled)}.ms--disabled .ms__toggle{opacity:var(--ms-disabled-input-opacity)}.ms--no-checkboxes .ms__option{gap:0;padding-left:var(--ms-option-padding-h)}.ms--no-checkboxes .ms__option-content{padding-left:0}}@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-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-right:none;border-radius:var(--ms-badge-border-radius) 0 0 var(--ms-badge-border-radius);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-left:none;border-radius:0 var(--ms-badge-border-radius) var(--ms-badge-border-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-right: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-left: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-right: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{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);color:var(--ms-option-text-color);background:var(--ms-option-bg);cursor:pointer}.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);border-left:var(--ms-option-border-matched)}.ms__option--selected{background:var(--ms-option-bg-selected)}.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)}.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);border-left:var(--ms-option-border-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__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-right:var(--ms-checkbox-margin-right);margin-bottom:var(--ms-checkbox-margin-bottom);margin-left: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 2px 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: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)}.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))}.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)}.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))}.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__input-wrapper{direction:rtl}.ms--rtl .ms__input{text-align:right;padding-left:var(--ms-input-padding-right);padding-right:var(--ms-input-padding-h)}.ms--rtl .ms__toggle{left:var(--ms-toggle-right)!important;right:auto!important}.ms--rtl .ms__counter{left:var(--ms-counter-offset)!important;right:auto!important}.ms--rtl .ms__dropdown{direction:rtl;text-align:right}.ms--rtl .ms__option{flex-direction:row-reverse}.ms--rtl .ms__checkbox{margin-left:var(--ms-spacing-sm);margin-right:0}.ms--rtl .ms__option-content{text-align:right}.ms--rtl .ms__option-icon{margin-left:var(--ms-spacing-xs);margin-right:0}.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__badge{flex-direction:row-reverse}.ms--rtl .ms__badge-remove{border-radius:var(--ms-badge-border-radius) 0 0 var(--ms-badge-border-radius);border-left:var(--ms-badge-remove-border);border-right:none}.ms--rtl .ms__badge-text{border-radius:0 var(--ms-badge-border-radius) var(--ms-badge-border-radius) 0;border-right:var(--ms-badge-text-border);border-left:none}.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)}.ms--rtl .ms__counter-wrapper{flex-direction:row-reverse}.ms--rtl .ms__selected-popover{direction:rtl;text-align:right}.ms--rtl .ms__actions{direction:rtl}.ms--rtl .ms__group-label,.ms--rtl .ms__empty{text-align:right}.ms--rtl .ms__hint{direction:rtl;text-align:right}}@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}}`, Ss = typeof HTMLElement < "u" ? HTMLElement : class {
2664
- }, Ce = [
3081
+ const Bs = `@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(#e5e7eb, #3a3a3a));--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-input-bg-disabled: var(--base-input-bg-disabled, rgba(107, 114, 128, .05));--ms-toggle-icon-color: var(--ms-text-color-3);--ms-toggle-icon-color-open: var(--ms-text-color-3);--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-input-bg));--ms-badge-bg-active: var(--ms-accent-color-light-hover);--ms-badge-text-bg-hover: var(--base-hover-bg, var(--ms-input-bg));--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: calc(.8 * var(--ms-rem)) calc(1.2 * var(--ms-rem));--ms-input-padding-right: calc(4 * var(--ms-rem));--ms-input-padding-h: calc(1.2 * 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: rgba(107, 114, 128, .05);--ms-input-size-xs-font: calc(var(--base-font-size-xs, 1.2) * var(--ms-rem));--ms-input-size-xs-padding-v: calc(.4 * var(--ms-rem));--ms-input-size-xs-padding-h: calc(.8 * var(--ms-rem));--ms-input-size-xs-height: calc(var(--base-input-size-xs-height, 3.1) * var(--ms-rem));--ms-input-size-sm-font: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-input-size-sm-padding-v: calc(.5 * var(--ms-rem));--ms-input-size-sm-padding-h: calc(1 * var(--ms-rem));--ms-input-size-sm-height: calc(var(--base-input-size-sm-height, 3.3) * var(--ms-rem));--ms-input-size-md-font: calc(var(--base-font-size-sm, 1.4) * var(--ms-rem));--ms-input-size-md-padding-v: calc(.8 * var(--ms-rem));--ms-input-size-md-padding-h: calc(1.2 * var(--ms-rem));--ms-input-size-md-height: calc(var(--base-input-size-md-height, 3.5) * var(--ms-rem));--ms-input-size-lg-font: calc(var(--base-font-size-base, 1.6) * var(--ms-rem));--ms-input-size-lg-padding-v: calc(1 * var(--ms-rem));--ms-input-size-lg-padding-h: calc(1.4 * var(--ms-rem));--ms-input-size-lg-height: calc(var(--base-input-size-lg-height, 3.8) * var(--ms-rem));--ms-input-size-xl-font: calc(var(--base-font-size-lg, 1.8) * var(--ms-rem));--ms-input-size-xl-padding-v: calc(1.2 * var(--ms-rem));--ms-input-size-xl-padding-h: calc(1.6 * var(--ms-rem));--ms-input-size-xl-height: calc(var(--base-input-size-xl-height, 4.1) * var(--ms-rem));--ms-toggle-right: calc(1.2 * var(--ms-rem));--ms-toggle-color: var(--ms-text-color-3);--ms-transform-center-y: translateY(-50%);--ms-transform-rotate-180: 180deg;--ms-counter-offset: calc(3.2 * var(--ms-rem));--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-box-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--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-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: calc(.2 * var(--ms-rem));--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: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M6 6L18 18M18 6L6 18' stroke='black' stroke-width='2.5' stroke-linecap='round' fill='none'/></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(--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-z-index-popover: 10000;--ms-selected-popover-width: calc(32 * var(--ms-rem));--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: 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}.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{position:relative;display:flex;align-items:center}.ms__input{box-sizing:border-box;width:100%;font-family:inherit;height:var(--ms-input-height);padding:var(--ms-input-padding);padding-right:var(--ms-input-padding-right);font-size:var(--ms-input-font-size);border:var(--ms-input-border);border-radius:var(--ms-input-border-radius);background:var(--ms-input-bg);color:var(--ms-input-color);cursor:pointer;transition:border var(--ms-transition-fast) var(--ms-easing-snappy)}.ms__input:hover:not(:focus):not(:disabled){border:var(--ms-input-border-hover)}.ms__input:focus{outline:none;border:var(--ms-input-border-focus)}.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__input.ms__input--xs{font-size:var(--ms-input-size-xs-font);padding:var(--ms-input-size-xs-padding-v) var(--ms-input-size-xs-padding-h);padding-right:calc(var(--ms-input-size-xs-padding-h) * 2.5);height:var(--ms-input-size-xs-height)}.ms__input.ms__input--sm{font-size:var(--ms-input-size-sm-font);padding:var(--ms-input-size-sm-padding-v) var(--ms-input-size-sm-padding-h);padding-right:calc(var(--ms-input-size-sm-padding-h) * 2.5);height:var(--ms-input-size-sm-height)}.ms__input.ms__input--lg{font-size:var(--ms-input-size-lg-font);padding:var(--ms-input-size-lg-padding-v) var(--ms-input-size-lg-padding-h);padding-right:calc(var(--ms-input-size-lg-padding-h) * 2.5);height:var(--ms-input-size-lg-height)}.ms__input.ms__input--xl{font-size:var(--ms-input-size-xl-font);padding:var(--ms-input-size-xl-padding-v) var(--ms-input-size-xl-padding-h);padding-right:calc(var(--ms-input-size-xl-padding-h) * 2.5);height:var(--ms-input-size-xl-height)}.ms__toggle{position:absolute;right:var(--ms-toggle-right);top:50%;transform:var(--ms-transform-center-y);pointer-events:none;color:var(--ms-toggle-icon-color);transition:transform var(--ms-transition-fast) var(--ms-easing-snappy)}.ms--open .ms__toggle{transform:var(--ms-transform-center-y) rotate(var(--ms-transform-rotate-180));color:var(--ms-toggle-icon-color-open)}.ms__counter{position:absolute;right:var(--ms-counter-offset);top:50%;transform:var(--ms-transform-center-y);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:var(--ms-transform-center-y) scale(var(--ms-transform-scale-hover))}.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)}.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;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);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-inner{flex:1;overflow-y:auto;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-y:visible}.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__selected-popover{display:none;position:fixed;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-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)}.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{opacity:var(--ms-disabled-input-opacity);cursor:not-allowed;background:var(--ms-input-bg-disabled)}.ms--disabled .ms__toggle{opacity:var(--ms-disabled-input-opacity)}.ms--no-checkboxes .ms__option{gap:0;padding-left:var(--ms-option-padding-h)}.ms--no-checkboxes .ms__option-content{padding-left:0}}@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-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-right:none;border-radius:var(--ms-badge-border-radius) 0 0 var(--ms-badge-border-radius);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-left:none;border-radius:0 var(--ms-badge-border-radius) var(--ms-badge-border-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-right: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-left: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-right: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);min-height:var(--ms-option-min-height, auto);color:var(--ms-option-text-color);background:var(--ms-option-bg);cursor:pointer}.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);border-left:var(--ms-option-border-matched)}.ms__option--selected{background:var(--ms-option-bg-selected)}.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)}.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);border-left:var(--ms-option-border-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__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-right:var(--ms-checkbox-margin-right);margin-bottom:var(--ms-checkbox-margin-bottom);margin-left: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)}.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))}.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)}.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))}.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__input-wrapper{direction:rtl}.ms--rtl .ms__input{text-align:right;padding-left:var(--ms-input-padding-right);padding-right:var(--ms-input-padding-h)}.ms--rtl .ms__toggle{left:var(--ms-toggle-right)!important;right:auto!important}.ms--rtl .ms__counter{left:var(--ms-counter-offset)!important;right:auto!important}.ms--rtl .ms__dropdown{direction:rtl;text-align:right}.ms--rtl .ms__option{flex-direction:row-reverse}.ms--rtl .ms__checkbox{margin-left:var(--ms-spacing-sm);margin-right:0}.ms--rtl .ms__option-content{text-align:right}.ms--rtl .ms__option-icon{margin-left:var(--ms-spacing-xs);margin-right:0}.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__badge{flex-direction:row-reverse}.ms--rtl .ms__badge-remove{border-radius:var(--ms-badge-border-radius) 0 0 var(--ms-badge-border-radius);border-left:var(--ms-badge-remove-border);border-right:none}.ms--rtl .ms__badge-text{border-radius:0 var(--ms-badge-border-radius) var(--ms-badge-border-radius) 0;border-right:var(--ms-badge-text-border);border-left:none}.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)}.ms--rtl .ms__counter-wrapper{flex-direction:row-reverse}.ms--rtl .ms__selected-popover{direction:rtl;text-align:right}.ms--rtl .ms__actions{direction:rtl}.ms--rtl .ms__group-label,.ms--rtl .ms__empty{text-align:right}.ms--rtl .ms__hint{direction:rtl;text-align:right}}@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}}`, $s = typeof HTMLElement < "u" ? HTMLElement : class {
3082
+ }, Oe = [
2665
3083
  // Strings
2666
3084
  { attr: "search-hint", key: "searchHint", parser: "string-or-undefined" },
2667
3085
  { attr: "search-placeholder", key: "searchPlaceholder", parser: "string", default: "Search..." },
@@ -2680,8 +3098,30 @@ const Cs = `@layer variables,component,overrides;@layer variables{:host{display:
2680
3098
  { attr: "search-value-member", key: "searchValueMember", parser: "string-or-undefined" },
2681
3099
  { attr: "icon-member", key: "iconMember", parser: "string-or-undefined" },
2682
3100
  { attr: "subtitle-member", key: "subtitleMember", parser: "string-or-undefined" },
3101
+ { attr: "full-title-member", key: "fullTitleMember", parser: "string-or-undefined" },
2683
3102
  { attr: "group-member", key: "groupMember", parser: "string-or-undefined" },
2684
3103
  { attr: "disabled-member", key: "disabledMember", parser: "string-or-undefined" },
3104
+ // Tree of options (presence of path-member / getPathCallback auto-enables tree mode)
3105
+ { attr: "path-member", key: "pathMember", parser: "string-or-undefined" },
3106
+ { attr: "parent-path-member", key: "parentPathMember", parser: "string-or-undefined" },
3107
+ { attr: "level-member", key: "levelMember", parser: "string-or-undefined" },
3108
+ { attr: "has-children-member", key: "hasChildrenMember", parser: "string-or-undefined" },
3109
+ { attr: "is-selectable-member", key: "isSelectableMember", parser: "string-or-undefined" },
3110
+ { attr: "tree-path-separator", key: "treePathSeparator", parser: "string", default: "." },
3111
+ {
3112
+ attr: "checkbox-mode",
3113
+ key: "checkboxMode",
3114
+ parser: "enum",
3115
+ enumValues: ["independent", "cascade"],
3116
+ default: "independent"
3117
+ },
3118
+ {
3119
+ attr: "cascade-select-policy",
3120
+ key: "cascadeSelectPolicy",
3121
+ parser: "enum",
3122
+ enumValues: ["rolled-up", "leaves", "all"],
3123
+ default: "rolled-up"
3124
+ },
2685
3125
  // Enums
2686
3126
  {
2687
3127
  attr: "badges-display-mode",
@@ -2793,11 +3233,12 @@ const Cs = `@layer variables,component,overrides;@layer variables{:host{display:
2793
3233
  { attr: "close-on-select", key: "isCloseOnSelect", parser: "bool-default-false" },
2794
3234
  { attr: "allow-add-new", key: "isAddNewAllowed", parser: "bool-default-false" },
2795
3235
  { attr: "show-counter", key: "isCounterShown", parser: "bool-default-false" },
3236
+ { attr: "show-badge-full-title", key: "isBadgeFullTitleShown", parser: "bool-default-false" },
2796
3237
  { attr: "enable-virtual-scroll", key: "isVirtualScrollEnabled", parser: "bool-default-false" },
2797
3238
  { attr: "enable-badge-tooltips", key: "isBadgeTooltipsEnabled", parser: "bool-default-false" },
2798
3239
  { attr: "enable-option-tooltips", key: "isOptionTooltipsEnabled", parser: "bool-default-false" },
2799
3240
  { attr: "option-tooltip-follow-cursor", key: "isOptionTooltipFollowCursor", parser: "bool-default-false" }
2800
- ], Ts = new Map(Ce.map((o) => [o.attr, o])), je = [
3241
+ ], Rs = new Map(Oe.map((o) => [o.attr, o])), Je = [
2801
3242
  { key: "valueMember", field: "_valueMember" },
2802
3243
  { key: "displayValueMember", field: "_displayValueMember" },
2803
3244
  { key: "searchValueMember", field: "_searchValueMember" },
@@ -2805,7 +3246,7 @@ const Cs = `@layer variables,component,overrides;@layer variables{:host{display:
2805
3246
  { key: "subtitleMember", field: "_subtitleMember" },
2806
3247
  { key: "groupMember", field: "_groupMember" },
2807
3248
  { key: "disabledMember", field: "_disabledMember" }
2808
- ], Os = [
3249
+ ], Fs = [
2809
3250
  { key: "valueMember", member: "value" },
2810
3251
  { key: "displayValueMember", member: "label" },
2811
3252
  { key: "groupMember", member: "group" },
@@ -2813,7 +3254,7 @@ const Cs = `@layer variables,component,overrides;@layer variables{:host{display:
2813
3254
  { key: "subtitleMember", member: "subtitle" },
2814
3255
  { key: "disabledMember", member: "disabled" }
2815
3256
  ];
2816
- function Ue(o, e) {
3257
+ function Ze(o, e) {
2817
3258
  if (e === null || e === "")
2818
3259
  switch (o.parser) {
2819
3260
  case "bool-default-true":
@@ -2839,83 +3280,88 @@ function Ue(o, e) {
2839
3280
  return e === "true";
2840
3281
  }
2841
3282
  }
2842
- const Se = /* @__PURE__ */ new Set();
2843
- function ct() {
2844
- return Array.from(Se);
3283
+ const Ae = /* @__PURE__ */ new Set();
3284
+ function gt() {
3285
+ return Array.from(Ae);
2845
3286
  }
2846
- class Me extends Ss {
3287
+ class ze extends $s {
2847
3288
  constructor() {
2848
3289
  super();
2849
- d(this, "picker");
2850
- d(this, "containerElement");
2851
- d(this, "shadow");
2852
- d(this, "internals");
3290
+ h(this, "picker");
3291
+ h(this, "containerElement");
3292
+ h(this, "shadow");
3293
+ h(this, "internals");
2853
3294
  // Properties for complex data (not attributes)
2854
- d(this, "_options");
2855
- d(this, "_hasDeclarativeOptions", !1);
3295
+ h(this, "_options");
3296
+ h(this, "_hasDeclarativeOptions", !1);
2856
3297
  // Member/Callback properties
2857
- d(this, "_valueMember");
2858
- d(this, "_getValueCallback");
2859
- d(this, "_displayValueMember");
2860
- d(this, "_getDisplayValueCallback");
2861
- d(this, "_getBadgeDisplayCallback");
2862
- d(this, "_getBadgeClassCallback");
2863
- d(this, "_customStylesCallback");
2864
- d(this, "_searchValueMember");
2865
- d(this, "_getSearchValueCallback");
2866
- d(this, "_iconMember");
2867
- d(this, "_getIconCallback");
2868
- d(this, "_subtitleMember");
2869
- d(this, "_getSubtitleCallback");
2870
- d(this, "_groupMember");
2871
- d(this, "_getGroupCallback");
2872
- d(this, "_renderGroupLabelContentCallback");
2873
- d(this, "_disabledMember");
2874
- d(this, "_getDisabledCallback");
3298
+ h(this, "_valueMember");
3299
+ h(this, "_getValueCallback");
3300
+ h(this, "_displayValueMember");
3301
+ h(this, "_getDisplayValueCallback");
3302
+ h(this, "_getBadgeDisplayCallback");
3303
+ h(this, "_getBadgeClassCallback");
3304
+ h(this, "_customStylesCallback");
3305
+ h(this, "_searchValueMember");
3306
+ h(this, "_getSearchValueCallback");
3307
+ h(this, "_iconMember");
3308
+ h(this, "_getIconCallback");
3309
+ h(this, "_subtitleMember");
3310
+ h(this, "_getSubtitleCallback");
3311
+ h(this, "_getFullTitleCallback");
3312
+ h(this, "_groupMember");
3313
+ h(this, "_getGroupCallback");
3314
+ h(this, "_renderGroupLabelContentCallback");
3315
+ h(this, "_disabledMember");
3316
+ h(this, "_getDisabledCallback");
3317
+ // Tree of options
3318
+ h(this, "_getPathCallback");
3319
+ h(this, "_isTreeEnabled");
3320
+ h(this, "_getIsSelectableCallback");
2875
3321
  // Value formatting callbacks
2876
- d(this, "_getValueFormatCallback");
3322
+ h(this, "_getValueFormatCallback");
2877
3323
  // Tooltip callbacks
2878
- d(this, "_getBadgeTooltipCallback");
2879
- d(this, "_getOptionTooltipCallback");
2880
- d(this, "_getRemoveButtonTooltipCallback");
3324
+ h(this, "_getBadgeTooltipCallback");
3325
+ h(this, "_getOptionTooltipCallback");
3326
+ h(this, "_getRemoveButtonTooltipCallback");
2881
3327
  // Custom rendering callbacks
2882
- d(this, "_renderOptionContentCallback");
2883
- d(this, "_renderBadgeContentCallback");
2884
- d(this, "_renderSelectedItemContentCallback");
2885
- d(this, "_getSelectedItemClassCallback");
2886
- d(this, "_renderSelectedContentCallback");
3328
+ h(this, "_renderOptionContentCallback");
3329
+ h(this, "_renderBadgeContentCallback");
3330
+ h(this, "_renderSelectedItemContentCallback");
3331
+ h(this, "_getSelectedItemClassCallback");
3332
+ h(this, "_renderSelectedContentCallback");
2887
3333
  // Count badge callback
2888
- d(this, "_getCounterCallback");
3334
+ h(this, "_getCounterCallback");
2889
3335
  // Action buttons
2890
- d(this, "_actionButtons");
3336
+ h(this, "_actionButtons");
2891
3337
  // Batch-update state (setAttributes): collects per-attribute changes so a group of
2892
3338
  // attribute writes applies as a single in-place update instead of one re-render each.
2893
- d(this, "_batchDepth", 0);
2894
- d(this, "_batchPartial", {});
2895
- d(this, "_batchNeedsReinit", !1);
3339
+ h(this, "_batchDepth", 0);
3340
+ h(this, "_batchPartial", {});
3341
+ h(this, "_batchNeedsReinit", !1);
2896
3342
  // Event callbacks
2897
- d(this, "_beforeSearchCallback");
2898
- d(this, "_beforeSelectCallback");
2899
- d(this, "_beforeDeselectCallback");
2900
- d(this, "_searchCallback");
2901
- d(this, "_addNewCallback");
2902
- d(this, "_onSelect");
2903
- d(this, "_onDeselect");
2904
- d(this, "_onChange");
2905
- d(this, "_declarativeSelectedValues");
3343
+ h(this, "_beforeSearchCallback");
3344
+ h(this, "_beforeSelectCallback");
3345
+ h(this, "_beforeDeselectCallback");
3346
+ h(this, "_searchCallback");
3347
+ h(this, "_addNewCallback");
3348
+ h(this, "_onSelect");
3349
+ h(this, "_onDeselect");
3350
+ h(this, "_onChange");
3351
+ h(this, "_declarativeSelectedValues");
2906
3352
  if (this.shadow = this.attachShadow({ mode: "open" }), typeof this.attachInternals == "function")
2907
3353
  try {
2908
3354
  this.internals = this.attachInternals();
2909
3355
  } catch {
2910
3356
  }
2911
3357
  const t = document.createElement("style");
2912
- t.textContent = Cs, this.shadow.appendChild(t), requestAnimationFrame(() => {
3358
+ t.textContent = Bs, this.shadow.appendChild(t), requestAnimationFrame(() => {
2913
3359
  this.setAttribute("data-ready", "");
2914
3360
  });
2915
3361
  }
2916
3362
  static get observedAttributes() {
2917
3363
  return [
2918
- ...Ce.map((t) => t.attr),
3364
+ ...Oe.map((t) => t.attr),
2919
3365
  // Out-of-table attributes (handled by special-case logic in attributeChangedCallback)
2920
3366
  "initial-values",
2921
3367
  "show-debug-info"
@@ -2933,29 +3379,29 @@ class Me extends Ss {
2933
3379
  (t = this.picker) == null || t.clearAll();
2934
3380
  }
2935
3381
  connectedCallback() {
2936
- Se.add(this), this.render();
3382
+ Ae.add(this), this.render();
2937
3383
  const t = this.parseDeclarativeOptions();
2938
- t && (this._options && this._options.length > 0 && x.warn("[MultiSelectElement] Both declarative <option> elements and programmatic .options detected. Using declarative options."), this._options = t, this._hasDeclarativeOptions = !0), this.initializePicker();
3384
+ t && (this._options && this._options.length > 0 && O.warn("[MultiSelectElement] Both declarative <option> elements and programmatic .options detected. Using declarative options."), this._options = t, this._hasDeclarativeOptions = !0), this.initializePicker();
2939
3385
  }
2940
3386
  disconnectedCallback() {
2941
- Se.delete(this), this.picker && this.picker.destroy();
3387
+ Ae.delete(this), this.picker && this.picker.destroy();
2942
3388
  }
2943
3389
  attributeChangedCallback(t, s, i) {
2944
- var n;
3390
+ var a;
2945
3391
  if (s === i || !this.picker || t === "initial-values") return;
2946
3392
  if (t === "show-debug-info") {
2947
- const a = this.shadow.querySelector(".ms__debug-info");
2948
- a && a.remove(), i === "true" && this.renderDebugInfo();
3393
+ const n = this.shadow.querySelector(".ms__debug-info");
3394
+ n && n.remove(), i === "true" && this.renderDebugInfo();
2949
3395
  return;
2950
3396
  }
2951
- const r = Ts.get(t);
3397
+ const r = Rs.get(t);
2952
3398
  if (r) {
2953
- const a = Ue(r, i), l = (n = je.find((u) => u.key === r.key)) == null ? void 0 : n.field, h = a === void 0 && l ? this[l] : a;
3399
+ const n = Ze(r, i), l = (a = Je.find((u) => u.key === r.key)) == null ? void 0 : a.field, d = n === void 0 && l ? this[l] : n;
2954
3400
  if (this._batchDepth > 0) {
2955
- this._batchPartial[r.key] = h;
3401
+ this._batchPartial[r.key] = d;
2956
3402
  return;
2957
3403
  }
2958
- const c = { [r.key]: h };
3404
+ const c = { [r.key]: d };
2959
3405
  if (this.picker.updateOptions(c)) return;
2960
3406
  }
2961
3407
  if (this._batchDepth > 0) {
@@ -2980,8 +3426,8 @@ class Me extends Ss {
2980
3426
  setAttributes(t) {
2981
3427
  this._batchDepth++;
2982
3428
  try {
2983
- for (const [r, n] of Object.entries(t))
2984
- n == null || n === !1 ? this.removeAttribute(r) : this.setAttribute(r, n === !0 ? "" : String(n));
3429
+ for (const [r, a] of Object.entries(t))
3430
+ a == null || a === !1 ? this.removeAttribute(r) : this.setAttribute(r, a === !0 ? "" : String(a));
2985
3431
  } finally {
2986
3432
  this._batchDepth--;
2987
3433
  }
@@ -3005,23 +3451,23 @@ class Me extends Ss {
3005
3451
  s.className = "ms__debug-info";
3006
3452
  const i = document.createElement("details"), r = document.createElement("summary");
3007
3453
  r.textContent = "Debug Info";
3008
- const n = document.createElement("div");
3009
- n.className = "ms__debug-stats", i.appendChild(r), i.appendChild(n), s.appendChild(i), this.shadow.appendChild(s), this.updateDebugInfo();
3454
+ const a = document.createElement("div");
3455
+ a.className = "ms__debug-stats", i.appendChild(r), i.appendChild(a), s.appendChild(i), this.shadow.appendChild(s), this.updateDebugInfo();
3010
3456
  }
3011
3457
  updateDebugInfo() {
3012
- var m, b;
3458
+ var p, b;
3013
3459
  const t = this.shadow.querySelector(".ms__debug-stats");
3014
3460
  if (!t || !this.picker) return;
3015
- const s = "1.12.0-rc05", i = ct().length, n = this.picker.getSelected().length, a = ((m = this._options) == null ? void 0 : m.length) || 0, l = this.picker, h = l.isOpen || !1, c = l.searchTerm || "", p = l.isLoading || !1, u = ((b = l.filteredOptions) == null ? void 0 : b.length) || 0;
3461
+ const s = "1.12.0-rc06", i = gt().length, a = this.picker.getSelected().length, n = ((p = this._options) == null ? void 0 : p.length) || 0, l = this.picker, d = l.isOpen || !1, c = l.searchTerm || "", m = l.isLoading || !1, u = ((b = l.filteredOptions) == null ? void 0 : b.length) || 0;
3016
3462
  t.innerHTML = `
3017
3463
  <span>Version: ${s}</span>
3018
3464
  <span>Total Instances: ${i}</span>
3019
- <span>Options: ${a}</span>
3465
+ <span>Options: ${n}</span>
3020
3466
  <span>Filtered: ${u}</span>
3021
- <span>Selected: ${n}</span>
3022
- <span>Dropdown: ${h ? "Open" : "Closed"}</span>
3467
+ <span>Selected: ${a}</span>
3468
+ <span>Dropdown: ${d ? "Open" : "Closed"}</span>
3023
3469
  <span>Search: ${c || "none"}</span>
3024
- <span>Loading: ${p ? "Yes" : "No"}</span>
3470
+ <span>Loading: ${m ? "Yes" : "No"}</span>
3025
3471
  `, setTimeout(() => {
3026
3472
  this.getAttribute("show-debug-info") === "true" && this.updateDebugInfo();
3027
3473
  }, 500);
@@ -3031,38 +3477,38 @@ class Me extends Ss {
3031
3477
  * Returns array of options in the format expected by the picker
3032
3478
  */
3033
3479
  parseDeclarativeOptions() {
3034
- var r, n, a, l;
3480
+ var r, a, n, l;
3035
3481
  const t = [], s = Array.from(this.children);
3036
3482
  if (s.length === 0)
3037
3483
  return null;
3038
3484
  let i = !1;
3039
- for (const h of s)
3040
- if (h.tagName === "OPTION") {
3041
- const c = h, p = {
3485
+ for (const d of s)
3486
+ if (d.tagName === "OPTION") {
3487
+ const c = d, m = {
3042
3488
  value: c.value || ((r = c.textContent) == null ? void 0 : r.trim()) || "",
3043
- label: ((n = c.textContent) == null ? void 0 : n.trim()) || c.value || ""
3489
+ label: ((a = c.textContent) == null ? void 0 : a.trim()) || c.value || ""
3044
3490
  };
3045
- c.hasAttribute("selected") && (this._declarativeSelectedValues || (this._declarativeSelectedValues = []), this._declarativeSelectedValues.push(p.value)), c.hasAttribute("disabled") && (p.disabled = !0), c.hasAttribute("data-icon") && (p.icon = c.getAttribute("data-icon")), c.hasAttribute("data-subtitle") && (p.subtitle = c.getAttribute("data-subtitle")), t.push(p), i = !0;
3046
- } else if (h.tagName === "OPTGROUP") {
3047
- const c = h, p = c.label || c.getAttribute("label") || "Group", u = Array.from(c.querySelectorAll("option"));
3048
- for (const m of u) {
3491
+ c.hasAttribute("selected") && (this._declarativeSelectedValues || (this._declarativeSelectedValues = []), this._declarativeSelectedValues.push(m.value)), c.hasAttribute("disabled") && (m.disabled = !0), c.hasAttribute("data-icon") && (m.icon = c.getAttribute("data-icon")), c.hasAttribute("data-subtitle") && (m.subtitle = c.getAttribute("data-subtitle")), t.push(m), i = !0;
3492
+ } else if (d.tagName === "OPTGROUP") {
3493
+ const c = d, m = c.label || c.getAttribute("label") || "Group", u = Array.from(c.querySelectorAll("option"));
3494
+ for (const p of u) {
3049
3495
  const b = {
3050
- value: m.value || ((a = m.textContent) == null ? void 0 : a.trim()) || "",
3051
- label: ((l = m.textContent) == null ? void 0 : l.trim()) || m.value || "",
3052
- group: p
3496
+ value: p.value || ((n = p.textContent) == null ? void 0 : n.trim()) || "",
3497
+ label: ((l = p.textContent) == null ? void 0 : l.trim()) || p.value || "",
3498
+ group: m
3053
3499
  };
3054
- m.hasAttribute("selected") && (this._declarativeSelectedValues || (this._declarativeSelectedValues = []), this._declarativeSelectedValues.push(b.value)), m.hasAttribute("disabled") && (b.disabled = !0), m.hasAttribute("data-icon") && (b.icon = m.getAttribute("data-icon")), m.hasAttribute("data-subtitle") && (b.subtitle = m.getAttribute("data-subtitle")), t.push(b), i = !0;
3500
+ p.hasAttribute("selected") && (this._declarativeSelectedValues || (this._declarativeSelectedValues = []), this._declarativeSelectedValues.push(b.value)), p.hasAttribute("disabled") && (b.disabled = !0), p.hasAttribute("data-icon") && (b.icon = p.getAttribute("data-icon")), p.hasAttribute("data-subtitle") && (b.subtitle = p.getAttribute("data-subtitle")), t.push(b), i = !0;
3055
3501
  }
3056
3502
  }
3057
- return i ? (x.debug(`[MultiSelectElement] Parsed ${t.length} declarative options from Light DOM`), s.forEach((h) => {
3058
- (h.tagName === "OPTION" || h.tagName === "OPTGROUP") && h.remove();
3503
+ return i ? (O.debug(`[MultiSelectElement] Parsed ${t.length} declarative options from Light DOM`), s.forEach((d) => {
3504
+ (d.tagName === "OPTION" || d.tagName === "OPTGROUP") && d.remove();
3059
3505
  }), t) : null;
3060
3506
  }
3061
3507
  /** Parse all observed attributes via ATTRIBUTE_TABLE into a partial config object. */
3062
3508
  parseAttributesFromTable() {
3063
3509
  const t = {};
3064
- for (const s of Ce) {
3065
- const i = Ue(s, this.getAttribute(s.attr));
3510
+ for (const s of Oe) {
3511
+ const i = Ze(s, this.getAttribute(s.attr));
3066
3512
  i !== void 0 && (t[s.key] = i);
3067
3513
  }
3068
3514
  return t;
@@ -3074,26 +3520,26 @@ class Me extends Ss {
3074
3520
  if (s && this._options === void 0)
3075
3521
  try {
3076
3522
  t = JSON.parse(s);
3077
- } catch (n) {
3078
- x.error("[MultiSelectElement] Failed to parse data-options:", n);
3523
+ } catch (a) {
3524
+ O.error("[MultiSelectElement] Failed to parse data-options:", a);
3079
3525
  }
3080
3526
  let i;
3081
3527
  if (this._declarativeSelectedValues && this._declarativeSelectedValues.length > 0)
3082
- i = this._declarativeSelectedValues, x.debug(`[MultiSelectElement] Using ${i.length} declaratively selected values`);
3528
+ i = this._declarativeSelectedValues, O.debug(`[MultiSelectElement] Using ${i.length} declaratively selected values`);
3083
3529
  else {
3084
- const n = this.getAttribute("initial-values");
3085
- if (n)
3530
+ const a = this.getAttribute("initial-values");
3531
+ if (a)
3086
3532
  try {
3087
- i = JSON.parse(n);
3088
- } catch (a) {
3089
- x.error("[MultiSelectElement] Failed to parse initial-values:", a);
3533
+ i = JSON.parse(a);
3534
+ } catch (n) {
3535
+ O.error("[MultiSelectElement] Failed to parse initial-values:", n);
3090
3536
  }
3091
3537
  }
3092
3538
  const r = this.parseAttributesFromTable();
3093
- for (const { key: n, field: a } of je)
3094
- r[n] === void 0 && (r[n] = this[a]);
3539
+ for (const { key: a, field: n } of Je)
3540
+ r[a] === void 0 && (r[a] = this[n]);
3095
3541
  if (this._hasDeclarativeOptions) {
3096
- const n = {
3542
+ const a = {
3097
3543
  valueMember: this._getValueCallback,
3098
3544
  displayValueMember: this._getDisplayValueCallback,
3099
3545
  groupMember: this._getGroupCallback,
@@ -3101,8 +3547,8 @@ class Me extends Ss {
3101
3547
  subtitleMember: this._getSubtitleCallback,
3102
3548
  disabledMember: this._getDisabledCallback
3103
3549
  };
3104
- for (const { key: a, member: l } of Os)
3105
- r[a] === void 0 && !n[a] && (r[a] = l);
3550
+ for (const { key: n, member: l } of Fs)
3551
+ r[n] === void 0 && !a[n] && (r[n] = l);
3106
3552
  }
3107
3553
  if (Object.assign(r, {
3108
3554
  actionButtons: this._actionButtons,
@@ -3114,7 +3560,11 @@ class Me extends Ss {
3114
3560
  getSearchValueCallback: this._getSearchValueCallback,
3115
3561
  getIconCallback: this._getIconCallback,
3116
3562
  getSubtitleCallback: this._getSubtitleCallback,
3563
+ getFullTitleCallback: this._getFullTitleCallback,
3117
3564
  getGroupCallback: this._getGroupCallback,
3565
+ getPathCallback: this._getPathCallback,
3566
+ isTreeEnabled: this._isTreeEnabled,
3567
+ getIsSelectableCallback: this._getIsSelectableCallback,
3118
3568
  renderGroupLabelContentCallback: this._renderGroupLabelContentCallback,
3119
3569
  getDisabledCallback: this._getDisabledCallback,
3120
3570
  renderOptionContentCallback: this._renderOptionContentCallback,
@@ -3126,43 +3576,43 @@ class Me extends Ss {
3126
3576
  getBadgeTooltipCallback: this._getBadgeTooltipCallback,
3127
3577
  getOptionTooltipCallback: this._getOptionTooltipCallback,
3128
3578
  getRemoveButtonTooltipCallback: this._getRemoveButtonTooltipCallback,
3129
- getCounterCallback: this._getCounterCallback || ((n, a) => a !== void 0 ? `+${a} more` : `${n} selected`),
3579
+ getCounterCallback: this._getCounterCallback || ((a, n) => n !== void 0 ? `+${n} more` : `${a} selected`),
3130
3580
  options: this._options ?? t,
3131
3581
  beforeSearchCallback: this._beforeSearchCallback,
3132
3582
  beforeSelectCallback: this._beforeSelectCallback,
3133
3583
  beforeDeselectCallback: this._beforeDeselectCallback,
3134
3584
  searchCallback: this._searchCallback,
3135
3585
  addNewCallback: this._addNewCallback,
3136
- onSelect: (n) => {
3137
- var a;
3138
- this._onSelect && this._onSelect(n), this.dispatchEvent(new CustomEvent("select", {
3586
+ onSelect: (a) => {
3587
+ var n;
3588
+ this._onSelect && this._onSelect(a), this.dispatchEvent(new CustomEvent("select", {
3139
3589
  bubbles: !0,
3140
3590
  composed: !0,
3141
3591
  detail: {
3142
- option: n,
3143
- selectedOptions: (a = this.picker) == null ? void 0 : a.getSelected(),
3592
+ option: a,
3593
+ selectedOptions: (n = this.picker) == null ? void 0 : n.getSelected(),
3144
3594
  selectedValues: this.collectSelectedValues()
3145
3595
  }
3146
3596
  }));
3147
3597
  },
3148
- onDeselect: (n) => {
3149
- var a;
3150
- this._onDeselect && this._onDeselect(n), this.dispatchEvent(new CustomEvent("deselect", {
3598
+ onDeselect: (a) => {
3599
+ var n;
3600
+ this._onDeselect && this._onDeselect(a), this.dispatchEvent(new CustomEvent("deselect", {
3151
3601
  bubbles: !0,
3152
3602
  composed: !0,
3153
3603
  detail: {
3154
- option: n,
3155
- selectedOptions: (a = this.picker) == null ? void 0 : a.getSelected(),
3604
+ option: a,
3605
+ selectedOptions: (n = this.picker) == null ? void 0 : n.getSelected(),
3156
3606
  selectedValues: this.collectSelectedValues()
3157
3607
  }
3158
3608
  }));
3159
3609
  },
3160
- onChange: (n) => {
3161
- this._onChange && this._onChange(n), this.dispatchEvent(new CustomEvent("change", {
3610
+ onChange: (a) => {
3611
+ this._onChange && this._onChange(a), this.dispatchEvent(new CustomEvent("change", {
3162
3612
  bubbles: !0,
3163
3613
  composed: !0,
3164
3614
  detail: {
3165
- selectedOptions: n,
3615
+ selectedOptions: a,
3166
3616
  selectedValues: this.collectSelectedValues()
3167
3617
  }
3168
3618
  }));
@@ -3171,11 +3621,11 @@ class Me extends Ss {
3171
3621
  container: this.shadow,
3172
3622
  // Pass host element (this) for hidden inputs in light DOM
3173
3623
  hostElement: this
3174
- }), i && (this.containerElement.dataset.initialValues = JSON.stringify(i)), this.picker = new xs(this.containerElement, r), this._customStylesCallback) {
3175
- const n = this._customStylesCallback();
3176
- if (n) {
3177
- const a = document.createElement("style");
3178
- a.className = "ms-custom-styles", a.textContent = n, this.shadow.insertBefore(a, this.shadow.firstChild);
3624
+ }), i && (this.containerElement.dataset.initialValues = JSON.stringify(i)), this.picker = new zs(this.containerElement, r), this._customStylesCallback) {
3625
+ const a = this._customStylesCallback();
3626
+ if (a) {
3627
+ const n = document.createElement("style");
3628
+ n.className = "ms-custom-styles", n.textContent = a, this.shadow.insertBefore(n, this.shadow.firstChild);
3179
3629
  }
3180
3630
  }
3181
3631
  }
@@ -3238,6 +3688,12 @@ class Me extends Ss {
3238
3688
  get subtitleMember() {
3239
3689
  return this.getAttribute("subtitle-member");
3240
3690
  }
3691
+ set fullTitleMember(t) {
3692
+ t ? this.setAttribute("full-title-member", t) : this.removeAttribute("full-title-member");
3693
+ }
3694
+ get fullTitleMember() {
3695
+ return this.getAttribute("full-title-member");
3696
+ }
3241
3697
  set groupMember(t) {
3242
3698
  this._groupMember = t || void 0, t ? this.setAttribute("group-member", t) : this.removeAttribute("group-member");
3243
3699
  }
@@ -3250,6 +3706,57 @@ class Me extends Ss {
3250
3706
  get disabledMember() {
3251
3707
  return this.getAttribute("disabled-member");
3252
3708
  }
3709
+ // Tree-of-options members. Setting `pathMember` (like the `path-member`
3710
+ // attribute) turns on tree mode. Each reflects to its kebab attribute, which
3711
+ // is observed and applied in place — no separate wiring needed.
3712
+ set pathMember(t) {
3713
+ t ? this.setAttribute("path-member", t) : this.removeAttribute("path-member");
3714
+ }
3715
+ get pathMember() {
3716
+ return this.getAttribute("path-member");
3717
+ }
3718
+ set parentPathMember(t) {
3719
+ t ? this.setAttribute("parent-path-member", t) : this.removeAttribute("parent-path-member");
3720
+ }
3721
+ get parentPathMember() {
3722
+ return this.getAttribute("parent-path-member");
3723
+ }
3724
+ set levelMember(t) {
3725
+ t ? this.setAttribute("level-member", t) : this.removeAttribute("level-member");
3726
+ }
3727
+ get levelMember() {
3728
+ return this.getAttribute("level-member");
3729
+ }
3730
+ set hasChildrenMember(t) {
3731
+ t ? this.setAttribute("has-children-member", t) : this.removeAttribute("has-children-member");
3732
+ }
3733
+ get hasChildrenMember() {
3734
+ return this.getAttribute("has-children-member");
3735
+ }
3736
+ set isSelectableMember(t) {
3737
+ t ? this.setAttribute("is-selectable-member", t) : this.removeAttribute("is-selectable-member");
3738
+ }
3739
+ get isSelectableMember() {
3740
+ return this.getAttribute("is-selectable-member");
3741
+ }
3742
+ set treePathSeparator(t) {
3743
+ t ? this.setAttribute("tree-path-separator", t) : this.removeAttribute("tree-path-separator");
3744
+ }
3745
+ get treePathSeparator() {
3746
+ return this.getAttribute("tree-path-separator");
3747
+ }
3748
+ set checkboxMode(t) {
3749
+ t ? this.setAttribute("checkbox-mode", t) : this.removeAttribute("checkbox-mode");
3750
+ }
3751
+ get checkboxMode() {
3752
+ return this.getAttribute("checkbox-mode");
3753
+ }
3754
+ set cascadeSelectPolicy(t) {
3755
+ t ? this.setAttribute("cascade-select-policy", t) : this.removeAttribute("cascade-select-policy");
3756
+ }
3757
+ get cascadeSelectPolicy() {
3758
+ return this.getAttribute("cascade-select-policy");
3759
+ }
3253
3760
  // Callback properties (JavaScript only - no attributes)
3254
3761
  set getValueCallback(t) {
3255
3762
  this._getValueCallback = t, this.updatePicker({ getValueCallback: t });
@@ -3307,12 +3814,44 @@ class Me extends Ss {
3307
3814
  get getSubtitleCallback() {
3308
3815
  return this._getSubtitleCallback;
3309
3816
  }
3817
+ /** Callback returning an option's full title (used by badges when show-badge-full-title is on). */
3818
+ set getFullTitleCallback(t) {
3819
+ this._getFullTitleCallback = t, this.updatePicker({ getFullTitleCallback: t });
3820
+ }
3821
+ get getFullTitleCallback() {
3822
+ return this._getFullTitleCallback;
3823
+ }
3310
3824
  set getGroupCallback(t) {
3311
3825
  this._getGroupCallback = t, this.updatePicker({ getGroupCallback: t });
3312
3826
  }
3313
3827
  get getGroupCallback() {
3314
3828
  return this._getGroupCallback;
3315
3829
  }
3830
+ /** Callback returning an option's materialized dot-path (enables tree mode). */
3831
+ set getPathCallback(t) {
3832
+ this._getPathCallback = t, this.updatePicker({ getPathCallback: t });
3833
+ }
3834
+ get getPathCallback() {
3835
+ return this._getPathCallback;
3836
+ }
3837
+ /** Force tree mode on/off. When unset, tree mode auto-enables if a path source is present. */
3838
+ set isTreeEnabled(t) {
3839
+ this._isTreeEnabled = t, this.updatePicker({ isTreeEnabled: t });
3840
+ }
3841
+ get isTreeEnabled() {
3842
+ return this._isTreeEnabled;
3843
+ }
3844
+ /**
3845
+ * Callback deciding whether a tree node is selectable (takes precedence over
3846
+ * `is-selectable-member`). Receives the built node — e.g.
3847
+ * `el.getIsSelectableCallback = (node) => !node.hasChildren` for leaves only.
3848
+ */
3849
+ set getIsSelectableCallback(t) {
3850
+ this._getIsSelectableCallback = t, this.updatePicker({ getIsSelectableCallback: t });
3851
+ }
3852
+ get getIsSelectableCallback() {
3853
+ return this._getIsSelectableCallback;
3854
+ }
3316
3855
  set renderGroupLabelContentCallback(t) {
3317
3856
  this._renderGroupLabelContentCallback = t, this.updatePicker({ renderGroupLabelContentCallback: t });
3318
3857
  }
@@ -3554,40 +4093,40 @@ class Me extends Ss {
3554
4093
  // makes `form.reset()`, `form.elements`, and (in the future) constraint
3555
4094
  // validation actually do something. Without this flag the element is
3556
4095
  // invisible to the form lifecycle even when it has a `name`.
3557
- d(Me, "formAssociated", !0);
3558
- typeof window < "u" && typeof customElements < "u" && (customElements.get("web-multiselect") || customElements.define("web-multiselect", Me));
4096
+ h(ze, "formAssociated", !0);
4097
+ typeof window < "u" && typeof customElements < "u" && (customElements.get("web-multiselect") || customElements.define("web-multiselect", ze));
3559
4098
  typeof window < "u" && (window.components = window.components || {}, window.components["web-multiselect"] = {
3560
- version: () => "1.12.0-rc05",
4099
+ version: () => "1.12.0-rc06",
3561
4100
  config: {
3562
4101
  name: "@keenmate/web-multiselect",
3563
- version: "1.12.0-rc05",
4102
+ version: "1.12.0-rc06",
3564
4103
  author: "Keenmate",
3565
4104
  license: "MIT",
3566
4105
  repository: "git+https://github.com/keenmate/web-multiselect.git",
3567
4106
  homepage: "https://web-multiselect.keenmate.dev"
3568
4107
  },
3569
4108
  logging: {
3570
- enableLogging: bs,
3571
- disableLogging: gs,
3572
- setLogLevel: fs,
3573
- setCategoryLevel: vs,
3574
- getCategories: () => [...us]
4109
+ enableLogging: ws,
4110
+ disableLogging: xs,
4111
+ setLogLevel: Cs,
4112
+ setCategoryLevel: Ss,
4113
+ getCategories: () => [...ys]
3575
4114
  },
3576
4115
  register: () => {
3577
- typeof customElements < "u" && !customElements.get("web-multiselect") && customElements.define("web-multiselect", Me);
4116
+ typeof customElements < "u" && !customElements.get("web-multiselect") && customElements.define("web-multiselect", ze);
3578
4117
  },
3579
- getInstances: () => ct()
4118
+ getInstances: () => gt()
3580
4119
  });
3581
4120
  export {
3582
- us as LOGGING_CATEGORIES,
3583
- Me as MultiSelectElement,
3584
- xs as WebMultiSelect,
3585
- x as dataLogger,
3586
- gs as disableLogging,
3587
- bs as enableLogging,
3588
- oe as initLogger,
3589
- S as interactionLogger,
3590
- vs as setCategoryLevel,
3591
- fs as setLogLevel,
3592
- P as uiLogger
4121
+ ys as LOGGING_CATEGORIES,
4122
+ ze as MultiSelectElement,
4123
+ zs as WebMultiSelect,
4124
+ O as dataLogger,
4125
+ xs as disableLogging,
4126
+ ws as enableLogging,
4127
+ de as initLogger,
4128
+ L as interactionLogger,
4129
+ Ss as setCategoryLevel,
4130
+ Cs as setLogLevel,
4131
+ R as uiLogger
3593
4132
  };