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