@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/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 = (
|
|
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
30
|
var G = Object.defineProperty;
|
|
31
|
-
var q = (
|
|
32
|
-
var
|
|
31
|
+
var q = (i, e, t) => e in i ? G(i, e, { enumerable: true, configurable: true, writable: true, value: t }) : i[e] = t;
|
|
32
|
+
var p = (i, e, t) => q(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,68 +45,68 @@ 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
|
-
),
|
|
87
|
+
), 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();
|
|
88
88
|
let u = 0, v = 0;
|
|
89
|
-
const C = t -
|
|
90
|
-
switch (
|
|
89
|
+
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;
|
|
90
|
+
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) {
|
|
91
91
|
case "bottom":
|
|
92
92
|
case "bottom-middle":
|
|
93
93
|
case "top":
|
|
94
94
|
case "top-middle":
|
|
95
|
-
u =
|
|
95
|
+
u = H();
|
|
96
96
|
break;
|
|
97
97
|
case "left":
|
|
98
98
|
case "left-middle":
|
|
99
99
|
case "right":
|
|
100
100
|
case "right-middle":
|
|
101
|
-
v =
|
|
101
|
+
v = M();
|
|
102
102
|
break;
|
|
103
103
|
case "bottom-start":
|
|
104
104
|
case "top-start":
|
|
105
|
-
u =
|
|
105
|
+
u = A();
|
|
106
106
|
break;
|
|
107
107
|
case "bottom-end":
|
|
108
108
|
case "top-end":
|
|
109
|
-
u =
|
|
109
|
+
u = k();
|
|
110
110
|
break;
|
|
111
111
|
case "left-start":
|
|
112
112
|
case "right-start":
|
|
@@ -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: H, refLeft: M, refTop: A } = X({ reference: this.reference, popper: this.popper }), { x: k, y: L } = ie(
|
|
157
157
|
{
|
|
158
158
|
placement: this.placement,
|
|
159
|
-
refWidth:
|
|
160
|
-
refTop:
|
|
161
|
-
refLeft:
|
|
159
|
+
refWidth: H,
|
|
160
|
+
refTop: A,
|
|
161
|
+
refLeft: M,
|
|
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(k, L), (d = this.onUpdate) == null || d.call(this, { x: k, y: L, 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,84 +369,84 @@ 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 P = (
|
|
373
|
-
var
|
|
374
|
-
var
|
|
375
|
-
var me = ({ containerElement:
|
|
376
|
-
let
|
|
377
|
-
const
|
|
378
|
-
if (l.preventDefault(),
|
|
372
|
+
var P = (i, e = document.body) => e.querySelector(i);
|
|
373
|
+
var O = (i, e = document.body) => Array.from(e.querySelectorAll(i));
|
|
374
|
+
var pe = (i) => typeof i == "string" ? P(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" ? O(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 K = (
|
|
419
|
-
const
|
|
420
|
-
|
|
418
|
+
var K = (i, e, t) => {
|
|
419
|
+
const n = new CustomEvent(e, { detail: t });
|
|
420
|
+
i.dispatchEvent(n);
|
|
421
421
|
};
|
|
422
|
-
function
|
|
423
|
-
if (!(
|
|
422
|
+
function ge(i, e, t = "move") {
|
|
423
|
+
if (!(i instanceof HTMLElement))
|
|
424
424
|
throw new Error("Source element must be an HTMLElement");
|
|
425
425
|
if (!(e instanceof HTMLElement))
|
|
426
426
|
throw new Error("Target element must be an HTMLElement");
|
|
427
427
|
if (!["move", "detachable"].includes(t))
|
|
428
428
|
throw new Error(`Invalid teleport mode: ${t}. Must be "move" or "detachable".`);
|
|
429
|
-
let
|
|
430
|
-
const
|
|
431
|
-
return
|
|
429
|
+
let n = document.createComment("teleporter-placeholder");
|
|
430
|
+
const r = i.parentNode;
|
|
431
|
+
return r ? r.insertBefore(n, i) : console.warn("Element has no parent; placeholder not inserted."), t === "move" ? (i.parentNode && e.appendChild(i), {
|
|
432
432
|
append() {
|
|
433
|
-
|
|
433
|
+
i.parentNode !== e && e.appendChild(i);
|
|
434
434
|
},
|
|
435
435
|
remove() {
|
|
436
|
-
|
|
436
|
+
n != null && n.parentNode && i.parentNode && n.parentNode.insertBefore(i, n);
|
|
437
437
|
},
|
|
438
438
|
restore() {
|
|
439
|
-
|
|
439
|
+
n != null && n.parentNode && i.parentNode !== r && n.parentNode.insertBefore(i, n);
|
|
440
440
|
}
|
|
441
|
-
}) : (
|
|
441
|
+
}) : (i.parentNode && e.appendChild(i), {
|
|
442
442
|
append() {
|
|
443
|
-
e.contains(
|
|
443
|
+
e.contains(i) || e.appendChild(i);
|
|
444
444
|
},
|
|
445
445
|
remove() {
|
|
446
|
-
|
|
446
|
+
i.parentNode && i.remove();
|
|
447
447
|
},
|
|
448
448
|
restore() {
|
|
449
|
-
|
|
449
|
+
n != null && n.parentNode && !i.parentNode && n.parentNode.insertBefore(i, n);
|
|
450
450
|
}
|
|
451
451
|
});
|
|
452
452
|
}
|
|
@@ -454,26 +454,26 @@ var T = class {
|
|
|
454
454
|
static initGlobalRegistry() {
|
|
455
455
|
window.$flexillaInstances || (window.$flexillaInstances = {});
|
|
456
456
|
}
|
|
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:
|
|
457
|
+
static register(e, t, n) {
|
|
458
|
+
return this.initGlobalRegistry(), window.$flexillaInstances[e] || (window.$flexillaInstances[e] = []), this.getInstance(e, t) || (window.$flexillaInstances[e].push({ element: t, instance: n }), n);
|
|
459
459
|
}
|
|
460
460
|
static getInstance(e, t) {
|
|
461
|
-
var
|
|
462
|
-
return this.initGlobalRegistry(), (
|
|
461
|
+
var n, r;
|
|
462
|
+
return this.initGlobalRegistry(), (r = (n = window.$flexillaInstances[e]) == null ? void 0 : n.find(
|
|
463
463
|
(s) => s.element === t
|
|
464
|
-
)) == null ? void 0 :
|
|
464
|
+
)) == null ? void 0 : r.instance;
|
|
465
465
|
}
|
|
466
466
|
static removeInstance(e, t) {
|
|
467
467
|
this.initGlobalRegistry(), window.$flexillaInstances[e] && (window.$flexillaInstances[e] = window.$flexillaInstances[e].filter(
|
|
468
|
-
(
|
|
468
|
+
(n) => n.element !== t
|
|
469
469
|
));
|
|
470
470
|
}
|
|
471
471
|
};
|
|
472
|
-
var
|
|
472
|
+
var fe = {
|
|
473
473
|
teleport: true,
|
|
474
474
|
teleportMode: "move"
|
|
475
475
|
};
|
|
476
|
-
var
|
|
476
|
+
var S = class S2 {
|
|
477
477
|
/**
|
|
478
478
|
* Creates a new Dropdown instance
|
|
479
479
|
* @param dropdown - The dropdown content element or selector
|
|
@@ -488,6 +488,7 @@ var O = class O2 {
|
|
|
488
488
|
a(this, "OverlayInstance");
|
|
489
489
|
a(this, "navigationKeys");
|
|
490
490
|
a(this, "keyObserver");
|
|
491
|
+
a(this, "subtriggerObserver");
|
|
491
492
|
a(this, "triggerStrategy");
|
|
492
493
|
a(this, "placement");
|
|
493
494
|
a(this, "offsetDistance");
|
|
@@ -496,20 +497,35 @@ var O = class O2 {
|
|
|
496
497
|
a(this, "defaultState");
|
|
497
498
|
a(this, "experimentalOptions");
|
|
498
499
|
a(this, "teleporter");
|
|
499
|
-
a(this, "
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
for (const
|
|
505
|
-
e2.
|
|
500
|
+
a(this, "updateSubtriggerAttr", (e2, t2) => {
|
|
501
|
+
t2 === "add" ? (e2.setAttribute("data-current-subtrigger", ""), e2.setAttribute("data-focus", "active")) : (e2.removeAttribute("data-current-subtrigger"), e2.removeAttribute("data-focus"));
|
|
502
|
+
});
|
|
503
|
+
a(this, "updateObserverFor", (e2) => {
|
|
504
|
+
const t2 = O("[data-dropdown-trigger]", this.contentElement);
|
|
505
|
+
for (const n2 of t2)
|
|
506
|
+
e2.observe(n2, {
|
|
506
507
|
attributes: true,
|
|
507
508
|
attributeFilter: ["aria-expanded"]
|
|
508
509
|
});
|
|
509
510
|
});
|
|
511
|
+
a(this, "observeEl", () => {
|
|
512
|
+
this.keyObserver = new MutationObserver((e2) => {
|
|
513
|
+
for (const t2 of e2)
|
|
514
|
+
t2.type === "attributes" && t2.attributeName === "aria-expanded" && (t2.target.getAttribute("aria-expanded") === "true" ? this.navigationKeys.destroy() : this.contentElement.dataset.state === "open" && this.navigationKeys.make());
|
|
515
|
+
}), this.updateObserverFor(this.keyObserver);
|
|
516
|
+
});
|
|
517
|
+
a(this, "observeSubtriggers", () => {
|
|
518
|
+
this.subtriggerObserver = new MutationObserver((e2) => {
|
|
519
|
+
for (const t2 of e2)
|
|
520
|
+
if (t2.type === "attributes" && t2.attributeName === "aria-expanded") {
|
|
521
|
+
const n2 = t2.target, r2 = n2.getAttribute("aria-expanded");
|
|
522
|
+
this.updateSubtriggerAttr(n2, r2 === "true" ? "add" : "remove");
|
|
523
|
+
}
|
|
524
|
+
}), this.updateObserverFor(this.subtriggerObserver);
|
|
525
|
+
});
|
|
510
526
|
a(this, "onToggle", ({ isHidden: e2 }) => {
|
|
511
|
-
var t2,
|
|
512
|
-
(
|
|
527
|
+
var t2, n2;
|
|
528
|
+
(n2 = (t2 = this.options).onToggle) == null || n2.call(t2, { isHidden: e2 });
|
|
513
529
|
});
|
|
514
530
|
a(this, "moveElOnInit", () => {
|
|
515
531
|
this.experimentalOptions.teleport && (this.experimentalOptions.teleportMode === "detachable" ? this.teleporter.remove() : this.teleporter.append());
|
|
@@ -521,29 +537,54 @@ var O = class O2 {
|
|
|
521
537
|
this.experimentalOptions.teleport && this.experimentalOptions.teleportMode === "detachable" && this.teleporter.append();
|
|
522
538
|
});
|
|
523
539
|
a(this, "beforeShow", () => {
|
|
524
|
-
this.restoreEl(), this.contentElement.focus(), this.navigationKeys.make();
|
|
540
|
+
this.restoreEl(), this.contentElement.focus(), this.navigationKeys.make(), this.addArrowEvent();
|
|
525
541
|
});
|
|
526
542
|
a(this, "beforeHide", () => {
|
|
527
|
-
this.contentElement.blur(), this.navigationKeys.destroy();
|
|
543
|
+
this.contentElement.blur(), this.navigationKeys.destroy(), this.removeArrowEvent();
|
|
544
|
+
});
|
|
545
|
+
a(this, "showHideOnArrow", (e2) => {
|
|
546
|
+
e2.preventDefault();
|
|
547
|
+
const t2 = e2.key, n2 = document.activeElement;
|
|
548
|
+
if (n2 != null && n2.hasAttribute("data-dropdown-trigger"))
|
|
549
|
+
switch (t2) {
|
|
550
|
+
case "ArrowRight":
|
|
551
|
+
n2.getAttribute("aria-expanded") !== "true" && (n2.click(), this.updateSubtriggerAttr(n2, "add"));
|
|
552
|
+
break;
|
|
553
|
+
case "ArrowLeft":
|
|
554
|
+
n2.getAttribute("aria-expanded") === "true" && (n2.click(), this.updateSubtriggerAttr(n2, "remove"));
|
|
555
|
+
break;
|
|
556
|
+
default:
|
|
557
|
+
return;
|
|
558
|
+
}
|
|
559
|
+
if (this.triggerElement.hasAttribute("data-current-subtrigger"))
|
|
560
|
+
switch (t2) {
|
|
561
|
+
case "ArrowLeft":
|
|
562
|
+
this.triggerElement.click(), this.triggerElement.focus(), this.updateSubtriggerAttr(this.triggerElement, "remove");
|
|
563
|
+
break;
|
|
564
|
+
default:
|
|
565
|
+
return;
|
|
566
|
+
}
|
|
567
|
+
});
|
|
568
|
+
a(this, "addArrowEvent", () => {
|
|
569
|
+
document.addEventListener("keydown", this.showHideOnArrow);
|
|
570
|
+
});
|
|
571
|
+
a(this, "removeArrowEvent", () => {
|
|
572
|
+
document.removeEventListener("keydown", this.showHideOnArrow);
|
|
528
573
|
});
|
|
529
574
|
a(this, "onShow", () => {
|
|
530
575
|
var e2, t2;
|
|
531
576
|
K(this.contentElement, "dropdown-show", {
|
|
532
577
|
isHidden: false
|
|
533
|
-
}), (t2 = (e2 = this.options).onShow) == null || t2.call(e2);
|
|
578
|
+
}), (t2 = (e2 = this.options).onShow) == null || t2.call(e2), this.observeEl(), this.observeSubtriggers();
|
|
534
579
|
});
|
|
535
580
|
a(this, "onHide", () => {
|
|
536
581
|
var e2, t2;
|
|
537
582
|
K(this.contentElement, "dropdown-hide", {
|
|
538
583
|
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();
|
|
584
|
+
}), (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
585
|
});
|
|
586
|
+
a(this, "show", () => this.OverlayInstance.show());
|
|
587
|
+
a(this, "hide", () => this.OverlayInstance.hide());
|
|
547
588
|
a(this, "setShowOptions", ({ placement: e2, offsetDistance: t2 }) => {
|
|
548
589
|
this.OverlayInstance.setShowOptions({ placement: e2, offsetDistance: t2 });
|
|
549
590
|
});
|
|
@@ -554,26 +595,26 @@ var O = class O2 {
|
|
|
554
595
|
this.OverlayInstance.setPopperTrigger(e2, t2);
|
|
555
596
|
});
|
|
556
597
|
a(this, "disconnectObserver", () => {
|
|
557
|
-
this.keyObserver && this.keyObserver.disconnect();
|
|
598
|
+
this.keyObserver && this.keyObserver.disconnect(), this.subtriggerObserver && this.subtriggerObserver.disconnect();
|
|
558
599
|
});
|
|
559
600
|
a(this, "cleanup", () => {
|
|
560
601
|
this.disconnectObserver(), this.OverlayInstance.cleanup(), T.removeInstance("dropdown", this.contentElement);
|
|
561
602
|
});
|
|
562
|
-
const
|
|
563
|
-
if (!(
|
|
603
|
+
const n = typeof e == "string" ? P(e) : e;
|
|
604
|
+
if (!(n instanceof HTMLElement))
|
|
564
605
|
throw new Error(
|
|
565
606
|
"Invalid dropdown content element: Must provide either a valid HTMLElement or a selector string that resolves to an existing HTMLElement"
|
|
566
607
|
);
|
|
567
|
-
if (!
|
|
608
|
+
if (!n.id)
|
|
568
609
|
throw new Error("Dropdown content element must have an 'id' attribute for trigger association");
|
|
569
|
-
this.contentElement =
|
|
570
|
-
const
|
|
571
|
-
if (
|
|
572
|
-
return
|
|
610
|
+
this.contentElement = n;
|
|
611
|
+
const r = T.getInstance("dropdown", this.contentElement);
|
|
612
|
+
if (r)
|
|
613
|
+
return r;
|
|
573
614
|
const s = `[data-dropdown-trigger][data-dropdown-id=${this.contentElement.id}]`;
|
|
574
615
|
if (this.triggerElement = P(s), !(this.triggerElement instanceof HTMLElement))
|
|
575
616
|
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.
|
|
617
|
+
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({
|
|
577
618
|
trigger: this.triggerElement,
|
|
578
619
|
content: this.contentElement,
|
|
579
620
|
options: {
|
|
@@ -584,19 +625,23 @@ var O = class O2 {
|
|
|
584
625
|
preventCloseFromInside: this.preventFromCloseInside,
|
|
585
626
|
defaultState: this.defaultState,
|
|
586
627
|
beforeShow: this.beforeShow,
|
|
587
|
-
beforeHide:
|
|
628
|
+
beforeHide: () => {
|
|
629
|
+
if (O("[data-dropdown-trigger][aria-expanded=true]", this.contentElement).length >= 1)
|
|
630
|
+
return { cancelAction: true };
|
|
631
|
+
this.beforeHide();
|
|
632
|
+
},
|
|
588
633
|
onShow: this.onShow,
|
|
589
634
|
onHide: this.onHide,
|
|
590
|
-
onToggle: ({ isHidden:
|
|
591
|
-
this.onToggle({ isHidden:
|
|
635
|
+
onToggle: ({ isHidden: o }) => {
|
|
636
|
+
this.onToggle({ isHidden: o });
|
|
592
637
|
},
|
|
593
638
|
popper: this.options.popper
|
|
594
639
|
}
|
|
595
|
-
}), this.moveElOnInit(), this.items =
|
|
640
|
+
}), this.moveElOnInit(), this.items = O("a:not([disabled]), button:not([disabled])", this.contentElement), this.navigationKeys = me({
|
|
596
641
|
containerElement: this.contentElement,
|
|
597
642
|
targetChildren: this.items,
|
|
598
643
|
direction: "up-down"
|
|
599
|
-
}),
|
|
644
|
+
}), T.register("dropdown", this.contentElement, this);
|
|
600
645
|
}
|
|
601
646
|
/**
|
|
602
647
|
* Initializes a single dropdown instance
|
|
@@ -605,15 +650,15 @@ var O = class O2 {
|
|
|
605
650
|
* @returns A new Dropdown instance
|
|
606
651
|
*/
|
|
607
652
|
static init(e, t = {}) {
|
|
608
|
-
new
|
|
653
|
+
new S2(e, t);
|
|
609
654
|
}
|
|
610
655
|
};
|
|
611
|
-
a(
|
|
612
|
-
const t =
|
|
613
|
-
for (const
|
|
614
|
-
new
|
|
656
|
+
a(S, "autoInit", (e = "[data-fx-dropdown]") => {
|
|
657
|
+
const t = O(e);
|
|
658
|
+
for (const n of t)
|
|
659
|
+
new S(n);
|
|
615
660
|
});
|
|
616
|
-
var z =
|
|
661
|
+
var z = S;
|
|
617
662
|
|
|
618
663
|
// src/index.js
|
|
619
664
|
function Dropdown(Alpine) {
|