@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.cjs.js
CHANGED
|
@@ -24,17 +24,17 @@ __export(module_exports, {
|
|
|
24
24
|
module.exports = __toCommonJS(module_exports);
|
|
25
25
|
|
|
26
26
|
// ../../node_modules/@flexilla/dropdown/dist/dropdown.js
|
|
27
|
-
var
|
|
28
|
-
var
|
|
29
|
-
var a = (
|
|
30
|
-
var
|
|
31
|
-
var
|
|
32
|
-
var p = (
|
|
33
|
-
var
|
|
34
|
-
var
|
|
35
|
-
if (!
|
|
27
|
+
var q = Object.defineProperty;
|
|
28
|
+
var G = (n, e, t) => e in n ? q(n, e, { enumerable: true, configurable: true, writable: true, value: t }) : n[e] = t;
|
|
29
|
+
var a = (n, e, t) => G(n, typeof e != "symbol" ? e + "" : e, t);
|
|
30
|
+
var V = Object.defineProperty;
|
|
31
|
+
var X = (n, e, t) => e in n ? V(n, e, { enumerable: true, configurable: true, writable: true, value: t }) : n[e] = t;
|
|
32
|
+
var p = (n, e, t) => X(n, typeof e != "symbol" ? e + "" : e, t);
|
|
33
|
+
var Y = "bottom";
|
|
34
|
+
var J = ({ reference: n, popper: e }) => {
|
|
35
|
+
if (!n || !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(), i = (o) => (t.has(o) || t.set(o, o.getBoundingClientRect()), t.get(o)), r = i(e), s = i(n);
|
|
38
38
|
return {
|
|
39
39
|
popperHeight: r.height,
|
|
40
40
|
popperWidth: r.width,
|
|
@@ -45,25 +45,25 @@ var X = ({ reference: i, popper: e }) => {
|
|
|
45
45
|
refRight: s.right
|
|
46
46
|
};
|
|
47
47
|
};
|
|
48
|
-
var
|
|
49
|
-
const r = t, s =
|
|
50
|
-
return r >= (
|
|
48
|
+
var Q = (n, e, t, i) => {
|
|
49
|
+
const r = t, s = i - (t + e);
|
|
50
|
+
return r >= (n - e) / 2 && s >= (n - e) / 2;
|
|
51
51
|
};
|
|
52
|
-
var
|
|
53
|
-
var
|
|
54
|
-
var
|
|
55
|
-
var
|
|
56
|
-
var
|
|
57
|
-
const o = r - t - s, l = t -
|
|
58
|
-
return
|
|
52
|
+
var Z = (n, e, t, i) => (n - e) / 2 <= t && t + n / 2 + e / 2 <= i;
|
|
53
|
+
var _ = (n, e, t, i, r) => t > r - i ? e() ? window.innerHeight - r : t - r : n() ? 0 : t + i;
|
|
54
|
+
var ee = (n, e, t, i) => n <= i && t - n <= e;
|
|
55
|
+
var te = (n, e, t, i) => t <= i && -n <= e;
|
|
56
|
+
var ne = (n, e, t, i, r, s) => {
|
|
57
|
+
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;
|
|
58
|
+
return n() ? 0 : e() ? m : c;
|
|
59
59
|
};
|
|
60
|
-
var
|
|
61
|
-
var
|
|
62
|
-
var
|
|
63
|
-
placement:
|
|
60
|
+
var ie = (n, e, t, i) => n <= t && e - n - i >= n;
|
|
61
|
+
var se = (n, e) => n >= e;
|
|
62
|
+
var re = ({
|
|
63
|
+
placement: n,
|
|
64
64
|
refWidth: e,
|
|
65
65
|
refTop: t,
|
|
66
|
-
refLeft:
|
|
66
|
+
refLeft: i,
|
|
67
67
|
refHeight: r,
|
|
68
68
|
popperWidth: s,
|
|
69
69
|
popperHeight: o,
|
|
@@ -71,23 +71,23 @@ var ie = ({
|
|
|
71
71
|
windowWidth: m,
|
|
72
72
|
offsetDistance: c
|
|
73
73
|
}) => {
|
|
74
|
-
const d = m -
|
|
75
|
-
() =>
|
|
76
|
-
() =>
|
|
74
|
+
const d = m - i - e, f = i, E = l - t - r, g = t, w = () => _(
|
|
75
|
+
() => te(t, r, o, l),
|
|
76
|
+
() => ee(t, r, o, l),
|
|
77
77
|
t,
|
|
78
78
|
r,
|
|
79
79
|
o
|
|
80
|
-
), b = () =>
|
|
81
|
-
() =>
|
|
82
|
-
() =>
|
|
83
|
-
|
|
80
|
+
), b = () => ne(
|
|
81
|
+
() => ie(i, m, s, e),
|
|
82
|
+
() => se(i, s),
|
|
83
|
+
i,
|
|
84
84
|
s,
|
|
85
85
|
m,
|
|
86
86
|
e
|
|
87
|
-
), H = () =>
|
|
87
|
+
), 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();
|
|
88
88
|
let u = 0, v = 0;
|
|
89
|
-
const
|
|
90
|
-
switch (
|
|
89
|
+
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;
|
|
90
|
+
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) {
|
|
91
91
|
case "bottom":
|
|
92
92
|
case "bottom-middle":
|
|
93
93
|
case "top":
|
|
@@ -102,24 +102,24 @@ var ie = ({
|
|
|
102
102
|
break;
|
|
103
103
|
case "bottom-start":
|
|
104
104
|
case "top-start":
|
|
105
|
-
u =
|
|
105
|
+
u = C();
|
|
106
106
|
break;
|
|
107
107
|
case "bottom-end":
|
|
108
108
|
case "top-end":
|
|
109
|
-
u =
|
|
109
|
+
u = L();
|
|
110
110
|
break;
|
|
111
111
|
case "left-start":
|
|
112
112
|
case "right-start":
|
|
113
|
-
v =
|
|
113
|
+
v = x();
|
|
114
114
|
break;
|
|
115
115
|
case "left-end":
|
|
116
116
|
case "right-end":
|
|
117
|
-
v =
|
|
117
|
+
v = j();
|
|
118
118
|
break;
|
|
119
119
|
}
|
|
120
120
|
return { x: u, y: v };
|
|
121
121
|
};
|
|
122
|
-
var
|
|
122
|
+
var oe = class {
|
|
123
123
|
/**
|
|
124
124
|
* Flexilla Popper
|
|
125
125
|
* @param reference
|
|
@@ -138,7 +138,7 @@ 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,
|
|
141
|
+
constructor(e, t, i = {}) {
|
|
142
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");
|
|
@@ -153,11 +153,11 @@ var se = class {
|
|
|
153
153
|
}), p(this, "initPlacement", () => {
|
|
154
154
|
var d;
|
|
155
155
|
this.validateElements(), this.setInitialStyles();
|
|
156
|
-
const f = window.innerWidth, E = window.innerHeight, { popperHeight: g, popperWidth: w, refHeight: b, refWidth: H, refLeft: M, refTop:
|
|
156
|
+
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(
|
|
157
157
|
{
|
|
158
158
|
placement: this.placement,
|
|
159
159
|
refWidth: H,
|
|
160
|
-
refTop:
|
|
160
|
+
refTop: C,
|
|
161
161
|
refLeft: M,
|
|
162
162
|
popperWidth: w,
|
|
163
163
|
refHeight: b,
|
|
@@ -167,7 +167,7 @@ var se = class {
|
|
|
167
167
|
offsetDistance: this.offsetDistance
|
|
168
168
|
}
|
|
169
169
|
);
|
|
170
|
-
this.setPopperStyleProperty(
|
|
170
|
+
this.setPopperStyleProperty(L, x), (d = this.onUpdate) == null || d.call(this, { x: L, y: x, placement: this.placement });
|
|
171
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", () => {
|
|
@@ -181,15 +181,15 @@ var se = class {
|
|
|
181
181
|
});
|
|
182
182
|
const {
|
|
183
183
|
offsetDistance: r = 10,
|
|
184
|
-
placement: s =
|
|
184
|
+
placement: s = Y,
|
|
185
185
|
eventEffect: o = {},
|
|
186
186
|
onUpdate: l
|
|
187
|
-
} =
|
|
187
|
+
} = i;
|
|
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 (i.offsetDistance && typeof i.offsetDistance != "number")
|
|
193
193
|
throw new Error("OffsetDistance must be a number");
|
|
194
194
|
const { disableOnResize: m, disableOnScroll: c } = o;
|
|
195
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;
|
|
@@ -205,53 +205,53 @@ 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
|
|
212
|
-
var
|
|
213
|
-
for (const [t,
|
|
214
|
-
|
|
208
|
+
var ae = Object.defineProperty;
|
|
209
|
+
var le = (n, e, t) => e in n ? ae(n, e, { enumerable: true, configurable: true, writable: true, value: t }) : n[e] = t;
|
|
210
|
+
var h = (n, e, t) => le(n, typeof e != "symbol" ? e + "" : e, t);
|
|
211
|
+
var he = (n, e = document.body) => e.querySelector(n);
|
|
212
|
+
var z = (n, e) => {
|
|
213
|
+
for (const [t, i] of Object.entries(e))
|
|
214
|
+
n.setAttribute(t, i);
|
|
215
215
|
};
|
|
216
|
-
var
|
|
217
|
-
element:
|
|
216
|
+
var de = ({
|
|
217
|
+
element: n,
|
|
218
218
|
callback: e,
|
|
219
219
|
type: t,
|
|
220
|
-
keysCheck:
|
|
220
|
+
keysCheck: i
|
|
221
221
|
}) => {
|
|
222
|
-
const r = getComputedStyle(
|
|
223
|
-
if (s !== "none" && s !== "" && !
|
|
222
|
+
const r = getComputedStyle(n), s = r.transition;
|
|
223
|
+
if (s !== "none" && s !== "" && !i.includes(s)) {
|
|
224
224
|
const o = "transitionend", l = () => {
|
|
225
|
-
|
|
225
|
+
n.removeEventListener(o, l), e();
|
|
226
226
|
};
|
|
227
|
-
|
|
227
|
+
n.addEventListener(o, l, { once: true });
|
|
228
228
|
} else
|
|
229
229
|
e();
|
|
230
230
|
};
|
|
231
|
-
var
|
|
232
|
-
element:
|
|
231
|
+
var ce = ({
|
|
232
|
+
element: n,
|
|
233
233
|
callback: e
|
|
234
234
|
}) => {
|
|
235
|
-
|
|
236
|
-
element:
|
|
235
|
+
de({
|
|
236
|
+
element: n,
|
|
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 pe = (n, e, t) => {
|
|
243
|
+
const i = new CustomEvent(e, { detail: t });
|
|
244
|
+
n.dispatchEvent(i);
|
|
245
245
|
};
|
|
246
|
-
var y = ({ state:
|
|
247
|
-
const
|
|
248
|
-
|
|
249
|
-
"data-state":
|
|
250
|
-
}),
|
|
251
|
-
"aria-expanded": `${
|
|
246
|
+
var y = ({ state: n, trigger: e, popper: t }) => {
|
|
247
|
+
const i = n === "open";
|
|
248
|
+
z(t, {
|
|
249
|
+
"data-state": n
|
|
250
|
+
}), z(e, {
|
|
251
|
+
"aria-expanded": `${i}`
|
|
252
252
|
});
|
|
253
253
|
};
|
|
254
|
-
var
|
|
254
|
+
var me = class {
|
|
255
255
|
/**
|
|
256
256
|
* Creates an instance of CreateOverlay
|
|
257
257
|
* @param {Object} params - The initialization parameters
|
|
@@ -259,8 +259,8 @@ 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:
|
|
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" ?
|
|
262
|
+
constructor({ trigger: e, content: t, options: i = {} }) {
|
|
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" ? he(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) => {
|
|
266
266
|
s.preventDefault(), this.triggerStrategy !== "hover" && s.key === "Escape" && this.contentElement.getAttribute("data-state") === "open" && (this.preventFromCloseOutside || this.hide());
|
|
@@ -306,7 +306,7 @@ var ce = class {
|
|
|
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 = 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(
|
|
310
310
|
this.triggerElement,
|
|
311
311
|
this.contentElement,
|
|
312
312
|
{
|
|
@@ -317,39 +317,39 @@ var ce = class {
|
|
|
317
317
|
), this.initInstance();
|
|
318
318
|
}
|
|
319
319
|
onToggleState(e) {
|
|
320
|
-
var t,
|
|
321
|
-
(
|
|
320
|
+
var t, i;
|
|
321
|
+
(i = (t = this.options).onToggle) == null || i.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, i, 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), (r = (
|
|
333
|
+
}), this.onToggleState(false), (r = (i = this.options).onShow) == null || r.call(i);
|
|
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,
|
|
340
|
+
var e, t, i;
|
|
341
341
|
let r = false;
|
|
342
|
-
|
|
342
|
+
pe(this.contentElement, "before-hide", {
|
|
343
343
|
setExitAction: (o) => {
|
|
344
344
|
r = o;
|
|
345
345
|
}
|
|
346
346
|
});
|
|
347
|
-
const s = (
|
|
347
|
+
const s = (i = (t = (e = this.options).beforeHide) == null ? void 0 : t.call(e)) == null ? void 0 : i.cancelAction;
|
|
348
348
|
r || s || (y({
|
|
349
349
|
state: "close",
|
|
350
350
|
popper: this.contentElement,
|
|
351
351
|
trigger: this.triggerElement
|
|
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)),
|
|
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)), ce({
|
|
353
353
|
element: this.contentElement,
|
|
354
354
|
callback: () => {
|
|
355
355
|
var o, l;
|
|
@@ -369,12 +369,12 @@ 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
|
|
376
|
-
let
|
|
377
|
-
const r =
|
|
372
|
+
var P = (n, e = document.body) => e.querySelector(n);
|
|
373
|
+
var S = (n, e = document.body) => Array.from(e.querySelectorAll(n));
|
|
374
|
+
var ge = (n) => typeof n == "string" ? P(n) : n;
|
|
375
|
+
var fe = ({ containerElement: n, targetChildren: e = "a:not([disabled]), button:not([disabled])", direction: t }) => {
|
|
376
|
+
let i = false;
|
|
377
|
+
const r = ge(n) || document.body, s = typeof e == "string" ? S(e, r) : e, o = (l) => {
|
|
378
378
|
if (l.preventDefault(), r.focus(), s.length === 0)
|
|
379
379
|
return;
|
|
380
380
|
const m = l.key, c = document.activeElement;
|
|
@@ -408,72 +408,100 @@ var me = ({ containerElement: i, targetChildren: e = "a:not([disabled]), button:
|
|
|
408
408
|
};
|
|
409
409
|
return {
|
|
410
410
|
make: () => {
|
|
411
|
-
|
|
411
|
+
i || (document.addEventListener("keydown", o), i = true);
|
|
412
412
|
},
|
|
413
413
|
destroy: () => {
|
|
414
|
-
|
|
414
|
+
i && (document.removeEventListener("keydown", o), i = false);
|
|
415
415
|
}
|
|
416
416
|
};
|
|
417
417
|
};
|
|
418
|
-
var K = (
|
|
419
|
-
const
|
|
420
|
-
|
|
418
|
+
var K = (n, e, t) => {
|
|
419
|
+
const i = new CustomEvent(e, { detail: t });
|
|
420
|
+
n.dispatchEvent(i);
|
|
421
421
|
};
|
|
422
|
-
function
|
|
423
|
-
|
|
422
|
+
function ue(n) {
|
|
423
|
+
const e = () => {
|
|
424
|
+
document.querySelector(
|
|
425
|
+
"[data-fx-component]:not([data-component-initialized])"
|
|
426
|
+
) ? requestAnimationFrame(e) : n();
|
|
427
|
+
};
|
|
428
|
+
e();
|
|
429
|
+
}
|
|
430
|
+
var U = "data-fx-teleport-root";
|
|
431
|
+
var F = "data-fx-teleported";
|
|
432
|
+
var ve = {
|
|
433
|
+
append: () => {
|
|
434
|
+
},
|
|
435
|
+
remove: () => {
|
|
436
|
+
},
|
|
437
|
+
restore: () => {
|
|
438
|
+
}
|
|
439
|
+
};
|
|
440
|
+
function Ee(n, e, t = "move") {
|
|
441
|
+
var i;
|
|
442
|
+
if (!(n instanceof HTMLElement))
|
|
424
443
|
throw new Error("Source element must be an HTMLElement");
|
|
425
444
|
if (!(e instanceof HTMLElement))
|
|
426
445
|
throw new Error("Target element must be an HTMLElement");
|
|
427
446
|
if (!["move", "detachable"].includes(t))
|
|
428
447
|
throw new Error(`Invalid teleport mode: ${t}. Must be "move" or "detachable".`);
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
448
|
+
if ((i = n.parentElement) != null && i.closest(`[${U}]`))
|
|
449
|
+
return ve;
|
|
450
|
+
n.setAttribute(U, "");
|
|
451
|
+
let r = document.createComment("teleporter-placeholder");
|
|
452
|
+
const s = n.parentNode;
|
|
453
|
+
return s && s.insertBefore(r, n), t === "move" ? (n.parentNode && (e.appendChild(n), n.setAttribute(F, "")), {
|
|
432
454
|
append() {
|
|
433
|
-
|
|
455
|
+
n.parentNode !== e && (e.appendChild(n), n.setAttribute(F, ""));
|
|
434
456
|
},
|
|
435
457
|
remove() {
|
|
436
|
-
|
|
458
|
+
r != null && r.parentNode && n.parentNode && r.parentNode.insertBefore(n, r);
|
|
437
459
|
},
|
|
438
460
|
restore() {
|
|
439
|
-
|
|
461
|
+
r != null && r.parentNode && n.parentNode !== s && r.parentNode.insertBefore(n, r);
|
|
440
462
|
}
|
|
441
|
-
}) : (
|
|
463
|
+
}) : (n.parentNode && (e.appendChild(n), n.setAttribute(F, "")), {
|
|
442
464
|
append() {
|
|
443
|
-
e.contains(
|
|
465
|
+
e.contains(n) || e.appendChild(n);
|
|
444
466
|
},
|
|
445
467
|
remove() {
|
|
446
|
-
|
|
468
|
+
n.parentNode && n.remove();
|
|
447
469
|
},
|
|
448
470
|
restore() {
|
|
449
|
-
|
|
471
|
+
r != null && r.parentNode && !n.parentNode && r.parentNode.insertBefore(n, r);
|
|
450
472
|
}
|
|
451
473
|
});
|
|
452
474
|
}
|
|
453
|
-
var
|
|
475
|
+
var O = class {
|
|
454
476
|
static initGlobalRegistry() {
|
|
455
477
|
window.$flexillaInstances || (window.$flexillaInstances = {});
|
|
456
478
|
}
|
|
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:
|
|
479
|
+
static register(e, t, i) {
|
|
480
|
+
return this.initGlobalRegistry(), window.$flexillaInstances[e] || (window.$flexillaInstances[e] = []), this.getInstance(e, t) || (window.$flexillaInstances[e].push({ element: t, instance: i }), i);
|
|
459
481
|
}
|
|
460
482
|
static getInstance(e, t) {
|
|
461
|
-
var
|
|
462
|
-
return this.initGlobalRegistry(), (r = (
|
|
483
|
+
var i, r;
|
|
484
|
+
return this.initGlobalRegistry(), (r = (i = window.$flexillaInstances[e]) == null ? void 0 : i.find(
|
|
463
485
|
(s) => s.element === t
|
|
464
486
|
)) == null ? void 0 : r.instance;
|
|
465
487
|
}
|
|
466
488
|
static removeInstance(e, t) {
|
|
467
489
|
this.initGlobalRegistry(), window.$flexillaInstances[e] && (window.$flexillaInstances[e] = window.$flexillaInstances[e].filter(
|
|
468
|
-
(
|
|
490
|
+
(i) => i.element !== t
|
|
469
491
|
));
|
|
470
492
|
}
|
|
493
|
+
static setup(e) {
|
|
494
|
+
e.setAttribute("data-fx-component", "fx");
|
|
495
|
+
}
|
|
496
|
+
static initialized(e) {
|
|
497
|
+
e.setAttribute("data-component-initialized", "initialized");
|
|
498
|
+
}
|
|
471
499
|
};
|
|
472
|
-
var
|
|
500
|
+
var we = {
|
|
473
501
|
teleport: true,
|
|
474
502
|
teleportMode: "move"
|
|
475
503
|
};
|
|
476
|
-
var
|
|
504
|
+
var k = class k2 {
|
|
477
505
|
/**
|
|
478
506
|
* Creates a new Dropdown instance
|
|
479
507
|
* @param dropdown - The dropdown content element or selector
|
|
@@ -501,9 +529,9 @@ var S = class S2 {
|
|
|
501
529
|
t2 === "add" ? (e2.setAttribute("data-current-subtrigger", ""), e2.setAttribute("data-focus", "active")) : (e2.removeAttribute("data-current-subtrigger"), e2.removeAttribute("data-focus"));
|
|
502
530
|
});
|
|
503
531
|
a(this, "updateObserverFor", (e2) => {
|
|
504
|
-
const t2 =
|
|
505
|
-
for (const
|
|
506
|
-
e2.observe(
|
|
532
|
+
const t2 = S("[data-dropdown-trigger]", this.contentElement);
|
|
533
|
+
for (const i2 of t2)
|
|
534
|
+
e2.observe(i2, {
|
|
507
535
|
attributes: true,
|
|
508
536
|
attributeFilter: ["aria-expanded"]
|
|
509
537
|
});
|
|
@@ -518,17 +546,19 @@ var S = class S2 {
|
|
|
518
546
|
this.subtriggerObserver = new MutationObserver((e2) => {
|
|
519
547
|
for (const t2 of e2)
|
|
520
548
|
if (t2.type === "attributes" && t2.attributeName === "aria-expanded") {
|
|
521
|
-
const
|
|
522
|
-
this.updateSubtriggerAttr(
|
|
549
|
+
const i2 = t2.target, r2 = i2.getAttribute("aria-expanded");
|
|
550
|
+
this.updateSubtriggerAttr(i2, r2 === "true" ? "add" : "remove");
|
|
523
551
|
}
|
|
524
552
|
}), this.updateObserverFor(this.subtriggerObserver);
|
|
525
553
|
});
|
|
526
554
|
a(this, "onToggle", ({ isHidden: e2 }) => {
|
|
527
|
-
var t2,
|
|
528
|
-
(
|
|
555
|
+
var t2, i2;
|
|
556
|
+
(i2 = (t2 = this.options).onToggle) == null || i2.call(t2, { isHidden: e2 });
|
|
529
557
|
});
|
|
530
558
|
a(this, "moveElOnInit", () => {
|
|
531
|
-
this.experimentalOptions.teleport && (
|
|
559
|
+
this.experimentalOptions.teleport && ue(() => {
|
|
560
|
+
this.experimentalOptions.teleportMode === "detachable" ? this.teleporter.remove() : this.teleporter.append();
|
|
561
|
+
});
|
|
532
562
|
});
|
|
533
563
|
a(this, "moveEl", () => {
|
|
534
564
|
this.experimentalOptions.teleport && this.experimentalOptions.teleportMode === "detachable" && this.teleporter.remove();
|
|
@@ -544,14 +574,14 @@ var S = class S2 {
|
|
|
544
574
|
});
|
|
545
575
|
a(this, "showHideOnArrow", (e2) => {
|
|
546
576
|
e2.preventDefault();
|
|
547
|
-
const t2 = e2.key,
|
|
548
|
-
if (
|
|
577
|
+
const t2 = e2.key, i2 = document.activeElement;
|
|
578
|
+
if (i2 != null && i2.hasAttribute("data-dropdown-trigger"))
|
|
549
579
|
switch (t2) {
|
|
550
580
|
case "ArrowRight":
|
|
551
|
-
|
|
581
|
+
i2.getAttribute("aria-expanded") !== "true" && (i2.click(), this.updateSubtriggerAttr(i2, "add"));
|
|
552
582
|
break;
|
|
553
583
|
case "ArrowLeft":
|
|
554
|
-
|
|
584
|
+
i2.getAttribute("aria-expanded") === "true" && (i2.click(), this.updateSubtriggerAttr(i2, "remove"));
|
|
555
585
|
break;
|
|
556
586
|
default:
|
|
557
587
|
return;
|
|
@@ -598,23 +628,24 @@ var S = class S2 {
|
|
|
598
628
|
this.keyObserver && this.keyObserver.disconnect(), this.subtriggerObserver && this.subtriggerObserver.disconnect();
|
|
599
629
|
});
|
|
600
630
|
a(this, "cleanup", () => {
|
|
601
|
-
this.disconnectObserver(), this.OverlayInstance.cleanup(),
|
|
631
|
+
this.disconnectObserver(), this.OverlayInstance.cleanup(), O.removeInstance("dropdown", this.contentElement);
|
|
602
632
|
});
|
|
603
|
-
const
|
|
604
|
-
if (!(
|
|
633
|
+
const i = typeof e == "string" ? P(e) : e;
|
|
634
|
+
if (!(i instanceof HTMLElement))
|
|
605
635
|
throw new Error(
|
|
606
636
|
"Invalid dropdown content element: Must provide either a valid HTMLElement or a selector string that resolves to an existing HTMLElement"
|
|
607
637
|
);
|
|
608
|
-
if (!
|
|
638
|
+
if (!i.id)
|
|
609
639
|
throw new Error("Dropdown content element must have an 'id' attribute for trigger association");
|
|
610
|
-
this.contentElement =
|
|
611
|
-
const r =
|
|
640
|
+
this.contentElement = i;
|
|
641
|
+
const r = O.getInstance("dropdown", this.contentElement);
|
|
612
642
|
if (r)
|
|
613
643
|
return r;
|
|
644
|
+
O.setup(this.contentElement);
|
|
614
645
|
const s = `[data-dropdown-trigger][data-dropdown-id=${this.contentElement.id}]`;
|
|
615
646
|
if (this.triggerElement = P(s), !(this.triggerElement instanceof HTMLElement))
|
|
616
647
|
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}"`);
|
|
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({},
|
|
648
|
+
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({
|
|
618
649
|
trigger: this.triggerElement,
|
|
619
650
|
content: this.contentElement,
|
|
620
651
|
options: {
|
|
@@ -626,7 +657,7 @@ var S = class S2 {
|
|
|
626
657
|
defaultState: this.defaultState,
|
|
627
658
|
beforeShow: this.beforeShow,
|
|
628
659
|
beforeHide: () => {
|
|
629
|
-
if (
|
|
660
|
+
if (S("[data-dropdown-trigger][aria-expanded=true]", this.contentElement).length >= 1)
|
|
630
661
|
return { cancelAction: true };
|
|
631
662
|
this.beforeHide();
|
|
632
663
|
},
|
|
@@ -637,11 +668,11 @@ var S = class S2 {
|
|
|
637
668
|
},
|
|
638
669
|
popper: this.options.popper
|
|
639
670
|
}
|
|
640
|
-
}), this.moveElOnInit(), this.items =
|
|
671
|
+
}), this.moveElOnInit(), this.items = S("a:not([disabled]), button:not([disabled])", this.contentElement), this.navigationKeys = fe({
|
|
641
672
|
containerElement: this.contentElement,
|
|
642
673
|
targetChildren: this.items,
|
|
643
674
|
direction: "up-down"
|
|
644
|
-
}),
|
|
675
|
+
}), O.register("dropdown", this.contentElement, this), O.initialized(this.contentElement);
|
|
645
676
|
}
|
|
646
677
|
/**
|
|
647
678
|
* Initializes a single dropdown instance
|
|
@@ -650,20 +681,20 @@ var S = class S2 {
|
|
|
650
681
|
* @returns A new Dropdown instance
|
|
651
682
|
*/
|
|
652
683
|
static init(e, t = {}) {
|
|
653
|
-
new
|
|
684
|
+
new k2(e, t);
|
|
654
685
|
}
|
|
655
686
|
};
|
|
656
|
-
a(
|
|
657
|
-
const t =
|
|
658
|
-
for (const
|
|
659
|
-
new
|
|
687
|
+
a(k, "autoInit", (e = "[data-fx-dropdown]") => {
|
|
688
|
+
const t = S(e);
|
|
689
|
+
for (const i of t)
|
|
690
|
+
new k(i);
|
|
660
691
|
});
|
|
661
|
-
var
|
|
692
|
+
var B = k;
|
|
662
693
|
|
|
663
694
|
// src/index.js
|
|
664
695
|
function Dropdown(Alpine) {
|
|
665
696
|
Alpine.directive("dropdown", (el, {}, { cleanup }) => {
|
|
666
|
-
const dropdown_ = new
|
|
697
|
+
const dropdown_ = new B(el);
|
|
667
698
|
cleanup(() => {
|
|
668
699
|
dropdown_.cleanup();
|
|
669
700
|
});
|