@keenmate/web-multiselect 1.12.0-rc04 → 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, M = (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 ze(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 D(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(D(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);
43
+ const s = ge(o), i = tt(o), r = et(i);
44
44
  let a = i === "x" ? s === (t ? "end" : "start") ? "right" : "left" : s === "start" ? "bottom" : "top";
45
- return e.reference[r] > e.floating[r] && (a = ae(a)), [a, ae(a)];
45
+ return e.reference[r] > e.floating[r] && (a = pe(a)), [a, pe(a)];
46
46
  }
47
- function ft(o) {
48
- const e = ae(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 Ve = ["left", "right"], De = ["right", "left"], vt = ["top", "bottom"], _t = ["bottom", "top"];
55
- function kt(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 ? De : Ve : e ? Ve : De;
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 yt(o, e, t, s) {
68
- const i = ce(o);
69
- let r = kt(N(o), t === "start", s);
70
- return i && (r = r.map((a) => a + "-" + 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 ae(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 wt(o) {
75
+ function Ot(o) {
76
76
  return {
77
77
  top: 0,
78
78
  right: 0,
@@ -81,15 +81,15 @@ function wt(o) {
81
81
  ...o
82
82
  };
83
83
  }
84
- function xt(o) {
85
- return typeof o != "number" ? wt(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 ne(o) {
92
+ function ue(o) {
93
93
  const {
94
94
  x: e,
95
95
  y: t,
@@ -107,116 +107,116 @@ function ne(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 = D(e), a = qe(e), n = Ke(a), l = N(e), c = r === "y", h = s.x + s.width / 2 - i.width / 2, p = s.y + s.height / 2 - i.height / 2, u = s[n] / 2 - i[n] / 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 = {
120
- x: h,
119
+ p = {
120
+ x: c,
121
121
  y: s.y - i.height
122
122
  };
123
123
  break;
124
124
  case "bottom":
125
- m = {
126
- x: h,
125
+ p = {
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[a] -= u * (t && c ? -1 : 1);
150
+ p[a] -= u * (t && d ? -1 : 1);
151
151
  break;
152
152
  case "end":
153
- m[a] += u * (t && c ? -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
163
  platform: a
164
164
  } = t, n = r.filter(Boolean), l = await (a.isRTL == null ? void 0 : a.isRTL(e));
165
- let c = await a.getElementRects({
165
+ let d = await a.getElementRects({
166
166
  reference: o,
167
167
  floating: e,
168
168
  strategy: i
169
169
  }), {
170
- x: h,
171
- y: p
172
- } = Be(c, s, l), u = s, m = {}, b = 0;
173
- for (let g = 0; g < n.length; g++) {
170
+ x: c,
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
175
  name: f,
176
- fn: v
177
- } = n[g], {
178
- x: k,
176
+ fn: g
177
+ } = n[v], {
178
+ x: _,
179
179
  y,
180
- data: C,
181
- reset: w
182
- } = await v({
183
- x: h,
184
- y: p,
180
+ data: w,
181
+ reset: M
182
+ } = await g({
183
+ x: c,
184
+ y: m,
185
185
  initialPlacement: s,
186
186
  placement: u,
187
187
  strategy: i,
188
- middlewareData: m,
189
- rects: c,
188
+ middlewareData: p,
189
+ rects: d,
190
190
  platform: a,
191
191
  elements: {
192
192
  reference: o,
193
193
  floating: e
194
194
  }
195
195
  });
196
- h = k ?? h, p = y ?? p, m = {
197
- ...m,
196
+ c = _ ?? c, m = y ?? m, p = {
197
+ ...p,
198
198
  [f]: {
199
- ...m[f],
200
- ...C
199
+ ...p[f],
200
+ ...w
201
201
  }
202
- }, w && b <= 50 && (b++, typeof w == "object" && (w.placement && (u = w.placement), w.rects && (c = w.rects === !0 ? await a.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
- }) : w.rects), {
207
- x: h,
208
- y: p
209
- } = Be(c, u, l)), g = -1);
206
+ }) : M.rects), {
207
+ x: c,
208
+ y: m
209
+ } = Fe(d, u, l)), v = -1);
210
210
  }
211
211
  return {
212
- x: h,
213
- y: p,
212
+ x: c,
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 {
@@ -227,41 +227,41 @@ async function Ye(o, e) {
227
227
  elements: n,
228
228
  strategy: l
229
229
  } = o, {
230
- boundary: c = "clippingAncestors",
231
- rootBoundary: h = "viewport",
232
- elementContext: p = "floating",
230
+ boundary: d = "clippingAncestors",
231
+ rootBoundary: c = "viewport",
232
+ elementContext: m = "floating",
233
233
  altBoundary: u = !1,
234
- padding: m = 0
235
- } = le(e, o), b = xt(m), f = n[u ? p === "floating" ? "reference" : "floating" : p], v = ne(await r.getClippingRect({
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
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: c,
238
- rootBoundary: h,
237
+ boundary: d,
238
+ rootBoundary: c,
239
239
  strategy: l
240
- })), k = p === "floating" ? {
240
+ })), _ = m === "floating" ? {
241
241
  x: s,
242
242
  y: i,
243
243
  width: a.floating.width,
244
244
  height: a.floating.height
245
- } : a.reference, y = await (r.getOffsetParent == null ? void 0 : r.getOffsetParent(n.floating)), C = await (r.isElement == null ? void 0 : r.isElement(y)) ? await (r.getScale == null ? void 0 : r.getScale(y)) || {
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
- }, w = ne(r.convertOffsetParentRelativeRectToViewportRelativeRect ? await r.convertOffsetParentRelativeRectToViewportRelativeRect({
251
+ }, M = ue(r.convertOffsetParentRelativeRectToViewportRelativeRect ? await r.convertOffsetParentRelativeRectToViewportRelativeRect({
252
252
  elements: n,
253
- rect: k,
253
+ rect: _,
254
254
  offsetParent: y,
255
255
  strategy: l
256
- }) : k);
256
+ }) : _);
257
257
  return {
258
- top: (v.top - w.top + b.top) / C.y,
259
- bottom: (w.bottom - v.bottom + b.bottom) / C.y,
260
- left: (v.left - w.left + b.left) / C.x,
261
- right: (w.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,
@@ -273,104 +273,104 @@ const St = function(o) {
273
273
  rects: a,
274
274
  initialPlacement: n,
275
275
  platform: l,
276
- elements: c
276
+ elements: d
277
277
  } = e, {
278
- mainAxis: h = !0,
279
- crossAxis: p = !0,
278
+ mainAxis: c = !0,
279
+ crossAxis: m = !0,
280
280
  fallbackPlacements: u,
281
- fallbackStrategy: m = "bestFit",
281
+ fallbackStrategy: p = "bestFit",
282
282
  fallbackAxisSideDirection: b = "none",
283
- flipAlignment: g = !0,
283
+ flipAlignment: v = !0,
284
284
  ...f
285
- } = le(o, e);
285
+ } = be(o, e);
286
286
  if ((t = r.arrow) != null && t.alignmentOffset)
287
287
  return {};
288
- const v = N(i), k = D(n), y = N(n) === n, C = await (l.isRTL == null ? void 0 : l.isRTL(c.floating)), w = u || (y || !g ? [ae(n)] : ft(n)), Y = b !== "none";
289
- !u && Y && w.push(...yt(n, g, b, C));
290
- const j = [n, ...w], ue = await Ye(e, f), te = [];
291
- let U = ((s = r.flip) == null ? void 0 : s.overflows) || [];
292
- if (h && te.push(ue[v]), p) {
293
- const $ = gt(i, a, 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, Me;
301
- const $ = (((Pe = r.flip) == null ? void 0 : Pe.index) || 0) + 1, be = j[$];
302
- if (be && (!(p === "alignment" ? k !== D(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((I) => D(I.placement) === k ? I.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 J = (Me = U.filter((R) => R.overflows[0] <= 0).sort((R, I) => R.overflows[1] - I.overflows[1])[0]) == null ? void 0 : Me.placement;
315
- if (!J)
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((I) => {
320
- if (Y) {
321
- const V = D(I.placement);
322
- return V === k || // 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
- V === "y";
324
+ W === "y";
325
325
  }
326
326
  return !0;
327
- }).map((I) => [I.placement, I.overflows.filter((V) => V > 0).reduce((V, dt) => V + dt, 0)]).sort((I, V) => I[1] - V[1])[0]) == null ? void 0 : Ee[0];
328
- R && (J = 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
- J = n;
332
+ oe = n;
333
333
  break;
334
334
  }
335
- if (i !== J)
335
+ if (i !== oe)
336
336
  return {
337
337
  reset: {
338
- placement: J
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 It(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)), a = N(t), n = ce(t), l = D(t) === "y", c = Tt.has(a) ? -1 : 1, h = 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 n && typeof b == "number" && (m = n === "end" ? b * -1 : b), l ? {
366
- x: m * h,
367
- y: u * c
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 * c,
370
- y: m * h
369
+ x: u * d,
370
+ y: p * c
371
371
  };
372
372
  }
373
- const Ot = function(o) {
373
+ const Dt = function(o) {
374
374
  return o === void 0 && (o = 0), {
375
375
  name: "offset",
376
376
  options: o,
@@ -381,7 +381,7 @@ const Ot = function(o) {
381
381
  y: r,
382
382
  placement: a,
383
383
  middlewareData: n
384
- } = e, l = await It(e, o);
384
+ } = e, l = await Vt(e, o);
385
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,
@@ -392,7 +392,7 @@ const Ot = function(o) {
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,
@@ -407,91 +407,91 @@ const Ot = function(o) {
407
407
  limiter: n = {
408
408
  fn: (f) => {
409
409
  let {
410
- x: v,
411
- y: k
410
+ x: g,
411
+ y: _
412
412
  } = f;
413
413
  return {
414
- x: v,
415
- y: k
414
+ x: g,
415
+ y: _
416
416
  };
417
417
  }
418
418
  },
419
419
  ...l
420
- } = le(o, e), c = {
420
+ } = be(o, e), d = {
421
421
  x: t,
422
422
  y: s
423
- }, h = await Ye(e, l), p = D(N(i)), u = Ge(p);
424
- let m = c[u], b = c[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 f = u === "y" ? "top" : "left", v = u === "y" ? "bottom" : "right", k = m + h[f], y = m - h[v];
427
- m = ze(k, m, y);
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
429
  if (a) {
430
- const f = p === "y" ? "top" : "left", v = p === "y" ? "bottom" : "right", k = b + h[f], y = b - h[v];
431
- b = ze(k, b, y);
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 g = n.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
- ...g,
439
+ ...v,
440
440
  data: {
441
- x: g.x - t,
442
- y: g.y - s,
441
+ x: v.x - t,
442
+ y: v.y - s,
443
443
  enabled: {
444
444
  [u]: r,
445
- [p]: a
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 Je(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 z(o) {
462
+ function N(o) {
463
463
  var e;
464
- return (e = (Je(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 Je(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 Lt = /* @__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
- } = L(o);
486
- return /auto|scroll|overlay|hidden|clip/.test(e + s + t) && !Lt.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 Mt(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 zt = ["transform", "translate", "scale", "rotate", "perspective"], Vt = ["transform", "translate", "scale", "rotate", "perspective", "filter"], Dt = ["paint", "layout", "strict", "content"];
503
- function Te(o) {
504
- const e = Ie(), t = A(o) ? L(o) : o;
505
- return zt.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) || Vt.some((s) => (t.willChange || "").includes(s)) || Dt.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 Ie() {
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 L(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,162 +534,162 @@ 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
- z(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 Xe(o) {
550
- const e = B(o);
551
- return K(e) ? o.ownerDocument ? o.ownerDocument.body : o.body : E(e) && ee(e) ? e : Xe(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 = Xe(o), r = i === ((s = o.ownerDocument) == null ? void 0 : s.body), a = 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 n = ve(a);
559
- return e.concat(a, a.visualViewport || [], ee(i) ? i : [], n && t ? Z(n) : []);
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 = L(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, a = i ? o.offsetHeight : s, n = re(t) !== r || re(s) !== a;
569
+ const i = H(o), r = i ? o.offsetWidth : t, a = i ? o.offsetHeight : s, n = me(t) !== r || me(s) !== a;
570
570
  return n && (t = r, s = a), {
571
571
  width: t,
572
572
  height: s,
573
573
  $: n
574
574
  };
575
575
  }
576
- function Oe(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 = Oe(o);
581
- if (!E(e))
582
- return M(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 a = (r ? re(t.width) : t.width) / s, n = (r ? re(t.height) : t.height) / i;
587
+ } = rt(e);
588
+ let a = (r ? me(t.width) : t.width) / s, n = (r ? me(t.height) : t.height) / i;
589
589
  return (!a || !Number.isFinite(a)) && (a = 1), (!n || !Number.isFinite(n)) && (n = 1), {
590
590
  x: a,
591
591
  y: n
592
592
  };
593
593
  }
594
- const Rt = /* @__PURE__ */ M(0);
595
- function Qe(o) {
596
- const e = T(o);
597
- return !Ie() || !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 = Oe(o);
608
- let a = M(1);
609
- e && (s ? A(s) && (a = G(s)) : a = G(o));
610
- const n = Ht(r, t, s) ? Qe(r) : M(0);
611
- let l = (i.left + n.x) / a.x, c = (i.top + n.y) / a.y, h = i.width / a.x, p = i.height / a.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, g = ve(b);
615
- for (; g && s && m !== b; ) {
616
- const f = G(g), v = g.getBoundingClientRect(), k = L(g), y = v.left + (g.clientLeft + parseFloat(k.paddingLeft)) * f.x, C = v.top + (g.clientTop + parseFloat(k.paddingTop)) * f.y;
617
- l *= f.x, c *= f.y, h *= f.x, p *= f.y, l += y, c += C, b = T(g), g = 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 ne({
621
- width: h,
622
- height: p,
620
+ return ue({
621
+ width: c,
622
+ height: m,
623
623
  x: l,
624
- y: c
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(z(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", a = z(s), n = e ? he(e.floating) : !1;
645
+ const r = i === "fixed", a = N(s), n = e ? ve(e.floating) : !1;
646
646
  if (s === a || n && r)
647
647
  return t;
648
648
  let l = {
649
649
  scrollLeft: 0,
650
650
  scrollTop: 0
651
- }, c = M(1);
652
- const h = M(0), p = E(s);
653
- if ((p || !p && !r) && ((q(s) !== "body" || ee(a)) && (l = me(s)), E(s))) {
654
- const m = W(s);
655
- c = G(s), h.x = m.x + s.clientLeft, h.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 = a && !p && !r ? et(a, l) : M(0);
657
+ const u = a && !m && !r ? nt(a, l) : F(0);
658
658
  return {
659
- width: t.width * c.x,
660
- height: t.height * c.y,
661
- x: t.x * c.x - l.scrollLeft * c.x + h.x + u.x,
662
- y: t.y * c.y - l.scrollTop * c.y + h.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 = z(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 a = -t.scrollLeft + pe(o);
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
671
  const n = -t.scrollTop;
672
- return L(s).direction === "rtl" && (a += F(e.clientWidth, s.clientWidth) - i), {
672
+ return $(s).direction === "rtl" && (a += X(e.clientWidth, s.clientWidth) - i), {
673
673
  width: i,
674
674
  height: r,
675
675
  x: a,
676
676
  y: n
677
677
  };
678
678
  }
679
- const Re = 25;
680
- function jt(o, e) {
681
- const t = T(o), s = z(o), i = t.visualViewport;
679
+ const Ne = 25;
680
+ function Jt(o, e) {
681
+ const t = V(o), s = N(o), i = t.visualViewport;
682
682
  let r = s.clientWidth, a = s.clientHeight, n = 0, l = 0;
683
683
  if (i) {
684
684
  r = i.width, a = i.height;
685
- const h = Ie();
686
- (!h || h && e === "fixed") && (n = i.offsetLeft, l = i.offsetTop);
687
- }
688
- const c = pe(s);
689
- if (c <= 0) {
690
- const h = s.ownerDocument, p = h.body, u = getComputedStyle(p), m = h.compatMode === "CSS1Compat" && parseFloat(u.marginLeft) + parseFloat(u.marginRight) || 0, b = Math.abs(s.clientWidth - p.clientWidth - m);
691
- b <= Re && (r -= b);
692
- } else c <= Re && (r += c);
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
695
  height: a,
@@ -697,26 +697,26 @@ function jt(o, e) {
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) : M(1), a = o.clientWidth * r.x, n = o.clientHeight * r.y, l = i * r.x, c = 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
704
  width: a,
705
705
  height: n,
706
706
  x: l,
707
- y: c
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(z(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 ne(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 : L(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((n) => A(n) && q(n) !== "body"), i = null;
738
- const r = L(o).position === "fixed";
739
- let a = r ? B(o) : o;
740
- for (; A(a) && !K(a); ) {
741
- const n = L(a), l = Te(a);
742
- !l && n.position === "fixed" && (i = null), (r ? !l && !i : !l && n.position === "static" && !!i && Ut.has(i.position) || ee(a) && !l && tt(o, a)) ? s = s.filter((h) => h !== a) : i = n, a = B(a);
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 a = [...t === "clippingAncestors" ? he(e) ? [] : Kt(e, this._c) : [].concat(t), s], n = a[0], l = a.reduce((c, h) => {
754
- const p = He(e, h, i);
755
- return c.top = F(p.top, c.top), c.right = ie(p.right, c.right), c.bottom = ie(p.bottom, c.bottom), c.left = F(p.left, c.left), c;
756
- }, He(e, n, 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 Jt(o, e, t) {
775
- const s = E(e), i = z(e), r = t === "fixed", a = W(o, !0, r, e);
774
+ function os(o, e, t) {
775
+ const s = H(e), i = N(e), r = t === "fixed", a = Z(o, !0, r, e);
776
776
  let n = {
777
777
  scrollLeft: 0,
778
778
  scrollTop: 0
779
779
  };
780
- const l = M(0);
781
- function c() {
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)) && (n = 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 && c();
789
- r && !s && i && c();
790
- const h = i && !s && !r ? et(i, n) : M(0), p = a.left + n.scrollLeft - l.x - h.x, u = a.top + n.scrollTop - l.y - h.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
794
  width: a.width,
795
795
  height: a.height
796
796
  };
797
797
  }
798
- function ge(o) {
799
- return L(o).position === "static";
798
+ function ye(o) {
799
+ return $(o).position === "static";
800
800
  }
801
- function Fe(o, e) {
802
- if (!E(o) || L(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 z(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 && Mt(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 Xt = 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: Jt(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,71 +836,71 @@ const Xt = async function(o) {
836
836
  }
837
837
  };
838
838
  };
839
- function Zt(o) {
840
- return L(o).direction === "rtl";
841
- }
842
- const ot = {
843
- convertOffsetParentRelativeRectToViewportRelativeRect: Ft,
844
- getDocumentElement: z,
845
- getClippingRect: qt,
846
- getOffsetParent: st,
847
- getElementRects: Xt,
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 = z(o);
859
+ const i = N(o);
860
860
  function r() {
861
861
  var n;
862
862
  clearTimeout(s), (n = t) == null || n.disconnect(), t = null;
863
863
  }
864
864
  function a(n, l) {
865
865
  n === void 0 && (n = !1), l === void 0 && (l = 1), r();
866
- const c = o.getBoundingClientRect(), {
867
- left: h,
868
- top: p,
866
+ const d = o.getBoundingClientRect(), {
867
+ left: c,
868
+ top: m,
869
869
  width: u,
870
- height: m
871
- } = c;
872
- if (n || e(), !u || !m)
870
+ height: p
871
+ } = d;
872
+ if (n || e(), !u || !p)
873
873
  return;
874
- const b = se(p), g = se(i.clientWidth - (h + u)), f = se(i.clientHeight - (p + m)), v = se(h), y = {
875
- rootMargin: -b + "px " + -g + "px " + -f + "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 w(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)
882
+ if (!w)
883
883
  return a();
884
884
  j ? a(!1, j) : s = setTimeout(() => {
885
885
  a(!1, 1e-7);
886
886
  }, 1e3);
887
887
  }
888
- j === 1 && !it(c, o.getBoundingClientRect()) && a(), C = !1;
888
+ j === 1 && !ht(d, o.getBoundingClientRect()) && a(), w = !1;
889
889
  }
890
890
  try {
891
- t = new IntersectionObserver(w, {
891
+ t = new IntersectionObserver(M, {
892
892
  ...y,
893
893
  // Handle <iframe>s
894
894
  root: i.ownerDocument
895
895
  });
896
896
  } catch {
897
- t = new IntersectionObserver(w, y);
897
+ t = new IntersectionObserver(M, y);
898
898
  }
899
899
  t.observe(o);
900
900
  }
901
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,
@@ -908,56 +908,56 @@ function _e(o, e, t, s) {
908
908
  elementResize: a = typeof ResizeObserver == "function",
909
909
  layoutShift: n = typeof IntersectionObserver == "function",
910
910
  animationFrame: l = !1
911
- } = s, c = Oe(o), h = i || r ? [...c ? Z(c) : [], ...Z(e)] : [];
912
- h.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 = c && n ? Qt(c, t) : null;
918
- let u = -1, m = null;
919
- a && (m = new ResizeObserver((v) => {
920
- let [k] = v;
921
- k && k.target === c && m && (m.unobserve(e), cancelAnimationFrame(u), u = requestAnimationFrame(() => {
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
922
  var y;
923
- (y = m) == null || y.observe(e);
923
+ (y = p) == null || y.observe(e);
924
924
  })), t();
925
- }), c && !l && m.observe(c), m.observe(e));
926
- let b, g = l ? W(o) : null;
925
+ }), d && !l && p.observe(d), p.observe(e));
926
+ let b, v = l ? Z(o) : null;
927
927
  l && f();
928
928
  function f() {
929
- const v = W(o);
930
- g && !it(g, v) && t(), g = v, b = requestAnimationFrame(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;
934
- h.forEach((k) => {
935
- i && k.removeEventListener("scroll", t), r && k.removeEventListener("resize", t);
936
- }), p == null || p(), (v = m) == null || v.disconnect(), m = null, l && cancelAnimationFrame(b);
933
+ var g;
934
+ c.forEach((_) => {
935
+ i && _.removeEventListener("scroll", t), r && _.removeEventListener("resize", t);
936
+ }), m == null || m(), (g = p) == null || g.disconnect(), p = null, l && cancelAnimationFrame(b);
937
937
  };
938
938
  }
939
- const ke = Ot, ye = At, rt = St, we = (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 at = function() {
953
- }, O = "undefined", es = typeof window !== O && typeof window.navigator !== O && /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 = {}, _ = 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,65 +969,65 @@ 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 === O ? !1 : o === "trace" && es ? ts : console[o] !== void 0 ? Ne(console, o) : console.log !== void 0 ? Ne(console, "log") : at;
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 X() {
979
- for (var o = this.getLevel(), e = 0; e < xe.length; e++) {
980
- var t = xe[e];
981
- this[t] = e < o ? at : 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 === O && 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 !== O && (X.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 nt(o, e) {
994
+ function ut(o, e) {
995
995
  var t = this, s, i, r, a = "loglevel";
996
996
  typeof o == "string" ? a += ":" + o : typeof o == "symbol" && (a = void 0);
997
997
  function n(u) {
998
- var m = (xe[u] || "silent").toUpperCase();
999
- if (!(typeof window === O || !a)) {
998
+ var p = (Me[u] || "silent").toUpperCase();
999
+ if (!(typeof window === z || !a)) {
1000
1000
  try {
1001
- window.localStorage[a] = m;
1001
+ window.localStorage[a] = p;
1002
1002
  return;
1003
1003
  } catch {
1004
1004
  }
1005
1005
  try {
1006
- window.document.cookie = encodeURIComponent(a) + "=" + 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 === O || !a)) {
1013
+ if (!(typeof window === z || !a)) {
1014
1014
  try {
1015
1015
  u = window.localStorage[a];
1016
1016
  } catch {
1017
1017
  }
1018
- if (typeof u === O)
1018
+ if (typeof u === z)
1019
1019
  try {
1020
- var m = window.document.cookie, b = encodeURIComponent(a), g = m.indexOf(b + "=");
1021
- g !== -1 && (u = /^([^;]+)/.exec(
1022
- m.slice(g + 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 c() {
1030
- if (!(typeof window === O || !a)) {
1029
+ function d() {
1030
+ if (!(typeof window === z || !a)) {
1031
1031
  try {
1032
1032
  window.localStorage.removeItem(a);
1033
1033
  } catch {
@@ -1038,10 +1038,10 @@ function nt(o, e) {
1038
1038
  }
1039
1039
  }
1040
1040
  }
1041
- function h(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;
1041
+ function c(u) {
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 nt(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 = h(u), m !== !1 && n(r), X.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
- i = h(u), l() || t.setLevel(u, !1);
1059
+ i = c(u), l() || t.setLevel(u, !1);
1060
1060
  }, t.resetLevel = function() {
1061
- r = null, c(), X.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 (_ !== t && (s = h(_.getLevel())), X.call(t), _ === t)
1068
- for (var u in Q)
1069
- Q[u].rebuild();
1070
- }, s = h(
1071
- _ ? _.getLevel() : "WARN"
1067
+ if (T !== t && (s = c(T.getLevel())), ie.call(t), T === t)
1068
+ for (var u in ne)
1069
+ ne[u].rebuild();
1070
+ }, s = c(
1071
+ T ? T.getLevel() : "WARN"
1072
1072
  );
1073
- var p = l();
1074
- p != null && (r = h(p)), X.call(t);
1073
+ var m = l();
1074
+ m != null && (r = c(m)), ie.call(t);
1075
1075
  }
1076
- _ = new nt();
1077
- _.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 nt(
1080
+ var t = ne[e];
1081
+ return t || (t = ne[e] = new ut(
1082
1082
  e,
1083
- _.methodFactory
1083
+ T.methodFactory
1084
1084
  )), t;
1085
1085
  };
1086
- var rs = typeof window !== O ? window.log : void 0;
1087
- _.noConflict = function() {
1088
- return typeof window !== O && window.log === _ && (window.log = rs), _;
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
- _.getLoggers = function() {
1091
- return Q;
1090
+ T.getLoggers = function() {
1091
+ return ne;
1092
1092
  };
1093
- _.default = _;
1094
- var as = 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
- }, ns = {
1099
+ }, us = {
1100
1100
  template: "[%t] %l:",
1101
1101
  levelFormatter: function(o) {
1102
1102
  return o.toUpperCase();
@@ -1108,34 +1108,34 @@ var as = 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[""] || ns;
1118
+ var t = o.methodFactory, s = o.name || "", i = Y[s] || Y[""] || us;
1119
1119
  function r(a, n, l) {
1120
- var c = t(a, n, l), h = H[l] || H[""], p = h.template.indexOf("%t") !== -1, u = h.template.indexOf("%l") !== -1, m = h.template.indexOf("%n") !== -1;
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 = "", g = arguments.length, f = Array(g), v = 0; v < g; v++)
1123
- f[v] = arguments[v];
1124
- if (s || !H[l]) {
1125
- var k = h.timestampFormatter(/* @__PURE__ */ new Date()), y = h.levelFormatter(a), C = h.nameFormatter(l);
1126
- h.format ? b += h.format(y, C, k) : (b += h.template, p && (b = b.replace(/%t/, k)), u && (b = b.replace(/%l/, y)), m && (b = b.replace(/%n/, C))), f.length && typeof f[0] == "string" ? f[0] = b + " " + f[0] : f.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
- c.apply(void 0, f);
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] = as({}, 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(_);
1149
- const ms = (o) => o.toTimeString().split(" ")[0] + "." + o.getMilliseconds().toString().padStart(3, "0"), ps = _.methodFactory;
1150
- _.methodFactory = function(o, e, t) {
1151
- const s = ps(o, e, t), r = `color: ${hs[o] || "#666"}; font-weight: bold;`, a = "color: inherit;";
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
1152
  return function(...n) {
1153
- const l = ms(/* @__PURE__ */ new Date()), c = o.toUpperCase(), h = t ? `%c[${l}]%c %c[${c}]%c %c[${t}]%c` : `%c[${l}]%c %c[${c}]%c`;
1154
- s(h, ...t ? [r, a, r, a, r, a] : [r, a, r, a], ...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 _.setDefaultLevel == "function" ? _.setDefaultLevel("silent") : _.setLevel("silent", !1);
1158
- const oe = _.getLogger("MULTISELECT:INIT"), x = _.getLogger("MULTISELECT:DATA"), P = _.getLogger("MULTISELECT:UI"), S = _.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 _.rebuild == "function" && _.rebuild();
1164
+ function Ve() {
1165
+ typeof T.rebuild == "function" && T.rebuild();
1166
1166
  }
1167
- function bs() {
1168
- _.setLevel("debug"), Ae();
1167
+ function ws() {
1168
+ T.setLevel("debug"), Ve();
1169
1169
  }
1170
- function gs() {
1171
- _.setLevel("silent"), Ae();
1170
+ function xs() {
1171
+ T.setLevel("silent"), Ve();
1172
1172
  }
1173
- function fs(o) {
1174
- _.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
- _.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
  /**
@@ -1299,23 +1299,32 @@ 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, "onBeforeShow");
1313
- d(this, "showTimer", null);
1314
- d(this, "hideTimer", null);
1315
- d(this, "positionCleanup", null);
1316
- d(this, "handleMouseEnter");
1317
- d(this, "handleMouseLeave");
1318
- 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.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 = () => this.scheduleShow(), this.handleMouseLeave = () => this.scheduleHide(), this.trigger.addEventListener("mouseenter", this.handleMouseEnter), this.trigger.addEventListener("mouseleave", this.handleMouseLeave);
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
+ 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
+ this.followCursor && (this.cursorX = t.clientX, this.cursorY = t.clientY), this.scheduleShow();
1325
+ }, this.handleMouseLeave = () => this.scheduleHide(), this.trigger.addEventListener("mouseenter", this.handleMouseEnter), this.trigger.addEventListener("mouseleave", this.handleMouseLeave), this.followCursor && (this.handleMouseMove = (t) => {
1326
+ this.cursorX = t.clientX, this.cursorY = t.clientY, this.visible && this.positionAtCursor();
1327
+ }, this.trigger.addEventListener("mousemove", this.handleMouseMove));
1319
1328
  }
1320
1329
  scheduleShow() {
1321
1330
  this.hideTimer !== null && (clearTimeout(this.hideTimer), this.hideTimer = null), this.showTimer === null && (this.showTimer = window.setTimeout(() => {
@@ -1329,35 +1338,236 @@ class _s {
1329
1338
  }
1330
1339
  show() {
1331
1340
  var e;
1332
- (e = this.onBeforeShow) == null || e.call(this), this.element.classList.add(this.visibleClass), this.positionCleanup && this.positionCleanup(), this.positionCleanup = _e(this.trigger, this.element, () => {
1333
- we(this.trigger, this.element, {
1334
- placement: this.placement,
1335
- strategy: "fixed",
1336
- middleware: [
1337
- ke(this.offsetDistance),
1338
- rt(),
1339
- ye({ padding: 8 })
1340
- ]
1341
- }).then(({ x: t, y: s }) => {
1342
- Object.assign(this.element.style, {
1343
- left: `${t}px`,
1344
- top: `${s}px`
1345
- });
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
+ }
1343
+ /** Position the tooltip relative to a reference (the trigger element or a pointer virtual element). */
1344
+ computeAt(e) {
1345
+ Ie(e, this.element, {
1346
+ placement: this.placement,
1347
+ strategy: "fixed",
1348
+ middleware: [
1349
+ Se(this.offsetDistance),
1350
+ mt(),
1351
+ Te({ padding: 8 })
1352
+ ]
1353
+ }).then(({ x: t, y: s }) => {
1354
+ Object.assign(this.element.style, {
1355
+ left: `${t}px`,
1356
+ top: `${s}px`
1346
1357
  });
1347
1358
  });
1348
1359
  }
1360
+ /** Position the tooltip relative to the last-known pointer location (follow-cursor mode). */
1361
+ positionAtCursor() {
1362
+ const e = this.cursorX, t = this.cursorY, s = {
1363
+ getBoundingClientRect: () => ({
1364
+ width: 0,
1365
+ height: 0,
1366
+ x: e,
1367
+ y: t,
1368
+ top: t,
1369
+ left: e,
1370
+ right: e,
1371
+ bottom: t
1372
+ })
1373
+ };
1374
+ this.computeAt(s);
1375
+ }
1349
1376
  hide() {
1350
- this.element.classList.remove(this.visibleClass), this.positionCleanup && (this.positionCleanup(), this.positionCleanup = null);
1377
+ this.visible = !1, this.element.classList.remove(this.visibleClass), this.positionCleanup && (this.positionCleanup(), this.positionCleanup = null);
1351
1378
  }
1352
1379
  /** Hide synchronously (skip the hideDelay). Used by parent tooltips when a child tooltip is about to show. */
1353
1380
  hideImmediate() {
1354
1381
  this.showTimer !== null && (clearTimeout(this.showTimer), this.showTimer = null), this.hideTimer !== null && (clearTimeout(this.hideTimer), this.hideTimer = null), this.hide();
1355
1382
  }
1356
1383
  destroy() {
1357
- 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.element.remove();
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();
1358
1385
  }
1359
1386
  }
1360
- function ks(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) {
1361
1571
  let e = o;
1362
1572
  for (; e && !(e === document.body || e === document.documentElement); ) {
1363
1573
  if (e instanceof Element) {
@@ -1371,7 +1581,7 @@ function ks(o) {
1371
1581
  }
1372
1582
  return window;
1373
1583
  }
1374
- function ys(o, e, t) {
1584
+ function Vs(o, e, t) {
1375
1585
  let s = o;
1376
1586
  for (; s && !(s === document.body || s === document.documentElement); ) {
1377
1587
  if (s instanceof Element) {
@@ -1383,58 +1593,68 @@ function ys(o, e, t) {
1383
1593
  }
1384
1594
  return null;
1385
1595
  }
1386
- function ws(o) {
1596
+ function Ds(o) {
1387
1597
  const e = getComputedStyle(o), t = [];
1388
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}`);
1389
1599
  const s = e.backdropFilter;
1390
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("; ");
1391
1601
  }
1392
- class xs {
1602
+ class zs {
1393
1603
  constructor(e, t = {}) {
1394
- d(this, "element");
1395
- d(this, "instanceId");
1396
- d(this, "options");
1397
- d(this, "isOpen", !1);
1398
- d(this, "selectedValues", /* @__PURE__ */ new Set());
1399
- d(this, "selectedOptions", /* @__PURE__ */ new Map());
1400
- d(this, "allOptions", []);
1401
- d(this, "filteredOptions", []);
1402
- d(this, "hiddenInputs", []);
1403
- d(this, "focusedIndex", -1);
1404
- d(this, "matchingIndices", /* @__PURE__ */ new Set());
1405
- d(this, "searchTerm", "");
1406
- d(this, "isLoading", !1);
1407
- d(this, "searchDebounceTimer");
1408
- d(this, "searchAbortController");
1409
- d(this, "showSelectedPopover", !1);
1410
- d(this, "selectedPopoverPlacement", null);
1411
- d(this, "dropdownPlacement", null);
1412
- d(this, "isRTL", !1);
1413
- d(this, "effectiveBadgesPosition", "bottom");
1414
- d(this, "justClosedViaClick", !1);
1415
- 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);
1416
1636
  // Floating UI cleanup functions
1417
- d(this, "dropdownCleanup", null);
1418
- d(this, "hintCleanup", null);
1419
- d(this, "selectedPopoverCleanup", null);
1637
+ h(this, "dropdownCleanup", null);
1638
+ h(this, "hintCleanup", null);
1639
+ h(this, "selectedPopoverCleanup", null);
1420
1640
  // All hover tooltips (badge text, badge-remove buttons, action buttons), keyed by id.
1421
- d(this, "tooltips", /* @__PURE__ */ new Map());
1641
+ h(this, "tooltips", /* @__PURE__ */ new Map());
1422
1642
  // Virtual scroll instance
1423
- d(this, "virtualScroll", null);
1424
- d(this, "optionsContainer", null);
1425
- d(this, "selectedPopoverVirtualScroll", null);
1426
- d(this, "selectedPopoverContainer", null);
1643
+ h(this, "virtualScroll", null);
1644
+ h(this, "optionsContainer", null);
1645
+ h(this, "selectedPopoverVirtualScroll", null);
1646
+ h(this, "selectedPopoverContainer", null);
1427
1647
  // DOM elements
1428
- d(this, "input");
1429
- d(this, "dropdown");
1430
- d(this, "dropdownInner");
1431
- d(this, "badgesContainer");
1432
- d(this, "counter");
1433
- d(this, "hint");
1434
- 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");
1435
1655
  // Document-level event handlers (stored for cleanup)
1436
- d(this, "documentKeydownHandler", null);
1437
- d(this, "documentClickHandler", null);
1656
+ h(this, "documentKeydownHandler", null);
1657
+ h(this, "documentClickHandler", null);
1438
1658
  this.element = e, this.instanceId = `MS-${Math.random().toString(36).slice(2, 11)}`, this.options = {
1439
1659
  // String options
1440
1660
  searchHint: e.dataset.searchHint || "",
@@ -1528,7 +1748,25 @@ class xs {
1528
1748
  * text independently. Doesn't fit the extractField shape (no tuple/member layer of its own).
1529
1749
  */
1530
1750
  getItemBadgeDisplayValue(e) {
1531
- 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
+ });
1532
1770
  }
1533
1771
  getItemSearchValue(e) {
1534
1772
  return this.extractField(e, {
@@ -1574,8 +1812,27 @@ class xs {
1574
1812
  fallback: !1
1575
1813
  });
1576
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
+ }
1577
1834
  init() {
1578
- 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:`, {
1579
1836
  placeholder: this.options.searchPlaceholder,
1580
1837
  totalOptions: this.allOptions.length,
1581
1838
  isCloseOnSelect: this.options.isCloseOnSelect,
@@ -1588,21 +1845,142 @@ class xs {
1588
1845
  try {
1589
1846
  this.allOptions = JSON.parse(e);
1590
1847
  } catch (t) {
1591
- 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 = [];
1592
1849
  }
1593
1850
  else this.options.options && (this.allOptions = this.options.options);
1594
- 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);
1595
1973
  }
1596
1974
  buildHTML() {
1597
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;
1598
- this.isRTL = i || r, oe.debug(`[${this.instanceId}] RTL Debug:`, {
1976
+ this.isRTL = i || r, de.debug(`[${this.instanceId}] RTL Debug:`, {
1599
1977
  isShadowRoot: t instanceof ShadowRoot,
1600
1978
  hostElement: s,
1601
1979
  elementDir: s.getAttribute("dir"),
1602
1980
  hasElementDir: i,
1603
1981
  hasAncestorDir: r,
1604
1982
  isRTL: this.isRTL
1605
- }), 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");
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");
1606
1984
  const a = document.createElement("div");
1607
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");
1608
1986
  const n = document.createElement("span");
@@ -1628,7 +2006,7 @@ class xs {
1628
2006
  });
1629
2007
  }
1630
2008
  renderDropdown() {
1631
- if (this.destroyAllActionButtonTooltips(), this.shouldUseVirtualScroll()) {
2009
+ if (this.destroyAllActionButtonTooltips(), this.refreshCascadeAtoms(), this.shouldUseVirtualScroll()) {
1632
2010
  this.dropdown.classList.add("ms__dropdown--virtual"), this.renderDropdownVirtual();
1633
2011
  return;
1634
2012
  }
@@ -1638,30 +2016,40 @@ class xs {
1638
2016
  e += '<div class="ms__loader">', e += '<div class="pa-loader pa-loader--sm"></div>', e += `<div class="ms__loading-text">${this.options.loadingMessage}</div>`, e += "</div>", this.dropdownInner.innerHTML = e;
1639
2017
  return;
1640
2018
  }
1641
- if (e += this.renderActionsHTML(), e += '<div class="ms__options">', this.filteredOptions.length === 0)
2019
+ const t = this.renderActionsHTML(), s = this.options.actionsPosition === "bottom";
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)
1642
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
+ });
1643
2031
  else if (this.options.isGroupsAllowed) {
1644
- const t = this.groupOptions(this.filteredOptions), s = /* @__PURE__ */ new Map();
1645
- this.filteredOptions.forEach((i, r) => s.set(i, r)), Object.keys(t).forEach((i) => {
1646
- if (e += '<div class="ms__group">', i !== "__ungrouped__")
2032
+ const i = this.groupOptions(this.filteredOptions), r = /* @__PURE__ */ new Map();
2033
+ this.filteredOptions.forEach((a, n) => r.set(a, n)), Object.keys(i).forEach((a) => {
2034
+ if (e += '<div class="ms__group">', a !== "__ungrouped__")
1647
2035
  if (this.options.renderGroupLabelContentCallback) {
1648
- const r = this.options.renderGroupLabelContentCallback(i);
1649
- if (r instanceof HTMLElement) {
1650
- const a = document.createElement("div");
1651
- a.className = "ms__group-label", a.appendChild(r), e += a.outerHTML;
2036
+ const n = this.options.renderGroupLabelContentCallback(a);
2037
+ if (n instanceof HTMLElement) {
2038
+ const l = document.createElement("div");
2039
+ l.className = "ms__group-label", l.appendChild(n), e += l.outerHTML;
1652
2040
  } else
1653
- e += `<div class="ms__group-label">${r}</div>`;
2041
+ e += `<div class="ms__group-label">${n}</div>`;
1654
2042
  } else
1655
- e += `<div class="ms__group-label">${i}</div>`;
1656
- t[i].forEach((r) => {
1657
- e += this.renderOption(r, s.get(r) ?? -1);
2043
+ e += `<div class="ms__group-label">${a}</div>`;
2044
+ i[a].forEach((n) => {
2045
+ e += this.renderOption(n, r.get(n) ?? -1);
1658
2046
  }), e += "</div>";
1659
2047
  });
1660
2048
  } else
1661
- this.filteredOptions.forEach((t, s) => {
1662
- e += this.renderOption(t, s);
2049
+ this.filteredOptions.forEach((i, r) => {
2050
+ e += this.renderOption(i, r);
1663
2051
  });
1664
- e += "</div>", this.dropdownInner.innerHTML = e, this.attachActionButtonTooltips();
2052
+ e += "</div>", s && (e += t), this.dropdownInner.innerHTML = e, this.attachActionButtonTooltips(), this.attachOptionTooltips();
1665
2053
  }
1666
2054
  /**
1667
2055
  * Render dropdown with virtual scrolling
@@ -1669,9 +2057,10 @@ class xs {
1669
2057
  renderDropdownVirtual() {
1670
2058
  if (this.destroyAllActionButtonTooltips(), !this.virtualScroll) {
1671
2059
  let s = "";
1672
- s += this.renderActionsHTML();
1673
- const i = this.options.maxHeight || "20rem", r = this.options.optionHeight ?? 50;
1674
- s += `<div class="ms__options ms__options--virtual" style="height: ${i}; max-height: ${i}; overflow-y: auto; position: relative; --ms-option-height: ${r}px;"></div>`, this.dropdownInner.innerHTML = s, this.optionsContainer = this.dropdownInner.querySelector(".ms__options");
2060
+ const i = this.renderActionsHTML(), r = this.options.actionsPosition === "bottom";
2061
+ r || (s += i);
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");
1675
2064
  }
1676
2065
  if (this.filteredOptions.length === 0) {
1677
2066
  this.virtualScroll && (this.virtualScroll.destroy(), this.virtualScroll = null), this.optionsContainer.innerHTML = `<div class="ms__empty">${this.options.emptyMessage}</div>`;
@@ -1679,12 +2068,15 @@ class xs {
1679
2068
  }
1680
2069
  const e = this.options.optionHeight ?? 50, t = this.options.virtualScrollBuffer ?? 10;
1681
2070
  requestAnimationFrame(() => {
1682
- 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({
1683
2072
  container: this.optionsContainer,
1684
2073
  itemHeight: e,
1685
2074
  items: this.filteredOptions,
1686
- renderItem: (s, i) => this.renderOption(s, i),
1687
- bufferSize: t
2075
+ renderItem: (s, i) => this.isTreeMode() ? this.renderTreeNode(this.treeNodes[i], i) : this.renderOption(s, i),
2076
+ bufferSize: t,
2077
+ onVisibleRangeChange: () => {
2078
+ this.attachOptionTooltips();
2079
+ }
1688
2080
  }), this.attachActionButtonTooltips());
1689
2081
  });
1690
2082
  }
@@ -1692,38 +2084,78 @@ class xs {
1692
2084
  * Render the Select All / Clear All / custom action buttons row.
1693
2085
  * Returns the empty string if multiple-select is off or no buttons are configured.
1694
2086
  */
2087
+ /**
2088
+ * Default enabled/disabled state for the built-in actions, applied only when the consumer hasn't
2089
+ * set an explicit `isDisabled` / `getIsDisabledCallback`:
2090
+ * - `select-all` is disabled when it would add nothing (every selectable, non-disabled filtered
2091
+ * option is already selected — this also covers an empty list).
2092
+ * - `clear-all` is disabled when nothing is selected.
2093
+ */
2094
+ getBuiltInActionDisabled(e) {
2095
+ return e === "select-all" ? !this.filteredOptions.some((t) => !this.getItemDisabled(t) && !this.selectedValues.has(String(this.getItemValue(t)))) : e === "clear-all" ? this.selectedValues.size === 0 : !1;
2096
+ }
1695
2097
  renderActionsHTML() {
1696
2098
  const e = this.options.actionButtons;
1697
2099
  if (!this.options.isMultipleEnabled || !e || e.length === 0) return "";
1698
- const t = this.options.isActionsSticky ? " ms__actions--sticky" : "", s = this.options.actionsLayout === "wrap" ? " ms__actions--wrap" : "", i = e.map((r, a) => {
1699
- if (!(r.isVisibleCallback ? r.isVisibleCallback(this) : r.isVisible ?? !0)) return "";
1700
- const c = (r.isDisabledCallback ? r.isDisabledCallback(this) : r.isDisabled ?? !1) ? " disabled" : "", h = r.getTextCallback ? r.getTextCallback(this) : r.text;
1701
- let p = "";
1702
- if (r.getClassCallback) {
1703
- const u = r.getClassCallback(this);
1704
- p = Array.isArray(u) ? ` ${u.join(" ")}` : u ? ` ${u}` : "";
1705
- } else r.cssClass && (p = ` ${r.cssClass}`);
1706
- return `<button type="button"${c} class="ms__action-btn${p}" data-action="${r.action}" data-button-index="${a}">${h}</button>`;
1707
- }).join("");
1708
- return `<div class="ms__actions${t}${s}">${i}</div>`;
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) => {
2102
+ if (!(c.getIsVisibleCallback ? c.getIsVisibleCallback(this) : c.isVisible ?? !0)) return;
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 = "";
2107
+ if (c.getClassCallback) {
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(_);
2113
+ }), l.size === 0) return "";
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>`;
1709
2116
  }
1710
2117
  renderOption(e, t) {
1711
- 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)), c = t === this.focusedIndex, h = this.matchingIndices.has(t), p = ["ms__option"];
1712
- l && p.push("ms__option--selected"), c && p.push("ms__option--focused"), h && p.push("ms__option--matched"), n && 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");
1713
2120
  const u = this.options.checkboxAlign && this.options.checkboxAlign !== "center" ? ` data-checkbox-align="${this.options.checkboxAlign}"` : "";
1714
- let m = `<div class="${p.join(" ")}" data-value="${s}" data-index="${t}"${u}>`;
1715
- if (this.options.isCheckboxesShown && this.options.isMultipleEnabled && (m += `<input type="checkbox" class="ms__checkbox" ${l ? "checked" : ""} ${n ? "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) {
1716
2123
  const b = {
1717
2124
  index: t,
1718
2125
  isSelected: l,
1719
- isFocused: c,
1720
- isMatched: h,
2126
+ isFocused: d,
2127
+ isMatched: c,
1721
2128
  isDisabled: n
1722
- }, g = this.options.renderOptionContentCallback(e, b);
1723
- typeof g == "string" ? m += g : m += g.outerHTML;
2129
+ }, v = this.options.renderOptionContentCallback(e, b);
2130
+ typeof v == "string" ? p += v : p += v.outerHTML;
1724
2131
  } else
1725
- 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>`, a && (m += `<div class="ms__option-subtitle">${a}</div>`), m += "</div>";
1726
- return m += "</div>", m += "</div>", m;
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;
2156
+ } else
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;
1727
2159
  }
1728
2160
  highlightMatch(e, t) {
1729
2161
  if (!t) return e;
@@ -1773,21 +2205,21 @@ class xs {
1773
2205
  this.badgesContainer.className = `ms__badges ms__badges--${this.effectiveBadgesPosition}`, this.badgesContainer.innerHTML = e.map((r) => this.renderBadgeHTML(r, { displayMode: "badges", isInPopover: !1 })).join("");
1774
2206
  else if (s === "partial") {
1775
2207
  this.badgesContainer.className = `ms__badges ms__badges--${this.effectiveBadgesPosition}`;
1776
- const r = this.options.badgesMaxVisible || 3, a = e.slice(0, r), n = t - r, l = a.map((h) => this.renderBadgeHTML(h, { displayMode: "partial", isInPopover: !1 })).join("");
1777
- let c = "";
1778
- n > 0 && (c = `
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 = `
1779
2211
  <div class="ms__badge ms__badge--counter ms__badge--more" data-action="show-selected">
1780
2212
  <span class="ms__badge-text">${this.options.getCounterCallback ? this.options.getCounterCallback(t, n) : `+${n} more`}</span>
1781
2213
  <button type="button" class="ms__badge-remove" data-action="remove-hidden" aria-label="Remove ${n} hidden items"></button>
1782
2214
  </div>
1783
- `), this.badgesContainer.innerHTML = l + c;
2215
+ `), this.badgesContainer.innerHTML = l + d;
1784
2216
  } else if (s === "compact")
1785
2217
  if (this.badgesContainer.className = `ms__badges ms__badges--${this.effectiveBadgesPosition}`, t > 0) {
1786
2218
  const r = e[0], a = this.getItemBadgeDisplayValue(r), n = t - 1;
1787
2219
  let l = a;
1788
2220
  if (n > 0) {
1789
- const c = this.options.getCounterCallback ? this.options.getCounterCallback(t, n) : `+${n} more`;
1790
- l = `${a} (${c})`;
2221
+ const d = this.options.getCounterCallback ? this.options.getCounterCallback(t, n) : `+${n} more`;
2222
+ l = `${a} (${d})`;
1791
2223
  }
1792
2224
  this.badgesContainer.innerHTML = `
1793
2225
  <div class="ms__badge" data-action="show-selected">
@@ -1843,14 +2275,14 @@ class xs {
1843
2275
  if (this.options.beforeSearchCallback) {
1844
2276
  const s = this.options.beforeSearchCallback(e);
1845
2277
  if (s === null) {
1846
- 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();
1847
2279
  return;
1848
2280
  }
1849
- 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}"`);
1850
2282
  }
1851
2283
  if (this.options.searchCallback) {
1852
2284
  if (t.length < this.options.minSearchLength) {
1853
- 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();
1854
2286
  return;
1855
2287
  }
1856
2288
  this.searchDebounceTimer && (clearTimeout(this.searchDebounceTimer), this.searchDebounceTimer = void 0);
@@ -1859,18 +2291,22 @@ class xs {
1859
2291
  this.searchDebounceTimer = void 0, this.searchTerm === e && this.performAsyncSearch(e, t);
1860
2292
  }, s) : await this.performAsyncSearch(e, t);
1861
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
+ }
1862
2298
  if (!t)
1863
2299
  this.filteredOptions = [...this.allOptions], this.matchingIndices.clear(), this.focusedIndex = this.filteredOptions.length > 0 ? 0 : -1;
1864
2300
  else {
1865
2301
  const s = this.options.searchMode || "filter", i = t.toLowerCase();
1866
2302
  if (s === "filter")
1867
- 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}"`);
1868
2304
  else {
1869
2305
  this.filteredOptions = [...this.allOptions], this.matchingIndices.clear();
1870
2306
  let r = -1;
1871
2307
  this.allOptions.forEach((a, n) => {
1872
2308
  this.getItemSearchValue(a).toLowerCase().includes(i) && (this.matchingIndices.add(n), r === -1 && (r = n));
1873
- }), 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`);
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`);
1874
2310
  }
1875
2311
  }
1876
2312
  this.renderDropdown(), this.options.searchMode === "navigate" && this.focusedIndex >= 0 && this.scrollToFocused();
@@ -1894,15 +2330,15 @@ class xs {
1894
2330
  async performAsyncSearch(e, t) {
1895
2331
  this.abortInFlightSearch();
1896
2332
  const s = new AbortController();
1897
- 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);
1898
2334
  try {
1899
2335
  const i = await this.options.searchCallback(t, s.signal);
1900
2336
  if (s.signal.aborted || this.searchTerm !== e) return;
1901
2337
  const r = i || [];
1902
- 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`);
1903
2339
  } catch (i) {
1904
2340
  if (s.signal.aborted) return;
1905
- 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();
1906
2342
  } finally {
1907
2343
  this.searchAbortController === s && (this.searchAbortController = void 0);
1908
2344
  }
@@ -1930,7 +2366,7 @@ class xs {
1930
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());
1931
2367
  break;
1932
2368
  case "Escape":
1933
- 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();
1934
2370
  break;
1935
2371
  case "Tab":
1936
2372
  this.close();
@@ -1951,12 +2387,12 @@ class xs {
1951
2387
  }
1952
2388
  handleDropdownClick(e) {
1953
2389
  var i;
1954
- 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();
1955
2391
  const t = e.target.closest("[data-action]");
1956
2392
  if (t) {
1957
2393
  e.preventDefault();
1958
2394
  const r = t.dataset.action;
1959
- 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")
1960
2396
  this.selectAll();
1961
2397
  else if (r === "clear-all")
1962
2398
  this.clearAll();
@@ -1970,7 +2406,7 @@ class xs {
1970
2406
  if (s && !s.classList.contains("ms__option--disabled")) {
1971
2407
  e.preventDefault();
1972
2408
  const r = s.dataset.value, a = this.filteredOptions.findIndex((n) => String(this.getItemValue(n)) === r);
1973
- S.debug(`[${this.instanceId}] Option clicked:`, {
2409
+ L.debug(`[${this.instanceId}] Option clicked:`, {
1974
2410
  value: r,
1975
2411
  optionIndex: a,
1976
2412
  closeOnSelect: this.options.isCloseOnSelect,
@@ -1980,7 +2416,7 @@ class xs {
1980
2416
  }
1981
2417
  handleBadgeClick(e) {
1982
2418
  if (e.target.closest('[data-action="clear-count"]')) {
1983
- 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();
1984
2420
  return;
1985
2421
  }
1986
2422
  if (e.target.closest('[data-action="show-selected"]')) {
@@ -1990,17 +2426,17 @@ class xs {
1990
2426
  const i = e.target.closest(".ms__badge-remove");
1991
2427
  if (i) {
1992
2428
  if (e.preventDefault(), e.stopPropagation(), i.dataset.action === "remove-hidden") {
1993
- S.debug(`[${this.instanceId}] Remove hidden items button clicked`);
2429
+ L.debug(`[${this.instanceId}] Remove hidden items button clicked`);
1994
2430
  const l = this.options.badgesMaxVisible || 3;
1995
- Array.from(this.selectedOptions.values()).slice(l).forEach((p) => this.deselectOption(p));
2431
+ Array.from(this.selectedOptions.values()).slice(l).forEach((m) => this.interactiveDeselect(m));
1996
2432
  return;
1997
2433
  }
1998
2434
  const a = i.dataset.value, n = this.selectedOptions.get(a);
1999
- n && this.deselectOption(n);
2435
+ n && this.interactiveDeselect(n);
2000
2436
  return;
2001
2437
  }
2002
2438
  if (e.target.closest(".ms__badge--more") && !e.target.closest(".ms__badge-remove")) {
2003
- 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();
2004
2440
  return;
2005
2441
  }
2006
2442
  }
@@ -2010,14 +2446,14 @@ class xs {
2010
2446
  if (this.showSelectedPopover && !t.some(
2011
2447
  (a) => a instanceof Node && (this.selectedPopover.contains(a) || this.counter.contains(a) || a.closest && a.closest('[data-action="show-selected"]'))
2012
2448
  )) {
2013
- 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();
2014
2450
  return;
2015
2451
  }
2016
2452
  if (!this.isOpen) return;
2017
2453
  const s = t.some(
2018
2454
  (r) => r instanceof Node && (this.element.contains(r) || this.dropdown.contains(r) || this.hint && this.hint.contains(r))
2019
2455
  );
2020
- S.debug(`[${this.instanceId}] handleClickOutside`, {
2456
+ L.debug(`[${this.instanceId}] handleClickOutside`, {
2021
2457
  target: e.target.className,
2022
2458
  targetTag: e.target.tagName,
2023
2459
  clickedInside: s,
@@ -2026,45 +2462,61 @@ class xs {
2026
2462
  elementContains: t.some((r) => r instanceof Node && this.element.contains(r)),
2027
2463
  dropdownContains: t.some((r) => r instanceof Node && this.dropdown.contains(r)),
2028
2464
  isConnected: this.dropdown.isConnected
2029
- }), 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());
2030
2466
  }
2031
2467
  /**
2032
2468
  * Move focus by computing a new index from (current, total).
2033
2469
  * Returning -1 from `compute` is a no-op (used for empty list / no match).
2034
2470
  */
2035
- focusBy(e) {
2036
- const t = this.filteredOptions.length;
2037
- if (t === 0) return;
2038
- const s = e(this.focusedIndex, t);
2039
- 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;
2040
2492
  }
2041
2493
  focusNext() {
2042
- this.focusBy((e, t) => Math.min(t - 1, e + 1));
2494
+ this.focusBy((e, t) => Math.min(t - 1, e + 1), 1);
2043
2495
  }
2044
2496
  focusPrevious() {
2045
- this.focusBy((e) => Math.max(0, e - 1));
2497
+ this.focusBy((e) => Math.max(0, e - 1), -1);
2046
2498
  }
2047
2499
  focusFirst() {
2048
- this.focusBy(() => 0);
2500
+ this.focusBy(() => 0, 1);
2049
2501
  }
2050
2502
  focusLast() {
2051
- this.focusBy((e, t) => t - 1);
2503
+ this.focusBy((e, t) => t - 1, -1);
2052
2504
  }
2053
2505
  focusPageUp() {
2054
- this.focusBy((e) => Math.max(0, e - 10));
2506
+ this.focusBy((e) => Math.max(0, e - 10), -1);
2055
2507
  }
2056
2508
  focusPageDown() {
2057
- this.focusBy((e, t) => Math.min(t - 1, e + 10));
2509
+ this.focusBy((e, t) => Math.min(t - 1, e + 10), 1);
2058
2510
  }
2059
2511
  focusNextMatch() {
2060
2512
  if (this.matchingIndices.size === 0) return;
2061
2513
  const e = Array.from(this.matchingIndices).sort((i, r) => i - r), t = e.findIndex((i) => i === this.focusedIndex), s = (t + 1) % e.length;
2062
- 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})`);
2063
2515
  }
2064
2516
  focusPreviousMatch() {
2065
2517
  if (this.matchingIndices.size === 0) return;
2066
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;
2067
- 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})`);
2068
2520
  }
2069
2521
  scrollToFocused() {
2070
2522
  if (this.virtualScroll && this.focusedIndex >= 0)
@@ -2076,24 +2528,52 @@ class xs {
2076
2528
  }
2077
2529
  toggleOption(e) {
2078
2530
  if (this.getItemDisabled(e)) {
2079
- S.debug(`[${this.instanceId}] toggleOption ignored — option is disabled`);
2531
+ L.debug(`[${this.instanceId}] toggleOption ignored — option is disabled`);
2080
2532
  return;
2081
2533
  }
2082
- const t = this.getItemValue(e), s = String(t);
2083
- if (S.debug(`[${this.instanceId}] toggleOption called`, { value: t, multiple: this.options.isMultipleEnabled }), !this.options.isMultipleEnabled) {
2084
- this.selectedValues.has(s) ? (S.debug(`[${this.instanceId}] Deselecting option in single-select mode`, { value: t }), this.deselectOption(e)) : (S.debug(`[${this.instanceId}] Clearing previous selections and selecting new option`, { value: t }), this.selectedValues.clear(), this.selectedOptions.clear(), this.selectOption(e)), this.close();
2534
+ if (!this.isOptionSelectable(e)) {
2535
+ L.debug(`[${this.instanceId}] toggleOption ignored node is not selectable`);
2085
2536
  return;
2086
2537
  }
2087
- this.selectedValues.has(s) ? (S.debug(`[${this.instanceId}] Deselecting option`, { value: t }), this.deselectOption(e)) : (S.debug(`[${this.instanceId}] Selecting option`, { value: t }), this.selectOption(e)), this.options.isCloseOnSelect && this.close();
2538
+ const t = this.getItemValue(e), s = String(t);
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());
2547
+ }
2548
+ /**
2549
+ * The single funnel for an interactive (user-initiated) selection. Consults
2550
+ * `beforeSelectCallback` and only mutates state if allowed, so the veto can
2551
+ * never be bypassed by a new UI entry point. Programmatic `setSelected` and
2552
+ * the Select-All button deliberately do not route through here.
2553
+ * Returns true if the option was selected, false if the veto blocked it.
2554
+ */
2555
+ interactiveSelect(e) {
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);
2557
+ }
2558
+ /**
2559
+ * The single funnel for an interactive (user-initiated) deselection. Every
2560
+ * removal affordance — dropdown toggle, badge × button, selected-items
2561
+ * popover × button, and the "remove hidden" badge — routes through here so
2562
+ * the `beforeDeselectCallback` veto applies uniformly. Programmatic
2563
+ * `setSelected` and the Clear-All button deliberately bypass it.
2564
+ * Returns true if the option was deselected, false if the veto blocked it.
2565
+ */
2566
+ interactiveDeselect(e) {
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);
2088
2568
  }
2089
2569
  async handleAddNew(e) {
2090
2570
  if (this.options.addNewCallback)
2091
2571
  try {
2092
- x.debug(`[${this.instanceId}] Adding new option:`, e);
2572
+ O.debug(`[${this.instanceId}] Adding new option:`, e);
2093
2573
  const t = await this.options.addNewCallback(e);
2094
2574
  this.allOptions.push(t), this.filteredOptions.push(t), this.selectOption(t), this.input.value = "", this.renderDropdown(), this.renderBadges(), this.options.isCloseOnSelect && this.close();
2095
2575
  } catch (t) {
2096
- x.error(`[${this.instanceId}] Error adding new option:`, t);
2576
+ O.error(`[${this.instanceId}] Error adding new option:`, t);
2097
2577
  }
2098
2578
  }
2099
2579
  selectOption(e) {
@@ -2106,10 +2586,10 @@ class xs {
2106
2586
  }
2107
2587
  selectAll() {
2108
2588
  const e = [];
2109
- this.filteredOptions.forEach((t) => {
2110
- if (this.getItemDisabled(t)) return;
2111
- const s = String(this.getItemValue(t));
2112
- 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));
2113
2593
  }), this.commit({ added: e });
2114
2594
  }
2115
2595
  clearAll() {
@@ -2119,18 +2599,18 @@ class xs {
2119
2599
  /**
2120
2600
  * Re-render and fire callbacks after a selection state change.
2121
2601
  * `added` / `removed` drive per-item select/deselect callbacks.
2122
- * `changeCallback` fires once if anything actually changed.
2602
+ * `onChange` fires once if anything actually changed.
2123
2603
  */
2124
2604
  commit(e) {
2125
2605
  this.renderDropdown(), this.renderBadges(), this.updateHiddenInput();
2126
2606
  const t = e.added ?? [], s = e.removed ?? [];
2127
- this.options.selectCallback && t.forEach((i) => this.options.selectCallback(i)), this.options.deselectCallback && s.forEach((i) => this.options.deselectCallback(i)), (t.length > 0 || s.length > 0) && this.options.changeCallback && this.options.changeCallback(this.getSelected());
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());
2128
2608
  }
2129
2609
  open() {
2130
- 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.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()));
2131
2611
  }
2132
2612
  close() {
2133
- 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.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`));
2134
2614
  }
2135
2615
  /**
2136
2616
  * Anchor a floating panel (dropdown or selected-items popover) below/above the input with
@@ -2141,24 +2621,24 @@ class xs {
2141
2621
  */
2142
2622
  anchorFloatingPanel(e, t) {
2143
2623
  const s = {
2144
- ...ot,
2145
- getOffsetParent: () => ks(this.input)
2624
+ ...dt,
2625
+ getOffsetParent: () => Es(this.input)
2146
2626
  };
2147
- return _e(this.input, e, () => {
2627
+ return Ce(this.input, e, () => {
2148
2628
  var l;
2149
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);
2150
2630
  const i = ((l = t.isLocked) == null ? void 0 : l.call(t)) ?? !0, r = t.getPlacement(), a = i && r ? r : "bottom-start", n = [
2151
- ke(4),
2152
- ...i && r ? [] : [rt()],
2153
- ye({ padding: 8 })
2631
+ Se(4),
2632
+ ...i && r ? [] : [mt()],
2633
+ Te({ padding: 8 })
2154
2634
  ];
2155
- we(this.input, e, { placement: a, strategy: "fixed", middleware: n, platform: s }).then(({ x: c, y: h, placement: p }) => {
2635
+ Ie(this.input, e, { placement: a, strategy: "fixed", middleware: n, platform: s }).then(({ x: d, y: c, placement: m }) => {
2156
2636
  var u;
2157
- r || t.setPlacement(p), Object.assign(e.style, {
2637
+ r || t.setPlacement(m), Object.assign(e.style, {
2158
2638
  position: "fixed",
2159
- left: `${c}px`,
2160
- top: `${h}px`
2161
- }), this.verifyPanelLanded(e, c, h), (u = t.afterPosition) == null || u.call(t);
2639
+ left: `${d}px`,
2640
+ top: `${c}px`
2641
+ }), this.verifyPanelLanded(e, d, c), (u = t.afterPosition) == null || u.call(t);
2162
2642
  });
2163
2643
  });
2164
2644
  }
@@ -2178,16 +2658,16 @@ class xs {
2178
2658
  const i = e.getBoundingClientRect(), r = i.x - t, a = i.y - s;
2179
2659
  if (Math.abs(r) < 1 && Math.abs(a) < 1) return;
2180
2660
  this.positioningDriftWarned = !0;
2181
- const n = ys(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)", c = n ? ws(n) : "";
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) : "";
2182
2662
  console.warn(
2183
- `[@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}` + (c ? ` (has ${c})` : "") + ".\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."
2184
2664
  );
2185
2665
  }
2186
2666
  positionDropdown() {
2187
2667
  this.dropdownCleanup = this.anchorFloatingPanel(this.dropdown, {
2188
2668
  getPlacement: () => this.dropdownPlacement,
2189
2669
  setPlacement: (e) => {
2190
- this.dropdownPlacement = e, P.debug(`[${this.instanceId}] Locked dropdown placement:`, e);
2670
+ this.dropdownPlacement = e, R.debug(`[${this.instanceId}] Locked dropdown placement:`, e);
2191
2671
  },
2192
2672
  isLocked: () => !!this.options.isPlacementLocked,
2193
2673
  applyMaxWidth: !0,
@@ -2197,18 +2677,18 @@ class xs {
2197
2677
  });
2198
2678
  }
2199
2679
  positionHint() {
2200
- this.hint && (this.hintCleanup && this.hintCleanup(), this.hintCleanup = _e(
2680
+ this.hint && (this.hintCleanup && this.hintCleanup(), this.hintCleanup = Ce(
2201
2681
  this.input,
2202
2682
  this.hint,
2203
2683
  () => {
2204
2684
  let e = "top-start";
2205
- this.dropdownPlacement && (this.dropdownPlacement.startsWith("bottom") ? e = this.dropdownPlacement.replace("bottom", "top") : this.dropdownPlacement.startsWith("top") && (e = this.dropdownPlacement.replace("top", "bottom"))), we(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, {
2206
2686
  placement: e,
2207
2687
  strategy: "fixed",
2208
2688
  middleware: [
2209
- ke(4),
2689
+ Se(4),
2210
2690
  // Don't use flip() - we want hint to stay opposite of dropdown
2211
- ye({ padding: 8 })
2691
+ Te({ padding: 8 })
2212
2692
  ]
2213
2693
  }).then(({ x: t, y: s }) => {
2214
2694
  Object.assign(this.hint.style, {
@@ -2228,7 +2708,7 @@ class xs {
2228
2708
  this.selectedValues.add(String(s));
2229
2709
  }), this.reconcileSelectedOptions(), this.renderBadges();
2230
2710
  } catch (t) {
2231
- x.error(`[${this.instanceId}] Failed to parse initial values:`, t);
2711
+ O.error(`[${this.instanceId}] Failed to parse initial values:`, t);
2232
2712
  }
2233
2713
  }
2234
2714
  /**
@@ -2250,13 +2730,13 @@ class xs {
2250
2730
  this.showSelectedPopover ? this.hideSelectedPopover() : this.showPopover();
2251
2731
  }
2252
2732
  showPopover() {
2253
- 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");
2254
2734
  const e = this.options.virtualScrollThreshold ?? 100;
2255
2735
  this.selectedValues.size >= e && this.selectedPopover.classList.add("ms__selected-popover--virtual"), this.positionSelectedPopover();
2256
2736
  }
2257
2737
  hideSelectedPopover() {
2258
2738
  var e;
2259
- 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);
2260
2740
  for (const t of Array.from(this.tooltips.keys()))
2261
2741
  t.startsWith("popover-") && ((e = this.tooltips.get(t)) == null || e.destroy(), this.tooltips.delete(t));
2262
2742
  }
@@ -2293,7 +2773,7 @@ class xs {
2293
2773
  if (!this.selectedPopoverContainer) return;
2294
2774
  const r = (this.options.badgeHeight ?? 36) + 4, a = this.options.virtualScrollBuffer ?? 10;
2295
2775
  requestAnimationFrame(() => {
2296
- 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({
2297
2777
  container: this.selectedPopoverContainer,
2298
2778
  itemHeight: r,
2299
2779
  items: e,
@@ -2319,18 +2799,18 @@ class xs {
2319
2799
  let i;
2320
2800
  const r = t.isInPopover ? this.options.renderSelectedItemContentCallback : void 0;
2321
2801
  if (r) {
2322
- const c = r(e);
2323
- i = typeof c == "string" ? c : c.outerHTML;
2802
+ const d = r(e);
2803
+ i = typeof d == "string" ? d : d.outerHTML;
2324
2804
  } else if (this.options.renderBadgeContentCallback) {
2325
- const c = this.options.renderBadgeContentCallback(e, t);
2326
- i = typeof c == "string" ? c : c.outerHTML;
2805
+ const d = this.options.renderBadgeContentCallback(e, t);
2806
+ i = typeof d == "string" ? d : d.outerHTML;
2327
2807
  } else
2328
2808
  i = this.getItemBadgeDisplayValue(e);
2329
2809
  const a = t.isInPopover ? this.options.getSelectedItemClassCallback || this.options.getBadgeClassCallback : this.options.getBadgeClassCallback;
2330
2810
  let n = "ms__badge";
2331
2811
  if (a) {
2332
- const c = a(e), h = Array.isArray(c) ? c : [c];
2333
- n += " " + h.filter((p) => p).join(" ");
2812
+ const d = a(e), c = Array.isArray(d) ? d : [d];
2813
+ n += " " + c.filter((m) => m).join(" ");
2334
2814
  }
2335
2815
  const l = this.getItemBadgeDisplayValue(e);
2336
2816
  return `
@@ -2349,14 +2829,14 @@ class xs {
2349
2829
  if (s) {
2350
2830
  e.preventDefault();
2351
2831
  const i = s.dataset.value, r = this.selectedOptions.get(i);
2352
- r && (this.deselectOption(r), this.renderSelectedPopover(), this.selectedValues.size === 0 && this.hideSelectedPopover());
2832
+ r && this.interactiveDeselect(r) && (this.renderSelectedPopover(), this.selectedValues.size === 0 && this.hideSelectedPopover());
2353
2833
  }
2354
2834
  }
2355
2835
  positionSelectedPopover() {
2356
2836
  this.selectedPopoverCleanup = this.anchorFloatingPanel(this.selectedPopover, {
2357
2837
  getPlacement: () => this.selectedPopoverPlacement,
2358
2838
  setPlacement: (e) => {
2359
- this.selectedPopoverPlacement = e, P.debug(`[${this.instanceId}] Locked popover placement:`, e);
2839
+ this.selectedPopoverPlacement = e, R.debug(`[${this.instanceId}] Locked popover placement:`, e);
2360
2840
  }
2361
2841
  });
2362
2842
  }
@@ -2407,13 +2887,15 @@ class xs {
2407
2887
  updateOptions(e) {
2408
2888
  const t = !!this.hint, s = "searchHint" in e ? !!e.searchHint : t;
2409
2889
  if (t !== s) return !1;
2410
- 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(
2411
2893
  "ms--no-checkboxes",
2412
2894
  !this.options.isCheckboxesShown || !this.options.isMultipleEnabled
2413
2895
  ), "badgesPosition" in e) {
2414
2896
  this.effectiveBadgesPosition = this.options.badgesPosition || "bottom", this.isRTL && (this.effectiveBadgesPosition === "left" ? this.effectiveBadgesPosition = "right" : this.effectiveBadgesPosition === "right" && (this.effectiveBadgesPosition = "left"));
2415
- const i = this.element.querySelector(".ms__wrapper");
2416
- i == null || i.classList.toggle(
2897
+ const r = this.element.querySelector(".ms__wrapper");
2898
+ r == null || r.classList.toggle(
2417
2899
  "ms__wrapper--inline",
2418
2900
  this.effectiveBadgesPosition === "left" || this.effectiveBadgesPosition === "right"
2419
2901
  );
@@ -2447,13 +2929,16 @@ class xs {
2447
2929
  spawnTooltip(e) {
2448
2930
  var r;
2449
2931
  (r = this.tooltips.get(e.id)) == null || r.destroy();
2450
- 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({
2451
2933
  trigger: e.trigger,
2452
2934
  container: this.options.container ?? s ?? document.body,
2453
2935
  content: e.content,
2454
- placement: this.options.badgeTooltipPlacement || "top",
2455
- offsetDistance: this.options.badgeTooltipOffset ?? 8,
2456
- showDelay: this.options.badgeTooltipDelay ?? 100,
2936
+ placement: e.placement ?? this.options.badgeTooltipPlacement ?? "top",
2937
+ offsetDistance: e.offsetDistance ?? this.options.badgeTooltipOffset ?? 8,
2938
+ showDelay: e.showDelay ?? this.options.badgeTooltipDelay ?? 100,
2939
+ cssClass: e.cssClass,
2940
+ visibleClass: e.visibleClass,
2941
+ followCursor: e.followCursor,
2457
2942
  onBeforeShow: e.onBeforeShow
2458
2943
  });
2459
2944
  this.tooltips.set(e.id, i);
@@ -2478,43 +2963,88 @@ ${s}` : t;
2478
2963
  if (s.querySelectorAll(".ms__badge:not(.ms__badge--more)").forEach((a) => {
2479
2964
  const n = a.querySelector(".ms__badge-remove");
2480
2965
  if (!n) return;
2481
- const l = n.dataset.value, c = this.selectedOptions.get(l);
2482
- if (!c) return;
2483
- const h = `${i}${l}`, p = `${i}${l}-remove`, u = a.querySelector(".ms__badge-text");
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");
2484
2969
  u && this.spawnTooltip({
2485
- id: h,
2970
+ id: c,
2486
2971
  trigger: u,
2487
- content: this.buildBadgeTooltipContent(c)
2972
+ content: this.buildBadgeTooltipContent(d)
2488
2973
  });
2489
- const m = this.getItemBadgeDisplayValue(c);
2974
+ const p = this.getItemBadgeDisplayValue(d);
2490
2975
  this.spawnTooltip({
2491
- id: p,
2976
+ id: m,
2492
2977
  trigger: n,
2493
- content: this.buildRemoveButtonTooltipText(m, c),
2978
+ content: this.buildRemoveButtonTooltipText(p, d),
2494
2979
  // Keep parent badge tooltip from overlapping the remove-button tooltip.
2495
2980
  onBeforeShow: () => {
2496
2981
  var b;
2497
- return (b = this.tooltips.get(h)) == null ? void 0 : b.hideImmediate();
2982
+ return (b = this.tooltips.get(c)) == null ? void 0 : b.hideImmediate();
2498
2983
  }
2499
2984
  });
2500
2985
  }), !t) {
2501
2986
  const a = this.badgesContainer.querySelector(".ms__badge--more"), n = a == null ? void 0 : a.querySelector(".ms__badge-remove");
2502
2987
  if (n && n.dataset.action === "remove-hidden") {
2503
- const l = this.options.badgesMaxVisible || 3, c = this.selectedOptions.size - l;
2988
+ const l = this.options.badgesMaxVisible || 3, d = this.selectedOptions.size - l;
2504
2989
  this.spawnTooltip({
2505
2990
  id: "more-badge-remove",
2506
2991
  trigger: n,
2507
- content: this.buildRemoveButtonTooltipText(`${c} hidden items`)
2992
+ content: this.buildRemoveButtonTooltipText(`${d} hidden items`)
2508
2993
  });
2509
2994
  }
2510
2995
  }
2511
2996
  }
2997
+ /** Build the option tooltip content (callback overrides; default = displayValue + optional subtitle on next line). */
2998
+ buildOptionTooltipContent(e) {
2999
+ if (this.options.getOptionTooltipCallback) return this.options.getOptionTooltipCallback(e);
3000
+ const t = this.getItemDisplayValue(e), s = this.getItemSubtitle(e);
3001
+ return s ? `${t}
3002
+ ${s}` : t;
3003
+ }
3004
+ /**
3005
+ * Attach hover tooltips to the currently rendered dropdown options. Prunes existing option
3006
+ * tooltips first, so it's safe to call on every render and on every virtual-scroll range change
3007
+ * (where option DOM is recycled). Each option resolves its source object via `data-index` into
3008
+ * `filteredOptions`, the same global index `renderOption` was given.
3009
+ */
3010
+ attachOptionTooltips() {
3011
+ if (this.destroyAllOptionTooltips(), !this.options.isOptionTooltipsEnabled) return;
3012
+ this.dropdown.querySelectorAll(".ms__option").forEach((t) => {
3013
+ const s = t, i = parseInt(s.dataset.index ?? "-1", 10);
3014
+ if (i < 0) return;
3015
+ const r = this.filteredOptions[i];
3016
+ if (!r) return;
3017
+ const a = this.buildOptionTooltipContent(r);
3018
+ a && this.spawnTooltip({
3019
+ id: `option-${i}`,
3020
+ trigger: s,
3021
+ content: a,
3022
+ // Default to `top-start` (anchored to the row's start edge) so the tooltip doesn't
3023
+ // center on a full-width row. Falls through to the badge settings for delay/offset.
3024
+ placement: this.options.optionTooltipPlacement ?? "top-start",
3025
+ offsetDistance: this.options.optionTooltipOffset ?? this.options.badgeTooltipOffset ?? 8,
3026
+ showDelay: this.options.optionTooltipDelay ?? this.options.badgeTooltipDelay ?? 100,
3027
+ cssClass: "ms__option-tooltip",
3028
+ visibleClass: "ms__option-tooltip--visible",
3029
+ followCursor: this.options.isOptionTooltipFollowCursor
3030
+ });
3031
+ });
3032
+ }
3033
+ /**
3034
+ * Destroy only the option tooltips (prefixed `option-`). Called before re-rendering or
3035
+ * recycling the options list so per-option tooltip state doesn't leak.
3036
+ */
3037
+ destroyAllOptionTooltips() {
3038
+ var e;
3039
+ for (const t of Array.from(this.tooltips.keys()))
3040
+ t.startsWith("option-") && ((e = this.tooltips.get(t)) == null || e.destroy(), this.tooltips.delete(t));
3041
+ }
2512
3042
  attachActionButtonTooltips() {
2513
3043
  this.dropdown.querySelectorAll(".ms__action-btn").forEach((t) => {
2514
- var c, h;
3044
+ var d, c;
2515
3045
  const s = t, i = s.dataset.action;
2516
3046
  if (!i) return;
2517
- const r = parseInt(s.dataset.buttonIndex || "-1"), a = r >= 0 ? (c = this.options.actionButtons) == null ? void 0 : c[r] : (h = this.options.actionButtons) == null ? void 0 : h.find((p) => p.action === i);
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);
2518
3048
  if (!a) return;
2519
3049
  const n = a.getTooltipCallback ? a.getTooltipCallback(this) : a.tooltip;
2520
3050
  if (!n) return;
@@ -2545,11 +3075,11 @@ ${s}` : t;
2545
3075
  // PUBLIC API
2546
3076
  // ========================================================================
2547
3077
  destroy() {
2548
- 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`);
2549
3079
  }
2550
3080
  }
2551
- 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-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));--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-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-wrap:nowrap;gap:var(--ms-actions-gap);padding:var(--ms-actions-padding);border-bottom:var(--ms-actions-border-bottom)}.ms__actions--wrap{flex-wrap:wrap}.ms__actions--sticky{position:sticky;top:0;z-index:var(--ms-z-index-sticky);background:var(--ms-actions-bg)}.ms__action-btn{flex:1;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__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{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;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 {
2552
- }, 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 = [
2553
3083
  // Strings
2554
3084
  { attr: "search-hint", key: "searchHint", parser: "string-or-undefined" },
2555
3085
  { attr: "search-placeholder", key: "searchPlaceholder", parser: "string", default: "Search..." },
@@ -2568,8 +3098,30 @@ const Cs = `@layer variables,component,overrides;@layer variables{:host{display:
2568
3098
  { attr: "search-value-member", key: "searchValueMember", parser: "string-or-undefined" },
2569
3099
  { attr: "icon-member", key: "iconMember", parser: "string-or-undefined" },
2570
3100
  { attr: "subtitle-member", key: "subtitleMember", parser: "string-or-undefined" },
3101
+ { attr: "full-title-member", key: "fullTitleMember", parser: "string-or-undefined" },
2571
3102
  { attr: "group-member", key: "groupMember", parser: "string-or-undefined" },
2572
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
+ },
2573
3125
  // Enums
2574
3126
  {
2575
3127
  attr: "badges-display-mode",
@@ -2613,6 +3165,20 @@ const Cs = `@layer variables,component,overrides;@layer variables{:host{display:
2613
3165
  enumValues: ["nowrap", "wrap"],
2614
3166
  default: "nowrap"
2615
3167
  },
3168
+ {
3169
+ attr: "actions-position",
3170
+ key: "actionsPosition",
3171
+ parser: "enum",
3172
+ enumValues: ["top", "bottom"],
3173
+ default: "top"
3174
+ },
3175
+ {
3176
+ attr: "actions-align",
3177
+ key: "actionsAlign",
3178
+ parser: "enum",
3179
+ enumValues: ["stretch", "left", "right", "center", "space-between"],
3180
+ default: "stretch"
3181
+ },
2616
3182
  {
2617
3183
  attr: "checkbox-align",
2618
3184
  key: "checkboxAlign",
@@ -2634,6 +3200,13 @@ const Cs = `@layer variables,component,overrides;@layer variables{:host{display:
2634
3200
  enumValues: ["top", "top-start", "top-end", "bottom", "bottom-start", "bottom-end", "left", "left-start", "left-end", "right", "right-start", "right-end"],
2635
3201
  default: "top"
2636
3202
  },
3203
+ {
3204
+ attr: "option-tooltip-placement",
3205
+ key: "optionTooltipPlacement",
3206
+ parser: "enum",
3207
+ enumValues: ["top", "top-start", "top-end", "bottom", "bottom-start", "bottom-end", "left", "left-start", "left-end", "right", "right-start", "right-end"],
3208
+ default: "top-start"
3209
+ },
2637
3210
  // Numbers
2638
3211
  { attr: "badges-threshold", key: "badgesThreshold", parser: "int" },
2639
3212
  { attr: "badges-max-visible", key: "badgesMaxVisible", parser: "int" },
@@ -2645,6 +3218,8 @@ const Cs = `@layer variables,component,overrides;@layer variables{:host{display:
2645
3218
  { attr: "virtual-scroll-buffer", key: "virtualScrollBuffer", parser: "int", default: 10 },
2646
3219
  { attr: "badge-tooltip-delay", key: "badgeTooltipDelay", parser: "int", default: 100 },
2647
3220
  { attr: "badge-tooltip-offset", key: "badgeTooltipOffset", parser: "int", default: 8 },
3221
+ { attr: "option-tooltip-delay", key: "optionTooltipDelay", parser: "int" },
3222
+ { attr: "option-tooltip-offset", key: "optionTooltipOffset", parser: "int" },
2648
3223
  // Booleans (default true: presence/empty = true; only 'false' negates)
2649
3224
  { attr: "multiple", key: "isMultipleEnabled", parser: "bool-default-true" },
2650
3225
  { attr: "allow-groups", key: "isGroupsAllowed", parser: "bool-default-true" },
@@ -2658,9 +3233,12 @@ const Cs = `@layer variables,component,overrides;@layer variables{:host{display:
2658
3233
  { attr: "close-on-select", key: "isCloseOnSelect", parser: "bool-default-false" },
2659
3234
  { attr: "allow-add-new", key: "isAddNewAllowed", parser: "bool-default-false" },
2660
3235
  { attr: "show-counter", key: "isCounterShown", parser: "bool-default-false" },
3236
+ { attr: "show-badge-full-title", key: "isBadgeFullTitleShown", parser: "bool-default-false" },
2661
3237
  { attr: "enable-virtual-scroll", key: "isVirtualScrollEnabled", parser: "bool-default-false" },
2662
- { attr: "enable-badge-tooltips", key: "isBadgeTooltipsEnabled", parser: "bool-default-false" }
2663
- ], Ts = new Map(Ce.map((o) => [o.attr, o])), je = [
3238
+ { attr: "enable-badge-tooltips", key: "isBadgeTooltipsEnabled", parser: "bool-default-false" },
3239
+ { attr: "enable-option-tooltips", key: "isOptionTooltipsEnabled", parser: "bool-default-false" },
3240
+ { attr: "option-tooltip-follow-cursor", key: "isOptionTooltipFollowCursor", parser: "bool-default-false" }
3241
+ ], Rs = new Map(Oe.map((o) => [o.attr, o])), Je = [
2664
3242
  { key: "valueMember", field: "_valueMember" },
2665
3243
  { key: "displayValueMember", field: "_displayValueMember" },
2666
3244
  { key: "searchValueMember", field: "_searchValueMember" },
@@ -2668,7 +3246,7 @@ const Cs = `@layer variables,component,overrides;@layer variables{:host{display:
2668
3246
  { key: "subtitleMember", field: "_subtitleMember" },
2669
3247
  { key: "groupMember", field: "_groupMember" },
2670
3248
  { key: "disabledMember", field: "_disabledMember" }
2671
- ], Is = [
3249
+ ], Fs = [
2672
3250
  { key: "valueMember", member: "value" },
2673
3251
  { key: "displayValueMember", member: "label" },
2674
3252
  { key: "groupMember", member: "group" },
@@ -2676,7 +3254,7 @@ const Cs = `@layer variables,component,overrides;@layer variables{:host{display:
2676
3254
  { key: "subtitleMember", member: "subtitle" },
2677
3255
  { key: "disabledMember", member: "disabled" }
2678
3256
  ];
2679
- function Ue(o, e) {
3257
+ function Ze(o, e) {
2680
3258
  if (e === null || e === "")
2681
3259
  switch (o.parser) {
2682
3260
  case "bool-default-true":
@@ -2702,80 +3280,88 @@ function Ue(o, e) {
2702
3280
  return e === "true";
2703
3281
  }
2704
3282
  }
2705
- const Se = /* @__PURE__ */ new Set();
2706
- function ct() {
2707
- return Array.from(Se);
3283
+ const Ae = /* @__PURE__ */ new Set();
3284
+ function gt() {
3285
+ return Array.from(Ae);
2708
3286
  }
2709
- class Le extends Ss {
3287
+ class ze extends $s {
2710
3288
  constructor() {
2711
3289
  super();
2712
- d(this, "picker");
2713
- d(this, "containerElement");
2714
- d(this, "shadow");
2715
- d(this, "internals");
3290
+ h(this, "picker");
3291
+ h(this, "containerElement");
3292
+ h(this, "shadow");
3293
+ h(this, "internals");
2716
3294
  // Properties for complex data (not attributes)
2717
- d(this, "_options");
2718
- d(this, "_hasDeclarativeOptions", !1);
3295
+ h(this, "_options");
3296
+ h(this, "_hasDeclarativeOptions", !1);
2719
3297
  // Member/Callback properties
2720
- d(this, "_valueMember");
2721
- d(this, "_getValueCallback");
2722
- d(this, "_displayValueMember");
2723
- d(this, "_getDisplayValueCallback");
2724
- d(this, "_getBadgeDisplayCallback");
2725
- d(this, "_getBadgeClassCallback");
2726
- d(this, "_customStylesCallback");
2727
- d(this, "_searchValueMember");
2728
- d(this, "_getSearchValueCallback");
2729
- d(this, "_iconMember");
2730
- d(this, "_getIconCallback");
2731
- d(this, "_subtitleMember");
2732
- d(this, "_getSubtitleCallback");
2733
- d(this, "_groupMember");
2734
- d(this, "_getGroupCallback");
2735
- d(this, "_renderGroupLabelContentCallback");
2736
- d(this, "_disabledMember");
2737
- 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");
2738
3321
  // Value formatting callbacks
2739
- d(this, "_getValueFormatCallback");
3322
+ h(this, "_getValueFormatCallback");
2740
3323
  // Tooltip callbacks
2741
- d(this, "_getBadgeTooltipCallback");
2742
- d(this, "_getRemoveButtonTooltipCallback");
3324
+ h(this, "_getBadgeTooltipCallback");
3325
+ h(this, "_getOptionTooltipCallback");
3326
+ h(this, "_getRemoveButtonTooltipCallback");
2743
3327
  // Custom rendering callbacks
2744
- d(this, "_renderOptionContentCallback");
2745
- d(this, "_renderBadgeContentCallback");
2746
- d(this, "_renderSelectedItemContentCallback");
2747
- d(this, "_getSelectedItemClassCallback");
2748
- d(this, "_renderSelectedContentCallback");
3328
+ h(this, "_renderOptionContentCallback");
3329
+ h(this, "_renderBadgeContentCallback");
3330
+ h(this, "_renderSelectedItemContentCallback");
3331
+ h(this, "_getSelectedItemClassCallback");
3332
+ h(this, "_renderSelectedContentCallback");
2749
3333
  // Count badge callback
2750
- d(this, "_getCounterCallback");
3334
+ h(this, "_getCounterCallback");
2751
3335
  // Action buttons
2752
- d(this, "_actionButtons");
3336
+ h(this, "_actionButtons");
2753
3337
  // Batch-update state (setAttributes): collects per-attribute changes so a group of
2754
3338
  // attribute writes applies as a single in-place update instead of one re-render each.
2755
- d(this, "_batchDepth", 0);
2756
- d(this, "_batchPartial", {});
2757
- d(this, "_batchNeedsReinit", !1);
3339
+ h(this, "_batchDepth", 0);
3340
+ h(this, "_batchPartial", {});
3341
+ h(this, "_batchNeedsReinit", !1);
2758
3342
  // Event callbacks
2759
- d(this, "_beforeSearchCallback");
2760
- d(this, "_searchCallback");
2761
- d(this, "_addNewCallback");
2762
- d(this, "_selectCallback");
2763
- d(this, "_deselectCallback");
2764
- d(this, "_changeCallback");
2765
- 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");
2766
3352
  if (this.shadow = this.attachShadow({ mode: "open" }), typeof this.attachInternals == "function")
2767
3353
  try {
2768
3354
  this.internals = this.attachInternals();
2769
3355
  } catch {
2770
3356
  }
2771
3357
  const t = document.createElement("style");
2772
- t.textContent = Cs, this.shadow.appendChild(t), requestAnimationFrame(() => {
3358
+ t.textContent = Bs, this.shadow.appendChild(t), requestAnimationFrame(() => {
2773
3359
  this.setAttribute("data-ready", "");
2774
3360
  });
2775
3361
  }
2776
3362
  static get observedAttributes() {
2777
3363
  return [
2778
- ...Ce.map((t) => t.attr),
3364
+ ...Oe.map((t) => t.attr),
2779
3365
  // Out-of-table attributes (handled by special-case logic in attributeChangedCallback)
2780
3366
  "initial-values",
2781
3367
  "show-debug-info"
@@ -2793,12 +3379,12 @@ class Le extends Ss {
2793
3379
  (t = this.picker) == null || t.clearAll();
2794
3380
  }
2795
3381
  connectedCallback() {
2796
- Se.add(this), this.render();
3382
+ Ae.add(this), this.render();
2797
3383
  const t = this.parseDeclarativeOptions();
2798
- 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();
2799
3385
  }
2800
3386
  disconnectedCallback() {
2801
- Se.delete(this), this.picker && this.picker.destroy();
3387
+ Ae.delete(this), this.picker && this.picker.destroy();
2802
3388
  }
2803
3389
  attributeChangedCallback(t, s, i) {
2804
3390
  var a;
@@ -2808,15 +3394,15 @@ class Le extends Ss {
2808
3394
  n && n.remove(), i === "true" && this.renderDebugInfo();
2809
3395
  return;
2810
3396
  }
2811
- const r = Ts.get(t);
3397
+ const r = Rs.get(t);
2812
3398
  if (r) {
2813
- const n = Ue(r, i), l = (a = je.find((u) => u.key === r.key)) == null ? void 0 : a.field, c = n === void 0 && l ? this[l] : n;
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;
2814
3400
  if (this._batchDepth > 0) {
2815
- this._batchPartial[r.key] = c;
3401
+ this._batchPartial[r.key] = d;
2816
3402
  return;
2817
3403
  }
2818
- const h = { [r.key]: c };
2819
- if (this.picker.updateOptions(h)) return;
3404
+ const c = { [r.key]: d };
3405
+ if (this.picker.updateOptions(c)) return;
2820
3406
  }
2821
3407
  if (this._batchDepth > 0) {
2822
3408
  this._batchNeedsReinit = !0;
@@ -2869,19 +3455,19 @@ class Le extends Ss {
2869
3455
  a.className = "ms__debug-stats", i.appendChild(r), i.appendChild(a), s.appendChild(i), this.shadow.appendChild(s), this.updateDebugInfo();
2870
3456
  }
2871
3457
  updateDebugInfo() {
2872
- var m, b;
3458
+ var p, b;
2873
3459
  const t = this.shadow.querySelector(".ms__debug-stats");
2874
3460
  if (!t || !this.picker) return;
2875
- const s = "1.12.0-rc04", i = ct().length, a = this.picker.getSelected().length, n = ((m = this._options) == null ? void 0 : m.length) || 0, l = this.picker, c = l.isOpen || !1, h = 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;
2876
3462
  t.innerHTML = `
2877
3463
  <span>Version: ${s}</span>
2878
3464
  <span>Total Instances: ${i}</span>
2879
3465
  <span>Options: ${n}</span>
2880
3466
  <span>Filtered: ${u}</span>
2881
3467
  <span>Selected: ${a}</span>
2882
- <span>Dropdown: ${c ? "Open" : "Closed"}</span>
2883
- <span>Search: ${h || "none"}</span>
2884
- <span>Loading: ${p ? "Yes" : "No"}</span>
3468
+ <span>Dropdown: ${d ? "Open" : "Closed"}</span>
3469
+ <span>Search: ${c || "none"}</span>
3470
+ <span>Loading: ${m ? "Yes" : "No"}</span>
2885
3471
  `, setTimeout(() => {
2886
3472
  this.getAttribute("show-debug-info") === "true" && this.updateDebugInfo();
2887
3473
  }, 500);
@@ -2896,33 +3482,33 @@ class Le extends Ss {
2896
3482
  if (s.length === 0)
2897
3483
  return null;
2898
3484
  let i = !1;
2899
- for (const c of s)
2900
- if (c.tagName === "OPTION") {
2901
- const h = c, p = {
2902
- value: h.value || ((r = h.textContent) == null ? void 0 : r.trim()) || "",
2903
- label: ((a = h.textContent) == null ? void 0 : a.trim()) || h.value || ""
3485
+ for (const d of s)
3486
+ if (d.tagName === "OPTION") {
3487
+ const c = d, m = {
3488
+ value: c.value || ((r = c.textContent) == null ? void 0 : r.trim()) || "",
3489
+ label: ((a = c.textContent) == null ? void 0 : a.trim()) || c.value || ""
2904
3490
  };
2905
- h.hasAttribute("selected") && (this._declarativeSelectedValues || (this._declarativeSelectedValues = []), this._declarativeSelectedValues.push(p.value)), h.hasAttribute("disabled") && (p.disabled = !0), h.hasAttribute("data-icon") && (p.icon = h.getAttribute("data-icon")), h.hasAttribute("data-subtitle") && (p.subtitle = h.getAttribute("data-subtitle")), t.push(p), i = !0;
2906
- } else if (c.tagName === "OPTGROUP") {
2907
- const h = c, p = h.label || h.getAttribute("label") || "Group", u = Array.from(h.querySelectorAll("option"));
2908
- 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) {
2909
3495
  const b = {
2910
- value: m.value || ((n = m.textContent) == null ? void 0 : n.trim()) || "",
2911
- label: ((l = m.textContent) == null ? void 0 : l.trim()) || m.value || "",
2912
- 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
2913
3499
  };
2914
- 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;
2915
3501
  }
2916
3502
  }
2917
- return i ? (x.debug(`[MultiSelectElement] Parsed ${t.length} declarative options from Light DOM`), s.forEach((c) => {
2918
- (c.tagName === "OPTION" || c.tagName === "OPTGROUP") && c.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();
2919
3505
  }), t) : null;
2920
3506
  }
2921
3507
  /** Parse all observed attributes via ATTRIBUTE_TABLE into a partial config object. */
2922
3508
  parseAttributesFromTable() {
2923
3509
  const t = {};
2924
- for (const s of Ce) {
2925
- const i = Ue(s, this.getAttribute(s.attr));
3510
+ for (const s of Oe) {
3511
+ const i = Ze(s, this.getAttribute(s.attr));
2926
3512
  i !== void 0 && (t[s.key] = i);
2927
3513
  }
2928
3514
  return t;
@@ -2935,22 +3521,22 @@ class Le extends Ss {
2935
3521
  try {
2936
3522
  t = JSON.parse(s);
2937
3523
  } catch (a) {
2938
- x.error("[MultiSelectElement] Failed to parse data-options:", a);
3524
+ O.error("[MultiSelectElement] Failed to parse data-options:", a);
2939
3525
  }
2940
3526
  let i;
2941
3527
  if (this._declarativeSelectedValues && this._declarativeSelectedValues.length > 0)
2942
- 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`);
2943
3529
  else {
2944
3530
  const a = this.getAttribute("initial-values");
2945
3531
  if (a)
2946
3532
  try {
2947
3533
  i = JSON.parse(a);
2948
3534
  } catch (n) {
2949
- x.error("[MultiSelectElement] Failed to parse initial-values:", n);
3535
+ O.error("[MultiSelectElement] Failed to parse initial-values:", n);
2950
3536
  }
2951
3537
  }
2952
3538
  const r = this.parseAttributesFromTable();
2953
- for (const { key: a, field: n } of je)
3539
+ for (const { key: a, field: n } of Je)
2954
3540
  r[a] === void 0 && (r[a] = this[n]);
2955
3541
  if (this._hasDeclarativeOptions) {
2956
3542
  const a = {
@@ -2961,7 +3547,7 @@ class Le extends Ss {
2961
3547
  subtitleMember: this._getSubtitleCallback,
2962
3548
  disabledMember: this._getDisabledCallback
2963
3549
  };
2964
- for (const { key: n, member: l } of Is)
3550
+ for (const { key: n, member: l } of Fs)
2965
3551
  r[n] === void 0 && !a[n] && (r[n] = l);
2966
3552
  }
2967
3553
  if (Object.assign(r, {
@@ -2974,7 +3560,11 @@ class Le extends Ss {
2974
3560
  getSearchValueCallback: this._getSearchValueCallback,
2975
3561
  getIconCallback: this._getIconCallback,
2976
3562
  getSubtitleCallback: this._getSubtitleCallback,
3563
+ getFullTitleCallback: this._getFullTitleCallback,
2977
3564
  getGroupCallback: this._getGroupCallback,
3565
+ getPathCallback: this._getPathCallback,
3566
+ isTreeEnabled: this._isTreeEnabled,
3567
+ getIsSelectableCallback: this._getIsSelectableCallback,
2978
3568
  renderGroupLabelContentCallback: this._renderGroupLabelContentCallback,
2979
3569
  getDisabledCallback: this._getDisabledCallback,
2980
3570
  renderOptionContentCallback: this._renderOptionContentCallback,
@@ -2984,15 +3574,18 @@ class Le extends Ss {
2984
3574
  renderSelectedContentCallback: this._renderSelectedContentCallback,
2985
3575
  getValueFormatCallback: this._getValueFormatCallback,
2986
3576
  getBadgeTooltipCallback: this._getBadgeTooltipCallback,
3577
+ getOptionTooltipCallback: this._getOptionTooltipCallback,
2987
3578
  getRemoveButtonTooltipCallback: this._getRemoveButtonTooltipCallback,
2988
3579
  getCounterCallback: this._getCounterCallback || ((a, n) => n !== void 0 ? `+${n} more` : `${a} selected`),
2989
3580
  options: this._options ?? t,
2990
3581
  beforeSearchCallback: this._beforeSearchCallback,
3582
+ beforeSelectCallback: this._beforeSelectCallback,
3583
+ beforeDeselectCallback: this._beforeDeselectCallback,
2991
3584
  searchCallback: this._searchCallback,
2992
3585
  addNewCallback: this._addNewCallback,
2993
- selectCallback: (a) => {
3586
+ onSelect: (a) => {
2994
3587
  var n;
2995
- this._selectCallback && this._selectCallback(a), this.dispatchEvent(new CustomEvent("select", {
3588
+ this._onSelect && this._onSelect(a), this.dispatchEvent(new CustomEvent("select", {
2996
3589
  bubbles: !0,
2997
3590
  composed: !0,
2998
3591
  detail: {
@@ -3002,9 +3595,9 @@ class Le extends Ss {
3002
3595
  }
3003
3596
  }));
3004
3597
  },
3005
- deselectCallback: (a) => {
3598
+ onDeselect: (a) => {
3006
3599
  var n;
3007
- this._deselectCallback && this._deselectCallback(a), this.dispatchEvent(new CustomEvent("deselect", {
3600
+ this._onDeselect && this._onDeselect(a), this.dispatchEvent(new CustomEvent("deselect", {
3008
3601
  bubbles: !0,
3009
3602
  composed: !0,
3010
3603
  detail: {
@@ -3014,8 +3607,8 @@ class Le extends Ss {
3014
3607
  }
3015
3608
  }));
3016
3609
  },
3017
- changeCallback: (a) => {
3018
- this._changeCallback && this._changeCallback(a), this.dispatchEvent(new CustomEvent("change", {
3610
+ onChange: (a) => {
3611
+ this._onChange && this._onChange(a), this.dispatchEvent(new CustomEvent("change", {
3019
3612
  bubbles: !0,
3020
3613
  composed: !0,
3021
3614
  detail: {
@@ -3028,7 +3621,7 @@ class Le extends Ss {
3028
3621
  container: this.shadow,
3029
3622
  // Pass host element (this) for hidden inputs in light DOM
3030
3623
  hostElement: this
3031
- }), i && (this.containerElement.dataset.initialValues = JSON.stringify(i)), this.picker = new xs(this.containerElement, r), this._customStylesCallback) {
3624
+ }), i && (this.containerElement.dataset.initialValues = JSON.stringify(i)), this.picker = new zs(this.containerElement, r), this._customStylesCallback) {
3032
3625
  const a = this._customStylesCallback();
3033
3626
  if (a) {
3034
3627
  const n = document.createElement("style");
@@ -3095,6 +3688,12 @@ class Le extends Ss {
3095
3688
  get subtitleMember() {
3096
3689
  return this.getAttribute("subtitle-member");
3097
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
+ }
3098
3697
  set groupMember(t) {
3099
3698
  this._groupMember = t || void 0, t ? this.setAttribute("group-member", t) : this.removeAttribute("group-member");
3100
3699
  }
@@ -3107,6 +3706,57 @@ class Le extends Ss {
3107
3706
  get disabledMember() {
3108
3707
  return this.getAttribute("disabled-member");
3109
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
+ }
3110
3760
  // Callback properties (JavaScript only - no attributes)
3111
3761
  set getValueCallback(t) {
3112
3762
  this._getValueCallback = t, this.updatePicker({ getValueCallback: t });
@@ -3164,12 +3814,44 @@ class Le extends Ss {
3164
3814
  get getSubtitleCallback() {
3165
3815
  return this._getSubtitleCallback;
3166
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
+ }
3167
3824
  set getGroupCallback(t) {
3168
3825
  this._getGroupCallback = t, this.updatePicker({ getGroupCallback: t });
3169
3826
  }
3170
3827
  get getGroupCallback() {
3171
3828
  return this._getGroupCallback;
3172
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
+ }
3173
3855
  set renderGroupLabelContentCallback(t) {
3174
3856
  this._renderGroupLabelContentCallback = t, this.updatePicker({ renderGroupLabelContentCallback: t });
3175
3857
  }
@@ -3260,6 +3942,42 @@ class Le extends Ss {
3260
3942
  get enableBadgeTooltips() {
3261
3943
  return this.getAttribute("enable-badge-tooltips") === "true";
3262
3944
  }
3945
+ set enableOptionTooltips(t) {
3946
+ t ? this.setAttribute("enable-option-tooltips", "true") : this.removeAttribute("enable-option-tooltips");
3947
+ }
3948
+ get enableOptionTooltips() {
3949
+ return this.getAttribute("enable-option-tooltips") === "true";
3950
+ }
3951
+ set getOptionTooltipCallback(t) {
3952
+ this._getOptionTooltipCallback = t, this.updatePicker({ getOptionTooltipCallback: t });
3953
+ }
3954
+ get getOptionTooltipCallback() {
3955
+ return this._getOptionTooltipCallback;
3956
+ }
3957
+ set optionTooltipPlacement(t) {
3958
+ t ? this.setAttribute("option-tooltip-placement", t) : this.removeAttribute("option-tooltip-placement");
3959
+ }
3960
+ get optionTooltipPlacement() {
3961
+ return this.getAttribute("option-tooltip-placement");
3962
+ }
3963
+ set optionTooltipFollowCursor(t) {
3964
+ t ? this.setAttribute("option-tooltip-follow-cursor", "true") : this.removeAttribute("option-tooltip-follow-cursor");
3965
+ }
3966
+ get optionTooltipFollowCursor() {
3967
+ return this.getAttribute("option-tooltip-follow-cursor") === "true";
3968
+ }
3969
+ set actionsPosition(t) {
3970
+ t ? this.setAttribute("actions-position", t) : this.removeAttribute("actions-position");
3971
+ }
3972
+ get actionsPosition() {
3973
+ return this.getAttribute("actions-position");
3974
+ }
3975
+ set actionsAlign(t) {
3976
+ t ? this.setAttribute("actions-align", t) : this.removeAttribute("actions-align");
3977
+ }
3978
+ get actionsAlign() {
3979
+ return this.getAttribute("actions-align");
3980
+ }
3263
3981
  set badgeTooltipPlacement(t) {
3264
3982
  t ? this.setAttribute("badge-tooltip-placement", t) : this.removeAttribute("badge-tooltip-placement");
3265
3983
  }
@@ -3297,6 +4015,18 @@ class Le extends Ss {
3297
4015
  set beforeSearchCallback(t) {
3298
4016
  this._beforeSearchCallback = t, this.updatePicker({ beforeSearchCallback: t });
3299
4017
  }
4018
+ get beforeSelectCallback() {
4019
+ return this._beforeSelectCallback;
4020
+ }
4021
+ set beforeSelectCallback(t) {
4022
+ this._beforeSelectCallback = t, this.updatePicker({ beforeSelectCallback: t });
4023
+ }
4024
+ get beforeDeselectCallback() {
4025
+ return this._beforeDeselectCallback;
4026
+ }
4027
+ set beforeDeselectCallback(t) {
4028
+ this._beforeDeselectCallback = t, this.updatePicker({ beforeDeselectCallback: t });
4029
+ }
3300
4030
  get searchCallback() {
3301
4031
  return this._searchCallback;
3302
4032
  }
@@ -3309,23 +4039,23 @@ class Le extends Ss {
3309
4039
  set addNewCallback(t) {
3310
4040
  this._addNewCallback = t, this.updatePicker({ addNewCallback: t });
3311
4041
  }
3312
- get selectCallback() {
3313
- return this._selectCallback;
4042
+ get onSelect() {
4043
+ return this._onSelect;
3314
4044
  }
3315
- set selectCallback(t) {
3316
- this._selectCallback = t;
4045
+ set onSelect(t) {
4046
+ this._onSelect = t;
3317
4047
  }
3318
- get deselectCallback() {
3319
- return this._deselectCallback;
4048
+ get onDeselect() {
4049
+ return this._onDeselect;
3320
4050
  }
3321
- set deselectCallback(t) {
3322
- this._deselectCallback = t;
4051
+ set onDeselect(t) {
4052
+ this._onDeselect = t;
3323
4053
  }
3324
- get changeCallback() {
3325
- return this._changeCallback;
4054
+ get onChange() {
4055
+ return this._onChange;
3326
4056
  }
3327
- set changeCallback(t) {
3328
- this._changeCallback = t;
4057
+ set onChange(t) {
4058
+ this._onChange = t;
3329
4059
  }
3330
4060
  // Action buttons
3331
4061
  get actionButtons() {
@@ -3363,40 +4093,40 @@ class Le extends Ss {
3363
4093
  // makes `form.reset()`, `form.elements`, and (in the future) constraint
3364
4094
  // validation actually do something. Without this flag the element is
3365
4095
  // invisible to the form lifecycle even when it has a `name`.
3366
- d(Le, "formAssociated", !0);
3367
- typeof window < "u" && typeof customElements < "u" && (customElements.get("web-multiselect") || customElements.define("web-multiselect", Le));
4096
+ h(ze, "formAssociated", !0);
4097
+ typeof window < "u" && typeof customElements < "u" && (customElements.get("web-multiselect") || customElements.define("web-multiselect", ze));
3368
4098
  typeof window < "u" && (window.components = window.components || {}, window.components["web-multiselect"] = {
3369
- version: () => "1.12.0-rc04",
4099
+ version: () => "1.12.0-rc06",
3370
4100
  config: {
3371
4101
  name: "@keenmate/web-multiselect",
3372
- version: "1.12.0-rc04",
4102
+ version: "1.12.0-rc06",
3373
4103
  author: "Keenmate",
3374
4104
  license: "MIT",
3375
4105
  repository: "git+https://github.com/keenmate/web-multiselect.git",
3376
4106
  homepage: "https://web-multiselect.keenmate.dev"
3377
4107
  },
3378
4108
  logging: {
3379
- enableLogging: bs,
3380
- disableLogging: gs,
3381
- setLogLevel: fs,
3382
- setCategoryLevel: vs,
3383
- getCategories: () => [...us]
4109
+ enableLogging: ws,
4110
+ disableLogging: xs,
4111
+ setLogLevel: Cs,
4112
+ setCategoryLevel: Ss,
4113
+ getCategories: () => [...ys]
3384
4114
  },
3385
4115
  register: () => {
3386
- typeof customElements < "u" && !customElements.get("web-multiselect") && customElements.define("web-multiselect", Le);
4116
+ typeof customElements < "u" && !customElements.get("web-multiselect") && customElements.define("web-multiselect", ze);
3387
4117
  },
3388
- getInstances: () => ct()
4118
+ getInstances: () => gt()
3389
4119
  });
3390
4120
  export {
3391
- us as LOGGING_CATEGORIES,
3392
- Le as MultiSelectElement,
3393
- xs as WebMultiSelect,
3394
- x as dataLogger,
3395
- gs as disableLogging,
3396
- bs as enableLogging,
3397
- oe as initLogger,
3398
- S as interactionLogger,
3399
- vs as setCategoryLevel,
3400
- fs as setLogLevel,
3401
- 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
3402
4132
  };