@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.
- package/README.md +39 -11
- package/component-variables.manifest.json +1 -0
- package/dist/index.d.ts +340 -21
- package/dist/multiselect.js +1608 -878
- package/dist/multiselect.umd.js +22 -21
- package/dist/style.css +1 -1
- package/docs/examples.md +46 -2
- package/docs/usage.md +32 -4
- package/package.json +2 -1
- package/src/css/controls.css +50 -4
- package/src/css/floating.css +28 -0
- package/src/css/main.css +1 -0
- package/src/css/options.css +52 -2
- package/src/css/tree.css +42 -0
- package/src/css/variables.css +45 -4
package/dist/multiselect.js
CHANGED
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
const
|
|
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
|
-
}),
|
|
7
|
+
}), kt = {
|
|
8
8
|
left: "right",
|
|
9
9
|
right: "left",
|
|
10
10
|
bottom: "top",
|
|
11
11
|
top: "bottom"
|
|
12
|
-
},
|
|
12
|
+
}, yt = {
|
|
13
13
|
start: "end",
|
|
14
14
|
end: "start"
|
|
15
15
|
};
|
|
16
|
-
function
|
|
17
|
-
return
|
|
16
|
+
function Be(o, e, t) {
|
|
17
|
+
return X(o, he(e, t));
|
|
18
18
|
}
|
|
19
|
-
function
|
|
19
|
+
function be(o, e) {
|
|
20
20
|
return typeof o == "function" ? o(e) : o;
|
|
21
21
|
}
|
|
22
|
-
function
|
|
22
|
+
function J(o) {
|
|
23
23
|
return o.split("-")[0];
|
|
24
24
|
}
|
|
25
|
-
function
|
|
25
|
+
function ge(o) {
|
|
26
26
|
return o.split("-")[1];
|
|
27
27
|
}
|
|
28
|
-
function
|
|
28
|
+
function Qe(o) {
|
|
29
29
|
return o === "x" ? "y" : "x";
|
|
30
30
|
}
|
|
31
|
-
function
|
|
31
|
+
function et(o) {
|
|
32
32
|
return o === "y" ? "height" : "width";
|
|
33
33
|
}
|
|
34
|
-
const
|
|
35
|
-
function
|
|
36
|
-
return
|
|
34
|
+
const wt = /* @__PURE__ */ new Set(["top", "bottom"]);
|
|
35
|
+
function G(o) {
|
|
36
|
+
return wt.has(J(o)) ? "y" : "x";
|
|
37
37
|
}
|
|
38
|
-
function
|
|
39
|
-
return
|
|
38
|
+
function tt(o) {
|
|
39
|
+
return Qe(G(o));
|
|
40
40
|
}
|
|
41
|
-
function
|
|
41
|
+
function xt(o, e, t) {
|
|
42
42
|
t === void 0 && (t = !1);
|
|
43
|
-
const s =
|
|
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 =
|
|
45
|
+
return e.reference[r] > e.floating[r] && (a = pe(a)), [a, pe(a)];
|
|
46
46
|
}
|
|
47
|
-
function
|
|
48
|
-
const e =
|
|
49
|
-
return [
|
|
47
|
+
function Ct(o) {
|
|
48
|
+
const e = pe(o);
|
|
49
|
+
return [we(o), e, we(e)];
|
|
50
50
|
}
|
|
51
|
-
function
|
|
52
|
-
return o.replace(/start|end/g, (e) =>
|
|
51
|
+
function we(o) {
|
|
52
|
+
return o.replace(/start|end/g, (e) => yt[e]);
|
|
53
53
|
}
|
|
54
|
-
const
|
|
55
|
-
function
|
|
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 ?
|
|
59
|
+
return t ? e ? Re : $e : e ? $e : Re;
|
|
60
60
|
case "left":
|
|
61
61
|
case "right":
|
|
62
|
-
return e ?
|
|
62
|
+
return e ? St : Tt;
|
|
63
63
|
default:
|
|
64
64
|
return [];
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
|
-
function
|
|
68
|
-
const i =
|
|
69
|
-
let r =
|
|
70
|
-
return i && (r = r.map((a) => a + "-" + i), e && (r = r.concat(r.map(
|
|
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
|
|
73
|
-
return o.replace(/left|right|bottom|top/g, (e) =>
|
|
72
|
+
function pe(o) {
|
|
73
|
+
return o.replace(/left|right|bottom|top/g, (e) => kt[e]);
|
|
74
74
|
}
|
|
75
|
-
function
|
|
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
|
|
85
|
-
return typeof o != "number" ?
|
|
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
|
|
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
|
|
110
|
+
function Fe(o, e, t) {
|
|
111
111
|
let {
|
|
112
112
|
reference: s,
|
|
113
113
|
floating: i
|
|
114
114
|
} = o;
|
|
115
|
-
const r =
|
|
116
|
-
let
|
|
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
|
-
|
|
120
|
-
x:
|
|
119
|
+
p = {
|
|
120
|
+
x: c,
|
|
121
121
|
y: s.y - i.height
|
|
122
122
|
};
|
|
123
123
|
break;
|
|
124
124
|
case "bottom":
|
|
125
|
-
|
|
126
|
-
x:
|
|
125
|
+
p = {
|
|
126
|
+
x: c,
|
|
127
127
|
y: s.y + s.height
|
|
128
128
|
};
|
|
129
129
|
break;
|
|
130
130
|
case "right":
|
|
131
|
-
|
|
131
|
+
p = {
|
|
132
132
|
x: s.x + s.width,
|
|
133
|
-
y:
|
|
133
|
+
y: m
|
|
134
134
|
};
|
|
135
135
|
break;
|
|
136
136
|
case "left":
|
|
137
|
-
|
|
137
|
+
p = {
|
|
138
138
|
x: s.x - i.width,
|
|
139
|
-
y:
|
|
139
|
+
y: m
|
|
140
140
|
};
|
|
141
141
|
break;
|
|
142
142
|
default:
|
|
143
|
-
|
|
143
|
+
p = {
|
|
144
144
|
x: s.x,
|
|
145
145
|
y: s.y
|
|
146
146
|
};
|
|
147
147
|
}
|
|
148
|
-
switch (
|
|
148
|
+
switch (ge(e)) {
|
|
149
149
|
case "start":
|
|
150
|
-
|
|
150
|
+
p[a] -= u * (t && d ? -1 : 1);
|
|
151
151
|
break;
|
|
152
152
|
case "end":
|
|
153
|
-
|
|
153
|
+
p[a] += u * (t && d ? -1 : 1);
|
|
154
154
|
break;
|
|
155
155
|
}
|
|
156
|
-
return
|
|
156
|
+
return p;
|
|
157
157
|
}
|
|
158
|
-
const
|
|
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
|
|
165
|
+
let d = await a.getElementRects({
|
|
166
166
|
reference: o,
|
|
167
167
|
floating: e,
|
|
168
168
|
strategy: i
|
|
169
169
|
}), {
|
|
170
|
-
x:
|
|
171
|
-
y:
|
|
172
|
-
} =
|
|
173
|
-
for (let
|
|
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:
|
|
177
|
-
} = n[
|
|
178
|
-
x:
|
|
176
|
+
fn: g
|
|
177
|
+
} = n[v], {
|
|
178
|
+
x: _,
|
|
179
179
|
y,
|
|
180
|
-
data:
|
|
181
|
-
reset:
|
|
182
|
-
} = await
|
|
183
|
-
x:
|
|
184
|
-
y:
|
|
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:
|
|
189
|
-
rects:
|
|
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
|
-
|
|
197
|
-
...
|
|
196
|
+
c = _ ?? c, m = y ?? m, p = {
|
|
197
|
+
...p,
|
|
198
198
|
[f]: {
|
|
199
|
-
...
|
|
200
|
-
...
|
|
199
|
+
...p[f],
|
|
200
|
+
...w
|
|
201
201
|
}
|
|
202
|
-
},
|
|
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
|
-
}) :
|
|
207
|
-
x:
|
|
208
|
-
y:
|
|
209
|
-
} =
|
|
206
|
+
}) : M.rects), {
|
|
207
|
+
x: c,
|
|
208
|
+
y: m
|
|
209
|
+
} = Fe(d, u, l)), v = -1);
|
|
210
210
|
}
|
|
211
211
|
return {
|
|
212
|
-
x:
|
|
213
|
-
y:
|
|
212
|
+
x: c,
|
|
213
|
+
y: m,
|
|
214
214
|
placement: u,
|
|
215
215
|
strategy: i,
|
|
216
|
-
middlewareData:
|
|
216
|
+
middlewareData: p
|
|
217
217
|
};
|
|
218
218
|
};
|
|
219
|
-
async function
|
|
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:
|
|
231
|
-
rootBoundary:
|
|
232
|
-
elementContext:
|
|
230
|
+
boundary: d = "clippingAncestors",
|
|
231
|
+
rootBoundary: c = "viewport",
|
|
232
|
+
elementContext: m = "floating",
|
|
233
233
|
altBoundary: u = !1,
|
|
234
|
-
padding:
|
|
235
|
-
} =
|
|
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:
|
|
238
|
-
rootBoundary:
|
|
237
|
+
boundary: d,
|
|
238
|
+
rootBoundary: c,
|
|
239
239
|
strategy: l
|
|
240
|
-
})),
|
|
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)),
|
|
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
|
-
},
|
|
251
|
+
}, M = ue(r.convertOffsetParentRelativeRectToViewportRelativeRect ? await r.convertOffsetParentRelativeRectToViewportRelativeRect({
|
|
252
252
|
elements: n,
|
|
253
|
-
rect:
|
|
253
|
+
rect: _,
|
|
254
254
|
offsetParent: y,
|
|
255
255
|
strategy: l
|
|
256
|
-
}) :
|
|
256
|
+
}) : _);
|
|
257
257
|
return {
|
|
258
|
-
top: (
|
|
259
|
-
bottom: (
|
|
260
|
-
left: (
|
|
261
|
-
right: (
|
|
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
|
|
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:
|
|
276
|
+
elements: d
|
|
277
277
|
} = e, {
|
|
278
|
-
mainAxis:
|
|
279
|
-
crossAxis:
|
|
278
|
+
mainAxis: c = !0,
|
|
279
|
+
crossAxis: m = !0,
|
|
280
280
|
fallbackPlacements: u,
|
|
281
|
-
fallbackStrategy:
|
|
281
|
+
fallbackStrategy: p = "bestFit",
|
|
282
282
|
fallbackAxisSideDirection: b = "none",
|
|
283
|
-
flipAlignment:
|
|
283
|
+
flipAlignment: v = !0,
|
|
284
284
|
...f
|
|
285
|
-
} =
|
|
285
|
+
} = be(o, e);
|
|
286
286
|
if ((t = r.arrow) != null && t.alignmentOffset)
|
|
287
287
|
return {};
|
|
288
|
-
const
|
|
289
|
-
!u &&
|
|
290
|
-
const j = [n, ...
|
|
291
|
-
let
|
|
292
|
-
if (
|
|
293
|
-
const
|
|
294
|
-
|
|
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 (
|
|
296
|
+
if (C = [...C, {
|
|
297
297
|
placement: i,
|
|
298
|
-
overflows:
|
|
299
|
-
}], !
|
|
300
|
-
var
|
|
301
|
-
const
|
|
302
|
-
if (
|
|
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
|
-
|
|
304
|
+
C.every((D) => G(D.placement) === _ ? D.overflows[0] > 0 : !0)))
|
|
305
305
|
return {
|
|
306
306
|
data: {
|
|
307
|
-
index:
|
|
308
|
-
overflows:
|
|
307
|
+
index: k,
|
|
308
|
+
overflows: C
|
|
309
309
|
},
|
|
310
310
|
reset: {
|
|
311
|
-
placement:
|
|
311
|
+
placement: P
|
|
312
312
|
}
|
|
313
313
|
};
|
|
314
|
-
let
|
|
315
|
-
if (!
|
|
316
|
-
switch (
|
|
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
|
|
319
|
-
const
|
|
320
|
-
if (
|
|
321
|
-
const
|
|
322
|
-
return
|
|
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
|
-
|
|
324
|
+
W === "y";
|
|
325
325
|
}
|
|
326
326
|
return !0;
|
|
327
|
-
}).map((
|
|
328
|
-
|
|
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
|
-
|
|
332
|
+
oe = n;
|
|
333
333
|
break;
|
|
334
334
|
}
|
|
335
|
-
if (i !==
|
|
335
|
+
if (i !== oe)
|
|
336
336
|
return {
|
|
337
337
|
reset: {
|
|
338
|
-
placement:
|
|
338
|
+
placement: oe
|
|
339
339
|
}
|
|
340
340
|
};
|
|
341
341
|
}
|
|
342
342
|
return {};
|
|
343
343
|
}
|
|
344
344
|
};
|
|
345
|
-
},
|
|
346
|
-
async function
|
|
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 =
|
|
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:
|
|
354
|
+
crossAxis: p,
|
|
355
355
|
alignmentAxis: b
|
|
356
|
-
} = typeof
|
|
357
|
-
mainAxis:
|
|
356
|
+
} = typeof m == "number" ? {
|
|
357
|
+
mainAxis: m,
|
|
358
358
|
crossAxis: 0,
|
|
359
359
|
alignmentAxis: null
|
|
360
360
|
} : {
|
|
361
|
-
mainAxis:
|
|
362
|
-
crossAxis:
|
|
363
|
-
alignmentAxis:
|
|
361
|
+
mainAxis: m.mainAxis || 0,
|
|
362
|
+
crossAxis: m.crossAxis || 0,
|
|
363
|
+
alignmentAxis: m.alignmentAxis
|
|
364
364
|
};
|
|
365
|
-
return n && typeof b == "number" && (
|
|
366
|
-
x:
|
|
367
|
-
y: u *
|
|
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 *
|
|
370
|
-
y:
|
|
369
|
+
x: u * d,
|
|
370
|
+
y: p * c
|
|
371
371
|
};
|
|
372
372
|
}
|
|
373
|
-
const
|
|
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
|
|
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
|
-
},
|
|
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:
|
|
411
|
-
y:
|
|
410
|
+
x: g,
|
|
411
|
+
y: _
|
|
412
412
|
} = f;
|
|
413
413
|
return {
|
|
414
|
-
x:
|
|
415
|
-
y:
|
|
414
|
+
x: g,
|
|
415
|
+
y: _
|
|
416
416
|
};
|
|
417
417
|
}
|
|
418
418
|
},
|
|
419
419
|
...l
|
|
420
|
-
} =
|
|
420
|
+
} = be(o, e), d = {
|
|
421
421
|
x: t,
|
|
422
422
|
y: s
|
|
423
|
-
},
|
|
424
|
-
let
|
|
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",
|
|
427
|
-
|
|
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 =
|
|
431
|
-
b =
|
|
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
|
|
433
|
+
const v = n.fn({
|
|
434
434
|
...e,
|
|
435
|
-
[u]:
|
|
436
|
-
[
|
|
435
|
+
[u]: p,
|
|
436
|
+
[m]: b
|
|
437
437
|
});
|
|
438
438
|
return {
|
|
439
|
-
...
|
|
439
|
+
...v,
|
|
440
440
|
data: {
|
|
441
|
-
x:
|
|
442
|
-
y:
|
|
441
|
+
x: v.x - t,
|
|
442
|
+
y: v.y - s,
|
|
443
443
|
enabled: {
|
|
444
444
|
[u]: r,
|
|
445
|
-
[
|
|
445
|
+
[m]: a
|
|
446
446
|
}
|
|
447
447
|
}
|
|
448
448
|
};
|
|
449
449
|
}
|
|
450
450
|
};
|
|
451
451
|
};
|
|
452
|
-
function
|
|
452
|
+
function fe() {
|
|
453
453
|
return typeof window < "u";
|
|
454
454
|
}
|
|
455
|
-
function
|
|
456
|
-
return
|
|
455
|
+
function te(o) {
|
|
456
|
+
return ot(o) ? (o.nodeName || "").toLowerCase() : "#document";
|
|
457
457
|
}
|
|
458
|
-
function
|
|
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
|
|
462
|
+
function N(o) {
|
|
463
463
|
var e;
|
|
464
|
-
return (e = (
|
|
464
|
+
return (e = (ot(o) ? o.ownerDocument : o.document) || window.document) == null ? void 0 : e.documentElement;
|
|
465
465
|
}
|
|
466
|
-
function
|
|
467
|
-
return
|
|
466
|
+
function ot(o) {
|
|
467
|
+
return fe() ? o instanceof Node || o instanceof V(o).Node : !1;
|
|
468
468
|
}
|
|
469
|
-
function
|
|
470
|
-
return
|
|
469
|
+
function B(o) {
|
|
470
|
+
return fe() ? o instanceof Element || o instanceof V(o).Element : !1;
|
|
471
471
|
}
|
|
472
|
-
function
|
|
473
|
-
return
|
|
472
|
+
function H(o) {
|
|
473
|
+
return fe() ? o instanceof HTMLElement || o instanceof V(o).HTMLElement : !1;
|
|
474
474
|
}
|
|
475
|
-
function
|
|
476
|
-
return !
|
|
475
|
+
function He(o) {
|
|
476
|
+
return !fe() || typeof ShadowRoot > "u" ? !1 : o instanceof ShadowRoot || o instanceof V(o).ShadowRoot;
|
|
477
477
|
}
|
|
478
|
-
const
|
|
479
|
-
function
|
|
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
|
-
} =
|
|
486
|
-
return /auto|scroll|overlay|hidden|clip/.test(e + s + t) && !
|
|
485
|
+
} = $(o);
|
|
486
|
+
return /auto|scroll|overlay|hidden|clip/.test(e + s + t) && !Bt.has(i);
|
|
487
487
|
}
|
|
488
|
-
const
|
|
489
|
-
function
|
|
490
|
-
return
|
|
488
|
+
const $t = /* @__PURE__ */ new Set(["table", "td", "th"]);
|
|
489
|
+
function Rt(o) {
|
|
490
|
+
return $t.has(te(o));
|
|
491
491
|
}
|
|
492
|
-
const
|
|
493
|
-
function
|
|
494
|
-
return
|
|
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
|
|
503
|
-
function
|
|
504
|
-
const e =
|
|
505
|
-
return
|
|
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
|
|
508
|
-
let e =
|
|
509
|
-
for (;
|
|
510
|
-
if (
|
|
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 (
|
|
512
|
+
if (ve(e))
|
|
513
513
|
return null;
|
|
514
|
-
e =
|
|
514
|
+
e = K(e);
|
|
515
515
|
}
|
|
516
516
|
return null;
|
|
517
517
|
}
|
|
518
|
-
function
|
|
518
|
+
function Le() {
|
|
519
519
|
return typeof CSS > "u" || !CSS.supports ? !1 : CSS.supports("-webkit-backdrop-filter", "none");
|
|
520
520
|
}
|
|
521
|
-
const
|
|
522
|
-
function
|
|
523
|
-
return
|
|
521
|
+
const Ut = /* @__PURE__ */ new Set(["html", "body", "#document"]);
|
|
522
|
+
function ee(o) {
|
|
523
|
+
return Ut.has(te(o));
|
|
524
524
|
}
|
|
525
|
-
function
|
|
526
|
-
return
|
|
525
|
+
function $(o) {
|
|
526
|
+
return V(o).getComputedStyle(o);
|
|
527
527
|
}
|
|
528
|
-
function
|
|
529
|
-
return
|
|
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
|
|
538
|
-
if (
|
|
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
|
-
|
|
545
|
-
|
|
544
|
+
He(o) && o.host || // Fallback.
|
|
545
|
+
N(o)
|
|
546
546
|
);
|
|
547
|
-
return
|
|
547
|
+
return He(e) ? e.host : e;
|
|
548
548
|
}
|
|
549
|
-
function
|
|
550
|
-
const e =
|
|
551
|
-
return
|
|
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
|
|
553
|
+
function ae(o, e, t) {
|
|
554
554
|
var s;
|
|
555
555
|
e === void 0 && (e = []), t === void 0 && (t = !0);
|
|
556
|
-
const 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 =
|
|
559
|
-
return e.concat(a, a.visualViewport || [],
|
|
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,
|
|
561
|
+
return e.concat(i, ae(i, [], t));
|
|
562
562
|
}
|
|
563
|
-
function
|
|
563
|
+
function xe(o) {
|
|
564
564
|
return o.parent && Object.getPrototypeOf(o.parent) ? o.frameElement : null;
|
|
565
565
|
}
|
|
566
|
-
function
|
|
567
|
-
const e =
|
|
566
|
+
function rt(o) {
|
|
567
|
+
const e = $(o);
|
|
568
568
|
let t = parseFloat(e.width) || 0, s = parseFloat(e.height) || 0;
|
|
569
|
-
const i =
|
|
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
|
|
577
|
-
return
|
|
576
|
+
function Ee(o) {
|
|
577
|
+
return B(o) ? o : o.contextElement;
|
|
578
578
|
}
|
|
579
|
-
function
|
|
580
|
-
const e =
|
|
581
|
-
if (!
|
|
582
|
-
return
|
|
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
|
-
} =
|
|
588
|
-
let a = (r ?
|
|
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
|
|
595
|
-
function
|
|
596
|
-
const e =
|
|
597
|
-
return !
|
|
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
|
|
603
|
-
return e === void 0 && (e = !1), !t || e && t !==
|
|
602
|
+
function Kt(o, e, t) {
|
|
603
|
+
return e === void 0 && (e = !1), !t || e && t !== V(o) ? !1 : e;
|
|
604
604
|
}
|
|
605
|
-
function
|
|
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 =
|
|
608
|
-
let a =
|
|
609
|
-
e && (s ?
|
|
610
|
-
const n =
|
|
611
|
-
let l = (i.left + n.x) / a.x,
|
|
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 =
|
|
614
|
-
let b = u,
|
|
615
|
-
for (;
|
|
616
|
-
const f =
|
|
617
|
-
l *= f.x,
|
|
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
|
|
621
|
-
width:
|
|
622
|
-
height:
|
|
620
|
+
return ue({
|
|
621
|
+
width: c,
|
|
622
|
+
height: m,
|
|
623
623
|
x: l,
|
|
624
|
-
y:
|
|
624
|
+
y: d
|
|
625
625
|
});
|
|
626
626
|
}
|
|
627
|
-
function
|
|
628
|
-
const t =
|
|
629
|
-
return e ? e.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
|
|
632
|
-
const t = o.getBoundingClientRect(), s = t.left + e.scrollLeft -
|
|
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
|
|
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 =
|
|
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
|
-
},
|
|
652
|
-
const
|
|
653
|
-
if ((
|
|
654
|
-
const
|
|
655
|
-
|
|
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 && !
|
|
657
|
+
const u = a && !m && !r ? nt(a, l) : F(0);
|
|
658
658
|
return {
|
|
659
|
-
width: t.width *
|
|
660
|
-
height: t.height *
|
|
661
|
-
x: t.x *
|
|
662
|
-
y: t.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
|
|
665
|
+
function Yt(o) {
|
|
666
666
|
return Array.from(o.getClientRects());
|
|
667
667
|
}
|
|
668
|
-
function
|
|
669
|
-
const e =
|
|
670
|
-
let a = -t.scrollLeft +
|
|
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
|
|
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
|
|
680
|
-
function
|
|
681
|
-
const t =
|
|
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
|
|
686
|
-
(!
|
|
687
|
-
}
|
|
688
|
-
const
|
|
689
|
-
if (
|
|
690
|
-
const
|
|
691
|
-
b <=
|
|
692
|
-
} else
|
|
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
|
|
701
|
-
function
|
|
702
|
-
const t =
|
|
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:
|
|
707
|
+
y: d
|
|
708
708
|
};
|
|
709
709
|
}
|
|
710
|
-
function
|
|
710
|
+
function je(o, e, t) {
|
|
711
711
|
let s;
|
|
712
712
|
if (e === "viewport")
|
|
713
|
-
s =
|
|
713
|
+
s = Jt(o, t);
|
|
714
714
|
else if (e === "document")
|
|
715
|
-
s =
|
|
716
|
-
else if (
|
|
717
|
-
s =
|
|
715
|
+
s = Xt(N(o));
|
|
716
|
+
else if (B(e))
|
|
717
|
+
s = Qt(e, t);
|
|
718
718
|
else {
|
|
719
|
-
const i =
|
|
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
|
|
727
|
+
return ue(s);
|
|
728
728
|
}
|
|
729
|
-
function
|
|
730
|
-
const t =
|
|
731
|
-
return 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
|
|
733
|
+
function es(o, e) {
|
|
734
734
|
const t = e.get(o);
|
|
735
735
|
if (t)
|
|
736
736
|
return t;
|
|
737
|
-
let s =
|
|
738
|
-
const r =
|
|
739
|
-
let a = r ?
|
|
740
|
-
for (;
|
|
741
|
-
const n =
|
|
742
|
-
!l && n.position === "fixed" && (i = null), (r ? !l && !i : !l && n.position === "static" && !!i &&
|
|
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
|
|
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" ?
|
|
754
|
-
const
|
|
755
|
-
return
|
|
756
|
-
},
|
|
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
|
|
764
|
+
function ss(o) {
|
|
765
765
|
const {
|
|
766
766
|
width: e,
|
|
767
767
|
height: t
|
|
768
|
-
} =
|
|
768
|
+
} = rt(o);
|
|
769
769
|
return {
|
|
770
770
|
width: e,
|
|
771
771
|
height: t
|
|
772
772
|
};
|
|
773
773
|
}
|
|
774
|
-
function
|
|
775
|
-
const s =
|
|
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 =
|
|
781
|
-
function
|
|
782
|
-
l.x =
|
|
780
|
+
const l = F(0);
|
|
781
|
+
function d() {
|
|
782
|
+
l.x = ke(i);
|
|
783
783
|
}
|
|
784
784
|
if (s || !s && !r)
|
|
785
|
-
if ((
|
|
786
|
-
const
|
|
787
|
-
l.x =
|
|
788
|
-
} else i &&
|
|
789
|
-
r && !s && i &&
|
|
790
|
-
const
|
|
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:
|
|
792
|
+
x: m,
|
|
793
793
|
y: u,
|
|
794
794
|
width: a.width,
|
|
795
795
|
height: a.height
|
|
796
796
|
};
|
|
797
797
|
}
|
|
798
|
-
function
|
|
799
|
-
return
|
|
798
|
+
function ye(o) {
|
|
799
|
+
return $(o).position === "static";
|
|
800
800
|
}
|
|
801
|
-
function
|
|
802
|
-
if (!
|
|
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
|
|
807
|
+
return N(o) === t && (t = t.ownerDocument.body), t;
|
|
808
808
|
}
|
|
809
|
-
function
|
|
810
|
-
const t =
|
|
811
|
-
if (
|
|
809
|
+
function ct(o, e) {
|
|
810
|
+
const t = V(o);
|
|
811
|
+
if (ve(o))
|
|
812
812
|
return t;
|
|
813
|
-
if (!
|
|
814
|
-
let i =
|
|
815
|
-
for (; i && !
|
|
816
|
-
if (
|
|
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 =
|
|
818
|
+
i = K(i);
|
|
819
819
|
}
|
|
820
820
|
return t;
|
|
821
821
|
}
|
|
822
|
-
let s =
|
|
823
|
-
for (; s &&
|
|
824
|
-
s =
|
|
825
|
-
return s &&
|
|
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
|
|
828
|
-
const e = this.getOffsetParent ||
|
|
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:
|
|
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
|
|
840
|
-
return
|
|
841
|
-
}
|
|
842
|
-
const
|
|
843
|
-
convertOffsetParentRelativeRectToViewportRelativeRect:
|
|
844
|
-
getDocumentElement:
|
|
845
|
-
getClippingRect:
|
|
846
|
-
getOffsetParent:
|
|
847
|
-
getElementRects:
|
|
848
|
-
getClientRects:
|
|
849
|
-
getDimensions:
|
|
850
|
-
getScale:
|
|
851
|
-
isElement:
|
|
852
|
-
isRTL:
|
|
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
|
|
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
|
|
857
|
+
function as(o, e) {
|
|
858
858
|
let t = null, s;
|
|
859
|
-
const i =
|
|
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
|
|
867
|
-
left:
|
|
868
|
-
top:
|
|
866
|
+
const d = o.getBoundingClientRect(), {
|
|
867
|
+
left: c,
|
|
868
|
+
top: m,
|
|
869
869
|
width: u,
|
|
870
|
-
height:
|
|
871
|
-
} =
|
|
872
|
-
if (n || e(), !u || !
|
|
870
|
+
height: p
|
|
871
|
+
} = d;
|
|
872
|
+
if (n || e(), !u || !p)
|
|
873
873
|
return;
|
|
874
|
-
const b =
|
|
875
|
-
rootMargin: -b + "px " + -
|
|
876
|
-
threshold:
|
|
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
|
|
879
|
-
function
|
|
880
|
-
const j =
|
|
878
|
+
let w = !0;
|
|
879
|
+
function M(E) {
|
|
880
|
+
const j = E[0].intersectionRatio;
|
|
881
881
|
if (j !== l) {
|
|
882
|
-
if (!
|
|
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 && !
|
|
888
|
+
j === 1 && !ht(d, o.getBoundingClientRect()) && a(), w = !1;
|
|
889
889
|
}
|
|
890
890
|
try {
|
|
891
|
-
t = new IntersectionObserver(
|
|
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(
|
|
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
|
|
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,
|
|
912
|
-
|
|
913
|
-
i &&
|
|
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 &&
|
|
915
|
+
}), r && g.addEventListener("resize", t);
|
|
916
916
|
});
|
|
917
|
-
const
|
|
918
|
-
let u = -1,
|
|
919
|
-
a && (
|
|
920
|
-
let [
|
|
921
|
-
|
|
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 =
|
|
923
|
+
(y = p) == null || y.observe(e);
|
|
924
924
|
})), t();
|
|
925
|
-
}),
|
|
926
|
-
let b,
|
|
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
|
|
930
|
-
|
|
929
|
+
const g = Z(o);
|
|
930
|
+
v && !ht(v, g) && t(), v = g, b = requestAnimationFrame(f);
|
|
931
931
|
}
|
|
932
932
|
return t(), () => {
|
|
933
|
-
var
|
|
934
|
-
|
|
935
|
-
i &&
|
|
936
|
-
}),
|
|
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
|
|
939
|
+
const Se = Dt, Te = zt, mt = Lt, Ie = (o, e, t) => {
|
|
940
940
|
const s = /* @__PURE__ */ new Map(), i = {
|
|
941
|
-
platform:
|
|
941
|
+
platform: dt,
|
|
942
942
|
...t
|
|
943
943
|
}, r = {
|
|
944
944
|
...i.platform,
|
|
945
945
|
_c: s
|
|
946
946
|
};
|
|
947
|
-
return
|
|
947
|
+
return Pt(o, e, {
|
|
948
948
|
...i,
|
|
949
949
|
platform: r
|
|
950
950
|
});
|
|
951
951
|
};
|
|
952
|
-
var
|
|
953
|
-
},
|
|
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
|
-
],
|
|
960
|
-
function
|
|
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
|
|
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
|
|
976
|
-
return o === "debug" && (o = "log"), typeof console ===
|
|
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
|
|
979
|
-
for (var o = this.getLevel(), e = 0; e <
|
|
980
|
-
var t =
|
|
981
|
-
this[t] = e < o ?
|
|
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 ===
|
|
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
|
|
986
|
+
function ds(o) {
|
|
987
987
|
return function() {
|
|
988
|
-
typeof console !==
|
|
988
|
+
typeof console !== z && (ie.call(this), this[o].apply(this, arguments));
|
|
989
989
|
};
|
|
990
990
|
}
|
|
991
|
-
function
|
|
992
|
-
return
|
|
991
|
+
function hs(o, e, t) {
|
|
992
|
+
return cs(o) || ds.apply(this, arguments);
|
|
993
993
|
}
|
|
994
|
-
function
|
|
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
|
|
999
|
-
if (!(typeof window ===
|
|
998
|
+
var p = (Me[u] || "silent").toUpperCase();
|
|
999
|
+
if (!(typeof window === z || !a)) {
|
|
1000
1000
|
try {
|
|
1001
|
-
window.localStorage[a] =
|
|
1001
|
+
window.localStorage[a] = p;
|
|
1002
1002
|
return;
|
|
1003
1003
|
} catch {
|
|
1004
1004
|
}
|
|
1005
1005
|
try {
|
|
1006
|
-
window.document.cookie = encodeURIComponent(a) + "=" +
|
|
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 ===
|
|
1013
|
+
if (!(typeof window === z || !a)) {
|
|
1014
1014
|
try {
|
|
1015
1015
|
u = window.localStorage[a];
|
|
1016
1016
|
} catch {
|
|
1017
1017
|
}
|
|
1018
|
-
if (typeof u ===
|
|
1018
|
+
if (typeof u === z)
|
|
1019
1019
|
try {
|
|
1020
|
-
var
|
|
1021
|
-
|
|
1022
|
-
|
|
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
|
|
1030
|
-
if (!(typeof window ===
|
|
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
|
|
1042
|
-
var
|
|
1043
|
-
if (typeof
|
|
1044
|
-
return
|
|
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 ||
|
|
1054
|
+
}, t.methodFactory = e || hs, t.getLevel = function() {
|
|
1055
1055
|
return r ?? i ?? s;
|
|
1056
|
-
}, t.setLevel = function(u,
|
|
1057
|
-
return r =
|
|
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 =
|
|
1059
|
+
i = c(u), l() || t.setLevel(u, !1);
|
|
1060
1060
|
}, t.resetLevel = function() {
|
|
1061
|
-
r = null,
|
|
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 (
|
|
1068
|
-
for (var u in
|
|
1069
|
-
|
|
1070
|
-
}, s =
|
|
1071
|
-
|
|
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
|
|
1074
|
-
|
|
1073
|
+
var m = l();
|
|
1074
|
+
m != null && (r = c(m)), ie.call(t);
|
|
1075
1075
|
}
|
|
1076
|
-
|
|
1077
|
-
|
|
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 =
|
|
1081
|
-
return t || (t =
|
|
1080
|
+
var t = ne[e];
|
|
1081
|
+
return t || (t = ne[e] = new ut(
|
|
1082
1082
|
e,
|
|
1083
|
-
|
|
1083
|
+
T.methodFactory
|
|
1084
1084
|
)), t;
|
|
1085
1085
|
};
|
|
1086
|
-
var
|
|
1087
|
-
|
|
1088
|
-
return typeof window !==
|
|
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
|
-
|
|
1091
|
-
return
|
|
1090
|
+
T.getLoggers = function() {
|
|
1091
|
+
return ne;
|
|
1092
1092
|
};
|
|
1093
|
-
|
|
1094
|
-
var
|
|
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
|
-
},
|
|
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
|
-
},
|
|
1111
|
+
}, bt, Y = {}, bs = function(o) {
|
|
1112
1112
|
if (!o || !o.getLogger)
|
|
1113
1113
|
throw new TypeError("Argument is not a root logger");
|
|
1114
|
-
|
|
1115
|
-
},
|
|
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 =
|
|
1118
|
+
var t = o.methodFactory, s = o.name || "", i = Y[s] || Y[""] || us;
|
|
1119
1119
|
function r(a, n, l) {
|
|
1120
|
-
var
|
|
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 = "",
|
|
1123
|
-
f[
|
|
1124
|
-
if (s || !
|
|
1125
|
-
var
|
|
1126
|
-
|
|
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
|
-
|
|
1128
|
+
d.apply(void 0, f);
|
|
1129
1129
|
};
|
|
1130
1130
|
}
|
|
1131
|
-
return
|
|
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
|
-
},
|
|
1135
|
-
reg:
|
|
1136
|
-
apply:
|
|
1134
|
+
}, fs = {
|
|
1135
|
+
reg: bs,
|
|
1136
|
+
apply: gs
|
|
1137
1137
|
};
|
|
1138
|
-
const
|
|
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
|
-
|
|
1149
|
-
const
|
|
1150
|
-
|
|
1151
|
-
const s =
|
|
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 =
|
|
1154
|
-
s(
|
|
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
|
|
1158
|
-
const
|
|
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
|
|
1165
|
-
typeof
|
|
1164
|
+
function Ve() {
|
|
1165
|
+
typeof T.rebuild == "function" && T.rebuild();
|
|
1166
1166
|
}
|
|
1167
|
-
function
|
|
1168
|
-
|
|
1167
|
+
function ws() {
|
|
1168
|
+
T.setLevel("debug"), Ve();
|
|
1169
1169
|
}
|
|
1170
|
-
function
|
|
1171
|
-
|
|
1170
|
+
function xs() {
|
|
1171
|
+
T.setLevel("silent"), Ve();
|
|
1172
1172
|
}
|
|
1173
|
-
function
|
|
1174
|
-
|
|
1173
|
+
function Cs(o) {
|
|
1174
|
+
T.setLevel(o), Ve();
|
|
1175
1175
|
}
|
|
1176
|
-
function
|
|
1176
|
+
function Ss(o, e) {
|
|
1177
1177
|
const t = o.includes(":") ? o : `MULTISELECT:${o}`;
|
|
1178
|
-
|
|
1178
|
+
T.getLogger(t).setLevel(e);
|
|
1179
1179
|
}
|
|
1180
|
-
class
|
|
1180
|
+
class Ge {
|
|
1181
1181
|
constructor(e) {
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
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
|
|
1302
|
+
class Ts {
|
|
1303
1303
|
constructor(e) {
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
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 =
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
1602
|
+
class zs {
|
|
1393
1603
|
constructor(e, t = {}) {
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
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
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
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
|
-
|
|
1641
|
+
h(this, "tooltips", /* @__PURE__ */ new Map());
|
|
1422
1642
|
// Virtual scroll instance
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
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
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
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
|
-
|
|
1437
|
-
|
|
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
|
-
|
|
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(),
|
|
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
|
-
|
|
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,
|
|
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"),
|
|
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
|
-
|
|
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
|
|
1645
|
-
this.filteredOptions.forEach((
|
|
1646
|
-
if (e += '<div class="ms__group">',
|
|
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
|
|
1649
|
-
if (
|
|
1650
|
-
const
|
|
1651
|
-
|
|
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">${
|
|
2041
|
+
e += `<div class="ms__group-label">${n}</div>`;
|
|
1654
2042
|
} else
|
|
1655
|
-
e += `<div class="ms__group-label">${
|
|
1656
|
-
|
|
1657
|
-
e += this.renderOption(
|
|
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((
|
|
1662
|
-
e += this.renderOption(
|
|
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
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
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
|
|
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" : "",
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
let p
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
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)),
|
|
1712
|
-
l &&
|
|
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
|
|
1715
|
-
if (this.options.isCheckboxesShown && this.options.isMultipleEnabled && (
|
|
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:
|
|
1720
|
-
isMatched:
|
|
2126
|
+
isFocused: d,
|
|
2127
|
+
isMatched: c,
|
|
1721
2128
|
isDisabled: n
|
|
1722
|
-
},
|
|
1723
|
-
typeof
|
|
2129
|
+
}, v = this.options.renderOptionContentCallback(e, b);
|
|
2130
|
+
typeof v == "string" ? p += v : p += v.outerHTML;
|
|
1724
2131
|
} else
|
|
1725
|
-
r && (
|
|
1726
|
-
return
|
|
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((
|
|
1777
|
-
let
|
|
1778
|
-
n > 0 && (
|
|
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 +
|
|
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
|
|
1790
|
-
l = `${a} (${
|
|
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
|
-
|
|
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 &&
|
|
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],
|
|
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,
|
|
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,
|
|
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(),
|
|
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(),
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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 (
|
|
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
|
-
|
|
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(),
|
|
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
|
-
|
|
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((
|
|
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.
|
|
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(),
|
|
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
|
-
|
|
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
|
-
|
|
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 || (
|
|
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
|
|
2037
|
-
if (
|
|
2038
|
-
const
|
|
2039
|
-
|
|
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]),
|
|
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]),
|
|
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
|
-
|
|
2531
|
+
L.debug(`[${this.instanceId}] toggleOption ignored — option is disabled`);
|
|
2080
2532
|
return;
|
|
2081
2533
|
}
|
|
2082
|
-
|
|
2083
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
2112
|
-
this.selectedValues.has(
|
|
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
|
-
* `
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
...
|
|
2145
|
-
getOffsetParent: () =>
|
|
2624
|
+
...dt,
|
|
2625
|
+
getOffsetParent: () => Es(this.input)
|
|
2146
2626
|
};
|
|
2147
|
-
return
|
|
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
|
-
|
|
2152
|
-
...i && r ? [] : [
|
|
2153
|
-
|
|
2631
|
+
Se(4),
|
|
2632
|
+
...i && r ? [] : [mt()],
|
|
2633
|
+
Te({ padding: 8 })
|
|
2154
2634
|
];
|
|
2155
|
-
|
|
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(
|
|
2637
|
+
r || t.setPlacement(m), Object.assign(e.style, {
|
|
2158
2638
|
position: "fixed",
|
|
2159
|
-
left: `${
|
|
2160
|
-
top: `${
|
|
2161
|
-
}), this.verifyPanelLanded(e,
|
|
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 =
|
|
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}` + (
|
|
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,
|
|
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 =
|
|
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"))),
|
|
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
|
-
|
|
2689
|
+
Se(4),
|
|
2210
2690
|
// Don't use flip() - we want hint to stay opposite of dropdown
|
|
2211
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
2323
|
-
i = typeof
|
|
2802
|
+
const d = r(e);
|
|
2803
|
+
i = typeof d == "string" ? d : d.outerHTML;
|
|
2324
2804
|
} else if (this.options.renderBadgeContentCallback) {
|
|
2325
|
-
const
|
|
2326
|
-
i = typeof
|
|
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
|
|
2333
|
-
n += " " +
|
|
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 &&
|
|
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,
|
|
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
|
-
|
|
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
|
|
2416
|
-
|
|
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
|
|
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
|
|
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,
|
|
2482
|
-
if (!
|
|
2483
|
-
const
|
|
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:
|
|
2970
|
+
id: c,
|
|
2486
2971
|
trigger: u,
|
|
2487
|
-
content: this.buildBadgeTooltipContent(
|
|
2972
|
+
content: this.buildBadgeTooltipContent(d)
|
|
2488
2973
|
});
|
|
2489
|
-
const
|
|
2974
|
+
const p = this.getItemBadgeDisplayValue(d);
|
|
2490
2975
|
this.spawnTooltip({
|
|
2491
|
-
id:
|
|
2976
|
+
id: m,
|
|
2492
2977
|
trigger: n,
|
|
2493
|
-
content: this.buildRemoveButtonTooltipText(
|
|
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(
|
|
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,
|
|
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(`${
|
|
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
|
|
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 ? (
|
|
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"),
|
|
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
|
-
},
|
|
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
|
-
|
|
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
|
-
],
|
|
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
|
|
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
|
|
2706
|
-
function
|
|
2707
|
-
return Array.from(
|
|
3283
|
+
const Ae = /* @__PURE__ */ new Set();
|
|
3284
|
+
function gt() {
|
|
3285
|
+
return Array.from(Ae);
|
|
2708
3286
|
}
|
|
2709
|
-
class
|
|
3287
|
+
class ze extends $s {
|
|
2710
3288
|
constructor() {
|
|
2711
3289
|
super();
|
|
2712
|
-
|
|
2713
|
-
|
|
2714
|
-
|
|
2715
|
-
|
|
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
|
-
|
|
2718
|
-
|
|
3295
|
+
h(this, "_options");
|
|
3296
|
+
h(this, "_hasDeclarativeOptions", !1);
|
|
2719
3297
|
// Member/Callback properties
|
|
2720
|
-
|
|
2721
|
-
|
|
2722
|
-
|
|
2723
|
-
|
|
2724
|
-
|
|
2725
|
-
|
|
2726
|
-
|
|
2727
|
-
|
|
2728
|
-
|
|
2729
|
-
|
|
2730
|
-
|
|
2731
|
-
|
|
2732
|
-
|
|
2733
|
-
|
|
2734
|
-
|
|
2735
|
-
|
|
2736
|
-
|
|
2737
|
-
|
|
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
|
-
|
|
3322
|
+
h(this, "_getValueFormatCallback");
|
|
2740
3323
|
// Tooltip callbacks
|
|
2741
|
-
|
|
2742
|
-
|
|
3324
|
+
h(this, "_getBadgeTooltipCallback");
|
|
3325
|
+
h(this, "_getOptionTooltipCallback");
|
|
3326
|
+
h(this, "_getRemoveButtonTooltipCallback");
|
|
2743
3327
|
// Custom rendering callbacks
|
|
2744
|
-
|
|
2745
|
-
|
|
2746
|
-
|
|
2747
|
-
|
|
2748
|
-
|
|
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
|
-
|
|
3334
|
+
h(this, "_getCounterCallback");
|
|
2751
3335
|
// Action buttons
|
|
2752
|
-
|
|
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
|
-
|
|
2756
|
-
|
|
2757
|
-
|
|
3339
|
+
h(this, "_batchDepth", 0);
|
|
3340
|
+
h(this, "_batchPartial", {});
|
|
3341
|
+
h(this, "_batchNeedsReinit", !1);
|
|
2758
3342
|
// Event callbacks
|
|
2759
|
-
|
|
2760
|
-
|
|
2761
|
-
|
|
2762
|
-
|
|
2763
|
-
|
|
2764
|
-
|
|
2765
|
-
|
|
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 =
|
|
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
|
-
...
|
|
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
|
-
|
|
3382
|
+
Ae.add(this), this.render();
|
|
2797
3383
|
const t = this.parseDeclarativeOptions();
|
|
2798
|
-
t && (this._options && this._options.length > 0 &&
|
|
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
|
-
|
|
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 =
|
|
3397
|
+
const r = Rs.get(t);
|
|
2812
3398
|
if (r) {
|
|
2813
|
-
const 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] =
|
|
3401
|
+
this._batchPartial[r.key] = d;
|
|
2816
3402
|
return;
|
|
2817
3403
|
}
|
|
2818
|
-
const
|
|
2819
|
-
if (this.picker.updateOptions(
|
|
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
|
|
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-
|
|
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: ${
|
|
2883
|
-
<span>Search: ${
|
|
2884
|
-
<span>Loading: ${
|
|
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
|
|
2900
|
-
if (
|
|
2901
|
-
const
|
|
2902
|
-
value:
|
|
2903
|
-
label: ((a =
|
|
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
|
-
|
|
2906
|
-
} else if (
|
|
2907
|
-
const
|
|
2908
|
-
for (const
|
|
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:
|
|
2911
|
-
label: ((l =
|
|
2912
|
-
group:
|
|
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
|
-
|
|
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 ? (
|
|
2918
|
-
(
|
|
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
|
|
2925
|
-
const i =
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
3586
|
+
onSelect: (a) => {
|
|
2994
3587
|
var n;
|
|
2995
|
-
this.
|
|
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
|
-
|
|
3598
|
+
onDeselect: (a) => {
|
|
3006
3599
|
var n;
|
|
3007
|
-
this.
|
|
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
|
-
|
|
3018
|
-
this.
|
|
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
|
|
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
|
|
3313
|
-
return this.
|
|
4042
|
+
get onSelect() {
|
|
4043
|
+
return this._onSelect;
|
|
3314
4044
|
}
|
|
3315
|
-
set
|
|
3316
|
-
this.
|
|
4045
|
+
set onSelect(t) {
|
|
4046
|
+
this._onSelect = t;
|
|
3317
4047
|
}
|
|
3318
|
-
get
|
|
3319
|
-
return this.
|
|
4048
|
+
get onDeselect() {
|
|
4049
|
+
return this._onDeselect;
|
|
3320
4050
|
}
|
|
3321
|
-
set
|
|
3322
|
-
this.
|
|
4051
|
+
set onDeselect(t) {
|
|
4052
|
+
this._onDeselect = t;
|
|
3323
4053
|
}
|
|
3324
|
-
get
|
|
3325
|
-
return this.
|
|
4054
|
+
get onChange() {
|
|
4055
|
+
return this._onChange;
|
|
3326
4056
|
}
|
|
3327
|
-
set
|
|
3328
|
-
this.
|
|
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
|
-
|
|
3367
|
-
typeof window < "u" && typeof customElements < "u" && (customElements.get("web-multiselect") || customElements.define("web-multiselect",
|
|
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-
|
|
4099
|
+
version: () => "1.12.0-rc06",
|
|
3370
4100
|
config: {
|
|
3371
4101
|
name: "@keenmate/web-multiselect",
|
|
3372
|
-
version: "1.12.0-
|
|
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:
|
|
3380
|
-
disableLogging:
|
|
3381
|
-
setLogLevel:
|
|
3382
|
-
setCategoryLevel:
|
|
3383
|
-
getCategories: () => [...
|
|
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",
|
|
4116
|
+
typeof customElements < "u" && !customElements.get("web-multiselect") && customElements.define("web-multiselect", ze);
|
|
3387
4117
|
},
|
|
3388
|
-
getInstances: () =>
|
|
4118
|
+
getInstances: () => gt()
|
|
3389
4119
|
});
|
|
3390
4120
|
export {
|
|
3391
|
-
|
|
3392
|
-
|
|
3393
|
-
|
|
3394
|
-
|
|
3395
|
-
|
|
3396
|
-
|
|
3397
|
-
|
|
3398
|
-
|
|
3399
|
-
|
|
3400
|
-
|
|
3401
|
-
|
|
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
|
};
|