@adartem/adlib-attributes 0.1.3 → 0.1.5
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/attributes.js +957 -1
- package/attributes.js.map +4 -4
- package/dist/chunk-IEGIKJKW.js +5776 -0
- package/dist/chunk-IEGIKJKW.js.map +7 -0
- package/dist/chunk-M2KO765Q.js +43 -0
- package/dist/chunk-M2KO765Q.js.map +7 -0
- package/dist/chunk-NS2GB4WB.js +63 -0
- package/dist/chunk-NS2GB4WB.js.map +7 -0
- package/dist/dist-46N2ZXQQ.js +80 -0
- package/dist/dist-46N2ZXQQ.js.map +7 -0
- package/dist/dist-4EIQOOMJ.js +331 -0
- package/dist/dist-4EIQOOMJ.js.map +7 -0
- package/dist/dist-6YSNCGWO.js +227 -0
- package/dist/dist-6YSNCGWO.js.map +7 -0
- package/dist/dist-7GSHUMRU.js +60 -0
- package/dist/dist-7GSHUMRU.js.map +7 -0
- package/dist/dist-ALT6N2V6.js +165 -0
- package/dist/dist-ALT6N2V6.js.map +7 -0
- package/dist/dist-BXD5YEF3.js +290 -0
- package/dist/dist-BXD5YEF3.js.map +7 -0
- package/dist/dist-D2J4YZM6.js +52 -0
- package/dist/dist-D2J4YZM6.js.map +7 -0
- package/dist/dist-D2X7FLMD.js +126 -0
- package/dist/dist-D2X7FLMD.js.map +7 -0
- package/dist/dist-DOOWCYTM.js +92 -0
- package/dist/dist-DOOWCYTM.js.map +7 -0
- package/dist/dist-GLBAV2CS.js +202 -0
- package/dist/dist-GLBAV2CS.js.map +7 -0
- package/dist/dist-GQHJZHTH.js +73 -0
- package/dist/dist-GQHJZHTH.js.map +7 -0
- package/dist/dist-H4ILPDRU.js +59 -0
- package/dist/dist-H4ILPDRU.js.map +7 -0
- package/dist/dist-IDJRFWAH.js +71 -0
- package/dist/dist-IDJRFWAH.js.map +7 -0
- package/dist/dist-KDCRSMGT.js +63 -0
- package/dist/dist-KDCRSMGT.js.map +7 -0
- package/dist/dist-KF5AKQ52.js +740 -0
- package/dist/dist-KF5AKQ52.js.map +7 -0
- package/dist/dist-KU26ZFEG.js +169 -0
- package/dist/dist-KU26ZFEG.js.map +7 -0
- package/dist/dist-M6QCD7TL.js +4281 -0
- package/dist/dist-M6QCD7TL.js.map +7 -0
- package/dist/dist-MBFKX56S.js +482 -0
- package/dist/dist-MBFKX56S.js.map +7 -0
- package/dist/dist-NOIPAOTU.js +131 -0
- package/dist/dist-NOIPAOTU.js.map +7 -0
- package/dist/dist-QPNIGMZA.js +33028 -0
- package/dist/dist-QPNIGMZA.js.map +7 -0
- package/dist/dist-RAOZ6VUA.js +14416 -0
- package/dist/dist-RAOZ6VUA.js.map +7 -0
- package/dist/dist-RQZGUXDL.js +102 -0
- package/dist/dist-RQZGUXDL.js.map +7 -0
- package/dist/dist-T4V65O5X.js +54 -0
- package/dist/dist-T4V65O5X.js.map +7 -0
- package/dist/dist-UFMW7V6T.js +317 -0
- package/dist/dist-UFMW7V6T.js.map +7 -0
- package/dist/dist-V7I3FQX7.js +1419 -0
- package/dist/dist-V7I3FQX7.js.map +7 -0
- package/dist/dist-XTGERRGU.js +160 -0
- package/dist/dist-XTGERRGU.js.map +7 -0
- package/dist/dist-YAVVMJ7W.js +72 -0
- package/dist/dist-YAVVMJ7W.js.map +7 -0
- package/dist/dist-YGJKGMK6.js +137 -0
- package/dist/dist-YGJKGMK6.js.map +7 -0
- package/package.json +7 -7
|
@@ -0,0 +1,482 @@
|
|
|
1
|
+
import {
|
|
2
|
+
require_just_debounce
|
|
3
|
+
} from "./chunk-M2KO765Q.js";
|
|
4
|
+
import {
|
|
5
|
+
$n,
|
|
6
|
+
A,
|
|
7
|
+
Ao,
|
|
8
|
+
At,
|
|
9
|
+
Dn,
|
|
10
|
+
Dt,
|
|
11
|
+
Eo,
|
|
12
|
+
F,
|
|
13
|
+
Fn,
|
|
14
|
+
Gn,
|
|
15
|
+
Ht,
|
|
16
|
+
Jn,
|
|
17
|
+
Jo,
|
|
18
|
+
Kn,
|
|
19
|
+
Mn,
|
|
20
|
+
Ne,
|
|
21
|
+
Nt,
|
|
22
|
+
Qn,
|
|
23
|
+
So,
|
|
24
|
+
To,
|
|
25
|
+
Un,
|
|
26
|
+
Vn,
|
|
27
|
+
Vo,
|
|
28
|
+
Wt,
|
|
29
|
+
Xt,
|
|
30
|
+
Yn,
|
|
31
|
+
__toESM,
|
|
32
|
+
_n,
|
|
33
|
+
an,
|
|
34
|
+
bo,
|
|
35
|
+
eo,
|
|
36
|
+
fo,
|
|
37
|
+
go,
|
|
38
|
+
init_live_reload,
|
|
39
|
+
io,
|
|
40
|
+
kn,
|
|
41
|
+
mo,
|
|
42
|
+
no,
|
|
43
|
+
oo,
|
|
44
|
+
or,
|
|
45
|
+
qn,
|
|
46
|
+
ro,
|
|
47
|
+
rr,
|
|
48
|
+
sn,
|
|
49
|
+
tn,
|
|
50
|
+
to,
|
|
51
|
+
vn,
|
|
52
|
+
vt,
|
|
53
|
+
wn,
|
|
54
|
+
xo,
|
|
55
|
+
yo,
|
|
56
|
+
zn,
|
|
57
|
+
zo
|
|
58
|
+
} from "./chunk-IEGIKJKW.js";
|
|
59
|
+
|
|
60
|
+
// ../combobox/dist/index.js
|
|
61
|
+
init_live_reload();
|
|
62
|
+
var import_just_debounce = __toESM(require_just_debounce(), 1);
|
|
63
|
+
var E = (t) => {
|
|
64
|
+
let { dropdownToggle: e } = t;
|
|
65
|
+
A(e, ["click", "mouseup"]);
|
|
66
|
+
};
|
|
67
|
+
var w = (t) => {
|
|
68
|
+
let { clearDropdown: e, inputElement: o, optionsStore: n, selectElement: r, preventClear: i } = t, s = o?.value?.toLowerCase();
|
|
69
|
+
if (i && s) {
|
|
70
|
+
e.style.display = "block";
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
let l = n.find(({ value: p }) => p === r.value);
|
|
74
|
+
if (l) {
|
|
75
|
+
let p = l.text.toLowerCase();
|
|
76
|
+
if (!s) {
|
|
77
|
+
e.style.display = "none";
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (s && s !== p) {
|
|
81
|
+
e.style.display = "none";
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
e.style.display = "block";
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
e.style.display = "none";
|
|
88
|
+
};
|
|
89
|
+
var O = (t) => {
|
|
90
|
+
let { inputElement: e } = t, o = e.value.length;
|
|
91
|
+
e.setSelectionRange(o, o), e.focus(), e.setAttribute(vn, "0");
|
|
92
|
+
};
|
|
93
|
+
var H = (t) => {
|
|
94
|
+
let e = new Event("updateComboboxInputField");
|
|
95
|
+
t.inputElement.dispatchEvent(e);
|
|
96
|
+
};
|
|
97
|
+
var L = (t, e) => {
|
|
98
|
+
let o = e.getAttribute(io);
|
|
99
|
+
t.setAttribute(Yn, `${o || ""}`);
|
|
100
|
+
};
|
|
101
|
+
var N = (t, { optionsStore: e }) => {
|
|
102
|
+
let { target: o } = t;
|
|
103
|
+
if (!tn(o)) return;
|
|
104
|
+
let n = o.closest("a");
|
|
105
|
+
if (!n) return;
|
|
106
|
+
let r = e.find(({ element: i }) => i === n);
|
|
107
|
+
if (r) return r;
|
|
108
|
+
};
|
|
109
|
+
var _ = (t) => {
|
|
110
|
+
t.preventDefault(), t.stopPropagation();
|
|
111
|
+
};
|
|
112
|
+
var y = "ad-combobox";
|
|
113
|
+
var ot = { hideinitial: { type: "boolean", default: false }, preventclear: { type: "boolean", default: false }, a11y: { type: "boolean", default: true } };
|
|
114
|
+
var F2 = ["dropdown", "label", "clear", "empty"];
|
|
115
|
+
var B = { disabled: { key: "disabled", values: ["true"] }, a11y: { key: "a11y", values: ["false"] } };
|
|
116
|
+
var W = "w--open";
|
|
117
|
+
var C = "ad-dropdown-toggle-key";
|
|
118
|
+
var nt = [fo, go, xo, yo];
|
|
119
|
+
var { getInstance: io2, getPresenceSelector: lo, getElementSelector: rt, getSettingSelector: ao, queryElement: x, queryAllElements: M, getAttribute: po, hasAttributeValue: uo, getSettingAttributeName: co } = Jo(y, F2, B);
|
|
120
|
+
var st = (t, e) => {
|
|
121
|
+
e.navListElement.style.pointerEvents === "none" && (e.navListElement.style.pointerEvents = "auto");
|
|
122
|
+
};
|
|
123
|
+
var lt = (t, e) => {
|
|
124
|
+
t.setAttribute(Kn, Dn.listbox), e.setAttribute(Mn, Dn.listbox), e.setAttribute(Fn, "false");
|
|
125
|
+
};
|
|
126
|
+
var at = (t) => {
|
|
127
|
+
t.setAttribute(Mn, Dn.option);
|
|
128
|
+
};
|
|
129
|
+
var I = (t, e, o = false) => {
|
|
130
|
+
let { selectElement: n, optionsStore: r } = t;
|
|
131
|
+
e && e.value && Vo(n, e.value);
|
|
132
|
+
for (let i of r) {
|
|
133
|
+
let { element: s } = i, l = s === e?.element;
|
|
134
|
+
i.selected = l, i.focused = l, s.classList[l ? "add" : "remove"](Ht), s.setAttribute(Un, `${l}`), s.setAttribute(vn, "-1");
|
|
135
|
+
}
|
|
136
|
+
o && E(t);
|
|
137
|
+
};
|
|
138
|
+
var b = (t, e = "", o = false, n = false, r = false) => {
|
|
139
|
+
let { optionsStore: i, optionTemplate: s, optionsList: l, label: p, noResultsTemplate: c, selectElement: { options: v, value: g } } = t;
|
|
140
|
+
c?.remove();
|
|
141
|
+
for (let { element: u } of i.values()) u.remove();
|
|
142
|
+
i.splice(0, i.length);
|
|
143
|
+
let A2, a = Array.from(v).filter((u) => u.value && u.textContent), D = a.filter((u) => u.text.trim().toLowerCase().includes(e.trim().toLowerCase()));
|
|
144
|
+
if (D.length === 0 && c) {
|
|
145
|
+
l.appendChild(c);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
let f = (o ? a : D).sort((u, S) => u.value.localeCompare(S.value));
|
|
149
|
+
for (let { value: u, text: S } of f) {
|
|
150
|
+
let d = F(s), m = Ne(d) || d;
|
|
151
|
+
m.textContent = S;
|
|
152
|
+
let Lt = d.getAttribute(io) || "", Ct = `ad-option-${u.toLowerCase().trim().replace(/\s/g, "-")}`;
|
|
153
|
+
d.setAttribute(io, Lt || Ct), d.setAttribute(oo, `${f.length}`);
|
|
154
|
+
let Kt = f.findIndex((xt) => xt.value === u);
|
|
155
|
+
d.setAttribute(ro, `${Kt + 1}`), at(d), l.appendChild(d);
|
|
156
|
+
let tt = u === g, et = { text: S, value: u, element: d, selected: tt, focused: false };
|
|
157
|
+
tt && (A2 = et), i.push(et);
|
|
158
|
+
}
|
|
159
|
+
if (n && I(t, A2), !e && A2 && p) {
|
|
160
|
+
p.textContent || "";
|
|
161
|
+
I(t, { ...A2, value: "" }, r);
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
var G = (t, e) => {
|
|
165
|
+
let { selectElement: o, inputElement: n } = e;
|
|
166
|
+
t.stopPropagation(), t.preventDefault(), n.value = "", o.value = "", b(e, "", true, true), O(e), w(e);
|
|
167
|
+
};
|
|
168
|
+
var V = (t, e) => {
|
|
169
|
+
let { key: o } = t;
|
|
170
|
+
t.stopPropagation(), (o === mo || o === fo) && (t.preventDefault(), G(t, e));
|
|
171
|
+
};
|
|
172
|
+
var ft = (t, e) => {
|
|
173
|
+
t.stopPropagation(), t.stopImmediatePropagation();
|
|
174
|
+
let { dropdownToggle: o, inputElement: n } = e, { key: r } = t, s = t.target.value.toLowerCase().trim() ?? "";
|
|
175
|
+
b(e, s, !s, true);
|
|
176
|
+
let l = o.getAttribute($n) === "true";
|
|
177
|
+
if (r === yo) {
|
|
178
|
+
if (l || E(e), s.length > 0) {
|
|
179
|
+
let p = e.optionsStore.find(({ selected: v }) => v), c = p?.value.toLocaleLowerCase() === s.toLowerCase();
|
|
180
|
+
p && c ? b(e, s, true, true) : b(e, s, false, true);
|
|
181
|
+
} else b(e, "", true, true);
|
|
182
|
+
n.setAttribute(C, yo), ie(e);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
var mt = (t, e) => {
|
|
187
|
+
t.stopPropagation();
|
|
188
|
+
let { key: o } = t, { dropdownToggle: n, inputElement: r } = e;
|
|
189
|
+
r.setAttribute(C, To);
|
|
190
|
+
let s = t.target.value.toLowerCase().trim() ?? "", l = n.getAttribute($n) === "true";
|
|
191
|
+
if (o === Eo) {
|
|
192
|
+
R(t, e), l && E(e);
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
if (!(o === mo || o === yo || o === go || o === fo || o === Ao || o === So)) {
|
|
196
|
+
if (o === xo && l) {
|
|
197
|
+
E(e);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
if (o === bo && s.length === 0) {
|
|
201
|
+
b(e, "", true, true);
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
if (o === bo && s.length > 0) {
|
|
205
|
+
b(e, s, !s, true), l || E(e);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
!l && s && o !== xo && E(e), w(e), b(e, s, !s, true);
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
var $ = (t, e) => {
|
|
212
|
+
t.stopPropagation(), t.preventDefault();
|
|
213
|
+
let { dropdownToggle: o, inputElement: n } = e;
|
|
214
|
+
n.setAttribute(C, To);
|
|
215
|
+
let r = o.getAttribute($n) === "true";
|
|
216
|
+
n.setAttribute($n, `${!r}`), !r && (b(e, "", true, true), E(e));
|
|
217
|
+
};
|
|
218
|
+
var R = (t, e, o = false) => {
|
|
219
|
+
let { inputElement: n, selectElement: r, preventClear: i } = e;
|
|
220
|
+
o || O(e), w(e);
|
|
221
|
+
let s = e.optionsStore.find(({ selected: p }) => p);
|
|
222
|
+
if (s) return;
|
|
223
|
+
if (o) {
|
|
224
|
+
if (t.relatedTarget || i) return;
|
|
225
|
+
n.value = "", r.value = "";
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
if (!s) {
|
|
229
|
+
if (i) return;
|
|
230
|
+
n.value = "", r.value = "";
|
|
231
|
+
}
|
|
232
|
+
e.dropdownToggle.getAttribute($n) === "true" && E(e);
|
|
233
|
+
};
|
|
234
|
+
var Et = (t, e) => {
|
|
235
|
+
let { optionsStore: o, inputElement: n } = e, r = t.target, i = o.find(({ selected: c }) => c), s = i?.text ?? "", l = i?.value ?? "", p = r.value;
|
|
236
|
+
if (i && l !== p) {
|
|
237
|
+
n.value = s, w(e);
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
var ie = (t) => {
|
|
242
|
+
let { optionsStore: e, inputElement: o } = t, n = e.find(({ selected: r }) => r);
|
|
243
|
+
if (!n && e.length > 0) {
|
|
244
|
+
let [r] = e.filter(({ hidden: i }) => !i);
|
|
245
|
+
r.element.focus(), L(o, r.element);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
if (n) {
|
|
249
|
+
n.element.focus(), L(o, n.element);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
var X = { x: 0, y: 0 };
|
|
254
|
+
var ye = { preventclear: { type: "boolean" }, hideinitial: { type: "boolean" } };
|
|
255
|
+
var bt = async (t, e, o) => Xt({ el: o.referenceElement, moduleKey: y, includeGlobal: true, ctx: { event: t }, guardsRegistry: o.guardsRegistry ?? {}, readOptions: () => zo(o.referenceElement, y, ye, { includeGlobal: true }), action: () => {
|
|
256
|
+
e.selected || I(o, e), Vo(o.inputElement, e.text), E(o);
|
|
257
|
+
} });
|
|
258
|
+
var j = async (t, e) => {
|
|
259
|
+
let o = t.target;
|
|
260
|
+
if (o === e.selectElement) return;
|
|
261
|
+
if (t.preventDefault(), o.tagName === "A" && t.type === "mousemove") {
|
|
262
|
+
let s = t, l = { x: s.clientX, y: s.clientY };
|
|
263
|
+
(X.x !== l.x || X.y !== l.y) && (X = l, k(t, true, e));
|
|
264
|
+
}
|
|
265
|
+
let n = N(t, e);
|
|
266
|
+
if (!n) return;
|
|
267
|
+
let r = n?.element?.getAttribute(io);
|
|
268
|
+
e.inputElement.setAttribute(Yn, `${r || ""}`), t.type === To && await bt(t, n, e);
|
|
269
|
+
};
|
|
270
|
+
var k = (t, e, o) => {
|
|
271
|
+
let n = N(t, o);
|
|
272
|
+
if (!n || t.type === "focusout") return;
|
|
273
|
+
let r = o.optionsStore.find(({ focused: i }) => i);
|
|
274
|
+
r && (r?.element.setAttribute(vn, "-1"), r.focused = false), n.element.setAttribute(vn, "0"), n.focused = e, n.element.focus(), L(o.inputElement, n.element);
|
|
275
|
+
};
|
|
276
|
+
var ve = (t, e) => {
|
|
277
|
+
let { shiftKey: o } = t;
|
|
278
|
+
o && t.preventDefault(), t.target && (t.target.click(), O(e)), E(e);
|
|
279
|
+
};
|
|
280
|
+
var Se = (t, e) => {
|
|
281
|
+
_(t);
|
|
282
|
+
let { optionsStore: o, inputElement: n, navListElement: r } = e, { key: i } = t, s = o.findIndex(({ focused: f }) => f);
|
|
283
|
+
if (s < 0) return;
|
|
284
|
+
let l = o[i === xo ? s - 1 : s + 1];
|
|
285
|
+
if (i === xo && !l) {
|
|
286
|
+
E(e);
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
r.style.pointerEvents = "none";
|
|
290
|
+
let p = l?.element;
|
|
291
|
+
if (!p) return;
|
|
292
|
+
let c = p.getBoundingClientRect(), v = r.getBoundingClientRect(), g = v.bottom - p.offsetHeight, A2 = v.top + p.offsetHeight, a = c.bottom >= g, D = A2 >= c.top;
|
|
293
|
+
if (p.focus(), D) {
|
|
294
|
+
let f = p.offsetTop + p.offsetHeight, u = r.scrollTop + r.offsetHeight;
|
|
295
|
+
if (f > u) {
|
|
296
|
+
r.scrollTop = f - r.offsetHeight;
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
if (p.offsetTop < r.scrollTop) {
|
|
300
|
+
r.scrollTop = p.offsetTop;
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
r.scrollTop = p.offsetTop;
|
|
304
|
+
}
|
|
305
|
+
if (a && i !== xo) {
|
|
306
|
+
let f = p.offsetTop + p.offsetHeight, u = r.scrollTop + r.offsetHeight;
|
|
307
|
+
if (f < u) {
|
|
308
|
+
r.scrollTop = f - r.offsetHeight;
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
if (p.offsetTop > r.scrollTop) {
|
|
312
|
+
r.scrollTop = p.offsetTop;
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
r.scrollTop = p.offsetTop;
|
|
316
|
+
}
|
|
317
|
+
L(n, l?.element);
|
|
318
|
+
};
|
|
319
|
+
var yt = async (t, e) => {
|
|
320
|
+
let { key: o } = t;
|
|
321
|
+
if (_(t), o === Eo) {
|
|
322
|
+
R(t, e), e.dropdownToggle.getAttribute($n) === "true" && E(e);
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
let n = o === mo, r = N(t, e);
|
|
326
|
+
n && r && await bt(t, r, e), nt.includes(o) && (o === go ? ve(t, e) : (o === xo || o === yo) && Se(t, e));
|
|
327
|
+
};
|
|
328
|
+
var vt2 = (t, { optionsStore: e }) => {
|
|
329
|
+
let { key: o } = t;
|
|
330
|
+
if (t.stopPropagation(), o !== yo) return;
|
|
331
|
+
let n = e.find(({ hidden: i }) => !i), r = e.find(({ focused: i }) => i);
|
|
332
|
+
if (r) {
|
|
333
|
+
r.element.focus();
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
if (n) {
|
|
337
|
+
n.element.focus();
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
};
|
|
341
|
+
var St = (t) => {
|
|
342
|
+
let { selectElement: e, optionsStore: o } = t, n = o.find(({ value: r }) => r === e.value);
|
|
343
|
+
n && (Vo(t.inputElement, n.text), t.inputElement.dispatchEvent(new Event("change")), w(t), I(t, n));
|
|
344
|
+
};
|
|
345
|
+
var gt = (t) => {
|
|
346
|
+
let { dropdownToggle: e, dropdownList: o, inputElement: n, clearDropdown: r, body: i } = t, s = Nt(), l = t.referenceElement, p = `.${Wt.dropdownToggle}`, c = `.${Wt.dropdownList}`, v = rt("clear"), g = At(e, y, "a11y", { type: "boolean", default: true }, { includeGlobal: true });
|
|
347
|
+
g && Dt(e), e.onmouseup = (a) => {
|
|
348
|
+
_(a);
|
|
349
|
+
};
|
|
350
|
+
let A2 = () => {
|
|
351
|
+
E(t);
|
|
352
|
+
};
|
|
353
|
+
return s.add(kn(i, "mousemove", (a) => st(a, t))), s.add(kn(e, "focus", () => n.focus())), s.add(kn(o, "mousemove", (a) => j(a, t))), s.add(kn(o, "mouseenter", _)), s.add(kn(o, "mouseup", _)), s.add(kn(n, "keyup", (a) => ft(a, t))), s.add(kn(n, "mouseup", (a) => $(a, t))), s.add(kn(n, "blur", (a) => R(a, t, true))), s.add(kn(n, "updateComboboxInputField", (a) => Et(a, t))), s.add(kn(r, "mouseup", (a) => V(a, t))), s.add(_n(p, { keydown: ({ event: a, el: D }) => {
|
|
354
|
+
if (D !== e) return;
|
|
355
|
+
let f = a;
|
|
356
|
+
vt2(f, t), g && vt(f) && ((f.key === " " || f.key === "Spacebar") && f.preventDefault(), A2());
|
|
357
|
+
}, click: ({ el: a }) => {
|
|
358
|
+
a === e && A2();
|
|
359
|
+
} }, { root: l })), s.add(_n(c, { click: ({ event: a }) => j(a, t), keydown: ({ event: a }) => yt(a, t), focusin: ({ event: a }) => k(a, true, t), focusout: ({ event: a }) => k(a, false, t) }, { root: l })), s.add(_n("input", { input: () => {
|
|
360
|
+
e.getAttribute($n) === "true" || E(t);
|
|
361
|
+
}, keydown: ({ event: a }) => mt(a, t), click: ({ event: a }) => $(a, t) }, { root: l })), s.add(_n("select", { change: () => St(t) }, { root: l })), s.add(_n(v, { click: ({ event: a }) => G(a, t), keydown: ({ event: a }) => V(a, t) }, { root: l })), () => s.run();
|
|
362
|
+
};
|
|
363
|
+
var he = (t) => {
|
|
364
|
+
let { dropdownList: e, navListElement: o, optionsStore: n, selectElement: r, inputElement: i } = t;
|
|
365
|
+
o.classList.contains(W);
|
|
366
|
+
let l = false, p = (0, import_just_debounce.default)((v) => {
|
|
367
|
+
v.forEach((a) => {
|
|
368
|
+
if (a.attributeName === "class") {
|
|
369
|
+
let D = r.value, f = i.value, u = i.getAttribute(C), S = Array.from(n).find((m) => !m.hidden), d = Array.from(n).find((m) => m?.value.toLowerCase().trim() === D?.toLowerCase().trim());
|
|
370
|
+
if (l = a.target.classList.contains(W), !d && l && (o.scrollTop = 0), l) {
|
|
371
|
+
let m = d || S;
|
|
372
|
+
m && m.element.focus();
|
|
373
|
+
}
|
|
374
|
+
if (i.setAttribute($n, `${l}`), d) {
|
|
375
|
+
let m = d.element.getAttribute(io);
|
|
376
|
+
if (i.setAttribute(Yn, `${m}`), l && u === yo) {
|
|
377
|
+
d.element.focus();
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
if (l && u === To) {
|
|
381
|
+
d.element.focus(), O(t);
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
384
|
+
l || (H(t), O(t));
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
if (!d && f && l && S) {
|
|
388
|
+
u === yo && S.element.focus(), u === To && O(t);
|
|
389
|
+
return;
|
|
390
|
+
}
|
|
391
|
+
if (l && !d) {
|
|
392
|
+
if (i.setAttribute(Yn, ""), u === yo && S) {
|
|
393
|
+
S.element.focus();
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
396
|
+
O(t);
|
|
397
|
+
}
|
|
398
|
+
l || (H(t), O(t), d || i.setAttribute(Yn, ""));
|
|
399
|
+
}
|
|
400
|
+
});
|
|
401
|
+
n.find(({ selected: a }) => a);
|
|
402
|
+
n.find(({ hidden: a }) => !a);
|
|
403
|
+
}, 20), c = new MutationObserver(p);
|
|
404
|
+
return c.observe(e, { attributes: true, attributeFilter: ["class", "style"] }), c;
|
|
405
|
+
};
|
|
406
|
+
var Re = (t) => {
|
|
407
|
+
let { selectElement: e } = t, o = new MutationObserver((n) => {
|
|
408
|
+
n.some(({ addedNodes: i, removedNodes: s }) => [...i, ...s].some(an)) && b(t);
|
|
409
|
+
});
|
|
410
|
+
return o.observe(e, { childList: true }), o;
|
|
411
|
+
};
|
|
412
|
+
var Tt = (t) => {
|
|
413
|
+
let e = he(t), o = Re(t);
|
|
414
|
+
return () => {
|
|
415
|
+
e.disconnect(), o.disconnect();
|
|
416
|
+
};
|
|
417
|
+
};
|
|
418
|
+
var It = (t, e) => {
|
|
419
|
+
let o = [], n = t.closest(`.${Wt.dropdown}`);
|
|
420
|
+
if (!n) return;
|
|
421
|
+
let r = n.querySelector("select"), i = n.querySelector("input"), s = x("dropdown")?.querySelector("nav"), { body: l } = document;
|
|
422
|
+
if (!r || !i || !s) return;
|
|
423
|
+
let p = n.querySelector(`.${Wt.dropdownToggle}`), c = n.querySelector(`.${Wt.dropdownList}`);
|
|
424
|
+
if (!p || !c) return;
|
|
425
|
+
p.setAttribute("disabled", "disabled"), lt(p, c);
|
|
426
|
+
let v = x("label", { scope: p }) || Ne(p) || p, g = M("clear", { scope: c }), A2 = [...c.querySelectorAll("a")].find((m) => !g.includes(m));
|
|
427
|
+
if (!sn(A2)) return;
|
|
428
|
+
let a = A2.parentElement;
|
|
429
|
+
if (!a) return;
|
|
430
|
+
let D = Array.from(r.querySelectorAll("option")).find((m) => m.value === ""), f = x("empty", { scope: n }), u = x("clear", { scope: n });
|
|
431
|
+
for (let m of [A2]) m && (m.href = "#", m.setAttribute(vn, "-1"), m.removeAttribute(Vn), m.remove());
|
|
432
|
+
let S = e.hideinitial ?? false, d = e.preventclear ?? false;
|
|
433
|
+
return Ge(i, r, s, u, d), { referenceElement: t, optionsStore: o, selectElement: r, dropdownToggle: p, dropdownList: c, label: v, optionTemplate: A2, noResultsTemplate: f, optionsList: a, hideInitial: S, preventClear: d, inputElement: i, clearDropdown: u, defaultOption: D, navListElement: s, body: l, guardsRegistry: void 0 };
|
|
434
|
+
};
|
|
435
|
+
var Ge = (t, e, o, n, r) => {
|
|
436
|
+
t?.parentElement?.setAttribute(vn, "-1"), r || t?.removeAttribute(no), t?.setAttribute(vn, "0"), t?.removeAttribute("data-name"), e.hasAttribute(to) && t?.setAttribute(to, "required"), t?.setAttribute(eo, "combobox"), t?.setAttribute(zn, "off");
|
|
437
|
+
let i = o.getAttribute("id") || "";
|
|
438
|
+
t?.setAttribute(Gn, i), t?.setAttribute(qn, i), t?.setAttribute(Jn, "list"), t?.setAttribute($n, "false"), e.setAttribute(Qn, "true"), e.setAttribute(vn, "-1"), o.setAttribute(vn, "-1"), n?.setAttribute(vn, "0"), n?.setAttribute(eo, "button"), n.style.display = "none";
|
|
439
|
+
};
|
|
440
|
+
var J = async () => {
|
|
441
|
+
await rr(), await or("list");
|
|
442
|
+
let t = Nt(), e = { activeCount: 0, disabledCount: 0, guardFailedCount: 0, lastNonActivationReason: null }, o = M("dropdown"), n = [];
|
|
443
|
+
for (let r of o) {
|
|
444
|
+
let i = await Xt({ el: r, moduleKey: y, includeGlobal: false, guardsRegistry: {}, readOptions: () => zo(r, y, ot, { includeGlobal: false }), action: (s) => {
|
|
445
|
+
let l = It(r, s);
|
|
446
|
+
if (!l) return;
|
|
447
|
+
b(l, "", false, true);
|
|
448
|
+
let p = Tt(l), c = gt(l);
|
|
449
|
+
t.add(p), t.add(c), n.push(r);
|
|
450
|
+
} });
|
|
451
|
+
i.ok ? e.activeCount++ : i.reason === "disabled" ? (e.disabledCount++, e.lastNonActivationReason = "disabled") : i.reason === "guard-failed" && (e.guardFailedCount++, e.lastNonActivationReason = "guard-failed");
|
|
452
|
+
}
|
|
453
|
+
return { result: { elements: n, diagnostics: e }, destroy() {
|
|
454
|
+
t.run();
|
|
455
|
+
} };
|
|
456
|
+
};
|
|
457
|
+
var Qe = "0.1.0";
|
|
458
|
+
var _n2 = wn({ key: y, init: async (t) => {
|
|
459
|
+
let e = Nt(), o = await J();
|
|
460
|
+
o && typeof o.destroy == "function" && e.add(() => {
|
|
461
|
+
try {
|
|
462
|
+
o.destroy();
|
|
463
|
+
} catch {
|
|
464
|
+
}
|
|
465
|
+
});
|
|
466
|
+
let n = { key: y, destroy: () => e.run() };
|
|
467
|
+
return o && typeof o.restart == "function" ? { ...n, restart: async () => {
|
|
468
|
+
try {
|
|
469
|
+
await o.restart();
|
|
470
|
+
} catch {
|
|
471
|
+
}
|
|
472
|
+
} } : n;
|
|
473
|
+
} });
|
|
474
|
+
export {
|
|
475
|
+
F2 as ELEMENTS,
|
|
476
|
+
y as MODULE_KEY,
|
|
477
|
+
B as SETTINGS,
|
|
478
|
+
_n2 as default,
|
|
479
|
+
J as init,
|
|
480
|
+
Qe as version
|
|
481
|
+
};
|
|
482
|
+
//# sourceMappingURL=dist-MBFKX56S.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../combobox/src/utils/dropdowns.ts", "../../combobox/src/utils/constants.ts", "../../combobox/src/utils/selectors.ts", "../../combobox/src/actions/body/index.ts", "../../combobox/src/actions/a11y.ts", "../../combobox/src/actions/state.ts", "../../combobox/src/actions/populate.ts", "../../combobox/src/actions/clearDropdown/index.ts", "../../combobox/src/actions/input/index.ts", "../../combobox/src/actions/dropdownList/index.ts", "../../combobox/src/actions/dropdownToggle/index.ts", "../../combobox/src/actions/selectElement/index.ts", "../../combobox/src/actions/events.ts", "../../combobox/src/actions/observe.ts", "../../combobox/src/actions/settings.ts", "../../combobox/src/init.ts", "../../combobox/package.json", "../../combobox/src/index.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n ARIA_ACTIVEDESCENDANT_KEY,\n ID_KEY,\n isElement,\n simulateEvent,\n TABINDEX_KEY,\n} from '@adartem/adlib-utils';\n\nimport type { Settings } from './types';\n\n/**\n * `toggleDropdown()` closes or opens a dropdown element.\n * @param settings A {@link Settings} element.\n * @param focusInputElement Defaults to `true`.\n */\nexport const toggleDropdown = (settings: Settings) => {\n const { dropdownToggle } = settings;\n\n simulateEvent(dropdownToggle, ['click', 'mouseup']);\n};\n\n/**\n * `toggleDropdownCloseIcon()` handles show/hide state of the dropdown close icon.\n * @param settings A {@link Settings} element.\n */\nexport const toggleDropdownCloseIcon = (settings: Settings) => {\n const { clearDropdown, inputElement, optionsStore, selectElement, preventClear } = settings;\n\n const inputElValue = inputElement?.value?.toLowerCase();\n\n if (preventClear && inputElValue) {\n clearDropdown.style.display = 'block';\n\n return;\n }\n\n const selectedOption = optionsStore.find(({ value }) => value === selectElement.value);\n\n if (selectedOption) {\n const selectedText = selectedOption.text.toLowerCase();\n\n if (!inputElValue) {\n clearDropdown.style.display = 'none';\n return;\n }\n\n if (inputElValue && inputElValue !== selectedText) {\n clearDropdown.style.display = 'none';\n return;\n }\n\n clearDropdown.style.display = 'block';\n\n return;\n }\n\n clearDropdown.style.display = 'none';\n};\n\n/**\n * `focusOnInput()` focuses the input element.\n * @param settings A {@link Settings} element.\n */\n\nexport const focusOnInput = (settings: Settings) => {\n const { inputElement } = settings;\n\n const end = inputElement.value.length;\n\n inputElement.setSelectionRange(end, end);\n inputElement.focus();\n inputElement.setAttribute(TABINDEX_KEY, '0');\n};\n\n/**\n * dispatches custom event `updateComboboxInputField`\n */\nexport const updateComboboxInputField = (settings: Settings) => {\n const event = new Event('updateComboboxInputField');\n\n settings.inputElement.dispatchEvent(event);\n};\n\n/**\n * This function sets the `aria-activedescendant` attribute on the input element.\n * @param inputElement input element\n * @param focusedElement element that is currently focused\n */\nexport const setActiveDescendant = (\n inputElement: HTMLInputElement,\n focusedElement: HTMLAnchorElement | HTMLOptionElement,\n) => {\n const optionId = focusedElement.getAttribute(ID_KEY);\n\n inputElement.setAttribute(ARIA_ACTIVEDESCENDANT_KEY, `${optionId || ''}`);\n};\n\n/**\n * Returns the {@link OptionData} of an event target.\n *\n * @param e The Event object.\n * @param settings The instance {@link Settings}.\n *\n * @returns The {@link OptionData} object, if found.\n */\nexport const getClickedOptionData = (e: Event, { optionsStore }: Settings) => {\n const { target } = e;\n\n if (!isElement(target)) return;\n\n const optionElement = target.closest('a');\n if (!optionElement) return;\n\n const optionData = optionsStore.find(({ element }) => element === optionElement);\n if (!optionData) return;\n\n return optionData;\n};\n\n/**\n * Function that accepts an event object and stops propagation and default behavior.\n */\nexport const cleanupBubble = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n};\n", "import {\n ARROW_DOWN_KEY,\n ARROW_UP_KEY,\n type AttributeElements,\n type AttributeSettings,\n type OptionsSchema,\n SPACE_KEY,\n TAB_KEY,\n} from '@adartem/adlib-utils';\n\nexport const MODULE_KEY = 'ad-combobox' as const;\n\nexport const OPTIONS = {\n /**\n * Defines if the reset option should be hidden whenever there isn't an active selection.\n */\n hideinitial: { type: 'boolean', default: false },\n\n /**\n * If no results were found from `input` field search, it prevents input field from being cleared.\n */\n preventclear: { type: 'boolean', default: false },\n\n /**\n * Enable or disable accessibility features (keyboard interaction, ARIA attributes).\n * Enabled by default, can be disabled by setting to \"false\".\n */\n a11y: { type: 'boolean', default: true },\n} as const satisfies OptionsSchema;\n\nexport const ELEMENTS = [\n /**\n * Defines a dropdown element.\n */\n 'dropdown',\n\n /**\n * Defines the label that displays the currently selected option.\n */\n 'label',\n\n /**\n * Defines an option that will clear dropdown selection and input field.\n */\n 'clear',\n\n /**\n * Defines a state where no results were found from `input` field search.\n */\n 'empty',\n] as const satisfies AttributeElements;\n\nexport const SETTINGS = {\n /**\n * Disables the combobox instance.\n */\n disabled: { key: 'disabled', values: ['true'] },\n\n /**\n * Enable or disable accessibility features (keyboard interaction, ARIA attributes).\n * Enabled by default, can be disabled by setting to \"false\".\n */\n a11y: { key: 'a11y', values: ['false'] },\n} as const satisfies AttributeSettings;\n\nexport const DROPDOWN_IS_OPEN = 'w--open';\n\nexport const FS_DROPDOWN_TOGGLE_KEY = 'ad-dropdown-toggle-key';\n\nexport const CONTROL_KEYS = [SPACE_KEY, TAB_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY];\n", "import { generateSelectors } from '@adartem/adlib-utils';\n\nimport { ELEMENTS, MODULE_KEY, SETTINGS } from './constants';\n\nexport const {\n getInstance,\n getPresenceSelector,\n getElementSelector,\n getSettingSelector,\n queryElement,\n queryAllElements,\n getAttribute,\n hasAttributeValue,\n getSettingAttributeName,\n} = generateSelectors(MODULE_KEY, ELEMENTS, SETTINGS);\n", "import type { Settings } from '../../utils/types';\n\n/**\n * This handles mouse movements on the body element and manipulates dropdown list pointer events.\n * @param e MouseEvent\n * @param settings {@link Settings}\n */\nexport const handleBodyMouseMovements = (e: MouseEvent, settings: Settings) => {\n if (settings.navListElement.style.pointerEvents === 'none') {\n settings.navListElement.style.pointerEvents = 'auto';\n }\n};\n", "import {\n ARIA_HASPOPUP_KEY,\n ARIA_MULTISELECTABLE_KEY,\n ARIA_ROLE_KEY,\n ARIA_ROLE_VALUES,\n type DropdownList,\n type DropdownToggle,\n} from '@adartem/adlib-utils';\n\nimport type { OptionData } from '../utils/types';\n\n/**\n * Adds `a11ty` attributes to the Dropdown elements.\n * @param dropdownToggle The {@link DropdownToggle} element.\n * @param dropdownList The {@link DropdownList} element.\n */\nexport const setDropdownAria = (dropdownToggle: DropdownToggle, dropdownList: DropdownList) => {\n dropdownToggle.setAttribute(ARIA_HASPOPUP_KEY, ARIA_ROLE_VALUES.listbox);\n dropdownList.setAttribute(ARIA_ROLE_KEY, ARIA_ROLE_VALUES.listbox);\n dropdownList.setAttribute(ARIA_MULTISELECTABLE_KEY, 'false');\n};\n\n/**\n * Sets the required aria attributes to a custom option element.\n * @param element\n */\nexport const setOptionAria = (element: OptionData['element']) => {\n element.setAttribute(ARIA_ROLE_KEY, ARIA_ROLE_VALUES.option);\n};\n", "import {\n ARIA_SELECTED_KEY,\n CURRENT_CSS_CLASS,\n setFormFieldValue,\n TABINDEX_KEY,\n} from '@adartem/adlib-utils';\n\nimport { toggleDropdown } from '../utils';\nimport type { OptionData, Settings } from '../utils/types';\n\n/**\n * Sets the selected state to an option and removes it from a previous one, if existing.\n * This also determines whether the close icon should show or hide\n * @param settings The instance {@link Settings}.\n * @param selectedOption The selected {@link OptionData}, if existing.\n * @param {boolean} close if dropdown should be closed or opened\n */\nexport const updateOptionsState = (\n settings: Settings,\n selectedOption?: OptionData,\n close = false,\n) => {\n const { selectElement, optionsStore } = settings;\n\n if (selectedOption && selectedOption.value) {\n setFormFieldValue(selectElement, selectedOption.value);\n }\n\n for (const optionData of optionsStore) {\n const { element } = optionData;\n\n const selected = element === selectedOption?.element;\n\n optionData.selected = selected;\n optionData.focused = selected;\n\n element.classList[selected ? 'add' : 'remove'](CURRENT_CSS_CLASS);\n element.setAttribute(ARIA_SELECTED_KEY, `${selected}`);\n element.setAttribute(TABINDEX_KEY, '-1');\n }\n\n if (close) toggleDropdown(settings);\n};\n", "import {\n ARIA_POSINSET_KEY,\n ARIA_SETSIZE_KEY,\n cloneNode,\n findTextNode,\n ID_KEY,\n} from '@adartem/adlib-utils';\n\nimport type { OptionData, Settings } from '../utils/types';\nimport { setOptionAria } from './a11y';\nimport { updateOptionsState } from './state';\n\n/**\n * Populates the custom options based on the `HTMLSelectElement`'s options.\n * @param settings The instance {@link Settings}.\n * @param {string} inputValue Value from input field.\n * @param {boolean} showAll if dropdown should show all or filtered options.\n * @param {boolean} isTyping user is searching.\n * @param {boolean} initialLoad if dropdown is loaded for the first time.\n */\nexport const populateOptions = (\n settings: Settings,\n inputValue = '',\n showAll = false,\n isTyping = false,\n initialLoad = false,\n) => {\n const {\n optionsStore,\n optionTemplate,\n optionsList,\n label,\n noResultsTemplate,\n selectElement: { options, value: currentValue },\n } = settings;\n\n // Clear existing options\n noResultsTemplate?.remove();\n for (const { element } of optionsStore.values()) {\n element.remove();\n }\n\n optionsStore.splice(0, optionsStore.length);\n\n let selectedOption: OptionData | undefined;\n\n const optionsConfigured = Array.from(options).filter((item) => item.value && item.textContent);\n const optionsFiltered = optionsConfigured.filter((item) =>\n item.text.trim().toLowerCase().includes(inputValue.trim().toLowerCase()),\n );\n\n if (optionsFiltered.length === 0 && noResultsTemplate) {\n optionsList.appendChild(noResultsTemplate);\n\n return;\n }\n\n const optionsArr = (showAll ? optionsConfigured : optionsFiltered).sort((a, b) =>\n a.value.localeCompare(b.value),\n );\n\n // Create new options\n for (const { value, text } of optionsArr) {\n const element = cloneNode(optionTemplate) as HTMLAnchorElement;\n\n const textNode = findTextNode(element) || element;\n textNode.textContent = text;\n\n const elementId = element.getAttribute(ID_KEY) || '';\n const id = `ad-option-${value.toLowerCase().trim().replace(/\\s/g, '-')}`;\n\n element.setAttribute(ID_KEY, elementId || id);\n element.setAttribute(ARIA_SETSIZE_KEY, `${optionsArr.length}`);\n\n const index = optionsArr.findIndex((item) => item.value === value);\n element.setAttribute(ARIA_POSINSET_KEY, `${index + 1}`);\n\n setOptionAria(element);\n\n optionsList.appendChild(element);\n\n const selected = value === currentValue;\n\n const optionData: OptionData = {\n text,\n value,\n element,\n selected,\n focused: false,\n };\n\n if (selected) selectedOption = optionData;\n\n optionsStore.push(optionData);\n }\n if (isTyping) {\n updateOptionsState(settings, selectedOption);\n }\n\n if (!inputValue && selectedOption && label) {\n const labelText = label.textContent || '';\n\n updateOptionsState(settings, { ...selectedOption, value: '', text: labelText }, initialLoad);\n }\n};\n", "import { ENTER_KEY, SPACE_KEY } from '@adartem/adlib-utils';\n\nimport { focusOnInput, toggleDropdownCloseIcon } from '../../utils';\nimport type { Settings } from '../../utils/types';\nimport { populateOptions } from '../populate';\n\n/**\n * Resets `combobox` selections and clears input field value\n * @param settings The instance {@link Settings}.\n */\nexport const handleClearDropdownClickEvents = (\n e: MouseEvent | KeyboardEvent,\n settings: Settings,\n) => {\n const { selectElement, inputElement } = settings;\n e.stopPropagation();\n e.preventDefault();\n\n inputElement.value = '';\n selectElement.value = '';\n\n populateOptions(settings, '', true, true);\n\n focusOnInput(settings);\n\n toggleDropdownCloseIcon(settings);\n};\n\n/**\n * Handles key events on the dropdown toggle. This resets the dropdown state.\n */\nexport const handleClearDropdown = (e: KeyboardEvent | MouseEvent, settings: Settings) => {\n const { key } = e as KeyboardEvent;\n e.stopPropagation();\n\n if (key === ENTER_KEY || key === SPACE_KEY) {\n e.preventDefault();\n handleClearDropdownClickEvents(e, settings);\n }\n};\n", "import {\n ARIA_EXPANDED_KEY,\n ARROW_DOWN_KEY,\n ARROW_LEFT_KEY,\n ARROW_RIGHT_KEY,\n ARROW_UP_KEY,\n BACKSPACE_KEY,\n CLICK,\n ENTER_KEY,\n ESCAPE_KEY,\n SPACE_KEY,\n TAB_KEY,\n} from '@adartem/adlib-utils';\n\nimport {\n focusOnInput,\n setActiveDescendant,\n toggleDropdown,\n toggleDropdownCloseIcon,\n} from '../../utils';\nimport { FS_DROPDOWN_TOGGLE_KEY } from '../../utils/constants';\nimport type { Settings } from '../../utils/types';\nimport { populateOptions } from '../populate';\n\n/**\n * Handles `keyup` events on the `inputElement` and updates the dropdown.\n * @param e The `keyup` event.\n * @param settings The instance {@link Settings}.\n */\nexport const handleInputKeyUpEvents = (e: KeyboardEvent, settings: Settings) => {\n e.stopPropagation();\n e.stopImmediatePropagation();\n\n const { dropdownToggle, inputElement } = settings;\n\n const { key } = e;\n const referenceInput = e.target as HTMLInputElement;\n\n const inputValue = referenceInput.value.toLowerCase().trim() ?? '';\n populateOptions(settings, inputValue, !inputValue, true);\n\n const dropdownIsOpen = dropdownToggle.getAttribute(ARIA_EXPANDED_KEY) === 'true';\n\n if (key === ARROW_DOWN_KEY) {\n if (!dropdownIsOpen) toggleDropdown(settings);\n\n if (inputValue.length > 0) {\n const selected = settings.optionsStore.find(({ selected }) => selected);\n const inputIsEqualToSelectedOption =\n selected?.value.toLocaleLowerCase() === inputValue.toLowerCase();\n\n if (selected && inputIsEqualToSelectedOption) {\n populateOptions(settings, inputValue, true, true);\n } else {\n populateOptions(settings, inputValue, false, true);\n }\n } else {\n populateOptions(settings, '', true, true);\n }\n\n inputElement.setAttribute(FS_DROPDOWN_TOGGLE_KEY, ARROW_DOWN_KEY);\n\n focusOnDropdownItem(settings);\n return;\n }\n};\n/**\n * Handles `keydown` events on the `inputElement` and updates the dropdown.\n * @param e The `keydown` event.\n * @param settings The instance {@link Settings}.\n */\nexport const handleInputKeyDownEvents = (e: KeyboardEvent, settings: Settings) => {\n e.stopPropagation();\n\n const { key } = e;\n\n const { dropdownToggle, inputElement } = settings;\n\n inputElement.setAttribute(FS_DROPDOWN_TOGGLE_KEY, CLICK);\n\n const referenceInput = e.target as HTMLInputElement;\n\n const inputValue = referenceInput.value.toLowerCase().trim() ?? '';\n\n const dropdownIsOpen = dropdownToggle.getAttribute(ARIA_EXPANDED_KEY) === 'true';\n\n if (key === ESCAPE_KEY) {\n handleClearInput(e, settings);\n\n if (dropdownIsOpen) {\n toggleDropdown(settings);\n }\n return;\n }\n\n if (\n key === ENTER_KEY ||\n key === ARROW_DOWN_KEY ||\n key === TAB_KEY ||\n key === SPACE_KEY ||\n key === ARROW_RIGHT_KEY ||\n key === ARROW_LEFT_KEY\n )\n return;\n\n if (key === ARROW_UP_KEY && dropdownIsOpen) {\n toggleDropdown(settings);\n return;\n }\n\n if (key === BACKSPACE_KEY && inputValue.length === 0) {\n populateOptions(settings, '', true, true);\n return;\n }\n\n if (key === BACKSPACE_KEY && inputValue.length > 0) {\n populateOptions(settings, inputValue, !inputValue, true);\n if (!dropdownIsOpen) toggleDropdown(settings);\n return;\n }\n\n if (!dropdownIsOpen && inputValue && key !== ARROW_UP_KEY) {\n toggleDropdown(settings);\n }\n\n toggleDropdownCloseIcon(settings);\n populateOptions(settings, inputValue, !inputValue, true);\n};\n\n/**\n * Shows the dropdown if hidden.\n * @param settings The instance {@link Settings}.\n */\nexport const handleInputClickEvents = (e: MouseEvent, settings: Settings) => {\n e.stopPropagation();\n e.preventDefault();\n\n const { dropdownToggle, inputElement } = settings;\n\n inputElement.setAttribute(FS_DROPDOWN_TOGGLE_KEY, CLICK);\n\n const toggled = dropdownToggle.getAttribute(ARIA_EXPANDED_KEY) === 'true';\n inputElement.setAttribute(ARIA_EXPANDED_KEY, `${!toggled}`);\n\n if (toggled) {\n return;\n }\n\n populateOptions(settings, '', true, true);\n toggleDropdown(settings);\n};\n\n/**\n * Listens to the `input` escape key or focusout events.\n * @param e The Event object.\n * @param settings The instance {@link Settings}.\n * @param fromInput Whether the event was triggered from the input element.\n */\nexport const handleClearInput = (\n e: KeyboardEvent | FocusEvent,\n settings: Settings,\n fromInput = false,\n) => {\n const { inputElement, selectElement, preventClear } = settings;\n\n if (!fromInput) {\n focusOnInput(settings);\n }\n\n toggleDropdownCloseIcon(settings);\n\n const selected = settings.optionsStore.find(({ selected }) => selected);\n\n if (selected) return;\n\n if (fromInput) {\n const relatedTarget = (e as FocusEvent).relatedTarget as HTMLElement;\n if (relatedTarget || preventClear) return;\n\n inputElement.value = '';\n selectElement.value = '';\n return;\n }\n\n if (!selected) {\n if (preventClear) return;\n\n inputElement.value = '';\n selectElement.value = '';\n }\n\n const dropdownIsOpen = settings.dropdownToggle.getAttribute(ARIA_EXPANDED_KEY) === 'true';\n\n if (dropdownIsOpen) {\n toggleDropdown(settings);\n }\n};\n\n/**\n * Listens to `updateComboboxInputField` custom event and updates input value and select value\n * @param settings The instance {@link Settings}.\n */\nexport const updateInputField = (e: Event, settings: Settings) => {\n const { optionsStore, inputElement } = settings;\n const input = e.target as HTMLInputElement;\n\n const selectedOption = optionsStore.find(({ selected }) => selected);\n const selectedText = selectedOption?.text ?? '';\n const selectedValue = selectedOption?.value ?? '';\n const inputValue = input.value;\n\n if (selectedOption && selectedValue !== inputValue) {\n inputElement.value = selectedText;\n\n toggleDropdownCloseIcon(settings);\n return;\n }\n};\n\n/**\n * Focuses on the dropdown list item based on the current selection.\n * @param settings The instance {@link Settings}.\n * @returns void\n */\nconst focusOnDropdownItem = (settings: Settings) => {\n const { optionsStore, inputElement } = settings;\n const selectedOption = optionsStore.find(({ selected }) => selected);\n\n if (!selectedOption && optionsStore.length > 0) {\n const [firstOption] = optionsStore.filter(({ hidden }) => !hidden);\n\n firstOption.element.focus();\n setActiveDescendant(inputElement, firstOption.element);\n\n return;\n }\n\n if (selectedOption) {\n selectedOption.element.focus();\n setActiveDescendant(inputElement, selectedOption.element);\n\n return;\n }\n return;\n};\n", "import type { OptionsSchema } from '@adartem/adlib-utils';\nimport {\n ARIA_ACTIVEDESCENDANT_KEY,\n ARIA_EXPANDED_KEY,\n ARROW_DOWN_KEY,\n ARROW_UP_KEY,\n CLICK,\n ENTER_KEY,\n ESCAPE_KEY,\n ID_KEY,\n readOptionsFromAttributes,\n runActivationPipeline,\n setFormFieldValue,\n TAB_KEY,\n TABINDEX_KEY,\n} from '@adartem/adlib-utils';\n\nimport {\n focusOnInput,\n getClickedOptionData,\n setActiveDescendant,\n toggleDropdown,\n} from '../../utils';\nimport { CONTROL_KEYS, MODULE_KEY } from '../../utils/constants';\nimport type { OptionData, Settings } from '../../utils/types';\nimport { handleClearInput } from '../input';\nimport { updateOptionsState } from '../state';\nimport { cleanupBubble } from './../../utils/dropdowns';\n\nlet lastCursorPos = { x: 0, y: 0 };\n\nconst SETTINGS_SCHEMA = {\n preventclear: { type: 'boolean' },\n hideinitial: { type: 'boolean' },\n} satisfies OptionsSchema;\n\n/**\n * Handles click events on the dropdown list.\n * @param e The Event object.\n * @param settings The instance {@link Settings}.\n */\nconst handleDropdownListClickEvents = async (\n e: MouseEvent | KeyboardEvent,\n optionData: OptionData,\n settings: Settings,\n) => {\n return runActivationPipeline({\n el: settings.referenceElement,\n moduleKey: MODULE_KEY,\n includeGlobal: true,\n ctx: { event: e },\n guardsRegistry: settings.guardsRegistry ?? {},\n readOptions: () =>\n readOptionsFromAttributes(settings.referenceElement, MODULE_KEY, SETTINGS_SCHEMA, {\n includeGlobal: true,\n }),\n action: () => {\n if (!optionData.selected) updateOptionsState(settings, optionData);\n\n setFormFieldValue(settings.inputElement, optionData.text);\n toggleDropdown(settings);\n },\n });\n};\n\n/**\n * Handles dropdown mouse events: hover\n * Updates input field aria-activedescendant attribute with the option id.\n * @param e The Event object.\n * @param settings The instance {@link Settings}.\n */\nexport const handleDropdownListMouseEvents = async (\n e: MouseEvent | KeyboardEvent,\n settings: Settings,\n) => {\n const target = e.target as HTMLElement;\n\n if (target === settings.selectElement) return;\n\n e.preventDefault();\n\n if (target.tagName === 'A' && e.type === 'mousemove') {\n const mouseEvent = e as MouseEvent;\n const currentCursorPos = { x: mouseEvent.clientX, y: mouseEvent.clientY };\n if (lastCursorPos.x !== currentCursorPos.x || lastCursorPos.y !== currentCursorPos.y) {\n // mouse moved\n lastCursorPos = currentCursorPos;\n\n handleDropdownListFocusEvents(e as FocusEvent, true, settings);\n }\n }\n\n const optionData = getClickedOptionData(e, settings);\n if (!optionData) return;\n\n const optionId = optionData?.element?.getAttribute(ID_KEY);\n settings.inputElement.setAttribute(ARIA_ACTIVEDESCENDANT_KEY, `${optionId || ''}`);\n\n const isClick = e.type === CLICK;\n\n if (isClick) await handleDropdownListClickEvents(e, optionData, settings);\n};\n\n/**\n * Handles focus events on the dropdown list.\n * @param e The Event object.\n * @param settings The instance {@link Settings}.\n */\nexport const handleDropdownListFocusEvents = (\n e: FocusEvent,\n focused: boolean,\n settings: Settings,\n) => {\n const optionData = getClickedOptionData(e, settings);\n\n if (!optionData) return;\n\n if (e.type === 'focusout') return;\n\n const previouslyFocused = settings.optionsStore.find(({ focused }) => focused);\n\n if (previouslyFocused) {\n previouslyFocused?.element.setAttribute(TABINDEX_KEY, '-1');\n previouslyFocused.focused = false;\n }\n\n optionData.element.setAttribute(TABINDEX_KEY, '0');\n optionData.focused = focused;\n optionData.element.focus();\n\n setActiveDescendant(settings.inputElement, optionData.element);\n};\n\n/**\n * Handles tab key events on the dropdown list.\n * @param e The Event object.\n * @param settings The instance {@link Settings}.\n */\nconst handleTabKeyEvents = (e: KeyboardEvent, settings: Settings) => {\n const { shiftKey } = e;\n\n if (shiftKey) e.preventDefault();\n\n if (e.target) {\n (e.target as HTMLAnchorElement).click();\n focusOnInput(settings);\n }\n toggleDropdown(settings);\n};\n\n/**\n * Handles arrow keys events on the dropdown list.\n * @param e The Event object.\n * @param settings The instance {@link Settings}.\n */\nconst handleDropdownListArrowKeyEvents = (e: KeyboardEvent, settings: Settings) => {\n cleanupBubble(e);\n const { optionsStore, inputElement, navListElement } = settings;\n\n const { key } = e;\n const focusedOptionIndex = optionsStore.findIndex(({ focused }) => focused);\n if (focusedOptionIndex < 0) return;\n\n const nextOption =\n optionsStore[key === ARROW_UP_KEY ? focusedOptionIndex - 1 : focusedOptionIndex + 1];\n\n if (key === ARROW_UP_KEY && !nextOption) {\n toggleDropdown(settings);\n\n return;\n }\n\n navListElement.style.pointerEvents = 'none';\n\n const nextEl = nextOption?.element;\n\n if (!nextEl) return;\n\n const nextElBox = nextEl.getBoundingClientRect();\n const navListBox = navListElement.getBoundingClientRect();\n\n const navListBottom = navListBox.bottom - nextEl.offsetHeight;\n const navListTop = navListBox.top + nextEl.offsetHeight;\n\n const isAtBottom = nextElBox.bottom >= navListBottom;\n const isAtTop = navListTop >= nextElBox.top;\n\n nextEl.focus();\n\n if (isAtTop) {\n const optionBottom = nextEl.offsetTop + nextEl.offsetHeight;\n const currentBottom = navListElement.scrollTop + navListElement.offsetHeight;\n\n if (optionBottom > currentBottom) {\n navListElement.scrollTop = optionBottom - navListElement.offsetHeight;\n return;\n }\n\n if (nextEl.offsetTop < navListElement.scrollTop) {\n navListElement.scrollTop = nextEl.offsetTop;\n return;\n }\n\n navListElement.scrollTop = nextEl.offsetTop;\n }\n\n if (isAtBottom && key !== ARROW_UP_KEY) {\n const optionBottom = nextEl.offsetTop + nextEl.offsetHeight;\n const currentBottom = navListElement.scrollTop + navListElement.offsetHeight;\n\n if (optionBottom < currentBottom) {\n navListElement.scrollTop = optionBottom - navListElement.offsetHeight;\n return;\n }\n\n if (nextEl.offsetTop > navListElement.scrollTop) {\n navListElement.scrollTop = nextEl.offsetTop;\n return;\n }\n\n navListElement.scrollTop = nextEl.offsetTop;\n }\n\n setActiveDescendant(inputElement, nextOption?.element);\n};\n\n/**\n * Handles keyboard keydown events on the dropdown list.\n * @param e The Event object.\n * @param settings The instance {@link Settings}.\n */\nexport const handleDropdownListKeydownEvents = async (e: KeyboardEvent, settings: Settings) => {\n const { key } = e;\n\n cleanupBubble(e);\n\n if (key === ESCAPE_KEY) {\n handleClearInput(e, settings);\n\n const dropdownIsOpen = settings.dropdownToggle.getAttribute(ARIA_EXPANDED_KEY) === 'true';\n\n if (dropdownIsOpen) {\n toggleDropdown(settings);\n }\n return;\n }\n\n const enterKeyPressed = key === ENTER_KEY;\n\n const optionData = getClickedOptionData(e, settings);\n\n if (enterKeyPressed && optionData) await handleDropdownListClickEvents(e, optionData, settings);\n\n if (!CONTROL_KEYS.includes(key)) return;\n\n if (key === TAB_KEY) handleTabKeyEvents(e, settings);\n else if (key === ARROW_UP_KEY || key === ARROW_DOWN_KEY)\n handleDropdownListArrowKeyEvents(e, settings);\n};\n", "import { ARROW_DOWN_KEY } from '@adartem/adlib-utils';\n\nimport type { Settings } from '../../utils/types';\n\n/**\n * Handles arrow keys events on the dropdown list.\n * Targets the focused option, or the first option if none is focused.\n * @param e The Event object.\n * @param settings The instance {@link Settings}.\n */\nexport const handleDropdownToggleArrowKeyEvents = (\n e: KeyboardEvent,\n { optionsStore }: Settings,\n) => {\n const { key } = e;\n\n e.stopPropagation();\n\n if (key !== ARROW_DOWN_KEY) return;\n\n const firstOption = optionsStore.find(({ hidden }) => !hidden);\n const focusedOption = optionsStore.find(({ focused }) => focused);\n\n if (focusedOption) {\n focusedOption.element.focus();\n\n return;\n }\n\n if (firstOption) {\n firstOption.element.focus();\n\n return;\n }\n\n return;\n};\n", "import { setFormFieldValue } from '@adartem/adlib-utils';\n\nimport { toggleDropdownCloseIcon } from '../../utils';\nimport type { Settings } from '../../utils/types';\nimport { updateOptionsState } from '../state';\n\n/**\n * Adds two way data binding.\n * Handles `change` events on the hidden `selectElement` and updates the dropdown.\n * @param settings The instance {@link Settings}.\n */\nexport const handleSelectChangeEvents = (settings: Settings) => {\n const { selectElement, optionsStore } = settings;\n\n const selectedOption = optionsStore.find(({ value }) => value === selectElement.value);\n if (!selectedOption) return;\n\n setFormFieldValue(settings.inputElement, selectedOption.text);\n settings.inputElement.dispatchEvent(new Event('change'));\n\n toggleDropdownCloseIcon(settings);\n updateOptionsState(settings, selectedOption);\n};\n", "import {\n addListener,\n ARIA_EXPANDED_KEY,\n createCleanupBag,\n createDelegation,\n DROPDOWN_CSS_CLASSES,\n ensureButtonLike,\n isActivationKey,\n readOption,\n} from '@adartem/adlib-utils';\n\nimport { cleanupBubble, toggleDropdown } from '../utils';\nimport { MODULE_KEY } from '../utils/constants';\nimport { getElementSelector } from '../utils/selectors';\nimport type { Settings } from '../utils/types';\nimport { handleBodyMouseMovements } from './body';\nimport { handleClearDropdown, handleClearDropdownClickEvents } from './clearDropdown';\nimport {\n handleDropdownListFocusEvents,\n handleDropdownListKeydownEvents,\n handleDropdownListMouseEvents,\n} from './dropdownList';\nimport { handleDropdownToggleArrowKeyEvents } from './dropdownToggle';\nimport {\n handleClearInput,\n handleInputClickEvents,\n handleInputKeyDownEvents,\n handleInputKeyUpEvents,\n updateInputField,\n} from './input';\nimport { handleSelectChangeEvents } from './selectElement';\n\n/**\n * Listens for multiple events on the custom elements.\n * @param settings The instance {@link Settings}.\n * @returns A callback to remove all event listeners.\n */\nexport const listenEvents = (settings: Settings) => {\n const { dropdownToggle, dropdownList, inputElement, clearDropdown, body } = settings;\n const cleanupBag = createCleanupBag();\n const root = settings.referenceElement;\n const dropdownToggleSelector = `.${DROPDOWN_CSS_CLASSES.dropdownToggle}`;\n const dropdownListSelector = `.${DROPDOWN_CSS_CLASSES.dropdownList}`;\n const clearSelector = getElementSelector('clear');\n const a11yEnabled = readOption(\n dropdownToggle,\n MODULE_KEY,\n 'a11y',\n { type: 'boolean', default: true },\n { includeGlobal: true },\n );\n\n if (a11yEnabled) {\n ensureButtonLike(dropdownToggle);\n }\n\n dropdownToggle.onmouseup = (e) => {\n // I believe webflow natively adds this event listener to the dropdown, we need to clear it out\n // so we can handle the click event ourselves.\n cleanupBubble(e);\n return;\n };\n\n const handleToggleActivation = () => {\n toggleDropdown(settings);\n };\n\n // --- Non-delegatable events (addListener) ---\n cleanupBag.add(addListener(body, 'mousemove', (e) => handleBodyMouseMovements(e, settings)));\n cleanupBag.add(addListener(dropdownToggle, 'focus', () => inputElement.focus()));\n cleanupBag.add(\n addListener(dropdownList, 'mousemove', (e) => handleDropdownListMouseEvents(e, settings)),\n );\n cleanupBag.add(addListener(dropdownList, 'mouseenter', cleanupBubble));\n cleanupBag.add(addListener(dropdownList, 'mouseup', cleanupBubble));\n cleanupBag.add(addListener(inputElement, 'keyup', (e) => handleInputKeyUpEvents(e, settings)));\n cleanupBag.add(addListener(inputElement, 'mouseup', (e) => handleInputClickEvents(e, settings)));\n cleanupBag.add(addListener(inputElement, 'blur', (e) => handleClearInput(e, settings, true)));\n cleanupBag.add(\n addListener(inputElement, 'updateComboboxInputField', (e) => updateInputField(e, settings)),\n );\n cleanupBag.add(addListener(clearDropdown, 'mouseup', (e) => handleClearDropdown(e, settings)));\n\n // --- Toggle delegation ---\n cleanupBag.add(\n createDelegation(\n dropdownToggleSelector,\n {\n keydown: ({ event, el }) => {\n if (el !== dropdownToggle) return;\n const keyboardEvent = event as KeyboardEvent;\n\n handleDropdownToggleArrowKeyEvents(keyboardEvent, settings);\n\n if (!a11yEnabled) return;\n if (!isActivationKey(keyboardEvent)) return;\n\n if (keyboardEvent.key === ' ' || keyboardEvent.key === 'Spacebar') {\n keyboardEvent.preventDefault();\n }\n\n handleToggleActivation();\n },\n click: ({ el }) => {\n if (el !== dropdownToggle) return;\n handleToggleActivation();\n },\n },\n { root },\n ),\n );\n\n // --- Dropdown list delegation ---\n cleanupBag.add(\n createDelegation(\n dropdownListSelector,\n {\n click: ({ event }) => handleDropdownListMouseEvents(event, settings),\n keydown: ({ event }) => handleDropdownListKeydownEvents(event, settings),\n focusin: ({ event }) => handleDropdownListFocusEvents(event, true, settings),\n focusout: ({ event }) => handleDropdownListFocusEvents(event, false, settings),\n },\n { root },\n ),\n );\n\n // --- Input delegation ---\n cleanupBag.add(\n createDelegation(\n 'input',\n {\n input: () => {\n const dropdownIsOpen = dropdownToggle.getAttribute(ARIA_EXPANDED_KEY) === 'true';\n\n if (!dropdownIsOpen) {\n toggleDropdown(settings);\n }\n },\n keydown: ({ event }) => handleInputKeyDownEvents(event, settings),\n click: ({ event }) => handleInputClickEvents(event, settings),\n },\n { root },\n ),\n );\n\n // --- Select delegation ---\n cleanupBag.add(\n createDelegation(\n 'select',\n {\n change: () => handleSelectChangeEvents(settings),\n },\n { root },\n ),\n );\n\n // --- Clear button delegation ---\n cleanupBag.add(\n createDelegation(\n clearSelector,\n {\n click: ({ event }) => handleClearDropdownClickEvents(event, settings),\n keydown: ({ event }) => handleClearDropdown(event, settings),\n },\n { root },\n ),\n );\n\n return () => cleanupBag.run();\n};\n", "import {\n ARIA_ACTIVEDESCENDANT_KEY,\n ARIA_EXPANDED_KEY,\n ARROW_DOWN_KEY,\n CLICK,\n ID_KEY,\n isHTMLOptionElement,\n} from '@adartem/adlib-utils';\nimport debounce from 'just-debounce';\n\nimport { focusOnInput, updateComboboxInputField } from '../utils';\nimport { DROPDOWN_IS_OPEN, FS_DROPDOWN_TOGGLE_KEY } from '../utils/constants';\nimport type { Settings } from '../utils/types';\nimport { populateOptions } from './populate';\n\n/**\n * Observes when the dropdown list is opened/closed.\n * @param settings The instance {@link Settings}.\n *\n * @returns The MutationObserver.\n */\nconst observeDropdownList = (settings: Settings) => {\n const { dropdownList, navListElement, optionsStore, selectElement, inputElement } = settings;\n let prevDropdownState = navListElement.classList.contains(DROPDOWN_IS_OPEN);\n let currentStateIsOpen = false;\n\n const callback: MutationCallback = debounce((mutations: MutationRecord[]) => {\n mutations.forEach((mutation) => {\n if (mutation.attributeName === 'class') {\n const selectValue = selectElement.value;\n const inputValue = inputElement.value;\n const dropdownToggleKey = inputElement.getAttribute(FS_DROPDOWN_TOGGLE_KEY);\n const firstOption = Array.from(optionsStore).find((el) => !el.hidden);\n\n const selectedOption = Array.from(optionsStore).find(\n (el) => el?.value.toLowerCase().trim() === selectValue?.toLowerCase().trim(),\n );\n\n currentStateIsOpen = (mutation.target as HTMLDivElement).classList.contains(\n DROPDOWN_IS_OPEN,\n );\n if (prevDropdownState !== currentStateIsOpen) {\n prevDropdownState = currentStateIsOpen;\n }\n\n if (!selectedOption && currentStateIsOpen) {\n navListElement.scrollTop = 0;\n }\n\n if (currentStateIsOpen) {\n const toFocus = selectedOption || firstOption;\n\n if (toFocus) toFocus.element.focus();\n }\n\n inputElement.setAttribute(ARIA_EXPANDED_KEY, `${currentStateIsOpen}`);\n\n if (selectedOption) {\n const id = selectedOption.element.getAttribute(ID_KEY);\n inputElement.setAttribute(ARIA_ACTIVEDESCENDANT_KEY, `${id}`);\n\n if (currentStateIsOpen && dropdownToggleKey === ARROW_DOWN_KEY) {\n selectedOption.element.focus();\n return;\n }\n if (currentStateIsOpen && dropdownToggleKey === CLICK) {\n selectedOption.element.focus();\n focusOnInput(settings);\n return;\n }\n\n if (!currentStateIsOpen) {\n updateComboboxInputField(settings);\n focusOnInput(settings);\n }\n\n return;\n }\n\n if (!selectedOption && inputValue && currentStateIsOpen && firstOption) {\n if (dropdownToggleKey === ARROW_DOWN_KEY) firstOption.element.focus();\n if (dropdownToggleKey === CLICK) focusOnInput(settings);\n\n return;\n }\n\n if (currentStateIsOpen && !selectedOption) {\n inputElement.setAttribute(ARIA_ACTIVEDESCENDANT_KEY, '');\n\n if (dropdownToggleKey === ARROW_DOWN_KEY && firstOption) {\n firstOption.element.focus();\n return;\n }\n\n focusOnInput(settings);\n }\n if (!currentStateIsOpen) {\n updateComboboxInputField(settings);\n focusOnInput(settings);\n\n if (!selectedOption) inputElement.setAttribute(ARIA_ACTIVEDESCENDANT_KEY, '');\n }\n }\n });\n\n const selectedOption = optionsStore.find(({ selected }) => selected);\n const firstNonHiddenOption = optionsStore.find(({ hidden }) => !hidden);\n\n if (!selectedOption || !firstNonHiddenOption) return;\n }, 20);\n\n const observer = new MutationObserver(callback);\n\n observer.observe(dropdownList, {\n attributes: true,\n attributeFilter: ['class', 'style'],\n });\n\n return observer;\n};\n\n/**\n * Observes changes in the {@link HTMLSelectElement} options.\n * @param settings The instance {@link Settings}.\n *\n * @returns The MutationObserver.\n */\nconst observeSelectElement = (settings: Settings) => {\n const { selectElement } = settings;\n\n const observer = new MutationObserver((mutations) => {\n const hasMutatedOptions = mutations.some(({ addedNodes, removedNodes }) =>\n [...addedNodes, ...removedNodes].some(isHTMLOptionElement),\n );\n\n if (hasMutatedOptions) populateOptions(settings);\n });\n\n observer.observe(selectElement, {\n childList: true,\n });\n\n return observer;\n};\n\n/**\n * Observes mutations on elements of the instance.\n * @param settings The instance {@link Settings}.\n *\n * @returns A callback to destroy the MutationObservers.\n */\nexport const observeElements = (settings: Settings) => {\n const dropdownListObserver = observeDropdownList(settings);\n const selectElementObserver = observeSelectElement(settings);\n\n return () => {\n dropdownListObserver.disconnect();\n selectElementObserver.disconnect();\n };\n};\n", "import type { OptionsValueMap } from '@adartem/adlib-utils';\nimport {\n ARIA_AUTOCOMPLETE_KEY,\n ARIA_CONTROLS_KEY,\n ARIA_CURRENT_KEY,\n ARIA_EXPANDED_KEY,\n ARIA_HIDDEN_KEY,\n ARIA_OWNS_KEY,\n AUTOCOMPLETE_KEY,\n DROPDOWN_CSS_CLASSES,\n type DropdownElement,\n type DropdownList,\n type DropdownToggle,\n findTextNode,\n type GuardRegistry,\n isHTMLAnchorElement,\n NAME_KEY,\n REQUIRED_KEY,\n ROLE_KEY,\n TABINDEX_KEY,\n} from '@adartem/adlib-utils';\n\nimport type { OPTIONS } from '../utils/constants';\nimport { queryAllElements, queryElement } from '../utils/selectors';\nimport type { OptionsStore } from '../utils/types';\nimport { setDropdownAria } from './a11y';\n\n/**\n * Collects the required elements/settings for the setup.\n * @param dropdown The {@link Dropdown} element.\n * @param options The resolved options for this instance.\n */\nexport const collectSettings = (\n referenceElement: HTMLElement,\n options: OptionsValueMap<typeof OPTIONS>,\n) => {\n const optionsStore: OptionsStore = [];\n\n const dropdown = referenceElement.closest<DropdownElement>(`.${DROPDOWN_CSS_CLASSES.dropdown}`);\n if (!dropdown) return;\n\n const selectElement = dropdown.querySelector('select');\n const inputElement = dropdown.querySelector('input');\n const navListElement = queryElement('dropdown')?.querySelector('nav');\n const { body } = document;\n\n if (!selectElement || !inputElement || !navListElement) return;\n\n const dropdownToggle = dropdown.querySelector<DropdownToggle>(\n `.${DROPDOWN_CSS_CLASSES.dropdownToggle}`,\n );\n const dropdownList = dropdown.querySelector<DropdownList>(\n `.${DROPDOWN_CSS_CLASSES.dropdownList}`,\n );\n\n if (!dropdownToggle || !dropdownList) return;\n dropdownToggle.setAttribute('disabled', 'disabled');\n\n setDropdownAria(dropdownToggle, dropdownList);\n\n const label =\n queryElement('label', { scope: dropdownToggle }) ||\n findTextNode(dropdownToggle) ||\n dropdownToggle;\n\n const clearElements = queryAllElements('clear', { scope: dropdownList });\n const optionTemplate = [...dropdownList.querySelectorAll('a')].find((element) => {\n return !clearElements.includes(element);\n });\n if (!isHTMLAnchorElement(optionTemplate)) return;\n\n const optionsList = optionTemplate.parentElement;\n if (!optionsList) return;\n\n const defaultOption = Array.from(selectElement.querySelectorAll('option')).find(\n (opt) => opt.value === '',\n );\n\n const noResultsTemplate = queryElement('empty', { scope: dropdown });\n const clearDropdown = queryElement('clear', { scope: dropdown }) as HTMLElement;\n\n for (const element of [optionTemplate]) {\n if (!element) continue;\n\n element.href = '#';\n element.setAttribute(TABINDEX_KEY, '-1');\n element.removeAttribute(ARIA_CURRENT_KEY);\n element.remove();\n }\n\n const hideInitial = options.hideinitial ?? false;\n const preventClear = options.preventclear ?? false;\n\n initializeAttributes(inputElement, selectElement, navListElement, clearDropdown, preventClear);\n\n return {\n referenceElement,\n optionsStore,\n selectElement,\n dropdownToggle,\n dropdownList,\n label,\n optionTemplate,\n noResultsTemplate,\n optionsList,\n hideInitial,\n preventClear,\n inputElement,\n clearDropdown,\n defaultOption,\n navListElement,\n body,\n guardsRegistry: undefined as GuardRegistry | undefined,\n };\n};\n\n/**\n * Initializes the attributes for the dropdown.\n * @param inputElement The input element.\n * @param selectElement The select element.\n * @param navListElement The nav list element.\n * @param clearDropdown The clear dropdown element.\n */\nconst initializeAttributes = (\n inputElement: HTMLInputElement,\n selectElement: HTMLSelectElement,\n navListElement: HTMLElement,\n clearDropdown: HTMLElement,\n preventClear: boolean,\n) => {\n inputElement?.parentElement?.setAttribute(TABINDEX_KEY, '-1');\n if (!preventClear) inputElement?.removeAttribute(NAME_KEY);\n inputElement?.setAttribute(TABINDEX_KEY, '0');\n inputElement?.removeAttribute('data-name');\n if (selectElement.hasAttribute(REQUIRED_KEY)) {\n inputElement?.setAttribute(REQUIRED_KEY, 'required');\n }\n inputElement?.setAttribute(ROLE_KEY, 'combobox');\n\n inputElement?.setAttribute(AUTOCOMPLETE_KEY, 'off');\n const navListElementId = navListElement.getAttribute('id') || '';\n inputElement?.setAttribute(ARIA_CONTROLS_KEY, navListElementId);\n inputElement?.setAttribute(ARIA_OWNS_KEY, navListElementId);\n inputElement?.setAttribute(ARIA_AUTOCOMPLETE_KEY, 'list');\n inputElement?.setAttribute(ARIA_EXPANDED_KEY, 'false');\n\n selectElement.setAttribute(ARIA_HIDDEN_KEY, 'true');\n selectElement.setAttribute(TABINDEX_KEY, '-1');\n\n navListElement.setAttribute(TABINDEX_KEY, '-1');\n\n clearDropdown?.setAttribute(TABINDEX_KEY, '0');\n clearDropdown?.setAttribute(ROLE_KEY, 'button');\n clearDropdown.style.display = 'none';\n};\n", "import {\n type AdLibAttributeInit,\n createCleanupBag,\n readOptionsFromAttributes,\n runActivationPipeline,\n waitAttributeLoaded,\n waitWebflowReady,\n} from '@adartem/adlib-utils';\n\nimport { listenEvents } from './actions/events';\nimport { observeElements } from './actions/observe';\nimport { populateOptions } from './actions/populate';\nimport { collectSettings } from './actions/settings';\nimport { MODULE_KEY, OPTIONS } from './utils/constants';\nimport { queryAllElements } from './utils/selectors';\n\ninterface ModuleDiagnostics {\n activeCount: number;\n disabledCount: number;\n guardFailedCount: number;\n lastNonActivationReason: 'disabled' | 'guard-failed' | null;\n}\n\n/**\n * Inits the attribute.\n */\nexport const init: AdLibAttributeInit = async () => {\n await waitWebflowReady();\n await waitAttributeLoaded('list');\n\n const bag = createCleanupBag();\n\n const diagnostics: ModuleDiagnostics = {\n activeCount: 0,\n disabledCount: 0,\n guardFailedCount: 0,\n lastNonActivationReason: null,\n };\n\n const referenceElements = queryAllElements('dropdown');\n const activeElements: HTMLElement[] = [];\n\n for (const referenceElement of referenceElements) {\n const result = await runActivationPipeline({\n el: referenceElement,\n moduleKey: MODULE_KEY,\n includeGlobal: false,\n guardsRegistry: {},\n readOptions: () =>\n readOptionsFromAttributes(referenceElement, MODULE_KEY, OPTIONS, {\n includeGlobal: false,\n }),\n action: (options) => {\n const settings = collectSettings(referenceElement, options);\n if (!settings) return;\n\n populateOptions(settings, '', false, true);\n\n const disconnectObservers = observeElements(settings);\n const removeEventListeners = listenEvents(settings);\n\n bag.add(disconnectObservers);\n bag.add(removeEventListeners);\n\n activeElements.push(referenceElement);\n },\n });\n\n if (result.ok) {\n diagnostics.activeCount++;\n } else if (result.reason === 'disabled') {\n diagnostics.disabledCount++;\n diagnostics.lastNonActivationReason = 'disabled';\n } else if (result.reason === 'guard-failed') {\n diagnostics.guardFailedCount++;\n diagnostics.lastNonActivationReason = 'guard-failed';\n }\n }\n\n return {\n result: { elements: activeElements, diagnostics },\n destroy() {\n bag.run();\n },\n };\n};\n", "{\n \"name\": \"@adartem/ad-combobox\",\n \"version\": \"0.1.0\",\n \"description\": \"A combo box that helps users select an item from a large list of options.\",\n \"private\": false,\n \"type\": \"module\",\n \"types\": \"./dist/index.d.ts\",\n \"scripts\": {\n \"lint\": \"eslint ./src && prettier --check ./src\",\n \"lint:fix\": \"eslint ./src --fix && prettier --write ./src\",\n \"typecheck\": \"tsc --noEmit\",\n \"build\": \"tsup --config tsup.config.ts\",\n \"test\": \"vitest run -c ../../vitest.config.ts\",\n \"dev\": \"tsup --config tsup.config.ts --watch\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n }\n },\n \"dependencies\": {\n \"just-debounce\": \"^1.1.0\",\n \"@adartem/adlib-utils\": \"workspace:*\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"sideEffects\": false,\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n", "import { createCleanupBag, defineModule } from '@adartem/adlib-utils';\n\nimport { init as legacyInit } from './init';\nimport { MODULE_KEY } from './utils/constants';\n\nexport default defineModule({\n key: MODULE_KEY,\n init: async (core) => {\n void core;\n\n const bag = createCleanupBag();\n const res = await legacyInit();\n\n if (res && typeof (res as { destroy?: unknown }).destroy === 'function') {\n bag.add(() => {\n try {\n (res as { destroy: () => void }).destroy();\n } catch {\n // best-effort\n }\n });\n }\n\n const instance = {\n key: MODULE_KEY,\n destroy: () => bag.run(),\n };\n\n if (res && typeof (res as { restart?: unknown }).restart === 'function') {\n return {\n ...instance,\n restart: async () => {\n try {\n await (res as { restart: () => Promise<void> | void }).restart();\n } catch {\n // best-effort\n }\n },\n };\n }\n\n return instance;\n },\n});\n\nexport { version } from '../package.json';\nexport { init } from './init';\nexport { ELEMENTS, MODULE_KEY, SETTINGS } from './utils/constants';\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeO,IAAMA,IAAkBC,OAAuB;AACpD,MAAM,EAAE,gBAAAC,EAAe,IAAID;AAE3BE,IAAcD,GAAgB,CAAC,SAAS,SAAS,CAAC;AACpD;AAJO,IAUME,IAA2BH,OAAuB;AAC7D,MAAM,EAAE,eAAAI,GAAe,cAAAC,GAAc,cAAAC,GAAc,eAAAC,GAAe,cAAAC,EAAa,IAAIR,GAE7ES,IAAeJ,GAAc,OAAO,YAAA;AAE1C,MAAIG,KAAgBC,GAAc;AAChCL,MAAc,MAAM,UAAU;AAE9B;EACF;AAEA,MAAMM,IAAiBJ,EAAa,KAAK,CAAC,EAAE,OAAAK,EAAM,MAAMA,MAAUJ,EAAc,KAAK;AAErF,MAAIG,GAAgB;AAClB,QAAME,IAAeF,EAAe,KAAK,YAAA;AAEzC,QAAI,CAACD,GAAc;AACjBL,QAAc,MAAM,UAAU;AAC9B;IACF;AAEA,QAAIK,KAAgBA,MAAiBG,GAAc;AACjDR,QAAc,MAAM,UAAU;AAC9B;IACF;AAEAA,MAAc,MAAM,UAAU;AAE9B;EACF;AAEAA,IAAc,MAAM,UAAU;AAChC;AA1CO,IAiDMS,IAAgBb,OAAuB;AAClD,MAAM,EAAE,cAAAK,EAAa,IAAIL,GAEnBc,IAAMT,EAAa,MAAM;AAE/BA,IAAa,kBAAkBS,GAAKA,CAAG,GACvCT,EAAa,MAAA,GACbA,EAAa,aAAaU,IAAc,GAAG;AAC7C;AAzDO,IA8DMC,IAA4BhB,OAAuB;AAC9D,MAAMiB,IAAQ,IAAI,MAAM,0BAA0B;AAElDjB,IAAS,aAAa,cAAciB,CAAK;AAC3C;AAlEO,IAyEMC,IAAsB,CACjCb,GACAc,MACG;AACH,MAAMC,IAAWD,EAAe,aAAaE,EAAM;AAEnDhB,IAAa,aAAaiB,IAA2B,GAAGF,KAAY,EAAE,EAAE;AAC1E;AAhFO,IA0FMG,IAAuB,CAACC,GAAU,EAAE,cAAAlB,EAAa,MAAgB;AAC5E,MAAM,EAAE,QAAAmB,EAAO,IAAID;AAEnB,MAAI,CAACE,GAAUD,CAAM,EAAG;AAExB,MAAME,IAAgBF,EAAO,QAAQ,GAAG;AACxC,MAAI,CAACE,EAAe;AAEpB,MAAMC,IAAatB,EAAa,KAAK,CAAC,EAAE,SAAAuB,EAAQ,MAAMA,MAAYF,CAAa;AAC/E,MAAKC,EAEL,QAAOA;AACT;AAtGO,IA2GME,IAAiBN,OAAa;AACzCA,IAAE,eAAA,GACFA,EAAE,gBAAA;AACJ;ACnHO,IAAMO,IAAa;AAAnB,IAEMC,KAAU,EAIrB,aAAa,EAAE,MAAM,WAAW,SAAS,MAAM,GAK/C,cAAc,EAAE,MAAM,WAAW,SAAS,MAAM,GAMhD,MAAM,EAAE,MAAM,WAAW,SAAS,KAAK,EACzC;AAlBO,IAoBMC,KAAW,CAItB,YAKA,SAKA,SAKA,OACF;AAxCO,IA0CMC,IAAW,EAItB,UAAU,EAAE,KAAK,YAAY,QAAQ,CAAC,MAAM,EAAE,GAM9C,MAAM,EAAE,KAAK,QAAQ,QAAQ,CAAC,OAAO,EAAE,EACzC;AArDO,IAuDMC,IAAmB;AAvDzB,IAyDMC,IAAyB;AAzD/B,IA2DMC,KAAe,CAACC,IAAWC,IAASC,IAAcC,EAAc;ACjEtE,IAAM,EACX,aAAAC,KACA,qBAAAC,IACA,oBAAAC,IACA,oBAAAC,IACA,cAAAC,GACA,kBAAAC,GACA,cAAAC,IACA,mBAAAC,IACA,yBAAAC,GACF,IAAIC,GAAkBpB,GAAYE,IAAUC,CAAQ;ACP7C,IAAMkB,KAA2B,CAAC5B,GAAexB,MAAuB;AACzEA,IAAS,eAAe,MAAM,kBAAkB,WAClDA,EAAS,eAAe,MAAM,gBAAgB;AAElD;ACKO,IAAMqD,KAAkB,CAACpD,GAAgCqD,MAA+B;AAC7FrD,IAAe,aAAasD,IAAmBC,GAAiB,OAAO,GACvEF,EAAa,aAAaG,IAAeD,GAAiB,OAAO,GACjEF,EAAa,aAAaI,IAA0B,OAAO;AAC7D;AAJO,IAUMC,KAAiB9B,OAAmC;AAC/DA,IAAQ,aAAa4B,IAAeD,GAAiB,MAAM;AAC7D;ACXO,IAAMI,IAAqB,CAChC5D,GACAU,GACAmD,IAAQ,UACL;AACH,MAAM,EAAE,eAAAtD,GAAe,cAAAD,EAAa,IAAIN;AAEpCU,OAAkBA,EAAe,SACnCoD,GAAkBvD,GAAeG,EAAe,KAAK;AAGvD,WAAWkB,KAActB,GAAc;AACrC,QAAM,EAAE,SAAAuB,EAAQ,IAAID,GAEdmC,IAAWlC,MAAYnB,GAAgB;AAE7CkB,MAAW,WAAWmC,GACtBnC,EAAW,UAAUmC,GAErBlC,EAAQ,UAAUkC,IAAW,QAAQ,QAAQ,EAAEC,EAAiB,GAChEnC,EAAQ,aAAaoC,IAAmB,GAAGF,CAAQ,EAAE,GACrDlC,EAAQ,aAAad,IAAc,IAAI;EACzC;AAEI8C,OAAO9D,EAAeC,CAAQ;AACpC;ACtBO,IAAMkE,IAAkB,CAC7BlE,GACAmE,IAAa,IACbC,IAAU,OACVC,IAAW,OACXC,IAAc,UACX;AACH,MAAM,EACJ,cAAAhE,GACA,gBAAAiE,GACA,aAAAC,GACA,OAAAC,GACA,mBAAAC,GACA,eAAe,EAAE,SAAAC,GAAS,OAAOC,EAAa,EAChD,IAAI5E;AAGJ0E,KAAmB,OAAA;AACnB,WAAW,EAAE,SAAA7C,EAAQ,KAAKvB,EAAa,OAAA,EACrCuB,GAAQ,OAAA;AAGVvB,IAAa,OAAO,GAAGA,EAAa,MAAM;AAE1C,MAAII,IAEEmE,IAAoB,MAAM,KAAKF,CAAO,EAAE,OAAQG,OAASA,EAAK,SAASA,EAAK,WAAW,GACvFC,IAAkBF,EAAkB,OAAQC,OAChDA,EAAK,KAAK,KAAA,EAAO,YAAA,EAAc,SAASX,EAAW,KAAA,EAAO,YAAA,CAAa,CACzE;AAEA,MAAIY,EAAgB,WAAW,KAAKL,GAAmB;AACrDF,MAAY,YAAYE,CAAiB;AAEzC;EACF;AAEA,MAAMM,KAAcZ,IAAUS,IAAoBE,GAAiB,KAAK,CAACE,GAAGC,MAC1ED,EAAE,MAAM,cAAcC,EAAE,KAAK,CAC/B;AAGA,WAAW,EAAE,OAAAvE,GAAO,MAAAwE,EAAK,KAAKH,GAAY;AACxC,QAAMnD,IAAUuD,EAAUb,CAAc,GAElCc,IAAWC,GAAazD,CAAO,KAAKA;AAC1CwD,MAAS,cAAcF;AAEvB,QAAMI,KAAY1D,EAAQ,aAAaR,EAAM,KAAK,IAC5CmE,KAAK,aAAa7E,EAAM,YAAA,EAAc,KAAA,EAAO,QAAQ,OAAO,GAAG,CAAC;AAEtEkB,MAAQ,aAAaR,IAAQkE,MAAaC,EAAE,GAC5C3D,EAAQ,aAAa4D,IAAkB,GAAGT,EAAW,MAAM,EAAE;AAE7D,QAAMU,KAAQV,EAAW,UAAWF,QAASA,GAAK,UAAUnE,CAAK;AACjEkB,MAAQ,aAAa8D,IAAmB,GAAGD,KAAQ,CAAC,EAAE,GAEtD/B,GAAc9B,CAAO,GAErB2C,EAAY,YAAY3C,CAAO;AAE/B,QAAMkC,KAAWpD,MAAUiE,GAErBhD,KAAyB,EAC7B,MAAAuD,GACA,OAAAxE,GACA,SAAAkB,GACA,UAAAkC,IACA,SAAS,MACX;AAEIA,WAAUrD,KAAiBkB,KAE/BtB,EAAa,KAAKsB,EAAU;EAC9B;AAKA,MAJIyC,KACFT,EAAmB5D,GAAUU,EAAc,GAGzC,CAACyD,KAAczD,MAAkB+D,GAAO;AACxBA,MAAM,eAAe;AAEvCb,MAAmB5D,GAAU,EAAE,GAAGU,IAAgB,OAAO,GAAoB,GAAG4D,CAAW;EAC7F;AACF;AC9FO,IAAMsB,IAAiC,CAC5CpE,GACAxB,MACG;AACH,MAAM,EAAE,eAAAO,GAAe,cAAAF,EAAa,IAAIL;AACxCwB,IAAE,gBAAA,GACFA,EAAE,eAAA,GAEFnB,EAAa,QAAQ,IACrBE,EAAc,QAAQ,IAEtB2D,EAAgBlE,GAAU,IAAI,MAAM,IAAI,GAExCa,EAAab,CAAQ,GAErBG,EAAwBH,CAAQ;AAClC;AAhBO,IAqBM6F,IAAsB,CAACrE,GAA+BxB,MAAuB;AACxF,MAAM,EAAE,KAAA8F,EAAI,IAAItE;AAChBA,IAAE,gBAAA,IAEEsE,MAAQC,MAAaD,MAAQxD,QAC/Bd,EAAE,eAAA,GACFoE,EAA+BpE,GAAGxB,CAAQ;AAE9C;ACVO,IAAMgG,KAAyB,CAACxE,GAAkBxB,MAAuB;AAC9EwB,IAAE,gBAAA,GACFA,EAAE,yBAAA;AAEF,MAAM,EAAE,gBAAAvB,GAAgB,cAAAI,EAAa,IAAIL,GAEnC,EAAE,KAAA8F,EAAI,IAAItE,GAGV2C,IAFiB3C,EAAE,OAES,MAAM,YAAA,EAAc,KAAA,KAAU;AAChE0C,IAAgBlE,GAAUmE,GAAY,CAACA,GAAY,IAAI;AAEvD,MAAM8B,IAAiBhG,EAAe,aAAaiG,EAAiB,MAAM;AAE1E,MAAIJ,MAAQrD,IAAgB;AAG1B,QAFKwD,KAAgBlG,EAAeC,CAAQ,GAExCmE,EAAW,SAAS,GAAG;AACzB,UAAMJ,IAAW/D,EAAS,aAAa,KAAK,CAAC,EAAE,UAAA+D,EAAS,MAAMA,CAAQ,GAChEoC,IACJpC,GAAU,MAAM,kBAAA,MAAwBI,EAAW,YAAA;AAEjDJ,WAAYoC,IACdjC,EAAgBlE,GAAUmE,GAAY,MAAM,IAAI,IAEhDD,EAAgBlE,GAAUmE,GAAY,OAAO,IAAI;IAErD,MACED,GAAgBlE,GAAU,IAAI,MAAM,IAAI;AAG1CK,MAAa,aAAa+B,GAAwBK,EAAc,GAEhE2D,GAAoBpG,CAAQ;AAC5B;EACF;AACF;AApCO,IA0CMqG,KAA2B,CAAC7E,GAAkBxB,MAAuB;AAChFwB,IAAE,gBAAA;AAEF,MAAM,EAAE,KAAAsE,EAAI,IAAItE,GAEV,EAAE,gBAAAvB,GAAgB,cAAAI,EAAa,IAAIL;AAEzCK,IAAa,aAAa+B,GAAwBkE,EAAK;AAIvD,MAAMnC,IAFiB3C,EAAE,OAES,MAAM,YAAA,EAAc,KAAA,KAAU,IAE1DyE,IAAiBhG,EAAe,aAAaiG,EAAiB,MAAM;AAE1E,MAAIJ,MAAQS,IAAY;AACtBC,MAAiBhF,GAAGxB,CAAQ,GAExBiG,KACFlG,EAAeC,CAAQ;AAEzB;EACF;AAEA,MACE,EAAA8F,MAAQC,MACRD,MAAQrD,MACRqD,MAAQvD,MACRuD,MAAQxD,MACRwD,MAAQW,MACRX,MAAQY,KAIV;AAAA,QAAIZ,MAAQtD,MAAgByD,GAAgB;AAC1ClG,QAAeC,CAAQ;AACvB;IACF;AAEA,QAAI8F,MAAQa,MAAiBxC,EAAW,WAAW,GAAG;AACpDD,QAAgBlE,GAAU,IAAI,MAAM,IAAI;AACxC;IACF;AAEA,QAAI8F,MAAQa,MAAiBxC,EAAW,SAAS,GAAG;AAClDD,QAAgBlE,GAAUmE,GAAY,CAACA,GAAY,IAAI,GAClD8B,KAAgBlG,EAAeC,CAAQ;AAC5C;IACF;AAEI,KAACiG,KAAkB9B,KAAc2B,MAAQtD,MAC3CzC,EAAeC,CAAQ,GAGzBG,EAAwBH,CAAQ,GAChCkE,EAAgBlE,GAAUmE,GAAY,CAACA,GAAY,IAAI;EAAA;AACzD;AAlGO,IAwGMyC,IAAyB,CAACpF,GAAexB,MAAuB;AAC3EwB,IAAE,gBAAA,GACFA,EAAE,eAAA;AAEF,MAAM,EAAE,gBAAAvB,GAAgB,cAAAI,EAAa,IAAIL;AAEzCK,IAAa,aAAa+B,GAAwBkE,EAAK;AAEvD,MAAMO,IAAU5G,EAAe,aAAaiG,EAAiB,MAAM;AACnE7F,IAAa,aAAa6F,IAAmB,GAAG,CAACW,CAAO,EAAE,GAEtD,CAAAA,MAIJ3C,EAAgBlE,GAAU,IAAI,MAAM,IAAI,GACxCD,EAAeC,CAAQ;AACzB;AAzHO,IAiIMwG,IAAmB,CAC9BhF,GACAxB,GACA8G,IAAY,UACT;AACH,MAAM,EAAE,cAAAzG,GAAc,eAAAE,GAAe,cAAAC,EAAa,IAAIR;AAEjD8G,OACHjG,EAAab,CAAQ,GAGvBG,EAAwBH,CAAQ;AAEhC,MAAM+D,IAAW/D,EAAS,aAAa,KAAK,CAAC,EAAE,UAAA+D,EAAS,MAAMA,CAAQ;AAEtE,MAAIA,EAAU;AAEd,MAAI+C,GAAW;AAEb,QADuBtF,EAAiB,iBACnBhB,EAAc;AAEnCH,MAAa,QAAQ,IACrBE,EAAc,QAAQ;AACtB;EACF;AAEA,MAAI,CAACwD,GAAU;AACb,QAAIvD,EAAc;AAElBH,MAAa,QAAQ,IACrBE,EAAc,QAAQ;EACxB;AAEuBP,IAAS,eAAe,aAAakG,EAAiB,MAAM,UAGjFnG,EAAeC,CAAQ;AAE3B;AAvKO,IA6KM+G,KAAmB,CAACvF,GAAUxB,MAAuB;AAChE,MAAM,EAAE,cAAAM,GAAc,cAAAD,EAAa,IAAIL,GACjCgH,IAAQxF,EAAE,QAEVd,IAAiBJ,EAAa,KAAK,CAAC,EAAE,UAAAyD,EAAS,MAAMA,CAAQ,GAC7DnD,IAAeF,GAAgB,QAAQ,IACvCuG,IAAgBvG,GAAgB,SAAS,IACzCyD,IAAa6C,EAAM;AAEzB,MAAItG,KAAkBuG,MAAkB9C,GAAY;AAClD9D,MAAa,QAAQO,GAErBT,EAAwBH,CAAQ;AAChC;EACF;AACF;AA5LO,IAmMDoG,KAAuBpG,OAAuB;AAClD,MAAM,EAAE,cAAAM,GAAc,cAAAD,EAAa,IAAIL,GACjCU,IAAiBJ,EAAa,KAAK,CAAC,EAAE,UAAAyD,EAAS,MAAMA,CAAQ;AAEnE,MAAI,CAACrD,KAAkBJ,EAAa,SAAS,GAAG;AAC9C,QAAM,CAAC4G,CAAW,IAAI5G,EAAa,OAAO,CAAC,EAAE,QAAA6G,EAAO,MAAM,CAACA,CAAM;AAEjED,MAAY,QAAQ,MAAA,GACpBhG,EAAoBb,GAAc6G,EAAY,OAAO;AAErD;EACF;AAEA,MAAIxG,GAAgB;AAClBA,MAAe,QAAQ,MAAA,GACvBQ,EAAoBb,GAAcK,EAAe,OAAO;AAExD;EACF;AAEF;ACvNA,IAAI0G,IAAgB,EAAE,GAAG,GAAG,GAAG,EAAE;AAAjC,IAEMC,KAAkB,EACtB,cAAc,EAAE,MAAM,UAAU,GAChC,aAAa,EAAE,MAAM,UAAU,EACjC;AALA,IAYMC,KAAgC,OACpC9F,GACAI,GACA5B,MAEOuH,GAAsB,EAC3B,IAAIvH,EAAS,kBACb,WAAW+B,GACX,eAAe,MACf,KAAK,EAAE,OAAOP,EAAE,GAChB,gBAAgBxB,EAAS,kBAAkB,CAAA,GAC3C,aAAa,MACXwH,GAA0BxH,EAAS,kBAAkB+B,GAAYsF,IAAiB,EAChF,eAAe,KACjB,CAAC,GACH,QAAQ,MAAM;AACPzF,IAAW,YAAUgC,EAAmB5D,GAAU4B,CAAU,GAEjEkC,GAAkB9D,EAAS,cAAc4B,EAAW,IAAI,GACxD7B,EAAeC,CAAQ;AACzB,EACF,CAAC;AAjCH,IA0CayH,IAAgC,OAC3CjG,GACAxB,MACG;AACH,MAAMyB,IAASD,EAAE;AAEjB,MAAIC,MAAWzB,EAAS,cAAe;AAIvC,MAFAwB,EAAE,eAAA,GAEEC,EAAO,YAAY,OAAOD,EAAE,SAAS,aAAa;AACpD,QAAMkG,IAAalG,GACbmG,IAAmB,EAAE,GAAGD,EAAW,SAAS,GAAGA,EAAW,QAAQ;AAAA,KACpEN,EAAc,MAAMO,EAAiB,KAAKP,EAAc,MAAMO,EAAiB,OAEjFP,IAAgBO,GAEhBC,EAA8BpG,GAAiB,MAAMxB,CAAQ;EAEjE;AAEA,MAAM4B,IAAaL,EAAqBC,GAAGxB,CAAQ;AACnD,MAAI,CAAC4B,EAAY;AAEjB,MAAMR,IAAWQ,GAAY,SAAS,aAAaP,EAAM;AACzDrB,IAAS,aAAa,aAAasB,IAA2B,GAAGF,KAAY,EAAE,EAAE,GAEjEI,EAAE,SAAS8E,MAEd,MAAMgB,GAA8B9F,GAAGI,GAAY5B,CAAQ;AAC1E;AAxEA,IA+Ea4H,IAAgC,CAC3CpG,GACAqG,GACA7H,MACG;AACH,MAAM4B,IAAaL,EAAqBC,GAAGxB,CAAQ;AAInD,MAFI,CAAC4B,KAEDJ,EAAE,SAAS,WAAY;AAE3B,MAAMsG,IAAoB9H,EAAS,aAAa,KAAK,CAAC,EAAE,SAAA6H,EAAQ,MAAMA,CAAO;AAEzEC,QACFA,GAAmB,QAAQ,aAAa/G,IAAc,IAAI,GAC1D+G,EAAkB,UAAU,QAG9BlG,EAAW,QAAQ,aAAab,IAAc,GAAG,GACjDa,EAAW,UAAUiG,GACrBjG,EAAW,QAAQ,MAAA,GAEnBV,EAAoBlB,EAAS,cAAc4B,EAAW,OAAO;AAC/D;AAtGA,IA6GMmG,KAAqB,CAACvG,GAAkBxB,MAAuB;AACnE,MAAM,EAAE,UAAAgI,EAAS,IAAIxG;AAEjBwG,OAAUxG,EAAE,eAAA,GAEZA,EAAE,WACHA,EAAE,OAA6B,MAAA,GAChCX,EAAab,CAAQ,IAEvBD,EAAeC,CAAQ;AACzB;AAvHA,IA8HMiI,KAAmC,CAACzG,GAAkBxB,MAAuB;AACjF8B,IAAcN,CAAC;AACf,MAAM,EAAE,cAAAlB,GAAc,cAAAD,GAAc,gBAAA6H,EAAe,IAAIlI,GAEjD,EAAE,KAAA8F,EAAI,IAAItE,GACV2G,IAAqB7H,EAAa,UAAU,CAAC,EAAE,SAAAuH,EAAQ,MAAMA,CAAO;AAC1E,MAAIM,IAAqB,EAAG;AAE5B,MAAMC,IACJ9H,EAAawF,MAAQtD,KAAe2F,IAAqB,IAAIA,IAAqB,CAAC;AAErF,MAAIrC,MAAQtD,MAAgB,CAAC4F,GAAY;AACvCrI,MAAeC,CAAQ;AAEvB;EACF;AAEAkI,IAAe,MAAM,gBAAgB;AAErC,MAAMG,IAASD,GAAY;AAE3B,MAAI,CAACC,EAAQ;AAEb,MAAMC,IAAYD,EAAO,sBAAA,GACnBE,IAAaL,EAAe,sBAAA,GAE5BM,IAAgBD,EAAW,SAASF,EAAO,cAC3CI,KAAaF,EAAW,MAAMF,EAAO,cAErCK,IAAaJ,EAAU,UAAUE,GACjCG,IAAUF,MAAcH,EAAU;AAIxC,MAFAD,EAAO,MAAA,GAEHM,GAAS;AACX,QAAMC,IAAeP,EAAO,YAAYA,EAAO,cACzCQ,IAAgBX,EAAe,YAAYA,EAAe;AAEhE,QAAIU,IAAeC,GAAe;AAChCX,QAAe,YAAYU,IAAeV,EAAe;AACzD;IACF;AAEA,QAAIG,EAAO,YAAYH,EAAe,WAAW;AAC/CA,QAAe,YAAYG,EAAO;AAClC;IACF;AAEAH,MAAe,YAAYG,EAAO;EACpC;AAEA,MAAIK,KAAc5C,MAAQtD,IAAc;AACtC,QAAMoG,IAAeP,EAAO,YAAYA,EAAO,cACzCQ,IAAgBX,EAAe,YAAYA,EAAe;AAEhE,QAAIU,IAAeC,GAAe;AAChCX,QAAe,YAAYU,IAAeV,EAAe;AACzD;IACF;AAEA,QAAIG,EAAO,YAAYH,EAAe,WAAW;AAC/CA,QAAe,YAAYG,EAAO;AAClC;IACF;AAEAH,MAAe,YAAYG,EAAO;EACpC;AAEAnH,IAAoBb,GAAc+H,GAAY,OAAO;AACvD;AAnMA,IA0MaU,KAAkC,OAAOtH,GAAkBxB,MAAuB;AAC7F,MAAM,EAAE,KAAA8F,EAAI,IAAItE;AAIhB,MAFAM,EAAcN,CAAC,GAEXsE,MAAQS,IAAY;AACtBC,MAAiBhF,GAAGxB,CAAQ,GAELA,EAAS,eAAe,aAAakG,EAAiB,MAAM,UAGjFnG,EAAeC,CAAQ;AAEzB;EACF;AAEA,MAAM+I,IAAkBjD,MAAQC,IAE1BnE,IAAaL,EAAqBC,GAAGxB,CAAQ;AAE/C+I,OAAmBnH,KAAY,MAAM0F,GAA8B9F,GAAGI,GAAY5B,CAAQ,GAEzFqC,GAAa,SAASyD,CAAG,MAE1BA,MAAQvD,KAASwF,GAAmBvG,GAAGxB,CAAQ,KAC1C8F,MAAQtD,MAAgBsD,MAAQrD,OACvCwF,GAAiCzG,GAAGxB,CAAQ;AAChD;ACxPO,IAAMgJ,MAAqC,CAChDxH,GACA,EAAE,cAAAlB,EAAa,MACZ;AACH,MAAM,EAAE,KAAAwF,EAAI,IAAItE;AAIhB,MAFAA,EAAE,gBAAA,GAEEsE,MAAQrD,GAAgB;AAE5B,MAAMyE,IAAc5G,EAAa,KAAK,CAAC,EAAE,QAAA6G,EAAO,MAAM,CAACA,CAAM,GACvD8B,IAAgB3I,EAAa,KAAK,CAAC,EAAE,SAAAuH,EAAQ,MAAMA,CAAO;AAEhE,MAAIoB,GAAe;AACjBA,MAAc,QAAQ,MAAA;AAEtB;EACF;AAEA,MAAI/B,GAAa;AACfA,MAAY,QAAQ,MAAA;AAEpB;EACF;AAGF;ACzBO,IAAMgC,KAA4BlJ,OAAuB;AAC9D,MAAM,EAAE,eAAAO,GAAe,cAAAD,EAAa,IAAIN,GAElCU,IAAiBJ,EAAa,KAAK,CAAC,EAAE,OAAAK,EAAM,MAAMA,MAAUJ,EAAc,KAAK;AAChFG,QAELoD,GAAkB9D,EAAS,cAAcU,EAAe,IAAI,GAC5DV,EAAS,aAAa,cAAc,IAAI,MAAM,QAAQ,CAAC,GAEvDG,EAAwBH,CAAQ,GAChC4D,EAAmB5D,GAAUU,CAAc;AAC7C;ACeO,IAAMyI,KAAgBnJ,OAAuB;AAClD,MAAM,EAAE,gBAAAC,GAAgB,cAAAqD,GAAc,cAAAjD,GAAc,eAAAD,GAAe,MAAAgJ,EAAK,IAAIpJ,GACtEqJ,IAAaC,GAAAA,GACbC,IAAOvJ,EAAS,kBAChBwJ,IAAyB,IAAIC,GAAqB,cAAc,IAChEC,IAAuB,IAAID,GAAqB,YAAY,IAC5DE,IAAgB/G,GAAmB,OAAO,GAC1CgH,IAAcC,GAClB5J,GACA8B,GACA,QACA,EAAE,MAAM,WAAW,SAAS,KAAK,GACjC,EAAE,eAAe,KAAK,CACxB;AAEI6H,OACFE,GAAiB7J,CAAc,GAGjCA,EAAe,YAAauB,OAAM;AAGhCM,MAAcN,CAAC;EAEjB;AAEA,MAAMuI,KAAyB,MAAM;AACnChK,MAAeC,CAAQ;EACzB;AAGA,SAAAqJ,EAAW,IAAIW,GAAYZ,GAAM,aAAc5H,OAAM4B,GAAyB5B,GAAGxB,CAAQ,CAAC,CAAC,GAC3FqJ,EAAW,IAAIW,GAAY/J,GAAgB,SAAS,MAAMI,EAAa,MAAA,CAAO,CAAC,GAC/EgJ,EAAW,IACTW,GAAY1G,GAAc,aAAc9B,OAAMiG,EAA8BjG,GAAGxB,CAAQ,CAAC,CAC1F,GACAqJ,EAAW,IAAIW,GAAY1G,GAAc,cAAcxB,CAAa,CAAC,GACrEuH,EAAW,IAAIW,GAAY1G,GAAc,WAAWxB,CAAa,CAAC,GAClEuH,EAAW,IAAIW,GAAY3J,GAAc,SAAUmB,OAAMwE,GAAuBxE,GAAGxB,CAAQ,CAAC,CAAC,GAC7FqJ,EAAW,IAAIW,GAAY3J,GAAc,WAAYmB,OAAMoF,EAAuBpF,GAAGxB,CAAQ,CAAC,CAAC,GAC/FqJ,EAAW,IAAIW,GAAY3J,GAAc,QAASmB,OAAMgF,EAAiBhF,GAAGxB,GAAU,IAAI,CAAC,CAAC,GAC5FqJ,EAAW,IACTW,GAAY3J,GAAc,4BAA6BmB,OAAMuF,GAAiBvF,GAAGxB,CAAQ,CAAC,CAC5F,GACAqJ,EAAW,IAAIW,GAAY5J,GAAe,WAAYoB,OAAMqE,EAAoBrE,GAAGxB,CAAQ,CAAC,CAAC,GAG7FqJ,EAAW,IACTY,GACET,GACA,EACE,SAAS,CAAC,EAAE,OAAAvI,GAAO,IAAAiJ,EAAG,MAAM;AAC1B,QAAIA,MAAOjK,EAAgB;AAC3B,QAAMkK,IAAgBlJ;AAEtB+H,IAAAA,IAAmCmB,GAAenK,CAAQ,GAErD4J,KACAQ,GAAgBD,CAAa,OAE9BA,EAAc,QAAQ,OAAOA,EAAc,QAAQ,eACrDA,EAAc,eAAA,GAGhBJ,GAAAA;EACF,GACA,OAAO,CAAC,EAAE,IAAAG,EAAG,MAAM;AACbA,UAAOjK,KACX8J,GAAAA;EACF,EACF,GACA,EAAE,MAAAR,EAAK,CACT,CACF,GAGAF,EAAW,IACTY,GACEP,GACA,EACE,OAAO,CAAC,EAAE,OAAAzI,EAAM,MAAMwG,EAA8BxG,GAAOjB,CAAQ,GACnE,SAAS,CAAC,EAAE,OAAAiB,EAAM,MAAM6H,GAAgC7H,GAAOjB,CAAQ,GACvE,SAAS,CAAC,EAAE,OAAAiB,EAAM,MAAM2G,EAA8B3G,GAAO,MAAMjB,CAAQ,GAC3E,UAAU,CAAC,EAAE,OAAAiB,EAAM,MAAM2G,EAA8B3G,GAAO,OAAOjB,CAAQ,EAC/E,GACA,EAAE,MAAAuJ,EAAK,CACT,CACF,GAGAF,EAAW,IACTY,GACE,SACA,EACE,OAAO,MAAM;AACYhK,MAAe,aAAaiG,EAAiB,MAAM,UAGxEnG,EAAeC,CAAQ;EAE3B,GACA,SAAS,CAAC,EAAE,OAAAiB,EAAM,MAAMoF,GAAyBpF,GAAOjB,CAAQ,GAChE,OAAO,CAAC,EAAE,OAAAiB,EAAM,MAAM2F,EAAuB3F,GAAOjB,CAAQ,EAC9D,GACA,EAAE,MAAAuJ,EAAK,CACT,CACF,GAGAF,EAAW,IACTY,GACE,UACA,EACE,QAAQ,MAAMf,GAAyBlJ,CAAQ,EACjD,GACA,EAAE,MAAAuJ,EAAK,CACT,CACF,GAGAF,EAAW,IACTY,GACEN,GACA,EACE,OAAO,CAAC,EAAE,OAAA1I,EAAM,MAAM2E,EAA+B3E,GAAOjB,CAAQ,GACpE,SAAS,CAAC,EAAE,OAAAiB,EAAM,MAAM4E,EAAoB5E,GAAOjB,CAAQ,EAC7D,GACA,EAAE,MAAAuJ,EAAK,CACT,CACF,GAEO,MAAMF,EAAW,IAAA;AAC1B;ACpJA,IAAMgB,KAAuBrK,OAAuB;AAClD,MAAM,EAAE,cAAAsD,GAAc,gBAAA4E,GAAgB,cAAA5H,GAAc,eAAAC,GAAe,cAAAF,EAAa,IAAIL;AAC5DkI,IAAe,UAAU,SAAS/F,CAAgB;AAAA,MACtEmI,IAAqB,OAEnBC,QAA6BC,qBAAAA,SAAUC,OAAgC;AAC3EA,MAAU,QAASC,OAAa;AAC9B,UAAIA,EAAS,kBAAkB,SAAS;AACtC,YAAMC,IAAcpK,EAAc,OAC5B4D,IAAa9D,EAAa,OAC1BuK,IAAoBvK,EAAa,aAAa+B,CAAsB,GACpE8E,IAAc,MAAM,KAAK5G,CAAY,EAAE,KAAM4J,OAAO,CAACA,EAAG,MAAM,GAE9DxJ,IAAiB,MAAM,KAAKJ,CAAY,EAAE,KAC7C4J,OAAOA,GAAI,MAAM,YAAA,EAAc,KAAA,MAAWS,GAAa,YAAA,EAAc,KAAA,CACxE;AAaA,YAXAL,IAAsBI,EAAS,OAA0B,UAAU,SACjEvI,CACF,GAKI,CAACzB,KAAkB4J,MACrBpC,EAAe,YAAY,IAGzBoC,GAAoB;AACtB,cAAMO,IAAUnK,KAAkBwG;AAE9B2D,eAASA,EAAQ,QAAQ,MAAA;QAC/B;AAIA,YAFAxK,EAAa,aAAa6F,IAAmB,GAAGoE,CAAkB,EAAE,GAEhE5J,GAAgB;AAClB,cAAM8E,IAAK9E,EAAe,QAAQ,aAAaW,EAAM;AAGrD,cAFAhB,EAAa,aAAaiB,IAA2B,GAAGkE,CAAE,EAAE,GAExD8E,KAAsBM,MAAsBnI,IAAgB;AAC9D/B,cAAe,QAAQ,MAAA;AACvB;UACF;AACA,cAAI4J,KAAsBM,MAAsBtE,IAAO;AACrD5F,cAAe,QAAQ,MAAA,GACvBG,EAAab,CAAQ;AACrB;UACF;AAEKsK,gBACHtJ,EAAyBhB,CAAQ,GACjCa,EAAab,CAAQ;AAGvB;QACF;AAEA,YAAI,CAACU,KAAkByD,KAAcmG,KAAsBpD,GAAa;AAClE0D,gBAAsBnI,MAAgByE,EAAY,QAAQ,MAAA,GAC1D0D,MAAsBtE,MAAOzF,EAAab,CAAQ;AAEtD;QACF;AAEA,YAAIsK,KAAsB,CAAC5J,GAAgB;AAGzC,cAFAL,EAAa,aAAaiB,IAA2B,EAAE,GAEnDsJ,MAAsBnI,MAAkByE,GAAa;AACvDA,cAAY,QAAQ,MAAA;AACpB;UACF;AAEArG,YAAab,CAAQ;QACvB;AACKsK,cACHtJ,EAAyBhB,CAAQ,GACjCa,EAAab,CAAQ,GAEhBU,KAAgBL,EAAa,aAAaiB,IAA2B,EAAE;MAEhF;IACF,CAAC;AAEsBhB,MAAa,KAAK,CAAC,EAAE,UAAAyD,EAAS,MAAMA,CAAQ;AACtCzD,MAAa,KAAK,CAAC,EAAE,QAAA6G,EAAO,MAAM,CAACA,CAAM;EAGxE,GAAG,EAAE,GAEC2D,IAAW,IAAI,iBAAiBP,CAAQ;AAE9C,SAAAO,EAAS,QAAQxH,GAAc,EAC7B,YAAY,MACZ,iBAAiB,CAAC,SAAS,OAAO,EACpC,CAAC,GAEMwH;AACT;AAlGA,IA0GMC,KAAwB/K,OAAuB;AACnD,MAAM,EAAE,eAAAO,EAAc,IAAIP,GAEpB8K,IAAW,IAAI,iBAAkBL,OAAc;AACzBA,MAAU,KAAK,CAAC,EAAE,YAAAO,GAAY,cAAAC,EAAa,MACnE,CAAC,GAAGD,GAAY,GAAGC,CAAY,EAAE,KAAKC,EAAmB,CAC3D,KAEuBhH,EAAgBlE,CAAQ;EACjD,CAAC;AAED,SAAA8K,EAAS,QAAQvK,GAAe,EAC9B,WAAW,KACb,CAAC,GAEMuK;AACT;AA1HA,IAkIaK,KAAmBnL,OAAuB;AACrD,MAAMoL,IAAuBf,GAAoBrK,CAAQ,GACnDqL,IAAwBN,GAAqB/K,CAAQ;AAE3D,SAAO,MAAM;AACXoL,MAAqB,WAAA,GACrBC,EAAsB,WAAA;EACxB;AACF;AC/HO,IAAMC,KAAkB,CAC7BC,GACA5G,MACG;AACH,MAAMrE,IAA6B,CAAA,GAE7BkL,IAAWD,EAAiB,QAAyB,IAAI9B,GAAqB,QAAQ,EAAE;AAC9F,MAAI,CAAC+B,EAAU;AAEf,MAAMjL,IAAgBiL,EAAS,cAAc,QAAQ,GAC/CnL,IAAemL,EAAS,cAAc,OAAO,GAC7CtD,IAAiBpF,EAAa,UAAU,GAAG,cAAc,KAAK,GAC9D,EAAE,MAAAsG,EAAK,IAAI;AAEjB,MAAI,CAAC7I,KAAiB,CAACF,KAAgB,CAAC6H,EAAgB;AAExD,MAAMjI,IAAiBuL,EAAS,cAC9B,IAAI/B,GAAqB,cAAc,EACzC,GACMnG,IAAekI,EAAS,cAC5B,IAAI/B,GAAqB,YAAY,EACvC;AAEA,MAAI,CAACxJ,KAAkB,CAACqD,EAAc;AACtCrD,IAAe,aAAa,YAAY,UAAU,GAElDoD,GAAgBpD,GAAgBqD,CAAY;AAE5C,MAAMmB,IACJ3B,EAAa,SAAS,EAAE,OAAO7C,EAAe,CAAC,KAC/CqF,GAAarF,CAAc,KAC3BA,GAEIwL,IAAgB1I,EAAiB,SAAS,EAAE,OAAOO,EAAa,CAAC,GACjEiB,KAAiB,CAAC,GAAGjB,EAAa,iBAAiB,GAAG,CAAC,EAAE,KAAMzB,OAC5D,CAAC4J,EAAc,SAAS5J,CAAO,CACvC;AACD,MAAI,CAAC6J,GAAoBnH,EAAc,EAAG;AAE1C,MAAMC,IAAcD,GAAe;AACnC,MAAI,CAACC,EAAa;AAElB,MAAMmH,IAAgB,MAAM,KAAKpL,EAAc,iBAAiB,QAAQ,CAAC,EAAE,KACxEqL,OAAQA,EAAI,UAAU,EACzB,GAEMlH,IAAoB5B,EAAa,SAAS,EAAE,OAAO0I,EAAS,CAAC,GAC7DpL,IAAgB0C,EAAa,SAAS,EAAE,OAAO0I,EAAS,CAAC;AAE/D,WAAW3J,KAAW,CAAC0C,EAAc,EAC9B1C,OAELA,EAAQ,OAAO,KACfA,EAAQ,aAAad,IAAc,IAAI,GACvCc,EAAQ,gBAAgBgK,EAAgB,GACxChK,EAAQ,OAAA;AAGV,MAAMiK,IAAcnH,EAAQ,eAAe,OACrCnE,IAAemE,EAAQ,gBAAgB;AAE7C,SAAAoH,GAAqB1L,GAAcE,GAAe2H,GAAgB9H,GAAeI,CAAY,GAEtF,EACL,kBAAA+K,GACA,cAAAjL,GACA,eAAAC,GACA,gBAAAN,GACA,cAAAqD,GACA,OAAAmB,GACA,gBAAAF,IACA,mBAAAG,GACA,aAAAF,GACA,aAAAsH,GACA,cAAAtL,GACA,cAAAH,GACA,eAAAD,GACA,eAAAuL,GACA,gBAAAzD,GACA,MAAAkB,GACA,gBAAgB,OAClB;AACF;AAlFO,IA2FD2C,KAAuB,CAC3B1L,GACAE,GACA2H,GACA9H,GACAI,MACG;AACHH,KAAc,eAAe,aAAaU,IAAc,IAAI,GACvDP,KAAcH,GAAc,gBAAgB2L,EAAQ,GACzD3L,GAAc,aAAaU,IAAc,GAAG,GAC5CV,GAAc,gBAAgB,WAAW,GACrCE,EAAc,aAAa0L,EAAY,KACzC5L,GAAc,aAAa4L,IAAc,UAAU,GAErD5L,GAAc,aAAa6L,IAAU,UAAU,GAE/C7L,GAAc,aAAa8L,IAAkB,KAAK;AAClD,MAAMC,IAAmBlE,EAAe,aAAa,IAAI,KAAK;AAC9D7H,KAAc,aAAagM,IAAmBD,CAAgB,GAC9D/L,GAAc,aAAaiM,IAAeF,CAAgB,GAC1D/L,GAAc,aAAakM,IAAuB,MAAM,GACxDlM,GAAc,aAAa6F,IAAmB,OAAO,GAErD3F,EAAc,aAAaiM,IAAiB,MAAM,GAClDjM,EAAc,aAAaQ,IAAc,IAAI,GAE7CmH,EAAe,aAAanH,IAAc,IAAI,GAE9CX,GAAe,aAAaW,IAAc,GAAG,GAC7CX,GAAe,aAAa8L,IAAU,QAAQ,GAC9C9L,EAAc,MAAM,UAAU;AAChC;AChIO,IAAMqM,IAA2B,YAAY;AAClD,QAAMC,GAAAA,GACN,MAAMC,GAAoB,MAAM;AAEhC,MAAMC,IAAMtD,GAAAA,GAENuD,IAAiC,EACrC,aAAa,GACb,eAAe,GACf,kBAAkB,GAClB,yBAAyB,KAC3B,GAEMC,IAAoB/J,EAAiB,UAAU,GAC/CgK,IAAgC,CAAA;AAEtC,WAAWxB,KAAoBuB,GAAmB;AAChD,QAAME,IAAS,MAAMzF,GAAsB,EACzC,IAAIgE,GACJ,WAAWxJ,GACX,eAAe,OACf,gBAAgB,CAAA,GAChB,aAAa,MACXyF,GAA0B+D,GAAkBxJ,GAAYC,IAAS,EAC/D,eAAe,MACjB,CAAC,GACH,QAAS2C,OAAY;AACnB,UAAM3E,IAAWsL,GAAgBC,GAAkB5G,CAAO;AAC1D,UAAI,CAAC3E,EAAU;AAEfkE,QAAgBlE,GAAU,IAAI,OAAO,IAAI;AAEzC,UAAMiN,IAAsB9B,GAAgBnL,CAAQ,GAC9CkN,IAAuB/D,GAAanJ,CAAQ;AAElD4M,QAAI,IAAIK,CAAmB,GAC3BL,EAAI,IAAIM,CAAoB,GAE5BH,EAAe,KAAKxB,CAAgB;IACtC,EACF,CAAC;AAEGyB,MAAO,KACTH,EAAY,gBACHG,EAAO,WAAW,cAC3BH,EAAY,iBACZA,EAAY,0BAA0B,cAC7BG,EAAO,WAAW,mBAC3BH,EAAY,oBACZA,EAAY,0BAA0B;EAE1C;AAEA,SAAO,EACL,QAAQ,EAAE,UAAUE,GAAgB,aAAAF,EAAY,GAChD,UAAU;AACRD,MAAI,IAAA;EACN,EACF;AACF;AAAA,ICnFEO,KAAW;AAAA,ICGNC,MAAQC,GAAa,EAC1B,KAAKtL,GACL,MAAM,OAAOuL,MAAS;AAGpB,MAAMV,IAAMtD,GAAAA,GACNiE,IAAM,MAAMd,EAAAA;AAEdc,OAAO,OAAQA,EAA8B,WAAY,cAC3DX,EAAI,IAAI,MAAM;AACZ,QAAI;AACDW,QAAgC,QAAA;IACnC,QAAQ;IAER;EACF,CAAC;AAGH,MAAMC,IAAW,EACf,KAAKzL,GACL,SAAS,MAAM6K,EAAI,IAAA,EACrB;AAEA,SAAIW,KAAO,OAAQA,EAA8B,WAAY,aACpD,EACL,GAAGC,GACH,SAAS,YAAY;AACnB,QAAI;AACF,YAAOD,EAAgD,QAAA;IACzD,QAAQ;IAER;EACF,EACF,IAGKC;AACT,EACF,CAAC;",
|
|
6
|
+
"names": ["toggleDropdown", "settings", "dropdownToggle", "simulateEvent", "toggleDropdownCloseIcon", "clearDropdown", "inputElement", "optionsStore", "selectElement", "preventClear", "inputElValue", "selectedOption", "value", "selectedText", "focusOnInput", "end", "TABINDEX_KEY", "updateComboboxInputField", "event", "setActiveDescendant", "focusedElement", "optionId", "ID_KEY", "ARIA_ACTIVEDESCENDANT_KEY", "getClickedOptionData", "e", "target", "isElement", "optionElement", "optionData", "element", "cleanupBubble", "MODULE_KEY", "OPTIONS", "ELEMENTS", "SETTINGS", "DROPDOWN_IS_OPEN", "FS_DROPDOWN_TOGGLE_KEY", "CONTROL_KEYS", "SPACE_KEY", "TAB_KEY", "ARROW_UP_KEY", "ARROW_DOWN_KEY", "getInstance", "getPresenceSelector", "getElementSelector", "getSettingSelector", "queryElement", "queryAllElements", "getAttribute", "hasAttributeValue", "getSettingAttributeName", "generateSelectors", "handleBodyMouseMovements", "setDropdownAria", "dropdownList", "ARIA_HASPOPUP_KEY", "ARIA_ROLE_VALUES", "ARIA_ROLE_KEY", "ARIA_MULTISELECTABLE_KEY", "setOptionAria", "updateOptionsState", "close", "setFormFieldValue", "selected", "CURRENT_CSS_CLASS", "ARIA_SELECTED_KEY", "populateOptions", "inputValue", "showAll", "isTyping", "initialLoad", "optionTemplate", "optionsList", "label", "noResultsTemplate", "options", "currentValue", "optionsConfigured", "item", "optionsFiltered", "optionsArr", "a", "b", "text", "cloneNode", "textNode", "findTextNode", "elementId", "id", "ARIA_SETSIZE_KEY", "index", "ARIA_POSINSET_KEY", "handleClearDropdownClickEvents", "handleClearDropdown", "key", "ENTER_KEY", "handleInputKeyUpEvents", "dropdownIsOpen", "ARIA_EXPANDED_KEY", "inputIsEqualToSelectedOption", "focusOnDropdownItem", "handleInputKeyDownEvents", "CLICK", "ESCAPE_KEY", "handleClearInput", "ARROW_RIGHT_KEY", "ARROW_LEFT_KEY", "BACKSPACE_KEY", "handleInputClickEvents", "toggled", "fromInput", "updateInputField", "input", "selectedValue", "firstOption", "hidden", "lastCursorPos", "SETTINGS_SCHEMA", "handleDropdownListClickEvents", "runActivationPipeline", "readOptionsFromAttributes", "handleDropdownListMouseEvents", "mouseEvent", "currentCursorPos", "handleDropdownListFocusEvents", "focused", "previouslyFocused", "handleTabKeyEvents", "shiftKey", "handleDropdownListArrowKeyEvents", "navListElement", "focusedOptionIndex", "nextOption", "nextEl", "nextElBox", "navListBox", "navListBottom", "navListTop", "isAtBottom", "isAtTop", "optionBottom", "currentBottom", "handleDropdownListKeydownEvents", "enterKeyPressed", "handleDropdownToggleArrowKeyEvents", "focusedOption", "handleSelectChangeEvents", "listenEvents", "body", "cleanupBag", "createCleanupBag", "root", "dropdownToggleSelector", "DROPDOWN_CSS_CLASSES", "dropdownListSelector", "clearSelector", "a11yEnabled", "readOption", "ensureButtonLike", "handleToggleActivation", "addListener", "createDelegation", "el", "keyboardEvent", "isActivationKey", "observeDropdownList", "currentStateIsOpen", "callback", "debounce", "mutations", "mutation", "selectValue", "dropdownToggleKey", "toFocus", "observer", "observeSelectElement", "addedNodes", "removedNodes", "isHTMLOptionElement", "observeElements", "dropdownListObserver", "selectElementObserver", "collectSettings", "referenceElement", "dropdown", "clearElements", "isHTMLAnchorElement", "defaultOption", "opt", "ARIA_CURRENT_KEY", "hideInitial", "initializeAttributes", "NAME_KEY", "REQUIRED_KEY", "ROLE_KEY", "AUTOCOMPLETE_KEY", "navListElementId", "ARIA_CONTROLS_KEY", "ARIA_OWNS_KEY", "ARIA_AUTOCOMPLETE_KEY", "ARIA_HIDDEN_KEY", "init", "waitWebflowReady", "waitAttributeLoaded", "bag", "diagnostics", "referenceElements", "activeElements", "result", "disconnectObservers", "removeEventListeners", "version", "index_default", "defineModule", "core", "res", "instance"]
|
|
7
|
+
}
|