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