@flexilla/alpine-dropdown 0.1.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cdn.js +261 -199
- package/dist/cdn.min.js +1 -1
- package/dist/module.cjs.js +261 -199
- package/dist/module.esm.js +261 -199
- package/package.json +3 -3
package/dist/module.cjs.js
CHANGED
|
@@ -25,19 +25,19 @@ module.exports = __toCommonJS(module_exports);
|
|
|
25
25
|
|
|
26
26
|
// ../../node_modules/@flexilla/dropdown/dist/dropdown.js
|
|
27
27
|
var B = Object.defineProperty;
|
|
28
|
-
var j = (
|
|
29
|
-
var a = (
|
|
30
|
-
var
|
|
31
|
-
var
|
|
32
|
-
var
|
|
28
|
+
var j = (i, e, t) => e in i ? B(i, e, { enumerable: true, configurable: true, writable: true, value: t }) : i[e] = t;
|
|
29
|
+
var a = (i, e, t) => j(i, typeof e != "symbol" ? e + "" : e, t);
|
|
30
|
+
var q = Object.defineProperty;
|
|
31
|
+
var G = (i, e, t) => e in i ? q(i, e, { enumerable: true, configurable: true, writable: true, value: t }) : i[e] = t;
|
|
32
|
+
var p = (i, e, t) => G(i, typeof e != "symbol" ? e + "" : e, t);
|
|
33
33
|
var V = "bottom";
|
|
34
|
-
var X = ({ reference:
|
|
35
|
-
if (!
|
|
34
|
+
var X = ({ reference: i, popper: e }) => {
|
|
35
|
+
if (!i || !e)
|
|
36
36
|
throw new Error("Reference or popper element is null or undefined");
|
|
37
|
-
const t = /* @__PURE__ */ new WeakMap(),
|
|
37
|
+
const t = /* @__PURE__ */ new WeakMap(), n = (o) => (t.has(o) || t.set(o, o.getBoundingClientRect()), t.get(o)), r = n(e), s = n(i);
|
|
38
38
|
return {
|
|
39
|
-
popperHeight:
|
|
40
|
-
popperWidth:
|
|
39
|
+
popperHeight: r.height,
|
|
40
|
+
popperWidth: r.width,
|
|
41
41
|
refHeight: s.height,
|
|
42
42
|
refWidth: s.width,
|
|
43
43
|
refLeft: s.left,
|
|
@@ -45,49 +45,49 @@ var X = ({ reference: n, popper: e }) => {
|
|
|
45
45
|
refRight: s.right
|
|
46
46
|
};
|
|
47
47
|
};
|
|
48
|
-
var Y = (
|
|
49
|
-
const
|
|
50
|
-
return
|
|
48
|
+
var Y = (i, e, t, n) => {
|
|
49
|
+
const r = t, s = n - (t + e);
|
|
50
|
+
return r >= (i - e) / 2 && s >= (i - e) / 2;
|
|
51
51
|
};
|
|
52
|
-
var J = (
|
|
53
|
-
var Q = (
|
|
54
|
-
var Z = (
|
|
55
|
-
var _ = (
|
|
56
|
-
var ee = (
|
|
57
|
-
const
|
|
58
|
-
return
|
|
52
|
+
var J = (i, e, t, n) => (i - e) / 2 <= t && t + i / 2 + e / 2 <= n;
|
|
53
|
+
var Q = (i, e, t, n, r) => t > r - n ? e() ? window.innerHeight - r : t - r : i() ? 0 : t + n;
|
|
54
|
+
var Z = (i, e, t, n) => i <= n && t - i <= e;
|
|
55
|
+
var _ = (i, e, t, n) => t <= n && -i <= e;
|
|
56
|
+
var ee = (i, e, t, n, r, s) => {
|
|
57
|
+
const o = r - t - s, l = t - n, m = t + s - n + (r - t - s), c = o >= 0 ? r - n : l >= 0 ? t - n : t;
|
|
58
|
+
return i() ? 0 : e() ? m : c;
|
|
59
59
|
};
|
|
60
|
-
var te = (
|
|
61
|
-
var ne = (
|
|
60
|
+
var te = (i, e, t, n) => i <= t && e - i - n >= i;
|
|
61
|
+
var ne = (i, e) => i >= e;
|
|
62
62
|
var ie = ({
|
|
63
|
-
placement:
|
|
63
|
+
placement: i,
|
|
64
64
|
refWidth: e,
|
|
65
65
|
refTop: t,
|
|
66
|
-
refLeft:
|
|
67
|
-
refHeight:
|
|
66
|
+
refLeft: n,
|
|
67
|
+
refHeight: r,
|
|
68
68
|
popperWidth: s,
|
|
69
|
-
popperHeight:
|
|
69
|
+
popperHeight: o,
|
|
70
70
|
windowHeight: l,
|
|
71
71
|
windowWidth: m,
|
|
72
72
|
offsetDistance: c
|
|
73
73
|
}) => {
|
|
74
|
-
const
|
|
75
|
-
() => _(t,
|
|
76
|
-
() => Z(t,
|
|
74
|
+
const d = m - n - e, f = n, E = l - t - r, g = t, w = () => Q(
|
|
75
|
+
() => _(t, r, o, l),
|
|
76
|
+
() => Z(t, r, o, l),
|
|
77
77
|
t,
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
r,
|
|
79
|
+
o
|
|
80
80
|
), b = () => ee(
|
|
81
|
-
() => te(
|
|
82
|
-
() => ne(
|
|
83
|
-
|
|
81
|
+
() => te(n, m, s, e),
|
|
82
|
+
() => ne(n, s),
|
|
83
|
+
n,
|
|
84
84
|
s,
|
|
85
85
|
m,
|
|
86
86
|
e
|
|
87
|
-
), M = () => Y(s, e,
|
|
87
|
+
), M = () => Y(s, e, n, m) ? n + e / 2 - s / 2 : b(), A = () => J(o, r, t, l) ? t + r / 2 - o / 2 : w(), C = () => n + s <= m ? n : b(), L = () => n + e - s >= 0 ? n + e - s : b(), x = () => t + o <= l ? t : w(), U = () => t + r - o >= 0 ? t + r - o : w();
|
|
88
88
|
let u = 0, v = 0;
|
|
89
|
-
const
|
|
90
|
-
switch (
|
|
89
|
+
const T = t - o - c, I = t + r + c, D = n - s - c, H = n + e + c, P = g >= o + c, W = E >= o + c, R = f >= s + c, $ = d >= s + c;
|
|
90
|
+
switch (i.startsWith("top") ? v = P ? T : W ? I : Math.max(T, I) : i.startsWith("bottom") ? v = W ? I : P ? T : Math.max(I) : i.startsWith("left") ? u = R ? D : $ ? H : Math.max(D, H) : i.startsWith("right") && (u = $ ? H : R ? D : Math.max(H, D)), i) {
|
|
91
91
|
case "bottom":
|
|
92
92
|
case "bottom-middle":
|
|
93
93
|
case "top":
|
|
@@ -98,19 +98,19 @@ var ie = ({
|
|
|
98
98
|
case "left-middle":
|
|
99
99
|
case "right":
|
|
100
100
|
case "right-middle":
|
|
101
|
-
v =
|
|
101
|
+
v = A();
|
|
102
102
|
break;
|
|
103
103
|
case "bottom-start":
|
|
104
104
|
case "top-start":
|
|
105
|
-
u =
|
|
105
|
+
u = C();
|
|
106
106
|
break;
|
|
107
107
|
case "bottom-end":
|
|
108
108
|
case "top-end":
|
|
109
|
-
u =
|
|
109
|
+
u = L();
|
|
110
110
|
break;
|
|
111
111
|
case "left-start":
|
|
112
112
|
case "right-start":
|
|
113
|
-
v =
|
|
113
|
+
v = x();
|
|
114
114
|
break;
|
|
115
115
|
case "left-end":
|
|
116
116
|
case "right-end":
|
|
@@ -138,61 +138,61 @@ var se = class {
|
|
|
138
138
|
* @param {boolean} [options.eventEffect.disableOnScroll] - Disable position updates on scroll
|
|
139
139
|
* @param {Function} [options.onUpdate] - Callback function when position updates
|
|
140
140
|
*/
|
|
141
|
-
constructor(e, t,
|
|
142
|
-
|
|
141
|
+
constructor(e, t, n = {}) {
|
|
142
|
+
p(this, "reference"), p(this, "popper"), p(this, "offsetDistance"), p(this, "placement"), p(this, "disableOnResize"), p(this, "disableOnScroll"), p(this, "onUpdate"), p(this, "isWindowEventsRegistered"), p(this, "validateElements", () => {
|
|
143
143
|
if (!(this.reference instanceof HTMLElement))
|
|
144
144
|
throw new Error("Invalid HTMLElement for Reference Element");
|
|
145
145
|
if (!(this.popper instanceof HTMLElement))
|
|
146
146
|
throw new Error("Invalid HTMLElement for Popper");
|
|
147
147
|
if (typeof this.offsetDistance != "number")
|
|
148
148
|
throw new Error("OffsetDistance must be a number");
|
|
149
|
-
}),
|
|
150
|
-
this.popper.style.setProperty("--fx-popper-placement-x", `${
|
|
151
|
-
}),
|
|
149
|
+
}), p(this, "setPopperStyleProperty", (d, f) => {
|
|
150
|
+
this.popper.style.setProperty("--fx-popper-placement-x", `${d}px`), this.popper.style.setProperty("--fx-popper-placement-y", `${f}px`);
|
|
151
|
+
}), p(this, "setInitialStyles", () => {
|
|
152
152
|
this.popper.style.setProperty("--fx-popper-placement-x", ""), this.popper.style.setProperty("--fx-popper-placement-y", "");
|
|
153
|
-
}),
|
|
154
|
-
var
|
|
153
|
+
}), p(this, "initPlacement", () => {
|
|
154
|
+
var d;
|
|
155
155
|
this.validateElements(), this.setInitialStyles();
|
|
156
|
-
const
|
|
156
|
+
const f = window.innerWidth, E = window.innerHeight, { popperHeight: g, popperWidth: w, refHeight: b, refWidth: M, refLeft: A, refTop: C } = X({ reference: this.reference, popper: this.popper }), { x: L, y: x } = ie(
|
|
157
157
|
{
|
|
158
158
|
placement: this.placement,
|
|
159
159
|
refWidth: M,
|
|
160
|
-
refTop:
|
|
161
|
-
refLeft:
|
|
160
|
+
refTop: C,
|
|
161
|
+
refLeft: A,
|
|
162
162
|
popperWidth: w,
|
|
163
163
|
refHeight: b,
|
|
164
|
-
popperHeight:
|
|
164
|
+
popperHeight: g,
|
|
165
165
|
windowHeight: E,
|
|
166
|
-
windowWidth:
|
|
166
|
+
windowWidth: f,
|
|
167
167
|
offsetDistance: this.offsetDistance
|
|
168
168
|
}
|
|
169
169
|
);
|
|
170
|
-
this.setPopperStyleProperty(
|
|
171
|
-
}),
|
|
170
|
+
this.setPopperStyleProperty(L, x), (d = this.onUpdate) == null || d.call(this, { x: L, y: x, placement: this.placement });
|
|
171
|
+
}), p(this, "removeWindowEvents", () => {
|
|
172
172
|
this.isWindowEventsRegistered && (!this.disableOnResize && window.removeEventListener("resize", this.updatePosition), !this.disableOnScroll && window.removeEventListener("scroll", this.updatePosition), this.isWindowEventsRegistered = false);
|
|
173
|
-
}),
|
|
173
|
+
}), p(this, "attachWindowEvent", () => {
|
|
174
174
|
this.isWindowEventsRegistered && this.removeWindowEvents(), this.disableOnResize || window.addEventListener("resize", this.updatePosition), this.disableOnScroll || window.addEventListener("scroll", this.updatePosition), this.isWindowEventsRegistered = true;
|
|
175
|
-
}),
|
|
175
|
+
}), p(this, "resetPosition", () => {
|
|
176
176
|
this.setInitialStyles();
|
|
177
|
-
}),
|
|
177
|
+
}), p(this, "updatePosition", () => {
|
|
178
178
|
this.initPlacement(), this.attachWindowEvent();
|
|
179
|
-
}),
|
|
179
|
+
}), p(this, "cleanupEvents", () => {
|
|
180
180
|
this.setInitialStyles(), this.removeWindowEvents();
|
|
181
181
|
});
|
|
182
182
|
const {
|
|
183
|
-
offsetDistance:
|
|
183
|
+
offsetDistance: r = 10,
|
|
184
184
|
placement: s = V,
|
|
185
|
-
eventEffect:
|
|
185
|
+
eventEffect: o = {},
|
|
186
186
|
onUpdate: l
|
|
187
|
-
} =
|
|
187
|
+
} = n;
|
|
188
188
|
if (!(e instanceof HTMLElement))
|
|
189
189
|
throw new Error("Invalid HTMLElement for Reference Element");
|
|
190
190
|
if (!(t instanceof HTMLElement))
|
|
191
191
|
throw new Error("Invalid HTMLElement for Popper");
|
|
192
|
-
if (
|
|
192
|
+
if (n.offsetDistance && typeof n.offsetDistance != "number")
|
|
193
193
|
throw new Error("OffsetDistance must be a number");
|
|
194
|
-
const { disableOnResize: m, disableOnScroll: c } =
|
|
195
|
-
this.isWindowEventsRegistered = false, this.reference = e, this.popper = t, this.offsetDistance =
|
|
194
|
+
const { disableOnResize: m, disableOnScroll: c } = o;
|
|
195
|
+
this.isWindowEventsRegistered = false, this.reference = e, this.popper = t, this.offsetDistance = r, this.placement = s, this.disableOnResize = m || false, this.disableOnScroll = c || false, this.onUpdate = l;
|
|
196
196
|
}
|
|
197
197
|
/**
|
|
198
198
|
* Updates popper configuration and recalculates position
|
|
@@ -205,50 +205,50 @@ var se = class {
|
|
|
205
205
|
this.placement = e, this.offsetDistance = t || this.offsetDistance, this.initPlacement(), this.attachWindowEvent();
|
|
206
206
|
}
|
|
207
207
|
};
|
|
208
|
-
var
|
|
209
|
-
var
|
|
210
|
-
var h = (
|
|
211
|
-
var ae = (
|
|
212
|
-
var N = (
|
|
213
|
-
for (const [t,
|
|
214
|
-
|
|
208
|
+
var re = Object.defineProperty;
|
|
209
|
+
var oe = (i, e, t) => e in i ? re(i, e, { enumerable: true, configurable: true, writable: true, value: t }) : i[e] = t;
|
|
210
|
+
var h = (i, e, t) => oe(i, typeof e != "symbol" ? e + "" : e, t);
|
|
211
|
+
var ae = (i, e = document.body) => e.querySelector(i);
|
|
212
|
+
var N = (i, e) => {
|
|
213
|
+
for (const [t, n] of Object.entries(e))
|
|
214
|
+
i.setAttribute(t, n);
|
|
215
215
|
};
|
|
216
216
|
var le = ({
|
|
217
|
-
element:
|
|
217
|
+
element: i,
|
|
218
218
|
callback: e,
|
|
219
219
|
type: t,
|
|
220
|
-
keysCheck:
|
|
220
|
+
keysCheck: n
|
|
221
221
|
}) => {
|
|
222
|
-
const
|
|
223
|
-
if (s !== "none" && s !== "" && !
|
|
224
|
-
const
|
|
225
|
-
|
|
222
|
+
const r = getComputedStyle(i), s = r.transition;
|
|
223
|
+
if (s !== "none" && s !== "" && !n.includes(s)) {
|
|
224
|
+
const o = "transitionend", l = () => {
|
|
225
|
+
i.removeEventListener(o, l), e();
|
|
226
226
|
};
|
|
227
|
-
|
|
227
|
+
i.addEventListener(o, l, { once: true });
|
|
228
228
|
} else
|
|
229
229
|
e();
|
|
230
230
|
};
|
|
231
231
|
var he = ({
|
|
232
|
-
element:
|
|
232
|
+
element: i,
|
|
233
233
|
callback: e
|
|
234
234
|
}) => {
|
|
235
235
|
le({
|
|
236
|
-
element:
|
|
236
|
+
element: i,
|
|
237
237
|
callback: e,
|
|
238
238
|
type: "transition",
|
|
239
239
|
keysCheck: ["all 0s ease 0s", "all"]
|
|
240
240
|
});
|
|
241
241
|
};
|
|
242
|
-
var
|
|
243
|
-
const
|
|
244
|
-
|
|
242
|
+
var de = (i, e, t) => {
|
|
243
|
+
const n = new CustomEvent(e, { detail: t });
|
|
244
|
+
i.dispatchEvent(n);
|
|
245
245
|
};
|
|
246
|
-
var y = ({ state:
|
|
247
|
-
const
|
|
246
|
+
var y = ({ state: i, trigger: e, popper: t }) => {
|
|
247
|
+
const n = i === "open";
|
|
248
248
|
N(t, {
|
|
249
|
-
"data-state":
|
|
249
|
+
"data-state": i
|
|
250
250
|
}), N(e, {
|
|
251
|
-
"aria-expanded": `${
|
|
251
|
+
"aria-expanded": `${n}`
|
|
252
252
|
});
|
|
253
253
|
};
|
|
254
254
|
var ce = class {
|
|
@@ -259,7 +259,7 @@ var ce = class {
|
|
|
259
259
|
* @param {string | HTMLElement} params.content - The content element selector or HTMLElement
|
|
260
260
|
* @param {OverlayOptions} [params.options] - Configuration options for the overlay
|
|
261
261
|
*/
|
|
262
|
-
constructor({ trigger: e, content: t, options:
|
|
262
|
+
constructor({ trigger: e, content: t, options: n = {} }) {
|
|
263
263
|
h(this, "triggerElement"), h(this, "contentElement"), h(this, "triggerStrategy"), h(this, "placement"), h(this, "offsetDistance"), h(this, "preventFromCloseOutside"), h(this, "preventFromCloseInside"), h(this, "options"), h(this, "defaultState"), h(this, "popper"), h(this, "eventEffect"), h(this, "getElement", (s) => typeof s == "string" ? ae(s) : s instanceof HTMLElement ? s : void 0), h(this, "handleDocumentClick", (s) => {
|
|
264
264
|
this.contentElement.getAttribute("data-state") === "open" && (!this.triggerElement.contains(s.target) && !this.preventFromCloseInside && !this.preventFromCloseOutside ? this.hide() : !this.triggerElement.contains(s.target) && !this.contentElement.contains(s.target) && !this.preventFromCloseOutside ? this.hide() : !this.triggerElement.contains(s.target) && !this.contentElement.contains(s.target) && !this.preventFromCloseOutside ? this.hide() : !this.triggerElement.contains(s.target) && this.contentElement.contains(s.target) && !this.preventFromCloseInside && this.hide());
|
|
265
265
|
}), h(this, "handleKeyDown", (s) => {
|
|
@@ -278,35 +278,35 @@ var ce = class {
|
|
|
278
278
|
this.triggerElement.addEventListener("mouseleave", this.hideOnMouseLeaseTrigger), this.contentElement.addEventListener("mouseleave", this.hideOnMouseLeave);
|
|
279
279
|
}), h(this, "showOnMouseEnter", () => {
|
|
280
280
|
this.show(), this.addEventOnMouseEnter();
|
|
281
|
-
}), h(this, "setShowOptions", ({ placement: s, offsetDistance:
|
|
282
|
-
var l, m, c,
|
|
281
|
+
}), h(this, "setShowOptions", ({ placement: s, offsetDistance: o }) => {
|
|
282
|
+
var l, m, c, d;
|
|
283
283
|
this.popper.setOptions({
|
|
284
284
|
placement: s,
|
|
285
|
-
offsetDistance:
|
|
285
|
+
offsetDistance: o
|
|
286
286
|
}), document.addEventListener("keydown", this.handleKeyDown), document.addEventListener("click", this.handleDocumentClick), (m = (l = this.options).beforeShow) == null || m.call(l), y({
|
|
287
287
|
state: "open",
|
|
288
288
|
popper: this.contentElement,
|
|
289
289
|
trigger: this.triggerElement
|
|
290
|
-
}), this.onToggleState(false), (
|
|
291
|
-
}), h(this, "setPopperOptions", ({ placement: s, offsetDistance:
|
|
290
|
+
}), this.onToggleState(false), (d = (c = this.options).onShow) == null || d.call(c);
|
|
291
|
+
}), h(this, "setPopperOptions", ({ placement: s, offsetDistance: o }) => {
|
|
292
292
|
this.popper.setOptions({
|
|
293
293
|
placement: s,
|
|
294
|
-
offsetDistance:
|
|
294
|
+
offsetDistance: o || this.offsetDistance
|
|
295
295
|
});
|
|
296
|
-
}), h(this, "setPopperTrigger", (s,
|
|
296
|
+
}), h(this, "setPopperTrigger", (s, o) => {
|
|
297
297
|
this.cleanup(), this.popper.setOptions({
|
|
298
|
-
placement:
|
|
299
|
-
offsetDistance:
|
|
298
|
+
placement: o.placement || this.placement,
|
|
299
|
+
offsetDistance: o.offsetDistance || this.offsetDistance
|
|
300
300
|
}), this.triggerElement = s, this.triggerElement.addEventListener("click", this.toggleStateOnClick), this.triggerStrategy === "hover" && this.triggerElement.addEventListener("mouseenter", this.showOnMouseEnter);
|
|
301
301
|
}), h(this, "cleanup", () => {
|
|
302
302
|
this.triggerElement.removeEventListener("click", this.toggleStateOnClick), this.triggerStrategy === "hover" && this.triggerElement.removeEventListener("mouseenter", this.showOnMouseEnter);
|
|
303
303
|
});
|
|
304
|
-
var
|
|
304
|
+
var r;
|
|
305
305
|
if (this.contentElement = this.getElement(t), this.triggerElement = this.getElement(e), !(this.triggerElement instanceof HTMLElement))
|
|
306
306
|
throw new Error("Trigger element must be a valid HTML element");
|
|
307
307
|
if (!(this.contentElement instanceof HTMLElement))
|
|
308
308
|
throw new Error("Content element must be a valid HTML element");
|
|
309
|
-
this.options =
|
|
309
|
+
this.options = n, this.triggerStrategy = this.options.triggerStrategy || "click", this.placement = this.options.placement || "bottom", this.offsetDistance = this.options.offsetDistance || 6, this.preventFromCloseOutside = this.options.preventFromCloseOutside || false, this.preventFromCloseInside = this.options.preventCloseFromInside || false, this.defaultState = this.options.defaultState || "close", this.eventEffect = (r = this.options.popper) == null ? void 0 : r.eventEffect, this.popper = new se(
|
|
310
310
|
this.triggerElement,
|
|
311
311
|
this.contentElement,
|
|
312
312
|
{
|
|
@@ -317,43 +317,43 @@ var ce = class {
|
|
|
317
317
|
), this.initInstance();
|
|
318
318
|
}
|
|
319
319
|
onToggleState(e) {
|
|
320
|
-
var t,
|
|
321
|
-
(
|
|
320
|
+
var t, n;
|
|
321
|
+
(n = (t = this.options).onToggle) == null || n.call(t, { isHidden: e });
|
|
322
322
|
}
|
|
323
323
|
/**
|
|
324
324
|
* Shows the overlay
|
|
325
325
|
* Positions the overlay, adds event listeners, and triggers related callbacks
|
|
326
326
|
*/
|
|
327
327
|
show() {
|
|
328
|
-
var e, t,
|
|
328
|
+
var e, t, n, r;
|
|
329
329
|
this.popper.updatePosition(), document.addEventListener("keydown", this.handleKeyDown), document.addEventListener("click", this.handleDocumentClick), (t = (e = this.options).beforeShow) == null || t.call(e), y({
|
|
330
330
|
state: "open",
|
|
331
331
|
popper: this.contentElement,
|
|
332
332
|
trigger: this.triggerElement
|
|
333
|
-
}), this.onToggleState(false), (
|
|
333
|
+
}), this.onToggleState(false), (r = (n = this.options).onShow) == null || r.call(n);
|
|
334
334
|
}
|
|
335
335
|
/**
|
|
336
336
|
* Hides the overlay
|
|
337
337
|
* Removes event listeners and triggers related callbacks
|
|
338
338
|
*/
|
|
339
339
|
hide() {
|
|
340
|
-
var e, t,
|
|
341
|
-
let
|
|
342
|
-
|
|
343
|
-
setExitAction: (
|
|
344
|
-
|
|
340
|
+
var e, t, n;
|
|
341
|
+
let r = false;
|
|
342
|
+
de(this.contentElement, "before-hide", {
|
|
343
|
+
setExitAction: (o) => {
|
|
344
|
+
r = o;
|
|
345
345
|
}
|
|
346
346
|
});
|
|
347
|
-
const s = (
|
|
348
|
-
|
|
347
|
+
const s = (n = (t = (e = this.options).beforeHide) == null ? void 0 : t.call(e)) == null ? void 0 : n.cancelAction;
|
|
348
|
+
r || s || (y({
|
|
349
349
|
state: "close",
|
|
350
350
|
popper: this.contentElement,
|
|
351
351
|
trigger: this.triggerElement
|
|
352
352
|
}), this.triggerStrategy === "click" && document.removeEventListener("click", this.handleDocumentClick), document.removeEventListener("keydown", this.handleKeyDown), this.triggerStrategy === "hover" && (this.triggerElement.removeEventListener("mouseleave", this.hideOnMouseLeaseTrigger), this.contentElement.removeEventListener("mouseleave", this.hideOnMouseLeave)), he({
|
|
353
353
|
element: this.contentElement,
|
|
354
354
|
callback: () => {
|
|
355
|
-
var
|
|
356
|
-
this.onToggleState(true), this.popper.cleanupEvents(), (l = (
|
|
355
|
+
var o, l;
|
|
356
|
+
this.onToggleState(true), this.popper.cleanupEvents(), (l = (o = this.options).onHide) == null || l.call(o);
|
|
357
357
|
}
|
|
358
358
|
}));
|
|
359
359
|
}
|
|
@@ -369,111 +369,125 @@ var ce = class {
|
|
|
369
369
|
}), this.triggerElement.addEventListener("click", this.toggleStateOnClick), this.triggerStrategy === "hover" && this.triggerElement.addEventListener("mouseenter", this.showOnMouseEnter);
|
|
370
370
|
}
|
|
371
371
|
};
|
|
372
|
-
var
|
|
373
|
-
var
|
|
374
|
-
var
|
|
375
|
-
var me = ({ containerElement:
|
|
376
|
-
let
|
|
377
|
-
const
|
|
378
|
-
if (l.preventDefault(),
|
|
372
|
+
var F = (i, e = document.body) => e.querySelector(i);
|
|
373
|
+
var S = (i, e = document.body) => Array.from(e.querySelectorAll(i));
|
|
374
|
+
var pe = (i) => typeof i == "string" ? F(i) : i;
|
|
375
|
+
var me = ({ containerElement: i, targetChildren: e = "a:not([disabled]), button:not([disabled])", direction: t }) => {
|
|
376
|
+
let n = false;
|
|
377
|
+
const r = pe(i) || document.body, s = typeof e == "string" ? S(e, r) : e, o = (l) => {
|
|
378
|
+
if (l.preventDefault(), r.focus(), s.length === 0)
|
|
379
379
|
return;
|
|
380
380
|
const m = l.key, c = document.activeElement;
|
|
381
|
-
let
|
|
382
|
-
if (
|
|
381
|
+
let d = s.findIndex((g) => g === c);
|
|
382
|
+
if (d === -1) {
|
|
383
383
|
m === "ArrowUp" || m === "ArrowLeft" ? s[s.length - 1].focus() : s[0].focus();
|
|
384
384
|
return;
|
|
385
385
|
}
|
|
386
|
-
const
|
|
386
|
+
const f = (g) => g > 0 ? g - 1 : s.length - 1, E = (g) => g < s.length - 1 ? g + 1 : 0;
|
|
387
387
|
switch (m) {
|
|
388
388
|
case "ArrowDown":
|
|
389
|
-
l.preventDefault(),
|
|
389
|
+
l.preventDefault(), d = E(d);
|
|
390
390
|
break;
|
|
391
391
|
case "ArrowRight":
|
|
392
392
|
break;
|
|
393
393
|
case "ArrowUp":
|
|
394
|
-
l.preventDefault(),
|
|
394
|
+
l.preventDefault(), d = f(d);
|
|
395
395
|
break;
|
|
396
396
|
case "ArrowLeft":
|
|
397
397
|
break;
|
|
398
398
|
case "Home":
|
|
399
|
-
l.preventDefault(),
|
|
399
|
+
l.preventDefault(), d = 0;
|
|
400
400
|
break;
|
|
401
401
|
case "End":
|
|
402
|
-
l.preventDefault(),
|
|
402
|
+
l.preventDefault(), d = s.length - 1;
|
|
403
403
|
break;
|
|
404
404
|
default:
|
|
405
405
|
return;
|
|
406
406
|
}
|
|
407
|
-
s[
|
|
407
|
+
s[d] !== c && s[d].focus();
|
|
408
408
|
};
|
|
409
409
|
return {
|
|
410
410
|
make: () => {
|
|
411
|
-
|
|
411
|
+
n || (document.addEventListener("keydown", o), n = true);
|
|
412
412
|
},
|
|
413
413
|
destroy: () => {
|
|
414
|
-
|
|
414
|
+
n && (document.removeEventListener("keydown", o), n = false);
|
|
415
415
|
}
|
|
416
416
|
};
|
|
417
417
|
};
|
|
418
|
-
var
|
|
419
|
-
const
|
|
420
|
-
|
|
418
|
+
var z = (i, e, t) => {
|
|
419
|
+
const n = new CustomEvent(e, { detail: t });
|
|
420
|
+
i.dispatchEvent(n);
|
|
421
421
|
};
|
|
422
|
-
function
|
|
423
|
-
|
|
422
|
+
function ge(i) {
|
|
423
|
+
const e = () => {
|
|
424
|
+
document.querySelector(
|
|
425
|
+
"[data-fx-component]:not([data-component-initialized])"
|
|
426
|
+
) ? requestAnimationFrame(e) : i();
|
|
427
|
+
};
|
|
428
|
+
e();
|
|
429
|
+
}
|
|
430
|
+
function fe(i, e, t = "move") {
|
|
431
|
+
if (!(i instanceof HTMLElement))
|
|
424
432
|
throw new Error("Source element must be an HTMLElement");
|
|
425
433
|
if (!(e instanceof HTMLElement))
|
|
426
434
|
throw new Error("Target element must be an HTMLElement");
|
|
427
435
|
if (!["move", "detachable"].includes(t))
|
|
428
436
|
throw new Error(`Invalid teleport mode: ${t}. Must be "move" or "detachable".`);
|
|
429
|
-
let
|
|
430
|
-
const
|
|
431
|
-
return
|
|
437
|
+
let n = document.createComment("teleporter-placeholder");
|
|
438
|
+
const r = i.parentNode;
|
|
439
|
+
return r ? r.insertBefore(n, i) : console.warn("Element has no parent; placeholder not inserted."), t === "move" ? (i.parentNode && e.appendChild(i), {
|
|
432
440
|
append() {
|
|
433
|
-
|
|
441
|
+
i.parentNode !== e && e.appendChild(i);
|
|
434
442
|
},
|
|
435
443
|
remove() {
|
|
436
|
-
|
|
444
|
+
n != null && n.parentNode && i.parentNode && n.parentNode.insertBefore(i, n);
|
|
437
445
|
},
|
|
438
446
|
restore() {
|
|
439
|
-
|
|
447
|
+
n != null && n.parentNode && i.parentNode !== r && n.parentNode.insertBefore(i, n);
|
|
440
448
|
}
|
|
441
|
-
}) : (
|
|
449
|
+
}) : (i.parentNode && e.appendChild(i), {
|
|
442
450
|
append() {
|
|
443
|
-
e.contains(
|
|
451
|
+
e.contains(i) || e.appendChild(i);
|
|
444
452
|
},
|
|
445
453
|
remove() {
|
|
446
|
-
|
|
454
|
+
i.parentNode && i.remove();
|
|
447
455
|
},
|
|
448
456
|
restore() {
|
|
449
|
-
|
|
457
|
+
n != null && n.parentNode && !i.parentNode && n.parentNode.insertBefore(i, n);
|
|
450
458
|
}
|
|
451
459
|
});
|
|
452
460
|
}
|
|
453
|
-
var
|
|
461
|
+
var O = class {
|
|
454
462
|
static initGlobalRegistry() {
|
|
455
463
|
window.$flexillaInstances || (window.$flexillaInstances = {});
|
|
456
464
|
}
|
|
457
|
-
static register(e, t,
|
|
458
|
-
return this.initGlobalRegistry(), window.$flexillaInstances[e] || (window.$flexillaInstances[e] = []), this.getInstance(e, t) || (window.$flexillaInstances[e].push({ element: t, instance:
|
|
465
|
+
static register(e, t, n) {
|
|
466
|
+
return this.initGlobalRegistry(), window.$flexillaInstances[e] || (window.$flexillaInstances[e] = []), this.getInstance(e, t) || (window.$flexillaInstances[e].push({ element: t, instance: n }), n);
|
|
459
467
|
}
|
|
460
468
|
static getInstance(e, t) {
|
|
461
|
-
var
|
|
462
|
-
return this.initGlobalRegistry(), (
|
|
469
|
+
var n, r;
|
|
470
|
+
return this.initGlobalRegistry(), (r = (n = window.$flexillaInstances[e]) == null ? void 0 : n.find(
|
|
463
471
|
(s) => s.element === t
|
|
464
|
-
)) == null ? void 0 :
|
|
472
|
+
)) == null ? void 0 : r.instance;
|
|
465
473
|
}
|
|
466
474
|
static removeInstance(e, t) {
|
|
467
475
|
this.initGlobalRegistry(), window.$flexillaInstances[e] && (window.$flexillaInstances[e] = window.$flexillaInstances[e].filter(
|
|
468
|
-
(
|
|
476
|
+
(n) => n.element !== t
|
|
469
477
|
));
|
|
470
478
|
}
|
|
479
|
+
static setup(e) {
|
|
480
|
+
e.setAttribute("data-fx-component", "fx");
|
|
481
|
+
}
|
|
482
|
+
static initialized(e) {
|
|
483
|
+
e.setAttribute("data-component-initialized", "initialized");
|
|
484
|
+
}
|
|
471
485
|
};
|
|
472
|
-
var
|
|
486
|
+
var ue = {
|
|
473
487
|
teleport: true,
|
|
474
488
|
teleportMode: "move"
|
|
475
489
|
};
|
|
476
|
-
var
|
|
490
|
+
var k = class k2 {
|
|
477
491
|
/**
|
|
478
492
|
* Creates a new Dropdown instance
|
|
479
493
|
* @param dropdown - The dropdown content element or selector
|
|
@@ -488,6 +502,7 @@ var O = class O2 {
|
|
|
488
502
|
a(this, "OverlayInstance");
|
|
489
503
|
a(this, "navigationKeys");
|
|
490
504
|
a(this, "keyObserver");
|
|
505
|
+
a(this, "subtriggerObserver");
|
|
491
506
|
a(this, "triggerStrategy");
|
|
492
507
|
a(this, "placement");
|
|
493
508
|
a(this, "offsetDistance");
|
|
@@ -496,23 +511,40 @@ var O = class O2 {
|
|
|
496
511
|
a(this, "defaultState");
|
|
497
512
|
a(this, "experimentalOptions");
|
|
498
513
|
a(this, "teleporter");
|
|
499
|
-
a(this, "
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
for (const
|
|
505
|
-
e2.
|
|
514
|
+
a(this, "updateSubtriggerAttr", (e2, t2) => {
|
|
515
|
+
t2 === "add" ? (e2.setAttribute("data-current-subtrigger", ""), e2.setAttribute("data-focus", "active")) : (e2.removeAttribute("data-current-subtrigger"), e2.removeAttribute("data-focus"));
|
|
516
|
+
});
|
|
517
|
+
a(this, "updateObserverFor", (e2) => {
|
|
518
|
+
const t2 = S("[data-dropdown-trigger]", this.contentElement);
|
|
519
|
+
for (const n2 of t2)
|
|
520
|
+
e2.observe(n2, {
|
|
506
521
|
attributes: true,
|
|
507
522
|
attributeFilter: ["aria-expanded"]
|
|
508
523
|
});
|
|
509
524
|
});
|
|
525
|
+
a(this, "observeEl", () => {
|
|
526
|
+
this.keyObserver = new MutationObserver((e2) => {
|
|
527
|
+
for (const t2 of e2)
|
|
528
|
+
t2.type === "attributes" && t2.attributeName === "aria-expanded" && (t2.target.getAttribute("aria-expanded") === "true" ? this.navigationKeys.destroy() : this.contentElement.dataset.state === "open" && this.navigationKeys.make());
|
|
529
|
+
}), this.updateObserverFor(this.keyObserver);
|
|
530
|
+
});
|
|
531
|
+
a(this, "observeSubtriggers", () => {
|
|
532
|
+
this.subtriggerObserver = new MutationObserver((e2) => {
|
|
533
|
+
for (const t2 of e2)
|
|
534
|
+
if (t2.type === "attributes" && t2.attributeName === "aria-expanded") {
|
|
535
|
+
const n2 = t2.target, r2 = n2.getAttribute("aria-expanded");
|
|
536
|
+
this.updateSubtriggerAttr(n2, r2 === "true" ? "add" : "remove");
|
|
537
|
+
}
|
|
538
|
+
}), this.updateObserverFor(this.subtriggerObserver);
|
|
539
|
+
});
|
|
510
540
|
a(this, "onToggle", ({ isHidden: e2 }) => {
|
|
511
|
-
var t2,
|
|
512
|
-
(
|
|
541
|
+
var t2, n2;
|
|
542
|
+
(n2 = (t2 = this.options).onToggle) == null || n2.call(t2, { isHidden: e2 });
|
|
513
543
|
});
|
|
514
544
|
a(this, "moveElOnInit", () => {
|
|
515
|
-
this.experimentalOptions.teleport && (
|
|
545
|
+
this.experimentalOptions.teleport && ge(() => {
|
|
546
|
+
this.experimentalOptions.teleportMode === "detachable" ? this.teleporter.remove() : this.teleporter.append();
|
|
547
|
+
});
|
|
516
548
|
});
|
|
517
549
|
a(this, "moveEl", () => {
|
|
518
550
|
this.experimentalOptions.teleport && this.experimentalOptions.teleportMode === "detachable" && this.teleporter.remove();
|
|
@@ -521,29 +553,54 @@ var O = class O2 {
|
|
|
521
553
|
this.experimentalOptions.teleport && this.experimentalOptions.teleportMode === "detachable" && this.teleporter.append();
|
|
522
554
|
});
|
|
523
555
|
a(this, "beforeShow", () => {
|
|
524
|
-
this.restoreEl(), this.contentElement.focus(), this.navigationKeys.make();
|
|
556
|
+
this.restoreEl(), this.contentElement.focus(), this.navigationKeys.make(), this.addArrowEvent();
|
|
525
557
|
});
|
|
526
558
|
a(this, "beforeHide", () => {
|
|
527
|
-
this.contentElement.blur(), this.navigationKeys.destroy();
|
|
559
|
+
this.contentElement.blur(), this.navigationKeys.destroy(), this.removeArrowEvent();
|
|
560
|
+
});
|
|
561
|
+
a(this, "showHideOnArrow", (e2) => {
|
|
562
|
+
e2.preventDefault();
|
|
563
|
+
const t2 = e2.key, n2 = document.activeElement;
|
|
564
|
+
if (n2 != null && n2.hasAttribute("data-dropdown-trigger"))
|
|
565
|
+
switch (t2) {
|
|
566
|
+
case "ArrowRight":
|
|
567
|
+
n2.getAttribute("aria-expanded") !== "true" && (n2.click(), this.updateSubtriggerAttr(n2, "add"));
|
|
568
|
+
break;
|
|
569
|
+
case "ArrowLeft":
|
|
570
|
+
n2.getAttribute("aria-expanded") === "true" && (n2.click(), this.updateSubtriggerAttr(n2, "remove"));
|
|
571
|
+
break;
|
|
572
|
+
default:
|
|
573
|
+
return;
|
|
574
|
+
}
|
|
575
|
+
if (this.triggerElement.hasAttribute("data-current-subtrigger"))
|
|
576
|
+
switch (t2) {
|
|
577
|
+
case "ArrowLeft":
|
|
578
|
+
this.triggerElement.click(), this.triggerElement.focus(), this.updateSubtriggerAttr(this.triggerElement, "remove");
|
|
579
|
+
break;
|
|
580
|
+
default:
|
|
581
|
+
return;
|
|
582
|
+
}
|
|
583
|
+
});
|
|
584
|
+
a(this, "addArrowEvent", () => {
|
|
585
|
+
document.addEventListener("keydown", this.showHideOnArrow);
|
|
586
|
+
});
|
|
587
|
+
a(this, "removeArrowEvent", () => {
|
|
588
|
+
document.removeEventListener("keydown", this.showHideOnArrow);
|
|
528
589
|
});
|
|
529
590
|
a(this, "onShow", () => {
|
|
530
591
|
var e2, t2;
|
|
531
|
-
|
|
592
|
+
z(this.contentElement, "dropdown-show", {
|
|
532
593
|
isHidden: false
|
|
533
|
-
}), (t2 = (e2 = this.options).onShow) == null || t2.call(e2);
|
|
594
|
+
}), (t2 = (e2 = this.options).onShow) == null || t2.call(e2), this.observeEl(), this.observeSubtriggers();
|
|
534
595
|
});
|
|
535
596
|
a(this, "onHide", () => {
|
|
536
597
|
var e2, t2;
|
|
537
|
-
|
|
598
|
+
z(this.contentElement, "dropdown-hide", {
|
|
538
599
|
isHidden: true
|
|
539
|
-
}), (t2 = (e2 = this.options).onHide) == null || t2.call(e2), this.moveEl();
|
|
540
|
-
});
|
|
541
|
-
a(this, "show", () => {
|
|
542
|
-
this.OverlayInstance.show();
|
|
543
|
-
});
|
|
544
|
-
a(this, "hide", () => {
|
|
545
|
-
this.OverlayInstance.hide();
|
|
600
|
+
}), (t2 = (e2 = this.options).onHide) == null || t2.call(e2), this.moveEl(), this.triggerElement.hasAttribute("data-current-subtrigger") && this.updateSubtriggerAttr(this.triggerElement, "remove"), this.disconnectObserver();
|
|
546
601
|
});
|
|
602
|
+
a(this, "show", () => this.OverlayInstance.show());
|
|
603
|
+
a(this, "hide", () => this.OverlayInstance.hide());
|
|
547
604
|
a(this, "setShowOptions", ({ placement: e2, offsetDistance: t2 }) => {
|
|
548
605
|
this.OverlayInstance.setShowOptions({ placement: e2, offsetDistance: t2 });
|
|
549
606
|
});
|
|
@@ -554,26 +611,27 @@ var O = class O2 {
|
|
|
554
611
|
this.OverlayInstance.setPopperTrigger(e2, t2);
|
|
555
612
|
});
|
|
556
613
|
a(this, "disconnectObserver", () => {
|
|
557
|
-
this.keyObserver && this.keyObserver.disconnect();
|
|
614
|
+
this.keyObserver && this.keyObserver.disconnect(), this.subtriggerObserver && this.subtriggerObserver.disconnect();
|
|
558
615
|
});
|
|
559
616
|
a(this, "cleanup", () => {
|
|
560
|
-
this.disconnectObserver(), this.OverlayInstance.cleanup(),
|
|
617
|
+
this.disconnectObserver(), this.OverlayInstance.cleanup(), O.removeInstance("dropdown", this.contentElement);
|
|
561
618
|
});
|
|
562
|
-
const
|
|
563
|
-
if (!(
|
|
619
|
+
const n = typeof e == "string" ? F(e) : e;
|
|
620
|
+
if (!(n instanceof HTMLElement))
|
|
564
621
|
throw new Error(
|
|
565
622
|
"Invalid dropdown content element: Must provide either a valid HTMLElement or a selector string that resolves to an existing HTMLElement"
|
|
566
623
|
);
|
|
567
|
-
if (!
|
|
624
|
+
if (!n.id)
|
|
568
625
|
throw new Error("Dropdown content element must have an 'id' attribute for trigger association");
|
|
569
|
-
this.contentElement =
|
|
570
|
-
const
|
|
571
|
-
if (
|
|
572
|
-
return
|
|
626
|
+
this.contentElement = n;
|
|
627
|
+
const r = O.getInstance("dropdown", this.contentElement);
|
|
628
|
+
if (r)
|
|
629
|
+
return r;
|
|
630
|
+
O.setup(this.contentElement);
|
|
573
631
|
const s = `[data-dropdown-trigger][data-dropdown-id=${this.contentElement.id}]`;
|
|
574
|
-
if (this.triggerElement =
|
|
632
|
+
if (this.triggerElement = F(s), !(this.triggerElement instanceof HTMLElement))
|
|
575
633
|
throw new Error(`No valid trigger element found. Ensure a trigger element exists with attributes: data-dropdown-trigger and data-dropdown-id="${this.contentElement.id}"`);
|
|
576
|
-
this.options = t, this.triggerStrategy = this.
|
|
634
|
+
this.options = t, this.triggerStrategy = this.contentElement.dataset.triggerStrategy || this.options.triggerStrategy || "click", this.placement = this.contentElement.dataset.placement || this.options.placement || "bottom-start", this.offsetDistance = parseInt(`${this.contentElement.dataset.offsetDistance}`) || this.options.offsetDistance || 6, this.preventFromCloseOutside = this.contentElement.hasAttribute("data-prevent-close-outside") || this.options.preventFromCloseOutside || false, this.preventFromCloseInside = this.contentElement.hasAttribute("data-prevent-close-inside") || this.options.preventCloseFromInside || false, this.defaultState = this.contentElement.dataset.defaultState || this.options.defaultState || "close", this.experimentalOptions = Object.assign({}, ue, t.experimental), this.teleporter = fe(this.contentElement, document.body, this.experimentalOptions.teleportMode), this.OverlayInstance = new ce({
|
|
577
635
|
trigger: this.triggerElement,
|
|
578
636
|
content: this.contentElement,
|
|
579
637
|
options: {
|
|
@@ -584,19 +642,23 @@ var O = class O2 {
|
|
|
584
642
|
preventCloseFromInside: this.preventFromCloseInside,
|
|
585
643
|
defaultState: this.defaultState,
|
|
586
644
|
beforeShow: this.beforeShow,
|
|
587
|
-
beforeHide:
|
|
645
|
+
beforeHide: () => {
|
|
646
|
+
if (S("[data-dropdown-trigger][aria-expanded=true]", this.contentElement).length >= 1)
|
|
647
|
+
return { cancelAction: true };
|
|
648
|
+
this.beforeHide();
|
|
649
|
+
},
|
|
588
650
|
onShow: this.onShow,
|
|
589
651
|
onHide: this.onHide,
|
|
590
|
-
onToggle: ({ isHidden:
|
|
591
|
-
this.onToggle({ isHidden:
|
|
652
|
+
onToggle: ({ isHidden: o }) => {
|
|
653
|
+
this.onToggle({ isHidden: o });
|
|
592
654
|
},
|
|
593
655
|
popper: this.options.popper
|
|
594
656
|
}
|
|
595
|
-
}), this.moveElOnInit(), this.items =
|
|
657
|
+
}), this.moveElOnInit(), this.items = S("a:not([disabled]), button:not([disabled])", this.contentElement), this.navigationKeys = me({
|
|
596
658
|
containerElement: this.contentElement,
|
|
597
659
|
targetChildren: this.items,
|
|
598
660
|
direction: "up-down"
|
|
599
|
-
}),
|
|
661
|
+
}), O.register("dropdown", this.contentElement, this), O.initialized(this.contentElement);
|
|
600
662
|
}
|
|
601
663
|
/**
|
|
602
664
|
* Initializes a single dropdown instance
|
|
@@ -605,20 +667,20 @@ var O = class O2 {
|
|
|
605
667
|
* @returns A new Dropdown instance
|
|
606
668
|
*/
|
|
607
669
|
static init(e, t = {}) {
|
|
608
|
-
new
|
|
670
|
+
new k2(e, t);
|
|
609
671
|
}
|
|
610
672
|
};
|
|
611
|
-
a(
|
|
612
|
-
const t =
|
|
613
|
-
for (const
|
|
614
|
-
new
|
|
673
|
+
a(k, "autoInit", (e = "[data-fx-dropdown]") => {
|
|
674
|
+
const t = S(e);
|
|
675
|
+
for (const n of t)
|
|
676
|
+
new k(n);
|
|
615
677
|
});
|
|
616
|
-
var
|
|
678
|
+
var K = k;
|
|
617
679
|
|
|
618
680
|
// src/index.js
|
|
619
681
|
function Dropdown(Alpine) {
|
|
620
682
|
Alpine.directive("dropdown", (el, {}, { cleanup }) => {
|
|
621
|
-
const dropdown_ = new
|
|
683
|
+
const dropdown_ = new K(el);
|
|
622
684
|
cleanup(() => {
|
|
623
685
|
dropdown_.cleanup();
|
|
624
686
|
});
|