@flexilla/alpine-dropdown 0.2.0 → 0.3.1
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 +177 -146
- package/dist/cdn.min.js +1 -1
- package/dist/module.cjs.js +177 -146
- package/dist/module.esm.js +177 -146
- package/package.json +3 -3
package/dist/module.esm.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
// ../../node_modules/@flexilla/dropdown/dist/dropdown.js
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
var a = (
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var p = (
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
if (!
|
|
2
|
+
var q = Object.defineProperty;
|
|
3
|
+
var G = (n, e, t) => e in n ? q(n, e, { enumerable: true, configurable: true, writable: true, value: t }) : n[e] = t;
|
|
4
|
+
var a = (n, e, t) => G(n, typeof e != "symbol" ? e + "" : e, t);
|
|
5
|
+
var V = Object.defineProperty;
|
|
6
|
+
var X = (n, e, t) => e in n ? V(n, e, { enumerable: true, configurable: true, writable: true, value: t }) : n[e] = t;
|
|
7
|
+
var p = (n, e, t) => X(n, typeof e != "symbol" ? e + "" : e, t);
|
|
8
|
+
var Y = "bottom";
|
|
9
|
+
var J = ({ reference: n, popper: e }) => {
|
|
10
|
+
if (!n || !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(), i = (o) => (t.has(o) || t.set(o, o.getBoundingClientRect()), t.get(o)), r = i(e), s = i(n);
|
|
13
13
|
return {
|
|
14
14
|
popperHeight: r.height,
|
|
15
15
|
popperWidth: r.width,
|
|
@@ -20,25 +20,25 @@ var X = ({ reference: i, popper: e }) => {
|
|
|
20
20
|
refRight: s.right
|
|
21
21
|
};
|
|
22
22
|
};
|
|
23
|
-
var
|
|
24
|
-
const r = t, s =
|
|
25
|
-
return r >= (
|
|
23
|
+
var Q = (n, e, t, i) => {
|
|
24
|
+
const r = t, s = i - (t + e);
|
|
25
|
+
return r >= (n - e) / 2 && s >= (n - e) / 2;
|
|
26
26
|
};
|
|
27
|
-
var
|
|
28
|
-
var
|
|
29
|
-
var
|
|
30
|
-
var
|
|
31
|
-
var
|
|
32
|
-
const o = r - t - s, l = t -
|
|
33
|
-
return
|
|
27
|
+
var Z = (n, e, t, i) => (n - e) / 2 <= t && t + n / 2 + e / 2 <= i;
|
|
28
|
+
var _ = (n, e, t, i, r) => t > r - i ? e() ? window.innerHeight - r : t - r : n() ? 0 : t + i;
|
|
29
|
+
var ee = (n, e, t, i) => n <= i && t - n <= e;
|
|
30
|
+
var te = (n, e, t, i) => t <= i && -n <= e;
|
|
31
|
+
var ne = (n, e, t, i, r, s) => {
|
|
32
|
+
const o = r - t - s, l = t - i, m = t + s - i + (r - t - s), c = o >= 0 ? r - i : l >= 0 ? t - i : t;
|
|
33
|
+
return n() ? 0 : e() ? m : c;
|
|
34
34
|
};
|
|
35
|
-
var
|
|
36
|
-
var
|
|
37
|
-
var
|
|
38
|
-
placement:
|
|
35
|
+
var ie = (n, e, t, i) => n <= t && e - n - i >= n;
|
|
36
|
+
var se = (n, e) => n >= e;
|
|
37
|
+
var re = ({
|
|
38
|
+
placement: n,
|
|
39
39
|
refWidth: e,
|
|
40
40
|
refTop: t,
|
|
41
|
-
refLeft:
|
|
41
|
+
refLeft: i,
|
|
42
42
|
refHeight: r,
|
|
43
43
|
popperWidth: s,
|
|
44
44
|
popperHeight: o,
|
|
@@ -46,23 +46,23 @@ var ie = ({
|
|
|
46
46
|
windowWidth: m,
|
|
47
47
|
offsetDistance: c
|
|
48
48
|
}) => {
|
|
49
|
-
const d = m -
|
|
50
|
-
() =>
|
|
51
|
-
() =>
|
|
49
|
+
const d = m - i - e, f = i, E = l - t - r, g = t, w = () => _(
|
|
50
|
+
() => te(t, r, o, l),
|
|
51
|
+
() => ee(t, r, o, l),
|
|
52
52
|
t,
|
|
53
53
|
r,
|
|
54
54
|
o
|
|
55
|
-
), b = () =>
|
|
56
|
-
() =>
|
|
57
|
-
() =>
|
|
58
|
-
|
|
55
|
+
), b = () => ne(
|
|
56
|
+
() => ie(i, m, s, e),
|
|
57
|
+
() => se(i, s),
|
|
58
|
+
i,
|
|
59
59
|
s,
|
|
60
60
|
m,
|
|
61
61
|
e
|
|
62
|
-
), H = () =>
|
|
62
|
+
), H = () => Q(s, e, i, m) ? i + e / 2 - s / 2 : b(), M = () => Z(o, r, t, l) ? t + r / 2 - o / 2 : w(), C = () => i + s <= m ? i : b(), L = () => i + e - s >= 0 ? i + e - s : b(), x = () => t + o <= l ? t : w(), j = () => t + r - o >= 0 ? t + r - o : w();
|
|
63
63
|
let u = 0, v = 0;
|
|
64
|
-
const
|
|
65
|
-
switch (
|
|
64
|
+
const T = t - o - c, A = t + r + c, I = i - s - c, D = i + e + c, W = g >= o + c, $ = E >= o + c, R = f >= s + c, N = d >= s + c;
|
|
65
|
+
switch (n.startsWith("top") ? v = W ? T : $ ? A : Math.max(T, A) : n.startsWith("bottom") ? v = $ ? A : W ? T : Math.max(A) : n.startsWith("left") ? u = R ? I : N ? D : Math.max(I, D) : n.startsWith("right") && (u = N ? D : R ? I : Math.max(D, I)), n) {
|
|
66
66
|
case "bottom":
|
|
67
67
|
case "bottom-middle":
|
|
68
68
|
case "top":
|
|
@@ -77,24 +77,24 @@ var ie = ({
|
|
|
77
77
|
break;
|
|
78
78
|
case "bottom-start":
|
|
79
79
|
case "top-start":
|
|
80
|
-
u =
|
|
80
|
+
u = C();
|
|
81
81
|
break;
|
|
82
82
|
case "bottom-end":
|
|
83
83
|
case "top-end":
|
|
84
|
-
u =
|
|
84
|
+
u = L();
|
|
85
85
|
break;
|
|
86
86
|
case "left-start":
|
|
87
87
|
case "right-start":
|
|
88
|
-
v =
|
|
88
|
+
v = x();
|
|
89
89
|
break;
|
|
90
90
|
case "left-end":
|
|
91
91
|
case "right-end":
|
|
92
|
-
v =
|
|
92
|
+
v = j();
|
|
93
93
|
break;
|
|
94
94
|
}
|
|
95
95
|
return { x: u, y: v };
|
|
96
96
|
};
|
|
97
|
-
var
|
|
97
|
+
var oe = class {
|
|
98
98
|
/**
|
|
99
99
|
* Flexilla Popper
|
|
100
100
|
* @param reference
|
|
@@ -113,7 +113,7 @@ 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,
|
|
116
|
+
constructor(e, t, i = {}) {
|
|
117
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");
|
|
@@ -128,11 +128,11 @@ var se = class {
|
|
|
128
128
|
}), p(this, "initPlacement", () => {
|
|
129
129
|
var d;
|
|
130
130
|
this.validateElements(), this.setInitialStyles();
|
|
131
|
-
const f = window.innerWidth, E = window.innerHeight, { popperHeight: g, popperWidth: w, refHeight: b, refWidth: H, refLeft: M, refTop:
|
|
131
|
+
const f = window.innerWidth, E = window.innerHeight, { popperHeight: g, popperWidth: w, refHeight: b, refWidth: H, refLeft: M, refTop: C } = J({ reference: this.reference, popper: this.popper }), { x: L, y: x } = re(
|
|
132
132
|
{
|
|
133
133
|
placement: this.placement,
|
|
134
134
|
refWidth: H,
|
|
135
|
-
refTop:
|
|
135
|
+
refTop: C,
|
|
136
136
|
refLeft: M,
|
|
137
137
|
popperWidth: w,
|
|
138
138
|
refHeight: b,
|
|
@@ -142,7 +142,7 @@ var se = class {
|
|
|
142
142
|
offsetDistance: this.offsetDistance
|
|
143
143
|
}
|
|
144
144
|
);
|
|
145
|
-
this.setPopperStyleProperty(
|
|
145
|
+
this.setPopperStyleProperty(L, x), (d = this.onUpdate) == null || d.call(this, { x: L, y: x, placement: this.placement });
|
|
146
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", () => {
|
|
@@ -156,15 +156,15 @@ var se = class {
|
|
|
156
156
|
});
|
|
157
157
|
const {
|
|
158
158
|
offsetDistance: r = 10,
|
|
159
|
-
placement: s =
|
|
159
|
+
placement: s = Y,
|
|
160
160
|
eventEffect: o = {},
|
|
161
161
|
onUpdate: l
|
|
162
|
-
} =
|
|
162
|
+
} = i;
|
|
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 (i.offsetDistance && typeof i.offsetDistance != "number")
|
|
168
168
|
throw new Error("OffsetDistance must be a number");
|
|
169
169
|
const { disableOnResize: m, disableOnScroll: c } = o;
|
|
170
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;
|
|
@@ -180,53 +180,53 @@ 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
|
|
187
|
-
var
|
|
188
|
-
for (const [t,
|
|
189
|
-
|
|
183
|
+
var ae = Object.defineProperty;
|
|
184
|
+
var le = (n, e, t) => e in n ? ae(n, e, { enumerable: true, configurable: true, writable: true, value: t }) : n[e] = t;
|
|
185
|
+
var h = (n, e, t) => le(n, typeof e != "symbol" ? e + "" : e, t);
|
|
186
|
+
var he = (n, e = document.body) => e.querySelector(n);
|
|
187
|
+
var z = (n, e) => {
|
|
188
|
+
for (const [t, i] of Object.entries(e))
|
|
189
|
+
n.setAttribute(t, i);
|
|
190
190
|
};
|
|
191
|
-
var
|
|
192
|
-
element:
|
|
191
|
+
var de = ({
|
|
192
|
+
element: n,
|
|
193
193
|
callback: e,
|
|
194
194
|
type: t,
|
|
195
|
-
keysCheck:
|
|
195
|
+
keysCheck: i
|
|
196
196
|
}) => {
|
|
197
|
-
const r = getComputedStyle(
|
|
198
|
-
if (s !== "none" && s !== "" && !
|
|
197
|
+
const r = getComputedStyle(n), s = r.transition;
|
|
198
|
+
if (s !== "none" && s !== "" && !i.includes(s)) {
|
|
199
199
|
const o = "transitionend", l = () => {
|
|
200
|
-
|
|
200
|
+
n.removeEventListener(o, l), e();
|
|
201
201
|
};
|
|
202
|
-
|
|
202
|
+
n.addEventListener(o, l, { once: true });
|
|
203
203
|
} else
|
|
204
204
|
e();
|
|
205
205
|
};
|
|
206
|
-
var
|
|
207
|
-
element:
|
|
206
|
+
var ce = ({
|
|
207
|
+
element: n,
|
|
208
208
|
callback: e
|
|
209
209
|
}) => {
|
|
210
|
-
|
|
211
|
-
element:
|
|
210
|
+
de({
|
|
211
|
+
element: n,
|
|
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 pe = (n, e, t) => {
|
|
218
|
+
const i = new CustomEvent(e, { detail: t });
|
|
219
|
+
n.dispatchEvent(i);
|
|
220
220
|
};
|
|
221
|
-
var y = ({ state:
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
"data-state":
|
|
225
|
-
}),
|
|
226
|
-
"aria-expanded": `${
|
|
221
|
+
var y = ({ state: n, trigger: e, popper: t }) => {
|
|
222
|
+
const i = n === "open";
|
|
223
|
+
z(t, {
|
|
224
|
+
"data-state": n
|
|
225
|
+
}), z(e, {
|
|
226
|
+
"aria-expanded": `${i}`
|
|
227
227
|
});
|
|
228
228
|
};
|
|
229
|
-
var
|
|
229
|
+
var me = class {
|
|
230
230
|
/**
|
|
231
231
|
* Creates an instance of CreateOverlay
|
|
232
232
|
* @param {Object} params - The initialization parameters
|
|
@@ -234,8 +234,8 @@ 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:
|
|
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" ?
|
|
237
|
+
constructor({ trigger: e, content: t, options: i = {} }) {
|
|
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" ? he(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) => {
|
|
241
241
|
s.preventDefault(), this.triggerStrategy !== "hover" && s.key === "Escape" && this.contentElement.getAttribute("data-state") === "open" && (this.preventFromCloseOutside || this.hide());
|
|
@@ -281,7 +281,7 @@ var ce = class {
|
|
|
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 = i, 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 oe(
|
|
285
285
|
this.triggerElement,
|
|
286
286
|
this.contentElement,
|
|
287
287
|
{
|
|
@@ -292,39 +292,39 @@ var ce = class {
|
|
|
292
292
|
), this.initInstance();
|
|
293
293
|
}
|
|
294
294
|
onToggleState(e) {
|
|
295
|
-
var t,
|
|
296
|
-
(
|
|
295
|
+
var t, i;
|
|
296
|
+
(i = (t = this.options).onToggle) == null || i.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, i, 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), (r = (
|
|
308
|
+
}), this.onToggleState(false), (r = (i = this.options).onShow) == null || r.call(i);
|
|
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,
|
|
315
|
+
var e, t, i;
|
|
316
316
|
let r = false;
|
|
317
|
-
|
|
317
|
+
pe(this.contentElement, "before-hide", {
|
|
318
318
|
setExitAction: (o) => {
|
|
319
319
|
r = o;
|
|
320
320
|
}
|
|
321
321
|
});
|
|
322
|
-
const s = (
|
|
322
|
+
const s = (i = (t = (e = this.options).beforeHide) == null ? void 0 : t.call(e)) == null ? void 0 : i.cancelAction;
|
|
323
323
|
r || s || (y({
|
|
324
324
|
state: "close",
|
|
325
325
|
popper: this.contentElement,
|
|
326
326
|
trigger: this.triggerElement
|
|
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)),
|
|
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)), ce({
|
|
328
328
|
element: this.contentElement,
|
|
329
329
|
callback: () => {
|
|
330
330
|
var o, l;
|
|
@@ -344,12 +344,12 @@ 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
|
|
351
|
-
let
|
|
352
|
-
const r =
|
|
347
|
+
var P = (n, e = document.body) => e.querySelector(n);
|
|
348
|
+
var S = (n, e = document.body) => Array.from(e.querySelectorAll(n));
|
|
349
|
+
var ge = (n) => typeof n == "string" ? P(n) : n;
|
|
350
|
+
var fe = ({ containerElement: n, targetChildren: e = "a:not([disabled]), button:not([disabled])", direction: t }) => {
|
|
351
|
+
let i = false;
|
|
352
|
+
const r = ge(n) || document.body, s = typeof e == "string" ? S(e, r) : e, o = (l) => {
|
|
353
353
|
if (l.preventDefault(), r.focus(), s.length === 0)
|
|
354
354
|
return;
|
|
355
355
|
const m = l.key, c = document.activeElement;
|
|
@@ -383,72 +383,100 @@ var me = ({ containerElement: i, targetChildren: e = "a:not([disabled]), button:
|
|
|
383
383
|
};
|
|
384
384
|
return {
|
|
385
385
|
make: () => {
|
|
386
|
-
|
|
386
|
+
i || (document.addEventListener("keydown", o), i = true);
|
|
387
387
|
},
|
|
388
388
|
destroy: () => {
|
|
389
|
-
|
|
389
|
+
i && (document.removeEventListener("keydown", o), i = false);
|
|
390
390
|
}
|
|
391
391
|
};
|
|
392
392
|
};
|
|
393
|
-
var K = (
|
|
394
|
-
const
|
|
395
|
-
|
|
393
|
+
var K = (n, e, t) => {
|
|
394
|
+
const i = new CustomEvent(e, { detail: t });
|
|
395
|
+
n.dispatchEvent(i);
|
|
396
396
|
};
|
|
397
|
-
function
|
|
398
|
-
|
|
397
|
+
function ue(n) {
|
|
398
|
+
const e = () => {
|
|
399
|
+
document.querySelector(
|
|
400
|
+
"[data-fx-component]:not([data-component-initialized])"
|
|
401
|
+
) ? requestAnimationFrame(e) : n();
|
|
402
|
+
};
|
|
403
|
+
e();
|
|
404
|
+
}
|
|
405
|
+
var U = "data-fx-teleport-root";
|
|
406
|
+
var F = "data-fx-teleported";
|
|
407
|
+
var ve = {
|
|
408
|
+
append: () => {
|
|
409
|
+
},
|
|
410
|
+
remove: () => {
|
|
411
|
+
},
|
|
412
|
+
restore: () => {
|
|
413
|
+
}
|
|
414
|
+
};
|
|
415
|
+
function Ee(n, e, t = "move") {
|
|
416
|
+
var i;
|
|
417
|
+
if (!(n instanceof HTMLElement))
|
|
399
418
|
throw new Error("Source element must be an HTMLElement");
|
|
400
419
|
if (!(e instanceof HTMLElement))
|
|
401
420
|
throw new Error("Target element must be an HTMLElement");
|
|
402
421
|
if (!["move", "detachable"].includes(t))
|
|
403
422
|
throw new Error(`Invalid teleport mode: ${t}. Must be "move" or "detachable".`);
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
423
|
+
if ((i = n.parentElement) != null && i.closest(`[${U}]`))
|
|
424
|
+
return ve;
|
|
425
|
+
n.setAttribute(U, "");
|
|
426
|
+
let r = document.createComment("teleporter-placeholder");
|
|
427
|
+
const s = n.parentNode;
|
|
428
|
+
return s && s.insertBefore(r, n), t === "move" ? (n.parentNode && (e.appendChild(n), n.setAttribute(F, "")), {
|
|
407
429
|
append() {
|
|
408
|
-
|
|
430
|
+
n.parentNode !== e && (e.appendChild(n), n.setAttribute(F, ""));
|
|
409
431
|
},
|
|
410
432
|
remove() {
|
|
411
|
-
|
|
433
|
+
r != null && r.parentNode && n.parentNode && r.parentNode.insertBefore(n, r);
|
|
412
434
|
},
|
|
413
435
|
restore() {
|
|
414
|
-
|
|
436
|
+
r != null && r.parentNode && n.parentNode !== s && r.parentNode.insertBefore(n, r);
|
|
415
437
|
}
|
|
416
|
-
}) : (
|
|
438
|
+
}) : (n.parentNode && (e.appendChild(n), n.setAttribute(F, "")), {
|
|
417
439
|
append() {
|
|
418
|
-
e.contains(
|
|
440
|
+
e.contains(n) || e.appendChild(n);
|
|
419
441
|
},
|
|
420
442
|
remove() {
|
|
421
|
-
|
|
443
|
+
n.parentNode && n.remove();
|
|
422
444
|
},
|
|
423
445
|
restore() {
|
|
424
|
-
|
|
446
|
+
r != null && r.parentNode && !n.parentNode && r.parentNode.insertBefore(n, r);
|
|
425
447
|
}
|
|
426
448
|
});
|
|
427
449
|
}
|
|
428
|
-
var
|
|
450
|
+
var O = class {
|
|
429
451
|
static initGlobalRegistry() {
|
|
430
452
|
window.$flexillaInstances || (window.$flexillaInstances = {});
|
|
431
453
|
}
|
|
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:
|
|
454
|
+
static register(e, t, i) {
|
|
455
|
+
return this.initGlobalRegistry(), window.$flexillaInstances[e] || (window.$flexillaInstances[e] = []), this.getInstance(e, t) || (window.$flexillaInstances[e].push({ element: t, instance: i }), i);
|
|
434
456
|
}
|
|
435
457
|
static getInstance(e, t) {
|
|
436
|
-
var
|
|
437
|
-
return this.initGlobalRegistry(), (r = (
|
|
458
|
+
var i, r;
|
|
459
|
+
return this.initGlobalRegistry(), (r = (i = window.$flexillaInstances[e]) == null ? void 0 : i.find(
|
|
438
460
|
(s) => s.element === t
|
|
439
461
|
)) == null ? void 0 : r.instance;
|
|
440
462
|
}
|
|
441
463
|
static removeInstance(e, t) {
|
|
442
464
|
this.initGlobalRegistry(), window.$flexillaInstances[e] && (window.$flexillaInstances[e] = window.$flexillaInstances[e].filter(
|
|
443
|
-
(
|
|
465
|
+
(i) => i.element !== t
|
|
444
466
|
));
|
|
445
467
|
}
|
|
468
|
+
static setup(e) {
|
|
469
|
+
e.setAttribute("data-fx-component", "fx");
|
|
470
|
+
}
|
|
471
|
+
static initialized(e) {
|
|
472
|
+
e.setAttribute("data-component-initialized", "initialized");
|
|
473
|
+
}
|
|
446
474
|
};
|
|
447
|
-
var
|
|
475
|
+
var we = {
|
|
448
476
|
teleport: true,
|
|
449
477
|
teleportMode: "move"
|
|
450
478
|
};
|
|
451
|
-
var
|
|
479
|
+
var k = class k2 {
|
|
452
480
|
/**
|
|
453
481
|
* Creates a new Dropdown instance
|
|
454
482
|
* @param dropdown - The dropdown content element or selector
|
|
@@ -476,9 +504,9 @@ var S = class S2 {
|
|
|
476
504
|
t2 === "add" ? (e2.setAttribute("data-current-subtrigger", ""), e2.setAttribute("data-focus", "active")) : (e2.removeAttribute("data-current-subtrigger"), e2.removeAttribute("data-focus"));
|
|
477
505
|
});
|
|
478
506
|
a(this, "updateObserverFor", (e2) => {
|
|
479
|
-
const t2 =
|
|
480
|
-
for (const
|
|
481
|
-
e2.observe(
|
|
507
|
+
const t2 = S("[data-dropdown-trigger]", this.contentElement);
|
|
508
|
+
for (const i2 of t2)
|
|
509
|
+
e2.observe(i2, {
|
|
482
510
|
attributes: true,
|
|
483
511
|
attributeFilter: ["aria-expanded"]
|
|
484
512
|
});
|
|
@@ -493,17 +521,19 @@ var S = class S2 {
|
|
|
493
521
|
this.subtriggerObserver = new MutationObserver((e2) => {
|
|
494
522
|
for (const t2 of e2)
|
|
495
523
|
if (t2.type === "attributes" && t2.attributeName === "aria-expanded") {
|
|
496
|
-
const
|
|
497
|
-
this.updateSubtriggerAttr(
|
|
524
|
+
const i2 = t2.target, r2 = i2.getAttribute("aria-expanded");
|
|
525
|
+
this.updateSubtriggerAttr(i2, r2 === "true" ? "add" : "remove");
|
|
498
526
|
}
|
|
499
527
|
}), this.updateObserverFor(this.subtriggerObserver);
|
|
500
528
|
});
|
|
501
529
|
a(this, "onToggle", ({ isHidden: e2 }) => {
|
|
502
|
-
var t2,
|
|
503
|
-
(
|
|
530
|
+
var t2, i2;
|
|
531
|
+
(i2 = (t2 = this.options).onToggle) == null || i2.call(t2, { isHidden: e2 });
|
|
504
532
|
});
|
|
505
533
|
a(this, "moveElOnInit", () => {
|
|
506
|
-
this.experimentalOptions.teleport && (
|
|
534
|
+
this.experimentalOptions.teleport && ue(() => {
|
|
535
|
+
this.experimentalOptions.teleportMode === "detachable" ? this.teleporter.remove() : this.teleporter.append();
|
|
536
|
+
});
|
|
507
537
|
});
|
|
508
538
|
a(this, "moveEl", () => {
|
|
509
539
|
this.experimentalOptions.teleport && this.experimentalOptions.teleportMode === "detachable" && this.teleporter.remove();
|
|
@@ -519,14 +549,14 @@ var S = class S2 {
|
|
|
519
549
|
});
|
|
520
550
|
a(this, "showHideOnArrow", (e2) => {
|
|
521
551
|
e2.preventDefault();
|
|
522
|
-
const t2 = e2.key,
|
|
523
|
-
if (
|
|
552
|
+
const t2 = e2.key, i2 = document.activeElement;
|
|
553
|
+
if (i2 != null && i2.hasAttribute("data-dropdown-trigger"))
|
|
524
554
|
switch (t2) {
|
|
525
555
|
case "ArrowRight":
|
|
526
|
-
|
|
556
|
+
i2.getAttribute("aria-expanded") !== "true" && (i2.click(), this.updateSubtriggerAttr(i2, "add"));
|
|
527
557
|
break;
|
|
528
558
|
case "ArrowLeft":
|
|
529
|
-
|
|
559
|
+
i2.getAttribute("aria-expanded") === "true" && (i2.click(), this.updateSubtriggerAttr(i2, "remove"));
|
|
530
560
|
break;
|
|
531
561
|
default:
|
|
532
562
|
return;
|
|
@@ -573,23 +603,24 @@ var S = class S2 {
|
|
|
573
603
|
this.keyObserver && this.keyObserver.disconnect(), this.subtriggerObserver && this.subtriggerObserver.disconnect();
|
|
574
604
|
});
|
|
575
605
|
a(this, "cleanup", () => {
|
|
576
|
-
this.disconnectObserver(), this.OverlayInstance.cleanup(),
|
|
606
|
+
this.disconnectObserver(), this.OverlayInstance.cleanup(), O.removeInstance("dropdown", this.contentElement);
|
|
577
607
|
});
|
|
578
|
-
const
|
|
579
|
-
if (!(
|
|
608
|
+
const i = typeof e == "string" ? P(e) : e;
|
|
609
|
+
if (!(i instanceof HTMLElement))
|
|
580
610
|
throw new Error(
|
|
581
611
|
"Invalid dropdown content element: Must provide either a valid HTMLElement or a selector string that resolves to an existing HTMLElement"
|
|
582
612
|
);
|
|
583
|
-
if (!
|
|
613
|
+
if (!i.id)
|
|
584
614
|
throw new Error("Dropdown content element must have an 'id' attribute for trigger association");
|
|
585
|
-
this.contentElement =
|
|
586
|
-
const r =
|
|
615
|
+
this.contentElement = i;
|
|
616
|
+
const r = O.getInstance("dropdown", this.contentElement);
|
|
587
617
|
if (r)
|
|
588
618
|
return r;
|
|
619
|
+
O.setup(this.contentElement);
|
|
589
620
|
const s = `[data-dropdown-trigger][data-dropdown-id=${this.contentElement.id}]`;
|
|
590
621
|
if (this.triggerElement = P(s), !(this.triggerElement instanceof HTMLElement))
|
|
591
622
|
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}"`);
|
|
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({},
|
|
623
|
+
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({}, we, t.experimental), this.teleporter = Ee(this.contentElement, document.body, this.experimentalOptions.teleportMode), this.OverlayInstance = new me({
|
|
593
624
|
trigger: this.triggerElement,
|
|
594
625
|
content: this.contentElement,
|
|
595
626
|
options: {
|
|
@@ -601,7 +632,7 @@ var S = class S2 {
|
|
|
601
632
|
defaultState: this.defaultState,
|
|
602
633
|
beforeShow: this.beforeShow,
|
|
603
634
|
beforeHide: () => {
|
|
604
|
-
if (
|
|
635
|
+
if (S("[data-dropdown-trigger][aria-expanded=true]", this.contentElement).length >= 1)
|
|
605
636
|
return { cancelAction: true };
|
|
606
637
|
this.beforeHide();
|
|
607
638
|
},
|
|
@@ -612,11 +643,11 @@ var S = class S2 {
|
|
|
612
643
|
},
|
|
613
644
|
popper: this.options.popper
|
|
614
645
|
}
|
|
615
|
-
}), this.moveElOnInit(), this.items =
|
|
646
|
+
}), this.moveElOnInit(), this.items = S("a:not([disabled]), button:not([disabled])", this.contentElement), this.navigationKeys = fe({
|
|
616
647
|
containerElement: this.contentElement,
|
|
617
648
|
targetChildren: this.items,
|
|
618
649
|
direction: "up-down"
|
|
619
|
-
}),
|
|
650
|
+
}), O.register("dropdown", this.contentElement, this), O.initialized(this.contentElement);
|
|
620
651
|
}
|
|
621
652
|
/**
|
|
622
653
|
* Initializes a single dropdown instance
|
|
@@ -625,20 +656,20 @@ var S = class S2 {
|
|
|
625
656
|
* @returns A new Dropdown instance
|
|
626
657
|
*/
|
|
627
658
|
static init(e, t = {}) {
|
|
628
|
-
new
|
|
659
|
+
new k2(e, t);
|
|
629
660
|
}
|
|
630
661
|
};
|
|
631
|
-
a(
|
|
632
|
-
const t =
|
|
633
|
-
for (const
|
|
634
|
-
new
|
|
662
|
+
a(k, "autoInit", (e = "[data-fx-dropdown]") => {
|
|
663
|
+
const t = S(e);
|
|
664
|
+
for (const i of t)
|
|
665
|
+
new k(i);
|
|
635
666
|
});
|
|
636
|
-
var
|
|
667
|
+
var B = k;
|
|
637
668
|
|
|
638
669
|
// src/index.js
|
|
639
670
|
function Dropdown(Alpine) {
|
|
640
671
|
Alpine.directive("dropdown", (el, {}, { cleanup }) => {
|
|
641
|
-
const dropdown_ = new
|
|
672
|
+
const dropdown_ = new B(el);
|
|
642
673
|
cleanup(() => {
|
|
643
674
|
dropdown_.cleanup();
|
|
644
675
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flexilla/alpine-dropdown",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "AlpineJS plugin for adding Dropdown functionality to your AlpineJS components",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"Flexilla"
|
|
61
61
|
],
|
|
62
62
|
"dependencies": {
|
|
63
|
-
"@flexilla/dropdown": "^2.2.
|
|
63
|
+
"@flexilla/dropdown": "^2.2.7"
|
|
64
64
|
},
|
|
65
|
-
"gitHead": "
|
|
65
|
+
"gitHead": "ae2c044692676906202ec6d8bb7a61a553c3bf74"
|
|
66
66
|
}
|