@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.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 = (
|
|
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
5
|
var G = Object.defineProperty;
|
|
6
|
-
var q = (
|
|
7
|
-
var
|
|
6
|
+
var q = (i, e, t) => e in i ? G(i, e, { enumerable: true, configurable: true, writable: true, value: t }) : i[e] = t;
|
|
7
|
+
var p = (i, e, t) => q(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,68 +20,68 @@ 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
|
-
),
|
|
62
|
+
), 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();
|
|
63
63
|
let u = 0, v = 0;
|
|
64
|
-
const C = t -
|
|
65
|
-
switch (
|
|
64
|
+
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;
|
|
65
|
+
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) {
|
|
66
66
|
case "bottom":
|
|
67
67
|
case "bottom-middle":
|
|
68
68
|
case "top":
|
|
69
69
|
case "top-middle":
|
|
70
|
-
u =
|
|
70
|
+
u = H();
|
|
71
71
|
break;
|
|
72
72
|
case "left":
|
|
73
73
|
case "left-middle":
|
|
74
74
|
case "right":
|
|
75
75
|
case "right-middle":
|
|
76
|
-
v =
|
|
76
|
+
v = M();
|
|
77
77
|
break;
|
|
78
78
|
case "bottom-start":
|
|
79
79
|
case "top-start":
|
|
80
|
-
u =
|
|
80
|
+
u = A();
|
|
81
81
|
break;
|
|
82
82
|
case "bottom-end":
|
|
83
83
|
case "top-end":
|
|
84
|
-
u =
|
|
84
|
+
u = k();
|
|
85
85
|
break;
|
|
86
86
|
case "left-start":
|
|
87
87
|
case "right-start":
|
|
@@ -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: H, refLeft: M, refTop: A } = X({ reference: this.reference, popper: this.popper }), { x: k, y: L } = ie(
|
|
132
132
|
{
|
|
133
133
|
placement: this.placement,
|
|
134
|
-
refWidth:
|
|
135
|
-
refTop:
|
|
136
|
-
refLeft:
|
|
134
|
+
refWidth: H,
|
|
135
|
+
refTop: A,
|
|
136
|
+
refLeft: M,
|
|
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(k, L), (d = this.onUpdate) == null || d.call(this, { x: k, y: L, 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,84 +344,84 @@ 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 P = (
|
|
348
|
-
var
|
|
349
|
-
var
|
|
350
|
-
var me = ({ containerElement:
|
|
351
|
-
let
|
|
352
|
-
const
|
|
353
|
-
if (l.preventDefault(),
|
|
347
|
+
var P = (i, e = document.body) => e.querySelector(i);
|
|
348
|
+
var O = (i, e = document.body) => Array.from(e.querySelectorAll(i));
|
|
349
|
+
var pe = (i) => typeof i == "string" ? P(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" ? O(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 K = (
|
|
394
|
-
const
|
|
395
|
-
|
|
393
|
+
var K = (i, e, t) => {
|
|
394
|
+
const n = new CustomEvent(e, { detail: t });
|
|
395
|
+
i.dispatchEvent(n);
|
|
396
396
|
};
|
|
397
|
-
function
|
|
398
|
-
if (!(
|
|
397
|
+
function ge(i, e, t = "move") {
|
|
398
|
+
if (!(i instanceof HTMLElement))
|
|
399
399
|
throw new Error("Source element must be an HTMLElement");
|
|
400
400
|
if (!(e instanceof HTMLElement))
|
|
401
401
|
throw new Error("Target element must be an HTMLElement");
|
|
402
402
|
if (!["move", "detachable"].includes(t))
|
|
403
403
|
throw new Error(`Invalid teleport mode: ${t}. Must be "move" or "detachable".`);
|
|
404
|
-
let
|
|
405
|
-
const
|
|
406
|
-
return
|
|
404
|
+
let n = document.createComment("teleporter-placeholder");
|
|
405
|
+
const r = i.parentNode;
|
|
406
|
+
return r ? r.insertBefore(n, i) : console.warn("Element has no parent; placeholder not inserted."), t === "move" ? (i.parentNode && e.appendChild(i), {
|
|
407
407
|
append() {
|
|
408
|
-
|
|
408
|
+
i.parentNode !== e && e.appendChild(i);
|
|
409
409
|
},
|
|
410
410
|
remove() {
|
|
411
|
-
|
|
411
|
+
n != null && n.parentNode && i.parentNode && n.parentNode.insertBefore(i, n);
|
|
412
412
|
},
|
|
413
413
|
restore() {
|
|
414
|
-
|
|
414
|
+
n != null && n.parentNode && i.parentNode !== r && n.parentNode.insertBefore(i, n);
|
|
415
415
|
}
|
|
416
|
-
}) : (
|
|
416
|
+
}) : (i.parentNode && e.appendChild(i), {
|
|
417
417
|
append() {
|
|
418
|
-
e.contains(
|
|
418
|
+
e.contains(i) || e.appendChild(i);
|
|
419
419
|
},
|
|
420
420
|
remove() {
|
|
421
|
-
|
|
421
|
+
i.parentNode && i.remove();
|
|
422
422
|
},
|
|
423
423
|
restore() {
|
|
424
|
-
|
|
424
|
+
n != null && n.parentNode && !i.parentNode && n.parentNode.insertBefore(i, n);
|
|
425
425
|
}
|
|
426
426
|
});
|
|
427
427
|
}
|
|
@@ -429,26 +429,26 @@ var T = class {
|
|
|
429
429
|
static initGlobalRegistry() {
|
|
430
430
|
window.$flexillaInstances || (window.$flexillaInstances = {});
|
|
431
431
|
}
|
|
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:
|
|
432
|
+
static register(e, t, n) {
|
|
433
|
+
return this.initGlobalRegistry(), window.$flexillaInstances[e] || (window.$flexillaInstances[e] = []), this.getInstance(e, t) || (window.$flexillaInstances[e].push({ element: t, instance: n }), n);
|
|
434
434
|
}
|
|
435
435
|
static getInstance(e, t) {
|
|
436
|
-
var
|
|
437
|
-
return this.initGlobalRegistry(), (
|
|
436
|
+
var n, r;
|
|
437
|
+
return this.initGlobalRegistry(), (r = (n = window.$flexillaInstances[e]) == null ? void 0 : n.find(
|
|
438
438
|
(s) => s.element === t
|
|
439
|
-
)) == null ? void 0 :
|
|
439
|
+
)) == null ? void 0 : r.instance;
|
|
440
440
|
}
|
|
441
441
|
static removeInstance(e, t) {
|
|
442
442
|
this.initGlobalRegistry(), window.$flexillaInstances[e] && (window.$flexillaInstances[e] = window.$flexillaInstances[e].filter(
|
|
443
|
-
(
|
|
443
|
+
(n) => n.element !== t
|
|
444
444
|
));
|
|
445
445
|
}
|
|
446
446
|
};
|
|
447
|
-
var
|
|
447
|
+
var fe = {
|
|
448
448
|
teleport: true,
|
|
449
449
|
teleportMode: "move"
|
|
450
450
|
};
|
|
451
|
-
var
|
|
451
|
+
var S = class S2 {
|
|
452
452
|
/**
|
|
453
453
|
* Creates a new Dropdown instance
|
|
454
454
|
* @param dropdown - The dropdown content element or selector
|
|
@@ -463,6 +463,7 @@ var O = class O2 {
|
|
|
463
463
|
a(this, "OverlayInstance");
|
|
464
464
|
a(this, "navigationKeys");
|
|
465
465
|
a(this, "keyObserver");
|
|
466
|
+
a(this, "subtriggerObserver");
|
|
466
467
|
a(this, "triggerStrategy");
|
|
467
468
|
a(this, "placement");
|
|
468
469
|
a(this, "offsetDistance");
|
|
@@ -471,20 +472,35 @@ var O = class O2 {
|
|
|
471
472
|
a(this, "defaultState");
|
|
472
473
|
a(this, "experimentalOptions");
|
|
473
474
|
a(this, "teleporter");
|
|
474
|
-
a(this, "
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
for (const
|
|
480
|
-
e2.
|
|
475
|
+
a(this, "updateSubtriggerAttr", (e2, t2) => {
|
|
476
|
+
t2 === "add" ? (e2.setAttribute("data-current-subtrigger", ""), e2.setAttribute("data-focus", "active")) : (e2.removeAttribute("data-current-subtrigger"), e2.removeAttribute("data-focus"));
|
|
477
|
+
});
|
|
478
|
+
a(this, "updateObserverFor", (e2) => {
|
|
479
|
+
const t2 = O("[data-dropdown-trigger]", this.contentElement);
|
|
480
|
+
for (const n2 of t2)
|
|
481
|
+
e2.observe(n2, {
|
|
481
482
|
attributes: true,
|
|
482
483
|
attributeFilter: ["aria-expanded"]
|
|
483
484
|
});
|
|
484
485
|
});
|
|
486
|
+
a(this, "observeEl", () => {
|
|
487
|
+
this.keyObserver = new MutationObserver((e2) => {
|
|
488
|
+
for (const t2 of e2)
|
|
489
|
+
t2.type === "attributes" && t2.attributeName === "aria-expanded" && (t2.target.getAttribute("aria-expanded") === "true" ? this.navigationKeys.destroy() : this.contentElement.dataset.state === "open" && this.navigationKeys.make());
|
|
490
|
+
}), this.updateObserverFor(this.keyObserver);
|
|
491
|
+
});
|
|
492
|
+
a(this, "observeSubtriggers", () => {
|
|
493
|
+
this.subtriggerObserver = new MutationObserver((e2) => {
|
|
494
|
+
for (const t2 of e2)
|
|
495
|
+
if (t2.type === "attributes" && t2.attributeName === "aria-expanded") {
|
|
496
|
+
const n2 = t2.target, r2 = n2.getAttribute("aria-expanded");
|
|
497
|
+
this.updateSubtriggerAttr(n2, r2 === "true" ? "add" : "remove");
|
|
498
|
+
}
|
|
499
|
+
}), this.updateObserverFor(this.subtriggerObserver);
|
|
500
|
+
});
|
|
485
501
|
a(this, "onToggle", ({ isHidden: e2 }) => {
|
|
486
|
-
var t2,
|
|
487
|
-
(
|
|
502
|
+
var t2, n2;
|
|
503
|
+
(n2 = (t2 = this.options).onToggle) == null || n2.call(t2, { isHidden: e2 });
|
|
488
504
|
});
|
|
489
505
|
a(this, "moveElOnInit", () => {
|
|
490
506
|
this.experimentalOptions.teleport && (this.experimentalOptions.teleportMode === "detachable" ? this.teleporter.remove() : this.teleporter.append());
|
|
@@ -496,29 +512,54 @@ var O = class O2 {
|
|
|
496
512
|
this.experimentalOptions.teleport && this.experimentalOptions.teleportMode === "detachable" && this.teleporter.append();
|
|
497
513
|
});
|
|
498
514
|
a(this, "beforeShow", () => {
|
|
499
|
-
this.restoreEl(), this.contentElement.focus(), this.navigationKeys.make();
|
|
515
|
+
this.restoreEl(), this.contentElement.focus(), this.navigationKeys.make(), this.addArrowEvent();
|
|
500
516
|
});
|
|
501
517
|
a(this, "beforeHide", () => {
|
|
502
|
-
this.contentElement.blur(), this.navigationKeys.destroy();
|
|
518
|
+
this.contentElement.blur(), this.navigationKeys.destroy(), this.removeArrowEvent();
|
|
519
|
+
});
|
|
520
|
+
a(this, "showHideOnArrow", (e2) => {
|
|
521
|
+
e2.preventDefault();
|
|
522
|
+
const t2 = e2.key, n2 = document.activeElement;
|
|
523
|
+
if (n2 != null && n2.hasAttribute("data-dropdown-trigger"))
|
|
524
|
+
switch (t2) {
|
|
525
|
+
case "ArrowRight":
|
|
526
|
+
n2.getAttribute("aria-expanded") !== "true" && (n2.click(), this.updateSubtriggerAttr(n2, "add"));
|
|
527
|
+
break;
|
|
528
|
+
case "ArrowLeft":
|
|
529
|
+
n2.getAttribute("aria-expanded") === "true" && (n2.click(), this.updateSubtriggerAttr(n2, "remove"));
|
|
530
|
+
break;
|
|
531
|
+
default:
|
|
532
|
+
return;
|
|
533
|
+
}
|
|
534
|
+
if (this.triggerElement.hasAttribute("data-current-subtrigger"))
|
|
535
|
+
switch (t2) {
|
|
536
|
+
case "ArrowLeft":
|
|
537
|
+
this.triggerElement.click(), this.triggerElement.focus(), this.updateSubtriggerAttr(this.triggerElement, "remove");
|
|
538
|
+
break;
|
|
539
|
+
default:
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
542
|
+
});
|
|
543
|
+
a(this, "addArrowEvent", () => {
|
|
544
|
+
document.addEventListener("keydown", this.showHideOnArrow);
|
|
545
|
+
});
|
|
546
|
+
a(this, "removeArrowEvent", () => {
|
|
547
|
+
document.removeEventListener("keydown", this.showHideOnArrow);
|
|
503
548
|
});
|
|
504
549
|
a(this, "onShow", () => {
|
|
505
550
|
var e2, t2;
|
|
506
551
|
K(this.contentElement, "dropdown-show", {
|
|
507
552
|
isHidden: false
|
|
508
|
-
}), (t2 = (e2 = this.options).onShow) == null || t2.call(e2);
|
|
553
|
+
}), (t2 = (e2 = this.options).onShow) == null || t2.call(e2), this.observeEl(), this.observeSubtriggers();
|
|
509
554
|
});
|
|
510
555
|
a(this, "onHide", () => {
|
|
511
556
|
var e2, t2;
|
|
512
557
|
K(this.contentElement, "dropdown-hide", {
|
|
513
558
|
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();
|
|
559
|
+
}), (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
560
|
});
|
|
561
|
+
a(this, "show", () => this.OverlayInstance.show());
|
|
562
|
+
a(this, "hide", () => this.OverlayInstance.hide());
|
|
522
563
|
a(this, "setShowOptions", ({ placement: e2, offsetDistance: t2 }) => {
|
|
523
564
|
this.OverlayInstance.setShowOptions({ placement: e2, offsetDistance: t2 });
|
|
524
565
|
});
|
|
@@ -529,26 +570,26 @@ var O = class O2 {
|
|
|
529
570
|
this.OverlayInstance.setPopperTrigger(e2, t2);
|
|
530
571
|
});
|
|
531
572
|
a(this, "disconnectObserver", () => {
|
|
532
|
-
this.keyObserver && this.keyObserver.disconnect();
|
|
573
|
+
this.keyObserver && this.keyObserver.disconnect(), this.subtriggerObserver && this.subtriggerObserver.disconnect();
|
|
533
574
|
});
|
|
534
575
|
a(this, "cleanup", () => {
|
|
535
576
|
this.disconnectObserver(), this.OverlayInstance.cleanup(), T.removeInstance("dropdown", this.contentElement);
|
|
536
577
|
});
|
|
537
|
-
const
|
|
538
|
-
if (!(
|
|
578
|
+
const n = typeof e == "string" ? P(e) : e;
|
|
579
|
+
if (!(n instanceof HTMLElement))
|
|
539
580
|
throw new Error(
|
|
540
581
|
"Invalid dropdown content element: Must provide either a valid HTMLElement or a selector string that resolves to an existing HTMLElement"
|
|
541
582
|
);
|
|
542
|
-
if (!
|
|
583
|
+
if (!n.id)
|
|
543
584
|
throw new Error("Dropdown content element must have an 'id' attribute for trigger association");
|
|
544
|
-
this.contentElement =
|
|
545
|
-
const
|
|
546
|
-
if (
|
|
547
|
-
return
|
|
585
|
+
this.contentElement = n;
|
|
586
|
+
const r = T.getInstance("dropdown", this.contentElement);
|
|
587
|
+
if (r)
|
|
588
|
+
return r;
|
|
548
589
|
const s = `[data-dropdown-trigger][data-dropdown-id=${this.contentElement.id}]`;
|
|
549
590
|
if (this.triggerElement = P(s), !(this.triggerElement instanceof HTMLElement))
|
|
550
591
|
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.
|
|
592
|
+
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({
|
|
552
593
|
trigger: this.triggerElement,
|
|
553
594
|
content: this.contentElement,
|
|
554
595
|
options: {
|
|
@@ -559,19 +600,23 @@ var O = class O2 {
|
|
|
559
600
|
preventCloseFromInside: this.preventFromCloseInside,
|
|
560
601
|
defaultState: this.defaultState,
|
|
561
602
|
beforeShow: this.beforeShow,
|
|
562
|
-
beforeHide:
|
|
603
|
+
beforeHide: () => {
|
|
604
|
+
if (O("[data-dropdown-trigger][aria-expanded=true]", this.contentElement).length >= 1)
|
|
605
|
+
return { cancelAction: true };
|
|
606
|
+
this.beforeHide();
|
|
607
|
+
},
|
|
563
608
|
onShow: this.onShow,
|
|
564
609
|
onHide: this.onHide,
|
|
565
|
-
onToggle: ({ isHidden:
|
|
566
|
-
this.onToggle({ isHidden:
|
|
610
|
+
onToggle: ({ isHidden: o }) => {
|
|
611
|
+
this.onToggle({ isHidden: o });
|
|
567
612
|
},
|
|
568
613
|
popper: this.options.popper
|
|
569
614
|
}
|
|
570
|
-
}), this.moveElOnInit(), this.items =
|
|
615
|
+
}), this.moveElOnInit(), this.items = O("a:not([disabled]), button:not([disabled])", this.contentElement), this.navigationKeys = me({
|
|
571
616
|
containerElement: this.contentElement,
|
|
572
617
|
targetChildren: this.items,
|
|
573
618
|
direction: "up-down"
|
|
574
|
-
}),
|
|
619
|
+
}), T.register("dropdown", this.contentElement, this);
|
|
575
620
|
}
|
|
576
621
|
/**
|
|
577
622
|
* Initializes a single dropdown instance
|
|
@@ -580,15 +625,15 @@ var O = class O2 {
|
|
|
580
625
|
* @returns A new Dropdown instance
|
|
581
626
|
*/
|
|
582
627
|
static init(e, t = {}) {
|
|
583
|
-
new
|
|
628
|
+
new S2(e, t);
|
|
584
629
|
}
|
|
585
630
|
};
|
|
586
|
-
a(
|
|
587
|
-
const t =
|
|
588
|
-
for (const
|
|
589
|
-
new
|
|
631
|
+
a(S, "autoInit", (e = "[data-fx-dropdown]") => {
|
|
632
|
+
const t = O(e);
|
|
633
|
+
for (const n of t)
|
|
634
|
+
new S(n);
|
|
590
635
|
});
|
|
591
|
-
var z =
|
|
636
|
+
var z = S;
|
|
592
637
|
|
|
593
638
|
// src/index.js
|
|
594
639
|
function Dropdown(Alpine) {
|